Esempio n. 1
0
bool Anitomy::RemoveExtensionFromFilename(string_t& filename,
                                          string_t& extension) {
  const size_t position = filename.find_last_of(L'.');

  if (position == string_t::npos)
    return false;

  extension = filename.substr(position + 1);

  const size_t max_length = 4;
  if (extension.length() > max_length)
    return false;

  if (!IsAlphanumericString(extension))
    return false;

  // TODO: Add an option for this
  auto keyword = StringToUpperCopy(extension);
  if (!keyword_manager.Find(kElementFileExtension, keyword))
    return false;

  filename.resize(position);

  return true;
}
Esempio n. 2
0
string_t KeywordManager::Normalize(const string_t& str) const {
  return StringToUpperCopy(str);
}
Esempio n. 3
0
void Parser::SearchForKeywords() {
  for (auto& token : tokens_) {
    if (token.category != kUnknown)
      continue;

    auto word = token.content;
    TrimString(word);

    // Don't bother if the word is a number that cannot be CRC
    if (word.size() != 8 && IsNumericString(word))
      continue;

    // Performs better than making a case-insensitive Find
    auto keyword = StringToUpperCopy(word);

    for (int i = kElementIterateFirst; i < kElementIterateLast; i++) {
      auto category = static_cast<ElementCategory>(i);

      if (!parse_options.parse_release_group)
        if (category == kElementReleaseGroup)
          continue;

      if (!IsElementCategorySearchable(category))
        continue;

      if (IsElementCategorySingular(category))
        if (!elements_.empty(category))
          continue;

      bool add_keyword = false;
      KeywordOptions options;

      switch (category) {
        case kElementFileChecksum:
          add_keyword = IsCrc32(word);
          break;
        case kElementVideoResolution:
          add_keyword = IsResolution(word);
          break;
        default:
          add_keyword = keyword_manager.Find(category, keyword, options);
          break;
      }

      if (add_keyword) {
        switch (category) {
          case kElementReleaseVersion:
            elements_.insert(category, word.substr(1));  // number without "v"
            break;
          default:
            elements_.insert(category, word);
            break;
        }

        if (options.safe || token.enclosed)
          token.category = kIdentifier;

        break;
      }
    }
  }
}