Generate zone links

This commit is contained in:
Juan Wajnerman
2013-11-05 21:37:15 -03:00
parent 2acb3d49fc
commit 6b7b86c3ee

View File

@@ -3,26 +3,32 @@
-include("include/ezic.hrl").
generate() ->
{ok, Zones, Rules, _, _} = ezic_record:separate(ezic_loader:load()),
{ok, Zones, Rules, _, Links} = ezic_record:separate(ezic_loader:load()),
FlatZones = ezic_flatten:flatten(Zones, Rules),
filelib:ensure_dir("zones/"),
{ok, MapFile} = file:open("zones/ezic_zone_map.erl", [write]),
file:write(MapFile, "-module(ezic_zone_map).\n"),
file:write(MapFile, "-export([find/1]).\n"),
generate_files(FlatZones, MapFile, []),
generate_zones(FlatZones, MapFile, []),
generate_links(Links, MapFile),
file:write(MapFile, "find(Z) -> throw({zone_not_found, Z}).\n"),
file:close(MapFile),
ok.
generate_files([], MapFile, Files) ->
generate_links([], _) -> ok;
generate_links([#link{from = From, to = To} | Rest], MapFile) ->
file:write(MapFile, io_lib:format("find(~p) -> find(~p);\n", [To, From])),
generate_links(Rest, MapFile).
generate_zones([], MapFile, Files) ->
lists:foreach(fun({_, File}) ->
file:write(File, "]."),
file:close(File)
end, Files),
end, Files);
file:write(MapFile, "find(Z) -> throw({zone_not_found, Z}).\n"),
file:close(MapFile);
generate_files([FlatZone = #flatzone{tzname = Name} | Rest], MapFile, Files) ->
generate_zones([FlatZone = #flatzone{tzname = Name} | Rest], MapFile, Files) ->
{File, NewFiles} = case orddict:find(Name, Files) of
error ->
IO = create_file(Name, MapFile),
@@ -32,7 +38,7 @@ generate_files([FlatZone = #flatzone{tzname = Name} | Rest], MapFile, Files) ->
{IO, Files}
end,
file:write(File, io_lib:format("~1000p", [FlatZone])),
generate_files(Rest, MapFile, NewFiles).
generate_zones(Rest, MapFile, NewFiles).
create_file(ZoneName, MapFile) ->
io:format("Creating file for zone ~p~n", [ZoneName]),