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