1*48edc7cfSGordon Ross %{ 2*48edc7cfSGordon Ross /* 3*48edc7cfSGordon Ross * This file and its contents are supplied under the terms of the 4*48edc7cfSGordon Ross * Common Development and Distribution License ("CDDL"), version 1.0. 5*48edc7cfSGordon Ross * You may only use this file in accordance with the terms of version 6*48edc7cfSGordon Ross * 1.0 of the CDDL. 7*48edc7cfSGordon Ross * 8*48edc7cfSGordon Ross * A full copy of the text of the CDDL should have accompanied this 9*48edc7cfSGordon Ross * source. A copy of the CDDL is also available via the Internet at 10*48edc7cfSGordon Ross * http://www.illumos.org/license/CDDL. 11*48edc7cfSGordon Ross */ 12*48edc7cfSGordon Ross 13*48edc7cfSGordon Ross /* 14*48edc7cfSGordon Ross * Copyright 2011 Nexenta Systems, Inc. All rights reserved. 15*48edc7cfSGordon Ross */ 16*48edc7cfSGordon Ross 17*48edc7cfSGordon Ross /* 18*48edc7cfSGordon Ross * POSIX iconv charmap grammar. 19*48edc7cfSGordon Ross */ 20*48edc7cfSGordon Ross 21*48edc7cfSGordon Ross #include <wchar.h> 22*48edc7cfSGordon Ross #include <stdio.h> 23*48edc7cfSGordon Ross #include <limits.h> 24*48edc7cfSGordon Ross #include "charmap.h" 25*48edc7cfSGordon Ross 26*48edc7cfSGordon Ross %} 27*48edc7cfSGordon Ross %union { 28*48edc7cfSGordon Ross char *token; 29*48edc7cfSGordon Ross int num; 30*48edc7cfSGordon Ross char mbs[MB_LEN_MAX + 2]; /* NB: [0] is length! */ 31*48edc7cfSGordon Ross } 32*48edc7cfSGordon Ross 33*48edc7cfSGordon Ross %token T_CODE_SET 34*48edc7cfSGordon Ross %token T_MB_CUR_MAX 35*48edc7cfSGordon Ross %token T_MB_CUR_MIN 36*48edc7cfSGordon Ross %token T_COM_CHAR 37*48edc7cfSGordon Ross %token T_ESC_CHAR 38*48edc7cfSGordon Ross %token T_LT 39*48edc7cfSGordon Ross %token T_GT 40*48edc7cfSGordon Ross %token T_NL 41*48edc7cfSGordon Ross %token T_SEMI 42*48edc7cfSGordon Ross %token T_COMMA 43*48edc7cfSGordon Ross %token T_ELLIPSIS 44*48edc7cfSGordon Ross %token T_RPAREN 45*48edc7cfSGordon Ross %token T_LPAREN 46*48edc7cfSGordon Ross %token T_QUOTE 47*48edc7cfSGordon Ross %token T_NULL 48*48edc7cfSGordon Ross %token T_END 49*48edc7cfSGordon Ross %token T_CHARMAP 50*48edc7cfSGordon Ross %token T_WIDTH 51*48edc7cfSGordon Ross %token T_WIDTH_DEFAULT 52*48edc7cfSGordon Ross %token <mbs> T_CHAR 53*48edc7cfSGordon Ross %token <token> T_NAME 54*48edc7cfSGordon Ross %token <num> T_NUMBER 55*48edc7cfSGordon Ross %token <token> T_SYMBOL 56*48edc7cfSGordon Ross 57*48edc7cfSGordon Ross %% 58*48edc7cfSGordon Ross 59*48edc7cfSGordon Ross goal : setting_list charmap 60*48edc7cfSGordon Ross | charmap 61*48edc7cfSGordon Ross ; 62*48edc7cfSGordon Ross 63*48edc7cfSGordon Ross string : T_QUOTE charlist T_QUOTE 64*48edc7cfSGordon Ross | T_QUOTE T_QUOTE 65*48edc7cfSGordon Ross ; 66*48edc7cfSGordon Ross 67*48edc7cfSGordon Ross charlist : charlist T_CHAR 68*48edc7cfSGordon Ross | T_CHAR 69*48edc7cfSGordon Ross ; 70*48edc7cfSGordon Ross 71*48edc7cfSGordon Ross setting_list : setting_list setting 72*48edc7cfSGordon Ross | setting 73*48edc7cfSGordon Ross ; 74*48edc7cfSGordon Ross 75*48edc7cfSGordon Ross setting : T_COM_CHAR T_CHAR T_NL 76*48edc7cfSGordon Ross { 77*48edc7cfSGordon Ross com_char = $2[1]; 78*48edc7cfSGordon Ross } 79*48edc7cfSGordon Ross | T_ESC_CHAR T_CHAR T_NL 80*48edc7cfSGordon Ross { 81*48edc7cfSGordon Ross esc_char = $2[1]; 82*48edc7cfSGordon Ross } 83*48edc7cfSGordon Ross | T_MB_CUR_MAX T_NUMBER T_NL 84*48edc7cfSGordon Ross { 85*48edc7cfSGordon Ross mb_cur_max = $2; 86*48edc7cfSGordon Ross } 87*48edc7cfSGordon Ross | T_MB_CUR_MIN T_NUMBER T_NL 88*48edc7cfSGordon Ross { 89*48edc7cfSGordon Ross mb_cur_min = $2; 90*48edc7cfSGordon Ross } 91*48edc7cfSGordon Ross | T_CODE_SET T_NAME T_NL 92*48edc7cfSGordon Ross { 93*48edc7cfSGordon Ross /* ignore */ 94*48edc7cfSGordon Ross } 95*48edc7cfSGordon Ross | T_CODE_SET string T_NL 96*48edc7cfSGordon Ross { 97*48edc7cfSGordon Ross /* ignore */ 98*48edc7cfSGordon Ross } 99*48edc7cfSGordon Ross ; 100*48edc7cfSGordon Ross 101*48edc7cfSGordon Ross charmap : T_CHARMAP T_NL charmap_list T_END T_CHARMAP T_NL 102*48edc7cfSGordon Ross 103*48edc7cfSGordon Ross charmap_list : charmap_list charmap_entry 104*48edc7cfSGordon Ross | charmap_entry 105*48edc7cfSGordon Ross ; 106*48edc7cfSGordon Ross 107*48edc7cfSGordon Ross charmap_entry : T_SYMBOL T_CHAR 108*48edc7cfSGordon Ross { 109*48edc7cfSGordon Ross add_charmap($1, $2); 110*48edc7cfSGordon Ross scan_to_eol(); 111*48edc7cfSGordon Ross } 112*48edc7cfSGordon Ross | T_SYMBOL T_ELLIPSIS T_SYMBOL T_CHAR 113*48edc7cfSGordon Ross { 114*48edc7cfSGordon Ross add_charmap_range($1, $3, $4); 115*48edc7cfSGordon Ross scan_to_eol(); 116*48edc7cfSGordon Ross } 117*48edc7cfSGordon Ross | T_NL 118*48edc7cfSGordon Ross ; 119