Mercurial > octave-nkf
view libinterp/corefcn/oct-tex-lexer.in.ll @ 20557:818122703f1e
Use CXXFLAGS to build *.df files (fix regression by 0ce7d8303152)
* libinterp/module.mk, libinterp/corefcn/module.mk,
libinterp/octave-value/module.mk: add CXXFLAGS since mumble_CXXFLAGS only
includes AM_CXXFLAGS and WARN_CXXFLAGS, and automake does not add it
automatically for this custome rules.
author | Carnë Draug <carandraug@octave.org> |
---|---|
date | Sat, 26 Sep 2015 16:32:28 +0100 |
parents | a3577622952c |
children | e3c0fee87493 |
line wrap: on
line source
/* Copyright (C) 2013-2015 Michael Goffioul This file is part of Octave. Octave is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. Octave is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Octave; see the file COPYING. If not, see <http://www.gnu.org/licenses/>. */ %option prefix = "octave_tex_" %option noyywrap %option reentrant %option bison-bridge %option noyyalloc %option noyyrealloc %option noyyfree %top { #ifdef HAVE_CONFIG_H #include <config.h> #endif } %x NUM_MODE %x MAYBE_NUM_MODE %{ // The generated code may include unistd.h. We need that to happen // before defining isatty to be prefixed with the gnulib namespace // identifier. #include <sys/types.h> #include <unistd.h> #include "txt-eng.h" #include "oct-tex-parser.h" // FIXME: with bison 3.x, OCTAVE_TEX_STYPE appears in the generated // oct-parse.h file, but there is no definition for YYSTYPE, which is // needed by the code that is generated by flex. I can't seem to find a // way to tell flex to use OCTAVE_TEX_STYPE instead of YYSTYPE in the code // it generates, or to tell bison to provide the definition of YYSTYPE // in the generated oct-parse.h file. #if defined (OCTAVE_TEX_STYPE_IS_DECLARED) && ! defined YYSTYPE #define YYSTYPE OCTAVE_TEX_STYPE #endif #if defined (GNULIB_NAMESPACE) // Calls to the following functions appear in the generated output from // flex without the namespace tag. Redefine them so we will use them // via the gnulib namespace. #define fprintf GNULIB_NAMESPACE::fprintf #define fread GNULIB_NAMESPACE::fread #define fwrite GNULIB_NAMESPACE::fwrite #define getc GNULIB_NAMESPACE::getc #define isatty GNULIB_NAMESPACE::isatty #define malloc GNULIB_NAMESPACE::malloc #define realloc GNULIB_NAMESPACE::realloc #endif %} D [0-9] NUM (({D}+\.?{D}*)|(\.{D}+)) %% %{ // Numeric values %} <NUM_MODE>{NUM} { int nread; nread = sscanf (yytext, "%lf", &(yylval->num)); if (nread == 1) return NUM; } <NUM_MODE>[ \t]+ { } <NUM_MODE>"\n"|. { yyless (0); BEGIN (INITIAL); } <MAYBE_NUM_MODE>"{" { BEGIN (NUM_MODE); return START; } <MAYBE_NUM_MODE>"\n"|. { yyless (0); BEGIN (INITIAL); } %{ // Simple commands %} "\\bf" { return BF; } "\\it" { return IT; } "\\sl" { return SL; } "\\rm" { return RM; } %{ // Generic font commands %} "\\fontname" { return FONTNAME; } "\\fontsize" { BEGIN (MAYBE_NUM_MODE); return FONTSIZE; } "\\color[rgb]" { BEGIN (MAYBE_NUM_MODE); return COLOR_RGB; } "\\color" { return COLOR; } %{ // Special characters %} "{" { return START; } "}" { return END; } "^" { return SUPER; } "_" { return SUB; } "\\{" | "\\}" | "\\^" | "\\_" | "\\\\" { yylval->ch = yytext[1]; return CH; } %{ // Symbols %} @SYMBOL_RULES@ %{ // Generic character %} "\n" | . { yylval->ch = yytext[0]; return CH; } %% void * octave_tex_alloc (yy_size_t size, yyscan_t) { return malloc (size); } void * octave_tex_realloc (void *ptr, yy_size_t size, yyscan_t) { return realloc (ptr, size); } void octave_tex_free (void *ptr, yyscan_t) { free (ptr); } bool text_parser_tex::init_lexer (const std::string& s) { if (! scanner) octave_tex_lex_init (&scanner); if (scanner) { if (buffer_state) { octave_tex__delete_buffer (reinterpret_cast<YY_BUFFER_STATE> (buffer_state), scanner); buffer_state = 0; } buffer_state = octave_tex__scan_bytes (s.data (), s.length (), scanner); } return (scanner && buffer_state); } void text_parser_tex::destroy_lexer (void) { if (buffer_state) { octave_tex__delete_buffer (reinterpret_cast<YY_BUFFER_STATE> (buffer_state), scanner); buffer_state = 0; } if (scanner) { octave_tex_lex_destroy (scanner); scanner = 0; } }