Sha256: 4f80d5f38b45d6c542df05fd8d978a2e3056326fc56b70e8aeb208d5765221f4

Contents?: true

Size: 1 KB

Versions: 2

Compression:

Stored size: 1 KB

Contents

module Amakanize
  module Filters
    class BracketsNormalizationFilter < BaseFilter
      PAIRS = %w|
        ‾ ‾
        - -
        ― ―
        〜 〜
        ‹ ›
        « »
        ( )
        [ ]
        { }
        { }
        〈 〉
        《 》
        【 】
        〔 〕
        〘 〙
        〚 〛
        \[ \]
        < >
        < >
        ~ ~
      |.each_slice(2)

      # @note Override
      # @param output [String] e.g. `"IS〈インフィニット・ストラトス〉 1 (オーバーラップ文庫)"`
      # @return [Hash] e.g. `"IS (インフィニット・ストラトス) 1 (オーバーラップ文庫)"`
      def call(context:, output:)
        {
          context: context,
          output: PAIRS.each_with_object(output) do |(open, close), result|
            result.gsub!(/#{open}([^\(]+?)#{close}/, '(\1)')
          end.gsub(/\s*\((.+?)\)(?:\z|(\s*))/) do
            " \(#{$1})#{' ' if $2}"
          end
        }
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
amakanize-0.5.1 lib/amakanize/filters/brackets_normalization_filter.rb
amakanize-0.5.0 lib/amakanize/filters/brackets_normalization_filter.rb