// Copyright 2018 The Distill Template Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. import Prism from "prismjs"; import "prismjs/components/prism-python"; import "prismjs/components/prism-clike"; import "prismjs/components/prism-lua"; import "prismjs/components/prism-bash"; import "prismjs/components/prism-go"; import "prismjs/components/prism-markdown"; import "prismjs/components/prism-julia"; export default function(dom, data) { let codeElements = [].slice.call(dom.querySelectorAll("dt-code")); codeElements.forEach(el => { let content = el.textContent; el.innerHTML = ""; let language = el.getAttribute("language"); let c = dom.createElement("code"); if (el.getAttribute("block") === "") { // Let's normalize the tab indents content = content.replace(/\n/, ""); let tabs = content.match(/\s*/); content = content.replace(new RegExp("\n" + tabs, "g"), "\n"); content = content.trim(); let p = dom.createElement("pre"); p.appendChild(c); el.appendChild(p); } else { el.appendChild(c); } let highlighted = content; if (Prism.languages[language]) { c.setAttribute("class", "language-" + language); highlighted = Prism.highlight(content, Prism.languages[language]); } c.innerHTML = highlighted; }); }