lib/herb/libherb/libherb.rb



# frozen_string_literal: true

require "herb/libherb/ast_node"
require "herb/libherb/buffer"
require "herb/libherb/array"
require "herb/libherb/token"

require "herb/libherb/lex_result"
require "herb/libherb/parse_result"

module Herb
  VERSION = LibHerb.herb_version.read_string

  def self.parse(source)
    ParseResult.new(
      LibHerb.herb_parse(source)
    )
  end

  def self.lex(source)
    LexResult.new(
      LibHerb.herb_lex(source)
    )
  end

  def self.lex_to_json(source)
    LibHerb::Buffer.with do |output|
      LibHerb.herb_lex_json_to_buffer(source, output.pointer)

      JSON.parse(output.read.force_encoding("utf-8"))
    end
  end

  def self.extract_ruby(source)
    LibHerb::Buffer.with do |output|
      LibHerb.herb_extract_ruby_to_buffer(source, output.pointer)

      output.read
    end
  end

  def self.extract_html(source)
    LibHerb::Buffer.with do |output|
      LibHerb.herb_extract_html_to_buffer(source, output.pointer)

      output.read
    end
  end
end