private Maybe<String> copyVariableValue(Parser parser, Symbol next) { String fromVariableName = next.getContent(); if (!ScanString.isVariableName(fromVariableName)) return Maybe.noString; return parser.getVariableSource().findVariable(fromVariableName); }
private Maybe<String> copyVariableValue(Parser parser, Symbol next) { String fromVariableName = next.getContent(); if (!ScanString.isVariableName(fromVariableName)) return Maybe.noString; return parser.getVariableSource().findVariable(fromVariableName); }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { Maybe<String> name = parser.parseToAsString(SymbolType.CloseBrace); if (name.isNothing() || name.getValue().isEmpty()) return Symbol.nothing; String variableName = name.getValue(); if (!ScanString.isVariableName(variableName)) return Symbol.nothing; current.add(variableName); Maybe<String> variableValue = parser.getVariableSource().findVariable(variableName); if (variableValue.isNothing()) { current.add(new Symbol(SymbolType.Meta).add("undefined variable: " + variableName)); } else { Symbol variableValueSymbol = parser.parseWithParent(variableValue.getValue(), null); current.add(variableValueSymbol); } return new Maybe<>(current); }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { Maybe<String> name = parser.parseToAsString(SymbolType.CloseBrace); if (name.isNothing() || name.getValue().isEmpty()) return Symbol.nothing; String variableName = name.getValue(); if (!ScanString.isVariableName(variableName)) return Symbol.nothing; current.add(variableName); Maybe<String> variableValue = parser.getVariableSource().findVariable(variableName); if (variableValue.isNothing()) { current.add(new Symbol(SymbolType.Meta).add("undefined variable: " + variableName)); } else { Symbol variableValueSymbol = parser.parseWithParent(variableValue.getValue(), null); current.add(variableValueSymbol); } return new Maybe<>(current); }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { if (!parser.isMoveNext(SymbolType.Whitespace)) return Symbol.nothing; Maybe<String> name = parser.parseToAsString(SymbolType.Whitespace); if (name.isNothing()) return Symbol.nothing; String variableName = name.getValue(); if (!ScanString.isVariableName(variableName)) return Symbol.nothing; Symbol next = parser.moveNext(1); Maybe<String> valueString = (next.isType(SymbolType.Text)) ? copyVariableValue(parser, next) : parseVariableValue(parser, next); if (valueString.isNothing()) return Symbol.nothing; String variableValue = valueString.getValue(); parser.getPage().putVariable(variableName, variableValue); return new Maybe<>(current.add(variableName).add(variableValue)); }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { if (!parser.isMoveNext(SymbolType.Whitespace)) return Symbol.nothing; Maybe<String> name = parser.parseToAsString(SymbolType.Whitespace); if (name.isNothing()) return Symbol.nothing; String variableName = name.getValue(); if (!ScanString.isVariableName(variableName)) return Symbol.nothing; Symbol next = parser.moveNext(1); Maybe<String> valueString = (next.isType(SymbolType.Text)) ? copyVariableValue(parser, next) : parseVariableValue(parser, next); if (valueString.isNothing()) return Symbol.nothing; String variableValue = valueString.getValue(); parser.getPage().putVariable(variableName, variableValue); return new Maybe<>(current.add(variableName).add(variableValue)); }