runtime(java): Recognise the CommonMark form (///) of Javadoc comments
Complement "g:java_ignore_javadoc" with "g:java_ignore_html"
and "g:java_ignore_markdown" to allow selectively disabling
the recognition of HTML and CommonMark respectively.
(Note that this is not a preview feature.)
======================== LIMITATION ========================
According to the syntactical details of JEP 467:
> Any leading whitespace and the three initial / characters
> are removed from each line.
>
> The lines are shifted left, by removing leading whitespace
> characters, until the non-blank line with the least
> leading whitespace has no remaining leading whitespace.
>
> Additional leading whitespace and any trailing whitespace
> in each line is preserved, because it may be significant.
the following example:
------------------------------------------------------------
/// A summary sentence.
/// A list:
/// - Item A.
/// - Item B.
///
/// Some code span, starting here `
/// 1 + 2 ` and ending at the previous \`.
------------------------------------------------------------
should be interpreted as if it were written thus:
------------------------------------------------------------
///A summary sentence.
/// A list:
/// - Item A.
/// - Item B.
///
/// Some code span, starting here `
/// 1 + 2 ` and ending at the previous \`.
------------------------------------------------------------
Since automatic line rewriting will not be pursued, parts of
such comments having significant whitespace may be ‘wrongly’
highlighted. For convenience, a &fex function is defined to
‘correct’ it: g:javaformat#RemoveCommonMarkdownWhitespace()
(:help ft-java-plugin).
References:
https://openjdk.org/jeps/467
https://spec.commonmark.org/0.31.2
closes: #15740
Co-authored-by: Tim Pope <code@tpope.net>
Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/runtime/syntax/java.vim b/runtime/syntax/java.vim
index 800faa4..737219a 100644
--- a/runtime/syntax/java.vim
+++ b/runtime/syntax/java.vim
@@ -3,7 +3,7 @@
" Maintainer: Aliaksei Budavei <0x000c70 AT gmail DOT com>
" Former Maintainer: Claudio Fleiner <claudio@fleiner.com>
" Repository: https://github.com/zzzyxwvut/java-vim.git
-" Last Change: 2024 Sep 19
+" Last Change: 2024 Sep 28
" Please check :help java.vim for comments on some of the options available.
@@ -156,6 +156,10 @@
let [s:ff.PeekTo, s:ff.PeekFrom, s:ff.GroupArgs] = repeat([s:ff.RightConstant], 3)
endif
+let s:with_html = !exists("g:java_ignore_html")
+let s:with_markdown = !exists("g:java_ignore_markdown")
+lockvar s:with_html s:with_markdown
+
" Java module declarations (JLS-17, §7.7).
"
" Note that a "module-info" file will be recognised with an arbitrary
@@ -172,7 +176,7 @@
hi def link javaModuleStmt Statement
hi def link javaModuleExternal Include
- if !exists("g:java_ignore_javadoc") && g:main_syntax != 'jsp'
+ if !exists("g:java_ignore_javadoc") && (s:with_html || s:with_markdown) && g:main_syntax != 'jsp'
syn match javaDocProvidesTag contained "@provides\_s\+\S\+" contains=javaDocParam
syn match javaDocUsesTag contained "@uses\_s\+\S\+" contains=javaDocParam
hi def link javaDocProvidesTag Special
@@ -335,18 +339,52 @@
exec 'syn region javaCommentMarkupTagAttr contained transparent matchgroup=javaHtmlArg start=/\<\%(re\%(gex\|gion\|placement\)\|substring\|t\%(arget\|ype\)\)\%(\s*=\)\@=/ matchgroup=javaHtmlString end=/\%(=\s*\)\@' . s:ff.Peek('80', '') . '<=\%("[^"]\+"\|' . "\x27[^\x27]\\+\x27" . '\|\%([.-]\|\k\)\+\)/ nextgroup=javaCommentMarkupTagAttr,javaSpaceError skipwhite oneline'
syn match javaCommentError contained "/\*"me=e-1 display
-if !exists("g:java_ignore_javadoc") && g:main_syntax != 'jsp'
- " The overridable "html*" default links must be defined _before_ the
- " inclusion of the same default links from "html.vim".
- hi def link htmlComment Special
- hi def link htmlCommentPart Special
- hi def link htmlArg Type
- hi def link htmlString String
+if !exists("g:java_ignore_javadoc") && (s:with_html || s:with_markdown) && g:main_syntax != 'jsp'
+ " The overridable "html*" and "markdown*" default links must be
+ " defined _before_ the inclusion of the same default links from
+ " "html.vim" and "markdown.vim".
+ if s:with_html || s:with_markdown
+ hi def link htmlComment Special
+ hi def link htmlCommentPart Special
+ hi def link htmlArg Type
+ hi def link htmlString String
+ endif
+
+ if s:with_markdown
+ hi def link markdownCode Special
+ hi def link markdownCodeBlock Special
+ hi def link markdownCodeDelimiter Special
+ hi def link markdownLinkDelimiter Comment
+ endif
+
syntax case ignore
+ " Note that javaDocSeeTag is valid in HTML and Markdown.
+ let s:ff.WithMarkdown = s:ff.RightConstant
+
" Include HTML syntax coloring for Javadoc comments.
- syntax include @javaHtml syntax/html.vim
- unlet b:current_syntax
+ if s:with_html
+ syntax include @javaHtml syntax/html.vim
+ unlet b:current_syntax
+ endif
+
+ " Include Markdown syntax coloring (v7.2.437) for Javadoc comments.
+ if s:with_markdown
+ try
+ syntax include @javaMarkdown syntax/markdown.vim
+ unlet b:current_syntax
+ let s:ff.WithMarkdown = s:ff.LeftConstant
+ catch /\<E48[45]:/
+ call s:ReportOnce(v:exception)
+ unlockvar s:with_markdown
+ let s:with_markdown = 0
+ lockvar s:with_markdown
+ hi clear markdownCode
+ hi clear markdownCodeBlock
+ hi clear markdownCodeDelimiter
+ hi clear markdownLinkDelimiter
+ endtry
+ endif
" HTML enables spell checking for all text that is not in a syntax
" item (:syntax spell toplevel); instead, limit spell checking to
@@ -357,10 +395,71 @@
call s:ReportOnce(v:exception)
endtry
- syn region javaDocComment start="/\*\*" end="\*/" keepend contains=javaCommentTitle,@javaHtml,@javaDocTags,javaTodo,javaCommentError,javaSpaceError,@Spell fold
- exec 'syn region javaCommentTitle contained matchgroup=javaDocComment start="/\*\*" matchgroup=javaCommentTitle end="\.$" end="\.[ \t\r]\@=" end="\%(^\s*\**\s*\)\@' . s:ff.Peek('80', '') . '<=@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,@javaDocTags'
- syn region javaCommentTitle contained matchgroup=javaDocComment start="/\*\*\s*\r\=\n\=\s*\**\s*\%({@return\>\)\@=" matchgroup=javaCommentTitle end="}\%(\s*\.*\)*" contains=@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,@javaDocTags,javaTitleSkipBlock
- syn region javaCommentTitle contained matchgroup=javaDocComment start="/\*\*\s*\r\=\n\=\s*\**\s*\%({@summary\>\)\@=" matchgroup=javaCommentTitle end="}" contains=@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,@javaDocTags,javaTitleSkipBlock
+ if s:with_markdown
+ syn region javaMarkdownComment start="///" skip="^\s*///.*$" end="^" keepend contains=javaMarkdownCommentTitle,javaMarkdownShortcutLink,@javaMarkdown,@javaDocTags,javaTodo,@Spell nextgroup=javaMarkdownCommentTitle fold
+ syn match javaMarkdownCommentMask contained "^\s*///"
+ exec 'syn region javaMarkdownCommentTitle contained matchgroup=javaMarkdownComment start="\%(///.*\r\=\n\s*\)\@' . s:ff.Peek('80', '') . '<!///" matchgroup=javaMarkdownCommentTitle end="\.$" end="\.[ \t\r]\@=" end="\n\%(\s*///\s*$\)\@=" end="\%(^\s*///\s*\)\@' . s:ff.Peek('80', '') . '<=@"me=s-2,he=s-1 contains=javaMarkdownShortcutLink,@javaMarkdown,javaMarkdownCommentMask,javaTodo,@Spell,@javaDocTags'
+ exec 'syn region javaMarkdownCommentTitle contained matchgroup=javaMarkdownComment start="\%(///.*\r\=\n\s*\)\@' . s:ff.Peek('80', '') . '<!///\s*\%({@return\>\)\@=" matchgroup=javaMarkdownCommentTitle end="}\%(\s*\.*\)*" contains=javaMarkdownShortcutLink,@javaMarkdown,javaMarkdownCommentMask,javaTodo,@Spell,@javaDocTags,javaTitleSkipBlock'
+ exec 'syn region javaMarkdownCommentTitle contained matchgroup=javaMarkdownComment start="\%(///.*\r\=\n\s*\)\@' . s:ff.Peek('80', '') . '<!///\s*\%({@summary\>\)\@=" matchgroup=javaMarkdownCommentTitle end="}" contains=javaMarkdownShortcutLink,@javaMarkdown,javaMarkdownCommentMask,javaTodo,@Spell,@javaDocTags,javaTitleSkipBlock'
+
+ syn clear markdownId markdownLineStart markdownH1 markdownH2 markdownHeadingRule markdownRule markdownCode markdownCodeBlock markdownIdDeclaration
+ " REDEFINE THE MARKDOWN ITEMS ANCHORED WITH "^", OBSERVING THE
+ " DEFINITION ORDER.
+ syn match markdownLineStart contained "^\s*///\s*[<@]\@!" contains=@markdownBlock,javaMarkdownCommentTitle,javaMarkdownCommentMask nextgroup=@markdownBlock,htmlSpecialChar
+ " See https://spec.commonmark.org/0.31.2/#setext-headings.
+ syn match markdownH1 contained "^\s*/// \{,3}.\+\r\=\n\s*/// \{,3}=\+\s*$" contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink,javaMarkdownCommentMask
+ syn match markdownH2 contained "^\s*/// \{,3}.\+\r\=\n\s*/// \{,3}-\+\s*$" contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink,javaMarkdownCommentMask
+ " See https://spec.commonmark.org/0.31.2/#atx-headings.
+ syn region markdownH1 contained matchgroup=markdownH1Delimiter start=" \{,3}#\s" end="#*\s*$" keepend contains=@markdownInline,markdownAutomaticLink oneline
+ syn region markdownH2 contained matchgroup=markdownH2Delimiter start=" \{,3}##\s" end="#*\s*$" keepend contains=@markdownInline,markdownAutomaticLink oneline
+ syn match markdownHeadingRule contained "^\s*/// \{,3}[=-]\+\s*$" contains=javaMarkdownCommentMask
+ " See https://spec.commonmark.org/0.31.2/#thematic-breaks.
+ syn match markdownRule contained "^\s*/// \{,3}\*\s*\*\%(\s*\*\)\+\s*$" contains=javaMarkdownCommentMask
+ syn match markdownRule contained "^\s*/// \{,3}_\s*_\%(\s*_\)\+\s*$" contains=javaMarkdownCommentMask
+ syn match markdownRule contained "^\s*/// \{,3}-\s*-\%(\s*-\)\+\s*$" contains=javaMarkdownCommentMask
+ " See https://spec.commonmark.org/0.31.2/#indented-code-blocks.
+ syn region markdownCodeBlock contained start="^\s*///\%( \{4,}\|\t\)" end="^\ze\s*///\%(\s*$\| \{,3}\S\)" keepend contains=javaMarkdownCommentMask
+ " See https://spec.commonmark.org/0.31.2/#code-spans.
+ syn region markdownCode contained matchgroup=markdownCodeDelimiter start="\z(`\+\) \=" end=" \=\z1" keepend contains=markdownLineStart,javaMarkdownCommentMask
+ " See https://spec.commonmark.org/0.31.2/#fenced-code-blocks.
+ syn region markdownCodeBlock contained start="^\s*/// \{,3}\z(```\+\)\%(.\{-}[^`]`\)\@!" end="^\s*/// \{,3}\z1`*" keepend contains=javaMarkdownCommentMask
+ syn region markdownCodeBlock contained start="^\s*/// \{,3}\z(\~\~\~\+\)" end="^\s*/// \{,3}\z1\~*" keepend contains=javaMarkdownCommentMask
+ " See https://spec.commonmark.org/0.31.2/#link-reference-definitions.
+ syn region markdownIdDeclaration contained matchgroup=markdownLinkDelimiter start="^\s*/// \{,3\}!\=\[" end="\]:" keepend contains=javaMarkdownCommentMask nextgroup=markdownUrl oneline skipwhite
+ " See https://spec.commonmark.org/0.31.2/#link-label.
+ syn region markdownId contained matchgroup=markdownIdDelimiter start="\[\%([\t ]\]\)\@!" end="\]" contains=javaMarkdownSkipBrackets,javaMarkdownCommentMask
+ " Note that escaped brackets can be unbalanced.
+ syn match javaMarkdownSkipBrackets contained transparent "\\\[\|\\\]"
+ " See https://spec.commonmark.org/0.31.2/#shortcut-reference-link.
+ syn region javaMarkdownShortcutLink contained matchgroup=markdownLinkTextDelimiter start="!\=\[^\@!\%(\_[^][]*\%(\[\_[^][]*\]\_[^][]*\)*]\%([[(]\)\@!\)\@=" end="\]\%([[(]\)\@!" contains=@markdownInline,markdownLineStart,javaMarkdownSkipBrackets,javaMarkdownCommentMask nextgroup=markdownLink,markdownId skipwhite
+
+ for s:name in ['markdownFootnoteDefinition', 'markdownFootnote']
+ if hlexists(s:name)
+ exec 'syn clear ' . s:name
+ endif
+ endfor
+
+ unlet s:name
+
+ " COMBAK: Footnotes are recognised by "markdown.vim", but are not
+ " in CommonMark. See https://pandoc.org/MANUAL.html#footnotes.
+""""syn match markdownFootnoteDefinition contained "^\s*///\s*\[^[^\]]\+\]:" contains=javaMarkdownCommentMask
+
+ hi def link javaMarkdownComment Comment
+ hi def link javaMarkdownCommentMask javaMarkdownComment
+ hi def link javaMarkdownCommentTitle SpecialComment
+ hi def link javaMarkdownShortcutLink htmlLink
+ endif
+
+ if s:with_html
+ syn region javaDocComment start="/\*\*" end="\*/" keepend contains=javaCommentTitle,@javaHtml,@javaDocTags,javaTodo,javaCommentError,javaSpaceError,@Spell fold
+ exec 'syn region javaCommentTitle contained matchgroup=javaDocComment start="/\*\*" matchgroup=javaCommentTitle end="\.$" end="\.[ \t\r]\@=" end="\%(^\s*\**\s*\)\@' . s:ff.Peek('80', '') . '<=@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,@javaDocTags'
+ syn region javaCommentTitle contained matchgroup=javaDocComment start="/\*\*\s*\r\=\n\=\s*\**\s*\%({@return\>\)\@=" matchgroup=javaCommentTitle end="}\%(\s*\.*\)*" contains=@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,@javaDocTags,javaTitleSkipBlock
+ syn region javaCommentTitle contained matchgroup=javaDocComment start="/\*\*\s*\r\=\n\=\s*\**\s*\%({@summary\>\)\@=" matchgroup=javaCommentTitle end="}" contains=@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,@javaDocTags,javaTitleSkipBlock
+ hi def link javaDocComment Comment
+ hi def link javaCommentTitle SpecialComment
+ endif
+
" The members of javaDocTags are sub-grouped according to the Java
" version of their introduction, and sub-group members in turn are
" arranged in alphabetical order, so that future newer members can
@@ -403,13 +502,29 @@
syn match javaDocSerialFieldTag contained "@serialField\>"
syn match javaDocVersionTag contained "@version\>"
- syn match javaDocSeeTag contained "@see\>" nextgroup=javaDocSeeTag1,javaDocSeeTag2,javaDocSeeTag3,javaDocSeeTagStar skipwhite skipempty
- syn match javaDocSeeTagStar contained "^\s*\*\+\%(\s*{\=@\|/\|$\)\@!" nextgroup=javaDocSeeTag1,javaDocSeeTag2,javaDocSeeTag3 skipwhite skipempty
+ syn match javaDocSeeTag contained "@see\>\s*" nextgroup=javaDocSeeTag1,javaDocSeeTag2,javaDocSeeTag3,javaDocSeeTag4,javaDocSeeTagStar,javaDocSeeTagSlash skipwhite skipempty
+
+ if s:with_html
+ syn match javaDocSeeTagStar contained "^\s*\*\+\%(\s*{\=@\|/\|$\)\@!" nextgroup=javaDocSeeTag1,javaDocSeeTag2,javaDocSeeTag3,javaDocSeeTag4 skipwhite skipempty
+ hi def link javaDocSeeTagStar javaDocComment
+ endif
+
+ if s:with_markdown
+ syn match javaDocSeeTagSlash contained "^\s*///\%(\s*{\=@\|$\)\@!" nextgroup=javaDocSeeTag1,javaDocSeeTag2,javaDocSeeTag3,javaDocSeeTag4 skipwhite skipempty
+ hi def link javaDocSeeTagSlash javaMarkdownComment
+ endif
+
syn match javaDocSeeTag1 contained @"\_[^"]\+"@
syn match javaDocSeeTag2 contained @<a\s\+\_.\{-}</a>@ contains=@javaHtml extend
- syn match javaDocSeeTag3 contained @["< \t]\@!\%(\k\|[/.]\)*\%(##\=\k\+\%((\_[^)]*)\)\=\)\=@ nextgroup=javaDocSeeTag3Label skipwhite skipempty
+ exec 'syn match javaDocSeeTag3 contained @[' . s:ff.WithMarkdown('[', '') . '"< \t]\@!\%(\k\|[/.]\)*\%(##\=\k\+\%((\_[^)]*)\)\=\)\=@ nextgroup=javaDocSeeTag3Label skipwhite skipempty'
syn match javaDocSeeTag3Label contained @\k\%(\k\+\s*\)*$@
+ " COMBAK: No support for type javaDocSeeTag2 in Markdown.
+""if s:with_markdown
+"" syn match javaDocSeeTag4 contained @\[.\+\]\s\=\%(\[.\+\]\|(.\+)\)@ contains=@javaMarkdown extend
+"" hi def link javaDocSeeTag4 Special
+""endif
+
syn region javaCodeSkipBlock contained transparent start="{\%(@code\>\)\@!" end="}" contains=javaCodeSkipBlock,javaDocCodeTag
syn region javaDocCodeTag contained start="{@code\>" end="}" contains=javaDocCodeTag,javaCodeSkipBlock
@@ -418,9 +533,6 @@
syn region javaDocSnippetTag contained start="{@snippet\>" end="}" contains=javaDocSnippetTag,javaSnippetSkipBlock,javaDocSnippetTagAttr,javaCommentMarkupTag
syntax case match
- hi def link javaDocComment Comment
- hi def link javaDocSeeTagStar javaDocComment
- hi def link javaCommentTitle SpecialComment
hi def link javaDocParam Function
hi def link javaDocAuthorTag Special
@@ -729,7 +841,7 @@
let b:spell_options = "contained"
let &cpo = s:cpo_save
-unlet s:ff s:cpo_save
+unlet s:cpo_save s:ff s:with_html s:with_markdown
" See ":help vim9-mix".
if !has("vim9script")
@@ -757,4 +869,4 @@
setlocal foldtext=s:JavaSyntaxFoldTextExpr()
delfunction! g:JavaSyntaxFoldTextExpr
endif
-" vim: sw=2 ts=8 noet sta
+" vim: fdm=syntax sw=2 ts=8 noet sta
diff --git a/runtime/syntax/testdir/dumps/java_comments_04.dump b/runtime/syntax/testdir/dumps/java_comments_04.dump
deleted file mode 100644
index d415c02..0000000
--- a/runtime/syntax/testdir/dumps/java_comments_04.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|/+0#0000e05&|*@1| |{+8#e000e06&|@|s|u|m@1|a|r|y| |C|o|m|p|a|r|e|s| |t|h|i|s| |i|n|s|t|a|n|c|e| |w|i|t|h| |t|h|e| |p|a|s@1|e|d| |{+0&&|@|c|o|d|e| |t|h|a|t|}| +0#0000000&@3
-||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| +8#e000e06&|i|n|s|t|a|n|c|e| |f|o|r| |o|r|d|e|r| |b|y| |i|n|v|o|k|i|n|g| |{+0&&|@|l|i|n|k| |I|n|t|e|g|e|r|#|c|o|m|p|a|r|e|(|i|n|t|,| |i|n|t|)| +0#0000000&@2
-||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@4|*| |c|o|m|p|a|r|e|}| +8&&|a|n|d| |p|a|s@1|i|n|g| |i|t| |{+0&&|@|c|o|d|e| |t|h|i|s|.|m|a|j|o|r|V|e|r|s|i|o|n|(|)|}| +8&&|a|n|d| +0#0000000&@10
-||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| +8#e000e06&|{+0&&|@|c|o|d|e| |t|h|a|t|.|m|a|j|o|r|V|e|r|s|i|o|n|(|)|}| +8&&|a|s| |r|e|s|p|e|c|t|i|v|e| |@|a|r|g|u|m|e|n|t|s|.|}| +0#0000000&@11
-||+0#0000e05#a8a8a8255| | +0&#ffffff0@4>*| +0#0000000&@66
-||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| |{+0#e000e06&|@|i|n|h|e|r|i|t|D|o|c|}| +0#0000e05&|*|/| +0#0000000&@49
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|i+0#00e0003&|n|t| +0#0000000&|c|o|m|p|a|r|e|T|o|(|C|o|m@1|e|n|t|s|T|e|s|t|s| |t|h|a|t|)| @18
-|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|{| @67
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@7|j|a|v|a|.|u|t|i|l|.|O|b|j|e|c|t|s|.|r|e|q|u|i|r|e|N|o|n|N|u|l@1|(|t|h|a|t|,| |"+0#e000002&|t|h|a|t|"|)+0#0000000&|;| @17
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@7|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|I|n|t|e|g|e|r|.|c|o|m|p|a|r|e|(|t+0#00e0003&|h|i|s|.+0#0000000&|m|a|j|o|r|V|e|r|s|i|o|n|(|)|,| @21
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@23|t|h|a|t|.|m|a|j|o|r|V|e|r|s|i|o|n|(|)@1|;| @27
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|}| @67
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|/+0#0000e05&|*@1| +8#e000e06&|R|e|t|u|r|n|s| |a|n| |e|m|p|t|y| |s|t|r|i|n|g| |f|o|r| |a|n| |@|O|v|e|r@1|i|d|e| |a|n@1|o|t|a|t|e|d| |m|e|t|h|o|d| +0#0000000&@7
-||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|*| +8#e000e06&|(|s|e@1| |C|h|a|p|t|e|r| |9|.|6|.|4|.|4| |{+0&&|@|l|i|t|e|r|a|l| |@|O|v|e|r@1|i|d|e|}| +8&&|i|n| |a| |J|a|v|a| |L|a|n|g|u|a|g|e| +0#0000000&@6
-||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|*| +8#e000e06&|S|p|e|c|i|f|i|c|a|t|i|o|n|)| |o|v|e|r@1|i|d@1|e|n| |f|r|o|m| |<+0#00e0e07&|c+0#af5f00255&|o|d|e|>+0#00e0e07&|j+8#e000e06&|a|v|a|.|l+8&#ffd7d7255|a|n|g|.+8&#ffffff0|O|b|j|e|c|t|<+0#00e0e07&|/|c+0#af5f00255&|o|d|e|>+0#00e0e07&| +0#0000000&@6
-||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|*| +0#0000000&@67
-||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|*| |@+0#e000e06&|r|e|t|u|r|n| +0#0000e05&|a|n| |e|m|p|t|y| |s|t|r|i|n|g| |*|/@2| |N|o| |p|e|r|i|o|d| |f|o|r| |t|h|e| |a|b|o|v|e| |s|u|m@1|a|r|y|!| +0#0000000&@5
-@57|7|3|,|3|-|6| @7|6|5|%|
diff --git a/runtime/syntax/testdir/dumps/java_comments_05.dump b/runtime/syntax/testdir/dumps/java_comments_05.dump
deleted file mode 100644
index 85492d8..0000000
--- a/runtime/syntax/testdir/dumps/java_comments_05.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|*| |@+0#e000e06&|r|e|t|u|r|n| +0#0000e05&|a|n| |e|m|p|t|y| |s|t|r|i|n|g| |*|/@2| |N|o| |p|e|r|i|o|d| |f|o|r| |t|h|e| |a|b|o|v|e| |s|u|m@1|a|r|y|!| +0#0000000&@5
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|"+0#e000002&@1|;+0#0000000&| |}| @19
-| +0#0000e05#a8a8a8255@1|}+0#0000000#ffffff0| @71
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |j+0&#ffd7d7255|a|v|a|d|o|c| +0&#ffffff0|-@1|s|n|i|p@1|e|t|-|p|a|t|h| |.| |-@1|s|o|u|r|c|e|-|p|a|t|h| |.| |-|d| |/|t+0&#ffd7d7255|m|p|/+0&#ffffff0|d|o|c|s|/| |-|p|a|c|k|a|g|e| |\| +0#0000000&@4
-| +0#0000e05#a8a8a8255@1>/+0&#ffffff0@1| +0#ffffff16#ff404010| +0#0000e05#ffffff0|-|t|a|g| |'|j+0&#ffd7d7255|l|s|:+0&#ffffff0|a|:|S|e@1| |J|a|v|a| |L|a|n|g|u|a|g|e| |S|p|e|c|i|f|i|c|a|t|i|o|n|:|'| |S|n|i|p@1|e|t|s|.|j|a|v|a| +0#0000000&@9
-| +0#0000e05#a8a8a8255@1|/+0&#ffffff0|*@1| +8#e000e06&|S|n|i|p@1|e|t|s| |f|o|r| |c|o|m@1|e|n|t| |t|e|s|t|s|.| +0#0000e05&|*|/| +0#0000000&@38
-| +0#0000e05#a8a8a8255@1|c+0#00e0003#ffffff0|l|a|s@1| +0#0000000&|S|n|i|p@1|e|t|s| @58
-| +0#0000e05#a8a8a8255@1|{+0#0000000#ffffff0| @2|/+0#0000001#ffff4012|*| +0#ffffff16#ff404010| +0#0000e05#ffffff0|T|R|A|I|L|I|N|G| |B|L|A|N|K|S| |A|N|D| |M+0&#ffd7d7255|E|S@1|P|I|L@1|I|N|G|S| +0&#ffffff0|A|R|E| |S|I|G|N|I|F|I|C|A|N|T|!| |*+0#0000001#ffff4012|/| +0#0000000#ffffff0@12
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|S|n|i|p@1|e|t|s|(|)| |{| |}| @46
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|/+0#0000e05&|*@1| +8#e000e06&|T|h|e| |m|e|t|h|o|d| |{+0&&|@|c|o|d|e| |m|a|i|n|}| +8&&|m|u|s|t| |b|e| |d|e|c|l|a|r|e|d| |{+0&&|@|c|o|d|e| |p|u|b|l|i|c|}|,+8&&| |{+0&&|@|c|o|d|e| +0#0000000&@1
-||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@4|*| |s|t|a|t|i|c|}|,+8&&| |a|n|d| |{+0&&|@|c|o|d|e| |v|o|i|d|}|.+8&&| +0#0000e05&@1|I|t| |m|u|s|t| |s|p|e|c|i|f|y| |a| |f|o|r|m|a|l| |p|a|r|a|m|e|t|e|r| +0#0000000&@3
-||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| |w|h|o|s|e| |d|e|c|l|a|r|e|d| |t|y|p|e| |i|s| |a|r@1|a|y| |o|f| |{+0#e000e06&|@|l|i|n|k| |S|t|r|i|n|g|}|.+0#0000e05&| @1|T|h|e|r|e|f|o|r|e|,| +0#0000000&@6
-||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| |<+0#00e0e07&|e+0#af5f00255&|m|>+0#00e0e07&|e+0#0000000&|i|t|h|e|r|<+0#00e0e07&|/|e+0#af5f00255&|m|>+0#00e0e07&| +0#0000e05&|o|f| |t|h|e| |f|o|l@1|o|w|i|n|g| |d|e|c|l|a|r|a|t|i|o|n|s| |i|s| |a|c@1|e|p|t|a|b|l|e|:| +0#0000000&@5
-||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| +0#ffffff16#ff404010| +0#0000e05#ffffff0|{+0#e000e06&|@|s|n|i|p@1|e|t| |l+0#00e0003&|a|n|g|=+0#e000e06&|"+0#e000002&|j|a|v|a|"|:+0#e000e06&| +0#0000000&@42
-||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@4|*| |/@1| |@+0#0000000&|h|i|g|h|l|i|g|h|t| +0#e000e06&|s+0#00e0003&|u|b|s|t|r|i|n|g|=+0#e000e06&|"+0#e000002&|m|a|i|n|"| +0#e000e06&|t+0#00e0003&|y|p|e|=+0#e000e06&|"+0#e000002&|i|t|a|l|i|c|"|:+0#e000e06&| +0#0000000&@20
-||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@4|*| |p|u|b|l|i|c| |s|t|a|t|i|c| |v|o|i|d| |m|a|i|n|(|S|t|r|i|n|g|[|]| |a|r|g|s|)| |{| |}| +0#0000000&@23
-||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@4|*| |}|<+0#00e0e07&|b+0#af5f00255&|r| +0#00e0e07&|/|>|<|p+0#af5f00255&|r|e| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|s|n|i|p@1|e|t|"|>+0#00e0e07&| +0#0000000&@37
-@57|9|1|,|1| @9|8|2|%|
diff --git a/runtime/syntax/testdir/dumps/java_comments_06.dump b/runtime/syntax/testdir/dumps/java_comments_06.dump
deleted file mode 100644
index 84336a3..0000000
--- a/runtime/syntax/testdir/dumps/java_comments_06.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@4|*| |}|<+0#00e0e07&|b+0#af5f00255&|r| +0#00e0e07&|/|>|<|p+0#af5f00255&|r|e| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|s|n|i|p@1|e|t|"|>+0#00e0e07&| +0#0000000&@37
-||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*|{+0#e000e06&|@|c|o|d|e| |p|u|b|l|i|c| |s|t|a|t|i|c| |v|o|i|d| |m|a|i|n|(|S|t|r|i|n|g|.@2| |a|r|g|s|)| |{| |}@1|<+0#00e0e07&|/|p+0#af5f00255&|r|e|>+0#00e0e07&| +0#0000000&@9
-||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| +0#0000000&@66
-||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| |@+0#e000e06&|p|a|r|a|m| |a+0#00e0e07&|r|g|s| +0#0000e05&|o|p|t|i|o|n|a|l| |c+0&#ffd7d7255|o|m@1|a|n|d|e|-+0&#ffffff0|l|i|n|e| |a|r|g|u|m|e|n|t|s| +0#ffffff16#ff404010| +0#0000000#ffffff0@20
-||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| |@|j+0&#ffd7d7255|l|s| +0&#ffffff0|1|2|.|1|.|4| |I|n|v|o|k|e| |{+0#e000e06&|@|c|o|d|e| |T|e|s|t|.|m|a|i|n|}| +0#0000e05&|*|/| +0#0000000&@26
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3>/+0#0000e05&@1| |@+0#0000000&|s|t|a|r|t| +0#0000e05&|r+0#00e0003&|e|g|i|o|n| +0#0000e05&|=| |m+0#e000002&|a|i|n| +0#ffffff16#ff404010@4| +0#0000000#ffffff0@40
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@1| |@+0#0000000&|l|i|n|k| +0#0000e05&|s+0#00e0003&|u|b|s|t|r|i|n|g| +0#0000e05&|=| |'+0#e000002&|S|t|r|i|n|g|'| +0#0000e05&|t+0#00e0003&|a|r|g|e|t| +0#0000e05&|=| |'+0#e000002&|j|a|v|a|.|l|a|n|g|.|S|t|r|i|n|g|'| +0#0000e05&|:| +0#0000000&@9
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p+0#00e0003&|u|b|l|i|c| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|m|a|i|n|(|S|t|r|i|n|g|[|]| |a|r|g|s|)| |{| |}| @26
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@1| |@+0#0000000&|e|n|d| +0#ffffff16#ff404010| +0#0000000#ffffff0@60
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|/+0#0000e05&|*@1| |{+8#e000e06&|@+0&&|r|e|t|u|r|n| +8&&|a|n| |e|m|p|t|y| |s|t|r|i|n|g|}| +0#0000000&@39
-||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| |@+0#e000e06&|s|e@1| +0#0000e05&|<+0#00e0e07&|a+0#af5f00255&| +0#00e0e07&|h+0#00e0003&|r|e|f|=+0#00e0e07&|"+0#e000002&|h|t@1|p|s|:|/@1|d|o|c|s|.|o|r|a|c|l|e|.|c|o|m|/|j|a|v|a|s|e|/|s|p|e|c|s|/|j|l|s|/|s|e|2|1|/|h|t|m|l|/|j
-||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|s|-|3|.|h|t|m|l|#|j|l|s|-|3|.|1|0|.|5|"|>+0#00e0e07&|3+8#e000e06&|.|1|0|.|5| |S|t|r|i|n|g| |L|i|t|e|r|a|l|s|<+0#00e0e07&|/|a+0#af5f00255&|>+0#00e0e07&| +0#0000000&@24
-||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| |@+0#e000e06&|s|e@1| +0#0000e05&|j+0#00e0e07&|a|v|a|.|b|a|s|e|/|j|a|v|a|.|l|a|n|g|.|O|b|j|e|c|t|#|t|o|S|t|r|i|n|g|(|)| +0#0000e05&|*|/| +0#0000000&@20
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@1| |@+0#0000000&|s|t|a|r|t| +0#0000e05&|r+0#00e0003&|e|g|i|o|n| +0#0000e05&|=| |t+0#e000002&|o|S|t|r|i|n|g| +0#ffffff16#ff404010| +0#0000000#ffffff0@40
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@1| |@+0#0000000&|r|e|p|l|a|c|e| +0#0000e05&|s+0#00e0003&|u|b|s|t|r|i|n|g| +0#0000e05&|=| |'+0#e000002&|"@1|'| +0#0000e05&|r+0#00e0003&|e|p|l|a|c|e|m|e|n|t| +0#0000e05&|=| |"+0#e000002&|\|u|0@1|2@1|\|u|0@1|2@1|"| +0#0000000&@11
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@1| |@+0#0000000&|l|i|n|k| +0#0000e05&|r+0#00e0003&|e|g|e|x| +0#0000e05&|=| |'+0#e000002&|\|b|S|t|r|i|n|g|'| +0#0000e05&|t+0#00e0003&|a|r|g|e|t| +0#0000e05&|=| |j+0#e000002&|a|v|a|.|l|a|n|g|.|S|t|r|i|n|g| +0#0000e05&|t+0#00e0003&|y|p|e| +0#0000e05&|=| |l+0#e000002&|i|n|k|p|l|a|i
-| +0#0000e05#a8a8a8255@1|n+0#e000002#ffffff0| +0#0000e05&|:| +0#0000000&@69
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|"+0#e000002&@1|;+0#0000000&| |}| @19
-@57|1|0|9|,|2|-|5| @6|9|8|%|
diff --git a/runtime/syntax/testdir/dumps/java_comments_07.dump b/runtime/syntax/testdir/dumps/java_comments_07.dump
deleted file mode 100644
index f83433e..0000000
--- a/runtime/syntax/testdir/dumps/java_comments_07.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|"+0#e000002&@1|;+0#0000000&| |}| @19
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@1| |@+0#0000000&|e|n|d| +0#ffffff16#ff404010| +0#0000000#ffffff0@60
-| +0#0000e05#a8a8a8255@1>}+0#0000000#ffffff0| @71
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|1|2@1|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_comments_00.dump b/runtime/syntax/testdir/dumps/java_comments_html_00.dump
similarity index 92%
rename from runtime/syntax/testdir/dumps/java_comments_00.dump
rename to runtime/syntax/testdir/dumps/java_comments_html_00.dump
index f0ecd9d..be35389 100644
--- a/runtime/syntax/testdir/dumps/java_comments_00.dump
+++ b/runtime/syntax/testdir/dumps/java_comments_html_00.dump
@@ -1,7 +1,7 @@
| +0#0000e05#a8a8a8255@1>/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |u|n|l|e|t|!| |g+0fd7ff255|:+0&#ffffff0|j|a|v|a|_|n|o|_|t|a|b|_|s|p|a|c|e|_|e|r@1|o|r| |g|:|j|a|v|a|_|i|g|n|o|r|e|_|j+0&#ffd7d7255|a|v|a|d|o|c| +0#0000000#ffffff0
| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |u|n|l|e|t|!| |g+0fd7ff255|:+0&#ffffff0|j|a|v|a|_|n|o|_|t|r|a|i|l|_|s|p|a|c|e|_|e|r@1|o|r| +0#0000000&@20
| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |[|g|:|j|a|v|a|_|s|p|a|c|e|_|e|r@1|o|r|s|,|g|:|j|a|v|a|_|c|o|m@1|e|n|t|_|s|t|r|i|n|g|s|]|=|[|1+0#e000002&|,+0#0000e05&|1+0#e000002&|]+0#0000e05&| +0#0000000&
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|i|g|n|o|r|e|_|m|a|r|k|d|o|w|n| |=| |1+0#e000002&| +0#0000000&@24
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
diff --git a/runtime/syntax/testdir/dumps/java_comments_01.dump b/runtime/syntax/testdir/dumps/java_comments_html_01.dump
similarity index 67%
rename from runtime/syntax/testdir/dumps/java_comments_01.dump
rename to runtime/syntax/testdir/dumps/java_comments_html_01.dump
index ab6007b..c747bed 100644
--- a/runtime/syntax/testdir/dumps/java_comments_01.dump
+++ b/runtime/syntax/testdir/dumps/java_comments_html_01.dump
@@ -5,16 +5,16 @@
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |/+0&#ffffff0|*@1|/| +0#0000000&|/+0#0000001#ffff4012|*|/+0#0000e05#ffffff0| |*+0#0000001#ffff4012|/| +0#0000000#ffffff0|/+0#0000001#ffff4012|*| +0#0000e05#ffffff0|/+0#ffffff16#ff404010|*+0#0000001#ffff4012|/| +0#0000000#ffffff0|/+0#0000001#ffff4012|*|/+0#ffffff16#ff404010|*+0#0000001#ffff4012|/| +0#0000000#ffffff0|/+0#0000001#ffff4012|*|/+0#0000e05#ffffff0|/+0#ffffff16#ff404010|*+0#0000001#ffff4012|/| +0#0000000#ffffff0|/+0#0000e05&|*@1| +8#e000e06&|C|o|m@1|e|n|t| |t|e|s|t|s|.| +0#0000000&@22
+|-+0#0000e05#a8a8a8255| |/+0&#ffffff0|*@1|/| +0#0000000&|/+0#0000001#ffff4012|*|/+0#0000e05#ffffff0| |*+0#0000001#ffff4012|/| +0#0000000#ffffff0|/+0#0000001#ffff4012|*| +0#0000e05#ffffff0|/+0#ffffff16#ff404010|*+0#0000001#ffff4012|/| +0#0000000#ffffff0|/+0#0000001#ffff4012|*|/+0#ffffff16#ff404010|*+0#0000001#ffff4012|/| +0#0000000#ffffff0|/+0#0000001#ffff4012|*|/+0#0000e05#ffffff0|/+0#ffffff16#ff404010|*+0#0000001#ffff4012|/| +0#0000000#ffffff0|/+0#0000e05&|*@1| +8#e000e06&|H|T|M|L| |c|o|m@1|e|n|t| |t|e|s|t|s|.| +0#0000000&@17
||+0#0000e05#a8a8a8255| | +0&#ffffff0|*| |<+0#00e0e07&|p+0#af5f00255&|>+0#00e0e07&|T+0#0000e05&|h|e|r|e| |i|s| |n|o| |e|n|t|r|y| |p|o|i|n|t| |m|e|t|h|o|d| |{+0#e000e06&|@|c|o|d|e| |m|a|i|n|}|:+0#0000e05&| +0#0000000&@22
-||+0#0000e05#a8a8a8255| | +0&#ffffff0|*| |{+0#e000e06&|@|s|n|i|p@1|e|t| |f+0#00e0003&|i|l|e| +0#e000e06&|=| |S+0#e000002&|n|i|p@1|e|t|s|.|j|a|v|a| +0#e000e06&|r+0#00e0003&|e|g|i|o|n| +0#e000e06&|=| |m+0#e000002&|a|i|n| +0#e000e06&|i+0#00e0003&|d| +0#e000e06&|=| |_+0#e000002&|0|1|}+0#e000e06&| +0#0000000&@15
+||+0#0000e05#a8a8a8255| | +0&#ffffff0|*| |{+0#e000e06&|@|s|n|i|p@1|e|t| |f+0#00e0003&|i|l|e| +0#e000e06&|=| |H+0#e000002&|T|M|L|S|n|i|p@1|e|t|s|.|j|a|v|a| +0#e000e06&|r+0#00e0003&|e|g|i|o|n| +0#e000e06&|=| |m+0#e000002&|a|i|n| +0#e000e06&|i+0#00e0003&|d| +0#e000e06&|=| |_+0#e000002&|0|1|}+0#e000e06&| +0#0000000&@11
||+0#0000e05#a8a8a8255| | +0&#ffffff0|*| |<+0#00e0e07&|p+0#af5f00255&|>+0#00e0e07&|T+0#0000e05&|h|e|r|e| |i|s| |n|o| |t|e|x|t|u|a|l| |r|e|p|r|e|s|e|n|t|a|t|i|o|n|:| +0#0000000&@31
-||+0#0000e05#a8a8a8255| | +0&#ffffff0|*| |{+0#e000e06&|@|s|n|i|p@1|e|t| |c+0#00e0003&|l|a|s@1| +0#e000e06&|=| |S+0#e000002&|n|i|p@1|e|t|s| +0#e000e06&|r+0#00e0003&|e|g|i|o|n| +0#e000e06&|=| |t+0#e000002&|o|S|t|r|i|n|g| +0#e000e06&|i+0#00e0003&|d| +0#e000e06&|=| |_+0#e000002&|0|2|}+0#e000e06&| +0#0000e05&|*|/| +0#0000000&@12
-| +0#0000e05#a8a8a8255@1|c+0#00e0003#ffffff0|l|a|s@1| +0#0000000&|C|o|m@1|e|n|t|s|T|e|s|t|s| |i+0#00e0003&|m|p|l|e|m|e|n|t|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|C|o|m@1|e|n|t|s|T|e|s|t|s|>| @16
-| +0#0000e05#a8a8a8255@1|{+0#0000000#ffffff0| @71
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|C|o|m@1|e|n|t|s|T|e|s|t|s|(|)| |{| |}| @41
+||+0#0000e05#a8a8a8255| | +0&#ffffff0|*| |{+0#e000e06&|@|s|n|i|p@1|e|t| |c+0#00e0003&|l|a|s@1| +0#e000e06&|=| |H+0#e000002&|T|M|L|S|n|i|p@1|e|t|s| +0#e000e06&|r+0#00e0003&|e|g|i|o|n| +0#e000e06&|=| |t+0#e000002&|o|S|t|r|i|n|g| +0#e000e06&|i+0#00e0003&|d| +0#e000e06&|=| |_+0#e000002&|0|2|}+0#e000e06&| +0#0000e05&|*|/| +0#0000000&@8
+| +0#0000e05#a8a8a8255@1|c+0#00e0003#ffffff0|l|a|s@1| +0#0000000&|H|T|M|L|C|o|m@1|e|n|t|s|T|e|s|t|s| |i+0#00e0003&|m|p|l|e|m|e|n|t|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|H|T|M|L|C|o|m@1|e|n|t|s|T|e|s|t|s|>| @8
+| +0#0000e05#a8a8a8255@1|{+0#0000000#ffffff0| @2|/+0#0000e05&@1| |J+0&#ffd7d7255|D|K| +0&#ffffff0|2+0#e000002&|1|++0#0000e05&|.| +0#0000000&@57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|H|T|M|L|C|o|m@1|e|n|t|s|T|e|s|t|s|(|)| |{| |}| @37
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|/+0#0000e05&|*@1| +8#e000e06&|N|o|-|o|p|,| |i|.| +0#0000e05&|e+0fd7ff255|.+0&#ffffff0| |n+0fd7ff255|o| +0&#ffffff0|o|p|e|r|a|t|i|o|n|.| +0#0000000&@38
||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|*| |(|{+0#e000e06&|@|l|i|t|e|r|a|l|@|l|i|t|e|r|a|l|}| +0#0000e05&|m|a|y| |b|e| |u|s|e|d| |w|i|t|h| |{+0#e000e06&|@|c|o|d|e| |.|}| +0#0000e05&|f|o|r| |c|o|n|t|r|a|c|t|i|o|n|.|)| +0#0000000&@2
||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|*| |@+0#e000e06&|r|e|t|u|r|n| +0#0000e05&|{+0#e000e06&|@|c|o|d|e| |n|u|l@1|}| +0#0000e05&|*|/| +0#0000000&@43
-@57|1|9|,|0|-|1| @7|1|2|%|
+@57|1|9|,|0|-|1| @7|1@1|%|
diff --git a/runtime/syntax/testdir/dumps/java_comments_02.dump b/runtime/syntax/testdir/dumps/java_comments_html_02.dump
similarity index 98%
rename from runtime/syntax/testdir/dumps/java_comments_02.dump
rename to runtime/syntax/testdir/dumps/java_comments_html_02.dump
index 03c4bcf..927415c 100644
--- a/runtime/syntax/testdir/dumps/java_comments_02.dump
+++ b/runtime/syntax/testdir/dumps/java_comments_html_02.dump
@@ -17,4 +17,4 @@
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|/+0#0000e05&|*@1| +8#e000e06&|N|o|-|o|p|,| |i|.|e|.|<+0&&|!|-@1| |-@1|>| +8&&|n|o| |o|p|e|r|a|t|i|o|n|.| +0#0000000&@31
||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|*| |@+0#e000e06&|r|e|t|u|r|n| +0#0000e05&|{+0#e000e06&|@|c|o|d|e| |n|u|l@1|}| +0#0000e05&|*|/| +0#0000000&@43
-@57|3|7|,|2|-|5| @7|3|0|%|
+@57|3|7|,|2|-|5| @7|2|7|%|
diff --git a/runtime/syntax/testdir/dumps/java_comments_03.dump b/runtime/syntax/testdir/dumps/java_comments_html_03.dump
similarity index 91%
rename from runtime/syntax/testdir/dumps/java_comments_03.dump
rename to runtime/syntax/testdir/dumps/java_comments_html_03.dump
index a407805..b9b23da 100644
--- a/runtime/syntax/testdir/dumps/java_comments_03.dump
+++ b/runtime/syntax/testdir/dumps/java_comments_html_03.dump
@@ -14,7 +14,7 @@
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&|*@1| |{+8#e000e06&|@+0&&|r|e|t|u|r|n| +8&&|{+0&&|@|c|o|d|e| |n|u|l@1|}|,+8&&| |w|i|t|h| |n|o|-|o|p|,| |i|.|e|.| |n|o| |o|p|e|r|a|t|i|o|n|}| |.| |.| |*+0#0000e05&|/| +0#0000000&@4
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|V|o|i|d| |n|o|O|p|9|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n+0#e000002&|u|l@1|;+0#0000000&| |}| @39
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&|*@1| |{+8#e000e06&|@+0&&|r|e|t|u|r|n| +8&&|t|h|e| |m|a|j|o|r| |J|a|v|a| |v|e|r|s|i|o|n|}| |@+0&&|h|i|d@1|e|n| +0#0000e05&|*|/| +0#0000000&@21
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|/+0#0000e05&|*@1| |{+8#e000e06&|@+0&&|r|e|t|u|r|n| +8&&|t|h|e| |m|a|j|o|r| |J|a|v|a| |v|e|r|s|i|o|n|}| +0#0000000&@32
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| |@+0#e000e06&|h|i|d@1|e|n| +0#0000e05&|*|/| +0#0000000&@55
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|i+0#00e0003&|n|t| +0#0000000&|m|a|j|o|r|V|e|r|s|i|o|n|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|2+0#e000002&|1|;+0#0000000&| |}| @25
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-@57|5@1|,|2|-|5| @7|4|7|%|
+@57|5@1|,|2|-|5| @7|4|3|%|
diff --git a/runtime/syntax/testdir/dumps/java_comments_html_04.dump b/runtime/syntax/testdir/dumps/java_comments_html_04.dump
new file mode 100644
index 0000000..bb7e638
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_comments_html_04.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|i+0#00e0003&|n|t| +0#0000000&|m|a|j|o|r|V|e|r|s|i|o|n|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|2+0#e000002&|1|;+0#0000000&| |}| @25
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|/+0#0000e05&|*@1| |{+8#e000e06&|@|s|u|m@1|a|r|y| |C|o|m|p|a|r|e|s| |t|h|i|s| |i|n|s|t|a|n|c|e| |w|i|t|h| |t|h|e| |p|a|s@1|e|d| |{+0&&|@|c|o|d|e| |t|h|a|t|}| +0#0000000&@3
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| +8#e000e06&|i|n|s|t|a|n|c|e| |f|o|r| |o|r|d|e|r| |b|y| |i|n|v|o|k|i|n|g| |{+0&&|@|l|i|n|k| |I|n|t|e|g|e|r|#|c|o|m|p|a|r|e|(|i|n|t|,| |i|n|t|)| +0#0000000&@2
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@4|*| |c|o|m|p|a|r|e|}| +8&&|a|n|d| |p|a|s@1|i|n|g| |i|t| |{+0&&|@|c|o|d|e| |t|h|i|s|.|m|a|j|o|r|V|e|r|s|i|o|n|(|)|}| +8&&|a|n|d| +0#0000000&@10
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@4>*| +8#e000e06&|{+0&&|@|c|o|d|e| |t|h|a|t|.|m|a|j|o|r|V|e|r|s|i|o|n|(|)|}| +8&&|a|s| |r|e|s|p|e|c|t|i|v|e| |@|a|r|g|u|m|e|n|t|s|.|}| +0#0000000&@11
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| |{+0#e000e06&|@|i|n|h|e|r|i|t|D|o|c|}| +0#0000e05&|*|/| +0#0000000&@49
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|i+0#00e0003&|n|t| +0#0000000&|c|o|m|p|a|r|e|T|o|(|H|T|M|L|C|o|m@1|e|n|t|s|T|e|s|t|s| |t|h|a|t|)| @14
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|{| @67
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@7|j|a|v|a|.|u|t|i|l|.|O|b|j|e|c|t|s|.|r|e|q|u|i|r|e|N|o|n|N|u|l@1|(|t|h|a|t|,| |"+0#e000002&|t|h|a|t|"|)+0#0000000&|;| @17
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@7|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|I|n|t|e|g|e|r|.|c|o|m|p|a|r|e|(|t+0#00e0003&|h|i|s|.+0#0000000&|m|a|j|o|r|V|e|r|s|i|o|n|(|)|,| @21
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@23|t|h|a|t|.|m|a|j|o|r|V|e|r|s|i|o|n|(|)@1|;| @27
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|}| @67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@2| |R|e|t|u|r|n|s| |a|n| |e|m|p|t|y| |s|t|r|i|n|g| |f|o|r| |a|n| |@|O|v|e|r@1|i|d|e| |a|n@1|o|t|a|t|e|d| |m|e|t|h|o|d| +0#0000000&@7
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@2| |(|s|e@1| |C|h|a|p|t|e|r| |9+0#e000002&|.|6|.|4|.|4| +0#0000e05&|{|@|l|i|t|e|r|a|l| |@|O|v|e|r@1|i|d|e|}| |i|n| |a| |J|a|v|a| |L|a|n|g|u|a|g|e| +0#0000000&@4
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@2| |S|p|e|c|i|f|i|c|a|t|i|o|n|)| |o|v|e|r@1|i|d@1|e|n| |f|r|o|m| |`|j|a|v|a|.|l+0&#ffd7d7255|a|n|g|.+0&#ffffff0|O|b|j|e|c|t|`| +0#0000000&@15
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@2| +0#0000000&@65
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@2| |@|r|e|t|u|r|n| |a|n| |e|m|p|t|y| |s|t|r|i|n|g| |/@2| |N|o| |p|e|r|i|o|d| |f|o|r| |t|h|e| |a|b|o|v|e| |s|u|m@1|a|r|y|!| +0#0000000&@4
+@57|7|3|,|3|-|6| @7|5|9|%|
diff --git a/runtime/syntax/testdir/dumps/java_comments_html_05.dump b/runtime/syntax/testdir/dumps/java_comments_html_05.dump
new file mode 100644
index 0000000..d553aa1
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_comments_html_05.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@2| |@|r|e|t|u|r|n| |a|n| |e|m|p|t|y| |s|t|r|i|n|g| |/@2| |N|o| |p|e|r|i|o|d| |f|o|r| |t|h|e| |a|b|o|v|e| |s|u|m@1|a|r|y|!| +0#0000000&@4
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|S|t|r|i|n|g| |a|s|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|"+0#e000002&@1|;+0#0000000&| |}| @28
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|/+0#0000e05&|*@1| +8#e000e06&|R|e|t|u|r|n|s| |a|n| |e|m|p|t|y| |s|t|r|i|n|g| |f|o|r| |a|n| |@|O|v|e|r@1|i|d|e| |a|n@1|o|t|a|t|e|d| |m|e|t|h|o|d| +0#0000000&@7
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|*| +8#e000e06&|(|s|e@1| |C|h|a|p|t|e|r| |9|.|6|.|4|.|4| |{+0&&|@|l|i|t|e|r|a|l| |@|O|v|e|r@1|i|d|e|}| +8&&|i|n| |a| |J|a|v|a| |L|a|n|g|u|a|g|e| +0#0000000&@6
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3>*| +8#e000e06&|S|p|e|c|i|f|i|c|a|t|i|o|n|)| |o|v|e|r@1|i|d@1|e|n| |f|r|o|m| |<+0#00e0e07&|c+0#af5f00255&|o|d|e|>+0#00e0e07&|j+8#e000e06&|a|v|a|.|l+8&#ffd7d7255|a|n|g|.+8&#ffffff0|O|b|j|e|c|t|<+0#00e0e07&|/|c+0#af5f00255&|o|d|e|>+0#00e0e07&| +0#0000000&@6
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|*| +0#0000000&@67
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|*| |@+0#e000e06&|r|e|t|u|r|n| +0#0000e05&|a|n| |e|m|p|t|y| |s|t|r|i|n|g| |*|/@2| |N|o| |p|e|r|i|o|d| |f|o|r| |t|h|e| |a|b|o|v|e| |s|u|m@1|a|r|y|!| +0#0000000&@5
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|a|s|S|t|r|i|n|g|(|)|;| |}| @11
+| +0#0000e05#a8a8a8255@1|}+0#0000000#ffffff0| @71
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |j+0&#ffd7d7255|a|v|a|d|o|c| +0&#ffffff0|-@1|s|n|i|p@1|e|t|-|p|a|t|h| |.| |-@1|s|o|u|r|c|e|-|p|a|t|h| |.| |-|d| |/|t+0&#ffd7d7255|m|p|/+0&#ffffff0|h|t|m|l|_|d|o|c|s|/| |-|p|a|c|k|a|g|e| |\
+| +0&#a8a8a8255@1|/+0&#ffffff0@1| +0#ffffff16#ff404010| +0#0000e05#ffffff0|-|t|a|g| |'|j+0&#ffd7d7255|l|s|:+0&#ffffff0|a|:|S|e@1| |J|a|v|a| |L|a|n|g|u|a|g|e| |S|p|e|c|i|f|i|c|a|t|i|o|n|:|'| |H+0&#ffd7d7255|T|M|L|S|n|i|p@1|e|t|s|.+0&#ffffff0|j|a|v|a| +0#0000000&@5
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0|*@1| +8#e000e06&|S|n|i|p@1|e|t|s| |f|o|r| |H|T|M|L| |c|o|m@1|e|n|t| |t|e|s|t|s|.| +0#0000e05&|*|/| +0#0000000&@33
+| +0#0000e05#a8a8a8255@1|c+0#00e0003#ffffff0|l|a|s@1| +0#0000000&|H|T|M|L|S|n|i|p@1|e|t|s| @54
+| +0#0000e05#a8a8a8255@1|{+0#0000000#ffffff0| @2|/+0#0000001#ffff4012|*| +0#ffffff16#ff404010| +0#0000e05#ffffff0|T|R|A|I|L|I|N|G| |B|L|A|N|K|S| |A|N|D| |M+0&#ffd7d7255|E|S@1|P|I|L@1|I|N|G|S| +0&#ffffff0|A|R|E| |S|I|G|N|I|F|I|C|A|N|T|!| |*+0#0000001#ffff4012|/| +0#0000000#ffffff0@12
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|H|T|M|L|S|n|i|p@1|e|t|s|(|)| |{| |}| @42
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|/+0#0000e05&|*@1| +8#e000e06&|T|h|e| |m|e|t|h|o|d| |{+0&&|@|c|o|d|e| |m|a|i|n|}| +8&&|m|u|s|t| |b|e| |d|e|c|l|a|r|e|d| |{+0&&|@|c|o|d|e| |p|u|b|l|i|c|}|,+8&&| |{+0&&|@|c|o|d|e| +0#0000000&@1
+@57|9|1|,|2|-|5| @7|7|5|%|
diff --git a/runtime/syntax/testdir/dumps/java_comments_html_06.dump b/runtime/syntax/testdir/dumps/java_comments_html_06.dump
new file mode 100644
index 0000000..4d26b94
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_comments_html_06.dump
@@ -0,0 +1,20 @@
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|/+0#0000e05&|*@1| +8#e000e06&|T|h|e| |m|e|t|h|o|d| |{+0&&|@|c|o|d|e| |m|a|i|n|}| +8&&|m|u|s|t| |b|e| |d|e|c|l|a|r|e|d| |{+0&&|@|c|o|d|e| |p|u|b|l|i|c|}|,+8&&| |{+0&&|@|c|o|d|e| +0#0000000&@1
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@4|*| |s|t|a|t|i|c|}|,+8&&| |a|n|d| |{+0&&|@|c|o|d|e| |v|o|i|d|}|.+8&&| +0#0000e05&@1|I|t| |m|u|s|t| |s|p|e|c|i|f|y| |a| |f|o|r|m|a|l| |p|a|r|a|m|e|t|e|r| +0#0000000&@3
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| |w|h|o|s|e| |d|e|c|l|a|r|e|d| |t|y|p|e| |i|s| |a|r@1|a|y| |o|f| |{+0#e000e06&|@|l|i|n|k| |S|t|r|i|n|g|}|.+0#0000e05&| @1|T|h|e|r|e|f|o|r|e|,| +0#0000000&@6
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| |<+0#00e0e07&|e+0#af5f00255&|m|>+0#00e0e07&|e+0#0000000&|i|t|h|e|r|<+0#00e0e07&|/|e+0#af5f00255&|m|>+0#00e0e07&| +0#0000e05&|o|f| |t|h|e| |f|o|l@1|o|w|i|n|g| |d|e|c|l|a|r|a|t|i|o|n|s| |i|s| |a|c@1|e|p|t|a|b|l|e|:| +0#0000000&@5
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| +0#ffffff16#ff404010| +0#0000e05#ffffff0|{+0#e000e06&|@|s|n|i|p@1|e|t| |l+0#00e0003&|a|n|g|=+0#e000e06&|"+0#e000002&|j|a|v|a|"|:+0#e000e06&| +0#0000000&@42
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@4>*| |/@1| |@+0#0000000&|h|i|g|h|l|i|g|h|t| +0#e000e06&|s+0#00e0003&|u|b|s|t|r|i|n|g|=+0#e000e06&|"+0#e000002&|m|a|i|n|"| +0#e000e06&|t+0#00e0003&|y|p|e|=+0#e000e06&|"+0#e000002&|i|t|a|l|i|c|"|:+0#e000e06&| +0#0000000&@20
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@4|*| |p|u|b|l|i|c| |s|t|a|t|i|c| |v|o|i|d| |m|a|i|n|(|S|t|r|i|n|g|[|]| |a|r|g|s|)| |{| |}| +0#0000000&@23
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@4|*| |}|<+0#00e0e07&|b+0#af5f00255&|r| +0#00e0e07&|/|>|<|p+0#af5f00255&|r|e| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|s|n|i|p@1|e|t|"|>+0#00e0e07&| +0#0000000&@37
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*|{+0#e000e06&|@|c|o|d|e| |p|u|b|l|i|c| |s|t|a|t|i|c| |v|o|i|d| |m|a|i|n|(|S|t|r|i|n|g|.@2| |a|r|g|s|)| |{| |}@1|<+0#00e0e07&|/|p+0#af5f00255&|r|e|>+0#00e0e07&| +0#0000000&@9
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| +0#0000000&@66
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| |@+0#e000e06&|p|a|r|a|m| |a+0#00e0e07&|r|g|s| +0#0000e05&|o|p|t|i|o|n|a|l| |c+0&#ffd7d7255|o|m@1|a|n|d|e|-+0&#ffffff0|l|i|n|e| |a|r|g|u|m|e|n|t|s| +0#ffffff16#ff404010| +0#0000000#ffffff0@20
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| |@|j+0&#ffd7d7255|l|s| +0&#ffffff0|1|2|.|1|.|4| |I|n|v|o|k|e| |{+0#e000e06&|@|c|o|d|e| |T|e|s|t|.|m|a|i|n|}| +0#0000e05&|*|/| +0#0000000&@26
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@1| |@+0#0000000&|s|t|a|r|t| +0#0000e05&|r+0#00e0003&|e|g|i|o|n| +0#0000e05&|=| |m+0#e000002&|a|i|n| +0#ffffff16#ff404010@4| +0#0000000#ffffff0@40
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@1| |@+0#0000000&|l|i|n|k| +0#0000e05&|s+0#00e0003&|u|b|s|t|r|i|n|g| +0#0000e05&|=| |'+0#e000002&|S|t|r|i|n|g|'| +0#0000e05&|t+0#00e0003&|a|r|g|e|t| +0#0000e05&|=| |'+0#e000002&|j|a|v|a|.|l|a|n|g|.|S|t|r|i|n|g|'| +0#0000e05&|:| +0#0000000&@9
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p+0#00e0003&|u|b|l|i|c| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|m|a|i|n|(|S|t|r|i|n|g|[|]| |a|r|g|s|)| |{| |}| @26
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@1| |@+0#0000000&|e|n|d| +0#ffffff16#ff404010| +0#0000000#ffffff0@60
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|/+0#0000e05&|*@1| |{+8#e000e06&|@+0&&|r|e|t|u|r|n| +8&&|a|n| |e|m|p|t|y| |s|t|r|i|n|g|}| +0#0000000&@39
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| |@+0#e000e06&|s|e@1| |<+0#00e0e07&|a+0#af5f00255&| +0#00e0e07&|h+0#00e0003&|r|e|f|=+0#00e0e07&|"+0#e000002&|h|t@1|p|s|:|/@1|d|o|c|s|.|o|r|a|c|l|e|.|c|o|m|/|j|a|v|a|s|e|/|s|p|e|c|s|/|j|l|s|/|s|e|2|1|/|h|t|m|@+0#4040ff13&@2
+| +0#0000000&@56|1|0|9|,|3|-|6| @6|9|1|%|
diff --git a/runtime/syntax/testdir/dumps/java_comments_html_07.dump b/runtime/syntax/testdir/dumps/java_comments_html_07.dump
new file mode 100644
index 0000000..a9384f3
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_comments_html_07.dump
@@ -0,0 +1,20 @@
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| |@+0#e000e06&|s|e@1| |<+0#00e0e07&|a+0#af5f00255&| +0#00e0e07&|h+0#00e0003&|r|e|f|=+0#00e0e07&|"+0#e000002&|h|t@1|p|s|:|/@1|d|o|c|s|.|o|r|a|c|l|e|.|c|o|m|/|j|a|v|a|s|e|/|s|p|e|c|s|/|j|l|s|/|s|e|2|1|/|h|t|m|l|/|j
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|s|-|3|.|h|t|m|l|#|j|l|s|-|3|.|1|0|.|5|"|>+0#00e0e07&|3+8#e000e06&|.|1|0|.|5| |S|t|r|i|n|g| |L|i|t|e|r|a|l|s|<+0#00e0e07&|/|a+0#af5f00255&|>+0#00e0e07&| +0#0000000&@24
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| |@+0#e000e06&|s|e@1| +0#0000000&@61
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@4|*| |<+0#00e0e07&|a+0#af5f00255&| +0#00e0e07&|h+0#00e0003&|r|e|f|=+0#00e0e07&|"+0#e000002&|h|t@1|p|s|:|/@1|d|o|c|s|.|o|r|a|c|l|e|.|c|o|m|/|j|a|v|a|s|e|/|s|p|e|c|s|/|j|l|s|/|s|e|2|1|/|h|t|m|l|/|j|l|s|-|4|.
+||+0#0000e05#a8a8a8255| |h+0#e000002#ffffff0|t|m|l|#|j|l|s|-|4|.|3|.|2|"|>+0#00e0e07&|4+8#e000e06&|.|3|.|2| |T|h|e| |C|l|a|s@1| |O|b|j|e|c|t|<+0#00e0e07&|/|a+0#af5f00255&|>+0#00e0e07&| +0#0000000&@30
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@4>*| |@+0#e000e06&|s|e@1| |j+0#00e0e07&|a|v|a|.|b|a|s|e|/|j|a|v|a|.|l|a|n|g|.|O|b|j|e|c|t|#|t|o|S|t|r|i|n|g|(|)| +0#0000e05&|*|/| +0#0000000&@20
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@1| |@+0#0000000&|s|t|a|r|t| +0#0000e05&|r+0#00e0003&|e|g|i|o|n| +0#0000e05&|=| |t+0#e000002&|o|S|t|r|i|n|g| +0#ffffff16#ff404010| +0#0000000#ffffff0@40
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@1| |@+0#0000000&|r|e|p|l|a|c|e| +0#0000e05&|s+0#00e0003&|u|b|s|t|r|i|n|g| +0#0000e05&|=| |'+0#e000002&|"@1|'| +0#0000e05&|r+0#00e0003&|e|p|l|a|c|e|m|e|n|t| +0#0000e05&|=| |"+0#e000002&|\|u|0@1|2@1|\|u|0@1|2@1|"| +0#0000000&@11
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@1| |@+0#0000000&|l|i|n|k| +0#0000e05&|r+0#00e0003&|e|g|e|x| +0#0000e05&|=| |'+0#e000002&|\|b|S|t|r|i|n|g|'| +0#0000e05&|t+0#00e0003&|a|r|g|e|t| +0#0000e05&|=| |j+0#e000002&|a|v|a|.|l|a|n|g|.|S|t|r|i|n|g| +0#0000e05&|t+0#00e0003&|y|p|e| +0#0000e05&|=| |l+0#e000002&|i|n|k|p|l|a|i
+| +0#0000e05#a8a8a8255@1|n+0#e000002#ffffff0| +0#0000e05&|:| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|"+0#e000002&@1|;+0#0000000&| |}| @19
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@1| |@+0#0000000&|e|n|d| +0#ffffff16#ff404010| +0#0000000#ffffff0@60
+| +0#0000e05#a8a8a8255@1|}+0#0000000#ffffff0| @71
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|2|5|,|3|-|6| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_comments_markdown_00.dump b/runtime/syntax/testdir/dumps/java_comments_markdown_00.dump
new file mode 100644
index 0000000..baf8f38
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_comments_markdown_00.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1>/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |u|n|l|e|t|!| |g+0fd7ff255|:+0&#ffffff0|j|a|v|a|_|n|o|_|t|a|b|_|s|p|a|c|e|_|e|r@1|o|r| |g|:|j|a|v|a|_|i|g|n|o|r|e|_|j+0&#ffd7d7255|a|v|a|d|o|c| +0#0000000#ffffff0
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |u|n|l|e|t|!| |g+0fd7ff255|:+0&#ffffff0|j|a|v|a|_|n|o|_|t|r|a|i|l|_|s|p|a|c|e|_|e|r@1|o|r| +0#0000000&@20
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t|[|g|:|j|a|v|a|_|s|p|a|c|e|_|e|r@1|o|r|s|,|g|:|j|a|v|a|_|c|o|m@1|e|n|t|_|s|t|r|i|n|g|s|]|=|[|1+0#e000002&|,+0#0000e05&|1+0#e000002&|]+0#0000e05&| +0#0000000&@1
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t|[|g|:|j|a|v|a|_|i|g|n|o|r|e|_|h|t|m|l|,|g|:|m|a|r|k|d|o|w|n|_|s|y|n|t|a|x|_|c|o|n|c|e|a|l|]|=|[|1+0#e000002&|,+0#0000e05&|1+0#e000002&|]+0#0000e05&
+| +0&#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |d|e|f|e|r| |e|x|e|c|u|t|e|(|'|m|a|t|c|h| |V|i|s|u|a|l| |/|\|%|>|2+0#e000002&|1|l|\+0#0000e05&|s|\|+|$|/|'|)| +0#0000000&@11
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |s+0&#ffd7d7255|e|t|l| +0&#ffffff0|s|p|e|l@1| |f+0&#ffd7d7255|d|c|=+0&#ffffff0|2+0#e000002&| +0#0000e05&|f+0&#ffd7d7255|d|l|=+0&#ffffff0|6+0#e000002&|4| +0#0000e05&|f+0&#ffd7d7255|d|m|=+0&#ffffff0|s|y|n|t|a|x| |f|e|n| |c+0&#ffd7d7255|o|l|e|=+0&#ffffff0|3+0#e000002&| +0#0000e05&|c+0&#ffd7d7255|o|c|u|=+0&#ffffff0|n| +0#0000000&@2
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i|g|h|l|i|g|h|t| |l|i|n|k| |j+0&#ffd7d7255|a|v|a|C|o|m@1|e|n|t|S|t|a|r|t| +0&#ffffff0|T+0&#ffd7d7255|o|d|o| +0#0000000#ffffff0@18
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i|g|h|l|i|g|h|t| |l|i|n|k| |j+0&#ffd7d7255|a|v|a|M|a|r|k|d|o|w|n|C|o|m@1|e|n|t|T|i|t|l|e| +0&#ffffff0|U|n|d|e|r|l|i|n|e|d| +0#0000000&@4
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i|g|h|l|i|g|h|t| |l|i|n|k| |m+0&#ffd7d7255|a|r|k|d|o|w|n|H|2| +0&#ffffff0|N+0&#ffd7d7255|o|n|T|e|x|t| +0#0000000#ffffff0@21
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i|g|h|l|i|g|h|t| |l|i|n|k| |m+0&#ffd7d7255|a|r|k|d|o|w|n|H|e|a|d|i|n|g|R|u|l|e| +0&#ffffff0|N+0&#ffd7d7255|o|n|T|e|x|t| +0#0000000#ffffff0@12
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/java_comments_markdown_01.dump b/runtime/syntax/testdir/dumps/java_comments_markdown_01.dump
new file mode 100644
index 0000000..3ec58c9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_comments_markdown_01.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i|g|h|l|i|g|h|t| |l|i|n|k| |m+0&#ffd7d7255|a|r|k|d|o|w|n|H|2| +0&#ffffff0|N+0&#ffd7d7255|o|n|T|e|x|t| +0#0000000#ffffff0@21
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i|g|h|l|i|g|h|t| |l|i|n|k| |m+0&#ffd7d7255|a|r|k|d|o|w|n|H|e|a|d|i|n|g|R|u|l|e| +0&#ffffff0|N+0&#ffd7d7255|o|n|T|e|x|t| +0#0000000#ffffff0@12
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |/+0&#ffffff0|*@1|/| +0#0000000&|/+0#0000001#ffff4012|*|/+0#0000e05#ffffff0| |*+0#0000001#ffff4012|/| +0#0000000#ffffff0|/+0#0000001#ffff4012|*| +0#0000e05#ffffff0|/+0#ffffff16#ff404010|*+0#0000001#ffff4012|/| +0#0000000#ffffff0|/+0#0000001#ffff4012|*|/+0#ffffff16#ff404010|*+0#0000001#ffff4012|/| +0#0000000#ffffff0|/+0#0000001#ffff4012|*|/+0#0000e05#ffffff0|/+0#ffffff16#ff404010|*+0#0000001#ffff4012|/| +0#0000000#ffffff0|/+0#0000e05&@2| +8#e000e06&|M|a|r|k|d|o|w|n| |c|o|m@1|e|n|t| |t|e|s|t|s|.| +0#0000000&@13
+||+0#0000e05#a8a8a8255| |/+0&#ffffff0@2| +0#0000000&@69
+||+0#0000e05#a8a8a8255| |/+0&#ffffff0@2| +0#0000000&|T+0#0000e05&|h|e|r|e| |i|s| |n|o| |e|n|t|r|y| |p|o|i|n|t| |m|e|t|h|o|d| |`+0#e000e06&|m|a|i|n|`|:+0#0000e05&| +0#0000000&@30
+||+0#0000e05#a8a8a8255| |/+0&#ffffff0@2| +0#0000000&|{+0#e000e06&|@|s|n|i|p@1|e|t| |f+0#00e0003&|i|l|e| +0#e000e06&|=| |M+0#e000002&|a|r|k|d|o|w|n|S|n|i|p@1|e|t|s|.|j|a|v|a| +0#e000e06&|r+0#00e0003&|e|g|i|o|n| +0#e000e06&|=| |m+0#e000002&|a|i|n| +0#e000e06&|i+0#00e0003&|d| +0#e000e06&|=| |_+0#e000002&|0|1|}+0#e000e06&| +0#0000000&@6
+||+0#0000e05#a8a8a8255| |/+0&#ffffff0@2| +0#0000000&@69
+||+0#0000e05#a8a8a8255| |/+0&#ffffff0@2| +0#0000000&|T+0#0000e05&|h|e|r|e| |i|s| |n|o| |t|e|x|t|u|a|l| |r|e|p|r|e|s|e|n|t|a|t|i|o|n|:| +0#0000000&@33
+||+0#0000e05#a8a8a8255| |/+0&#ffffff0@2| +0#0000000&|{+0#e000e06&|@|s|n|i|p@1|e|t| |c+0#00e0003&|l|a|s@1| +0#e000e06&|=| |M+0#e000002&|a|r|k|d|o|w|n|S|n|i|p@1|e|t|s| +0#e000e06&|r+0#00e0003&|e|g|i|o|n| +0#e000e06&|=| |t+0#e000002&|o|S|t|r|i|n|g| +0#e000e06&|i+0#00e0003&|d| +0#e000e06&|=| |_+0#e000002&|0|2|}+0#e000e06&| +0#0000000&@6
+| +0#0000e05#a8a8a8255@1|c+0#00e0003#ffffff0|l|a|s@1| +0#0000000&|M|a|r|k|d|o|w|n|C|o|m@1|e|n|t|s|T|e|s|t|s| |i+0#00e0003&|m|p|l|e|m|e|n|t|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|M|a|r|k|d|o|w|n|C|o|m@1|e|n|t|s|T|e|s|t|s|>|
+| +0#0000e05#a8a8a8255@1|{+0#0000000#ffffff0| @2|/+0#0000e05&@1| |J+0&#ffd7d7255|D|K| +0&#ffffff0|2+0#e000002&|3|++0#0000e05&|.| +0#0000000&@57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|M|a|r|k|d|o|w|n|C|o|m@1|e|n|t|s|T|e|s|t|s|(|)| |{| |}| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|/+0#0000e05&@2| +8#e000e06&|N|o|-|o|p|,| |i|.| +0#0000e05&|e+0fd7ff255|.+0&#ffffff0| |n+0fd7ff255|o| +0&#ffffff0|o|p|e|r|a|t|i|o|n|.| +0#0000000&@38
+@57|1|9|,|0|-|1| @7|1|0|%|
diff --git a/runtime/syntax/testdir/dumps/java_comments_markdown_02.dump b/runtime/syntax/testdir/dumps/java_comments_markdown_02.dump
new file mode 100644
index 0000000..5549348
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_comments_markdown_02.dump
@@ -0,0 +1,20 @@
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|/+0#0000e05&@2| +8#e000e06&|N|o|-|o|p|,| |i|.| +0#0000e05&|e+0fd7ff255|.+0&#ffffff0| |n+0fd7ff255|o| +0&#ffffff0|o|p|e|r|a|t|i|o|n|.| +0#0000000&@38
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| +0#0000000&|(+0#0000e05&|{+0#e000e06&|@|l|i|t|e|r|a|l|@|l|i|t|e|r|a|l|}| +0#0000e05&|m|a|y| |b|e| |u|s|e|d| |w|i|t|h| |`+0#e000e06&|.|`| +0#0000e05&|f|o|r| |c|o|n|t|r|a|c|t|i|o|n|.|)| +0#0000000&@6
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| |@+0#e000e06&|r|e|t|u|r|n| +0#0000e05&|`+0#e000e06&|n|u|l@1|`| +0#0000000&@50
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|V|o|i|d| |n|o|O|p|1|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n+0#e000002&|u|l@1|;+0#0000000&| |}| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3>/+0#0000e05&@2| +8#e000e06&|N|o|-|o|p|,| |i|.|e|.| +0#0000e05&|n|o| |o|p|e|r|a|t|i|o|n|.| +0#0000000&@39
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| +0#0000000&|(+0#0000e05&|{+0#e000e06&|@|l|i|t|e|r|a|l|<|!|-@1| |-@1|>|}| +0#0000e05&|m|a|y| |b|e| |u|s|e|d| |a|f|t|e|r| |`+0#e000e06&|.|`| +0#0000e05&|f|o|r| |c|o|n|t|r|a|c|t|i|o|n|.|)| +0#0000000&@5
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| |@+0#e000e06&|r|e|t|u|r|n| +0#0000e05&|`+0#e000e06&|n|u|l@1|`| +0#0000000&@50
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|V|o|i|d| |n|o|O|p|2|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n+0#e000002&|u|l@1|;+0#0000000&| |}| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|/+0#0000e05&@2| +8#e000e06&|N|o|-|o|p|,| |i|.|e|\|u+8&#ffd7d7255|0@1|2|e| +8&#ffffff0|n|o| |o|p|e|r|a|t|i|o|n|.| +0#0000000&@34
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| +0#0000000&|(+0#0000e05&|{+0#e000e06&|@|l|i|t|e|r|a|l|\|u|0@1|5|c|u|0@1|2|e|}| +0#0000e05&|i|s| |p|r|o|c|e|s@1|e|d| |e|a|r|l|y|,| |u|s|e| |a|l|t|e|r|n|a|t|i|v|e|s|.|)| +0#0000000&@3
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| |@+0#e000e06&|r|e|t|u|r|n| +0#0000e05&|`+0#e000e06&|n|u|l@1|`| +0#0000000&@50
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|V|o|i|d| |n|o|O|p|3|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n+0#e000002&|u|l@1|;+0#0000000&| |}| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|/+0#0000e05&@2| +8#e000e06&|N|o|-|o|p|,| |i|.|e|{+0&&|@|l|i|t|e|r|a|l| |.|}| +8&&|n|o| |o|p|e|r|a|t|i|o|n|.| +0#0000000&@28
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| |@+0#e000e06&|r|e|t|u|r|n| +0#0000e05&|`+0#e000e06&|n|u|l@1|`| +0#0000000&@50
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|V|o|i|d| |n|o|O|p|4|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n+0#e000002&|u|l@1|;+0#0000000&| |}| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|3|7|,|2|-|5| @7|2|4|%|
diff --git a/runtime/syntax/testdir/dumps/java_comments_markdown_03.dump b/runtime/syntax/testdir/dumps/java_comments_markdown_03.dump
new file mode 100644
index 0000000..4c325cb
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_comments_markdown_03.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|/+0#0000e05&@2| +8#e000e06&|N|o|-|o|p|,| |i|.|e|.|<+0&&|!|-@1| |-@1|>| +8&&|n|o| |o|p|e|r|a|t|i|o|n|.| +0#0000000&@31
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| |@+0#e000e06&|r|e|t|u|r|n| +0#0000e05&|`+0#e000e06&|n|u|l@1|`| +0#0000000&@50
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|V|o|i|d| |n|o|O|p|5|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n+0#e000002&|u|l@1|;+0#0000000&| |}| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3>/+0#0000e05&@2| +8#e000e06&|N|o|-|o|p|,| |i|.|e|.|&+0&&|n|b|s|p|;|n+8&&|o| |o|p|e|r|a|t|i|o|n|.| +0#0000000&@34
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| |@+0#e000e06&|r|e|t|u|r|n| +0#0000e05&|`+0#e000e06&|n|u|l@1|`| +0#0000000&@50
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|V|o|i|d| |n|o|O|p|6|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n+0#e000002&|u|l@1|;+0#0000000&| |}| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@2| |{+8#e000e06&|@+0&&|r|e|t|u|r|n| +8&&|`+0&&|n|u|l@1|`|,+8&&| |w|i|t|h| |n|o|-|o|p|,| |i|.|e|.| |n|o| |o|p|e|r|a|t|i|o|n|}| +0#0000000&@17
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|V|o|i|d| |n|o|O|p|7|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n+0#e000002&|u|l@1|;+0#0000000&| |}| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@2| |{+8#e000e06&|@+0&&|r|e|t|u|r|n| +8&&|`+0&&|n|u|l@1|`|,+8&&| |w|i|t|h| |n|o|-|o|p|,| |i|.|e|.| |n|o| |o|p|e|r|a|t|i|o|n|}|.@1| +0#0000000&@15
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|V|o|i|d| |n|o|O|p|8|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n+0#e000002&|u|l@1|;+0#0000000&| |}| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@2| |{+8#e000e06&|@+0&&|r|e|t|u|r|n| +8&&|`+0&&|n|u|l@1|`|,+8&&| |w|i|t|h| |n|o|-|o|p|,| |i|.|e|.| |n|o| |o|p|e|r|a|t|i|o|n|}| |.| |.| +0#0000000&@13
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|V|o|i|d| |n|o|O|p|9|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n+0#e000002&|u|l@1|;+0#0000000&| |}| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|/+0#0000e05&@2| |{+8#e000e06&|@+0&&|r|e|t|u|r|n| +8&&|t|h|e| |m|a|j|o|r| |J|a|v|a| |v|e|r|s|i|o|n|}| +0#0000000&@32
+@57|5@1|,|2|-|5| @7|3|8|%|
diff --git a/runtime/syntax/testdir/dumps/java_comments_markdown_04.dump b/runtime/syntax/testdir/dumps/java_comments_markdown_04.dump
new file mode 100644
index 0000000..b91a80b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_comments_markdown_04.dump
@@ -0,0 +1,20 @@
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|/+0#0000e05&@2| |{+8#e000e06&|@+0&&|r|e|t|u|r|n| +8&&|t|h|e| |m|a|j|o|r| |J|a|v|a| |v|e|r|s|i|o|n|}| +0#0000000&@32
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| |@+0#e000e06&|h|i|d@1|e|n| +0#0000000&@57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|i+0#00e0003&|n|t| +0#0000000&|m|a|j|o|r|V|e|r|s|i|o|n|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|2+0#e000002&|3|;+0#0000000&| |}| @25
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|/+0#0000e05&@2| @3|{+8#e000e06&|@|s|u|m@1|a|r|y| |C|o|m|p|a|r|e|s| |t|h|i|s| |i|n|s|t|a|n|c|e| |w|i|t|h| |t|h|e| |p|a|s@1|e|d| |`+0&&|t|h|a|t|`| +0#0000000&@6
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3>/@2| +0#0000000&|i+8#e000e06&|n|s|t|a|n|c|e| |f|o|r| |o|r|d|e|r| |b|y| |i|n|v|o|k|i|n|g| |[+0#0000000&|I+8#e000e06&|n|t|e|g|e|r|.|c|o|m|p|a|r|e|(|i|n|t|,| |i|n|t|)|]+0#0000000&| @6
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| +0#0000000&|a+8#e000e06&|n|d| |p|a|s@1|i|n|g| |i|t| |`+0&&|t|h|i|s|.|m|a|j|o|r|V|e|r|s|i|o|n|(|)|`| +8&&|a|n|d| +0#0000000&@24
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| +0#0000000&|`+0#e000e06&|t|h|a|t|.|m|a|j|o|r|V|e|r|s|i|o|n|(|)|`| +8&&|a|s| |r|e|s|p|e|c|t|i|v|e| |@|a|r|g|u|m|e|n|t|s|.|}| +0#0000000&@16
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| +0#0000000&|{+0#e000e06&|@|i|n|h|e|r|i|t|D|o|c|}| +0#0000000&@51
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|i+0#00e0003&|n|t| +0#0000000&|c|o|m|p|a|r|e|T|o|(|M|a|r|k|d|o|w|n|C|o|m@1|e|n|t|s|T|e|s|t|s| |t|h|a|t|)| @10
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|{| @67
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@7|j|a|v|a|.|u|t|i|l|.|O|b|j|e|c|t|s|.|r|e|q|u|i|r|e|N|o|n|N|u|l@1|(|t|h|a|t|,| |"+0#e000002&|t|h|a|t|"|)+0#0000000&|;| @17
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@7|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|I|n|t|e|g|e|r|.|c|o|m|p|a|r|e|(|t+0#00e0003&|h|i|s|.+0#0000000&|m|a|j|o|r|V|e|r|s|i|o|n|(|)|,| @21
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@23|t|h|a|t|.|m|a|j|o|r|V|e|r|s|i|o|n|(|)@1|;| @27
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|}| @67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|/+0#0000001#ffff4012|*|*+0#0000e05#ffffff0| |R|e|t|u|r|n|s| |a|n| |e|m|p|t|y| |s|t|r|i|n|g| |f|o|r| |a|n| |@|O|v|e|r@1|i|d|e| |a|n@1|o|t|a|t|e|d| |m|e|t|h|o|d| +0#0000000&@7
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|*| |(|s|e@1| |C|h|a|p|t|e|r| |9+0#e000002&|.|6|.|4|.|4| +0#0000e05&|{|@|l|i|t|e|r|a|l| |@|O|v|e|r@1|i|d|e|}| |i|n| |a| |J|a|v|a| |L|a|n|g|u|a|g|e| +0#0000000&@6
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|*| |S|p|e|c|i|f|i|c|a|t|i|o|n|)| |o|v|e|r@1|i|d@1|e|n| |f|r|o|m| |<|c|o|d|e|>|j|a|v|a|.|l+0&#ffd7d7255|a|n|g|.+0&#ffffff0|O|b|j|e|c|t|<|/|c|o|d|e|>| +0#0000000&@6
+@57|7|3|,|2|-|5| @7|5|2|%|
diff --git a/runtime/syntax/testdir/dumps/java_comments_markdown_05.dump b/runtime/syntax/testdir/dumps/java_comments_markdown_05.dump
new file mode 100644
index 0000000..155a1d3
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_comments_markdown_05.dump
@@ -0,0 +1,20 @@
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|*| |S|p|e|c|i|f|i|c|a|t|i|o|n|)| |o|v|e|r@1|i|d@1|e|n| |f|r|o|m| |<|c|o|d|e|>|j|a|v|a|.|l+0&#ffd7d7255|a|n|g|.+0&#ffffff0|O|b|j|e|c|t|<|/|c|o|d|e|>| +0#0000000&@6
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|*| +0#0000000&@67
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|*| |@|r|e|t|u|r|n| |a|n| |e|m|p|t|y| |s|t|r|i|n|g| |*+0#0000001#ffff4012|/|/+0#0000e05#ffffff0@1| |N|o| |p|e|r|i|o|d| |f|o|r| |t|h|e| |a|b|o|v|e| |s|u|m@1|a|r|y|!| +0#0000000&@5
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|S|t|r|i|n|g| |a|s|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|"+0#e000002&@1|;+0#0000000&| |}| @28
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3>/+0#0000e05&@2| +8#e000e06&|R|e|t|u|r|n|s| |a|n| |e|m|p|t|y| |s|t|r|i|n|g| |f|o|r| |a|n| |@|O|v|e|r@1|i|d|e| |a|n@1|o|t|a|t|e|d| |m|e|t|h|o|d| +0#0000000&@7
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| +0#0000000&|(+8#e000e06&|s|e@1| |C|h|a|p|t|e|r| |9|.|6|.|4|.|4| |{+0&&|@|l|i|t|e|r|a|l| |@|O|v|e|r@1|i|d|e|}| +8&&|i|n| |a| |J|a|v|a| |L|a|n|g|u|a|g|e| +0#0000000&@4
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| +0#0000000&|S+8#e000e06&|p|e|c|i|f|i|c|a|t|i|o|n|)| |o|v|e|r@1|i|d@1|e|n| |f|r|o|m| |`+0&&|j|a|v|a|.|l|a|n|g|.|O|b|j|e|c|t|`| +0#0000000&@15
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| +0#0000000&@65
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| |@+0#e000e06&|r|e|t|u|r|n| +0#0000e05&|a|n| |e|m|p|t|y| |s|t|r|i|n|g| |/@2| +8#e000e06&|N|o| |p|e|r|i|o|d| |f|o|r| |t|h|e| |a|b|o|v|e| |s|u|m@1|a|r|y|!| +0#0000000&@4
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|a|s|S|t|r|i|n|g|(|)|;| |}| @11
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@2| +8#e000e06&|A| |s|u|m@1|a|r|y| |c|o|m@1|e|n|t|.| +0#0000000&@46
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#00e0003&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |M|A|R|K|D|O|W|N|_|C|O|M@1|E|N|T|_|A| |=| |"+0#e000002&|/@2|"|;+0#0000000&| @21
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@2| |N|o| |s|u|m@1|a|r|y| |c|o|m@1|e|n|t| |(|t|r|y| |f|i|d@1|l|i|n|g| |w|i|t|h| |t|h|e| |a|b|o|v|e| |s|t|r|i|n|g| |v|a|l|u|e|)|.| +0#0000000&@2
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#00e0003&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |M|A|R|K|D|O|W|N|_|C|O|M@1|E|N|T|_|B| |=| |"+0#e000002&|/@2|"|;+0#0000000&| @21
+| +0#0000e05#a8a8a8255@1|}+0#0000000#ffffff0| @71
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |j+0&#ffd7d7255|a|v|a|d|o|c| +0&#ffffff0|-@1|s|n|i|p@1|e|t|-|p|a|t|h| |.| |-@1|s|o|u|r|c|e|-|p|a|t|h| |.| |-|d| |/|t+0&#ffd7d7255|m|p|/+0&#ffffff0|m+0&#ffd7d7255|d|_+0&#ffffff0|d|o|c|s|/| |-|p|a|c|k|a|g|e| |\| +0#0000000&@1
+@57|9|1|,|2|-|5| @7|6@1|%|
diff --git a/runtime/syntax/testdir/dumps/java_comments_markdown_06.dump b/runtime/syntax/testdir/dumps/java_comments_markdown_06.dump
new file mode 100644
index 0000000..d4018da
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_comments_markdown_06.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |j+0&#ffd7d7255|a|v|a|d|o|c| +0&#ffffff0|-@1|s|n|i|p@1|e|t|-|p|a|t|h| |.| |-@1|s|o|u|r|c|e|-|p|a|t|h| |.| |-|d| |/|t+0&#ffd7d7255|m|p|/+0&#ffffff0|m+0&#ffd7d7255|d|_+0&#ffffff0|d|o|c|s|/| |-|p|a|c|k|a|g|e| |\| +0#0000000&@1
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| +0#ffffff16#ff404010| +0#0000e05#ffffff0|-|t|a|g| |'|j+0&#ffd7d7255|l|s|:+0&#ffffff0|a|:|S|e@1| |J|a|v|a| |L|a|n|g|u|a|g|e| |S|p|e|c|i|f|i|c|a|t|i|o|n|:|'| |M+0&#ffd7d7255|a|r|k|d|o|w|n|S|n|i|p@1|e|t|s|.+0&#ffffff0|j|a|v|a| +0#0000000&@1
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@2| +8#e000e06&|S|n|i|p@1|e|t|s| |f|o|r| |M|a|r|k|d|o|w|n| |c|o|m@1|e|n|t| |t|e|s|t|s|.| +0#0000000&@32
+| +0#0000e05#a8a8a8255@1|c+0#00e0003#ffffff0|l|a|s@1| +0#0000000&|M|a|r|k|d|o|w|n|S|n|i|p@1|e|t|s| @50
+| +0#0000e05#a8a8a8255@1|{+0#0000000#ffffff0| @2|/+0#0000001#ffff4012|*| +0#ffffff16#ff404010| +0#0000e05#ffffff0|T|R|A|I|L|I|N|G| |B|L|A|N|K|S| |A|N|D| |M+0&#ffd7d7255|E|S@1|P|I|L@1|I|N|G|S| +0&#ffffff0|A|R|E| |S|I|G|N|I|F|I|C|A|N|T|!| |*+0#0000001#ffff4012|/| +0#0000000#ffffff0@12
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3>p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|M|a|r|k|d|o|w|n|S|n|i|p@1|e|t|s|(|)| |{| |}| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|/+0#0000e05&@2| +8#e000e06&|T|h|e| |m|e|t|h|o|d| |[+0#0000000&|`+0#e000e06&|m|a|i|n|`|]+0#0000000&| +8#e000e06&|m|u|s|t| |b|e| |d|e|c|l|a|r|e|d| |`+0&&|p|u|b|l|i|c|`|,+8&&| +0#0000000&@18
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| +0#0000000&|`+0#e000e06&|s|t|a|t|i|c|`|,+8&&| |a|n|d| |`+0&&|v|o|i|d|`|.+8&&| +0#0000e05&@1|I|t| |m|u|s|t| |s|p|e|c|i|f|y| |a| |f|o|r|m|a|l| |p|a|r|a|m|e|t|e|r| +0#0000000&@7
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| +0#0000000&|w+0#0000e05&|h|o|s|e| |d|e|c|l|a|r|e|d| |t|y|p|e| |i|s| |a|r@1|a|y| |o|f| |[+0#0000000&|S+8#e000e06&|t|r|i|n|g|]+0#0000000&|.+0#0000e05&| @1|T|h|e|r|e|f|o|r|e|,| +0#0000000&@11
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| +0#0000000&|e|i|t|h|e|r| +0#0000e05&|o|f| |t|h|e| |f|o|l@1|o|w|i|n|g| |d|e|c|l|a|r|a|t|i|o|n|s| |i|s| |a|c@1|e|p|t|a|b|l|e|.| @1|[|^|\+0#e000e06&|*|]+0#0000e05&| +0#0000000&@6
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| +0#0000000&@65
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| +0#e000e06&|-@62| +0#0000000&@1
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| +0#4040ff13&|D|E|C|L|A|R|A|T|I|O|N|S| |(|[+0#0000000&|m+8#e000e06&|a|i|n|(|S|t|r|i|n|g|\+0&&|[|\|]|)+8&&|]+0#0000000&|[+0#0000e05&|#+0#00e0003&|m|a|i|n|(|S|t|r|i|n|g|\|[|\|]|)|]+0#0000e05&|)+0#4040ff13&|:| +0#0000000&@11
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| +0#4040ff13&|-@52| +0#0000000&@11
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| +0#af5f00255&|*| +0#0000e05&|E|.|g|.| |{+0#e000e06&|@|s|n|i|p@1|e|t| |l+0#00e0003&|a|n|g|=+0#e000e06&|"+0#e000002&|j|a|v|a|"|:+0#e000e06&| +0#0000000&@35
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@3|/@2| |/@1| |@+0#0000000&|h|i|g|h|l|i|g|h|t| +0#e000e06&|s+0#00e0003&|u|b|s|t|r|i|n|g|=+0#e000e06&|"+0#e000002&|m|a|i|n|"| +0#e000e06&|t+0#00e0003&|y|p|e|=+0#e000e06&|"+0#e000002&|i|t|a|l|i|c|"|:+0#e000e06&| +0#0000000&@19
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@3|/@2| @3|p|u|b|l|i|c| |s|t|a|t|i|c| |v|o|i|d| |m|a|i|n|(|S|t|r|i|n|g|[|]| |a|r|g|s|)| |{| |}| +0#0000000&@19
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@3|/@2| |}| +0#0000000&@63
+@57|1|0|9|,|2|-|5| @6|8|0|%|
diff --git a/runtime/syntax/testdir/dumps/java_comments_markdown_07.dump b/runtime/syntax/testdir/dumps/java_comments_markdown_07.dump
new file mode 100644
index 0000000..c6471d6
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_comments_markdown_07.dump
@@ -0,0 +1,20 @@
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@3|/@2| |}| +0#0000000&@63
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| +0#af5f00255&|+| +0#0000e05&|E|.|g|.| +0#0000000&@58
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| |<+0#00e0e07&|p+0#af5f00255&|r|e| +0#00e0e07&|c+0#00e0003&|l|a|s@1|=+0#00e0e07&|"+0#e000002&|s|n|i|p@1|e|t|"|>+0#00e0e07&| +0#0000000&@43
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| +0#e000e06&@3|p|u|b|l|i|c| |s|t|a|t|i|c| |v|o|i|d| |m|a|i|n|(|S|t|r|i|n|g|.@2| |a|r|g|s|)| |{| |}| +0#0000000&@18
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| |<+0#00e0e07&|/|p+0#af5f00255&|r|e|>+0#00e0e07&| +0#0000000&@58
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3>/@2| +0#0000000&@65
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| |@+0#e000e06&|p|a|r|a|m| |a+0#00e0e07&|r|g|s| +0#0000e05&|o|p|t|i|o|n|a|l| |c+0&#ffd7d7255|o|m@1|a|n|d|e|-+0&#ffffff0|l|i|n|e| |a|r|g|u|m|e|n|t|s| +0#0000001#a8a8a8255| +0#0000000#ffffff0@19
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| |@|j+0&#ffd7d7255|l|s| +0&#ffffff0|1|2|.|1|.|4| |I|n|v|o|k|e| |`+0#e000e06&|T|e|s|t|.|m|a|i|n|`| +0#0000000&@34
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| +0#0000000&@65
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| |[|^+0#00e0003&|\|*|]+0#0000e05&|:| |@+0#e000002&|j|l|s| +0#0000e05&|1|2|.|1|.|4| |I|n|v|o|k|e| |`+0#e000e06&|T|e|s|t|.|m|a|i|n|`| +0#0000000&@27
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@1| |@+0#0000000&|s|t|a|r|t| +0#0000e05&|r+0#00e0003&|e|g|i|o|n| +0#0000e05&|=| |m+0#e000002&|a|i|n| +0#0000001#a8a8a8255@4| +0#0000000#ffffff0@40
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@1| |@+0#0000000&|l|i|n|k| +0#0000e05&|s+0#00e0003&|u|b|s|t|r|i|n|g| +0#0000e05&|=| |'+0#e000002&|S|t|r|i|n|g|'| +0#0000e05&|t+0#00e0003&|a|r|g|e|t| +0#0000e05&|=| |'+0#e000002&|j|a|v|a|.|l|a|n|g|.|S|t|r|i|n|g|'| +0#0000e05&|:| +0#0000000&@9
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p+0#00e0003&|u|b|l|i|c| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|m|a|i|n|(|S|t|r|i|n|g|[|]| |a|r|g|s|)| |{| |}| @26
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@1| |@+0#0000000&|e|n|d| +0#0000001#a8a8a8255| +0#0000000#ffffff0@60
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|/+0#0000e05&@2| |{+8#e000e06&|@+0&&|r|e|t|u|r|n| +8&&|a|n| |e|m|p|t|y| |s|t|r|i|n|g|}| +0#0000000&@39
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| |@+0#e000e06&|s|e@1| |S+0#00e0e07&|t|r|i|n|g| +0#0000e05&|[+0#0000000&|3+8#e000e06&|.|1|0|.|5| |S|t|r|i|n|g| |L|i|t|e|r|a|l|s|]+0#0000000&|(+0#0000e05&|h+0#e000002&|t@1|p|s|:|/@1|d|o|c|s|.|o|r|a|c|l|e|.|c|o|m|/|j|a|v|a
+||+0#0000e05#a8a8a8255| |s+0#e000002#ffffff0|e|/|s|p|e|c|s|/|j|l|s|/|s|e|2|1|/|h|t|m|l|/|j|l|s|-|3|.|h|t|m|l|#|j|l|s|-|3|.|1|0|.|5|)+0#0000e05&| +0#0000000&@27
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| |@+0#e000e06&|s|e@1| |O+0#00e0e07&|b|j|e|c|t| +0#0000000&@53
+@57|1|2|7|,|2|-|5| @6|9|3|%|
diff --git a/runtime/syntax/testdir/dumps/java_comments_markdown_08.dump b/runtime/syntax/testdir/dumps/java_comments_markdown_08.dump
new file mode 100644
index 0000000..1193a9e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_comments_markdown_08.dump
@@ -0,0 +1,20 @@
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| |@+0#e000e06&|s|e@1| |O+0#00e0e07&|b|j|e|c|t| +0#0000000&@53
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| |[+0#0000000&|4+8#e000e06&|.|3|.|2| |T|h|e| |C|l|a|s@1| |O|b|j|e|c|t|]+0#0000000&|(+0#0000e05&|h+0#e000002&|t@1|p|s|:|/@1|d|o|c|s|.|o|r|a|c|l|e|.|c|o|m|/|j|a|v|a|s|e|/|s|p|e|c|s|/|j|l|s
+||+0#0000e05#a8a8a8255| |/+0#e000002#ffffff0|s|e|2|1|/|h|t|m|l|/|j|l|s|-|4|.|h|t|m|l|#|j|l|s|-|4|.|3|.|2|)+0#0000e05&| +0#0000000&@40
+||+0#0000e05#a8a8a8255| | +0&#ffffff0@3|/@2| |@+0#e000e06&|s|e@1| |j+0#00e0e07&|a|v|a|.|b|a|s|e|/|j|a|v|a|.|l|a|n|g|.|O|b|j|e|c|t|#|t|o|S|t|r|i|n|g|(|)| +0#0000000&@22
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@1| |@+0#0000000&|s|t|a|r|t| +0#0000e05&|r+0#00e0003&|e|g|i|o|n| +0#0000e05&|=| |t+0#e000002&|o|S|t|r|i|n|g| +0#0000001#a8a8a8255| +0#0000000#ffffff0@40
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3>/+0#0000e05&@1| |@+0#0000000&|r|e|p|l|a|c|e| +0#0000e05&|s+0#00e0003&|u|b|s|t|r|i|n|g| +0#0000e05&|=| |'+0#e000002&|"@1|'| +0#0000e05&|r+0#00e0003&|e|p|l|a|c|e|m|e|n|t| +0#0000e05&|=| |"+0#e000002&|\|u|0@1|2@1|\|u|0@1|2@1|"| +0#0000000&@11
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@1| |@+0#0000000&|l|i|n|k| +0#0000e05&|r+0#00e0003&|e|g|e|x| +0#0000e05&|=| |'+0#e000002&|\|b|S|t|r|i|n|g|'| +0#0000e05&|t+0#00e0003&|a|r|g|e|t| +0#0000e05&|=| |j+0#e000002&|a|v|a|.|l|a|n|g|.|S|t|r|i|n|g| +0#0000e05&|t+0#00e0003&|y|p|e| +0#0000e05&|=| |l+0#e000002&|i|n|k|p|l|a|i
+| +0#0000e05#a8a8a8255@1|n+0#e000002#ffffff0| +0#0000e05&|:| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|"+0#e000002&@1|;+0#0000000&| |}| @19
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|/+0#0000e05&@1| |@+0#0000000&|e|n|d| +0#0000001#a8a8a8255| +0#0000000#ffffff0@60
+| +0#0000e05#a8a8a8255@1|}+0#0000000#ffffff0| @71
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|4|3|,|2|-|5| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_module_info_00.dump b/runtime/syntax/testdir/dumps/java_module_info_00.dump
index 82ef0b2..07fabd3 100644
--- a/runtime/syntax/testdir/dumps/java_module_info_00.dump
+++ b/runtime/syntax/testdir/dumps/java_module_info_00.dump
@@ -10,7 +10,7 @@
| +0#0000e05&|*| +0#0000000&@72
| +0#0000e05&|*| |@+0#e000e06&|u|s|e|s| |o+0#00e0e07&|r|g|.|d|e|m|o|.|i|n|t|e|r|n|a|l|.|T|e|s|t|a|b|l|e| +0#0000000&@39
| +0#0000e05&|*| |@+0#e000e06&|p|r|o|v|i|d|e|s| |o+0#00e0e07&|r|g|.|d|e|m|o|.|i|n|t|e|r|n|a|l|.|T|e|s|t|a|b|l|e| +0#0000000&@35
-| +0#0000e05&|*| |@+0#e000e06&|s|e@1| +0#0000e05&|S+0#00e0e07&|e|r|v|i|c|e|L|o|a|d|e|r| +0#0000000&@53
+| +0#0000e05&|*| |@+0#e000e06&|s|e@1| |S+0#00e0e07&|e|r|v|i|c|e|L|o|a|d|e|r| +0#0000000&@53
| +0#0000e05&|*|/| +0#0000000&@71
|m+0#00e0003&|o|d|u|l|e| +0#0000000&|o|r|g|.|m+0#00e0003&|o|d|u|l|e|.+0#0000000&|i|n|f|o|.|d|e|m|o| |/+0#0000e05&@1| |J|D|K| |2|3|+| |(|-@1|e|n|a|b|l|e|-|p|r|e|v|i|e|w| |-@1|r|e|l|e|a|s|e| |2|3|)|.| +0#0000000&@3
|{| @73
diff --git a/runtime/syntax/testdir/dumps/java_numbers_01.dump b/runtime/syntax/testdir/dumps/java_numbers_01.dump
index a66487a..d9aee00 100644
--- a/runtime/syntax/testdir/dumps/java_numbers_01.dump
+++ b/runtime/syntax/testdir/dumps/java_numbers_01.dump
@@ -13,7 +13,7 @@
@16|1+0#e000002&|e|+|3|,+0#0000000&| |1+0#e000002&|E|+|3|D|,+0#0000000&| |1+0#e000002&|e|+|3|f|,+0#0000000&| @39
@12|1+0#e000002&|d|,+0#0000000&| |1+0#e000002&|D|,+0#0000000&| |1+0#e000002&|f|,+0#0000000&| |1+0#e000002&|F|,+0#0000000&| @47
@75
-|/+0#0000e05&@3| |M|A|L|F|O|R|M|E|D|:| |:|l|e|t| |g|:|j|a|v|a|_|c|o|m@1|e|n|t|_|s|t|r|i|n|g|s| |=| |1| ||| |d|o|a|u|t|o|c|m|d| |S|y|n|t|a|x| +0#0000000&@8
+|/+0#0000e05&@2|/+0#e000e06&| |M|A|L|F|O|R|M|E|D|:| |:|l|e|t| |g|:|j|a|v|a|_+0#ffffff16#ff404010|c+0#e000e06#ffffff0|o|m@1|e|n|t|_+0#ffffff16#ff404010|s+0#e000e06#ffffff0|t|r|i|n|g|s| |=| |1| ||| |d|o|a|u|t|o|c|m|d| |S|y|n|t|a|x| +0#0000000&@8
|/+0#0000e05&@1| @9|0|_|x|.|0|p|0|,| |0|x|.|_|0|p|0|,| |0|x|.|0|_|p|0|,| |0|x|.|0|p|_|0|,| |0|x|.|0|p|0|_|,| +0#0000000&@18
|/+0#0000e05&@1| @9|0|x|0|_|.|0|p|0|,| |0|x|_|0|.|0|p|0|,| |0|x|p|0|,| +0#0000000&@37
@8|}|;| @64
diff --git a/runtime/syntax/testdir/input/java_comments.java b/runtime/syntax/testdir/input/java_comments_html.java
similarity index 74%
rename from runtime/syntax/testdir/input/java_comments.java
rename to runtime/syntax/testdir/input/java_comments_html.java
index 35f6f7d..eeffef5 100644
--- a/runtime/syntax/testdir/input/java_comments.java
+++ b/runtime/syntax/testdir/input/java_comments_html.java
@@ -1,7 +1,7 @@
// VIM_TEST_SETUP unlet! g:java_no_tab_space_error g:java_ignore_javadoc
// VIM_TEST_SETUP unlet! g:java_no_trail_space_error
// VIM_TEST_SETUP let [g:java_space_errors,g:java_comment_strings]=[1,1]
-
+// VIM_TEST_SETUP let g:java_ignore_markdown = 1
@@ -18,14 +18,14 @@
-/**/ /*/ */ /* /*/ /*/*/ /*//*/ /** Comment tests.
+/**/ /*/ */ /* /*/ /*/*/ /*//*/ /** HTML comment tests.
* <p>There is no entry point method {@code main}:
- * {@snippet file = Snippets.java region = main id = _01}
+ * {@snippet file = HTMLSnippets.java region = main id = _01}
* <p>There is no textual representation:
- * {@snippet class = Snippets region = toString id = _02} */
-class CommentsTests implements Comparable<CommentsTests>
-{
- private CommentsTests() { }
+ * {@snippet class = HTMLSnippets region = toString id = _02} */
+class HTMLCommentsTests implements Comparable<HTMLCommentsTests>
+{ // JDK 21+.
+ private HTMLCommentsTests() { }
/** No-op, i. e. no operation.
* ({@literal@literal} may be used with {@code .} for contraction.)
@@ -63,36 +63,43 @@
/** {@return {@code null}, with no-op, i.e. no operation} . . */
Void noOp9() { return null; }
- /** {@return the major Java version} @hidden */
+ /** {@return the major Java version}
+ * @hidden */
protected int majorVersion() { return 21; }
/** {@summary Compares this instance with the passed {@code that}
* instance for order by invoking {@link Integer#compare(int, int)
* compare} and passing it {@code this.majorVersion()} and
* {@code that.majorVersion()} as respective @arguments.}
- *
* {@inheritDoc} */
- @Override public int compareTo(CommentsTests that)
+ @Override public int compareTo(HTMLCommentsTests that)
{
java.util.Objects.requireNonNull(that, "that");
return Integer.compare(this.majorVersion(),
that.majorVersion());
}
+ /// Returns an empty string for an @Override annotated method
+ /// (see Chapter 9.6.4.4 {@literal @Override} in a Java Language
+ /// Specification) overridden from `java.lang.Object`
+ ///
+ /// @return an empty string /// No period for the above summary!
+ private String asString() { return ""; }
+
/** Returns an empty string for an @Override annotated method
* (see Chapter 9.6.4.4 {@literal @Override} in a Java Language
* Specification) overridden from <code>java.lang.Object</code>
*
* @return an empty string */// No period for the above summary!
- @Override public String toString() { return ""; }
+ @Override public String toString() { return asString(); }
}
-// javadoc --snippet-path . --source-path . -d /tmp/docs/ -package \
-// -tag 'jls:a:See Java Language Specification:' Snippets.java
-/** Snippets for comment tests. */
-class Snippets
+// javadoc --snippet-path . --source-path . -d /tmp/html_docs/ -package \
+// -tag 'jls:a:See Java Language Specification:' HTMLSnippets.java
+/** Snippets for HTML comment tests. */
+class HTMLSnippets
{ /* TRAILING BLANKS AND MESSPILLINGS ARE SIGNIFICANT! */
- private Snippets() { }
+ private HTMLSnippets() { }
/** The method {@code main} must be declared {@code public}, {@code
* static}, and {@code void}. It must specify a formal parameter
@@ -113,6 +120,8 @@
/** {@return an empty string}
* @see <a href="https://docs.oracle.com/javase/specs/jls/se21/html/jls-3.html#jls-3.10.5">3.10.5 String Literals</a>
+ * @see
+ * <a href="https://docs.oracle.com/javase/specs/jls/se21/html/jls-4.html#jls-4.3.2">4.3.2 The Class Object</a>
* @see java.base/java.lang.Object#toString() */
// @start region = toString
// @replace substring = '""' replacement = "\u0022\u0022"
diff --git a/runtime/syntax/testdir/input/java_comments_markdown.java b/runtime/syntax/testdir/input/java_comments_markdown.java
new file mode 100644
index 0000000..fa36971
--- /dev/null
+++ b/runtime/syntax/testdir/input/java_comments_markdown.java
@@ -0,0 +1,147 @@
+// VIM_TEST_SETUP unlet! g:java_no_tab_space_error g:java_ignore_javadoc
+// VIM_TEST_SETUP unlet! g:java_no_trail_space_error
+// VIM_TEST_SETUP let[g:java_space_errors,g:java_comment_strings]=[1,1]
+// VIM_TEST_SETUP let[g:java_ignore_html,g:markdown_syntax_conceal]=[1,1]
+
+
+
+
+
+// VIM_TEST_SETUP defer execute('match Visual /\%>21l\s\+$/')
+// VIM_TEST_SETUP setl spell fdc=2 fdl=64 fdm=syntax fen cole=3 cocu=n
+// VIM_TEST_SETUP highlight link javaCommentStart Todo
+// VIM_TEST_SETUP highlight link javaMarkdownCommentTitle Underlined
+// VIM_TEST_SETUP highlight link markdownH2 NonText
+// VIM_TEST_SETUP highlight link markdownHeadingRule NonText
+
+
+
+
+
+/**/ /*/ */ /* /*/ /*/*/ /*//*/ /// Markdown comment tests.
+///
+/// There is no entry point method `main`:
+/// {@snippet file = MarkdownSnippets.java region = main id = _01}
+///
+/// There is no textual representation:
+/// {@snippet class = MarkdownSnippets region = toString id = _02}
+class MarkdownCommentsTests implements Comparable<MarkdownCommentsTests>
+{ // JDK 23+.
+ private MarkdownCommentsTests() { }
+
+ /// No-op, i. e. no operation.
+ /// ({@literal@literal} may be used with `.` for contraction.)
+ /// @return `null`
+ Void noOp1() { return null; }
+
+ /// No-op, i.e. no operation.
+ /// ({@literal<!-- -->} may be used after `.` for contraction.)
+ /// @return `null`
+ Void noOp2() { return null; }
+
+ /// No-op, i.e\u002e no operation.
+ /// ({@literal\u005cu002e} is processed early, use alternatives.)
+ /// @return `null`
+ Void noOp3() { return null; }
+
+ /// No-op, i.e{@literal .} no operation.
+ /// @return `null`
+ Void noOp4() { return null; }
+
+ /// No-op, i.e.<!-- --> no operation.
+ /// @return `null`
+ Void noOp5() { return null; }
+
+ /// No-op, i.e. no operation.
+ /// @return `null`
+ Void noOp6() { return null; }
+
+ /// {@return `null`, with no-op, i.e. no operation}
+ Void noOp7() { return null; }
+
+ /// {@return `null`, with no-op, i.e. no operation}..
+ Void noOp8() { return null; }
+
+ /// {@return `null`, with no-op, i.e. no operation} . .
+ Void noOp9() { return null; }
+
+ /// {@return the major Java version}
+ /// @hidden
+ protected int majorVersion() { return 23; }
+
+ /// {@summary Compares this instance with the passed `that`
+ /// instance for order by invoking [Integer.compare(int, int)]
+ /// and passing it `this.majorVersion()` and
+ /// `that.majorVersion()` as respective @arguments.}
+ /// {@inheritDoc}
+ @Override public int compareTo(MarkdownCommentsTests that)
+ {
+ java.util.Objects.requireNonNull(that, "that");
+ return Integer.compare(this.majorVersion(),
+ that.majorVersion());
+ }
+
+ /** Returns an empty string for an @Override annotated method
+ * (see Chapter 9.6.4.4 {@literal @Override} in a Java Language
+ * Specification) overridden from <code>java.lang.Object</code>
+ *
+ * @return an empty string */// No period for the above summary!
+ private String asString() { return ""; }
+
+ /// Returns an empty string for an @Override annotated method
+ /// (see Chapter 9.6.4.4 {@literal @Override} in a Java Language
+ /// Specification) overridden from `java.lang.Object`
+ ///
+ /// @return an empty string /// No period for the above summary!
+ @Override public String toString() { return asString(); }
+
+ /// A summary comment.
+ static final String MARKDOWN_COMMENT_A = "///";
+ /// No summary comment (try fiddling with the above string value).
+ static final String MARKDOWN_COMMENT_B = "///";
+}
+
+// javadoc --snippet-path . --source-path . -d /tmp/md_docs/ -package \
+// -tag 'jls:a:See Java Language Specification:' MarkdownSnippets.java
+/// Snippets for Markdown comment tests.
+class MarkdownSnippets
+{ /* TRAILING BLANKS AND MESSPILLINGS ARE SIGNIFICANT! */
+ private MarkdownSnippets() { }
+
+ /// The method [`main`] must be declared `public`,
+ /// `static`, and `void`. It must specify a formal parameter
+ /// whose declared type is array of [String]. Therefore,
+ /// _either_ of the following declarations is acceptable. [^\*]
+ ///
+ /// ---------------------------------------------------------------
+ /// DECLARATIONS ([main(String\[\])][#main(String\[\])]):
+ /// -----------------------------------------------------
+ /// * E.g. {@snippet lang="java":
+ /// // @highlight substring="main" type="italic":
+ /// public static void main(String[] args) { }
+ /// }
+ /// + E.g.
+ /// <pre class="snippet">
+ /// public static void main(String... args) { }
+ /// </pre>
+ ///
+ /// @param args optional commande-line arguments
+ /// @jls 12.1.4 Invoke `Test.main`
+ ///
+ /// [^\*]: @jls 12.1.4 Invoke `Test.main`
+ // @start region = main
+ // @link substring = 'String' target = 'java.lang.String' :
+ public static void main(String[] args) { }
+ // @end
+
+ /// {@return an empty string}
+ /// @see String [3.10.5 String Literals](https://docs.oracle.com/javase/specs/jls/se21/html/jls-3.html#jls-3.10.5)
+ /// @see Object
+ /// [4.3.2 The Class Object](https://docs.oracle.com/javase/specs/jls/se21/html/jls-4.html#jls-4.3.2)
+ /// @see java.base/java.lang.Object#toString()
+ // @start region = toString
+ // @replace substring = '""' replacement = "\u0022\u0022"
+ // @link regex = '\bString' target = java.lang.String type = linkplain :
+ @Override public String toString() { return ""; }
+ // @end
+}