aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/autoload/tohtml.vim112
-rw-r--r--runtime/doc/eval.txt30
-rw-r--r--runtime/doc/motion.txt1
-rw-r--r--runtime/doc/syntax.txt62
-rw-r--r--runtime/ftplugin/j.vim8
-rw-r--r--runtime/indent/j.vim4
-rw-r--r--runtime/plugin/tohtml.vim47
-rw-r--r--runtime/syntax/j.vim10
8 files changed, 163 insertions, 111 deletions
diff --git a/runtime/autoload/tohtml.vim b/runtime/autoload/tohtml.vim
index 9c3d4d2d7e..76092f0f93 100644
--- a/runtime/autoload/tohtml.vim
+++ b/runtime/autoload/tohtml.vim
@@ -1,6 +1,6 @@
" Vim autoload file for the tohtml plugin.
" Maintainer: Ben Fritz <fritzophrenic@gmail.com>
-" Last Change: 2018 Nov 11
+" Last Change: 2019 Aug 16
"
" Additional contributors:
"
@@ -364,6 +364,7 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{
let body_line = ''
let html = []
+ let s:html5 = 0
if s:settings.use_xhtml
call add(html, xml_line)
endif
@@ -371,8 +372,9 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{
call add(html, "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">")
call add(html, '<html xmlns="http://www.w3.org/1999/xhtml">')
elseif s:settings.use_css && !s:settings.no_pre
- call add(html, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">")
+ call add(html, "<!DOCTYPE html>")
call add(html, '<html>')
+ let s:html5 = 1
else
call add(html, '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"')
call add(html, ' "http://www.w3.org/TR/html4/loose.dtd">')
@@ -383,7 +385,11 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{
" include encoding as close to the top as possible, but only if not already
" contained in XML information
if s:settings.encoding != "" && !s:settings.use_xhtml
- call add(html, "<meta http-equiv=\"content-type\" content=\"text/html; charset=" . s:settings.encoding . '"' . tag_close)
+ if s:html5
+ call add(html, '<meta charset="' . s:settings.encoding . '"' . tag_close)
+ else
+ call add(html, "<meta http-equiv=\"content-type\" content=\"text/html; charset=" . s:settings.encoding . '"' . tag_close)
+ endif
endif
call add(html, '<title>diff</title>')
@@ -392,6 +398,7 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{
call add(html, '<meta name="settings" content="'.
\ join(filter(keys(s:settings),'s:settings[v:val]'),',').
\ ',prevent_copy='.s:settings.prevent_copy.
+ \ ',use_input_for_pc='.s:settings.use_input_for_pc.
\ '"'.tag_close)
call add(html, '<meta name="colorscheme" content="'.
\ (exists('g:colors_name')
@@ -400,16 +407,8 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{
call add(html, '</head>')
let body_line_num = len(html)
- if !empty(s:settings.prevent_copy)
- call add(html, "<body onload='FixCharWidth();".(s:settings.line_ids ? " JumpToLine();" : "")."'>")
- call add(html, "<!-- hidden divs used by javascript to get the width of a char -->")
- call add(html, "<div id='oneCharWidth'>0</div>")
- call add(html, "<div id='oneInputWidth'><input size='1' value='0'".tag_close."</div>")
- call add(html, "<div id='oneEmWidth' style='width: 1em;'></div>")
- else
- call add(html, '<body'.(s:settings.line_ids ? ' onload="JumpToLine();"' : '').'>')
- endif
- call add(html, "<table border='1' width='100%' id='vimCodeElement".s:settings.id_suffix."'>")
+ call add(html, '<body'.(s:settings.line_ids ? ' onload="JumpToLine();"' : '').'>')
+ call add(html, "<table ".(s:settings.use_css? "" : "border='1' width='100%' ")."id='vimCodeElement".s:settings.id_suffix."'>")
call add(html, '<tr>')
for buf in a:win_list
@@ -443,7 +442,7 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{
" Grab the style information. Some of this will be duplicated so only insert
" it if it's not already there. {{{
1
- let style_start = search('^<style type="text/css">')
+ let style_start = search('^<style\( type="text/css"\)\?>')
1
let style_end = search('^</style>')
if style_start > 0 && style_end > 0
@@ -481,7 +480,7 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{
" TODO: restore using grabbed lines if undolevel is 1?
normal! 2u
if s:settings.use_css
- call add(html, '<td valign="top"><div>')
+ call add(html, '<td><div>')
elseif s:settings.use_xhtml
call add(html, '<td nowrap="nowrap" valign="top"><div>')
else
@@ -515,7 +514,13 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{
let name = substitute(name, '\d*\.x\?html$', '', '') . i . '.' . fnamemodify(copy(name), ":t:e")
let i += 1
endwhile
+
+ let s:ei_sav = &eventignore
+ set eventignore+=FileType
exe "topleft new " . name
+ let &eventignore=s:ei_sav
+ unlet s:ei_sav
+
setlocal modifiable
" just in case some user autocmd creates content in the new buffer, make sure
@@ -544,7 +549,7 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{
" add required javascript in reverse order so we can just call append again
" and again without adjusting {{{
- let s:uses_script = s:settings.dynamic_folds || s:settings.line_ids || !empty(s:settings.prevent_copy)
+ let s:uses_script = s:settings.dynamic_folds || s:settings.line_ids
" insert script closing tag if needed
if s:uses_script
@@ -555,31 +560,6 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{
\ ])
endif
- " insert script which corrects the size of small input elements in
- " prevent_copy mode. See 2html.vim for details on why this is needed and how
- " it works.
- if !empty(s:settings.prevent_copy)
- call append(style_start, [
- \ '',
- \ '/* simulate a "ch" unit by asking the browser how big a zero character is */',
- \ 'function FixCharWidth() {',
- \ ' /* get the hidden element which gives the width of a single character */',
- \ ' var goodWidth = document.getElementById("oneCharWidth").clientWidth;',
- \ ' /* get all input elements, we''ll filter on class later */',
- \ ' var inputTags = document.getElementsByTagName("input");',
- \ ' var ratio = 5;',
- \ ' var inputWidth = document.getElementById("oneInputWidth").clientWidth;',
- \ ' var emWidth = document.getElementById("oneEmWidth").clientWidth;',
- \ ' if (inputWidth > goodWidth) {',
- \ ' while (ratio < 100*goodWidth/emWidth && ratio < 100) {',
- \ ' ratio += 5;',
- \ ' }',
- \ ' document.getElementById("vimCodeElement'.s:settings.id_suffix.'").className = "em"+ratio;',
- \ ' }',
- \ '}'
- \ ])
- endif
-
" insert javascript to get IDs from line numbers, and to open a fold before
" jumping to any lines contained therein
if s:settings.line_ids
@@ -659,10 +639,9 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{
endif
if s:uses_script
- " insert script tag; javascript is always needed for the line number
- " normalization for URL hashes
+ " insert script tag if needed
call append(style_start, [
- \ "<script type='text/javascript'>",
+ \ "<script" . (s:html5 ? "" : " type='text/javascript'") . ">",
\ s:settings.use_xhtml ? '//<![CDATA[' : "<!--"])
endif
@@ -673,11 +652,13 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{
" is pretty useless for really long lines. {{{
if s:settings.use_css
call append(style_start,
- \ ['<style type="text/css">']+
+ \ ['<style' . (s:html5 ? '' : 'type="text/css"') . '>']+
\ style+
\ [ s:settings.use_xhtml ? '' : '<!--',
\ 'table { table-layout: fixed; }',
\ 'html, body, table, tbody { width: 100%; margin: 0; padding: 0; }',
+ \ 'table, td, th { border: 1px solid; }',
+ \ 'td { vertical-align: top; }',
\ 'th, td { width: '.printf("%.1f",100.0/len(a:win_list)).'%; }',
\ 'td div { overflow: auto; }',
\ s:settings.use_xhtml ? '' : '-->',
@@ -720,21 +701,22 @@ func! tohtml#GetUserSettings() "{{{
endif
" get current option settings with appropriate defaults {{{
- call tohtml#GetOption(user_settings, 'no_progress', !has("statusline") )
- call tohtml#GetOption(user_settings, 'diff_one_file', 0 )
- call tohtml#GetOption(user_settings, 'number_lines', &number )
- call tohtml#GetOption(user_settings, 'pre_wrap', &wrap )
- call tohtml#GetOption(user_settings, 'use_css', 1 )
- call tohtml#GetOption(user_settings, 'ignore_conceal', 0 )
- call tohtml#GetOption(user_settings, 'ignore_folding', 0 )
- call tohtml#GetOption(user_settings, 'dynamic_folds', 0 )
- call tohtml#GetOption(user_settings, 'no_foldcolumn', user_settings.ignore_folding)
- call tohtml#GetOption(user_settings, 'hover_unfold', 0 )
- call tohtml#GetOption(user_settings, 'no_pre', 0 )
- call tohtml#GetOption(user_settings, 'no_invalid', 0 )
- call tohtml#GetOption(user_settings, 'whole_filler', 0 )
- call tohtml#GetOption(user_settings, 'use_xhtml', 0 )
- call tohtml#GetOption(user_settings, 'line_ids', user_settings.number_lines )
+ call tohtml#GetOption(user_settings, 'no_progress', !has("statusline") )
+ call tohtml#GetOption(user_settings, 'diff_one_file', 0 )
+ call tohtml#GetOption(user_settings, 'number_lines', &number )
+ call tohtml#GetOption(user_settings, 'pre_wrap', &wrap )
+ call tohtml#GetOption(user_settings, 'use_css', 1 )
+ call tohtml#GetOption(user_settings, 'ignore_conceal', 0 )
+ call tohtml#GetOption(user_settings, 'ignore_folding', 0 )
+ call tohtml#GetOption(user_settings, 'dynamic_folds', 0 )
+ call tohtml#GetOption(user_settings, 'no_foldcolumn', user_settings.ignore_folding)
+ call tohtml#GetOption(user_settings, 'hover_unfold', 0 )
+ call tohtml#GetOption(user_settings, 'no_pre', 0 )
+ call tohtml#GetOption(user_settings, 'no_invalid', 0 )
+ call tohtml#GetOption(user_settings, 'whole_filler', 0 )
+ call tohtml#GetOption(user_settings, 'use_xhtml', 0 )
+ call tohtml#GetOption(user_settings, 'line_ids', user_settings.number_lines )
+ call tohtml#GetOption(user_settings, 'use_input_for_pc', 'fallback')
" }}}
" override those settings that need it {{{
@@ -868,6 +850,16 @@ func! tohtml#GetUserSettings() "{{{
let user_settings.no_invalid = 0
endif
+ " enforce valid values for use_input_for_pc
+ if user_settings.use_input_for_pc !~# 'fallback\|none\|all'
+ let user_settings.use_input_for_pc = 'fallback'
+ echohl WarningMsg
+ echomsg '2html: "' . g:html_use_input_for_pc . '" is not valid for g:html_use_input_for_pc'
+ echomsg '2html: defaulting to "' . user_settings.use_input_for_pc . '"'
+ echohl None
+ sleep 3
+ endif
+
if exists('g:html_id_expr')
let user_settings.id_suffix = eval(g:html_id_expr)
if user_settings.id_suffix !~ '^[-_:.A-Za-z0-9]*$'
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 383acbe64f..44e6069b52 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -10105,21 +10105,6 @@ text...
Unlock the internal variable {name}. Does the
opposite of |:lockvar|.
- *:eval*
-:eval {expr} Evaluate {expr} and discard the result. Example: >
- :eval append(Filter(Getlist()), '$')
-
-< The expression is supposed to have a side effect,
- since the resulting value is not used. In the example
- the `append()` call appends the List with text to the
- buffer. This is similar to `:call` but works with any
- expression.
-
- The command can be shortened to `:ev` or `:eva`, but
- these are hard to recognize and therefore not to be
- used.
-
-
:if {expr1} *:if* *:end* *:endif* *:en* *E171* *E579* *E580*
:en[dif] Execute the commands until the next matching ":else"
or ":endif" if {expr1} evaluates to non-zero.
@@ -10413,6 +10398,21 @@ text...
And to get a beep: >
:exe "normal \<Esc>"
<
+ *:eval*
+:eval {expr} Evaluate {expr} and discard the result. Example: >
+ :eval append(Filter(Getlist()), '$')
+
+< The expression is supposed to have a side effect,
+ since the resulting value is not used. In the example
+ the `append()` call appends the List with text to the
+ buffer. This is similar to `:call` but works with any
+ expression.
+
+ The command can be shortened to `:ev` or `:eva`, but
+ these are hard to recognize and therefore not to be
+ used.
+
+
*:exe* *:execute*
:exe[cute] {expr1} .. Executes the string that results from the evaluation
of {expr1} as an Ex command.
diff --git a/runtime/doc/motion.txt b/runtime/doc/motion.txt
index a6c072e489..c5393eded3 100644
--- a/runtime/doc/motion.txt
+++ b/runtime/doc/motion.txt
@@ -944,6 +944,7 @@ These commands are not marks themselves, but jump to a mark:
- numbered marks '0 - '9
- last insert position '^
- last change position '.
+ - last affected text area '[ and ']
- the Visual area '< and '>
- line numbers in placed signs
- line numbers in quickfix positions
diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
index 0fe4893924..87a02af263 100644
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -453,6 +453,16 @@ conversion. See |-E| and |-s-ex| for details. It is probably best to create a
script to replace all the -c commands and use it with the -u flag instead of
specifying each command separately.
+ *hl-TOhtmlProgress* *TOhtml-progress-color*
+When displayed, the progress bar will show colored boxes along the statusline
+as the HTML conversion proceeds. By default, the background color as the
+current "DiffDelete" highlight group is used. If "DiffDelete" and "StatusLine"
+have the same background color, TOhtml will automatically adjust the color to
+differ. If you do not like the automatically selected colors, you can define
+your own highlight colors for the progress bar. Example: >
+
+ hi TOhtmlProgress guifg=#c0ffee ctermbg=7
+<
*g:html_number_lines*
Default: current 'number' setting.
When 0, buffer text is displayed in the generated HTML without line numbering.
@@ -484,8 +494,8 @@ For example: >
<
*g:html_use_css*
Default: 1.
-When 1, generate valid HTML 4.01 markup with CSS1 styling, supported in all
-modern browsers and most old browsers.
+When 1, generate valid HTML 5 markup with CSS styling, supported in all modern
+browsers and many old browsers.
When 0, generate <font> tags and similar outdated markup. This is not
recommended but it may work better in really old browsers, email clients,
forum posts, and similar situations where basic CSS support is unavailable.
@@ -557,23 +567,43 @@ affected in this way as follows:
Example, to make the fold column and line numbers uncopyable: >
:let g:html_prevent_copy = "fn"
<
-This feature is currently implemented by inserting read-only <input> elements
-into the markup to contain the uncopyable areas. This does not work well in
-all cases. When pasting to some applications which understand HTML, the
-<input> elements also get pasted. But plain-text paste destinations should
-always work.
+The method used to prevent copying in the generated page depends on the value
+of |g:html_use_input_for_pc|.
+
+ *g:html_use_input_for_pc*
+Default: "fallback"
+If |g:html_prevent_copy| is non-empty, then:
+
+When "all", read-only <input> elements are used in place of normal text for
+uncopyable regions. In some browsers, especially older browsers, after
+selecting an entire page and copying the selection, the <input> tags are not
+pasted with the page text. If |g:html_no_invalid| is 0, the <input> tags have
+invalid type; this works in more browsers, but the page will not validate.
+Note: this method does NOT work in recent versions of Chrome and equivalent
+browsers; the <input> tags get pasted with the text.
+
+When "fallback" (default value), the same <input> elements are generated for
+older browsers, but newer browsers (detected by CSS feature query) hide the
+<input> elements and instead use generated content in an ::before pseudoelement
+to display the uncopyable text. This method should work with the largest
+number of browsers, both old and new.
+
+When "none", the <input> elements are not generated at all. Only the
+generated-content method is used. This means that old browsers, notably
+Internet Explorer, will either copy the text intended not to be copyable, or
+the non-copyable text may not appear at all. However, this is the most
+standards-based method, and there will be much less markup.
*g:html_no_invalid*
Default: 0.
-When 0, if |g:html_prevent_copy| is non-empty, an invalid attribute is
-intentionally inserted into the <input> element for the uncopyable areas. This
-increases the number of applications you can paste to without also pasting the
-<input> elements. Specifically, Microsoft Word will not paste the <input>
-elements if they contain this invalid attribute.
-When 1, no invalid markup is ever intentionally inserted, and the generated
-page should validate. However, be careful pasting into Microsoft Word when
-|g:html_prevent_copy| is non-empty; it can be hard to get rid of the <input>
-elements which get pasted.
+When 0, if |g:html_prevent_copy| is non-empty and |g:html_use_input_for_pc| is
+not "none", an invalid attribute is intentionally inserted into the <input>
+element for the uncopyable areas. This prevents pasting the <input> elements
+in some applications. Specifically, some versions of Microsoft Word will not
+paste the <input> elements if they contain this invalid attribute. When 1, no
+invalid markup is inserted, and the generated page should validate. However,
+<input> elements may be pasted into some applications and can be difficult to
+remove afterward.
*g:html_hover_unfold*
Default: 0.
diff --git a/runtime/ftplugin/j.vim b/runtime/ftplugin/j.vim
index 9dc1692534..3cd0cb8e2b 100644
--- a/runtime/ftplugin/j.vim
+++ b/runtime/ftplugin/j.vim
@@ -1,8 +1,8 @@
" Vim filetype plugin
" Language: J
-" Maintainer: David Bürgin <676c7473@gmail.com>
-" URL: https://github.com/glts/vim-j
-" Last Change: 2015-09-27
+" Maintainer: David Bürgin <dbuergin@gluet.ch>
+" URL: https://gitlab.com/glts/vim-j
+" Last Change: 2015-10-27
if exists('b:did_ftplugin')
finish
@@ -25,7 +25,7 @@ setlocal include=\\v^\\s*(load\|require)\\s*'\\zs\\f+\\ze'
setlocal includeexpr=substitute(substitute(tr(v:fname,'\\','/'),'\\v^[^~][^/.]*(/[^/.]+)$','&\\1',''),'\\v^\\~[^/]+/','','')
setlocal suffixesadd=.ijs
-let b:undo_ftplugin = 'setlocal matchpairs< formatoptions< commentstring< comments< iskeyword< path< include< includeexpr< suffixesadd<'
+let b:undo_ftplugin = 'setlocal suffixesadd< includeexpr< include< path< matchpairs< formatoptions< commentstring< comments< iskeyword<'
" Section movement with ]] ][ [[ []. The start/end patterns below are amended
" inside the function in order to avoid matching on the current cursor line.
diff --git a/runtime/indent/j.vim b/runtime/indent/j.vim
index ea3d50936b..c308512ecc 100644
--- a/runtime/indent/j.vim
+++ b/runtime/indent/j.vim
@@ -1,7 +1,7 @@
" Vim indent file
" Language: J
-" Maintainer: David Bürgin <676c7473@gmail.com>
-" URL: https://github.com/glts/vim-j
+" Maintainer: David Bürgin <dbuergin@gluet.ch>
+" URL: https://gitlab.com/glts/vim-j
" Last Change: 2015-01-11
if exists('b:did_indent')
diff --git a/runtime/plugin/tohtml.vim b/runtime/plugin/tohtml.vim
index 0cd931eada..2c85b57529 100644
--- a/runtime/plugin/tohtml.vim
+++ b/runtime/plugin/tohtml.vim
@@ -1,6 +1,6 @@
" Vim plugin for converting a syntax highlighted file to HTML.
" Maintainer: Ben Fritz <fritzophrenic@gmail.com>
-" Last Change: 2018 Nov 11
+" Last Change: 2019 Nov 13
"
" The core of the code is in $VIMRUNTIME/autoload/tohtml.vim and
" $VIMRUNTIME/syntax/2html.vim
@@ -8,17 +8,46 @@
if exists('g:loaded_2html_plugin')
finish
endif
-let g:loaded_2html_plugin = 'vim8.1_v1'
+let g:loaded_2html_plugin = 'vim8.1_v2'
"
" Changelog: {{{
-" 8.1_v1 (this version): Fix Bitbucket issue #6: Don't generate empty script
-" tag.
-" Fix Bitbucket issue #5: javascript should
-" declare variables with "var".
-" Fix Bitbucket issue #13: errors thrown sourcing
-" 2html.vim directly when plugins not loaded.
-" Fix Bitbucket issue #16: support 'vartabstop'.
+" 8.1_v2 (this version): - Fix Bitbucket issue #19: fix calculation of tab
+" stop position to use in expanding a tab, when that
+" tab occurs after a syntax match which in turn
+" comes after previously expanded tabs.
+" - Set eventignore while splitting a window for the
+" destination file to ignore FileType events;
+" speeds up processing when the destination file
+" already exists and HTML highlight takes too long.
+" - Fix Bitbucket issue #20: progress bar could not be
+" seen when DiffDelete background color matched
+" StatusLine background color. Added TOhtmlProgress
+" highlight group for manual user override, but
+" calculate it to be visible compared to StatusLine
+" by default.
+" - Fix Bitbucket issue #1: Remove workaround for old
+" browsers which don't support 'ch' CSS unit, since
+" all modern browsers, including IE>=9, support it.
+" - Fix Bitbucket issue #10: support termguicolors
+" - Fix Bitbucket issue #21: default to using
+" generated content instead of <input> tags for
+" uncopyable text, so that text is correctly
+" prevented from being copied in chrome. Use
+" g:html_use_input_for_pc option to control the
+" method used.
+" - Switch to HTML5 to allow using vnu as a validator
+" in unit test.
+" - Fix fallback sizing of <input> tags for browsers
+" without "ch" support.
+" - Fix cursor on unselectable diff filler text.
+" 8.1_v1 (Vim 8.1.0528): - Fix Bitbucket issue #6: Don't generate empty
+" script tag.
+" - Fix Bitbucket issue #5: javascript should
+" declare variables with "var".
+" - Fix Bitbucket issue #13: errors thrown sourcing
+" 2html.vim directly when plugins not loaded.
+" - Fix Bitbucket issue #16: support 'vartabstop'.
"
" 7.4 updates: {{{
" 7.4_v2 (Vim 7.4.0899): Fix error raised when converting a diff containing
diff --git a/runtime/syntax/j.vim b/runtime/syntax/j.vim
index 4912942e8b..a694cb2f1a 100644
--- a/runtime/syntax/j.vim
+++ b/runtime/syntax/j.vim
@@ -1,8 +1,8 @@
" Vim syntax file
" Language: J
-" Maintainer: David Bürgin <676c7473@gmail.com>
-" URL: https://github.com/glts/vim-j
-" Last Change: 2015-01-11
+" Maintainer: David Bürgin <dbuergin@gluet.ch>
+" URL: https://gitlab.com/glts/vim-j
+" Last Change: 2019-11-12
if exists('b:current_syntax')
finish
@@ -23,10 +23,10 @@ syntax match jControl /\<\%(for\|goto\|label\)_\a\k*\./
" Standard library names. A few names need to be defined with ":syntax match"
" because they would otherwise take precedence over the corresponding jControl
" and jDefineExpression items.
-syntax keyword jStdlibNoun ARGV BINPATH CR CRLF DEL Debug EAV EMPTY FF FHS IF64 IFIOS IFJCDROID IFJHS IFQT IFRASPI IFUNIX IFWIN IFWINCE IFWINE IFWOW64 JB01 JBOXED JCHAR JCMPX JFL JINT JPTR JSIZES JSTR JTYPES JVERSION LF LF2 TAB UNAME UNXLIB dbhelp libjqt
+syntax keyword jStdlibNoun ARGV BINPATH CR CRLF DEL Debug EAV EMPTY FF FHS IF64 IFBE IFIOS IFJA IFJHS IFJNET IFQT IFRASPI IFUNIX IFWIN IFWINCE IFWINE IFWOW64 JB01 JBOXED JCHAR JCHAR2 JCHAR4 JCMPX JFL JINT JLIB JPTR JSB JSIZES JSTR JSTR2 JSTR4 JTYPES JVERSION LF LF2 LIBFILE TAB UNAME UNXLIB dbhelp libjqt
syntax keyword jStdlibAdverb define each every fapplylines inv inverse items leaf rows rxapply rxmerge table
syntax keyword jStdlibConjunction bind cuts def on
-syntax keyword jStdlibVerb AND Endian IFDEF OR XOR anddf android_exec_am android_exec_host andunzip apply boxopen boxxopen bx calendar cd cdcb cder cderx cdf charsub chopstring cleartags clear coclass cocreate cocurrent codestroy coerase cofind cofindv cofullname coinfo coinsert compare coname conames conew conl conouns conounsx copath copathnl copathnlx coreset costate cut cutLF cutopen cutpara datatype dbctx dberm dberr dbg dbjmp dblocals dblxq dblxs dbnxt dbq dbr dbret dbrr dbrrx dbrun dbs dbsig dbsq dbss dbst dbstack dbstk dbstop dbstopme dbstopnext dbstops dbtrace dbview deb debc delstring detab dfh dir dircompare dircompares dirfind dirpath dirss dirssrplc dirtree dirused dlb dltb dltbs dquote drop dropafter dropto dtb dtbs echo empty endian erase evtloop exit expand f2utf8 fappend fappends fboxname fc fcompare fcompares fcopynew fdir ferase fetch fexist fexists fgets file2url fixdotdot fliprgb fmakex foldpara foldtext fpathcreate fpathname fputs fread freadblock freadr freads frename freplace fsize fss fssrplc fstamp fstringreplace ftype fview fwrite fwritenew fwrites getalpha getargs getdate getenv getqtbin hfd hostpathsep ic install iospath isatty isotimestamp isutf8 jcwdpath joinstring jpath jpathsep jsystemdefs launch list ljust load loadd loadtags mema memf memr memw nameclass namelist names nc nl pick quote require rjust rplc rxE rxall rxcomp rxcut rxeq rxerror rxfirst rxfree rxfrom rxhandles rxin rxindex rxinfo rxmatch rxmatches rxrplc rxutf8 script scriptd scripts setalpha setbreak shell show sign sminfo smoutput sort split splitnostring splitstring ss startupandroid startupconsole startupide stderr stdin stdout stringreplace symdat symget symset ta tagcp tagopen tagselect take takeafter taketo timespacex timestamp timex tmoutput toCRLF toHOST toJ todate todayno tolower topara toupper tsdiff tsrep tstamp type ucp ucpcount unxlib usleep utf8 uucp valdate wcsize weekday weeknumber weeksinyear winpathsep xedit
+syntax keyword jStdlibVerb AND Endian IFDEF OR XOR abspath anddf android_exec_am android_exec_host android_getdisplaymetrics andunzip apply boxopen boxxopen bx calendar cd cdcb cder cderx cdf charsub chopstring clear coclass cocreate cocurrent codestroy coerase cofind cofindv cofullname coinfo coinsert compare coname conames conew conl conouns conounsx copath copathnl copathnlx coreset costate cut cutLF cutopen cutpara datatype dbctx dbcut dberm dberr dbg dbinto dbjmp dblocals dblxq dblxs dbnxt dbout dbover dbq dbr dbret dbrr dbrrx dbrun dbs dbsig dbsq dbss dbst dbstack dbstk dbstop dbstopme dbstopnext dbstops dbtrace dbview deb debc delstring detab dfh dir dircompare dircompares dirfind dirpath dirss dirssrplc dirtree dirused dlb dltb dltbs dquote drop dropafter dropto dtb dtbs echo empty endian erase evtloop exit expand f2utf8 fappend fappends fboxname fc fcompare fcompares fcopynew fdir ferase fetch fexist fexists fgets file2url fixdotdot fliprgb fmakex foldpara foldtext fpathcreate fpathname fputs fread freadblock freadr freads frename freplace fsize fss fssrplc fstamp fstringreplace ftype fview fwrite fwritenew fwrites getalpha getargs getdate getenv getqtbin hfd hostpathsep ic install iospath isatty isotimestamp isutf16 isutf8 jcwdpath joinstring jpath jpathsep jsystemdefs launch list ljust load loadd mema memf memr memu memw nameclass namelist names nc nl pick quote require rjust rplc rxE rxall rxcomp rxcut rxeq rxerror rxfirst rxfree rxfrom rxhandles rxin rxindex rxinfo rxmatch rxmatches rxrplc rxutf8 script scriptd scripts setalpha setbreak shell show sign sminfo smoutput sort split splitnostring splitstring ss startupandroid stderr stdin stdout stringreplace symdat symget symset take takeafter taketo timespacex timestamp timex tmoutput toCRLF toHOST toJ todate todayno tolist tolower topara toupper tsdiff tsrep tstamp type ucp ucpcount undquote unxlib usleep utf8 uucp valdate wcsize weekday weeknumber weeksinyear winpathsep xedit
syntax match jStdlibNoun /\<\%(adverb\|conjunction\|dyad\|monad\|noun\|verb\)\>/
syntax match jStdlibVerb /\<\%(Note\|\%(assert\|break\|do\)\.\@!\)\>/