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