public BibtexEntry(string id, BibtexEntryType type) { if (id == null) { throw new NullReferenceException("Every BibtexEntry must have an ID"); } _id = id; setType(type); }
/** * Prompts the entry to call BibtexEntryType.getType(string) with * its current type name as argument, and sets its type according * to what is returned. This method is called when a user changes * the type customization, to make sure all entries are set with * current types. * @return true if the entry could find a type, false if not (in * this case the type will have been set to * BibtexEntryType.TYPELESS). */ public bool updateType() { BibtexEntryType newType = BibtexEntryType.getType(_type.getName()); if (newType != null) { _type = newType; return true; } _type = BibtexEntryType.TYPELESS.Instance; return false; }
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 }); }
/** * Sets this entry's type. */ public void setType(BibtexEntryType type) { if (type == null) { throw new NullReferenceException( "Every BibtexEntry must have a type. Instead of null, use type OTHER"); } _type = type; }
public BibtexEntry ParseEntry(BibtexEntryType tp) { string id = Util.createNeutralId();// createId(tp, _db); BibtexEntry result = new BibtexEntry(id, tp); SkipWhitespace(); Consume('{', '('); SkipWhitespace(); int c = Peek(); if ((c != '\n') && (c != '\r')) SkipWhitespace(); string key = null; bool doAgain = true; while (doAgain) { doAgain = false; try { if (key != null) key = key + ParseKey();// parseTextToken(), else key = ParseKey(); } catch (NoLabelException ex) { // This exception will be thrown if the entry lacks a key // altogether, like in "@article{ author = { ...". // It will also be thrown if a key Contains =. c = (char) Peek(); if (char.IsWhiteSpace((char)c) || (c == '{') || (c == '\"')) { string fieldName = ex.Message.Trim().ToLower(); string cont = ParseFieldContent(fieldName); result.setField(fieldName, cont); } else { if (key != null) key = key + ex.Message + "="; else key = ex.Message + "="; doAgain = true; } } } if ((key != null) && key.Equals("")) key = null; result.setField(Globals.KEY_FIELD, key); SkipWhitespace(); while (true) { c = Peek(); if ((c == '}') || (c == ')')) { break; } if (c == ',') Consume(','); SkipWhitespace(); c = Peek(); if ((c == '}') || (c == ')')) { break; } ParseField(result); } Consume('}', ')'); return result; }