private static boolean compareRegionsReverse(char[] arr, int off1, int off2, int len, int out, boolean insensitive, boolean bracket) { int p1 = off1 + len - 1; int p2 = off2; if (p1 >= out || p2 >= out) { return false; } char a, b; for (int c = len; c > 0 && p2 < out; c--, p1--, p2++) { a = arr[p1]; b = arr[p2]; if(insensitive) { a = Category.caseFold(a); b = Category.caseFold(b); } if(bracket) { b = Category.matchBracket(b); } if (a != b) { return false; } } return true; }
@Override public boolean areEqual(Object left, Object right) { if(left == right) return true; if(!(left instanceof CharSequence && right instanceof CharSequence)) return false; CharSequence l = (CharSequence)left, r = (CharSequence)right; int llen = l.length(), rlen = r.length(); char c1, c2; for (int i = 0, j = 0; i < llen && j < rlen;) { while (!category.contains(c1 = l.charAt(i++))) {} while (!category.contains(c2 = r.charAt(j++))) {} if(c1 != c2) return false; } return true; } }
private static boolean compareRegionsI(char[] arr, int off1, int off2, int len, int out) { int p1 = off1 + len - 1; int p2 = off2 + len - 1; if (p1 >= out || p2 >= out) { return false; } for (int c = len; c > 0; c--, p1--, p2--) { if(Category.caseFold(arr[p1]) != Category.caseFold(arr[p2])) return false; /* if ((c1 = arr[p1]) != Character.toLowerCase(c2 = arr[p2]) && c1 != Character.toUpperCase(c2) && c1 != Character.toTitleCase(c2)) return false; */ } return true; }
public static String reverseWithBrackets(CharSequence s) { char[] c = new char[s.length()]; for (int i = c.length - 1, r = 0; i >= 0; i--, r++) { c[r] = matchBracket(s.charAt(i)); } return String.valueOf(c); }
private Category(int[] directory, String data) { n = data.length(); int j = 0, len = 0; cal = new CharArrayList(n); for (int i = 0; i < n; ++i) { cal.add(j += directory[data.charAt(i) - 32]); if((i & 1) == 1) len += 1 + j - cal.getChar(i-1); } length = len; blocks = makeBlocks(); }
private static boolean compareRegionsI(char[] arr, int off1, int off2, int len, int out) { int p1 = off1 + len - 1; int p2 = off2 + len - 1; if (p1 >= out || p2 >= out) { return false; } for (int c = len; c > 0; c--, p1--, p2--) { if(Category.caseFold(arr[p1]) != Category.caseFold(arr[p2])) return false; /* if ((c1 = arr[p1]) != Character.toLowerCase(c2 = arr[p2]) && c1 != Character.toUpperCase(c2) && c1 != Character.toTitleCase(c2)) return false; */ } return true; }
public boolean reverseBracketEqual(String left, String right) { if(left == null) return right == null; if(right == null) return false; if(left.length() != right.length()) return false; for (int l = 0, r = right.length() - 1; r >= 0; r--, l++) { if(left.charAt(l) != matchBracket(right.charAt(r))) return false; } return true; }
private Category(int[] directory, String data) { d = directory; s = data; n = s.length(); int j = 0, len = 0; cal = new CharArrayList(n); for (int i = 0; i < n; ++i) { cal.add(j += d[s.codePointAt(i) - 32]); if((i & 1) == 1) len += 1 + j - cal.getChar(i-1); } length = len; blocks = makeBlocks(); }
private static boolean compareRegionsReverse(char[] arr, int off1, int off2, int len, int out, boolean insensitive, boolean bracket) { int p1 = off1 + len - 1; int p2 = off2; if (p1 >= out || p2 >= out) { return false; } char a, b; for (int c = len; c > 0 && p2 < out; c--, p1--, p2++) { a = arr[p1]; b = arr[p2]; if(insensitive) { a = Category.caseFold(a); b = Category.caseFold(b); } if(bracket) { b = Category.matchBracket(b); } if (a != b) { return false; } } return true; }
@Override public boolean areEqual(Object left, Object right) { if(left == right) return true; if(!(left instanceof CharSequence && right instanceof CharSequence)) return false; CharSequence l = (CharSequence)left, r = (CharSequence)right; int llen = l.length(), rlen = r.length(); char c1, c2; for (int i = 0, j = 0; i < llen && j < rlen;) { while (category.contains(c1 = l.charAt(i++))) {} while (category.contains(c2 = r.charAt(j++))) {} if(c1 != c2) return false; } return true; } }
@Override public boolean areEqual(Object left, Object right) { if(left == right) return true; if(!(left instanceof CharSequence && right instanceof CharSequence)) return false; CharSequence l = (CharSequence)left, r = (CharSequence)right; int llen = l.length(), rlen = r.length(); if(llen != rlen) return false; for (int i = 0; i < llen; i++) { if(Category.caseFold(l.charAt(i)) != Category.caseFold(r.charAt(i))) return false; } return true; } }
private static boolean compareRegionsForward(char[] arr, int off1, int off2, int len, int out, boolean insensitive, boolean bracket) { int p1 = off1 + len - 1; int p2 = off2 + len - 1; if (p1 >= out || p2 >= out) { return false; } char a, b; for (int c = len; c > 0; c--, p1--, p2--) { a = arr[p1]; b = arr[p2]; if(insensitive) { a = Category.caseFold(a); b = Category.caseFold(b); } if(bracket) { b = Category.matchBracket(b); } if (a != b) { return false; } } return true; } private static boolean compareRegionsReverse(char[] arr, int off1, int off2, int len, int out,
@Override public int hash(final Object data) { if(data == null) return 0; if(!(data instanceof CharSequence)) return data.hashCode(); CharSequence data2 = (CharSequence)data; long result = 0x1A976FDF6BF60B8EL, z = 0x60642E2A34326F15L; final int len = data2.length(); char c; for (int i = 0; i < len; i++) { if(category.contains(c = data2.charAt(i))) { result ^= (z += (c ^ 0xC6BC279692B5CC85L) * 0x6C8E9CF570932BABL); result = (result << 54 | result >>> 10); } } result += (z ^ z >>> 26) * 0x632BE59BD9B4E019L; result = (result ^ result >>> 33) * 0xFF51AFD7ED558CCDL; return (int) ((result ^ result >>> 33) * 0xC4CEB9FE1A85EC53L); }
@Override public int hash(final Object data) { if(data == null) return 0; if(!(data instanceof CharSequence)) return data.hashCode(); CharSequence data2 = (CharSequence)data; long result = 0x1A976FDF6BF60B8EL, z = 0x60642E2A34326F15L; final int len = data2.length(); for (int i = 0; i < len; i++) { result ^= (z += (Category.caseFold(data2.charAt(i)) ^ 0xC6BC279692B5CC85L) * 0x6C8E9CF570932BABL); result = (result << 54 | result >>> 10); } result += (z ^ z >>> 26) * 0x632BE59BD9B4E019L; result = (result ^ result >>> 33) * 0xFF51AFD7ED558CCDL; return (int) ((result ^ result >>> 33) * 0xC4CEB9FE1A85EC53L); }
private static boolean compareRegionsForward(char[] arr, int off1, int off2, int len, int out, boolean insensitive, boolean bracket) { int p1 = off1 + len - 1; int p2 = off2 + len - 1; if (p1 >= out || p2 >= out) { return false; } char a, b; for (int c = len; c > 0; c--, p1--, p2--) { a = arr[p1]; b = arr[p2]; if(insensitive) { a = Category.caseFold(a); b = Category.caseFold(b); } if(bracket) { b = Category.matchBracket(b); } if (a != b) { return false; } } return true; } private static boolean compareRegionsReverse(char[] arr, int off1, int off2, int len, int out,
@Override public int hash(final Object data) { if(data == null) return 0; if(!(data instanceof CharSequence)) return data.hashCode(); CharSequence data2 = (CharSequence)data; long result = 0x1A976FDF6BF60B8EL, z = 0x60642E2A34326F15L; final int len = data2.length(); char c; for (int i = 0; i < len; i++) { if(!category.contains(c = data2.charAt(i))) { result ^= (z += (c ^ 0xC6BC279692B5CC85L) * 0x6C8E9CF570932BABL); result = (result << 54 | result >>> 10); } } result += (z ^ z >>> 26) * 0x632BE59BD9B4E019L; result = (result ^ result >>> 33) * 0xFF51AFD7ED558CCDL; return (int) ((result ^ result >>> 33) * 0xC4CEB9FE1A85EC53L); }
if (i >= end || (re.caseless ? Category.caseFold(data[i]) : data[i]) != term.c) break; i++; c = re.caseless ? Category.caseFold(data[i]) : data[i]; if (!(c <= 255 && term.bitset.get(c)) ^ term.inverse) break; i++; c = re.caseless ? Category.caseFold(data[i]) : data[i]; IntBitSet arr = term.bitset2[c >> 8]; if (arr == null || !arr.get(c & 255) ^ term.inverse) break; c = re.caseless ? Category.caseFold(data[j]) : data[j]; ch1Meets = (c < 256 && bitset.get(c)); c = re.caseless ? Category.caseFold(data[i]) : data[i]; ch2Meets = (c < 256 && bitset.get(c)); c = re.caseless ? Category.caseFold(data[j]) : data[j]; IntBitSet bits = bitset2[c >> 8]; ch1Meets = bits != null && bits.get(c & 0xff); c = re.caseless ? Category.caseFold(data[i]) : data[i]; IntBitSet bits = bitset2[c >> 8]; ch2Meets = bits != null && bits.get(c & 0xff); c = re.caseless ? Category.caseFold(data[j]) : data[j]; ch1Meets = c < 256 && bitset.get(c);
t = data[j]; if((modes & PerlSubstitution.MODE_INSENSITIVE) > 0) t = Category.caseFold(t); if((modes & PerlSubstitution.MODE_BRACKET) > 0) t = Category.matchBracket(t); working[i] = t; t = data[j]; if((modes & PerlSubstitution.MODE_INSENSITIVE) > 0) t = Category.caseFold(t); if((modes & PerlSubstitution.MODE_BRACKET) > 0) t = Category.matchBracket(t); working[i] = t;
/** * After calling {@link #analyze(CharSequence)}, you can optionally call this to alter any words in this MarkovText that * were used as a proper noun (determined by whether they were capitalized in the middle of a sentence), changing * them to a ciphered version using the given {@link NaturalLanguageCipher}. Normally you would initialize a * NaturalLanguageCipher with a {@link FakeLanguageGen} that matches the style you want for all names in this text, * then pass that to this method during pre-processing (not necessarily at runtime, since this method isn't * especially fast if the corpus was large). This method modifies this MarkovText in-place. * @param translator a NaturalLanguageCipher that will be used to translate proper nouns in this MarkovText's word array */ public void changeNames(NaturalLanguageCipher translator) { String name; PER_WORD: for (int i = 5; i < words.length; i++) { if(Category.Lu.contains((name = words[i]).charAt(0))) { for (int w = 5; w < words.length; w++) { for (int p = 0; p < processed[w].length; p++) { if (i == processed[w][++p] || i == processed[w][++p]) { words[i] = translator.cipher(name); continue PER_WORD; } } } } } } /**
if (i >= end || (re.caseless ? Category.caseFold(data[i]) : data[i]) != term.c) break; i++; c = re.caseless ? Category.caseFold(data[i]) : data[i]; if (!(c <= 255 && term.bitset.get(c)) ^ term.inverse) break; i++; c = re.caseless ? Category.caseFold(data[i]) : data[i]; IntBitSet arr = term.bitset2[c >> 8]; if (arr == null || !arr.get(c & 255) ^ term.inverse) break; c = re.caseless ? Category.caseFold(data[j]) : data[j]; ch1Meets = (c < 256 && bitset.get(c)); c = re.caseless ? Category.caseFold(data[i]) : data[i]; ch2Meets = (c < 256 && bitset.get(c)); c = re.caseless ? Category.caseFold(data[j]) : data[j]; IntBitSet bits = bitset2[c >> 8]; ch1Meets = bits != null && bits.get(c & 0xff); c = re.caseless ? Category.caseFold(data[i]) : data[i]; IntBitSet bits = bitset2[c >> 8]; ch2Meets = bits != null && bits.get(c & 0xff); c = re.caseless ? Category.caseFold(data[j]) : data[j]; ch1Meets = c < 256 && bitset.get(c);