-
-
Notifications
You must be signed in to change notification settings - Fork 2.5k
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
Fix package of PreviewLayout #5702
Changes from 13 commits
820a7e8
046928c
eeb1c27
2d4eb08
f16d690
30e0ac3
fbde17a
be142d5
68b8d0a
6865b13
6b9ce8a
ad392c8
62c7c76
a026538
983aaa2
f6ee3ac
a89b7a1
d72b8dc
c64ce4a
09a4e90
0323f2c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
package org.jabref.logic.bst; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I would move this also to the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I see |
||
|
||
import java.nio.file.Files; | ||
import java.nio.file.Path; | ||
import java.nio.file.Paths; | ||
import java.util.List; | ||
|
||
import org.jabref.logic.PreviewLayout; | ||
import org.jabref.logic.cleanup.ConvertToBibtexCleanup; | ||
import org.jabref.logic.formatter.bibtexfields.RemoveNewlinesFormatter; | ||
import org.jabref.logic.l10n.Localization; | ||
import org.jabref.logic.layout.format.LatexToUnicodeFormatter; | ||
import org.jabref.logic.layout.format.RemoveLatexCommandsFormatter; | ||
import org.jabref.logic.layout.format.RemoveTilde; | ||
import org.jabref.model.database.BibDatabase; | ||
import org.jabref.model.entry.BibEntry; | ||
|
||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
|
||
public class BstPreviewLayout implements PreviewLayout { | ||
|
||
private static final Logger LOGGER = LoggerFactory.getLogger(BstPreviewLayout.class); | ||
|
||
private final String name; | ||
|
||
private VM vm; | ||
private String error; | ||
|
||
public BstPreviewLayout(String filename) { | ||
this(Paths.get(filename)); | ||
} | ||
|
||
public BstPreviewLayout(Path path) { | ||
name = path.getFileName().toString(); | ||
if (!Files.exists(path)) { | ||
LOGGER.error("File {} not found", path.toAbsolutePath()); | ||
error = Localization.lang("Error opening file '%0'.", path.toString()); | ||
return; | ||
} | ||
try { | ||
vm = new VM(path.toFile()); | ||
} catch (Exception e) { | ||
LOGGER.error("Could not read {}.", path.toAbsolutePath(), e); | ||
error = Localization.lang("Error opening file '%0'.", path.toString()); | ||
} | ||
} | ||
|
||
@Override | ||
public String generatePreview(BibEntry entry, BibDatabase database) { | ||
if (error != null) { | ||
return error; | ||
} | ||
// ensure that the entry is of BibTeX format (and do not modify the original entry) | ||
entry = (BibEntry) entry.clone(); | ||
koppor marked this conversation as resolved.
Show resolved
Hide resolved
|
||
new ConvertToBibtexCleanup().cleanup(entry); | ||
String result = vm.run(List.of(entry)); | ||
// Remove all comments | ||
result = result.replaceAll("%.*", ""); | ||
// Remove all LaTeX comments | ||
// The RemoveLatexCommandsFormatter keeps the words inside latex environments. Therefore, we remove them manually | ||
result = result.replace("\\begin{thebibliography}{1}", ""); | ||
result = result.replace("\\end{thebibliography}", ""); | ||
// The RemoveLatexCommandsFormatter keeps the word inside the latex command, but we want to remove that completely | ||
result = result.replaceAll("\\\\bibitem[{].*[}]", ""); | ||
// We want to replace \newblock by a space instead of completely removing it | ||
result = result.replace("\\newblock", " "); | ||
// remove all latex commands statements - assumption: command in a separate line | ||
result = result.replaceAll("(?m)^\\\\.*$", ""); | ||
// remove some IEEEtran.bst output (resulting from a multiline \providecommand) | ||
result = result.replace("#2}}", ""); | ||
// Have quotes right - and more | ||
result = new LatexToUnicodeFormatter().format(result); | ||
result = result.replace("``", "\""); | ||
result = result.replace("''", "\""); | ||
// Final cleanup | ||
result = new RemoveNewlinesFormatter().format(result); | ||
result = new RemoveLatexCommandsFormatter().format(result); | ||
result = new RemoveTilde().format(result); | ||
result = result.trim().replaceAll(" +", " "); | ||
return result; | ||
} | ||
|
||
@Override | ||
public String getName() { | ||
return name; | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
package org.jabref.logic.bst; | ||
|
||
import java.nio.file.Paths; | ||
|
||
import org.jabref.model.database.BibDatabase; | ||
import org.jabref.model.entry.BibEntry; | ||
import org.jabref.model.entry.field.StandardField; | ||
import org.jabref.model.entry.types.StandardEntryType; | ||
|
||
import org.junit.jupiter.api.Test; | ||
|
||
import static org.junit.jupiter.api.Assertions.assertEquals; | ||
import static org.mockito.Mockito.mock; | ||
|
||
class BstPreviewLayoutTest { | ||
|
||
private BibDatabase bibDatabase = mock(BibDatabase.class); | ||
|
||
@Test | ||
public void generatePreviewForSimpleEntryUsingAbbr() throws Exception { | ||
BstPreviewLayout bstPreviewLayout = new BstPreviewLayout(Paths.get(BstPreviewLayoutTest.class.getResource("abbrv.bst").toURI())); | ||
BibEntry entry = new BibEntry().withField(StandardField.AUTHOR, "Oliver Kopp"). | ||
withField(StandardField.TITLE, "Thoughts on Development"); | ||
BibDatabase bibDatabase = mock(BibDatabase.class); | ||
String preview = bstPreviewLayout.generatePreview(entry, bibDatabase); | ||
assertEquals("O. Kopp. Thoughts on development.", preview); | ||
} | ||
|
||
@Test | ||
public void generatePreviewForSliceTheoremPaperUsingAbbr() throws Exception { | ||
BstPreviewLayout bstPreviewLayout = new BstPreviewLayout(Paths.get(BstPreviewLayoutTest.class.getResource("abbrv.bst").toURI())); | ||
String preview = bstPreviewLayout.generatePreview(getSliceTheoremPaper(), bibDatabase); | ||
assertEquals("T. Diez. Slice theorem for fréchet group actions and covariant symplectic field theory. #may# 2014.", preview); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Shouldn't There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Had to dive deeply in our writing logic to get this fixed. Added some JavaDoc comments and (slightly) improved the code of our writers. I understood that I need "FieldWriter" 😇 Did some quick hacks to use the result of it. I did not want to touch FieldWriter only for this functionality. |
||
} | ||
|
||
@Test | ||
public void generatePreviewForSliceTheoremPaperUsingIEEE() throws Exception { | ||
BstPreviewLayout bstPreviewLayout = new BstPreviewLayout(Paths.get(ClassLoader.getSystemResource("bst/IEEEtran.bst").toURI())); | ||
String preview = bstPreviewLayout.generatePreview(getSliceTheoremPaper(), bibDatabase); | ||
assertEquals("T. Diez, \"Slice theorem for fréchet group actions and covariant symplectic field theory\" #may# 2014.", preview); | ||
} | ||
|
||
private static BibEntry getSliceTheoremPaper() { | ||
return new BibEntry(StandardEntryType.Article) | ||
.withField(StandardField.AUTHOR, "Tobias Diez") | ||
.withField(StandardField.TITLE, "Slice theorem for Fréchet group actions and covariant symplectic field theory") | ||
.withField(StandardField.DATE, "2014-05-09") | ||
.withField(StandardField.ABSTRACT, "A general slice theorem for the action of a Fr\\'echet Lie group on a Fr\\'echet manifolds is established. The Nash-Moser theorem provides the fundamental tool to generalize the result of Palais to this infinite-dimensional setting. The presented slice theorem is illustrated by its application to gauge theories: the action of the gauge transformation group admits smooth slices at every point and thus the gauge orbit space is stratified by Fr\\'echet manifolds. Furthermore, a covariant and symplectic formulation of classical field theory is proposed and extensively discussed. At the root of this novel framework is the incorporation of field degrees of freedom F and spacetime M into the product manifold F * M. The induced bigrading of differential forms is used in order to carry over the usual symplectic theory to this new setting. The examples of the Klein-Gordon field and general Yang-Mills theory illustrate that the presented approach conveniently handles the occurring symmetries.") | ||
.withField(StandardField.EPRINT, "1405.2249v1") | ||
.withField(StandardField.FILE, ":http\\://arxiv.org/pdf/1405.2249v1:PDF") | ||
.withField(StandardField.EPRINTTYPE, "arXiv") | ||
.withField(StandardField.EPRINTCLASS, "math-ph") | ||
.withField(StandardField.KEYWORDS, "math-ph, math.DG, math.MP, math.SG, 58B99, 58Z05, 58B25, 22E65, 58D19, 53D20, 53D42"); | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why did you moved this? I find
citationstyle
is a pretty fitting package for all preview-related stuff.PreviewLayout
is definitely not important enough to directly lie in thelogic
package.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Our two other classes for previews reside in different packages:
I moved the
PreviewLayout
now toorg.jabref.logic.preview
, which is not perfect, but better than inorg.jabref.logic
.