Skip to content

Instantly share code, notes, and snippets.

@chris-martin
Last active December 14, 2015 23:29
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chris-martin/5165717 to your computer and use it in GitHub Desktop.
Save chris-martin/5165717 to your computer and use it in GitHub Desktop.
import java.util.List;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
class LatexEscaper {
private class Replacement {
final String toReplace;
final String replaceWith;
Replacement(final String toReplace, final String replaceWith) {
this.toReplace = toReplace;
this.replaceWith = replaceWith;
}
String applyTo(final String input) {
return input.replace(toReplace, replaceWith);
}
}
private final List<Replacement> texReplacements = Lists.newArrayList();
{
texReplacements.add(new Replacement("\\", "\\textbackslash "));
for (final String x : ImmutableList.of("_", "^", "~", "$", "%", "#", "&", "{", "}")) {
texReplacements.add(new Replacement(x, "\\" + x));
}
}
public String escape(final String input) {
String escaped = input;
for (final Replacement replacement : texReplacements) {
escaped = replacement.applyTo(escaped);
}
return escaped;
}
}
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class LatexEscaperTest {
private LatexEscaper escaper;
@BeforeMethod
public void init() {
escaper = new LatexEscaper();
}
@Test
public void testBackslash() {
Assert.assertEquals(escaper.escape("abc\\def"), "abc\\textbackslash def");
}
@Test
public void testAandB() {
Assert.assertEquals(escaper.escape("A&B"), "A\\&B");
}
@Test
public void testTexCommand() {
Assert.assertEquals(escaper.escape("a \\ghi{jkl} z"), "a \\textbackslash ghi\\{jkl\\} z");
}
}
public final class LatexUtils {
private LatexUtils() { }
private static final LatexEscaper escaper = new LatexEscaper();
public static String escape(final String input) {
return escaper.escape(input);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>???</groupId>
<artifactId>latex-util</artifactId>
<packaging>jar</packaging>
<version>???</version>
<name>LaTeX Util</name>
<description>LaTeX-related utilities</description>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>12.0</version>
</dependency>
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
</dependency>
</dependencies>
</project>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment