Mercurial > octave
annotate libinterp/corefcn/oct-tex-parser.yy @ 30564:796f54d4ddbf stable
update Octave Project Developers copyright for the new year
In files that have the "Octave Project Developers" copyright notice,
update for 2021.
In all .txi and .texi files except gpl.txi and gpl.texi in the
doc/liboctave and doc/interpreter directories, change the copyright
to "Octave Project Developers", the same as used for other source
files. Update copyright notices for 2022 (not done since 2019). For
gpl.txi and gpl.texi, change the copyright notice to be "Free Software
Foundation, Inc." and leave the date at 2007 only because this file
only contains the text of the GPL, not anything created by the Octave
Project Developers.
Add Paul Thomas to contributors.in.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 28 Dec 2021 18:22:40 -0500 |
parents | fa65184b7c76 |
children | e88a07dec498 |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 //////////////////////////////////////////////////////////////////////// |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 // |
30564
796f54d4ddbf
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
30123
diff
changeset
|
3 // Copyright (C) 2013-2022 The Octave Project Developers |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
4 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 // See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 // distribution or <https://octave.org/copyright/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
7 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
8 // This file is part of Octave. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
9 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
10 // Octave is free software: you can redistribute it and/or modify it |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
11 // under the terms of the GNU General Public License as published by |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
12 // the Free Software Foundation, either version 3 of the License, or |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
13 // (at your option) any later version. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
14 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
15 // Octave is distributed in the hope that it will be useful, but |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
16 // WITHOUT ANY WARRANTY; without even the implied warranty of |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
18 // GNU General Public License for more details. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
19 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
20 // You should have received a copy of the GNU General Public License |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
21 // along with Octave; see the file COPYING. If not, see |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
22 // <https://www.gnu.org/licenses/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 //////////////////////////////////////////////////////////////////////// |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
25 |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
26 %{ |
20541
e3c0fee87493
style fixes for tex lexer and parser
John W. Eaton <jwe@octave.org>
parents:
19775
diff
changeset
|
27 |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
28 #define YYDEBUG 1 |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
29 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
30 #if defined (HAVE_CONFIG_H) |
22003
2d3972b802ff
use consistent style for including config.h in source files
John W. Eaton <jwe@octave.org>
parents:
21995
diff
changeset
|
31 # include "config.h" |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
32 #endif |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
33 |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
34 #include "text-engine.h" |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
35 |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
36 // oct-tex-parser.h must be included after text-engine.h |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
37 #include "oct-tex-parser.h" |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
38 |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
39 extern int octave_tex_lex (YYSTYPE *, void *); |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
40 static void yyerror (octave::text_parser_tex& parser, const char *s); |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
41 |
30123
fa65184b7c76
maint: use "m_" prefix for member variables in text-engine classes.
Rik <rik@octave.org>
parents:
29358
diff
changeset
|
42 #define m_scanner parser.get_scanner () |
21995
66f3c4e81721
Rename bison/flex internal symbol names to silence "one definition rule" warning
Robert Jenssen <robertjenssen@ozemail.com.au>
parents:
21942
diff
changeset
|
43 #define yyalloc octave_tex_yyalloc |
20541
e3c0fee87493
style fixes for tex lexer and parser
John W. Eaton <jwe@octave.org>
parents:
19775
diff
changeset
|
44 |
21023
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20541
diff
changeset
|
45 #if defined (HAVE_PRAGMA_GCC_DIAGNOSTIC) |
24444
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
46 // Disable this warning for code that is generated by Bison, |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
47 // including grammar rules. Push the current state so we can |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
48 // restore the warning state prior to functions we define at |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
49 // the bottom of the file. |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
50 # pragma GCC diagnostic push |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
51 # pragma GCC diagnostic ignored "-Wold-style-cast" |
21023
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20541
diff
changeset
|
52 #endif |
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20541
diff
changeset
|
53 |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
54 %} |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
55 |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
56 %define api.pure |
25640
7aaf091d39fc
one more fix for parser change... Doh!
John W. Eaton <jwe@octave.org>
parents:
25637
diff
changeset
|
57 // No spaces inside the braces for the prefix definition! |
7aaf091d39fc
one more fix for parser change... Doh!
John W. Eaton <jwe@octave.org>
parents:
25637
diff
changeset
|
58 %define api.prefix {octave_tex_} |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
59 %parse-param { octave::text_parser_tex& parser } |
30123
fa65184b7c76
maint: use "m_" prefix for member variables in text-engine classes.
Rik <rik@octave.org>
parents:
29358
diff
changeset
|
60 %lex-param { void *m_scanner } |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
61 |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
62 %code requires {#include <string>} |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
63 |
20541
e3c0fee87493
style fixes for tex lexer and parser
John W. Eaton <jwe@octave.org>
parents:
19775
diff
changeset
|
64 %union |
e3c0fee87493
style fixes for tex lexer and parser
John W. Eaton <jwe@octave.org>
parents:
19775
diff
changeset
|
65 { |
e3c0fee87493
style fixes for tex lexer and parser
John W. Eaton <jwe@octave.org>
parents:
19775
diff
changeset
|
66 // Leaf symbols produced by the scanner. |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
67 char ch; |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
68 double num; |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
69 int sym; |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
70 |
20541
e3c0fee87493
style fixes for tex lexer and parser
John W. Eaton <jwe@octave.org>
parents:
19775
diff
changeset
|
71 // Used for string buffering. |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
72 std::string *str; |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
73 |
20541
e3c0fee87493
style fixes for tex lexer and parser
John W. Eaton <jwe@octave.org>
parents:
19775
diff
changeset
|
74 // Objects produced by the parser. |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
75 octave::text_element *e_base; |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
76 octave::text_element_list *e_list; |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
77 } |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
78 |
17327
fe6518a1d87c
Move TeX symbol decoding into the lexer (bug #39831).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17276
diff
changeset
|
79 %token BF IT SL RM |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
80 %token FONTNAME FONTSIZE |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
81 %token COLOR COLOR_RGB |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
82 %token START END SUPER SUB |
17327
fe6518a1d87c
Move TeX symbol decoding into the lexer (bug #39831).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17276
diff
changeset
|
83 %token<ch> CH |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
84 %token<num> NUM |
17327
fe6518a1d87c
Move TeX symbol decoding into the lexer (bug #39831).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17276
diff
changeset
|
85 %token<sym> SYM |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
86 |
17327
fe6518a1d87c
Move TeX symbol decoding into the lexer (bug #39831).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17276
diff
changeset
|
87 %type<str> simple_string |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
88 %type<e_base> string_element symbol_element |
17274
0a09d4b40767
Combine successive TeX super- and subscript elements.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17272
diff
changeset
|
89 %type<e_base> superscript_element subscript_element combined_script_element |
20541
e3c0fee87493
style fixes for tex lexer and parser
John W. Eaton <jwe@octave.org>
parents:
19775
diff
changeset
|
90 %type<e_base> font_modifier_element fontname_element fontsize_element |
e3c0fee87493
style fixes for tex lexer and parser
John W. Eaton <jwe@octave.org>
parents:
19775
diff
changeset
|
91 %type<e_base> color_element |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
92 %type<e_list> string_element_list scoped_string_element_list |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
93 |
20541
e3c0fee87493
style fixes for tex lexer and parser
John W. Eaton <jwe@octave.org>
parents:
19775
diff
changeset
|
94 // Make sure there's no memory leak on parse error. |
17327
fe6518a1d87c
Move TeX symbol decoding into the lexer (bug #39831).
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17276
diff
changeset
|
95 %destructor { } <ch> <num> <sym> |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
96 %destructor { delete $$; } <*> |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
97 |
17274
0a09d4b40767
Combine successive TeX super- and subscript elements.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17272
diff
changeset
|
98 %nonassoc SCRIPT |
0a09d4b40767
Combine successive TeX super- and subscript elements.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17272
diff
changeset
|
99 %nonassoc SUB SUPER |
0a09d4b40767
Combine successive TeX super- and subscript elements.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17272
diff
changeset
|
100 |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
101 %nonassoc STR |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
102 %nonassoc CH |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
103 |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
104 %start string |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
105 |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
106 %% |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
107 |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
108 simple_string : CH |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
109 { $$ = new std::string (1, $1); } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
110 | simple_string CH |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
111 { $1->append (1, $2); $$ = $1; } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
112 ; |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
113 |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
114 symbol_element : SYM |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
115 { $$ = new octave::text_element_symbol ($1); } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
116 ; |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
117 |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
118 font_modifier_element : BF |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
119 { $$ = new octave::text_element_fontstyle (octave::text_element_fontstyle::bold); } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
120 | IT |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
121 { $$ = new octave::text_element_fontstyle (octave::text_element_fontstyle::italic); } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
122 | SL |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
123 { $$ = new octave::text_element_fontstyle (octave::text_element_fontstyle::oblique); } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
124 | RM |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
125 { $$ = new octave::text_element_fontstyle (octave::text_element_fontstyle::normal); } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
126 ; |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
127 |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
128 fontsize_element : FONTSIZE START NUM END |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
129 { $$ = new octave::text_element_fontsize ($3); } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
130 ; |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
131 |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
132 fontname_element : FONTNAME START simple_string END |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
133 { |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
134 $$ = new octave::text_element_fontname (*$3); |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
135 delete $3; |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
136 } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
137 ; |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
138 |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
139 color_element : COLOR START simple_string END |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
140 { |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
141 $$ = new octave::text_element_color (*$3); |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
142 delete $3; |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
143 } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
144 | COLOR_RGB START NUM NUM NUM END |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
145 { |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
146 $$ = new octave::text_element_color ($3, $4, $5); |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
147 } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
148 ; |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
149 |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
150 string_element : simple_string %prec STR |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
151 { |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
152 $$ = new octave::text_element_string (*$1); |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
153 delete $1; |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
154 } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
155 | scoped_string_element_list |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
156 { $$ = $1; } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
157 | symbol_element |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
158 | font_modifier_element |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
159 | fontsize_element |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
160 | fontname_element |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
161 | color_element |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
162 | superscript_element %prec SCRIPT |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
163 | subscript_element %prec SCRIPT |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
164 | combined_script_element |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
165 ; |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
166 |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
167 superscript_element : SUPER CH |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
168 { $$ = new octave::text_element_superscript ($2); } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
169 | SUPER scoped_string_element_list |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
170 { $$ = new octave::text_element_superscript ($2); } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
171 | SUPER symbol_element |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
172 { $$ = new octave::text_element_superscript ($2); } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
173 ; |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
174 |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
175 subscript_element : SUB CH |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
176 { $$ = new octave::text_element_subscript ($2); } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
177 | SUB scoped_string_element_list |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
178 { $$ = new octave::text_element_subscript ($2); } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
179 | SUB symbol_element |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
180 { $$ = new octave::text_element_subscript ($2); } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
181 ; |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
182 |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
183 combined_script_element : subscript_element superscript_element |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
184 { $$ = new octave::text_element_combined ($1, $2); } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
185 | superscript_element subscript_element |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
186 { $$ = new octave::text_element_combined ($1, $2); } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
187 ; |
17274
0a09d4b40767
Combine successive TeX super- and subscript elements.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17272
diff
changeset
|
188 |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
189 string_element_list : string_element |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
190 { $$ = new octave::text_element_list ($1); } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
191 | string_element_list string_element |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
192 { $1->push_back ($2); $$ = $1; } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
193 ; |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
194 |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
195 scoped_string_element_list |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
196 : START string_element_list END |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
197 { $$ = $2; } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
198 | START END |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
199 { $$ = new octave::text_element_list (); } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
200 ; |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
201 |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
202 string : // empty |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
203 { parser.set_parse_result (new octave::text_element_string ("")); } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
204 | string_element_list |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
205 { parser.set_parse_result ($1); } |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
206 ; |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
207 |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
208 %% |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
209 |
21023
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20541
diff
changeset
|
210 #if defined (HAVE_PRAGMA_GCC_DIAGNOSTIC) |
24444
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
211 // Restore prevailing warning state for remainder of the file. |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
212 # pragma GCC diagnostic pop |
21023
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20541
diff
changeset
|
213 #endif |
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20541
diff
changeset
|
214 |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
215 namespace octave |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
216 { |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
217 text_element* |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
218 text_parser_tex::parse (const std::string& s) |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
219 { |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
220 octave_tex_debug = 0; |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
221 |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
222 if (init_lexer (s)) |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
223 { |
30123
fa65184b7c76
maint: use "m_" prefix for member variables in text-engine classes.
Rik <rik@octave.org>
parents:
29358
diff
changeset
|
224 m_result = nullptr; |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
225 |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
226 if (octave_tex_parse (*this) == 0) |
30123
fa65184b7c76
maint: use "m_" prefix for member variables in text-engine classes.
Rik <rik@octave.org>
parents:
29358
diff
changeset
|
227 return m_result; |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
228 } |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
229 |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
230 return new text_element_string (s); |
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
231 } |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
232 } |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
233 |
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
234 static void |
25643
afb5288a25ad
move text engine classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25640
diff
changeset
|
235 yyerror (octave::text_parser_tex&, const char *s) |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
236 { |
17272
8ce6cdd272eb
Support TeX elements in FreeType renderer.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
17269
diff
changeset
|
237 fprintf (stderr, "TeX parse error: %s\n", s); |
17269
5b088598df1d
Add simple TeX parser based on flex/bison.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
238 } |