runtime(java): Recognise the CommonMark form (///) of Javadoc comments

Commit: 
https://github.com/vim/vim/commit/85f054aa3f0fb9530712d0897e3c8ba29946fad4
Author: Aliaksei Budavei <0x000...@gmail.com>
Date:   Mon Sep 30 19:40:04 2024 +0200

    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 <c...@tpope.net>
    Signed-off-by: Aliaksei Budavei <0x000...@gmail.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/runtime/autoload/javaformat.vim b/runtime/autoload/javaformat.vim
new file mode 100644
index 000000000..4d7d32cf1
--- /dev/null
+++ b/runtime/autoload/javaformat.vim
@@ -0,0 +1,92 @@
+" Vim formatting plugin file
+" Language:            Java
+" Maintainer:          Aliaksei Budavei <0x000c70 AT gmail DOT com>
+" Repository:          https://github.com/zzzyxwvut/java-vim.git
+" Last Change:         2024 Sep 26
+
+" Documented in ":help ft-java-plugin".
+if &cp || exists("g:loaded_javaformat") || exists("g:java_ignore_javadoc") || 
exists("g:java_ignore_markdown")
+    finish
+endif
+
+let g:loaded_javaformat = 1
+
+"""" STRIVE TO REMAIN COMPATIBLE FOR AT LEAST VIM 7.0.
+
+function! javaformat#RemoveCommonMarkdownWhitespace() abort
+    if mode() != 'n'
+       return 0
+    endif
+
+    let pattern = '\(^\s*///\)\(\s*\)\(.*\)'
+
+    " E121 for v:numbermax before v8.2.2388.
+    " E15 for expr-<< before v8.2.5003.
+    let common = 0x7fffffff
+    let comments = []
+
+    for n in range(v:lnum, (v:lnum + v:count - 1))
+       let parts = matchlist(getline(n), pattern)
+       let whitespace = get(parts, 2, '')
+       let nonwhitespace = get(parts, 3, '')
+
+       if !empty(whitespace)
+           let common = min([common, strlen(whitespace)])
+       elseif !empty(nonwhitespace) || empty(parts)
+           " No whitespace prefix or not a Markdown comment.
+           return 0
+       endif
+
+       call add(comments, [whitespace, parts[1], nonwhitespace])
+    endfor
+
+    let cursor = v:lnum
+
+    for line in comments
+       call setline(cursor, join(line[1 :], strpart(line[0], common)))
+       let cursor += 1
+    endfor
+
+    return 0
+endfunction
+
+" See ":help vim9-mix".
+if !has("vim9script")
+    finish
+endif
+
+def! g:javaformat#RemoveCommonMarkdownWhitespace(): number
+    if mode() != 'n'
+       return 0
+    endif
+
+    const pattern: string = '\(^\s*///\)\(\s*\)\(.*\)'
+    var common: number = v:numbermax
+    var comments: list<list<string>> = []
+
+    for n in range(v:lnum, (v:lnum + v:count - 1))
+       const parts: list<string> = matchlist(getline(n), pattern)
+       const whitespace: string = get(parts, 2, '')
+       const nonwhitespace: string = get(parts, 3, '')
+
+       if !empty(whitespace)
+           common = min([common, strlen(whitespace)])
+       elseif !empty(nonwhitespace) || empty(parts)
+           # No whitespace prefix or not a Markdown comment.
+           return 0
+       endif
+
+       add(comments, [whitespace, parts[1], nonwhitespace])
+    endfor
+
+    var cursor: number = v:lnum
+
+    for line in comments
+       setline(cursor, join(line[1 :], strpart(line[0], common)))
+       cursor += 1
+    endfor
+
+    return 0
+enddef
+
+" vim: fdm=syntax sw=4 ts=8 noet sta
diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt
index a7ed92880..0dfdff89c 100644
--- a/runtime/doc/filetype.txt
+++ b/runtime/doc/filetype.txt
@@ -1,4 +1,4 @@
-*filetype.txt* For Vim version 9.1.  Last change: 2024 Aug 21
+*filetype.txt* For Vim version 9.1.  Last change: 2024 Sep 29
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -698,6 +698,28 @@ Remember to manually trigger the |FileType| event from a 
buffer with a Java
 file loaded in it each time after assigning a new value to the variable: >
        doautocmd FileType
 <
+Markdown documentation comments may contain common runs of vertical leading
+whitespace following the comment marks (`///`) for aesthetic reasons; however,
+some horizontal runs of leading whitespace are significant in Markdown because
+they denote code blocks etc.  For convenience, a 'formatexpr' function is
+provided for the |gq| operator.  As long as neither "g:java_ignore_javadoc"
+nor "g:java_ignore_markdown" is defined, the reformatting of Markdown comments
+can be enabled on demand with: >
+       setlocal formatexpr=g:javaformat#RemoveCommonMarkdownWhitespace()
+<
+Or for Vim versions less than `7.4.265`, with: >
+       setlocal formatexpr=javaformat#RemoveCommonMarkdownWhitespace()
+<
+This function accepts a range of lines, removes a common run of vertical
+leading whitespace, and rewrites the lines of the range.  Depending on the
+author's layout style and the comment contents, which lines to select for
+reformatting can vary from the whole comment to only some portion of it.
+
+To enable the recognition of Markdown comments each time after removing
+"g:java_ignore_markdown" or "g:java_ignore_javadoc", remember to manually
+re-source "javaformat.vim" for Vim versions greater than `8.2.1397`: >
+       runtime autoload/javaformat.vim
+<
 
 JSON-FORMAT                                            *ft-json-plugin*
 
diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
index 4a5b07c90..ff8093617 100644
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -1,4 +1,4 @@
-*syntax.txt*   For Vim version 9.1.  Last change: 2024 Sep 19
+*syntax.txt*   For Vim version 9.1.  Last change: 2024 Sep 28
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -2106,7 +2106,8 @@ respectively.
 Javadoc is a program that takes special comments out of Java program files and
 creates HTML pages.  The standard configuration will highlight this HTML code
 similarly to HTML files (see |html.vim|).  You can even add JavaScript and CSS
-inside this code (see below).  The HTML rendering diverges as follows:
+inside this code (see below).  The HTML rendering and the Markdown rendering
+diverge as follows:
   1. The first sentence (all characters up to the first period `.`, which is
      followed by a whitespace character or a line terminator, or up to the
      first block tag, e.g. `@param`, `@return`) is colored as
@@ -2119,8 +2120,14 @@ inside this code (see below).  The HTML rendering 
diverges as follows:
        *Special        special symbols
      and some of their arguments are colored as
        *Function       function names.
-To turn this feature off, add the following line to your startup file: >
+To turn this feature off for both HTML and Markdown, add the following line to
+your startup file: >
        :let g:java_ignore_javadoc = 1
+Alternatively, only suppress HTML comments or Markdown comments: >
+       :let g:java_ignore_html = 1
+       :let g:java_ignore_markdown = 1
+
+See |ft-java-plugin| for additional support available for Markdown comments.
 
 If you use the special Javadoc comment highlighting described above, you can
 also turn on special highlighting for JavaScript, Visual Basic scripts, and
diff --git a/runtime/ftplugin/java.vim b/runtime/ftplugin/java.vim
index eee7ef015..55b358374 100644
--- a/runtime/ftplugin/java.vim
+++ b/runtime/ftplugin/java.vim
@@ -3,18 +3,29 @@
 " Maintainer:          Aliaksei Budavei <0x000c70 AT gmail DOT com>
 " Former Maintainer:   Dan Sharp
 " Repository:          https://github.com/zzzyxwvut/java-vim.git
-" Last Change:         2024 Apr 18
+" Last Change:         2024 Sep 26
 "                      2024 Jan 14 by Vim Project (browsefilter)
 "                      2024 May 23 by Riley Bruins <ribr...@gmail.com> 
('commentstring')
 
-if exists("b:did_ftplugin") | finish | endif
-let b:did_ftplugin = 1
-
 " Make sure the continuation lines below do not cause problems in
 " compatibility mode.
 let s:save_cpo = &cpo
 set cpo-=C
 
+if (exists("g:java_ignore_javadoc") || exists("g:java_ignore_markdown")) &&
+       \ exists("*javaformat#RemoveCommonMarkdownWhitespace")
+    delfunction javaformat#RemoveCommonMarkdownWhitespace
+    unlet! g:loaded_javaformat
+endif
+
+if exists("b:did_ftplugin")
+    let &cpo = s:save_cpo
+    unlet s:save_cpo
+    finish
+endif
+
+let b:did_ftplugin = 1
+
 " For filename completion, prefer the .java extension over the .class
 " extension.
 set suffixes+=.class
@@ -27,6 +38,8 @@ setlocal suffixesadd=.java
 " Clean up in case this file is sourced again.
 unlet! s:zip_func_upgradable
 
+"""" STRIVE TO REMAIN COMPATIBLE FOR AT LEAST VIM 7.0.
+
 " Documented in ":help ft-java-plugin".
 if exists("g:ftplugin_java_source_path") &&
                \ type(g:ftplugin_java_source_path) == type("")
@@ -59,8 +72,9 @@ endif
 " and insert the comment leader when hitting <CR> or using "o".
 setlocal formatoptions-=t formatoptions+=croql
 
-" Set 'comments' to format dashed lists in comments. Behaves just like C.
-setlocal comments& comments^=sO:*\ -,mO:*\ \ ,exO:*/
+" Set 'comments' to format Markdown Javadoc comments and dashed lists
+" in other multi-line comments (it behaves just like C).
+setlocal comments& comments^=:///,sO:*\ -,mO:*\ \ ,exO:*/
 
 setlocal commentstring=//\ %s
 
@@ -103,3 +117,4 @@ endif
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
 unlet s:save_cpo
+" vim: fdm=syntax sw=4 ts=8 noet sta
diff --git a/runtime/syntax/java.vim b/runtime/syntax/java.vim
index 800faa40a..737219afc 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 <clau...@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 @@ else
   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 @@ if fnamemodify(bufname("%"), ":t") =~ 
'^module-info\>\%(\.class\>\)\@!'
   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 @@ syn match   javaCommentMarkupTagAttr contained 
"\<region\>" nextgroup=javaCommen
 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 @@ if !exists("g:java_ignore_javadoc") && g:main_syntax != 
'jsp'
     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="\.[   
]\@=" 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*
\=
\=\s*\**\s*\%({@return\>\)\@=" matchgroup=javaCommentTitle end="}\%(\s*\.*\)*" 
contains=@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,@javaDocTags,javaTitleSkipBlock
-  syn region javaCommentTitle  contained matchgroup=javaDocComment 
start="/\*\*\s*
\=
\=\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="\%(///.*
\=
\s*\)\@' . s:ff.Peek('80', '') . '<!///" matchgroup=javaMarkdownCommentTitle 
end="\.$" end="\.[         
]\@=" end="
\%(\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="\%(///.*
\=
\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="\%(///.*
\=
\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}.\+
\=
\s*/// \{,3}=\+\s*$" 
contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink,javaMarkdownCommentMask
+    syn match markdownH2               contained "^\s*/// \{,3}.\+
\=
\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,}\|     
\)" 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="\[\%([   ]\]\)\@!" 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="\.[         
]\@=" 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*
\=
\=\s*\**\s*\%({@return\>\)\@=" matchgroup=javaCommentTitle end="}\%(\s*\.*\)*" 
contains=@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,@javaDocTags,javaTitleSkipBlock
+    syn region javaCommentTitle        contained matchgroup=javaDocComment 
start="/\*\*\s*
\=
\=\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 @@ if !exists("g:java_ignore_javadoc") && g:main_syntax != 
'jsp'
   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 @["<  
]\@!\%(\k\|[/.]\)*\%(##\=\k\+\%((\_[^)]*)\)\=\)\=@ 
nextgroup=javaDocSeeTag3Label skipwhite skipempty
+  exec 'syn match javaDocSeeTag3 contained @[' . s:ff.WithMarkdown('[', '') . 
'"<      ]\@!\%(\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 @@ if !exists("g:java_ignore_javadoc") && g:main_syntax != 
'jsp'
   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 @@ endif
 
 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 @@ if exists("g:java_foldtext_show_first_or_second_line")
   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_05.dump 
b/runtime/syntax/testdir/dumps/java_comments_05.dump
deleted file mode 100644
index 85492d8a5..000000000
--- 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_07.dump 
b/runtime/syntax/testdir/dumps/java_comments_07.dump
deleted file mode 100644
index f83433e75..000000000
--- 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 f0ecd9d5a..be353893d 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+0&#5fd7ff255|:+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+0&#5fd7ff255|:+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 ab6007b2e..c747bedc6 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+0&#5fd7ff255|.+0&#ffffff0| 
|n+0&#5fd7ff255|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 03c4bcfc1..927415c16 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 a407805ee..b9b23da0d 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_04.dump 
b/runtime/syntax/testdir/dumps/java_comments_html_04.dump
similarity index 55%
rename from runtime/syntax/testdir/dumps/java_comments_04.dump
rename to runtime/syntax/testdir/dumps/java_comments_html_04.dump
index d415c024c..bb7e638e9 100644
--- a/runtime/syntax/testdir/dumps/java_comments_04.dump
+++ b/runtime/syntax/testdir/dumps/java_comments_html_04.dump
@@ -1,20 +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#0000000&@66
+||+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|(|C|o|m@1|e|n|t|s|T|e|s|t|s| |t|h|a|t|)| @18
+| +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| | +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|%| 
+| +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 000000000..d553aa1c2
--- /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_06.dump 
b/runtime/syntax/testdir/dumps/java_comments_html_06.dump
similarity index 52%
rename from runtime/syntax/testdir/dumps/java_comments_06.dump
rename to runtime/syntax/testdir/dumps/java_comments_html_06.dump
index 84336a33b..4d26b9411 100644
--- a/runtime/syntax/testdir/dumps/java_comments_06.dump
+++ b/runtime/syntax/testdir/dumps/java_comments_html_06.dump
@@ -1,20 +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&|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|%| 
+||+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 000000000..a9384f3fa
--- /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 000000000..baf8f3893
--- /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+0&#5fd7ff255|:+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+0&#5fd7ff255|:+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 000000000..3ec58c975
--- /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+0&#5fd7ff255|.+0&#ffffff0| 
|n+0&#5fd7ff255|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 000000000..55493485b
--- /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+0&#5fd7ff255|.+0&#ffffff0| 
|n+0&#5fd7ff255|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 000000000..4c325cb5a
--- /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 000000000..b91a80b8f
--- /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 000000000..155a1d332
--- /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 000000000..d4018da21
--- /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 000000000..c6471d6d2
--- /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 000000000..1193a9e28
--- /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 82ef0b2cf..07fabd367 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 a66487ace..d9aee00fa 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 35f6f7d50..eeffef5b7 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 @@ class CommentsTests implements Comparable<CommentsTests>
        /** {@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 @@ class Snippets
 
        /** {@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 000000000..fa369719d
--- /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.&nbsp;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 = ' String' target = java.lang.String type = linkplain :
+       @Override public String toString() { return ""; }
+       // @end 
+}

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/E1svKST-002Te2-Ef%40256bit.org.

Raspunde prin e-mail lui