Move build scripts into their own folder

This commit is contained in:
2021-10-21 22:39:25 -07:00
parent 095d0e3e84
commit 304fcaed10
4 changed files with 3 additions and 3 deletions

20
build/builder.sh Normal file
View File

@@ -0,0 +1,20 @@
source $stdenv/setup
# Copy files to a mutable directory.
cp -r $src/* .
# Hugo can't set baseUrl via CLI for multi-lingual hosts.
# We have to manually edit the configuration.
sed -i "$urlSub" config.toml
# Build site with Hugo
hugo $extraFlags
# Output result
mkdir $out
cp -r public/$publicPath/* $out/
# Render math in HTML and XML files.
node $server &
sleep 1
find $out/ -regex "$out/.*\.html" | xargs ruby $converter

36
build/convert.rb Normal file
View File

@@ -0,0 +1,36 @@
require "open3"
require "nokogiri"
require "net/http"
require "json"
def render_cached(cache, display, string, render_comment = nil)
cache.fetch(string) do |new|
puts " Rendering #{render_comment || new}"
res = Net::HTTP.post URI("http://localhost:8000/render"),
{ :equations => [ { :str => string, :display => display } ] }.to_json,
"Content-Type" => "application/json"
cache[string] = JSON.parse(res.body)[0]
end
end
def perform_katex_sub(inline_cache, display_cache, content)
rendered = content.gsub /\\\(((?:[^\\]|\\[^\)])*)\\\)/ do |match|
render_cached(inline_cache, false, $~[1])
end
rendered = rendered.gsub /\$\$((?:[^\$]|$[^\$])*)\$\$/ do |match|
render_cached(display_cache, true, $~[1], "display")
end
return rendered
end
files = ARGV[0..-1]
inline_cache, display_cache = {}, {}
files.each do |file|
puts "Rendering file: #{file}"
document = Nokogiri::HTML.parse(File.open(file))
document.search('//*[not(ancestor-or-self::code)]/text()').each do |t|
t.replace(perform_katex_sub(inline_cache, display_cache, t.content))
end
File.write(file, document.to_html(encoding: 'UTF-8'))
end

11
build/katexserver.js Normal file
View File

@@ -0,0 +1,11 @@
const katex = require('katex');
const express = require('express');
const bodyParser = require('body-parser');
app = express();
app.use(bodyParser.json());
app.post('/render', (req, res) => {
res.send(req.body.equations.map(eq =>
katex.renderToString(eq.str, { throwOnError: false, displayMode: eq.display })));
});
app.listen(8000);