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++;
}
}
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);
}
}
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);
}
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);
}
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());
}
Aggregations