Generate zone links
This commit is contained in:
@@ -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]),
|
||||
|
||||
Reference in New Issue
Block a user