@Override public void run() { main: while (!siblingList.isEmpty()) { final Pair<PsiBuilder.Marker, PsiBuilder.Marker> parenPair = parenList.peek(); final int rating = siblingList.getFirst().second; int count = 0; for (Pair<PsiBuilder.Marker, Integer> pair : siblingList) { if (pair.second != rating || parenPair != null && pair.first == parenPair.second) break main; if (++count >= MAX_CHILDREN_IN_TREE) { PsiBuilder.Marker parentMarker = pair.first.precede(); parentMarker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, null); while (count-- > 0) { siblingList.removeFirst(); } parentMarker.done(chunkType); siblingList.addFirst(Pair.create(parentMarker, rating + 1)); continue main; } } break; } } };
LighterASTNode doneMarker = builder.rawLookup(tokenIdx) == state.braces[0].getLeftBraceType() ? builder.getLatestDoneMarker() : null; if (doneMarker != null && doneMarker.getStartOffset() == builder.rawTokenTypeStart(tokenIdx) && doneMarker.getTokenType() == TokenType.ERROR_ELEMENT) { parenList.add(Pair.create(((PsiBuilder.Marker)doneMarker).precede(), (PsiBuilder.Marker)null));
frame.position >= latestDoneMarker.getStartIndex() && frame.position <= latestDoneMarker.getEndIndex()) { extensionMarker = ((PsiBuilder.Marker)latestDoneMarker).precede(); extensionTokenType = latestDoneMarker.getTokenType(); ((PsiBuilder.Marker)latestDoneMarker).drop();
@Override public Result parse(MathematicaParser parser, Result left) throws CriticalParserError { if (!left.isValid()) return MathematicaParser.notParsed(); Marker blankMark = left.getMark().precede(); IElementType token = MathematicaElementTypes.BLANK_EXPRESSION; parser.advanceLexer(); if (!parser.isNextWhitespace() && !parser.eof() && parser.getTokenType().equals(MathematicaElementTypes.IDENTIFIER)) { final PrefixParselet symbolParselet = ParseletProvider.getPrefixParselet(MathematicaElementTypes.IDENTIFIER); symbolParselet.parse(parser); } // MathematicaParser.Result expr = parser.parseExpression(myPrecedence); blankMark.done(token); // return MathematicaParser.result(blankMark, token, !expr.isValid() || expr.isParsed()); return MathematicaParser.result(blankMark, token, true); }
@Override public Result parse(MathematicaParser parser, Result left) throws CriticalParserError { if (!left.isValid()) return MathematicaParser.notParsed(); Marker timesMarker = left.getMark().precede(); Result result = parser.parseExpression(PRECEDENCE); if (result.isParsed()) { timesMarker.done(MathematicaElementTypes.TIMES_EXPRESSION); result = MathematicaParser.result(timesMarker, MathematicaElementTypes.TIMES_EXPRESSION, true); } else { parser.error(ParserBundle.message("General.eof")); timesMarker.done(MathematicaElementTypes.TIMES_EXPRESSION); } return result; }
@Override public Result parse(MathematicaParser parser, Result left) throws CriticalParserError { if (!left.isValid()) return MathematicaParser.notParsed(); Marker blankMark = left.getMark().precede(); IElementType token = MathematicaElementTypes.BLANK_SEQUENCE_EXPRESSION; parser.advanceLexer(); if (!parser.isNextWhitespace() && !parser.eof() && parser.getTokenType().equals(MathematicaElementTypes.IDENTIFIER)) { final PrefixParselet symbolParselet = ParseletProvider.getPrefixParselet(MathematicaElementTypes.IDENTIFIER); symbolParselet.parse(parser); } blankMark.done(token); return MathematicaParser.result(blankMark, token, true); } }
@Override public boolean parseFileContents(PsiBuilder b, int l) { PsiBuilder.Marker m = b.mark(); if (super.parseFileContents(b, l)) { m.done(NAMESPACE_CONTENT); m.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER); PsiBuilder.Marker definitionMarker = m.precede(); definitionMarker.done(MASON_NAMESPACE_DEFINITION); definitionMarker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER); return true; } m.rollbackTo(); return false; }
@Override public PsiBuilder.Marker precede() { return new TrackedMarker(marker.precede(), "before(" + name + ")", node); }
private void processBadTag(TagParser offendingTag, TagParser tagParser, String message) { PsiBuilder.Marker badMarker = tagParser.getTagMarker().precede(); badMarker.errorBefore(message, offendingTag.getTagMarker()); }
@Override public void visit(TagParser within) { SoyElement tagElement = within.getElement(); SoyElement tagPairElement = null; if (tagElement.name().endsWith("_tag")) { // NON-NLS tagPairElement = SoyElement.valueOf(tagElement.name() + "_pair"); //NON-NLS } if (tagPairElement == null) { tagPairElement = SoyElement.tag_pair; } within.getTagMarker().precede().done(tagPairElement); } };
public Marker precede() { return original.precede(); }
public static boolean parseTags(PsiBuilder b, int l) { PsiBuilder.Marker m = null; while (!b.eof() && !isEndMarker(b)) { if (m == null) { m = b.mark(); } b.advanceLexer(); } if (m != null) { m.collapse(TT2_STRING_CONTENT); m.precede().done(SQ_STRING_EXPR); } return true; }
public PsiBuilder.Marker precede() { return delegate.precede(); }
private void processBadTag(TagParser tagParser, String message) { PsiBuilder.Marker badMarker = tagParser.getTagMarker().precede(); badMarker.error(message); } }
@Override public Result parse(MathematicaParser parser, Result left) throws CriticalParserError { Marker derivativeMark = left.getMark().precede(); while (!parser.eof() && parser.getTokenType().equals(DERIVATIVE)) { parser.advanceLexer(); } derivativeMark.done(DERIVATIVE_EXPRESSION); return MathematicaParser.result(derivativeMark, DERIVATIVE_EXPRESSION, true); }
@Override public Result parse(MathematicaParser parser, Result left) throws CriticalParserError { IElementType token = parser.getTokenType(); IElementType psiElement = ParseletProvider.getInfixPsiElement(this); Marker postfixMarker = left.getMark().precede(); parser.advanceLexer(); postfixMarker.done(psiElement); return MathematicaParser.result(postfixMarker, token, true); }
public static boolean parseHashKey(PsiBuilder b, int l) { PsiBuilder.Marker m = b.mark(); if (TemplateToolkitParser.keyword_or_identifier_term(b, l)) { m.collapse(TT2_STRING_CONTENT); m.precede().done(SQ_STRING_EXPR); return true; } return false; }
private static void extend_marker_impl(PsiBuilder.Marker marker) { PsiBuilder.Marker precede = marker.precede(); IElementType elementType = ((LighterASTNode)marker).getTokenType(); if (elementType == TokenType.ERROR_ELEMENT) { precede.error(notNullize(PsiBuilderImpl.getErrorMessage((LighterASTNode)marker))); } else { precede.done(elementType); } marker.drop(); }
frame.leftMarker.precede().done(((LighterASTNode)frame.leftMarker).getTokenType()); frame.leftMarker.drop(); frame.leftMarker.precede().done(elementType); if (marker != null) marker.drop(); if ((frame.modifiers & _LEFT_INNER_) != 0 && frame.leftMarker != null) { frame.leftMarker.precede().done(((LighterASTNode)frame.leftMarker).getTokenType()); frame.leftMarker.drop();
frame.position >= latestDoneMarker.getStartIndex() && frame.position <= latestDoneMarker.getEndIndex()) { extensionMarker = ((PsiBuilder.Marker)latestDoneMarker).precede(); extensionTokenType = latestDoneMarker.getTokenType(); ((PsiBuilder.Marker)latestDoneMarker).drop();