hb-ot-shape-complex-indic-machine.rl revision c7fe56a1d5d3e969b6ec51cd9ecd471706a19568
1867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod/*
2867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod * Copyright © 2011  Google, Inc.
3867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod *
4867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod *  This is part of HarfBuzz, a text shaping library.
5867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod *
6867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod * Permission is hereby granted, without written agreement and without
7867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod * license or royalty fees, to use, copy, modify, and distribute this
8867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod * software and its documentation for any purpose, provided that the
9867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod * above copyright notice and the following two paragraphs appear in
10867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod * all copies of this software.
11867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod *
12867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
13867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
14867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
15867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
16867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod * DAMAGE.
17867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod *
18867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
19867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
21867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
22867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
23867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod *
24867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod * Google Author(s): Behdad Esfahbod
25867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod */
26867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod
27867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod#ifndef HB_OT_SHAPE_COMPLEX_INDIC_MACHINE_HH
28867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod#define HB_OT_SHAPE_COMPLEX_INDIC_MACHINE_HH
29867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod
30867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod#include "hb-private.hh"
31867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod
32867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad EsfahbodHB_BEGIN_DECLS
33867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod
34867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod%%{
35867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod  machine indic_syllable_machine;
36867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod  alphtype unsigned char;
37867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod  write data;
38867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod}%%
39867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod
40867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod%%{
41867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod
42c7fe56a1d5d3e969b6ec51cd9ecd471706a19568Behdad Esfahbod# Same order as enum indic_category_t.  Not sure how to avoid duplication.
43867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad EsfahbodX    = 0;
44867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad EsfahbodC    = 1;
45867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad EsfahbodRa   = 2;
46867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad EsfahbodV    = 3;
47867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad EsfahbodN    = 4;
48867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad EsfahbodH    = 5;
49867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad EsfahbodZWNJ = 6;
50867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad EsfahbodZWJ  = 7;
51867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad EsfahbodM    = 8;
52867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad EsfahbodSM   = 9;
53867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad EsfahbodVD   = 10;
54867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad EsfahbodA    = 11;
55867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad EsfahbodNBSP = 12;
56867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod
57867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbodc = C | Ra;
58867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbodz = ZWJ|ZWNJ;
59867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbodmatra_group = M N? H?;
60867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbodsyllable_tail = SM? (VD VD?)?;
61867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod
62867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbodaction matched_syllable {
63867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod  //fprintf (stderr, "Syll %d\n", p);
64867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod}
65867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod
66867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbodconsonant_syllable =	(c.N? (z.H|H.z?))* c.N? A? (H.z? | matra_group*)? syllable_tail %(matched_syllable);
67867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbodvowel_syllable =	(Ra H)? V N? (z.H.c | ZWJ.c)? matra_group* syllable_tail;
68867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbodstandalone_cluster =	(Ra H)? NBSP N? (z? H c)? matra_group* syllable_tail;
69867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbodnon_indic = X;
70867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod
71867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbodsyllable =
72867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod	  consonant_syllable
73867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod	| vowel_syllable
74867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod	| standalone_cluster
75867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod	| non_indic
76867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod	;
77867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod
78867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbodmain := syllable**;
79867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod
80867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod}%%
81867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod
82867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod
83867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod#include <stdio.h>
84867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod#include <string.h>
85867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod
86867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbodstatic void
87867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbodfind_syllables (hb_ot_shape_context_t *c)
88867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod{
89867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod  unsigned int p, pe, eof;
90867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod  int cs;
91867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod  %%{
92867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod    write init;
93867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod    getkey c->buffer->info[p].indic_category();
94867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod  }%%
95867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod
96867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod  p = 0;
97867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod  pe = eof = c->buffer->len;
98867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod
99867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod  %%{
100867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod    write exec;
101867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod  }%%
102867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod}
103867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod
104867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad EsfahbodHB_END_DECLS
105867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod
106867361c3ad39629a8d5b7dc48d558a1c19e37d43Behdad Esfahbod#endif /* HB_OT_SHAPE_COMPLEX_INDIC_MACHINE_HH */
107