blob: b70dfa936a7ece974056c1c45c3a4860040f03b8 [file] [log] [blame]
# -*- coding: utf-8 -*-
#
#--
# Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at>
#
# This file is part of kramdown which is licensed under the MIT.
#++
#
module Kramdown::Converter::MathEngine
# Uses the mathjax-node library for converting math formulas to MathML.
module MathjaxNode
# MathjaxNode is available if this constant is +true+.
AVAILABLE = RUBY_VERSION >= '1.9' && begin
%x{node --version}[1..-2] >= '4.0'
rescue
begin
%x{nodejs --version}[1..-2] >= '4.0'
rescue
false
end
end && begin
npm = %x{npm --global --depth=1 list mathjax-node 2>&1}
unless /mathjax-node@/ === npm.lines.drop(1).join("\n")
npm = %x{npm --depth=1 list mathjax-node 2>&1}
end
T2MPATH = File.join(npm.lines.first.strip, "node_modules/mathjax-node/bin/tex2mml")
/mathjax-node@/ === npm.lines.drop(1).join("\n") && File.exist?(T2MPATH)
rescue
false
end
def self.call(converter, el, opts)
type = el.options[:category]
cmd = [T2MPATH]
cmd << "--inline" unless type == :block
cmd << "--semantics" if converter.options[:math_engine_opts][:semantics] == true
cmd << "--notexhints" if converter.options[:math_engine_opts][:texhints] == false
result = IO.popen(cmd << el.value).read.strip
attr = el.attr.dup
attr.delete('xmlns')
attr.delete('display')
result.insert("<math".length, converter.html_attributes(attr))
(type == :block ? "#{' '*opts[:indent]}#{result}\n" : result)
end
end
end