CreateInlineCitation() private method

private CreateInlineCitation ( IEnumerable itemSources, object idToUse = null ) : Docear4Word.JSInlineCitation
itemSources IEnumerable
idToUse object
return Docear4Word.JSInlineCitation
示例#1
0
            int UpdateCitationsFromDatabase(BibTexDatabase database)
            {
                if (database == null || !Settings.Instance.RefreshUpdatesCitationsFromDatabase)
                {
                    return(-1);
                }

                var changesMade = 0;

                foreach (var cslField in documentController.EnumerateCSLFields())
                {
                    if (!IsCitationField(cslField))
                    {
                        continue;
                    }

                    var existingCitation = GetCitation(cslField.Code.Text);

                    var sources = Helper.ExtractSources(existingCitation, database);

                    // We can't risk losing a whole citation cluster because one item is not in the database
                    // so we skip the compare and keep the inline version
                    if (sources.Count != existingCitation.CitationItems.Length)
                    {
                        continue;
                    }

                    // We also won't update a cluster containing unknown items
                    // since this behaviour is undefined
                    if (ContainsUnknownItems(sources))
                    {
                        continue;
                    }

                    var databaseCitation = documentController.CreateInlineCitation(sources, existingCitation.CitationID);
                    Debug.Assert(existingCitation.JSObject != databaseCitation.JSObject);

                    if (DatabaseVersionIsDifferent(existingCitation, databaseCitation))
                    {
                        // Change the Field Code Text
                        cslField.Code.Text = CreateFieldCodeText(databaseCitation);
                        FormatCitationField(cslField);

                        // Increment the changed counter
                        changesMade++;
                    }
                }

                return(changesMade);
            }