Search in sources :

Example 31 with BibtexString

use of org.jabref.model.entry.BibtexString in project jabref by JabRef.

the class AuxParserResult method insertStrings.

public void insertStrings(Collection<BibtexString> usedStrings) {
    for (BibtexString string : usedStrings) {
        auxDatabase.addString(string);
        insertedStrings++;
    }
}
Also used : BibtexString(org.jabref.model.entry.BibtexString)

Example 32 with BibtexString

use of org.jabref.model.entry.BibtexString in project jabref by JabRef.

the class BibtexDatabaseWriter method writeString.

@Override
protected void writeString(BibtexString bibtexString, boolean isFirstString, int maxKeyLength, Boolean reformatFile, LatexFieldFormatterPreferences latexFieldFormatterPreferences) throws SaveException {
    try {
        // If the string has not been modified, write it back as it was
        if (!reformatFile && !bibtexString.hasChanged()) {
            getWriter().write(bibtexString.getParsedSerialization());
            return;
        }
        // Write user comments
        String userComments = bibtexString.getUserComments();
        if (!userComments.isEmpty()) {
            getWriter().write(userComments + OS.NEWLINE);
        }
        if (isFirstString) {
            getWriter().write(OS.NEWLINE);
        }
        getWriter().write(STRING_PREFIX + "{" + bibtexString.getName() + StringUtil.repeatSpaces(maxKeyLength - bibtexString.getName().length()) + " = ");
        if (bibtexString.getContent().isEmpty()) {
            getWriter().write("{}");
        } else {
            try {
                String formatted = new LatexFieldFormatter(latexFieldFormatterPreferences).format(bibtexString.getContent(), LatexFieldFormatter.BIBTEX_STRING);
                getWriter().write(formatted);
            } catch (InvalidFieldValueException ex) {
                throw new SaveException(ex);
            }
        }
        getWriter().write("}" + OS.NEWLINE);
    } catch (IOException e) {
        throw new SaveException(e);
    }
}
Also used : InvalidFieldValueException(org.jabref.logic.bibtex.InvalidFieldValueException) BibtexString(org.jabref.model.entry.BibtexString) IOException(java.io.IOException) LatexFieldFormatter(org.jabref.logic.bibtex.LatexFieldFormatter)

Example 33 with BibtexString

use of org.jabref.model.entry.BibtexString in project jabref by JabRef.

the class BibtexParser method parseString.

private BibtexString parseString() throws IOException {
    skipWhitespace();
    consume('{', '(');
    skipWhitespace();
    LOGGER.debug("Parsing string name");
    String name = parseTextToken();
    LOGGER.debug("Parsed string name");
    skipWhitespace();
    LOGGER.debug("Now the contents");
    consume('=');
    String content = parseFieldContent(name);
    LOGGER.debug("Now I'm going to consume a }");
    consume('}', ')');
    // Consume new line which signals end of entry
    skipOneNewline();
    LOGGER.debug("Finished string parsing.");
    return new BibtexString(name, content);
}
Also used : BibtexString(org.jabref.model.entry.BibtexString) BibtexString(org.jabref.model.entry.BibtexString)

Example 34 with BibtexString

use of org.jabref.model.entry.BibtexString in project jabref by JabRef.

the class BibDatabase method resolveString.

/**
     * If the label represents a string contained in this database, returns
     * that string's content. Resolves references to other strings, taking
     * care not to follow a circular reference pattern.
     * If the string is undefined, returns null.
     */
private String resolveString(String label, Set<String> usedIds, Set<String> allUsedIds) {
    Objects.requireNonNull(label);
    Objects.requireNonNull(usedIds);
    Objects.requireNonNull(allUsedIds);
    for (BibtexString string : bibtexStrings.values()) {
        if (string.getName().equalsIgnoreCase(label)) {
            // infinite recursion.
            if (usedIds.contains(string.getId())) {
                LOGGER.info("Stopped due to circular reference in strings: " + label);
                return label;
            }
            // If not, log this string's ID now.
            usedIds.add(string.getId());
            if (allUsedIds != null) {
                allUsedIds.add(string.getId());
            }
            // Ok, we found the string. Now we must make sure we
            // resolve any references to other strings in this one.
            String result = string.getContent();
            result = resolveContent(result, usedIds, allUsedIds);
            // Finished with recursing this branch, so we remove our
            // ID again:
            usedIds.remove(string.getId());
            return result;
        }
    }
    // If we get to this point, the string has obviously not been defined locally.
    // Check if one of the standard BibTeX month strings has been used:
    Optional<Month> month = Month.getMonthByShortName(label);
    return month.map(Month::getFullName).orElse(null);
}
Also used : Month(org.jabref.model.entry.Month) BibtexString(org.jabref.model.entry.BibtexString) BibtexString(org.jabref.model.entry.BibtexString)

Example 35 with BibtexString

use of org.jabref.model.entry.BibtexString in project jabref by JabRef.

the class BibtexDatabaseWriterTest method reformatStringIfAskedToDoSo.

@Test
public void reformatStringIfAskedToDoSo() throws Exception {
    BibtexString string = new BibtexString("name", "content");
    string.setParsedSerialization("wrong serialization");
    database.addString(string);
    SavePreferences preferences = new SavePreferences().withReformatFile(true);
    StringSaveSession session = databaseWriter.savePartOfDatabase(bibtexContext, Collections.emptyList(), preferences);
    assertEquals(OS.NEWLINE + "@String{name = {content}}" + OS.NEWLINE, session.getStringValue());
}
Also used : BibtexString(org.jabref.model.entry.BibtexString) Test(org.junit.Test)

Aggregations

BibtexString (org.jabref.model.entry.BibtexString)40 Test (org.junit.Test)24 ParserResult (org.jabref.logic.importer.ParserResult)8 BibEntry (org.jabref.model.entry.BibEntry)7 StringReader (java.io.StringReader)6 KeyCollisionException (org.jabref.model.database.KeyCollisionException)5 UndoableInsertString (org.jabref.gui.undo.UndoableInsertString)4 ArrayList (java.util.ArrayList)3 HashSet (java.util.HashSet)3 NamedCompound (org.jabref.gui.undo.NamedCompound)2 UndoableStringChange (org.jabref.gui.undo.UndoableStringChange)2 BibDatabase (org.jabref.model.database.BibDatabase)2 IOException (java.io.IOException)1 Charset (java.nio.charset.Charset)1 Path (java.nio.file.Path)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Optional (java.util.Optional)1 Scanner (java.util.Scanner)1 Matcher (java.util.regex.Matcher)1