ResetProcessorState() public method

public ResetProcessorState ( ) : void
return void
コード例 #1
0
        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, JSONWhitespace).Replace('\n', '\v') + FieldCodeSeparator;

            return(result);
        }