class Aozora2Html::Tag::Ruby

ルビ用

現状、under_rubyは無視しているのに注意

Attributes

ruby[RW]
target[R]
under_ruby[RW]

Public Class Methods

include_ruby?(array) click to toggle source

arrayがルビを含んでいればそのインデックスを返す

@return [Integer, nil]

# File lib/aozora2html/tag/ruby.rb, line 110
def self.include_ruby?(array)
  array.index do |elt|
    case elt
    when Aozora2Html::Tag::Ruby
      true
    when Aozora2Html::Tag::ReferenceMentioned
      if elt.target.is_a?(Array)
        include_ruby?(elt.target)
      else
        elt.target.is_a?(Aozora2Html::Tag::Ruby)
      end
    end
  end
end
new(parser, string, ruby, under_ruby = '') click to toggle source
# File lib/aozora2html/tag/ruby.rb, line 15
def initialize(parser, string, ruby, under_ruby = '')
  @target = string
  @ruby = ruby
  @under_ruby = under_ruby
  super
end
rearrange_ruby(parser, targets, upper_ruby, under_ruby) click to toggle source

rubyタグの再割り当て

# File lib/aozora2html/tag/ruby.rb, line 27
def self.rearrange_ruby(parser, targets, upper_ruby, under_ruby)
  unless include_ruby?(targets)
    return Aozora2Html::Tag::Ruby.new(parser, targets, upper_ruby, under_ruby)
  end

  new_targets = []
  new_upper = if upper_ruby == ''
                []
              else
                upper_ruby
              end
  new_under = if under_ruby == ''
                []
              else
                under_ruby
              end
  if (new_upper.length > 1) && (new_under.length > 1)
    raise Aozora2Html::Error, I18n.t(:dont_allow_triple_ruby)
  end

  targets.each do |x|
    case x
    when Aozora2Html::Tag::Ruby
      raise Aozora2Html::Error, I18n.t(:dont_use_double_ruby) if x.target.is_a?(Array)

      if x.ruby == ''
        raise Aozora2Html::Error, I18n.t(:dont_use_double_ruby) unless new_under.is_a?(Array)

        new_under.push(x.under_ruby)
      else
        raise Aozora2Html::Error, I18n.t(:dont_use_double_ruby) unless new_upper.is_a?(Array)

        new_upper.push(x.ruby)
      end
      new_targets.push(x.target)
    when Aozora2Html::Tag::ReferenceMentioned
      if x.target.is_a?(Array)
        # recursive
        ruby2 = rearrange_ruby(parser, x.target, '', '')
        target2, upper_ruby2, under_ruby2 = ruby2.target, ruby2.ruby, ruby2.under_ruby
        # rotation!!
        target2.each do |y|
          tmp = x.dup
          tmp.target = y
          new_targets.push(tmp)
        end
        if new_under.is_a?(Array)
          new_under.concat(under_ruby2)
        elsif under_ruby2.to_s.length > 0
          raise Aozora2Html::Error, I18n.t(:dont_use_double_ruby)
        end
        if new_upper.is_a?(Array)
          new_upper.concat(upper_ruby2)
        elsif upper_ruby2.to_s.length > 0
          raise Aozora2Html::Error, I18n.t(:dont_use_double_ruby)
        end
      else
        new_targets.push(x)
        if new_under.is_a?(Array)
          new_under.push('')
        end
        if new_upper.is_a?(Array)
          new_upper.push('')
        end
      end
    else
      new_targets.push(x)
      if new_under.is_a?(Array)
        new_under.push('')
      end
      if new_upper.is_a?(Array)
        new_upper.push('')
      end
    end
  end

  Aozora2Html::Tag::Ruby.new(parser, new_targets, new_upper, new_under)
end

Public Instance Methods

to_s() click to toggle source
# File lib/aozora2html/tag/ruby.rb, line 22
def to_s
  "<ruby><rb>#{@target}</rb><rp>#{PAREN_BEGIN_MARK}</rp><rt>#{@ruby}</rt><rp>#{PAREN_END_MARK}</rp></ruby>"
end