Path: blob/main/src/resources/pandoc/datadir/_format.lua
12926 views
-- does the table contain a value1local function tcontains(t,value)2if t and type(t)=="table" and value then3for _, v in ipairs (t) do4if v == value then5return true6end7end8return false9end10return false11end1213local function _main()14-- Element format checks1516local function isRaw(el)17return el.t == "RawBlock" or el.t == "RawInline"18end1920local function isRawHtml(rawEl)21return isRaw(rawEl) and string.find(rawEl.format, "^html")22end2324local function isRawLatex(rawEl)25return isRaw(rawEl) and (rawEl.format == "tex" or rawEl.format == "latex")26end2728-- Format checks2930-- Format checks based on FORMAT3132-- check for latex output33local function isLatexOutput()34return FORMAT == "latex" or FORMAT == "beamer" or FORMAT == "pdf"35end3637local function isAsciiDocOutput()38return FORMAT == "asciidoc" or FORMAT == "asciidoctor"39end4041local function isBeamerOutput()42return FORMAT == "beamer"43end4445-- check for docx output46local function isDocxOutput()47return FORMAT == "docx"48end4950-- check for rtf output51local function isRtfOutput()52return FORMAT == "rtf"53end5455-- check for odt output56local function isOdtOutput()57return FORMAT == "odt" or FORMAT == "opendocument"58end5960-- check for word processor output61local function isWordProcessorOutput()62return FORMAT == "docx" or FORMAT == "rtf" or isOdtOutput()63end6465-- check for powerpoint output66local function isPowerPointOutput()67return FORMAT == "pptx"68end6970-- check for revealjs output71local function isRevealJsOutput()72return FORMAT == "revealjs"73end7475local function isHtmlSlideOutput()76local formats = {77"s5",78"dzslides",79"slidy",80"slideous",81"revealjs",82}83return tcontains(formats, FORMAT)84end8586-- check for slide output87local function isSlideOutput()88return isHtmlSlideOutput() or isBeamerOutput() or isPowerPointOutput()89end9091-- check for epub output92local function isEpubOutput()93local formats = {94"epub",95"epub2",96"epub3"97}98return tcontains(formats, FORMAT)99end100101-- check for bibliography formats102local function isBibliographyOutput()103local formats = {104"bibtex",105"biblatex",106"csljson"107}108return tcontains(formats, FORMAT)109end110111-- check for ipynb output112local function isIpynbOutput()113return FORMAT == "ipynb"114end115116117-- format checks based on quarto-custom-format118119local function isDocusaurusOutput()120return param("quarto-custom-format", "") == "docusaurus"121end122123local function isConfluenceOutput()124return param("quarto-custom-format", "") == "confluence"125end126127-- check for markdown output128local function isMarkdownOutput()129local formats = {130"markdown",131"markdown_github",132"markdown_mmd",133"markdown_phpextra",134"markdown_strict",135"gfm",136"commonmark",137"commonmark_x",138"markua"139}140return tcontains(formats, FORMAT) or isDocusaurusOutput()141end142143-- check for markdown with raw_html enabled144local function isMarkdownWithHtmlOutput()145return (isMarkdownOutput() and tcontains(PANDOC_WRITER_OPTIONS.extensions, "raw_html")) or isDocusaurusOutput()146end147148-- check for html output149local function isHtmlOutput()150local formats = {151"html",152"html4",153"html5",154"epub",155"epub2",156"epub3"157}158return tcontains(formats, FORMAT) or isHtmlSlideOutput()159end160161local function parse_format(raw_format)162local pattern = "^([%a_]+)([-+_%a]*)"163local i, j, format, extensions = raw_format:find(pattern)164if format == nil then165error("Warning: Invalid format " .. raw_format .. ". Assuming 'markdown'.")166return {167format = "markdown",168extensions = {}169}170end171172local result = {173format = format,174extensions = {}175}176177local sign_table = {178["-"] = false,179["+"] = true180}181182if extensions ~= nil then183while #extensions > 0 do184local i, j, sign, variant = extensions:find("^([-+])([%a_]+)")185result.extensions[variant] = sign_table[sign]186extensions = extensions:sub(j+1)187end188end189190return result191end192193local function isNativeOutput()194return FORMAT == "native"195end196197local function isJsonOutput()198return FORMAT == "json"199end200201local function isAstOutput()202return isNativeOutput() or isJsonOutput()203end204205local function isJatsOutput()206local formats = {207"jats",208"jats_archiving",209"jats_articleauthoring",210"jats_publishing",211}212return tcontains(formats, FORMAT)213end214215local function isTypstOutput()216return FORMAT == "typst"217end218219-- format checks based on format-identifier.base-format220221local function isEmailOutput()222return param("format-identifier", {})["base-format"] == "email"223end224225local function isDashboardOutput()226return param("format-identifier", {})["base-format"] == "dashboard"227end228229local function isGithubMarkdownOutput()230return param("format-identifier", {})["base-format"] == "gfm"231end232233234-- format checks based on format-identifier.target-format235236local function isHugoMarkdownOutput()237return param("format-identifier", {})["target-format"] == "hugo-md"238end239240-- Functions used by other exports241242-- we have some special rules to allow formats to behave more intuitively243local function isFormat(to)244if FORMAT == to then245return true246else247-- latex and pdf are synonyms248if to == "latex" or to == "pdf" then249return isLatexOutput()250-- odt and opendocument are synonyms251elseif to == "odt" or to == "opendocument" then252return isOdtOutput()253-- epub: epub, epub2, or epub3254elseif to:match 'epub' then255return isEpubOutput()256-- html: html, html4, html4, epub*, or slides (e.g. revealjs)257elseif to == "html" then258return isHtmlOutput()259elseif to == "html:js" then260-- html formats that support javascript (excluding epub)261return isHtmlOutput() and not isEpubOutput()262-- markdown: markdown*, commonmark*, gfm, markua263elseif to == "markdown" then264return isMarkdownOutput()265elseif to == "asciidoc" or to == "asciidoctor" then266return isAsciiDocOutput()267elseif to == "confluence" then268return isConfluenceOutput()269elseif to == "docusaurus" or to == "docusaurus-md" then270return isDocusaurusOutput()271elseif to == "email" then272return isEmailOutput()273elseif to == "dashboard" then274return isDashboardOutput()275elseif to == "gfm" then276return isGithubMarkdownOutput()277elseif to == "hugo-md" or to == 'hugo' then278return isHugoMarkdownOutput()279--[[ Not working yet280elseif to == "ipynb" then281return isIpynbOutput()282]]--283else284return false285end286end287end288289return {290format_identifier = function()291return param("format-identifier", {})292end,293isAsciiDocOutput = isAsciiDocOutput,294is_asciidoc_output = isAsciiDocOutput,295isRawHtml = isRawHtml,296is_raw_html = isRawHtml,297isRawLatex = isRawLatex,298is_raw_latex = isRawLatex,299isFormat = isFormat,300is_format = isFormat,301isLatexOutput = isLatexOutput,302is_latex_output = isLatexOutput,303isBeamerOutput = isBeamerOutput,304is_beamer_output = isBeamerOutput,305isDocxOutput = isDocxOutput,306is_docx_output = isDocxOutput,307isRtfOutput = isRtfOutput,308is_rtf_output = isRtfOutput,309isOdtOutput = isOdtOutput,310is_odt_output = isOdtOutput,311isWordProcessorOutput = isWordProcessorOutput,312is_word_processor_output = isWordProcessorOutput,313isPowerPointOutput = isPowerPointOutput,314is_powerpoint_output = isPowerPointOutput,315isRevealJsOutput = isRevealJsOutput,316is_revealjs_output = isRevealJsOutput,317isSlideOutput = isSlideOutput,318is_slide_output = isSlideOutput,319isEpubOutput = isEpubOutput,320is_epub_output = isEpubOutput,321isGithubMarkdownOutput = isGithubMarkdownOutput,322is_github_markdown_output = isGithubMarkdownOutput,323isHugoMarkdownOutput = isHugoMarkdownOutput,324is_hugo_markdown_output = isHugoMarkdownOutput,325isMarkdownOutput = isMarkdownOutput,326is_markdown_output = isMarkdownOutput,327isMarkdownWithHtmlOutput = isMarkdownWithHtmlOutput,328is_markdown_with_html_output = isMarkdownWithHtmlOutput,329isIpynbOutput = isIpynbOutput,330is_ipynb_output = isIpynbOutput,331isHtmlOutput = isHtmlOutput,332is_html_output = isHtmlOutput,333isHtmlSlideOutput = isHtmlSlideOutput,334is_html_slide_output = isHtmlSlideOutput,335isBibliographyOutput = isBibliographyOutput,336is_bibliography_output = isBibliographyOutput,337isNativeOutput = isNativeOutput,338is_native_output = isNativeOutput,339isJsonOutput = isJsonOutput,340is_json_output = isJsonOutput,341isAstOutput = isAstOutput,342is_ast_output = isAstOutput,343isJatsOutput = isJatsOutput,344is_jats_output = isJatsOutput,345isTypstOutput = isTypstOutput,346is_typst_output = isTypstOutput,347isConfluenceOutput = isConfluenceOutput,348is_confluence_output = isConfluenceOutput,349isDocusaurusOutput = isDocusaurusOutput,350is_docusaurus_output = isDocusaurusOutput,351isDashboardOutput = isDashboardOutput,352is_dashboard_output = isDashboardOutput,353isEmailOutput = isEmailOutput,354is_email_output = isEmailOutput,355parse_format = parse_format356}357end358359return _main()360361362