@@ -8,6 +8,160 @@ Table of Contents                                *panvimdoc-table-of-contents*
88
99Write documentation in | pandoc markdown | . Generate documentation in vimdoc.
1010
11+ ============================================================================== 
12+ 2. Motivation                                           *panvimdoc-motivation* 
13+ 
14+ Writing documentation is hard. Writing documentation for vim plugins is an
15+ additional hassle. Making writing vim plugin documentation frictionless can be
16+ useful.
17+ 
18+ Writing documentation in markdown and converting it to vimdoc can help toward
19+ that goal. This way, plugin authors will have to write documentation just once
20+ as part of the README of the project, and have the vim documentation
21+ autogenerated.
22+ 
23+ Writing vim documentation requires conforming to a few simple rules. Although > 
24+  vimdoc < is not a well defined spec, it does have some nice syntax highlighting
25+ and features like tags and links when a text file is in > vimdoc < compatible
26+ format and when the > filetype=help < in vim. Also, typically, while vim
27+ documentation is just plain text files, they are usually formatted well using
28+ whitespace. Preserving these features and characteristics is important.
29+ 
30+ See | References |  for more information.
31+ 
32+ It would be nice to write documentation in Markdown and convert to vimdoc.
33+ [@mjlbach](https://github.com/mjlbach ) has already implemented a neovim
34+ treesitter markdown to vimdoc converter that works fairly well. This approach
35+ is close to ideal. There are no dependencies ( except for the Markdown
36+ treesitter parser ). While it appears that the markdown parser may cause
37+ crashes, I have not experienced any in my use. It is neovim only but you can
38+ use this on github actions even for a vim plugin documentation.
39+ 
40+ I found two other projects that do something similar, again linked in the
41+ references. As far as I can tell, these projects are all in use and actively
42+ maintained and these projects may suit your need.
43+ 
44+ However, none of these projects use Pandoc. Pandoc Markdown supports a wide
45+ number of features. Most importantly, it supports a range of Markdown formats
46+ and flavors. And, Pandoc has lua filters and a custom output writer that can be
47+ configured in lua. Pandoc filters are easy to write and maintain too.
48+ 
49+ This project aims to write a specification in Pandoc Markdown, and take
50+ advantage of Pandoc filters, to convert a Markdown file to a vim documentation
51+ help file.
52+ 
53+ ============================================================================== 
54+ 3. Goals:                                                   *panvimdoc-goals:* 
55+ 
56+ 
57+ -Markdown file must be readable when the file is presented as the README on GitHub / GitLab.
58+ -Markdown file converted to HTML using Pandoc must be web friendly and render appropriately (if the user chooses to do so).
59+ -Vim documentation generated must support links and tags.
60+ -Vim documentation generated should be aesthetically pleasing to view, in vim and as a plain text file.
61+ 
62+ 
63+ -This means using column and spacing appropriately.
64+ 
65+ -Use built in Vim documentation as guidelines but not rules.
66+ 
67+ 
68+ ============================================================================== 
69+ 4. Features                                               *panvimdoc-features* 
70+ 
71+ 
72+ -Autogenerate title for vim documentation
73+ -Generate links and tags
74+ -Support markdown syntax for tables
75+ -Support raw vimdoc syntax where ever needed for manual control.
76+ 
77+ 
78+ ============================================================================== 
79+ 5. Specification                                     *panvimdoc-specification* 
80+ 
81+ The specification is described in | panvimdoc.md |  along with examples. The
82+ generated output is in | panvimdoc.txt | . The reference implementation of the
83+ Pandoc lua filter is in | panvimdoc.lua | .
84+ 
85+ If you would like to contribute to the specification please feel free to
86+ comment on this issue: | https://github.com/kdheepak/panvimdoc/issues/1 | .
87+ 
88+ ============================================================================== 
89+ 6. Usage                                                     *panvimdoc-usage* 
90+ 
91+ > 
92+     pandoc -t scripts/panvimdoc.lua ${INPUT} ${OUTPUT} 
93+ < 
94+ 
95+ 
96+ The following are the metadata fields that the custom writer uses:
97+ 
98+ 
99+ ->
100+ project
101+ < (String) _required_: This is typically the plugin name. This is prefixed to all generated tags
102+ ->
103+ vimdoctitle
104+ < (String) _required_: This is the name of the documentation file that you want to generate
105+ ->
106+ vimversion
107+ < (String) _optional_: The version vim / neovim that the plugin is targeting. If not present, the version of vim in the available environment is used.
108+ ->
109+ toc
110+ < (Boolean) _optional_: Whether to generate table of contents or not
111+ 
112+ 
113+ Example:
114+ 
115+ > 
116+     --- 
117+     project: panvimdoc 
118+     vimdoctitle: panvimdoc.txt 
119+     vimversion: Neovim v0.5.0 
120+     toc: true 
121+     --- 
122+ < 
123+ 
124+ 
125+ USING GITHUB ACTIONS                          *panvimdoc-using-github-actions* 
126+ 
127+ Add the following to > ./.github/workflows/pandocvim.yml <:
128+ 
129+ > 
130+     name: panvimdoc 
131+      
132+     on: [push] 
133+      
134+     jobs: 
135+       custom_test: 
136+         runs-on: ubuntu-latest 
137+         name: pandoc to vimdoc 
138+         steps: 
139+           - uses: actions/checkout@v2 
140+           - name: PanVimDoc 
141+             uses: kdheepak/panvimdoc@v1 
142+             with: 
143+               pandoc: INPUT_FILENAME.md 
144+               vimdoc: doc/OUTPUT_FILENAME.txt 
145+           - uses: stefanzweifel/git-auto-commit-action@v4 
146+             with: 
147+               commit_message: "Auto generate docs" 
148+               branch: ${{ github.head_ref }} 
149+ < 
150+ 
151+ 
152+ Choose > INPUT_FILENAME < and > OUTPUT_FILENAME < appropriately.
153+ 
154+ ============================================================================== 
155+ 7. References                                           *panvimdoc-references* 
156+ 
157+ 
158+ -| https://learnvimscriptthehardway.stevelosh.com/chapters/54.html | 
159+ -| https://github.com/nanotee/vimdoc-notes | 
160+ -| https://github.com/mjlbach/babelfish.nvim | 
161+ -| https://foosoft.net/projects/md2vim/ | 
162+ -| https://github.com/wincent/docvim | 
163+ 
164+ 
11165CODEBLOCKS                                              *panvimdoc-codeblocks* 
12166
13167> 
@@ -36,7 +190,7 @@ will be rendered as below:
36190You can use codeblocks that have language as `vimdoc`  to write raw vimdoc.
37191
38192============================================================================== 
39- 2 . Title                                                     *panvimdoc-title* 
193+ 8 . Title                                                     *panvimdoc-title* 
40194
41195The first line of the documentation that is generated will look something like
42196this:
47201
48202
49203============================================================================== 
50- 3 . Heading                                                 *panvimdoc-heading* 
204+ 9 . Heading                                                 *panvimdoc-heading* 
51205
52206Main headings are numbered.
53207
0 commit comments