#
#= PDF出力向けユーティリティ
#-------------------------------------------------------------------------------
#++
module Comm
  module Module
    module PdfUtil
      require 'nkf'
      
      #== 配列を指定件数で分割する
      #-----------------------------------------------------------------#++
      def array_split(array, num)
        tmp_array = Array.new
        if (array.class == (Array))
          array.each_slice(num) do |td| tmp_array << td end
        end
        tmp_array
      end
      
      #== 文字列を1行あたり rows 文字、1ページあたり cols 行に制限する
      # rows: 1行あたりの最大文字数
      # cols: 1ページあたりの最大行数
      # cols_first: 1ページ目の最大行数．nil を指定すれば cols と同値
      # 半角英数は0.5文字としてカウントします
      #-----------------------------------------------------------------#++
      def content_folding(str, rows, cols, cols_first)
        cols_first ||= cols
        str_array = break_split(str)
        
        for i in 0..str_array.length-1 do
          str_array[i] = break_split(NKF.nkf("-wf#{rows*2}", str_array[i]))
        end
        
        tmp_str = ""    
        str_array[0..cols_first-1].each do |line|
          tmp_str += line.to_s + "\n"
        end
        first_page  = [tmp_str]
        
        result = []
        if str_array.size > cols_first
          result = str_array[cols_first..-1].each_slice(cols).map do |line|
            tmp_str = ""
            line.each do |l| tmp_str += l.to_s + "\n" end
            tmp_str
          end
        end
        first_page + result
      end
      
      #== 文字列を改行毎に分割する
      #-----------------------------------------------------------------#++
      def break_split(str)
        $KCODE = 'u'
        str.split(/\n/)
      end
      
    end
  end
end
