private SmeDoc CreateSmeDoc(SpDocumentModel docInfo, string searchText) { if (docInfo.DocLanguageId != -1) { var docText = this.dbHelper.GetDocumentTextByDocLangId(docInfo.DocLanguageId); if (this.IsBlob(docText, out string fileName)) { var smeDoc = new SmeDoc(); smeDoc.Meta = DocConverter.GetSmeDocMeta(docText); smeDoc.Meta.ShortTitle = smeDoc.Meta.ShortTitle; //must change when ShortTitle column is available in database this.FillMetaFromDocRecord(smeDoc, docInfo); smeDoc.Meta.IsBlob = true; var filePath = $@"{this.pathsProvider.PdfPath}\{smeDoc.Meta.Idenitifier}\{fileName}"; if (System.IO.File.Exists(filePath)) { smeDoc.Items = new List <SmeDocItem>(); var fileExt = System.IO.Path.GetExtension(filePath).ToLower(); if (fileExt == ".html") { var docContent = System.IO.File.ReadAllText(filePath); smeDoc.Meta.IsBlob = false; smeDoc.Items.Add(new SmeDocItem { Text = docContent, Type = SmeDocItemType.Text }); } else { smeDoc.Items.Add(new SmeDocItem { Text = fileName, Type = SmeDocItemType.Text }); } } return(smeDoc); } else { var html = AkomaNtosoPreProcessor.ConvertToHtml(docText, new AkomaNtosoPreProcessorConfig()); html = this.ReplaceImgUrls(html); if (!string.IsNullOrEmpty(searchText)) { html = this.ColorizeSearch(searchText, html, docInfo.LangId); } html = DocumentLinkRewrite.ReplaceNationalLegislation(html); var res = this.CreateSmeDoc(html, docText, docInfo); return(res); } } else { return(null); } }
private static void GetHtml(StringBuilder sb, SmeDocItem item, SmeDoc document, SmeLanguage lang, bool addArtRec = true) { sb.AppendLine(item.Text); if (addArtRec) { sb.AppendLine(AddButtons(item.Recitals, $"{item.Id}_rec", Translator.GetString("Recitals"), document, lang)); sb.AppendLine(AddButtons(item.Articles, $"{item.Id}_art", Translator.GetString("Articles"), document, lang)); if (item.OldArticles?.Count > 0) { var od = OldDirective(lang); if (od != null) { sb.AppendLine(AddButtons(item.OldArticles, $"{item.Id}_old_art", Translator.GetString("31995L0046"), od, lang, true)); } } } foreach (var childItem in item.Childs) { GetHtml(sb, childItem, document, lang, addArtRec); } }
private void FillMetaFromDocRecord(SmeDoc res, SpDocumentModel docInfo) { res.Meta.LangId = docInfo.LangId; res.Meta.ShortLang = docInfo.ShortLang; res.Meta.DocLangId = docInfo.DocLanguageId; res.Meta.DocNumber = docInfo.DocNumber; }
private static void FixRecitals(SmeDoc smeDoc) { var firstRecitalIndex = smeDoc.Items.IndexOf(smeDoc.Items.FirstOrDefault(x => x.Type == SmeDocItemType.Recital)); if (firstRecitalIndex < 0) { return; } var recitalItems = smeDoc.Items.Where(x => x.Type == SmeDocItemType.Recital).ToList(); var cultureInfo = Properties.Resources.Culture; smeDoc.Items = smeDoc.Items.Where(x => x.Type != SmeDocItemType.Recital).ToList(); var partSize = 30; int partsCount = (int)Math.Ceiling((double)recitalItems.Count() / partSize); var groupedItems = new List <SmeDocItem>(); for (int i = 0; i < partsCount; i++) { var smeDocItem = new SmeDocItem() { Childs = new List <SmeDocItem>(recitalItems.Skip(i * partSize).Take(partSize)), Type = SmeDocItemType.Recital }; smeDocItem.Heading = $"{Translator.GetString("Recitals")} {i * partSize + 1}-{i * partSize + smeDocItem.Childs.Count}"; groupedItems.Add(smeDocItem); } smeDoc.Items.InsertRange(firstRecitalIndex, groupedItems); }
public static string GetDisplayText(SmeDoc document, SmeLanguage lang, SmeDocItem docItem, bool addArtRec = true) { var sb = new StringBuilder(); GetHtml(sb, docItem, document, lang, addArtRec); return(sb.ToString()); }
private static void FixTitle(SmeDoc smeDoc) { if (smeDoc.Items.Count > 2 && (!smeDoc.Items.Any(x => x.Type == SmeDocItemType.DocTitle))) { var titleItem = smeDoc.Items[0]; if (titleItem.Type == SmeDocItemType.Text) { titleItem.Type = SmeDocItemType.DocTitle; var cultureInfo = Properties.Resources.Culture; titleItem.Heading = Translator.GetString("Title"); } } }
public static SmeDoc DoDocConvert(List <string> htmlStringDocs) { SmeDoc devidedDoc = new SmeDoc(); HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(htmlStringDocs[0]); devidedDoc.Items = GetRecitalsFromPrefaceHtml(htmlDoc); htmlDoc.LoadHtml(htmlStringDocs[1]); devidedDoc.Items.AddRange(GetDevidedLegalPartFromBodyHtml(htmlDoc)); //var returnedDocs = JsonConvert.SerializeObject(devidedDoc); return(devidedDoc); }
public static SmeDoc FlatDocument(SmeDoc orgDoc) { if (orgDoc == null) { return(null); } var res = new SmeDoc { Meta = orgDoc.Meta, Head = orgDoc.Head, Items = new List <SmeDocItem>() }; foreach (var item in orgDoc.Items) { TravelDocument(item, res.Items); } FixRecitals(res); FixTitle(res); return(res); }
public static List <ColorizeInfo> GetColorizeInfo(SmeDoc smeDoc) { var res = new List <ColorizeInfo>(); foreach (var item in smeDoc.Items) { var text = GetDisplayText(smeDoc, SmeLanguage.Bulgarian, item, false); MatchCollection mc = Regex.Matches(text, @"ss_(\d+)"); if (mc.Count > 0) { var matchedIds = new List <string>(); foreach (Match m in mc) { res.Add(new ColorizeInfo { DocItem = item, MatchedId = m.Value }); } } } return(res); }
private static string AddButtons(List <string> items, string elId, string title, SmeDoc document, SmeLanguage lang, bool tryFindParents = false) { var cultureInfo = Properties.Resources.Culture; var sb = new StringBuilder(); if (items?.Count > 0) { sb.AppendLine($@"<button onclick=""showHideDiv('{elId}')"" >{title}</button><div class=""gdpr-recital"" style=""display:none;"" id=""{elId}"" name=""{elId}"">"); foreach (var id in items) { var linkedItem = document.GetItemById(id, tryFindParents); if (linkedItem != null) { sb.AppendLine($"{GetDisplayText(document, lang, linkedItem, false)}<hr>"); } } sb.AppendLine("</div>"); } return(sb.ToString()); }