Search in sources :

Example 1 with ActionReader

use of uk.me.parabola.mkgmap.osmstyle.actions.ActionReader in project mkgmap by openstreetmap.

the class RuleFileReader method loadFile.

/**
 * Load a rules file.  This should be used when calling recursively when including
 * files.
 */
private void loadFile(StyleFileLoader loader, String name) throws FileNotFoundException {
    Reader r = loader.open(name);
    TokenScanner scanner = new TokenScanner(name, r);
    scanner.setExtraWordChars("-:.");
    ExpressionReader expressionReader = new ExpressionReader(scanner, kind);
    ActionReader actionReader = new ActionReader(scanner);
    // Read all the rules in the file.
    scanner.skipSpace();
    while (!scanner.isEndOfFile()) {
        if (checkCommand(loader, scanner, expressionReader))
            continue;
        if (scanner.isEndOfFile())
            break;
        Op expr = expressionReader.readConditions(ifStack);
        expr = arranger.arrange(expr);
        ActionList actionList = actionReader.readActions();
        checkIfStack(actionList);
        if (performChecks && this.kind == FeatureKind.RELATION) {
            String actionsString = actionList.getList().toString();
            if (actionsString.contains("set mkgmap:stylefilter") || actionsString.contains("add mkgmap:stylefilter")) {
                log.error("Style file", name, "should not set or add the special tag mkgmap:stylefilter:", actionsString);
            }
        }
        List<GType> types = new ArrayList<>();
        while (scanner.checkToken("[")) {
            GType type = typeReader.readType(scanner, performChecks, overlays);
            types.add(type);
            scanner.skipSpace();
        }
        // If there is an action list, then we don't need a type
        if (types.isEmpty() && actionList.isEmpty())
            throw new SyntaxException(scanner, "No type definition given");
        if (types.isEmpty())
            saveRule(scanner, expr, actionList, null);
        if (types.size() >= 2 && actionList.isModifyingTags()) {
            throw new SyntaxException(scanner, "Combination of multiple type definitions with tag modifying action is not yet supported.");
        }
        for (int i = 0; i < types.size(); i++) {
            GType type = types.get(i);
            if (i + 1 < types.size()) {
                type.setContinueSearch(true);
            }
            // No need to create a deep copy of expr
            saveRule(scanner, expr, actionList, type);
            actionList = new ActionList(Collections.emptyList(), Collections.emptySet());
        }
    }
    rules.addUsedTags(expressionReader.getUsedTags());
    rules.addUsedTags(actionReader.getUsedTags());
}
Also used : Op(uk.me.parabola.mkgmap.osmstyle.eval.Op) ValueOp(uk.me.parabola.mkgmap.osmstyle.eval.ValueOp) EqualsOp(uk.me.parabola.mkgmap.osmstyle.eval.EqualsOp) NotOp(uk.me.parabola.mkgmap.osmstyle.eval.NotOp) GType(uk.me.parabola.mkgmap.reader.osm.GType) TokenScanner(uk.me.parabola.mkgmap.scan.TokenScanner) ActionReader(uk.me.parabola.mkgmap.osmstyle.actions.ActionReader) SyntaxException(uk.me.parabola.mkgmap.scan.SyntaxException) ArrayList(java.util.ArrayList) ActionReader(uk.me.parabola.mkgmap.osmstyle.actions.ActionReader) Reader(java.io.Reader) ExpressionReader(uk.me.parabola.mkgmap.osmstyle.eval.ExpressionReader) ActionList(uk.me.parabola.mkgmap.osmstyle.actions.ActionList) ExpressionReader(uk.me.parabola.mkgmap.osmstyle.eval.ExpressionReader)

Example 2 with ActionReader

use of uk.me.parabola.mkgmap.osmstyle.actions.ActionReader in project mkgmap by openstreetmap.

the class ActionReaderTest method readActionsFromString.

/**
 * Read a action list from a string.
 */
private List<Action> readActionsFromString(String in) {
    Reader sr = new StringReader(in);
    TokenScanner ts = new TokenScanner("string", sr);
    ActionReader ar = new ActionReader(ts);
    return ar.readActions().getList();
}
Also used : TokenScanner(uk.me.parabola.mkgmap.scan.TokenScanner) ActionReader(uk.me.parabola.mkgmap.osmstyle.actions.ActionReader) StringReader(java.io.StringReader) Reader(java.io.Reader) ActionReader(uk.me.parabola.mkgmap.osmstyle.actions.ActionReader) StringReader(java.io.StringReader)

Aggregations

Reader (java.io.Reader)2 ActionReader (uk.me.parabola.mkgmap.osmstyle.actions.ActionReader)2 TokenScanner (uk.me.parabola.mkgmap.scan.TokenScanner)2 StringReader (java.io.StringReader)1 ArrayList (java.util.ArrayList)1 ActionList (uk.me.parabola.mkgmap.osmstyle.actions.ActionList)1 EqualsOp (uk.me.parabola.mkgmap.osmstyle.eval.EqualsOp)1 ExpressionReader (uk.me.parabola.mkgmap.osmstyle.eval.ExpressionReader)1 NotOp (uk.me.parabola.mkgmap.osmstyle.eval.NotOp)1 Op (uk.me.parabola.mkgmap.osmstyle.eval.Op)1 ValueOp (uk.me.parabola.mkgmap.osmstyle.eval.ValueOp)1 GType (uk.me.parabola.mkgmap.reader.osm.GType)1 SyntaxException (uk.me.parabola.mkgmap.scan.SyntaxException)1