/* */ package com.ibm.icu.text;
/* */
/* */ import com.ibm.icu.impl.ImplicitCEGenerator;
/* */ import com.ibm.icu.impl.PatternProps;
/* */ import com.ibm.icu.lang.UCharacter;
/* */ import com.ibm.icu.util.ULocale;
/* */ import com.ibm.icu.util.UResourceBundle;
/* */ import java.text.ParseException;
/* */ import java.util.ArrayList;
/* */ import java.util.Arrays;
/* */ import java.util.HashMap;
/* */ import java.util.Map;
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ final class CollationRuleParser
/* */ {
/* */ static final int TOKEN_RESET_ = -559038737;
/* */ int m_resultLength_;
/* */ TokenListHeader[] m_listHeader_;
/* */ Token m_variableTop_;
/* */ OptionSet m_options_;
/* */ StringBuilder m_source_;
/* */ Map<Token, Token> m_hashTable_;
/* */ private ParsedToken m_parsedToken_;
/* */ private String m_rules_;
/* */ private int m_current_;
/* */ private int m_optionEnd_;
/* */ private int m_extraCurrent_;
/* */ UnicodeSet m_copySet_;
/* */ UnicodeSet m_removeSet_;
/* */ private static final int TOKEN_UNSET_ = -1;
/* */ private static final int TOKEN_POLARITY_POSITIVE_ = 1;
/* */ private static final int TOKEN_TOP_MASK_ = 4;
/* */ private static final int TOKEN_VARIABLE_TOP_MASK_ = 8;
/* */ private static final int TOKEN_BEFORE_ = 3;
/* */ private static final int TOKEN_SUCCESS_MASK_ = 16;
/* */
/* */ CollationRuleParser(String rules)
/* */ throws ParseException
/* */ {
/* 48 */ rules = preprocessRules(rules);
/* */
/* */
/* */
/* 52 */ this.m_source_ = new StringBuilder(Normalizer.decompose(rules, false).trim());
/* 53 */ this.m_rules_ = this.m_source_.toString();
/* */
/* */
/* 56 */ this.m_current_ = 0;
/* */
/* */
/* 59 */ this.m_extraCurrent_ = this.m_source_.length();
/* */
/* 61 */ this.m_variableTop_ = null;
/* 62 */ this.m_parsedToken_ = new ParsedToken();
/* 63 */ this.m_hashTable_ = new HashMap();
/* 64 */ this.m_options_ = new OptionSet(RuleBasedCollator.UCA_);
/* 65 */ this.m_listHeader_ = new TokenListHeader['Ȁ'];
/* 66 */ this.m_resultLength_ = 0;
/* */ }
/* */
/* */
/* */ static class OptionSet
/* */ {
/* */ int m_variableTopValue_;
/* */
/* */ boolean m_isFrenchCollation_;
/* */
/* */ boolean m_isAlternateHandlingShifted_;
/* */
/* */ int m_caseFirst_;
/* */ boolean m_isCaseLevel_;
/* */ int m_decomposition_;
/* */ int m_strength_;
/* */ boolean m_isHiragana4_;
/* */ int[] m_scriptOrder_;
/* */
/* */ OptionSet(RuleBasedCollator collator)
/* */ {
/* 87 */ this.m_variableTopValue_ = collator.m_variableTopValue_;
/* 88 */ this.m_isFrenchCollation_ = collator.isFrenchCollation();
/* 89 */ this.m_isAlternateHandlingShifted_ = collator.isAlternateHandlingShifted();
/* */
/* 91 */ this.m_caseFirst_ = collator.m_caseFirst_;
/* 92 */ this.m_isCaseLevel_ = collator.isCaseLevel();
/* 93 */ this.m_decomposition_ = collator.getDecomposition();
/* 94 */ this.m_strength_ = collator.getStrength();
/* 95 */ this.m_isHiragana4_ = collator.m_isHiragana4_;
/* */
/* 97 */ if (collator.m_reorderCodes_ != null) {
/* 98 */ this.m_scriptOrder_ = new int[collator.m_reorderCodes_.length];
/* 99 */ for (int i = 0; i < this.m_scriptOrder_.length; i++) {
/* 100 */ this.m_scriptOrder_[i] = collator.m_reorderCodes_[i];
/* */ }
/* */ }
/* */ }
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */ static class TokenListHeader
/* */ {
/* */ CollationRuleParser.Token m_first_;
/* */
/* */
/* */
/* */
/* */ CollationRuleParser.Token m_last_;
/* */
/* */
/* */
/* */
/* */ CollationRuleParser.Token m_reset_;
/* */
/* */
/* */
/* */
/* */ boolean m_indirect_;
/* */
/* */
/* */
/* */
/* */ int m_baseCE_;
/* */
/* */
/* */
/* */ int m_baseContCE_;
/* */
/* */
/* */
/* */ int m_nextCE_;
/* */
/* */
/* */
/* */ int m_nextContCE_;
/* */
/* */
/* */
/* */ int m_previousCE_;
/* */
/* */
/* */
/* */ int m_previousContCE_;
/* */
/* */
/* */
/* 156 */ int[] m_pos_ = new int[16];
/* 157 */ int[] m_gapsLo_ = new int[9];
/* 158 */ int[] m_gapsHi_ = new int[9];
/* 159 */ int[] m_numStr_ = new int[9];
/* 160 */ CollationRuleParser.Token[] m_fStrToken_ = new CollationRuleParser.Token[3];
/* 161 */ CollationRuleParser.Token[] m_lStrToken_ = new CollationRuleParser.Token[3];
/* */ }
/* */
/* */
/* */ static class Token
/* */ {
/* */ int[] m_CE_;
/* */
/* */ int m_CELength_;
/* */
/* */ int[] m_expCE_;
/* */
/* */ int m_expCELength_;
/* */
/* */ int m_source_;
/* */
/* */ int m_expansion_;
/* */
/* */ int m_prefix_;
/* */ int m_strength_;
/* */ int m_toInsert_;
/* */ int m_polarity_;
/* */ CollationRuleParser.TokenListHeader m_listHeader_;
/* */ Token m_previous_;
/* */ Token m_next_;
/* */ StringBuilder m_rules_;
/* */ char m_flags_;
/* */
/* */ Token()
/* */ {
/* 191 */ this.m_CE_ = new int[''];
/* 192 */ this.m_expCE_ = new int[''];
/* */
/* 194 */ this.m_polarity_ = 1;
/* 195 */ this.m_next_ = null;
/* 196 */ this.m_previous_ = null;
/* 197 */ this.m_CELength_ = 0;
/* 198 */ this.m_expCELength_ = 0;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ public int hashCode()
/* */ {
/* 209 */ int result = 0;
/* 210 */ int len = (this.m_source_ & 0xFF000000) >>> 24;
/* 211 */ int inc = (len - 32) / 32 + 1;
/* */
/* 213 */ int start = this.m_source_ & 0xFFFFFF;
/* 214 */ int limit = start + len;
/* */
/* 216 */ while (start < limit) {
/* 217 */ result = result * 37 + this.m_rules_.charAt(start);
/* 218 */ start += inc;
/* */ }
/* 220 */ return result;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */ public boolean equals(Object target)
/* */ {
/* 230 */ if (target == this) {
/* 231 */ return true;
/* */ }
/* 233 */ if ((target instanceof Token)) {
/* 234 */ Token t = (Token)target;
/* 235 */ int sstart = this.m_source_ & 0xFFFFFF;
/* 236 */ int tstart = t.m_source_ & 0xFFFFFF;
/* 237 */ int slimit = (this.m_source_ & 0xFF000000) >> 24;
/* 238 */ int tlimit = (this.m_source_ & 0xFF000000) >> 24;
/* */
/* 240 */ int end = sstart + slimit - 1;
/* */
/* 242 */ if ((this.m_source_ == 0) || (t.m_source_ == 0)) {
/* 243 */ return false;
/* */ }
/* 245 */ if (slimit != tlimit) {
/* 246 */ return false;
/* */ }
/* 248 */ if (this.m_source_ == t.m_source_) {
/* 249 */ return true;
/* */ }
/* */
/* */
/* 253 */ while ((sstart < end) && (this.m_rules_.charAt(sstart) == t.m_rules_.charAt(tstart)))
/* */ {
/* 255 */ sstart++;
/* 256 */ tstart++;
/* */ }
/* 258 */ if (this.m_rules_.charAt(sstart) == t.m_rules_.charAt(tstart)) {
/* 259 */ return true;
/* */ }
/* */ }
/* 262 */ return false;
/* */ }
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ void setDefaultOptionsInCollator(RuleBasedCollator collator)
/* */ {
/* 302 */ collator.m_defaultStrength_ = this.m_options_.m_strength_;
/* 303 */ collator.m_defaultDecomposition_ = this.m_options_.m_decomposition_;
/* 304 */ collator.m_defaultIsFrenchCollation_ = this.m_options_.m_isFrenchCollation_;
/* 305 */ collator.m_defaultIsAlternateHandlingShifted_ = this.m_options_.m_isAlternateHandlingShifted_;
/* */
/* 307 */ collator.m_defaultIsCaseLevel_ = this.m_options_.m_isCaseLevel_;
/* 308 */ collator.m_defaultCaseFirst_ = this.m_options_.m_caseFirst_;
/* 309 */ collator.m_defaultIsHiragana4_ = this.m_options_.m_isHiragana4_;
/* 310 */ collator.m_defaultVariableTopValue_ = this.m_options_.m_variableTopValue_;
/* 311 */ if (this.m_options_.m_scriptOrder_ != null) {
/* 312 */ collator.m_defaultReorderCodes_ = ((int[])this.m_options_.m_scriptOrder_.clone());
/* */ } else {
/* 314 */ collator.m_defaultReorderCodes_ = null;
/* */ }
/* */ }
/* */
/* */
/* */ private static class ParsedToken
/* */ {
/* */ int m_strength_;
/* */ int m_charsOffset_;
/* */ int m_charsLen_;
/* */ int m_extensionOffset_;
/* */ int m_extensionLen_;
/* */ int m_prefixOffset_;
/* */ int m_prefixLen_;
/* */ char m_flags_;
/* */ char m_indirectIndex_;
/* */
/* */ ParsedToken()
/* */ {
/* 333 */ this.m_charsLen_ = 0;
/* 334 */ this.m_charsOffset_ = 0;
/* 335 */ this.m_extensionLen_ = 0;
/* 336 */ this.m_extensionOffset_ = 0;
/* 337 */ this.m_prefixLen_ = 0;
/* 338 */ this.m_prefixOffset_ = 0;
/* 339 */ this.m_flags_ = '\000';
/* 340 */ this.m_strength_ = -1;
/* */ }
/* */ }
/* */
/* */
/* */
/* */
/* */ private static class IndirectBoundaries
/* */ {
/* */ int m_startCE_;
/* */
/* */
/* */
/* */ int m_startContCE_;
/* */
/* */
/* */
/* */ int m_limitCE_;
/* */
/* */
/* */
/* */ int m_limitContCE_;
/* */
/* */
/* */
/* */ IndirectBoundaries(int[] startce, int[] limitce)
/* */ {
/* 367 */ this.m_startCE_ = startce[0];
/* 368 */ this.m_startContCE_ = startce[1];
/* 369 */ if (limitce != null) {
/* 370 */ this.m_limitCE_ = limitce[0];
/* 371 */ this.m_limitContCE_ = limitce[1];
/* */ }
/* */ else {
/* 374 */ this.m_limitCE_ = 0;
/* 375 */ this.m_limitContCE_ = 0;
/* */ }
/* */ }
/* */ }
/* */
/* */
/* */
/* */ private static class TokenOption
/* */ {
/* */ private String m_name_;
/* */
/* */
/* */ private int m_attribute_;
/* */
/* */
/* */ private String[] m_subOptions_;
/* */
/* */ private int[] m_subOptionAttributeValues_;
/* */
/* */
/* */ TokenOption(String name, int attribute, String[] suboptions, int[] suboptionattributevalue)
/* */ {
/* 397 */ this.m_name_ = name;
/* 398 */ this.m_attribute_ = attribute;
/* 399 */ this.m_subOptions_ = suboptions;
/* 400 */ this.m_subOptionAttributeValues_ = suboptionattributevalue;
/* */ }
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* 520 */ private static final IndirectBoundaries[] INDIRECT_BOUNDARIES_ = new IndirectBoundaries[15];
/* */
/* 522 */ static { INDIRECT_BOUNDARIES_[0] = new IndirectBoundaries(RuleBasedCollator.UCA_CONSTANTS_.LAST_NON_VARIABLE_, RuleBasedCollator.UCA_CONSTANTS_.FIRST_IMPLICIT_);
/* */
/* */
/* */
/* 526 */ INDIRECT_BOUNDARIES_[1] = new IndirectBoundaries(RuleBasedCollator.UCA_CONSTANTS_.FIRST_PRIMARY_IGNORABLE_, null);
/* */
/* */
/* */
/* 530 */ INDIRECT_BOUNDARIES_[2] = new IndirectBoundaries(RuleBasedCollator.UCA_CONSTANTS_.LAST_PRIMARY_IGNORABLE_, null);
/* */
/* */
/* */
/* */
/* 535 */ INDIRECT_BOUNDARIES_[3] = new IndirectBoundaries(RuleBasedCollator.UCA_CONSTANTS_.FIRST_SECONDARY_IGNORABLE_, null);
/* */
/* */
/* */
/* 539 */ INDIRECT_BOUNDARIES_[4] = new IndirectBoundaries(RuleBasedCollator.UCA_CONSTANTS_.LAST_SECONDARY_IGNORABLE_, null);
/* */
/* */
/* */
/* 543 */ INDIRECT_BOUNDARIES_[5] = new IndirectBoundaries(RuleBasedCollator.UCA_CONSTANTS_.FIRST_TERTIARY_IGNORABLE_, null);
/* */
/* */
/* */
/* 547 */ INDIRECT_BOUNDARIES_[6] = new IndirectBoundaries(RuleBasedCollator.UCA_CONSTANTS_.LAST_TERTIARY_IGNORABLE_, null);
/* */
/* */
/* */
/* 551 */ INDIRECT_BOUNDARIES_[7] = new IndirectBoundaries(RuleBasedCollator.UCA_CONSTANTS_.FIRST_VARIABLE_, null);
/* */
/* */
/* */
/* 555 */ INDIRECT_BOUNDARIES_[8] = new IndirectBoundaries(RuleBasedCollator.UCA_CONSTANTS_.LAST_VARIABLE_, null);
/* */
/* */
/* */
/* 559 */ INDIRECT_BOUNDARIES_[9] = new IndirectBoundaries(RuleBasedCollator.UCA_CONSTANTS_.FIRST_NON_VARIABLE_, null);
/* */
/* */
/* */
/* 563 */ INDIRECT_BOUNDARIES_[10] = new IndirectBoundaries(RuleBasedCollator.UCA_CONSTANTS_.LAST_NON_VARIABLE_, RuleBasedCollator.UCA_CONSTANTS_.FIRST_IMPLICIT_);
/* */
/* */
/* */
/* 567 */ INDIRECT_BOUNDARIES_[11] = new IndirectBoundaries(RuleBasedCollator.UCA_CONSTANTS_.FIRST_IMPLICIT_, null);
/* */
/* */
/* */
/* 571 */ INDIRECT_BOUNDARIES_[12] = new IndirectBoundaries(RuleBasedCollator.UCA_CONSTANTS_.LAST_IMPLICIT_, RuleBasedCollator.UCA_CONSTANTS_.FIRST_TRAILING_);
/* */
/* */
/* */
/* 575 */ INDIRECT_BOUNDARIES_[13] = new IndirectBoundaries(RuleBasedCollator.UCA_CONSTANTS_.FIRST_TRAILING_, null);
/* */
/* */
/* */
/* 579 */ INDIRECT_BOUNDARIES_[14] = new IndirectBoundaries(RuleBasedCollator.UCA_CONSTANTS_.LAST_TRAILING_, null);
/* */
/* */
/* 582 */ INDIRECT_BOUNDARIES_[14].m_limitCE_ = (RuleBasedCollator.UCA_CONSTANTS_.PRIMARY_SPECIAL_MIN_ << 24);
/* */
/* */
/* 585 */ RULES_OPTIONS_ = new TokenOption[20];
/* 586 */ String[] option = { "non-ignorable", "shifted" };
/* 587 */ int[] value = { 21, 20 };
/* */
/* 589 */ RULES_OPTIONS_[0] = new TokenOption("alternate", 1, option, value);
/* */
/* */
/* 592 */ option = new String[1];
/* 593 */ option[0] = "2";
/* 594 */ value = new int[1];
/* 595 */ value[0] = 17;
/* 596 */ RULES_OPTIONS_[1] = new TokenOption("backwards", 0, option, value);
/* */
/* */
/* 599 */ String[] offonoption = new String[2];
/* 600 */ offonoption[0] = "off";
/* 601 */ offonoption[1] = "on";
/* 602 */ int[] offonvalue = new int[2];
/* 603 */ offonvalue[0] = 16;
/* 604 */ offonvalue[1] = 17;
/* 605 */ RULES_OPTIONS_[2] = new TokenOption("caseLevel", 3, offonoption, offonvalue);
/* */
/* */
/* 608 */ option = new String[3];
/* 609 */ option[0] = "lower";
/* 610 */ option[1] = "upper";
/* 611 */ option[2] = "off";
/* 612 */ value = new int[3];
/* 613 */ value[0] = 24;
/* 614 */ value[1] = 25;
/* 615 */ value[2] = 16;
/* 616 */ RULES_OPTIONS_[3] = new TokenOption("caseFirst", 2, option, value);
/* */
/* */
/* 619 */ RULES_OPTIONS_[4] = new TokenOption("normalization", 4, offonoption, offonvalue);
/* */
/* */
/* 622 */ RULES_OPTIONS_[5] = new TokenOption("hiraganaQ", 6, offonoption, offonvalue);
/* */
/* */
/* 625 */ option = new String[5];
/* 626 */ option[0] = "1";
/* 627 */ option[1] = "2";
/* 628 */ option[2] = "3";
/* 629 */ option[3] = "4";
/* 630 */ option[4] = "I";
/* 631 */ value = new int[5];
/* 632 */ value[0] = 0;
/* 633 */ value[1] = 1;
/* 634 */ value[2] = 2;
/* 635 */ value[3] = 3;
/* 636 */ value[4] = 15;
/* 637 */ RULES_OPTIONS_[6] = new TokenOption("strength", 5, option, value);
/* */
/* */
/* 640 */ RULES_OPTIONS_[7] = new TokenOption("variable top", 7, null, null);
/* */
/* */
/* 643 */ RULES_OPTIONS_[8] = new TokenOption("rearrange", 7, null, null);
/* */
/* */
/* 646 */ option = new String[3];
/* 647 */ option[0] = "1";
/* 648 */ option[1] = "2";
/* 649 */ option[2] = "3";
/* 650 */ value = new int[3];
/* 651 */ value[0] = 0;
/* 652 */ value[1] = 1;
/* 653 */ value[2] = 2;
/* 654 */ RULES_OPTIONS_[9] = new TokenOption("before", 7, option, value);
/* */
/* */
/* 657 */ RULES_OPTIONS_[10] = new TokenOption("top", 7, null, null);
/* */
/* */
/* 660 */ String[] firstlastoption = new String[7];
/* 661 */ firstlastoption[0] = "primary";
/* 662 */ firstlastoption[1] = "secondary";
/* 663 */ firstlastoption[2] = "tertiary";
/* 664 */ firstlastoption[3] = "variable";
/* 665 */ firstlastoption[4] = "regular";
/* 666 */ firstlastoption[5] = "implicit";
/* 667 */ firstlastoption[6] = "trailing";
/* */
/* 669 */ int[] firstlastvalue = new int[7];
/* 670 */ Arrays.fill(firstlastvalue, 0);
/* */
/* 672 */ RULES_OPTIONS_[11] = new TokenOption("first", 7, firstlastoption, firstlastvalue);
/* */
/* */
/* 675 */ RULES_OPTIONS_[12] = new TokenOption("last", 7, firstlastoption, firstlastvalue);
/* */
/* */
/* 678 */ RULES_OPTIONS_[13] = new TokenOption("optimize", 7, null, null);
/* */
/* */
/* 681 */ RULES_OPTIONS_[14] = new TokenOption("suppressContractions", 7, null, null);
/* */
/* */
/* 684 */ RULES_OPTIONS_[15] = new TokenOption("undefined", 7, null, null);
/* */
/* */
/* 687 */ RULES_OPTIONS_[16] = new TokenOption("reorder", 7, null, null);
/* */
/* */
/* 690 */ RULES_OPTIONS_[17] = new TokenOption("charsetname", 7, null, null);
/* */
/* */
/* 693 */ RULES_OPTIONS_[18] = new TokenOption("charset", 7, null, null);
/* */
/* */
/* 696 */ RULES_OPTIONS_[19] = new TokenOption("import", 7, null, null);
/* */ }
/* */
/* */
/* */
/* */ private static final TokenOption[] RULES_OPTIONS_;
/* */
/* */
/* 704 */ private Token m_utilToken_ = new Token();
/* 705 */ private CollationElementIterator m_UCAColEIter_ = RuleBasedCollator.UCA_.getCollationElementIterator("");
/* */
/* 707 */ private int[] m_utilCEBuffer_ = new int[2];
/* */
/* */
/* */ private boolean m_isStarred_;
/* */
/* */
/* */ private int m_currentStarredCharIndex_;
/* */
/* */
/* */ private int m_lastStarredCharIndex_;
/* */
/* */
/* */ private int m_currentRangeCp_;
/* */
/* */
/* */ private int m_lastRangeCp_;
/* */
/* */
/* */ private boolean m_inRange_;
/* */
/* */ private int m_previousCp_;
/* */
/* */ private boolean m_savedIsStarred_;
/* */
/* */
/* */ int assembleTokenList()
/* */ throws ParseException
/* */ {
/* 735 */ Token lastToken = null;
/* 736 */ this.m_parsedToken_.m_strength_ = -1;
/* 737 */ int sourcelimit = this.m_source_.length();
/* 738 */ int expandNext = 0;
/* */
/* 740 */ this.m_isStarred_ = false;
/* */
/* 742 */ while ((this.m_current_ < sourcelimit) || (this.m_isStarred_)) {
/* 743 */ this.m_parsedToken_.m_prefixOffset_ = 0;
/* 744 */ if (parseNextToken(lastToken == null) >= 0)
/* */ {
/* */
/* */
/* 748 */ char specs = this.m_parsedToken_.m_flags_;
/* 749 */ boolean variableTop = (specs & 0x8) != 0;
/* 750 */ boolean top = (specs & 0x4) != 0;
/* 751 */ int lastStrength = -1;
/* 752 */ if (lastToken != null) {
/* 753 */ lastStrength = lastToken.m_strength_;
/* */ }
/* 755 */ this.m_utilToken_.m_source_ = (this.m_parsedToken_.m_charsLen_ << 24 | this.m_parsedToken_.m_charsOffset_);
/* */
/* 757 */ this.m_utilToken_.m_rules_ = this.m_source_;
/* */
/* */
/* 760 */ Token sourceToken = (Token)this.m_hashTable_.get(this.m_utilToken_);
/* 761 */ if (this.m_parsedToken_.m_strength_ != -559038737) {
/* 762 */ if (lastToken == null)
/* */ {
/* 764 */ throwParseException(this.m_source_.toString(), 0);
/* */ }
/* */
/* 767 */ if (sourceToken == null)
/* */ {
/* 769 */ sourceToken = new Token();
/* 770 */ sourceToken.m_rules_ = this.m_source_;
/* 771 */ sourceToken.m_source_ = (this.m_parsedToken_.m_charsLen_ << 24 | this.m_parsedToken_.m_charsOffset_);
/* */
/* 773 */ sourceToken.m_prefix_ = (this.m_parsedToken_.m_prefixLen_ << 24 | this.m_parsedToken_.m_prefixOffset_);
/* */
/* */
/* 776 */ sourceToken.m_polarity_ = 1;
/* 777 */ sourceToken.m_next_ = null;
/* 778 */ sourceToken.m_previous_ = null;
/* 779 */ sourceToken.m_CELength_ = 0;
/* 780 */ sourceToken.m_expCELength_ = 0;
/* 781 */ this.m_hashTable_.put(sourceToken, sourceToken);
/* */
/* */
/* */ }
/* 785 */ else if ((sourceToken.m_strength_ != -559038737) && (lastToken != sourceToken))
/* */ {
/* */
/* */
/* */
/* 790 */ if (sourceToken.m_next_ != null) {
/* 791 */ if (sourceToken.m_next_.m_strength_ > sourceToken.m_strength_)
/* */ {
/* 793 */ sourceToken.m_next_.m_strength_ = sourceToken.m_strength_;
/* */ }
/* */
/* 796 */ sourceToken.m_next_.m_previous_ = sourceToken.m_previous_;
/* */
/* */ }
/* */ else
/* */ {
/* */
/* 802 */ sourceToken.m_listHeader_.m_last_ = sourceToken.m_previous_;
/* */ }
/* */
/* */
/* */
/* 807 */ if (sourceToken.m_previous_ != null) {
/* 808 */ sourceToken.m_previous_.m_next_ = sourceToken.m_next_;
/* */
/* */ }
/* */ else
/* */ {
/* */
/* 814 */ sourceToken.m_listHeader_.m_first_ = sourceToken.m_next_;
/* */ }
/* */
/* 817 */ sourceToken.m_next_ = null;
/* 818 */ sourceToken.m_previous_ = null;
/* */ }
/* */
/* 821 */ sourceToken.m_strength_ = this.m_parsedToken_.m_strength_;
/* 822 */ sourceToken.m_listHeader_ = lastToken.m_listHeader_;
/* */
/* */
/* */
/* 826 */ if ((lastStrength == -559038737) || (sourceToken.m_listHeader_.m_first_ == null))
/* */ {
/* */
/* 829 */ if (sourceToken.m_listHeader_.m_first_ == null) {
/* 830 */ sourceToken.m_listHeader_.m_first_ = sourceToken;
/* 831 */ sourceToken.m_listHeader_.m_last_ = sourceToken;
/* */
/* */
/* */ }
/* 835 */ else if (sourceToken.m_listHeader_.m_first_.m_strength_ <= sourceToken.m_strength_)
/* */ {
/* 837 */ sourceToken.m_next_ = sourceToken.m_listHeader_.m_first_;
/* */
/* 839 */ sourceToken.m_next_.m_previous_ = sourceToken;
/* 840 */ sourceToken.m_listHeader_.m_first_ = sourceToken;
/* 841 */ sourceToken.m_previous_ = null;
/* */ }
/* */ else {
/* 844 */ lastToken = sourceToken.m_listHeader_.m_first_;
/* */
/* */
/* 847 */ while ((lastToken.m_next_ != null) && (lastToken.m_next_.m_strength_ > sourceToken.m_strength_)) {
/* 848 */ lastToken = lastToken.m_next_;
/* */ }
/* 850 */ if (lastToken.m_next_ != null) {
/* 851 */ lastToken.m_next_.m_previous_ = sourceToken;
/* */ }
/* */ else {
/* 854 */ sourceToken.m_listHeader_.m_last_ = sourceToken;
/* */ }
/* */
/* 857 */ sourceToken.m_previous_ = lastToken;
/* 858 */ sourceToken.m_next_ = lastToken.m_next_;
/* 859 */ lastToken.m_next_ = sourceToken;
/* */
/* */
/* */
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */ }
/* 870 */ else if (sourceToken != lastToken) {
/* 871 */ if (lastToken.m_polarity_ == sourceToken.m_polarity_)
/* */ {
/* */
/* 874 */ while ((lastToken.m_next_ != null) && (lastToken.m_next_.m_strength_ > sourceToken.m_strength_)) {
/* 875 */ lastToken = lastToken.m_next_;
/* */ }
/* 877 */ sourceToken.m_previous_ = lastToken;
/* 878 */ if (lastToken.m_next_ != null) {
/* 879 */ lastToken.m_next_.m_previous_ = sourceToken;
/* */ }
/* */ else {
/* 882 */ sourceToken.m_listHeader_.m_last_ = sourceToken;
/* */ }
/* 884 */ sourceToken.m_next_ = lastToken.m_next_;
/* 885 */ lastToken.m_next_ = sourceToken;
/* */
/* */ }
/* */ else
/* */ {
/* 890 */ while ((lastToken.m_previous_ != null) && (lastToken.m_previous_.m_strength_ > sourceToken.m_strength_)) {
/* 891 */ lastToken = lastToken.m_previous_;
/* */ }
/* 893 */ sourceToken.m_next_ = lastToken;
/* 894 */ if (lastToken.m_previous_ != null) {
/* 895 */ lastToken.m_previous_.m_next_ = sourceToken;
/* */ }
/* */ else {
/* 898 */ sourceToken.m_listHeader_.m_first_ = sourceToken;
/* */ }
/* */
/* 901 */ sourceToken.m_previous_ = lastToken.m_previous_;
/* 902 */ lastToken.m_previous_ = sourceToken;
/* */ }
/* */
/* */
/* */ }
/* 907 */ else if (lastStrength < sourceToken.m_strength_) {
/* 908 */ sourceToken.m_strength_ = lastStrength;
/* */ }
/* */
/* */
/* */
/* 913 */ if ((variableTop == true) && (this.m_variableTop_ == null)) {
/* 914 */ variableTop = false;
/* 915 */ this.m_variableTop_ = sourceToken;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* 922 */ sourceToken.m_expansion_ = (this.m_parsedToken_.m_extensionLen_ << 24 | this.m_parsedToken_.m_extensionOffset_);
/* */
/* 924 */ if (expandNext != 0) {
/* 925 */ if (sourceToken.m_strength_ == 0)
/* */ {
/* 927 */ expandNext = 0;
/* */ }
/* 929 */ else if (sourceToken.m_expansion_ == 0)
/* */ {
/* */
/* 932 */ sourceToken.m_expansion_ = expandNext;
/* */
/* */ }
/* */ else
/* */ {
/* 937 */ int start = expandNext & 0xFFFFFF;
/* 938 */ int size = expandNext >>> 24;
/* 939 */ if (size > 0) {
/* 940 */ this.m_source_.append(this.m_source_.substring(start, start + size));
/* */ }
/* */
/* 943 */ start = this.m_parsedToken_.m_extensionOffset_;
/* 944 */ this.m_source_.append(this.m_source_.substring(start, start + this.m_parsedToken_.m_extensionLen_));
/* */
/* 946 */ sourceToken.m_expansion_ = (size + this.m_parsedToken_.m_extensionLen_ << 24 | this.m_extraCurrent_);
/* */
/* */
/* 949 */ this.m_extraCurrent_ += size + this.m_parsedToken_.m_extensionLen_;
/* */ }
/* */ }
/* */
/* */
/* */
/* */
/* */
/* 957 */ if ((lastToken.m_flags_ & 0x3) != 0) {
/* 958 */ int beforeStrength = (lastToken.m_flags_ & 0x3) - '\001';
/* 959 */ if (beforeStrength != sourceToken.m_strength_) {
/* 960 */ throwParseException(this.m_source_.toString(), this.m_current_);
/* */ }
/* */ }
/* */ }
/* */ else
/* */ {
/* 966 */ if ((lastToken != null) && (lastStrength == -559038737))
/* */ {
/* */
/* */
/* 970 */ if ((this.m_resultLength_ > 0) && (this.m_listHeader_[(this.m_resultLength_ - 1)].m_first_ == null)) {
/* 971 */ this.m_resultLength_ -= 1;
/* */ }
/* */ }
/* 974 */ if (sourceToken == null)
/* */ {
/* */
/* 977 */ int searchCharsLen = this.m_parsedToken_.m_charsLen_;
/* 978 */ while ((searchCharsLen > 1) && (sourceToken == null)) {
/* 979 */ searchCharsLen--;
/* */
/* 981 */ this.m_utilToken_.m_source_ = (searchCharsLen << 24 | this.m_parsedToken_.m_charsOffset_);
/* */
/* 983 */ this.m_utilToken_.m_rules_ = this.m_source_;
/* 984 */ sourceToken = (Token)this.m_hashTable_.get(this.m_utilToken_);
/* */ }
/* 986 */ if (sourceToken != null) {
/* 987 */ expandNext = this.m_parsedToken_.m_charsLen_ - searchCharsLen << 24 | this.m_parsedToken_.m_charsOffset_ + searchCharsLen;
/* */ }
/* */ }
/* */
/* */
/* */
/* 993 */ if ((specs & 0x3) != 0) {
/* 994 */ if (!top)
/* */ {
/* 996 */ int strength = (specs & 0x3) - '\001';
/* 997 */ if ((sourceToken != null) && (sourceToken.m_strength_ != -559038737))
/* */ {
/* */
/* */
/* */
/* 1002 */ while ((sourceToken.m_strength_ > strength) && (sourceToken.m_previous_ != null)) {
/* 1003 */ sourceToken = sourceToken.m_previous_;
/* */ }
/* */
/* 1006 */ if (sourceToken.m_strength_ == strength) {
/* 1007 */ if (sourceToken.m_previous_ != null) {
/* 1008 */ sourceToken = sourceToken.m_previous_;
/* */ }
/* */ else {
/* 1011 */ sourceToken = sourceToken.m_listHeader_.m_reset_;
/* */ }
/* */ }
/* */ else
/* */ {
/* 1016 */ sourceToken = sourceToken.m_listHeader_.m_reset_;
/* */
/* 1018 */ sourceToken = getVirginBefore(sourceToken, strength);
/* */ }
/* */ }
/* */ else
/* */ {
/* 1023 */ sourceToken = getVirginBefore(sourceToken, strength);
/* */ }
/* */
/* */ }
/* */ else
/* */ {
/* 1029 */ top = false;
/* 1030 */ this.m_listHeader_[this.m_resultLength_] = new TokenListHeader();
/* 1031 */ this.m_listHeader_[this.m_resultLength_].m_previousCE_ = 0;
/* 1032 */ this.m_listHeader_[this.m_resultLength_].m_previousContCE_ = 0;
/* 1033 */ this.m_listHeader_[this.m_resultLength_].m_indirect_ = true;
/* */
/* */
/* */
/* 1037 */ int strength = (specs & 0x3) - '\001';
/* 1038 */ int baseCE = INDIRECT_BOUNDARIES_[this.m_parsedToken_.m_indirectIndex_].m_startCE_;
/* */
/* 1040 */ int baseContCE = INDIRECT_BOUNDARIES_[this.m_parsedToken_.m_indirectIndex_].m_startContCE_;
/* */
/* 1042 */ int[] ce = new int[2];
/* 1043 */ if ((baseCE >>> 24 >= RuleBasedCollator.UCA_CONSTANTS_.PRIMARY_IMPLICIT_MIN_) && (baseCE >>> 24 <= RuleBasedCollator.UCA_CONSTANTS_.PRIMARY_IMPLICIT_MAX_))
/* */ {
/* 1045 */ int primary = baseCE & 0xFFFF0000 | (baseContCE & 0xFFFF0000) >> 16;
/* 1046 */ int raw = RuleBasedCollator.impCEGen_.getRawFromImplicit(primary);
/* 1047 */ int primaryCE = RuleBasedCollator.impCEGen_.getImplicitFromRaw(raw - 1);
/* 1048 */ ce[0] = (primaryCE & 0xFFFF0000 | 0x505);
/* 1049 */ ce[1] = (primaryCE << 16 & 0xFFFF0000 | 0xC0);
/* */ } else {
/* 1051 */ CollationParsedRuleBuilder.InverseUCA invuca = CollationParsedRuleBuilder.INVERSE_UCA_;
/* */
/* 1053 */ invuca.getInversePrevCE(baseCE, baseContCE, strength, ce);
/* */ }
/* */
/* 1056 */ this.m_listHeader_[this.m_resultLength_].m_baseCE_ = ce[0];
/* 1057 */ this.m_listHeader_[this.m_resultLength_].m_baseContCE_ = ce[1];
/* 1058 */ this.m_listHeader_[this.m_resultLength_].m_nextCE_ = 0;
/* 1059 */ this.m_listHeader_[this.m_resultLength_].m_nextContCE_ = 0;
/* */
/* 1061 */ sourceToken = new Token();
/* 1062 */ expandNext = initAReset(0, sourceToken);
/* */ }
/* */ }
/* */
/* */
/* */
/* */
/* */
/* 1070 */ if (sourceToken == null) {
/* 1071 */ if (this.m_listHeader_[this.m_resultLength_] == null) {
/* 1072 */ this.m_listHeader_[this.m_resultLength_] = new TokenListHeader();
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* 1083 */ if (!top) {
/* 1084 */ CollationElementIterator coleiter = RuleBasedCollator.UCA_.getCollationElementIterator(this.m_source_.substring(this.m_parsedToken_.m_charsOffset_, this.m_parsedToken_.m_charsOffset_ + this.m_parsedToken_.m_charsLen_));
/* */
/* */
/* */
/* */
/* */
/* 1090 */ int CE = coleiter.next();
/* */
/* 1092 */ int expand = coleiter.getOffset() + this.m_parsedToken_.m_charsOffset_;
/* */
/* 1094 */ int SecondCE = coleiter.next();
/* */
/* 1096 */ this.m_listHeader_[this.m_resultLength_].m_baseCE_ = (CE & 0xFF3F);
/* */
/* 1098 */ if (RuleBasedCollator.isContinuation(SecondCE)) {
/* 1099 */ this.m_listHeader_[this.m_resultLength_].m_baseContCE_ = SecondCE;
/* */ }
/* */ else
/* */ {
/* 1103 */ this.m_listHeader_[this.m_resultLength_].m_baseContCE_ = 0;
/* */ }
/* 1105 */ this.m_listHeader_[this.m_resultLength_].m_nextCE_ = 0;
/* 1106 */ this.m_listHeader_[this.m_resultLength_].m_nextContCE_ = 0;
/* 1107 */ this.m_listHeader_[this.m_resultLength_].m_previousCE_ = 0;
/* 1108 */ this.m_listHeader_[this.m_resultLength_].m_previousContCE_ = 0;
/* 1109 */ this.m_listHeader_[this.m_resultLength_].m_indirect_ = false;
/* 1110 */ sourceToken = new Token();
/* 1111 */ expandNext = initAReset(expand, sourceToken);
/* */ }
/* */ else {
/* 1114 */ top = false;
/* 1115 */ this.m_listHeader_[this.m_resultLength_].m_previousCE_ = 0;
/* 1116 */ this.m_listHeader_[this.m_resultLength_].m_previousContCE_ = 0;
/* 1117 */ this.m_listHeader_[this.m_resultLength_].m_indirect_ = true;
/* 1118 */ IndirectBoundaries ib = INDIRECT_BOUNDARIES_[this.m_parsedToken_.m_indirectIndex_];
/* */
/* 1120 */ this.m_listHeader_[this.m_resultLength_].m_baseCE_ = ib.m_startCE_;
/* */
/* 1122 */ this.m_listHeader_[this.m_resultLength_].m_baseContCE_ = ib.m_startContCE_;
/* */
/* 1124 */ this.m_listHeader_[this.m_resultLength_].m_nextCE_ = ib.m_limitCE_;
/* */
/* 1126 */ this.m_listHeader_[this.m_resultLength_].m_nextContCE_ = ib.m_limitContCE_;
/* */
/* 1128 */ sourceToken = new Token();
/* 1129 */ expandNext = initAReset(0, sourceToken);
/* */ }
/* */ }
/* */ else {
/* 1133 */ top = false;
/* */ }
/* */ }
/* */
/* */
/* 1138 */ lastToken = sourceToken;
/* */ }
/* */ }
/* 1141 */ if ((this.m_resultLength_ > 0) && (this.m_listHeader_[(this.m_resultLength_ - 1)].m_first_ == null))
/* */ {
/* 1143 */ this.m_resultLength_ -= 1;
/* */ }
/* 1145 */ return this.m_resultLength_;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ private static final void throwParseException(String rules, int offset)
/* */ throws ParseException
/* */ {
/* 1158 */ String precontext = rules.substring(0, offset);
/* 1159 */ String postcontext = rules.substring(offset, rules.length());
/* 1160 */ StringBuilder error = new StringBuilder("Parse error occurred in rule at offset ");
/* */
/* 1162 */ error.append(offset);
/* 1163 */ error.append("\n after the prefix \"");
/* 1164 */ error.append(precontext);
/* 1165 */ error.append("\" before the suffix \"");
/* 1166 */ error.append(postcontext);
/* 1167 */ throw new ParseException(error.toString(), offset);
/* */ }
/* */
/* */ private final boolean doSetTop() {
/* 1171 */ this.m_parsedToken_.m_charsOffset_ = this.m_extraCurrent_;
/* 1172 */ this.m_source_.append(65534);
/* 1173 */ IndirectBoundaries ib = INDIRECT_BOUNDARIES_[this.m_parsedToken_.m_indirectIndex_];
/* */
/* 1175 */ this.m_source_.append((char)(ib.m_startCE_ >> 16));
/* 1176 */ this.m_source_.append((char)(ib.m_startCE_ & 0xFFFF));
/* 1177 */ this.m_extraCurrent_ += 3;
/* 1178 */ if (INDIRECT_BOUNDARIES_[this.m_parsedToken_.m_indirectIndex_].m_startContCE_ == 0)
/* */ {
/* 1180 */ this.m_parsedToken_.m_charsLen_ = 3;
/* */ }
/* */ else {
/* 1183 */ this.m_source_.append((char)(INDIRECT_BOUNDARIES_[this.m_parsedToken_.m_indirectIndex_].m_startContCE_ >> 16));
/* */
/* */
/* 1186 */ this.m_source_.append((char)(INDIRECT_BOUNDARIES_[this.m_parsedToken_.m_indirectIndex_].m_startContCE_ & 0xFFFF));
/* */
/* */
/* 1189 */ this.m_extraCurrent_ += 2;
/* 1190 */ this.m_parsedToken_.m_charsLen_ = 5;
/* */ }
/* 1192 */ return true;
/* */ }
/* */
/* */ private static boolean isCharNewLine(char c) {
/* 1196 */ switch (c) {
/* */ case '\n':
/* */ case '\f':
/* */ case '\r':
/* */ case '
':
/* */ case '
':
/* */ case '
':
/* 1203 */ return true;
/* */ }
/* 1205 */ return false;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ private int parseNextToken(boolean startofrules)
/* */ throws ParseException
/* */ {
/* 1233 */ if (this.m_inRange_)
/* */ {
/* 1235 */ return processNextCodePointInRange(); }
/* 1236 */ if (this.m_isStarred_)
/* */ {
/* 1238 */ return processNextTokenInTheStarredList();
/* */ }
/* */
/* */
/* 1242 */ int nextOffset = parseNextTokenInternal(startofrules);
/* */
/* */
/* 1245 */ if (this.m_inRange_)
/* */ {
/* */
/* 1248 */ if ((this.m_lastRangeCp_ > 0) && (this.m_lastRangeCp_ == this.m_previousCp_)) {
/* 1249 */ throw new ParseException("Chained range syntax", this.m_current_);
/* */ }
/* */
/* */
/* */
/* 1254 */ this.m_lastRangeCp_ = this.m_source_.codePointAt(this.m_parsedToken_.m_charsOffset_);
/* 1255 */ if (this.m_lastRangeCp_ <= this.m_previousCp_) {
/* 1256 */ throw new ParseException("Invalid range", this.m_current_);
/* */ }
/* */
/* */
/* 1260 */ this.m_currentRangeCp_ = (this.m_previousCp_ + 1);
/* */
/* */
/* */
/* 1264 */ this.m_currentStarredCharIndex_ = (this.m_parsedToken_.m_charsOffset_ + Character.charCount(this.m_lastRangeCp_));
/* */
/* 1266 */ this.m_lastStarredCharIndex_ = (this.m_parsedToken_.m_charsOffset_ + this.m_parsedToken_.m_charsLen_ - 1);
/* */
/* 1268 */ return processNextCodePointInRange(); }
/* 1269 */ if (this.m_isStarred_)
/* */ {
/* */
/* */
/* 1273 */ this.m_currentStarredCharIndex_ = this.m_parsedToken_.m_charsOffset_;
/* 1274 */ this.m_lastStarredCharIndex_ = (this.m_parsedToken_.m_charsOffset_ + this.m_parsedToken_.m_charsLen_ - 1);
/* */
/* 1276 */ return processNextTokenInTheStarredList();
/* */ }
/* 1278 */ return nextOffset;
/* */ }
/* */
/* */ private int processNextCodePointInRange() throws ParseException {
/* 1282 */ int nChars = Character.charCount(this.m_currentRangeCp_);
/* 1283 */ this.m_source_.appendCodePoint(this.m_currentRangeCp_);
/* */
/* 1285 */ this.m_parsedToken_.m_charsOffset_ = this.m_extraCurrent_;
/* 1286 */ this.m_parsedToken_.m_charsLen_ = nChars;
/* */
/* 1288 */ this.m_extraCurrent_ += nChars;
/* 1289 */ this.m_currentRangeCp_ += 1;
/* 1290 */ if (this.m_currentRangeCp_ > this.m_lastRangeCp_)
/* */ {
/* */
/* 1293 */ this.m_inRange_ = false;
/* */
/* */
/* */
/* 1297 */ if (this.m_currentStarredCharIndex_ <= this.m_lastStarredCharIndex_) {
/* 1298 */ this.m_isStarred_ = true;
/* */ } else {
/* 1300 */ this.m_isStarred_ = false;
/* */ }
/* */ } else {
/* 1303 */ this.m_previousCp_ = this.m_currentRangeCp_;
/* */ }
/* 1305 */ return this.m_current_;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ private int processNextTokenInTheStarredList()
/* */ throws ParseException
/* */ {
/* 1317 */ int cp = this.m_source_.codePointAt(this.m_currentStarredCharIndex_);
/* 1318 */ int nChars = Character.charCount(cp);
/* */
/* 1320 */ this.m_parsedToken_.m_charsLen_ = nChars;
/* 1321 */ this.m_parsedToken_.m_charsOffset_ = this.m_currentStarredCharIndex_;
/* 1322 */ this.m_currentStarredCharIndex_ += nChars;
/* */
/* */
/* */
/* 1326 */ if (this.m_currentStarredCharIndex_ > this.m_lastStarredCharIndex_) {
/* 1327 */ this.m_isStarred_ = false;
/* */ }
/* 1329 */ this.m_previousCp_ = cp;
/* 1330 */ return this.m_current_;
/* */ }
/* */
/* */ private int resetToTop(boolean top, boolean variableTop, int extensionOffset, int newExtensionLen, byte byteBefore)
/* */ throws ParseException
/* */ {
/* 1336 */ this.m_parsedToken_.m_indirectIndex_ = '\005';
/* 1337 */ top = doSetTop();
/* 1338 */ return doEndParseNextToken(-559038737, top, extensionOffset, newExtensionLen, variableTop, byteBefore);
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ private int parseNextTokenInternal(boolean startofrules)
/* */ throws ParseException
/* */ {
/* 1355 */ boolean variabletop = false;
/* 1356 */ boolean top = false;
/* 1357 */ boolean inchars = true;
/* 1358 */ boolean inquote = false;
/* 1359 */ boolean wasinquote = false;
/* 1360 */ byte before = 0;
/* 1361 */ boolean isescaped = false;
/* 1362 */ int newextensionlen = 0;
/* 1363 */ int extensionoffset = 0;
/* 1364 */ int newstrength = -1;
/* */
/* 1366 */ initializeParsedToken();
/* */
/* 1368 */ int limit = this.m_rules_.length();
/* 1369 */ while (this.m_current_ < limit) {
/* 1370 */ char ch = this.m_source_.charAt(this.m_current_);
/* 1371 */ if (inquote) {
/* 1372 */ if (ch == '\'') {
/* 1373 */ inquote = false;
/* */
/* */ }
/* 1376 */ else if ((this.m_parsedToken_.m_charsLen_ == 0) || (inchars)) {
/* 1377 */ if (this.m_parsedToken_.m_charsLen_ == 0) {
/* 1378 */ this.m_parsedToken_.m_charsOffset_ = this.m_extraCurrent_;
/* */ }
/* 1380 */ this.m_parsedToken_.m_charsLen_ += 1;
/* */ }
/* */ else {
/* 1383 */ if (newextensionlen == 0) {
/* 1384 */ extensionoffset = this.m_extraCurrent_;
/* */ }
/* 1386 */ newextensionlen++;
/* */ }
/* */
/* */ }
/* 1390 */ else if (isescaped) {
/* 1391 */ isescaped = false;
/* 1392 */ if (newstrength == -1) {
/* 1393 */ throwParseException(this.m_rules_, this.m_current_);
/* */ }
/* 1395 */ if ((ch != 0) && (this.m_current_ != limit)) {
/* 1396 */ if (inchars) {
/* 1397 */ if (this.m_parsedToken_.m_charsLen_ == 0) {
/* 1398 */ this.m_parsedToken_.m_charsOffset_ = this.m_current_;
/* */ }
/* 1400 */ this.m_parsedToken_.m_charsLen_ += 1;
/* */ }
/* */ else {
/* 1403 */ if (newextensionlen == 0) {
/* 1404 */ extensionoffset = this.m_current_;
/* */ }
/* 1406 */ newextensionlen++;
/* */ }
/* */
/* */ }
/* */ }
/* 1411 */ else if (!PatternProps.isWhiteSpace(ch))
/* */ {
/* 1413 */ switch (ch) {
/* */ case '=':
/* 1415 */ if (newstrength != -1) {
/* 1416 */ return doEndParseNextToken(newstrength, top, extensionoffset, newextensionlen, variabletop, before);
/* */ }
/* */
/* */
/* */
/* */
/* */
/* 1423 */ if (startofrules == true) {
/* 1424 */ return resetToTop(top, variabletop, extensionoffset, newextensionlen, before);
/* */ }
/* */
/* 1427 */ newstrength = 15;
/* 1428 */ if (this.m_source_.charAt(this.m_current_ + 1) != '*') break label1654;
/* 1429 */ this.m_current_ += 1;
/* 1430 */ this.m_isStarred_ = true; break;
/* */
/* */
/* */ case ',':
/* 1434 */ if (newstrength != -1) {
/* 1435 */ return doEndParseNextToken(newstrength, top, extensionoffset, newextensionlen, variabletop, before);
/* */ }
/* */
/* */
/* */
/* */
/* */
/* 1442 */ if (startofrules == true) {
/* 1443 */ return resetToTop(top, variabletop, extensionoffset, newextensionlen, before);
/* */ }
/* */
/* 1446 */ newstrength = 2;
/* 1447 */ break;
/* */ case ';':
/* 1449 */ if (newstrength != -1) {
/* 1450 */ return doEndParseNextToken(newstrength, top, extensionoffset, newextensionlen, variabletop, before);
/* */ }
/* */
/* */
/* */
/* */
/* */
/* 1457 */ if (startofrules == true) {
/* 1458 */ return resetToTop(top, variabletop, extensionoffset, newextensionlen, before);
/* */ }
/* */
/* 1461 */ newstrength = 1;
/* 1462 */ break;
/* */ case '<':
/* 1464 */ if (newstrength != -1) {
/* 1465 */ return doEndParseNextToken(newstrength, top, extensionoffset, newextensionlen, variabletop, before);
/* */ }
/* */
/* */
/* */
/* */
/* */
/* 1472 */ if (startofrules == true) {
/* 1473 */ return resetToTop(top, variabletop, extensionoffset, newextensionlen, before);
/* */ }
/* */
/* */
/* */
/* 1478 */ if (this.m_source_.charAt(this.m_current_ + 1) == '<') {
/* 1479 */ this.m_current_ += 1;
/* 1480 */ if (this.m_source_.charAt(this.m_current_ + 1) == '<') {
/* 1481 */ this.m_current_ += 1;
/* 1482 */ newstrength = 2;
/* */ }
/* */ else {
/* 1485 */ newstrength = 1;
/* */ }
/* */ }
/* */ else {
/* 1489 */ newstrength = 0;
/* */ }
/* 1491 */ if (this.m_source_.charAt(this.m_current_ + 1) != '*') break label1654;
/* 1492 */ this.m_current_ += 1;
/* 1493 */ this.m_isStarred_ = true; break;
/* */
/* */
/* */
/* */ case '&':
/* 1498 */ if (newstrength != -1) {
/* 1499 */ return doEndParseNextToken(newstrength, top, extensionoffset, newextensionlen, variabletop, before);
/* */ }
/* */
/* */
/* */
/* */
/* 1505 */ newstrength = -559038737;
/* 1506 */ break;
/* */
/* */ case '[':
/* 1509 */ this.m_optionEnd_ = this.m_rules_.indexOf(']', this.m_current_);
/* 1510 */ if (this.m_optionEnd_ == -1) break label1654;
/* 1511 */ byte result = readAndSetOption();
/* 1512 */ this.m_current_ = this.m_optionEnd_;
/* 1513 */ if ((result & 0x4) != 0) {
/* 1514 */ if (newstrength == -559038737) {
/* 1515 */ top = doSetTop();
/* 1516 */ if (before != 0)
/* */ {
/* */
/* */
/* 1520 */ this.m_source_.append('-');
/* 1521 */ this.m_source_.append((char)before);
/* 1522 */ this.m_extraCurrent_ += 2;
/* 1523 */ this.m_parsedToken_.m_charsLen_ += 2;
/* */ }
/* 1525 */ this.m_current_ += 1;
/* 1526 */ return doEndParseNextToken(newstrength, true, extensionoffset, newextensionlen, variabletop, before);
/* */ }
/* */
/* */
/* */
/* */
/* */
/* 1533 */ throwParseException(this.m_rules_, this.m_current_);
/* */
/* */ }
/* 1536 */ else if ((result & 0x8) != 0) {
/* 1537 */ if ((newstrength != -559038737) && (newstrength != -1))
/* */ {
/* 1539 */ variabletop = true;
/* 1540 */ this.m_parsedToken_.m_charsOffset_ = this.m_extraCurrent_;
/* */
/* 1542 */ this.m_source_.append(65535);
/* 1543 */ this.m_extraCurrent_ += 1;
/* 1544 */ this.m_current_ += 1;
/* 1545 */ this.m_parsedToken_.m_charsLen_ = 1;
/* 1546 */ return doEndParseNextToken(newstrength, top, extensionoffset, newextensionlen, variabletop, before);
/* */ }
/* */
/* */
/* */
/* */
/* */
/* 1553 */ throwParseException(this.m_rules_, this.m_current_);
/* */
/* */ }
/* 1556 */ else if ((result & 0x3) != 0) {
/* 1557 */ if (newstrength == -559038737) {
/* 1558 */ before = (byte)(result & 0x3);
/* */ }
/* */ else {
/* 1561 */ throwParseException(this.m_rules_, this.m_current_);
/* */ }
/* */ }
/* 1564 */ break;
/* */
/* */ case '/':
/* 1567 */ wasinquote = false;
/* */
/* 1569 */ inchars = false;
/* 1570 */ break;
/* */ case '\\':
/* 1572 */ isescaped = true;
/* 1573 */ break;
/* */
/* */ case '\'':
/* 1576 */ if (newstrength == -1)
/* */ {
/* 1578 */ throwParseException(this.m_rules_, this.m_current_);
/* */ }
/* 1580 */ inquote = true;
/* 1581 */ if (inchars) {
/* 1582 */ if (!wasinquote) {
/* 1583 */ this.m_parsedToken_.m_charsOffset_ = this.m_extraCurrent_;
/* */ }
/* 1585 */ if (this.m_parsedToken_.m_charsLen_ != 0)
/* */ {
/* */
/* */
/* 1589 */ this.m_source_.append(this.m_source_.substring(this.m_current_ - this.m_parsedToken_.m_charsLen_, this.m_current_));
/* */
/* */
/* 1592 */ this.m_extraCurrent_ += this.m_parsedToken_.m_charsLen_;
/* */ }
/* 1594 */ this.m_parsedToken_.m_charsLen_ += 1;
/* */ }
/* */ else {
/* 1597 */ if (!wasinquote) {
/* 1598 */ extensionoffset = this.m_extraCurrent_;
/* */ }
/* 1600 */ if (newextensionlen != 0) {
/* 1601 */ this.m_source_.append(this.m_source_.substring(this.m_current_ - newextensionlen, this.m_current_));
/* */
/* */
/* 1604 */ this.m_extraCurrent_ += newextensionlen;
/* */ }
/* 1606 */ newextensionlen++;
/* */ }
/* 1608 */ wasinquote = true;
/* 1609 */ this.m_current_ += 1;
/* 1610 */ ch = this.m_source_.charAt(this.m_current_);
/* 1611 */ if (ch != '\'') break label1654;
/* 1612 */ this.m_source_.append(ch);
/* 1613 */ this.m_extraCurrent_ += 1;
/* 1614 */ inquote = false; break;
/* */
/* */
/* */
/* */
/* */ case '@':
/* 1620 */ if (newstrength == -1)
/* 1621 */ this.m_options_.m_isFrenchCollation_ = true;
/* 1622 */ break;
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ case '|':
/* 1634 */ this.m_parsedToken_.m_prefixOffset_ = this.m_parsedToken_.m_charsOffset_;
/* */
/* 1636 */ this.m_parsedToken_.m_prefixLen_ = this.m_parsedToken_.m_charsLen_;
/* */
/* 1638 */ if (inchars) {
/* 1639 */ if (!wasinquote) {
/* 1640 */ this.m_parsedToken_.m_charsOffset_ = this.m_extraCurrent_;
/* */ }
/* 1642 */ if (this.m_parsedToken_.m_charsLen_ != 0) {
/* 1643 */ String prefix = this.m_source_.substring(this.m_current_ - this.m_parsedToken_.m_charsLen_, this.m_current_);
/* */
/* */
/* 1646 */ this.m_source_.append(prefix);
/* 1647 */ this.m_extraCurrent_ += this.m_parsedToken_.m_charsLen_;
/* */ }
/* 1649 */ this.m_parsedToken_.m_charsLen_ += 1;
/* */ }
/* 1651 */ wasinquote = true;
/* */ do {
/* 1653 */ this.m_current_ += 1;
/* 1654 */ ch = this.m_source_.charAt(this.m_current_);
/* */ }
/* 1656 */ while (PatternProps.isWhiteSpace(ch));
/* 1657 */ break;
/* */ case '-':
/* 1659 */ if (newstrength != -1) {
/* 1660 */ this.m_savedIsStarred_ = this.m_isStarred_;
/* 1661 */ return doEndParseNextToken(newstrength, top, extensionoffset, newextensionlen, variabletop, before);
/* */ }
/* */
/* */
/* */
/* */
/* */
/* 1668 */ this.m_isStarred_ = this.m_savedIsStarred_;
/* */
/* 1670 */ if (!this.m_isStarred_) {
/* 1671 */ throwParseException(this.m_rules_, this.m_current_);
/* */ }
/* */
/* 1674 */ newstrength = this.m_parsedToken_.m_strength_;
/* 1675 */ this.m_inRange_ = true;
/* 1676 */ break;
/* */ case '#':
/* */ do
/* */ {
/* 1680 */ this.m_current_ += 1;
/* 1681 */ ch = this.m_source_.charAt(this.m_current_);
/* 1682 */ } while (!isCharNewLine(ch));
/* 1683 */ break;
/* */ case '!':
/* */ break;
/* */ }
/* 1687 */ if (newstrength == -1) {
/* 1688 */ throwParseException(this.m_rules_, this.m_current_);
/* */ }
/* 1690 */ if ((isSpecialChar(ch)) && (!inquote)) {
/* 1691 */ throwParseException(this.m_rules_, this.m_current_);
/* */ }
/* 1693 */ if ((ch != 0) || (this.m_current_ + 1 != limit))
/* */ {
/* */
/* 1696 */ if (inchars) {
/* 1697 */ if (this.m_parsedToken_.m_charsLen_ == 0) {
/* 1698 */ this.m_parsedToken_.m_charsOffset_ = this.m_current_;
/* */ }
/* 1700 */ this.m_parsedToken_.m_charsLen_ += 1;
/* */ }
/* */ else {
/* 1703 */ if (newextensionlen == 0) {
/* 1704 */ extensionoffset = this.m_current_;
/* */ }
/* 1706 */ newextensionlen++;
/* */ }
/* */ }
/* */ }
/* */
/* */ label1654:
/* 1712 */ if ((wasinquote) &&
/* 1713 */ (ch != '\'')) {
/* 1714 */ this.m_source_.append(ch);
/* 1715 */ this.m_extraCurrent_ += 1;
/* */ }
/* */
/* 1718 */ this.m_current_ += 1;
/* */ }
/* 1720 */ return doEndParseNextToken(newstrength, top, extensionoffset, newextensionlen, variabletop, before);
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */ private void initializeParsedToken()
/* */ {
/* 1730 */ this.m_parsedToken_.m_charsLen_ = 0;
/* 1731 */ this.m_parsedToken_.m_charsOffset_ = 0;
/* 1732 */ this.m_parsedToken_.m_prefixOffset_ = 0;
/* 1733 */ this.m_parsedToken_.m_prefixLen_ = 0;
/* 1734 */ this.m_parsedToken_.m_indirectIndex_ = '\000';
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ private int doEndParseNextToken(int newstrength, boolean top, int extensionoffset, int newextensionlen, boolean variabletop, int before)
/* */ throws ParseException
/* */ {
/* 1748 */ if (newstrength == -1) {
/* 1749 */ return -1;
/* */ }
/* 1751 */ if ((this.m_parsedToken_.m_charsLen_ == 0) && (!top)) {
/* 1752 */ throwParseException(this.m_rules_, this.m_current_);
/* */ }
/* */
/* 1755 */ this.m_parsedToken_.m_strength_ = newstrength;
/* */
/* */
/* 1758 */ this.m_parsedToken_.m_extensionOffset_ = extensionoffset;
/* 1759 */ this.m_parsedToken_.m_extensionLen_ = newextensionlen;
/* 1760 */ this.m_parsedToken_.m_flags_ = ((char)((variabletop ? 8 : 0) | (top ? 4 : 0) | before));
/* */
/* */
/* 1763 */ return this.m_current_;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ private Token getVirginBefore(Token sourcetoken, int strength)
/* */ throws ParseException
/* */ {
/* 1777 */ if (sourcetoken != null) {
/* 1778 */ int offset = sourcetoken.m_source_ & 0xFFFFFF;
/* 1779 */ this.m_UCAColEIter_.setText(this.m_source_.substring(offset, offset + 1));
/* */ }
/* */ else {
/* 1782 */ this.m_UCAColEIter_.setText(this.m_source_.substring(this.m_parsedToken_.m_charsOffset_, this.m_parsedToken_.m_charsOffset_ + 1));
/* */ }
/* */
/* */
/* */
/* 1787 */ int basece = this.m_UCAColEIter_.next() & 0xFF3F;
/* 1788 */ int basecontce = this.m_UCAColEIter_.next();
/* 1789 */ if (basecontce == -1) {
/* 1790 */ basecontce = 0;
/* */ }
/* */
/* 1793 */ int ch = 0;
/* */
/* */
/* 1796 */ if ((basece >>> 24 >= RuleBasedCollator.UCA_CONSTANTS_.PRIMARY_IMPLICIT_MIN_) && (basece >>> 24 <= RuleBasedCollator.UCA_CONSTANTS_.PRIMARY_IMPLICIT_MAX_))
/* */ {
/* */
/* 1799 */ int primary = basece & 0xFFFF0000 | (basecontce & 0xFFFF0000) >> 16;
/* 1800 */ int raw = RuleBasedCollator.impCEGen_.getRawFromImplicit(primary);
/* 1801 */ ch = RuleBasedCollator.impCEGen_.getCodePointFromRaw(raw - 1);
/* 1802 */ int primaryCE = RuleBasedCollator.impCEGen_.getImplicitFromRaw(raw - 1);
/* 1803 */ this.m_utilCEBuffer_[0] = (primaryCE & 0xFFFF0000 | 0x505);
/* 1804 */ this.m_utilCEBuffer_[1] = (primaryCE << 16 & 0xFFFF0000 | 0xC0);
/* */
/* 1806 */ this.m_parsedToken_.m_charsOffset_ = this.m_extraCurrent_;
/* 1807 */ this.m_source_.append(65534);
/* 1808 */ this.m_source_.append((char)ch);
/* 1809 */ this.m_extraCurrent_ += 2;
/* 1810 */ this.m_parsedToken_.m_charsLen_ += 1;
/* */
/* 1812 */ this.m_utilToken_.m_source_ = (this.m_parsedToken_.m_charsLen_ << 24 | this.m_parsedToken_.m_charsOffset_);
/* */
/* 1814 */ this.m_utilToken_.m_rules_ = this.m_source_;
/* 1815 */ sourcetoken = (Token)this.m_hashTable_.get(this.m_utilToken_);
/* */
/* 1817 */ if (sourcetoken == null) {
/* 1818 */ this.m_listHeader_[this.m_resultLength_] = new TokenListHeader();
/* 1819 */ this.m_listHeader_[this.m_resultLength_].m_baseCE_ = (this.m_utilCEBuffer_[0] & 0xFF3F);
/* */
/* 1821 */ if (RuleBasedCollator.isContinuation(this.m_utilCEBuffer_[1])) {
/* 1822 */ this.m_listHeader_[this.m_resultLength_].m_baseContCE_ = this.m_utilCEBuffer_[1];
/* */ }
/* */ else
/* */ {
/* 1826 */ this.m_listHeader_[this.m_resultLength_].m_baseContCE_ = 0;
/* */ }
/* 1828 */ this.m_listHeader_[this.m_resultLength_].m_nextCE_ = 0;
/* 1829 */ this.m_listHeader_[this.m_resultLength_].m_nextContCE_ = 0;
/* 1830 */ this.m_listHeader_[this.m_resultLength_].m_previousCE_ = 0;
/* 1831 */ this.m_listHeader_[this.m_resultLength_].m_previousContCE_ = 0;
/* 1832 */ this.m_listHeader_[this.m_resultLength_].m_indirect_ = false;
/* */
/* 1834 */ sourcetoken = new Token();
/* 1835 */ initAReset(-1, sourcetoken);
/* */ }
/* */
/* */ }
/* */ else
/* */ {
/* 1841 */ CollationParsedRuleBuilder.INVERSE_UCA_.getInversePrevCE(basece, basecontce, strength, this.m_utilCEBuffer_);
/* */
/* */
/* */
/* */
/* */
/* */
/* 1848 */ if (CollationParsedRuleBuilder.INVERSE_UCA_.getCEStrengthDifference(basece, basecontce, this.m_utilCEBuffer_[0], this.m_utilCEBuffer_[1]) < strength)
/* */ {
/* */
/* */
/* 1852 */ if (strength == 1) {
/* 1853 */ this.m_utilCEBuffer_[0] = (basece - 512);
/* */ } else {
/* 1855 */ this.m_utilCEBuffer_[0] = (basece - 2);
/* */ }
/* 1857 */ if (RuleBasedCollator.isContinuation(basecontce)) {
/* 1858 */ if (strength == 1) {
/* 1859 */ this.m_utilCEBuffer_[1] = (basecontce - 512);
/* */ } else {
/* 1861 */ this.m_utilCEBuffer_[1] = (basecontce - 2);
/* */ }
/* */ }
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* 1914 */ this.m_parsedToken_.m_charsOffset_ -= 10;
/* 1915 */ this.m_parsedToken_.m_charsLen_ += 10;
/* 1916 */ this.m_listHeader_[this.m_resultLength_] = new TokenListHeader();
/* 1917 */ this.m_listHeader_[this.m_resultLength_].m_baseCE_ = (this.m_utilCEBuffer_[0] & 0xFF3F);
/* */
/* 1919 */ if (RuleBasedCollator.isContinuation(this.m_utilCEBuffer_[1])) {
/* 1920 */ this.m_listHeader_[this.m_resultLength_].m_baseContCE_ = this.m_utilCEBuffer_[1];
/* */ }
/* */ else
/* */ {
/* 1924 */ this.m_listHeader_[this.m_resultLength_].m_baseContCE_ = 0;
/* */ }
/* 1926 */ this.m_listHeader_[this.m_resultLength_].m_nextCE_ = 0;
/* 1927 */ this.m_listHeader_[this.m_resultLength_].m_nextContCE_ = 0;
/* 1928 */ this.m_listHeader_[this.m_resultLength_].m_previousCE_ = 0;
/* 1929 */ this.m_listHeader_[this.m_resultLength_].m_previousContCE_ = 0;
/* 1930 */ this.m_listHeader_[this.m_resultLength_].m_indirect_ = false;
/* 1931 */ sourcetoken = new Token();
/* 1932 */ initAReset(-1, sourcetoken);
/* */ }
/* */
/* 1935 */ return sourcetoken;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ private int initAReset(int expand, Token targetToken)
/* */ throws ParseException
/* */ {
/* 1952 */ if (this.m_resultLength_ == this.m_listHeader_.length - 1)
/* */ {
/* */
/* 1955 */ TokenListHeader[] temp = new TokenListHeader[this.m_resultLength_ << 1];
/* 1956 */ System.arraycopy(this.m_listHeader_, 0, temp, 0, this.m_resultLength_ + 1);
/* 1957 */ this.m_listHeader_ = temp;
/* */ }
/* */
/* 1960 */ targetToken.m_rules_ = this.m_source_;
/* 1961 */ targetToken.m_source_ = (this.m_parsedToken_.m_charsLen_ << 24 | this.m_parsedToken_.m_charsOffset_);
/* */
/* 1963 */ targetToken.m_expansion_ = (this.m_parsedToken_.m_extensionLen_ << 24 | this.m_parsedToken_.m_extensionOffset_);
/* */
/* */
/* 1966 */ targetToken.m_flags_ = this.m_parsedToken_.m_flags_;
/* */
/* 1968 */ if (this.m_parsedToken_.m_prefixOffset_ != 0) {
/* 1969 */ throwParseException(this.m_rules_, this.m_parsedToken_.m_charsOffset_ - 1);
/* */ }
/* */
/* 1972 */ targetToken.m_prefix_ = 0;
/* */
/* 1974 */ targetToken.m_polarity_ = 1;
/* 1975 */ targetToken.m_strength_ = -559038737;
/* 1976 */ targetToken.m_next_ = null;
/* 1977 */ targetToken.m_previous_ = null;
/* 1978 */ targetToken.m_CELength_ = 0;
/* 1979 */ targetToken.m_expCELength_ = 0;
/* 1980 */ targetToken.m_listHeader_ = this.m_listHeader_[this.m_resultLength_];
/* 1981 */ this.m_listHeader_[this.m_resultLength_].m_first_ = null;
/* 1982 */ this.m_listHeader_[this.m_resultLength_].m_last_ = null;
/* 1983 */ this.m_listHeader_[this.m_resultLength_].m_first_ = null;
/* 1984 */ this.m_listHeader_[this.m_resultLength_].m_last_ = null;
/* 1985 */ this.m_listHeader_[this.m_resultLength_].m_reset_ = targetToken;
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* 1996 */ int result = 0;
/* 1997 */ if (expand > 0)
/* */ {
/* 1999 */ if (this.m_parsedToken_.m_charsLen_ > 1) {
/* 2000 */ targetToken.m_source_ = (expand - this.m_parsedToken_.m_charsOffset_ << 24 | this.m_parsedToken_.m_charsOffset_);
/* */
/* */
/* */
/* 2004 */ result = this.m_parsedToken_.m_charsLen_ + this.m_parsedToken_.m_charsOffset_ - expand << 24 | expand;
/* */ }
/* */ }
/* */
/* */
/* */
/* 2010 */ this.m_resultLength_ += 1;
/* 2011 */ this.m_hashTable_.put(targetToken, targetToken);
/* 2012 */ return result;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */ private static final boolean isSpecialChar(char ch)
/* */ {
/* 2022 */ return ((ch <= '/') && (ch >= ' ')) || ((ch <= '?') && (ch >= ':')) || ((ch <= '`') && (ch >= '[')) || ((ch <= '~') && (ch >= '}')) || (ch == '{');
/* */ }
/* */
/* */
/* */
/* */ private UnicodeSet readAndSetUnicodeSet(String source, int start)
/* */ throws ParseException
/* */ {
/* 2030 */ while (source.charAt(start) != '[') {
/* 2031 */ start++;
/* */ }
/* */
/* */
/* 2035 */ int noOpenBraces = 1;
/* 2036 */ int current = 1;
/* 2037 */ while ((start + current < source.length()) && (noOpenBraces != 0)) {
/* 2038 */ if (source.charAt(start + current) == '[') {
/* 2039 */ noOpenBraces++;
/* 2040 */ } else if (source.charAt(start + current) == ']') {
/* 2041 */ noOpenBraces--;
/* */ }
/* 2043 */ current++;
/* */ }
/* */
/* */
/* 2047 */ if ((noOpenBraces != 0) || (source.indexOf("]", start + current) == -1)) {
/* 2048 */ throwParseException(this.m_rules_, start);
/* */ }
/* 2050 */ return new UnicodeSet(source.substring(start, start + current));
/* */ }
/* */
/* */
/* */
/* */
/* 2056 */ private int m_optionarg_ = 0;
/* */
/* */ private int readOption(String rules, int start, int optionend)
/* */ {
/* 2060 */ this.m_optionarg_ = 0;
/* 2061 */ int i = 0;
/* 2062 */ while (i < RULES_OPTIONS_.length) {
/* 2063 */ String option = RULES_OPTIONS_[i].m_name_;
/* 2064 */ int optionlength = option.length();
/* 2065 */ if ((rules.length() > start + optionlength) && (option.equalsIgnoreCase(rules.substring(start, start + optionlength))))
/* */ {
/* */
/* 2068 */ if (optionend - start <= optionlength) break;
/* 2069 */ this.m_optionarg_ = (start + optionlength);
/* */
/* 2071 */ while ((this.m_optionarg_ < optionend) && (PatternProps.isWhiteSpace(rules.charAt(this.m_optionarg_))))
/* */ {
/* 2073 */ this.m_optionarg_ += 1;
/* */ }
/* */ }
/* */
/* */
/* 2078 */ i++;
/* */ }
/* 2080 */ if (i == RULES_OPTIONS_.length) {
/* 2081 */ i = -1;
/* */ }
/* 2083 */ return i;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */ private byte readAndSetOption()
/* */ throws ParseException
/* */ {
/* 2093 */ int start = this.m_current_ + 1;
/* 2094 */ int i = readOption(this.m_rules_, start, this.m_optionEnd_);
/* */
/* 2096 */ int optionarg = this.m_optionarg_;
/* */
/* 2098 */ if (i < 0) {
/* 2099 */ throwParseException(this.m_rules_, start);
/* */ }
/* */
/* 2102 */ if (i < 7) {
/* 2103 */ if (optionarg != 0) {
/* 2104 */ for (int j = 0; j < RULES_OPTIONS_[i].m_subOptions_.length;
/* 2105 */ j++) {
/* 2106 */ String subname = RULES_OPTIONS_[i].m_subOptions_[j];
/* 2107 */ int size = optionarg + subname.length();
/* 2108 */ if ((this.m_rules_.length() > size) && (subname.equalsIgnoreCase(this.m_rules_.substring(optionarg, size))))
/* */ {
/* */
/* 2111 */ setOptions(this.m_options_, RULES_OPTIONS_[i].m_attribute_, RULES_OPTIONS_[i].m_subOptionAttributeValues_[j]);
/* */
/* 2113 */ return 16;
/* */ }
/* */ }
/* */ }
/* 2117 */ throwParseException(this.m_rules_, optionarg);
/* */ } else {
/* 2119 */ if (i == 7) {
/* 2120 */ return 24;
/* */ }
/* 2122 */ if (i == 8) {
/* 2123 */ return 16;
/* */ }
/* 2125 */ if (i == 9) {
/* 2126 */ if (optionarg != 0) {
/* 2127 */ for (int j = 0; j < RULES_OPTIONS_[i].m_subOptions_.length;
/* 2128 */ j++) {
/* 2129 */ String subname = RULES_OPTIONS_[i].m_subOptions_[j];
/* 2130 */ int size = optionarg + subname.length();
/* 2131 */ if ((this.m_rules_.length() > size) && (subname.equalsIgnoreCase(this.m_rules_.substring(optionarg, optionarg + subname.length()))))
/* */ {
/* */
/* */
/* 2135 */ return (byte)(0x10 | RULES_OPTIONS_[i].m_subOptionAttributeValues_[j] + 1);
/* */ }
/* */ }
/* */ }
/* */
/* */
/* 2141 */ throwParseException(this.m_rules_, optionarg);
/* */ } else {
/* 2143 */ if (i == 10)
/* */ {
/* */
/* 2146 */ this.m_parsedToken_.m_indirectIndex_ = '\000';
/* 2147 */ return 20;
/* */ }
/* 2149 */ if (i < 13) {
/* 2150 */ for (int j = 0; j < RULES_OPTIONS_[i].m_subOptions_.length; j++) {
/* 2151 */ String subname = RULES_OPTIONS_[i].m_subOptions_[j];
/* 2152 */ int size = optionarg + subname.length();
/* 2153 */ if ((this.m_rules_.length() > size) && (subname.equalsIgnoreCase(this.m_rules_.substring(optionarg, size))))
/* */ {
/* */
/* 2156 */ this.m_parsedToken_.m_indirectIndex_ = ((char)(i - 10 + (j << 1)));
/* 2157 */ return 20;
/* */ }
/* */ }
/* 2160 */ throwParseException(this.m_rules_, optionarg);
/* */ } else {
/* 2162 */ if ((i == 13) || (i == 14))
/* */ {
/* 2164 */ int noOpenBraces = 1;
/* 2165 */ this.m_current_ += 1;
/* 2166 */ while ((this.m_current_ < this.m_source_.length()) && (noOpenBraces != 0)) {
/* 2167 */ if (this.m_source_.charAt(this.m_current_) == '[') {
/* 2168 */ noOpenBraces++;
/* 2169 */ } else if (this.m_source_.charAt(this.m_current_) == ']') {
/* 2170 */ noOpenBraces--;
/* */ }
/* 2172 */ this.m_current_ += 1;
/* */ }
/* 2174 */ this.m_optionEnd_ = (this.m_current_ - 1);
/* 2175 */ return 16;
/* */ }
/* 2177 */ if (i == 16) {
/* 2178 */ this.m_current_ = this.m_optionarg_;
/* 2179 */ parseScriptReorder();
/* 2180 */ return 16;
/* */ }
/* */
/* 2183 */ throwParseException(this.m_rules_, optionarg);
/* */ } } }
/* 2185 */ return 16;
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */
/* */
/* */ private void setOptions(OptionSet optionset, int attribute, int value)
/* */ {
/* 2196 */ switch (attribute) {
/* */ case 6:
/* 2198 */ optionset.m_isHiragana4_ = (value == 17);
/* */
/* 2200 */ break;
/* */ case 0:
/* 2202 */ optionset.m_isFrenchCollation_ = (value == 17);
/* */
/* 2204 */ break;
/* */ case 1:
/* 2206 */ optionset.m_isAlternateHandlingShifted_ = (value == 20);
/* */
/* */
/* 2209 */ break;
/* */ case 2:
/* 2211 */ optionset.m_caseFirst_ = value;
/* 2212 */ break;
/* */ case 3:
/* 2214 */ optionset.m_isCaseLevel_ = (value == 17);
/* */
/* 2216 */ break;
/* */ case 4:
/* 2218 */ if (value == 17) {
/* 2219 */ value = 17;
/* */ }
/* 2221 */ optionset.m_decomposition_ = value;
/* 2222 */ break;
/* */ case 5:
/* 2224 */ optionset.m_strength_ = value;
/* 2225 */ break;
/* */ }
/* */
/* */ }
/* */
/* */ UnicodeSet getTailoredSet()
/* */ throws ParseException
/* */ {
/* 2233 */ boolean startOfRules = true;
/* 2234 */ UnicodeSet tailored = new UnicodeSet();
/* */
/* 2236 */ CanonicalIterator it = new CanonicalIterator("");
/* */
/* 2238 */ this.m_parsedToken_.m_strength_ = -1;
/* 2239 */ int sourcelimit = this.m_source_.length();
/* */
/* */
/* 2242 */ while (this.m_current_ < sourcelimit) {
/* 2243 */ this.m_parsedToken_.m_prefixOffset_ = 0;
/* 2244 */ if (parseNextToken(startOfRules) >= 0)
/* */ {
/* */
/* */
/* 2248 */ startOfRules = false;
/* */
/* */
/* 2251 */ if (this.m_parsedToken_.m_strength_ != -559038737) {
/* 2252 */ it.setSource(this.m_source_.substring(this.m_parsedToken_.m_charsOffset_, this.m_parsedToken_.m_charsOffset_ + this.m_parsedToken_.m_charsLen_));
/* */
/* */
/* 2255 */ String pattern = it.next();
/* 2256 */ while (pattern != null) {
/* 2257 */ if (Normalizer.quickCheck(pattern, Normalizer.FCD, 0) != Normalizer.NO) {
/* 2258 */ tailored.add(pattern);
/* */ }
/* 2260 */ pattern = it.next();
/* */ }
/* */ }
/* */ } }
/* 2264 */ return tailored;
/* */ }
/* */
/* */ private final String preprocessRules(String rules) throws ParseException {
/* 2268 */ int optionNumber = -1;
/* 2269 */ int setStart = 0;
/* 2270 */ int i = 0;
/* 2271 */ while (i < rules.length()) {
/* 2272 */ if (rules.charAt(i) == '[') {
/* 2273 */ optionNumber = readOption(rules, i + 1, rules.length());
/* 2274 */ setStart = this.m_optionarg_;
/* 2275 */ if (optionNumber == 13) {
/* 2276 */ UnicodeSet newSet = readAndSetUnicodeSet(rules, setStart);
/* 2277 */ if (this.m_copySet_ == null) {
/* 2278 */ this.m_copySet_ = newSet;
/* */ } else {
/* 2280 */ this.m_copySet_.addAll(newSet);
/* */ }
/* 2282 */ } else if (optionNumber == 14) {
/* 2283 */ UnicodeSet newSet = readAndSetUnicodeSet(rules, setStart);
/* 2284 */ if (this.m_removeSet_ == null) {
/* 2285 */ this.m_removeSet_ = newSet;
/* */ } else {
/* 2287 */ this.m_removeSet_.addAll(newSet);
/* */ }
/* 2289 */ } else if (optionNumber == 19) {
/* 2290 */ int optionEndOffset = rules.indexOf(']', i) + 1;
/* 2291 */ ULocale locale = ULocale.forLanguageTag(rules.substring(setStart, optionEndOffset - 1));
/* 2292 */ UResourceBundle bundle = UResourceBundle.getBundleInstance("com/ibm/icu/impl/data/icudt48b/coll", locale.getBaseName());
/* */
/* */
/* 2295 */ String type = locale.getKeywordValue("collation");
/* 2296 */ if (type == null) {
/* 2297 */ type = "standard";
/* */ }
/* */
/* 2300 */ String importRules = bundle.get("collations").get(type).get("Sequence").getString();
/* */
/* */
/* */
/* */
/* 2305 */ rules = rules.substring(0, i) + importRules + rules.substring(optionEndOffset);
/* */ }
/* */ }
/* 2308 */ i++;
/* */ }
/* 2310 */ return rules;
/* */ }
/* */
/* */
/* */
/* */
/* 2316 */ static final String[] ReorderingTokensArray = { "SPACE", "PUNCT", "SYMBOL", "CURRENCY", "DIGIT" };
/* */
/* */
/* */
/* */
/* */
/* */
/* */ int findReorderingEntry(String name)
/* */ {
/* 2325 */ for (int tokenIndex = 0; tokenIndex < ReorderingTokensArray.length; tokenIndex++) {
/* 2326 */ if (name.equalsIgnoreCase(ReorderingTokensArray[tokenIndex])) {
/* 2327 */ return tokenIndex + 4096;
/* */ }
/* */ }
/* 2330 */ return -1;
/* */ }
/* */
/* */ private void parseScriptReorder() throws ParseException {
/* 2334 */ ArrayList<Integer> tempOrder = new ArrayList();
/* 2335 */ int end = this.m_rules_.indexOf(']', this.m_current_);
/* 2336 */ if (end == -1) {
/* 2337 */ return;
/* */ }
/* 2339 */ String tokenString = this.m_rules_.substring(this.m_current_, end);
/* 2340 */ String[] tokens = tokenString.split("\\s+", 0);
/* */
/* 2342 */ for (int tokenIndex = 0; tokenIndex < tokens.length; tokenIndex++) {
/* 2343 */ String token = tokens[tokenIndex];
/* 2344 */ int reorderCode = findReorderingEntry(token);
/* 2345 */ if (reorderCode == -1) {
/* 2346 */ reorderCode = UCharacter.getPropertyValueEnum(4106, token);
/* 2347 */ if (reorderCode < 0) {
/* 2348 */ throw new ParseException(this.m_rules_, tokenIndex);
/* */ }
/* */ }
/* 2351 */ tempOrder.add(Integer.valueOf(reorderCode));
/* */ }
/* 2353 */ this.m_options_.m_scriptOrder_ = new int[tempOrder.size()];
/* 2354 */ for (int i = 0; i < tempOrder.size(); i++) {
/* 2355 */ this.m_options_.m_scriptOrder_[i] = ((Integer)tempOrder.get(i)).intValue();
/* */ }
/* */ }
/* */ }
/* Location: C:\Users\Ethan\Desktop\FontZip\FontTool\sfnttool.jar!\com\ibm\icu\text\CollationRuleParser.class
* Java compiler version: 5 (49.0)
* JD-Core Version: 0.7.1
*/