public Rule TableDivider(Var<TableNode> tableNode) { Var<Boolean> pipeSeen = new Var<Boolean>(Boolean.FALSE); return Sequence( Optional('|', pipeSeen.set(Boolean.TRUE)), OneOrMore(TableColumn(tableNode, pipeSeen)), pipeSeen.get() || tableNode.get().hasTwoOrMoreDividers(), Sp(), Newline() ); }
return Sequence( push(getContext().getCurrentIndex()), FirstOf(CrossedOut(BlankLine(), block), tight.set(true)), CrossedOut(itemStart, block), Optional(CrossedOut(Sequence(FirstOf(Sequence("[ ]", taskType.set(1)), Sequence(FirstOf("[x]","[X]"), taskType.set(2))), OneOrMore(Spacechar())), taskListMarker)), block.append(taskListMarker.getString()), Line(block), FirstOf(Sequence(Test(BlankLine()), tight.set(false)), tight.set(true)), ListItemIndentedBlocks(block),
public Rule TableRow() { Var<Boolean> leadingPipe = new Var<Boolean>(Boolean.FALSE); return NodeSequence( push(new TableRowNode()), Optional('|', leadingPipe.set(Boolean.TRUE)), OneOrMore(TableCell(), addAsChild()), leadingPipe.get() || ((Node) peek()).getChildren().size() > 1 || getContext().getInputBuffer().charAt(matchEnd() - 1) == '|', Sp(), Newline() ); }
@Cached public Rule CodeFence(Var<Integer> markerLength) { return Sequence( FirstOf(NOrMore('~', 3), NOrMore('`', 3)), (markerLength.isSet() && matchLength() == markerLength.get()) || (markerLength.isNotSet() && markerLength.set(matchLength())), Sp(), ZeroOrMore(TestNot(Newline()), ANY), // GFM code type identifier push(match()), Newline() ); }
public Rule TableColumn(Var<TableNode> tableNode, Var<Boolean> pipeSeen) { Var<TableColumnNode> node = new Var<TableColumnNode>(new TableColumnNode()); return Sequence( NodeSequence( push(node.get()), Sp(), Optional(':', node.get().markLeftAligned()), Sp(), OneOrMore('-'), Sp(), Optional(':', node.get().markRightAligned()), Sp(), Optional('|', pipeSeen.set(Boolean.TRUE)) ), tableNode.get().addColumn((TableColumnNode) pop()) ); }
/** * Exits a frame previously entered with {@link #enterFrame()}. * Normally you do not have to call this method manually as parboiled provides for automatic Var frame management. * * @return true */ public boolean exitFrame() { if (--level > 0) { set(stack.removeLast()); } return true; }
/** * Provides a new frame for the variable. * Potentially existing previous frames are saved. * Normally you do not have to call this method manually as parboiled provides for automatic Var frame management. * * @return true */ public boolean enterFrame() { if (level++ > 0) { if (stack == null) stack = new LinkedList<T>(); stack.add(get()); } return set(initialValueFactory.create()); }
@Label("string") Rule string(final Var<Object> value) { return Sequence(stringLiteral(), value.set(match().replace("\\\"", "\""))); }
@MemoMismatches Rule integer(final Var<Object> var) { return Sequence(OneOrMore(digit()), var.set(Integer.parseInt(match()))); }
@MemoMismatches @Label("boolean") Rule bool(final Var<Object> var) { return Sequence(FirstOf(String("true"), String("false")), var.set(Boolean.valueOf(match()))); }
Rule alias(Var<String> alias) { return Sequence(space(), icAS, space(), field(), alias.set(match())); }
@Label("parameter::hash") @MemoMismatches Rule param(final Var<Object> value) { return FirstOf( string(value), integer(value), bool(value), Sequence(qualifiedId(), value.set(match()))); }
@Label("variable") Rule varName(final Type type) { final List<Object> params = new ArrayList<Object>(); final Map<String, Object> hash = new LinkedHashMap<String, Object>(); final Var<Token> var = new Var<Token>(); return Sequence( var.set(new Token()), var.get().position(position()), qualifiedId(), var.get().text(match()), spacing(), reset(params), reset(hash), paramOrHash(params, hash), add(new Variable(handlebars, var.get().text, type, params, hash) .filename(filename).position(var.get().position.line, var.get().position.column))); }
/** * Rate generator definition. * * @return rate generator definition rule. */ public Rule rateGenerator() { Var<Character> op = new Var<>(); return Sequence(term(), ZeroOrMore(ZeroOrMore(whitespace()), FirstOf("+", "-"), op.set(matchedChar()), ZeroOrMore(whitespace()), term(), push(createAdditionOrSubtractionRateGenerator(op.get())))); }
/** * Term definition. * * @return Term definition rule. */ public Rule term() { Var<Character> op = new Var<>(); return Sequence(factor(), ZeroOrMore(ZeroOrMore(whitespace()), FirstOf("*", "/"), op.set(matchedChar()), ZeroOrMore(whitespace()), factor(), push(createMultiplicationOrDivisionRateGenerator(op.get())))); }
/** * Term definition. * * @return Term definition rule. */ public Rule term() { Var<Character> op = new Var<>(); return Sequence(factor(), ZeroOrMore(ZeroOrMore(whitespace()), FirstOf("*", "/"), op.set(matchedChar()), ZeroOrMore(whitespace()), factor(), push(createMultiplicationOrDivisionRateGenerator(op.get())))); }
/** * Rate generator definition. * * @return rate generator definition rule. */ public Rule rateGenerator() { Var<Character> op = new Var<>(); return Sequence(term(), ZeroOrMore(ZeroOrMore(whitespace()), FirstOf("+", "-"), op.set(matchedChar()), ZeroOrMore(whitespace()), term(), push(createAdditionOrSubtractionRateGenerator(op.get())))); }