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