{"componentChunkName":"component---src-templates-post-template-js","path":"/note-pandoc-and-prismjs-en","result":{"data":{"markdownRemark":{"id":"6ccf523a-cc87-51fe-821d-d6db7464918b","html":"<blockquote>\n<p>This page has been machine-translated from the <a href=\"/note-pandoc-and-prismjs\">original page</a>.</p>\n</blockquote>\n<!-- omit in toc -->\n<h2 id=\"table-of-contents\" style=\"position:relative;\"><a href=\"#table-of-contents\" aria-label=\"table of contents permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Table of Contents</h2>\n<ul>\n<li><a href=\"#fixing-pandoc-html-conversion-with-a-lua-script\">Fixing Pandoc HTML Conversion with a Lua Script</a></li>\n<li><a href=\"#summary\">Summary</a></li>\n</ul>\n<!-- omit in toc -->\n<h2 id=\"introduction\" style=\"position:relative;\"><a href=\"#introduction\" aria-label=\"introduction permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Introduction</h2>\n<p>In this post, I summarize how to solve the issue where the classes on code blocks in HTML generated from Markdown with the OSS tool Pandoc are not compatible with Prism.js syntax highlighting.</p>\n<p>For example, suppose you create HTML with Pandoc from Markdown that contains a code block like the following.</p>\n<div class=\"gatsby-highlight\" data-language=\"markdown\"><pre class=\"language-markdown\"><code class=\"language-markdown\">``` python\nSource code</code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">Then HTML with classes like the following is generated.\n\n``` html\n&lt;pre class=\"sourceCode python\">\n  &lt;code class=\"sourceCode python\">\n  ...\n  &lt;/code>\n&lt;/pre></code></pre></div>\n<p>However, Prism.js requires classes in the form <code class=\"language-text\">language-python</code>, so this output cannot be used as-is.</p>\n<p>After checking the following Pandoc issue, it seems that this cannot be resolved under Pandoc’s current behavior.</p>\n<p><a href=\"https://github.com/jgm/pandoc/issues/3858\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Update <pre class=\"name\"><code> to HTML5 <pre><code class=\"language-name\"> · Issue #3858 · jgm/pandoc · GitHub</a></p>\n<p>So this time, I used a Lua script that extends Pandoc to solve the problem.</p>\n<h2 id=\"fixing-pandoc-html-conversion-with-a-lua-script\" style=\"position:relative;\"><a href=\"#fixing-pandoc-html-conversion-with-a-lua-script\" aria-label=\"fixing pandoc html conversion with a lua script permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Fixing Pandoc HTML Conversion with a Lua Script</h2>\n<p>The Lua script I used as reference is provided under the MIT license in the following repository.</p>\n<p><a href=\"https://github.com/a-vrma/pandoc-filters\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub - a-vrma/pandoc-filters: A small, useful collection of pandoc filters</a></p>\n<p>Specifically, it is the following script.</p>\n<div class=\"gatsby-highlight\" data-language=\"lua\"><pre class=\"language-lua\"><code class=\"language-lua\"><span class=\"token comment\">--- standard-code: ouput code blocks with class=\"language-*\" attributes</span>\n<span class=\"token comment\">-- © 2020 Aman Verma. Distributed under the MIT license.</span>\n\n<span class=\"token keyword\">local</span> languages <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>meta <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>markup <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>css <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>clike <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>javascript <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>abap <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>abnf <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>actionscript <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>ada <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>agda <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>al <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>antlr4 <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>apacheconf <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>apl <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>applescript <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>aql <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>arduino <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>arff <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>asciidoc <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>aspnet <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>asm6502 <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>autohotkey <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>autoit <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>bash <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>basic <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>batch <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>bbcode <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>bison <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>bnf <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>brainfuck <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>brightscript <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>bro <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>bsl <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>c <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>csharp <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>cpp <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>cil <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>clojure <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>cmake <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>coffeescript <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>concurnas <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>csp <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>crystal <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">[</span><span class=\"token string\">'css-extras'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>cypher <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>d <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>dart <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>dax <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>dhall <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>diff <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>django <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">[</span><span class=\"token string\">'dns-zone-file'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>docker <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>ebnf <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>editorconfig <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>eiffel <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>ejs <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>elixir <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>elm <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>etlua <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>erb <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>erlang <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">[</span><span class=\"token string\">'excel-formula'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>fsharp <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>factor <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">[</span><span class=\"token string\">'firestore-security-rules'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>flow <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>fortran <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>ftl <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>gml <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>gcode <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>gdscript <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>gedcom <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>gherkin <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>git <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>glsl <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>go <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>graphql <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>groovy <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>haml <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>html <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>handlebars <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>haskell <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>haxe <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>hcl <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>hlsl <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>http <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>hpkp <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>hsts <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>ichigojam <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>icon <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>ignore <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>inform7 <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>ini <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>io <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>j <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>java <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>javadoc <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>javadoclike <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>javastacktrace <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>jolie <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>jq <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>jsdoc <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">[</span><span class=\"token string\">'js-extras'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>json <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>json5 <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>jsonp <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>jsstacktrace <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">[</span><span class=\"token string\">'js-templates'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>julia <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>keyman <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>kotlin <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>latex <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>latte <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>less <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>lilypond <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>liquid <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>lisp <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>livescript <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>llvm <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>lolcode <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>lua <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>makefile <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>markdown <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">[</span><span class=\"token string\">'markup-templating'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>matlab <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>mel <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>mizar <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>mongodb <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>monkey <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>moonscript <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>n1ql <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>n4js <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">[</span><span class=\"token string\">'nand2tetris-hdl'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>naniscript <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>nasm <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>neon <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>nginx <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>nim <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>nix <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>nsis <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>objectivec <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>ocaml <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>opencl <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>oz <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>parigp <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>parser <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>pascal <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>pascaligo <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>pcaxis <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>peoplecode <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>perl <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>php <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>phpdoc <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">[</span><span class=\"token string\">'php-extras'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>plsql <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>powerquery <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>powershell <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>processing <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>prolog <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>properties <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>protobuf <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>pug <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>puppet <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>pure <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>purebasic <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>purescript <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>python <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>q <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>qml <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>qore <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>r <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>racket <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>jsx <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>tsx <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>reason <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>regex <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>renpy <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>rest <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>rip <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>roboconf <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>robotframework <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>ruby <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>rust <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>sas <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>sass <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>scss <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>scala <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>scheme <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">[</span><span class=\"token string\">'shell-session'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>smali <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>smalltalk <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>smarty <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>solidity <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">[</span><span class=\"token string\">'solution-file'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>soy <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>sparql <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">[</span><span class=\"token string\">'splunk-spl'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>sqf <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>sql <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>stan <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>iecst <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>stylus <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>swift <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">[</span><span class=\"token string\">'t4-templating'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">[</span><span class=\"token string\">'t4-cs'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">[</span><span class=\"token string\">'t4-vb'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>tap <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>tcl <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>tt2 <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>textile <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>toml <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>turtle <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>twig <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>typescript <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>typoscript <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>unrealscript <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>vala <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>vbnet <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>velocity <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>verilog <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>vhdl <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>vim <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">[</span><span class=\"token string\">'visual-basic'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>warpscript <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>wasm <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>wiki <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>xeora <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">[</span><span class=\"token string\">'xml-doc'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>xojo <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>xquery <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>yaml <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>yang <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">,</span>zig <span class=\"token operator\">=</span> <span class=\"token keyword\">true</span><span class=\"token punctuation\">}</span>\n\n\n<span class=\"token keyword\">local</span> <span class=\"token keyword\">function</span> <span class=\"token function\">escape</span><span class=\"token punctuation\">(</span>s<span class=\"token punctuation\">)</span>\n  <span class=\"token comment\">-- Escape according to HTML 5 rules</span>\n  <span class=\"token keyword\">return</span> s<span class=\"token punctuation\">:</span><span class=\"token function\">gsub</span><span class=\"token punctuation\">(</span>\n    <span class=\"token string\">[=[[&lt;>&amp;\"']]=]</span><span class=\"token punctuation\">,</span>\n    <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">)</span>\n      <span class=\"token keyword\">if</span> x <span class=\"token operator\">==</span> <span class=\"token string\">'&lt;'</span> <span class=\"token keyword\">then</span>\n        <span class=\"token keyword\">return</span> <span class=\"token string\">'&amp;lt;'</span>\n      <span class=\"token keyword\">elseif</span> x <span class=\"token operator\">==</span> <span class=\"token string\">'>'</span> <span class=\"token keyword\">then</span>\n        <span class=\"token keyword\">return</span> <span class=\"token string\">'&amp;gt;'</span>\n      <span class=\"token keyword\">elseif</span> x <span class=\"token operator\">==</span> <span class=\"token string\">'&amp;'</span> <span class=\"token keyword\">then</span>\n        <span class=\"token keyword\">return</span> <span class=\"token string\">'&amp;amp;'</span>\n      <span class=\"token keyword\">elseif</span> x <span class=\"token operator\">==</span> <span class=\"token string\">'\"'</span> <span class=\"token keyword\">then</span>\n        <span class=\"token keyword\">return</span> <span class=\"token string\">'&amp;quot;'</span>\n      <span class=\"token keyword\">elseif</span> x <span class=\"token operator\">==</span> <span class=\"token string\">\"'\"</span> <span class=\"token keyword\">then</span>\n        <span class=\"token keyword\">return</span> <span class=\"token string\">'&amp;#39;'</span>\n      <span class=\"token keyword\">else</span>\n        <span class=\"token keyword\">return</span> x\n      <span class=\"token keyword\">end</span>\n    <span class=\"token keyword\">end</span>\n  <span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">end</span>\n\n<span class=\"token keyword\">local</span> <span class=\"token keyword\">function</span> <span class=\"token function\">getCodeClass</span><span class=\"token punctuation\">(</span>classes<span class=\"token punctuation\">)</span>\n  <span class=\"token comment\">-- Check if the first element of classes (pandoc.CodeBlock.classes) matches a</span>\n  <span class=\"token comment\">-- programming language name. If it does, it gets removed from classes and a valid</span>\n  <span class=\"token comment\">-- HTML class attribute string (with space at beginning) is returned.</span>\n\n  <span class=\"token keyword\">if</span> languages<span class=\"token punctuation\">[</span>classes<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token keyword\">then</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">' class=\"language-'</span> <span class=\"token operator\">..</span> table<span class=\"token punctuation\">.</span><span class=\"token function\">remove</span><span class=\"token punctuation\">(</span>classes<span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">..</span> <span class=\"token string\">'\"'</span>\n  <span class=\"token keyword\">else</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">''</span>\n  <span class=\"token keyword\">end</span>\n<span class=\"token keyword\">end</span>\n\n<span class=\"token keyword\">local</span> <span class=\"token keyword\">function</span> <span class=\"token function\">makeIdentifier</span><span class=\"token punctuation\">(</span>ident<span class=\"token punctuation\">)</span>\n  <span class=\"token comment\">-- Returns a valid HTML id attribute (with space at beginning) OR empty string.</span>\n\n  <span class=\"token keyword\">if</span> <span class=\"token operator\">#</span>ident <span class=\"token operator\">~=</span> <span class=\"token number\">0</span> <span class=\"token keyword\">then</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">' id=\"'</span><span class=\"token operator\">..</span> ident <span class=\"token operator\">..</span> <span class=\"token string\">'\"'</span>\n  <span class=\"token keyword\">else</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">''</span>\n  <span class=\"token keyword\">end</span>\n<span class=\"token keyword\">end</span>\n\n<span class=\"token keyword\">local</span> <span class=\"token keyword\">function</span> <span class=\"token function\">makeClasses</span><span class=\"token punctuation\">(</span>classes<span class=\"token punctuation\">)</span>\n  <span class=\"token comment\">-- Returns a valid HTML class attribute with classes separated by spaces (with a space</span>\n  <span class=\"token comment\">-- at the beginning) OR empty string.</span>\n\n  <span class=\"token keyword\">if</span> <span class=\"token operator\">#</span>classes <span class=\"token operator\">~=</span> <span class=\"token number\">0</span> <span class=\"token keyword\">then</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">' class=\"'</span> <span class=\"token operator\">..</span> table<span class=\"token punctuation\">.</span><span class=\"token function\">concat</span><span class=\"token punctuation\">(</span>classes<span class=\"token punctuation\">,</span> <span class=\"token string\">' '</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">..</span> <span class=\"token string\">'\"'</span>\n  <span class=\"token keyword\">else</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">''</span>\n  <span class=\"token keyword\">end</span>\n<span class=\"token keyword\">end</span>\n\n<span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token punctuation\">{</span>\n    CodeBlock <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span>elem<span class=\"token punctuation\">)</span>\n      <span class=\"token keyword\">if</span> FORMAT <span class=\"token operator\">~=</span> <span class=\"token string\">'html'</span> <span class=\"token keyword\">then</span>\n        <span class=\"token keyword\">return</span> <span class=\"token keyword\">nil</span>\n      <span class=\"token keyword\">end</span>\n\n      id <span class=\"token operator\">=</span> <span class=\"token function\">makeIdentifier</span><span class=\"token punctuation\">(</span>elem<span class=\"token punctuation\">.</span>identifier<span class=\"token punctuation\">)</span>\n      classLang <span class=\"token operator\">=</span> <span class=\"token function\">getCodeClass</span><span class=\"token punctuation\">(</span>elem<span class=\"token punctuation\">.</span>classes<span class=\"token punctuation\">)</span>\n      classReg <span class=\"token operator\">=</span> <span class=\"token function\">makeClasses</span><span class=\"token punctuation\">(</span>elem<span class=\"token punctuation\">.</span>classes<span class=\"token punctuation\">)</span>\n\n      <span class=\"token keyword\">local</span> preCode <span class=\"token operator\">=</span> string<span class=\"token punctuation\">.</span><span class=\"token function\">format</span><span class=\"token punctuation\">(</span>\n        <span class=\"token string\">'&lt;pre%s%s>&lt;code%s>%s&lt;/code>&lt;/pre>'</span><span class=\"token punctuation\">,</span> id<span class=\"token punctuation\">,</span> classReg<span class=\"token punctuation\">,</span> classLang<span class=\"token punctuation\">,</span> <span class=\"token function\">escape</span><span class=\"token punctuation\">(</span>elem<span class=\"token punctuation\">.</span>text<span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">)</span>\n      <span class=\"token keyword\">return</span> pandoc<span class=\"token punctuation\">.</span><span class=\"token function\">RawBlock</span><span class=\"token punctuation\">(</span><span class=\"token string\">'html'</span><span class=\"token punctuation\">,</span> preCode<span class=\"token punctuation\">,</span> <span class=\"token string\">'RawBlock'</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">end</span><span class=\"token punctuation\">,</span>\n\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>I saved this script with the name <code class=\"language-text\">standard_code.lua</code>.</p>\n<p>In my environment, Pandoc runs inside a Docker container, so I executed the following command to use the Lua script.</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">docker</span> run --rm --volume <span class=\"token string\">\"<span class=\"token variable\"><span class=\"token variable\">`</span><span class=\"token builtin class-name\">pwd</span><span class=\"token variable\">`</span></span>:/data\"</span> --user <span class=\"token variable\"><span class=\"token variable\">`</span><span class=\"token function\">id</span> -u<span class=\"token variable\">`</span></span><span class=\"token builtin class-name\">:</span><span class=\"token variable\"><span class=\"token variable\">`</span><span class=\"token function\">id</span> -g<span class=\"token variable\">`</span></span> pandoc/core --lua-filter /data/standard_code.lua /data/sample.md -o /data/sample.html</code></pre></div>\n<p>This made it possible to generate HTML with code blocks that can use Prism.js syntax highlighting.</p>\n<h2 id=\"summary\" style=\"position:relative;\"><a href=\"#summary\" aria-label=\"summary permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Summary</h2>\n<p>You could achieve the same thing by parsing a normally generated HTML file with a regular expression, but since I had the chance, I tried using a Pandoc filter as a learning exercise.</p>","fields":{"slug":"/note-pandoc-and-prismjs-en","tagSlugs":["/tag/notes/","/tag/pandoc/","/tag/memo/","/tag/english/"]},"frontmatter":{"date":"2021-06-27","description":"","tags":["Notes","Pandoc","Memo","English"],"title":"A Neat Way to Make HTML Code Blocks Generated by Pandoc Compatible with prism.js Syntax Highlighting","socialImage":{"publicURL":"/static/dc4d8b7f8795f3c3d3489d9957d155f2/no-image.png"}}}},"pageContext":{"slug":"/note-pandoc-and-prismjs-en"}},"staticQueryHashes":["251939775","401334301","825871152"]}