feat(IDEA-353092): early markdown jdoc support

GitOrigin-RevId: 8c02012551f1a97d3f5d6aed021889911b138b28
This commit is contained in:
Mathias Boulay
2024-08-13 11:44:06 +00:00
committed by intellij-monorepo-bot
parent dc5c78e7f9
commit 3825899d51
317 changed files with 10599 additions and 394 deletions
@@ -1,18 +1,16 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
// Generated by JFlex 1.9.1 http://jflex.de/ (tweaked for IntelliJ platform)
// source: _JavaDocLexer.flex
/* It's an automatically generated code. Do not modify it. */
package com.intellij.lang.java.lexer;
package com.intellij.lang.java.lexer;
import com.intellij.lexer.DocCommentTokenTypes;
import com.intellij.lexer.FlexLexer;
import com.intellij.psi.tree.IElementType;
import com.intellij.lexer.DocCommentTokenTypes;
import com.intellij.lexer.FlexLexer;
import com.intellij.psi.tree.IElementType;
@SuppressWarnings("ALL")
@SuppressWarnings("ALL")
final class _JavaDocLexer implements FlexLexer {
class _JavaDocLexer implements FlexLexer {
/** This character denotes the end of file */
public static final int YYEOF = -1;
@@ -105,170 +103,170 @@ final class _JavaDocLexer implements FlexLexer {
"\1\0\1\6\1\7\1\10\2\0\1\11\1\12\1\13"+
"\1\14\1\0\1\15\1\16\1\17\1\20\12\21\1\22"+
"\1\0\1\23\1\24\1\25\1\0\1\26\32\10\1\27"+
"\1\0\1\27\1\0\1\10\1\0\1\30\1\10\1\31"+
"\1\32\1\33\3\10\1\34\2\10\1\35\1\36\1\37"+
"\1\40\1\41\1\10\1\42\1\43\1\44\6\10\1\45"+
"\1\0\1\46\7\0\1\3\34\0\4\10\4\0\1\10"+
"\12\0\1\10\4\0\1\10\5\0\27\10\1\0\37\10"+
"\1\0\u01ca\10\4\0\14\10\16\0\5\10\7\0\1\10"+
"\1\0\1\10\201\0\5\10\1\0\2\10\2\0\4\10"+
"\1\0\1\10\6\0\1\10\1\0\3\10\1\0\1\10"+
"\1\0\24\10\1\0\123\10\1\0\213\10\10\0\246\10"+
"\1\0\46\10\2\0\1\10\6\0\51\10\6\0\1\10"+
"\100\0\33\10\4\0\4\10\30\0\1\10\24\0\53\10"+
"\43\0\2\10\1\0\143\10\1\0\1\10\17\0\2\10"+
"\7\0\2\10\12\0\3\10\2\0\1\10\20\0\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\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\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\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\1\10"+
"\20\0\5\10\1\0\12\10\12\0\5\10\1\0\51\10"+
"\27\0\3\10\1\0\10\10\24\0\27\10\3\0\1\10"+
"\3\0\62\10\1\0\1\10\3\0\2\10\2\0\5\10"+
"\2\0\1\10\1\0\1\10\30\0\3\10\2\0\13\10"+
"\7\0\3\10\14\0\6\10\2\0\6\10\2\0\6\10"+
"\11\0\7\10\1\0\7\10\1\0\53\10\1\0\16\10"+
"\6\0\163\10\35\0\244\10\14\0\27\10\4\0\61\10"+
"\4\0\u0100\3\156\10\2\0\152\10\46\0\7\10\14\0"+
"\5\10\5\0\1\10\1\0\12\10\1\0\15\10\1\0"+
"\5\10\1\0\1\10\1\0\2\10\1\0\2\10\1\0"+
"\154\10\41\0\153\10\22\0\100\10\2\0\66\10\50\0"+
"\15\10\66\0\2\10\30\0\3\10\31\0\1\10\6\0"+
"\5\10\1\0\207\10\7\0\1\10\34\0\32\10\4\0"+
"\1\10\1\0\32\10\13\0\131\10\3\0\6\10\2\0"+
"\6\10\2\0\6\10\2\0\3\10\3\0\2\10\3\0"+
"\2\10\31\0\14\10\1\0\32\10\1\0\23\10\1\0"+
"\2\10\1\0\17\10\2\0\16\10\42\0\173\10\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\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\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";
"\1\30\1\31\1\0\1\10\1\32\1\33\1\10\1\34"+
"\1\35\1\36\3\10\1\37\2\10\1\40\1\41\1\42"+
"\1\43\1\44\1\10\1\45\1\46\1\47\6\10\1\50"+
"\1\0\1\51\1\52\6\0\1\3\34\0\4\10\4\0"+
"\1\10\12\0\1\10\4\0\1\10\5\0\27\10\1\0"+
"\37\10\1\0\u01ca\10\4\0\14\10\16\0\5\10\7\0"+
"\1\10\1\0\1\10\201\0\5\10\1\0\2\10\2\0"+
"\4\10\1\0\1\10\6\0\1\10\1\0\3\10\1\0"+
"\1\10\1\0\24\10\1\0\123\10\1\0\213\10\10\0"+
"\246\10\1\0\46\10\2\0\1\10\6\0\51\10\6\0"+
"\1\10\100\0\33\10\4\0\4\10\30\0\1\10\24\0"+
"\53\10\43\0\2\10\1\0\143\10\1\0\1\10\17\0"+
"\2\10\7\0\2\10\12\0\3\10\2\0\1\10\20\0"+
"\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"+
"\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"+
"\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"+
"\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"+
"\1\10\20\0\5\10\1\0\12\10\12\0\5\10\1\0"+
"\51\10\27\0\3\10\1\0\10\10\24\0\27\10\3\0"+
"\1\10\3\0\62\10\1\0\1\10\3\0\2\10\2\0"+
"\5\10\2\0\1\10\1\0\1\10\30\0\3\10\2\0"+
"\13\10\7\0\3\10\14\0\6\10\2\0\6\10\2\0"+
"\6\10\11\0\7\10\1\0\7\10\1\0\53\10\1\0"+
"\16\10\6\0\163\10\35\0\244\10\14\0\27\10\4\0"+
"\61\10\4\0\u0100\3\156\10\2\0\152\10\46\0\7\10"+
"\14\0\5\10\5\0\1\10\1\0\12\10\1\0\15\10"+
"\1\0\5\10\1\0\1\10\1\0\2\10\1\0\2\10"+
"\1\0\154\10\41\0\153\10\22\0\100\10\2\0\66\10"+
"\50\0\15\10\66\0\2\10\30\0\3\10\31\0\1\10"+
"\6\0\5\10\1\0\207\10\7\0\1\10\34\0\32\10"+
"\4\0\1\10\1\0\32\10\13\0\131\10\3\0\6\10"+
"\2\0\6\10\2\0\6\10\2\0\3\10\3\0\2\10"+
"\3\0\2\10\31\0\14\10\1\0\32\10\1\0\23\10"+
"\1\0\2\10\1\0\17\10\2\0\16\10\42\0\173\10"+
"\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"+
"\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"+
"\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";
private static int [] zzUnpackcmap_blocks() {
int [] result = new int[29184];
@@ -295,16 +293,19 @@ final class _JavaDocLexer implements FlexLexer {
private static final int [] ZZ_ACTION = zzUnpackAction();
private static final String ZZ_ACTION_PACKED_0 =
"\17\0\3\1\1\2\1\3\2\2\1\4\1\5\1\6"+
"\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16"+
"\1\17\1\13\1\20\1\1\2\21\1\22\1\21\1\23"+
"\1\24\1\13\1\25\1\26\1\27\1\13\1\6\1\3"+
"\1\30\1\31\1\13\1\3\1\32\1\5\1\13\1\3"+
"\1\5\1\0\1\33\1\0\7\34\1\35\13\34\1\36"+
"\3\34\1\37\1\34\1\37\3\34\1\40";
"\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";
private static int [] zzUnpackAction() {
int [] result = new int[92];
int [] result = new int[142];
int offset = 0;
offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
return result;
@@ -329,21 +330,27 @@ final class _JavaDocLexer implements FlexLexer {
private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
private static final String ZZ_ROWMAP_PACKED_0 =
"\0\0\0\47\0\116\0\165\0\234\0\303\0\352\0\u0111"+
"\0\u0138\0\u015f\0\u0186\0\u01ad\0\u01d4\0\u01fb\0\u0222\0\u0249"+
"\0\u0270\0\u0297\0\u0249\0\u02be\0\u0270\0\u02e5\0\u0249\0\u0249"+
"\0\u030c\0\u0333\0\u035a\0\u0381\0\u0249\0\u03a8\0\u0249\0\u0249"+
"\0\u0249\0\u0249\0\u03cf\0\u0249\0\u03f6\0\u0249\0\u041d\0\u041d"+
"\0\u0270\0\u0249\0\u0249\0\u0444\0\u0249\0\u0270\0\u0249\0\u0249"+
"\0\u046b\0\u0492\0\u0249\0\u0249\0\u04b9\0\u04e0\0\u0249\0\u04b9"+
"\0\u0507\0\u052e\0\u0507\0\u0270\0\u0249\0\u0555\0\u057c\0\u05a3"+
"\0\u05ca\0\u05f1\0\u0618\0\u063f\0\u0666\0\u0249\0\u068d\0\u06b4"+
"\0\u06db\0\u0702\0\u0729\0\u0750\0\u0777\0\u079e\0\u07c5\0\u07ec"+
"\0\u0813\0\u05ca\0\u083a\0\u0861\0\u0888\0\u057c\0\u08af\0\u05ca"+
"\0\u08d6\0\u08fd\0\u0924\0\u05ca";
"\0\0\0\53\0\126\0\201\0\254\0\327\0\u0102\0\u012d"+
"\0\u0158\0\u0183\0\u01ae\0\u01d9\0\u0204\0\u022f\0\u025a\0\u0285"+
"\0\u02b0\0\u02db\0\u0285\0\u0306\0\u0285\0\u0285\0\u0285\0\u02b0"+
"\0\u0331\0\u0285\0\u035c\0\u0285\0\u0387\0\u0285\0\u0285\0\u03b2"+
"\0\u03dd\0\u0408\0\u0433\0\u045e\0\u0285\0\u0489\0\u0285\0\u0285"+
"\0\u0285\0\u0285\0\u04b4\0\u0285\0\u04df\0\u0285\0\u050a\0\u050a"+
"\0\u02b0\0\u0285\0\u0285\0\u0535\0\u0285\0\u02b0\0\u0560\0\u0285"+
"\0\u0285\0\u058b\0\u05b6\0\u0285\0\u0285\0\u05e1\0\u060c\0\u0285"+
"\0\u05e1\0\u0637\0\u0662\0\u0637\0\u02b0\0\u0285\0\u068d\0\u06b8"+
"\0\u06e3\0\u070e\0\u0739\0\u0764\0\u078f\0\u07ba\0\u07e5\0\u0810"+
"\0\u083b\0\u0866\0\u0285\0\u0285\0\u0891\0\u08bc\0\u08e7\0\u0912"+
"\0\u093d\0\u0968\0\u0993\0\u0285\0\u09be\0\u09e9\0\u0a14\0\u0a3f"+
"\0\u0a6a\0\u0a95\0\u0ac0\0\u0aeb\0\u0b16\0\u0b41\0\u078f\0\u0b6c"+
"\0\u0b97\0\u0bc2\0\u06e3\0\u0bed\0\u0c18\0\u0c43\0\u078f\0\u0c6e"+
"\0\u0c99\0\u0cc4\0\u0cef\0\u0d1a\0\u0d45\0\u0d70\0\u078f\0\u0d9b"+
"\0\u0dc6\0\u0df1\0\u0e1c\0\u0e47\0\u0e72\0\u0e9d\0\u0ec8\0\u0ef3"+
"\0\u0f1e\0\u0f49\0\u0f74\0\u0f9f\0\u0fca\0\u0ff5\0\u1020\0\u104b"+
"\0\u1076\0\u10a1\0\u10cc\0\u10f7\0\u1122\0\u0285";
private static int [] zzUnpackRowMap() {
int [] result = new int[92];
int [] result = new int[142];
int offset = 0;
offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
return result;
@@ -366,67 +373,84 @@ final class _JavaDocLexer implements FlexLexer {
private static final int [] ZZ_TRANS = zzUnpacktrans();
private static final String ZZ_TRANS_PACKED_0 =
"\14\20\1\21\3\20\1\22\26\20\1\23\2\24\1\20"+
"\2\24\6\23\1\25\11\23\1\26\16\23\1\27\1\30"+
"\1\23\1\31\1\24\1\20\1\31\1\24\6\23\1\25"+
"\30\23\1\27\1\30\1\20\2\32\1\20\2\32\6\20"+
"\1\21\31\20\1\30\1\20\2\33\1\20\2\33\6\20"+
"\1\21\32\20\1\23\2\34\1\20\2\34\1\23\1\35"+
"\1\36\1\23\1\37\1\23\1\25\1\40\1\23\1\36"+
"\1\23\1\36\1\23\1\41\3\23\16\36\1\23\1\30"+
"\1\20\2\24\1\20\2\24\2\20\1\36\2\20\1\42"+
"\1\21\1\40\1\20\1\36\1\20\1\36\5\20\16\36"+
"\12\20\1\43\3\20\1\21\10\20\1\44\2\20\15\43"+
"\16\20\1\21\11\20\1\45\20\20\1\46\1\47\1\50"+
"\1\20\2\50\6\46\1\51\30\46\1\27\1\30\1\46"+
"\1\47\1\50\1\20\2\50\6\46\1\51\31\46\1\30"+
"\1\52\2\24\1\52\2\24\1\53\1\52\1\54\1\55"+
"\2\52\1\56\5\52\1\57\1\52\1\60\3\52\15\54"+
"\1\52\1\30\1\61\1\62\1\24\1\61\2\62\37\61"+
"\1\63\1\64\1\65\1\66\1\24\1\65\2\66\1\67"+
"\37\65\1\70\1\71\1\72\1\24\1\71\2\72\3\71"+
"\1\67\34\71\1\73\63\0\1\74\3\0\1\75\42\0"+
"\1\76\33\0\2\24\1\0\2\24\41\0\1\77\2\0"+
"\1\77\2\0\33\77\1\100\5\77\1\0\1\31\2\0"+
"\1\31\43\0\2\32\1\0\2\32\42\0\2\33\1\0"+
"\2\33\42\0\2\34\1\0\2\34\51\0\1\36\6\0"+
"\1\36\1\0\1\36\5\0\16\36\12\0\1\43\5\0"+
"\2\43\1\0\2\43\5\0\15\43\2\0\1\101\2\0"+
"\1\101\2\0\23\101\1\102\3\101\1\103\3\101\1\104"+
"\1\101\1\105\2\101\2\0\2\50\1\0\2\50\51\0"+
"\1\54\10\0\1\54\6\0\15\54\2\0\2\61\1\0"+
"\42\61\2\0\1\61\1\62\1\24\1\61\2\62\37\61"+
"\2\0\2\65\1\0\3\65\1\0\41\65\1\66\1\24"+
"\1\65\2\66\1\0\40\65\2\71\1\0\6\71\1\0"+
"\36\71\1\72\1\24\1\71\2\72\3\71\1\0\35\71"+
"\14\0\1\106\32\0\1\77\2\0\1\77\2\0\42\77"+
"\2\0\1\77\2\0\22\77\1\107\16\77\1\101\2\0"+
"\1\101\2\0\40\101\1\0\1\101\2\0\1\101\2\0"+
"\32\101\1\110\5\101\1\0\1\101\2\0\1\101\2\0"+
"\26\101\1\111\11\101\1\0\1\101\2\0\1\101\2\0"+
"\22\101\1\112\15\101\1\0\1\101\2\0\1\101\2\0"+
"\31\101\1\113\6\101\1\0\1\77\2\0\1\77\2\0"+
"\34\77\1\114\4\77\1\101\2\0\1\101\2\0\24\101"+
"\1\115\13\101\1\0\1\101\2\0\1\101\2\0\36\101"+
"\1\116\1\101\1\0\1\101\2\0\1\101\2\0\34\101"+
"\1\117\3\101\1\0\1\101\2\0\1\101\2\0\26\101"+
"\1\120\11\101\1\0\1\77\2\0\1\77\2\0\22\77"+
"\1\121\16\77\1\101\2\0\1\101\2\0\25\101\1\122"+
"\12\101\1\0\1\101\2\0\1\101\2\0\25\101\1\123"+
"\12\101\1\0\1\101\2\0\1\101\2\0\22\101\1\124"+
"\15\101\1\0\1\101\2\0\1\101\2\0\33\101\1\125"+
"\4\101\1\0\1\77\2\0\1\77\2\0\30\77\1\126"+
"\10\77\1\101\2\0\1\101\2\0\34\101\1\127\3\101"+
"\1\0\1\101\2\0\1\101\2\0\30\101\1\130\7\101"+
"\1\0\1\101\2\0\1\101\2\0\33\101\1\131\4\101"+
"\1\0\1\101\2\0\1\101\2\0\22\101\1\132\15\101"+
"\1\0\1\101\2\0\1\101\2\0\25\101\1\133\12\101"+
"\1\0\1\101\2\0\1\101\2\0\27\101\1\122\10\101"+
"\1\0\1\101\2\0\1\101\2\0\36\101\1\134\1\101"+
"\1\0";
"\14\20\1\21\3\20\1\22\32\20\1\23\2\24\1\20"+
"\2\24\1\23\1\25\2\23\1\26\1\27\1\30\11\23"+
"\1\31\1\32\1\33\1\34\1\35\15\23\1\36\1\37"+
"\1\40\1\23\1\41\1\24\1\20\1\41\1\24\1\23"+
"\1\25\2\23\1\26\1\27\1\30\12\23\1\32\1\33"+
"\1\34\1\35\15\23\1\36\1\37\1\40\1\20\2\42"+
"\1\20\2\42\6\20\1\21\34\20\1\37\2\20\2\43"+
"\1\20\2\43\6\20\1\21\36\20\1\23\2\44\1\20"+
"\2\44\1\23\1\45\1\46\1\23\1\47\1\23\1\30"+
"\1\50\1\23\1\46\1\23\1\46\1\23\1\51\3\23"+
"\1\46\1\23\1\46\1\23\15\46\1\23\1\37\1\23"+
"\1\20\2\24\1\20\2\24\2\20\1\46\2\20\1\52"+
"\1\21\1\50\1\20\1\46\1\20\1\46\5\20\1\46"+
"\1\20\1\46\1\20\15\46\13\20\1\53\3\20\1\21"+
"\10\20\1\54\5\20\15\53\17\20\1\21\11\20\1\55"+
"\24\20\1\56\1\57\1\60\1\20\2\60\6\56\1\61"+
"\33\56\1\36\1\37\2\56\1\57\1\60\1\20\2\60"+
"\6\56\1\61\34\56\1\37\1\56\1\62\2\24\1\62"+
"\2\24\1\63\1\62\1\64\1\65\2\62\1\66\3\62"+
"\1\67\1\62\1\70\1\62\1\71\6\62\15\64\1\62"+
"\1\37\1\62\1\72\1\73\1\24\1\72\2\73\42\72"+
"\1\74\1\75\1\72\1\76\1\77\1\24\1\76\2\77"+
"\1\100\42\76\1\101\1\76\1\102\1\103\1\24\1\102"+
"\2\103\3\102\1\100\37\102\1\104\1\102\67\0\1\105"+
"\3\0\1\106\46\0\1\107\3\0\1\110\33\0\2\24"+
"\1\0\2\24\45\0\1\111\2\0\1\111\2\0\36\111"+
"\1\112\6\111\12\0\2\23\13\0\1\23\1\0\1\23"+
"\53\0\1\113\72\0\1\114\1\0\1\41\2\0\1\41"+
"\47\0\2\42\1\0\2\42\46\0\2\43\1\0\2\43"+
"\46\0\2\44\1\0\2\44\55\0\1\46\6\0\1\46"+
"\1\0\1\46\5\0\1\46\1\0\1\46\1\0\15\46"+
"\13\0\1\53\5\0\2\53\1\0\2\53\10\0\15\53"+
"\3\0\1\115\2\0\1\115\2\0\26\115\1\116\3\115"+
"\1\117\3\115\1\120\1\115\1\121\2\115\1\0\1\115"+
"\1\0\2\60\1\0\2\60\55\0\1\64\10\0\1\64"+
"\11\0\15\64\23\0\1\122\32\0\2\72\1\0\45\72"+
"\2\0\2\72\1\73\1\24\1\72\2\73\42\72\2\0"+
"\1\72\2\76\1\0\3\76\1\0\45\76\1\77\1\24"+
"\1\76\2\77\1\0\44\76\2\102\1\0\6\102\1\0"+
"\42\102\1\103\1\24\1\102\2\103\3\102\1\0\41\102"+
"\14\0\1\123\56\0\1\124\32\0\1\111\2\0\1\111"+
"\2\0\46\111\2\0\1\111\2\0\25\111\1\125\17\111"+
"\32\0\1\126\72\0\1\127\1\115\2\0\1\115\2\0"+
"\43\115\1\0\2\115\2\0\1\115\2\0\35\115\1\130"+
"\5\115\1\0\2\115\2\0\1\115\2\0\31\115\1\131"+
"\11\115\1\0\2\115\2\0\1\115\2\0\25\115\1\132"+
"\15\115\1\0\2\115\2\0\1\115\2\0\34\115\1\133"+
"\6\115\1\0\1\115\20\0\1\134\32\0\1\111\2\0"+
"\1\111\2\0\37\111\1\135\5\111\32\0\1\136\72\0"+
"\1\137\1\115\2\0\1\115\2\0\27\115\1\140\13\115"+
"\1\0\2\115\2\0\1\115\2\0\41\115\1\141\1\115"+
"\1\0\2\115\2\0\1\115\2\0\37\115\1\142\3\115"+
"\1\0\2\115\2\0\1\115\2\0\31\115\1\143\11\115"+
"\1\0\1\115\1\111\2\0\1\111\2\0\25\111\1\144"+
"\17\111\32\0\1\145\72\0\1\146\1\115\2\0\1\115"+
"\2\0\30\115\1\147\12\115\1\0\2\115\2\0\1\115"+
"\2\0\30\115\1\150\12\115\1\0\2\115\2\0\1\115"+
"\2\0\25\115\1\151\15\115\1\0\2\115\2\0\1\115"+
"\2\0\36\115\1\152\4\115\1\0\1\115\1\111\2\0"+
"\1\111\2\0\33\111\1\153\11\111\32\0\1\154\72\0"+
"\1\155\1\115\2\0\1\115\2\0\37\115\1\156\3\115"+
"\1\0\2\115\2\0\1\115\2\0\33\115\1\157\7\115"+
"\1\0\2\115\2\0\1\115\2\0\36\115\1\160\4\115"+
"\1\0\1\115\32\0\1\161\72\0\1\162\1\115\2\0"+
"\1\115\2\0\25\115\1\163\15\115\1\0\2\115\2\0"+
"\1\115\2\0\30\115\1\164\12\115\1\0\1\115\32\0"+
"\1\165\72\0\1\166\1\115\2\0\1\115\2\0\32\115"+
"\1\147\10\115\1\0\2\115\2\0\1\115\2\0\41\115"+
"\1\167\1\115\1\0\1\115\32\0\1\170\72\0\1\171"+
"\32\0\1\172\72\0\1\173\32\0\1\174\72\0\1\175"+
"\32\0\1\176\72\0\1\177\32\0\1\200\72\0\1\201"+
"\32\0\1\202\72\0\1\203\32\0\1\204\72\0\1\205"+
"\32\0\1\206\72\0\1\207\32\0\1\210\72\0\1\211"+
"\32\0\1\212\72\0\1\213\32\0\1\214\72\0\1\215"+
"\32\0\1\216\72\0\1\216";
private static int [] zzUnpacktrans() {
int [] result = new int[2379];
int [] result = new int[4429];
int offset = 0;
offset = zzUnpacktrans(ZZ_TRANS_PACKED_0, offset, result);
return result;
@@ -464,13 +488,15 @@ final class _JavaDocLexer implements FlexLexer {
private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
private static final String ZZ_ATTRIBUTE_PACKED_0 =
"\17\0\1\11\2\1\1\11\3\1\2\11\4\1\1\11"+
"\1\1\4\11\1\1\1\11\1\1\1\11\3\1\2\11"+
"\1\1\1\11\1\1\2\11\2\1\2\11\2\1\1\11"+
"\4\1\1\0\1\11\1\0\7\1\1\11\26\1";
"\17\0\1\11\2\1\1\11\1\1\3\11\2\1\1\11"+
"\1\1\1\11\1\1\2\11\5\1\1\11\1\1\4\11"+
"\1\1\1\11\1\1\1\11\3\1\2\11\1\1\1\11"+
"\2\1\2\11\2\1\2\11\2\1\1\11\4\1\1\0"+
"\1\11\2\0\2\1\2\0\5\1\1\0\2\11\7\1"+
"\1\11\61\1\1\11";
private static int [] zzUnpackAttribute() {
int [] result = new int[92];
int [] result = new int[142];
int offset = 0;
offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
return result;
@@ -539,24 +565,31 @@ final class _JavaDocLexer implements FlexLexer {
/* user code: */
private boolean myJdk15Enabled;
private DocCommentTokenTypes myTokenTypes;
private int mySnippetBracesLevel = 0;
private DocCommentTokenTypes myTokenTypes;
private int mySnippetBracesLevel = 0;
/* Enable markdown support for java 23 */
private boolean myMarkdownMode = false;
public _JavaDocLexer(boolean isJdk15Enabled, DocCommentTokenTypes tokenTypes) {
this((java.io.Reader)null);
myJdk15Enabled = isJdk15Enabled;
myTokenTypes = tokenTypes;
}
public _JavaDocLexer(boolean isJdk15Enabled, DocCommentTokenTypes tokenTypes) {
this((java.io.Reader)null);
myJdk15Enabled = isJdk15Enabled;
myTokenTypes = tokenTypes;
}
public boolean checkAhead(char c) {
if (zzMarkedPos >= zzBuffer.length()) return false;
return zzBuffer.charAt(zzMarkedPos) == c;
}
/** Should be called right after a reset */
public void setMarkdownMode(boolean isEnabled) {
myMarkdownMode = isEnabled;
}
public void goTo(int offset) {
zzCurrentPos = zzMarkedPos = zzStartRead = offset;
zzAtEOF = false;
}
public boolean checkAhead(char c) {
if (zzMarkedPos >= zzBuffer.length()) return false;
return zzBuffer.charAt(zzMarkedPos) == c;
}
public void goTo(int offset) {
zzCurrentPos = zzMarkedPos = zzStartRead = offset;
zzAtEOF = false;
}
/**
@@ -804,18 +837,58 @@ final class _JavaDocLexer implements FlexLexer {
{ return myTokenTypes.badCharacter();
}
// fall through
case 33: break;
case 41: break;
case 2:
{ yybegin(COMMENT_DATA); return myTokenTypes.commentData();
}
// fall through
case 34: break;
case 42: break;
case 3:
{ return myTokenTypes.space();
}
// fall through
case 35: break;
case 43: break;
case 4:
{ yybegin(COMMENT_DATA);
if(myMarkdownMode)
return myTokenTypes.sharp();
return myTokenTypes.commentData();
}
// fall through
case 44: break;
case 5:
{ yybegin(COMMENT_DATA);
if(myMarkdownMode)
return myTokenTypes.leftParenthesis();
return myTokenTypes.commentData();
}
// fall through
case 45: break;
case 6:
{ yybegin(COMMENT_DATA);
if(myMarkdownMode)
return myTokenTypes.rightParenthesis();
return myTokenTypes.commentData();
}
// fall through
case 46: break;
case 7:
{ yybegin(COMMENT_DATA);
if(myMarkdownMode)
return myTokenTypes.leftBracket();
return myTokenTypes.commentData();
}
// fall through
case 47: break;
case 8:
{ yybegin(COMMENT_DATA);
if(myMarkdownMode)
return myTokenTypes.rightBracket();
return myTokenTypes.commentData();
}
// fall through
case 48: break;
case 9:
{ if (checkAhead('@')) {
yybegin(INLINE_TAG_NAME);
return myTokenTypes.inlineTagStart();
@@ -826,56 +899,56 @@ final class _JavaDocLexer implements FlexLexer {
}
}
// fall through
case 36: break;
case 5:
case 49: break;
case 10:
{ yybegin(COMMENT_DATA); return myTokenTypes.inlineTagEnd();
}
// fall through
case 37: break;
case 6:
case 50: break;
case 11:
{ return myTokenTypes.commentData();
}
// fall through
case 38: break;
case 7:
case 51: break;
case 12:
{ 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 39: break;
case 8:
case 52: break;
case 13:
{ yybegin(DOC_TAG_VALUE); return myTokenTypes.space();
}
// fall through
case 40: break;
case 9:
case 53: break;
case 14:
{ yybegin(COMMENT_DATA); return myTokenTypes.space();
}
// fall through
case 41: break;
case 10:
case 54: break;
case 15:
{ return myTokenTypes.tagValueSharp();
}
// fall through
case 42: break;
case 11:
case 55: break;
case 16:
{ return myTokenTypes.tagValueToken();
}
// fall through
case 43: break;
case 12:
case 56: break;
case 17:
{ yybegin(DOC_TAG_VALUE_IN_PAREN); return myTokenTypes.tagValueLParen();
}
// fall through
case 44: break;
case 13:
case 57: break;
case 18:
{ return myTokenTypes.tagValueComma();
}
// fall through
case 45: break;
case 14:
case 58: break;
case 19:
{ if (myJdk15Enabled) {
yybegin(DOC_TAG_VALUE_IN_LTGT);
return myTokenTypes.tagValueLT();
@@ -886,58 +959,60 @@ final class _JavaDocLexer implements FlexLexer {
}
}
// fall through
case 46: break;
case 15:
case 59: break;
case 20:
{ yybegin(DOC_TAG_VALUE); return myTokenTypes.tagValueRParen();
}
// fall through
case 47: break;
case 16:
case 60: break;
case 21:
{ yybegin(COMMENT_DATA); return myTokenTypes.tagValueGT();
}
// fall through
case 48: break;
case 17:
case 61: break;
case 22:
{ yybegin(CODE_TAG); return myTokenTypes.commentData();
}
// fall through
case 49: break;
case 18:
case 62: break;
case 23:
{ yybegin(CODE_TAG); return myTokenTypes.space();
}
// fall through
case 50: break;
case 19:
case 63: break;
case 24:
{ yybegin(SNIPPET_TAG_COMMENT_DATA_UNTIL_COLON); return myTokenTypes.commentData();
}
// fall through
case 51: break;
case 20:
case 64: break;
case 25:
{ yybegin(SNIPPET_ATTRIBUTE_VALUE_DOUBLE_QUOTES); return myTokenTypes.tagValueQuote();
}
// fall through
case 52: break;
case 21:
case 65: break;
case 26:
{ yybegin(SNIPPET_ATTRIBUTE_VALUE_SINGLE_QUOTES); return myTokenTypes.tagValueQuote();
}
// fall through
case 53: break;
case 22:
{ return myTokenTypes.commentLeadingAsterisks();
case 66: break;
case 27:
{ if (myMarkdownMode)
return myTokenTypes.commentData();
return myTokenTypes.commentLeadingAsterisks();
}
// fall through
case 54: break;
case 23:
case 67: break;
case 28:
{ yybegin(SNIPPET_TAG_BODY_DATA); return myTokenTypes.tagValueColon();
}
// fall through
case 55: break;
case 24:
case 68: break;
case 29:
{ mySnippetBracesLevel++; return myTokenTypes.commentData();
}
// fall through
case 56: break;
case 25:
case 69: break;
case 30:
{ if (mySnippetBracesLevel > 0) {
mySnippetBracesLevel--;
return myTokenTypes.commentData();
@@ -947,42 +1022,71 @@ final class _JavaDocLexer implements FlexLexer {
}
}
// fall through
case 57: break;
case 26:
case 70: break;
case 31:
{ yybegin(SNIPPET_TAG_COMMENT_DATA_UNTIL_COLON); return myTokenTypes.tagValueQuote();
}
// fall through
case 58: break;
case 27:
{ return myTokenTypes.commentEnd();
case 71: break;
case 32:
{ if(myMarkdownMode)
return myTokenTypes.commentData();
return myTokenTypes.commentEnd();
}
// fall through
case 59: break;
case 28:
case 72: break;
case 33:
{ yybegin(TAG_DOC_SPACE); return myTokenTypes.tagName();
}
// fall through
case 60: break;
case 29:
{ yybegin(COMMENT_DATA_START); return myTokenTypes.commentStart();
case 73: break;
case 34:
{ if(myMarkdownMode)
return myTokenTypes.badCharacter();
yybegin(COMMENT_DATA_START);
return myTokenTypes.commentStart();
}
// fall through
case 61: break;
case 30:
case 74: break;
case 35:
{ if(myMarkdownMode) {
yybegin(COMMENT_DATA_START);
return myTokenTypes.commentLeadingAsterisks();
}
return myTokenTypes.badCharacter();
}
// fall through
case 75: break;
case 36:
{ yybegin(COMMENT_DATA);
if(myMarkdownMode)
return myTokenTypes.codeFence();
return myTokenTypes.commentData();
}
// fall through
case 76: break;
case 37:
{ if (myMarkdownMode)
return myTokenTypes.commentLeadingAsterisks();
return myTokenTypes.commentData();
}
// fall through
case 77: break;
case 38:
{ yybegin(CODE_TAG_SPACE); return myTokenTypes.tagName();
}
// fall through
case 62: break;
case 31:
case 78: break;
case 39:
{ yybegin(PARAM_TAG_SPACE); return myTokenTypes.tagName();
}
// fall through
case 63: break;
case 32:
case 79: break;
case 40:
{ yybegin(SNIPPET_TAG_COMMENT_DATA_UNTIL_COLON); return myTokenTypes.tagName();
}
// fall through
case 64: break;
case 80: break;
default:
zzScanError(ZZ_NO_MATCH);
}
@@ -143,8 +143,22 @@ public class BasicJavaLexer extends LexerBase {
int l1 = mySymbolLength;
char nextChar = locateCharAt(myBufferIndex + l1);
if (nextChar == '/') {
myTokenType = JavaTokenType.END_OF_LINE_COMMENT;
myTokenEndOffset = getLineTerminator(myBufferIndex + l1 + mySymbolLength);
int l2 = mySymbolLength;
if (myBufferIndex + l1 + l2 < myBufferEndOffset && locateCharAt(myBufferIndex + l1 + l2) == '/') {
int l3 = mySymbolLength;
if(myBufferIndex + l1 + l2 + l3 < myBufferEndOffset && locateCharAt(myBufferIndex + l1 + l2 + l3) == '/') {
// Long end of line comment
myTokenType = JavaTokenType.END_OF_LINE_COMMENT;
myTokenEndOffset = getLineTerminator(myBufferIndex + l1 + l2);
} else {
// Java 23 Markdown comments
myTokenType = myJavaDocElementTypeContainer.DOC_COMMENT;
myTokenEndOffset = getClosingMarkdownComment(myBufferIndex + l1 + l2);
}
} else {
myTokenType = JavaTokenType.END_OF_LINE_COMMENT;
myTokenEndOffset = getLineTerminator(myBufferIndex + l1 + l2);
}
}
else if (nextChar == '*') {
int l2 = mySymbolLength;
@@ -214,12 +228,28 @@ public class BasicJavaLexer extends LexerBase {
}
private int getWhitespaces(int offset) {
int pos = offset;
return getChars(offset, " \t\n\r\f");
}
private int getSimpleWhitespaces(int offset) {
return getChars(offset, " \t");
}
/** @return The new position if none of the chars were detected */
private int getChars(int offset, CharSequence charsToDetect) {
int pos = offset;
while (pos < myBufferEndOffset) {
boolean detected = false;
char c = locateCharAt(pos);
if (c != ' ' && c != '\t' && c != '\n' && c != '\r' && c != '\f') break;
pos += mySymbolLength;
for (int i= 0; i < charsToDetect.length(); i++) {
if (charsToDetect.charAt(i) == c) {
pos += mySymbolLength;
detected = true;
break;
}
}
if(!detected) break;
}
return pos;
@@ -288,6 +318,21 @@ public class BasicJavaLexer extends LexerBase {
return false;
}
private int getClosingMarkdownComment(int offset) {
int pos = offset;
while(pos < myBufferEndOffset) {
pos = getLineTerminator(pos);
// Account for whitespaces beforehand
int newPos = getSimpleWhitespaces(pos + mySymbolLength);
newPos = getCharSeqAt(newPos, "///");
if(newPos == -1) break;
pos = newPos;
}
return pos;
}
private int getClosingComment(int offset) {
int pos = offset;
@@ -312,6 +357,20 @@ public class BasicJavaLexer extends LexerBase {
return pos;
}
/** @return The position after of the last char, -1 otherwise */
private int getCharSeqAt(int offset, CharSequence charSequence) {
int pos = offset;
for(int i = 0; i < charSequence.length(); i++) {
if(!isLocatedCharAt(pos, charSequence.charAt(i))) return -1;
pos += mySymbolLength;
}
return pos;
}
private boolean isLocatedCharAt(int offset, char charToDetect) {
return (offset < myBufferEndOffset) && locateCharAt(offset) == charToDetect;
}
private char charAt(int offset) {
return myBufferArray != null ? myBufferArray[offset] : myBuffer.charAt(offset);
}
@@ -5,6 +5,7 @@ import com.intellij.lexer.DocCommentTokenTypes;
import com.intellij.lexer.JavaDocTokenTypes;
import com.intellij.lexer.LexerBase;
import com.intellij.lexer.MergingLexerAdapter;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.tree.IElementType;
import com.intellij.util.text.CharArrayUtil;
@@ -32,6 +33,7 @@ public class JavaDocLexer extends MergingLexerAdapter {
private IElementType myTokenType;
private boolean myAfterLineBreak;
private boolean myInLeadingSpace;
private boolean myMarkdownMode;
AsteriskStripperLexer(final _JavaDocLexer flex, final DocCommentTokenTypes tokenTypes) {
myFlex = flex;
@@ -45,7 +47,10 @@ public class JavaDocLexer extends MergingLexerAdapter {
myBufferEndOffset = endOffset;
myTokenType = null;
myTokenEndOffset = startOffset;
myAfterLineBreak = false;
myInLeadingSpace = false;
myFlex.reset(myBuffer, startOffset, endOffset, initialState);
selectLexerMode(buffer, startOffset);
}
@Override
@@ -97,6 +102,12 @@ public class JavaDocLexer extends MergingLexerAdapter {
}
}
/** Enables markdown mode if necessary */
private void selectLexerMode(@NotNull CharSequence buffer, int startOffset) {
myMarkdownMode = StringUtil.startsWith(buffer, startOffset, "///");
myFlex.setMarkdownMode(myMarkdownMode);
}
private void _locateToken() {
if (myTokenEndOffset == myBufferEndOffset) {
myTokenType = null;
@@ -108,9 +119,15 @@ public class JavaDocLexer extends MergingLexerAdapter {
if (myAfterLineBreak) {
myAfterLineBreak = false;
while (myTokenEndOffset < myBufferEndOffset && myBuffer.charAt(myTokenEndOffset) == '*' &&
(myTokenEndOffset + 1 >= myBufferEndOffset || myBuffer.charAt(myTokenEndOffset + 1) != '/')) {
myTokenEndOffset++;
if (myMarkdownMode) {
while (detectLeadingSlashes()) {
myTokenEndOffset += 3;
}
}else {
while (detectLeadingAsterisks()) {
myTokenEndOffset++;
}
}
myInLeadingSpace = true;
@@ -152,6 +169,17 @@ public class JavaDocLexer extends MergingLexerAdapter {
flexLocateToken();
}
/** @return true for * or *\/ */
private boolean detectLeadingAsterisks() {
return myTokenEndOffset < myBufferEndOffset && myBuffer.charAt(myTokenEndOffset) == '*' &&
(myTokenEndOffset + 1 >= myBufferEndOffset || myBuffer.charAt(myTokenEndOffset + 1) != '/');
}
/** @return The current token is the start of three leading slashes */
private boolean detectLeadingSlashes() {
return myTokenEndOffset + 2 < myBufferEndOffset && StringUtil.startsWith(myBuffer, myTokenEndOffset, "///");
}
private void flexLocateToken() {
try {
myState = myFlex.yystate();
@@ -1,33 +1,40 @@
/* It's an automatically generated code. Do not modify it. */
package com.intellij.lang.java.lexer;
package com.intellij.lang.java.lexer;
import com.intellij.lexer.DocCommentTokenTypes;
import com.intellij.lexer.FlexLexer;
import com.intellij.psi.tree.IElementType;
import com.intellij.lexer.DocCommentTokenTypes;
import com.intellij.lexer.FlexLexer;
import com.intellij.psi.tree.IElementType;
@SuppressWarnings("ALL")
@SuppressWarnings("ALL")
%%
%{
private boolean myJdk15Enabled;
private DocCommentTokenTypes myTokenTypes;
private int mySnippetBracesLevel = 0;
private DocCommentTokenTypes myTokenTypes;
private int mySnippetBracesLevel = 0;
/* Enable markdown support for java 23 */
private boolean myMarkdownMode = false;
public _JavaDocLexer(boolean isJdk15Enabled, DocCommentTokenTypes tokenTypes) {
this((java.io.Reader)null);
myJdk15Enabled = isJdk15Enabled;
myTokenTypes = tokenTypes;
}
public _JavaDocLexer(boolean isJdk15Enabled, DocCommentTokenTypes tokenTypes) {
this((java.io.Reader)null);
myJdk15Enabled = isJdk15Enabled;
myTokenTypes = tokenTypes;
}
public boolean checkAhead(char c) {
if (zzMarkedPos >= zzBuffer.length()) return false;
return zzBuffer.charAt(zzMarkedPos) == c;
}
/** Should be called right after a reset */
public void setMarkdownMode(boolean isEnabled) {
myMarkdownMode = isEnabled;
}
public void goTo(int offset) {
zzCurrentPos = zzMarkedPos = zzStartRead = offset;
zzAtEOF = false;
}
public boolean checkAhead(char c) {
if (zzMarkedPos >= zzBuffer.length()) return false;
return zzBuffer.charAt(zzMarkedPos) == c;
}
public void goTo(int offset) {
zzCurrentPos = zzMarkedPos = zzStartRead = offset;
zzAtEOF = false;
}
%}
%class _JavaDocLexer
@@ -60,9 +67,31 @@ IDENTIFIER={ALPHA}({ALPHA}|{DIGIT}|[":.-"])*
TAG_IDENTIFIER=[^\ \t\f\n\r]+
INLINE_TAG_IDENTIFIER=[^\ \t\f\n\r\}]+
// 20 should cover most fences. JFlex doesn't allow unlimited upper bound
CODE_FENCE_BACKTICKS=(`{3, 20})
CODE_FENCE_WAVES=(\~{3, 20})
CODE_FENCE = ({CODE_FENCE_BACKTICKS}|{CODE_FENCE_WAVES})
START_COMMENT_HTML="/**"
LEADING_TOKEN_HTML=\*
LEADING_TOKEN_MARKDOWN="///"
%%
<YYINITIAL> "/**" { yybegin(COMMENT_DATA_START); return myTokenTypes.commentStart(); }
<YYINITIAL> {START_COMMENT_HTML} {
if(myMarkdownMode)
return myTokenTypes.badCharacter();
yybegin(COMMENT_DATA_START);
return myTokenTypes.commentStart();
}
<YYINITIAL> {LEADING_TOKEN_MARKDOWN} {
if(myMarkdownMode) {
yybegin(COMMENT_DATA_START);
return myTokenTypes.commentLeadingAsterisks();
}
return myTokenTypes.badCharacter();
}
<COMMENT_DATA_START> {WHITE_DOC_SPACE_CHAR}+ { return myTokenTypes.space(); }
<COMMENT_DATA> {WHITE_DOC_SPACE_NO_LR}+ { return myTokenTypes.commentData(); }
<COMMENT_DATA> [\n\r]+{WHITE_DOC_SPACE_CHAR}* { return myTokenTypes.space(); }
@@ -91,6 +120,53 @@ INLINE_TAG_IDENTIFIER=[^\ \t\f\n\r\}]+
<DOC_TAG_VALUE_IN_LTGT> {IDENTIFIER} { return myTokenTypes.tagValueToken(); }
<DOC_TAG_VALUE_IN_LTGT> [\>] { yybegin(COMMENT_DATA); return myTokenTypes.tagValueGT(); }
<COMMENT_DATA_START, COMMENT_DATA> {
{CODE_FENCE} {
yybegin(COMMENT_DATA);
if(myMarkdownMode)
return myTokenTypes.codeFence();
return myTokenTypes.commentData();
}
// According to the JFlex user guide, lookahead should be avoided.
(\\\[) { yybegin(COMMENT_DATA); return myTokenTypes.commentData(); }
(\\\]) { yybegin(COMMENT_DATA); return myTokenTypes.commentData(); }
(\\\() { yybegin(COMMENT_DATA); return myTokenTypes.commentData(); }
(\\\)) { yybegin(COMMENT_DATA); return myTokenTypes.commentData(); }
"#" {
yybegin(COMMENT_DATA);
if(myMarkdownMode)
return myTokenTypes.sharp();
return myTokenTypes.commentData();
}
\[ {
yybegin(COMMENT_DATA);
if(myMarkdownMode)
return myTokenTypes.leftBracket();
return myTokenTypes.commentData();
}
\] {
yybegin(COMMENT_DATA);
if(myMarkdownMode)
return myTokenTypes.rightBracket();
return myTokenTypes.commentData();
}
\( {
yybegin(COMMENT_DATA);
if(myMarkdownMode)
return myTokenTypes.leftParenthesis();
return myTokenTypes.commentData();
}
\) {
yybegin(COMMENT_DATA);
if(myMarkdownMode)
return myTokenTypes.rightParenthesis();
return myTokenTypes.commentData();
}
}
<COMMENT_DATA_START, COMMENT_DATA, CODE_TAG> "{" {
if (checkAhead('@')) {
yybegin(INLINE_TAG_NAME);
@@ -131,9 +207,22 @@ SNIPPET_ATTRIBUTE_VALUE_SINGLE_QUOTES, SNIPPET_TAG_COMMENT_DATA_UNTIL_COLON> "}"
\" { yybegin(SNIPPET_ATTRIBUTE_VALUE_DOUBLE_QUOTES); return myTokenTypes.tagValueQuote(); }
' { yybegin(SNIPPET_ATTRIBUTE_VALUE_SINGLE_QUOTES); return myTokenTypes.tagValueQuote(); }
: { yybegin(SNIPPET_TAG_BODY_DATA); return myTokenTypes.tagValueColon(); }
\* { return myTokenTypes.commentLeadingAsterisks(); }
{LEADING_TOKEN_HTML} {
if (myMarkdownMode)
return myTokenTypes.commentData();
return myTokenTypes.commentLeadingAsterisks();
}
{LEADING_TOKEN_MARKDOWN} {
if (myMarkdownMode)
return myTokenTypes.commentLeadingAsterisks();
return myTokenTypes.commentData();
}
{WHITE_DOC_SPACE_CHAR}+ { return myTokenTypes.space(); }
[^\*] { yybegin(SNIPPET_TAG_COMMENT_DATA_UNTIL_COLON); return myTokenTypes.commentData(); }
[^\/\/\/] { yybegin(SNIPPET_TAG_COMMENT_DATA_UNTIL_COLON); return myTokenTypes.commentData(); }
}
<SNIPPET_TAG_BODY_DATA> {
@@ -160,5 +249,9 @@ SNIPPET_ATTRIBUTE_VALUE_SINGLE_QUOTES, SNIPPET_TAG_COMMENT_DATA_UNTIL_COLON> "}"
<CODE_TAG, CODE_TAG_SPACE> {WHITE_DOC_SPACE_CHAR}+ { yybegin(CODE_TAG); return myTokenTypes.space(); }
"*"+"/" { return myTokenTypes.commentEnd(); }
"*"+"/" {
if(myMarkdownMode)
return myTokenTypes.commentData();
return myTokenTypes.commentEnd();
}
[^] { return myTokenTypes.badCharacter(); }
@@ -11,6 +11,7 @@ import com.intellij.psi.impl.source.AbstractBasicJavaDocElementTypeFactory;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -161,11 +162,193 @@ public final class BasicJavaDocParser {
parseSimpleTagValue(builder, javaDocElementTypeContainer);
}
}
else if (tokenType == JavaDocTokenType.DOC_CODE_FENCE) {
if (getBraceScope(builder) > 0) {
builder.remapCurrentToken(JavaDocTokenType.DOC_COMMENT_DATA);
builder.advanceLexer();
return;
}
char fenceStart = builder.getOriginalText().charAt(builder.getCurrentOffset());
PsiBuilder.Marker tag = builder.mark();
while (!builder.eof()) {
builder.advanceLexer();
if (getTokenType(builder) == JavaDocTokenType.DOC_CODE_FENCE &&
builder.getOriginalText().charAt(builder.getCurrentOffset()) == fenceStart) {
break;
}
else {
builder.remapCurrentToken(JavaDocTokenType.DOC_COMMENT_DATA);
}
}
if (!builder.eof()) {
builder.advanceLexer();
}
tag.done(javaDocElementTypeContainer.DOC_MARKDOWN_CODE_BLOCK);
}
else if (tokenType == JavaDocTokenType.DOC_LBRACKET) {
builder.setDebugMode(true);
boolean hasLabel = true;
PsiBuilder.Marker tag = builder.mark();
// Step 1 ensure that we have a label
int leftBracketCount = 1;
int rightBracketCount = 0;
int startLabelOffset = builder.getCurrentOffset();
int endLabelOffset;
while (!builder.eof()) {
IElementType token = findInlineToken(builder, JavaDocTokenType.DOC_RBRACKET, JavaDocTokenType.DOC_LBRACKET, true);
if (token == JavaDocTokenType.DOC_LBRACKET) {
leftBracketCount++;
continue;
}
if (token == JavaDocTokenType.DOC_RBRACKET) {
rightBracketCount++;
if (leftBracketCount == rightBracketCount) break;
}
}
endLabelOffset = builder.getCurrentOffset();
boolean isShortRefEmpty = endLabelOffset - startLabelOffset <= 1;
if (leftBracketCount != rightBracketCount || isShortRefEmpty) {
tag.rollbackTo();
builder.advanceLexer();
return;
}
IElementType firstReferenceToken = findInlineToken(builder, JavaDocTokenType.DOC_LBRACKET, JavaDocTokenType.DOC_SPACE, false);
if (firstReferenceToken != JavaDocTokenType.DOC_LBRACKET) {
if (leftBracketCount > 1 || firstReferenceToken == JavaDocTokenType.DOC_LPAREN) {
tag.rollbackTo();
builder.advanceLexer();
return;
}
hasLabel = false;
}
// Step 2 get the reference for full reference link
if (hasLabel) {
if (findInlineToken(builder, JavaDocTokenType.DOC_RBRACKET, JavaDocTokenType.DOC_LBRACKET, true) != JavaDocTokenType.DOC_RBRACKET) {
if (leftBracketCount > 1) {
tag.rollbackTo();
builder.advanceLexer();
return;
}
hasLabel = false;
}
}
// Step 3, parse the content
tag.rollbackTo();
tag = builder.mark();
if (hasLabel) {
while (!builder.eof()) {
builder.advanceLexer();
if (builder.getCurrentOffset() < endLabelOffset) {
builder.remapCurrentToken(JavaDocTokenType.DOC_COMMENT_DATA);
}
else {
break;
}
}
builder.advanceLexer();
}
// Parse the reference itself
builder.advanceLexer();
parseMarkdownReference(builder, javaDocElementTypeContainer);
builder.advanceLexer();
tag.done(javaDocElementTypeContainer.DOC_MARKDOWN_REFERENCE_LINK);
}
else {
remapAndAdvance(builder);
}
}
private static void parseMarkdownReference(@NotNull PsiBuilder builder,
@NotNull AbstractBasicJavaDocElementTypeFactory.JavaDocElementTypeContainer javaDocElementTypeContainer) {
PsiBuilder.Marker refStart = builder.mark();
if (getTokenType(builder) == JavaDocTokenType.DOC_RBRACKET) {
refStart.drop();
return;
}
if (getTokenType(builder) != JavaDocTokenType.DOC_SHARP) {
builder.remapCurrentToken(javaDocElementTypeContainer.DOC_REFERENCE_HOLDER);
builder.advanceLexer();
}
if (getTokenType(builder) == JavaDocTokenType.DOC_SHARP) {
// Existing integration require this token for auto completion
builder.remapCurrentToken(JavaDocTokenType.DOC_TAG_VALUE_SHARP_TOKEN);
// method/variable name
builder.advanceLexer();
builder.remapCurrentToken(JavaDocTokenType.DOC_TAG_VALUE_TOKEN);
// A method only has parenthesis and a single comment data token
builder.advanceLexer();
if (builder.getTokenType() == JavaDocTokenType.DOC_LPAREN) {
builder.advanceLexer();
PsiBuilder.Marker subValue = builder.mark();
if (getTokenType(builder) == JavaDocTokenType.DOC_COMMENT_DATA) {
builder.remapCurrentToken(javaDocElementTypeContainer.DOC_TYPE_HOLDER);
builder.advanceLexer();
}
if (getTokenType(builder) == JavaDocTokenType.DOC_RPAREN) {
subValue.done(javaDocElementTypeContainer.DOC_TAG_VALUE_ELEMENT);
builder.advanceLexer();
}
else {
subValue.drop();
}
}
refStart.done(javaDocElementTypeContainer.DOC_METHOD_OR_FIELD_REF);
return;
}
refStart.drop();
}
/** Look for the token provided by `needle`, taking into account markdown line break rules */
@Contract(mutates = "param1")
private static @Nullable IElementType findInlineToken(@NotNull PsiBuilder builder,
IElementType needle,
IElementType travelToken,
boolean areDisallowed) {
IElementType token = null;
IElementType previousToken;
while (!builder.eof()) {
builder.advanceLexer();
previousToken = token;
token = getTokenType(builder);
if (token == needle) {
return token;
}
boolean travelTokenFound = travelToken == token;
if ((areDisallowed && travelTokenFound) || (!areDisallowed && !travelTokenFound)) {
break;
}
// Markdown specific, check for EOL
if (token == JavaDocTokenType.DOC_SPACE && previousToken == JavaDocTokenType.DOC_SPACE) {
break;
}
}
return builder.eof() ? null : token;
}
private static void parseSnippetTagValue(@NotNull PsiBuilder builder,
@NotNull AbstractBasicJavaDocElementTypeFactory.JavaDocElementTypeContainer javaDocElementTypeContainer) {
// we are right after @snippet
@@ -35,6 +35,10 @@ public abstract class AbstractBasicJavaDocElementTypeFactory {
public final IElementType DOC_PARAMETER_REF;
public final IElementType DOC_MARKDOWN_CODE_BLOCK;
public final IElementType DOC_MARKDOWN_REFERENCE_LINK;
public JavaDocElementTypeContainer(IElementType DOC_TAG,
IElementType DOC_COMMENT,
IElementType DOC_SNIPPET_TAG,
@@ -48,7 +52,9 @@ public abstract class AbstractBasicJavaDocElementTypeFactory {
IElementType DOC_SNIPPET_ATTRIBUTE,
IElementType DOC_METHOD_OR_FIELD_REF,
IElementType DOC_TYPE_HOLDER,
IElementType DOC_PARAMETER_REF) {
IElementType DOC_PARAMETER_REF,
IElementType DOC_MARKDOWN_CODE_BLOCK,
IElementType DOC_MARKDOWN_REFERENCE_LINK) {
this.DOC_TAG = DOC_TAG;
this.DOC_COMMENT = DOC_COMMENT;
this.DOC_SNIPPET_TAG = DOC_SNIPPET_TAG;
@@ -63,6 +69,8 @@ public abstract class AbstractBasicJavaDocElementTypeFactory {
this.DOC_METHOD_OR_FIELD_REF = DOC_METHOD_OR_FIELD_REF;
this.DOC_TYPE_HOLDER = DOC_TYPE_HOLDER;
this.DOC_PARAMETER_REF = DOC_PARAMETER_REF;
this.DOC_MARKDOWN_CODE_BLOCK = DOC_MARKDOWN_CODE_BLOCK;
this.DOC_MARKDOWN_REFERENCE_LINK = DOC_MARKDOWN_REFERENCE_LINK;
}
}
@@ -43,6 +43,8 @@ public interface BasicJavaDocElementType {
IElementType BASIC_DOC_TYPE_HOLDER = new IJavaDocElementType("DOC_TYPE_HOLDER");
IElementType BASIC_DOC_COMMENT = new IJavaDocElementType("DOC_COMMENT");
IElementType BASIC_DOC_MARKDOWN_CODE_BLOCK = new IJavaDocElementType("DOC_CODE_BLOCK");
IElementType BASIC_DOC_MARKDOWN_REFERENCE_LINK = new IJavaDocElementType("DOC_REFERENCE_LINK");
ParentAwareTokenSet BASIC_ALL_JAVADOC_ELEMENTS = ParentAwareTokenSet.create(
BASIC_DOC_TAG, BASIC_DOC_INLINE_TAG, BASIC_DOC_METHOD_OR_FIELD_REF, BASIC_DOC_PARAMETER_REF, BASIC_DOC_TAG_VALUE_ELEMENT,