From 9265485a61dda5dc99913feab28e4743c812114c Mon Sep 17 00:00:00 2001 From: "Benjamin J. Culkin" Date: Wed, 19 Sep 2018 13:21:50 -0300 Subject: Add MirrorDB MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This adds a simple map that uses the unicode bidirectional database to say whether or not a given character has a mirrored counterpart (e.g, ( and ), < and >, as well as « and ») --- base/src/main/java/bjc/utils/ioutils/MirrorDB.java | 52 ++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 base/src/main/java/bjc/utils/ioutils/MirrorDB.java (limited to 'base/src/main') diff --git a/base/src/main/java/bjc/utils/ioutils/MirrorDB.java b/base/src/main/java/bjc/utils/ioutils/MirrorDB.java new file mode 100644 index 0000000..230f2f0 --- /dev/null +++ b/base/src/main/java/bjc/utils/ioutils/MirrorDB.java @@ -0,0 +1,52 @@ +package bjc.utils.ioutils; + +import java.io.InputStream; +import java.io.IOException; + +import java.util.HashMap; +import java.util.Map; +import java.util.Scanner; + +public class MirrorDB { + private Map mirrored; + + public MirrorDB() { + mirrored = new HashMap<>(); + + final InputStream stream = getClass().getResourceAsStream("/BidiMirrorDB.txt"); + + try (Scanner scn = new Scanner(stream)) { + String ln = ""; + + while (scn.hasNextLine()) { + ln = scn.nextLine(); + + if (ln.equals("")) { + continue; + } + if (ln.startsWith("#")) { + continue; + } + + final int cp1 = Integer.parseInt(ln.substring(0, 4), 16); + final int cp2 = Integer.parseInt(ln.substring(6, 10), 16); + + final char[] cpa1 = Character.toChars(cp1); + final char[] cpa2 = Character.toChars(cp2); + + final String cps1 = new String(cpa1); + final String cps2 = new String(cpa2); + + mirrored.put(cps1, cps2); + } + } + } + + public boolean canMirror(String mir) { + return mirrored.containsKey(mir); + } + + public String mirror(String mir) { + return mirrored.get(mir); + } +} -- cgit v1.2.3