Esempio n. 1
0
 /**
  * Check whether this entry's required fields are set, taking crossreferenced entries and
  * either-or fields into account:
  * @param entry The entry to check.
  * @param database The entry's database.
  * @return True if required fields are set, false otherwise.
  */
 public override bool hasAllRequiredFields(BibtexEntry entry, BibtexDatabase database)
 {
     // First check if the bibtex key is set:
     if (entry.getField(Globals.KEY_FIELD) == null)
         return false;
     // Then check other fields:
     bool[] isSet = new bool[req.Length];
     // First check for all fields, whether they are set here or in a crossref'd entry:
     for (int i=0; i<req.Length; i++)
     isSet[i] = BibtexDatabase.getResolvedField(req[i], entry, database) != null;
     // Then go through all fields. If a field is not set, see if it is part of an either-or
     // set where another field is set. If not, return false:
     for (int i=0; i<req.Length; i++) {
     if (!isSet[i]) {
         if (!isCoupledFieldSet(req[i], entry, database))
             return false;
     }
     }
     // Passed all fields, so return true:
     return true;
 }
Esempio n. 2
0
        /**
         * Returns the text stored in the given field of the given bibtex entry
         * which belongs to the given database.
         *
         * If a database is given, this function will try to resolve any string
         * references in the field-value.
         * Also, if a database is given, this function will try to find values for
         * unset fields in the entry linked by the "crossref" field, if any.
         *
         * @param field
         *            The field to return the value of.
         * @param bibtex maybenull
         *            The bibtex entry which Contains the field.
         * @param database maybenull
         *            The database of the bibtex entry.
         * @return The resolved field value or null if not found.
         */
        public static string getResolvedField(string field, BibtexEntry bibtex,
            BibtexDatabase database)
        {
            if (field.Equals("bibtextype"))
            return bibtex.getType().getName();

            object o = bibtex.getField(field);

            // If this field is not set, and the entry has a crossref, try to look up the
            // field in the referred entry: Do not do this for the bibtex key.
            if ((o == null) && (database != null) && database.followCrossrefs &&
                !field.Equals(Globals.KEY_FIELD) && (database != null)) {
            object crossRef = bibtex.getField("crossref");
            if (crossRef != null) {
                BibtexEntry referred = database.getEntryByKey((string)crossRef);
                if (referred != null) {
                    // Ok, we found the referred entry. Get the field value from that
                    // entry. If it is unset there, too, stop looking:
                    o = referred.getField(field);
                }
            }
            }

            return getText((string)o, database);
        }
Esempio n. 3
0
        private void AddBibTeXEntry(BibtexEntry entry)
        {
            string title = entry.getField("title");
            string subtitle = "";
            string author = entry.getField("author");
            string editor = entry.getField("editor");

            title = TrimEntry(title);
            author = TrimEntry(author);
            editor = TrimEntry(editor);

            if (author == null)
            {
                Console.WriteLine("Warning: empty author field in entry {0}", entry.getId());
                author = "";
            }

            if (editor == null)
            {
                Console.WriteLine("Warning: empty editor field in entry {0}", entry.getId());
                editor = "";
            }

            string[] authors = author.Split(new string[] { " and ", "," }, StringSplitOptions.RemoveEmptyEntries);
            string new_author = "";
            foreach (string a in authors)
            {
                if (a.Length > 0 && new_author != "")
                    new_author = new_author + ";" + TrimEntry(a);
                else if (a.Length > 0)
                    new_author = TrimEntry(a);
            }

            if (editor == "")
                editor = new_author;
            if (new_author == "")
                new_author = editor;

            string booktitle = entry.getField("booktitle");
            string edition = entry.getField("edition");
            string isbn = entry.getField("isbn");
            string journalorseriestitle = entry.getType() == BibtexEntryType.getType("ARTICLE") ? entry.getField("journal") : entry.getField("series");
            string volume = entry.getField("volume");
            string issue = entry.getField("issue");
            string pages = entry.getField("pages");
            string startpage = "";
            string endpage = "";

            if (pages != null)
            {
                string[] splittedPages = pages.Split(new string[] { "-", "--" }, StringSplitOptions.RemoveEmptyEntries);
                if (splittedPages.Length > 0)
                    startpage = splittedPages[0].Trim();
                if (splittedPages.Length > 1)
                    endpage = splittedPages[1].Trim();
            }

            string issn = entry.getField("issn");
            string publisher = entry.getField("publisher");
            string publicationdate = entry.getField("year");
            string abstract_txt = entry.getField("abstract");
            string doi = entry.getField("doi");
            string fulltexturl = entry.getField("url");
            string notes = entry.getField("notes");
            string publicationtype = "";
            string orgcode = BibTex2eCitation.Properties.Settings.Default.DefaultOrgCode.ToString();

            if (entry.getType() == BibtexEntryType.getType("ARTICLE"))
                publicationtype = "Journal Items";
            else if (entry.getType() == BibtexEntryType.getType("BOOK"))
                publicationtype = "Monographs/ Monograph Items";
            else if (entry.getType() == BibtexEntryType.getType("PHDTHESIS"))
                publicationtype = "Doctoral Thesis and Habilitation";
            else if (entry.getType() == BibtexEntryType.getType("MASTERSTHESIS"))
                publicationtype = "Master Thesis and Bachelor Thesis";
            else if (entry.getType() == BibtexEntryType.getType("INPROCEEDINGS"))
                publicationtype = "Conference Contributions";
            string language = "English";

            dataGridView1.Rows.Add(new string[] { title, new_author, publicationdate, editor, publicationtype, "", orgcode, subtitle, booktitle, edition, "", "", isbn, journalorseriestitle, volume, issue, startpage, endpage, issn, publisher, "", "", abstract_txt, doi, fulltexturl, "", "", "", notes, "", language });
        }
Esempio n. 4
0
        /**
         * Take the given BibtexEntry and resolve any string references.
         *
         * @param entry
         *            A BibtexEntry in which all strings of the form #xxx# will be
         *            resolved against the hash map of string references stored in
         *            the databasee.
         *
         * @param inPlace
         *            If inPlace is true then the given BibtexEntry will be
         *            modified, if false then a copy is made using close made before
         *            resolving the strings.
         *
         * @return a BibtexEntry with all string references resolved. It is
         *         dependent on the value of inPlace whether a copy is made or the
         *         given BibtexEntries is modified.
         */
        public BibtexEntry resolveForStrings(BibtexEntry entry, bool inPlace)
        {
            if (!inPlace){
            entry = (BibtexEntry)entry.clone();
            }

            foreach (object field in entry.getAllFields()){
            entry.setField(field.ToString(), this.resolveForStrings(entry.getField(field.ToString()).ToString()));
            }

            return entry;
        }
Esempio n. 5
0
        /** Returns true iff the entry has a nonzero value in its field.
         */
        private static bool nonZeroField(BibtexEntry be, string field)
        {
            string o = (be.getField(field));

            return ((o != null) && !o.Equals("0"));
        }