/// <summary>
        /// Redraw the reference window.
        /// </summary>
        /// <param name="myTermIndex">index of term to laod in visibilTerms</param>
        private void LoadReferencesDisplayNonRentrant(int myTermIndex)
        {
            if ((myTermIndex == -1) || (visibleTerms.Count <= myTermIndex))
            {
                return;
            }

            progressBarLoadingKeyTerms.Visible = true;
            Term myTerm = visibleTerms[myTermIndex];

            if (_lastTerm != myTerm)
            {
                htmlBuilder.ReadVerseText(myTerm, _theSE.StoryProject, progressBarLoadingKeyTerms);
                _lastTerm = myTerm;
            }

            BiblicalTermStatus status;

            // Build HTML text for references display.
            refererencesHtml = htmlBuilder.Build(_theSE, myTerm.Id,
                                                 _projSettings.ProjectFolder, progressBarLoadingKeyTerms, out status);

            TermRendering termRendering = renderings.GetRendering(myTerm.Id);

            if (termRendering.Status != status)              // If status has changed, updated it.
            {
                termRendering.Status = status;
                NotifyRenderingsChanged();
            }

            // Load reference html
            webBrowser.LoadDocument(refererencesHtml);
            progressBarLoadingKeyTerms.Visible = false;
        }
示例#2
0
        private void BuildRenderings(string strProjectFolder, string termId)
        {
            termRenderingsList = new List <TermRendering>();
            int projectNum = 0;

            for (int i = 0; i < scrTextNames.Count; i++)
            {
                string name = scrTextNames[i];

                /* until we have a "TermRenderingsList" xml file for this project, we can't use this feature
                 * the BiblicalTermsEn.xml in the BiblicalTerms folder is *not* one of these and won't work.
                 * string strPath = strProjectFolder;
                 * if (i > 0)
                 *      strPath = BiblicalTermsList.DefaultBiblicalTermsFileFolder;
                 */
                TermRenderingsList termRenderings = TermRenderingsList.GetTermRenderings(strProjectFolder, name);
                TermRendering      termRendering  = termRenderings.GetRendering(termId);
                termRenderingsList.Add(termRendering);

                string val = termRendering.Renderings;
                val += FormattedNotes(termRendering);

                projectVariablesList[projectNum]["Renderings"] = val;

                ++projectNum;
            }
        }
示例#3
0
        public static string FormattedNotes(TermRendering termRendering)
        {
            string notes = termRendering.Notes.Trim();
            string val   = "";

            if (notes == "")
            {
                return("");
            }

            if (notes.Contains("\n"))
            {
                string[] parts = notes.Split('\n');
                val = " --- <span class=\"Notes\">" + parts[0] + "</span>";

                for (int i = 1; i < parts.Length; ++i)
                {
                    val += "\n<p class=\"Notes\">" + parts[i] + "</p>";
                }
            }
            else
            {
                val = " --- <span class=\"Notes\">" + notes + "</span>";
            }

            return(val);
        }
示例#4
0
        /// <summary>
        /// Setup the template variables related to a single verse of a single project
        /// </summary>
        private void setupReferenceVars(StoryEditor theSE, int projectNum, string strVerseReference,
                                        out bool renderingFound, out bool renderingDenied)
        {
            referenceVariables = new Dictionary <string, string>();

            referenceVariables["ProjectClass"]  = "project" + (projectNum + 1).ToString();
            referenceVariables["Reference"]     = strVerseReference;
            referenceVariables["ReferenceAsId"] = strVerseReference.Replace(' ', '_');

            renderingDenied = false;
            string text = MarkRenderings(projectNum, mapReferenceToVerseTextList[strVerseReference][projectNum],
                                         out renderingFound);

            TermRendering termRendering = termRenderingsList[0];

            if (!renderingFound)
            {
                string strOneStoryUrl = ConstructUrlFromReference(theSE, strVerseReference);
                renderingDenied = termRendering.Denials.Contains(strOneStoryUrl);
            }
            referenceVariables["Text"] = text;

            if (projectNum == 0)
            {
                referenceVariables["StatusBMP"] = RenderingStatus(renderingFound, renderingDenied, strVerseReference);
            }
            else
            {
                referenceVariables["StatusBMP"] = "";
            }
        }
        public EditRenderingsForm(
            Font font,
            string renderings,
            TermRendering termRendering,
            string scrTextName,
            Localization termLocalization)
        {
            InitializeComponent();
            Localizer.Ctrl(this);
            DialogRestorer.Register(this);

            this.termRendering = termRendering;

            textRenderings.Font = font;
            if (renderings != "")
            {
                textRenderings.Text = renderings;
            }
            else
            {
                textRenderings.Text = termRendering.Renderings.Trim();
            }

            textNotes.Text = termRendering.Notes.Trim();
            textTag.Text   = termRendering.Tag.Trim();

            txtTermDefinition.Text = termLocalization.Gloss + " --- " + termLocalization.Notes;

            //! set alignment to match text direction
            this.Text = Localizer.Str("Edit Renderings") + ": " + scrTextName;
        }
        protected void AddRendering(string strRendering, int nRowIndex)
        {
            // try to keep track of where we were so we can go back there
            string strID = webBrowser.HtmlDocument2.GetActiveElement().innerHTML;

            if (!String.IsNullOrEmpty(strID))
            {
                MatchCollection mc = SearchForSpanID.Matches(strID);
                if (mc.Count > 0)
                {
                    idToScrollTo = mc[0].Groups[1].Value;
                }
            }

            if (!String.IsNullOrEmpty(strRendering))
            {
                strRendering = strRendering.Trim();
            }

            if (String.IsNullOrEmpty(strRendering) || (nRowIndex == -1))
            {
                return;
            }

            Term          term          = visibleTerms[nRowIndex];
            TermRendering termRendering = renderings.GetRendering(term.Id);

            if (termRendering.RenderingsList.Contains(strRendering))
            {
                MessageBox.Show(Localizer.Str("Rendering already present."));
                return;
            }

            termRendering.RenderingsList.Add(strRendering);
            string strRenderings;

            if (String.IsNullOrEmpty(termRendering.Renderings))
            {
                strRenderings = strRendering;
            }
            else
            {
                strRenderings = termRendering.Renderings + ", " + strRendering;
            }

            termRendering.Renderings     = strRenderings;
            renderings.RenderingsChanged = true;
            dataGridViewKeyTerms.UpdateCellValue(CnColumnRenderings, nRowIndex);
            LoadReferencesDisplay(true);
        }
示例#7
0
        /// <summary>
        /// Mark the renderings found in the text of a verse.
        /// </summary>
        /// <param name="text"></param>
        /// <param name="renderingFound"></param>
        /// <returns></returns>
        private string MarkRenderings(int projectNum, string text, out bool renderingFound)
        {
            renderingFound = false;

            if (String.IsNullOrEmpty(text))
            {
                return(text);
            }

            TermRendering termRendering = termRenderingsList[projectNum];

            foreach (string strRendering in termRendering.RenderingsList)
            {
                if (strRendering.Length < 1)
                {
                    continue;
                }
                // build the regular expression for searching for the rendering. Possible values are:
                //  *xyz if the word ends with "xyz"
                //  xyz* if it begins with "xyz"
                //  *xyz* if it contains "xyz"
                // So... for each *, insert ".*"
                char chFirst = strRendering[0];
                char chLast  = strRendering[strRendering.Length - 1];

                // replace an initial "*" with the proper RegEx for anything at the
                //  beginning of a word
                string strSearch = String.Format(@"\b{0}{1}",
                                                 (chFirst == '*') ? ".*?" : chFirst.ToString(),
                                                 strRendering.Substring(1, strRendering.Length - 1));

                // replace a final "*" with the proper RegEx for anything at the end
                //  of a word
                strSearch = String.Format(@"{0}{1}\b",
                                          strSearch.Substring(0, strSearch.Length - 1),
                                          (chLast == '*') ? @".*?" : chLast.ToString());

                Regex  regexRendering = new Regex(strSearch, RegexOptions.CultureInvariant | RegexOptions.Singleline);
                string strBoldedText  = regexRendering.Replace(text, SearchForRendering);
                if (strBoldedText != text)
                {
                    text           = strBoldedText;
                    renderingFound = true;
                }
            }

            return(text);
        }
示例#8
0
        /// <summary>
        /// Get rendering info for BiblicalTerm with the specified Id.
        /// If not info exists yet, create empty entry.
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public TermRendering GetRendering(string id)
        {
            // If list has not been sorted yet, do so
            if (renderingsDict == null)
            {
                //renderingsDict = new Dictionary<string, TermRendering>(new StringOrdinalEqualityComparer());
                renderingsDict = new Dictionary <string, TermRendering>();
                for (int i = 0; i < renderings.Count;)
                {
                    TermRendering rend = renderings[i];

                    if (!renderingsDict.ContainsKey(rend.Id))
                    {
                        // Normal case, add to dictionary
                        // rend.CharacterCategorizer = characterCategorizer;
                        renderingsDict[rend.Id] = rend;
                        ++i;
                    }
                    else
                    {
                        // Bad case, an earlier problem has left us with multiple
                        // entries for this rendering, sigh
                        renderings.RemoveAt(i);
                        renderingsDict[rend.Id].MergeRenderings(rend);
                    }
                }

                Debug.Assert(renderings.Count == renderingsDict.Count);
            }

            TermRendering rendering;

            if (renderingsDict.TryGetValue(id, out rendering))
            {
                return(rendering);
            }

            rendering    = new TermRendering();
            rendering.Id = id;
            // rendering.CharacterCategorizer = characterCategorizer;

            renderings.Add(rendering);
            renderingsDict[rendering.Id] = rendering;

            return(rendering);
        }
        private void DenyReference(string reference, bool doDeny)
        {
            if (SelectedTerm == null)
            {
                return;                  // should not happen
            }
            reference = reference.Replace("%20", " ");
            TermRendering termRendering = renderings.GetRendering(SelectedTerm.Id);

            string strOneStoryDenialUrl = BiblicalTermsHTMLBuilder.ConstructUrlFromReference(_theSE, reference);

            if (doDeny)
            {
                if (!termRendering.Denials.Contains(strOneStoryDenialUrl))
                {
                    termRendering.Status = BiblicalTermStatus.AllFoundOrDenied;
                    termRendering.Denials.Add(strOneStoryDenialUrl);
                }
            }
            else              // remove denial
            {
                termRendering.Status = BiblicalTermStatus.SomeMissing;
                while (termRendering.Denials.Contains(strOneStoryDenialUrl))
                {
                    termRendering.Denials.Remove(strOneStoryDenialUrl);
                }
            }

            LoadReferencesDisplay(false);

            reference = reference.Replace(" ", "_");

            // e.g. projectxnr_Story: 'BibStory' line: 1 anchor: Gen 2:4
            idToScrollTo = "project1_" + reference;

            NotifyRenderingsChanged();
        }
        private void EditRenderings()
        {
            if (SelectedTerm == null)
            {
                return;
            }

            TermRendering termRendering    = renderings.GetRendering(SelectedTerm.Id);
            Localization  termLocalization = termLocalizations.GetTermLocalization(SelectedTerm.Id);

            string currentRenderings = termRendering.Renderings;

            if (!String.IsNullOrEmpty(SelectedText))
            {
                if (!String.IsNullOrEmpty(currentRenderings))
                {
                    currentRenderings += ", ";
                }
                currentRenderings += SelectedText;
            }

            EditRenderingsForm form = new EditRenderingsForm(
                MainLang.FontToUse,
                currentRenderings,
                termRendering,
                MainLang.LangCode,
                termLocalization);

            if (form.ShowDialog() == DialogResult.OK)
            {
                LoadReferencesDisplay(false);
                NotifyRenderingsChanged();
            }

            form.Dispose();
        }