public static boolean isBuiltin(@NotNull PsiBuilder builder_, @SuppressWarnings("UnusedParameters") int level) { LighterASTNode marker = builder_.getLatestDoneMarker(); if (marker == null) return false; String text = String.valueOf(builder_.getOriginalText().subSequence(marker.getStartOffset(), marker.getEndOffset())).trim(); return "make".equals(text) || "new".equals(text); }
public static int nextTokenIsFast(PsiBuilder builder, String tokenText, boolean caseSensitive) { CharSequence sequence = builder.getOriginalText(); int offset = builder.getCurrentOffset(); int endOffset = offset + tokenText.length(); CharSequence subSequence = sequence.subSequence(offset, Math.min(endOffset, sequence.length())); if (!Comparing.equal(subSequence, tokenText, caseSensitive)) return 0; int count = 0; while (true) { int nextOffset = builder.rawTokenTypeStart(++count); if (nextOffset > endOffset) { return -count; } else if (nextOffset == endOffset) { break; } } return count; }
CharSequence fragment = builder.getOriginalText().subSequence(builderOffset, offset); return prefixMatches(fragment.toString(), text); CharSequence fragment = builder.getOriginalText().subSequence(tokenStart, offset); if (prefixMatches(fragment.toString(), text)) { diff = offset - tokenStart;
private boolean allIsEmpty() { return myShrunkSequenceSize == 0 && getDelegate().getOriginalText().length() != 0; }
@Nullable @Override public String getTokenText() { if (allIsEmpty()) { return getDelegate().getOriginalText().toString(); } skipWhitespace(); if (myLexPosition >= myShrunkSequenceSize) { return null; } final MyShiftedToken token = myShrunkSequence.get(myLexPosition); return myShrunkCharSequence.subSequence(token.shrunkStart, token.shrunkEnd).toString(); }
@Override public CharStream getInputStream() { CharSequence text = builder.getOriginalText(); return new CharSequenceCharStream(text, text.length(), getSourceName()); }
public static int nextTokenIsFast(PsiBuilder builder, String tokenText, boolean caseSensitive) { CharSequence sequence = builder.getOriginalText(); int offset = builder.getCurrentOffset(); int endOffset = offset + tokenText.length(); CharSequence subSequence = sequence.subSequence(offset, Math.min(endOffset, sequence.length())); if (!Comparing.equal(subSequence, tokenText, caseSensitive)) return 0; int count = 0; while (true) { int nextOffset = builder.rawTokenTypeStart(++count); if (nextOffset > endOffset) { return -count; } else if (nextOffset == endOffset) { break; } } return count; }
CharSequence fragment = builder.getOriginalText().subSequence(builderOffset, offset); return prefixMatches(fragment.toString(), text); CharSequence fragment = builder.getOriginalText().subSequence(tokenStart, offset); if (prefixMatches(fragment.toString(), text)) { diff = offset - tokenStart;
public static boolean is_new_line(PsiBuilder builder, int level) { if (builder.eof()) return true; for (int i=-1; ; i--) { IElementType type = builder.rawLookup(i); if (type == TokenType.WHITE_SPACE) continue; if (type == JFlexTypes.FLEX_LINE_COMMENT || type == JFlexTypes.FLEX_BLOCK_COMMENT) continue; if (type == JFlexParserDefinition.FLEX_NEWLINE || type == null) return true; if (builder.getOriginalText().charAt(builder.rawTokenTypeStart(i+1)-1) == '\n') return true; addVariant(builder, "<new-line>"); return false; } }
private void init(PsiBuilder builder) { if (myFile == null) return; myGrammarRoot = ContainerUtil.getFirstItem(myFile.getRules()); G = new GenOptions(myFile); mySimpleTokens.putAll(LivePreviewLexer.collectTokenPattern2Name(myFile, null)); myGraphHelper = RuleGraphHelper.getCached(myFile); myRuleExtendsMap = myGraphHelper.getRuleExtendsMap(); myExpressionHelper = ExpressionHelper.getCached(myFile); myTokenTypeText = getRootAttribute(myFile, KnownAttribute.ELEMENT_TYPE_PREFIX); Lexer lexer = ((PsiBuilderImpl)builder).getLexer(); if (lexer instanceof LivePreviewLexer) { for (LivePreviewLexer.Token type : ((LivePreviewLexer)lexer).getTokens()) { myTokenElementTypes.put(type.constantName, type.tokenType); } } for (BnfRule rule : myFile.getRules()) { String elementType = ParserGeneratorUtil.getElementType(rule, G.generateElementCase); if (StringUtil.isEmpty(elementType)) continue; if (myRuleElementTypes.containsKey(elementType)) continue; myRuleElementTypes.put(elementType, new LivePreviewElementType.RuleType(elementType, rule, myLanguage)); } int count = 0; for (BnfRule rule : myFile.getRules()) { myRuleNumbers.put(rule, count ++); } myBitSets = new BitSet[builder.getOriginalText().length()+1]; for (int i = 0; i < myBitSets.length; i++) { myBitSets[i] = new BitSet(count); } }