/// <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; }
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; } }
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); }
/// <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); }
/// <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); }
/// <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(); }