Skip to content

Added all person name and date fields to InternalBibtexFields #1097

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Apr 8, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions src/main/java/net/sf/jabref/bibtex/BibtexSingleField.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ private enum Flag {
// the extras data
// fieldExtras contains mappings to tell the EntryEditor to add a specific
// function to this field, for instance a "browse" button for the "pdf" field.
private Set<BibtexSingleFieldProperties> extras = EnumSet.noneOf(BibtexSingleFieldProperties.class);
private Set<FieldProperties> extras = EnumSet.noneOf(FieldProperties.class);

// a comma separated list of alternative bibtex-fieldnames, e.g.
// "LCCN" is the same like "lib-congress"
Expand Down Expand Up @@ -115,13 +115,13 @@ public boolean isWriteable() {
return flags.contains(Flag.WRITEABLE);
}

public void setExtras(Set<BibtexSingleFieldProperties> pExtras) {
public void setExtras(Set<FieldProperties> pExtras) {
extras = pExtras;
}

// fieldExtras contains mappings to tell the EntryEditor to add a specific
// function to this field, for instance a "browse" button for the "pdf" field.
public Set<BibtexSingleFieldProperties> getExtras() {
public Set<FieldProperties> getExtras() {
return extras;
}

Expand Down Expand Up @@ -153,15 +153,15 @@ public String getFieldName() {
*/
public BibtexSingleField setNumeric(boolean numeric) {
if (numeric) {
extras.add(BibtexSingleFieldProperties.NUMERIC);
extras.add(FieldProperties.NUMERIC);
} else {
extras.remove(BibtexSingleFieldProperties.NUMERIC);
extras.remove(FieldProperties.NUMERIC);
}
return this;
}

public boolean isNumeric() {
return extras.contains(BibtexSingleFieldProperties.NUMERIC);
return extras.contains(FieldProperties.NUMERIC);
}

}

This file was deleted.

26 changes: 26 additions & 0 deletions src/main/java/net/sf/jabref/bibtex/FieldProperties.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package net.sf.jabref.bibtex;

import java.util.EnumSet;

public enum FieldProperties {
YES_NO,
URL,
DATE,
JOURNAL_NAME,
EXTERNAL,
BROWSE,
OWNER,
MONTH,
FILE_EDITOR,
NUMERIC,
PERSON_NAMES,
INTEGER,
GENDER,
LANGUAGE,
LANG_ID,
DOI;

public static final EnumSet<FieldProperties> ALL_OPTS = EnumSet
.allOf(FieldProperties.class);

}
82 changes: 56 additions & 26 deletions src/main/java/net/sf/jabref/bibtex/InternalBibtexFields.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
package net.sf.jabref.bibtex;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
Expand All @@ -44,7 +45,6 @@
import net.sf.jabref.Globals;
import net.sf.jabref.JabRefPreferences;
import net.sf.jabref.model.entry.BibEntry;
import net.sf.jabref.model.entry.IEEETranEntryTypes;
import net.sf.jabref.specialfields.SpecialFieldsUtils;

public class InternalBibtexFields {
Expand All @@ -58,18 +58,25 @@ public class InternalBibtexFields {
private static final String ENTRYTYPE = "entrytype";
public static final String NUMBER_COL = "#";

public static final String[] DEFAULT_INSPECTION_FIELDS = new String[]
{"author", "title", "year", BibEntry.KEY_FIELD};

// singleton instance
private static final InternalBibtexFields RUNTIME = new InternalBibtexFields();

// contains all bibtex-field objects (BibtexSingleField)
private final Map<String, BibtexSingleField> fieldSet;

// contains all known (and public) bibtex fieldnames
private final List<String> PUBLIC_FIELDS = new ArrayList<>();

// Lists of fields with special properties
public static final List<String> IEEETRANBSTCTL_NUMERIC_FIELDS = Arrays.asList("ctlmax_names_forced_etal",
"ctlnames_show_etal", "ctlalt_stretch_factor");
public static final List<String> IEEETRANBSTCTL_YES_NO_FIELDS = Arrays.asList("ctluse_article_number",
"ctluse_paper", "ctluse_url", "ctluse_forced_etal", "ctluse_alt_spacing", "ctldash_repeated_names");
public static final List<String> BIBLATEX_DATE_FIELDS = Arrays.asList("date", "eventdate", "origdate", "urldate");
public static final List<String> BIBLATEX_PERSON_NAME_FIELDS = Arrays.asList("author", "editor", "editora",
"editorb", "editorc", "translator", "annotator", "commentator", "introduction", "foreword", "afterword",
"bookauthor", "holder", "shortauthor", "shorteditor", "sortname");

// singleton instance
private static final InternalBibtexFields RUNTIME = new InternalBibtexFields();

private InternalBibtexFields() {
fieldSet = new HashMap<>();
Expand All @@ -83,29 +90,25 @@ private InternalBibtexFields() {
// but may be used by others that produce an annotated bibliography.
// http://www.ecst.csuchico.edu/~jacobsd/bib/formats/bibtex.html
add(new BibtexSingleField("annote", true, BibtexSingleField.LARGE_W));
dummy = new BibtexSingleField("author", true, BibtexSingleField.MEDIUM_W, 280);
dummy.setExtras(EnumSet.of(BibtexSingleFieldProperties.PERSON_NAMES));
add(dummy);
add(new BibtexSingleField("author", true, BibtexSingleField.MEDIUM_W, 280));
add(new BibtexSingleField("booktitle", true, 175));
add(new BibtexSingleField("chapter", true, BibtexSingleField.SMALL_W));
add(new BibtexSingleField("crossref", true, BibtexSingleField.SMALL_W));
add(new BibtexSingleField("edition", true, BibtexSingleField.SMALL_W));
dummy = new BibtexSingleField("editor", true, BibtexSingleField.MEDIUM_W, 280);
dummy.setExtras(EnumSet.of(BibtexSingleFieldProperties.PERSON_NAMES));
add(dummy);
add(new BibtexSingleField("editor", true, BibtexSingleField.MEDIUM_W, 280));
add(new BibtexSingleField("howpublished", true, BibtexSingleField.MEDIUM_W));
add(new BibtexSingleField("institution", true, BibtexSingleField.MEDIUM_W));

dummy = new BibtexSingleField("journal", true, BibtexSingleField.SMALL_W);
dummy.setExtras(EnumSet.of(BibtexSingleFieldProperties.JOURNAL_NAMES));
dummy.setExtras(EnumSet.of(FieldProperties.JOURNAL_NAME));
add(dummy);
dummy = new BibtexSingleField("journaltitle", true, BibtexSingleField.SMALL_W);
dummy.setExtras(EnumSet.of(BibtexSingleFieldProperties.JOURNAL_NAMES));
dummy.setExtras(EnumSet.of(FieldProperties.JOURNAL_NAME));
add(dummy);

add(new BibtexSingleField("key", true));
dummy = new BibtexSingleField("month", true, BibtexSingleField.SMALL_W);
dummy.setExtras(EnumSet.of(BibtexSingleFieldProperties.MONTH));
dummy.setExtras(EnumSet.of(FieldProperties.MONTH));
add(dummy);
add(new BibtexSingleField("note", true, BibtexSingleField.MEDIUM_W));
add(new BibtexSingleField("number", true, BibtexSingleField.SMALL_W, 60).setNumeric(true));
Expand Down Expand Up @@ -170,7 +173,7 @@ private InternalBibtexFields() {
add(dummy);

dummy = new BibtexSingleField("doi", true, BibtexSingleField.SMALL_W);
dummy.setExtras(EnumSet.of(BibtexSingleFieldProperties.DOI));
dummy.setExtras(EnumSet.of(FieldProperties.DOI));
add(dummy);
add(new BibtexSingleField("eid", true, BibtexSingleField.SMALL_W));

Expand All @@ -185,18 +188,23 @@ private InternalBibtexFields() {
add(new BibtexSingleField("abstract", false, BibtexSingleField.LARGE_W, 400));

dummy = new BibtexSingleField("url", false, BibtexSingleField.SMALL_W);
dummy.setExtras(EnumSet.of(BibtexSingleFieldProperties.EXTERNAL));
dummy.setExtras(EnumSet.of(FieldProperties.EXTERNAL));
add(dummy);

add(new BibtexSingleField("comment", false, BibtexSingleField.MEDIUM_W));
add(new BibtexSingleField("keywords", false, BibtexSingleField.SMALL_W));

dummy = new BibtexSingleField(Globals.FILE_FIELD, false);
dummy.setExtras(EnumSet.of(BibtexSingleFieldProperties.FILE_EDITOR));
dummy.setExtras(EnumSet.of(FieldProperties.FILE_EDITOR));
add(dummy);

add(new BibtexSingleField("search", false, 75));

// some BibLatex fields
dummy = new BibtexSingleField("gender", true, BibtexSingleField.SMALL_W);
dummy.getExtras().add(FieldProperties.GENDER);
add(dummy);

// some internal fields ----------------------------------------------
dummy = new BibtexSingleField(InternalBibtexFields.NUMBER_COL, false, 32);
dummy.setPrivate();
Expand All @@ -205,12 +213,12 @@ private InternalBibtexFields() {
add(dummy);

dummy = new BibtexSingleField(InternalBibtexFields.OWNER, false, BibtexSingleField.SMALL_W);
dummy.setExtras(EnumSet.of(BibtexSingleFieldProperties.SET_OWNER));
dummy.setExtras(EnumSet.of(FieldProperties.OWNER));
dummy.setPrivate();
add(dummy);

dummy = new BibtexSingleField(InternalBibtexFields.TIMESTAMP, false, BibtexSingleField.SMALL_W);
dummy.setExtras(EnumSet.of(BibtexSingleFieldProperties.DATEPICKER));
dummy.setExtras(EnumSet.of(FieldProperties.DATE));
dummy.setPrivate();
add(dummy);

Expand All @@ -237,14 +245,36 @@ private InternalBibtexFields() {
add(dummy);

// IEEEtranBSTCTL fields
for (String yesNoField : IEEETranEntryTypes.IEEETRANBSTCTL_YES_NO_FIELDS) {
for (String yesNoField : IEEETRANBSTCTL_YES_NO_FIELDS) {
dummy = new BibtexSingleField(yesNoField, false);
dummy.setExtras(EnumSet.of(BibtexSingleFieldProperties.YES_NO));
dummy.setExtras(EnumSet.of(FieldProperties.YES_NO));
add(dummy);
}

for (String numericField : IEEETRANBSTCTL_NUMERIC_FIELDS) {
dummy = new BibtexSingleField(numericField, false).setNumeric(true);
dummy.getExtras().add(FieldProperties.INTEGER);
add(dummy);
}

for (String numericField : IEEETranEntryTypes.IEEETRANBSTCTL_NUMERIC_FIELDS) {
add(new BibtexSingleField(numericField, false).setNumeric(true));
// Set all fields with person names
for (String fieldText : BIBLATEX_PERSON_NAME_FIELDS) {
BibtexSingleField field = fieldSet.get(fieldText);
if (field == null) {
field = new BibtexSingleField(fieldText, true, BibtexSingleField.SMALL_W);
}
field.getExtras().add(FieldProperties.PERSON_NAMES);
add(field);
}

// Set all fields with dates
for (String fieldText : BIBLATEX_DATE_FIELDS) {
BibtexSingleField field = fieldSet.get(fieldText);
if (field == null) {
field = new BibtexSingleField(fieldText, true, BibtexSingleField.SMALL_W);
}
field.getExtras().add(FieldProperties.DATE);
add(field);
}

// collect all public fields for the PUBLIC_FIELDS array
Expand Down Expand Up @@ -310,12 +340,12 @@ private static Optional<BibtexSingleField> getField(String name) {
return Optional.empty();
}

public static Set<BibtexSingleFieldProperties> getFieldExtras(String name) {
public static Set<FieldProperties> getFieldExtras(String name) {
Optional<BibtexSingleField> sField = InternalBibtexFields.getField(name);
if (sField.isPresent()) {
return sField.get().getExtras();
}
return EnumSet.noneOf(BibtexSingleFieldProperties.class);
return EnumSet.noneOf(FieldProperties.class);
}

public static double getFieldWeight(String name) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/
package net.sf.jabref.bibtex.comparator;

import net.sf.jabref.bibtex.FieldProperties;
import net.sf.jabref.bibtex.InternalBibtexFields;
import net.sf.jabref.model.entry.AuthorList;
import net.sf.jabref.model.entry.BibEntry;
Expand Down Expand Up @@ -76,7 +77,7 @@ public int compare(BibEntry e1, BibEntry e2) {

// If the field is author or editor, we rearrange names so they are
// sorted according to last name.
if ("author".equals(sortField) || "editor".equals(sortField)) {
if (InternalBibtexFields.getFieldExtras(sortField).contains(FieldProperties.PERSON_NAMES)) {
if (f1 != null) {
f1 = AuthorList.fixAuthorForAlphabetization((String) f1).toLowerCase();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/
package net.sf.jabref.bibtex.comparator;

import net.sf.jabref.bibtex.FieldProperties;
import net.sf.jabref.bibtex.InternalBibtexFields;
import net.sf.jabref.gui.maintable.MainTableFormat;
import net.sf.jabref.logic.config.SaveOrderConfig;
Expand Down Expand Up @@ -93,7 +94,7 @@ public FieldComparator(String field, boolean reversed) {
private FieldType determineFieldType() {
if(BibEntry.TYPE_HEADER.equals(this.field[0])) {
return FieldType.TYPE;
} else if("author".equals(this.field[0]) || "editor".equals(this.field[0])) {
} else if (InternalBibtexFields.getFieldExtras(this.field[0]).contains(FieldProperties.PERSON_NAMES)) {
return FieldType.NAME;
} else if ("year".equals(this.field[0])) {
return FieldType.YEAR;
Expand Down
Loading