1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276
|
#compdef pandoc
# input or output formats with optional extensions
# required option: -T (input|output)
(( $+functions[_pandoc_format] )) ||
_pandoc_format() {
local -a inout expl
zparseopts -D -E - T:=inout
local format=${PREFIX%%(+|-)*}
if compset -P '*(+|-)'; then
local pm=${IPREFIX[-1]} # '+' or '-'
local -a extensions=(${${$(pandoc --list-extensions=$format):#$pm*}#(+|-)})
_wanted extensions expl 'extension' compadd -S '+' -r '-+ ' -a extensions
else
local -a formats=( $(pandoc --list-$inout[2]-formats) )
_wanted formats expl 'format' compadd -S '+' -r '-+ ' -a formats
fi
}
# all supported formats
(( $+functions[_pandoc_all_formats] )) ||
_pandoc_all_formats(){
local -a expl
local -aU formats
formats=( $(pandoc --list-input-formats) $(pandoc --list-output-formats) )
_wanted formats expl 'format' compadd -a formats
}
# pdf engine choice
(( $+functions[_pandoc_pdf_engine] )) ||
_pandoc_pdf_engine(){
_alternative \
'engines:engine:(pdflatex lualatex xelatex latexmk tectonic wkhtmltopdf weasyprint prince context pdfroff)' \
'engine-executables:engine executable:_files -g "*(#q*)"'
}
# options to pass to --pdf-engine command
(( $+functions[_pandoc_pdf_engine_opts] )) ||
_pandoc_pdf_engine_opts(){
local pdf_engine=${opt_args[--pdf-engine]}
case ${pdf_engine} in
"pdflatex"|"lualatex"|"xelatex"|"xetex"|"latex"|"pdftex"|"tex"|"")
_tex
;;
*)
_message "Options for ${pdf_engine}"
;;
esac
}
# data-dir specified by --data-dir option, or the default dir
_pandoc_default_dir() {
if (( $+opt_args[--data-dir] )); then
echo ${opt_args[--data-dir]:a}
else
# XXX Some versions of pandoc may output two user data directories:
# ~/.local/share/pandoc or ~/.pandoc
# Here we use only the first one.
pandoc --version | sed -ne 's/.*[Uu]ser data directory: \([^ ]*\).*/\1/p'
fi
}
# template file in $PWD or data-dir/templates/, or URL
(( $+functions[_pandoc_template] )) ||
_pandoc_template(){
# find output format from '-t format' or '-o xxx.format'
local format=${${(v)opt_args[(i)(-t|--to|-w|--write)]}%%(+|-)*}
[[ -z $format ]] && format=${(v)opt_args[(i)(-o|--output)]:e}
local pat="'*'" # or '*.*' ?
[[ -n $format ]] && pat="'*.$format(-.)'"
local template_dir=$(_pandoc_default_dir)/templates
_alternative \
"local-templates:local template:_files -g $pat" \
"data-dir-templates:template in data-dir:_files -W $template_dir -g $pat" \
'urls: :_urls'
}
# choose highlight-style
(( $+functions[_pandoc_highlight_style] )) ||
_pandoc_highlight_style(){
_alternative \
'styles:style:( $(pandoc --list-highlight-styles) )' \
'style-files:style file:_files -g "*.theme(-.)"'
}
# filter file in $PWD, data-dir/filters/ or $PATH
(( $+functions[_pandoc_filter] )) ||
_pandoc_filter(){
local filters_dir=$(_pandoc_default_dir)/filters
_alternative \
'local-filters:local filter:_files' \
'data-dir-filters:filter in data-dir:_files -W filters_dir' \
'commands: : _command_names -e'
}
# lua filter in $PWD or data-dir/filters/
(( $+functions[_pandoc_lua_filter] )) ||
_pandoc_lua_filter(){
local filters_dir=$(_pandoc_default_dir)/filters
_alternative \
'local-filters:local filter:_files -g "*.lua(-.)"' \
'data-dir-filters:filter in data-dir:_files -W filters_dir -g "*.lua(-.)"'
}
# default file in $PWD or data-dir/defaults/
(( $+functions[_pandoc_defaults_file] )) ||
_pandoc_defaults_file() {
local defaults_dir=$(_pandoc_default_dir)/defaults
_alternative \
'local-defaults:default file:_files -g "*.yaml(-.)"' \
'data-dir-defaults:default in data-dir:_files -W defaults_dir -g "*.yaml(-.)"'
}
# choose reference location
(( $+functions[_pandoc_reference_location] )) ||
_pandoc_reference_location(){
local -a policies
policies=(
'block:place references at the end of the current (top-level) block'
'section:place references at the end of the current (top-level) section'
'document:place references at the end of the document'
)
_describe 'location' policies
}
# choose top level division
(( $+functions[_pandoc_top_level_division] )) ||
_pandoc_top_level_division(){
_values 'top level division' default section chapter part
}
# choose email obfusication
(( $+functions[_pandoc_email_obfusication] )) ||
_pandoc_email_obfusication(){
local -a policies
policies=(
'none:leave mailto: links as they are'
'javascript:obfuscates them using JavaScript'
'references:obfuscates them by printing their letters as decimal or hexadecimal character references'
)
_describe 'obfuscation policy [none]' policies
}
# choose wrapping policy
(( $+functions[_pandoc_wrap] )) ||
_pandoc_wrap() {
local -a policies
policies=(
'auto:wrap lines to the column width specified by --columns (default 72)'
"none:don't wrap lines at all"
'preserve:attempt to preserve the wrapping from the source document'
)
_describe 'policy [auto]' policies
}
# choose eol policy
(( $+functions[_pandoc_eol] )) ||
_pandoc_eol() {
local -a policies
policies=(
'native:line endings appropriate to the OS on which pandoc is being run'
'crlf:windows'
'lf:macOS/Linux/UNIX'
)
_describe 'policy' policies
}
# choose changes tracking policy
(( $+functions[_pandoc_track_changes] )) ||
_pandoc_track_changes() {
local -a policies
policies=(
'accept:insert all insertions, and ignore all deletions'
'reject:inserts all deletions and ignores insertions'
'all:puts in insertions, deletions, and comments, wrapped in spans with insertion, deletion, comment-start, and comment-end classes, respectively'
)
_describe 'policy [accept]' policies
}
# The real thing
_arguments -s \
{-f+,-r+,--from=,--read=}'[specify input format]: :_pandoc_format -T input' \
{-t+,-w+,--to=,--write=}'[specify output format]: :_pandoc_format -T output' \
{-o+,--output=}'[write output to FILE instead of stdout]:file:_files' \
'--data-dir=[specify the user data directory to search for pandoc data files]:data directory:_files -/' \
{-d+,--defaults=}'[read default from YAML file]: :_pandoc_defaults_file' \
'--shift-heading-level-by=[shift heading levels by specified number]:positive or negative integer: ' \
'!--base-header-level=:number [1]:(1 2 3 4 5)' \
'!--strip-empty-paragraphs[deprecated. Use the +empty_paragraphs extension instead]' \
'--indented-code-classes=[classes to use for indented code blocks]:class list (comma-separated)' \
'--default-image-extension=[specify a default extension to use when image paths/URLs have no extension]:extension: ' \
'--file-scope[parse each file individually before combining for multifile documents]' \
{\*-F+,\*--filter=}'[specify an executable to be used as a filter transforming the pandoc AST after the input is parsed and before the output is written]: :_pandoc_filter' \
{\*-L+,\*--lua-filter=}"[transform the document by using pandoc's built-in lua filtering system]: :_pandoc_lua_filter" \
{\*-M+,\*--metadata=}'[set the metadata field KEY to the value VALUE]:key\:value: ' \
'*--metadata-file=[read metadata from file]:YAML or JSON file:_files' \
{-p,--preserve-tabs}'[preserve tabs instead of converting them to spaces]' \
'--tab-stop=[specify the number of spaces per tab]:spaces [4]' \
'--track-changes=[specifies what to do with insertions, deletions, and comments produced by the MS Word "Track Changes" feature]: :_pandoc_track_changes' \
'--extract-media=[extract media in source document to specified directory]:directory:_files -/' \
'--abbreviations=[specifies a custom abbreviations file]:file:_files ' \
{-s,--standalone}'[produce output with an appropriate header and footer]' \
'--template=[use FILE as a custom template for the generated document. Implies --standalone]: :_pandoc_template' \
{\*-V+,\*--variable=}'[set the variable KEY to the value VALUE]:key\:value: ' \
'(- :)'{-D+,--print-default-template=}'[print the system default template for an output]:format:( $(pandoc --list-output-formats) )' \
'(- :)--print-default-data-file=[print a system default data file]:file: ' \
'--eol=[manually specify line endings (crlf|lf|native)]: :_pandoc_eol' \
'--dpi=[specify the dpi (dots per inch) value for conversion from pixels to inch/centimeters and vice versa]:number: ' \
'--wrap=[determine how text is wrapped in the output (the source code, not the rendered version)]: :_pandoc_wrap ' \
'--columns=[specify length of lines in characters]:length [72]' \
{--toc,--table-of-contents}'[include an automatically generated table of contents]' \
'--toc-depth=[specify the number of section levels to include in the table of contents]:number' \
'--strip-comments[strip out HTML comments in the Markdown or Textile source]' \
'--no-highlight[disables syntax highlighting for code blocks and inlines]' \
'--highlight-style=[specifies the coloring style to be used in highlighted source code]:style|file:_pandoc_highlight_style' \
'(- :)--print-highlight-style=[prints a JSON version of a highlighting style]: :_pandoc_highlight_style' \
'--syntax-definition=[load a KDE XML syntax definition file]:file:_files -g "*.xml(-.)"' \
{\*-H+,\*--include-in-header=}'[include contents of FILE, verbatim, at the end of the header, implies --standalone]:file:_files' \
{\*-B+,\*--include-before-body=}'[include contents of FILE, verbatim, at the beginning of the document body, implies --standalone]:file:_files' \
{\*-A+,\*--include-end-body=}'[include contents of FILE, verbatim, at the end of the document body, implies --standalone]:file:_files' \
'--resource-path=[list of paths to search for images and other resources]:searchpath:_dir_list' \
'--request-header=[set the request header NAME to the value VAL when making HTTP requests]:name\:val: ' \
'--no-check-certificate[disable the certificate verification]' \
'--self-contained[produce a standalone HTML file with no external dependencies, using data: URIs to incorporate the contents of linked scripts, stylesheets, images, and videos. Implies --standalone]' \
'--html-q-tags[use <q> tags for quotes in HTML]' \
'--ascii[use only ASCII characters in output, supported only for HTML and DocBook output]' \
'--reference-links[use reference-style links, rather than inline links]' \
'--reference-location=[specify where footnotes (and references, if reference-links is set) are placed (block|section|document)]: :_pandoc_reference_location' \
'--markdown-headings[specify style for level1 and 2 headings in markdown output]:style [atx]:(setext atx)' \
'!--atx-headers[use ATX-style headers in Markdown and AsciiDoc output]' \
'--top-level-division=[treat top-level headers as the given division type in LaTeX, ConTeXt, DocBook, and TEI output]: :_pandoc_top_level_division' \
{-N,--number-sections}'[number section headings in LaTeX, ConTeXt, HTML, or EPUB output]' \
'--number-offset=[offset for section headings in HTML output (ignored in other output formats)]:number[number,...] [0]' \
'--listings[use the listings package for LaTeX code blocks]' \
{-i,--incremental}'[make list items in slide shows display incrementally (one by one)]' \
'--slide-level=[specifies that headers with the specified level create slides (for beamer, s5, slidy, slideous, dzslides)]:slide level:(1 2 3 4 5 6)' \
'--section-divs[wrap sections in <section> tags (or <div> tags for html4)Use the section-divs package for LaTeX code blocks]' \
'--email-obfusication=[treat top-level headers as the given division type in LaTeX, ConTeXt, DocBook, and TEI output (none|javascript|references)]: :_pandoc_email_obfusication' \
'--id-prefix=[specify a prefix to be added to all identifiers and internal links in HTML and DocBook output]:string: ' \
{-T+,--title-prefix=}'[specify STRING as a prefix at the beginning of the title that appears in the HTML header]:string: ' \
{\*-c+,\*--css=}'[link to a CSS style sheet]: :_urls' \
'--reference-doc=[use the specified file as a style reference in producing a docx or ODT file]:file: ' \
'--epub-subdirectory=[specify the subdirectory in the OCF container that is to hold the EPUB-specific contents]:directory:_files -/' \
'--epub-cover-image=[use the specified image as the EPUB cover]:file:_files' \
'--epub-metadata=[look in the specified XML file for metadata for the EPUB]:file:_files -g "*.xml(-.)"' \
'*--epub-embed-font=[embed the specified font in the EPUB]:file:_files ' \
'--epub-chapter-level=[specify the header level at which to split the EPUB into separate "chapter" files]:number:(1 2 3 4 5 6)' \
'--ipynb-output=[specify how to tread ipynb output cells]:method:(all none best)' \
'--pdf-engine=[use the specified engine when producing PDF output]:program:_pandoc_pdf_engine' \
'*--pdf-engine-opt=[use the given string as a command-line argument to the pdf-engine]:string:_pandoc_pdf_engine_opts' \
"*--bibliography=[set the bibliography field in the document's metadata to specified file]:file:_files -g '*.(bib|bibtex|copac|json|yaml|enl|xml|wos|medline|mods|ris)(-.)'" \
"--csl=[set the csl field in the document's metadata to specified file]:file:_files -g '*.csl(-.)'" \
'--citation-abbreviations=[set the citation-abbreviations field in the document'"'"'s metadata to FILE]:file:_files' \
'--natbib[use natbib for citations in LaTeX output]' \
'--biblatex[use biblatex for citations in LaTeX output]' \
'--mathml[convert TeX math to MathML (in epub3, docbook4, docbook5, jats, html4 and html5)]' \
'--webtex=[convert TeX formulas to <img> tags that link to an external script that converts formulas to images]:: :_urls' \
'--mathjax=[use MathJax to display embedded TeX math in HTML output]:: :_urls' \
'--katex=[use KaTeX to display embedded TeX math in HTML output]:: :_urls' \
'--gladtex[Enclose TeX math in <eq> tags in HTML output]' \
'--trace[enable tracing]' \
'--dump-args[print information about command-line arguments to stdout, then exit]' \
'--ignore-args[ignore command-line arguments (for use in wrapper scripts)]' \
'--verbose[give verbose debugging output]' \
'--quiet[suppress warning messages]' \
'--fail-if-warnings[exit with error status if there are any warnings]' \
'--log=[write log messages in machine-readable JSON format to FILE]:file:_files' \
'(- :)--bash-completion[generate a bash completion script]' \
'(- :)--list-input-formats[list supported input formats, one per line]' \
'(- :)--list-output-formats[list supported output formats, one per line]' \
'(- :)--list-extensions=[list supported extensions, one per line, preceded by a + or - indicating whether it is enabled by default in FORMAT]:format:_pandoc_all_formats' \
'(- :)--list-highlight-languages[list supported languages for syntax highlighting, one per line]' \
'(- :)--list-highlight-styles[list supported styles for syntax highlighting, one per line]' \
'(- :)'{-v,--version}'[print version]' \
'(- :)'{-h,--help}'[print help]' \
'*:file:_files'
|