Add legacy output for itinero1.0 formats

This commit is contained in:
Pieter Vander Vennet 2021-03-08 13:52:29 +01:00
parent a98e1c4738
commit 6a70c4bc52
9 changed files with 39 additions and 28 deletions

View file

@ -22,7 +22,7 @@ namespace AspectedRouting.Test
}
);
var luaPrinter = new LuaSkeleton(new Context());
var luaPrinter = new LuaSkeleton(new Context(), false);
var result = luaPrinter.MappingToLua(mapping);
Assert.Equal(
@ -45,7 +45,7 @@ namespace AspectedRouting.Test
)
}
);
var luaPrinter = new LuaSkeleton(new Context());
var luaPrinter = new LuaSkeleton(new Context(), false);
var result = luaPrinter.MappingToLua(mapping);
Assert.Equal("{\n a = {\n b = 42\n }\n}", result);
}

View file

@ -15,7 +15,7 @@ namespace AspectedRouting.Test.Snippets
public void DefaultSnippet_SimpleDefault_GetsLua()
{
var gen = new DefaultSnippet();
var lua = new LuaSkeleton(new Context());
var lua = new LuaSkeleton(new Context(), true);
var code = gen.Convert(lua, "result", new List<IExpression> {
new Constant("the_default_value"),
Funcs.Id,
@ -29,7 +29,7 @@ namespace AspectedRouting.Test.Snippets
public void FirstOfSnippet_SimpleFirstOf_GetLua()
{
var gen = new FirstMatchOfSnippet();
var lua = new LuaSkeleton(new Context());
var lua = new LuaSkeleton(new Context(), true);
// FirstMatchOf: [a] -> (Tags -> [a]) -> Tags -> a
@ -77,7 +77,7 @@ namespace AspectedRouting.Test.Snippets
}
);
var gen = new SimpleMappingSnippet(mapping);
var code = gen.Convert(new LuaSkeleton(new Context()), "result", new List<IExpression> {
var code = gen.Convert(new LuaSkeleton(new Context(), true), "result", new List<IExpression> {
new LuaLiteral(Typs.String, "tags.oneway")
});
@ -96,7 +96,7 @@ namespace AspectedRouting.Test.Snippets
);
var code = gen.Convert(new LuaSkeleton(new Context()),
var code = gen.Convert(new LuaSkeleton(new Context(), true),
"result", new List<IExpression>()
);

View file

@ -57,7 +57,7 @@ namespace AspectedRouting.IO.LuaSkeleton
).Invoke(bare))
{
AddDep("memberOf");
return "member_of(funcName, parameters, tags, result)";
return "memberOf(funcName, parameters, tags, result)";
}

View file

@ -10,11 +10,9 @@ namespace AspectedRouting.IO.LuaSkeleton
{
public partial class LuaSkeleton
{
public void AddFunction(AspectMetadata meta)
{
if (_alreadyAddedFunctions.Contains(meta.Name))
{
if (_alreadyAddedFunctions.Contains(meta.Name)) {
// already added
return;
}
@ -29,10 +27,8 @@ namespace AspectedRouting.IO.LuaSkeleton
var funcNameDeclaration = "";
meta.Visit(e =>
{
if (e is Function f && f.Name.Equals(Funcs.MemberOf.Name))
{
meta.Visit(e => {
if (e is Function f && f.Name.Equals(Funcs.MemberOf.Name)) {
funcNameDeclaration = $"\n local funcName = \"{meta.Name.AsLuaIdentifier()}\"";
}
@ -40,13 +36,28 @@ namespace AspectedRouting.IO.LuaSkeleton
});
var expression = meta.ExpressionImplementation;
if (expression.Types.First() is Curry c) {
expression = expression.Apply(new LuaLiteral(Typs.Tags, "tags"));
}
var ctx = Context;
this._context = _context.WithAspectName(meta.Name);
var impl = string.Join("\n",
_context = _context.WithAspectName(meta.Name);
var body = "";
if (_useSnippets) {
if (expression.Types.First() is Curry c) {
expression = expression.Apply(new LuaLiteral(Typs.Tags, "tags"));
}
body = Utils.Lines(
" local r = nil",
" " + Snippets.Convert(this, "r", expression).Indent(),
" return r"
);
}
else {
body = " return " + ToLua(expression);
}
var impl = Utils.Lines(
"--[[",
meta.Description,
"",
@ -59,13 +70,11 @@ namespace AspectedRouting.IO.LuaSkeleton
"Returns values: ",
"]]",
"function " + meta.Name.AsLuaIdentifier() + "(parameters, tags, result)" + funcNameDeclaration,
" local r = nil",
" "+Snippets.Convert(this, "r", expression).Indent(),
" return r" ,
body,
"end"
);
this._context = ctx;
_context = ctx;
_functionImplementations.Add(impl);
}
}

View file

@ -18,6 +18,7 @@ namespace AspectedRouting.IO.LuaSkeleton
private readonly List<string> _constants = new List<string>();
private Context _context;
private readonly bool _useSnippets;
private readonly HashSet<string> _dependencies = new HashSet<string>();
private readonly List<string> _functionImplementations = new List<string>();
@ -32,9 +33,10 @@ namespace AspectedRouting.IO.LuaSkeleton
public Context Context => _context;
public LuaSkeleton(Context context, bool staticTables = false)
public LuaSkeleton(Context context, bool useSnippets, bool staticTables = false)
{
_context = context;
_useSnippets = useSnippets;
_staticTables = staticTables;
}

View file

@ -68,7 +68,7 @@ namespace AspectedRouting.IO.itinero1
func.Add(" end");
if (usedParameters.Count() == 0)
if (!usedParameters.Any())
{
// Every behaviour uses the default parameters for this one
func.Add(" -- No parameter dependence for aspect " + calledInFunction);

View file

@ -26,7 +26,7 @@ namespace AspectedRouting.IO.itinero1
_context = context;
_aspectTestSuites = aspectTestSuites;
_profileTests = profileTests;
_skeleton = new LuaSkeleton.LuaSkeleton(context);
_skeleton = new LuaSkeleton.LuaSkeleton(context, false);
_parameterPrinter = new LuaParameterPrinter(profile, _skeleton);
}

View file

@ -40,7 +40,7 @@ namespace AspectedRouting.IO.itinero2
List<AspectTestSuite> aspectTests, IEnumerable<BehaviourTestSuite> behaviourTestSuite,
DateTime lastChangeTime)
{
_skeleton = new LuaSkeleton.LuaSkeleton(context, false);
_skeleton = new LuaSkeleton.LuaSkeleton(context, true);
_profile = profile;
_behaviourName = behaviourName;
_context = context;

View file

@ -1,6 +1,6 @@
function memberOf(calledIn, parameters, tags, result)
local k = "_relation:" .. calledIn
-- This tag is conventiently setup by all the preprocessors, which take the parameters into account
-- This tag is conveniently setup by all the preprocessors, which take the parameters into account
local doesMatch = tags[k]
if (doesMatch == "yes") then
result.attributes_to_keep[k] = "yes"