KDocKnownTag: J2K

This commit is contained in:
Dmitry Jemerov
2016-04-28 16:32:51 +02:00
parent 6935cfeafa
commit 3b57b78ddc
5 changed files with 41 additions and 52 deletions
@@ -76,7 +76,7 @@ CODE_FENCE_END=("```" | "~~~")
return KDocTokens.LEADING_ASTERISK; } return KDocTokens.LEADING_ASTERISK; }
<CONTENTS_BEGINNING> "@"{TAG_NAME} { <CONTENTS_BEGINNING> "@"{TAG_NAME} {
KDocKnownTag tag = KDocKnownTag.findByTagName(zzBuffer.subSequence(zzStartRead, zzMarkedPos)); KDocKnownTag tag = KDocKnownTag.Companion.findByTagName(zzBuffer.subSequence(zzStartRead, zzMarkedPos));
yybegin(tag != null && tag.isReferenceRequired() ? TAG_BEGINNING : TAG_TEXT_BEGINNING); yybegin(tag != null && tag.isReferenceRequired() ? TAG_BEGINNING : TAG_TEXT_BEGINNING);
return KDocTokens.TAG_NAME; return KDocTokens.TAG_NAME;
} }
@@ -1,4 +1,4 @@
/* The following code was generated by JFlex 1.4.3 on 4/28/16 3:03 PM */ /* The following code was generated by JFlex 1.4.3 on 4/28/16 4:31 PM */
package org.jetbrains.kotlin.kdoc.lexer; package org.jetbrains.kotlin.kdoc.lexer;
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.kdoc.parser.KDocKnownTag;
/** /**
* This class is a scanner generated by * This class is a scanner generated by
* <a href="http://www.jflex.de/">JFlex</a> 1.4.3 * <a href="http://www.jflex.de/">JFlex</a> 1.4.3
* on 4/28/16 3:03 PM from the specification file * on 4/28/16 4:31 PM from the specification file
* <tt>/Users/yole/jetbrains/kotlin/compiler/frontend/src/org/jetbrains/kotlin/kdoc/lexer/KDoc.flex</tt> * <tt>/Users/yole/jetbrains/kotlin/compiler/frontend/src/org/jetbrains/kotlin/kdoc/lexer/KDoc.flex</tt>
*/ */
class _KDocLexer implements FlexLexer { class _KDocLexer implements FlexLexer {
@@ -583,31 +583,25 @@ class _KDocLexer implements FlexLexer {
return KDocTokens.TEXT; return KDocTokens.TEXT;
} }
case 21: break; case 21: break;
case 13:
{ KDocKnownTag tag = KDocKnownTag.findByTagName(zzBuffer.subSequence(zzStartRead, zzMarkedPos));
yybegin(tag != null && tag.isReferenceRequired() ? TAG_BEGINNING : TAG_TEXT_BEGINNING);
return KDocTokens.TAG_NAME;
}
case 22: break;
case 10: case 10:
{ yybegin(CODE_BLOCK_CONTENTS_BEGINNING); { yybegin(CODE_BLOCK_CONTENTS_BEGINNING);
return KDocTokens.LEADING_ASTERISK; return KDocTokens.LEADING_ASTERISK;
} }
case 23: break; case 22: break;
case 1: case 1:
{ return TokenType.BAD_CHARACTER; { return TokenType.BAD_CHARACTER;
} }
case 24: break; case 23: break;
case 14: case 14:
{ yybegin(CONTENTS_BEGINNING); { yybegin(CONTENTS_BEGINNING);
return KDocTokens.START; return KDocTokens.START;
} }
case 25: break; case 24: break;
case 2: case 2:
{ yybegin(CONTENTS); { yybegin(CONTENTS);
return KDocTokens.TEXT; return KDocTokens.TEXT;
} }
case 26: break; case 25: break;
case 20: case 20:
// lookahead expression with fixed base length // lookahead expression with fixed base length
zzMarkedPos = zzStartRead + 3; zzMarkedPos = zzStartRead + 3;
@@ -615,32 +609,32 @@ class _KDocLexer implements FlexLexer {
yybegin(CONTENTS); yybegin(CONTENTS);
return KDocTokens.TEXT; return KDocTokens.TEXT;
} }
case 27: break; case 26: break;
case 19: case 19:
{ yybegin(CONTENTS); { yybegin(CONTENTS);
return KDocTokens.MARKDOWN_INLINE_LINK; return KDocTokens.MARKDOWN_INLINE_LINK;
} }
case 28: break; case 27: break;
case 5: case 5:
{ yybegin(CONTENTS); { yybegin(CONTENTS);
return KDocTokens.TEXT; return KDocTokens.TEXT;
} }
case 29: break; case 28: break;
case 12: case 12:
{ yybegin(CONTENTS); { yybegin(CONTENTS);
return KDocTokens.MARKDOWN_ESCAPED_CHAR; return KDocTokens.MARKDOWN_ESCAPED_CHAR;
} }
case 30: break; case 29: break;
case 16: case 16:
{ yybegin(TAG_TEXT_BEGINNING); { yybegin(TAG_TEXT_BEGINNING);
return KDocTokens.MARKDOWN_LINK; return KDocTokens.MARKDOWN_LINK;
} }
case 31: break; case 30: break;
case 4: case 4:
{ yybegin(CONTENTS_BEGINNING); { yybegin(CONTENTS_BEGINNING);
return KDocTokens.LEADING_ASTERISK; return KDocTokens.LEADING_ASTERISK;
} }
case 32: break; case 31: break;
case 9: case 9:
{ if (yytextContainLineBreaks()) { { if (yytextContainLineBreaks()) {
yybegin(CODE_BLOCK_LINE_BEGINNING); yybegin(CODE_BLOCK_LINE_BEGINNING);
@@ -648,7 +642,7 @@ class _KDocLexer implements FlexLexer {
} }
return KDocTokens.CODE_BLOCK_TEXT; return KDocTokens.CODE_BLOCK_TEXT;
} }
case 33: break; case 32: break;
case 3: case 3:
{ if (yytextContainLineBreaks()) { { if (yytextContainLineBreaks()) {
yybegin(LINE_BEGINNING); yybegin(LINE_BEGINNING);
@@ -658,28 +652,34 @@ class _KDocLexer implements FlexLexer {
return KDocTokens.TEXT; // internal white space return KDocTokens.TEXT; // internal white space
} }
} }
case 34: break; case 33: break;
case 18: case 18:
// lookahead expression with fixed lookahead length // lookahead expression with fixed lookahead length
yypushback(1); yypushback(1);
{ yybegin(CONTENTS); { yybegin(CONTENTS);
return KDocTokens.MARKDOWN_LINK; return KDocTokens.MARKDOWN_LINK;
} }
case 35: break; case 34: break;
case 17: case 17:
{ yybegin(CONTENTS); { yybegin(CONTENTS);
return KDocTokens.MARKDOWN_LINK; return KDocTokens.MARKDOWN_LINK;
} }
case 36: break; case 35: break;
case 11: case 11:
{ if (isLastToken()) return KDocTokens.END; { if (isLastToken()) return KDocTokens.END;
else return KDocTokens.TEXT; else return KDocTokens.TEXT;
} }
case 37: break; case 36: break;
case 7: case 7:
{ yybegin(TAG_TEXT_BEGINNING); { yybegin(TAG_TEXT_BEGINNING);
return KDocTokens.MARKDOWN_LINK; return KDocTokens.MARKDOWN_LINK;
} }
case 37: break;
case 13:
{ KDocKnownTag tag = KDocKnownTag.Companion.findByTagName(zzBuffer.subSequence(zzStartRead, zzMarkedPos));
yybegin(tag != null && tag.isReferenceRequired() ? TAG_BEGINNING : TAG_TEXT_BEGINNING);
return KDocTokens.TAG_NAME;
}
case 38: break; case 38: break;
case 6: case 6:
{ if (yytextContainLineBreaks()) { { if (yytextContainLineBreaks()) {
@@ -14,11 +14,11 @@
* limitations under the License. * limitations under the License.
*/ */
package org.jetbrains.kotlin.kdoc.parser; package org.jetbrains.kotlin.kdoc.parser
import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.util.text.StringUtil
public enum KDocKnownTag { enum class KDocKnownTag private constructor(val isReferenceRequired: Boolean, val isSectionStart: Boolean) {
AUTHOR(false, false), AUTHOR(false, false),
THROWS(true, false), THROWS(true, false),
EXCEPTION(true, false), EXCEPTION(true, false),
@@ -31,31 +31,20 @@ public enum KDocKnownTag {
SAMPLE(true, false), SAMPLE(true, false),
SUPPRESS(false, false); SUPPRESS(false, false);
private final boolean takesReference;
private final boolean startsSection;
KDocKnownTag(boolean takesReference, boolean startsSection) { companion object {
this.takesReference = takesReference; fun findByTagName(tagName: CharSequence): KDocKnownTag? {
this.startsSection = startsSection; var tagName = tagName
} if (StringUtil.startsWith(tagName, "@")) {
tagName = tagName.subSequence(1, tagName.length)
}
try {
return valueOf(tagName.toString().toUpperCase())
}
catch (ignored: IllegalArgumentException) {
}
public boolean isReferenceRequired() { return null
return takesReference;
}
public boolean isSectionStart() {
return startsSection;
}
public static KDocKnownTag findByTagName(CharSequence tagName) {
if (StringUtil.startsWith(tagName, "@")) {
tagName = tagName.subSequence(1, tagName.length());
} }
try {
return valueOf(tagName.toString().toUpperCase());
}
catch (IllegalArgumentException ignored) {
}
return null;
} }
} }
@@ -59,7 +59,7 @@ public class KDocParser implements PsiParser {
private static PsiBuilder.Marker parseTag(PsiBuilder builder, PsiBuilder.Marker currentSectionMarker) { private static PsiBuilder.Marker parseTag(PsiBuilder builder, PsiBuilder.Marker currentSectionMarker) {
String tagName = builder.getTokenText(); String tagName = builder.getTokenText();
KDocKnownTag knownTag = KDocKnownTag.findByTagName(tagName); KDocKnownTag knownTag = KDocKnownTag.Companion.findByTagName(tagName);
if (knownTag != null && knownTag.isSectionStart()) { if (knownTag != null && knownTag.isSectionStart()) {
currentSectionMarker.done(KDocElementTypes.KDOC_SECTION); currentSectionMarker.done(KDocElementTypes.KDOC_SECTION);
currentSectionMarker = builder.mark(); currentSectionMarker = builder.mark();
@@ -56,7 +56,7 @@ open class KDocTag(node: ASTNode) : KDocElementImpl(node) {
val knownTag: KDocKnownTag? val knownTag: KDocKnownTag?
get() { get() {
return if (name != null) KDocKnownTag.findByTagName(name) else null return name?.let { KDocKnownTag.findByTagName(it) }
} }
private fun hasSubject(contentChildren: List<ASTNode>): Boolean { private fun hasSubject(contentChildren: List<ASTNode>): Boolean {