package org.jabref.logic.msbib; import java.util.Map; import java.util.TreeMap; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.BiblatexEntryTypes; import org.jabref.model.entry.BibtexEntryTypes; import org.jabref.model.entry.FieldName; import com.google.common.collect.HashBiMap; /** * Mapping between Msbib and biblatex * All Fields: <a href = "https://msdn.microsoft.com/de-de/library/office/documentformat.openxml.bibliography">List of all MSBib fields</a> * */ public class MSBibMapping { private static final String BIBTEX_PREFIX = "BIBTEX_"; private static final String MSBIB_PREFIX = "msbib-"; private static final HashBiMap<String, String> biblatexToMsBib = HashBiMap.create(); static { biblatexToMsBib.put(BibEntry.KEY_FIELD, "Tag"); biblatexToMsBib.put(FieldName.TITLE, "Title"); biblatexToMsBib.put(FieldName.YEAR, "Year"); biblatexToMsBib.put(FieldName.NOTE, "Comments"); biblatexToMsBib.put(FieldName.VOLUME, "Volume"); biblatexToMsBib.put(FieldName.LANGUAGE, "LCID"); biblatexToMsBib.put(FieldName.EDITION, "Edition"); biblatexToMsBib.put(FieldName.PUBLISHER, "Publisher"); biblatexToMsBib.put(FieldName.BOOKTITLE, "BookTitle"); biblatexToMsBib.put("shorttitle", "ShortTitle"); biblatexToMsBib.put(FieldName.NOTE, "Comments"); biblatexToMsBib.put(FieldName.VOLUMES, "NumberVolumes"); //biblatexToMsBib.put(FieldName.BOOKTITLE, "ConferenceName"); //biblatexToMsBib.put(FieldName.PAGES, "Pages"); biblatexToMsBib.put(FieldName.CHAPTER, "ChapterNumber"); biblatexToMsBib.put(FieldName.ISSUE, "Issue"); biblatexToMsBib.put(FieldName.SCHOOL, "Department"); biblatexToMsBib.put(FieldName.INSTITUTION, "Institution"); biblatexToMsBib.put(FieldName.DOI, "DOI"); biblatexToMsBib.put(FieldName.URL, "URL"); // BibTeX/Biblatex only fields biblatexToMsBib.put(FieldName.SERIES, BIBTEX_PREFIX + "Series"); biblatexToMsBib.put(FieldName.ABSTRACT, BIBTEX_PREFIX + "Abstract"); biblatexToMsBib.put(FieldName.KEYWORDS, BIBTEX_PREFIX + "KeyWords"); biblatexToMsBib.put(FieldName.CROSSREF, BIBTEX_PREFIX + "CrossRef"); biblatexToMsBib.put(FieldName.HOWPUBLISHED, BIBTEX_PREFIX + "HowPublished"); biblatexToMsBib.put(FieldName.PUBSTATE, BIBTEX_PREFIX + "Pubstate"); biblatexToMsBib.put("affiliation", BIBTEX_PREFIX + "Affiliation"); biblatexToMsBib.put("contents", BIBTEX_PREFIX + "Contents"); biblatexToMsBib.put("copyright", BIBTEX_PREFIX + "Copyright"); biblatexToMsBib.put("price", BIBTEX_PREFIX + "Price"); biblatexToMsBib.put("size", BIBTEX_PREFIX + "Size"); biblatexToMsBib.put("intype", BIBTEX_PREFIX + "InType"); biblatexToMsBib.put("paper", BIBTEX_PREFIX + "Paper"); biblatexToMsBib.put(FieldName.KEY, BIBTEX_PREFIX + "Key"); // MSBib only fields biblatexToMsBib.put(MSBIB_PREFIX + "periodical", "PeriodicalTitle"); biblatexToMsBib.put(MSBIB_PREFIX + FieldName.DAY, "Day"); biblatexToMsBib.put(MSBIB_PREFIX + "accessed", "Accessed"); biblatexToMsBib.put(MSBIB_PREFIX + "medium", "Medium"); biblatexToMsBib.put(MSBIB_PREFIX + "recordingnumber", "RecordingNumber"); biblatexToMsBib.put(MSBIB_PREFIX + "theater", "Theater"); biblatexToMsBib.put(MSBIB_PREFIX + "distributor", "Distributor"); biblatexToMsBib.put(MSBIB_PREFIX + "broadcaster", "Broadcaster"); biblatexToMsBib.put(MSBIB_PREFIX + "station", "Station"); biblatexToMsBib.put(MSBIB_PREFIX + FieldName.TYPE, "Type"); biblatexToMsBib.put(MSBIB_PREFIX + "court", "Court"); biblatexToMsBib.put(MSBIB_PREFIX + "reporter", "Reporter"); biblatexToMsBib.put(MSBIB_PREFIX + "casenumber", "CaseNumber"); biblatexToMsBib.put(MSBIB_PREFIX + "abbreviatedcasenumber", "AbbreviatedCaseNumber"); biblatexToMsBib.put(MSBIB_PREFIX + "productioncompany", "ProductionCompany"); } private MSBibMapping() { } public static String getBiblatexEntryType(String msbibType) { final String defaultType = BibtexEntryTypes.MISC.getName(); Map<String, String> entryTypeMapping = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); entryTypeMapping.put("Book", BiblatexEntryTypes.BOOK.getName()); entryTypeMapping.put("BookSection", BiblatexEntryTypes.BOOK.getName()); entryTypeMapping.put("JournalArticle", BiblatexEntryTypes.ARTICLE.getName()); entryTypeMapping.put("ArticleInAPeriodical", BiblatexEntryTypes.PERIODICAL.getName()); entryTypeMapping.put("ConferenceProceedings", BiblatexEntryTypes.INPROCEEDINGS.getName()); entryTypeMapping.put("Report", BiblatexEntryTypes.TECHREPORT.getName()); entryTypeMapping.put("Patent", BiblatexEntryTypes.PATENT.getName()); entryTypeMapping.put("InternetSite", BiblatexEntryTypes.ONLINE.getName()); return entryTypeMapping.getOrDefault(msbibType, defaultType); } public static MSBibEntryType getMSBibEntryType(String bibtexType) { Map<String, MSBibEntryType> entryTypeMapping = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); entryTypeMapping.put("book", MSBibEntryType.Book); entryTypeMapping.put("inbook", MSBibEntryType.BookSection); entryTypeMapping.put("booklet", MSBibEntryType.BookSection); entryTypeMapping.put("incollection", MSBibEntryType.BookSection); entryTypeMapping.put("article", MSBibEntryType.JournalArticle); entryTypeMapping.put("inproceedings", MSBibEntryType.ConferenceProceedings); entryTypeMapping.put("conference", MSBibEntryType.ConferenceProceedings); entryTypeMapping.put("proceedings", MSBibEntryType.ConferenceProceedings); entryTypeMapping.put("collection", MSBibEntryType.ConferenceProceedings); entryTypeMapping.put("techreport", MSBibEntryType.Report); entryTypeMapping.put("manual", MSBibEntryType.Report); entryTypeMapping.put("mastersthesis", MSBibEntryType.Report); entryTypeMapping.put("phdthesis", MSBibEntryType.Report); entryTypeMapping.put("unpublished", MSBibEntryType.Report); entryTypeMapping.put("patent", MSBibEntryType.Patent); entryTypeMapping.put("misc", MSBibEntryType.Misc); entryTypeMapping.put("electronic", MSBibEntryType.ElectronicSource); entryTypeMapping.put("online", MSBibEntryType.InternetSite); return entryTypeMapping.getOrDefault(bibtexType, MSBibEntryType.Misc); } /** * Only English is supported <br> * <a href="http://www.microsoft.com/globaldev/reference/lcid-all.mspx">All LCID codes</a> * @param language The language to transform * @return Returns 0 for English */ public static int getLCID(String language) { // TODO: add language to LCID mapping // 0 is English return 0; } /** * Only English is supported <br> * <a href="http://www.microsoft.com/globaldev/reference/lcid-all.mspx">All LCID codes</a> * @param language * @return Returns english */ public static String getLanguage(int LCID) { // TODO: add language to LCID mapping return "english"; } public static String getMSBibField(String bibtexFieldName) { return biblatexToMsBib.get(bibtexFieldName); } public static String getBibTeXField(String msbibFieldName) { return biblatexToMsBib.inverse().get(msbibFieldName); } }