public virtual IEnumerable <TextFragmentResource> ParseForQuranReferences(string text) { var matches = QuranRefRegex.Matches(text); var fragments = new List <TextFragmentResource>(); var currentTextIndex = 0; for (var i = 0; i < matches.Count; i++) { var match = matches[i]; if (match.Groups.Count == 3) { fragments.Add(new TextFragmentResource { IsPlainText = true, Text = text.Substring(currentTextIndex, match.Index - currentTextIndex) }); fragments.Add(new TextFragmentResource { QuranReference = new QuranReferenceResource { Surah = int.Parse(match.Groups[1].Value), Verse = int.Parse(match.Groups[2].Value) } }); currentTextIndex = match.Index + match.Length; } } var lastFragment = new TextFragmentResource { IsPlainText = true, Text = text.Substring(currentTextIndex) }; if (!string.IsNullOrEmpty(lastFragment.Text)) { fragments.Add(lastFragment); } return(fragments); }
public void ListContainsThreeFragments() { MethodToTest(() => service.Split(A <TextFragmentResource> .Ignored, A <MembershipRuleTermDefinition> .Ignored)); var fragment = new TextFragmentResource { Text = "some rule or other for a term and another one", IsPlainText = true }; var term = new MembershipRuleTermDefinition { Term = "A Term", Id = 687 }; var result = service.Split(fragment, term); Assert.AreEqual(3, result.Count); Assert.AreEqual("some rule or other for ", result.First().Text); Assert.IsTrue(result[0].IsPlainText); Assert.AreEqual(term.Term, result[1].Text); Assert.AreEqual(term.Id, result[1].TermId); Assert.IsFalse(result[1].IsPlainText); Assert.AreEqual(" and another one", result[2].Text); Assert.IsTrue(result[2].IsPlainText); }
public void BuildsAFragmentListBySplittingWithTheTerm() { MethodToTest(() => service.ApplyTerm(A <List <TextFragmentResource> > .Ignored, A <MembershipRuleTermDefinition> .Ignored)); var fragments = new List <TextFragmentResource>(); var term = new MembershipRuleTermDefinition(); var exampleFragment = new TextFragmentResource(); var exampleReturnedFragmentList = new List <TextFragmentResource>(); A.CallTo(() => service.Split(exampleFragment, term)).Returns(exampleReturnedFragmentList); var fragmentsAfterSplit = new List <TextFragmentResource>(); A.CallTo(() => dependencies.LinqService.SelectMany(fragments, A <Func <TextFragmentResource, IEnumerable <TextFragmentResource> > > .That.Matches(x => x.Invoke(exampleFragment) == exampleReturnedFragmentList ))).Returns(fragmentsAfterSplit); var fragmentsAfterSplitList = new List <TextFragmentResource>(); A.CallTo(() => dependencies.LinqService.EnumerableToList(fragmentsAfterSplit)) .Returns(fragmentsAfterSplitList); var result = service.ApplyTerm(fragments, term); Assert.AreSame(fragmentsAfterSplitList, result); }
public virtual IEnumerable <TextFragmentResource> AddQuranReferences(TextFragmentResource textFragmentResource) { if (!textFragmentResource.IsPlainText) { return(new List <TextFragmentResource>() { textFragmentResource }); } return(ParseForQuranReferences(textFragmentResource.Text)); }
public void ListContainsTheOriginalFragmentOnly() { MethodToTest(() => service.Split(A <TextFragmentResource> .Ignored, A <MembershipRuleTermDefinition> .Ignored)); var fragment = new TextFragmentResource { IsPlainText = false }; var term = new MembershipRuleTermDefinition(); var result = service.Split(fragment, term); Assert.AreEqual(1, result.Count); Assert.AreSame(fragment, result.First()); }
public virtual List <TextFragmentResource> Split(TextFragmentResource fragment, MembershipRuleTermDefinition term) { if (!fragment.IsPlainText) { return(new List <TextFragmentResource> { fragment }); } var indexOfMatch = fragment.Text.ToLower().IndexOf(term.Term.ToLower(), StringComparison.Ordinal); if (indexOfMatch == -1) { return(new List <TextFragmentResource> { fragment }); } var results = new List <TextFragmentResource>(); var textBefore = fragment.Text.Substring(0, indexOfMatch); if (textBefore != string.Empty) { results.Add(new TextFragmentResource { IsPlainText = true, Text = textBefore }); } results.Add(new TextFragmentResource { IsPlainText = false, IsTerm = true, Text = term.Term, TermSlug = _dependencies.UrlSlugService.GetSlug(term.Term), TermId = term.Id }); var textAfter = fragment.Text.Substring(indexOfMatch + term.Term.Length); if (textAfter != string.Empty) { results.Add(new TextFragmentResource { IsPlainText = true, Text = textAfter }); } return(results); }