public MatchResult(DocumentPatternClass _pattern, DocumentClass _document, string _text = "") { Pattern = _pattern; Document = _document; PatternName = Pattern.Name; DocumentName = Document.Name; Text = _text; Success = false; Childs = new List <MatchResult>(); }
private bool IsChildsMatch(DocumentClass doc, bool amplifyIfMatch = false) { bool success = true; foreach (DocumentClass child in doc.Childs) { //Ищем первый шаблон, в списке дочерних шаблонов, которому удовлетворяет child //TODO: Вообще, подходящих шаблонов может быть несколько и, тогда нужны дополнительные данные для определения, какой шаблон правильный DocumentPatternClass ptrn = ChildsPatterns.FirstOrDefault(p => p.IsMatch(child, amplifyIfMatch)); if (ptrn == null) { result.Text += "Дочерний документ не прошел проверку " + child.Name + "\n"; //Запишем результаты неуспешных проверок дочерних шаблонов в результат проверки текущего шаблона result.Childs.AddRange(ChildsPatterns.Select(p => p.Result)); success = false; } else { //Добавим в дерево результат проверки дочернего документа result.Childs.Add(ptrn.Result); } } return(success); }
/// <summary> /// Метод применяет шаблон pattern к документу, заполняя его атрибуты /// </summary> /// <param name="pattern"></param> public bool AmplifyIfMatch(DocumentPatternClass pattern) { return(pattern.IsMatch(this, true)); }
/// <summary> /// Функция возвращает истину, если документ соответствует шаблону pattern /// </summary> /// <param name="pattern"></param> /// <returns></returns> public bool IsMatchPattern(DocumentPatternClass pattern) { return(pattern.IsMatch(this)); }