Sha256: 19f2ccbcfda5545c994edbbd03d67ce3b90464e7df7e515970d063fc210a879c

Contents?: true

Size: 1.48 KB

Versions: 2

Compression:

Stored size: 1.48 KB

Contents

require 'kconv'
require_relative 'jkf/version'
require_relative 'jkf/parser'
require_relative 'jkf/converter'

# JSON Kifu Format
module Jkf
  # raise when unsupport file type
  class FileTypeError < StandardError; end

  class << self
    # ファイルからパースします。拡張子でフォーマットの判定をします。
    #
    # @param [String] filename
    #
    # @return [String] KIF, KI2, CSA, JKF(JSON)
    def parse_file(filename, encoding: 'Shift_JIS')
      parser = case ::File.extname(filename)
               when /kif/
                 ::Jkf::Parser::Kif.new
               when /ki2/
                 ::Jkf::Parser::Ki2.new
               when /csa/
                 ::Jkf::Parser::Csa.new
               when /jkf|json/
                 JSON
               else
                 raise FileTypeError
               end
      str = File.read(File.expand_path(filename), encoding: encoding).toutf8
      parser.parse(str)
    end

    # 文字列からパースします。各パーサでパースに試みて成功した場合結果を返します。
    #
    # @param [String] str
    #
    # @return [Hash] JKF
    def parse(str)
      parsers = [::Jkf::Parser::Kif.new, ::Jkf::Parser::Ki2.new, ::Jkf::Parser::Csa.new, JSON]

      result = nil
      parsers.each do |parser|
        begin
          result = parser.parse(str)
        rescue StandardError
          next
        end
        break
      end
      raise FileTypeError if result.nil?
      result
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
jkf-0.5.2 lib/jkf.rb
jkf-0.5.1 lib/jkf.rb