public SimTocBlock(BasedSequence chars, BasedSequence styleChars, BasedSequence titleChars) { super(chars, styleChars, true); int anchorPos = chars.indexOf('#', closingMarker.getEndOffset() - chars.getStartOffset()); if (anchorPos == -1) { throw new IllegalStateException("Invalid TOC block sequence"); } anchorMarker = chars.subSequence(anchorPos, anchorPos + 1); if (titleChars != null) { if (titleChars.length() < 2) { throw new IllegalStateException("Invalid TOC block title sequence"); } openingTitleMarker = titleChars.subSequence(0, 1); title = titleChars.midSequence(1, -1).nullIfEmpty(); closingTitleMarker = titleChars.endSequence(1); } }
@Override public Node createNode(BasedSequence nodeChars) { BasedSequence enumeratedReferenceId = nodeChars.midSequence(2, -1).trim(); EnumeratedReferenceBlock enumeratedReferenceBlock = enumeratedReferenceId.length() > 0 ? enumeratedReferenceRepository.get(enumeratedReferenceId.toString()) : null; if (nodeChars.charAt(1) == '@') { // reference link EnumeratedReferenceLink enumeratedReference = new EnumeratedReferenceLink(nodeChars.subSequence(0, 2), enumeratedReferenceId, nodeChars.endSequence(1)); enumeratedReference.setEnumeratedReferenceBlock(enumeratedReferenceBlock); return enumeratedReference; } else { // reference text EnumeratedReferenceText enumeratedReferenceText = new EnumeratedReferenceText(nodeChars.subSequence(0, 2), enumeratedReferenceId, nodeChars.endSequence(1)); enumeratedReferenceText.setEnumeratedReferenceBlock(enumeratedReferenceBlock); return enumeratedReferenceText; } }
@Override public Node createNode(BasedSequence nodeChars) { BasedSequence footnoteId = nodeChars.midSequence(2, -1).trim(); FootnoteBlock footnoteBlock = footnoteId.length() > 0 ? footnoteRepository.get(footnoteId.toString()) : null; Footnote footnote = new Footnote(nodeChars.subSequence(0, 2), footnoteId, nodeChars.endSequence(1)); footnote.setFootnoteBlock(footnoteBlock); if (footnoteBlock != null) { footnoteRepository.addFootnoteReference(footnoteBlock, footnote); } return footnote; }
@Override public boolean parse(final InlineParser inlineParser) { if (inlineParser.peek(1) == '%' && (inlineParser.peek(2) == ' ' || inlineParser.peek(2) == '\t')) { BasedSequence input = inlineParser.getInput(); Matcher matcher = inlineParser.matcher(parsing.MACRO_TAG); if (matcher != null) { BasedSequence tag = input.subSequence(matcher.start(), matcher.end()); BasedSequence tagName = input.subSequence(matcher.start(1), matcher.end(1)); BasedSequence parameters = input.subSequence(matcher.end(1), matcher.end() - 2).trim(); JekyllTag macro = new JekyllTag(tag.subSequence(0, 2), tagName, parameters, tag.endSequence(2)); macro.setCharsFromContent(); //noinspection EqualsBetweenInconvertibleTypes if (!listIncludesOnly || tagName.equals(JekyllTagBlockParser.INCLUDE_TAG)) { List<JekyllTag> tagList = JekyllTagExtension.TAG_LIST.getFrom(inlineParser.getDocument()); tagList.add(macro); } inlineParser.flushTextNode(); inlineParser.getBlock().appendChild(macro); return true; } } return false; }
AttributesNode attributes = attributesText.equals("#") || attributesText.equals(".") ? new AttributesDelimiter(attributesOpen.subSequence(0, 1), attributesText, attributesOpen.endSequence(1)) : new AttributesNode(attributesOpen.subSequence(0, 1), attributesText, attributesOpen.endSequence(1)); boolean isQuoted = attributeValue.length() >= 2 && (attributeValue.charAt(0) == '"' && attributeValue.endCharAt(1) == '"' || attributeValue.charAt(0) == '\'' && attributeValue.endCharAt(1) == '\''); BasedSequence attributeOpen = !isQuoted ? BasedSequence.NULL : attributeValue.subSequence(0, 1); BasedSequence attributeClose = !isQuoted ? BasedSequence.NULL : attributeValue.endSequence(1, 0);
@Override public BlockStart tryStart(ParserState state, MatchedBlockParser matchedBlockParser) { BasedSequence line = state.getLine(); int currentIndent = state.getIndent(); if (currentIndent == 0 && !(matchedBlockParser.getBlockParser().getBlock() instanceof Paragraph)) { final BasedSequence tryLine = line.subSequence(state.getIndex()); Matcher matcher = parsing.MACRO_OPEN.matcher(tryLine); if (matcher.find()) { // see if it closes on the same line, then we create a block and close it BasedSequence tag = tryLine.subSequence(0, matcher.end()); BasedSequence tagName = line.subSequence(matcher.start(1), matcher.end(1)); BasedSequence parameters = tryLine.subSequence(matcher.end(1), matcher.end() - 2).trim(); JekyllTag tagNode = new JekyllTag(tag.subSequence(0, 2), tagName, parameters, tag.endSequence(2)); tagNode.setCharsFromContent(); final JekyllTagBlockParser parser = new JekyllTagBlockParser(state.getProperties()); parser.block.appendChild(tagNode); //noinspection EqualsBetweenInconvertibleTypes if (!listIncludesOnly || tagName.equals(INCLUDE_TAG)) { List<JekyllTag> tagList = JekyllTagExtension.TAG_LIST.getFrom(state.getProperties()); tagList.add(tagNode); } return BlockStart.of(parser) .atIndex(state.getLineEndIndex()) ; } } return BlockStart.none(); } }
MacroClose macroClose = new MacroClose(macroOpen.subSequence(0, 3), macroName, macroOpen.endSequence(2)); inlineParser.getBlock().appendChild(macroClose); inlineParser.moveNodes(openMacros.get(i), macroClose); Macro macro = new Macro(macroOpen.subSequence(0, 2), macroName, macroOpen.endSequence(isClosedTag ? 3 : 2)); macro.setCharsFromContent(); boolean isQuoted = attributeValue.length() >= 2 && (attributeValue.charAt(0) == '"' && attributeValue.endCharAt(1) == '"' || attributeValue.charAt(0) == '\'' && attributeValue.endCharAt(1) == '\''); BasedSequence attributeOpen = !isQuoted ? BasedSequence.NULL : attributeValue.subSequence(0, 1); BasedSequence attributeClose = !isQuoted ? BasedSequence.NULL : attributeValue.endSequence(1, 0);
Macro macro = new Macro(macroOpen.subSequence(0, 2), macroName, macroOpen.endSequence(isClosedTag ? 3 : 2)); macro.setCharsFromContent(); boolean isQuoted = attributeValue.length() >= 2 && (attributeValue.charAt(0) == '"' && attributeValue.endCharAt(1) == '"' || attributeValue.charAt(0) == '\'' && attributeValue.endCharAt(1) == '\''); BasedSequence attributeOpen = !isQuoted ? BasedSequence.NULL : attributeValue.subSequence(0, 1); BasedSequence attributeClose = !isQuoted ? BasedSequence.NULL : attributeValue.endSequence(1, 0);
public static void delimitedSegmentSpan( StringBuilder out, BasedSequence openingSequence, BasedSequence sequence, BasedSequence closingSequence, String name ) { segmentSpanChars(out, openingSequence.getStartOffset(), openingSequence.getEndOffset(), name + "Open", openingSequence.toString()); if (sequence.length() <= 10) { segmentSpanChars(out, sequence.getStartOffset(), sequence.getEndOffset(), name, sequence.toVisibleWhitespaceString()); } else { // give the first 5 and last 5 segmentSpanChars(out, sequence.getStartOffset(), sequence.getEndOffset(), name, sequence.subSequence(0, 5).toVisibleWhitespaceString(), SPLICE, sequence.endSequence(sequence.length() - 5).toVisibleWhitespaceString()); } segmentSpanChars(out, closingSequence.getStartOffset(), closingSequence.getEndOffset(), name + "Close", closingSequence.toString()); }
public SimTocBlock(BasedSequence chars, BasedSequence styleChars, BasedSequence titleChars) { super(chars, styleChars, true); int anchorPos = chars.indexOf('#', closingMarker.getEndOffset() - chars.getStartOffset()); if (anchorPos == -1) { throw new IllegalStateException("Invalid TOC block sequence"); } anchorMarker = chars.subSequence(anchorPos, anchorPos + 1); if (titleChars != null) { if (titleChars.length() < 2) { throw new IllegalStateException("Invalid TOC block title sequence"); } openingTitleMarker = titleChars.subSequence(0, 1); title = titleChars.midSequence(1, -1).nullIfEmpty(); closingTitleMarker = titleChars.endSequence(1); } }
@Override public Node createNode(BasedSequence nodeChars) { BasedSequence footnoteId = nodeChars.midSequence(2, -1).trim(); FootnoteBlock footnoteBlock = footnoteId.length() > 0 ? footnoteRepository.get(footnoteId.toString()) : null; Footnote footnote = new Footnote(nodeChars.subSequence(0, 2), footnoteId, nodeChars.endSequence(1)); footnote.setFootnoteBlock(footnoteBlock); if (footnoteBlock != null) { footnoteRepository.addFootnoteReference(footnoteBlock, footnote); } return footnote; }
@Override public boolean parse(final InlineParser inlineParser) { if (inlineParser.peek(1) == '%' && (inlineParser.peek(2) == ' ' || inlineParser.peek(2) == '\t')) { BasedSequence input = inlineParser.getInput(); Matcher matcher = inlineParser.matcher(parsing.MACRO_TAG); if (matcher != null) { BasedSequence tag = input.subSequence(matcher.start(), matcher.end()); BasedSequence tagName = input.subSequence(matcher.start(1), matcher.end(1)); BasedSequence parameters = input.subSequence(matcher.end(1), matcher.end() - 2).trim(); JekyllTag macro = new JekyllTag(tag.subSequence(0, 2), tagName, parameters, tag.endSequence(2)); macro.setCharsFromContent(); //noinspection EqualsBetweenInconvertibleTypes if (!listIncludesOnly || tagName.equals(JekyllTagBlockParser.INCLUDE_TAG)) { List<JekyllTag> tagList = JekyllTagExtension.TAG_LIST.getFrom(inlineParser.getDocument()); tagList.add(macro); } inlineParser.flushTextNode(); inlineParser.getBlock().appendChild(macro); return true; } } return false; }
@Override public BlockStart tryStart(ParserState state, MatchedBlockParser matchedBlockParser) { BasedSequence line = state.getLine(); int currentIndent = state.getIndent(); if (currentIndent == 0 && !(matchedBlockParser.getBlockParser().getBlock() instanceof Paragraph)) { final BasedSequence tryLine = line.subSequence(state.getIndex()); Matcher matcher = parsing.MACRO_OPEN.matcher(tryLine); if (matcher.find()) { // see if it closes on the same line, then we create a block and close it BasedSequence tag = tryLine.subSequence(0, matcher.end()); BasedSequence tagName = line.subSequence(matcher.start(1), matcher.end(1)); BasedSequence parameters = tryLine.subSequence(matcher.end(1), matcher.end() - 2).trim(); JekyllTag tagNode = new JekyllTag(tag.subSequence(0, 2), tagName, parameters, tag.endSequence(2)); tagNode.setCharsFromContent(); final JekyllTagBlockParser parser = new JekyllTagBlockParser(state.getProperties()); parser.block.appendChild(tagNode); //noinspection EqualsBetweenInconvertibleTypes if (!listIncludesOnly || tagName.equals(INCLUDE_TAG)) { List<JekyllTag> tagList = JekyllTagExtension.TAG_LIST.getFrom(state.getProperties()); tagList.add(tagNode); } return BlockStart.of(parser) .atIndex(state.getLineEndIndex()) ; } } return BlockStart.none(); } }
AttributesNode attributes = attributesText.equals("#") || attributesText.equals(".") ? new AttributesDelimiter(attributesOpen.subSequence(0, 1), attributesText, attributesOpen.endSequence(1)) : new AttributesNode(attributesOpen.subSequence(0, 1), attributesText, attributesOpen.endSequence(1)); boolean isQuoted = attributeValue.length() >= 2 && (attributeValue.charAt(0) == '"' && attributeValue.endCharAt(1) == '"' || attributeValue.charAt(0) == '\'' && attributeValue.endCharAt(1) == '\''); BasedSequence attributeOpen = !isQuoted ? BasedSequence.NULL : attributeValue.subSequence(0, 1); BasedSequence attributeClose = !isQuoted ? BasedSequence.NULL : attributeValue.endSequence(1, 0);
public static void delimitedSegmentSpan( StringBuilder out, BasedSequence openingSequence, BasedSequence sequence, BasedSequence closingSequence, String name ) { segmentSpanChars(out, openingSequence.getStartOffset(), openingSequence.getEndOffset(), name + "Open", openingSequence.toString()); if (sequence.length() <= 10) { segmentSpanChars(out, sequence.getStartOffset(), sequence.getEndOffset(), name, sequence.toVisibleWhitespaceString()); } else { // give the first 5 and last 5 segmentSpanChars(out, sequence.getStartOffset(), sequence.getEndOffset(), name, sequence.subSequence(0, 5).toVisibleWhitespaceString(), SPLICE, sequence.endSequence(sequence.length() - 5).toVisibleWhitespaceString()); } segmentSpanChars(out, closingSequence.getStartOffset(), closingSequence.getEndOffset(), name + "Close", closingSequence.toString()); }
} else if (!bareRef.isEmpty()) { refNode.setTextOpeningMarker(bareRef.subSequence(0, 1)); refNode.setTextClosingMarker(bareRef.endSequence(1));
} else if (!bareRef.isEmpty()) { refNode.setTextOpeningMarker(bareRef.subSequence(0, 1)); refNode.setTextClosingMarker(bareRef.endSequence(1));