Mercurial > octave-nkf
comparison libinterp/corefcn/oct-tex-parser.in.yy @ 20573:e3c0fee87493
style fixes for tex lexer and parser
* oct-tex-lexer.in.ll, oct-tex-parser.in.yy:
Eliminate tabs and reindent.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 02 Oct 2015 12:25:39 -0400 |
parents | a941a65c7cb8 |
children |
comparison
equal
deleted
inserted
replaced
20572:72cd24aa5f7a | 20573:e3c0fee87493 |
---|---|
19 <http://www.gnu.org/licenses/>. | 19 <http://www.gnu.org/licenses/>. |
20 | 20 |
21 */ | 21 */ |
22 | 22 |
23 %{ | 23 %{ |
24 | |
24 #define YYDEBUG 1 | 25 #define YYDEBUG 1 |
25 | 26 |
26 #ifdef HAVE_CONFIG_H | 27 #ifdef HAVE_CONFIG_H |
27 #include <config.h> | 28 #include <config.h> |
28 #endif | 29 #endif |
32 | 33 |
33 extern int octave_tex_lex (YYSTYPE *, void *); | 34 extern int octave_tex_lex (YYSTYPE *, void *); |
34 static void yyerror (text_parser_tex& parser, const char *s); | 35 static void yyerror (text_parser_tex& parser, const char *s); |
35 | 36 |
36 #if defined (GNULIB_NAMESPACE) | 37 #if defined (GNULIB_NAMESPACE) |
37 // Calls to the following functions appear in the generated output from | 38 // Calls to the following functions appear in the generated output |
38 // Bison without the namespace tag. Redefine them so we will use them | 39 // from Bison without the namespace tag. Redefine them so we will use |
39 // via the gnulib namespace. | 40 // them via the gnulib namespace. |
40 #define fclose GNULIB_NAMESPACE::fclose | 41 #define fclose GNULIB_NAMESPACE::fclose |
41 #define fprintf GNULIB_NAMESPACE::fprintf | 42 #define fprintf GNULIB_NAMESPACE::fprintf |
42 #define malloc GNULIB_NAMESPACE::malloc | 43 #define malloc GNULIB_NAMESPACE::malloc |
43 #endif | 44 #endif |
44 | 45 |
45 #define scanner parser.get_scanner () | 46 #define scanner parser.get_scanner () |
47 | |
46 %} | 48 %} |
47 | 49 |
48 %API_PREFIX_DECL% | 50 %API_PREFIX_DECL% |
49 | 51 |
50 %define api.pure | 52 %define api.pure |
51 %parse-param { text_parser_tex& parser } | 53 %parse-param { text_parser_tex& parser } |
52 %lex-param { void *scanner } | 54 %lex-param { void *scanner } |
53 | 55 |
54 %code requires {#include <string>} | 56 %code requires {#include <string>} |
55 | 57 |
56 %union { | 58 %union |
57 /* Leaf symbols produced by the scanner */ | 59 { |
60 // Leaf symbols produced by the scanner. | |
58 char ch; | 61 char ch; |
59 double num; | 62 double num; |
60 int sym; | 63 int sym; |
61 | 64 |
62 /* Used for string buffering */ | 65 // Used for string buffering. |
63 std::string* str; | 66 std::string* str; |
64 | 67 |
65 /* Objects produced by the parser */ | 68 // Objects produced by the parser. |
66 text_element* e_base; | 69 text_element* e_base; |
67 text_element_list* e_list; | 70 text_element_list* e_list; |
68 } | 71 } |
69 | 72 |
70 %token BF IT SL RM | 73 %token BF IT SL RM |
76 %token<sym> SYM | 79 %token<sym> SYM |
77 | 80 |
78 %type<str> simple_string | 81 %type<str> simple_string |
79 %type<e_base> string_element symbol_element | 82 %type<e_base> string_element symbol_element |
80 %type<e_base> superscript_element subscript_element combined_script_element | 83 %type<e_base> superscript_element subscript_element combined_script_element |
81 %type<e_base> font_modifier_element fontname_element fontsize_element color_element | 84 %type<e_base> font_modifier_element fontname_element fontsize_element |
85 %type<e_base> color_element | |
82 %type<e_list> string_element_list scoped_string_element_list | 86 %type<e_list> string_element_list scoped_string_element_list |
83 | 87 |
84 /* Make sure there's no memory leak on parse error. */ | 88 // Make sure there's no memory leak on parse error. |
85 %destructor { } <ch> <num> <sym> | 89 %destructor { } <ch> <num> <sym> |
86 %destructor { delete $$; } <*> | 90 %destructor { delete $$; } <*> |
87 | 91 |
88 %nonassoc SCRIPT | 92 %nonassoc SCRIPT |
89 %nonassoc SUB SUPER | 93 %nonassoc SUB SUPER |
93 | 97 |
94 %start string | 98 %start string |
95 | 99 |
96 %% | 100 %% |
97 | 101 |
98 simple_string : CH | 102 simple_string : CH |
99 { $$ = new std::string (1, $1); } | 103 { $$ = new std::string (1, $1); } |
100 | simple_string CH | 104 | simple_string CH |
101 { $1->append (1, $2); $$ = $1; } | 105 { $1->append (1, $2); $$ = $1; } |
102 ; | 106 ; |
103 | 107 |
104 symbol_element : SYM | 108 symbol_element : SYM |
105 { $$ = new text_element_symbol ($1); } | 109 { $$ = new text_element_symbol ($1); } |
106 ; | 110 ; |
107 | 111 |
108 font_modifier_element : BF | 112 font_modifier_element : BF |
109 { $$ = new text_element_fontstyle (text_element_fontstyle::bold); } | 113 { $$ = new text_element_fontstyle (text_element_fontstyle::bold); } |
110 | IT | 114 | IT |
111 { $$ = new text_element_fontstyle (text_element_fontstyle::italic); } | 115 { $$ = new text_element_fontstyle (text_element_fontstyle::italic); } |
112 | SL | 116 | SL |
113 { $$ = new text_element_fontstyle (text_element_fontstyle::oblique); } | 117 { $$ = new text_element_fontstyle (text_element_fontstyle::oblique); } |
114 | RM | 118 | RM |
115 { $$ = new text_element_fontstyle (text_element_fontstyle::normal); } | 119 { $$ = new text_element_fontstyle (text_element_fontstyle::normal); } |
116 ; | 120 ; |
117 | 121 |
118 fontsize_element : FONTSIZE START NUM END | 122 fontsize_element : FONTSIZE START NUM END |
119 { $$ = new text_element_fontsize ($3); } | 123 { $$ = new text_element_fontsize ($3); } |
120 ; | 124 ; |
121 | 125 |
122 fontname_element : FONTNAME START simple_string END | 126 fontname_element : FONTNAME START simple_string END |
123 { | 127 { |
124 $$ = new text_element_fontname (*$3); | 128 $$ = new text_element_fontname (*$3); |
125 delete $3; | 129 delete $3; |
126 } | 130 } |
127 ; | 131 ; |
128 | 132 |
129 color_element : COLOR START simple_string END | 133 color_element : COLOR START simple_string END |
130 { | 134 { |
131 $$ = new text_element_color (*$3); | 135 $$ = new text_element_color (*$3); |
132 delete $3; | 136 delete $3; |
133 } | 137 } |
134 | COLOR_RGB START NUM NUM NUM END | 138 | COLOR_RGB START NUM NUM NUM END |
135 { | 139 { |
136 $$ = new text_element_color ($3, $4, $5); | 140 $$ = new text_element_color ($3, $4, $5); |
137 } | 141 } |
138 ; | 142 ; |
139 | 143 |
140 string_element : simple_string %prec STR | 144 string_element : simple_string %prec STR |
141 { | 145 { |
142 $$ = new text_element_string (*$1); | 146 $$ = new text_element_string (*$1); |
143 delete $1; | 147 delete $1; |
144 } | 148 } |
145 | scoped_string_element_list | 149 | scoped_string_element_list |
146 /* This is just to avoid a warning in bison. */ | 150 { $$ = $1; } |
147 { $$ = $1; } | 151 | symbol_element |
148 | symbol_element | 152 | font_modifier_element |
149 | font_modifier_element | 153 | fontsize_element |
150 | fontsize_element | 154 | fontname_element |
151 | fontname_element | 155 | color_element |
152 | color_element | 156 | superscript_element %prec SCRIPT |
153 | superscript_element %prec SCRIPT | 157 | subscript_element %prec SCRIPT |
154 | subscript_element %prec SCRIPT | 158 | combined_script_element |
155 | combined_script_element | 159 ; |
156 ; | 160 |
157 | 161 superscript_element : SUPER CH |
158 superscript_element : SUPER CH | 162 { $$ = new text_element_superscript ($2); } |
159 { $$ = new text_element_superscript ($2); } | 163 | SUPER scoped_string_element_list |
160 | SUPER scoped_string_element_list | 164 { $$ = new text_element_superscript ($2); } |
161 { $$ = new text_element_superscript ($2); } | 165 | SUPER symbol_element |
162 | SUPER symbol_element | 166 { $$ = new text_element_superscript ($2); } |
163 { $$ = new text_element_superscript ($2); } | 167 ; |
164 ; | 168 |
165 | 169 subscript_element : SUB CH |
166 subscript_element : SUB CH | 170 { $$ = new text_element_subscript ($2); } |
167 { $$ = new text_element_subscript ($2); } | 171 | SUB scoped_string_element_list |
168 | SUB scoped_string_element_list | 172 { $$ = new text_element_subscript ($2); } |
169 { $$ = new text_element_subscript ($2); } | 173 | SUB symbol_element |
170 | SUB symbol_element | 174 { $$ = new text_element_subscript ($2); } |
171 { $$ = new text_element_subscript ($2); } | 175 ; |
172 ; | 176 |
173 | 177 combined_script_element : subscript_element superscript_element |
174 combined_script_element : subscript_element superscript_element | 178 { $$ = new text_element_combined ($1, $2); } |
175 { $$ = new text_element_combined ($1, $2); } | 179 | superscript_element subscript_element |
176 | superscript_element subscript_element | 180 { $$ = new text_element_combined ($1, $2); } |
177 { $$ = new text_element_combined ($1, $2); } | 181 ; |
178 ; | 182 |
179 | 183 string_element_list : string_element |
180 string_element_list : string_element | 184 { $$ = new text_element_list ($1); } |
181 { $$ = new text_element_list ($1); } | 185 | string_element_list string_element |
182 | string_element_list string_element | 186 { $1->push_back ($2); $$ = $1; } |
183 { $1->push_back ($2); $$ = $1; } | 187 ; |
184 ; | 188 |
185 | 189 scoped_string_element_list : START string_element_list END |
186 scoped_string_element_list : START string_element_list END | 190 { $$ = $2; } |
187 { $$ = $2; } | 191 | START END |
188 | START END | 192 { $$ = new text_element_list (); } |
189 { $$ = new text_element_list (); } | 193 ; |
190 ; | 194 |
191 | 195 string : // empty |
192 string : /* empty */ | 196 { parser.set_parse_result (new text_element_string ("")); } |
193 { parser.set_parse_result (new text_element_string ("")); } | 197 | string_element_list |
194 | string_element_list | 198 { parser.set_parse_result ($1); } |
195 { parser.set_parse_result ($1); } | 199 ; |
196 ; | |
197 | 200 |
198 %% | 201 %% |
199 | 202 |
200 text_element* | 203 text_element* |
201 text_parser_tex::parse (const std::string& s) | 204 text_parser_tex::parse (const std::string& s) |