From 13cf6263b0d55870d83138506cc9091675eeaa80 Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Tue, 7 Apr 2020 15:53:56 -0700 Subject: [PATCH] Update blog builder to use KaTeX and statically render math. --- blog/convert.rb | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 blog/convert.rb diff --git a/blog/convert.rb b/blog/convert.rb new file mode 100644 index 0000000..cd6602e --- /dev/null +++ b/blog/convert.rb @@ -0,0 +1,33 @@ +require "open3" +require "nokogiri" + +def perform_katex_sub(content) + rendered = content.gsub /\\\(((?:[^\\]|\\[^\)])*)\\\)/ do |match| + puts " Rendering #{$~[1]}" + Open3.popen3("$(npm bin)/katex") do |i, o, e, t| + i.write $~[1] + i.close + o.read.force_encoding(Encoding::UTF_8).strip + end + end + rendered = rendered.gsub /\$\$((?:[^\$]|$[^\$])*)\$\$/ do |match| + puts " Rendering display #{$~[1][0..30].strip}" + Open3.popen3("$(npm bin)/katex -d") do |i, o, e, t| + i.write $~[1] + i.close + o.read.force_encoding(Encoding::UTF_8).strip + end + end + return rendered +end + +files = ARGV[0..-1] + +files.each do |file| + puts "Rendering file: #{file}" + document = Nokogiri::HTML.parse(File.open(file)) + document.search('//text()').each do |t| + t.replace(perform_katex_sub(t.content)) + end + File.write(file, document.to_html) +end