class Mathjax_Renderer::RendererServer

Public Instance Methods

add_content(content, extra_style = '', padding = 0) click to toggle source
# File lib/mathjax_renderer/renderer.rb, line 137
def add_content(content, extra_style = '', padding = 0)
  digest = Digest::SHA1.hexdigest(content)
  path = "/#{digest}.html"
  server.mount_proc path do |_, res|
    res.body = response(content, extra_style, padding)
  end

  path
end
ensure_started!() click to toggle source
# File lib/mathjax_renderer/renderer.rb, line 171
def ensure_started!
  if start!
    Thread.start do
      require 'webrick'

      self.server = WEBrick::HTTPServer.new(
        :Port => 0,
        :AccessLog => [],
        :Logger => WEBrick::Log::new('/dev/null', 7)
      )

      server.mount_proc "/index.html" do |_, res|
        res.body = "OK"
      end

      begin
        server.start
      ensure
        server.shutdown
      end
    end
  end
  def server_started?
    require 'net/http'
    uri = URI("http://localhost:#{port}/index.html")

    req = Net::HTTP::Get.new(uri)
    res = Net::HTTP.start(uri.hostname, uri.port) {|http|
      http.read_timeout = 1
      http.request(req)
    }

    res.is_a?(Net::HTTPSuccess)
  rescue
    false
  end

  Timeout.timeout(5) do
    sleep 0.1 until server_started?
  end

end
port() click to toggle source
# File lib/mathjax_renderer/renderer.rb, line 147
def port
  server.config[:Port]
end
response(content, extra_style, padding) click to toggle source
# File lib/mathjax_renderer/renderer.rb, line 151
    def response(content, extra_style, padding)
      "
        <html><head>
      <script type='text/x-mathjax_renderer-config'>
          MathJax.Hub.Config({
            messageStyle: 'none',
            showMathMenu:false
          });
      </script>
<style>body{display: flex;justify-content: center;}
#{extra_style}
.MathJax{
        left: #{padding}px;
        top: #{padding}px;
}</style>
      <script type='text/javascript'
            src='https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'></script>
</head><body>#{content}</body></html>"
    end
server_started?() click to toggle source
# File lib/mathjax_renderer/renderer.rb, line 193
def server_started?
  require 'net/http'
  uri = URI("http://localhost:#{port}/index.html")

  req = Net::HTTP::Get.new(uri)
  res = Net::HTTP.start(uri.hostname, uri.port) {|http|
    http.read_timeout = 1
    http.request(req)
  }

  res.is_a?(Net::HTTPSuccess)
rescue
  false
end

Private Instance Methods

server() click to toggle source
# File lib/mathjax_renderer/renderer.rb, line 216
def server
  @@server
end
server=(server) click to toggle source
# File lib/mathjax_renderer/renderer.rb, line 220
def server=(server)
  @@server = server
end
start!() click to toggle source
# File lib/mathjax_renderer/renderer.rb, line 226
def start!
  @@started.make_true
end