public int getFCD16FromNormData ( int c ) { // Only loops for 1:1 algorithmic mappings. for ( ; ; ) { int norm16 = getNorm16 ( c ) ; if ( norm16 <= minYesNo ) { // no decomposition or Hangul syllable, all zeros return 0 ; } else if ( norm16 >= MIN_NORMAL_MAYBE_YES ) { // combining mark norm16 &= 0xff ; return norm16 | ( norm16 << 8 ) ; } else if ( norm16 >= minMaybeYes ) { return 0 ; } else if ( isDecompNoAlgorithmic ( norm16 ) ) { c = mapAlgorithmic ( c , norm16 ) ; } else { // c decomposes, get everything from the variable-length extra data int firstUnit = extraData . charAt ( norm16 ) ; if ( ( firstUnit & MAPPING_LENGTH_MASK ) == 0 ) { // A character that is deleted (maps to an empty string) must // get the worst-case lccc and tccc values because arbitrary // characters on both sides will become adjacent. return 0x1ff ; } else { int fcd16 = firstUnit >> 8 ; // tccc if ( ( firstUnit & MAPPING_HAS_CCC_LCCC_WORD ) != 0 ) { fcd16 |= extraData . charAt ( norm16 - 1 ) & 0xff00 ; // lccc } return fcd16 ; } } } }
Gets the FCD value from the regular normalization data .