48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%{
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross/*
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross * This file and its contents are supplied under the terms of the
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross * Common Development and Distribution License ("CDDL"), version 1.0.
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross * You may only use this file in accordance with the terms of version
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross * 1.0 of the CDDL.
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross *
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross * A full copy of the text of the CDDL should have accompanied this
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross * source. A copy of the CDDL is also available via the Internet at
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross * http://www.illumos.org/license/CDDL.
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross */
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross/*
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross */
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross/*
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross * POSIX iconv charmap grammar.
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross */
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross#include <wchar.h>
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross#include <stdio.h>
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross#include <limits.h>
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross#include "charmap.h"
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%}
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%union {
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross char *token;
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross int num;
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross char mbs[MB_LEN_MAX + 2]; /* NB: [0] is length! */
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross}
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%token T_CODE_SET
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%token T_MB_CUR_MAX
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%token T_MB_CUR_MIN
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%token T_COM_CHAR
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%token T_ESC_CHAR
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%token T_LT
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%token T_GT
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%token T_NL
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%token T_SEMI
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%token T_COMMA
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%token T_ELLIPSIS
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%token T_RPAREN
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%token T_LPAREN
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%token T_QUOTE
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%token T_NULL
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%token T_END
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%token T_CHARMAP
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%token T_WIDTH
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%token T_WIDTH_DEFAULT
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%token <mbs> T_CHAR
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%token <token> T_NAME
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%token <num> T_NUMBER
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%token <token> T_SYMBOL
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross%%
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rossgoal : setting_list charmap
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross | charmap
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross ;
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rossstring : T_QUOTE charlist T_QUOTE
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross | T_QUOTE T_QUOTE
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross ;
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rosscharlist : charlist T_CHAR
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross | T_CHAR
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross ;
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rosssetting_list : setting_list setting
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross | setting
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross ;
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rosssetting : T_COM_CHAR T_CHAR T_NL
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross {
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross com_char = $2[1];
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross }
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross | T_ESC_CHAR T_CHAR T_NL
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross {
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross esc_char = $2[1];
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross }
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross | T_MB_CUR_MAX T_NUMBER T_NL
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross {
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross mb_cur_max = $2;
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross }
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross | T_MB_CUR_MIN T_NUMBER T_NL
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross {
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross mb_cur_min = $2;
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross }
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross | T_CODE_SET T_NAME T_NL
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross {
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross /* ignore */
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross }
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross | T_CODE_SET string T_NL
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross {
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross /* ignore */
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross }
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross ;
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rosscharmap : T_CHARMAP T_NL charmap_list T_END T_CHARMAP T_NL
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rosscharmap_list : charmap_list charmap_entry
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross | charmap_entry
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross ;
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Rosscharmap_entry : T_SYMBOL T_CHAR
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross {
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross add_charmap($1, $2);
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross scan_to_eol();
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross }
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross | T_SYMBOL T_ELLIPSIS T_SYMBOL T_CHAR
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross {
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross add_charmap_range($1, $3, $4);
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross scan_to_eol();
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross }
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross | T_NL
48edc7cf07b5dccc3ad84bf2dafe4150bd666d60Gordon Ross ;