Beispiel #1
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);
        }
        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 });
        }