# frozen-string-literal: true module Bioshogi module Formatter class KifBuilder include Builder include KifKi2Shared HEADER_BODY_SEPARATOR = "手数----指手---------消費時間--" class << self def default_params super.merge({ :hand_width => 12, :number_width => 4, :time_embed_force => false, # 強制的に時間を含めるか? }) end end private def build_before if @params[:time_embed_force] || @formatter.pi.clock_exist? @main_clock = MainClock.new end end def body_header HEADER_BODY_SEPARATOR + "\n" end def body_hands @formatter.container.hand_logs.collect.with_index { |e, i| if @main_clock @main_clock.add(@formatter.used_seconds_at(i)) end s = e.to_kif(char_type: :formal_sheet) s = mb_ljust(s, @params[:hand_width]) n = "%*d" % [@params[:number_width], i.next] s = [n, s, @main_clock].compact.join(" ") s = s.rstrip + "\n" if v = e.to_skill_set_kif_comment s += v end s }.join end def footer_content out = [] left_part = nil right_part = nil if @formatter.last_action_info if kakinoki_word = @formatter.last_action_info.kakinoki_word left_part = "%*d %s" % [ @params[:number_width], @formatter.container.hand_logs.size.next, mb_ljust(kakinoki_word, @params[:hand_width]), ] end if @formatter.pi.last_action_params if used_seconds = @formatter.pi.last_action_params[:used_seconds] if @main_clock @main_clock.add(used_seconds) right_part = @main_clock.to_s end end end if left_part out << "#{left_part} #{right_part}".rstrip + "\n" end end out end end end end