summaryrefslogtreecommitdiff
path: root/src/thenewpoketext
diff options
context:
space:
mode:
authorDabomstew <dbs.stew@gmail.com>2014-05-20 07:22:08 +1200
committerDabomstew <dbs.stew@gmail.com>2014-05-20 07:22:08 +1200
commit236158f9ce5cddcfa18c2f1b76573301face7b0f (patch)
tree63f3c56062becdb573d7ed65f7c64608f060d701 /src/thenewpoketext
parentcbcebfa76215cf682449d72e9541f73383edfe5d (diff)
Updating text for ingame trades:
* Changed \r to \p and \f to \l in gen4 text parsing for consistency with the standards I usually follow. * Add a function to rewrite a string with replaced words * Add ingame trade text replacement for gen4 d/p so far, more to come
Diffstat (limited to 'src/thenewpoketext')
-rwxr-xr-xsrc/thenewpoketext/TextToPoke.java380
1 files changed, 190 insertions, 190 deletions
diff --git a/src/thenewpoketext/TextToPoke.java b/src/thenewpoketext/TextToPoke.java
index 88ecade..7d2227d 100755
--- a/src/thenewpoketext/TextToPoke.java
+++ b/src/thenewpoketext/TextToPoke.java
@@ -1,190 +1,190 @@
-package thenewpoketext;
-
-/*----------------------------------------------------------------------------*/
-/*-- TextToPoke.java - encodes gen4 games text from Unicode --*/
-/*-- Code derived from "thenewpoketext", copyright (C) loadingNOW --*/
-/*-- Ported to Java and bugfixed/customized by Dabomstew --*/
-/*----------------------------------------------------------------------------*/
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-public class TextToPoke {
-
- public static byte[] MakeFile(List<String> textarr, boolean compressed) {
- int base = textarr.size() * 8 + 4;
- List<PointerEntry> ptrtable = new ArrayList<PointerEntry>();
- List<List<Integer>> rawdata = new ArrayList<List<Integer>>();
- for (int i = 0; i < textarr.size(); i++) {
- List<Integer> data = ToCode(textarr.get(i), compressed);
- int l = data.size();
- ptrtable.add(new PointerEntry(base, l));
- rawdata.add(data);
- base += l * 2;
- }
-
- List<Integer> hdr = Arrays.asList(textarr.size(), 0);
-
- return join(wordListToBarr(hdr), pointerListToBarr(ptrtable),
- listOfWordListToBarr(rawdata));
- }
-
- private static List<Integer> ToCode(String text, boolean compressed) {
- List<Integer> data = new ArrayList<Integer>();
- while (text.length() != 0) {
- int i = Math.max(0, 6 - text.length());
- if (text.charAt(0) == '\\') {
- if (text.charAt(1) == 'x') {
- data.add(Integer.parseInt(text.substring(2, 6), 16));
- text = text.substring(6);
- } else if (text.charAt(1) == 'v') {
- data.add(0xFFFE);
- data.add(Integer.parseInt(text.substring(2, 6), 16));
- text = text.substring(6);
- } else if (text.charAt(1) == 'z') {
- List<Integer> var = new ArrayList<Integer>();
- int w = 0;
- while (text.length() != 0) {
- if (text.charAt(0) == '\\' && text.charAt(1) == 'z') {
- w++;
- var.add(Integer.parseInt(text.substring(2, 6), 16));
- text = text.substring(6);
- } else {
- break;
- }
- }
- data.add(w);
- data.addAll(var);
- } else if (text.charAt(1) == 'n') {
- data.add(0xE000);
- text = text.substring(2);
- } else if (text.charAt(1) == 'r') {
- data.add(0x25BC);
- text = text.substring(2);
- } else if (text.charAt(1) == 'f') {
- data.add(0x25BD);
- text = text.substring(2);
- } else if (text.substring(1, 4).equals("and")) {
- data.add(0x1C2);
- text = text.substring(4);
- } else {
- System.out.printf("unknown escape: %s\n",
- text.substring(1, 2));
- text = text.substring(2);
- }
- } else {
- while (!(UnicodeParser.d.containsKey(text.substring(0, 6 - i)) || (i == 6))) {
- i++;
- }
- if (i == 6) {
- System.out.printf("Char not found %s(%d)",
- text.substring(0, 1), text.charAt(0));
- text = text.substring(1);
- } else {
- data.add(UnicodeParser.d.get(text.substring(0, 6 - i)));
- text = text.substring(6 - i);
- }
- }
- }
- if (compressed) {
- if (data.size() % 5 != 0 || data.size() == 0) {
- data.add(0x1FF);
- }
- byte[] bits = new byte[data.size() * 9];
- int bc = 0;
- for (int i = 0; i < data.size(); i++) {
- for (int j = 0; j < 9; j++) {
- bits[bc++] = (byte) ((data.get(i) >> j) & 1);
- }
- }
- int tmp_uint16 = 0;
- data.clear();
- data.add(0xF100);
- for (int i = 0; i < bits.length; i++) {
- if (i % 15 == 0 && i != 0) {
- data.add(tmp_uint16);
- tmp_uint16 = 0;
- }
- tmp_uint16 |= (bits[i] << (i % 15));
- }
- data.add(tmp_uint16);
- }
- data.add(0xFFFF);
- return data;
- }
-
- private static byte[] join(byte[]... args) {
- int tlen = 0;
- for (byte[] arr : args) {
- tlen += arr.length;
- }
- byte[] barr = new byte[tlen];
- int offs = 0;
- for (byte[] arr : args) {
- System.arraycopy(arr, 0, barr, offs, arr.length);
- offs += arr.length;
- }
- return barr;
- }
-
- private static byte[] wordListToBarr(List<Integer> list) {
- byte[] barr = new byte[list.size() * 2];
- int l = list.size();
- for (int i = 0; i < l; i++) {
- barr[i * 2] = (byte) (list.get(i) & 0xFF);
- barr[i * 2 + 1] = (byte) ((list.get(i) >> 8) & 0xFF);
- }
- return barr;
- }
-
- private static byte[] pointerListToBarr(List<PointerEntry> ptrList) {
- byte[] data = new byte[ptrList.size() * 8];
- int l = ptrList.size();
- for (int i = 0; i < l; i++) {
- int ofs = i * 8;
- PointerEntry ent = ptrList.get(i);
- data[ofs] = (byte) (ent.ptr & 0xFF);
- data[ofs + 1] = (byte) ((ent.ptr >> 8) & 0xFF);
- data[ofs + 2] = (byte) ((ent.ptr >> 16) & 0xFF);
- data[ofs + 3] = (byte) ((ent.ptr >> 24) & 0xFF);
- data[ofs + 4] = (byte) (ent.chars & 0xFF);
- data[ofs + 5] = (byte) ((ent.chars >> 8) & 0xFF);
- data[ofs + 6] = (byte) ((ent.chars >> 16) & 0xFF);
- data[ofs + 7] = (byte) ((ent.chars >> 24) & 0xFF);
- }
- return data;
- }
-
- private static byte[] listOfWordListToBarr(List<List<Integer>> list) {
- int tlen = 0;
- for (List<Integer> subList : list) {
- tlen += subList.size() * 2;
- }
- byte[] barr = new byte[tlen];
- int offs = 0;
- int l1 = list.size();
- for (int j = 0; j < l1; j++) {
- List<Integer> slist = list.get(j);
- int l2 = slist.size();
- for (int i = 0; i < l2; i++) {
- barr[offs] = (byte) (slist.get(i) & 0xFF);
- barr[offs + 1] = (byte) ((slist.get(i) >> 8) & 0xFF);
- offs += 2;
- }
- }
- return barr;
- }
-
- private static class PointerEntry {
-
- private int ptr;
- private int chars;
-
- public PointerEntry(int ptr, int chars) {
- this.ptr = ptr;
- this.chars = chars;
- }
- }
-
-}
+package thenewpoketext;
+
+/*----------------------------------------------------------------------------*/
+/*-- TextToPoke.java - encodes gen4 games text from Unicode --*/
+/*-- Code derived from "thenewpoketext", copyright (C) loadingNOW --*/
+/*-- Ported to Java and bugfixed/customized by Dabomstew --*/
+/*----------------------------------------------------------------------------*/
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class TextToPoke {
+
+ public static byte[] MakeFile(List<String> textarr, boolean compressed) {
+ int base = textarr.size() * 8 + 4;
+ List<PointerEntry> ptrtable = new ArrayList<PointerEntry>();
+ List<List<Integer>> rawdata = new ArrayList<List<Integer>>();
+ for (int i = 0; i < textarr.size(); i++) {
+ List<Integer> data = ToCode(textarr.get(i), compressed);
+ int l = data.size();
+ ptrtable.add(new PointerEntry(base, l));
+ rawdata.add(data);
+ base += l * 2;
+ }
+
+ List<Integer> hdr = Arrays.asList(textarr.size(), 0);
+
+ return join(wordListToBarr(hdr), pointerListToBarr(ptrtable),
+ listOfWordListToBarr(rawdata));
+ }
+
+ private static List<Integer> ToCode(String text, boolean compressed) {
+ List<Integer> data = new ArrayList<Integer>();
+ while (text.length() != 0) {
+ int i = Math.max(0, 6 - text.length());
+ if (text.charAt(0) == '\\') {
+ if (text.charAt(1) == 'x') {
+ data.add(Integer.parseInt(text.substring(2, 6), 16));
+ text = text.substring(6);
+ } else if (text.charAt(1) == 'v') {
+ data.add(0xFFFE);
+ data.add(Integer.parseInt(text.substring(2, 6), 16));
+ text = text.substring(6);
+ } else if (text.charAt(1) == 'z') {
+ List<Integer> var = new ArrayList<Integer>();
+ int w = 0;
+ while (text.length() != 0) {
+ if (text.charAt(0) == '\\' && text.charAt(1) == 'z') {
+ w++;
+ var.add(Integer.parseInt(text.substring(2, 6), 16));
+ text = text.substring(6);
+ } else {
+ break;
+ }
+ }
+ data.add(w);
+ data.addAll(var);
+ } else if (text.charAt(1) == 'n') {
+ data.add(0xE000);
+ text = text.substring(2);
+ } else if (text.charAt(1) == 'p') {
+ data.add(0x25BC);
+ text = text.substring(2);
+ } else if (text.charAt(1) == 'l') {
+ data.add(0x25BD);
+ text = text.substring(2);
+ } else if (text.substring(1, 4).equals("and")) {
+ data.add(0x1C2);
+ text = text.substring(4);
+ } else {
+ System.out.printf("unknown escape: %s\n",
+ text.substring(1, 2));
+ text = text.substring(2);
+ }
+ } else {
+ while (!(UnicodeParser.d.containsKey(text.substring(0, 6 - i)) || (i == 6))) {
+ i++;
+ }
+ if (i == 6) {
+ System.out.printf("Char not found %s(%d)",
+ text.substring(0, 1), text.charAt(0));
+ text = text.substring(1);
+ } else {
+ data.add(UnicodeParser.d.get(text.substring(0, 6 - i)));
+ text = text.substring(6 - i);
+ }
+ }
+ }
+ if (compressed) {
+ if (data.size() % 5 != 0 || data.size() == 0) {
+ data.add(0x1FF);
+ }
+ byte[] bits = new byte[data.size() * 9];
+ int bc = 0;
+ for (int i = 0; i < data.size(); i++) {
+ for (int j = 0; j < 9; j++) {
+ bits[bc++] = (byte) ((data.get(i) >> j) & 1);
+ }
+ }
+ int tmp_uint16 = 0;
+ data.clear();
+ data.add(0xF100);
+ for (int i = 0; i < bits.length; i++) {
+ if (i % 15 == 0 && i != 0) {
+ data.add(tmp_uint16);
+ tmp_uint16 = 0;
+ }
+ tmp_uint16 |= (bits[i] << (i % 15));
+ }
+ data.add(tmp_uint16);
+ }
+ data.add(0xFFFF);
+ return data;
+ }
+
+ private static byte[] join(byte[]... args) {
+ int tlen = 0;
+ for (byte[] arr : args) {
+ tlen += arr.length;
+ }
+ byte[] barr = new byte[tlen];
+ int offs = 0;
+ for (byte[] arr : args) {
+ System.arraycopy(arr, 0, barr, offs, arr.length);
+ offs += arr.length;
+ }
+ return barr;
+ }
+
+ private static byte[] wordListToBarr(List<Integer> list) {
+ byte[] barr = new byte[list.size() * 2];
+ int l = list.size();
+ for (int i = 0; i < l; i++) {
+ barr[i * 2] = (byte) (list.get(i) & 0xFF);
+ barr[i * 2 + 1] = (byte) ((list.get(i) >> 8) & 0xFF);
+ }
+ return barr;
+ }
+
+ private static byte[] pointerListToBarr(List<PointerEntry> ptrList) {
+ byte[] data = new byte[ptrList.size() * 8];
+ int l = ptrList.size();
+ for (int i = 0; i < l; i++) {
+ int ofs = i * 8;
+ PointerEntry ent = ptrList.get(i);
+ data[ofs] = (byte) (ent.ptr & 0xFF);
+ data[ofs + 1] = (byte) ((ent.ptr >> 8) & 0xFF);
+ data[ofs + 2] = (byte) ((ent.ptr >> 16) & 0xFF);
+ data[ofs + 3] = (byte) ((ent.ptr >> 24) & 0xFF);
+ data[ofs + 4] = (byte) (ent.chars & 0xFF);
+ data[ofs + 5] = (byte) ((ent.chars >> 8) & 0xFF);
+ data[ofs + 6] = (byte) ((ent.chars >> 16) & 0xFF);
+ data[ofs + 7] = (byte) ((ent.chars >> 24) & 0xFF);
+ }
+ return data;
+ }
+
+ private static byte[] listOfWordListToBarr(List<List<Integer>> list) {
+ int tlen = 0;
+ for (List<Integer> subList : list) {
+ tlen += subList.size() * 2;
+ }
+ byte[] barr = new byte[tlen];
+ int offs = 0;
+ int l1 = list.size();
+ for (int j = 0; j < l1; j++) {
+ List<Integer> slist = list.get(j);
+ int l2 = slist.size();
+ for (int i = 0; i < l2; i++) {
+ barr[offs] = (byte) (slist.get(i) & 0xFF);
+ barr[offs + 1] = (byte) ((slist.get(i) >> 8) & 0xFF);
+ offs += 2;
+ }
+ }
+ return barr;
+ }
+
+ private static class PointerEntry {
+
+ private int ptr;
+ private int chars;
+
+ public PointerEntry(int ptr, int chars) {
+ this.ptr = ptr;
+ this.chars = chars;
+ }
+ }
+
+}