protected override bool NumberNodeVisitor_OnVisited(NumberNode node, int level, out List <ParagraphFormatException> exceptions) { exceptions = new List <ParagraphFormatException>(); var m = leftRegex.Match(node.Header); var data = new StringDataView(node.Header); while (m.Success) { data.Position = m.Index + m.Length; var numbers = _numberParser.Consume(data); if (numbers.Any()) { var number = numbers.First(); var afterNumberData = number.DataView; var rightMatch = rightRegex.Match(afterNumberData.CurrentView.ToString()); if (rightMatch.Success) { node.SelectiveDescription = node.Header.Substring( m.Index, afterNumberData.Position + rightMatch.Index + rightMatch.Length - m.Index); node.SelectCount = number.Result.IntNumber; return(false); } } m = m.NextMatch(); } return(true); }
private NumberNode?ExtractFromParagraph(ParagraphPart paragraph) { paragraph = paragraph.TrimStart(); var content = paragraph.Content; var data = new StringDataView(content); return(ExtractFromDataView(data, paragraph.Order)); }
private bool IsChoiceQuestion(NumberNode node) { if (node.Children.Count > 1) { var firstChildNumber = node.Children.First().DecoratedNumber; if (firstChildNumber is UndecoratedNumber || firstChildNumber is DelimiterDecoratedNumber) { if (firstChildNumber.Number is AlphabeticalNumber alphabeticalNumber && alphabeticalNumber.IsHalfWidth && !alphabeticalNumber.IsLower) { return(true); } } } IDataView data = new StringDataView(node.Header); while (!data.EndOfStream) { var index = data.CurrentView.IndexOf("的"); if (index == -1) { return(false); } data = data.CloneByDelta(index + 1); var choiceCount = _lowerChineseNumberParser.Consume(data).SingleOrDefault(); if (choiceCount != null) { data = choiceCount.DataView; if (_suffix.IsMatch(data.CurrentView.ToString())) { return(true); } } } return(false); }