summaryrefslogtreecommitdiffstats
path: root/runtime/syntax
diff options
context:
space:
mode:
authordkearns <dougkearns@gmail.com>2023-11-29 06:41:41 +1100
committerGitHub <noreply@github.com>2023-11-28 20:41:41 +0100
commita9058440b7b9d7f5d0027c8cd44366e9200ca241 (patch)
treefa7cf90d2cb10cc4dd81c28f9b1f2690986fb79a /runtime/syntax
parentc4ffeddfe5bd1824650e9b911ed9245bf56c69e3 (diff)
runtime(html): Update syntax file (#13591)
Add missing search element and update ARIA attribute list. Add a very basic test file to check all elements are matched. Signed-off-by: Christian Brabandt <cb@256bit.org>
Diffstat (limited to 'runtime/syntax')
-rw-r--r--runtime/syntax/html.vim90
-rw-r--r--runtime/syntax/testdir/dumps/html_00.dump20
-rw-r--r--runtime/syntax/testdir/dumps/html_01.dump20
-rw-r--r--runtime/syntax/testdir/dumps/html_02.dump20
-rw-r--r--runtime/syntax/testdir/dumps/html_03.dump20
-rw-r--r--runtime/syntax/testdir/dumps/html_04.dump20
-rw-r--r--runtime/syntax/testdir/dumps/html_05.dump20
-rw-r--r--runtime/syntax/testdir/dumps/html_06.dump20
-rw-r--r--runtime/syntax/testdir/dumps/html_07.dump20
-rw-r--r--runtime/syntax/testdir/dumps/html_99.dump20
-rw-r--r--runtime/syntax/testdir/input/html.html146
11 files changed, 397 insertions, 19 deletions
diff --git a/runtime/syntax/html.vim b/runtime/syntax/html.vim
index 82c829a2e1..c975ae8620 100644
--- a/runtime/syntax/html.vim
+++ b/runtime/syntax/html.vim
@@ -3,9 +3,9 @@
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Previous Maintainers: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
" Claudio Fleiner <claudio@fleiner.com>
-" Last Change: 2023 Feb 20
+" Last Change: 2023 Nov 28
-" Please check :help html.vim for some comments and a description of the options
+" See :help html.vim for some comments and a description of the options
" quit when a syntax file was already loaded
if !exists("main_syntax")
@@ -28,7 +28,6 @@ syn case ignore
" mark illegal characters
syn match htmlError "[<>&]"
-
" tags
syn region htmlString contained start=+"+ end=+"+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc
syn region htmlString contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc
@@ -39,7 +38,6 @@ syn match htmlTagN contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,
syn match htmlTagN contained +</\s*[-a-zA-Z0-9]\++hs=s+2 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
syn match htmlTagError contained "[^>]<"ms=s+1
-
" tag names
syn keyword htmlTagName contained address applet area a base basefont
syn keyword htmlTagName contained big blockquote br caption center
@@ -61,7 +59,7 @@ syn keyword htmlTagName contained article aside audio bdi canvas data
syn keyword htmlTagName contained datalist details dialog embed figcaption
syn keyword htmlTagName contained figure footer header hgroup keygen main
syn keyword htmlTagName contained mark menuitem meter nav output picture
-syn keyword htmlTagName contained progress rb rp rt rtc ruby section
+syn keyword htmlTagName contained progress rb rp rt rtc ruby search section
syn keyword htmlTagName contained slot source summary template time track
syn keyword htmlTagName contained video wbr
@@ -88,19 +86,72 @@ syn keyword htmlArg contained size src start target text type url
syn keyword htmlArg contained usemap ismap valign value vlink vspace width wrap
syn match htmlArg contained "\<\%(http-equiv\|href\|title\)="me=e-1
-" aria attributes
-exe 'syn match htmlArg contained "\<aria-\%(' . join([
- \ 'activedescendant', 'atomic', 'autocomplete', 'busy', 'checked', 'colcount',
- \ 'colindex', 'colspan', 'controls', 'current', 'describedby', 'details',
- \ 'disabled', 'dropeffect', 'errormessage', 'expanded', 'flowto', 'grabbed',
- \ 'haspopup', 'hidden', 'invalid', 'keyshortcuts', 'label', 'labelledby', 'level',
- \ 'live', 'modal', 'multiline', 'multiselectable', 'orientation', 'owns',
- \ 'placeholder', 'posinset', 'pressed', 'readonly', 'relevant', 'required',
- \ 'roledescription', 'rowcount', 'rowindex', 'rowspan', 'selected', 'setsize',
- \ 'sort', 'valuemax', 'valuemin', 'valuenow', 'valuetext'
- \ ], '\|') . '\)\>"'
syn keyword htmlArg contained role
+" ARIA attributes {{{1
+let s:aria =<< trim END
+ activedescendant
+ atomic
+ autocomplete
+ braillelabel
+ brailleroledescription
+ busy
+ checked
+ colcount
+ colindex
+ colindextext
+ colspan
+ controls
+ current
+ describedby
+ description
+ details
+ disabled
+ errormessage
+ expanded
+ flowto
+ haspopup
+ hidden
+ invalid
+ keyshortcuts
+ label
+ labelledby
+ level
+ live
+ modal
+ multiline
+ multiselectable
+ orientation
+ owns
+ placeholder
+ posinset
+ pressed
+ readonly
+ relevant
+ required
+ roledescription
+ rowcount
+ rowindex
+ rowindextext
+ rowspan
+ selected
+ setsize
+ sort
+ valuemax
+ valuemin
+ valuenow
+ valuetext
+END
+let s:aria_deprecated =<< trim END
+ dropeffect
+ grabbed
+END
+
+call extend(s:aria, s:aria_deprecated)
+exe 'syn match htmlArg contained "\%#=1\<aria-\%(' .. s:aria->join('\|') .. '\)\>"'
+unlet s:aria s:aria_deprecated
+" }}}
+
" Netscape extensions
syn keyword htmlTagName contained frame noframes frameset nobr blink
syn keyword htmlTagName contained layer ilayer nolayer spacer
@@ -321,9 +372,9 @@ if !exists("html_no_rendering")
hi def htmlUnderlineItalic term=italic,underline cterm=italic,underline gui=italic,underline
hi def htmlItalic term=italic cterm=italic gui=italic
if v:version > 800 || v:version == 800 && has("patch1038")
- hi def htmlStrike term=strikethrough cterm=strikethrough gui=strikethrough
+ hi def htmlStrike term=strikethrough cterm=strikethrough gui=strikethrough
else
- hi def htmlStrike term=underline cterm=underline gui=underline
+ hi def htmlStrike term=underline cterm=underline gui=underline
endif
endif
endif
@@ -356,4 +407,5 @@ endif
let &cpo = s:cpo_save
unlet s:cpo_save
-" vim: ts=8
+
+" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:
diff --git a/runtime/syntax/testdir/dumps/html_00.dump b/runtime/syntax/testdir/dumps/html_00.dump
new file mode 100644
index 0000000000..d1b2b91e41
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/html_00.dump
@@ -0,0 +1,20 @@
+><+0#0000e05#ffffff0|!|-@1| +0#0000000&@70
+| +0#0000e05&@1|H|T|M|L| |S|y|n|t|a|x| |T|e|s|t| |F|i|l|e| +0#0000000&@51
+| +0#0000e05&@1|M|a|i|n|t|a|i|n|e|r|:| |D|o|u|g| |K|e|a|r|n|s| |<|d|o|u|g|k|e|a|r|n|s|@|g|m|a|i|l|.|c|o|m|>| +0#0000000&@26
+| +0#0000e05&@1|L|a|s|t| |C|h|a|n|g|e|:| |2|0|2|3| |N|o|v| |2|8| +0#0000000&@48
+|-+0#0000e05&@1|>| +0#0000000&@71
+@75
+|<+0#0000e05&|!|-@1| |H|T|M|L| |E|l|e|m|e|n|t|s| |-@1|>| +0#0000000&@52
+|<+0#00e0e07&|a+0#af5f00255&|>+0#00e0e07&| +0#0000000&@71
+|<+0#00e0e07&|a+0#af5f00255&|b@1|r|>+0#00e0e07&| +0#0000000&@68
+|<+0#00e0e07&|a+0#af5f00255&|d@1|r|e|s@1|>+0#00e0e07&| +0#0000000&@65
+|<+0#00e0e07&|a+0#af5f00255&|r|e|a|>+0#00e0e07&| +0#0000000&@68
+|<+0#00e0e07&|a+0#af5f00255&|r|t|i|c|l|e|>+0#00e0e07&| +0#0000000&@65
+|<+0#00e0e07&|a+0#af5f00255&|s|i|d|e|>+0#00e0e07&| +0#0000000&@67
+|<+0#00e0e07&|a+0#af5f00255&|u|d|i|o|>+0#00e0e07&| +0#0000000&@67
+|<+0#00e0e07&|b+0#af5f00255&|>+0#00e0e07&|.+2#0000000&@2|<+0#00e0e07&|/|b+0#af5f00255&|>+0#00e0e07&| +0#0000000&@64
+|<+0#00e0e07&|b+0#af5f00255&|a|s|e|>+0#00e0e07&| +0#0000000&@68
+|<+0#00e0e07&|b+0#af5f00255&|d|i|>+0#00e0e07&| +0#0000000&@69
+|<+0#00e0e07&|b+0#af5f00255&|d|o|>+0#00e0e07&| +0#0000000&@69
+|<+0#00e0e07&|b+0#af5f00255&|l|o|c|k|q|u|o|t|e|>+0#00e0e07&| +0#0000000&@62
+|"|i|n|p|u|t|/|h|t|m|l|.|h|t|m|l|"| |1|4|6|L|,| |1|4|1|7|B| @27|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/html_01.dump b/runtime/syntax/testdir/dumps/html_01.dump
new file mode 100644
index 0000000000..c855f7b326
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/html_01.dump
@@ -0,0 +1,20 @@
+|<+0#00e0e07#ffffff0|a+0#af5f00255&|u|d|i|o|>+0#00e0e07&| +0#0000000&@67
+|<+0#00e0e07&|b+0#af5f00255&|>+0#00e0e07&|.+2#0000000&@2|<+0#00e0e07&|/|b+0#af5f00255&|>+0#00e0e07&| +0#0000000&@64
+|<+0#00e0e07&|b+0#af5f00255&|a|s|e|>+0#00e0e07&| +0#0000000&@68
+|<+0#00e0e07&|b+0#af5f00255&|d|i|>+0#00e0e07&| +0#0000000&@69
+|<+0#00e0e07&|b+0#af5f00255&|d|o|>+0#00e0e07&| +0#0000000&@69
+><+0#00e0e07&|b+0#af5f00255&|l|o|c|k|q|u|o|t|e|>+0#00e0e07&| +0#0000000&@62
+|<+0#00e0e07&|b+0#af5f00255&|o|d|y|>+0#00e0e07&| +0#0000000&@68
+|<+0#00e0e07&|b+0#af5f00255&|r|>+0#00e0e07&| +0#0000000&@70
+|<+0#00e0e07&|b+0#af5f00255&|u|t@1|o|n|>+0#00e0e07&| +0#0000000&@66
+|<+0#00e0e07&|c+0#af5f00255&|a|n|v|a|s|>+0#00e0e07&| +0#0000000&@66
+|<+0#00e0e07&|c+0#af5f00255&|a|p|t|i|o|n|>+0#00e0e07&| +0#0000000&@65
+|<+0#00e0e07&|c+0#af5f00255&|i|t|e|>+0#00e0e07&| +0#0000000&@68
+|<+0#00e0e07&|c+0#af5f00255&|o|d|e|>+0#00e0e07&| +0#0000000&@68
+|<+0#00e0e07&|c+0#af5f00255&|o|l|>+0#00e0e07&| +0#0000000&@69
+|<+0#00e0e07&|c+0#af5f00255&|o|l|g|r|o|u|p|>+0#00e0e07&| +0#0000000&@64
+|<+0#00e0e07&|d+0#af5f00255&|a|t|a|>+0#00e0e07&| +0#0000000&@68
+|<+0#00e0e07&|d+0#af5f00255&|a|t|a|l|i|s|t|>+0#00e0e07&| +0#0000000&@64
+|<+0#00e0e07&|d+0#af5f00255&@1|>+0#00e0e07&| +0#0000000&@70
+|<+0#00e0e07&|d+0#af5f00255&|e|l|>+0#00e0e07&|.+1024#0000000&@2|<+0#00e0e07&|/|d+0#af5f00255&|e|l|>+0#00e0e07&| +0#0000000&@60
+@57|1|9|,|1| @9|1|0|%|
diff --git a/runtime/syntax/testdir/dumps/html_02.dump b/runtime/syntax/testdir/dumps/html_02.dump
new file mode 100644
index 0000000000..9499f2ea0e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/html_02.dump
@@ -0,0 +1,20 @@
+|<+0#00e0e07#ffffff0|d+0#af5f00255&|e|l|>+0#00e0e07&|.+1024#0000000&@2|<+0#00e0e07&|/|d+0#af5f00255&|e|l|>+0#00e0e07&| +0#0000000&@60
+|<+0#00e0e07&|d+0#af5f00255&|e|t|a|i|l|s|>+0#00e0e07&| +0#0000000&@65
+|<+0#00e0e07&|d+0#af5f00255&|f|n|>+0#00e0e07&| +0#0000000&@69
+|<+0#00e0e07&|d+0#af5f00255&|i|a|l|o|g|>+0#00e0e07&| +0#0000000&@66
+|<+0#00e0e07&|d+0#af5f00255&|i|v|>+0#00e0e07&| +0#0000000&@69
+><+0#00e0e07&|d+0#af5f00255&|l|>+0#00e0e07&| +0#0000000&@70
+|<+0#00e0e07&|d+0#af5f00255&|t|>+0#00e0e07&| +0#0000000&@70
+|<+0#00e0e07&|e+0#af5f00255&|m|>+0#00e0e07&|.+4#0000000&@2|<+0#00e0e07&|/|e+0#af5f00255&|m|>+0#00e0e07&| +0#0000000&@62
+|<+0#00e0e07&|e+0#af5f00255&|m|b|e|d|>+0#00e0e07&| +0#0000000&@67
+|<+0#00e0e07&|f+0#af5f00255&|i|e|l|d|s|e|t|>+0#00e0e07&| +0#0000000&@64
+|<+0#00e0e07&|f+0#af5f00255&|i|g|c|a|p|t|i|o|n|>+0#00e0e07&| +0#0000000&@62
+|<+0#00e0e07&|f+0#af5f00255&|i|g|u|r|e|>+0#00e0e07&| +0#0000000&@66
+|<+0#00e0e07&|f+0#af5f00255&|o@1|t|e|r|>+0#00e0e07&| +0#0000000&@66
+|<+0#00e0e07&|f+0#af5f00255&|o|r|m|>+0#00e0e07&| +0#0000000&@68
+|<+0#00e0e07&|h+0#af5f00255&|1|>+0#00e0e07&|.+0#e000e06&@2|<+0#00e0e07&|/|h+0#af5f00255&|1|>+0#00e0e07&| +0#0000000&@62
+|<+0#00e0e07&|h+0#af5f00255&|2|>+0#00e0e07&|.+0#e000e06&@2|<+0#00e0e07&|/|h+0#af5f00255&|2|>+0#00e0e07&| +0#0000000&@62
+|<+0#00e0e07&|h+0#af5f00255&|3|>+0#00e0e07&|.+0#e000e06&@2|<+0#00e0e07&|/|h+0#af5f00255&|3|>+0#00e0e07&| +0#0000000&@62
+|<+0#00e0e07&|h+0#af5f00255&|4|>+0#00e0e07&|.+0#e000e06&@2|<+0#00e0e07&|/|h+0#af5f00255&|4|>+0#00e0e07&| +0#0000000&@62
+|<+0#00e0e07&|h+0#af5f00255&|5|>+0#00e0e07&|.+0#e000e06&@2|<+0#00e0e07&|/|h+0#af5f00255&|5|>+0#00e0e07&| +0#0000000&@62
+@57|3|7|,|1| @9|2|4|%|
diff --git a/runtime/syntax/testdir/dumps/html_03.dump b/runtime/syntax/testdir/dumps/html_03.dump
new file mode 100644
index 0000000000..088da731e1
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/html_03.dump
@@ -0,0 +1,20 @@
+|<+0#00e0e07#ffffff0|h+0#af5f00255&|5|>+0#00e0e07&|.+0#e000e06&@2|<+0#00e0e07&|/|h+0#af5f00255&|5|>+0#00e0e07&| +0#0000000&@62
+|<+0#00e0e07&|h+0#af5f00255&|6|>+0#00e0e07&|.+0#e000e06&@2|<+0#00e0e07&|/|h+0#af5f00255&|6|>+0#00e0e07&| +0#0000000&@62
+|<+0#00e0e07&|h+0#af5f00255&|e|a|d|>+0#00e0e07&|.+0#e000e06&@2|<+0#00e0e07&|/|h+0#af5f00255&|e|a|d|>+0#00e0e07&| +0#0000000&@58
+|<+0#00e0e07&|h+0#af5f00255&|e|a|d|e|r|>+0#00e0e07&| +0#0000000&@66
+|<+0#00e0e07&|h+0#af5f00255&|g|r|o|u|p|>+0#00e0e07&| +0#0000000&@66
+><+0#00e0e07&|h+0#af5f00255&|r|>+0#00e0e07&| +0#0000000&@70
+|<+0#00e0e07&|h+0#af5f00255&|t|m|l|>+0#00e0e07&| +0#0000000&@68
+|<+0#00e0e07&|i+0#af5f00255&|>+0#00e0e07&|.+4#0000000&@2|<+0#00e0e07&|/|i+0#af5f00255&|>+0#00e0e07&| +0#0000000&@64
+|<+0#00e0e07&|i+0#af5f00255&|f|r|a|m|e|>+0#00e0e07&| +0#0000000&@66
+|<+0#00e0e07&|i+0#af5f00255&|m|g|>+0#00e0e07&| +0#0000000&@69
+|<+0#00e0e07&|i+0#af5f00255&|n|p|u|t|>+0#00e0e07&| +0#0000000&@67
+|<+0#00e0e07&|i+0#af5f00255&|n|s|>+0#00e0e07&| +0#0000000&@69
+|<+0#00e0e07&|k+0#af5f00255&|b|d|>+0#00e0e07&| +0#0000000&@69
+|<+0#00e0e07&|l+0#af5f00255&|a|b|e|l|>+0#00e0e07&| +0#0000000&@67
+|<+0#00e0e07&|l+0#af5f00255&|e|g|e|n|d|>+0#00e0e07&| +0#0000000&@66
+|<+0#00e0e07&|l+0#af5f00255&|i|>+0#00e0e07&| +0#0000000&@70
+|<+0#00e0e07&|l+0#af5f00255&|i|n|k|>+0#00e0e07&| +0#0000000&@68
+|<+0#00e0e07&|m+0#af5f00255&|a|i|n|>+0#00e0e07&| +0#0000000&@68
+|<+0#00e0e07&|m+0#af5f00255&|a|p|>+0#00e0e07&| +0#0000000&@69
+@57|5@1|,|1| @9|3|8|%|
diff --git a/runtime/syntax/testdir/dumps/html_04.dump b/runtime/syntax/testdir/dumps/html_04.dump
new file mode 100644
index 0000000000..ef3acf7ffb
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/html_04.dump
@@ -0,0 +1,20 @@
+|<+0#00e0e07#ffffff0|m+0#af5f00255&|a|p|>+0#00e0e07&| +0#0000000&@69
+|<+0#00e0e07&|m+0#af5f00255&|a|r|k|>+0#00e0e07&| +0#0000000&@68
+|<+0#00e0e07&|m+0#af5f00255&|e|n|u|>+0#00e0e07&| +0#0000000&@68
+|<+0#00e0e07&|m+0#af5f00255&|e|t|a|>+0#00e0e07&| +0#0000000&@68
+|<+0#00e0e07&|m+0#af5f00255&|e|t|e|r|>+0#00e0e07&| +0#0000000&@67
+><+0#00e0e07&|n+0#af5f00255&|a|v|>+0#00e0e07&| +0#0000000&@69
+|<+0#00e0e07&|n+0#af5f00255&|o|s|c|r|i|p|t|>+0#00e0e07&| +0#0000000&@64
+|<+0#00e0e07&|o+0#af5f00255&|b|j|e|c|t|>+0#00e0e07&| +0#0000000&@66
+|<+0#00e0e07&|o+0#af5f00255&|l|>+0#00e0e07&| +0#0000000&@70
+|<+0#00e0e07&|o+0#af5f00255&|p|t|g|r|o|u|p|>+0#00e0e07&| +0#0000000&@64
+|<+0#00e0e07&|o+0#af5f00255&|p|t|i|o|n|>+0#00e0e07&| +0#0000000&@66
+|<+0#00e0e07&|o+0#af5f00255&|u|t|p|u|t|>+0#00e0e07&| +0#0000000&@66
+|<+0#00e0e07&|p+0#af5f00255&|>+0#00e0e07&| +0#0000000&@71
+|<+0#00e0e07&|p+0#af5f00255&|i|c|t|u|r|e|>+0#00e0e07&| +0#0000000&@65
+|<+0#00e0e07&|p+0#af5f00255&|r|e|>+0#00e0e07&|.+0#0000000&@2|<+0#00e0e07&|/|p+0#af5f00255&|r|e|>+0#00e0e07&| +0#0000000&@60
+|<+0#00e0e07&|p+0#af5f00255&|r|o|g|r|e|s@1|>+0#00e0e07&| +0#0000000&@64
+|<+0#00e0e07&|q+0#af5f00255&|>+0#00e0e07&| +0#0000000&@71
+|<+0#00e0e07&|r+0#af5f00255&|p|>+0#00e0e07&| +0#0000000&@70
+|<+0#00e0e07&|r+0#af5f00255&|t|>+0#00e0e07&| +0#0000000&@70
+@57|7|3|,|1| @9|5|2|%|
diff --git a/runtime/syntax/testdir/dumps/html_05.dump b/runtime/syntax/testdir/dumps/html_05.dump
new file mode 100644
index 0000000000..411a4f54df
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/html_05.dump
@@ -0,0 +1,20 @@
+|<+0#00e0e07#ffffff0|r+0#af5f00255&|t|>+0#00e0e07&| +0#0000000&@70
+|<+0#00e0e07&|r+0#af5f00255&|u|b|y|>+0#00e0e07&| +0#0000000&@68
+|<+0#00e0e07&|s+0#af5f00255&|>+0#00e0e07&|.+1024#0000000&@2|<+0#00e0e07&|/|s+0#af5f00255&|>+0#00e0e07&| +0#0000000&@64
+|<+0#00e0e07&|s+0#af5f00255&|a|m|p|>+0#00e0e07&| +0#0000000&@68
+|<+0#00e0e07&|s+0#af5f00255&|c|r|i|p|t|>+0#00e0e07&|.+0#e000e06&@2|<+0#00e0e07&|/|s+0#af5f00255&|c|r|i|p|t|>+0#00e0e07&| +0#0000000&@54
+><+0#00e0e07&|s+0#af5f00255&|e|a|r|c|h|>+0#00e0e07&| +0#0000000&@66
+|<+0#00e0e07&|s+0#af5f00255&|e|c|t|i|o|n|>+0#00e0e07&| +0#0000000&@65
+|<+0#00e0e07&|s+0#af5f00255&|e|l|e|c|t|>+0#00e0e07&| +0#0000000&@66
+|<+0#00e0e07&|s+0#af5f00255&|l|o|t|>+0#00e0e07&| +0#0000000&@68
+|<+0#00e0e07&|s+0#af5f00255&|m|a|l@1|>+0#00e0e07&| +0#0000000&@67
+|<+0#00e0e07&|s+0#af5f00255&|o|u|r|c|e|>+0#00e0e07&| +0#0000000&@66
+|<+0#00e0e07&|s+0#af5f00255&|p|a|n|>+0#00e0e07&| +0#0000000&@68
+|<+0#00e0e07&|s+0#af5f00255&|t|r|o|n|g|>+0#00e0e07&|.+2#0000000&@2|<+0#00e0e07&|/|s+0#af5f00255&|t|r|o|n|g|>+0#00e0e07&| +0#0000000&@54
+|<+0#00e0e07&|s+0#af5f00255&|t|y|l|e|>+0#00e0e07&|.+0#0000000&@2|<+0#00e0e07&|/|s+0#af5f00255&|t|y|l|e|>+0#00e0e07&| +0#0000000&@56
+|<+0#00e0e07&|s+0#af5f00255&|u|b|>+0#00e0e07&| +0#0000000&@69
+|<+0#00e0e07&|s+0#af5f00255&|u|m@1|a|r|y|>+0#00e0e07&| +0#0000000&@65
+|<+0#00e0e07&|s+0#af5f00255&|u|p|>+0#00e0e07&| +0#0000000&@69
+|<+0#00e0e07&|t+0#af5f00255&|a|b|l|e|>+0#00e0e07&| +0#0000000&@67
+|<+0#00e0e07&|t+0#af5f00255&|b|o|d|y|>+0#00e0e07&| +0#0000000&@67
+@57|9|1|,|1| @9|6@1|%|
diff --git a/runtime/syntax/testdir/dumps/html_06.dump b/runtime/syntax/testdir/dumps/html_06.dump
new file mode 100644
index 0000000000..7482dce051
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/html_06.dump
@@ -0,0 +1,20 @@
+|<+0#00e0e07#ffffff0|t+0#af5f00255&|b|o|d|y|>+0#00e0e07&| +0#0000000&@67
+|<+0#00e0e07&|t+0#af5f00255&|d|>+0#00e0e07&| +0#0000000&@70
+|<+0#00e0e07&|t+0#af5f00255&|e|m|p|l|a|t|e|>+0#00e0e07&| +0#0000000&@64
+|<+0#00e0e07&|t+0#af5f00255&|e|x|t|a|r|e|a|>+0#00e0e07&| +0#0000000&@64
+|<+0#00e0e07&|t+0#af5f00255&|f|o@1|t|>+0#00e0e07&| +0#0000000&@67
+><+0#00e0e07&|t+0#af5f00255&|h|>+0#00e0e07&| +0#0000000&@70
+|<+0#00e0e07&|t+0#af5f00255&|h|e|a|d|>+0#00e0e07&| +0#0000000&@67
+|<+0#00e0e07&|t+0#af5f00255&|i|m|e|>+0#00e0e07&| +0#0000000&@68
+|<+0#00e0e07&|t+0#af5f00255&|i|t|l|e|>+0#00e0e07&|.+0#e000e06&@2|<+0#00e0e07&|/|t+0#af5f00255&|i|t|l|e|>+0#00e0e07&| +0#0000000&@56
+|<+0#00e0e07&|t+0#af5f00255&|r|>+0#00e0e07&| +0#0000000&@70
+|<+0#00e0e07&|t+0#af5f00255&|r|a|c|k|>+0#00e0e07&| +0#0000000&@67
+|<+0#00e0e07&|u+0#af5f00255&|>+0#00e0e07&|.+8#0000000&@2|<+0#00e0e07&|/|u+0#af5f00255&|>+0#00e0e07&| +0#0000000&@64
+|<+0#00e0e07&|u+0#af5f00255&|l|>+0#00e0e07&| +0#0000000&@70
+|<+0#00e0e07&|v+0#af5f00255&|a|r|>+0#00e0e07&| +0#0000000&@69
+|<+0#00e0e07&|v+0#af5f00255&|i|d|e|o|>+0#00e0e07&| +0#0000000&@67
+|<+0#00e0e07&|w+0#af5f00255&|b|r|>+0#00e0e07&| +0#0000000&@69
+|<+0#00e0e07&|x+0#af5f00255&|m|p|>+0#00e0e07&| +0#0000000&@69
+@75
+|<+0#0000e05&|!|-@1| |D|e|p|r|e|c|a|t|e|d| |E|l|e|m|e|n|t|s| |-@1|>| +0#0000000&@46
+@57|1|0|9|,|1| @8|8|1|%|
diff --git a/runtime/syntax/testdir/dumps/html_07.dump b/runtime/syntax/testdir/dumps/html_07.dump
new file mode 100644
index 0000000000..9c5deaaf80
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/html_07.dump
@@ -0,0 +1,20 @@
+|<+0#0000e05#ffffff0|!|-@1| |D|e|p|r|e|c|a|t|e|d| |E|l|e|m|e|n|t|s| |-@1|>| +0#0000000&@46
+|<+0#00e0e07&|a+0#af5f00255&|c|r|o|n|y|m|>+0#00e0e07&| +0#0000000&@65
+|<+0#00e0e07&|b+0#af5f00255&|i|g|>+0#00e0e07&| +0#0000000&@69
+|<+0#00e0e07&|c+0#af5f00255&|e|n|t|e|r|>+0#00e0e07&| +0#0000000&@66
+|<+0#00e0e07&|d+0#af5f00255&|i|r|>+0#00e0e07&| +0#0000000&@69
+><+0#00e0e07&|f+0#af5f00255&|o|n|t|>+0#00e0e07&| +0#0000000&@68
+|<+0#00e0e07&|f+0#af5f00255&|r|a|m|e|>+0#00e0e07&| +0#0000000&@67
+|<+0#00e0e07&|f+0#af5f00255&|r|a|m|e|s|e|t|>+0#00e0e07&| +0#0000000&@64
+|<+0#00e0e07&|m+0#af5f00255&|a|r|q|u|e@1|>+0#00e0e07&| +0#0000000&@65
+|<+0#00e0e07&|m+0#af5f00255&|e|n|u|i|t|e|m|>+0#00e0e07&| +0#0000000&@64
+|<+0#00e0e07&|n+0#af5f00255&|o|b|r|>+0#00e0e07&| +0#0000000&@68
+|<+0#00e0e07&|n+0#af5f00255&|o|f|r|a|m|e|s|>+0#00e0e07&| +0#0000000&@64
+|<+0#00e0e07&|p+0#af5f00255&|a|r|a|m|>+0#00e0e07&| +0#0000000&@67
+|<+0#00e0e07&|r+0#af5f00255&|b|>+0#00e0e07&| +0#0000000&@70
+|<+0#00e0e07&|r+0#af5f00255&|t|c|>+0#00e0e07&| +0#0000000&@69
+|<+0#00e0e07&|s+0#af5f00255&|t|r|i|k|e|>+0#00e0e07&|.+1024#0000000&@2|<+0#00e0e07&|/|s+0#af5f00255&|t|r|i|k|e|>+0#00e0e07&| +0#0000000&@54
+|<+0#00e0e07&|t+0#af5f00255&@1|>+0#00e0e07&| +0#0000000&@70
+@75
+|<+0#0000e05&|!|-@1| |N|o|t|e|:| |t|h|e|s|e| |d|e|p|r|e|c|a|t|e|d| |e|l|e|m|e|n|t|s| |h|a|v|e| |n|e|v|e|r| |b|e@1|n| |m|a|t|c|h|e|d| |-@1|>| +0#0000000&@10
+@57|1|2|7|,|1| @8|9|5|%|
diff --git a/runtime/syntax/testdir/dumps/html_99.dump b/runtime/syntax/testdir/dumps/html_99.dump
new file mode 100644
index 0000000000..080a0c6aa4
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/html_99.dump
@@ -0,0 +1,20 @@
+|<+0#00e0e07#ffffff0|f+0#af5f00255&|r|a|m|e|>+0#00e0e07&| +0#0000000&@67
+|<+0#00e0e07&|f+0#af5f00255&|r|a|m|e|s|e|t|>+0#00e0e07&| +0#0000000&@64
+|<+0#00e0e07&|m+0#af5f00255&|a|r|q|u|e@1|>+0#00e0e07&| +0#0000000&@65
+|<+0#00e0e07&|m+0#af5f00255&|e|n|u|i|t|e|m|>+0#00e0e07&| +0#0000000&@64
+|<+0#00e0e07&|n+0#af5f00255&|o|b|r|>+0#00e0e07&| +0#0000000&@68
+|<+0#00e0e07&|n+0#af5f00255&|o|f|r|a|m|e|s|>+0#00e0e07&| +0#0000000&@64
+|<+0#00e0e07&|p+0#af5f00255&|a|r|a|m|>+0#00e0e07&| +0#0000000&@67
+|<+0#00e0e07&|r+0#af5f00255&|b|>+0#00e0e07&| +0#0000000&@70
+|<+0#00e0e07&|r+0#af5f00255&|t|c|>+0#00e0e07&| +0#0000000&@69
+|<+0#00e0e07&|s+0#af5f00255&|t|r|i|k|e|>+0#00e0e07&|.+1024#0000000&@2|<+0#00e0e07&|/|s+0#af5f00255&|t|r|i|k|e|>+0#00e0e07&| +0#0000000&@54
+|<+0#00e0e07&|t+0#af5f00255&@1|>+0#00e0e07&| +0#0000000&@70
+@75
+|<+0#0000e05&|!|-@1| |N|o|t|e|:| |t|h|e|s|e| |d|e|p|r|e|c|a|t|e|d| |e|l|e|m|e|n|t|s| |h|a|v|e| |n|e|v|e|r| |b|e@1|n| |m|a|t|c|h|e|d| |-@1|>| +0#0000000&@10
+|<+0#00e0e07&|i+0#0000000&|m|a|g|e|>+0#00e0e07&| +0#0000000&@67
+|<+0#00e0e07&|n+0#0000000&|o|e|m|b|e|d|>+0#00e0e07&| +0#0000000&@65
+|<+0#00e0e07&|p+0#0000000&|l|a|i|n|t|e|x|t|>+0#00e0e07&| +0#0000000&@63
+@75
+|<+0#0000e05&|!|-@1| |E|x|p|e|r|i|m|e|n|t|a|l| |-@1|>| +0#0000000&@53
+><+0#00e0e07&|p+0#0000000&|o|r|t|a|l|>+0#00e0e07&| +0#0000000&@66
+@57|1|4|6|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/input/html.html b/runtime/syntax/testdir/input/html.html
new file mode 100644
index 0000000000..bfeca26db8
--- /dev/null
+++ b/runtime/syntax/testdir/input/html.html
@@ -0,0 +1,146 @@
+<!--
+ HTML Syntax Test File
+ Maintainer: Doug Kearns <dougkearns@gmail.com>
+ Last Change: 2023 Nov 28
+-->
+
+<!-- HTML Elements -->
+<a>
+<abbr>
+<address>
+<area>
+<article>
+<aside>
+<audio>
+<b>...</b>
+<base>
+<bdi>
+<bdo>
+<blockquote>
+<body>
+<br>
+<button>
+<canvas>
+<caption>
+<cite>
+<code>
+<col>
+<colgroup>
+<data>
+<datalist>
+<dd>
+<del>...</del>
+<details>
+<dfn>
+<dialog>
+<div>
+<dl>
+<dt>
+<em>...</em>
+<embed>
+<fieldset>
+<figcaption>
+<figure>
+<footer>
+<form>
+<h1>...</h1>
+<h2>...</h2>
+<h3>...</h3>
+<h4>...</h4>
+<h5>...</h5>
+<h6>...</h6>
+<head>...</head>
+<header>
+<hgroup>
+<hr>
+<html>
+<i>...</i>
+<iframe>
+<img>
+<input>
+<ins>
+<kbd>
+<label>
+<legend>
+<li>
+<link>
+<main>
+<map>
+<mark>
+<menu>
+<meta>
+<meter>
+<nav>
+<noscript>
+<object>
+<ol>
+<optgroup>
+<option>
+<output>
+<p>
+<picture>
+<pre>...</pre>
+<progress>
+<q>
+<rp>
+<rt>
+<ruby>
+<s>...</s>
+<samp>
+<script>...</script>
+<search>
+<section>
+<select>
+<slot>
+<small>
+<source>
+<span>
+<strong>...</strong>
+<style>...</style>
+<sub>
+<summary>
+<sup>
+<table>
+<tbody>
+<td>
+<template>
+<textarea>
+<tfoot>
+<th>
+<thead>
+<time>
+<title>...</title>
+<tr>
+<track>
+<u>...</u>
+<ul>
+<var>
+<video>
+<wbr>
+<xmp>
+
+<!-- Deprecated Elements -->
+<acronym>
+<big>
+<center>
+<dir>
+<font>
+<frame>
+<frameset>
+<marquee>
+<menuitem>
+<nobr>
+<noframes>
+<param>
+<rb>
+<rtc>
+<strike>...</strike>
+<tt>
+
+<!-- Note: these deprecated elements have never been matched -->
+<image>
+<noembed>
+<plaintext>
+
+<!-- Experimental -->
+<portal>