コード例 #1
0
        public string GetVerseSimpleText(string verseText, VerseIndex index, string baseBookShortcut)
        {
            var translation = index.TranslationName;
            var simpleText  = verseText.Replace("</t>", "").Replace("<t>", "").Replace("<pb/>", "").Replace("<n>", "").Replace("</n>", "").Replace("<e>", "").Replace("</e>", "").Replace("―", "").Replace('\'', ' ').Replace("<J>", "").Replace("</J>", "").Replace("<i>", "").Replace("</i>", "");

            if (translation == "NPI" || translation == "IPD")
            {
                simpleText = simpleText.Replace("―", "");
            }
            if (translation == "PBD")
            {
                translation = "SNPPD";
            }
            simpleText = System.Text.RegularExpressions.Regex.Replace(simpleText, @"\<f\>\[[0-9]+\]\<\/f\>", "");
            simpleText = $"{baseBookShortcut} {index.NumberOfChapter}:{index.NumberOfVerse} „{simpleText}” ({translation})";
            return(simpleText);
        }
コード例 #2
0
        internal CompareVerseModel GetModel(QueryString qs)
        {
            if (qs.IsNotNull() && qs.Value.IsNotNullOrEmpty() && qs.Value.Length > 3)
            {
                var value       = qs.Value;
                var onlyLiteral = value.Contains("literal");
                if (value.Contains("&"))
                {
                    value = value.Substring(0, value.IndexOf("&"));
                }
                var id  = value.Replace("?id=", "").Trim();
                var vi  = new VerseIndex(id);
                var uow = new UnitOfWork();

                var baseBookShortcut = "";
                var baseBookName     = "";
                var biblePart        = BiblePart.None;
                var viewBaseBook     = new XPView(uow, typeof(BookBase))
                {
                    CriteriaString = $"NumberOfBook == {vi.NumberOfBook}"
                };
                viewBaseBook.Properties.Add(new ViewProperty("Oid", SortDirection.None, "[Oid]", false, true));
                viewBaseBook.Properties.Add(new ViewProperty("BookShortcut", SortDirection.None, "[BookShortcut]", false, true));
                viewBaseBook.Properties.Add(new ViewProperty("BookName", SortDirection.None, "[BookName]", false, true));
                viewBaseBook.Properties.Add(new ViewProperty("BiblePart", SortDirection.None, "[Status.BiblePart]", false, true));
                if (viewBaseBook.Count > 0)
                {
                    foreach (ViewRecord item in viewBaseBook)
                    {
                        baseBookShortcut = item["BookShortcut"].ToString();
                        baseBookName     = item["BookName"].ToString();
                        biblePart        = (BiblePart)item["BiblePart"];
                    }
                }

                var verses = new List <CompareVerseInfo>();
                var result = new CompareVerseModel()
                {
                    Index        = vi,
                    Verses       = new List <CompareVerseInfo>(),
                    BookName     = baseBookName,
                    BookShortcut = baseBookShortcut,
                    Part         = biblePart
                };


                var criteriaString = "[Hidden] = 0";
                if (onlyLiteral)
                {
                    criteriaString += " AND (([Type] = 1) OR ([Type] = 2))";
                }

                var viewTranslation = new XPView(uow, typeof(Translation))
                {
                    CriteriaString = criteriaString
                };
                viewTranslation.Properties.Add(new ViewProperty("Oid", SortDirection.None, "[Oid]", false, true));
                viewTranslation.Properties.Add(new ViewProperty("Name", SortDirection.None, "[Name]", false, true));
                viewTranslation.Properties.Add(new ViewProperty("Description", SortDirection.None, "[Description]", false, true));
                viewTranslation.Properties.Add(new ViewProperty("Type", SortDirection.Descending, "[Type]", false, true));

                var indexes = new List <string>();
                foreach (ViewRecord item in viewTranslation)
                {
                    var name   = item["Name"].ToString();
                    var _index = $"{name.Replace("'", "").Replace("+", "")}.{vi.NumberOfBook}.{vi.NumberOfChapter}.{vi.NumberOfVerse}";
                    indexes.Add(_index);

                    var cvi = new CompareVerseInfo()
                    {
                        Index                  = new VerseIndex(_index),
                        TranslationName        = item["Name"].ToString(),
                        TranslationDescription = item["Description"].ToString(),
                        TranslationType        = (TranslationType)item["Type"],
                        SortIndex              = ((TranslationType)item["Type"]).GetCategory().ToInt()
                    };
                    verses.Add(cvi);
                }

                var _view = new XPView(uow, typeof(Verse))
                {
                    Criteria = new DevExpress.Data.Filtering.InOperator("Index", indexes)
                };

                _view.Properties.Add(new ViewProperty("Index", SortDirection.None, "[Index]", false, true));
                _view.Properties.Add(new ViewProperty("Text", SortDirection.Descending, "[Text]", false, true));

                foreach (ViewRecord item in _view)
                {
                    var idx  = item["Index"].ToString();
                    var text = item["Text"].ToString();
                    var cvi  = verses.Where(x => x.Index.Index == idx).FirstOrDefault();
                    if (cvi.IsNotNull())
                    {
                        cvi.Text     = text;
                        cvi.HtmlText = text
                                       .Replace("―", String.Empty)
                                       .Replace("<n>", @"<span class=""text-muted"">")
                                       .Replace("</n>", "</span>")
                                       .Replace("<J>", "<span style='color: darkred;'>")
                                       .Replace("</J>", "</span>");
                        cvi.SimpleText = BibleTag.GetVerseSimpleText(text, cvi.Index, baseBookShortcut);
                    }
                }

                result.Verses = verses.Where(x => x.Text.IsNotNullOrEmpty()).OrderBy(x => x.SortIndex).ToList();

                return(result);
            }
            return(null);
        }
コード例 #3
0
        public void LoadData(Verse verse, bool loadOtherTranslations = true)
        {
            Verse = verse;
            Words = new List <VerseWordInfo>();
            if (verse.IsNotNull())
            {
                foreach (var item in verse.VerseWords.OrderBy(x => x.NumberOfVerseWord))
                {
                    Words.Add(new VerseWordInfo(item));
                }
            }
            gridControl.DataSource = Words;

            cbStartFromNewLine.Checked = Verse.StartFromNewLine;

            txtStoryTextLevel1.Text = String.Empty;
            txtStoryTextLevel2.Text = String.Empty;

            var subtitles = Verse.ParentChapter.Subtitles.Where(x => x.BeforeVerseNumber == Verse.NumberOfVerse);

            foreach (var subtitle in subtitles)
            {
                if (subtitle.Level == 1)
                {
                    txtStoryTextLevel1.Text = subtitle.Text;
                }
                else if (subtitle.Level == 2)
                {
                    txtStoryTextLevel2.Text = subtitle.Text;
                }
            }

            if (loadOtherTranslations)
            {
                var getTranslations = Task.Factory.StartNew(() => {
                    var index = new VerseIndex(Verse.Index);
                    var list  = new List <TranslationVerseInfo>();
                    var view  = new XPView(Verse.Session, typeof(Translation))
                    {
                        CriteriaString = "(([Type] = 4) OR ([Type] = 2)) AND [Hidden] = 0"
                    };
                    view.Properties.Add(new ViewProperty("Oid", SortDirection.None, "[Oid]", false, true));
                    view.Properties.Add(new ViewProperty("Name", SortDirection.None, "[Name]", false, true));
                    view.Properties.Add(new ViewProperty("Type", SortDirection.None, "[Type]", false, true));

                    var indexes = new List <string>();
                    foreach (ViewRecord item in view)
                    {
                        var name   = item["Name"].ToString();
                        var _index = $"{name.Replace("'", "").Replace("+", "")}.{index.NumberOfBook}.{index.NumberOfChapter}.{index.NumberOfVerse}";
                        indexes.Add(_index);

                        var tvi = new TranslationVerseInfo()
                        {
                            TranslationName = name.Replace("'", "").Replace("+", ""),
                            SortIndex       = ((TranslationType)item["Type"]).GetCategory().ToInt()
                        };
                        list.Add(tvi);
                    }

                    var _view = new XPView(Verse.Session, typeof(Verse))
                    {
                        Criteria = new DevExpress.Data.Filtering.InOperator("Index", indexes)
                    };

                    _view.Properties.Add(new ViewProperty("Index", SortDirection.None, "[Index]", false, true));
                    _view.Properties.Add(new ViewProperty("Text", SortDirection.None, "[Text]", false, true));

                    foreach (ViewRecord item in _view)
                    {
                        var idx = new VerseIndex(item["Index"].ToString());
                        var tvi = list.Where(x => x.TranslationName == idx.TranslationName).FirstOrDefault();
                        if (tvi.IsNotNull())
                        {
                            tvi.VerseText = item["Text"].ToString().Replace("<pb/>", "").Replace("<t>", "").Replace("<m>", "").Replace("</t>", "").Replace("</m>", "").Replace("<e>", "").Replace("</e>", "");
                        }
                        ;
                    }

                    //foreach (ViewRecord item in view) {
                    //    var id = item["Oid"].ToInt();
                    //    var name = item["Name"].ToString();
                    //    var tvi = new TranslationVerseInfo() {
                    //        TranslationName = name
                    //    };

                    //    var _index = $"{name.Replace("'", "").Replace("+", "")}.{index.NumberOfBook}.{index.NumberOfChapter}.{index.NumberOfVerse}";

                    //    var _view = new XPView(Verse.Session, typeof(Verse)) {
                    //        CriteriaString = $"[Index] = '{_index}'"
                    //    };
                    //    _view.Properties.Add(new ViewProperty("Text", SortDirection.None, "[Text]", false, true));
                    //    foreach (ViewRecord _item in _view) {
                    //        tvi.VerseText = _item["Text"].ToString().Replace("<pb/>", "").Replace("<t>", "").Replace("<m>", "").Replace("</t>", "").Replace("</m>", "").Replace("<e>", "").Replace("</e>", "");
                    //    }
                    //    if (tvi.VerseText.IsNotNullOrEmpty()) {
                    //        list.Add(tvi);
                    //    }
                    //}

                    return(list.Where(x => x.VerseText.IsNotNullOrEmpty()).OrderBy(x => x.SortIndex).ToList());
                });

                getTranslations.ContinueWith((x) => {
                    this.SafeInvoke(f => {
                        f.gridTranslations.DataSource = x.Result;
                        f.viewTranslations.BestFitColumns();
                        f.viewTranslations.LoadingPanelVisible = false;
                    });
                });
            }
            else
            {
                tabVerseTranslations.PageVisible     = false;
                viewTranslations.LoadingPanelVisible = false;
            }
        }
コード例 #4
0
        private IActionResult _Search(string[] words, SearchRangeType type)
        {
            var session          = new UnitOfWork();
            var view             = new XPView(session, typeof(Verse));
            var bookShortcuts    = new XPQuery <BookBase>(session).Select(x => new KeyValuePair <int, string>(x.NumberOfBook, x.BookShortcut)).ToList();
            var translationNames = new XPQuery <Translation>(session).Where(x => !x.Hidden).Select(x => new KeyValuePair <string, string>(x.Name.Replace("'", "").Replace("+", ""), x.Description)).ToList();

            var query = "Search?text=";

            foreach (var word in words)
            {
                query += word;
                if (word != words.Last())
                {
                    query += "+";
                }
            }
            var dic = new Dictionary <string, string>();

            foreach (SearchRangeType item in Enum.GetValues(typeof(SearchRangeType)))
            {
                if (item == type)
                {
                    continue;
                }
                if (item == SearchRangeType.All)
                {
                    dic.Add(item.GetDescription(), query);
                }
                else
                {
                    dic.Add(item.GetDescription(), query + TYPE_QUERY + item.GetCategory());
                }
            }

            var critera = String.Empty;

            foreach (var word in words)
            {
                critera += $"Contains(Lower([Text]),'{word.ToLower()}')";

                if (word != words.Last())
                {
                    critera += " AND ";
                }
            }

            view.CriteriaString = critera.Trim();

            view.Properties.Add(new ViewProperty("NumberOfVerse", SortDirection.None, "[NumberOfVerse]", false, true));
            view.Properties.Add(new ViewProperty("VerseText", SortDirection.None, "[Text]", false, true));
            view.Properties.Add(new ViewProperty("Index", SortDirection.None, "[Index]", false, true));

            var model = new SearchResultsModel(words)
            {
                SearchType = type, Links = dic
            };

            foreach (ViewRecord record in view)
            {
                var _index = record["Index"];
                if (_index.IsNotNull())
                {
                    var index = new VerseIndex(_index.ToString());
                    if (type != SearchRangeType.All)
                    {
                        if (type == SearchRangeType.NewTestament && (index.NumberOfBook < 470 || index.NumberOfBook > 730))
                        {
                            continue;
                        }
                        if (type == SearchRangeType.OldTestament && index.NumberOfBook >= 470)
                        {
                            continue;
                        }
                    }
                    var baseBookShortcut = bookShortcuts.Where(x => x.Key == index.NumberOfBook).Select(x => x.Value).FirstOrDefault();
                    var translation      = translationNames.Where(x => x.Key == index.TranslationName).FirstOrDefault();
                    if (translation.IsNull() || translation.Key.IsNull())
                    {
                        continue;
                    }
                    var translationDesc = translation.Value;
                    var verseText       = record["VerseText"].ToString();
                    verseText = verseText.Replace("<J>", "<span style='color: darkred;'>").Replace("</J>", "</span>");
                    var simpleText      = verseText.Replace("</t>", "").Replace("<t>", "").Replace("<pb/>", "").Replace("<n>", "").Replace("</n>", "").Replace("<e>", "").Replace("</e>", "").Replace("―", "").Replace('\'', ' ').Replace("<J>", "").Replace("</J>", "").Replace("<i>", "").Replace("</i>", "");
                    var translationName = translation.Key;
                    if (translationName == "NPI" || translationName == "IPD")
                    {
                        simpleText = simpleText.Replace("―", "");
                        verseText  = verseText.Replace("―", "");
                    }
                    if (translationName == "PBD")
                    {
                        translationName = "SNPPD";
                    }
                    simpleText = System.Text.RegularExpressions.Regex.Replace(simpleText, @"\<f\>\[[0-9]+\]\<\/f\>", "");
                    simpleText = $"{baseBookShortcut} {index.NumberOfChapter}:{record["NumberOfVerse"]} „{simpleText}” ({translationName})";
                    model.Add(new SearchItemModel()
                    {
                        Book            = index.NumberOfBook,
                        BookShortcut    = baseBookShortcut,
                        Chapter         = index.NumberOfChapter,
                        Verse           = record["NumberOfVerse"].ToInt(),
                        TranslationName = translationDesc,
                        Translation     = index.TranslationName,
                        VerseText       = verseText,
                        SimpleText      = simpleText,
                        Index           = _index.ToString()
                    });
                }
            }

            return(View(model));
        }