Class: Kotoshu::Languages::Spanish::GrammarRules::InvertedPunctuationRule
- Inherits:
-
Rule
- Object
- Rule
- Kotoshu::Languages::Spanish::GrammarRules::InvertedPunctuationRule
- Defined in:
- lib/kotoshu/languages/es/language.rb
Overview
Rule: Inverted punctuation (¡, ¿)
Instance Attribute Summary
Attributes inherited from Rule
Instance Method Summary collapse
- #check(tokens) ⇒ Object
-
#initialize ⇒ InvertedPunctuationRule
constructor
A new instance of InvertedPunctuationRule.
Constructor Details
#initialize ⇒ InvertedPunctuationRule
Returns a new instance of InvertedPunctuationRule.
276 277 278 |
# File 'lib/kotoshu/languages/es/language.rb', line 276 def initialize super('ES_INVERTED_PUNCTUATION', 'Inverted Punctuation', 'Spanish requires inverted punctuation marks (¡, ¿) at the start of exclamations/questions.') end |
Instance Method Details
#check(tokens) ⇒ Object
280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 |
# File 'lib/kotoshu/languages/es/language.rb', line 280 def check(tokens) errors = [] tokens.each_with_index do |token, idx| word = token[:token] next if word.nil? || word.empty? # Check for standard ? or ! without corresponding inverted marks if ['?', '!'].include?(word) # Look backwards to see if there's an inverted mark found_inverted = false (0...idx).reverse_each do |j| check_token = tokens[j][:token] if (word == '?' && check_token == '¿') || (word == '!' && check_token == '¡') found_inverted = true break end # Stop checking if we hit another sentence-ending punctuation break if %w[. ? !].include?(check_token) end unless found_inverted errors << { rule_id: @id, position: token[:position], message: "Missing inverted punctuation mark: use '#{word == '?' ? '¿' : '¡'}' at the start", suggestion: word == '?' ? '¿...?' : '¡...!', context: word, suggestions: [word == '?' ? '¿...?' : '¡...!'] } end end end errors end |