fix(JavaDoc): Inline code block support

GitOrigin-RevId: ac902221d848139b9a92559b0f61558cfb259319
This commit is contained in:
Mathias Boulay
2024-08-29 16:55:53 +00:00
committed by intellij-monorepo-bot
parent 2bd10fba65
commit d03ded346a
33 changed files with 417 additions and 229 deletions
@@ -26,4 +26,7 @@ public interface JavaDocCommentTokenTypes extends DocCommentTokenTypes {
default IElementType sharp() {
return commentData();
}
default IElementType inlineCodeFence() {
return commentData();
}
}
@@ -135,4 +135,9 @@ public final class JavaDocTokenTypes implements JavaDocCommentTokenTypes {
public IElementType sharp() {
return JavaDocTokenType.DOC_SHARP;
}
@Override
public IElementType inlineCodeFence() {
return JavaDocTokenType.DOC_INLINE_CODE_FENCE;
}
}
@@ -36,6 +36,7 @@ public interface JavaDocTokenType {
IElementType DOC_LPAREN = new IJavaDocElementType("DOC_LPAREN");
IElementType DOC_RPAREN = new IJavaDocElementType("DOC_RPAREN");
IElementType DOC_SHARP = new IJavaDocElementType("DOC_SHARP");
IElementType DOC_INLINE_CODE_FENCE = new IJavaDocElementType("DOC_INLINE_CODE_FENCE");
IElementType DOC_COMMENT_BAD_CHARACTER = new IJavaDocElementType("DOC_COMMENT_BAD_CHARACTER");
@@ -44,6 +45,6 @@ public interface JavaDocTokenType {
DOC_INLINE_TAG_START, DOC_INLINE_TAG_END, DOC_TAG_VALUE_TOKEN, DOC_TAG_VALUE_DOT, DOC_TAG_VALUE_COMMA,
DOC_TAG_VALUE_LPAREN, DOC_TAG_VALUE_RPAREN, DOC_TAG_VALUE_SHARP_TOKEN, DOC_TAG_VALUE_QUOTE, DOC_TAG_VALUE_COLON,
DOC_TAG_ATTRIBUTE_NAME, DOC_TAG_ATTRIBUTE_VALUE, DOC_CODE_FENCE, DOC_RBRACKET, DOC_LBRACKET, DOC_LPAREN, DOC_RPAREN,
DOC_SHARP
DOC_SHARP, DOC_INLINE_CODE_FENCE
);
}
@@ -57,21 +57,22 @@ class _JavaDocLexer implements FlexLexer {
"\1\u1000\1\u0100\1\u1100\1\u1200\1\u1300\1\u0100\1\u1400\1\u1500"+
"\1\u1600\1\u1700\1\u1800\1\u1900\1\u1a00\1\u1b00\1\u0100\1\u1c00"+
"\1\u1d00\1\u1e00\12\u1f00\1\u2000\1\u2100\1\u2200\1\u1f00\1\u2300"+
"\1\u2400\2\u1f00\31\u0100\1\u1b00\121\u0100\1\u2500\4\u0100\1\u2600"+
"\1\u0100\1\u2700\1\u2800\1\u2900\1\u2a00\1\u2b00\1\u2c00\53\u0100"+
"\1\u2d00\10\u2e00\31\u1f00\1\u0100\1\u2f00\1\u3000\1\u0100\1\u3100"+
"\1\u3200\1\u3300\1\u3400\1\u3500\1\u3600\1\u3700\1\u3800\1\u3900"+
"\1\u0100\1\u3a00\1\u3b00\1\u3c00\1\u3d00\1\u3e00\1\u3f00\1\u4000"+
"\1\u4100\1\u4200\1\u4300\1\u4400\1\u4500\1\u4600\1\u4700\1\u4800"+
"\1\u4900\1\u4a00\1\u4b00\1\u4c00\1\u4d00\1\u1f00\1\u4e00\1\u4f00"+
"\1\u5000\1\u5100\3\u0100\1\u5200\1\u5300\1\u5400\12\u1f00\4\u0100"+
"\1\u5500\17\u1f00\2\u0100\1\u5600\41\u1f00\2\u0100\1\u5700\1\u5800"+
"\2\u1f00\1\u5900\1\u5a00\27\u0100\1\u5b00\4\u0100\1\u5c00\1\u5d00"+
"\42\u1f00\1\u0100\1\u5e00\1\u5f00\11\u1f00\1\u6000\27\u1f00\1\u6100"+
"\1\u6200\1\u6300\1\u6400\11\u1f00\1\u6500\1\u6600\5\u1f00\1\u6700"+
"\1\u6800\2\u1f00\1\u6900\1\u1f00\1\u6a00\21\u1f00\246\u0100\1\u6b00"+
"\20\u0100\1\u6c00\1\u6d00\25\u0100\1\u6e00\34\u0100\1\u6f00\14\u1f00"+
"\2\u0100\1\u7000\5\u1f00\23\u0100\1\u7100\u0dec\u1f00";
"\1\u2400\2\u1f00\31\u0100\1\u1b00\126\u0100\1\u2500\1\u0100\1\u2600"+
"\1\u2700\1\u2800\1\u2900\1\u2a00\1\u2b00\53\u0100\1\u2c00\10\u2d00"+
"\31\u1f00\1\u0100\1\u2e00\1\u2f00\1\u0100\1\u3000\1\u3100\1\u3200"+
"\1\u3300\1\u3400\1\u3500\1\u3600\1\u3700\1\u3800\1\u0100\1\u3900"+
"\1\u3a00\1\u3b00\1\u3c00\1\u3d00\1\u3e00\1\u3f00\1\u4000\1\u4100"+
"\1\u4200\1\u4300\1\u4400\1\u4500\1\u4600\1\u4700\1\u4800\1\u4900"+
"\1\u4a00\1\u4b00\1\u4c00\1\u1f00\1\u4d00\1\u4e00\1\u4f00\1\u5000"+
"\3\u0100\1\u5100\1\u5200\1\u5300\11\u1f00\1\u5400\4\u0100\1\u5500"+
"\17\u1f00\2\u0100\1\u5600\41\u1f00\2\u0100\1\u5700\1\u5800\2\u1f00"+
"\1\u5900\1\u5a00\27\u0100\1\u5b00\4\u0100\1\u5c00\1\u5d00\41\u1f00"+
"\1\u5e00\1\u0100\1\u5f00\1\u6000\11\u1f00\1\u6100\27\u1f00\1\u6200"+
"\1\u6300\1\u6400\1\u6500\7\u1f00\1\u6600\1\u6700\1\u6800\1\u6900"+
"\1\u1f00\1\u6a00\2\u1f00\1\u6b00\1\u6c00\1\u6d00\2\u1f00\1\u6e00"+
"\1\u1f00\1\u6f00\21\u1f00\246\u0100\1\u7000\20\u0100\1\u7100\1\u7200"+
"\25\u0100\1\u7300\34\u0100\1\u7400\14\u1f00\2\u0100\1\u7500\5\u1f00"+
"\23\u0100\1\u7600\17\u0100\1\u7700\u0ddc\u1f00";
private static int [] zzUnpackcmap_top() {
int [] result = new int[4352];
@@ -119,74 +120,74 @@ class _JavaDocLexer implements FlexLexer {
"\1\10\1\0\36\10\35\0\131\10\13\0\1\10\30\0"+
"\41\10\11\0\2\10\4\0\1\10\3\0\30\10\4\0"+
"\1\10\11\0\1\10\3\0\1\10\27\0\31\10\7\0"+
"\13\10\65\0\25\10\1\0\22\10\74\0\66\10\3\0"+
"\1\10\22\0\1\10\7\0\12\10\17\0\20\10\4\0"+
"\10\10\2\0\2\10\2\0\26\10\1\0\7\10\1\0"+
"\1\10\3\0\4\10\3\0\1\10\20\0\1\10\15\0"+
"\2\10\1\0\3\10\16\0\4\10\7\0\2\10\10\0"+
"\6\10\4\0\2\10\2\0\26\10\1\0\7\10\1\0"+
"\2\10\1\0\2\10\1\0\2\10\37\0\4\10\1\0"+
"\1\10\23\0\3\10\20\0\11\10\1\0\3\10\1\0"+
"\13\10\5\0\30\10\1\0\6\10\21\0\52\10\72\0"+
"\66\10\3\0\1\10\22\0\1\10\7\0\12\10\17\0"+
"\20\10\4\0\10\10\2\0\2\10\2\0\26\10\1\0"+
"\7\10\1\0\1\10\3\0\4\10\3\0\1\10\20\0"+
"\1\10\15\0\2\10\1\0\3\10\16\0\4\10\7\0"+
"\2\10\10\0\6\10\4\0\2\10\2\0\26\10\1\0"+
"\7\10\1\0\2\10\1\0\2\10\1\0\2\10\37\0"+
"\4\10\1\0\1\10\23\0\3\10\20\0\11\10\1\0"+
"\3\10\1\0\26\10\1\0\7\10\1\0\2\10\1\0"+
"\5\10\3\0\1\10\22\0\1\10\17\0\2\10\17\0"+
"\1\10\7\0\1\10\13\0\10\10\2\0\2\10\2\0"+
"\26\10\1\0\7\10\1\0\2\10\1\0\5\10\3\0"+
"\1\10\22\0\1\10\17\0\2\10\17\0\1\10\7\0"+
"\1\10\13\0\10\10\2\0\2\10\2\0\26\10\1\0"+
"\7\10\1\0\2\10\1\0\5\10\3\0\1\10\36\0"+
"\2\10\1\0\3\10\17\0\1\10\21\0\1\10\1\0"+
"\6\10\3\0\3\10\1\0\4\10\3\0\2\10\1\0"+
"\1\10\1\0\2\10\3\0\2\10\3\0\3\10\3\0"+
"\14\10\26\0\1\10\50\0\1\10\13\0\10\10\1\0"+
"\3\10\1\0\27\10\1\0\20\10\3\0\1\10\32\0"+
"\3\10\5\0\2\10\36\0\1\10\4\0\10\10\1\0"+
"\3\10\1\0\27\10\1\0\12\10\1\0\5\10\3\0"+
"\1\10\40\0\1\10\1\0\2\10\17\0\2\10\21\0"+
"\11\10\1\0\3\10\1\0\51\10\2\0\1\10\20\0"+
"\1\10\5\0\3\10\10\0\3\10\30\0\6\10\5\0"+
"\22\10\3\0\30\10\1\0\11\10\1\0\1\10\2\0"+
"\7\10\72\0\60\10\1\0\2\10\13\0\10\10\72\0"+
"\2\10\1\0\1\10\1\0\5\10\1\0\30\10\1\0"+
"\1\10\1\0\12\10\1\0\2\10\11\0\1\10\2\0"+
"\5\10\1\0\1\10\25\0\4\10\40\0\1\10\77\0"+
"\10\10\1\0\44\10\33\0\5\10\163\0\53\10\24\0"+
"\1\10\20\0\6\10\4\0\4\10\3\0\1\10\3\0"+
"\2\10\7\0\3\10\4\0\15\10\14\0\1\10\21\0"+
"\46\10\1\0\1\10\5\0\1\10\2\0\53\10\1\0"+
"\115\10\1\0\4\10\2\0\7\10\1\0\1\10\1\0"+
"\4\10\2\0\51\10\1\0\4\10\2\0\41\10\1\0"+
"\4\10\2\0\7\10\1\0\1\10\1\0\4\10\2\0"+
"\17\10\1\0\71\10\1\0\4\10\2\0\103\10\45\0"+
"\20\10\20\0\126\10\2\0\6\10\3\0\u016c\10\2\0"+
"\21\10\1\0\32\10\5\0\113\10\3\0\13\10\7\0"+
"\15\10\1\0\4\10\16\0\22\10\16\0\22\10\16\0"+
"\15\10\1\0\3\10\17\0\64\10\43\0\1\10\3\0"+
"\2\10\103\0\131\10\7\0\5\10\2\0\42\10\1\0"+
"\1\10\5\0\106\10\12\0\37\10\61\0\36\10\2\0"+
"\5\10\13\0\54\10\4\0\32\10\66\0\27\10\11\0"+
"\65\10\122\0\1\10\135\0\57\10\21\0\7\10\67\0"+
"\36\10\15\0\2\10\12\0\54\10\32\0\44\10\51\0"+
"\3\10\12\0\44\10\2\0\11\10\7\0\53\10\2\0"+
"\3\10\51\0\4\10\1\0\6\10\1\0\2\10\3\0"+
"\1\10\5\0\300\10\100\0\26\10\2\0\6\10\2\0"+
"\46\10\2\0\6\10\2\0\10\10\1\0\1\10\1\0"+
"\1\10\1\0\1\10\1\0\37\10\2\0\65\10\1\0"+
"\7\10\1\0\1\10\3\0\3\10\1\0\7\10\3\0"+
"\4\10\2\0\6\10\4\0\15\10\5\0\3\10\1\0"+
"\7\10\53\0\2\3\25\0\2\10\23\0\1\10\34\0"+
"\1\10\15\0\1\10\20\0\15\10\3\0\40\10\102\0"+
"\1\10\4\0\1\10\2\0\12\10\1\0\1\10\3\0"+
"\5\10\6\0\1\10\1\0\1\10\1\0\1\10\1\0"+
"\4\10\1\0\13\10\2\0\4\10\5\0\5\10\4\0"+
"\1\10\21\0\51\10\u0177\0\57\10\1\0\57\10\1\0"+
"\205\10\6\0\4\10\3\0\2\10\14\0\46\10\1\0"+
"\1\10\5\0\1\10\2\0\70\10\7\0\1\10\20\0"+
"\27\10\11\0\7\10\1\0\7\10\1\0\7\10\1\0"+
"\1\10\36\0\2\10\1\0\3\10\17\0\1\10\21\0"+
"\1\10\1\0\6\10\3\0\3\10\1\0\4\10\3\0"+
"\2\10\1\0\1\10\1\0\2\10\3\0\2\10\3\0"+
"\3\10\3\0\14\10\26\0\1\10\50\0\1\10\13\0"+
"\10\10\1\0\3\10\1\0\27\10\1\0\20\10\3\0"+
"\1\10\32\0\3\10\2\0\1\10\2\0\2\10\36\0"+
"\1\10\4\0\10\10\1\0\3\10\1\0\27\10\1\0"+
"\12\10\1\0\5\10\3\0\1\10\37\0\2\10\1\0"+
"\2\10\17\0\2\10\21\0\11\10\1\0\3\10\1\0"+
"\51\10\2\0\1\10\20\0\1\10\5\0\3\10\10\0"+
"\3\10\30\0\6\10\5\0\22\10\3\0\30\10\1\0"+
"\11\10\1\0\1\10\2\0\7\10\72\0\60\10\1\0"+
"\2\10\13\0\10\10\72\0\2\10\1\0\1\10\1\0"+
"\5\10\1\0\30\10\1\0\1\10\1\0\12\10\1\0"+
"\2\10\11\0\1\10\2\0\5\10\1\0\1\10\25\0"+
"\4\10\40\0\1\10\77\0\10\10\1\0\44\10\33\0"+
"\5\10\163\0\53\10\24\0\1\10\20\0\6\10\4\0"+
"\4\10\3\0\1\10\3\0\2\10\7\0\3\10\4\0"+
"\15\10\14\0\1\10\21\0\46\10\1\0\1\10\5\0"+
"\1\10\2\0\53\10\1\0\115\10\1\0\4\10\2\0"+
"\7\10\1\0\1\10\1\0\4\10\2\0\51\10\1\0"+
"\4\10\2\0\41\10\1\0\4\10\2\0\7\10\1\0"+
"\1\10\1\0\4\10\2\0\17\10\1\0\71\10\1\0"+
"\4\10\2\0\103\10\45\0\20\10\20\0\126\10\2\0"+
"\6\10\3\0\u016c\10\2\0\21\10\1\0\32\10\5\0"+
"\113\10\3\0\13\10\7\0\22\10\15\0\23\10\16\0"+
"\22\10\16\0\15\10\1\0\3\10\17\0\64\10\43\0"+
"\1\10\3\0\2\10\103\0\131\10\7\0\5\10\2\0"+
"\42\10\1\0\1\10\5\0\106\10\12\0\37\10\61\0"+
"\36\10\2\0\5\10\13\0\54\10\4\0\32\10\66\0"+
"\27\10\11\0\65\10\122\0\1\10\135\0\57\10\21\0"+
"\10\10\66\0\36\10\15\0\2\10\12\0\54\10\32\0"+
"\44\10\51\0\3\10\12\0\44\10\2\0\11\10\7\0"+
"\53\10\2\0\3\10\51\0\4\10\1\0\6\10\1\0"+
"\2\10\3\0\1\10\5\0\300\10\100\0\26\10\2\0"+
"\6\10\2\0\46\10\2\0\6\10\2\0\10\10\1\0"+
"\1\10\1\0\1\10\1\0\1\10\1\0\37\10\2\0"+
"\65\10\1\0\7\10\1\0\1\10\3\0\3\10\1\0"+
"\7\10\3\0\4\10\2\0\6\10\4\0\15\10\5\0"+
"\3\10\1\0\7\10\53\0\2\3\25\0\2\10\23\0"+
"\1\10\34\0\1\10\15\0\1\10\20\0\15\10\3\0"+
"\41\10\101\0\1\10\4\0\1\10\2\0\12\10\1\0"+
"\1\10\3\0\5\10\6\0\1\10\1\0\1\10\1\0"+
"\1\10\1\0\4\10\1\0\13\10\2\0\4\10\5\0"+
"\5\10\4\0\1\10\21\0\51\10\u0177\0\345\10\6\0"+
"\4\10\3\0\2\10\14\0\46\10\1\0\1\10\5\0"+
"\1\10\2\0\70\10\7\0\1\10\20\0\27\10\11\0"+
"\7\10\1\0\7\10\1\0\7\10\1\0\7\10\1\0"+
"\7\10\120\0\1\10\325\0\3\10\31\0\11\10\7\0"+
"\5\10\2\0\5\10\4\0\126\10\6\0\3\10\1\0"+
"\132\10\1\0\4\10\5\0\53\10\1\0\136\10\21\0"+
"\40\10\60\0\u010d\10\3\0\215\10\103\0\56\10\2\0"+
"\15\10\3\0\20\10\12\0\2\10\24\0\57\10\20\0"+
"\37\10\2\0\120\10\47\0\11\10\2\0\147\10\2\0"+
"\65\10\2\0\11\10\52\0\15\10\1\0\3\10\1\0"+
"\7\10\1\0\7\10\1\0\7\10\1\0\7\10\120\0"+
"\1\10\325\0\3\10\31\0\11\10\7\0\5\10\2\0"+
"\5\10\4\0\126\10\6\0\3\10\1\0\132\10\1\0"+
"\4\10\5\0\53\10\1\0\136\10\21\0\40\10\60\0"+
"\235\10\103\0\56\10\2\0\15\10\3\0\20\10\12\0"+
"\2\10\24\0\57\10\20\0\37\10\2\0\120\10\47\0"+
"\11\10\2\0\147\10\2\0\100\10\5\0\2\10\1\0"+
"\1\10\1\0\5\10\30\0\20\10\1\0\3\10\1\0"+
"\4\10\1\0\27\10\25\0\1\10\7\0\64\10\16\0"+
"\62\10\76\0\6\10\3\0\1\10\1\0\2\10\13\0"+
"\34\10\12\0\27\10\31\0\35\10\7\0\57\10\34\0"+
@@ -210,66 +211,76 @@ class _JavaDocLexer implements FlexLexer {
"\105\0\65\10\u010b\0\35\10\3\0\61\10\57\0\40\10"+
"\15\0\36\10\5\0\46\10\12\0\36\10\2\0\44\10"+
"\4\0\10\10\1\0\5\10\52\0\236\10\22\0\44\10"+
"\4\0\44\10\4\0\50\10\10\0\64\10\234\0\67\10"+
"\11\0\26\10\12\0\10\10\230\0\6\10\2\0\1\10"+
"\1\0\54\10\1\0\2\10\3\0\1\10\2\0\27\10"+
"\12\0\27\10\11\0\37\10\101\0\23\10\1\0\2\10"+
"\12\0\26\10\12\0\32\10\106\0\70\10\6\0\2\10"+
"\100\0\1\10\17\0\4\10\1\0\3\10\1\0\35\10"+
"\52\0\35\10\3\0\35\10\43\0\10\10\1\0\34\10"+
"\33\0\66\10\12\0\26\10\12\0\23\10\15\0\22\10"+
"\156\0\111\10\67\0\63\10\15\0\63\10\15\0\44\10"+
"\u015c\0\52\10\6\0\2\10\116\0\35\10\12\0\1\10"+
"\10\0\26\10\152\0\25\10\33\0\27\10\14\0\65\10"+
"\113\0\55\10\40\0\31\10\32\0\44\10\35\0\1\10"+
"\2\0\1\10\10\0\43\10\3\0\1\10\14\0\60\10"+
"\16\0\4\10\25\0\1\10\1\0\1\10\43\0\22\10"+
"\1\0\31\10\124\0\7\10\1\0\1\10\1\0\4\10"+
"\1\0\17\10\1\0\12\10\7\0\57\10\46\0\10\10"+
"\2\0\2\10\2\0\26\10\1\0\7\10\1\0\2\10"+
"\1\0\5\10\3\0\1\10\22\0\1\10\14\0\5\10"+
"\236\0\65\10\22\0\4\10\24\0\3\10\36\0\60\10"+
"\24\0\2\10\1\0\1\10\270\0\57\10\51\0\4\10"+
"\44\0\60\10\24\0\1\10\73\0\53\10\15\0\1\10"+
"\107\0\33\10\345\0\54\10\164\0\100\10\37\0\10\10"+
"\4\0\44\10\4\0\50\10\10\0\64\10\14\0\13\10"+
"\1\0\17\10\1\0\7\10\1\0\2\10\1\0\13\10"+
"\1\0\17\10\1\0\7\10\1\0\2\10\103\0\67\10"+
"\11\0\26\10\12\0\10\10\30\0\6\10\1\0\52\10"+
"\1\0\11\10\105\0\6\10\2\0\1\10\1\0\54\10"+
"\1\0\2\10\3\0\1\10\2\0\27\10\12\0\27\10"+
"\11\0\37\10\101\0\23\10\1\0\2\10\12\0\26\10"+
"\12\0\32\10\106\0\70\10\6\0\2\10\100\0\1\10"+
"\17\0\4\10\1\0\3\10\1\0\35\10\52\0\35\10"+
"\3\0\35\10\43\0\10\10\1\0\34\10\33\0\66\10"+
"\12\0\26\10\12\0\23\10\15\0\22\10\156\0\111\10"+
"\67\0\63\10\15\0\63\10\15\0\44\10\u015c\0\52\10"+
"\6\0\2\10\116\0\35\10\12\0\1\10\10\0\26\10"+
"\52\0\22\10\56\0\25\10\33\0\27\10\14\0\65\10"+
"\71\0\2\10\2\0\1\10\15\0\55\10\40\0\31\10"+
"\32\0\44\10\35\0\1\10\2\0\1\10\10\0\43\10"+
"\3\0\1\10\14\0\60\10\16\0\4\10\25\0\1\10"+
"\1\0\1\10\43\0\22\10\1\0\31\10\23\0\2\10"+
"\77\0\7\10\1\0\1\10\1\0\4\10\1\0\17\10"+
"\1\0\12\10\7\0\57\10\46\0\10\10\2\0\2\10"+
"\2\0\26\10\1\0\7\10\1\0\2\10\1\0\5\10"+
"\3\0\1\10\22\0\1\10\14\0\5\10\236\0\65\10"+
"\22\0\4\10\24\0\3\10\36\0\60\10\24\0\2\10"+
"\1\0\1\10\270\0\57\10\51\0\4\10\44\0\60\10"+
"\24\0\1\10\73\0\53\10\15\0\1\10\107\0\33\10"+
"\45\0\7\10\271\0\54\10\164\0\100\10\37\0\10\10"+
"\2\0\1\10\2\0\10\10\1\0\2\10\1\0\30\10"+
"\17\0\1\10\1\0\1\10\136\0\10\10\2\0\47\10"+
"\20\0\1\10\1\0\1\10\34\0\1\10\12\0\50\10"+
"\7\0\1\10\25\0\1\10\13\0\56\10\23\0\1\10"+
"\42\0\71\10\7\0\11\10\1\0\45\10\21\0\1\10"+
"\22\0\111\10\7\0\11\10\1\0\45\10\21\0\1\10"+
"\61\0\36\10\160\0\7\10\1\0\2\10\1\0\46\10"+
"\25\0\1\10\31\0\6\10\1\0\2\10\1\0\40\10"+
"\16\0\1\10\u0147\0\23\10\275\0\1\10\54\0\4\10"+
"\37\0\232\10\146\0\157\10\21\0\304\10\274\0\57\10"+
"\321\0\107\10\271\0\71\10\7\0\37\10\161\0\36\10"+
"\22\0\60\10\20\0\4\10\37\0\25\10\5\0\23\10"+
"\260\0\100\10\200\0\113\10\5\0\1\10\102\0\15\10"+
"\100\0\2\10\1\0\1\10\34\0\370\10\10\0\326\10"+
"\52\0\11\10\367\0\37\10\61\0\3\10\21\0\4\10"+
"\10\0\u018c\10\4\0\153\10\5\0\15\10\3\0\11\10"+
"\7\0\12\10\146\0\125\10\1\0\107\10\1\0\2\10"+
"\2\0\1\10\2\0\2\10\2\0\4\10\1\0\14\10"+
"\1\0\1\10\1\0\7\10\1\0\101\10\1\0\4\10"+
"\2\0\10\10\1\0\7\10\1\0\34\10\1\0\4\10"+
"\1\0\5\10\1\0\1\10\3\0\7\10\1\0\u0154\10"+
"\2\0\31\10\1\0\31\10\1\0\37\10\1\0\31\10"+
"\1\0\37\10\1\0\31\10\1\0\37\10\1\0\31\10"+
"\1\0\37\10\1\0\31\10\1\0\10\10\64\0\55\10"+
"\12\0\7\10\20\0\1\10\u0171\0\54\10\23\0\306\10"+
"\73\0\104\10\7\0\1\10\u0164\0\1\10\117\0\4\10"+
"\1\0\33\10\1\0\2\10\1\0\1\10\2\0\1\10"+
"\1\0\12\10\1\0\4\10\1\0\1\10\1\0\1\10"+
"\6\0\1\10\4\0\1\10\1\0\1\10\1\0\1\10"+
"\1\0\3\10\1\0\2\10\1\0\1\10\2\0\1\10"+
"\1\0\1\10\1\0\1\10\1\0\1\10\1\0\1\10"+
"\1\0\2\10\1\0\1\10\2\0\4\10\1\0\7\10"+
"\1\0\4\10\1\0\4\10\1\0\1\10\1\0\12\10"+
"\1\0\21\10\5\0\3\10\1\0\5\10\1\0\21\10"+
"\104\0\336\10\42\0\65\10\13\0\336\10\2\0\u0182\10"+
"\16\0\u0131\10\37\0\36\10\342\0\113\10\265\0";
"\16\0\1\10\u0147\0\23\10\17\0\1\10\1\0\15\10"+
"\1\0\42\10\174\0\1\10\54\0\4\10\37\0\232\10"+
"\146\0\157\10\21\0\304\10\u014c\0\141\10\17\0\60\10"+
"\21\0\6\10\271\0\107\10\271\0\71\10\7\0\37\10"+
"\21\0\117\10\21\0\36\10\22\0\60\10\20\0\4\10"+
"\37\0\25\10\5\0\23\10\260\0\100\10\200\0\113\10"+
"\5\0\1\10\102\0\15\10\100\0\2\10\1\0\1\10"+
"\34\0\370\10\10\0\326\10\52\0\11\10\u01e7\0\4\10"+
"\1\0\7\10\1\0\2\10\1\0\43\10\17\0\1\10"+
"\35\0\3\10\2\0\1\10\16\0\4\10\10\0\u018c\10"+
"\4\0\153\10\5\0\15\10\3\0\11\10\7\0\12\10"+
"\146\0\125\10\1\0\107\10\1\0\2\10\2\0\1\10"+
"\2\0\2\10\2\0\4\10\1\0\14\10\1\0\1\10"+
"\1\0\7\10\1\0\101\10\1\0\4\10\2\0\10\10"+
"\1\0\7\10\1\0\34\10\1\0\4\10\1\0\5\10"+
"\1\0\1\10\3\0\7\10\1\0\u0154\10\2\0\31\10"+
"\1\0\31\10\1\0\37\10\1\0\31\10\1\0\37\10"+
"\1\0\31\10\1\0\37\10\1\0\31\10\1\0\37\10"+
"\1\0\31\10\1\0\10\10\64\0\37\10\6\0\6\10"+
"\u0105\0\76\10\222\0\55\10\12\0\7\10\20\0\1\10"+
"\u0141\0\36\10\22\0\54\10\23\0\1\10\320\0\34\10"+
"\364\0\7\10\1\0\4\10\1\0\2\10\1\0\17\10"+
"\1\0\305\10\73\0\104\10\7\0\1\10\u0164\0\1\10"+
"\117\0\4\10\1\0\33\10\1\0\2\10\1\0\1\10"+
"\2\0\1\10\1\0\12\10\1\0\4\10\1\0\1\10"+
"\1\0\1\10\6\0\1\10\4\0\1\10\1\0\1\10"+
"\1\0\1\10\1\0\3\10\1\0\2\10\1\0\1\10"+
"\2\0\1\10\1\0\1\10\1\0\1\10\1\0\1\10"+
"\1\0\1\10\1\0\2\10\1\0\1\10\2\0\4\10"+
"\1\0\7\10\1\0\4\10\1\0\4\10\1\0\1\10"+
"\1\0\12\10\1\0\21\10\5\0\3\10\1\0\5\10"+
"\1\0\21\10\104\0\340\10\40\0\72\10\6\0\336\10"+
"\2\0\u0182\10\16\0\u0131\10\37\0\36\10\342\0\113\10"+
"\5\0\u0160\10\120\0";
private static int [] zzUnpackcmap_blocks() {
int [] result = new int[29184];
int [] result = new int[30720];
int offset = 0;
offset = zzUnpackcmap_blocks(ZZ_CMAP_BLOCKS_PACKED_0, offset, result);
return result;
@@ -294,15 +305,15 @@ class _JavaDocLexer implements FlexLexer {
private static final String ZZ_ACTION_PACKED_0 =
"\17\0\3\1\1\2\1\3\1\4\1\5\1\6\2\2"+
"\1\7\1\2\1\10\1\2\1\11\1\12\1\2\1\13"+
"\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23"+
"\1\24\1\20\1\25\1\1\2\26\1\27\1\26\1\30"+
"\1\31\1\20\1\32\1\33\1\30\1\34\1\20\1\13"+
"\1\3\1\35\1\36\1\20\1\3\1\37\1\12\1\20"+
"\1\3\1\12\1\0\1\40\2\0\2\41\2\0\5\41"+
"\1\0\1\42\1\43\1\41\2\44\4\41\1\45\1\41"+
"\2\44\5\41\2\44\1\46\3\41\1\47\2\44\1\41"+
"\1\47\1\41\2\44\2\41\2\44\1\50\27\44";
"\1\7\1\2\1\10\1\11\1\12\1\13\1\2\1\14"+
"\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24"+
"\1\25\1\21\1\26\1\1\2\27\1\30\1\27\1\31"+
"\1\32\1\21\1\33\1\34\1\31\1\35\1\21\1\14"+
"\1\3\1\36\1\37\1\21\1\3\1\40\1\13\1\21"+
"\1\3\1\13\1\0\1\41\2\0\2\42\2\0\5\42"+
"\1\0\1\43\1\44\1\42\2\45\4\42\1\46\1\42"+
"\2\45\5\42\2\45\1\47\3\42\1\50\2\45\1\42"+
"\1\50\1\42\2\45\2\42\2\45\1\51\27\45";
private static int [] zzUnpackAction() {
int [] result = new int[142];
@@ -837,17 +848,17 @@ class _JavaDocLexer implements FlexLexer {
{ return myTokenTypes.badCharacter();
}
// fall through
case 41: break;
case 42: break;
case 2:
{ yybegin(COMMENT_DATA); return myTokenTypes.commentData();
}
// fall through
case 42: break;
case 43: break;
case 3:
{ return myTokenTypes.space();
}
// fall through
case 43: break;
case 44: break;
case 4:
{ yybegin(COMMENT_DATA);
if(myMarkdownMode) {
@@ -856,7 +867,7 @@ class _JavaDocLexer implements FlexLexer {
return myTokenTypes.commentData();
}
// fall through
case 44: break;
case 45: break;
case 5:
{ yybegin(COMMENT_DATA);
if(myMarkdownMode) {
@@ -865,7 +876,7 @@ class _JavaDocLexer implements FlexLexer {
return myTokenTypes.commentData();
}
// fall through
case 45: break;
case 46: break;
case 6:
{ yybegin(COMMENT_DATA);
if(myMarkdownMode) {
@@ -874,7 +885,7 @@ class _JavaDocLexer implements FlexLexer {
return myTokenTypes.commentData();
}
// fall through
case 46: break;
case 47: break;
case 7:
{ yybegin(COMMENT_DATA);
if(myMarkdownMode) {
@@ -883,7 +894,7 @@ class _JavaDocLexer implements FlexLexer {
return myTokenTypes.commentData();
}
// fall through
case 47: break;
case 48: break;
case 8:
{ yybegin(COMMENT_DATA);
if(myMarkdownMode) {
@@ -892,8 +903,17 @@ class _JavaDocLexer implements FlexLexer {
return myTokenTypes.commentData();
}
// fall through
case 48: break;
case 49: break;
case 9:
{ yybegin(COMMENT_DATA);
if(myMarkdownMode) {
return myTokenTypes.inlineCodeFence();
}
return myTokenTypes.commentData();
}
// fall through
case 50: break;
case 10:
{ if (checkAhead('@')) {
yybegin(INLINE_TAG_NAME);
return myTokenTypes.inlineTagStart();
@@ -904,56 +924,56 @@ class _JavaDocLexer implements FlexLexer {
}
}
// fall through
case 49: break;
case 10:
case 51: break;
case 11:
{ yybegin(COMMENT_DATA); return myTokenTypes.inlineTagEnd();
}
// fall through
case 50: break;
case 11:
case 52: break;
case 12:
{ return myTokenTypes.commentData();
}
// fall through
case 51: break;
case 12:
case 53: break;
case 13:
{ if (checkAhead('<') || checkAhead('\"')) yybegin(COMMENT_DATA);
else if (checkAhead('\u007b')) yybegin(COMMENT_DATA); // lbrace - there's a error in JLex when typing lbrace directly
else yybegin(DOC_TAG_VALUE);
return myTokenTypes.space();
}
// fall through
case 52: break;
case 13:
case 54: break;
case 14:
{ yybegin(DOC_TAG_VALUE); return myTokenTypes.space();
}
// fall through
case 53: break;
case 14:
case 55: break;
case 15:
{ yybegin(COMMENT_DATA); return myTokenTypes.space();
}
// fall through
case 54: break;
case 15:
case 56: break;
case 16:
{ return myTokenTypes.tagValueSharp();
}
// fall through
case 55: break;
case 16:
case 57: break;
case 17:
{ return myTokenTypes.tagValueToken();
}
// fall through
case 56: break;
case 17:
case 58: break;
case 18:
{ yybegin(DOC_TAG_VALUE_IN_PAREN); return myTokenTypes.tagValueLParen();
}
// fall through
case 57: break;
case 18:
case 59: break;
case 19:
{ return myTokenTypes.tagValueComma();
}
// fall through
case 58: break;
case 19:
case 60: break;
case 20:
{ if (myJdk15Enabled) {
yybegin(DOC_TAG_VALUE_IN_LTGT);
return myTokenTypes.tagValueLT();
@@ -964,61 +984,61 @@ class _JavaDocLexer implements FlexLexer {
}
}
// fall through
case 59: break;
case 20:
case 61: break;
case 21:
{ yybegin(DOC_TAG_VALUE); return myTokenTypes.tagValueRParen();
}
// fall through
case 60: break;
case 21:
case 62: break;
case 22:
{ yybegin(COMMENT_DATA); return myTokenTypes.tagValueGT();
}
// fall through
case 61: break;
case 22:
case 63: break;
case 23:
{ yybegin(CODE_TAG); return myTokenTypes.commentData();
}
// fall through
case 62: break;
case 23:
case 64: break;
case 24:
{ yybegin(CODE_TAG); return myTokenTypes.space();
}
// fall through
case 63: break;
case 24:
case 65: break;
case 25:
{ yybegin(SNIPPET_TAG_COMMENT_DATA_UNTIL_COLON); return myTokenTypes.commentData();
}
// fall through
case 64: break;
case 25:
case 66: break;
case 26:
{ yybegin(SNIPPET_ATTRIBUTE_VALUE_DOUBLE_QUOTES); return myTokenTypes.tagValueQuote();
}
// fall through
case 65: break;
case 26:
case 67: break;
case 27:
{ yybegin(SNIPPET_ATTRIBUTE_VALUE_SINGLE_QUOTES); return myTokenTypes.tagValueQuote();
}
// fall through
case 66: break;
case 27:
case 68: break;
case 28:
{ if (myMarkdownMode) {
return myTokenTypes.commentData();
}
return myTokenTypes.commentLeadingAsterisks();
}
// fall through
case 67: break;
case 28:
case 69: break;
case 29:
{ yybegin(SNIPPET_TAG_BODY_DATA); return myTokenTypes.tagValueColon();
}
// fall through
case 68: break;
case 29:
case 70: break;
case 30:
{ mySnippetBracesLevel++; return myTokenTypes.commentData();
}
// fall through
case 69: break;
case 30:
case 71: break;
case 31:
{ if (mySnippetBracesLevel > 0) {
mySnippetBracesLevel--;
return myTokenTypes.commentData();
@@ -1028,26 +1048,26 @@ class _JavaDocLexer implements FlexLexer {
}
}
// fall through
case 70: break;
case 31:
case 72: break;
case 32:
{ yybegin(SNIPPET_TAG_COMMENT_DATA_UNTIL_COLON); return myTokenTypes.tagValueQuote();
}
// fall through
case 71: break;
case 32:
case 73: break;
case 33:
{ if(myMarkdownMode) {
return myTokenTypes.commentData();
}
return myTokenTypes.commentEnd();
}
// fall through
case 72: break;
case 33:
case 74: break;
case 34:
{ yybegin(TAG_DOC_SPACE); return myTokenTypes.tagName();
}
// fall through
case 73: break;
case 34:
case 75: break;
case 35:
{ if(myMarkdownMode) {
return myTokenTypes.badCharacter();
}
@@ -1055,8 +1075,8 @@ class _JavaDocLexer implements FlexLexer {
return myTokenTypes.commentStart();
}
// fall through
case 74: break;
case 35:
case 76: break;
case 36:
{ if(myMarkdownMode) {
yybegin(COMMENT_DATA_START);
return myTokenTypes.commentLeadingAsterisks();
@@ -1064,8 +1084,8 @@ class _JavaDocLexer implements FlexLexer {
return myTokenTypes.badCharacter();
}
// fall through
case 75: break;
case 36:
case 77: break;
case 37:
{ yybegin(COMMENT_DATA);
if(myMarkdownMode) {
return myTokenTypes.codeFence();
@@ -1073,30 +1093,30 @@ class _JavaDocLexer implements FlexLexer {
return myTokenTypes.commentData();
}
// fall through
case 76: break;
case 37:
case 78: break;
case 38:
{ if (myMarkdownMode) {
return myTokenTypes.commentLeadingAsterisks();
}
return myTokenTypes.commentData();
}
// fall through
case 77: break;
case 38:
case 79: break;
case 39:
{ yybegin(CODE_TAG_SPACE); return myTokenTypes.tagName();
}
// fall through
case 78: break;
case 39:
case 80: break;
case 40:
{ yybegin(PARAM_TAG_SPACE); return myTokenTypes.tagName();
}
// fall through
case 79: break;
case 40:
case 81: break;
case 41:
{ yybegin(SNIPPET_TAG_COMMENT_DATA_UNTIL_COLON); return myTokenTypes.tagName();
}
// fall through
case 80: break;
case 82: break;
default:
zzScanError(ZZ_NO_MATCH);
}
@@ -136,6 +136,14 @@ LEADING_TOKEN_MARKDOWN="///"
(\\\() { yybegin(COMMENT_DATA); return myTokenTypes.commentData(); }
(\\\)) { yybegin(COMMENT_DATA); return myTokenTypes.commentData(); }
"`" {
yybegin(COMMENT_DATA);
if(myMarkdownMode) {
return myTokenTypes.inlineCodeFence();
}
return myTokenTypes.commentData();
}
"#" {
yybegin(COMMENT_DATA);
if(myMarkdownMode) {
@@ -162,6 +162,9 @@ public final class BasicJavaDocParser {
parseSimpleTagValue(builder, javaDocElementTypeContainer);
}
}
else if (tokenType == JavaDocTokenType.DOC_INLINE_CODE_FENCE) {
parseInlineCodeBlock(builder, javaDocElementTypeContainer);
}
else if (tokenType == JavaDocTokenType.DOC_CODE_FENCE) {
parseCodeBlock(builder, javaDocElementTypeContainer);
}
@@ -173,6 +176,33 @@ public final class BasicJavaDocParser {
}
}
private static void parseInlineCodeBlock(PsiBuilder builder,
@NotNull AbstractBasicJavaDocElementTypeFactory.JavaDocElementTypeContainer javaDocElementTypeContainer) {
PsiBuilder.Marker tag = builder.mark();
IElementType stopElementType = findInlineToken(builder, JavaDocTokenType.DOC_INLINE_CODE_FENCE);
int endOffset = builder.getCurrentOffset();
tag.rollbackTo();
if (stopElementType != JavaDocTokenType.DOC_INLINE_CODE_FENCE) {
// Bail out, no end
builder.advanceLexer();
return;
}
tag = builder.mark();
builder.advanceLexer();
while (builder.getCurrentOffset() < endOffset && !builder.eof()) {
builder.remapCurrentToken(JavaDocTokenType.DOC_COMMENT_DATA);
builder.advanceLexer();
}
if(!builder.eof()) {
builder.advanceLexer();
}
tag.done(javaDocElementTypeContainer.DOC_MARKDOWN_CODE_BLOCK);
}
private static void parseCodeBlock(PsiBuilder builder,
AbstractBasicJavaDocElementTypeFactory.@NotNull JavaDocElementTypeContainer javaDocElementTypeContainer) {
if (getBraceScope(builder) > 0) {
@@ -201,7 +231,8 @@ public final class BasicJavaDocParser {
}
/** Ensure a reference link is good before parsing it */
private static void parseMarkdownReferenceChecked(PsiBuilder builder, @NotNull AbstractBasicJavaDocElementTypeFactory.JavaDocElementTypeContainer javaDocElementTypeContainer) {
private static void parseMarkdownReferenceChecked(PsiBuilder builder,
@NotNull AbstractBasicJavaDocElementTypeFactory.JavaDocElementTypeContainer javaDocElementTypeContainer) {
boolean hasLabel = true;
PsiBuilder.Marker tag = builder.mark();
@@ -328,9 +359,16 @@ public final class BasicJavaDocParser {
refStart.drop();
}
private static @Nullable IElementType findInlineToken(@NotNull PsiBuilder builder, IElementType needle) {
return findInlineToken(builder, needle, null, false);
}
/**
* Look for the token provided by `needle`, taking into account markdown line break rules
* @param travelToken The token that is either allowed or disallowed to encounter while looking for the `needle`
*
* @param travelToken The token that is either allowed or disallowed to encounter while looking for the `needle`
* When `null`, no check is performed
* @param isTravelTokenDisallowed When `true`, the `travelToken` will abort the search
* When `false`, encountering something other than `travelToken` or `needle` will abort the search
* @return The last token encountered during the search.
@@ -338,7 +376,7 @@ public final class BasicJavaDocParser {
@Contract(mutates = "param1")
private static @Nullable IElementType findInlineToken(@NotNull PsiBuilder builder,
IElementType needle,
IElementType travelToken,
@Nullable IElementType travelToken,
boolean isTravelTokenDisallowed) {
IElementType token = null;
IElementType previousToken;
@@ -350,7 +388,7 @@ public final class BasicJavaDocParser {
return token;
}
boolean travelTokenFound = travelToken == token;
if ((isTravelTokenDisallowed && travelTokenFound) || (!isTravelTokenDisallowed && !travelTokenFound)) {
if ((travelToken != null) && ((isTravelTokenDisallowed && travelTokenFound) || (!isTravelTokenDisallowed && !travelTokenFound))) {
break;
}
@@ -198,6 +198,8 @@ public abstract class AbstractBasicJavadocParsingTest extends AbstractBasicJavaP
public void testCodeBlockMarkdown01() { doTest(true); }
public void testCodeBlockMarkdown02() { doTest(true); }
public void testCodeBlockMarkdown03() { doTest(true); }
public void testCodeBlockMarkdown04() { doTest(true); }
public void testCodeBlockMarkdown05() { doTest(true); }
public void testReferenceLinkMarkdown00() { doTest(true); }
public void testReferenceLinkMarkdown01() { doTest(true); }
@@ -1857,7 +1857,11 @@ public class JavaDocInfoGenerator {
}
}
else if (element instanceof PsiMarkdownCodeBlock markdownCodeBlock) {
appendStyledCodeBlock(subBuffer, element.getProject(), markdownCodeBlock.getCodeLanguage(), markdownCodeBlock.getCodeText());
if (markdownCodeBlock.isInline()) {
appendWrappedWithInlineCodeTag(subBuffer, markdownCodeBlock.getCodeText());
} else {
appendStyledCodeBlock(subBuffer, element.getProject(), markdownCodeBlock.getCodeLanguage(), markdownCodeBlock.getCodeText());
}
}
else if (element instanceof PsiMarkdownReferenceLink) {
generateMarkdownLinkValue((PsiMarkdownReferenceLink)element, subBuffer);
@@ -13,6 +13,9 @@ public interface PsiMarkdownCodeBlock extends PsiElement {
@NotNull
String getCodeText();
/** @return The language for this code block */
/** @return The language for this code block. An inline code block has no language info */
@Nullable Language getCodeLanguage();
/** @return Whether the code block is a single line block */
boolean isInline();
}
@@ -22,7 +22,8 @@ public class PsiDocTagImpl extends CompositePsiElement implements PsiDocTag, Con
private static final TokenSet TAG_VALUE_BIT_SET = TokenSet.create(
DOC_TAG_VALUE_ELEMENT, DOC_METHOD_OR_FIELD_REF, DOC_PARAMETER_REF);
private static final TokenSet VALUE_BIT_SET = TokenSet.orSet(TAG_VALUE_BIT_SET, TokenSet.create(
DOC_TAG_VALUE_TOKEN, JAVA_CODE_REFERENCE, DOC_COMMENT_DATA, DOC_INLINE_TAG, DOC_REFERENCE_HOLDER, DOC_SHARP, DOC_LBRACKET, DOC_RBRACKET, DOC_LPAREN, DOC_RPAREN));
DOC_TAG_VALUE_TOKEN, JAVA_CODE_REFERENCE, DOC_COMMENT_DATA, DOC_INLINE_TAG, DOC_REFERENCE_HOLDER, DOC_SHARP, DOC_LBRACKET, DOC_RBRACKET,
DOC_LPAREN, DOC_RPAREN, DOC_CODE_FENCE, DOC_INLINE_CODE_FENCE, DOC_MARKDOWN_CODE_BLOCK));
public PsiDocTagImpl() {
super(DOC_TAG);
@@ -23,8 +23,9 @@ import org.jetbrains.annotations.NotNull;
public class PsiInlineDocTagImpl extends CompositePsiElement implements PsiInlineDocTag, Constants {
private static final TokenSet TAG_VALUE_BIT_SET = TokenSet.create(DOC_TAG_VALUE_ELEMENT, DOC_METHOD_OR_FIELD_REF);
static final TokenSet VALUE_BIT_SET = TokenSet.orSet(TAG_VALUE_BIT_SET, TokenSet.create(
JAVA_CODE_REFERENCE, DOC_TAG_VALUE_TOKEN, WHITE_SPACE, DOC_COMMENT_DATA, DOC_INLINE_TAG, DOC_REFERENCE_HOLDER, DOC_COMMENT_BAD_CHARACTER,
DOC_SNIPPET_TAG_VALUE, DOC_SHARP, DOC_LBRACKET, DOC_RBRACKET, DOC_LPAREN, DOC_RPAREN));
JAVA_CODE_REFERENCE, DOC_TAG_VALUE_TOKEN, WHITE_SPACE, DOC_COMMENT_DATA, DOC_INLINE_TAG, DOC_REFERENCE_HOLDER,
DOC_COMMENT_BAD_CHARACTER, DOC_SNIPPET_TAG_VALUE,
DOC_SHARP, DOC_LBRACKET, DOC_RBRACKET, DOC_LPAREN, DOC_RPAREN, DOC_CODE_FENCE, DOC_INLINE_CODE_FENCE, DOC_MARKDOWN_CODE_BLOCK));
public PsiInlineDocTagImpl() {
super(DOC_INLINE_TAG);
@@ -12,6 +12,7 @@ import com.intellij.psi.impl.source.tree.CompositePsiElement;
import com.intellij.psi.impl.source.tree.JavaDocElementType;
import com.intellij.psi.javadoc.PsiMarkdownCodeBlock;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -52,7 +53,9 @@ public class PsiMarkdownCodeBlockImpl extends CompositePsiElement implements Psi
while (child != null) {
IElementType i = child.getElementType();
if (i != JavaDocTokenType.DOC_CODE_FENCE && i != JavaDocTokenType.DOC_COMMENT_LEADING_ASTERISKS) {
if (i != JavaDocTokenType.DOC_CODE_FENCE &&
i != JavaDocTokenType.DOC_COMMENT_LEADING_ASTERISKS &&
i != JavaDocTokenType.DOC_INLINE_CODE_FENCE) {
builder.append(child.getText());
}
child = child.getTreeNext();
@@ -60,6 +63,11 @@ public class PsiMarkdownCodeBlockImpl extends CompositePsiElement implements Psi
return builder.toString();
}
@Override
public boolean isInline() {
return getFirstChildNode().getTokenType() == JavaDocTokenType.DOC_INLINE_CODE_FENCE;
}
private @Nullable String getLanguageInfo() {
if (!hasLanguageInfo()) return null;
return getChildren()[1].getText().trim();
@@ -67,8 +75,13 @@ public class PsiMarkdownCodeBlockImpl extends CompositePsiElement implements Psi
/** @return True if the block has language info. It doesn't always translate to a {@link com.intellij.lang.Language} */
private boolean hasLanguageInfo() {
if (isInline()) return false;
PsiElement[] children = getChildren();
if (children.length < 2) return false;
// If the code block is written on only one line (why), there is no language info as well
if (findChildByType(TokenSet.WHITE_SPACE) == null) return false;
PsiElement languageInfoChild = children[1];
if (languageInfoChild.getNode().getElementType() != JavaDocTokenType.DOC_COMMENT_DATA) return false;
return !languageInfoChild.getText().trim().isEmpty();
@@ -1,3 +1,4 @@
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">MarkdownCodeBlock</span></pre></div><div class='content'><p>Java code block</p> <pre><code><span style="color:#000080;font-weight:bold;">new&#32;</span><span style="">String();<br></span><span style="">System.out.println(</span><span style="color:#008000;font-weight:bold;">"Hello&#32;Markdown"</span><span style="">);</span></code></pre>
<p>Xml code block</p> <pre><code><span style="">&lt;</span><span style="color:#000080;font-weight:bold;">hello</span><span style="">&gt;</span><span style=""><br></span><span style="">&#32;&#32;</span><span style="">&lt;</span><span style="color:#000080;font-weight:bold;">markdown&#32;</span><span style="">/&gt;</span><span style=""><br></span><span style="">&lt;/</span><span style="color:#000080;font-weight:bold;">hello</span><span style="">&gt;</span></code></pre>
<p>&quot;Inline&quot; java code block</p> <pre><code><span style="">System.out.println(</span><span style="color:#008000;font-weight:bold;">"Hello&#32;Markdown"</span><span style="">);</span></code></pre>
</div><table class='sections'><p></table>
@@ -10,4 +10,6 @@
/// <markdown />
/// </hello>
/// ```
/// "Inline" java code block
/// ```System.out.println("Hello Markdown");```
class MarkdownCodeBlock {}
@@ -0,0 +1,3 @@
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">MarkdownCodeBlock</span></pre></div><div class='content'><p>Single liner code block:
<code>Hello world</code></p><p>No tags are interpreted inside them
<code>{@link java.lang.String niceLink}</code></p></div><table class='sections'><p></table>
@@ -0,0 +1,7 @@
/// Single liner code block:
/// `Hello world`
///
/// No tags are interpreted inside them
/// `{@link java.lang.String niceLink}`
class MarkdownCodeBlock {}
@@ -0,0 +1 @@
/// `Single line codeblock`
@@ -0,0 +1,10 @@
PsiJavaFile:CodeBlockMarkdown04.java
PsiDocComment
PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('///')
PsiWhiteSpace(' ')
PsiMarkdownCodeBlock:
PsiDocToken:DOC_INLINE_CODE_FENCE('`')
PsiDocToken:DOC_COMMENT_DATA('Single line codeblock')
PsiDocToken:DOC_INLINE_CODE_FENCE('`')
PsiImportList
<empty list>
@@ -0,0 +1,10 @@
java.FILE
DOC_COMMENT
DOC_COMMENT_LEADING_ASTERISKS
WHITE_SPACE
DOC_CODE_BLOCK
DOC_INLINE_CODE_FENCE
DOC_COMMENT_DATA
DOC_INLINE_CODE_FENCE
IMPORT_LIST
<empty list>
@@ -0,0 +1,3 @@
/// `
/// According to markdown rules, this is inline
/// `
@@ -0,0 +1,15 @@
PsiJavaFile:CodeBlockMarkdown05.java
PsiDocComment
PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('///')
PsiWhiteSpace(' ')
PsiMarkdownCodeBlock:
PsiDocToken:DOC_INLINE_CODE_FENCE('`')
PsiWhiteSpace('\n')
PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('///')
PsiDocToken:DOC_COMMENT_DATA(' According to markdown rules, this is inline')
PsiWhiteSpace('\n')
PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('///')
PsiDocToken:DOC_COMMENT_DATA(' ')
PsiDocToken:DOC_INLINE_CODE_FENCE('`')
PsiImportList
<empty list>
@@ -0,0 +1,15 @@
java.FILE
DOC_COMMENT
DOC_COMMENT_LEADING_ASTERISKS
WHITE_SPACE
DOC_CODE_BLOCK
DOC_INLINE_CODE_FENCE
WHITE_SPACE
DOC_COMMENT_LEADING_ASTERISKS
DOC_COMMENT_DATA
WHITE_SPACE
DOC_COMMENT_LEADING_ASTERISKS
DOC_COMMENT_DATA
DOC_INLINE_CODE_FENCE
IMPORT_LIST
<empty list>
@@ -6,7 +6,9 @@ PsiJavaFile:Symbols01Markdown.java
PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('///')
PsiWhiteSpace('\n')
PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('///')
PsiDocToken:DOC_COMMENT_DATA(' ~`!@')
PsiDocToken:DOC_COMMENT_DATA(' ~')
PsiDocToken:DOC_INLINE_CODE_FENCE('`')
PsiDocToken:DOC_COMMENT_DATA('!@')
PsiDocToken:DOC_SHARP('#')
PsiDocToken:DOC_COMMENT_DATA('$%^&*')
PsiDocToken:DOC_LPAREN('(')
@@ -7,6 +7,8 @@ java.FILE
WHITE_SPACE
DOC_COMMENT_LEADING_ASTERISKS
DOC_COMMENT_DATA
DOC_INLINE_CODE_FENCE
DOC_COMMENT_DATA
DOC_SHARP
DOC_COMMENT_DATA
DOC_LPAREN
@@ -16,7 +16,9 @@ PsiJavaFile:Symbols02Markdown.java
PsiReferenceParameterList
<empty list>
PsiWhiteSpace(' ')
PsiDocToken:DOC_COMMENT_DATA('~`!@')
PsiDocToken:DOC_COMMENT_DATA('~')
PsiDocToken:DOC_INLINE_CODE_FENCE('`')
PsiDocToken:DOC_COMMENT_DATA('!@')
PsiDocToken:DOC_SHARP('#')
PsiDocToken:DOC_COMMENT_DATA('$%^&*')
PsiDocToken:DOC_LPAREN('(')
@@ -17,6 +17,8 @@ java.FILE
<empty list>
WHITE_SPACE
DOC_COMMENT_DATA
DOC_INLINE_CODE_FENCE
DOC_COMMENT_DATA
DOC_SHARP
DOC_COMMENT_DATA
DOC_LPAREN
@@ -17,7 +17,9 @@ PsiJavaFile:Symbols03Markdown.java
PsiReferenceParameterList
<empty list>
PsiWhiteSpace(' ')
PsiDocToken:DOC_COMMENT_DATA('~`!@')
PsiDocToken:DOC_COMMENT_DATA('~')
PsiDocToken:DOC_INLINE_CODE_FENCE('`')
PsiDocToken:DOC_COMMENT_DATA('!@')
PsiDocToken:DOC_SHARP('#')
PsiDocToken:DOC_COMMENT_DATA('$%^&*')
PsiDocToken:DOC_LPAREN('(')
@@ -18,6 +18,8 @@ java.FILE
<empty list>
WHITE_SPACE
DOC_COMMENT_DATA
DOC_INLINE_CODE_FENCE
DOC_COMMENT_DATA
DOC_SHARP
DOC_COMMENT_DATA
DOC_LPAREN
@@ -17,7 +17,9 @@ PsiJavaFile:Symbols04Markdown.java
PsiReferenceParameterList
<empty list>
PsiWhiteSpace(' ')
PsiDocToken:DOC_COMMENT_DATA('~`!@')
PsiDocToken:DOC_COMMENT_DATA('~')
PsiDocToken:DOC_INLINE_CODE_FENCE('`')
PsiDocToken:DOC_COMMENT_DATA('!@')
PsiDocToken:DOC_SHARP('#')
PsiDocToken:DOC_COMMENT_DATA('$%^&*')
PsiDocToken:DOC_LPAREN('(')
@@ -18,6 +18,8 @@ java.FILE
<empty list>
WHITE_SPACE
DOC_COMMENT_DATA
DOC_INLINE_CODE_FENCE
DOC_COMMENT_DATA
DOC_SHARP
DOC_COMMENT_DATA
DOC_LPAREN
@@ -17,7 +17,9 @@ PsiJavaFile:Symbols05Markdown.java
PsiReferenceParameterList
<empty list>
PsiWhiteSpace(' ')
PsiDocToken:DOC_COMMENT_DATA('~`!@')
PsiDocToken:DOC_COMMENT_DATA('~')
PsiDocToken:DOC_INLINE_CODE_FENCE('`')
PsiDocToken:DOC_COMMENT_DATA('!@')
PsiDocToken:DOC_SHARP('#')
PsiDocToken:DOC_COMMENT_DATA('$%^&*')
PsiDocToken:DOC_LPAREN('(')
@@ -18,6 +18,8 @@ java.FILE
<empty list>
WHITE_SPACE
DOC_COMMENT_DATA
DOC_INLINE_CODE_FENCE
DOC_COMMENT_DATA
DOC_SHARP
DOC_COMMENT_DATA
DOC_LPAREN
@@ -203,6 +203,8 @@ public class JavaDocInfoGeneratorTest extends JavaCodeInsightTestCase {
public void testHtmlCodeInMarkdown() {
doTestMethod();
}
public void testMarkdownInlineCodeBlock() { doTestClass(); }
public void testRepeatableAnnotations() {
useJava8();