12fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang/* 22fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang * Copyright (C) 2013 The Android Open Source Project 32fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang * 42fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang * Licensed under the Apache License, Version 2.0 (the "License"); 52fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang * you may not use this file except in compliance with the License. 62fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang * You may obtain a copy of the License at 72fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang * 82fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang * http://www.apache.org/licenses/LICENSE-2.0 92fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang * 102fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang * Unless required by applicable law or agreed to in writing, software 112fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang * distributed under the License is distributed on an "AS IS" BASIS, 122fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang * See the License for the specific language governing permissions and 142fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang * limitations under the License. 152fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang */ 162fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang 172fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang#ifndef DIGRAPH_UTILS_H 182fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang#define DIGRAPH_UTILS_H 192fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang 20a65c267b1f1207e54c6f821148c600e3899b7f9cKen Wakasa#include "defines.h" 21a65c267b1f1207e54c6f821148c600e3899b7f9cKen Wakasa 222fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyangnamespace latinime { 232fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang 2476e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagiclass DictionaryHeaderStructurePolicy; 25bd0d1afdb28a28e2ddac1409208c59ba64350399Keisuke Kuroynagi 262fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyangclass DigraphUtils { 272fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang public: 282fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang typedef enum { 292fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang NOT_A_DIGRAPH_INDEX, 302fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang FIRST_DIGRAPH_CODEPOINT, 312fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang SECOND_DIGRAPH_CODEPOINT 322fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang } DigraphCodePointIndex; 332fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang 3425e8eda9afb5c36703bd50b263ab0dd3a3b38d31Tom Ouyang typedef enum { 3525e8eda9afb5c36703bd50b263ab0dd3a3b38d31Tom Ouyang DIGRAPH_TYPE_NONE, 3625e8eda9afb5c36703bd50b263ab0dd3a3b38d31Tom Ouyang DIGRAPH_TYPE_GERMAN_UMLAUT, 3725e8eda9afb5c36703bd50b263ab0dd3a3b38d31Tom Ouyang } DigraphType; 3825e8eda9afb5c36703bd50b263ab0dd3a3b38d31Tom Ouyang 392fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang typedef struct { int first; int second; int compositeGlyph; } digraph_t; 402fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang 4176e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi static bool hasDigraphForCodePoint(const DictionaryHeaderStructurePolicy *const headerPolicy, 4276e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi const int compositeGlyphCodePoint); 4325e8eda9afb5c36703bd50b263ab0dd3a3b38d31Tom Ouyang static int getDigraphCodePointForIndex(const int compositeGlyphCodePoint, 4425e8eda9afb5c36703bd50b263ab0dd3a3b38d31Tom Ouyang const DigraphCodePointIndex digraphCodePointIndex); 452fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang 462fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang private: 472fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang DISALLOW_IMPLICIT_CONSTRUCTORS(DigraphUtils); 4876e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi static DigraphType getDigraphTypeForDictionary( 4976e579c7caf2ef04f440be21c27377fe0b4150ffKeisuke Kuroyanagi const DictionaryHeaderStructurePolicy *const headerPolicy); 5025e8eda9afb5c36703bd50b263ab0dd3a3b38d31Tom Ouyang static int getAllDigraphsForDigraphTypeAndReturnSize( 5125e8eda9afb5c36703bd50b263ab0dd3a3b38d31Tom Ouyang const DigraphType digraphType, const digraph_t **const digraphs); 5225e8eda9afb5c36703bd50b263ab0dd3a3b38d31Tom Ouyang static const digraph_t *getDigraphForCodePoint(const int compositeGlyphCodePoint); 5325e8eda9afb5c36703bd50b263ab0dd3a3b38d31Tom Ouyang static const digraph_t *getDigraphForDigraphTypeAndCodePoint( 5425e8eda9afb5c36703bd50b263ab0dd3a3b38d31Tom Ouyang const DigraphType digraphType, const int compositeGlyphCodePoint); 552fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang 562fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang static const digraph_t GERMAN_UMLAUT_DIGRAPHS[]; 5725e8eda9afb5c36703bd50b263ab0dd3a3b38d31Tom Ouyang static const DigraphType USED_DIGRAPH_TYPES[]; 582fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang}; 592fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang} // namespace latinime 602fdf5b70adab1cd7eaa62319524e6c79f2cbd14bTom Ouyang#endif // DIGRAPH_UTILS_H 61