/* * Indic algorithms for QEmacs. * * Copyright (c) 2000 Fabrice Bellard. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "qe.h" #include "qfribidi.h" #define VIRAMA 0x94d #define RA 0x930 #define RRA 0x931 #define ZERO_WIDTH_JOINER 0x200d /* private unicode extensions */ #define DEAD_CONSONANT_OFFSET 0x10000 #define HALF_OFFSET 0xe000 #define RA_SUP 0xe97e #define RA_SUB 0xe97f #define RRA_HALF 0xe97d #define RA_DEAD (RA + DEAD_CONSONANT_OFFSET) #if 0 static int is_vowel_sign (unsigned int i) { return (i >= 0x93E && i <= 0x94c) || (i >= 0x962 && i <= 0x963); } #endif static int is_consonant (unsigned int i) { return (i >= 0x915 && i <= 0x939) || (i >= 0x958 && i <= 0x95f); } static int is_ind_vowel (unsigned int i) { return (i >= 0x905 && i <= 0x914); } static int is_dead_consonant(unsigned int i) { return (i >= DEAD_CONSONANT_OFFSET && i <= DEAD_CONSONANT_OFFSET + 0x7f); } /* always returns a smaller buffer */ int devanagari_log2vis(unsigned int *str, unsigned int *ctog, int len) { int i, len1, cc, j, k, c; unsigned int *q, buf[len]; /* Rule 1 : dead consonant rule */ q = buf; len1 = len - 1; for(i=0;i