<feed xmlns='http://www.w3.org/2005/Atom'>
<title>rneovim.git/src/gen/gen_help_html.lua, branch master</title>
<subtitle>Neovim fork with Rahm's personal hacks.</subtitle>
<link rel='alternate' type='text/html' href='http://git.josher.dev/rneovim.git/'/>
<entry>
<title>docs(help): specify h4 "function signature" format #42434</title>
<updated>2026-10-17T15:34:02+00:00</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-10-17T15:34:02+00:00</published>
<link rel='alternate' type='text/html' href='http://git.josher.dev/rneovim.git/commit/?id=0851e7dabed9fc9c019e22088029f36e9f3ec3e3'/>
<id>0851e7dabed9fc9c019e22088029f36e9f3ec3e3</id>
<content type='text'>
Work towards enabling ["flow" layout](https://github.com/neovim/neovim/blob/9244da12e400ec0291450a5e9400d995e7a29b83/src/gen/gen_help_html.lua#L86-L88)
in all `:help` files.

Problem:
The final boss of vimdoc pseudo-structure: Vim's quasi-headings on
function signatures and excmd docs is visually distinctive but too
inconsistent for a nice parse rule.

Solution:
- Define the quasi-heading format as an "h4" variant, specified at
  `:help help-tag-heading`.
  - For simplicity and predictability, it is defined as any line that
    ends with a help tag(s) preceded by 2 or more spaces (or 1 tab).
- Update existing docs.
  - This one-time update has a lot of changes, but is very unlikely to
    conflict with ported Vim-patches because (1) Vim rarely adds new
    *excmds* that we want, and (2) *function* docs are auto-generated.

ref https://github.com/neovim/tree-sitter-vimdoc/issues/110</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Work towards enabling ["flow" layout](https://github.com/neovim/neovim/blob/9244da12e400ec0291450a5e9400d995e7a29b83/src/gen/gen_help_html.lua#L86-L88)
in all `:help` files.

Problem:
The final boss of vimdoc pseudo-structure: Vim's quasi-headings on
function signatures and excmd docs is visually distinctive but too
inconsistent for a nice parse rule.

Solution:
- Define the quasi-heading format as an "h4" variant, specified at
  `:help help-tag-heading`.
  - For simplicity and predictability, it is defined as any line that
    ends with a help tag(s) preceded by 2 or more spaces (or 1 tab).
- Update existing docs.
  - This one-time update has a lot of changes, but is very unlikely to
    conflict with ported Vim-patches because (1) Vim rarely adds new
    *excmds* that we want, and (2) *function* docs are auto-generated.

ref https://github.com/neovim/tree-sitter-vimdoc/issues/110</pre>
</div>
</content>
</entry>
<entry>
<title>docs: flow layout</title>
<updated>2026-10-16T17:02:23+00:00</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-10-16T14:27:09+00:00</published>
<link rel='alternate' type='text/html' href='http://git.josher.dev/rneovim.git/commit/?id=b83273aefdd9a8bec89210bc76bdd79bafba88f4'/>
<id>b83273aefdd9a8bec89210bc76bdd79bafba88f4</id>
<content type='text'>
Work towards enabling "flow" layout in most `:help` files.

Since [tables are supported in help](https://github.com/neovim/tree-sitter-vimdoc#tables),
it's now possible to render most help files as ["flow" layout](https://github.com/neovim/neovim/blob/9244da12e400ec0291450a5e9400d995e7a29b83/src/gen/gen_help_html.lua#L86-L88)
instead of the legacy fixed-width layout. Besides [improved HTML rendering](https://github.com/neovim/neovim/pull/42381#discussion_r4285705739),
flow layout will allow `:help` presentation-mode to un-hardwrap text
blocks.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Work towards enabling "flow" layout in most `:help` files.

Since [tables are supported in help](https://github.com/neovim/tree-sitter-vimdoc#tables),
it's now possible to render most help files as ["flow" layout](https://github.com/neovim/neovim/blob/9244da12e400ec0291450a5e9400d995e7a29b83/src/gen/gen_help_html.lua#L86-L88)
instead of the legacy fixed-width layout. Besides [improved HTML rendering](https://github.com/neovim/neovim/pull/42381#discussion_r4285705739),
flow layout will allow `:help` presentation-mode to un-hardwrap text
blocks.
</pre>
</div>
</content>
</entry>
<entry>
<title>docs: cleanup tables, highlights.scm #42381</title>
<updated>2026-10-16T09:49:31+00:00</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-10-16T09:49:31+00:00</published>
<link rel='alternate' type='text/html' href='http://git.josher.dev/rneovim.git/commit/?id=45f83c70ee030f9f398b3db9c2e1dbaaf2880c72'/>
<id>45f83c70ee030f9f398b3db9c2e1dbaaf2880c72</id>
<content type='text'>
highlights.scm: `#match` is slow, prefer `#lua-match`.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
highlights.scm: `#match` is slow, prefer `#lua-match`.</pre>
</div>
</content>
</entry>
<entry>
<title>feat(docs): generate PDF</title>
<updated>2026-10-15T16:01:31+00:00</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-10-15T12:57:48+00:00</published>
<link rel='alternate' type='text/html' href='http://git.josher.dev/rneovim.git/commit/?id=0912a44c701c9b1d4ca75a3b575471ce86e9c186'/>
<id>0912a44c701c9b1d4ca75a3b575471ce86e9c186</id>
<content type='text'>
Generate PDF using `chrome`.
TODO: we probably don't need the `typst` codepath.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Generate PDF using `chrome`.
TODO: we probably don't need the `typst` codepath.
</pre>
</div>
</content>
</entry>
<entry>
<title>feat(docs): table rendering</title>
<updated>2026-10-15T15:43:50+00:00</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-10-15T12:29:19+00:00</published>
<link rel='alternate' type='text/html' href='http://git.josher.dev/rneovim.git/commit/?id=6e4ab117987982eda73d77948771dc7d34f94945'/>
<id>6e4ab117987982eda73d77948771dc7d34f94945</id>
<content type='text'>
Render tables in both `:help` and generated HTML.

Use NBSP (nonbreaking space) char in empty table cells.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Render tables in both `:help` and generated HTML.

Use NBSP (nonbreaking space) char in empty table cells.
</pre>
</div>
</content>
</entry>
<entry>
<title>fix(docs): listitems with codeblocks #42367</title>
<updated>2026-10-15T11:03:25+00:00</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-10-15T11:03:25+00:00</published>
<link rel='alternate' type='text/html' href='http://git.josher.dev/rneovim.git/commit/?id=3068a8f652c8e83aac0696b4a513f369b5bbbd99'/>
<id>3068a8f652c8e83aac0696b4a513f369b5bbbd99</id>
<content type='text'>
Problem:
- `&lt;` before a listitem (`&lt; - foo`) is not concealed.
- Codeblock HTML has extra blank lines.
- Codeblock in a listitem ends the listitem, so HTML docs drop the rest
  of the item and its nesting. Example from `:h nvim_open_win()`:
  ```
        • border: … the double-box style can be specified as: &gt;
          [ "╔", "═" ,"╗", "║", "╝", "═", "╚", "║" ].
    &lt;
          If fewer than eight chars are given, they will be repeated.
        • bufpos: …

    tree-sitter-vimdoc v4.1.0:
      (block
        (line_li (prefix) (line) (codeblock (code (line)))))
      (block
        (line)                                  ; "If fewer…"
        (line_li (prefix) (line) (line)))       ; "bufpos"

    tree-sitter-vimdoc v4.2.0:
      (block
        (line_li (prefix) (line) (codeblock (code (line)))
          (line))                               ; "If fewer…"
        (line_li (prefix) (line) (line)))       ; "bufpos"
  ```

Solution:
- Bump tree-sitter-vimdoc to v4.2.0. https://github.com/neovim/tree-sitter-vimdoc/pull/174
- gen_help_html: get listitem indent from its first line
- gen_help_html: don't double codeblock newlines.
- highlight query: conceal `&lt;` in `line_li`.
- docs: fix doc sources where a blank line was missing after listitems
  followed by non-listitem text.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Problem:
- `&lt;` before a listitem (`&lt; - foo`) is not concealed.
- Codeblock HTML has extra blank lines.
- Codeblock in a listitem ends the listitem, so HTML docs drop the rest
  of the item and its nesting. Example from `:h nvim_open_win()`:
  ```
        • border: … the double-box style can be specified as: &gt;
          [ "╔", "═" ,"╗", "║", "╝", "═", "╚", "║" ].
    &lt;
          If fewer than eight chars are given, they will be repeated.
        • bufpos: …

    tree-sitter-vimdoc v4.1.0:
      (block
        (line_li (prefix) (line) (codeblock (code (line)))))
      (block
        (line)                                  ; "If fewer…"
        (line_li (prefix) (line) (line)))       ; "bufpos"

    tree-sitter-vimdoc v4.2.0:
      (block
        (line_li (prefix) (line) (codeblock (code (line)))
          (line))                               ; "If fewer…"
        (line_li (prefix) (line) (line)))       ; "bufpos"
  ```

Solution:
- Bump tree-sitter-vimdoc to v4.2.0. https://github.com/neovim/tree-sitter-vimdoc/pull/174
- gen_help_html: get listitem indent from its first line
- gen_help_html: don't double codeblock newlines.
- highlight query: conceal `&lt;` in `line_li`.
- docs: fix doc sources where a blank line was missing after listitems
  followed by non-listitem text.</pre>
</div>
</content>
</entry>
<entry>
<title>fix(gen_help_html): cleanup #41525</title>
<updated>2026-08-28T14:24:40+00:00</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-08-28T14:24:40+00:00</published>
<link rel='alternate' type='text/html' href='http://git.josher.dev/rneovim.git/commit/?id=aaab8cdac4d347fea513f5174ebf7b03bb5e61c2'/>
<id>aaab8cdac4d347fea513f5174ebf7b03bb5e61c2</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>docs(gen_help_html): generate Typst format #40665</title>
<updated>2026-08-28T11:43:46+00:00</updated>
<author>
<name>Kevin</name>
<email>SqAtx@users.noreply.github.com</email>
</author>
<published>2026-08-28T11:43:46+00:00</published>
<link rel='alternate' type='text/html' href='http://git.josher.dev/rneovim.git/commit/?id=fb083f3850c242e14613de517811a3818bef98db'/>
<id>fb083f3850c242e14613de517811a3818bef98db</id>
<content type='text'>
Problem:
gen_help_html.lua only outputs HTML, but Typst is useful for producing PDFs.

Solution:
Add gen_one_typ() and ts_node_to_typ(), which mirror the existing
gen_one_html() and ts_node_to_html().</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Problem:
gen_help_html.lua only outputs HTML, but Typst is useful for producing PDFs.

Solution:
Add gen_one_typ() and ts_node_to_typ(), which mirror the existing
gen_one_html() and ts_node_to_html().</pre>
</div>
</content>
</entry>
<entry>
<title>fix(docs): multi-level list dedent indentation #40850</title>
<updated>2026-07-20T09:02:17+00:00</updated>
<author>
<name>Maria Solano</name>
<email>majosolano99@gmail.com</email>
</author>
<published>2026-07-20T09:02:17+00:00</published>
<link rel='alternate' type='text/html' href='http://git.josher.dev/rneovim.git/commit/?id=09a4cc8c50285fa5c7c094650f505de11f90dccc'/>
<id>09a4cc8c50285fa5c7c094650f505de11f90dccc</id>
<content type='text'>
Problem:
The list-item indentation logic in `gen_help_html.lua` tracks `opt.indent` that
only decrements by one level when a list item is less indented than its sibling.
Dedenting across multiple nesting levels at once produces the wrong left margin.

Solution:
Track the exact leading whitespace for each indent level in a `opt.indent_ws` stack:
- On reset or a top-level item initialize the stack with the current item's
  whitespace.
- When indenting deeper push the current whitespace at the new level.
- When dedenting pop every level whose tracked whitespace is deeper than the
  current item (reaching the correct ancestor level).</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Problem:
The list-item indentation logic in `gen_help_html.lua` tracks `opt.indent` that
only decrements by one level when a list item is less indented than its sibling.
Dedenting across multiple nesting levels at once produces the wrong left margin.

Solution:
Track the exact leading whitespace for each indent level in a `opt.indent_ws` stack:
- On reset or a top-level item initialize the stack with the current item's
  whitespace.
- When indenting deeper push the current whitespace at the new level.
- When dedenting pop every level whose tracked whitespace is deeper than the
  current item (reaching the correct ancestor level).</pre>
</div>
</content>
</entry>
<entry>
<title>refactor(docs): extract HTML-specific bits from gen_help_html #39946</title>
<updated>2026-06-02T14:28:01+00:00</updated>
<author>
<name>Kevin</name>
<email>SqAtx@users.noreply.github.com</email>
</author>
<published>2026-06-02T14:28:01+00:00</published>
<link rel='alternate' type='text/html' href='http://git.josher.dev/rneovim.git/commit/?id=d0c7f870c29cdea5b13547f58b97983cfde9b345'/>
<id>d0c7f870c29cdea5b13547f58b97983cfde9b345</id>
<content type='text'>
Problem:
We'd like to export a PDF version of the user manual
(https://github.com/neovim/neovim.github.io/issues/477), but
`gen_help_html.lua` assumes an HTML output in several places.

Solution:
- Make gen() take an output param
- Rename gen_one() -&gt; gen_one_html()
- Rename visit_node() -&gt; ts_node_to_html()
- Add a mapping to gen() that calls the correct gen_one*() function.

This prepares the addition of new methods for Typst output.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Problem:
We'd like to export a PDF version of the user manual
(https://github.com/neovim/neovim.github.io/issues/477), but
`gen_help_html.lua` assumes an HTML output in several places.

Solution:
- Make gen() take an output param
- Rename gen_one() -&gt; gen_one_html()
- Rename visit_node() -&gt; ts_node_to_html()
- Add a mapping to gen() that calls the correct gen_one*() function.

This prepares the addition of new methods for Typst output.</pre>
</div>
</content>
</entry>
</feed>
