private Maybe<String> parseVariableValue(Parser parser, Symbol next) { SymbolType close = next.getType().closeType(); if (close == SymbolType.Empty) return Maybe.noString; return parser.parseToAsString(close); }
private Maybe<String> parseVariableValue(Parser parser, Symbol next) { SymbolType close = next.getType().closeType(); if (close == SymbolType.Empty) return Maybe.noString; return parser.parseToAsString(close); }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { List<Symbol> lookAhead = parser.peek(new SymbolType[] {SymbolType.Whitespace, SymbolType.DateFormatOption}); if (!lookAhead.isEmpty()) { String option = lookAhead.get(1).getContent(); if (isDateFormatOption(option)) { current.putProperty(Today.Format, option); parser.moveNext(2); } } else { lookAhead = parser.peek(new SymbolType[] {SymbolType.Whitespace, SymbolType.OpenParenthesis}); if (!lookAhead.isEmpty()) { parser.moveNext(2); Maybe<String> format = parser.parseToAsString(SymbolType.CloseParenthesis); if (format.isNothing()) return Symbol.nothing; current.putProperty(Format, format.getValue()); } } lookAhead = parser.peek(new SymbolType[] {SymbolType.Whitespace, SymbolType.Delta}); if (!lookAhead.isEmpty()) { String increment = lookAhead.get(1).getContent(); current.putProperty(Increment, increment); parser.moveNext(2); } return new Maybe<>(current); }
@Override public Maybe<Symbol> parse(Symbol current, Parser parser) { List<Symbol> lookAhead = parser.peek(new SymbolType[] {SymbolType.Whitespace, SymbolType.DateFormatOption}); if (!lookAhead.isEmpty()) { String option = lookAhead.get(1).getContent(); if (isDateFormatOption(option)) { current.putProperty(Today.Format, option); parser.moveNext(2); } } else { lookAhead = parser.peek(new SymbolType[] {SymbolType.Whitespace, SymbolType.OpenParenthesis}); if (!lookAhead.isEmpty()) { parser.moveNext(2); Maybe<String> format = parser.parseToAsString(SymbolType.CloseParenthesis); if (format.isNothing()) return Symbol.nothing; current.putProperty(Format, format.getValue()); } } lookAhead = parser.peek(new SymbolType[] {SymbolType.Whitespace, SymbolType.Delta}); if (!lookAhead.isEmpty()) { String increment = lookAhead.get(1).getContent(); current.putProperty(Increment, increment); parser.moveNext(2); } 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) { 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)); }