Add processing for French ligatures.
Bug: 5140033 Change-Id: I1c2751fc617e662aad9f67506e28a622f81d0bc9main
parent
a7c24ea57a
commit
cc78d03a62
|
@ -0,0 +1,23 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
/*
|
||||||
|
**
|
||||||
|
** Copyright 2012, The Android Open Source Project
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
-->
|
||||||
|
|
||||||
|
<resources>
|
||||||
|
<bool name="config_require_ligatures_processing">true</bool>
|
||||||
|
</resources>
|
|
@ -20,4 +20,5 @@
|
||||||
|
|
||||||
<resources>
|
<resources>
|
||||||
<bool name="config_require_umlaut_processing">false</bool>
|
<bool name="config_require_umlaut_processing">false</bool>
|
||||||
|
<bool name="config_require_ligatures_processing">false</bool>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -55,6 +55,8 @@ public class BinaryDictionary extends Dictionary {
|
||||||
|
|
||||||
public static final Flag FLAG_REQUIRES_GERMAN_UMLAUT_PROCESSING =
|
public static final Flag FLAG_REQUIRES_GERMAN_UMLAUT_PROCESSING =
|
||||||
new Flag(R.bool.config_require_umlaut_processing, 0x1);
|
new Flag(R.bool.config_require_umlaut_processing, 0x1);
|
||||||
|
public static final Flag FLAG_REQUIRES_FRENCH_LIGATURES_PROCESSING =
|
||||||
|
new Flag(R.bool.config_require_ligatures_processing, 0x4);
|
||||||
|
|
||||||
// FULL_EDIT_DISTANCE is a flag that forces the dictionary to use full words
|
// FULL_EDIT_DISTANCE is a flag that forces the dictionary to use full words
|
||||||
// when computing edit distance, instead of the default behavior of stopping
|
// when computing edit distance, instead of the default behavior of stopping
|
||||||
|
@ -77,6 +79,7 @@ public class BinaryDictionary extends Dictionary {
|
||||||
// actual value will be read from the configuration/extra value at run time for
|
// actual value will be read from the configuration/extra value at run time for
|
||||||
// the configuration at dictionary creation time.
|
// the configuration at dictionary creation time.
|
||||||
FLAG_REQUIRES_GERMAN_UMLAUT_PROCESSING,
|
FLAG_REQUIRES_GERMAN_UMLAUT_PROCESSING,
|
||||||
|
FLAG_REQUIRES_FRENCH_LIGATURES_PROCESSING,
|
||||||
};
|
};
|
||||||
|
|
||||||
private int mFlags = 0;
|
private int mFlags = 0;
|
||||||
|
|
|
@ -34,6 +34,10 @@ const UnigramDictionary::digraph_t UnigramDictionary::GERMAN_UMLAUT_DIGRAPHS[] =
|
||||||
{ 'o', 'e', 0x00F6 }, // U+00F6 : LATIN SMALL LETTER O WITH DIAERESIS
|
{ 'o', 'e', 0x00F6 }, // U+00F6 : LATIN SMALL LETTER O WITH DIAERESIS
|
||||||
{ 'u', 'e', 0x00FC } }; // U+00FC : LATIN SMALL LETTER U WITH DIAERESIS
|
{ 'u', 'e', 0x00FC } }; // U+00FC : LATIN SMALL LETTER U WITH DIAERESIS
|
||||||
|
|
||||||
|
const UnigramDictionary::digraph_t UnigramDictionary::FRENCH_LIGATURES_DIGRAPHS[] =
|
||||||
|
{ { 'a', 'e', 0x00E6 }, // U+00E6 : LATIN SMALL LETTER AE
|
||||||
|
{ 'o', 'e', 0x0153 } }; // U+0153 : LATIN SMALL LIGATURE OE
|
||||||
|
|
||||||
// TODO: check the header
|
// TODO: check the header
|
||||||
UnigramDictionary::UnigramDictionary(const uint8_t* const streamStart, int typedLetterMultiplier,
|
UnigramDictionary::UnigramDictionary(const uint8_t* const streamStart, int typedLetterMultiplier,
|
||||||
int fullWordMultiplier, int maxWordLength, int maxWords, int maxProximityChars,
|
int fullWordMultiplier, int maxWordLength, int maxWords, int maxProximityChars,
|
||||||
|
@ -181,6 +185,15 @@ int UnigramDictionary::getSuggestions(ProximityInfo *proximityInfo,
|
||||||
codesSize, flags, codes, codesSize, 0, codesBuffer, masterCorrection, queuePool,
|
codesSize, flags, codes, codesSize, 0, codesBuffer, masterCorrection, queuePool,
|
||||||
GERMAN_UMLAUT_DIGRAPHS,
|
GERMAN_UMLAUT_DIGRAPHS,
|
||||||
sizeof(GERMAN_UMLAUT_DIGRAPHS) / sizeof(GERMAN_UMLAUT_DIGRAPHS[0]));
|
sizeof(GERMAN_UMLAUT_DIGRAPHS) / sizeof(GERMAN_UMLAUT_DIGRAPHS[0]));
|
||||||
|
} else if (REQUIRES_FRENCH_LIGATURES_PROCESSING & flags) {
|
||||||
|
int codesBuffer[getCodesBufferSize(codes, codesSize, MAX_PROXIMITY_CHARS)];
|
||||||
|
int xCoordinatesBuffer[codesSize];
|
||||||
|
int yCoordinatesBuffer[codesSize];
|
||||||
|
getWordWithDigraphSuggestionsRec(proximityInfo, xcoordinates, ycoordinates, codesBuffer,
|
||||||
|
xCoordinatesBuffer, yCoordinatesBuffer,
|
||||||
|
codesSize, flags, codes, codesSize, 0, codesBuffer, masterCorrection, queuePool,
|
||||||
|
FRENCH_LIGATURES_DIGRAPHS,
|
||||||
|
sizeof(FRENCH_LIGATURES_DIGRAPHS) / sizeof(FRENCH_LIGATURES_DIGRAPHS[0]));
|
||||||
} else { // Normal processing
|
} else { // Normal processing
|
||||||
getWordSuggestions(proximityInfo, xcoordinates, ycoordinates, codes, codesSize, flags,
|
getWordSuggestions(proximityInfo, xcoordinates, ycoordinates, codes, codesSize, flags,
|
||||||
masterCorrection, queuePool);
|
masterCorrection, queuePool);
|
||||||
|
|
|
@ -157,9 +157,11 @@ class UnigramDictionary {
|
||||||
// Please update both at the same time.
|
// Please update both at the same time.
|
||||||
enum {
|
enum {
|
||||||
REQUIRES_GERMAN_UMLAUT_PROCESSING = 0x1,
|
REQUIRES_GERMAN_UMLAUT_PROCESSING = 0x1,
|
||||||
USE_FULL_EDIT_DISTANCE = 0x2
|
USE_FULL_EDIT_DISTANCE = 0x2,
|
||||||
|
REQUIRES_FRENCH_LIGATURES_PROCESSING = 0x4
|
||||||
};
|
};
|
||||||
static const digraph_t GERMAN_UMLAUT_DIGRAPHS[];
|
static const digraph_t GERMAN_UMLAUT_DIGRAPHS[];
|
||||||
|
static const digraph_t FRENCH_LIGATURES_DIGRAPHS[];
|
||||||
|
|
||||||
// Still bundled members
|
// Still bundled members
|
||||||
unsigned short mWord[MAX_WORD_LENGTH_INTERNAL];// TODO: remove
|
unsigned short mWord[MAX_WORD_LENGTH_INTERNAL];// TODO: remove
|
||||||
|
|
Loading…
Reference in New Issue