public TemplateWord(string fullTemplate, int startIndex, int length) { content = fullTemplate.Substring(startIndex, length); start = startIndex; this.length = length; group = 0; PoS = null; string contentCopy = content; if (contentCopy[0] == '@') { int tempGroup; int endGroupIndex = contentCopy.LastIndexOfAny("0123456789".ToCharArray(), 3); if (endGroupIndex > 0) { if (int.TryParse(contentCopy.Substring(1, endGroupIndex), out tempGroup)) { group = tempGroup; } } else { endGroupIndex = 0; } contentCopy = contentCopy.Substring(endGroupIndex + 1); } if (contentCopy[0] == '[' && contentCopy[contentCopy.Length - 1] == ']') { PoS = PartOfSpeech.FromTag(contentCopy.Substring(1, contentCopy.Length - 2)); if (PoS != null) { IsHook = true; } } else if (contentCopy[0] == '<' && contentCopy[contentCopy.Length - 1] == '>') { int indexOfPoSStart = contentCopy.IndexOf('['); if (indexOfPoSStart != -1 && contentCopy[contentCopy.Length - 2] == ']') { string posTag = contentCopy.Substring(indexOfPoSStart + 1, contentCopy.Length - indexOfPoSStart - 3); PoS = PartOfSpeech.FromTag(posTag); if (PoS != null) { Word = new Word(contentCopy.Substring(1, indexOfPoSStart - 1), PoS, 1); IsHook = false; } } if (PoS == null) { Word = WordDictionary.Instance.GetWordByValue(contentCopy.Substring(1, contentCopy.Length - 2)); IsHook = false; } } else { Word tempWord = WordDictionary.Instance.GetWordByValue(contentCopy); if (tempWord.PoS != PartOfSpeech.Unclassified) { PoS = tempWord.PoS; IsHook = true; } } if (PoS == null && Word == null) { Word = WordDictionary.Instance.GetWordByValue(contentCopy); IsHook = false; } }