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());
}
use of org.jabref.model.entry.BibtexString in project jabref by JabRef.
the class BibtexDatabaseWriterTest method roundtripWithUserCommentBeforeStringAndChange.
@Test
public void roundtripWithUserCommentBeforeStringAndChange() throws Exception {
Path testBibtexFile = Paths.get("src/test/resources/testbib/complex.bib");
Charset encoding = StandardCharsets.UTF_8;
ParserResult result = new BibtexParser(importFormatPreferences).parse(Importer.getReader(testBibtexFile, encoding));
for (BibtexString string : result.getDatabase().getStringValues()) {
// Mark them as changed
string.setContent(string.getContent());
}
SavePreferences preferences = new SavePreferences().withEncoding(encoding).withSaveInOriginalOrder(true);
BibDatabaseContext context = new BibDatabaseContext(result.getDatabase(), result.getMetaData(), new Defaults(BibDatabaseMode.BIBTEX));
StringSaveSession session = databaseWriter.savePartOfDatabase(context, result.getDatabase().getEntries(), preferences);
try (Scanner scanner = new Scanner(testBibtexFile, encoding.name())) {
assertEquals(scanner.useDelimiter("\\A").next(), session.getStringValue());
}
}
use of org.jabref.model.entry.BibtexString in project jabref by JabRef.
the class BibtexDatabaseWriterTest method writeSavedSerializationOfStringIfUnchanged.
@Test
public void writeSavedSerializationOfStringIfUnchanged() throws Exception {
BibtexString string = new BibtexString("name", "content");
string.setParsedSerialization("serialization");
database.addString(string);
StringSaveSession session = databaseWriter.savePartOfDatabase(bibtexContext, Collections.emptyList(), new SavePreferences());
assertEquals("serialization", session.getStringValue());
}
Aggregations