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