Example #1
0
            public JSInlineCitation CreateInlineCitation(IEnumerable <EntryAndPagePair> itemSources, object idToUse = null)
            {
                // ****IMPORTANT****
                // This is called from InsertCitationSequence, InsertCitation, EditCitation and CitationInserter.UpdateCitationsFromDatabase
                //
                // It is imperative that calls from the first 3 work on an empty CiteProc otherwise the cache gets used to create
                // the citation items. Other than first-use, this means using the item after CiteProc has seen it and maybe modified it
                // (it appears to change the Date Parts to strings in some cases)
                // The next refresh is then comparing incorrect JSON and will want to update it from the database.
                //
                // (CitationInserter.UpdateCitationsFromDatabase calls here but this is always within a Refresh which means a brand new CiteProc anyway
                // and so multiple resets here are not a problem because the raw cache would be empty anyway)
                //			citeproc.ResetProcessorState();

                var result = new JSInlineCitation(citeProc);

                if (idToUse != null)
                {
                    result.CitationID = idToUse;
                }

                result.Properties.NoteIndex = 0;

                foreach (var itemSource in itemSources)
                {
                    var inlineCitationItem = citeProc.CreateJSInlineCitationItem(itemSource);

                    result.CitationItems.Add(inlineCitationItem);
                }

                // We store this before Citeproc gets hold of it!
                result.FieldCodeJSON = citeProc.ToJSON(result.JSObject).Replace('\n', '\v') + "\r";

                return(result);
            }