lib/api/grammar/definitions.treetop
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