pantsu/anifier

View on GitHub
lib/api/grammar/definitions.treetop

Summary

Maintainability
Test Coverage
grammar Definitions

  rule crc32
    [A-Fa-f0-9] 8..8  {
      def content
        [:crc32, text_value.downcase]
      end
    }
  end

  rule resolution
    (digits [pP] / digits [xX] digits) {
      def content
        case elements.size
        when 2; [:resolution, elements.first.text_value]
        when 3; [:resolution, elements.last.text_value]
        end
      end
    }
  end

  rule extname
    '.' word {
      def content
        [:extension, word.text_value.downcase]
      end
    }
  end

  rule volume
    separator* ([vV] ([oO] [lL])? / [dD] [iI] [sS] [cC]) separator* '.'? separator* digits separator* {
      def content
        [:volume, elements[-2].text_value]
      end
    }
  end

  rule episodes_jp
    separator* [\u{7B2C}] digits [\u{8A71}] separator* phrase {
      def content
        [:episodes, elements[2].text_value]
      end
    }
  end

  rule episodes
    separator* (sequence / digits) version? separator* {
      def content
        [:episodes, elements[1..-2].map(&:text_value).join]
      end
    }
  end

  rule issue
    volume / episodes_jp / episodes
  end

  rule issue_separator
    '-' / '#'
  end

  rule version
    [vV] digits
  end

  rule phrase
    (word / separator)+
  end

  rule word
    (unicode / [a-zA-Z0-9\-:!,;\#'~])+
  end

  rule unicode
    ![\u{a0}] [\u0080-\u{10FFFF}]
  end

  rule separator
    ([\u{a0}] / '. ' / ' .' / ' _' / '_ ' / ' ' / '_')+
  end

  rule round_braces
    '(' / ')'
  end

  rule square_braces
    '[' / ']'
  end

  rule sequence
    digits [-~] digits
  end

  rule digits
    [0-9]+
  end

end