Beispiel #1
0
        /// <summary>
        /// Match type and episode. e.g. "ED1", "OP4a", "OVA2".
        /// </summary>
        /// <param name="word">the word</param>
        /// <param name="token">the token</param>
        /// <returns>true if the token matched</returns>
        private bool MatchTypeAndEpisodePattern(string word, Token token)
        {
            var numberBegin = ParserHelper.IndexOfFirstDigit(word);
            var prefix      = StringHelper.SubstringWithCheck(word, 0, numberBegin);

            var category = Element.ElementCategory.ElementAnimeType;
            var options  = new KeywordOptions();

            if (!KeywordManager.FindAndSet(KeywordManager.Normalize(prefix), ref category, ref options))
            {
                return(false);
            }
            _parser.Elements.Add(new Element(Element.ElementCategory.ElementAnimeType, prefix));
            var number = word.Substring(numberBegin);

            if (!MatchEpisodePatterns(number, token) && !SetEpisodeNumber(number, token, true))
            {
                return(false);
            }
            var foundIdx = _parser.Tokens.IndexOf(token);

            if (foundIdx == -1)
            {
                return(true);
            }
            token.Content = number;
            _parser.Tokens.Insert(foundIdx,
                                  new Token(options.Identifiable ? Token.TokenCategory.Identifier : Token.TokenCategory.Unknown, prefix, token.Enclosed));

            return(true);
        }
Beispiel #2
0
        /// <summary>
        /// Removes the extension from the <see cref="filename"/>
        /// </summary>
        /// <param name="filename">the ref that will be updated with the new filename</param>
        /// <param name="extension">the ref that will be updated with the file extension</param>
        /// <returns>if the extension was successfully separated from the filename</returns>
        private static bool RemoveExtensionFromFilename(ref string filename, ref string extension)
        {
            int position;

            if (string.IsNullOrEmpty(filename) || (position = filename.LastIndexOf('.')) == -1)
            {
                return(false);
            }

            /** remove file extension */
            extension = filename.Substring(position + 1);
            if (extension.Length > 4 || !extension.All(char.IsLetterOrDigit))
            {
                return(false);
            }

            /** check if valid anime extension */
            var keyword = KeywordManager.Normalize(extension);

            if (!KeywordManager.Contains(Element.ElementCategory.ElementFileExtension, keyword))
            {
                return(false);
            }

            filename = filename.Substring(0, position);
            return(true);
        }