hb-ot-shape-complex-indic-machine.rl revision 867361c3ad39629a8d5b7dc48d558a1c19e37d43
1/* 2 * Copyright © 2011 Google, Inc. 3 * 4 * This is part of HarfBuzz, a text shaping library. 5 * 6 * Permission is hereby granted, without written agreement and without 7 * license or royalty fees, to use, copy, modify, and distribute this 8 * software and its documentation for any purpose, provided that the 9 * above copyright notice and the following two paragraphs appear in 10 * all copies of this software. 11 * 12 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 13 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 14 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 15 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 16 * DAMAGE. 17 * 18 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 19 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 21 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 22 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 23 * 24 * Google Author(s): Behdad Esfahbod 25 */ 26 27#ifndef HB_OT_SHAPE_COMPLEX_INDIC_MACHINE_HH 28#define HB_OT_SHAPE_COMPLEX_INDIC_MACHINE_HH 29 30#include "hb-private.hh" 31 32HB_BEGIN_DECLS 33 34%%{ 35 machine indic_syllable_machine; 36 alphtype unsigned char; 37 write data; 38}%% 39 40%%{ 41 42X = 0; 43C = 1; 44Ra = 2; 45V = 3; 46N = 4; 47H = 5; 48ZWNJ = 6; 49ZWJ = 7; 50M = 8; 51SM = 9; 52VD = 10; 53A = 11; 54NBSP = 12; 55 56c = C | Ra; 57z = ZWJ|ZWNJ; 58matra_group = M N? H?; 59syllable_tail = SM? (VD VD?)?; 60 61action matched_syllable { 62 //fprintf (stderr, "Syll %d\n", p); 63} 64 65consonant_syllable = (c.N? (z.H|H.z?))* c.N? A? (H.z? | matra_group*)? syllable_tail %(matched_syllable); 66vowel_syllable = (Ra H)? V N? (z.H.c | ZWJ.c)? matra_group* syllable_tail; 67standalone_cluster = (Ra H)? NBSP N? (z? H c)? matra_group* syllable_tail; 68non_indic = X; 69 70syllable = 71 consonant_syllable 72 | vowel_syllable 73 | standalone_cluster 74 | non_indic 75 ; 76 77main := syllable**; 78 79}%% 80 81 82#include <stdio.h> 83#include <string.h> 84 85static void 86find_syllables (hb_ot_shape_context_t *c) 87{ 88 unsigned int p, pe, eof; 89 int cs; 90 %%{ 91 write init; 92 getkey c->buffer->info[p].indic_category(); 93 }%% 94 95 p = 0; 96 pe = eof = c->buffer->len; 97 98 %%{ 99 write exec; 100 }%% 101} 102 103HB_END_DECLS 104 105#endif /* HB_OT_SHAPE_COMPLEX_INDIC_MACHINE_HH */ 106