Lines Matching refs:element
45 static uint32_t uprv_uca_processContraction(CntTable *contractions, UCAElements *element, uint32_t existingCE, UErrorCode *status);
50 UCAElements *element = (UCAElements *)e.pointer;
54 uprv_memcpy(buf, element->cPoints, element->cSize*sizeof(UChar));
55 buf[element->cSize] = 0;
56 //key.pointer = element->cPoints;
57 //element->cPoints[element->cSize] = 0;
427 * collation element. The size required for maxexpansion and maxsize is
429 * @param endexpansion the last expansion collation element to be added
441 /* we'll always make the first element 0, for easier manipulation */
488 /* using binary search to determine if last expansion element is
569 * collation element. The size required for maxexpansion and maxsize is
572 * @param endexpansion the last expansion collation element to be added
610 /* we'll always make the first element 0, for easier manipulation */
807 UCAElements *element = NULL;
810 element = (UCAElements *)e->value.pointer;
814 unorm_normalize(element->cPoints, element->cSize, UNORM_NFC, 0,
826 UCAElements *element, UErrorCode *status)
835 UChar *oldCP = element->cPoints;
836 uint32_t oldCPSize = element->cSize;
844 for(j=0; j<element->cSize; j++) {
845 fprintf(stdout, "CP: %04X ", element->cPoints[j]);
848 for(j=0; j<element->prefixSize; j++) {
849 fprintf(stdout, "%04X ", element->prefix[j]);
851 fprintf(stdout, "%08X ", element->mapCE);
854 for (j = 1; j<element->prefixSize; j++) { /* First add NFD prefix chars to unsafe CP hash table */
857 if(!(U16_IS_TRAIL(element->prefix[j]))) {
858 unsafeCPSet(t->unsafeCP, element->prefix[j]);
864 for(j = 0; j < /*nfcSize*/element->prefixSize/2; j++) { // prefixes are going to be looked up backwards
866 tempPrefix = *(/*nfcBuffer*/element->prefix+element->prefixSize-j-1);
867 *(/*nfcBuffer*/element->prefix+element->prefixSize-j-1) = element->prefix[j];
868 element->prefix[j] = tempPrefix;
873 for(j=0; j<element->prefixSize; j++) {
874 fprintf(stdout, "%04X ", element->prefix[j]);
876 fprintf(stdout, "%08X\n", element->mapCE);
880 if(!(U16_IS_TRAIL(element->cPoints[0]))) {
881 unsafeCPSet(t->unsafeCP, element->cPoints[0]);
885 //if(element->cSize == 1) {
886 // if(!(U16_IS_TRAIL(element->cPoints[0]))) {
887 // ContrEndCPSet(t->contrEndCP, element->cPoints[0]);
891 element->cPoints = element->prefix;
892 element->cSize = element->prefixSize;
897 if(!(U16_IS_TRAIL(element->cPoints[element->cSize -1]))) {
898 ContrEndCPSet(t->contrEndCP, element->cPoints[element->cSize -1]);
902 U16_NEXT(element->cPoints, cpsize, element->cSize, cp);
906 if(UCOL_ISJAMO(element->prefix[0])) {
916 uint32_t newCE = uprv_uca_processContraction(contractions, element, UCOL_NOT_FOUND, status);
917 uprv_cnttab_addContraction(contractions, firstContractionOffset, *element->prefix, newCE, status);
923 int32_t position = uprv_cnttab_findCP(contractions, CE, *element->prefix, status);
926 uint32_t newCE = uprv_uca_processContraction(contractions, element, eCE, status);
927 uprv_cnttab_setContraction(contractions, CE, position, *(element->prefix), newCE, status);
929 uprv_uca_processContraction(contractions, element, UCOL_NOT_FOUND, status);
930 uprv_cnttab_insertContraction(contractions, CE, *(element->prefix), element->mapCE, status);
934 element->cPoints = oldCP;
935 element->cSize = oldCPSize;
946 UCAElements *element, UErrorCode *status)
955 U16_NEXT(element->cPoints, cpsize, element->cSize, cp);
957 if(cpsize<element->cSize) { // This is a real contraction, if there are other characters after the first
959 for (j=1; j<element->cSize; j++) { /* First add contraction chars to unsafe CP hash table */
962 if(!(U16_IS_TRAIL(element->cPoints[j]))) {
963 unsafeCPSet(t->unsafeCP, element->cPoints[j]);
969 if(!(U16_IS_TRAIL(element->cPoints[element->cSize -1]))) {
970 ContrEndCPSet(t->contrEndCP, element->cPoints[element->cSize -1]);
975 if(UCOL_ISJAMO(element->cPoints[0])) {
980 element->cPoints+=cpsize;
981 element->cSize-=cpsize;
986 uint32_t newCE = uprv_uca_processContraction(contractions, element, UCOL_NOT_FOUND, status);
987 uprv_cnttab_addContraction(contractions, firstContractionOffset, *element->cPoints, newCE, status);
993 int32_t position = uprv_cnttab_findCP(contractions, CE, *element->cPoints, status);
996 uint32_t newCE = uprv_uca_processContraction(contractions, element, eCE, status);
997 uprv_cnttab_setContraction(contractions, CE, position, *(element->cPoints), newCE, status);
999 uint32_t newCE = uprv_uca_processContraction(contractions, element, UCOL_NOT_FOUND, status);
1000 uprv_cnttab_insertContraction(contractions, CE, *(element->cPoints), newCE, status);
1003 element->cPoints-=cpsize;
1004 element->cSize+=cpsize;
1008 /*ucmpe32_set(t->mapping, cp, element->mapCE);*/
1009 utrie_set32(t->mapping, cp, element->mapCE);
1011 uprv_cnttab_changeContraction(contractions, CE, 0, element->mapCE, status);
1012 uprv_cnttab_changeContraction(contractions, CE, 0xFFFF, element->mapCE, status);
1018 static uint32_t uprv_uca_processContraction(CntTable *contractions, UCAElements *element, uint32_t existingCE, UErrorCode *status) {
1027 if(element->cSize == 1) {
1029 uprv_cnttab_changeContraction(contractions, existingCE, 0, element->mapCE, status);
1030 uprv_cnttab_changeContraction(contractions, existingCE, 0xFFFF, element->mapCE, status);
1033 return element->mapCE; /*can't do just that. existingCe might be a contraction, meaning that we need to do another step */
1037 /* this recursion currently feeds on the only element we have... We will have to copy it in order to accomodate */
1040 /* we encountered either an empty space or a non-contraction element */
1042 element->cPoints++;
1043 element->cSize--;
1047 uint32_t newCE = uprv_uca_processContraction(contractions, element, UCOL_NOT_FOUND, status);
1048 uprv_cnttab_addContraction(contractions, firstContractionOffset, *element->cPoints, newCE, status);
1054 int32_t position = uprv_cnttab_findCP(contractions, existingCE, *element->cPoints, status);
1057 uint32_t newCE = uprv_uca_processContraction(contractions, element, eCE, status);
1058 uprv_cnttab_setContraction(contractions, existingCE, position, *(element->cPoints), newCE, status);
1060 uint32_t newCE = uprv_uca_processContraction(contractions, element, UCOL_NOT_FOUND, status);
1061 uprv_cnttab_insertContraction(contractions, existingCE, *(element->cPoints), newCE, status);
1064 element->cPoints--;
1065 element->cSize++;
1069 static uint32_t uprv_uca_finalizeAddition(tempUCATable *t, UCAElements *element, UErrorCode *status) {
1071 // This should add a completely ignorable element to the
1075 if(element->mapCE == 0) {
1076 for(i = 0; i < element->cSize; i++) {
1077 if(!U16_IS_TRAIL(element->cPoints[i])) {
1078 unsafeCPSet(t->unsafeCP, element->cPoints[i]);
1082 if(element->cSize > 1) { /* we're adding a contraction */
1086 U16_NEXT(element->cPoints, i, element->cSize, cp);
1090 CE = uprv_uca_addContraction(t, CE, element, status);
1092 /*CE = ucmpe32_get(t->mapping, element->cPoints[0]);*/
1093 CE = utrie_get32(t->mapping, element->cPoints[0], NULL);
1096 if(isCntTableElement(CE) /*isContraction(CE)*/) { /* adding a non contraction element (thai, expansion, single) to already existing contraction */
1097 if(!isPrefix(element->mapCE)) { // we cannot reenter prefix elements - as we are going to create a dead loop
1099 uprv_cnttab_setContraction(t->contractions, CE, 0, 0, element->mapCE, status);
1101 uprv_cnttab_changeLastCE(t->contractions, CE, element->mapCE, status);
1104 /*ucmpe32_set(t->mapping, element->cPoints[0], element->mapCE);*/
1105 utrie_set32(t->mapping, element->cPoints[0], element->mapCE);
1106 if ((element->prefixSize!=0) && (!isSpecial(CE) || (getCETag(CE)!=IMPLICIT_TAG))) {
1117 origElem->cPoints[0] = element->cPoints[0];
1126 fprintf(stderr, "Warning - trying to overwrite existing data %08X for cp %04X with %08X\n", CE, element->cPoints[0], element->CEs[0]);
1131 /*ucmpe32_set(t->mapping, element->cPoints[0], element->mapCE);*/
1132 utrie_set32(t->mapping, element->cPoints[0], element->mapCE);
1138 /* This adds a read element, while testing for existence */
1140 uprv_uca_addAnElement(tempUCATable *t, UCAElements *element, UErrorCode *status) {
1153 element->mapCE = 0; // clear mapCE so that we can catch expansions
1155 if(element->noOfCEs == 1) {
1156 element->mapCE = element->CEs[0];
1171 if(element->noOfCEs == 2 // a two CE expansion
1172 && isContinuation(element->CEs[1]) // which is a continuation
1173 && (element->CEs[1] & (~(0xFF << 24 | UCOL_CONTINUATION_MARKER))) == 0 // that has only primaries in continuation,
1174 && (((element->CEs[0]>>8) & 0xFF) == UCOL_BYTE_COMMON) // a common secondary
1175 && ((element->CEs[0] & 0xFF) == UCOL_BYTE_COMMON) // and a common tertiary
1179 fprintf(stdout, "Long primary %04X\n", element->cPoints[0]);
1181 element->mapCE = UCOL_SPECIAL_FLAG | (LONG_PRIMARY_TAG<<24) // a long primary special
1182 | ((element->CEs[0]>>8) & 0xFFFF00) // first and second byte of primary
1183 | ((element->CEs[1]>>24) & 0xFF); // third byte of primary
1187 | (((uprv_uca_addExpansion(expansions, element->CEs[0], status)+(headersize>>2))<<4)
1190 for(i = 1; i<element->noOfCEs; i++) {
1191 uprv_uca_addExpansion(expansions, element->CEs[i], status);
1193 if(element->noOfCEs <= 0xF) {
1194 expansion |= element->noOfCEs;
1198 element->mapCE = expansion;
1199 uprv_uca_setMaxExpansion(element->CEs[element->noOfCEs - 1],
1200 (uint8_t)element->noOfCEs,
1203 if(UCOL_ISJAMO(element->cPoints[0])) {
1205 uprv_uca_setMaxJamoExpansion(element->cPoints[0],
1206 element->CEs[element->noOfCEs - 1],
1207 (uint8_t)element->noOfCEs,
1220 //printElement(element);
1221 if ((element->cSize == 2) && U16_IS_LEAD(element->cPoints[0])){
1222 uniChar = U16_GET_SUPPLEMENTARY(element->cPoints[0], element->cPoints[1]);
1223 } else if (element->cSize == 1){
1224 uniChar = element->cPoints[0];
1228 // one element to the expansion buffer. When we encounter a digit and we don't
1234 expansion = (uint32_t)(UCOL_SPECIAL_FLAG | (DIGIT_TAG<<UCOL_TAG_SHIFT) | 1); // prepare the element
1235 if(element->mapCE) { // if there is an expansion, we'll pick it here
1236 expansion |= ((uprv_uca_addExpansion(expansions, element->mapCE, status)+(headersize>>2))<<4);
1238 expansion |= ((uprv_uca_addExpansion(expansions, element->CEs[0], status)+(headersize>>2))<<4);
1240 element->mapCE = expansion;
1252 if(element->prefixSize!=0) {
1264 uprv_memcpy(composed, element, sizeof(UCAElements));
1268 composed->prefixSize = unorm_normalize(element->prefix, element->prefixSize, UNORM_NFC, 0, composed->prefix, 128, status);
1272 UCAElements *uCE = (UCAElements *)uhash_get(t->prefixLookup, element);
1274 element->mapCE = uprv_uca_addPrefix(t, uCE->mapCE, element, status);
1276 element->mapCE = uprv_uca_addPrefix(t, UCOL_NOT_FOUND, element, status);
1283 uprv_memcpy(uCE, element, sizeof(UCAElements));
1287 if(composed->prefixSize != element->prefixSize || uprv_memcmp(composed->prefix, element->prefix, element->prefixSize)) {
1289 composed->mapCE = uprv_uca_addPrefix(t, element->mapCE, composed, status);
1298 if(element->cSize > 1 && !(element->cSize==2 && U16_IS_LEAD(element->cPoints[0]) && U16_IS_TRAIL(element->cPoints[1]))) { // this is a contraction, we should check whether a composed form should also be included
1299 UnicodeString source(element->cPoints, element->cSize);
1304 element->cSize = source.extract(element->cPoints, 128, *status);
1305 uprv_uca_finalizeAddition(t, element, status);
1309 CE = element->mapCE;
1311 CE = uprv_uca_finalizeAddition(t, element, status);
1565 /* not copying the first element which is a dummy */
1714 uprv_uca_setMapCE(tempUCATable *t, UCAElements *element, UErrorCode *status) {
1719 if(element->noOfCEs == 2 // a two CE expansion
1720 && isContinuation(element->CEs[1]) // which is a continuation
1721 && (element->CEs[1] & (~(0xFF << 24 | UCOL_CONTINUATION_MARKER))) == 0 // that has only primaries in continuation,
1722 && (((element->CEs[0]>>8) & 0xFF) == UCOL_BYTE_COMMON) // a common secondary
1723 && ((element->CEs[0] & 0xFF) == UCOL_BYTE_COMMON) // and a common tertiary
1725 element->mapCE = UCOL_SPECIAL_FLAG | (LONG_PRIMARY_TAG<<24) // a long primary special
1726 | ((element->CEs[0]>>8) & 0xFFFF00) // first and second byte of primary
1727 | ((element->CEs[1]>>24) & 0xFF); // third byte of primary
1730 | (((uprv_uca_addExpansion(expansions, element->CEs[0], status)+(headersize>>2))<<4)
1733 for(j = 1; j<(int32_t)element->noOfCEs; j++) {
1734 uprv_uca_addExpansion(expansions, element->CEs[j], status);
1736 if(element->noOfCEs <= 0xF) {
1737 expansion |= element->noOfCEs;
1741 element->mapCE = expansion;
1742 uprv_uca_setMaxExpansion(element->CEs[element->noOfCEs - 1],
1743 (uint8_t)element->noOfCEs,
1869 UCAElements element;
1922 element.cPoints = decomp;
1923 element.cSize = decompLen;
1924 element.noOfCEs = 0;
1925 element.prefix = el->prefixChars;
1926 element.prefixSize = 0;
1928 UCAElements *prefix=(UCAElements *)uhash_get(t->prefixLookup, &element);
1929 element.cPoints = comp;
1930 element.cSize = len;
1931 element.prefix = el->prefixChars;
1932 element.prefixSize = 0;
1934 element.noOfCEs = 0;
1936 while((element.CEs[element.noOfCEs] = ucol_next(colEl, status)) != (uint32_t)UCOL_NULLORDER) {
1937 element.noOfCEs++;
1939 uprv_uca_setMapCE(t, &element, status);
1940 uprv_uca_finalizeAddition(t, &element, status);
1947 uprv_uca_addFCD4AccentedContractions(t, colEl, comp, len, &element, status);
1955 uprv_uca_addMultiCMContractions(t, colEl, &c, &element, status);