Ejemplo n.º 1
0
        /// <summary>
        /// Determines the state of a guideline. If a bookmark already exists for it than the ref bookmarkKey is set to its id.
        /// </summary>
        private static GuidelineStatus checkBookmarkStatus(string text, Range individualGuidelineRange, ref string bookmarkKey)
        {
            var bookmarksEnumerator = individualGuidelineRange.Bookmarks.GetEnumerator();
            int guidelineStatus     = 0;

            if (!bookmarksEnumerator.MoveNext())
            {
                return((GuidelineStatus)guidelineStatus);
            }
            else //get bookmark ID
            {
                guidelineStatus++;
                var bookmark = (Word.Bookmark)bookmarksEnumerator.Current;
                bookmarkKey = bookmark.Name;

                var currentDocumentGuideline = new Guideline();

                currentDocumentGuideline.Key = bookmarkKey;
                Guideline existingGuideLine;
                if (GuidelinesFormatter.Guidelines.TryGetValue(currentDocumentGuideline, out existingGuideLine))
                { //check if text has changed.
                    int distance = GuidelineTextCompare.Levenshtein(individualGuidelineRange.Text, existingGuideLine.Text);

                    if (distance > 2)
                    {
                        guidelineStatus++;
                    }
                }
                //find that bookmark key's guideline text from the previous set of guidelines. compare to current text.
                //guidelineStatus++;

                return((GuidelineStatus)guidelineStatus);
                //return false;
            }
        }
        private HashSet <Guideline> ReadExisitingGuidelinesFile(string pathToExistingGuidelinesXml)
        {
            XDocument previousGuidelines = XDocument.Load(pathToExistingGuidelinesXml);

            HashSet <Guideline> guidelines = new HashSet <Guideline>();

            foreach (var guidelineFromXml in previousGuidelines.Root.DescendantNodes().OfType <XElement>())
            {
                Guideline guideline = new Guideline();
                guideline.Severity   = guidelineFromXml.Attribute(_Severity)?.Value;
                guideline.Subsection = guidelineFromXml.Attribute(_Subsection)?.Value;
                guideline.Section    = guidelineFromXml.Attribute(_Section)?.Value;
                guideline.Text       = guidelineFromXml?.Value;
                guideline.Key        = guidelineFromXml.Attribute(_Key)?.Value;

                guidelines.Add(guideline);
            }
            return(guidelines);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Bookmarks each individal guideline in the Guideline table. e.g. Ch1_123asd8ad
        /// </summary>
        private static void ParseIndividualGuidelinesInTable(Range tableRange, ref List <Guideline> guidelines, int chapterNumber, ExtractionMode extractionMode)
        {
            string guidAsString;

            string          tableText = tableRange.Text;
            MatchCollection guidelineMatches;

            if (!string.IsNullOrEmpty(tableText))
            {
                guidelineMatches = Regex.Matches(tableText, @"(([^\\](?<!\r))*(?=(\r)))"); //text followed by carriage return -> get each individual guideline (i.e. each  DO..., DONT... etc) in the the table
            }
            else
            {
                return;
            }

            object start = tableRange.Start;
            object end   = tableRange.End;

            Word.Range individualGuidelineRange;

            foreach (Match guidelineMatch in guidelineMatches)
            {
                if (guidelineMatch.Value.StartsWith("Guideline") || string.IsNullOrWhiteSpace(guidelineMatch.Value))
                {
                    continue;                                                                                                 //skip the first line and whitespace matches
                }
                individualGuidelineRange = _ChapterWordDoc.Range(start, end);
                string searchText = PrepareFindText(guidelineMatch.Value);

                individualGuidelineRange.Find.Text = searchText;
                individualGuidelineRange.Find.Execute();


                if (individualGuidelineRange.Find.Found)
                {
                    guidAsString = Guid.NewGuid().ToString("N");
                    string bookmarkKey   = "NA";
                    string guidelineText = GetXmlCompatibleText(individualGuidelineRange.Text);

                    Guideline guideline;
                    switch (extractionMode)
                    {
                    case ExtractionMode.BookmarkAllGuidelines:
                        bookmarkKey = (_ChapterWordDoc.Bookmarks.Add(($"Ch{chapterNumber.ToString().PadLeft(2, '0')}_{guidAsString}").Substring(0, 12), individualGuidelineRange).Name);
                        guideline   = new Guideline()
                        {
                            Key = bookmarkKey, Text = guidelineText
                        };
                        GuidelinesFormatter.Guidelines.Add(guideline);
                        break;

                    case ExtractionMode.NoBookmarking:
                        bookmarkKey = "NA";
                        guideline   = new Guideline()
                        {
                            Key = bookmarkKey, Text = guidelineText
                        };
                        GuidelinesFormatter.Guidelines.Add(guideline);
                        break;

                    case ExtractionMode.BookmarkOnlyNewGuidelinesAndCheckForChangesOfPreviouslyBookmarkedGuidelines:
                        //check if text is already bookmarked and if text has changed.
                        GuidelineStatus guidelineStatus = checkBookmarkStatus(individualGuidelineRange.Text, individualGuidelineRange, ref bookmarkKey);
                        if (guidelineStatus == GuidelineStatus.NotPreviouslyBookmarkedNewGuideline)
                        {
                            bookmarkKey = (_ChapterWordDoc.Bookmarks.Add(($"Ch{chapterNumber.ToString().PadLeft(2, '0')}_{guidAsString}").Substring(0, 12), individualGuidelineRange).Name);
                            guideline   = new Guideline()
                            {
                                Key = bookmarkKey, Text = guidelineText
                            };
                            GuidelinesFormatter.Guidelines.Add(guideline);
                        }
                        else if (guidelineStatus == GuidelineStatus.BookmarkedAndChanged)
                        {
                            Guideline existingGuideLine;
                            Guideline guidelineWithChangedText = new Guideline()
                            {
                                Key = bookmarkKey
                            };
                            if (GuidelinesFormatter.Guidelines.TryGetValue(guidelineWithChangedText, out existingGuideLine))
                            {
                                GuidelinesFormatter.Guidelines.Remove(guidelineWithChangedText);     //remove old
                                guideline = new Guideline()
                                {
                                    Key = bookmarkKey, Text = guidelineText, Comments = existingGuideLine.Comments, Section = existingGuideLine.Section, Severity = existingGuideLine.Severity, Subsection = existingGuideLine.Subsection
                                };                                                                                                                                                                                                                                        //update new
                                GuidelinesFormatter.Guidelines.Add(guideline);
                            }
                        }

                        break;
                    }

                    //guidelines.Add((bookmark, individualGuidelineRange.Text));

                    //GuidelinesFormatter.Guidelines.Add(guideline);

                    //guidelines.Add(guideline);
                }
            }
        }
Ejemplo n.º 4
0
        public override bool Equals(object obj)
        {
            Guideline otherGuideline = obj as Guideline;

            return(otherGuideline != null && string.Equals(otherGuideline.Key, this.Key));
        }