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");
         }
     }
 }
Beispiel #7
0
        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());
        }