1 /* This file is part of QJson
2 *
3 * Copyright (C) 2008 Flavio Castelli <flavio.castelli@gmail.com>
4 * Copyright (C) 2013 Silvio Moioli <silvio@moioli.net>
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License version 2.1, as published by the Free Software Foundation.
9 *
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with this library; see the file COPYING.LIB. If not, write to
18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 * Boston, MA 02110-1301, USA.
20 */
21 #include "json_scanner.cc"
22
23 #include "qjson_debug.h"
24 #include "json_scanner.h"
25 #include "json_parser.hh"
26
27 #include <ctype.h>
28
29 #include <QtCore/QDebug>
30 #include <QtCore/QRegExp>
31
32 #include <cassert>
33
34
JSonScanner(QIODevice * io)35 JSonScanner::JSonScanner(QIODevice* io)
36 : m_allowSpecialNumbers(false),
37 m_io (io),
38 m_criticalError(false),
39 m_C_locale(QLocale::C)
40 {
41
42 }
43
~JSonScanner()44 JSonScanner::~JSonScanner()
45 {
46 }
47
allowSpecialNumbers(bool allow)48 void JSonScanner::allowSpecialNumbers(bool allow) {
49 m_allowSpecialNumbers = allow;
50 }
51
yylex(YYSTYPE * yylval,yy::location * yylloc)52 int JSonScanner::yylex(YYSTYPE* yylval, yy::location *yylloc) {
53 m_yylval = yylval;
54 m_yylloc = yylloc;
55 m_yylloc->step();
56 int result = yylex();
57
58 if (m_criticalError) {
59 return -1;
60 }
61
62 return result;
63 }
64
LexerInput(char * buf,int max_size)65 int JSonScanner::LexerInput(char* buf, int max_size) {
66 if (!m_io->isOpen()) {
67 qCritical() << "JSonScanner::yylex - io device is not open";
68 m_criticalError = true;
69 return 0;
70 }
71
72 int readBytes = m_io->read(buf, max_size);
73 if(readBytes < 0) {
74 qCritical() << "JSonScanner::yylex - error while reading from io device";
75 m_criticalError = true;
76 return 0;
77 }
78
79 return readBytes;
80 }
81
82
83