aozorahack/aozora2html

View on GitHub
lib/aozora2html/tag/reference_mentioned.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

class Aozora2Html
  class Tag
    # 参照先用
    #
    # 前方参照でこいつだけは中身をチェックする
    # 子要素を持つAozora2Html::Tag::Inlineは全てこいつのサブクラス
    class ReferenceMentioned < Aozora2Html::Tag::Inline
      attr_accessor :target

      def initialize(*_args) # rubocop:disable Lint/MissingSuper
        return unless defined?(@target) && block_element?(@target)

        syntax_error
      end

      def block_element?(elt)
        case elt
        when Array
          elt.any? { |x| block_element?(x) }
        when String
          elt.include?('<div')
        else
          elt.is_a?(Aozora2Html::Tag::Block)
        end
      end

      def target_string
        case @target
        when Aozora2Html::Tag::ReferenceMentioned
          @target.target_string
        when Array
          @target.collect do |x|
            if x.is_a?(Aozora2Html::Tag::ReferenceMentioned)
              x.target_string
            else
              x
            end
          end.join
        else
          @target
        end
      end
    end
  end
end