Sha256: a78d98951d5b0453cdc611c1cfcc0dfdb72c29694c9b1617a4cba3be057da4a8

Contents?: true

Size: 1.72 KB

Versions: 1

Compression:

Stored size: 1.72 KB

Contents

module Asciidoctor
  module Pdf
    module Linewrap
      module Ja
        module Converter

          # 行頭禁則文字
          PROHIBIT_LINE_BREAK_BEFORE =
            '}〕〉》」』】〙〗〟⦆»' +
            'ゝゞーァィゥェォッャュョヮヵヶぁぃぅぇぉっゃゅょゎゕゖㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇷ゚ㇺㇻㇼㇽㇾㇿ々〻' +
            'ァィゥェォッャュョ' +
            '‐゠〜~' +
            '‼⁇⁈⁉' +
            '?!' +
            '・' +
            '、。'

          # 行末禁則文字
          PROHIBIT_LINE_BREAK_AFTER = '{〔〈《「『【〘〖〝⦅«'

          # 分離禁止文字
          PROHIBIT_DIVIDE = '…‥〳〴〵'

          # ゼロ幅スペース
          ZERO_WIDTH_SPACE = '{zwsp}'

          def self.insert_zero_width_space(line)

            new_line = ''

            line.each_char.with_index do |ch, idx|

              new_line << ch
              new_line << ZERO_WIDTH_SPACE if insert_zero_width_space?(ch, line[idx + 1])
            end

            return new_line
          end

          def self.insert_zero_width_space?(ch, next_ch)
            japanese_char?(ch) \
              && !PROHIBIT_LINE_BREAK_AFTER.include?(ch) \
              && next_ch != nil && !PROHIBIT_LINE_BREAK_BEFORE.include?(next_ch) \
              && !(PROHIBIT_DIVIDE.include?(ch) && PROHIBIT_DIVIDE.include?(next_ch))
          end

          def self.japanese_char?(ch)
            (/[\p{Han}\p{Hiragana}\p{Katakana}ー]/ === ch) \
              || PROHIBIT_LINE_BREAK_BEFORE.include?(ch) \
              || PROHIBIT_LINE_BREAK_AFTER.include?(ch) \
              || PROHIBIT_DIVIDE.include?(ch)
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
asciidoctor-pdf-linewrap-ja-0.1.0 lib/asciidoctor/pdf/linewrap/ja/converter.rb