/* */ package com.ibm.icu.text; /* */ /* */ import com.ibm.icu.impl.Assert; /* */ import com.ibm.icu.impl.ICUDebug; /* */ import java.io.DataOutputStream; /* */ import java.io.IOException; /* */ import java.io.OutputStream; /* */ import java.util.ArrayList; /* */ import java.util.HashMap; /* */ import java.util.List; /* */ import java.util.Map; /* */ import java.util.Set; /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ class RBBIRuleBuilder /* */ { /* */ String fDebugEnv; /* */ String fRules; /* */ RBBIRuleScanner fScanner; /* 36 */ RBBINode[] fTreeRoots = new RBBINode[4]; /* */ static final int fForwardTree = 0; /* */ static final int fReverseTree = 1; /* */ static final int fSafeFwdTree = 2; /* */ static final int fSafeRevTree = 3; /* 41 */ int fDefaultTree = 0; /* */ /* */ /* */ boolean fChainRules; /* */ /* */ /* */ boolean fLBCMNoChain; /* */ /* */ /* */ boolean fLookAheadHardBreak; /* */ /* */ RBBISetBuilder fSetBuilder; /* */ /* */ List<RBBINode> fUSetNodes; /* */ /* */ RBBITableBuilder fForwardTables; /* */ /* */ RBBITableBuilder fReverseTables; /* */ /* */ RBBITableBuilder fSafeFwdTables; /* */ /* */ RBBITableBuilder fSafeRevTables; /* */ /* 64 */ Map<Set<Integer>, Integer> fStatusSets = new HashMap(); /* */ /* */ /* */ /* */ List<Integer> fRuleStatusVals; /* */ /* */ /* */ /* */ static final int U_BRK_ERROR_START = 66048; /* */ /* */ /* */ /* */ static final int U_BRK_INTERNAL_ERROR = 66049; /* */ /* */ /* */ /* */ static final int U_BRK_HEX_DIGITS_EXPECTED = 66050; /* */ /* */ /* */ /* */ static final int U_BRK_SEMICOLON_EXPECTED = 66051; /* */ /* */ /* */ /* */ static final int U_BRK_RULE_SYNTAX = 66052; /* */ /* */ /* */ /* */ static final int U_BRK_UNCLOSED_SET = 66053; /* */ /* */ /* */ /* */ static final int U_BRK_ASSIGN_ERROR = 66054; /* */ /* */ /* */ /* */ static final int U_BRK_VARIABLE_REDFINITION = 66055; /* */ /* */ /* */ /* */ static final int U_BRK_MISMATCHED_PAREN = 66056; /* */ /* */ /* */ /* */ static final int U_BRK_NEW_LINE_IN_QUOTED_STRING = 66057; /* */ /* */ /* */ /* */ static final int U_BRK_UNDEFINED_VARIABLE = 66058; /* */ /* */ /* */ /* */ static final int U_BRK_INIT_ERROR = 66059; /* */ /* */ /* */ /* */ static final int U_BRK_RULE_EMPTY_SET = 66060; /* */ /* */ /* */ /* */ static final int U_BRK_UNRECOGNIZED_OPTION = 66061; /* */ /* */ /* */ static final int U_BRK_MALFORMED_RULE_TAG = 66062; /* */ /* */ /* */ static final int U_BRK_MALFORMED_SET = 66063; /* */ /* */ /* */ static final int U_BRK_ERROR_LIMIT = 66064; /* */ /* */ /* */ /* */ RBBIRuleBuilder(String rules) /* */ { /* 139 */ this.fDebugEnv = (ICUDebug.enabled("rbbi") ? ICUDebug.value("rbbi") : null); /* */ /* 141 */ this.fRules = rules; /* 142 */ this.fUSetNodes = new ArrayList(); /* 143 */ this.fRuleStatusVals = new ArrayList(); /* 144 */ this.fScanner = new RBBIRuleScanner(this); /* 145 */ this.fSetBuilder = new RBBISetBuilder(this); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ static final int align8(int i) /* */ { /* 158 */ return i + 7 & 0xFFFFFFF8; /* */ } /* */ /* */ void flattenData(OutputStream os) throws IOException { /* 162 */ DataOutputStream dos = new DataOutputStream(os); /* */ /* */ /* */ /* 166 */ String strippedRules = RBBIRuleScanner.stripRules(this.fRules); /* */ /* */ /* */ /* */ /* */ /* */ /* 173 */ int headerSize = 96; /* 174 */ int forwardTableSize = align8(this.fForwardTables.getTableSize()); /* 175 */ int reverseTableSize = align8(this.fReverseTables.getTableSize()); /* 176 */ int safeFwdTableSize = align8(this.fSafeFwdTables.getTableSize()); /* 177 */ int safeRevTableSize = align8(this.fSafeRevTables.getTableSize()); /* 178 */ int trieSize = align8(this.fSetBuilder.getTrieSize()); /* 179 */ int statusTableSize = align8(this.fRuleStatusVals.size() * 4); /* 180 */ int rulesSize = align8(strippedRules.length() * 2); /* 181 */ int totalSize = headerSize + forwardTableSize + reverseTableSize + safeFwdTableSize + safeRevTableSize + statusTableSize + trieSize + rulesSize; /* */ /* */ /* 184 */ int outputPos = 0; /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* 192 */ byte[] ICUDataHeader = new byte['€']; /* 193 */ dos.write(ICUDataHeader); /* */ /* */ /* */ /* */ /* 198 */ int[] header = new int[24]; /* 199 */ header[0] = 45472; /* 200 */ header[1] = 50397184; /* 201 */ header[2] = totalSize; /* 202 */ header[3] = this.fSetBuilder.getNumCharCategories(); /* 203 */ header[4] = headerSize; /* 204 */ header[5] = forwardTableSize; /* 205 */ header[6] = (header[4] + forwardTableSize); /* 206 */ header[7] = reverseTableSize; /* 207 */ header[8] = (header[6] + reverseTableSize); /* */ /* 209 */ header[9] = safeFwdTableSize; /* 210 */ header[10] = (header[8] + safeFwdTableSize); /* */ /* 212 */ header[11] = safeRevTableSize; /* 213 */ header[12] = (header[10] + safeRevTableSize); /* */ /* 215 */ header[13] = this.fSetBuilder.getTrieSize(); /* 216 */ header[16] = (header[12] + header[13]); /* */ /* 218 */ header[17] = statusTableSize; /* 219 */ header[14] = (header[16] + statusTableSize); /* */ /* 221 */ header[15] = (strippedRules.length() * 2); /* 222 */ for (int i = 0; i < header.length; i++) { /* 223 */ dos.writeInt(header[i]); /* 224 */ outputPos += 4; /* */ } /* */ /* */ /* */ /* 229 */ short[] tableData = this.fForwardTables.exportTable(); /* 230 */ Assert.assrt(outputPos == header[4]); /* 231 */ for (i = 0; i < tableData.length; i++) { /* 232 */ dos.writeShort(tableData[i]); /* 233 */ outputPos += 2; /* */ } /* */ /* 236 */ tableData = this.fReverseTables.exportTable(); /* 237 */ Assert.assrt(outputPos == header[6]); /* 238 */ for (i = 0; i < tableData.length; i++) { /* 239 */ dos.writeShort(tableData[i]); /* 240 */ outputPos += 2; /* */ } /* */ /* 243 */ Assert.assrt(outputPos == header[8]); /* 244 */ tableData = this.fSafeFwdTables.exportTable(); /* 245 */ for (i = 0; i < tableData.length; i++) { /* 246 */ dos.writeShort(tableData[i]); /* 247 */ outputPos += 2; /* */ } /* */ /* 250 */ Assert.assrt(outputPos == header[10]); /* 251 */ tableData = this.fSafeRevTables.exportTable(); /* 252 */ for (i = 0; i < tableData.length; i++) { /* 253 */ dos.writeShort(tableData[i]); /* 254 */ outputPos += 2; /* */ } /* */ /* */ /* 258 */ Assert.assrt(outputPos == header[12]); /* 259 */ this.fSetBuilder.serializeTrie(os); /* 260 */ outputPos += header[13]; /* 261 */ while (outputPos % 8 != 0) { /* 262 */ dos.write(0); /* 263 */ outputPos++; /* */ } /* */ /* */ /* 267 */ Assert.assrt(outputPos == header[16]); /* 268 */ for (Integer val : this.fRuleStatusVals) { /* 269 */ dos.writeInt(val.intValue()); /* 270 */ outputPos += 4; /* */ } /* */ /* 273 */ while (outputPos % 8 != 0) { /* 274 */ dos.write(0); /* 275 */ outputPos++; /* */ } /* */ /* */ /* */ /* 280 */ Assert.assrt(outputPos == header[14]); /* 281 */ dos.writeChars(strippedRules); /* 282 */ outputPos += strippedRules.length() * 2; /* 283 */ while (outputPos % 8 != 0) { /* 284 */ dos.write(0); /* 285 */ outputPos++; /* */ } /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ static void compileRules(String rules, OutputStream os) /* */ throws IOException /* */ { /* 301 */ RBBIRuleBuilder builder = new RBBIRuleBuilder(rules); /* 302 */ builder.fScanner.parse(); /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* 310 */ builder.fSetBuilder.build(); /* */ /* */ /* */ /* */ /* 315 */ builder.fForwardTables = new RBBITableBuilder(builder, 0); /* 316 */ builder.fReverseTables = new RBBITableBuilder(builder, 1); /* 317 */ builder.fSafeFwdTables = new RBBITableBuilder(builder, 2); /* 318 */ builder.fSafeRevTables = new RBBITableBuilder(builder, 3); /* 319 */ builder.fForwardTables.build(); /* 320 */ builder.fReverseTables.build(); /* 321 */ builder.fSafeFwdTables.build(); /* 322 */ builder.fSafeRevTables.build(); /* 323 */ if ((builder.fDebugEnv != null) && (builder.fDebugEnv.indexOf("states") >= 0)) /* */ { /* 325 */ builder.fForwardTables.printRuleStatusTable(); /* */ } /* */ /* */ /* */ /* */ /* */ /* 332 */ builder.flattenData(os); /* */ } /* */ } /* Location: C:\Users\Ethan\Desktop\FontZip\FontTool\sfnttool.jar!\com\ibm\icu\text\RBBIRuleBuilder.class * Java compiler version: 5 (49.0) * JD-Core Version: 0.7.1 */