From 62a3143795c5fa285c18d4bd54a170c5d314f601 Mon Sep 17 00:00:00 2001 From: Anthony Perkins Date: Fri, 13 Jan 2023 15:25:19 +0000 Subject: [PATCH] Add vim-asciidoctor --- pack/acp/start/vim-asciidoctor/.gitignore | 1 + pack/acp/start/vim-asciidoctor/LICENSE | 21 + pack/acp/start/vim-asciidoctor/README.adoc | 603 ++++++++++++++++++ .../vim-asciidoctor/autoload/asciidoctor.vim | 391 ++++++++++++ .../compiler/asciidoctor2docx.vim | 74 +++ .../compiler/asciidoctor2html.vim | 43 ++ .../compiler/asciidoctor2pdf.vim | 57 ++ .../start/vim-asciidoctor/doc/asciidoctor.txt | 462 ++++++++++++++ .../vim-asciidoctor/ftdetect/asciidoctor.vim | 1 + .../vim-asciidoctor/ftplugin/asciidoctor.vim | 305 +++++++++ .../start/vim-asciidoctor/images/image1.png | Bin 0 -> 94740 bytes .../vim-asciidoctor/images/test_docx.png | Bin 0 -> 14502 bytes .../vim-asciidoctor/images/test_html.png | Bin 0 -> 27502 bytes .../vim-asciidoctor/images/test_pdf1.png | Bin 0 -> 25423 bytes .../vim-asciidoctor/images/test_pdf2.png | Bin 0 -> 33394 bytes .../vim-asciidoctor/indent/asciidoctor.vim | 15 + .../vim-asciidoctor/syntax/asciidoctor.vim | 318 +++++++++ plugins.md | 1 + 18 files changed, 2292 insertions(+) create mode 100644 pack/acp/start/vim-asciidoctor/.gitignore create mode 100644 pack/acp/start/vim-asciidoctor/LICENSE create mode 100644 pack/acp/start/vim-asciidoctor/README.adoc create mode 100644 pack/acp/start/vim-asciidoctor/autoload/asciidoctor.vim create mode 100644 pack/acp/start/vim-asciidoctor/compiler/asciidoctor2docx.vim create mode 100644 pack/acp/start/vim-asciidoctor/compiler/asciidoctor2html.vim create mode 100644 pack/acp/start/vim-asciidoctor/compiler/asciidoctor2pdf.vim create mode 100644 pack/acp/start/vim-asciidoctor/doc/asciidoctor.txt create mode 100644 pack/acp/start/vim-asciidoctor/ftdetect/asciidoctor.vim create mode 100644 pack/acp/start/vim-asciidoctor/ftplugin/asciidoctor.vim create mode 100644 pack/acp/start/vim-asciidoctor/images/image1.png create mode 100644 pack/acp/start/vim-asciidoctor/images/test_docx.png create mode 100644 pack/acp/start/vim-asciidoctor/images/test_html.png create mode 100644 pack/acp/start/vim-asciidoctor/images/test_pdf1.png create mode 100644 pack/acp/start/vim-asciidoctor/images/test_pdf2.png create mode 100644 pack/acp/start/vim-asciidoctor/indent/asciidoctor.vim create mode 100644 pack/acp/start/vim-asciidoctor/syntax/asciidoctor.vim diff --git a/pack/acp/start/vim-asciidoctor/.gitignore b/pack/acp/start/vim-asciidoctor/.gitignore new file mode 100644 index 0000000..926ccaa --- /dev/null +++ b/pack/acp/start/vim-asciidoctor/.gitignore @@ -0,0 +1 @@ +doc/tags diff --git a/pack/acp/start/vim-asciidoctor/LICENSE b/pack/acp/start/vim-asciidoctor/LICENSE new file mode 100644 index 0000000..28a597a --- /dev/null +++ b/pack/acp/start/vim-asciidoctor/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Maxim Kim + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/pack/acp/start/vim-asciidoctor/README.adoc b/pack/acp/start/vim-asciidoctor/README.adoc new file mode 100644 index 0000000..2906c57 --- /dev/null +++ b/pack/acp/start/vim-asciidoctor/README.adoc @@ -0,0 +1,603 @@ += Vim ❤️ Asciidoctor +:author: Maxim Kim +:experimental: +:toc: left +:toclevels: 3 +:icons: font +:autofit-option: +:source-highlighter: rouge +:rouge-style: github +:source-linenums-option: +:revdate: 2018-11-19 +:imagesdir: images + +image::image1.png[] + +== Intro + +Vim has syntax highlighting for asciidoc out of the box. And it is/was really +slow for me, probably because it tries to be very smart about syntax. + +This plugin: + + - has different syntax highlighting; + - is way faster (your vim lags less :) ); + - has folding; + - has commands to compile documents (html, pdf, docx). + + +== Installation + +=== Vim8 built in packages + +You can use git command on your command line: +[source,bash] +-------- + +git clone https://github.com/habamax/vim-asciidoctor.git ~/.vim/pack/my-packages/start/vim-asciidoctor + +-------- + +For windows users you should change `~/.vim` to `%USERPROFILE%/vimfiles` +[source,cmd] +-------- + +git clone https://github.com/habamax/vim-asciidoctor.git %USERPROFILE%/vimfiles/pack/my-packages/start/vim-asciidoctor + +-------- + +or `minpac` package manager (to add to your `.vimrc`): + +[source,vim] +-------- + +call minpac#add('habamax/vim-asciidoctor') + +-------- + + +=== vim-plug + +.Add to your .vimrc next to your other plugs +[source,vim] +-------- + +Plug 'habamax/vim-asciidoctor' + +-------- + + +== Setup + +NOTE: To use basic asciidoctor with vim you don't have to setup anything in vim. At +least this was the intention. :) + +The following is an example setup. Part of it might not work for you if you don't have +asciidoctor extensions installed. Or you don't have custom PDF themes and fonts. + +.asciidoctor +[source,vim] +-------- + +" What to use for HTML, default `asciidoctor`. +let g:asciidoctor_executable = 'asciidoctor' + +" What extensions to use for HTML, default `[]`. +let g:asciidoctor_extensions = ['asciidoctor-diagram', 'asciidoctor-rouge'] + +" Path to the custom css +let g:asciidoctor_css_path = '~/docs/AsciiDocThemes' + +" Custom css name to use instead of built-in +let g:asciidoctor_css = 'haba-asciidoctor.css' + +-------- + +.asciidoctor-pdf +[source,vim] +-------- + +" What to use for PDF, default `asciidoctor-pdf`. +let g:asciidoctor_pdf_executable = 'asciidoctor-pdf' + +" What extensions to use for PDF, default `[]`. +let g:asciidoctor_pdf_extensions = ['asciidoctor-diagram'] + +" Path to PDF themes, default `''`. +let g:asciidoctor_pdf_themes_path = '~/docs/AsciiDocThemes' + +" Path to PDF fonts, default `''`. +let g:asciidoctor_pdf_fonts_path = '~/docs/AsciiDocThemes/fonts' + +-------- + +.asciidoctor-docx +[source,vim] +-------- + +" What to use for DOCX, default `pandoc`. +" The DOCX 'compilation' process is to generate `docbook` using +" `g:asciidoctor_executable` and then to generate DOCX out of `docbook` +" using `pandoc`. +let g:asciidoctor_pandoc_executable = 'pandoc' + +"" --data-dir +let g:asciidoctor_pandoc_data_dir = '~/docs/.pandoc' + +" Other parameters you want to feed pandoc +let g:asciidoctor_pandoc_other_params = '--toc' + +" Reference document to reuse styles +" If not set up asciidoctor looks for the theme name +" :pdf-style: mytheme +" in the first 30 lines and generate reference-doc filename: +" g:asciidoctor_pandoc_data_dir + mytheme + '-reference.docx' +" for example: ~/docs/.pandoc/mytheme-reference.docx +let g:asciidoctor_pandoc_reference_doc = 'custom-reference.docx' + +-------- + +.folding +[source,vim] +-------- + +" Fold sections, default `0`. +let g:asciidoctor_folding = 1 + +" Fold options, default `0`. +let g:asciidoctor_fold_options = 1 + +-------- + +.syntax +[source,vim] +-------- + +" Conceal *bold*, _italic_, `code` and urls in lists and paragraphs, default `0`. +" See limitations in end of the README +let g:asciidoctor_syntax_conceal = 1 + +" Highlight indented text, default `1`. +let g:asciidoctor_syntax_indented = 0 + +-------- + +.syntax highlighting for languages in [source] blocks +[source,vim] +-------- + +" List of filetypes to highlight, default `[]` +let g:asciidoctor_fenced_languages = ['python', 'c', 'javascript'] + +-------- + +.default mappings... there are no default mappings +[source,vim] +-------- + +" Function to create buffer local mappings and add default compiler +fun! AsciidoctorMappings() + nnoremap oo :AsciidoctorOpenRAW + nnoremap op :AsciidoctorOpenPDF + nnoremap oh :AsciidoctorOpenHTML + nnoremap ox :AsciidoctorOpenDOCX + nnoremap ch :Asciidoctor2HTML + nnoremap cp :Asciidoctor2PDF + nnoremap cx :Asciidoctor2DOCX + nnoremap p :AsciidoctorPasteImage + " :make will build pdfs + compiler asciidoctor2pdf +endfun + +" Call AsciidoctorMappings for all `*.adoc` and `*.asciidoc` files +augroup asciidoctor + au! + au BufEnter *.adoc,*.asciidoc call AsciidoctorMappings() +augroup END + +-------- + + +== Commands + +All commands are buffer local -- available only for asciidoctor files (`set filetype=asciidoctor`) + +* `Asciidoctor2HTML` -- convert current file to `HTML`. +* `Asciidoctor2PDF` -- convert current file to `PDF`. +* `Asciidoctor2DOCX` -- convert current file to `DOCX`. +* `AsciidoctorOpenRAW` -- open current file in a browser. Chrome and Firefox has extentsions to render barebone `adoc` files. +* `AsciidoctorOpenPDF` -- open `PDF` of the current file using default PDF viewer. +* `AsciidoctorOpenHTML` -- open `HTML` of the current file using default web browser. +* `AsciidoctorOpenDOCX` -- open `DOCX` of the current file using default DOCX + viewer. (I haven't tried it with LibreOffice or whatever else there might be. + Also haven't tried it on linux and OSX...) + +[NOTE] +====== +Commands: `Asciidoctor2HTML`, `Asciidoctor2PDF` should convert files +if link:https://asciidoctor.org/docs/user-manual/#installing-the-asciidoctor-ruby-gem[asciidoctor] and link:https://github.com/asciidoctor/asciidoctor-pdf#getting-started[asciidoctor-pdf] are installed. + +Command `Asciidoctor2DOCX` should also have link:https://pandoc.org/installing.html[pandoc] installed. +====== + + +== Usage + +1. Open `~/test.adoc` +2. Enter: ++ +[literal] +......... + += Asciidoctor Title: Hanging around + +This is the first para and it will be rendered with bigger text. + +== Section 1 + +Text of section 1 + +== Section 2 + +Text of section 2 + +......... + +3. Save it and export to `HTML` ++ +[literal] +......... + +:w +:Asciidoctor2HTML + +......... + +4. Open the `HTML` file: ++ +[literal] +......... + +:AsciidoctorOpenHTML + +......... + +// pics + + +=== HTML output +That should look something like this: + +.HTML output +image::test_html.png[] + + +=== DOCX output + +If you use `:Asciidoctor2DOCX` and `:AsciidoctorOpenDOCX` commands instead, you +should see something like this (provided you have `pandoc` and `MSWord` +installed:) + +.DOCX output +image::test_docx.png[] + + +=== PDF output + +And if you use `:Asciidoctor2PDF` and `:AsciidoctorOpenPDF` commands, you +should see something like this (I have my own default theme and fonts, so you +probably see it a bit different) : + +.PDF title page output +image::test_pdf1.png[] + +.PDF first page output +image::test_pdf2.png[] + +// add some short youtube videos + + +== Paste images from clipboard + +Vim can't access graphical part of clipboard thus an external tool should be used to save clipboard image to a png file. + +* For Windows I use GraphicsMagic (could be installed using `scoop`) +* For OSX I use `pngpaste` (could be installed using `brew`) +* For Linux -- `xclip` could be used (thx Matthias Fulz @mfulz) + +image::https://github.com/habamax/habamax.github.io/blob/master/assets/gifs/asciidoctor-pasteimg.gif[animated screen with image pasting] + +.setup +[source,vim] +-------- +" first `%s` is a path +" second `%s` is an image file name +" this is default for windows +let g:asciidoctor_img_paste_command = 'gm convert clipboard: %s%s' + +" for osx +" let g:asciidoctor_img_paste_command = 'pngpaste %s%s' + +" for linux +" let g:asciidoctor_img_paste_command = 'xclip -selection clipboard -t image/png -o > %s%s' + + + +" first `%s` is a base document name: +" (~/docs/hello-world.adoc => hello-world) +" second `%s` is a number of the image. +let g:asciidoctor_img_paste_pattern = 'img_%s_%s.png' +-------- + +If there is `:imagesdir:` as an option set up in a document, clipboard image +is saved there (relative to the document). Otherwise image is saved in the documents directory. + +The name of the image is generated according to the pattern. By default it is + + img_ + document_base_name + next_image_number + .png + + +== Bibliography completion + +There is initial support for bibliography completion. Works with `*.bib` files +placed to the same folder as file being edited. + +No setup is needed although additional setting for a base bibtex folder might +be added in the future. + +It uses vim's `completefunc` which is usually called in insert mode with +kbd:[], and it works for + +[source] +---- +cite:[ +cite:[cit +citenp:[cit +---- + +[NOTE] +====== +To create bibliography in asciidoctor, i.e., to put it into PDF or HTML you +should install +https://github.com/asciidoctor/asciidoctor-bibtex[asciidoctor-bibtex] +extension and provide it to vim-asciidoctor extension list(s): + +[source,vim] +" For asciidoctor backend +let g:asciidoctor_extensions = ['asciidoctor-bibtex'] +" For asciidoctor-pdf backend +let g:asciidoctor_pdf_extensions = ['asciidoctor-bibtex'] + +====== + + +== Misc + +=== Generate HTML on file save + +Add following snippet to your vim config to generate an HTML file upon saving: +[source,vim] +-------- +augroup ON_ASCIIDOCTOR_SAVE | au! + au BufWritePost *.adoc :Asciidoctor2HTML +augroup end +-------- + +If you want to add text files to the mix you can have something similar to: + +[source,vim] +-------- +func! ConvertAsciidoctorToHTML() + " Text file with asciidoctor contents? + if &filetype == 'text' && getline(1) =~ '^= .*$' + " text files have no asciidoctor commands + set filetype=asciidoctor + Asciidoctor2HTML + set filetype=text + elseif &filetype == 'asciidoctor' + Asciidoctor2HTML + endif +endfunc +augroup ON_ASCIIDOCTOR_SAVE | au! + au BufWritePost *.adoc,*.txt call ConvertAsciidoctorToHTML() +augroup end +-------- + +NOTE: if you have link:https://github.com/tpope/vim-dispatch[vim-dispatch] +installed HTML conversion would be done in background. + + +=== Highlight group names + +Colorschemes can use following highlight groups to redefine default highlighting: + +[cols=".^1,.^1", options="header"] +|=== +| Highlight Group Name +| Default Value + +|asciidoctorTitle |Title +|asciidoctorSetextHeader |Title +|asciidoctorH1 |Title +|asciidoctorH2 |Title +|asciidoctorH3 |Title +|asciidoctorH4 |Title +|asciidoctorH5 |Title +|asciidoctorH6 |Title +|asciidoctorTitleDelimiter |Type +|asciidoctorH1Delimiter |Type +|asciidoctorH2Delimiter |Type +|asciidoctorH3Delimiter |Type +|asciidoctorH4Delimiter |Type +|asciidoctorH5Delimiter |Type +|asciidoctorH6Delimiter |Type +|asciidoctorSetextHeaderDelimiter |Type +|asciidoctorListMarker |Delimiter +|asciidoctorOrderedListMarker |asciidoctorListMarker +|asciidoctorListContinuation |PreProc +|asciidoctorComment |Comment +|asciidoctorIndented |Comment +|asciidoctorPlus |PreProc +|asciidoctorPageBreak |PreProc +|asciidoctorCallout |Float +|asciidoctorCalloutDesc |String +|asciidoctorListingBlock |Comment +|asciidoctorLiteralBlock |Comment +|asciidoctorFile |Underlined +|asciidoctorUrl |Underlined +|asciidoctorEmail |Underlined +|asciidoctorUrlAuto |Underlined +|asciidoctorEmailAuto |Underlined +|asciidoctorUrlDescription |String +|asciidoctorLink |Underlined +|asciidoctorAnchor |Underlined +|asciidoctorAttribute |Identifier +|asciidoctorCode |Constant +|asciidoctorOption |PreProc +|asciidoctorBlock |PreProc +|asciidoctorBlockOptions |PreProc +|asciidoctorTableSep |PreProc +|asciidoctorTableCell |PreProc +|asciidoctorTableEmbed |PreProc +|asciidoctorInlineAnchor |PreProc +|asciidoctorMacro |Macro +|asciidoctorIndexTerm |Macro +|asciidoctorBold |gui=bold cterm=bold +|asciidoctorItalic |gui=italic cterm=italic +|asciidoctorBoldItalic |gui=bold,italic cterm=bold,italic +|=== + +If you want to change highlight yourself for existing colorscheme without +touching it, add the following to you vimrc: + +[source,vim] +-------- +func! AsciidoctorHighlight() + " Highlight asciidoctor syntax with colors you like. + " For solarized8 colorscheme + if get(g:, "colors_name", "default") == "solarized8" + hi asciidoctorTitle guifg=#ff0000 gui=bold ctermfg=red cterm=bold + hi asciidoctorOption guifg=#00ff00 ctermfg=green + hi link asciidoctorH1 Directory + elseif get(g:, "colors_name", "default") == "default" + hi link asciidoctorIndented PreProc + endif +endfunc +augroup ASCIIDOCTOR_COLORS | au! + au Colorscheme * call AsciidoctorHighlight() + au BufNew,BufRead *.adoc call AsciidoctorHighlight() +augroup end +-------- + + +== Limitations + +=== Indented text is highlighted for all table cells + +Works for all table cells, although should only be applied to `a|` cells. + +[source] +-------- +[cols=".^1,.^2", options="header"] +|=== +| header1 +| header1 + +| Regular table cell + + Indented text is highlighted as indented + which is kind of incorrect + +a| Asciidoctor cell + + Indented text is highlighted as indented + which is correct + +|=== +-------- + + +=== Setext-style headers highlighting + +Proper setext-style highlighting should have equal numbers of underlined chars: + +---- +This Header level 1 +=================== + +This Header level 2 +------------------- + +This Header level 3 +~~~~~~~~~~~~~~~~~~~ + +This Header level 4 +^^^^^^^^^^^^^^^^^^^ + +This Header level 5 ++++++++++++++++++++ + +---- + +Vim can't do it so setext-style headers are highlighted no matter if there is +matched underline or not. + +---- +This Header level 1 +====================== + +This Header level 2 +----- + +This Header level 3 +~~~~~~~~~~~~~~~~ + +This Header level 4 +^^^^^^^^^^^^^^^^^^^^ + +This Header level 5 ++++++++++++++ + +---- + +You can also use following mappings: + +[source,vim] +-------- +" Underline current line +func! s:underline(chars) + let nextnr = line('.') + 1 + let underline = repeat(a:chars[0], strchars(getline('.'))) + if index(a:chars, trim(getline(nextnr))[0]) != -1 + call setline(nextnr, underline) + else + call append('.', underline) + endif +endfunc +nnoremap - :call underline(['-', '=', '~', '^', '+']) +nnoremap = :call underline(['=', '-', '~', '^', '+']) +nnoremap ~ :call underline(['~', '=', '-', '^', '+']) +nnoremap ^ :call underline(['^', '=', '-', '~', '+']) +nnoremap + :call underline(['+', '=', '-', '~', '^']) +-------- + + +=== URL Conceal + +Links with additional attributes are not concealed to description: + + https://discuss.asciidoctor.org[Discuss Asciidoctor,role=external,window=_blank] + https://discuss.asciidoctor.org[Discuss Asciidoctor^] + https://example.org["Google, Yahoo, Bing^",role=teal] + +With `set conceallevel=3` looks like: + + Discuss Asciidoctor,role=external,window=_blank + Discuss Asciidoctor^ + "Google, Yahoo, Bing^",role=teal + +Although it should look like: + + Discuss Asciidoctor + Discuss Asciidoctor + Google, Yahoo, Bing diff --git a/pack/acp/start/vim-asciidoctor/autoload/asciidoctor.vim b/pack/acp/start/vim-asciidoctor/autoload/asciidoctor.vim new file mode 100644 index 0000000..3756cdf --- /dev/null +++ b/pack/acp/start/vim-asciidoctor/autoload/asciidoctor.vim @@ -0,0 +1,391 @@ +" Maintainer: Maxim Kim (habamax@gmail.com) +" vim: et sw=4 + +if exists("g:loaded_asciidoctor_autoload") + finish +endif +let g:loaded_asciidoctor_autoload = 1 + + +"" Trim string +" Unfortunately built-in trim is not widely available yet +" return trimmed string +func! s:trim(str) abort + return substitute(a:str, '^\s*\|\s*$', '', 'g') +endfunc + +"" Return name of an image directory. +" +" It is either +" * '' (empty) +" * or value of :imagesdir: (stated at the top of the buffer, first 50 lines) +func! s:asciidoctorImagesDir() + let imagesdirs = filter(getline(1, 50), {k,v -> v =~ '^:imagesdir:.*'}) + if len(imagesdirs)>0 + return matchstr(imagesdirs[0], ':imagesdir:\s*\zs\f\+\ze$').'/' + else + return '' + endif +endfunc + +"" Return full path of an image +" +" It is 'current buffer path'/:imagesdir: +func! s:asciidoctorImagesPath() + return expand('%:p:h').'/'.s:asciidoctorImagesDir() +endfunc + +"" Return list of generated images for the current buffer. +" +" If buffer name is `document.adoc`, search in a given path for the file +" pattern `g:asciidoctor_img_paste_pattern`. +" +" Example: +" `img_document_1.png` +" `img_document_2.png` +func! s:asciidoctorListImages(path) + let rxpattern = '\V\[\\/]'.printf(g:asciidoctor_img_paste_pattern, expand('%:t:r'), '\d\+').'\$' + let images = globpath(a:path, '*.png', 1, 1) + return filter(images, {k,v -> v =~ rxpattern}) +endfunc + +"" Return index of the image file name +" +" `img_document_23.png` --> 23 +" `img_document.png` --> 0 +" `any other` --> 0 +func! s:asciidoctorExtractIndex(filename) + let rxpattern = '\V\[\\/]'.printf(g:asciidoctor_img_paste_pattern, expand('%:t:r'), '\zs\d\+\ze').'\$' + let index = matchstr(a:filename, rxpattern) + if index == '' + let index = '0' + endif + return str2nr(index) +endfunc + +"" Return new image name +" +" Having the list of images in a give path: +" `img_document_1.png` +" `img_document_2.png` +" ... +" Generate a new image name: +" `img_document_3.png +func! s:asciidoctorGenerateImageName(path) + let index = max(map(s:asciidoctorListImages(a:path), + \{k,v -> s:asciidoctorExtractIndex(v)})) + 1 + return printf(g:asciidoctor_img_paste_pattern, expand('%:t:r'), index) +endfunc + +"" Paste image from the clipboard. +" +" * Save image as png file to the :imagesdir: +" * Insert `image::link.png[]` at cursor position +func! asciidoctor#pasteImage() abort + let path = s:asciidoctorImagesPath() + if !isdirectory(path) + echoerr 'Image directory '.path.' doesn''t exist!' + return + endif + + let fname = s:asciidoctorGenerateImageName(path) + + let cmd = printf(g:asciidoctor_img_paste_command, path, fname) + + let res = system(cmd) + if v:shell_error + echohl Error | echomsg s:trim(res) | echohl None + return + endif + + let sav_reg_x = @x + let @x = printf('image::%s[]', fname) + put x + let @x = sav_reg_x +endfunc + + +"" Check header (20 lines) of the file for default source language +func! asciidoctor#detect_source_language() + for line in getline(1, 20) + let m = matchlist(line, '^:source-language: \(.*\)$') + if !empty(m) + let src_lang = s:trim(m[1]) + if src_lang != '' + let b:asciidoctor_source_language = s:trim(m[1]) + break + endif + endif + endfor +endfunc + +"" Refresh highlighting for default source language. +" +" Should be called on buffer write. +func! asciidoctor#refresh_source_language_hl() + let cur_b_source_language = get(b:, "asciidoctor_source_language", "NONE") + + call asciidoctor#detect_source_language() + + if cur_b_source_language != get(b:, "asciidoctor_source_language", "NONE") + syn enable + endif +endfunc + +"" Test bibliography completefunc +func! asciidoctor#complete_bibliography(findstart, base) + if a:findstart + let prefix = strpart(getline('.'), 0, col('.')-1) + let m = match(prefix, 'cite\%(np\)\?:\[\zs[[:alnum:]]*$') + if m != -1 + return m + else + return -3 + endif + else + " return filtered list of + " [{"word": "citation1", "menu": "article"}, {"word": "citation2", "menu": "book"}, ...] + " if "word" matches with a:base + return filter( + \ map(s:read_all_bibtex(), {_, val -> {'word': matchstr(val, '{\zs.\{-}\ze,'), 'menu': matchstr(val, '@\zs.\{-}\ze{')}}), + \ {_, val -> val['word'] =~ '^'.a:base.'.*'}) + endif +endfunc + +"" Read bibtex file +" +" Return list of citations +func! s:read_bibtex(file) + let citation_types = '@book\|@article\|@booklet\|@conference\|@inbook' + \.'\|@incollection\|@inproceedings\|@manual\|@mastersthesis' + \.'\|@misc\|@phdthesis\|@proceedings\|@techreport\|@unpublished' + let citations = filter(readfile(a:file), {_, val -> val =~ citation_types}) + + return citations +endfunc + +"" Read all bibtex files from a current file's path +" +" Return list of citations +func! s:read_all_bibtex() + let citations = [] + for bibfile in globpath(expand('%:p:h'), '*.bib', 0, 1) + call extend(citations, s:read_bibtex(bibfile)) + endfor + return citations +endfunc + + + +"" Check header (30 lines) of the file for theme name +" return theme name +func! asciidoctor#detect_pdf_theme() + let result = '' + for line in getline(1, 30) + let m = matchlist(line, '^:pdf-theme: \(.*\)$') + if !empty(m) + let result = s:trim(m[1]) + if result != '' + return result + endif + endif + endfor +endfunc + + +"" asciidoctor header text object +" * inner object is the text between prev section header(excluded) and the next +" section of the same level(excluded) or end of file. +" Except for `= Title`: text between title(excluded) and first `== Section`(excluded) or end of file. +" * an object is the text between prev section header(included) and the next section of the same +" level(excluded) or end of file. +" Except for `= Title`: text between title(included) and first `== Section`(excluded) or end of file. +func! asciidoctor#header_textobj(inner) abort + let lnum_start = search('^=\+\s\+[^[:space:]=]', "ncbW") + if lnum_start + let lvlheader = matchstr(getline(lnum_start), '^=\+') + let lnum_end = search('^=\{2,'..len(lvlheader)..'}\s', "nW") + if !lnum_end + let lnum_end = search('\%$', 'cnW') + else + let lnum_end -= 1 + endif + if a:inner && getline(lnum_start + 1) !~ '^=\+\s\+[^[:space:]=]' + let lnum_start += 1 + endif + + exe lnum_end + normal! V + exe lnum_start + endif +endfunc + + + +"" asciidoctor delimited block text object +" * inner object is the text between delimiters +" * an object is the text between between delimiters plus delimiters included. +func! asciidoctor#delimited_block_textobj(inner) abort + let lnum_start = search('^\(\(-\{2,}\)\|\(=\{4,}\)\|\(_\{4,}\)\|\(\*\{4,}\)\|\(\.\{4,}\)\)\s*$', "ncbW") + if lnum_start + let delim = getline(lnum_start) + let lnum_end = search('^'..delim[0]..'\{'..len(delim)..'}\s*$', "nW") + if lnum_end + if a:inner + let lnum_start += 1 + let lnum_end -= 1 + endif + exe lnum_end + normal! V + exe lnum_start + endif + endif +endfunc + + + +"" Return Windows path from WSL +func! s:wsl_to_windows_path(path) abort + if !exists("$WSLENV") + return a:path + endif + + if !executable('wslpath') + return a:path + endif + + let res = systemlist('wslpath -w ' . a:path) + if !empty(res) + return res[0] + else + return a:path + endif +endfunc + + +func! asciidoctor#open_file(filename) + if filereadable(a:filename) + if exists("$WSLENV") + exe g:asciidoctor_opener . ' ' + \ . shellescape(s:wsl_to_windows_path(a:filename)) + else + exe g:asciidoctor_opener . ' ' . shellescape(a:filename) + endif + else + echom a:filename . " doesn't exist!" + endif +endfunc + + +"" to open URLs/files with gx/gf mappings +func! asciidoctor#open_url(...) abort + let cmd = get(a:, 1, g:asciidoctor_opener) + + " by default check WORD under cursor + let word = expand("") + + " But if cursor is surrounded by [ ], like for http://ya.ru[yandex search] + " take a cWORD from first char before [ + let save_cursor = getcurpos() + let line = getline('.') + if searchpair('\[', '', '\]', 'b', '', line('.')) + let word = expand("") + endif + call setpos('.', save_cursor) + + " Check asciidoc URL http://bla-bla.com[desc + let aURL = matchstr(word, '\%(\%(http\|ftp\|irc\)s\?\|file\)://\S\+\ze\[') + if aURL != "" + exe cmd . ' "' . escape(aURL, '#%!') . '"' + return + endif + + " Check asciidoc link link:file.txt[desc + let aLNK = matchstr(word, 'link:/*\zs\S\+\ze\[') + if aLNK != "" + execute "lcd ". expand("%:p:h") + exe cmd . ' ' . fnameescape(fnamemodify(aLNK, ":p")) + lcd - + return + endif + + " Check asciidoc URL http://bla-bla.com + let URL = matchstr(word, '\%(\%(http\|ftp\|irc\)s\?\|file\)://\S\+') + if URL != "" + exe cmd . ' "' . escape(URL, '#%!') . '"' + return + endif + + " probably path? + if word =~ '^[~.$].*' + exe cmd . ' ' . expand(word) + return + endif + + try + exe "normal! gf" + catch /E447/ + echohl Error + echomsg matchstr(v:exception, 'Vim(normal):\zs.*$') + echohl None + endtry +endfunc + + +"" Promote sections including subsections +"" * Doesn't check for the real syntax sections (might fail with "pseudo" sections +"" embedded into source blocks) +"" * Doesn't work for underlined sections. +func! asciidoctor#promote_section() abort + let save = winsaveview() + try + if search('^=\+\s\+\S', 'cbW') + let lvl = len(matchstr(getline('.'), '^=\+')) + if lvl > 5 + return + endif + let next_lvl = lvl + 1 + while lvl < next_lvl + call setline('.', '='..getline('.')) + if search('^=\{'..(lvl + 1)..',}\s\+\S', 'W') + let next_lvl = len(matchstr(getline('.'), '^=\+')) + else + break + endif + endwhile + endif + finally + call winrestview(save) + endtry +endfunc + + +"" Demote sections including subsections +"" * Doesn't check for the real syntax sections (might fail with "pseudo" sections +"" embedded into source blocks) +"" * Doesn't work for underlined sections. +func! asciidoctor#demote_section() abort + let save = winsaveview() + try + if search('^=\+\s\+\S', 'cbW') + let lvl = len(matchstr(getline('.'), '^=\+')) + let parent_section = search('^=\{1,'..max([(lvl - 1), 1])..'}\s\+\S', 'nbW') + let parent_lvl = len(matchstr(getline(parent_section), '^=\+')) + let next_lvl = lvl + 1 + while lvl < next_lvl && (lvl > parent_lvl+1) + if lvl == 1 + break + else + call setline('.', getline('.')[1:]) + endif + if search('^=\{'..(lvl + 1)..',}\s\+\S', 'W') + let next_lvl = len(matchstr(getline('.'), '^=\+')) + else + break + endif + endwhile + endif + finally + call winrestview(save) + endtry +endfunc diff --git a/pack/acp/start/vim-asciidoctor/compiler/asciidoctor2docx.vim b/pack/acp/start/vim-asciidoctor/compiler/asciidoctor2docx.vim new file mode 100644 index 0000000..e707d8e --- /dev/null +++ b/pack/acp/start/vim-asciidoctor/compiler/asciidoctor2docx.vim @@ -0,0 +1,74 @@ +" Vim compiler file +" Compiler: Asciidoctor 2 DOCX using docbook intermediate format and pandoc +" Maintainer: Maxim Kim (habamax@gmail.com) +" vim: et sw=4 + +if exists("current_compiler") + finish +endif +let current_compiler = "Asciidoctor2DOCX" +let s:keepcpo= &cpo +set cpo&vim + +if get(g:, 'asciidoctor_extensions', []) == [] + let s:extensions = "" +else + let s:extensions = "-r ".join(g:asciidoctor_extensions, ' -r ') +endif + +let s:asciidoctor_executable = get(g:, 'asciidoctor_executable', 'asciidoctor') + +let s:asciidoctor_pandoc_executable = get(g:, 'asciidoctor_pandoc_executable', 'pandoc') + +let s:asciidoctor_pandoc_data_dir = get(g:, 'asciidoctor_pandoc_data_dir', '') +if s:asciidoctor_pandoc_data_dir != '' + let data_dir_param = " --data-dir=" . shellescape(fnamemodify(s:asciidoctor_pandoc_data_dir, ':p:h')) +else + let data_dir_param = '' +endif + +let s:asciidoctor_pandoc_reference_doc = get(g:, 'asciidoctor_pandoc_reference_doc', '') +if s:asciidoctor_pandoc_reference_doc != '' + let reference_doc_param = ' --reference-doc=' . s:asciidoctor_pandoc_reference_doc +else + " search for the theme name in first 30 lines of the file + " generate reference doc name as `data-dir path + theme-reference.docx` + " test if file exists and set the name, empty string otherwise + let theme_name = asciidoctor#detect_pdf_theme() + let file_name = theme_name . '-reference.docx' + let full_path = expand(s:asciidoctor_pandoc_data_dir . '/' . file_name, 1) + + if glob(full_path, 1) != '' + let reference_doc_param = ' --reference-doc=' . shellescape(full_path) + else + let reference_doc_param = '' + endif + +endif + +let s:asciidoctor_pandoc_other_params = get(g:, 'asciidoctor_pandoc_other_params', '') +if s:asciidoctor_pandoc_other_params != '' + let other_params = ' ' . s:asciidoctor_pandoc_other_params +else + let other_params = '' +endif + +let s:make_docbook = s:asciidoctor_executable . " " . s:extensions + \. " -a docdate=" . strftime("%Y-%m-%d") + \. " -a doctime=" . strftime("%T") + \. " -b docbook" + \. " " . shellescape(expand("%:p")) + +let s:make_docx = s:asciidoctor_pandoc_executable + \. other_params + \. data_dir_param + \. reference_doc_param + \. " -f docbook -t docx" + \. " -o " . shellescape(expand("%:p:r") . ".docx") + \. " " . shellescape(expand("%:p:r") . ".xml") + +let s:cd = "cd ".shellescape(expand("%:p:h")) +let &l:makeprg = s:make_docbook . " && " . s:cd ." && ". s:make_docx + +let &cpo = s:keepcpo +unlet s:keepcpo diff --git a/pack/acp/start/vim-asciidoctor/compiler/asciidoctor2html.vim b/pack/acp/start/vim-asciidoctor/compiler/asciidoctor2html.vim new file mode 100644 index 0000000..d7859a8 --- /dev/null +++ b/pack/acp/start/vim-asciidoctor/compiler/asciidoctor2html.vim @@ -0,0 +1,43 @@ +" Vim compiler file +" Compiler: Asciidoctor2HTML +" Maintainer: Maxim Kim (habamax@gmail.com) +" vim: et sw=4 + +if exists("current_compiler") + finish +endif +let current_compiler = "Asciidoctor2HTML" +let s:keepcpo= &cpo +set cpo&vim + +if get(g:, 'asciidoctor_extensions', []) == [] + let s:extensions = "" +else + let s:extensions = "-r ".join(g:asciidoctor_extensions, ' -r ') +endif + +if get(g:, 'asciidoctor_css_path', '') == '' + let s:css_path = "" +else + let s:css_path = '-a stylesdir='.shellescape(fnamemodify(g:asciidoctor_css_path, ":p:h")) +endif + +if get(g:, 'asciidoctor_css', '') == '' + let s:css_name = "" +else + let s:css_name = '-a stylesheet='.shellescape(g:asciidoctor_css) +endif + +let s:asciidoctor_executable = get(g:, 'asciidoctor_executable', 'asciidoctor') + +let s:filename = shellescape(get(g:, 'asciidoctor_use_fullpath', v:true) ? expand("%:p") : expand("%:t")) + +let &l:makeprg = s:asciidoctor_executable . " " . s:extensions + \. " -a docdate=".strftime("%Y-%m-%d") + \. " -a doctime=".strftime("%T") . " " + \. s:css_path . " " + \. s:css_name . " " + \. s:filename + +let &cpo = s:keepcpo +unlet s:keepcpo diff --git a/pack/acp/start/vim-asciidoctor/compiler/asciidoctor2pdf.vim b/pack/acp/start/vim-asciidoctor/compiler/asciidoctor2pdf.vim new file mode 100644 index 0000000..a5c7cf6 --- /dev/null +++ b/pack/acp/start/vim-asciidoctor/compiler/asciidoctor2pdf.vim @@ -0,0 +1,57 @@ +" Vim compiler file +" Compiler: Asciidoctor2PDF +" Maintainer: Maxim Kim (habamax@gmail.com) +" vim: et sw=4 + +if exists("current_compiler") + finish +endif +let current_compiler = "Asciidoctor2PDF" +let s:keepcpo= &cpo +set cpo&vim + +"" check first non-empty lines of the asciidoctor buffer if theme +"" is set up in file options +"" if not, don't provide themes and styles path to compiler to avoid errors +let s:use_pdf_paths = 0 +for line in getline(1, 50) + if line =~ "^\s*$" + break + endif + if line =~ "^:pdf-theme:.*$" + let s:use_pdf_paths = 1 + break + endif +endfor + +if get(g:, 'asciidoctor_pdf_themes_path', '') == '' || !get(s:, 'use_pdf_paths', 0) + let s:pdf_themes_path = "" +else + let s:pdf_themes_path = '-a pdf-themesdir='.shellescape(fnamemodify(g:asciidoctor_pdf_themes_path, ':p:h')) +endif + +if get(g:, 'asciidoctor_pdf_fonts_path', '') == '' || !get(s:, 'use_pdf_paths', 0) + let s:pdf_fonts_path = "" +else + let s:pdf_fonts_path = '-a pdf-fontsdir='.shellescape(fnamemodify(g:asciidoctor_pdf_fonts_path, ':p:h')) +endif + +if get(g:, 'asciidoctor_pdf_extensions', []) == [] + let s:extensions = "" +else + let s:extensions = "-r ".join(g:asciidoctor_pdf_extensions, ' -r ') +endif + +let s:asciidoctor_pdf_executable = get(g:, 'asciidoctor_pdf_executable', 'asciidoctor-pdf') + +let s:filename = shellescape(get(g:, 'asciidoctor_use_fullpath', v:true) ? expand("%:p") : expand("%:t")) + +let &l:makeprg = s:asciidoctor_pdf_executable . " " . s:extensions + \. " -a docdate=" . strftime("%Y-%m-%d") + \. " -a doctime=" . strftime("%H:%M:%S") . " " + \. s:pdf_themes_path . " " + \. s:pdf_fonts_path . " " + \. s:filename + +let &cpo = s:keepcpo +unlet s:keepcpo diff --git a/pack/acp/start/vim-asciidoctor/doc/asciidoctor.txt b/pack/acp/start/vim-asciidoctor/doc/asciidoctor.txt new file mode 100644 index 0000000..bdb1669 --- /dev/null +++ b/pack/acp/start/vim-asciidoctor/doc/asciidoctor.txt @@ -0,0 +1,462 @@ +*asciidoctor.txt* Vim :heart: Asciidoctor + +Author: Maxim Kim +URL: https://github.com/habamax/vim-asciidoctor +License: MIT + + +INTRODUCTION *asciidoctor* + + +Vim has syntax highlighting for asciidoc out of the box. And it is/was really +slow for me, probably because it tries to be very smart about syntax. + +This plugin: + + - has different syntax highlighting; + - is way faster (your vim lags less :) ); + - has folding; + - has commands to compile documents (html, pdf, docx). + + +SETTINGS *asciidoctor-settings* + +It should work out of the box (at least it was the intention). But sometimes +one needs settings to set. + + +*g:asciidoctor_executable* What to use for HTML. + Default: asciidoctor + Example: > + + let g:asciidoctor_executable = '~/projects/asciidoctor/bin/asciidoctor' + + +*g:asciidoctor_extensions* What extensions to use with HTML. + Default: [] + Example: > + + let g:asciidoctor_extensions = ['asciidoctor-diagram', 'asciidoctor-rouge'] + + +*g:asciidoctor_css_path* Path to custom CSS to use with HTML. + Default: '' + Example: > + + let g:asciidoctor_css_path = '~/docs/ascidoctor-themes/' + + +*g:asciidoctor_css* Custom CSS file name to use with HTML. + Default: '' + Example: > + + let g:asciidoctor_css = 'mytheme.css' + + +*g:asciidoctor_pdf_executable* What to use for PDF. + Default: asciidoctor-pdf + Example: > + + let g:asciidoctor_pdf_executable = '~/asciidoctor-pdf/bin/asciidoctor-pdf' + + +*g:asciidoctor_use_fullpath* Use full path when pass a file for a + compilation. + Default: v:true + Example: > + + let g:asciidoctor_use_fullpath = v:false + +Might be useful if for some reason file passed for a compilation should not +have full path. For example asciidoctor-pdf in docker might use the following +setup to be able to create PDFs: > + + let g:asciidoctor_pdf_executable = 'docker run --rm -v $(pwd):/documents/ asciidoctor/docker-asciidoctor asciidoctor-pdf' + +Note that you might need to have proper current working directory. +Available for |:Asciidoctor2HTML| and |:Asciidoctor2PDF| commands only. + + +*g:asciidoctor_pdf_extensions* What extensions to use with PDF. + Default: [] + Example: > + + let g:asciidoctor_pdf_extensions = ['asciidoctor-diagram'] + + +*g:asciidoctor_pdf_themes_path* Path to custom themes. + Default: '' + Example: > + + let g:asciidoctor_pdf_themes_path = '~/docs/ascidoctor-themes/' + + +*g:asciidoctor_pdf_fonts_path* Path to fonts used in themes. + Default: '' + Example: > + + let g:asciidoctor_pdf_fonts_path = '~/docs/fonts/' + + +*g:asciidoctor_pandoc_executable* What to use for DOCX. The process is to + convert ADOC to DOCBOOK with + |g:asciidoctor_executable| and then + DOCBOOK to DOCX with pandoc. + Default: 'pandoc' + Example: > + + let g:asciidoctor_pandoc_executable = '~/bin/pandoc' + + +*g:asciidoctor_pandoc_data_dir* Set --data-dir for pandoc. + Default: '' + Example: > + + let g:asciidoctor_pandoc_data_dir = '~/docs/.pandoc' + + +*g:asciidoctor_pandoc_reference_doc* Set --reference-doc for pandoc. + What docx file to use as a reference + document (use styles defined there) + Default: '' + Example: > + + let g:asciidoctor_pandoc_referenc_doc = 'custom-reference.docx' + + +*g:asciidoctor_pandoc_other_params* Set additional parameteres for pandoc. + Default: '' + Example: > + + let g:asciidoctor_pandoc_other_params = '--toc' + + +*g:asciidoctor_folding* Fold sections (headers). + Default: 0 + Example: > + + let g:asciidoctor_folding = 1 + +if enabled all sections would be foldable. Title has the same fold level as +sections level 1, higher level sections would have higher fold level (folded +under section level-1): > + + = Title + == Section 1 + === Section 2 + === Section 2 + == Section 1 + +When folded: > + + = Title ----------------------------------- + == Section 1 ------------------------------ + == Section 1 ------------------------------ + + +*g:asciidoctor_foldnested* Fold nested sections. + Default: 1 + Example: > + + let g:asciidoctor_foldnested = 0 + +if disabled all sections would have the same foldlevel (=1) no matter what +section level is. + +Then > + + = Title + hello world + == Section 1 + hello world + === Section 2 + hello world + === Section 2 + hello world + == Section 1 + hello world + +Would be folded to: > + + = Title ----------------------------------- + == Section 1 ------------------------------ + === Section 2 ----------------------------- + === Section 2 ----------------------------- + == Section 1 ------------------------------ + + +*g:asciidoctor_foldtitle_as_h1* Fold title as level 1 sections. + Default: 1 + + Example: > + + let g:asciidoctor_foldtitle_as_h1 = 0 + +When on, following > + + = Title + hello world + == Section 1 + hello world + === Section 2 + hello world + +would be folded to: > + + = Title ----------------------------------- + == Section 1 ------------------------------ + +Otherwise to > + + = Title ----------------------------------- + + +*g:asciidoctor_syntax_indented* Enable highlight for indented blocks. + Default: 1 + Example: > + + let g:asciidoctor_syntax_indented = 0 + + +*g:asciidoctor_syntax_conceal* Enable concealable syntax. + Currently only bold, italic, bolditaclic, + code and links are concealed. + Default: 0 + Example: > + + let g:asciidoctor_syntax_conceal = 1 + +NOTE: It doesn't automatically set conceallevel. + + +*g:asciidoctor_fold_options* Fold options (usually under the title). + Default: 0 + Example: > + + let g:asciidoctor_fold_options = 1 + +if enabled asciidoctor options would be foldable: > + + = Title + :author: Maxim Kim + :experimental: + :toc: left + :toclevels: 3 + :icons: font + :autofit-option: + :source-highlighter: rouge + :rouge-style: github + :source-linenums-option: + :revdate: 2018-11-19 + :imagesdir: images + +When folded: > + + = Title + :author: Maxim Kim ------------------------ + + +*g:asciidoctor_fenced_languages* Highlight syntax of source blocks + Default: [] + Example: > + + let g:asciidoctor_fenced_languages = ['python', 'c', 'javascript'] + +Then in your asciidoctor document: > + + [source,python] + ---- + def hello(): + print("hello world") + ---- + +should be highlighted with python syntax. + + +*g:asciidoctor_img_paste_command* Command to save clipboard image to a + file. + Default: 'gm convert clipboard: %s%s' + Where first %s is a path, second %s is an + image file name. + Example: > + + " for OSX + let g:asciidoctor_img_paste_command = 'pngpaste %s%s' + + " for linux + let g:asciidoctor_img_paste_command = 'xclip -selection clipboard -t image/png -o > %s%s' + + +*g:asciidoctor_img_paste_pattern* Pattern of the saved clipboard image file. + Default: 'img_%s_%s.png' + Where first %s is a document base name, + second %s is an image number. + Example: > + + let g:asciidoctor_img_paste_pattern = '%s_img_%s.png' + +So if you edit 'README.adoc` document and paste a clipboard image there it +would have name 'README_img_1.png'. Next one would have name +'README_img_2.png' etc. + + +*g:asciidoctor_opener* Shell command to open asciidoctor files. + Used in |:AsciidoctorOpenRAW|, + |:AsciidoctorOpenPDF|, + |:AsciidoctorOpenHTML| and + |:AsciidoctorOpenDOCX| commands. + Default Windows: ':!start' + Default Linux: ':!xdg-open' + Default OSX: ':!open' + Example: > + + let g:asciidoctor_opener = ':!firefox' + + + + +COMMANDS *asciidoctor-commands* + +These commands are local to the asciidoctor buffers. + + + *:Asciidoctor2HTML* +:Asciidoctor2HTML Convert current file to HTML. + Uses |g:asciidoctor_executable|. + + + *:Asciidoctor2PDF* +:Asciidoctor2PDF Convert current file to PDF. + Uses |g:asciidoctor_pdf_executable|. + + + *:Asciidoctor2DOCX* +:Asciidoctor2DOCX Convert current file to DOCX. + Uses combination of |g:asciidoctor_executable| to + generate docbook file and + |g:asciidoctor_pandoc_executable| to generate + result DOCX file. + + + *:AsciidoctorOpenRAW* +:AsciidoctorOpenRAW Open current file in Web browser. Chrome and + Firefox have extension to render barebone .adoc + files. Uses |g:asciidoctor_opener|. + + + *:AsciidoctorOpenHTML* +:AsciidoctorOpenHTML Open HTML file of the current file. It should exist + (created first with |:Asciidoctor2HTML| command). + Uses |g:asciidoctor_opener|. + + + *:AsciidoctorOpenPDF* +:AsciidoctorOpenPDF Open PDF file of the current file. It should exist + (created first with |:Asciidoctor2PDF| command). + Uses |g:asciidoctor_opener|. + + + *:AsciidoctorOpenDOCX* +:AsciidoctorOpenDOCX Open DOCX file of the current file. It should exist + (created first with |:Asciidoctor2DOCX| command). + Uses |g:asciidoctor_opener|. + + + *:AsciidoctorPasteImage* +:AsciidoctorPasteImage "Paste" image from clipboard into buffer. + 1. Image file name is generated according to + |g:asciidoctor_img_paste_pattern|. + 2. Clipboard image is saved in :imagesdir: + directory (asciidoctor option defined in a + document) or in the directory of the buffer. + 3. Image file name is inserted into the buffer. + 4. External dependency should be set up, see + |g:asciidoctor_img_paste_command|. + + + +MAPPINGS *asciidoctor-mappings* + +*(AsciidoctorFold)* Fold sections in a special way. + +If +* no count is provided, toggle current fold; +* count is n, open folds up to foldlevel n. + + +*(AsciidoctorPromoteSection)* Promote section including subsections. + +This > + + = Title + [cursor] + == Section 1 + === Section 2 + == Section 3 + +Would become > + + == Title + [cursor] + === Section 1 + ==== Section 2 + === Section 3 + +*(AsciidoctorDemoteSection)* Demote section including subsections. + +This > + + == Title + [cursor] + === Section 1 + ==== Section 2 + === Section 3 + +Would become > + + = Title + [cursor] + == Section 1 + === Section 2 + == Section 3 + + + +DEFAULT MAPPINGS + +There are no default mappings. You can setup yours with: > + + + " Function to create buffer local mappings + fun! AsciidoctorMappings() + nnoremap oo :AsciidoctorOpenRAW + nnoremap op :AsciidoctorOpenPDF + nnoremap oh :AsciidoctorOpenHTML + nnoremap ox :AsciidoctorOpenDOCX + nnoremap ch :Asciidoctor2HTML + nnoremap cp :Asciidoctor2PDF + nnoremap cx :Asciidoctor2DOCX + nmap (AsciidoctorFold) + endfun + + " Call AsciidoctorMappings for all `*.adoc` and `*.asciidoc` files + augroup asciidoctor + au! + au BufEnter *.adoc,*.asciidoc call AsciidoctorMappings() + augroup END + + +BIBLIOGRAPHY COMPLETION *asciidoctor-completion* + +There is initial support for bibtex citation added. + +Usage: + +Place your bibtex files next to your asciidoctor file (to the same path). Then +completion would be available for: > + + cite:[cit + citenp:[cit + + + vim:tw=78:et:ft=help:norl: diff --git a/pack/acp/start/vim-asciidoctor/ftdetect/asciidoctor.vim b/pack/acp/start/vim-asciidoctor/ftdetect/asciidoctor.vim new file mode 100644 index 0000000..32afa43 --- /dev/null +++ b/pack/acp/start/vim-asciidoctor/ftdetect/asciidoctor.vim @@ -0,0 +1 @@ +autocmd BufNewFile,BufRead *.adoc,*.asciidoc set ft=asciidoctor diff --git a/pack/acp/start/vim-asciidoctor/ftplugin/asciidoctor.vim b/pack/acp/start/vim-asciidoctor/ftplugin/asciidoctor.vim new file mode 100644 index 0000000..55e1f99 --- /dev/null +++ b/pack/acp/start/vim-asciidoctor/ftplugin/asciidoctor.vim @@ -0,0 +1,305 @@ +" Vim filetype plugin +" Language: asciidoctor +" Maintainer: Maxim Kim +" Filenames: *.adoc +" vim: et sw=4 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:undo_opts = "setl cms< com< fo< flp< inex< efm< cfu< fde< fdm<" +let s:undo_cmds = "| delcommand Asciidoctor2PDF" + \. "| delcommand Asciidoctor2HTML" + \. "| delcommand Asciidoctor2DOCX" + \. "| delcommand AsciidoctorOpenRAW" + \. "| delcommand AsciidoctorOpenPDF" + \. "| delcommand AsciidoctorOpenHTML" + \. "| delcommand AsciidoctorOpenDOCX" + \. "| delcommand AsciidoctorPasteImage" +let s:undo_maps = "| execute 'nunmap ]]'" + \. "| execute 'nunmap [['" + \. "| execute 'xunmap ]]'" + \. "| execute 'xunmap [['" + \. "| execute 'ounmap ih'" + \. "| execute 'ounmap ah'" + \. "| execute 'xunmap ih'" + \. "| execute 'xunmap ah'" + \. "| execute 'ounmap il'" + \. "| execute 'ounmap al'" + \. "| execute 'xunmap il'" + \. "| execute 'xunmap al'" + \. "| execute 'nunmap gx'" + \. "| execute 'nunmap gf'" + \. "| execute 'nunmap (AsciidoctorFold)'" + \. "| execute 'nunmap (AsciidoctorSectionPromote)'" + \. "| execute 'nunmap (AsciidoctorSectionDemote)'" +let s:undo_vars = "| unlet! b:commentary_startofline" + +if exists('b:undo_ftplugin') + let b:undo_ftplugin .= "|" . s:undo_opts . s:undo_cmds . s:undo_maps . s:undo_vars +else + let b:undo_ftplugin = s:undo_opts . s:undo_cmds . s:undo_maps . s:undo_vars +endif + + +" see https://github.com/asciidoctor/asciidoctor-pdf/issues/1273 +setlocal errorformat=asciidoctor:\ ERROR:\ %f:\ line\ %l:\ %m + +" gf to open include::file.ext[] and link:file.ext[] files +setlocal includeexpr=substitute(v:fname,'\\(link:\\\|include::\\)\\(.\\{-}\\)\\[.*','\\2','g') +setlocal comments= +setlocal commentstring=//\ %s +" vim-commentary plugin setup +let b:commentary_startofline = 1 + +setlocal formatoptions+=cqn +setlocal formatlistpat=^\\s* +setlocal formatlistpat+=[ +setlocal formatlistpat+=\\[({]\\? +setlocal formatlistpat+=\\( +setlocal formatlistpat+=[0-9]\\+ +setlocal formatlistpat+=\\\| +setlocal formatlistpat+=[a-zA-Z] +setlocal formatlistpat+=\\) +setlocal formatlistpat+=[\\]:.)} +setlocal formatlistpat+=] +setlocal formatlistpat+=\\s\\+ +setlocal formatlistpat+=\\\| +setlocal formatlistpat+=^\\s*-\\s\\+ +setlocal formatlistpat+=\\\| +setlocal formatlistpat+=^\\s*[*]\\+\\s\\+ +setlocal formatlistpat+=\\\| +setlocal formatlistpat+=^\\s*[.]\\+\\s\\+ + +setlocal completefunc=asciidoctor#complete_bibliography + + +""" +""" Commands +""" +" Use vim-dispatch if available +if exists(':Make') == 2 + let s:make = ':Make' +else + let s:make = ':make' +endif + +exe 'command! -buffer Asciidoctor2PDF :compiler asciidoctor2pdf | ' . s:make +exe 'command! -buffer Asciidoctor2HTML :compiler asciidoctor2html | ' . s:make +exe 'command! -buffer Asciidoctor2DOCX :compiler asciidoctor2docx | ' . s:make + +command! -buffer AsciidoctorOpenRAW call asciidoctor#open_file(s:get_fname()) +command! -buffer AsciidoctorOpenPDF call asciidoctor#open_file(s:get_fname(".pdf")) +command! -buffer AsciidoctorOpenHTML call asciidoctor#open_file(s:get_fname(".html")) +command! -buffer AsciidoctorOpenDOCX call asciidoctor#open_file(s:get_fname(".docx")) + +command! -buffer AsciidoctorPasteImage :call asciidoctor#pasteImage() + + + +""" +""" Mappings +""" +nnoremap ]] :call section(0, v:count1) +nnoremap [[ :call section(1, v:count1) +xmap ]] "\".v:count1.']]m>gv' +xmap [[ "\".v:count1.'[[m>gv' + +"" header textobject +onoremap ih :call asciidoctor#header_textobj(v:true) +onoremap ah :call asciidoctor#header_textobj(v:false) +xnoremap ih :call asciidoctor#header_textobj(v:true) +xnoremap ah :call asciidoctor#header_textobj(v:false) + +"" delimited bLock textobject +onoremap il :call asciidoctor#delimited_block_textobj(v:true) +onoremap al :call asciidoctor#delimited_block_textobj(v:false) +xnoremap il :call asciidoctor#delimited_block_textobj(v:true) +xnoremap al :call asciidoctor#delimited_block_textobj(v:false) + +nnoremap gx :call asciidoctor#open_url() +nnoremap gf :call asciidoctor#open_url("edit") + +"" Useful with +"" let g:asciidoctor_folding = 1 +"" let g:asciidoctor_foldnested = 0 +"" let g:asciidoctor_foldtitle_as_h1 = 1 +"" Fold up to count foldlevel in a special way: +"" * no count is provided, toggle current fold; +"" * count is n, open folds of up to foldlevel n. +func! s:asciidoctor_fold(count) abort + if !get(g:, 'asciidoctor_folding', 0) + return + endif + if a:count == 0 + normal! za + else + let &foldlevel = a:count + endif +endfunc + +"" fold up to v:count foldlevel in a special way +nnoremap (AsciidoctorFold) :call asciidoctor_fold(v:count) + +"" promote/demote sections +nnoremap (AsciidoctorSectionPromote) :call asciidoctor#promote_section() +nnoremap (AsciidoctorSectionDemote) :call asciidoctor#demote_section() + + + +""" +""" Global options processing +""" +if get(g:, 'asciidoctor_opener', '') == '' + if has("win32") || has("win32unix") + if has("nvim") + let g:asciidoctor_opener = ':silent !start ""' + else + let g:asciidoctor_opener = ':silent !start' + endif + elseif has("osx") + let g:asciidoctor_opener = ":!open" + elseif exists("$WSLENV") + let g:asciidoctor_opener = ":silent !cmd.exe /C start" + else + let g:asciidoctor_opener = ":!xdg-open" + endif +endif + + +if has("folding") && get(g:, 'asciidoctor_folding', 0) + function! AsciidoctorFold() "{{{ + let line = getline(v:lnum) + + if (v:lnum == 1) && (line =~ '^----*$') + return ">1" + endif + + let nested = get(g:, "asciidoctor_foldnested", v:true) + + " Regular headers + let depth = match(line, '\(^=\+\)\@<=\( .*$\)\@=') + + " Do not fold nested regular headers + if depth > 1 && !nested + let depth = 1 + endif + + " Setext style headings + if depth < 0 + let prevline = getline(v:lnum - 1) + let nextline = getline(v:lnum + 1) + + if (line =~ '^.\+$') && (nextline =~ '^=\+$') && (prevline =~ '^\s*$') + let depth = nested ? 2 : 1 + endif + + if (line =~ '^.\+$') && (nextline =~ '^-\+$') && (prevline =~ '^\s*$') + let depth = nested ? 3 : 1 + endif + + if (line =~ '^.\+$') && (nextline =~ '^\~\+$') && (prevline =~ '^\s*$') + let depth = nested ? 4 : 1 + endif + + if (line =~ '^.\+$') && (nextline =~ '^^\+$') && (prevline =~ '^\s*$') + let depth = nested ? 5 : 1 + endif + + if (line =~ '^.\+$') && (nextline =~ '^+\+$') && (prevline =~ '^\s*$') + let depth = nested ? 5 : 1 + endif + endif + + + if depth > 0 + " fold all sections under title + if depth > 1 && get(g:, "asciidoctor_foldtitle_as_h1", v:true) + let depth -= 1 + endif + " check syntax, it should be asciidoctorTitle or asciidoctorH + let syncode = synstack(v:lnum, 1) + if len(syncode) > 0 && synIDattr(syncode[0], 'name') =~ 'asciidoctor\%(H[1-6]\)\|Title\|SetextHeader' + return ">" . depth + endif + endif + + " Fold options + if s:asciidoctor_fold_options + let opt_regex = '^:[[:alnum:]-!]\{-}:.*$' + if (line =~ opt_regex) + let prevline = getline(v:lnum - 1) + let nextline = getline(v:lnum + 1) + if (prevline !~ opt_regex) && (nextline =~ opt_regex) + return "a1" + endif + if (nextline !~ opt_regex) && (prevline =~ opt_regex) + return "s1" + endif + endif + endif + + return "=" + endfunction "}}} + + setlocal foldexpr=AsciidoctorFold() + setlocal foldmethod=expr + let s:asciidoctor_fold_options = get(g:, 'asciidoctor_fold_options', 0) +endif + + +if get(g:, 'asciidoctor_img_paste_command', '') == '' + " first `%s` is a path + " second `%s` is an image file name + if has('win32') + let g:asciidoctor_img_paste_command = 'gm convert clipboard: %s%s' + elseif has('osx') + let g:asciidoctor_img_paste_command = 'pngpaste %s%s' + else " there is probably a better tool for linux? + let g:asciidoctor_img_paste_command = 'gm convert clipboard: %s%s' + endif +endif + + +if get(g:, 'asciidoctor_img_paste_pattern', '') == '' + " first `%s` is a base document name: + " (~/docs/hello-world.adoc => hello-world) + " second `%s` is a number of the image. + let g:asciidoctor_img_paste_pattern = 'img_%s_%s.png' +endif + + + +""" +""" Detect default source code language +""" +call asciidoctor#detect_source_language() + +augroup asciidoctor_source_language + au! + au bufwrite *.adoc,*.asciidoc call asciidoctor#refresh_source_language_hl() +augroup END + + + +""" +""" Helper functions +""" +func! s:get_fname(...) + let ext = get(a:, 1, '') + if ext == '' + return expand("%") + else + return expand("%:r").ext + endif +endfunc + + +"" Next/Previous section mappings +func! s:section(back, cnt) + for n in range(a:cnt) + call search('^=\+\s\+\S\+\|\_^\%(\n\|\%^\)\@<=\k.*\n\%(==\+\|\-\-\+\|\~\~\+\|\^\^\+\|++\+\)$', a:back ? 'bW' : 'W') + endfor +endfunc diff --git a/pack/acp/start/vim-asciidoctor/images/image1.png b/pack/acp/start/vim-asciidoctor/images/image1.png new file mode 100644 index 0000000000000000000000000000000000000000..0a0c5d65c9e83e330cb2235f8468adac44e9aa0a GIT binary patch literal 94740 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 izy4W5wA}BiawT{|@Wps#4>^ed literal 0 HcmV?d00001 diff --git a/pack/acp/start/vim-asciidoctor/images/test_docx.png b/pack/acp/start/vim-asciidoctor/images/test_docx.png new file mode 100644 index 0000000000000000000000000000000000000000..7fd0f5c7aa0d6e59aaf76b007a07f784cea2d7fe GIT binary patch literal 14502 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 iNE^V!(&eR%w~VHPnQ$o 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 DF125B literal 0 HcmV?d00001 diff --git a/pack/acp/start/vim-asciidoctor/images/test_pdf2.png b/pack/acp/start/vim-asciidoctor/images/test_pdf2.png new file mode 100644 index 0000000000000000000000000000000000000000..64cccc6e7f85756a51fe0810427c84d768631fe1 GIT binary patch literal 33394 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 +" Filenames: *.adoc +" vim: et sw=4 + +if exists("b:current_syntax") + finish +endif + +syntax spell toplevel + +if !exists('main_syntax') + let main_syntax = 'asciidoctor' +endif + +if !exists('g:asciidoctor_fenced_languages') + let g:asciidoctor_fenced_languages = [] +endif +for s:type in g:asciidoctor_fenced_languages + [get(b:, "asciidoctor_source_language", "NONE")] + if s:type ==# "NONE" + continue + endif + exe 'syn include @asciidoctorSourceHighlight'.s:type.' syntax/'.s:type.'.vim' + unlet! b:current_syntax +endfor +unlet! s:type + +if globpath(&rtp, "syntax/plantuml.vim") != '' + syn include @asciidoctorPlantumlHighlight syntax/plantuml.vim + unlet! b:current_syntax +endif + +" Check :h syn-sync-fourth +syn sync maxlines=100 + +syn case ignore + +syn match asciidoctorOption "^:[[:alnum:]!-]\{-}:" +syn match asciidoctorListContinuation "^+\s*$" +syn match asciidoctorPageBreak "^<<<\+\s*$" + +syn cluster asciidoctorBlock contains=asciidoctorTitle,asciidoctorH1,asciidoctorH2,asciidoctorH3,asciidoctorH4,asciidoctorH5,asciidoctorH6,asciidoctorSetextHeader,asciidoctorSetextHeaderDelimiter,asciidoctorBlockquote,asciidoctorListMarker,asciidoctorOrderedListMarker,asciidoctorCodeBlock,asciidoctorAdmonition,asciidoctorAdmonitionBlock +syn cluster asciidoctorInnerBlock contains=asciidoctorBlockquote,asciidoctorListMarker,asciidoctorOrderedListMarker,asciidoctorCodeBlock,asciidoctorDefList,asciidoctorAdmonition,asciidoctorAdmonitionBlock +syn cluster asciidoctorInline contains=asciidoctorItalic,asciidoctorBold,asciidoctorCode,asciidoctorBoldItalic,asciidoctorUrl,asciidoctorUrlAuto,asciidoctorLink,asciidoctorAnchor,asciidoctorMacro,asciidoctorAttribute,asciidoctorInlineAnchor +syn cluster asciidoctorUrls contains=asciidoctorUrlDescription,asciidoctorFile,asciidoctorUrlAuto,asciidoctorEmailAuto + +syn region asciidoctorTitle matchgroup=asciidoctorTitleDelimiter start="^=\s" end="$" oneline keepend contains=@asciidoctorInline,@Spell +syn region asciidoctorH1 matchgroup=asciidoctorH1Delimiter start="^==\s" end="$" oneline keepend contains=@asciidoctorInline,@Spell +syn region asciidoctorH2 matchgroup=asciidoctorH2Delimiter start="^===\s" end="$" oneline keepend contains=@asciidoctorInline,@Spell +syn region asciidoctorH3 matchgroup=asciidoctorH3Delimiter start="^====\s" end="$" oneline keepend contains=@asciidoctorInline,@Spell +syn region asciidoctorH4 matchgroup=asciidoctorH4Delimiter start="^=====\s" end="$" oneline keepend contains=@asciidoctorInline,@Spell +syn region asciidoctorH5 matchgroup=asciidoctorH5Delimiter start="^======\s" end="$" oneline keepend contains=@asciidoctorInline,@Spell +syn region asciidoctorH6 matchgroup=asciidoctorH6Delimiter start="^=======\s" end="$" oneline keepend contains=@asciidoctorInline,@Spell + +syn match asciidoctorSetextHeader '^\%(\n\|\%^\)\k.*\n\%(==\+\|\-\-\+\|\~\~\+\|\^\^\+\|++\+\)$' contains=@Spell,asciidoctorSetextHeaderDelimiter +syn match asciidoctorSetextHeaderDelimiter "^==\+\|\-\-\+\|\~\~\+\|\^\^\+\|++\+$" contained containedin=asciidoctorSetextHeader + +syn sync clear +syn sync match syncH1 grouphere NONE "^==\s.*$" +syn sync match syncH2 grouphere NONE "^===\s.*$" +syn sync match syncH3 grouphere NONE "^====\s.*$" +syn sync match syncH4 grouphere NONE "^=====\s.*$" +syn sync match syncH5 grouphere NONE "^======\s.*$" +syn sync match syncH6 grouphere NONE "^=======\s.*$" + +syn match asciidoctorAttribute "{[[:alpha:]][[:alnum:]-_:]\{-}}" + +" a Macro is a generic pattern that has no default highlight, but it could contain a link/image/url/xref/mailto/etc, and naked URLs as well + +syn match asciidoctorMacro "\<\l\{-1,}://\S\+" contains=asciidoctorUrlAuto,asciidoctorCode +syn match asciidoctorMacro "\<\w\S\{-}@\w\+\.\w\+" contains=asciidoctorEmailAuto,asciidoctorCode +syn match asciidoctorMacro "\<\l\{-1,}::\?\S*\[.\{-}\]" keepend contains=asciidoctorUrl,asciidoctorLink,asciidoctorEmail,asciidoctorCode + +syn match asciidoctorFile "\f\+" contained +syn match asciidoctorUrlDescription "\[[^]]\{-}\]" contained containedin=asciidoctorLink +syn match asciidoctorUrlAuto "\%(file\|http\|ftp\|irc\)s\?://\S\+\%(\[.\{-}\]\)\?" contained contains=asciidoctorUrl +syn match asciidoctorEmailAuto "[a-zA-Z0-9._%+-]\{-1,}@\w\+\%(\.\w\+\)\+" contained + +if get(g:, 'asciidoctor_syntax_conceal', 0) + " the pattern \[\ze\%(\s*[^ ]\+\s*\)\+]\+ means: a brackets pair, inside of which at least one non-space character, possibly with spaces + syn region asciidoctorLink matchgroup=Conceal start="\%(link\|xref\|mailto\|irc\):[^:][^\[]\{-}\[\ze\%(\s*[^ \]]\+\s*\)\+\]\+" end="\]" concealends oneline keepend skipwhite contained + syn region asciidoctorLink matchgroup=Conceal start="\%(link\|xref\|mailto\|irc\):\ze[^:][^\[]\{-}\[\s*\]" end="\ze\[\s*\]" concealends oneline keepend skipwhite contained nextgroup=asciidoctorUrlDescription contains=asciidoctorUrl,asciidoctorFile + + syn region asciidoctorUrl matchgroup=Conceal start="\%(file\|http\|ftp\|irc\)s\?://\S\+\[\ze\%(\s*[^ ]\+\s*\)\+]\+" end="\]" concealends oneline keepend skipwhite contained + + if get(g:, 'asciidoctor_compact_media_links', 0) + " conceal also the address of an image/video, if the description is not empty + syn region asciidoctorLink matchgroup=Conceal start="\%(video\|image\)::\ze.*" end="\ze\[\s*\]" concealends oneline keepend skipwhite contained nextgroup=asciidoctorUrlDescription contains=asciidoctorUrl,asciidoctorFile + syn region asciidoctorLink matchgroup=Conceal start="\%(video\|image\)::.*\[\ze\%(\s*[^ ]\+\s*\)\+]\+" end="\]" concealends oneline keepend skipwhite contained + else + syn region asciidoctorLink matchgroup=Conceal start="\%(video\|image\)::\?\ze.*" end="\ze\[.*\]" concealends oneline keepend skipwhite contained nextgroup=asciidoctorUrlDescription contains=asciidoctorFile + endif + + syn region asciidoctorAnchor matchgroup=Conceal start="<<\%([^>]\{-},\s*\)\?\ze.\{-}>>" end=">>" concealends oneline + + syn region asciidoctorBold matchgroup=Conceal start=/\m\*\*/ end=/\*\*/ contains=@Spell concealends oneline + syn region asciidoctorBold matchgroup=Conceal start=/\m\%(^\|[[:punct:][:space:]]\@<=\)\*\ze[^* ].\{-}\S/ end=/\*\%([[:punct:][:space:]]\@=\|$\)/ contains=@Spell concealends oneline + + syn region asciidoctorItalic matchgroup=Conceal start=/\m__/ end=/__/ contains=@Spell concealends oneline + syn region asciidoctorItalic matchgroup=Conceal start=/\m\%(^\|[[:punct:][:space:]]\@<=\)_\ze[^_ ].\{-}\S/ end=/_\%([[:punct:][:space:]]\@=\|$\)/ contains=@Spell concealends oneline + + syn region asciidoctorBoldItalic matchgroup=Conceal start=/\m\*\*_/ end=/_\*\*/ contains=@Spell concealends oneline + syn region asciidoctorBoldItalic matchgroup=Conceal start=/\m\%(^\|[[:punct:][:space:]]\@<=\)\*_\ze[^*_ ].\{-}\S/ end=/_\*\%([[:punct:][:space:]]\@=\|$\)/ contains=@Spell concealends oneline + + syn region asciidoctorCode matchgroup=Conceal start=/\m``/ end=/``/ contains=@Spell concealends oneline + syn region asciidoctorCode matchgroup=Conceal start=/\m\%(^\|[[:punct:][:space:]]\@<=\)`\ze[^` ].\{-}\S/ end=/`\%([[:punct:][:space:]]\@=\|$\)/ contains=@Spell concealends oneline +else + syn region asciidoctorLink start="\%(link\|xref\|mailto\):\zs[^:].\{-}\ze\[" end="\[.\{-}\]" oneline keepend skipwhite contained + syn region asciidoctorLink start="\%(video\|image\)::\?\zs.\{-}\ze\[" end="\[.\{-}\]" oneline keepend skipwhite contained + syn match asciidoctorUrl "\%(file\|http\|ftp\|irc\)s\?://\S\+\ze\%(\[.\{-}\]\)" nextgroup=asciidoctorUrlDescription + + syn match asciidoctorAnchor "<<.\{-}>>" + + syn match asciidoctorBold /\%(^\|[[:punct:][:space:]]\@<=\)\*[^* ].\{-}\S\*\%([[:punct:][:space:]]\@=\|$\)/ contains=@Spell + " single char *b* bold + syn match asciidoctorBold /\%(^\|[[:punct:][:space:]]\@<=\)\*[^* ]\*\%([[:punct:][:space:]]\@=\|$\)/ contains=@Spell + syn match asciidoctorBold /\*\*\S.\{-}\*\*/ contains=@Spell + + syn match asciidoctorItalic /\%(^\|[[:punct:][:space:]]\@<=\)_[^_ ].\{-}\S_\%([[:punct:][:space:]]\@=\|$\)/ contains=@Spell + " single char _b_ italic + syn match asciidoctorItalic /\%(^\|[[:punct:][:space:]]\@<=\)_[^_ ]_\%([[:punct:][:space:]]\@=\|$\)/ contains=@Spell + syn match asciidoctorItalic /__\S.\{-}__/ contains=@Spell + + syn match asciidoctorBoldItalic /\%(^\|[[:punct:][:space:]]\@<=\)\*_[^*_ ].\{-}\S_\*\%([[:punct:][:space:]]\@=\|$\)/ contains=@Spell + " single char *_b_* bold+italic + syn match asciidoctorBoldItalic /\%(^\|[[:punct:][:space:]]\@<=\)\*_[^*_ ]_\*\%([[:punct:][:space:]]\@=\|$\)/ contains=@Spell + syn match asciidoctorBoldItalic /\*\*_\S.\{-}_\*\*/ contains=@Spell + + syn match asciidoctorCode /\%(^\|[[:punct:][:space:]]\@<=\)`[^` ].\{-}\S`\%([[:punct:][:space:]]\@=\|$\)/ + " single char `c` code + syn match asciidoctorCode /\%(^\|[[:punct:][:space:]]\@<=\)`[^` ]`\%([[:punct:][:space:]]\@=\|$\)/ + syn match asciidoctorCode /``.\{-}``/ +endif + +syn match asciidoctorUppercase /^\ze\u\+:/ nextgroup=asciidoctorAdmonition +syn match asciidoctorAdmonition /\C^\%(NOTE:\)\|\%(TIP:\)\|\%(IMPORTANT:\)\|\%(CAUTION:\)\|\%(WARNING:\)\s/ contained + +syn match asciidoctorListMarker "^\s*\(-\|\*\+\|\.\+\)\%(\s\+\[[Xx ]\]\+\s*\)\?\%(\s\+\S\)\@=" +syn match asciidoctorOrderedListMarker "^\s*\%(\d\+\|\a\)\.\%(\s\+\S\)\@=" +syn match asciidoctorDefList "^.\{-}::\%(\s\|$\)" contains=@Spell + +syn match asciidoctorCallout "\s\+\zs<\%(\.\|\d\+\)>\ze\s*$" contained +syn match asciidoctorCalloutDesc "^\s*\zs<\%(\.\|\d\+\)>\ze\s\+" + + +syn match asciidoctorCaption "^\.[^.[:space:]].*$" contains=@asciidoctorInline,@Spell + +syn match asciidoctorBlockOptions "^\[.\{-}\]\s*$" + +if get(g:, 'asciidoctor_syntax_indented', 1) + syn match asciidoctorPlus '^+\n\s' contained + syn match asciidoctorIndented '^+\?\n\%(\s\+\(-\|[*.]\+\|\d\+\.\|\a\.\)\s\)\@!\(\s.*\n\)\+' contains=asciidoctorPlus +endif + +syn match asciidoctorInlineAnchor "\[\[.\{-}\]\]" + +syn match asciidoctorIndexTerm "((.\{-}))" +syn match asciidoctorIndexTerm "(((.\{-})))" + +" Open block +" -- +" Should be highlighted as usual asciidoctor +" Except (at least) headings +" -- +syn region asciidoctorOpenBlock matchgroup=asciidoctorBlock start="^--\s*$" end="^--\s*$" contains=@asciidoctorInnerBlock,@asciidoctorInline,@Spell,asciidoctorComment,asciidoctorIndented + +" Listing block +" ---- +" block that will not be +" highlighted +" ---- +syn region asciidoctorListingBlock matchgroup=asciidoctorBlock start="^----\+\s*$" end="^----\s*$" + +" General [source] block +syn region asciidoctorSourceBlock matchgroup=asciidoctorBlock start="^\[source\%(,.*\)*\]\s*$" end="^\s*$" keepend +syn region asciidoctorSourceBlock matchgroup=asciidoctorBlock start="^\[source\%(,.*\)*\]\s*\n\z(--\+\)\s*$" end="^.*\n\zs\z1\s*$" keepend +syn region asciidoctorSourceBlock matchgroup=asciidoctorBlock start="^```\%(\w\+\)\?\s*$" end="^.*\n\?\zs```\s*$" keepend + +" Source highlighting with programming languages +if main_syntax ==# 'asciidoctor' + + "" if :source-language: is set up + "" b:asciidoctor_source_language should be set up in ftplugin -- reading + "" first 20(?) rows of a file + if get(b:, "asciidoctor_source_language", "NONE") != "NONE" + " :source-language: python + "[source] + " for i in ... + " + exe 'syn region asciidoctorSourceHighlightDefault'.b:asciidoctor_source_language.' matchgroup=asciidoctorBlock start="^\[source\]\s*$" end="^\s*$" keepend contains=asciidoctorCallout,@asciidoctorSourceHighlight'.b:asciidoctor_source_language + + " :source-language: python + "[source] + "---- + " for i in ... + "---- + exe 'syn region asciidoctorSourceHighlightDefault'.b:asciidoctor_source_language.' matchgroup=asciidoctorBlock start="^\[source\]\s*\n\z(--\+\)\s*$" end="^.*\n\zs\z1\s*$" keepend contains=asciidoctorCallout,@asciidoctorSourceHighlight'.b:asciidoctor_source_language + + " :source-language: python + "```lang + "for i in ... + "``` + exe 'syn region asciidoctorSourceHighlightDefault'.b:asciidoctor_source_language.' matchgroup=asciidoctorBlock start="^```\s*$" end="^.*\n\?\zs```\s*$" keepend contains=asciidoctorCallout,@asciidoctorSourceHighlight'.b:asciidoctor_source_language + endif + + "" Other languages + for s:type in g:asciidoctor_fenced_languages + [get(b:, "asciidoctor_source_language", "NONE")] + if s:type ==# "NONE" + continue + endif + "[source,lang] + " for i in ... + " + exe 'syn region asciidoctorSourceHighlight'.s:type.' matchgroup=asciidoctorBlock start="^\[\%(source\)\?,\s*'.s:type.'\%(,.*\)*\]\s*$" end="^\s*$" keepend contains=asciidoctorCallout,@asciidoctorSourceHighlight'.s:type + + "[source,lang] + "---- + "for i in ... + "---- + exe 'syn region asciidoctorSourceHighlight'.s:type.' matchgroup=asciidoctorBlock start="^\[\%(source\)\?,\s*'.s:type.'\%(,.*\)*\]\s*\n\z(--\+\)\s*$" end="^.*\n\zs\z1\s*$" keepend contains=asciidoctorCallout,@asciidoctorSourceHighlight'.s:type + + "```lang + "for i in ... + "``` + exe 'syn region asciidoctorSourceHighlightDefault'.s:type.' matchgroup=asciidoctorBlock start="^```'.s:type.'\s*$" end="^.*\n\?\zs```\s*$" keepend contains=asciidoctorCallout,@asciidoctorSourceHighlight'.s:type + + + endfor + unlet! s:type +endif + +" Contents of plantuml blocks should be highlighted with plantuml syntax... +" There is no built in plantuml syntax as far as I know. +" Tested with https://github.com/aklt/plantuml-syntax +syn region asciidoctorPlantumlBlock matchgroup=asciidoctorBlock start="^\[plantuml.\{-}\]\s*\n\z(\.\.\.\.\+\)\s*$" end="^.*\n\zs\z1\s*$" keepend contains=@asciidoctorPlantumlHighlight +syn region asciidoctorPlantumlBlock matchgroup=asciidoctorBlock start="^\[plantuml.\{-}\]\s*\n\z(--\+\)\s*$" end="^.*\n\zs\z1\s*$" keepend contains=@asciidoctorPlantumlHighlight + +" Contents of literal blocks should not be highlighted +" TODO: make [literal] works with paragraph +syn region asciidoctorLiteralBlock matchgroup=asciidoctorBlock start="^\z(\.\.\.\.\+\)\s*$" end="^\z1\s*$" contains=@Spell,asciidoctorComment +syn region asciidoctorExampleBlock matchgroup=asciidoctorBlock start="^\z(====\+\)\s*$" end="^\z1\s*$" contains=@asciidoctorInnerBlock,@asciidoctorInline,@Spell,asciidoctorComment,asciidoctorIndented +syn region asciidoctorSidebarBlock matchgroup=asciidoctorBlock start="^\z(\*\*\*\*\+\)\s*$" end="^\z1\s*$" contains=@asciidoctorInnerBlock,@asciidoctorInline,@Spell,asciidoctorComment,asciidoctorIndented +syn region asciidoctorQuoteBlock matchgroup=asciidoctorBlock start="^\z(____\+\)\s*$" end="^\z1\s*$" contains=@asciidoctorInnerBlock,@asciidoctorInline,@Spell,asciidoctorComment,asciidoctorIndented + +syn region asciidoctorAdmonitionBlock matchgroup=asciidoctorBlock start="^\[\u\+\]\n\z(====\+\)\s*$" end="^\z1\s*$" contains=@asciidoctorInnerBlock,@asciidoctorInline,@Spell,asciidoctorComment,asciidoctorIndented + +" Table blocks +syn match asciidoctorTableCell "\(^\|\s\)\@<=[.+*<^>aehlmdsv[:digit:]]\+|\||" contained containedin=asciidoctorTableBlock +syn region asciidoctorTableBlock matchgroup=asciidoctorBlock start="^|\z(===\+\)\s*$" end="^|\z1\s*$" keepend contains=asciidoctorTableCell,asciidoctorIndented,@asciidoctorInnerBlock,@asciidoctorInline,@Spell,asciidoctorComment +syn region asciidoctorTableBlock matchgroup=asciidoctorBlock start="^,\z(===\+\)\s*$" end="^,\z1\s*$" keepend +syn region asciidoctorTableBlock matchgroup=asciidoctorBlock start="^;\z(===\+\)\s*$" end="^;\z1\s*$" keepend + +syn match asciidoctorComment "^//.*$" contains=@Spell +syn region asciidoctorComment start="^////.*$" end="^////.*$" contains=@Spell + +hi def link asciidoctorTitle Title +hi def link asciidoctorSetextHeader Title +hi def link asciidoctorH1 Title +hi def link asciidoctorH2 Title +hi def link asciidoctorH3 Title +hi def link asciidoctorH4 Title +hi def link asciidoctorH5 Title +hi def link asciidoctorH6 Title +hi def link asciidoctorTitleDelimiter Type +hi def link asciidoctorH1Delimiter Type +hi def link asciidoctorH2Delimiter Type +hi def link asciidoctorH3Delimiter Type +hi def link asciidoctorH4Delimiter Type +hi def link asciidoctorH5Delimiter Type +hi def link asciidoctorH6Delimiter Type +hi def link asciidoctorSetextHeaderDelimiter Type +hi def link asciidoctorListMarker Delimiter +hi def link asciidoctorOrderedListMarker asciidoctorListMarker +hi def link asciidoctorListContinuation PreProc +hi def link asciidoctorComment Comment +hi def link asciidoctorIndented Comment +hi def link asciidoctorPlus PreProc +hi def link asciidoctorPageBreak PreProc +hi def link asciidoctorCallout Float +hi def link asciidoctorCalloutDesc String + +hi def link asciidoctorListingBlock Comment +hi def link asciidoctorLiteralBlock Comment + +hi def link asciidoctorFile Underlined +hi def link asciidoctorUrl Underlined +hi def link asciidoctorEmail Underlined +hi def link asciidoctorUrlAuto Underlined +hi def link asciidoctorEmailAuto Underlined +hi def link asciidoctorUrlDescription String + +hi def link asciidoctorLink Underlined +hi def link asciidoctorAnchor Underlined +hi def link asciidoctorAttribute Identifier +hi def link asciidoctorCode Constant +hi def link asciidoctorOption PreProc +hi def link asciidoctorBlock PreProc +hi def link asciidoctorBlockOptions PreProc +hi def link asciidoctorTableSep PreProc +hi def link asciidoctorTableCell PreProc +hi def link asciidoctorTableEmbed PreProc +hi def link asciidoctorInlineAnchor PreProc +hi def link asciidoctorMacro Macro +hi def link asciidoctorIndexTerm Macro + +hi def asciidoctorBold gui=bold cterm=bold +hi def asciidoctorItalic gui=italic cterm=italic +hi def asciidoctorBoldItalic gui=bold,italic cterm=bold,italic + +hi def link asciidoctorDefList asciidoctorBold +hi def link asciidoctorCaption Statement +hi def link asciidoctorAdmonition asciidoctorBold + +let b:current_syntax = "asciidoctor" +if main_syntax ==# 'asciidoctor' + unlet main_syntax +endif diff --git a/plugins.md b/plugins.md index fed4591..f178862 100644 --- a/plugins.md +++ b/plugins.md @@ -16,5 +16,6 @@ Git submodules are slow, so handle this manually. * [mom.vim](http://git.savannah.gnu.org/cgit/groff.git/plain/contrib/mom/examples/mom.vim) * [tempus-themes-vim](https://gitlab.com/protesilaos/tempus-themes-vim) * [vim-actodo](https://github.com/acperkins/vim-actodo) +* [vim-asciidoctor](https://github.com/habamax/vim-asciidoctor) * [vim-speeddating](https://github.com/tpope/vim-speeddating) * [vim-surround](https://github.com/tpope/vim-surround)