Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cc78d03a authored by Jean Chalard's avatar Jean Chalard
Browse files

Add processing for French ligatures.

Bug: 5140033
Change-Id: I1c2751fc617e662aad9f67506e28a622f81d0bc9
parent a7c24ea5
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
<?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>
+1 −0
Original line number Diff line number Diff line
@@ -20,4 +20,5 @@

<resources>
    <bool name="config_require_umlaut_processing">false</bool>
    <bool name="config_require_ligatures_processing">false</bool>
</resources>
+3 −0
Original line number Diff line number Diff line
@@ -55,6 +55,8 @@ public class BinaryDictionary extends Dictionary {

    public static final Flag FLAG_REQUIRES_GERMAN_UMLAUT_PROCESSING =
            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
    // 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
        // the configuration at dictionary creation time.
        FLAG_REQUIRES_GERMAN_UMLAUT_PROCESSING,
        FLAG_REQUIRES_FRENCH_LIGATURES_PROCESSING,
    };

    private int mFlags = 0;
+13 −0
Original line number Diff line number Diff line
@@ -34,6 +34,10 @@ const UnigramDictionary::digraph_t UnigramDictionary::GERMAN_UMLAUT_DIGRAPHS[] =
        { 'o', 'e', 0x00F6 }, // U+00F6 : LATIN SMALL LETTER O 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
UnigramDictionary::UnigramDictionary(const uint8_t* const streamStart, int typedLetterMultiplier,
        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,
                GERMAN_UMLAUT_DIGRAPHS,
                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
        getWordSuggestions(proximityInfo, xcoordinates, ycoordinates, codes, codesSize, flags,
                masterCorrection, queuePool);
+3 −1
Original line number Diff line number Diff line
@@ -157,9 +157,11 @@ class UnigramDictionary {
    // Please update both at the same time.
    enum {
        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 FRENCH_LIGATURES_DIGRAPHS[];

    // Still bundled members
    unsigned short mWord[MAX_WORD_LENGTH_INTERNAL];// TODO: remove