module FoodFishParser::Strict::Grammar

grammar Words
  include Common
  include FishNameLatin
  include FishNameNL

  rule word
    word_abbr / '(sub)'i? !words_to_avoid char+
  end

  rule words
    word ( word_sep word )*
  end

  rule words_no_in_on
    !( 'in'i / 'op'i !char ) word ( word_sep !( 'in'i / 'op'i !char ) word )*
  end

  rule words_no_with
    !with word ( word_sep !with word )*
  end

  rule word_sep
    ( ws* ( comma / '/' ) ws* ) / ws+
  end

  rule word_abbr
    ( [a-zA-Z] '.' )+ [a-zA-Z] / [a-zA-Z] '.' ( [a-zA-Z] '.' )+ ![a-zA-Z]
  end

  # these words should not be considered, because they indicate a new section
  rule words_to_avoid
    (
      fish_name_latin /
      fish_name_nl /
      'gevangen'i /
      'visgebied'i /
      'vangstgebied'i /
      'fanggebiet'i /
      'vangstmethode'i /
      'vangsmethode'i /
      'fangmethoden'i /
      'fangmethode'i /
      'betrapt'i /
      'aquacultuurproduct'i /
      'gekweekt'i /
      'kweekmethode'i /
      'kweekmethoden'i /
      'd.m.v'i '.'? /
      'FAO'i /
      'FA0'i
    )
    ![[:alpha:]]
  end
end

end