From a21571a65248c034715f67173e6bb15362f3160f Mon Sep 17 00:00:00 2001 From: Eivind Kvedalen Date: Thu, 17 Mar 2016 00:32:00 +0100 Subject: [PATCH] Spreadsheet: Removed own expression parser and instead use the one in App. --- .../Drawing/App/FeatureViewSpreadsheet.cpp | 12 +- src/Mod/Spreadsheet/App/AppSpreadsheet.cpp | 4 - src/Mod/Spreadsheet/App/CMakeLists.txt | 4 - src/Mod/Spreadsheet/App/Cell.cpp | 5 +- src/Mod/Spreadsheet/App/Cell.h | 11 +- src/Mod/Spreadsheet/App/ExpressionParser.l | 275 --- .../Spreadsheet/App/ExpressionParser.tab.c | 2031 ----------------- .../Spreadsheet/App/ExpressionParser.tab.h | 75 - src/Mod/Spreadsheet/App/ExpressionParser.y | 187 -- .../Spreadsheet/App/PropertyColumnWidths.cpp | 3 +- .../Spreadsheet/App/PropertyRowHeights.cpp | 3 +- src/Mod/Spreadsheet/App/PropertySheet.cpp | 3 +- src/Mod/Spreadsheet/App/PropertySheet.h | 84 +- src/Mod/Spreadsheet/App/Range.cpp | 96 - src/Mod/Spreadsheet/App/Range.h | 91 - src/Mod/Spreadsheet/App/Sheet.cpp | 2 - src/Mod/Spreadsheet/App/Sheet.h | 71 +- src/Mod/Spreadsheet/App/SheetPyImp.cpp | 2 +- .../Spreadsheet/App/SpreadsheetExpression.cpp | 485 ---- .../Spreadsheet/App/SpreadsheetExpression.h | 107 - src/Mod/Spreadsheet/App/Utils.cpp | 148 -- src/Mod/Spreadsheet/App/Utils.h | 47 - src/Mod/Spreadsheet/Gui/Command.cpp | 5 +- src/Mod/Spreadsheet/Gui/PropertiesDialog.cpp | 5 +- src/Mod/Spreadsheet/Gui/PropertiesDialog.h | 4 +- src/Mod/Spreadsheet/Gui/SheetModel.cpp | 1 - src/Mod/Spreadsheet/Gui/SheetModel.h | 3 +- src/Mod/Spreadsheet/Gui/SheetTableView.cpp | 5 +- src/Mod/Spreadsheet/Gui/SheetTableView.h | 4 +- src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp | 6 +- src/Mod/Spreadsheet/Gui/SpreadsheetView.h | 2 +- .../Gui/ViewProviderSpreadsheet.cpp | 3 +- src/Mod/Spreadsheet/Gui/Workbench.cpp | 3 +- 33 files changed, 121 insertions(+), 3666 deletions(-) delete mode 100644 src/Mod/Spreadsheet/App/ExpressionParser.l delete mode 100644 src/Mod/Spreadsheet/App/ExpressionParser.tab.c delete mode 100644 src/Mod/Spreadsheet/App/ExpressionParser.tab.h delete mode 100644 src/Mod/Spreadsheet/App/ExpressionParser.y delete mode 100644 src/Mod/Spreadsheet/App/Range.cpp delete mode 100644 src/Mod/Spreadsheet/App/Range.h delete mode 100644 src/Mod/Spreadsheet/App/SpreadsheetExpression.cpp delete mode 100644 src/Mod/Spreadsheet/App/SpreadsheetExpression.h diff --git a/src/Mod/Drawing/App/FeatureViewSpreadsheet.cpp b/src/Mod/Drawing/App/FeatureViewSpreadsheet.cpp index bf89366ba9ff..1cb6e5488a94 100644 --- a/src/Mod/Drawing/App/FeatureViewSpreadsheet.cpp +++ b/src/Mod/Drawing/App/FeatureViewSpreadsheet.cpp @@ -151,17 +151,17 @@ App::DocumentObjectExecReturn *FeatureViewSpreadsheet::execute(void) float coloffset = 0.0; float cellheight = 100; float cellwidth = 100; - std::string celltext; + std::string celltext; Spreadsheet::Sheet* sheet = static_cast(link); std::vector skiplist; - for (std::vector::const_iterator col = columns.begin(); col != columns.end(); ++col) { + for (std::vector::const_iterator col = columns.begin(); col != columns.end(); ++col) { // create a group for each column result << " " << endl; for (std::vector::const_iterator row = rows.begin(); row != rows.end(); ++row) { // get cell size std::stringstream srow; srow << (*row); - Spreadsheet::CellAddress address((*col) + srow.str()); + App::CellAddress address((*col) + srow.str()); cellwidth = sheet->getColumnWidth(address.col()); cellheight = sheet->getRowHeight(address.row()); celltext = ""; @@ -216,7 +216,7 @@ App::DocumentObjectExecReturn *FeatureViewSpreadsheet::execute(void) if (cell->getSpans(rowspan,colspan)) { for (int i=0; i 0) cellwidth = cellwidth + sheet->getColumnWidth(nextcell.col()); if (j > 0) @@ -227,7 +227,7 @@ App::DocumentObjectExecReturn *FeatureViewSpreadsheet::execute(void) } } cell->getAlignment(alignment); - } + } // skip cell if found in skiplist if (std::find(skiplist.begin(), skiplist.end(), address.toString()) == skiplist.end()) { result << " " << celltext << "" << endl; - } + } rowoffset = rowoffset + cellheight; } result << " " << endl; diff --git a/src/Mod/Spreadsheet/App/AppSpreadsheet.cpp b/src/Mod/Spreadsheet/App/AppSpreadsheet.cpp index 3b9a17ec66d7..ff25d9efbc88 100644 --- a/src/Mod/Spreadsheet/App/AppSpreadsheet.cpp +++ b/src/Mod/Spreadsheet/App/AppSpreadsheet.cpp @@ -20,8 +20,6 @@ #include #include "Sheet.h" -#include "SpreadsheetExpression.h" - namespace Spreadsheet { class Module : public Py::ExtensionModule @@ -46,8 +44,6 @@ PyMODINIT_FUNC initSpreadsheet() { Spreadsheet::PropertySheet::init(); Spreadsheet::Sheet::init(); - Spreadsheet::AggregateFunctionExpression::init(); - Spreadsheet::RangeExpression::init(); new Spreadsheet::Module(); Base::Console().Log("Loading Spreadsheet module... done\n"); diff --git a/src/Mod/Spreadsheet/App/CMakeLists.txt b/src/Mod/Spreadsheet/App/CMakeLists.txt index 1173078d7c2c..ebe21bcdfcd8 100644 --- a/src/Mod/Spreadsheet/App/CMakeLists.txt +++ b/src/Mod/Spreadsheet/App/CMakeLists.txt @@ -17,8 +17,6 @@ set(Spreadsheet_LIBS ) set(Spreadsheet_SRCS - SpreadsheetExpression.cpp - SpreadsheetExpression.h Cell.cpp Cell.h DisplayUnit.h @@ -44,8 +42,6 @@ set(Spreadsheet_SRCS SheetObserver.h Utils.cpp Utils.h - Range.h - Range.cpp AppSpreadsheet.cpp ) diff --git a/src/Mod/Spreadsheet/App/Cell.cpp b/src/Mod/Spreadsheet/App/Cell.cpp index 750b5c06bdfe..7df1ca66af58 100644 --- a/src/Mod/Spreadsheet/App/Cell.cpp +++ b/src/Mod/Spreadsheet/App/Cell.cpp @@ -30,7 +30,7 @@ #include #include #include -#include "SpreadsheetExpression.h" +#include #include "Sheet.h" #include @@ -38,6 +38,7 @@ #define __func__ __FUNCTION__ #endif +using namespace App; using namespace Base; using namespace Spreadsheet; @@ -216,7 +217,7 @@ void Cell::setContent(const char * value) if (value != 0) { if (*value == '=') { try { - expr = Spreadsheet::ExpressionParser::parse(owner->sheet(), value + 1); + expr = App::ExpressionParser::parse(owner->sheet(), value + 1); } catch (Base::Exception & e) { expr = new App::StringExpression(owner->sheet(), value); diff --git a/src/Mod/Spreadsheet/App/Cell.h b/src/Mod/Spreadsheet/App/Cell.h index 2f2964ff8ce9..84b200027796 100644 --- a/src/Mod/Spreadsheet/App/Cell.h +++ b/src/Mod/Spreadsheet/App/Cell.h @@ -26,6 +26,7 @@ #include #include #include +#include #include "DisplayUnit.h" #include "Utils.h" @@ -49,7 +50,7 @@ class SpreadsheetExport Cell { public: - Cell(const CellAddress & _address, PropertySheet * _owner); + Cell(const App::CellAddress & _address, PropertySheet * _owner); Cell(const Cell & other); @@ -101,7 +102,7 @@ class SpreadsheetExport Cell { bool hasException() const { return isUsed(EXCEPTION_SET) || isUsed(PARSE_EXCEPTION_SET) || isUsed(RESOLVE_EXCEPTION_SET); } - void moveAbsolute(CellAddress newAddress); + void moveAbsolute(App::CellAddress newAddress); void restore(Base::XMLReader &reader); @@ -117,7 +118,7 @@ class SpreadsheetExport Cell { void visit(App::ExpressionVisitor & v); - CellAddress getAddress() const { return address; } + App::CellAddress getAddress() const { return address; } /* Alignment */ static const int ALIGNMENT_LEFT; @@ -172,7 +173,7 @@ class SpreadsheetExport Cell { static const int PARSE_EXCEPTION_SET; static const int RESOLVE_EXCEPTION_SET; - CellAddress address; + App::CellAddress address; PropertySheet * owner; int used; @@ -187,7 +188,7 @@ class SpreadsheetExport Cell { int rowSpan; int colSpan; std::string exceptionStr; - CellAddress anchor; + App::CellAddress anchor; }; } diff --git a/src/Mod/Spreadsheet/App/ExpressionParser.l b/src/Mod/Spreadsheet/App/ExpressionParser.l deleted file mode 100644 index 6d9eb00c40f1..000000000000 --- a/src/Mod/Spreadsheet/App/ExpressionParser.l +++ /dev/null @@ -1,275 +0,0 @@ -%{ -/* Lexer for the FreeCAD Expression language */ -/* (c) 2010 Juergen Riegel LGPL */ -/* (c) 2015 Eivind Kvedalen LGPL */ - - -/* This disables inclusion of unistd.h, which is not available under Visual C++ - * on Win32. The C++ scanner uses STL streams instead. */ -#define YY_NO_UNISTD_H - -#ifdef _MSC_VER -#define strdup _strdup -#endif - -extern std::stack functions; /**< Function identifier */ - -%} - -/*** Flex Declarations and Options ***/ - -/* change the name of the scanner class. */ -%option prefix="ExpressionParser" - -/* the manual says "somewhat more optimized" */ -%option batch - -%option never-interactive - -/* no support for include files is planned */ -%option noyywrap nounput - -Cc ([\x00-\x1f\x7f]|\xc2[\x80-\x9f]) -Cf (\xc2\xad|\xd8[\x80-\x85\x9c]|\xdb\x9d|\xdc\x8f|\xe1(\xa0\x8e)|\xe2(\x80[\x8b-\x8f\xaa-\xae]|\x81[\xa0-\xa4\xa6-\xaf])|\xef(\xbb\xbf|\xbf[\xb9-\xbb])|\xf0(\x91(\x82\xbd))|\xf3(\xa0(\x80\x81))) -Cn11 (\xcd[\xb8-\xb9]|\xce[\x80-\x83\x8b\x8d\xa2]|\xd4\xb0|\xd5[\x97-\x98\xa0]|\xd6[\x88\x8b-\x8c\x90]|\xd7[\x88-\x8f\xab-\xaf\xb5-\xbf]|\xd8\x9d|\xdc\x8e|\xdd[\x8b-\x8c]|\xde[\xb2-\xbf]|\xdf[\xbb-\xbf]|\xe0(\xa0[\xae-\xaf\xbf]|\xa1[\x9c-\x9d\x9f-\xbf]|\xa2[\x80-\x9f\xb3-\xbf]|\xa3[\x80-\xa3]|\xa6[\x84\x8d-\x8e\x91-\x92\xa9\xb1\xb3-\xb5\xba-\xbb]|\xa7[\x85-\x86\x89-\x8a\x8f-\x96\x98-\x9b\x9e\xa4-\xa5\xbc-\xbf]|\xa8[\x80\x84\x8b-\x8e\x91-\x92\xa9\xb1\xb4\xb7\xba-\xbb\xbd]|\xa9[\x83-\x86\x89-\x8a\x8e-\x90\x92-\x98\x9d\x9f-\xa5\xb6-\xbf]|\xaa[\x80\x84\x8e\x92\xa9\xb1\xb4\xba-\xbb]|\xab[\x86\x8a\x8e-\x8f\x91-\x9f\xa4-\xa5\xb2-\xbf]|\xac[\x80\x84\x8d-\x8e\x91-\x92\xa9\xb1\xb4\xba-\xbb]|\xad[\x85-\x86\x89-\x8a\x8e-\x95\x98-\x9b\x9e\xa4-\xa5\xb8-\xbf]|\xae[\x80-\x81\x84\x8b-\x8d\x91\x96-\x98\x9b\x9d\xa0-\xa2\xa5-\xa7\xab-\xad\xba-\xbd]|\xaf[\x83-\x85\x89\x8e-\x8f\x91-\x96\x98-\xa5\xbb-\xbf]|\xb0[\x84\x8d\x91\xa9\xba-\xbc]|\xb1[\x85\x89\x8e-\x94\x97\x9a-\x9f\xa4-\xa5\xb0-\xb7]|\xb2[\x80\x84\x8d\x91\xa9\xb4\xba-\xbb]|\xb3[\x85\x89\x8e-\x94\x97-\x9d\x9f\xa4-\xa5\xb0\xb3-\xbf]|\xb4[\x80\x84\x8d\x91\xbb-\xbc]|\xb5[\x85\x89\x8f-\x96\x98-\x9f\xa4-\xa5\xb6-\xb8]|\xb6[\x80-\x81\x84\x97-\x99\xb2\xbc\xbe-\xbf]|\xb7[\x87-\x89\x8b-\x8d])) -Cn12 (\xe0(\xb7[\x8e\x95\x97\xa0-\xa5\xb0-\xb1\xb5-\xbf]|\xb8[\x80\xbb-\xbe]|\xb9[\x9c-\xbf]|\xba[\x80\x83\x85-\x86\x89\x8b-\x8c\x8e-\x93\x98\xa0\xa4\xa6\xa8-\xa9\xac\xba\xbe-\xbf]|\xbb[\x85\x87\x8e-\x8f\x9a-\x9b\xa0-\xbf]|\xbd[\x88\xad-\xb0]|\xbe[\x98\xbd]|\xbf[\x8d\x9b-\xbf])|\xe1(\x83[\x86\x88-\x8c\x8e-\x8f]|\x89[\x89\x8e-\x8f\x97\x99\x9e-\x9f]|\x8a[\x89\x8e-\x8f\xb1\xb6-\xb7\xbf]|\x8b[\x81\x86-\x87\x97]|\x8c[\x91\x96-\x97]|\x8d[\x9b-\x9c\xbd-\xbf]|\x8e[\x9a-\x9f]|\x8f[\xb5-\xbf]|\x9a[\x9d-\x9f]|\x9b[\xb9-\xbf]|\x9c[\x8d\x95-\x9f\xb7-\xbf]|\x9d[\x94-\x9f\xad\xb1\xb4-\xbf]|\x9f[\x9e-\x9f\xaa-\xaf\xba-\xbf]|\xa0[\x8f\x9a-\x9f]|\xa1[\xb8-\xbf]|\xa2[\xab-\xaf]|\xa3[\xb6-\xbf]|\xa4[\x9f\xac-\xaf\xbc-\xbf]|\xa5[\x81-\x83\xae-\xaf\xb5-\xbf]|\xa6[\xac-\xaf]|\xa7[\x8a-\x8f\x9b-\x9d]|\xa8[\x9c-\x9d]|\xa9[\x9f\xbd-\xbe]|\xaa[\x8a-\x8f\x9a-\x9f\xae-\xaf\xbf]|\xab[\x80-\xbf]|\xad[\x8c-\x8f\xbd-\xbf]|\xaf[\xb4-\xbb]|\xb0[\xb8-\xba]|\xb1[\x8a-\x8c]|\xb2[\x80-\xbc])) -Cn1 ({Cn11}|{Cn12}) -Cn21 (\xe1(\xb2[\xbd-\xbf]|\xb3[\x88-\x8f\xb7\xba-\xbf]|\xb7[\xb6-\xbb]|\xbc[\x96-\x97\x9e-\x9f]|\xbd[\x86-\x87\x8e-\x8f\x98\x9a\x9c\x9e\xbe-\xbf]|\xbe\xb5|\xbf[\x85\x94-\x95\x9c\xb0-\xb1\xb5\xbf])|\xe2(\x81[\xa5\xb2-\xb3]|\x82[\x8f\x9d-\x9f\xbe-\xbf]|\x83[\x80-\x8f\xb1-\xbf]|\x86[\x8a-\x8f]|\x8f[\xbb-\xbf]|\x90[\xa7-\xbf]|\x91[\x8b-\x9f]|\xad[\xb4-\xb5]|\xae[\x96-\x97\xba-\xbc]|\xaf[\x89\x92-\xbf]|\xb0\xaf|\xb1\x9f|\xb3[\xb4-\xb8]|\xb4[\xa6\xa8-\xac\xae-\xaf]|\xb5[\xa8-\xae\xb1-\xbe]|\xb6[\x97-\x9f\xa7\xaf\xb7\xbf]|\xb7[\x87\x8f\x97\x9f]|\xb9[\x83-\xbf]|\xba\x9a|\xbb[\xb4-\xbf]|\xbf[\x96-\xaf\xbc-\xbf])|\xe3(\x81\x80|\x82[\x97-\x98]|\x84[\x80-\x84\xae-\xb0]|\x86[\x8f\xbb-\xbf]|\x87[\xa4-\xaf]|\x88\x9f|\x8b\xbf)|\xe4(\xb6[\xb6-\xbf])|\xe9(\xbf[\x8d-\xbf])|\xea(\x92[\x8d-\x8f]|\x93[\x87-\x8f]|\x98[\xac-\xbf]|\x9a\x9e|\x9b[\xb8-\xbf]|\x9e[\x8f\xae-\xaf\xb2-\xbf]|\x9f[\x80-\x92])) -Cn22 (\xea(\x9f[\x93-\xb6]|\xa0[\xac-\xaf\xba-\xbf]|\xa1[\xb8-\xbf]|\xa3[\x85-\x8d\x9a-\x9f\xbc-\xbf]|\xa5[\x94-\x9e\xbd-\xbf]|\xa7[\x8e\x9a-\x9d\xbf]|\xa8[\xb7-\xbf]|\xa9[\x8e-\x8f\x9a-\x9b]|\xab[\x83-\x9a\xb7-\xbf]|\xac[\x80\x87-\x88\x8f-\x90\x97-\x9f\xa7\xaf]|\xad[\xa0-\xa3\xa6-\xbf]|\xae[\x80-\xbf]|\xaf[\xae-\xaf\xba-\xbf])|\xed(\x9e[\xa4-\xaf]|\x9f[\x87-\x8a\xbc-\xbf])|\xef(\xa9[\xae-\xaf]|\xab[\x9a-\xbf]|\xac[\x87-\x92\x98-\x9c\xb7\xbd\xbf]|\xad[\x82\x85]|\xaf[\x82-\x92]|\xb5[\x80-\x8f]|\xb6[\x90-\x91]|\xb7[\x88-\xaf\xbe-\xbf]|\xb8[\x9a-\x9f\xae-\xaf]|\xb9[\x93\xa7\xac-\xaf\xb5]|\xbb[\xbd-\xbe]|\xbc\x80|\xbe\xbf|\xbf[\x80-\x81\x88-\x89\x90-\x91\x98-\x99\x9d-\x9f\xa7\xaf-\xb8\xbe-\xbf])|\xf0(\x90(\x80[\x8c\xa7\xbb\xbe]|\x8e\x9e|\xa0[\x89\xb6]|\xa1\x96|\xa8[\x84\x94\x98])|\x91(\x84\xb5|\x88\x92|\x8c[\x84\xa9\xb1\xb4])|\x92(\x91\xaf)|\x96(\xa9\x9f|\xad[\x9a\xa2])|\x9d(\x91\x95|\x92[\x9d\xad\xba\xbc]|\x93\x84|\x94[\x86\x95\x9d\xba\xbf]|\x95[\x85\x91])|\x9e(\xb8[\x84\xa0\xa3\xa8\xb3\xb8\xba]|\xb9[\x88\x8a\x8c\x90\x93\x98\x9a\x9c\x9e\xa0\xa3\xab\xb3\xb8\xbd\xbf]|\xba[\x8a\xa4\xaa])|\x9f(\x83[\x80\x90]|\x84\xaf|\x93\xbf|\x95\xba|\x96\xa4))) -Cn2 ({Cn21}|{Cn22}) -Cn ({Cn1}|{Cn2}) -Co (\xee(\x80[\x80-\xbf]|\x81[\x80-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xbf]|\x9f[\x80-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\xbf]|\xa3[\x80-\xbf]|\xa4[\x80-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\xbf]|\xa7[\x80-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\xbf]|\xac[\x80-\xbf]|\xad[\x80-\xbf]|\xae[\x80-\xbf]|\xaf[\x80-\xbf]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbf]|\xb5[\x80-\xbf]|\xb6[\x80-\xbf]|\xb7[\x80-\xbf]|\xb8[\x80-\xbf]|\xb9[\x80-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbf]|\xbc[\x80-\xbf]|\xbd[\x80-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\xbf])|\xef(\x80[\x80-\xbf]|\x81[\x80-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xbf]|\x9f[\x80-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\xbf]|\xa3[\x80-\xbf])) -Ll1 ([a-z]|\xc2\xb5|\xc3[\x9f-\xb6\xb8-\xbf]|\xc4[\x81\x83\x85\x87\x89\x8b\x8d\x8f\x91\x93\x95\x97\x99\x9b\x9d\x9f\xa1\xa3\xa5\xa7\xa9\xab\xad\xaf\xb1\xb3\xb5\xb7-\xb8\xba\xbc\xbe]|\xc5[\x80\x82\x84\x86\x88-\x89\x8b\x8d\x8f\x91\x93\x95\x97\x99\x9b\x9d\x9f\xa1\xa3\xa5\xa7\xa9\xab\xad\xaf\xb1\xb3\xb5\xb7\xba\xbc\xbe-\xbf]|\xc6[\x80\x83\x85\x88\x8c-\x8d\x92\x95\x99-\x9b\x9e\xa1\xa3\xa5\xa8\xaa-\xab\xad\xb0\xb4\xb6\xb9-\xba\xbd-\xbf]|\xc7[\x86\x89\x8c\x8e\x90\x92\x94\x96\x98\x9a\x9c-\x9d\x9f\xa1\xa3\xa5\xa7\xa9\xab\xad\xaf-\xb0\xb3\xb5\xb9\xbb\xbd\xbf]|\xc8[\x81\x83\x85\x87\x89\x8b\x8d\x8f\x91\x93\x95\x97\x99\x9b\x9d\x9f\xa1\xa3\xa5\xa7\xa9\xab\xad\xaf\xb1\xb3-\xb9\xbc\xbf]|\xc9[\x80\x82\x87\x89\x8b\x8d\x8f-\xbf]|\xca[\x80-\x93\x95-\xaf]|\xcd[\xb1\xb3\xb7\xbb-\xbd]|\xce[\x90\xac-\xbf]|\xcf[\x80-\x8e\x90-\x91\x95-\x97\x99\x9b\x9d\x9f\xa1\xa3\xa5\xa7\xa9\xab\xad\xaf-\xb3\xb5\xb8\xbb-\xbc]|\xd0[\xb0-\xbf]|\xd1[\x80-\x9f\xa1\xa3\xa5\xa7\xa9\xab\xad\xaf\xb1\xb3\xb5\xb7\xb9\xbb\xbd\xbf]|\xd2[\x81\x8b\x8d\x8f\x91\x93\x95\x97\x99\x9b\x9d\x9f\xa1\xa3\xa5\xa7\xa9\xab\xad\xaf\xb1\xb3\xb5\xb7\xb9\xbb\xbd\xbf]|\xd3[\x82\x84\x86\x88\x8a\x8c\x8e-\x8f\x91\x93\x95\x97\x99\x9b\x9d\x9f\xa1\xa3\xa5\xa7\xa9\xab\xad\xaf\xb1\xb3\xb5\xb7\xb9\xbb\xbd\xbf]|\xd4[\x81\x83\x85\x87\x89\x8b\x8d\x8f\x91\x93\x95\x97\x99\x9b\x9d\x9f\xa1\xa3\xa5\xa7\xa9\xab\xad\xaf]|\xd5[\xa1-\xbf]|\xd6[\x80-\x87]|\xe1(\xb4[\x80-\xab]|\xb5[\xab-\xb7\xb9-\xbf]|\xb6[\x80-\x85])) -Ll2 (\xe1(\xb6[\x86-\x9a]|\xb8[\x81\x83\x85\x87\x89\x8b\x8d\x8f\x91\x93\x95\x97\x99\x9b\x9d\x9f\xa1\xa3\xa5\xa7\xa9\xab\xad\xaf\xb1\xb3\xb5\xb7\xb9\xbb\xbd\xbf]|\xb9[\x81\x83\x85\x87\x89\x8b\x8d\x8f\x91\x93\x95\x97\x99\x9b\x9d\x9f\xa1\xa3\xa5\xa7\xa9\xab\xad\xaf\xb1\xb3\xb5\xb7\xb9\xbb\xbd\xbf]|\xba[\x81\x83\x85\x87\x89\x8b\x8d\x8f\x91\x93\x95-\x9d\x9f\xa1\xa3\xa5\xa7\xa9\xab\xad\xaf\xb1\xb3\xb5\xb7\xb9\xbb\xbd\xbf]|\xbb[\x81\x83\x85\x87\x89\x8b\x8d\x8f\x91\x93\x95\x97\x99\x9b\x9d\x9f\xa1\xa3\xa5\xa7\xa9\xab\xad\xaf\xb1\xb3\xb5\xb7\xb9\xbb\xbd\xbf]|\xbc[\x80-\x87\x90-\x95\xa0-\xa7\xb0-\xb7]|\xbd[\x80-\x85\x90-\x97\xa0-\xa7\xb0-\xbd]|\xbe[\x80-\x87\x90-\x97\xa0-\xa7\xb0-\xb4\xb6-\xb7\xbe]|\xbf[\x82-\x84\x86-\x87\x90-\x93\x96-\x97\xa0-\xa7\xb2-\xb4\xb6-\xb7])|\xe2(\x84[\x8a\x8e-\x8f\x93\xaf\xb4\xb9\xbc-\xbd]|\x85[\x86-\x89\x8e]|\x86\x84|\xb0[\xb0-\xbf]|\xb1[\x80-\x9e\xa1\xa5-\xa6\xa8\xaa\xac\xb1\xb3-\xb4\xb6-\xbb]|\xb2[\x81\x83\x85\x87\x89\x8b\x8d\x8f\x91\x93\x95\x97\x99\x9b\x9d\x9f\xa1\xa3\xa5\xa7\xa9\xab\xad\xaf\xb1\xb3\xb5\xb7\xb9\xbb\xbd\xbf]|\xb3[\x81\x83\x85\x87\x89\x8b\x8d\x8f\x91\x93\x95\x97\x99\x9b\x9d\x9f\xa1\xa3-\xa4\xac\xae\xb3]|\xb4[\x80-\xa5\xa7\xad])|\xea(\x99[\x81\x83\x85\x87\x89\x8b\x8d\x8f\x91\x93\x95\x97\x99\x9b\x9d\x9f\xa1\xa3\xa5\xa7\xa9\xab\xad]|\x9a[\x81\x83\x85\x87\x89\x8b\x8d\x8f\x91\x93\x95\x97\x99\x9b]|\x9c[\xa3\xa5\xa7\xa9\xab\xad\xaf-\xb1\xb3\xb5\xb7\xb9\xbb\xbd\xbf]|\x9d[\x81\x83\x85\x87\x89\x8b\x8d\x8f\x91\x93\x95\x97\x99\x9b\x9d\x9f\xa1\xa3\xa5\xa7\xa9\xab\xad\xaf\xb1-\xb8\xba\xbc\xbf]|\x9e[\x81\x83\x85\x87\x8c\x8e\x91\x93-\x95\x97\x99\x9b\x9d\x9f\xa1\xa3\xa5\xa7\xa9]|\x9f\xba|\xac[\xb0-\xbf]|\xad[\x80-\x9a\xa4-\xa5])|\xef(\xac[\x80-\x86\x93-\x97]|\xbd[\x81-\x9a])|\xf0(\x9d(\x92\xbb|\x9f\x8b))) -Ll ({Ll1}|{Ll2}) -Lm (\xca[\xb0-\xbf]|\xcb[\x80-\x81\x86-\x91\xa0-\xa4\xac\xae]|\xcd[\xb4\xba]|\xd5\x99|\xd9\x80|\xdb[\xa5-\xa6]|\xdf[\xb4-\xb5\xba]|\xe0(\xa0[\x9a\xa4\xa8]|\xa5\xb1|\xb9\x86|\xbb\x86)|\xe1(\x83\xbc|\x9f\x97|\xa1\x83|\xaa\xa7|\xb1[\xb8-\xbd]|\xb4[\xac-\xbf]|\xb5[\x80-\xaa\xb8]|\xb6[\x9b-\xbf])|\xe2(\x81[\xb1\xbf]|\x82[\x90-\x9c]|\xb1[\xbc-\xbd]|\xb5\xaf|\xb8\xaf)|\xe3(\x80[\x85\xb1-\xb5\xbb]|\x82[\x9d-\x9e]|\x83[\xbc-\xbe])|\xea(\x80\x95|\x93[\xb8-\xbd]|\x98\x8c|\x99\xbf|\x9a[\x9c-\x9d]|\x9c[\x97-\x9f]|\x9d\xb0|\x9e\x88|\x9f[\xb8-\xb9]|\xa7[\x8f\xa6]|\xa9\xb0|\xab[\x9d\xb3-\xb4]|\xad[\x9c-\x9f])|\xef(\xbd\xb0|\xbe[\x9e-\x9f])) -Lo11111 (\xc2[\xaa\xba]|\xc6\xbb|\xc7[\x80-\x83]|\xca\x94|\xd7[\x90-\xaa\xb0-\xb2]|\xd8[\xa0-\xbf]|\xd9[\x81-\x8a\xae-\xaf\xb1-\xbf]|\xda[\x80-\xbf]|\xdb[\x80-\x93\x95\xae-\xaf\xba-\xbc\xbf]|\xdc[\x90\x92-\xaf]|\xdd[\x8d-\xbf]|\xde[\x80-\xa5\xb1]|\xdf[\x8a-\xaa]|\xe0(\xa0[\x80-\x95]|\xa1[\x80-\x98]|\xa2[\xa0-\xb2]|\xa4[\x84-\xb9\xbd]|\xa5[\x90\x98-\xa1\xb2-\xbf]|\xa6[\x80\x85-\x8c\x8f-\x90\x93-\xa8\xaa-\xb0\xb2\xb6-\xb9\xbd]|\xa7[\x8e\x9c-\x9d\x9f-\xa1\xb0-\xb1]|\xa8[\x85-\x8a\x8f-\x90\x93-\xa8\xaa-\xb0\xb2-\xb3\xb5-\xb6\xb8-\xb9]|\xa9[\x99-\x9c\x9e\xb2-\xb4]|\xaa[\x85-\x8d\x8f-\x91\x93-\xa8\xaa-\xb0\xb2-\xb3\xb5-\xb9\xbd]|\xab[\x90\xa0-\xa1]|\xac[\x85-\x8c\x8f-\x90\x93-\xa8\xaa-\xb0\xb2-\xb3\xb5-\xb9\xbd]|\xad[\x9c-\x9d\x9f-\xa1\xb1]|\xae[\x83\x85-\x8a\x8e-\x90\x92-\x95\x99-\x9a\x9c\x9e-\x9f\xa3-\xa4\xa8-\xaa\xae-\xb9]|\xaf\x90|\xb0[\x85-\x8c\x8e-\x90\x92-\xa8\xaa-\xb9\xbd]|\xb1[\x98-\x99\xa0-\xa1]|\xb2[\x85-\x8c\x8e-\x90\x92-\xa8\xaa-\xb3\xb5-\xb9\xbd]|\xb3[\x9e\xa0-\xa1\xb1-\xb2]|\xb4[\x85-\x8c\x8e-\x90\x92-\xba\xbd]|\xb5[\x8e\xa0-\xa1\xba-\xbf]|\xb6[\x85-\x96\x9a-\xb1\xb3-\xbb\xbd]|\xb7[\x80-\x86]|\xb8[\x81-\xb0\xb2-\xb3]|\xb9[\x80-\x85]|\xba[\x81-\x82\x84\x87-\x88\x8a\x8d\x94-\x97\x99-\x9f\xa1-\xa3\xa5\xa7\xaa-\xab\xad-\xb0\xb2-\xb3\xbd]|\xbb[\x80-\x84\x9c-\x9f]|\xbc\x80|\xbd[\x80-\x87\x89-\xac]|\xbe[\x88-\x8c])|\xe1(\x80[\x80-\xaa\xbf]|\x81[\x90-\x95\x9a-\x9d\xa1\xa5-\xa6\xae-\xb0\xb5-\xbf]|\x82[\x80-\x81\x8e]|\x83[\x90-\xba\xbd-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\x8e])) -Lo11112 (\xe1(\x87[\x8f-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\x88\x8a-\x8d\x90-\x96\x98\x9a-\x9d\xa0-\xbf]|\x8a[\x80-\x88\x8a-\x8d\x90-\xb0\xb2-\xb5\xb8-\xbe]|\x8b[\x80\x82-\x85\x88-\x96\x98-\xbf]|\x8c[\x80-\x90\x92-\x95\x98-\xbf]|\x8d[\x80-\x9a]|\x8e[\x80-\x8f\xa0-\xbf]|\x8f[\x80-\xb4]|\x90[\x81-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xac\xaf-\xbf]|\x9a[\x81-\x9a\xa0-\xbf]|\x9b[\x80-\xaa\xb1-\xb8]|\x9c[\x80-\x8c\x8e-\x91\xa0-\xb1]|\x9d[\x80-\x91\xa0-\xac\xae-\xb0]|\x9e[\x80-\xb3]|\x9f\x9c|\xa0[\xa0-\xbf]|\xa1[\x80-\x82\x84-\xb7]|\xa2[\x80-\x89])) -Lo1111 ({Lo11111}|{Lo11112}) -Lo1112 (\xe1(\xa2[\x8a-\xa8\xaa\xb0-\xbf]|\xa3[\x80-\xb5]|\xa4[\x80-\x9e]|\xa5[\x90-\xad\xb0-\xb4]|\xa6[\x80-\xab]|\xa7[\x81-\x87]|\xa8[\x80-\x96\xa0-\xbf]|\xa9[\x80-\x94]|\xac[\x85-\xb3]|\xad[\x85-\x8b]|\xae[\x83-\xa0\xae-\xaf\xba-\xbf]|\xaf[\x80-\xa5]|\xb0[\x80-\xa3]|\xb1[\x8d-\x8f\x9a-\xb7]|\xb3[\xa9-\xac\xae-\xb1\xb5-\xb6])|\xe2(\x84[\xb5-\xb8]|\xb4[\xb0-\xbf]|\xb5[\x80-\xa7]|\xb6[\x80-\x96\xa0-\xa6\xa8-\xae\xb0-\xb6\xb8-\xbe]|\xb7[\x80-\x86\x88-\x8e\x90-\x96\x98-\x9e])|\xe3(\x80[\x86\xbc]|\x81[\x81-\xbf]|\x82[\x80-\x96\x9f\xa1-\xbf]|\x83[\x80-\xba\xbf]|\x84[\x85-\xad\xb1-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\x8e\xa0-\xba]|\x87[\xb0-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xbf]|\x9f[\x80-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\xbf]|\xa3[\x80-\xbf]|\xa4[\x80-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\xbf]|\xa7[\x80-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\xbf]|\xac[\x80-\xbf]|\xad[\x80-\x97])) -Lo111 ({Lo1111}|{Lo1112}) -Lo112 (\xe3(\xad[\x98-\xbf]|\xae[\x80-\xbf]|\xaf[\x80-\xbf]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbf]|\xb5[\x80-\xbf]|\xb6[\x80-\xbf]|\xb7[\x80-\xbf]|\xb8[\x80-\xbf]|\xb9[\x80-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbf]|\xbc[\x80-\xbf]|\xbd[\x80-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\xbf])|\xe4(\x80[\x80-\xbf]|\x81[\x80-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xbf]|\x9f[\x80-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\xbf]|\xa3[\x80-\xbf]|\xa4[\x80-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\xbf]|\xa7[\x80-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\xbf]|\xac[\x80-\xbf]|\xad[\x80-\xbf]|\xae[\x80-\xbf]|\xaf[\x80-\xbf]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbf]|\xb5[\x80-\xbf]|\xb6[\x80-\xb5]|\xb8[\x80-\xbf]|\xb9[\x80-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbf]|\xbc[\x80-\xbf]|\xbd[\x80-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\xbf])|\xe5(\x80[\x80-\xbf]|\x81[\x80-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xa3])) -Lo11 ({Lo111}|{Lo112}) -Lo121 (\xe5(\x88[\xa4-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xbf]|\x9f[\x80-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\xbf]|\xa3[\x80-\xbf]|\xa4[\x80-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\xbf]|\xa7[\x80-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\xbf]|\xac[\x80-\xbf]|\xad[\x80-\xbf]|\xae[\x80-\xbf]|\xaf[\x80-\xbf]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbf]|\xb5[\x80-\xbf]|\xb6[\x80-\xbf]|\xb7[\x80-\xbf]|\xb8[\x80-\xbf]|\xb9[\x80-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbf]|\xbc[\x80-\xbf]|\xbd[\x80-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\xbf])|\xe6(\x80[\x80-\xbf]|\x81[\x80-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xbf]|\x9f[\x80-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\xa5])) -Lo122 (\xe6(\xa2[\xa6-\xbf]|\xa3[\x80-\xbf]|\xa4[\x80-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\xbf]|\xa7[\x80-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\xbf]|\xac[\x80-\xbf]|\xad[\x80-\xbf]|\xae[\x80-\xbf]|\xaf[\x80-\xbf]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbf]|\xb5[\x80-\xbf]|\xb6[\x80-\xbf]|\xb7[\x80-\xbf]|\xb8[\x80-\xbf]|\xb9[\x80-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbf]|\xbc[\x80-\xbf]|\xbd[\x80-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\xbf])|\xe7(\x80[\x80-\xbf]|\x81[\x80-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xbf]|\x9f[\x80-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\xbf]|\xa3[\x80-\xbf]|\xa4[\x80-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\xbf]|\xa7[\x80-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\xbf]|\xac[\x80-\xbf]|\xad[\x80-\xbf]|\xae[\x80-\xbf]|\xaf[\x80-\xbf]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbf]|\xb5[\x80-\xbf]|\xb6[\x80-\xbf]|\xb7[\x80-\xbf]|\xb8[\x80-\xbf]|\xb9[\x80-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbf]|\xbc[\x80-\xa8])) -Lo12 ({Lo121}|{Lo122}) -Lo1 ({Lo11}|{Lo12}) -Lo211 (\xe7(\xbc[\xa9-\xbf]|\xbd[\x80-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\xbf])|\xe8(\x80[\x80-\xbf]|\x81[\x80-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xbf]|\x9f[\x80-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\xbf]|\xa3[\x80-\xbf]|\xa4[\x80-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\xbf]|\xa7[\x80-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\xbf]|\xac[\x80-\xbf]|\xad[\x80-\xbf]|\xae[\x80-\xbf]|\xaf[\x80-\xbf]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbf]|\xb5[\x80-\xbf]|\xb6[\x80-\xbf]|\xb7[\x80-\xbf]|\xb8[\x80-\xbf]|\xb9[\x80-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbf]|\xbc[\x80-\xbf]|\xbd[\x80-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\xbf])|\xe9(\x80[\x80-\xbf]|\x81[\x80-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xaa])) -Lo212 (\xe9(\x96[\xab-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xbf]|\x9f[\x80-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\xbf]|\xa3[\x80-\xbf]|\xa4[\x80-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\xbf]|\xa7[\x80-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\xbf]|\xac[\x80-\xbf]|\xad[\x80-\xbf]|\xae[\x80-\xbf]|\xaf[\x80-\xbf]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbf]|\xb5[\x80-\xbf]|\xb6[\x80-\xbf]|\xb7[\x80-\xbf]|\xb8[\x80-\xbf]|\xb9[\x80-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbf]|\xbc[\x80-\xbf]|\xbd[\x80-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\x8c])|\xea(\x80[\x80-\x94\x96-\xbf]|\x81[\x80-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\x8c]|\x93[\x90-\xb7]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\x8b\x90-\x9f\xaa-\xab]|\x99\xae|\x9a[\xa0-\xbf]|\x9b[\x80-\xa5]|\x9f[\xb7\xbb-\xbf]|\xa0[\x80-\x81\x83-\x85\x87-\x8a\x8c-\xa2]|\xa1[\x80-\xb3]|\xa2[\x82-\xb3]|\xa3[\xb2-\xb7\xbb]|\xa4[\x8a-\xa5\xb0-\xbf]|\xa5[\x80-\x86\xa0-\xbc]|\xa6[\x84-\xb2]|\xa7[\xa0-\xa4\xa7-\xaf\xba-\xbe]|\xa8[\x80-\xa8]|\xa9[\x80-\x82\x84-\x8b\xa0-\xaf\xb1-\xb6\xba\xbe-\xbf]|\xaa[\x80-\xaf\xb1\xb5-\xb6\xb9-\xbd]|\xab[\x80\x82\x9b-\x9c\xa0-\xaa\xb2]|\xac[\x81-\x86\x89-\x8e\x91-\x96\xa0-\xa6\xa8-\xae]|\xaf[\x80-\xa2]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbf]|\xb5[\x80-\xbf]|\xb6[\x80-\xbf]|\xb7[\x80-\xbf]|\xb8[\x80-\xbf]|\xb9[\x80-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbf]|\xbc[\x80-\xbf]|\xbd[\x80-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\xbf])|\xeb(\x80[\x80-\xbf]|\x81[\x80-\x8a])) -Lo21 ({Lo211}|{Lo212}) -Lo221 (\xeb(\x81[\x8b-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xbf]|\x9f[\x80-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\xbf]|\xa3[\x80-\xbf]|\xa4[\x80-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\xbf]|\xa7[\x80-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\xbf]|\xac[\x80-\xbf]|\xad[\x80-\xbf]|\xae[\x80-\xbf]|\xaf[\x80-\xbf]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbf]|\xb5[\x80-\xbf]|\xb6[\x80-\xbf]|\xb7[\x80-\xbf]|\xb8[\x80-\xbf]|\xb9[\x80-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbf]|\xbc[\x80-\xbf]|\xbd[\x80-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\xbf])|\xec(\x80[\x80-\xbf]|\x81[\x80-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\x8c])) -Lo222 (\xec(\x9b[\x8d-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xbf]|\x9f[\x80-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\xbf]|\xa3[\x80-\xbf]|\xa4[\x80-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\xbf]|\xa7[\x80-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\xbf]|\xac[\x80-\xbf]|\xad[\x80-\xbf]|\xae[\x80-\xbf]|\xaf[\x80-\xbf]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbf]|\xb5[\x80-\xbf]|\xb6[\x80-\xbf]|\xb7[\x80-\xbf]|\xb8[\x80-\xbf]|\xb9[\x80-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbf]|\xbc[\x80-\xbf]|\xbd[\x80-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\xbf])|\xed(\x80[\x80-\xbf]|\x81[\x80-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xa3\xb0-\xbf]|\x9f[\x80-\x86\x8b-\xbb])|\xef(\xa4[\x80-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\xbf]|\xa7[\x80-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xad\xb0-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\x99]|\xac[\x9d\x9f-\xa8\xaa-\xb6\xb8-\xbc\xbe]|\xad[\x80-\x81\x83-\x84\x86-\xbf]|\xae[\x80-\xb1]|\xaf[\x93-\xbf]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbd]|\xb5[\x90-\xbf]|\xb6[\x80-\x8f\x92-\xbf]|\xb7[\x80-\x87\xb0-\xbb]|\xb9[\xb0-\xb4\xb6-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbc]|\xbd[\xa6-\xaf\xb1-\xbf]|\xbe[\x80-\x9d\xa0-\xbe]|\xbf[\x82-\x87\x8a-\x8f\x92-\x97\x9a-\x9c])|\xf0(\x90(\xa0[\x88\xbc]|\xa8\x80)|\x91(\x85\xb6|\x87\x9a|\x8c\xbd|\x93\x87|\x99\x84|\xa3\xbf)|\x96(\xbd\x90)|\x9e(\xb8[\xa4\xa7\xb9\xbb]|\xb9[\x82\x87\x89\x8b\x94\x97\x99\x9b\x9d\x9f\xa4\xbe]))) -Lo22 ({Lo221}|{Lo222}) -Lo2 ({Lo21}|{Lo22}) -Lo ({Lo1}|{Lo2}) -Lt (\xc7[\x85\x88\x8b\xb2]|\xe1(\xbe[\x88-\x8f\x98-\x9f\xa8-\xaf\xbc]|\xbf[\x8c\xbc])) -Lu1 ([A-Z]|\xc3[\x80-\x96\x98-\x9e]|\xc4[\x80\x82\x84\x86\x88\x8a\x8c\x8e\x90\x92\x94\x96\x98\x9a\x9c\x9e\xa0\xa2\xa4\xa6\xa8\xaa\xac\xae\xb0\xb2\xb4\xb6\xb9\xbb\xbd\xbf]|\xc5[\x81\x83\x85\x87\x8a\x8c\x8e\x90\x92\x94\x96\x98\x9a\x9c\x9e\xa0\xa2\xa4\xa6\xa8\xaa\xac\xae\xb0\xb2\xb4\xb6\xb8-\xb9\xbb\xbd]|\xc6[\x81-\x82\x84\x86-\x87\x89-\x8b\x8e-\x91\x93-\x94\x96-\x98\x9c-\x9d\x9f-\xa0\xa2\xa4\xa6-\xa7\xa9\xac\xae-\xaf\xb1-\xb3\xb5\xb7-\xb8\xbc]|\xc7[\x84\x87\x8a\x8d\x8f\x91\x93\x95\x97\x99\x9b\x9e\xa0\xa2\xa4\xa6\xa8\xaa\xac\xae\xb1\xb4\xb6-\xb8\xba\xbc\xbe]|\xc8[\x80\x82\x84\x86\x88\x8a\x8c\x8e\x90\x92\x94\x96\x98\x9a\x9c\x9e\xa0\xa2\xa4\xa6\xa8\xaa\xac\xae\xb0\xb2\xba-\xbb\xbd-\xbe]|\xc9[\x81\x83-\x86\x88\x8a\x8c\x8e]|\xcd[\xb0\xb2\xb6\xbf]|\xce[\x86\x88-\x8a\x8c\x8e-\x8f\x91-\xa1\xa3-\xab]|\xcf[\x8f\x92-\x94\x98\x9a\x9c\x9e\xa0\xa2\xa4\xa6\xa8\xaa\xac\xae\xb4\xb7\xb9-\xba\xbd-\xbf]|\xd0[\x80-\xaf]|\xd1[\xa0\xa2\xa4\xa6\xa8\xaa\xac\xae\xb0\xb2\xb4\xb6\xb8\xba\xbc\xbe]|\xd2[\x80\x8a\x8c\x8e\x90\x92\x94\x96\x98\x9a\x9c\x9e\xa0\xa2\xa4\xa6\xa8\xaa\xac\xae\xb0\xb2\xb4\xb6\xb8\xba\xbc\xbe]|\xd3[\x80-\x81\x83\x85\x87\x89\x8b\x8d\x90\x92\x94\x96\x98\x9a\x9c\x9e\xa0\xa2\xa4\xa6\xa8\xaa\xac\xae\xb0\xb2\xb4\xb6\xb8\xba\xbc\xbe]|\xd4[\x80\x82\x84\x86\x88\x8a\x8c\x8e\x90\x92\x94\x96\x98\x9a\x9c\x9e\xa0\xa2\xa4\xa6\xa8\xaa\xac\xae\xb1-\xbf]|\xd5[\x80-\x96]|\xe1(\x82[\xa0-\xb4])) -Lu2 (\xe1(\x82[\xb5-\xbf]|\x83[\x80-\x85\x87\x8d]|\xb8[\x80\x82\x84\x86\x88\x8a\x8c\x8e\x90\x92\x94\x96\x98\x9a\x9c\x9e\xa0\xa2\xa4\xa6\xa8\xaa\xac\xae\xb0\xb2\xb4\xb6\xb8\xba\xbc\xbe]|\xb9[\x80\x82\x84\x86\x88\x8a\x8c\x8e\x90\x92\x94\x96\x98\x9a\x9c\x9e\xa0\xa2\xa4\xa6\xa8\xaa\xac\xae\xb0\xb2\xb4\xb6\xb8\xba\xbc\xbe]|\xba[\x80\x82\x84\x86\x88\x8a\x8c\x8e\x90\x92\x94\x9e\xa0\xa2\xa4\xa6\xa8\xaa\xac\xae\xb0\xb2\xb4\xb6\xb8\xba\xbc\xbe]|\xbb[\x80\x82\x84\x86\x88\x8a\x8c\x8e\x90\x92\x94\x96\x98\x9a\x9c\x9e\xa0\xa2\xa4\xa6\xa8\xaa\xac\xae\xb0\xb2\xb4\xb6\xb8\xba\xbc\xbe]|\xbc[\x88-\x8f\x98-\x9d\xa8-\xaf\xb8-\xbf]|\xbd[\x88-\x8d\x99\x9b\x9d\x9f\xa8-\xaf]|\xbe[\xb8-\xbb]|\xbf[\x88-\x8b\x98-\x9b\xa8-\xac\xb8-\xbb])|\xe2(\x84[\x82\x87\x8b-\x8d\x90-\x92\x95\x99-\x9d\xa4\xa6\xa8\xaa-\xad\xb0-\xb3\xbe-\xbf]|\x85\x85|\x86\x83|\xb0[\x80-\xae]|\xb1[\xa0\xa2-\xa4\xa7\xa9\xab\xad-\xb0\xb2\xb5\xbe-\xbf]|\xb2[\x80\x82\x84\x86\x88\x8a\x8c\x8e\x90\x92\x94\x96\x98\x9a\x9c\x9e\xa0\xa2\xa4\xa6\xa8\xaa\xac\xae\xb0\xb2\xb4\xb6\xb8\xba\xbc\xbe]|\xb3[\x80\x82\x84\x86\x88\x8a\x8c\x8e\x90\x92\x94\x96\x98\x9a\x9c\x9e\xa0\xa2\xab\xad\xb2])|\xea(\x99[\x80\x82\x84\x86\x88\x8a\x8c\x8e\x90\x92\x94\x96\x98\x9a\x9c\x9e\xa0\xa2\xa4\xa6\xa8\xaa\xac]|\x9a[\x80\x82\x84\x86\x88\x8a\x8c\x8e\x90\x92\x94\x96\x98\x9a]|\x9c[\xa2\xa4\xa6\xa8\xaa\xac\xae\xb2\xb4\xb6\xb8\xba\xbc\xbe]|\x9d[\x80\x82\x84\x86\x88\x8a\x8c\x8e\x90\x92\x94\x96\x98\x9a\x9c\x9e\xa0\xa2\xa4\xa6\xa8\xaa\xac\xae\xb9\xbb\xbd-\xbe]|\x9e[\x80\x82\x84\x86\x8b\x8d\x90\x92\x96\x98\x9a\x9c\x9e\xa0\xa2\xa4\xa6\xa8\xaa-\xad\xb0-\xb1])|\xef(\xbc[\xa1-\xba])|\xf0(\x9d(\x92[\x9c\xa2]|\x95\x86|\x9f\x8a))) -Lu ({Lu1}|{Lu2}) -Mc (\xe0(\xa4[\x83\xbb\xbe-\xbf]|\xa5[\x80\x89-\x8c\x8e-\x8f]|\xa6[\x82-\x83\xbe-\xbf]|\xa7[\x80\x87-\x88\x8b-\x8c\x97]|\xa8[\x83\xbe-\xbf]|\xa9\x80|\xaa[\x83\xbe-\xbf]|\xab[\x80\x89\x8b-\x8c]|\xac[\x82-\x83\xbe]|\xad[\x80\x87-\x88\x8b-\x8c\x97]|\xae[\xbe-\xbf]|\xaf[\x81-\x82\x86-\x88\x8a-\x8c\x97]|\xb0[\x81-\x83]|\xb1[\x81-\x84]|\xb2[\x82-\x83\xbe]|\xb3[\x80-\x84\x87-\x88\x8a-\x8b\x95-\x96]|\xb4[\x82-\x83\xbe-\xbf]|\xb5[\x80\x86-\x88\x8a-\x8c\x97]|\xb6[\x82-\x83]|\xb7[\x8f-\x91\x98-\x9f\xb2-\xb3]|\xbc[\xbe-\xbf]|\xbd\xbf)|\xe1(\x80[\xab-\xac\xb1\xb8\xbb-\xbc]|\x81[\x96-\x97\xa2-\xa4\xa7-\xad]|\x82[\x83-\x84\x87-\x8c\x8f\x9a-\x9c]|\x9e[\xb6\xbe-\xbf]|\x9f[\x80-\x85\x87-\x88]|\xa4[\xa3-\xa6\xa9-\xab\xb0-\xb1\xb3-\xb8]|\xa6[\xb0-\xbf]|\xa7[\x80\x88-\x89]|\xa8[\x99-\x9a]|\xa9[\x95\x97\xa1\xa3-\xa4\xad-\xb2]|\xac[\x84\xb5\xbb\xbd-\xbf]|\xad[\x80-\x81\x83-\x84]|\xae[\x82\xa1\xa6-\xa7\xaa]|\xaf[\xa7\xaa-\xac\xae\xb2-\xb3]|\xb0[\xa4-\xab\xb4-\xb5]|\xb3[\xa1\xb2-\xb3])|\xe3(\x80[\xae-\xaf])|\xea(\xa0[\xa3-\xa4\xa7]|\xa2[\x80-\x81\xb4-\xbf]|\xa3[\x80-\x83]|\xa5[\x92-\x93]|\xa6[\x83\xb4-\xb5\xba-\xbb\xbd-\xbf]|\xa7\x80|\xa8[\xaf-\xb0\xb3-\xb4]|\xa9[\x8d\xbb\xbd]|\xab[\xab\xae-\xaf\xb5]|\xaf[\xa3-\xa4\xa6-\xa7\xa9-\xaa\xac])|\xf0(\x91(\x80[\x80\x82]|\x82\x82|\x84\xac|\x86\x82|\x88\xb5|\x8d\x97|\x92\xb9|\x93\x81|\x96\xbe|\x98\xbe|\x9a[\xac\xb6]))) -Me (\xd2[\x88-\x89]|\xe1(\xaa\xbe)|\xe2(\x83[\x9d-\xa0\xa2-\xa4])|\xea(\x99[\xb0-\xb2])) -Mn1 (\xcc[\x80-\xbf]|\xcd[\x80-\xaf]|\xd2[\x83-\x87]|\xd6[\x91-\xbd\xbf]|\xd7[\x81-\x82\x84-\x85\x87]|\xd8[\x90-\x9a]|\xd9[\x8b-\x9f\xb0]|\xdb[\x96-\x9c\x9f-\xa4\xa7-\xa8\xaa-\xad]|\xdc[\x91\xb0-\xbf]|\xdd[\x80-\x8a]|\xde[\xa6-\xb0]|\xdf[\xab-\xb3]|\xe0(\xa0[\x96-\x99\x9b-\xa3\xa5-\xa7\xa9-\xad]|\xa1[\x99-\x9b]|\xa3[\xa4-\xbf]|\xa4[\x80-\x82\xba\xbc]|\xa5[\x81-\x88\x8d\x91-\x97\xa2-\xa3]|\xa6[\x81\xbc]|\xa7[\x81-\x84\x8d\xa2-\xa3]|\xa8[\x81-\x82\xbc]|\xa9[\x81-\x82\x87-\x88\x8b-\x8d\x91\xb0-\xb1\xb5]|\xaa[\x81-\x82\xbc]|\xab[\x81-\x85\x87-\x88\x8d\xa2-\xa3]|\xac[\x81\xbc\xbf]|\xad[\x81-\x84\x8d\x96\xa2-\xa3]|\xae\x82|\xaf[\x80\x8d]|\xb0[\x80\xbe-\xbf]|\xb1[\x80\x86-\x88\x8a-\x8d\x95-\x96\xa2-\xa3]|\xb2[\x81\xbc\xbf]|\xb3[\x86\x8c-\x8d\xa2-\xa3]|\xb4\x81|\xb5[\x81-\x84\x8d\xa2-\xa3]|\xb7[\x8a\x92-\x94\x96]|\xb8[\xb1\xb4-\xba]|\xb9[\x87-\x8e]|\xba[\xb1\xb4-\xb9\xbb-\xbc]|\xbb[\x88-\x8d]|\xbc[\x98-\x99\xb5\xb7\xb9]|\xbd[\xb1-\xbe]|\xbe[\x80-\x84\x86-\x87\x8d-\x97\x99-\x9a])) -Mn2 (\xe0(\xbe[\x9b-\xbc]|\xbf\x86)|\xe1(\x80[\xad-\xb0\xb2-\xb7\xb9-\xba\xbd-\xbe]|\x81[\x98-\x99\x9e-\xa0\xb1-\xb4]|\x82[\x82\x85-\x86\x8d\x9d]|\x8d[\x9d-\x9f]|\x9c[\x92-\x94\xb2-\xb4]|\x9d[\x92-\x93\xb2-\xb3]|\x9e[\xb4-\xb5\xb7-\xbd]|\x9f[\x86\x89-\x93\x9d]|\xa0[\x8b-\x8d]|\xa2\xa9|\xa4[\xa0-\xa2\xa7-\xa8\xb2\xb9-\xbb]|\xa8[\x97-\x98\x9b]|\xa9[\x96\x98-\x9e\xa0\xa2\xa5-\xac\xb3-\xbc\xbf]|\xaa[\xb0-\xbd]|\xac[\x80-\x83\xb4\xb6-\xba\xbc]|\xad[\x82\xab-\xb3]|\xae[\x80-\x81\xa2-\xa5\xa8-\xa9\xab-\xad]|\xaf[\xa6\xa8-\xa9\xad\xaf-\xb1]|\xb0[\xac-\xb3\xb6-\xb7]|\xb3[\x90-\x92\x94-\xa0\xa2-\xa8\xad\xb4\xb8-\xb9]|\xb7[\x80-\xb5\xbc-\xbf])|\xe2(\x83[\x90-\x9c\xa1\xa5-\xb0]|\xb3[\xaf-\xb1]|\xb5\xbf|\xb7[\xa0-\xbf])|\xe3(\x80[\xaa-\xad]|\x82[\x99-\x9a])|\xea(\x99[\xaf\xb4-\xbd]|\x9a\x9f|\x9b[\xb0-\xb1]|\xa0[\x82\x86\x8b\xa5-\xa6]|\xa3[\x84\xa0-\xb1]|\xa4[\xa6-\xad]|\xa5[\x87-\x91]|\xa6[\x80-\x82\xb3\xb6-\xb9\xbc]|\xa7\xa5|\xa8[\xa9-\xae\xb1-\xb2\xb5-\xb6]|\xa9[\x83\x8c\xbc]|\xaa[\xb0\xb2-\xb4\xb7-\xb8\xbe-\xbf]|\xab[\x81\xac-\xad\xb6]|\xaf[\xa5\xa8\xad])|\xef(\xac\x9e|\xb8[\x80-\x8f\xa0-\xad])|\xf0(\x90(\x87\xbd|\x8b\xa0|\xa8\xbf)|\x91(\x80\x81|\x85\xb3|\x88\xb4|\x8b\x9f|\x8c[\x81\xbc]|\x8d\x80|\x92\xba|\x98\xbd|\x9a[\xab\xad\xb7]))) -Mn ({Mn1}|{Mn2}) -Nd ([0-9]|\xd9[\xa0-\xa9]|\xdb[\xb0-\xb9]|\xdf[\x80-\x89]|\xe0(\xa5[\xa6-\xaf]|\xa7[\xa6-\xaf]|\xa9[\xa6-\xaf]|\xab[\xa6-\xaf]|\xad[\xa6-\xaf]|\xaf[\xa6-\xaf]|\xb1[\xa6-\xaf]|\xb3[\xa6-\xaf]|\xb5[\xa6-\xaf]|\xb7[\xa6-\xaf]|\xb9[\x90-\x99]|\xbb[\x90-\x99]|\xbc[\xa0-\xa9])|\xe1(\x81[\x80-\x89]|\x82[\x90-\x99]|\x9f[\xa0-\xa9]|\xa0[\x90-\x99]|\xa5[\x86-\x8f]|\xa7[\x90-\x99]|\xaa[\x80-\x89\x90-\x99]|\xad[\x90-\x99]|\xae[\xb0-\xb9]|\xb1[\x80-\x89\x90-\x99])|\xea(\x98[\xa0-\xa9]|\xa3[\x90-\x99]|\xa4[\x80-\x89]|\xa7[\x90-\x99\xb0-\xb9]|\xa9[\x90-\x99]|\xaf[\xb0-\xb9])|\xef(\xbc[\x90-\x99])) -Nl (\xe1(\x9b[\xae-\xb0])|\xe2(\x85[\xa0-\xbf]|\x86[\x80-\x82\x85-\x88])|\xe3(\x80[\x87\xa1-\xa9\xb8-\xba])|\xea(\x9b[\xa6-\xaf])|\xf0(\x90(\x8d[\x81\x8a]))) -No (\xc2[\xb2-\xb3\xb9\xbc-\xbe]|\xe0(\xa7[\xb4-\xb9]|\xad[\xb2-\xb7]|\xaf[\xb0-\xb2]|\xb1[\xb8-\xbe]|\xb5[\xb0-\xb5]|\xbc[\xaa-\xb3])|\xe1(\x8d[\xa9-\xbc]|\x9f[\xb0-\xb9]|\xa7\x9a)|\xe2(\x81[\xb0\xb4-\xb9]|\x82[\x80-\x89]|\x85[\x90-\x9f]|\x86\x89|\x91[\xa0-\xbf]|\x92[\x80-\x9b]|\x93[\xaa-\xbf]|\x9d[\xb6-\xbf]|\x9e[\x80-\x93]|\xb3\xbd)|\xe3(\x86[\x92-\x95]|\x88[\xa0-\xa9]|\x89[\x88-\x8f\x91-\x9f]|\x8a[\x80-\x89\xb1-\xbf])|\xea(\xa0[\xb0-\xb5])) -Pc (_|\xe2(\x80\xbf|\x81[\x80\x94])|\xef(\xb8[\xb3-\xb4]|\xb9[\x8d-\x8f]|\xbc\xbf)) -Pd (-|\xd6[\x8a\xbe]|\xe1(\x90\x80|\xa0\x86)|\xe2(\x80[\x90-\x95]|\xb8[\x97\x9a\xba-\xbb]|\xb9\x80)|\xe3(\x80[\x9c\xb0]|\x82\xa0)|\xef(\xb8[\xb1-\xb2]|\xb9[\x98\xa3]|\xbc\x8d)) -Pe ([\)\]\}]|\xe0(\xbc[\xbb\xbd])|\xe1(\x9a\x9c)|\xe2(\x81[\x86\xbe]|\x82\x8e|\x8c[\x89\x8b\xaa]|\x9d[\xa9\xab\xad\xaf\xb1\xb3\xb5]|\x9f[\x86\xa7\xa9\xab\xad\xaf]|\xa6[\x84\x86\x88\x8a\x8c\x8e\x90\x92\x94\x96\x98]|\xa7[\x99\x9b\xbd]|\xb8[\xa3\xa5\xa7\xa9])|\xe3(\x80[\x89\x8b\x8d\x8f\x91\x95\x97\x99\x9b\x9e-\x9f])|\xef(\xb4\xbe|\xb8[\x98\xb6\xb8\xba\xbc\xbe]|\xb9[\x80\x82\x84\x88\x9a\x9c\x9e]|\xbc[\x89\xbd]|\xbd[\x9d\xa0\xa3])) -Pf (\xc2\xbb|\xe2(\x80[\x99\x9d\xba]|\xb8[\x83\x85\x8a\x8d\x9d\xa1])) -Pi (\xc2\xab|\xe2(\x80[\x98\x9b-\x9c\x9f\xb9]|\xb8[\x82\x84\x89\x8c\x9c\xa0])) -Po ([!-\#%-\'\*,\.-\/\:-;\?-@\\]|\xc2[\xa1\xa7\xb6-\xb7\xbf]|\xcd\xbe|\xce\x87|\xd5[\x9a-\x9f]|\xd6\x89|\xd7[\x80\x83\x86\xb3-\xb4]|\xd8[\x89-\x8a\x8c-\x8d\x9b\x9e-\x9f]|\xd9[\xaa-\xad]|\xdb\x94|\xdc[\x80-\x8d]|\xdf[\xb7-\xb9]|\xe0(\xa0[\xb0-\xbe]|\xa1\x9e|\xa5[\xa4-\xa5\xb0]|\xab\xb0|\xb7\xb4|\xb9[\x8f\x9a-\x9b]|\xbc[\x84-\x92\x94]|\xbe\x85|\xbf[\x90-\x94\x99-\x9a])|\xe1(\x81[\x8a-\x8f]|\x83\xbb|\x8d[\xa0-\xa8]|\x99[\xad-\xae]|\x9b[\xab-\xad]|\x9c[\xb5-\xb6]|\x9f[\x94-\x96\x98-\x9a]|\xa0[\x80-\x85\x87-\x8a]|\xa5[\x84-\x85]|\xa8[\x9e-\x9f]|\xaa[\xa0-\xa6\xa8-\xad]|\xad[\x9a-\xa0]|\xaf[\xbc-\xbf]|\xb0[\xbb-\xbf]|\xb1[\xbe-\xbf]|\xb3[\x80-\x87\x93])|\xe2(\x80[\x96-\x97\xa0-\xa7\xb0-\xb8\xbb-\xbe]|\x81[\x81-\x83\x87-\x91\x93\x95-\x9e]|\xb3[\xb9-\xbc\xbe-\xbf]|\xb5\xb0|\xb8[\x80-\x81\x86-\x88\x8b\x8e-\x96\x98-\x99\x9b\x9e-\x9f\xaa-\xae\xb0-\xb9\xbc-\xbf]|\xb9\x81)|\xe3(\x80[\x81-\x83\xbd]|\x83\xbb)|\xea(\x93[\xbe-\xbf]|\x98[\x8d-\x8f]|\x99[\xb3\xbe]|\x9b[\xb2-\xb7]|\xa1[\xb4-\xb7]|\xa3[\x8e-\x8f\xb8-\xba]|\xa4[\xae-\xaf]|\xa5\x9f|\xa7[\x81-\x8d\x9e-\x9f]|\xa9[\x9c-\x9f]|\xab[\x9e-\x9f\xb0-\xb1]|\xaf\xab)|\xef(\xb8[\x90-\x96\x99\xb0]|\xb9[\x85-\x86\x89-\x8c\x90-\x92\x94-\x97\x9f-\xa1\xa8\xaa-\xab]|\xbc[\x81-\x83\x85-\x87\x8a\x8c\x8e-\x8f\x9a-\x9b\x9f-\xa0\xbc]|\xbd[\xa1\xa4-\xa5])|\xf0(\x90(\x8e\x9f|\x8f\x90|\x95\xaf|\xa1\x97|\xa4[\x9f\xbf]|\xa9\xbf)|\x91(\x87\x8d|\x93\x86)|\x96(\xab\xb5|\xad\x84)|\x9b(\xb2\x9f))) -Ps ([\(\[\{]|\xe0(\xbc[\xba\xbc])|\xe1(\x9a\x9b)|\xe2(\x80[\x9a\x9e]|\x81[\x85\xbd]|\x82\x8d|\x8c[\x88\x8a\xa9]|\x9d[\xa8\xaa\xac\xae\xb0\xb2\xb4]|\x9f[\x85\xa6\xa8\xaa\xac\xae]|\xa6[\x83\x85\x87\x89\x8b\x8d\x8f\x91\x93\x95\x97]|\xa7[\x98\x9a\xbc]|\xb8[\xa2\xa4\xa6\xa8]|\xb9\x82)|\xe3(\x80[\x88\x8a\x8c\x8e\x90\x94\x96\x98\x9a\x9d])|\xef(\xb4\xbf|\xb8[\x97\xb5\xb7\xb9\xbb\xbd\xbf]|\xb9[\x81\x83\x87\x99\x9b\x9d]|\xbc[\x88\xbb]|\xbd[\x9b\x9f\xa2])) -Sc ($|\xc2[\xa2-\xa5]|\xd6\x8f|\xd8\x8b|\xe0(\xa7[\xb2-\xb3\xbb]|\xab\xb1|\xaf\xb9|\xb8\xbf)|\xe1(\x9f\x9b)|\xe2(\x82[\xa0-\xbd])|\xea(\xa0\xb8)|\xef(\xb7\xbc|\xb9\xa9|\xbc\x84|\xbf[\xa0-\xa1\xa5-\xa6])) -Sk ([\^`]|\xc2[\xa8\xaf\xb4\xb8]|\xcb[\x82-\x85\x92-\x9f\xa5-\xab\xad\xaf-\xbf]|\xcd\xb5|\xce[\x84-\x85]|\xe1(\xbe[\xbd\xbf]|\xbf[\x80-\x81\x8d-\x8f\x9d-\x9f\xad-\xaf\xbd-\xbe])|\xe3(\x82[\x9b-\x9c])|\xea(\x9c[\x80-\x96\xa0-\xa1]|\x9e[\x89-\x8a]|\xad\x9b)|\xef(\xae[\xb2-\xbf]|\xaf[\x80-\x81]|\xbc\xbe|\xbd\x80|\xbf\xa3)) -Sm ([\+<->\|~]|\xc2[\xac\xb1]|\xc3[\x97\xb7]|\xcf\xb6|\xd8[\x86-\x88]|\xe2(\x81[\x84\x92\xba-\xbc]|\x82[\x8a-\x8c]|\x84\x98|\x85[\x80-\x84\x8b]|\x86[\x90-\x94\x9a-\x9b\xa0\xa3\xa6\xae]|\x87[\x8e-\x8f\x92\x94\xb4-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\xa0-\xa1]|\x8d\xbc|\x8e[\x9b-\xb3]|\x8f[\x9c-\xa1]|\x96\xb7|\x97[\x81\xb8-\xbf]|\x99\xaf|\x9f[\x80-\x84\x87-\xa5\xb0-\xbf]|\xa4[\x80-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\x82\x99-\xbf]|\xa7[\x80-\x97\x9c-\xbb\xbe-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\xbf]|\xac[\xb0-\xbf]|\xad[\x80-\x84\x87-\x8c])|\xef(\xac\xa9|\xb9[\xa2\xa4-\xa6]|\xbc[\x8b\x9c-\x9e]|\xbd[\x9c\x9e]|\xbf[\xa2\xa9-\xac])|\xf0(\x9d(\x9b[\x81\x9b\xbb]|\x9c[\x95\xb5]|\x9d[\x8f\xaf]|\x9e[\x89\xa9]|\x9f\x83))) -So (\xc2[\xa6\xa9\xae\xb0]|\xd2\x82|\xd6[\x8d-\x8e]|\xd8[\x8e-\x8f]|\xdb[\x9e\xa9\xbd-\xbe]|\xdf\xb6|\xe0(\xa7\xba|\xad\xb0|\xaf[\xb3-\xb8\xba]|\xb1\xbf|\xb5\xb9|\xbc[\x81-\x83\x93\x95-\x97\x9a-\x9f\xb4\xb6\xb8]|\xbe[\xbe-\xbf]|\xbf[\x80-\x85\x87-\x8c\x8e-\x8f\x95-\x98])|\xe1(\x82[\x9e-\x9f]|\x8e[\x90-\x99]|\xa5\x80|\xa7[\x9e-\xbf]|\xad[\xa1-\xaa\xb4-\xbc])|\xe2(\x84[\x80-\x81\x83-\x86\x88-\x89\x94\x96-\x97\x9e-\xa3\xa5\xa7\xa9\xae\xba-\xbb]|\x85[\x8a\x8c-\x8d\x8f]|\x86[\x95-\x99\x9c-\x9f\xa1-\xa2\xa4-\xa5\xa7-\xad\xaf-\xbf]|\x87[\x80-\x8d\x90-\x91\x93\x95-\xb3]|\x8c[\x80-\x87\x8c-\x9f\xa2-\xa8\xab-\xbf]|\x8d[\x80-\xbb\xbd-\xbf]|\x8e[\x80-\x9a\xb4-\xbf]|\x8f[\x80-\x9b\xa2-\xba]|\x90[\x80-\xa6]|\x91[\x80-\x8a]|\x92[\x9c-\xbf]|\x93[\x80-\xa9]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xb6\xb8-\xbf]|\x97[\x80\x82-\xb7]|\x98[\x80-\xbf]|\x99[\x80-\xae\xb0-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xa7]|\x9e[\x94-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\xbf]|\xa3[\x80-\xbf]|\xac[\x80-\xaf]|\xad[\x85-\x86\x8d-\xb3\xb6-\xbf]|\xae[\x80-\x95\x98-\xb9\xbd-\xbf]|\xaf[\x80-\x88\x8a-\x91]|\xb3[\xa5-\xaa]|\xba[\x80-\x99\x9b-\xbf]|\xbb[\x80-\xb3]|\xbc[\x80-\xbf]|\xbd[\x80-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\x95\xb0-\xbb])|\xe3(\x80[\x84\x92-\x93\xa0\xb6-\xb7\xbe-\xbf]|\x86[\x90-\x91\x96-\x9f]|\x87[\x80-\xa3]|\x88[\x80-\x9e\xaa-\xbf]|\x89[\x80-\x87\x90\xa0-\xbf]|\x8a[\x8a-\xb0]|\x8b[\x80-\xbe]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf])|\xe4(\xb7[\x80-\xbf])|\xea(\x92[\x90-\xbf]|\x93[\x80-\x86]|\xa0[\xa8-\xab\xb6-\xb7\xb9]|\xa9[\xb7-\xb9])|\xef(\xb7\xbd|\xbf[\xa4\xa8\xad-\xae\xbc-\xbd])|\xf0(\x90(\x86[\x8c\xa0]|\xab\x88)|\x96(\xad\x85)|\x9b(\xb2\x9c)|\x9d(\x89\x85))) -Zl (\xe2(\x80\xa8)) -Zp (\xe2(\x80\xa9)) -Zs (\x20|\xc2\xa0|\xe1(\x9a\x80)|\xe2(\x80[\x80-\x8a\xaf]|\x81\x9f)|\xe3(\x80\x80)) -L11111 ([A-Za-z]|\xc2[\xaa\xb5\xba]|\xc3[\x80-\x96\x98-\xb6\xb8-\xbf]|\xc4[\x80-\xbf]|\xc5[\x80-\xbf]|\xc6[\x80-\xbf]|\xc7[\x80-\xbf]|\xc8[\x80-\xbf]|\xc9[\x80-\xbf]|\xca[\x80-\xbf]|\xcb[\x80-\x81\x86-\x91\xa0-\xa4\xac\xae]|\xcd[\xb0-\xb4\xb6-\xb7\xba-\xbd\xbf]|\xce[\x86\x88-\x8a\x8c\x8e-\xa1\xa3-\xbf]|\xcf[\x80-\xb5\xb7-\xbf]|\xd0[\x80-\xbf]|\xd1[\x80-\xbf]|\xd2[\x80-\x81\x8a-\xbf]|\xd3[\x80-\xbf]|\xd4[\x80-\xaf\xb1-\xbf]|\xd5[\x80-\x96\x99\xa1-\xbf]|\xd6[\x80-\x87]|\xd7[\x90-\xaa\xb0-\xb2]|\xd8[\xa0-\xbf]|\xd9[\x80-\x8a\xae-\xaf\xb1-\xbf]|\xda[\x80-\xbf]|\xdb[\x80-\x93\x95\xa5-\xa6\xae-\xaf\xba-\xbc\xbf]|\xdc[\x90\x92-\xaf]|\xdd[\x8d-\xbf]|\xde[\x80-\xa5\xb1]|\xdf[\x8a-\xaa\xb4-\xb5\xba]|\xe0(\xa0[\x80-\x95\x9a\xa4\xa8]|\xa1[\x80-\x98]|\xa2[\xa0-\xb2]|\xa4[\x84-\x98])) -L11112 (\xe0(\xa4[\x99-\xb9\xbd]|\xa5[\x90\x98-\xa1\xb1-\xbf]|\xa6[\x80\x85-\x8c\x8f-\x90\x93-\xa8\xaa-\xb0\xb2\xb6-\xb9\xbd]|\xa7[\x8e\x9c-\x9d\x9f-\xa1\xb0-\xb1]|\xa8[\x85-\x8a\x8f-\x90\x93-\xa8\xaa-\xb0\xb2-\xb3\xb5-\xb6\xb8-\xb9]|\xa9[\x99-\x9c\x9e\xb2-\xb4]|\xaa[\x85-\x8d\x8f-\x91\x93-\xa8\xaa-\xb0\xb2-\xb3\xb5-\xb9\xbd]|\xab[\x90\xa0-\xa1]|\xac[\x85-\x8c\x8f-\x90\x93-\xa8\xaa-\xb0\xb2-\xb3\xb5-\xb9\xbd]|\xad[\x9c-\x9d\x9f-\xa1\xb1]|\xae[\x83\x85-\x8a\x8e-\x90\x92-\x95\x99-\x9a\x9c\x9e-\x9f\xa3-\xa4\xa8-\xaa\xae-\xb9]|\xaf\x90|\xb0[\x85-\x8c\x8e-\x90\x92-\xa8\xaa-\xb9\xbd]|\xb1[\x98-\x99\xa0-\xa1]|\xb2[\x85-\x8c\x8e-\x90\x92-\xa8\xaa-\xb3\xb5-\xb9\xbd]|\xb3[\x9e\xa0-\xa1\xb1-\xb2]|\xb4[\x85-\x8c\x8e-\x90\x92-\xba\xbd]|\xb5[\x8e\xa0-\xa1\xba-\xbf]|\xb6[\x85-\x96\x9a-\xb1\xb3-\xbb\xbd]|\xb7[\x80-\x86]|\xb8[\x81-\xb0\xb2-\xb3]|\xb9[\x80-\x86]|\xba[\x81-\x82\x84\x87-\x88\x8a\x8d\x94-\x97\x99-\x9f\xa1-\xa3\xa5\xa7\xaa-\xab\xad-\xb0\xb2-\xb3\xbd]|\xbb[\x80-\x84\x86\x9c-\x9f]|\xbc\x80|\xbd[\x80-\x87\x89-\xac]|\xbe[\x88-\x8c])|\xe1(\x80[\x80-\xaa\xbf]|\x81[\x90-\x95\x9a-\x9d\xa1\xa5-\xa6\xae-\xb0\xb5-\xbf]|\x82[\x80-\x81\x8e\xa0-\xbf]|\x83[\x80-\x85\x87\x8d\x90-\xba\xbc-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\x88\x8a-\x8d\x90-\x96\x98\x9a-\x9d\xa0-\xbf]|\x8a[\x80-\x88\x8a-\x8d\x90-\xb0\xb2-\xb5\xb8-\xbe]|\x8b[\x80\x82-\x85\x88-\x96\x98-\xbf]|\x8c[\x80-\x90\x92-\x95\x98-\xbf]|\x8d[\x80-\x9a]|\x8e[\x80-\x8f\xa0-\xbf]|\x8f[\x80-\xa8])) -L1111 ({L11111}|{L11112}) -L1112 (\xe1(\x8f[\xa9-\xb4]|\x90[\x81-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xac\xaf-\xbf]|\x9a[\x81-\x9a\xa0-\xbf]|\x9b[\x80-\xaa\xb1-\xb8]|\x9c[\x80-\x8c\x8e-\x91\xa0-\xb1]|\x9d[\x80-\x91\xa0-\xac\xae-\xb0]|\x9e[\x80-\xb3]|\x9f[\x97\x9c]|\xa0[\xa0-\xbf]|\xa1[\x80-\xb7]|\xa2[\x80-\xa8\xaa\xb0-\xbf]|\xa3[\x80-\xb5]|\xa4[\x80-\x9e]|\xa5[\x90-\xad\xb0-\xb4]|\xa6[\x80-\xab]|\xa7[\x81-\x87]|\xa8[\x80-\x96\xa0-\xbf]|\xa9[\x80-\x94]|\xaa\xa7|\xac[\x85-\xb3]|\xad[\x85-\x8b]|\xae[\x83-\xa0\xae-\xaf\xba-\xbf]|\xaf[\x80-\xa5]|\xb0[\x80-\xa3]|\xb1[\x8d-\x8f\x9a-\xbd]|\xb3[\xa9-\xac\xae-\xb1\xb5-\xb6]|\xb4[\x80-\xbf]|\xb5[\x80-\xbf]|\xb6[\x80-\xbf]|\xb8[\x80-\xbf]|\xb9[\x80-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbf]|\xbc[\x80-\x95\x98-\x9d\xa0-\xbf]|\xbd[\x80-\x85\x88-\x8d\x90-\x97\x99\x9b\x9d\x9f-\xbd]|\xbe[\x80-\xb4\xb6-\xbc\xbe]|\xbf[\x82-\x84\x86-\x8c\x90-\x93\x96-\x9b\xa0-\xac\xb2-\xb4\xb6-\xbc])|\xe2(\x81[\xb1\xbf]|\x82[\x90-\x9c]|\x84[\x82\x87\x8a-\x93\x95\x99-\x9d\xa4\xa6\xa8\xaa-\xad\xaf-\xb9\xbc-\xbf]|\x85[\x85-\x89\x8e]|\x86[\x83-\x84]|\xb0[\x80-\xae\xb0-\xbf]|\xb1[\x80-\x9e\xa0-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xa4\xab-\xae\xb2-\xb3]|\xb4[\x80-\xa5\xa7\xad\xb0-\xbf]|\xb5[\x80-\xa7\xaf]|\xb6[\x80-\x96\xa0-\xa6\xa8-\xae\xb0-\xb6\xb8-\xbe]|\xb7[\x80-\x86\x88-\x8e\x90-\x96\x98-\x9e]|\xb8\xaf)|\xe3(\x80[\x85-\x86\xb1-\xb5\xbb-\xbc]|\x81[\x81-\xbf]|\x82[\x80-\x96\x9d-\x9f\xa1-\xbf]|\x83[\x80-\xba\xbc-\xbf]|\x84[\x85-\xad\xb1-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\x8e\xa0-\xba]|\x87[\xb0-\xbf]|\x90[\x80-\xa7])) -L111 ({L1111}|{L1112}) -L112 (\xe3(\x90[\xa8-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xbf]|\x9f[\x80-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\xbf]|\xa3[\x80-\xbf]|\xa4[\x80-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\xbf]|\xa7[\x80-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\xbf]|\xac[\x80-\xbf]|\xad[\x80-\xbf]|\xae[\x80-\xbf]|\xaf[\x80-\xbf]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbf]|\xb5[\x80-\xbf]|\xb6[\x80-\xbf]|\xb7[\x80-\xbf]|\xb8[\x80-\xbf]|\xb9[\x80-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbf]|\xbc[\x80-\xbf]|\xbd[\x80-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\xbf])|\xe4(\x80[\x80-\xbf]|\x81[\x80-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xbf]|\x9f[\x80-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\xbf]|\xa3[\x80-\xbf]|\xa4[\x80-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\xbf]|\xa7[\x80-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\xbf]|\xac[\x80-\xbf]|\xad[\x80-\xbf]|\xae[\x80-\xbf]|\xaf[\x80-\xa4])) -L11 ({L111}|{L112}) -L121 (\xe4(\xaf[\xa5-\xbf]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbf]|\xb5[\x80-\xbf]|\xb6[\x80-\xb5]|\xb8[\x80-\xbf]|\xb9[\x80-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbf]|\xbc[\x80-\xbf]|\xbd[\x80-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\xbf])|\xe5(\x80[\x80-\xbf]|\x81[\x80-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xbf]|\x9f[\x80-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\xbf]|\xa3[\x80-\xbf]|\xa4[\x80-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\xbf]|\xa7[\x80-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\xbf]|\xac[\x80-\xbf]|\xad[\x80-\xbf]|\xae[\x80-\xbf]|\xaf[\x80-\xbf]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbf]|\xb5[\x80-\xbf]|\xb6[\x80-\xbf]|\xb7[\x80-\xbf]|\xb8[\x80-\xbf]|\xb9[\x80-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbf]|\xbc[\x80-\xbf]|\xbd[\x80-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\xbf])|\xe6(\x80[\x80-\xbf]|\x81[\x80-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xab])) -L122 (\xe6(\x8f[\xac-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xbf]|\x9f[\x80-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\xbf]|\xa3[\x80-\xbf]|\xa4[\x80-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\xbf]|\xa7[\x80-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\xbf]|\xac[\x80-\xbf]|\xad[\x80-\xbf]|\xae[\x80-\xbf]|\xaf[\x80-\xbf]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbf]|\xb5[\x80-\xbf]|\xb6[\x80-\xbf]|\xb7[\x80-\xbf]|\xb8[\x80-\xbf]|\xb9[\x80-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbf]|\xbc[\x80-\xbf]|\xbd[\x80-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\xbf])|\xe7(\x80[\x80-\xbf]|\x81[\x80-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xbf]|\x9f[\x80-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\xbf]|\xa3[\x80-\xbf]|\xa4[\x80-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\xbf]|\xa7[\x80-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\xbf]|\xac[\x80-\xbf]|\xad[\x80-\xbf]|\xae[\x80-\xa9])) -L12 ({L121}|{L122}) -L1 ({L11}|{L12}) -L211 (\xe7(\xae[\xaa-\xbf]|\xaf[\x80-\xbf]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbf]|\xb5[\x80-\xbf]|\xb6[\x80-\xbf]|\xb7[\x80-\xbf]|\xb8[\x80-\xbf]|\xb9[\x80-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbf]|\xbc[\x80-\xbf]|\xbd[\x80-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\xbf])|\xe8(\x80[\x80-\xbf]|\x81[\x80-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xbf]|\x9f[\x80-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\xbf]|\xa3[\x80-\xbf]|\xa4[\x80-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\xbf]|\xa7[\x80-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\xbf]|\xac[\x80-\xbf]|\xad[\x80-\xbf]|\xae[\x80-\xbf]|\xaf[\x80-\xbf]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbf]|\xb5[\x80-\xbf]|\xb6[\x80-\xbf]|\xb7[\x80-\xbf]|\xb8[\x80-\xbf]|\xb9[\x80-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbf]|\xbc[\x80-\xbf]|\xbd[\x80-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\xbf])|\xe9(\x80[\x80-\xbf]|\x81[\x80-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xa6])) -L2121 (\xe9(\x8d[\xa7-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xbf]|\x9f[\x80-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\xbf]|\xa3[\x80-\xbf]|\xa4[\x80-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\xbf]|\xa7[\x80-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\xbf]|\xac[\x80-\xbf]|\xad[\x80-\xbf]|\xae[\x80-\xbf]|\xaf[\x80-\xbf]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbf]|\xb5[\x80-\xbf]|\xb6[\x80-\xbf]|\xb7[\x80-\xbf]|\xb8[\x80-\xbf]|\xb9[\x80-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbf]|\xbc[\x80-\xbf]|\xbd[\x80-\x84])) -L2122 (\xe9(\xbd[\x85-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\x8c])|\xea(\x80[\x80-\xbf]|\x81[\x80-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\x8c]|\x93[\x90-\xbd]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\x8c\x90-\x9f\xaa-\xab]|\x99[\x80-\xae\xbf]|\x9a[\x80-\x9d\xa0-\xbf]|\x9b[\x80-\xa5]|\x9c[\x97-\x9f\xa2-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\x88\x8b-\x8e\x90-\xad\xb0-\xb1]|\x9f[\xb7-\xbf]|\xa0[\x80-\x81\x83-\x85\x87-\x8a\x8c-\xa2]|\xa1[\x80-\xb3]|\xa2[\x82-\xb3]|\xa3[\xb2-\xb7\xbb]|\xa4[\x8a-\xa5\xb0-\xbf]|\xa5[\x80-\x86\xa0-\xbc]|\xa6[\x84-\xb2]|\xa7[\x8f\xa0-\xa4\xa6-\xaf\xba-\xbe]|\xa8[\x80-\xa8]|\xa9[\x80-\x82\x84-\x8b\xa0-\xb6\xba\xbe-\xbf]|\xaa[\x80-\xaf\xb1\xb5-\xb6\xb9-\xbd]|\xab[\x80\x82\x9b-\x9d\xa0-\xaa\xb2-\xb4]|\xac[\x81-\x86\x89-\x8e\x91-\x96\xa0-\xa6\xa8-\xae\xb0-\xbf]|\xad[\x80-\x9a\x9c-\x9f\xa4-\xa5]|\xaf[\x80-\xa2]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbf]|\xb5[\x80-\xbf]|\xb6[\x80-\xbf]|\xb7[\x80-\xbf]|\xb8[\x80-\x9d])) -L212 ({L2121}|{L2122}) -L21 ({L211}|{L212}) -L221 (\xea(\xb8[\x9e-\xbf]|\xb9[\x80-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbf]|\xbc[\x80-\xbf]|\xbd[\x80-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\xbf])|\xeb(\x80[\x80-\xbf]|\x81[\x80-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xbf]|\x9f[\x80-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\xbf]|\xa3[\x80-\xbf]|\xa4[\x80-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\xbf]|\xa7[\x80-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\xbf]|\xac[\x80-\xbf]|\xad[\x80-\xbf]|\xae[\x80-\xbf]|\xaf[\x80-\xbf]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbf]|\xb5[\x80-\xbf]|\xb6[\x80-\xbf]|\xb7[\x80-\xbf]|\xb8[\x80-\xbf]|\xb9[\x80-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbf]|\xbc[\x80-\xbf]|\xbd[\x80-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\xbf])|\xec(\x80[\x80-\xbf]|\x81[\x80-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\x9a])) -L2221 (\xec(\x97[\x9b-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xbf]|\x9f[\x80-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\xbf]|\xa3[\x80-\xbf]|\xa4[\x80-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\xbf]|\xa7[\x80-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\xbf]|\xac[\x80-\xbf]|\xad[\x80-\xbf]|\xae[\x80-\xbf]|\xaf[\x80-\xbf]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbf]|\xb5[\x80-\xbf]|\xb6[\x80-\xbf]|\xb7[\x80-\xbf]|\xb8[\x80-\xbf]|\xb9[\x80-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbf]|\xbc[\x80-\xbf]|\xbd[\x80-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\xbf])|\xed(\x80[\x80-\xbf]|\x81[\x80-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xb9])) -L2222 (\xed(\x86[\xba-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xa3\xb0-\xbf]|\x9f[\x80-\x86\x8b-\xbb])|\xef(\xa4[\x80-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\xbf]|\xa7[\x80-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xad\xb0-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\x99]|\xac[\x80-\x86\x93-\x97\x9d\x9f-\xa8\xaa-\xb6\xb8-\xbc\xbe]|\xad[\x80-\x81\x83-\x84\x86-\xbf]|\xae[\x80-\xb1]|\xaf[\x93-\xbf]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbd]|\xb5[\x90-\xbf]|\xb6[\x80-\x8f\x92-\xbf]|\xb7[\x80-\x87\xb0-\xbb]|\xb9[\xb0-\xb4\xb6-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbc]|\xbc[\xa1-\xba]|\xbd[\x81-\x9a\xa6-\xbf]|\xbe[\x80-\xbe]|\xbf[\x82-\x87\x8a-\x8f\x92-\x97\x9a-\x9c])|\xf0(\x90(\xa0[\x88\xbc]|\xa8\x80)|\x91(\x85\xb6|\x87\x9a|\x8c\xbd|\x93\x87|\x99\x84|\xa3\xbf)|\x96(\xbd\x90)|\x9d(\x92[\x9c\xa2\xbb]|\x95\x86|\x9f[\x8a-\x8b])|\x9e(\xb8[\xa4\xa7\xb9\xbb]|\xb9[\x82\x87\x89\x8b\x94\x97\x99\x9b\x9d\x9f\xa4\xbe]))) -L222 ({L2221}|{L2222}) -L22 ({L221}|{L222}) -L2 ({L21}|{L22}) -L ({L1}|{L2}) -C1111 ([\x00-\x1f\x7f]|\xc2[\x80-\x9f\xad]|\xcd[\xb8-\xb9]|\xce[\x80-\x83\x8b\x8d\xa2]|\xd4\xb0|\xd5[\x97-\x98\xa0]|\xd6[\x88\x8b-\x8c\x90]|\xd7[\x88-\x8f\xab-\xaf\xb5-\xbf]|\xd8[\x80-\x85\x9c-\x9d]|\xdb\x9d|\xdc[\x8e-\x8f]|\xdd[\x8b-\x8c]|\xde[\xb2-\xbf]|\xdf[\xbb-\xbf]|\xe0(\xa0[\xae-\xaf\xbf]|\xa1[\x9c-\x9d\x9f-\xbf]|\xa2[\x80-\x9f\xb3-\xbf]|\xa3[\x80-\xa3]|\xa6[\x84\x8d-\x8e\x91-\x92\xa9\xb1\xb3-\xb5\xba-\xbb]|\xa7[\x85-\x86\x89-\x8a\x8f-\x96\x98-\x9b\x9e\xa4-\xa5\xbc-\xbf]|\xa8[\x80\x84\x8b-\x8e\x91-\x92\xa9\xb1\xb4\xb7\xba-\xbb\xbd]|\xa9[\x83-\x86\x89-\x8a\x8e-\x90\x92-\x98\x9d\x9f-\xa5\xb6-\xbf]|\xaa[\x80\x84\x8e\x92\xa9\xb1\xb4\xba-\xbb]|\xab[\x86\x8a\x8e-\x8f\x91-\x9f\xa4-\xa5\xb2-\xbf]|\xac[\x80\x84\x8d-\x8e\x91-\x92\xa9\xb1\xb4\xba-\xbb]|\xad[\x85-\x86\x89-\x8a\x8e-\x95\x98-\x9b\x9e\xa4-\xa5\xb8-\xbf]|\xae[\x80-\x81\x84\x8b-\x8d\x91\x96-\x98\x9b\x9d\xa0-\xa2\xa5-\xa7\xab-\xad\xba-\xbd]|\xaf[\x83-\x85\x89\x8e-\x8f\x91-\x96\x98-\xa5\xbb-\xbf]|\xb0[\x84\x8d\x91\xa9\xba-\xbc]|\xb1[\x85\x89\x8e-\x94\x97\x9a-\x9f\xa4-\xa5\xb0-\xb7]|\xb2[\x80\x84\x8d\x91\xa9\xb4\xba-\xbb]|\xb3[\x85\x89\x8e-\x94\x97-\x9d])) -C1112 (\xe0(\xb3[\x9f\xa4-\xa5\xb0\xb3-\xbf]|\xb4[\x80\x84\x8d\x91\xbb-\xbc]|\xb5[\x85\x89\x8f-\x96\x98-\x9f\xa4-\xa5\xb6-\xb8]|\xb6[\x80-\x81\x84\x97-\x99\xb2\xbc\xbe-\xbf]|\xb7[\x87-\x89\x8b-\x8e\x95\x97\xa0-\xa5\xb0-\xb1\xb5-\xbf]|\xb8[\x80\xbb-\xbe]|\xb9[\x9c-\xbf]|\xba[\x80\x83\x85-\x86\x89\x8b-\x8c\x8e-\x93\x98\xa0\xa4\xa6\xa8-\xa9\xac\xba\xbe-\xbf]|\xbb[\x85\x87\x8e-\x8f\x9a-\x9b\xa0-\xbf]|\xbd[\x88\xad-\xb0]|\xbe[\x98\xbd]|\xbf[\x8d\x9b-\xbf])|\xe1(\x83[\x86\x88-\x8c\x8e-\x8f]|\x89[\x89\x8e-\x8f\x97\x99\x9e-\x9f]|\x8a[\x89\x8e-\x8f\xb1\xb6-\xb7\xbf]|\x8b[\x81\x86-\x87\x97]|\x8c[\x91\x96-\x97]|\x8d[\x9b-\x9c\xbd-\xbf]|\x8e[\x9a-\x9f]|\x8f[\xb5-\xbf]|\x9a[\x9d-\x9f]|\x9b[\xb9-\xbf]|\x9c[\x8d\x95-\x9f\xb7-\xbf]|\x9d[\x94-\x9f\xad\xb1\xb4-\xbf]|\x9f[\x9e-\x9f\xaa-\xaf\xba-\xbf]|\xa0[\x8e-\x8f\x9a-\x9f]|\xa1[\xb8-\xbf]|\xa2[\xab-\xaf]|\xa3[\xb6-\xbf]|\xa4[\x9f\xac-\xaf\xbc-\xbf]|\xa5[\x81-\x83\xae-\xaf\xb5-\xbf]|\xa6[\xac-\xaf]|\xa7[\x8a-\x8f\x9b-\x9d]|\xa8[\x9c-\x9d]|\xa9[\x9f\xbd-\xbe]|\xaa[\x8a-\x8f\x9a-\x9f\xae-\xaf\xbf]|\xab[\x80-\xbf]|\xad[\x8c-\x8f\xbd-\xbf]|\xaf[\xb4-\xbb]|\xb0[\xb8-\xba]|\xb1[\x8a-\x8c]|\xb2[\x80-\x8a])) -C111 ({C1111}|{C1112}) -C112 (\xe1(\xb2[\x8b-\xbf]|\xb3[\x88-\x8f\xb7\xba-\xbf]|\xb7[\xb6-\xbb]|\xbc[\x96-\x97\x9e-\x9f]|\xbd[\x86-\x87\x8e-\x8f\x98\x9a\x9c\x9e\xbe-\xbf]|\xbe\xb5|\xbf[\x85\x94-\x95\x9c\xb0-\xb1\xb5\xbf])|\xe2(\x80[\x8b-\x8f\xaa-\xae]|\x81[\xa0-\xaf\xb2-\xb3]|\x82[\x8f\x9d-\x9f\xbe-\xbf]|\x83[\x80-\x8f\xb1-\xbf]|\x86[\x8a-\x8f]|\x8f[\xbb-\xbf]|\x90[\xa7-\xbf]|\x91[\x8b-\x9f]|\xad[\xb4-\xb5]|\xae[\x96-\x97\xba-\xbc]|\xaf[\x89\x92-\xbf]|\xb0\xaf|\xb1\x9f|\xb3[\xb4-\xb8]|\xb4[\xa6\xa8-\xac\xae-\xaf]|\xb5[\xa8-\xae\xb1-\xbe]|\xb6[\x97-\x9f\xa7\xaf\xb7\xbf]|\xb7[\x87\x8f\x97\x9f]|\xb9[\x83-\xbf]|\xba\x9a|\xbb[\xb4-\xbf]|\xbf[\x96-\xaf\xbc-\xbf])|\xe3(\x81\x80|\x82[\x97-\x98]|\x84[\x80-\x84\xae-\xb0]|\x86[\x8f\xbb-\xbf]|\x87[\xa4-\xaf]|\x88\x9f|\x8b\xbf)|\xe4(\xb6[\xb6-\xbf])|\xe9(\xbf[\x8d-\xbf])|\xea(\x92[\x8d-\x8f]|\x93[\x87-\x8f]|\x98[\xac-\xbf]|\x9a\x9e|\x9b[\xb8-\xbf]|\x9e[\x8f\xae-\xaf\xb2-\xbf]|\x9f[\x80-\xb6]|\xa0[\xac-\xaf\xba-\xbf]|\xa1[\xb8-\xbf]|\xa3[\x85-\x8d\x9a-\x9f\xbc-\xbf]|\xa5[\x94-\x9e\xbd-\xbf]|\xa7[\x8e\x9a-\x9d\xbf]|\xa8[\xb7-\xbf]|\xa9[\x8e-\x8f\x9a-\x9b]|\xab[\x83-\x9a\xb7-\xbf]|\xac[\x80\x87-\x88\x8f-\x90\x97-\x9f\xa7\xaf]|\xad[\xa0-\xa3\xa6-\xbf]|\xae[\x80-\xbf]|\xaf[\xae-\xaf\xba-\xbf])|\xed(\x9e[\xa4-\xaf]|\x9f[\x87-\x8a\xbc-\xbf])|\xee(\x80[\x80-\xbf]|\x81[\x80-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\x87])) -C11 ({C111}|{C112}) -C12 (\xee(\x83[\x88-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xbf]|\x9f[\x80-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\xbf]|\xa3[\x80-\xbf]|\xa4[\x80-\xae])) -C1 ({C11}|{C12}) -C2 (\xee(\xa4[\xaf-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\xbf]|\xa7[\x80-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\xbf]|\xac[\x80-\xbf]|\xad[\x80-\xbf]|\xae[\x80-\xbf]|\xaf[\x80-\xbf]|\xb0[\x80-\xbf]|\xb1[\x80-\xbf]|\xb2[\x80-\xbf]|\xb3[\x80-\xbf]|\xb4[\x80-\xbf]|\xb5[\x80-\xbf]|\xb6[\x80-\xbf]|\xb7[\x80-\xbf]|\xb8[\x80-\xbf]|\xb9[\x80-\xbf]|\xba[\x80-\xbf]|\xbb[\x80-\xbf]|\xbc[\x80-\xbf]|\xbd[\x80-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\xbf])|\xef(\x80[\x80-\xbf]|\x81[\x80-\xbf]|\x82[\x80-\xbf]|\x83[\x80-\xbf]|\x84[\x80-\xbf]|\x85[\x80-\xbf]|\x86[\x80-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf]|\x90[\x80-\xbf]|\x91[\x80-\xbf]|\x92[\x80-\xbf]|\x93[\x80-\xbf]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xbf]|\x9e[\x80-\xbf]|\x9f[\x80-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\xbf]|\xa3[\x80-\xbf]|\xa9[\xae-\xaf]|\xab[\x9a-\xbf]|\xac[\x87-\x92\x98-\x9c\xb7\xbd\xbf]|\xad[\x82\x85]|\xaf[\x82-\x92]|\xb5[\x80-\x8f]|\xb6[\x90-\x91]|\xb7[\x88-\xaf\xbe-\xbf]|\xb8[\x9a-\x9f\xae-\xaf]|\xb9[\x93\xa7\xac-\xaf\xb5]|\xbb[\xbd-\xbf]|\xbc\x80|\xbe\xbf|\xbf[\x80-\x81\x88-\x89\x90-\x91\x98-\x99\x9d-\x9f\xa7\xaf-\xbb\xbe-\xbf])|\xf0(\x90(\x80[\x8c\xa7\xbb\xbe]|\x8e\x9e|\xa0[\x89\xb6]|\xa1\x96|\xa8[\x84\x94\x98])|\x91(\x82\xbd|\x84\xb5|\x88\x92|\x8c[\x84\xa9\xb1\xb4])|\x92(\x91\xaf)|\x96(\xa9\x9f|\xad[\x9a\xa2])|\x9d(\x91\x95|\x92[\x9d\xad\xba\xbc]|\x93\x84|\x94[\x86\x95\x9d\xba\xbf]|\x95[\x85\x91])|\x9e(\xb8[\x84\xa0\xa3\xa8\xb3\xb8\xba]|\xb9[\x88\x8a\x8c\x90\x93\x98\x9a\x9c\x9e\xa0\xa3\xab\xb3\xb8\xbd\xbf]|\xba[\x8a\xa4\xaa])|\x9f(\x83[\x80\x90]|\x84\xaf|\x93\xbf|\x95\xba|\x96\xa4))|\xf3(\xa0(\x80\x81))) -C ({C1}|{C2}) -M1 (\xcc[\x80-\xbf]|\xcd[\x80-\xaf]|\xd2[\x83-\x89]|\xd6[\x91-\xbd\xbf]|\xd7[\x81-\x82\x84-\x85\x87]|\xd8[\x90-\x9a]|\xd9[\x8b-\x9f\xb0]|\xdb[\x96-\x9c\x9f-\xa4\xa7-\xa8\xaa-\xad]|\xdc[\x91\xb0-\xbf]|\xdd[\x80-\x8a]|\xde[\xa6-\xb0]|\xdf[\xab-\xb3]|\xe0(\xa0[\x96-\x99\x9b-\xa3\xa5-\xa7\xa9-\xad]|\xa1[\x99-\x9b]|\xa3[\xa4-\xbf]|\xa4[\x80-\x83\xba-\xbc\xbe-\xbf]|\xa5[\x80-\x8f\x91-\x97\xa2-\xa3]|\xa6[\x81-\x83\xbc\xbe-\xbf]|\xa7[\x80-\x84\x87-\x88\x8b-\x8d\x97\xa2-\xa3]|\xa8[\x81-\x83\xbc\xbe-\xbf]|\xa9[\x80-\x82\x87-\x88\x8b-\x8d\x91\xb0-\xb1\xb5]|\xaa[\x81-\x83\xbc\xbe-\xbf]|\xab[\x80-\x85\x87-\x89\x8b-\x8d\xa2-\xa3]|\xac[\x81-\x83\xbc\xbe-\xbf]|\xad[\x80-\x84\x87-\x88\x8b-\x8d\x96-\x97\xa2-\xa3]|\xae[\x82\xbe-\xbf]|\xaf[\x80-\x82\x86-\x88\x8a-\x8d\x97]|\xb0[\x80-\x83\xbe-\xbf]|\xb1[\x80-\x84\x86-\x88\x8a-\x8d\x95-\x96\xa2-\xa3]|\xb2[\x81-\x83\xbc\xbe-\xbf]|\xb3[\x80-\x84\x86-\x88\x8a-\x8d\x95-\x96\xa2-\xa3]|\xb4[\x81-\x83\xbe-\xbf]|\xb5[\x80-\x84\x86-\x88\x8a-\x8d\x97\xa2-\xa3]|\xb6[\x82-\x83]|\xb7[\x8a\x8f-\x94\x96\x98-\x9f\xb2-\xb3]|\xb8[\xb1\xb4-\xba]|\xb9[\x87-\x8e]|\xba[\xb1\xb4-\xb9\xbb-\xbc]|\xbb[\x88-\x8d]|\xbc[\x98-\x99\xb5\xb7\xb9\xbe-\xbf]|\xbd[\xb1-\xbf]|\xbe[\x80-\x84\x86-\x87\x8d-\x97\x99-\xbc]|\xbf\x86)|\xe1(\x80[\xab-\xb6])) -M2 (\xe1(\x80[\xb7-\xbe]|\x81[\x96-\x99\x9e-\xa0\xa2-\xa4\xa7-\xad\xb1-\xb4]|\x82[\x82-\x8d\x8f\x9a-\x9d]|\x8d[\x9d-\x9f]|\x9c[\x92-\x94\xb2-\xb4]|\x9d[\x92-\x93\xb2-\xb3]|\x9e[\xb4-\xbf]|\x9f[\x80-\x93\x9d]|\xa0[\x8b-\x8d]|\xa2\xa9|\xa4[\xa0-\xab\xb0-\xbb]|\xa6[\xb0-\xbf]|\xa7[\x80\x88-\x89]|\xa8[\x97-\x9b]|\xa9[\x95-\x9e\xa0-\xbc\xbf]|\xaa[\xb0-\xbe]|\xac[\x80-\x84\xb4-\xbf]|\xad[\x80-\x84\xab-\xb3]|\xae[\x80-\x82\xa1-\xad]|\xaf[\xa6-\xb3]|\xb0[\xa4-\xb7]|\xb3[\x90-\x92\x94-\xa8\xad\xb2-\xb4\xb8-\xb9]|\xb7[\x80-\xb5\xbc-\xbf])|\xe2(\x83[\x90-\xb0]|\xb3[\xaf-\xb1]|\xb5\xbf|\xb7[\xa0-\xbf])|\xe3(\x80[\xaa-\xaf]|\x82[\x99-\x9a])|\xea(\x99[\xaf-\xb2\xb4-\xbd]|\x9a\x9f|\x9b[\xb0-\xb1]|\xa0[\x82\x86\x8b\xa3-\xa7]|\xa2[\x80-\x81\xb4-\xbf]|\xa3[\x80-\x84\xa0-\xb1]|\xa4[\xa6-\xad]|\xa5[\x87-\x93]|\xa6[\x80-\x83\xb3-\xbf]|\xa7[\x80\xa5]|\xa8[\xa9-\xb6]|\xa9[\x83\x8c-\x8d\xbb-\xbd]|\xaa[\xb0\xb2-\xb4\xb7-\xb8\xbe-\xbf]|\xab[\x81\xab-\xaf\xb5-\xb6]|\xaf[\xa3-\xaa\xac-\xad])|\xef(\xac\x9e|\xb8[\x80-\x8f\xa0-\xad])|\xf0(\x90(\x87\xbd|\x8b\xa0|\xa8\xbf)|\x91(\x80[\x80-\x82]|\x82\x82|\x84\xac|\x85\xb3|\x86\x82|\x88[\xb4-\xb5]|\x8b\x9f|\x8c[\x81\xbc]|\x8d[\x80\x97]|\x92[\xb9-\xba]|\x93\x81|\x96\xbe|\x98[\xbd-\xbe]|\x9a[\xab-\xad\xb6-\xb7]))) -M ({M1}|{M2}) -N ([0-9]|\xc2[\xb2-\xb3\xb9\xbc-\xbe]|\xd9[\xa0-\xa9]|\xdb[\xb0-\xb9]|\xdf[\x80-\x89]|\xe0(\xa5[\xa6-\xaf]|\xa7[\xa6-\xaf\xb4-\xb9]|\xa9[\xa6-\xaf]|\xab[\xa6-\xaf]|\xad[\xa6-\xaf\xb2-\xb7]|\xaf[\xa6-\xb2]|\xb1[\xa6-\xaf\xb8-\xbe]|\xb3[\xa6-\xaf]|\xb5[\xa6-\xb5]|\xb7[\xa6-\xaf]|\xb9[\x90-\x99]|\xbb[\x90-\x99]|\xbc[\xa0-\xb3])|\xe1(\x81[\x80-\x89]|\x82[\x90-\x99]|\x8d[\xa9-\xbc]|\x9b[\xae-\xb0]|\x9f[\xa0-\xa9\xb0-\xb9]|\xa0[\x90-\x99]|\xa5[\x86-\x8f]|\xa7[\x90-\x9a]|\xaa[\x80-\x89\x90-\x99]|\xad[\x90-\x99]|\xae[\xb0-\xb9]|\xb1[\x80-\x89\x90-\x99])|\xe2(\x81[\xb0\xb4-\xb9]|\x82[\x80-\x89]|\x85[\x90-\xbf]|\x86[\x80-\x82\x85-\x89]|\x91[\xa0-\xbf]|\x92[\x80-\x9b]|\x93[\xaa-\xbf]|\x9d[\xb6-\xbf]|\x9e[\x80-\x93]|\xb3\xbd)|\xe3(\x80[\x87\xa1-\xa9\xb8-\xba]|\x86[\x92-\x95]|\x88[\xa0-\xa9]|\x89[\x88-\x8f\x91-\x9f]|\x8a[\x80-\x89\xb1-\xbf])|\xea(\x98[\xa0-\xa9]|\x9b[\xa6-\xaf]|\xa0[\xb0-\xb5]|\xa3[\x90-\x99]|\xa4[\x80-\x89]|\xa7[\x90-\x99\xb0-\xb9]|\xa9[\x90-\x99]|\xaf[\xb0-\xb9])|\xef(\xbc[\x90-\x99])|\xf0(\x90(\x8d[\x81\x8a]))) -P ([!-\#%-\*,-\/\:-;\?-@\[-\]_\{\}]|\xc2[\xa1\xa7\xab\xb6-\xb7\xbb\xbf]|\xcd\xbe|\xce\x87|\xd5[\x9a-\x9f]|\xd6[\x89-\x8a\xbe]|\xd7[\x80\x83\x86\xb3-\xb4]|\xd8[\x89-\x8a\x8c-\x8d\x9b\x9e-\x9f]|\xd9[\xaa-\xad]|\xdb\x94|\xdc[\x80-\x8d]|\xdf[\xb7-\xb9]|\xe0(\xa0[\xb0-\xbe]|\xa1\x9e|\xa5[\xa4-\xa5\xb0]|\xab\xb0|\xb7\xb4|\xb9[\x8f\x9a-\x9b]|\xbc[\x84-\x92\x94\xba-\xbd]|\xbe\x85|\xbf[\x90-\x94\x99-\x9a])|\xe1(\x81[\x8a-\x8f]|\x83\xbb|\x8d[\xa0-\xa8]|\x90\x80|\x99[\xad-\xae]|\x9a[\x9b-\x9c]|\x9b[\xab-\xad]|\x9c[\xb5-\xb6]|\x9f[\x94-\x96\x98-\x9a]|\xa0[\x80-\x8a]|\xa5[\x84-\x85]|\xa8[\x9e-\x9f]|\xaa[\xa0-\xa6\xa8-\xad]|\xad[\x9a-\xa0]|\xaf[\xbc-\xbf]|\xb0[\xbb-\xbf]|\xb1[\xbe-\xbf]|\xb3[\x80-\x87\x93])|\xe2(\x80[\x90-\xa7\xb0-\xbf]|\x81[\x80-\x83\x85-\x91\x93-\x9e\xbd-\xbe]|\x82[\x8d-\x8e]|\x8c[\x88-\x8b\xa9-\xaa]|\x9d[\xa8-\xb5]|\x9f[\x85-\x86\xa6-\xaf]|\xa6[\x83-\x98]|\xa7[\x98-\x9b\xbc-\xbd]|\xb3[\xb9-\xbc\xbe-\xbf]|\xb5\xb0|\xb8[\x80-\xae\xb0-\xbf]|\xb9[\x80-\x82])|\xe3(\x80[\x81-\x83\x88-\x91\x94-\x9f\xb0\xbd]|\x82\xa0|\x83\xbb)|\xea(\x93[\xbe-\xbf]|\x98[\x8d-\x8f]|\x99[\xb3\xbe]|\x9b[\xb2-\xb7]|\xa1[\xb4-\xb7]|\xa3[\x8e-\x8f\xb8-\xba]|\xa4[\xae-\xaf]|\xa5\x9f|\xa7[\x81-\x8d\x9e-\x9f]|\xa9[\x9c-\x9f]|\xab[\x9e-\x9f\xb0-\xb1]|\xaf\xab)|\xef(\xb4[\xbe-\xbf]|\xb8[\x90-\x99\xb0-\xbf]|\xb9[\x80-\x92\x94-\xa1\xa3\xa8\xaa-\xab]|\xbc[\x81-\x83\x85-\x8a\x8c-\x8f\x9a-\x9b\x9f-\xa0\xbb-\xbd\xbf]|\xbd[\x9b\x9d\x9f-\xa5])|\xf0(\x90(\x8e\x9f|\x8f\x90|\x95\xaf|\xa1\x97|\xa4[\x9f\xbf]|\xa9\xbf)|\x91(\x87\x8d|\x93\x86)|\x96(\xab\xb5|\xad\x84)|\x9b(\xb2\x9f))) -S1 ([\$\+<->\^`\|~]|\xc2[\xa2-\xa6\xa8-\xa9\xac\xae-\xb1\xb4\xb8]|\xc3[\x97\xb7]|\xcb[\x82-\x85\x92-\x9f\xa5-\xab\xad\xaf-\xbf]|\xcd\xb5|\xce[\x84-\x85]|\xcf\xb6|\xd2\x82|\xd6[\x8d-\x8f]|\xd8[\x86-\x88\x8b\x8e-\x8f]|\xdb[\x9e\xa9\xbd-\xbe]|\xdf\xb6|\xe0(\xa7[\xb2-\xb3\xba-\xbb]|\xab\xb1|\xad\xb0|\xaf[\xb3-\xba]|\xb1\xbf|\xb5\xb9|\xb8\xbf|\xbc[\x81-\x83\x93\x95-\x97\x9a-\x9f\xb4\xb6\xb8]|\xbe[\xbe-\xbf]|\xbf[\x80-\x85\x87-\x8c\x8e-\x8f\x95-\x98])|\xe1(\x82[\x9e-\x9f]|\x8e[\x90-\x99]|\x9f\x9b|\xa5\x80|\xa7[\x9e-\xbf]|\xad[\xa1-\xaa\xb4-\xbc]|\xbe[\xbd\xbf]|\xbf[\x80-\x81\x8d-\x8f\x9d-\x9f\xad-\xaf\xbd-\xbe])|\xe2(\x81[\x84\x92\xba-\xbc]|\x82[\x8a-\x8c\xa0-\xbd]|\x84[\x80-\x81\x83-\x86\x88-\x89\x94\x96-\x98\x9e-\xa3\xa5\xa7\xa9\xae\xba-\xbb]|\x85[\x80-\x84\x8a-\x8d\x8f]|\x86[\x90-\xbf]|\x87[\x80-\xbf]|\x88[\x80-\xbf]|\x89[\x80-\xbf]|\x8a[\x80-\xbf]|\x8b[\x80-\xbf]|\x8c[\x80-\x87\x8c-\xa8\xab-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xba]|\x90[\x80-\xa6]|\x91[\x80-\x8a]|\x92[\x9c-\xbf]|\x93[\x80-\xa9]|\x94[\x80-\xbf]|\x95[\x80-\xbf]|\x96[\x80-\xbf]|\x97[\x80-\xbf]|\x98[\x80-\xbf]|\x99[\x80-\xbf]|\x9a[\x80-\xbf]|\x9b[\x80-\xbf]|\x9c[\x80-\xbf]|\x9d[\x80-\xa7]|\x9e[\x94-\xbf]|\x9f[\x80-\x84\x87-\xa5\xb0-\xbf]|\xa0[\x80-\xbf]|\xa1[\x80-\xbf]|\xa2[\x80-\x88])) -S2 (\xe2(\xa2[\x89-\xbf]|\xa3[\x80-\xbf]|\xa4[\x80-\xbf]|\xa5[\x80-\xbf]|\xa6[\x80-\x82\x99-\xbf]|\xa7[\x80-\x97\x9c-\xbb\xbe-\xbf]|\xa8[\x80-\xbf]|\xa9[\x80-\xbf]|\xaa[\x80-\xbf]|\xab[\x80-\xbf]|\xac[\x80-\xbf]|\xad[\x80-\xb3\xb6-\xbf]|\xae[\x80-\x95\x98-\xb9\xbd-\xbf]|\xaf[\x80-\x88\x8a-\x91]|\xb3[\xa5-\xaa]|\xba[\x80-\x99\x9b-\xbf]|\xbb[\x80-\xb3]|\xbc[\x80-\xbf]|\xbd[\x80-\xbf]|\xbe[\x80-\xbf]|\xbf[\x80-\x95\xb0-\xbb])|\xe3(\x80[\x84\x92-\x93\xa0\xb6-\xb7\xbe-\xbf]|\x82[\x9b-\x9c]|\x86[\x90-\x91\x96-\x9f]|\x87[\x80-\xa3]|\x88[\x80-\x9e\xaa-\xbf]|\x89[\x80-\x87\x90\xa0-\xbf]|\x8a[\x8a-\xb0]|\x8b[\x80-\xbe]|\x8c[\x80-\xbf]|\x8d[\x80-\xbf]|\x8e[\x80-\xbf]|\x8f[\x80-\xbf])|\xe4(\xb7[\x80-\xbf])|\xea(\x92[\x90-\xbf]|\x93[\x80-\x86]|\x9c[\x80-\x96\xa0-\xa1]|\x9e[\x89-\x8a]|\xa0[\xa8-\xab\xb6-\xb9]|\xa9[\xb7-\xb9]|\xad\x9b)|\xef(\xac\xa9|\xae[\xb2-\xbf]|\xaf[\x80-\x81]|\xb7[\xbc-\xbd]|\xb9[\xa2\xa4-\xa6\xa9]|\xbc[\x84\x8b\x9c-\x9e\xbe]|\xbd[\x80\x9c\x9e]|\xbf[\xa0-\xa6\xa8-\xae\xbc-\xbd])|\xf0(\x90(\x86[\x8c\xa0]|\xab\x88)|\x96(\xad\x85)|\x9b(\xb2\x9c)|\x9d(\x89\x85|\x9b[\x81\x9b\xbb]|\x9c[\x95\xb5]|\x9d[\x8f\xaf]|\x9e[\x89\xa9]|\x9f\x83))) -S ({S1}|{S2}) -Z (\x20|\xc2\xa0|\xe1(\x9a\x80)|\xe2(\x80[\x80-\x8a\xa8-\xa9\xaf]|\x81\x9f)|\xe3(\x80\x80)) - -DIGIT [0-9] -EXPO [eE][-+]?[0-9]+ - -%% /*** Filter language Part ***/ - -[ \t] ; -[\n]+ ; - -\<\<(\\(.|\n)|[^\\>\n])*\>\> yylval.string = unquote(yytext); return STRING; - -[+()=/*^,\.\{\}\[\]:;@\?#] return *yytext; - -"==" return EQ; -"!=" return NEQ; -">" return GT; -"<" return LT; -">=" return GTE; -"<=" return LTE; - -"-" return MINUSSIGN; -"\xe2\x88\x92" return MINUSSIGN; - -"nm" yylval.quantity.scaler = Quantity::NanoMetre; yylval.quantity.unitStr = yytext; return UNIT; // nano meter -"um" yylval.quantity.scaler = Quantity::MicroMetre; yylval.quantity.unitStr = yytext; return UNIT; // micro meter -"\xC2\xB5m" yylval.quantity.scaler = Quantity::MicroMetre; yylval.quantity.unitStr = yytext; return UNIT; // micro meter (greek micro in UTF8) -"mm" yylval.quantity.scaler = Quantity::MilliMetre; yylval.quantity.unitStr = yytext; return UNIT; // milli meter (internal standard length) -"cm" yylval.quantity.scaler = Quantity::CentiMetre; yylval.quantity.unitStr = yytext; return UNIT; // centi meter -"dm" yylval.quantity.scaler = Quantity::DeciMetre; yylval.quantity.unitStr = yytext; return UNIT; // deci meter -"m" yylval.quantity.scaler = Quantity::Metre; yylval.quantity.unitStr = yytext; return UNIT; // metre -"km" yylval.quantity.scaler = Quantity::KiloMetre; yylval.quantity.unitStr = yytext; return UNIT; // kilo meter - -"l" yylval.quantity.scaler = Quantity::Liter; yylval.quantity.unitStr = yytext; return UNIT; // Liter dm^3 - -"ug" yylval.quantity.scaler = Quantity::MicroGram; yylval.quantity.unitStr = yytext; return UNIT; // micro gram -"\xC2\xB5g" yylval.quantity.scaler = Quantity::MicroGram; yylval.quantity.unitStr = yytext; return UNIT; // micro gram -"mg" yylval.quantity.scaler = Quantity::MilliGram; yylval.quantity.unitStr = yytext; return UNIT; // milli gram -"g" yylval.quantity.scaler = Quantity::Gram; yylval.quantity.unitStr = yytext; return UNIT; // gram -"kg" yylval.quantity.scaler = Quantity::KiloGram; yylval.quantity.unitStr = yytext; return UNIT; // kilo gram (internal standard for mass) -"t" yylval.quantity.scaler = Quantity::Ton; yylval.quantity.unitStr = yytext; return UNIT; // Metric Tonne - -"s" yylval.quantity.scaler = Quantity::Second; yylval.quantity.unitStr = yytext; return UNIT; // second (internal standard time) -"min" yylval.quantity.scaler = Quantity::Minute; yylval.quantity.unitStr = yytext; return UNIT; // minute -"h" yylval.quantity.scaler = Quantity::Hour; yylval.quantity.unitStr = yytext; return UNIT; // hour - -"A" yylval.quantity.scaler = Quantity::Ampere; yylval.quantity.unitStr = yytext; return UNIT; // Ampere (internal standard electric current) -"mA" yylval.quantity.scaler = Quantity::MilliAmpere; yylval.quantity.unitStr = yytext; return UNIT; // milli Ampere -"kA" yylval.quantity.scaler = Quantity::KiloAmpere; yylval.quantity.unitStr = yytext; return UNIT; // kilo Ampere -"MA" yylval.quantity.scaler = Quantity::MegaAmpere; yylval.quantity.unitStr = yytext; return UNIT; // Mega Ampere - -"K" yylval.quantity.scaler = Quantity::Kelvin; yylval.quantity.unitStr = yytext; return UNIT; // Kelvin (internal standard thermodynamic temperature) -"mK" yylval.quantity.scaler = Quantity::MilliKelvin; yylval.quantity.unitStr = yytext; return UNIT; // Kelvin -"\xC2\xB5K" yylval.quantity.scaler = Quantity::MicroKelvin; yylval.quantity.unitStr = yytext; return UNIT; // Kelvin -"uK" yylval.quantity.scaler = Quantity::MicroKelvin; yylval.quantity.unitStr = yytext; return UNIT; // Kelvin - -"mol" yylval.quantity.scaler = Quantity::Mole; yylval.quantity.unitStr = yytext; return UNIT; // Mole (internal standard amount of substance) - -"cd" yylval.quantity.scaler = Quantity::Candela; yylval.quantity.unitStr = yytext; return UNIT; // Candela (internal standard luminous intensity) - -"in" yylval.quantity.scaler = Quantity::Inch; yylval.quantity.unitStr = yytext; return UNIT; // inch -"\"" yylval.quantity.scaler = Quantity::Inch; yylval.quantity.unitStr = yytext; return UNIT; // inch -"ft" yylval.quantity.scaler = Quantity::Foot; yylval.quantity.unitStr = yytext; return UNIT; // foot -"'" yylval.quantity.scaler = Quantity::Foot; yylval.quantity.unitStr = yytext; return UNIT; // foot -"thou" yylval.quantity.scaler = Quantity::Thou; yylval.quantity.unitStr = yytext; return UNIT; // thou (in/1000) -"mil" yylval.quantity.scaler = Quantity::Thou; yylval.quantity.unitStr = yytext; return UNIT; // mil (the thou in US) -"yd" yylval.quantity.scaler = Quantity::Yard; yylval.quantity.unitStr = yytext; return UNIT; // yard -"mi" yylval.quantity.scaler = Quantity::Mile; yylval.quantity.unitStr = yytext; return UNIT; // mile - - - -"lb" yylval.quantity.scaler = Quantity::Pound; yylval.quantity.unitStr = yytext; return UNIT; // pound -"lbm" yylval.quantity.scaler = Quantity::Pound; yylval.quantity.unitStr = yytext; return UNIT; // pound -"oz" yylval.quantity.scaler = Quantity::Ounce; yylval.quantity.unitStr = yytext; return UNIT; // ounce -"st" yylval.quantity.scaler = Quantity::Stone; yylval.quantity.unitStr = yytext; return UNIT; // Stone -"cwt" yylval.quantity.scaler = Quantity::Hundredweights; yylval.quantity.unitStr = yytext; return UNIT; // hundredweights - -"lbf" yylval.quantity.scaler = Quantity::PoundForce; yylval.quantity.unitStr = yytext; return UNIT; // pound - -"N" yylval.quantity.scaler = Quantity::Newton; yylval.quantity.unitStr = yytext; return UNIT; // Newton (kg*m/s^2)a-za-za-z -"kN" yylval.quantity.scaler = Quantity::KiloNewton; yylval.quantity.unitStr = yytext; return UNIT; // Newton -"MN" yylval.quantity.scaler = Quantity::MegaNewton; yylval.quantity.unitStr = yytext; return UNIT; // Newton -"mN" yylval.quantity.scaler = Quantity::MilliNewton; yylval.quantity.unitStr = yytext; return UNIT; // Newton - -"Pa" yylval.quantity.scaler = Quantity::Pascal; yylval.quantity.unitStr = yytext; return UNIT; // Pascal (kg/m*s^2 or N/m^2) -"kPa" yylval.quantity.scaler = Quantity::KiloPascal; yylval.quantity.unitStr = yytext; return UNIT; // Pascal -"MPa" yylval.quantity.scaler = Quantity::MegaPascal; yylval.quantity.unitStr = yytext; return UNIT; // Pascal -"GPa" yylval.quantity.scaler = Quantity::GigaPascal; yylval.quantity.unitStr = yytext; return UNIT; // Pascal - -"Torr" yylval.quantity.scaler = Quantity::Torr; yylval.quantity.unitStr = yytext; return UNIT; // portion of Pascal ( 101325/760 ) -"mTorr" yylval.quantity.scaler = Quantity::mTorr; yylval.quantity.unitStr = yytext; return UNIT; // -"uTorr" yylval.quantity.scaler = Quantity::yTorr; yylval.quantity.unitStr = yytext; return UNIT; // -"\xC2\xB5Torr" yylval.quantity.scaler = Quantity::yTorr; yylval.quantity.unitStr = yytext; return UNIT; // - -"psi" yylval.quantity.scaler = Quantity::PSI; yylval.quantity.unitStr = yytext; return UNIT; // pounds/in^2 -"ksi" yylval.quantity.scaler = Quantity::KSI; yylval.quantity.unitStr = yytext; return UNIT; // 1000 x pounds/in^2 - -"W" yylval.quantity.scaler = Quantity::Watt; yylval.quantity.unitStr = yytext; return UNIT; // Watt (kg*m^2/s^3) -"VA" yylval.quantity.scaler = Quantity::VoltAmpere; yylval.quantity.unitStr = yytext; return UNIT; // VoltAmpere (kg*m^2/s^3) - -"J" yylval.quantity.scaler = Quantity::Joule; yylval.quantity.unitStr = yytext; return UNIT; // Joule (kg*m^2/s^2) -"Nm" yylval.quantity.scaler = Quantity::NewtonMeter; yylval.quantity.unitStr = yytext; return UNIT; // N*m = Joule -"VAs" yylval.quantity.scaler = Quantity::VoltAmpereSecond; yylval.quantity.unitStr = yytext; return UNIT; // V*A*s = Joule -"CV" yylval.quantity.scaler = Quantity::WattSecond; yylval.quantity.unitStr = yytext; return UNIT; // -"Ws" yylval.quantity.scaler = Quantity::WattSecond; yylval.quantity.unitStr = yytext; return UNIT; // W*s = Joule - -"\xC2\xB0" yylval.quantity.scaler = Quantity::Degree; yylval.quantity.unitStr = yytext; return UNIT; // degree (internal standard angle) -"deg" yylval.quantity.scaler = Quantity::Degree; yylval.quantity.unitStr = yytext; return UNIT; // degree (internal standard angle) -"rad" yylval.quantity.scaler = Quantity::Radian; yylval.quantity.unitStr = yytext; return UNIT; // radian -"gon" yylval.quantity.scaler = Quantity::Gon; yylval.quantity.unitStr = yytext; return UNIT; // gon - -{DIGIT}*"."{DIGIT}+{EXPO}? yylval.fvalue = num_change(yytext,'.',','); return yylval.fvalue == 1 ? ONE : NUM; -{DIGIT}*","{DIGIT}+{EXPO}? yylval.fvalue = num_change(yytext,',','.'); return yylval.fvalue == 1 ? ONE : NUM; -{DIGIT}+{EXPO} yylval.fvalue = num_change(yytext,',','.'); return yylval.fvalue == 1 ? ONE : NUM; -{DIGIT}+ { - yylval.ivalue = strtoll( yytext, NULL, 0 ); - if (yylval.ivalue == LLONG_MIN) - throw Base::Exception("Integer underflow"); - else if (yylval.ivalue == LLONG_MAX) - throw Base::Exception("Integer overflow"); - if (yylval.ivalue == 1) { yylval.fvalue = 1; return ONE; } else return INTEGER; - } - -"pi" yylval.constant.fvalue = M_PI; yylval.constant.name = "pi"; return CONSTANT; // constant pi -"e" yylval.constant.fvalue = M_E; yylval.constant.name = "e"; return CONSTANT; // constant e - -$[A-Za-z]{1,2}+${DIGIT}+ yylval.string = yytext; return CELLADDRESS; -[A-Za-z]{1,2}${DIGIT}+ yylval.string = yytext; return CELLADDRESS; -$[A-Za-z]{1,2}{DIGIT}+ yylval.string = yytext; return CELLADDRESS; - -({L}{M}*)({L}{M}*|{N}|_)*[\20\t]*\( { - std::string s = yytext; - size_t i = s.size() - 2; - while (isspace(s[i])) - --i; - s.erase(i + 1); - std::map::const_iterator j = registered_functions.find(s); - if (j != registered_functions.end()) - yylval.func = j->second; - else - yylval.func = FunctionExpression::NONE; - return FUNC; - } - -({L}{M}*)({L}{M}*|{N}|_)* yylval.string = yytext; return IDENTIFIER; diff --git a/src/Mod/Spreadsheet/App/ExpressionParser.tab.c b/src/Mod/Spreadsheet/App/ExpressionParser.tab.c deleted file mode 100644 index 9b8c34b65b28..000000000000 --- a/src/Mod/Spreadsheet/App/ExpressionParser.tab.c +++ /dev/null @@ -1,2031 +0,0 @@ -/* A Bison parser, made by GNU Bison 3.0.2. */ - -/* Bison implementation for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. - - This program 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. - - This program 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 this program. If not, see . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -/* C LALR(1) parser skeleton written by Richard Stallman, by - simplifying the original so-called "semantic" parser. */ - -/* All symbols defined below should begin with yy or YY, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -/* Identify Bison output. */ -#define YYBISON 1 - -/* Bison version. */ -#define YYBISON_VERSION "3.0.2" - -/* Skeleton name. */ -#define YYSKELETON_NAME "yacc.c" - -/* Pure parsers. */ -#define YYPURE 0 - -/* Push parsers. */ -#define YYPUSH 0 - -/* Pull parsers. */ -#define YYPULL 1 - - - - -/* Copy the first part of user declarations. */ -#line 7 "ExpressionParser.y" /* yacc.c:339 */ - - -#define YYSTYPE App::ExpressionParser::semantic_type - -std::stack functions; /**< Function identifier */ - - //#define YYSTYPE yystype - #define yyparse ExpressionParser_yyparse - #define yyerror ExpressionParser_yyerror - -#line 77 "ExpressionParser.tab.c" /* yacc.c:339 */ - -# ifndef YY_NULLPTR -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULLPTR nullptr -# else -# define YY_NULLPTR 0 -# endif -# endif - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 -#endif - - -/* Debug traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif -#if YYDEBUG -extern int yydebug; -#endif - -/* Token type. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - enum yytokentype - { - FUNC = 258, - ONE = 259, - NUM = 260, - IDENTIFIER = 261, - UNIT = 262, - INTEGER = 263, - CONSTANT = 264, - CELLADDRESS = 265, - EQ = 266, - NEQ = 267, - LT = 268, - GT = 269, - GTE = 270, - LTE = 271, - STRING = 272, - MINUSSIGN = 273, - PROPERTY_REF = 274, - DOCUMENT = 275, - OBJECT = 276, - EXPONENT = 277, - NEG = 278, - POS = 279 - }; -#endif - -/* Value type. */ - - -extern YYSTYPE yylval; - -int yyparse (void); - - - -/* Copy the second part of user declarations. */ - -#line 145 "ExpressionParser.tab.c" /* yacc.c:358 */ - -#ifdef short -# undef short -#endif - -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 yytype_uint8; -#else -typedef unsigned char yytype_uint8; -#endif - -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 yytype_int8; -#else -typedef signed char yytype_int8; -#endif - -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; -#else -typedef unsigned short int yytype_uint16; -#endif - -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 yytype_int16; -#else -typedef short int yytype_int16; -#endif - -#ifndef YYSIZE_T -# ifdef __SIZE_TYPE__ -# define YYSIZE_T __SIZE_TYPE__ -# elif defined size_t -# define YYSIZE_T size_t -# elif ! defined YYSIZE_T -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# else -# define YYSIZE_T unsigned int -# endif -#endif - -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) - -#ifndef YY_ -# if defined YYENABLE_NLS && YYENABLE_NLS -# if ENABLE_NLS -# include /* INFRINGES ON USER NAME SPACE */ -# define YY_(Msgid) dgettext ("bison-runtime", Msgid) -# endif -# endif -# ifndef YY_ -# define YY_(Msgid) Msgid -# endif -#endif - -#ifndef YY_ATTRIBUTE -# if (defined __GNUC__ \ - && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ - || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C -# define YY_ATTRIBUTE(Spec) __attribute__(Spec) -# else -# define YY_ATTRIBUTE(Spec) /* empty */ -# endif -#endif - -#ifndef YY_ATTRIBUTE_PURE -# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) -#endif - -#ifndef YY_ATTRIBUTE_UNUSED -# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) -#endif - -#if !defined _Noreturn \ - && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) -# if defined _MSC_VER && 1200 <= _MSC_VER -# define _Noreturn __declspec (noreturn) -# else -# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) -# endif -#endif - -/* Suppress unused-variable warnings by "using" E. */ -#if ! defined lint || defined __GNUC__ -# define YYUSE(E) ((void) (E)) -#else -# define YYUSE(E) /* empty */ -#endif - -#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ -/* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ - _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ - _Pragma ("GCC diagnostic pop") -#else -# define YY_INITIAL_VALUE(Value) Value -#endif -#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_END -#endif -#ifndef YY_INITIAL_VALUE -# define YY_INITIAL_VALUE(Value) /* Nothing. */ -#endif - - -#if ! defined yyoverflow || YYERROR_VERBOSE - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef YYSTACK_USE_ALLOCA -# if YYSTACK_USE_ALLOCA -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# elif defined __BUILTIN_VA_ARG_INCR -# include /* INFRINGES ON USER NAME SPACE */ -# elif defined _AIX -# define YYSTACK_ALLOC __alloca -# elif defined _MSC_VER -# include /* INFRINGES ON USER NAME SPACE */ -# define alloca _alloca -# else -# define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS -# include /* INFRINGES ON USER NAME SPACE */ - /* Use EXIT_SUCCESS as a witness for stdlib.h. */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's 'empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) -# ifndef YYSTACK_ALLOC_MAXIMUM - /* The OS might guarantee only one guard page at the bottom of the stack, - and a page size can be as small as 4096 bytes. So we cannot safely - invoke alloca (N) if N exceeds 4096. Use a slightly smaller number - to allow for a few compiler-allocated temporary stack slots. */ -# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ -# endif -# else -# define YYSTACK_ALLOC YYMALLOC -# define YYSTACK_FREE YYFREE -# ifndef YYSTACK_ALLOC_MAXIMUM -# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM -# endif -# if (defined __cplusplus && ! defined EXIT_SUCCESS \ - && ! ((defined YYMALLOC || defined malloc) \ - && (defined YYFREE || defined free))) -# include /* INFRINGES ON USER NAME SPACE */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# ifndef YYMALLOC -# define YYMALLOC malloc -# if ! defined malloc && ! defined EXIT_SUCCESS -void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifndef YYFREE -# define YYFREE free -# if ! defined free && ! defined EXIT_SUCCESS -void free (void *); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# endif -#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ - - -#if (! defined yyoverflow \ - && (! defined __cplusplus \ - || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union yyalloc -{ - yytype_int16 yyss_alloc; - YYSTYPE yyvs_alloc; -}; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ - + YYSTACK_GAP_MAXIMUM) - -# define YYCOPY_NEEDED 1 - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ - Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (0) - -#endif - -#if defined YYCOPY_NEEDED && YYCOPY_NEEDED -/* Copy COUNT objects from SRC to DST. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) -# else -# define YYCOPY(Dst, Src, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (Dst)[yyi] = (Src)[yyi]; \ - } \ - while (0) -# endif -# endif -#endif /* !YYCOPY_NEEDED */ - -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 40 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 200 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 39 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 15 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 74 -/* YYNSTATES -- Number of states. */ -#define YYNSTATES 134 - -/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned - by yylex, with out-of-bounds checking. */ -#define YYUNDEFTOK 2 -#define YYMAXUTOK 279 - -#define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) - -/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, without out-of-bounds checking. */ -static const yytype_uint8 yytranslate[] = -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 36, 2, 2, 2, 2, - 31, 32, 26, 25, 33, 2, 35, 27, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 24, 34, - 2, 2, 2, 23, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 37, 2, 38, 30, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 28, 29 -}; - -#if YYDEBUG - /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_uint8 yyrline[] = -{ - 0, 69, 69, 70, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, 89, 90, - 91, 94, 95, 96, 97, 100, 101, 102, 103, 106, - 107, 108, 109, 112, 113, 114, 115, 116, 117, 120, - 121, 122, 123, 124, 125, 126, 129, 133, 138, 143, - 151, 152, 156, 157, 158, 159, 160, 161, 162, 163, - 164, 167, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 179, 180, 183, 184 -}; -#endif - -#if YYDEBUG || YYERROR_VERBOSE || 0 -/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ -static const char *const yytname[] = -{ - "$end", "error", "$undefined", "FUNC", "ONE", "NUM", "IDENTIFIER", - "UNIT", "INTEGER", "CONSTANT", "CELLADDRESS", "EQ", "NEQ", "LT", "GT", - "GTE", "LTE", "STRING", "MINUSSIGN", "PROPERTY_REF", "DOCUMENT", - "OBJECT", "EXPONENT", "'?'", "':'", "'+'", "'*'", "'/'", "NEG", "POS", - "'^'", "'('", "')'", "','", "';'", "'.'", "'#'", "'['", "']'", "$accept", - "input", "exp", "basic_num", "num", "args", "range", "cond", "unit_exp", - "identifier", "integer", "path", "subpath", "document", "object", YY_NULLPTR -}; -#endif - -# ifdef YYPRINT -/* YYTOKNUM[NUM] -- (External) token number corresponding to the - (internal) symbol number NUM (which must be that of a token). */ -static const yytype_uint16 yytoknum[] = -{ - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 63, 58, 43, 42, 47, 278, 279, - 94, 40, 41, 44, 59, 46, 35, 91, 93 -}; -# endif - -#define YYPACT_NINF -100 - -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-100))) - -#define YYTABLE_NINF -75 - -#define yytable_value_is_error(Yytable_value) \ - 0 - - /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -static const yytype_int16 yypact[] = -{ - 61, 90, -14, -100, 54, -100, -100, 8, -21, -28, - 108, 108, 61, 23, 158, 8, -100, 10, 75, -100, - -100, 18, 1, -100, 37, -8, 108, 158, 166, -100, - 8, 71, 20, -14, 8, 75, 30, 30, 116, 165, - -100, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 61, 108, -100, 108, 8, 8, 17, 130, 28, 49, - 70, -100, 108, 108, 55, 69, -100, -100, -100, -100, - 59, -100, 65, 97, -100, -100, 158, 158, 158, 158, - 158, 158, 93, 93, 30, 30, 55, -100, 138, 55, - 55, 153, -100, 87, -100, -100, 74, -100, -100, -100, - -100, -100, -100, 158, 158, 71, 173, 102, 103, 109, - 108, -100, 28, -100, 107, 117, 121, 71, 71, 71, - 57, -100, 125, 131, 132, -100, -100, -100, 71, 71, - 71, -100, -100, -100 -}; - - /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. - Performed when YYTABLE does not specify something else to do. Zero - means the default is an error. */ -static const yytype_uint8 yydefact[] = -{ - 0, 0, 18, 19, 52, 39, 20, 22, 53, 5, - 0, 0, 0, 0, 2, 21, 4, 0, 3, 6, - 46, 0, 0, 18, 52, 53, 0, 25, 0, 26, - 0, 0, 0, 0, 0, 24, 7, 8, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, - 0, 16, 0, 0, 40, 61, 63, 62, 60, 51, - 0, 50, 0, 0, 15, 45, 33, 34, 35, 36, - 37, 38, 10, 9, 11, 12, 13, 14, 0, 42, - 41, 0, 43, 52, 73, 48, 0, 53, 47, 32, - 31, 30, 29, 27, 28, 0, 0, 57, 56, 54, - 0, 44, 0, 70, 0, 0, 0, 0, 0, 0, - 17, 49, 67, 66, 64, 59, 58, 55, 0, 0, - 0, 69, 68, 65 -}; - - /* YYPGOTO[NTERM-NUM]. */ -static const yytype_int8 yypgoto[] = -{ - -100, -100, 0, -51, -100, -100, -100, -100, 2, -100, - 72, -54, -99, -100, 118 -}; - - /* YYDEFGOTO[NTERM-NUM]. */ -static const yytype_int8 yydefgoto[] = -{ - -1, 13, 38, 15, 16, 28, 29, 17, 39, 19, - 73, 20, 68, 21, 22 -}; - - /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule whose - number is the opposite. If YYTABLE_NINF, syntax error. */ -static const yytype_int16 yytable[] = -{ - 14, 27, 18, 95, 98, 92, 113, -73, -71, 35, - 36, 37, 33, 30, -74, 5, 60, 52, 125, 126, - 127, 23, 3, 40, 69, 6, 70, -74, 71, 131, - 132, 133, 64, 53, 93, 91, 58, 72, 97, 34, - 111, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 87, 86, 88, 57, 99, 89, 90, 121, 100, - 51, 59, 103, 104, 1, 2, 3, 4, 5, 6, - 7, 8, 31, -72, 32, 47, 101, 65, 9, 10, - 102, 66, 48, 49, 50, 56, 11, 51, 67, 31, - -72, 32, 12, 1, 23, 3, 24, 107, 6, 7, - 25, 54, 55, 108, 105, 56, 106, 9, 10, 112, - 120, 1, 23, 3, 4, 11, 6, 7, 8, 49, - 50, 26, 31, 51, 32, 9, 10, 41, 42, 43, - 44, 45, 46, 11, 47, 109, 93, 117, 118, 26, - 8, 48, 49, 50, 119, 122, 51, 94, 74, 41, - 42, 43, 44, 45, 46, 123, 47, 23, 3, 124, - 128, 6, 110, 48, 49, 50, 129, 130, 51, 41, - 42, 43, 44, 45, 46, 96, 47, 69, 116, 114, - 0, 71, 0, 48, 49, 50, 0, 0, 51, 0, - 115, 54, 55, 0, 0, 56, 0, 75, 61, 62, - 63 -}; - -static const yytype_int16 yycheck[] = -{ - 0, 1, 0, 57, 58, 56, 105, 35, 36, 7, - 10, 11, 4, 27, 35, 7, 24, 15, 117, 118, - 119, 4, 5, 0, 4, 8, 6, 35, 8, 128, - 129, 130, 30, 23, 6, 18, 35, 17, 10, 31, - 91, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 50, 53, 36, 6, 54, 55, 112, 10, - 30, 24, 62, 63, 3, 4, 5, 6, 7, 8, - 9, 10, 35, 36, 37, 18, 6, 6, 17, 18, - 10, 10, 25, 26, 27, 30, 25, 30, 17, 35, - 36, 37, 31, 3, 4, 5, 6, 38, 8, 9, - 10, 26, 27, 38, 35, 30, 37, 17, 18, 35, - 110, 3, 4, 5, 6, 25, 8, 9, 10, 26, - 27, 31, 35, 30, 37, 17, 18, 11, 12, 13, - 14, 15, 16, 25, 18, 38, 6, 35, 35, 31, - 10, 25, 26, 27, 35, 38, 30, 17, 32, 11, - 12, 13, 14, 15, 16, 38, 18, 4, 5, 38, - 35, 8, 24, 25, 26, 27, 35, 35, 30, 11, - 12, 13, 14, 15, 16, 57, 18, 4, 106, 6, - -1, 8, -1, 25, 26, 27, -1, -1, 30, -1, - 17, 26, 27, -1, -1, 30, -1, 32, 32, 33, - 34 -}; - - /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const yytype_uint8 yystos[] = -{ - 0, 3, 4, 5, 6, 7, 8, 9, 10, 17, - 18, 25, 31, 40, 41, 42, 43, 46, 47, 48, - 50, 52, 53, 4, 6, 10, 31, 41, 44, 45, - 27, 35, 37, 4, 31, 47, 41, 41, 41, 47, - 0, 11, 12, 13, 14, 15, 16, 18, 25, 26, - 27, 30, 47, 23, 26, 27, 30, 36, 35, 24, - 24, 32, 33, 34, 47, 6, 10, 17, 51, 4, - 6, 8, 17, 49, 32, 32, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 47, 41, 41, 47, - 47, 18, 42, 6, 17, 50, 53, 10, 50, 6, - 10, 6, 10, 41, 41, 35, 37, 38, 38, 38, - 24, 42, 35, 51, 6, 17, 49, 35, 35, 35, - 41, 50, 38, 38, 38, 51, 51, 51, 35, 35, - 35, 51, 51, 51 -}; - - /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint8 yyr1[] = -{ - 0, 39, 40, 40, 41, 41, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 41, 41, 42, 42, - 42, 43, 43, 43, 43, 44, 44, 44, 44, 45, - 45, 45, 45, 46, 46, 46, 46, 46, 46, 47, - 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, - 49, 49, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 52, 52, 53, 53 -}; - - /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = -{ - 0, 2, 1, 1, 1, 1, 1, 2, 2, 3, - 3, 3, 3, 3, 3, 3, 3, 5, 1, 1, - 1, 1, 1, 2, 2, 1, 1, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, - 3, 3, 3, 3, 4, 3, 1, 3, 3, 5, - 1, 1, 1, 1, 4, 6, 4, 4, 6, 6, - 3, 1, 1, 1, 4, 6, 4, 4, 6, 6, - 3, 1, 1, 1, 1 -}; - - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 - -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab - - -#define YYRECOVERING() (!!yyerrstatus) - -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (0) - -/* Error token number */ -#define YYTERROR 1 -#define YYERRCODE 256 - - - -/* Enable debugging if requested. */ -#if YYDEBUG - -# ifndef YYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (0) - -/* This macro is provided for backward compatibility. */ -#ifndef YY_LOCATION_PRINT -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -#endif - - -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yy_symbol_print (stderr, \ - Type, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (0) - - -/*----------------------------------------. -| Print this symbol's value on YYOUTPUT. | -`----------------------------------------*/ - -static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) -{ - FILE *yyo = yyoutput; - YYUSE (yyo); - if (!yyvaluep) - return; -# ifdef YYPRINT - if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# endif - YYUSE (yytype); -} - - -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) -{ - YYFPRINTF (yyoutput, "%s %s (", - yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); - - yy_symbol_value_print (yyoutput, yytype, yyvaluep); - YYFPRINTF (yyoutput, ")"); -} - -/*------------------------------------------------------------------. -| yy_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ - -static void -yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) -{ - YYFPRINTF (stderr, "Stack now"); - for (; yybottom <= yytop; yybottom++) - { - int yybot = *yybottom; - YYFPRINTF (stderr, " %d", yybot); - } - YYFPRINTF (stderr, "\n"); -} - -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (0) - - -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ - -static void -yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) -{ - unsigned long int yylno = yyrline[yyrule]; - int yynrhs = yyr2[yyrule]; - int yyi; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", - yyrule - 1, yylno); - /* The symbols being reduced. */ - for (yyi = 0; yyi < yynrhs; yyi++) - { - YYFPRINTF (stderr, " $%d = ", yyi + 1); - yy_symbol_print (stderr, - yystos[yyssp[yyi + 1 - yynrhs]], - &(yyvsp[(yyi + 1) - (yynrhs)]) - ); - YYFPRINTF (stderr, "\n"); - } -} - -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (yyssp, yyvsp, Rule); \ -} while (0) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ - - -/* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH -# define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ - -#ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 -#endif - - -#if YYERROR_VERBOSE - -# ifndef yystrlen -# if defined __GLIBC__ && defined _STRING_H -# define yystrlen strlen -# else -/* Return the length of YYSTR. */ -static YYSIZE_T -yystrlen (const char *yystr) -{ - YYSIZE_T yylen; - for (yylen = 0; yystr[yylen]; yylen++) - continue; - return yylen; -} -# endif -# endif - -# ifndef yystpcpy -# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -static char * -yystpcpy (char *yydest, const char *yysrc) -{ - char *yyd = yydest; - const char *yys = yysrc; - - while ((*yyd++ = *yys++) != '\0') - continue; - - return yyd - 1; -} -# endif -# endif - -# ifndef yytnamerr -/* Copy to YYRES the contents of YYSTR after stripping away unnecessary - quotes and backslashes, so that it's suitable for yyerror. The - heuristic is that double-quoting is unnecessary unless the string - contains an apostrophe, a comma, or backslash (other than - backslash-backslash). YYSTR is taken from yytname. If YYRES is - null, do not copy; instead, return the length of what the result - would have been. */ -static YYSIZE_T -yytnamerr (char *yyres, const char *yystr) -{ - if (*yystr == '"') - { - YYSIZE_T yyn = 0; - char const *yyp = yystr; - - for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - /* Fall through. */ - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } - do_not_strip_quotes: ; - } - - if (! yyres) - return yystrlen (yystr); - - return yystpcpy (yyres, yystr) - yyres; -} -# endif - -/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message - about the unexpected token YYTOKEN for the state stack whose top is - YYSSP. - - Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is - not large enough to hold the message. In that case, also set - *YYMSG_ALLOC to the required number of bytes. Return 2 if the - required number of bytes is too large to store. */ -static int -yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) -{ - YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); - YYSIZE_T yysize = yysize0; - enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; - /* Internationalized format string. */ - const char *yyformat = YY_NULLPTR; - /* Arguments of yyformat. */ - char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ - int yycount = 0; - - /* There are many possibilities here to consider: - - If this state is a consistent state with a default action, then - the only way this function was invoked is if the default action - is an error action. In that case, don't check for expected - tokens because there are none. - - The only way there can be no lookahead present (in yychar) is if - this state is a consistent state with a default action. Thus, - detecting the absence of a lookahead is sufficient to determine - that there is no unexpected or expected token to report. In that - case, just report a simple "syntax error". - - Don't assume there isn't a lookahead just because this state is a - consistent state with a default action. There might have been a - previous inconsistent state, consistent state with a non-default - action, or user semantic action that manipulated yychar. - - Of course, the expected token list depends on states to have - correct lookahead information, and it depends on the parser not - to perform extra reductions after fetching a lookahead from the - scanner and before detecting a syntax error. Thus, state merging - (from LALR or IELR) and default reductions corrupt the expected - token list. However, the list is correct for canonical LR with - one exception: it will still contain any token that will not be - accepted due to an error action in a later state. - */ - if (yytoken != YYEMPTY) - { - int yyn = yypact[*yyssp]; - yyarg[yycount++] = yytname[yytoken]; - if (!yypact_value_is_default (yyn)) - { - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. In other words, skip the first -YYN actions for - this state because they are default actions. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn + 1; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yyx; - - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR - && !yytable_value_is_error (yytable[yyx + yyn])) - { - if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - yycount = 1; - yysize = yysize0; - break; - } - yyarg[yycount++] = yytname[yyx]; - { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; - } - } - } - } - - switch (yycount) - { -# define YYCASE_(N, S) \ - case N: \ - yyformat = S; \ - break - YYCASE_(0, YY_("syntax error")); - YYCASE_(1, YY_("syntax error, unexpected %s")); - YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); - YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); - YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); - YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); -# undef YYCASE_ - } - - { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; - } - - if (*yymsg_alloc < yysize) - { - *yymsg_alloc = 2 * yysize; - if (! (yysize <= *yymsg_alloc - && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) - *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; - return 1; - } - - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - { - char *yyp = *yymsg; - int yyi = 0; - while ((*yyp = *yyformat) != '\0') - if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) - { - yyp += yytnamerr (yyp, yyarg[yyi++]); - yyformat += 2; - } - else - { - yyp++; - yyformat++; - } - } - return 0; -} -#endif /* YYERROR_VERBOSE */ - -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -static void -yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) -{ - YYUSE (yyvaluep); - if (!yymsg) - yymsg = "Deleting"; - YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); - - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - switch (yytype) - { - case 41: /* exp */ -#line 62 "ExpressionParser.y" /* yacc.c:1257 */ - { delete ((*yyvaluep).expr); } -#line 1069 "ExpressionParser.tab.c" /* yacc.c:1257 */ - break; - - case 44: /* args */ -#line 63 "ExpressionParser.y" /* yacc.c:1257 */ - { std::vector::const_iterator i = ((*yyvaluep).arguments).begin(); while (i != ((*yyvaluep).arguments).end()) { delete *i; ++i; } } -#line 1075 "ExpressionParser.tab.c" /* yacc.c:1257 */ - break; - - case 46: /* cond */ -#line 62 "ExpressionParser.y" /* yacc.c:1257 */ - { delete ((*yyvaluep).expr); } -#line 1081 "ExpressionParser.tab.c" /* yacc.c:1257 */ - break; - - case 47: /* unit_exp */ -#line 62 "ExpressionParser.y" /* yacc.c:1257 */ - { delete ((*yyvaluep).expr); } -#line 1087 "ExpressionParser.tab.c" /* yacc.c:1257 */ - break; - - - default: - break; - } - YY_IGNORE_MAYBE_UNINITIALIZED_END -} - - - - -/* The lookahead symbol. */ -int yychar; - -/* The semantic value of the lookahead symbol. */ -YYSTYPE yylval; -/* Number of syntax errors so far. */ -int yynerrs; - - -/*----------. -| yyparse. | -`----------*/ - -int -yyparse (void) -{ - int yystate; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - - /* The stacks and their tools: - 'yyss': related to states. - 'yyvs': related to semantic values. - - Refer to the stacks through separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs; - YYSTYPE *yyvsp; - - YYSIZE_T yystacksize; - - int yyn; - int yyresult; - /* Lookahead token as an internal (translated) token number. */ - int yytoken = 0; - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; - -#if YYERROR_VERBOSE - /* Buffer for error messages, and its allocated size. */ - char yymsgbuf[128]; - char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; -#endif - -#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) - - /* The number of symbols on the RHS of the reduced rule. - Keep to zero when no symbol should be popped. */ - int yylen = 0; - - yyssp = yyss = yyssa; - yyvsp = yyvs = yyvsa; - yystacksize = YYINITDEPTH; - - YYDPRINTF ((stderr, "Starting parse\n")); - - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - goto yysetstate; - -/*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | -`------------------------------------------------------------*/ - yynewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. So pushing a state here evens the stacks. */ - yyssp++; - - yysetstate: - *yyssp = yystate; - - if (yyss + yystacksize - 1 <= yyssp) - { - /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; - -#ifdef yyoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - &yystacksize); - - yyss = yyss1; - yyvs = yyvs1; - } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else - /* Extend the stack our own way. */ - if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; - yystacksize *= 2; - if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; - - { - yytype_int16 *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss_alloc, yyss); - YYSTACK_RELOCATE (yyvs_alloc, yyvs); -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); - } -# endif -#endif /* no yyoverflow */ - - yyssp = yyss + yysize - 1; - yyvsp = yyvs + yysize - 1; - - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); - - if (yyss + yystacksize - 1 <= yyssp) - YYABORT; - } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - - if (yystate == YYFINAL) - YYACCEPT; - - goto yybackup; - -/*-----------. -| yybackup. | -`-----------*/ -yybackup: - - /* Do appropriate processing given the current state. Read a - lookahead token if we need one and don't already have one. */ - - /* First try to decide what to do without reference to lookahead token. */ - yyn = yypact[yystate]; - if (yypact_value_is_default (yyn)) - goto yydefault; - - /* Not known => get a lookahead token if don't already have one. */ - - /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ - if (yychar == YYEMPTY) - { - YYDPRINTF ((stderr, "Reading a token: ")); - yychar = yylex (); - } - - if (yychar <= YYEOF) - { - yychar = yytoken = YYEOF; - YYDPRINTF ((stderr, "Now at end of input.\n")); - } - else - { - yytoken = YYTRANSLATE (yychar); - YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); - } - - /* If the proper action on seeing token YYTOKEN is to reduce or to - detect an error, take that action. */ - yyn += yytoken; - if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) - goto yydefault; - yyn = yytable[yyn]; - if (yyn <= 0) - { - if (yytable_value_is_error (yyn)) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; - - /* Shift the lookahead token. */ - YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the shifted token. */ - yychar = YYEMPTY; - - yystate = yyn; - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - - goto yynewstate; - - -/*-----------------------------------------------------------. -| yydefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ -yydefault: - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - goto yyreduce; - - -/*-----------------------------. -| yyreduce -- Do a reduction. | -`-----------------------------*/ -yyreduce: - /* yyn is the number of a rule to reduce with. */ - yylen = yyr2[yyn]; - - /* If YYLEN is nonzero, implement the default value of the action: - '$$ = $1'. - - Otherwise, the following line sets YYVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - yyval = yyvsp[1-yylen]; - - - YY_REDUCE_PRINT (yyn); - switch (yyn) - { - case 2: -#line 69 "ExpressionParser.y" /* yacc.c:1646 */ - { ScanResult = (yyvsp[0].expr); valueExpression = true; } -#line 1351 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 3: -#line 70 "ExpressionParser.y" /* yacc.c:1646 */ - { ScanResult = (yyvsp[0].expr); unitExpression = true; } -#line 1357 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 4: -#line 73 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = (yyvsp[0].expr); } -#line 1363 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 5: -#line 74 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new StringExpression(DocumentObject, (yyvsp[0].string)); } -#line 1369 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 6: -#line 75 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new VariableExpression(DocumentObject, (yyvsp[0].path)); } -#line 1375 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 7: -#line 76 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[0].expr), OperatorExpression::NEG, new NumberExpression(DocumentObject, -1)); } -#line 1381 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 8: -#line 77 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[0].expr), OperatorExpression::POS, new NumberExpression(DocumentObject, 1)); } -#line 1387 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 9: -#line 78 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::ADD, (yyvsp[0].expr)); } -#line 1393 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 10: -#line 79 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::SUB, (yyvsp[0].expr)); } -#line 1399 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 11: -#line 80 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::MUL, (yyvsp[0].expr)); } -#line 1405 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 12: -#line 81 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::DIV, (yyvsp[0].expr)); } -#line 1411 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 13: -#line 82 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::DIV, (yyvsp[0].expr)); } -#line 1417 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 14: -#line 83 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::POW, (yyvsp[0].expr)); } -#line 1423 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 15: -#line 84 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = (yyvsp[-1].expr); } -#line 1429 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 16: -#line 85 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new AggregateFunctionExpression(DocumentObject, (yyvsp[-2].func), (yyvsp[-1].arguments)); } -#line 1435 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 17: -#line 86 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new ConditionalExpression(DocumentObject, (yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 1441 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 18: -#line 89 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new NumberExpression(DocumentObject, (yyvsp[0].fvalue)); } -#line 1447 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 19: -#line 90 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new NumberExpression(DocumentObject, (yyvsp[0].fvalue)); } -#line 1453 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 20: -#line 91 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new NumberExpression(DocumentObject, (double)(yyvsp[0].ivalue)); } -#line 1459 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 21: -#line 94 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = (yyvsp[0].expr); } -#line 1465 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 22: -#line 95 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new ConstantExpression(DocumentObject, (yyvsp[0].constant).name, (yyvsp[0].constant).fvalue); } -#line 1471 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 23: -#line 96 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-1].expr), OperatorExpression::UNIT, (yyvsp[0].expr)); } -#line 1477 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 24: -#line 97 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new OperatorExpression(DocumentObject, new ConstantExpression(DocumentObject, (yyvsp[-1].constant).name, (yyvsp[-1].constant).fvalue), OperatorExpression::UNIT, (yyvsp[0].expr)); } -#line 1483 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 25: -#line 100 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.arguments).push_back((yyvsp[0].expr)); } -#line 1489 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 26: -#line 101 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.arguments).push_back((yyvsp[0].expr)); } -#line 1495 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 27: -#line 102 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyvsp[-2].arguments).push_back((yyvsp[0].expr)); (yyval.arguments) = (yyvsp[-2].arguments); } -#line 1501 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 28: -#line 103 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyvsp[-2].arguments).push_back((yyvsp[0].expr)); (yyval.arguments) = (yyvsp[-2].arguments); } -#line 1507 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 29: -#line 106 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new RangeExpression(DocumentObject, (yyvsp[-2].string), (yyvsp[0].string)); } -#line 1513 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 30: -#line 107 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new RangeExpression(DocumentObject, (yyvsp[-2].string), (yyvsp[0].string)); } -#line 1519 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 31: -#line 108 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new RangeExpression(DocumentObject, (yyvsp[-2].string), (yyvsp[0].string)); } -#line 1525 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 32: -#line 109 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new RangeExpression(DocumentObject, (yyvsp[-2].string), (yyvsp[0].string)); } -#line 1531 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 33: -#line 112 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::EQ, (yyvsp[0].expr)); } -#line 1537 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 34: -#line 113 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::NEQ, (yyvsp[0].expr)); } -#line 1543 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 35: -#line 114 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::LT, (yyvsp[0].expr)); } -#line 1549 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 36: -#line 115 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::GT, (yyvsp[0].expr)); } -#line 1555 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 37: -#line 116 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::GTE, (yyvsp[0].expr)); } -#line 1561 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 38: -#line 117 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::LTE, (yyvsp[0].expr)); } -#line 1567 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 39: -#line 120 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new UnitExpression(DocumentObject, (yyvsp[0].quantity).scaler, (yyvsp[0].quantity).unitStr ); } -#line 1573 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 40: -#line 121 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new OperatorExpression(DocumentObject, new NumberExpression(DocumentObject, (yyvsp[-2].fvalue)), OperatorExpression::DIV, (yyvsp[0].expr)); } -#line 1579 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 41: -#line 122 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::DIV, (yyvsp[0].expr)); } -#line 1585 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 42: -#line 123 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::MUL, (yyvsp[0].expr)); } -#line 1591 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 43: -#line 124 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-2].expr), OperatorExpression::POW, (yyvsp[0].expr)); } -#line 1597 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 44: -#line 125 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = new OperatorExpression(DocumentObject, (yyvsp[-3].expr), OperatorExpression::POW, new OperatorExpression(DocumentObject, (yyvsp[0].expr), OperatorExpression::NEG, new NumberExpression(DocumentObject, -1))); } -#line 1603 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 45: -#line 126 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.expr) = (yyvsp[-1].expr); } -#line 1609 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 46: -#line 129 "ExpressionParser.y" /* yacc.c:1646 */ - { /* Path to property within document object */ - (yyval.path) = ObjectIdentifier(DocumentObject); - (yyval.path).addComponents((yyvsp[0].components)); - } -#line 1618 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 47: -#line 133 "ExpressionParser.y" /* yacc.c:1646 */ - { /* Path to property within document object */ - (yyval.path) = ObjectIdentifier(DocumentObject); - (yyval.path).setDocumentObjectName((yyvsp[-2].string_or_identifier), true); - (yyval.path).addComponents((yyvsp[0].components)); - } -#line 1628 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 48: -#line 138 "ExpressionParser.y" /* yacc.c:1646 */ - { /* Path to property from an external document, within a named document object */ - (yyval.path) = ObjectIdentifier(DocumentObject); - (yyval.path).setDocumentName((yyvsp[-2].string_or_identifier), true); - (yyval.path).addComponents((yyvsp[0].components)); - } -#line 1638 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 49: -#line 143 "ExpressionParser.y" /* yacc.c:1646 */ - { /* Path to property from an external document, within a named document object */ - (yyval.path) = ObjectIdentifier(DocumentObject); - (yyval.path).setDocumentName((yyvsp[-4].string_or_identifier), true); - (yyval.path).setDocumentObjectName((yyvsp[-2].string_or_identifier), true); - (yyval.path).addComponents((yyvsp[0].components)); - } -#line 1649 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 50: -#line 151 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.ivalue) = (yyvsp[0].ivalue); } -#line 1655 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 51: -#line 152 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.ivalue) = (yyvsp[0].fvalue); } -#line 1661 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 52: -#line 156 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.components).push_front(ObjectIdentifier::Component::SimpleComponent((yyvsp[0].string))); } -#line 1667 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 53: -#line 157 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.components).push_front(ObjectIdentifier::Component::SimpleComponent((yyvsp[0].string))); } -#line 1673 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 54: -#line 158 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.components).push_front(ObjectIdentifier::Component::ArrayComponent((yyvsp[-3].string), (yyvsp[-1].ivalue))); } -#line 1679 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 55: -#line 159 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyvsp[0].components).push_front(ObjectIdentifier::Component::ArrayComponent((yyvsp[-5].string), (yyvsp[-3].ivalue))); (yyval.components) = (yyvsp[0].components); } -#line 1685 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 56: -#line 160 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-3].string), ObjectIdentifier::String((yyvsp[-1].string), true))); } -#line 1691 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 57: -#line 161 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-3].string), (yyvsp[-1].string))); } -#line 1697 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 58: -#line 162 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyvsp[0].components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-5].string), ObjectIdentifier::String((yyvsp[-3].string), true))); (yyval.components) = (yyvsp[0].components); } -#line 1703 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 59: -#line 163 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyvsp[0].components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-5].string), (yyvsp[-3].string))); (yyval.components) = (yyvsp[0].components); } -#line 1709 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 60: -#line 164 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyvsp[0].components).push_front(ObjectIdentifier::Component::SimpleComponent((yyvsp[-2].string))); (yyval.components) = (yyvsp[0].components); } -#line 1715 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 61: -#line 167 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.components).push_front(ObjectIdentifier::Component::SimpleComponent((yyvsp[0].string))); } -#line 1721 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 62: -#line 168 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.components).push_front(ObjectIdentifier::Component::SimpleComponent((yyvsp[0].string))); } -#line 1727 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 63: -#line 169 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.components).push_front(ObjectIdentifier::Component::SimpleComponent((yyvsp[0].string))); } -#line 1733 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 64: -#line 170 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.components).push_front(ObjectIdentifier::Component::ArrayComponent((yyvsp[-3].string), (yyvsp[-1].ivalue))); } -#line 1739 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 65: -#line 171 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyvsp[0].components).push_front(ObjectIdentifier::Component::ArrayComponent((yyvsp[-5].string), (yyvsp[-3].ivalue))); (yyval.components) = (yyvsp[0].components); } -#line 1745 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 66: -#line 172 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-3].string), ObjectIdentifier::String((yyvsp[-1].string), true))); } -#line 1751 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 67: -#line 173 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-3].string), (yyvsp[-1].string))); } -#line 1757 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 68: -#line 174 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyvsp[0].components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-5].string), ObjectIdentifier::String((yyvsp[-3].string), true))); (yyval.components) = (yyvsp[0].components); } -#line 1763 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 69: -#line 175 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyvsp[0].components).push_front(ObjectIdentifier::Component::MapComponent((yyvsp[-5].string), (yyvsp[-3].string))); (yyval.components) = (yyvsp[0].components); } -#line 1769 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 70: -#line 176 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyvsp[0].components).push_front(ObjectIdentifier::Component::SimpleComponent((yyvsp[-2].string))); (yyval.components) = (yyvsp[0].components); } -#line 1775 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 71: -#line 179 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.string_or_identifier) = ObjectIdentifier::String((yyvsp[0].string), true); } -#line 1781 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 72: -#line 180 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.string_or_identifier) = ObjectIdentifier::String((yyvsp[0].string)); } -#line 1787 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 73: -#line 183 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.string_or_identifier) = ObjectIdentifier::String((yyvsp[0].string), true); } -#line 1793 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - case 74: -#line 184 "ExpressionParser.y" /* yacc.c:1646 */ - { (yyval.string_or_identifier) = ObjectIdentifier::String((yyvsp[0].string), true); } -#line 1799 "ExpressionParser.tab.c" /* yacc.c:1646 */ - break; - - -#line 1803 "ExpressionParser.tab.c" /* yacc.c:1646 */ - default: break; - } - /* User semantic actions sometimes alter yychar, and that requires - that yytoken be updated with the new translation. We take the - approach of translating immediately before every use of yytoken. - One alternative is translating here after every semantic action, - but that translation would be missed if the semantic action invokes - YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or - if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an - incorrect destructor might then be invoked immediately. In the - case of YYERROR or YYBACKUP, subsequent parser actions might lead - to an incorrect destructor call or verbose syntax error message - before the lookahead is translated. */ - YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); - - YYPOPSTACK (yylen); - yylen = 0; - YY_STACK_PRINT (yyss, yyssp); - - *++yyvsp = yyval; - - /* Now 'shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; - - goto yynewstate; - - -/*--------------------------------------. -| yyerrlab -- here on detecting error. | -`--------------------------------------*/ -yyerrlab: - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); - - /* If not already recovering from an error, report this error. */ - if (!yyerrstatus) - { - ++yynerrs; -#if ! YYERROR_VERBOSE - yyerror (YY_("syntax error")); -#else -# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ - yyssp, yytoken) - { - char const *yymsgp = YY_("syntax error"); - int yysyntax_error_status; - yysyntax_error_status = YYSYNTAX_ERROR; - if (yysyntax_error_status == 0) - yymsgp = yymsg; - else if (yysyntax_error_status == 1) - { - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); - if (!yymsg) - { - yymsg = yymsgbuf; - yymsg_alloc = sizeof yymsgbuf; - yysyntax_error_status = 2; - } - else - { - yysyntax_error_status = YYSYNTAX_ERROR; - yymsgp = yymsg; - } - } - yyerror (yymsgp); - if (yysyntax_error_status == 2) - goto yyexhaustedlab; - } -# undef YYSYNTAX_ERROR -#endif - } - - - - if (yyerrstatus == 3) - { - /* If just tried and failed to reuse lookahead token after an - error, discard it. */ - - if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; - } - else - { - yydestruct ("Error: discarding", - yytoken, &yylval); - yychar = YYEMPTY; - } - } - - /* Else will try to reuse lookahead token after shifting the error - token. */ - goto yyerrlab1; - - -/*---------------------------------------------------. -| yyerrorlab -- error raised explicitly by YYERROR. | -`---------------------------------------------------*/ -yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto yyerrorlab; - - /* Do not reclaim the symbols of the rule whose action triggered - this YYERROR. */ - YYPOPSTACK (yylen); - yylen = 0; - YY_STACK_PRINT (yyss, yyssp); - yystate = *yyssp; - goto yyerrlab1; - - -/*-------------------------------------------------------------. -| yyerrlab1 -- common code for both syntax error and YYERROR. | -`-------------------------------------------------------------*/ -yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ - - for (;;) - { - yyn = yypact[yystate]; - if (!yypact_value_is_default (yyn)) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } - - /* Pop the current state because it cannot handle the error token. */ - if (yyssp == yyss) - YYABORT; - - - yydestruct ("Error: popping", - yystos[yystate], yyvsp); - YYPOPSTACK (1); - yystate = *yyssp; - YY_STACK_PRINT (yyss, yyssp); - } - - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - - - /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); - - yystate = yyn; - goto yynewstate; - - -/*-------------------------------------. -| yyacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -yyacceptlab: - yyresult = 0; - goto yyreturn; - -/*-----------------------------------. -| yyabortlab -- YYABORT comes here. | -`-----------------------------------*/ -yyabortlab: - yyresult = 1; - goto yyreturn; - -#if !defined yyoverflow || YYERROR_VERBOSE -/*-------------------------------------------------. -| yyexhaustedlab -- memory exhaustion comes here. | -`-------------------------------------------------*/ -yyexhaustedlab: - yyerror (YY_("memory exhausted")); - yyresult = 2; - /* Fall through. */ -#endif - -yyreturn: - if (yychar != YYEMPTY) - { - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = YYTRANSLATE (yychar); - yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval); - } - /* Do not reclaim the symbols of the rule whose action triggered - this YYABORT or YYACCEPT. */ - YYPOPSTACK (yylen); - YY_STACK_PRINT (yyss, yyssp); - while (yyssp != yyss) - { - yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); - YYPOPSTACK (1); - } -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); -#endif -#if YYERROR_VERBOSE - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); -#endif - return yyresult; -} -#line 187 "ExpressionParser.y" /* yacc.c:1906 */ - diff --git a/src/Mod/Spreadsheet/App/ExpressionParser.tab.h b/src/Mod/Spreadsheet/App/ExpressionParser.tab.h deleted file mode 100644 index 806b15850941..000000000000 --- a/src/Mod/Spreadsheet/App/ExpressionParser.tab.h +++ /dev/null @@ -1,75 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.5. */ - -/* Bison interface for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. - - This program 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. - - This program 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 this program. If not, see . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - FUNC = 258, - ONE = 259, - NUM = 260, - IDENTIFIER = 261, - UNIT = 262, - INTEGER = 263, - CONSTANT = 264, - CELLADDRESS = 265, - EQ = 266, - NEQ = 267, - LT = 268, - GT = 269, - GTE = 270, - LTE = 271, - STRING = 272, - MINUSSIGN = 273, - PROPERTY_REF = 274, - DOCUMENT = 275, - OBJECT = 276, - EXPONENT = 277, - NEG = 278, - POS = 279 - }; -#endif - - - -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -#endif - -extern YYSTYPE yylval; - - diff --git a/src/Mod/Spreadsheet/App/ExpressionParser.y b/src/Mod/Spreadsheet/App/ExpressionParser.y deleted file mode 100644 index 50357b7e6e8b..000000000000 --- a/src/Mod/Spreadsheet/App/ExpressionParser.y +++ /dev/null @@ -1,187 +0,0 @@ -/* Parser for the FreeCAD Units language */ -/* (c) 2010 Juergen Riegel LGPL */ -/* (c) 2015 Eivind Kvedalen LGPL */ - -/* Represents the many different ways we can access our data */ - -%{ - -#define YYSTYPE App::ExpressionParser::semantic_type - -std::stack functions; /**< Function identifier */ - - //#define YYSTYPE yystype - #define yyparse ExpressionParser_yyparse - #define yyerror ExpressionParser_yyerror -%} - - /* Bison declarations. */ - %token FUNC - %token ONE - %token NUM - %token IDENTIFIER - %token UNIT - %token INTEGER - %token CONSTANT - %token CELLADDRESS - %token EQ NEQ LT GT GTE LTE - %token STRING MINUSSIGN PROPERTY_REF - %token DOCUMENT OBJECT - %token EXPONENT - %type args - %type input exp unit_exp cond - %type UNIT - %type STRING IDENTIFIER CELLADDRESS - %type INTEGER - %type PROPERTY_REF - %type ONE - %type NUM - %type CONSTANT - %type num - %type basic_num - %type range - %type identifier - %type path subpath - %type FUNC - %type document - %type object - %type integer - %left ONE - %left NUM - %left INTEGER - %left CONSTANT - %left EQ NEQ LT GT GTE LTE - %left '?' ':' - %left MINUSSIGN '+' - %left '*' '/' - %left NEG /* negation--unary minus */ - %left POS /* unary plus */ - %right '^' /* exponentiation */ - %right EXPONENT - -%destructor { delete $$; } exp cond unit_exp -%destructor { std::vector::const_iterator i = $$.begin(); while (i != $$.end()) { delete *i; ++i; } } args - -%start input - -%% - -input: exp { ScanResult = $1; valueExpression = true; } - | unit_exp { ScanResult = $1; unitExpression = true; } - ; - -exp: num { $$ = $1; } - | STRING { $$ = new StringExpression(DocumentObject, $1); } - | identifier { $$ = new VariableExpression(DocumentObject, $1); } - | MINUSSIGN exp %prec NEG { $$ = new OperatorExpression(DocumentObject, $2, OperatorExpression::NEG, new NumberExpression(DocumentObject, -1)); } - | '+' exp %prec POS { $$ = new OperatorExpression(DocumentObject, $2, OperatorExpression::POS, new NumberExpression(DocumentObject, 1)); } - | exp '+' exp { $$ = new OperatorExpression(DocumentObject, $1, OperatorExpression::ADD, $3); } - | exp MINUSSIGN exp { $$ = new OperatorExpression(DocumentObject, $1, OperatorExpression::SUB, $3); } - | exp '*' exp { $$ = new OperatorExpression(DocumentObject, $1, OperatorExpression::MUL, $3); } - | exp '/' exp { $$ = new OperatorExpression(DocumentObject, $1, OperatorExpression::DIV, $3); } - | exp '/' unit_exp { $$ = new OperatorExpression(DocumentObject, $1, OperatorExpression::DIV, $3); } - | exp '^' exp %prec EXPONENT { $$ = new OperatorExpression(DocumentObject, $1, OperatorExpression::POW, $3); } - | '(' exp ')' { $$ = $2; } - | FUNC args ')' { $$ = new AggregateFunctionExpression(DocumentObject, $1, $2); } - | cond '?' exp ':' exp { $$ = new ConditionalExpression(DocumentObject, $1, $3, $5); } - ; - -basic_num: ONE { $$ = new NumberExpression(DocumentObject, $1); } - | NUM { $$ = new NumberExpression(DocumentObject, $1); } - | INTEGER { $$ = new NumberExpression(DocumentObject, (double)$1); } - ; - -num: basic_num { $$ = $1; } - | CONSTANT { $$ = new ConstantExpression(DocumentObject, $1.name, $1.fvalue); } - | basic_num unit_exp %prec EXPONENT { $$ = new OperatorExpression(DocumentObject, $1, OperatorExpression::UNIT, $2); } - | CONSTANT unit_exp { $$ = new OperatorExpression(DocumentObject, new ConstantExpression(DocumentObject, $1.name, $1.fvalue), OperatorExpression::UNIT, $2); } - ; - -args: exp { $$.push_back($1); } - | range { $$.push_back($1); } - | args ',' exp { $1.push_back($3); $$ = $1; } - | args ';' exp { $1.push_back($3); $$ = $1; } - ; - -range: CELLADDRESS ':' CELLADDRESS { $$ = new RangeExpression(DocumentObject, $1, $3); } - | CELLADDRESS ':' IDENTIFIER { $$ = new RangeExpression(DocumentObject, $1, $3); } - | IDENTIFIER ':' CELLADDRESS { $$ = new RangeExpression(DocumentObject, $1, $3); } - | IDENTIFIER ':' IDENTIFIER { $$ = new RangeExpression(DocumentObject, $1, $3); } - ; - -cond: exp EQ exp { $$ = new OperatorExpression(DocumentObject, $1, OperatorExpression::EQ, $3); } - | exp NEQ exp { $$ = new OperatorExpression(DocumentObject, $1, OperatorExpression::NEQ, $3); } - | exp LT exp { $$ = new OperatorExpression(DocumentObject, $1, OperatorExpression::LT, $3); } - | exp GT exp { $$ = new OperatorExpression(DocumentObject, $1, OperatorExpression::GT, $3); } - | exp GTE exp { $$ = new OperatorExpression(DocumentObject, $1, OperatorExpression::GTE, $3); } - | exp LTE exp { $$ = new OperatorExpression(DocumentObject, $1, OperatorExpression::LTE, $3); } - ; - -unit_exp: UNIT { $$ = new UnitExpression(DocumentObject, $1.scaler, $1.unitStr ); } - | ONE '/' unit_exp { $$ = new OperatorExpression(DocumentObject, new NumberExpression(DocumentObject, $1), OperatorExpression::DIV, $3); } - | unit_exp '/' unit_exp { $$ = new OperatorExpression(DocumentObject, $1, OperatorExpression::DIV, $3); } - | unit_exp '*' unit_exp { $$ = new OperatorExpression(DocumentObject, $1, OperatorExpression::MUL, $3); } - | unit_exp '^' basic_num %prec EXPONENT { $$ = new OperatorExpression(DocumentObject, $1, OperatorExpression::POW, $3); } - | unit_exp '^' MINUSSIGN basic_num %prec EXPONENT { $$ = new OperatorExpression(DocumentObject, $1, OperatorExpression::POW, new OperatorExpression(DocumentObject, $4, OperatorExpression::NEG, new NumberExpression(DocumentObject, -1))); } - | '(' unit_exp ')' { $$ = $2; } - ; - -identifier: path { /* Path to property within document object */ - $$ = ObjectIdentifier(DocumentObject); - $$.addComponents($1); - } - | object '.' path { /* Path to property within document object */ - $$ = ObjectIdentifier(DocumentObject); - $$.setDocumentObjectName($1, true); - $$.addComponents($3); - } - | document '#' path { /* Path to property from an external document, within a named document object */ - $$ = ObjectIdentifier(DocumentObject); - $$.setDocumentName($1, true); - $$.addComponents($3); - } - | document '#' object '.' path { /* Path to property from an external document, within a named document object */ - $$ = ObjectIdentifier(DocumentObject); - $$.setDocumentName($1, true); - $$.setDocumentObjectName($3, true); - $$.addComponents($5); - } - ; - -integer: INTEGER { $$ = $1; } - | ONE { $$ = $1; } - ; - - -path: IDENTIFIER { $$.push_front(ObjectIdentifier::Component::SimpleComponent($1)); } - | CELLADDRESS { $$.push_front(ObjectIdentifier::Component::SimpleComponent($1)); } - | IDENTIFIER '[' integer ']' { $$.push_front(ObjectIdentifier::Component::ArrayComponent($1, $3)); } - | IDENTIFIER '[' integer ']' '.' subpath { $6.push_front(ObjectIdentifier::Component::ArrayComponent($1, $3)); $$ = $6; } - | IDENTIFIER '[' STRING ']' { $$.push_front(ObjectIdentifier::Component::MapComponent($1, ObjectIdentifier::String($3, true))); } - | IDENTIFIER '[' IDENTIFIER ']' { $$.push_front(ObjectIdentifier::Component::MapComponent($1, $3)); } - | IDENTIFIER '[' STRING ']' '.' subpath { $6.push_front(ObjectIdentifier::Component::MapComponent($1, ObjectIdentifier::String($3, true))); $$ = $6; } - | IDENTIFIER '[' IDENTIFIER ']' '.' subpath { $6.push_front(ObjectIdentifier::Component::MapComponent($1, $3)); $$ = $6; } - | IDENTIFIER '.' subpath { $3.push_front(ObjectIdentifier::Component::SimpleComponent($1)); $$ = $3; } - ; - -subpath: IDENTIFIER { $$.push_front(ObjectIdentifier::Component::SimpleComponent($1)); } - | STRING { $$.push_front(ObjectIdentifier::Component::SimpleComponent($1)); } - | CELLADDRESS { $$.push_front(ObjectIdentifier::Component::SimpleComponent($1)); } - | IDENTIFIER '[' integer ']' { $$.push_front(ObjectIdentifier::Component::ArrayComponent($1, $3)); } - | IDENTIFIER '[' integer ']' '.' subpath { $6.push_front(ObjectIdentifier::Component::ArrayComponent($1, $3)); $$ = $6; } - | IDENTIFIER '[' STRING ']' { $$.push_front(ObjectIdentifier::Component::MapComponent($1, ObjectIdentifier::String($3, true))); } - | IDENTIFIER '[' IDENTIFIER ']' { $$.push_front(ObjectIdentifier::Component::MapComponent($1, $3)); } - | IDENTIFIER '[' STRING ']' '.' subpath { $6.push_front(ObjectIdentifier::Component::MapComponent($1, ObjectIdentifier::String($3, true))); $$ = $6; } - | IDENTIFIER '[' IDENTIFIER ']' '.' subpath { $6.push_front(ObjectIdentifier::Component::MapComponent($1, $3)); $$ = $6; } - | IDENTIFIER '.' subpath { $3.push_front(ObjectIdentifier::Component::SimpleComponent($1)); $$ = $3; } - ; - -document: STRING { $$ = ObjectIdentifier::String($1, true); } - | IDENTIFIER { $$ = ObjectIdentifier::String($1); } - ; - -object: STRING { $$ = ObjectIdentifier::String($1, true); } - | CELLADDRESS { $$ = ObjectIdentifier::String($1, true); } - ; - -%% diff --git a/src/Mod/Spreadsheet/App/PropertyColumnWidths.cpp b/src/Mod/Spreadsheet/App/PropertyColumnWidths.cpp index 2d3be00c41d0..b8d67adfd416 100644 --- a/src/Mod/Spreadsheet/App/PropertyColumnWidths.cpp +++ b/src/Mod/Spreadsheet/App/PropertyColumnWidths.cpp @@ -28,6 +28,7 @@ #include "PropertyColumnWidths.h" #include #include +#include #include "Utils.h" #include @@ -132,7 +133,7 @@ void PropertyColumnWidths::Restore(Base::XMLReader &reader) try { if (name && width) { - int col = decodeColumn(name); + int col = App::decodeColumn(name); int colWidth = atoi(width); setValue(col, colWidth); diff --git a/src/Mod/Spreadsheet/App/PropertyRowHeights.cpp b/src/Mod/Spreadsheet/App/PropertyRowHeights.cpp index 8796a6d6d6fb..98cb85e37238 100644 --- a/src/Mod/Spreadsheet/App/PropertyRowHeights.cpp +++ b/src/Mod/Spreadsheet/App/PropertyRowHeights.cpp @@ -28,6 +28,7 @@ #include "PropertyRowHeights.h" #include #include +#include #include "Utils.h" #include @@ -126,7 +127,7 @@ void PropertyRowHeights::Restore(Base::XMLReader &reader) try { if (name && height) { - int row = decodeRow(name); + int row = App::decodeRow(name); int rowHeight = atoi(height); setValue(row, rowHeight); diff --git a/src/Mod/Spreadsheet/App/PropertySheet.cpp b/src/Mod/Spreadsheet/App/PropertySheet.cpp index bf6fd12652dd..893d4669184e 100644 --- a/src/Mod/Spreadsheet/App/PropertySheet.cpp +++ b/src/Mod/Spreadsheet/App/PropertySheet.cpp @@ -38,7 +38,6 @@ #include #include "PropertySheet.h" #include "Sheet.h" -#include "SpreadsheetExpression.h" #include "Utils.h" #include #include @@ -158,7 +157,7 @@ bool PropertySheet::isValidAlias(const std::string &candidate) const boost::sub_match rowstr = cm[2]; // A valid cell address? - if (Spreadsheet::validRow(rowstr.str()) >= 0 && Spreadsheet::validColumn(colstr.str()) >= 0) + if (App::validRow(rowstr.str()) >= 0 && App::validColumn(colstr.str()) >= 0) return false; } return true; diff --git a/src/Mod/Spreadsheet/App/PropertySheet.h b/src/Mod/Spreadsheet/App/PropertySheet.h index c6392d5f6461..e91795bb93c6 100644 --- a/src/Mod/Spreadsheet/App/PropertySheet.h +++ b/src/Mod/Spreadsheet/App/PropertySheet.h @@ -53,55 +53,55 @@ class PropertySheet : public App::Property, private App::AtomicPropertyChangeInt virtual void Restore(Base::XMLReader & reader); - Cell *createCell(CellAddress address); + Cell *createCell(App::CellAddress address); void setValue() { } - void setContent(CellAddress address, const char * value); + void setContent(App::CellAddress address, const char * value); - void setAlignment(CellAddress address, int _alignment); + void setAlignment(App::CellAddress address, int _alignment); - void setStyle(CellAddress address, const std::set & _style); + void setStyle(App::CellAddress address, const std::set & _style); - void setForeground(CellAddress address, const App::Color &color); + void setForeground(App::CellAddress address, const App::Color &color); - void setBackground(CellAddress address, const App::Color &color); + void setBackground(App::CellAddress address, const App::Color &color); - void setDisplayUnit(CellAddress address, const std::string & unit); + void setDisplayUnit(App::CellAddress address, const std::string & unit); - void setAlias(CellAddress address, const std::string &alias); + void setAlias(App::CellAddress address, const std::string &alias); - void setComputedUnit(CellAddress address, const Base::Unit & unit); + void setComputedUnit(App::CellAddress address, const Base::Unit & unit); - void setSpans(CellAddress address, int rows, int columns); + void setSpans(App::CellAddress address, int rows, int columns); - void clear(CellAddress address); + void clear(App::CellAddress address); void clear(); - Cell * getValue(CellAddress key); + Cell * getValue(App::CellAddress key); - const Cell * getValue(CellAddress key) const; + const Cell * getValue(App::CellAddress key) const; const Cell * getValueFromAlias(const std::string &alias) const; bool isValidAlias(const std::string &candidate); - std::set getUsedCells() const; + std::set getUsedCells() const; Sheet * sheet() const { return owner; } - const std::set & getDirty() { return dirty; } + const std::set & getDirty() { return dirty; } - void setDirty(CellAddress address); + void setDirty(App::CellAddress address); - void clearDirty(CellAddress key) { dirty.erase(key); } + void clearDirty(App::CellAddress key) { dirty.erase(key); } void clearDirty() { dirty.clear(); purgeTouched(); } bool isDirty() const { return dirty.size() > 0; } - void moveCell(CellAddress currPos, CellAddress newPos, std::map &renames); + void moveCell(App::CellAddress currPos, App::CellAddress newPos, std::map &renames); void insertRows(int row, int count); @@ -113,23 +113,23 @@ class PropertySheet : public App::Property, private App::AtomicPropertyChangeInt virtual unsigned int getMemSize (void) const; - bool mergeCells(CellAddress from, CellAddress to); + bool mergeCells(App::CellAddress from, App::CellAddress to); - void splitCell(CellAddress address); + void splitCell(App::CellAddress address); - void getSpans(CellAddress address, int &rows, int &cols) const; + void getSpans(App::CellAddress address, int &rows, int &cols) const; - bool isMergedCell(CellAddress address) const; + bool isMergedCell(App::CellAddress address) const; - bool isHidden(CellAddress address) const; + bool isHidden(App::CellAddress address) const; - const std::set< CellAddress > & getDeps(const std::string & name) const; + const std::set< App::CellAddress > & getDeps(const std::string & name) const; - const std::set &getDeps(CellAddress pos) const; + const std::set &getDeps(App::CellAddress pos) const; const std::set & getDocDeps() const { return docDeps; } - void recomputeDependencies(CellAddress key); + void recomputeDependencies(App::CellAddress key); PyObject *getPyObject(void); @@ -161,24 +161,24 @@ class PropertySheet : public App::Property, private App::AtomicPropertyChangeInt friend class Sheet; - Cell *cellAt(CellAddress address); + Cell *cellAt(App::CellAddress address); - Cell *nonNullCellAt(CellAddress address); + Cell *nonNullCellAt(App::CellAddress address); - const Cell *cellAt(CellAddress address) const; + const Cell *cellAt(App::CellAddress address) const; - bool colSortFunc(const CellAddress &a, const CellAddress &b); + bool colSortFunc(const App::CellAddress &a, const App::CellAddress &b); - bool rowSortFunc(const CellAddress &a, const CellAddress &b); + bool rowSortFunc(const App::CellAddress &a, const App::CellAddress &b); /*! Set of cells that have been marked dirty */ - std::set dirty; + std::set dirty; /*! Cell data in this property */ - std::map data; + std::map data; /*! Merged cells; cell -> anchor cell */ - std::map mergedCells; + std::map mergedCells; /*! Owner of this property */ Sheet * owner; @@ -187,9 +187,9 @@ class PropertySheet : public App::Property, private App::AtomicPropertyChangeInt * Cell dependency tracking */ - void addDependencies(CellAddress key); + void addDependencies(App::CellAddress key); - void removeDependencies(CellAddress key); + void removeDependencies(App::CellAddress key); void recomputeDependants(const App::Property * prop); @@ -200,18 +200,18 @@ class PropertySheet : public App::Property, private App::AtomicPropertyChangeInt /*! Cell dependencies, i.e when a change occurs to property given in key, the set of addresses needs to be recomputed. */ - std::map > propertyNameToCellMap; + std::map > propertyNameToCellMap; /*! Properties this cell depends on */ - std::map > cellToPropertyNameMap; + std::map > cellToPropertyNameMap; /*! Cell dependencies, i.e when a change occurs to documentObject given in key, the set of addresses needs to be recomputed. */ - std::map > documentObjectToCellMap; + std::map > documentObjectToCellMap; /*! DocumentObject this cell depends on */ - std::map > cellToDocumentObjectMap; + std::map > cellToDocumentObjectMap; /*! Other document objects the sheet depends on */ std::set docDeps; @@ -223,10 +223,10 @@ class PropertySheet : public App::Property, private App::AtomicPropertyChangeInt std::map documentName; /*! Mapping of cell position to alias property */ - std::map aliasProp; + std::map aliasProp; /*! Mapping of alias property to cell position */ - std::map revAliasProp; + std::map revAliasProp; /*! The associated python object */ Py::Object PythonObject; diff --git a/src/Mod/Spreadsheet/App/Range.cpp b/src/Mod/Spreadsheet/App/Range.cpp deleted file mode 100644 index 673b27707597..000000000000 --- a/src/Mod/Spreadsheet/App/Range.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/*************************************************************************** - * Copyright (c) Eivind Kvedalen (eivind@kvedalen.name) 2015 * - * * - * This file is part of the FreeCAD CAx development system. * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Library General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library 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 Library General Public License for more details. * - * * - * You should have received a copy of the GNU Library General Public * - * License along with this library; see the file COPYING.LIB. If not, * - * write to the Free Software Foundation, Inc., 59 Temple Place, * - * Suite 330, Boston, MA 02111-1307, USA * - * * - ***************************************************************************/ - -#include "PreCompiled.h" -#include "Range.h" -#include -#include - -using namespace Spreadsheet; - -Range::Range(const char * range) -{ - std::string from; - std::string to; - - assert(range != NULL); - - if (strchr(range, ':') == NULL) { - from = range; - to = range; - } - else { - std::string s = range; - from = s.substr(0, s.find(':')); - to = s.substr(s.find(':') + 1); - } - - CellAddress begin(from); - CellAddress end(to); - - row_begin = begin.row(); - col_begin = begin.col(); - row_end = end.row(); - col_end = end.col(); - - row_curr = row_begin; - col_curr = col_begin; -} - -Range::Range(int _row_begin, int _col_begin, int _row_end, int _col_end) - : row_curr(_row_begin) - , col_curr(_col_begin) - , row_begin(_row_begin) - , col_begin(_col_begin) - , row_end(_row_end) - , col_end(_col_end) -{ -} - -Range::Range(const CellAddress &from, const CellAddress &to) - : row_curr(from.row()) - , col_curr(from.col()) - , row_begin(from.row()) - , col_begin(from.col()) - , row_end(to.row()) - , col_end(to.col()) -{ -} - -bool Range::next() -{ - if (row_curr < row_end) { - row_curr++; - - return true; - } - if (col_curr < col_end) { - if (row_curr == row_end + 1) - return false; - row_curr = row_begin; - ++col_curr; - return true; - } - return false; -} - - diff --git a/src/Mod/Spreadsheet/App/Range.h b/src/Mod/Spreadsheet/App/Range.h deleted file mode 100644 index 5264790afabe..000000000000 --- a/src/Mod/Spreadsheet/App/Range.h +++ /dev/null @@ -1,91 +0,0 @@ -/*************************************************************************** - * Copyright (c) Eivind Kvedalen (eivind@kvedalen.name) 2015 * - * * - * This file is part of the FreeCAD CAx development system. * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Library General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library 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 Library General Public License for more details. * - * * - * You should have received a copy of the GNU Library General Public * - * License along with this library; see the file COPYING.LIB. If not, * - * write to the Free Software Foundation, Inc., 59 Temple Place, * - * Suite 330, Boston, MA 02111-1307, USA * - * * - ***************************************************************************/ - -#ifndef RANGE_H -#define RANGE_H - -#include "Utils.h" - -namespace Spreadsheet { - -/** - * @brief The Range class is a spreadsheet range iterator. It takes - * a starting (row, col) and an ending (row, col). Notice that ranges - * are always at least one element. The next() functions is therefore - * used e.g as follows: - * - * do { - * ... - * while (range.next()); - * - */ - -class SpreadsheetExport Range { -public: - Range(const char *range); - - Range(int _row_begin, int _col_begin, int _row_end, int _col_end); - - Range(const CellAddress & from, const CellAddress & to); - - bool next(); - - /** Current row */ - inline int row() const { return row_curr; } - - /** Current column */ - inline int column() const { return col_curr; } - - /** Position of start of range */ - inline CellAddress from() const { return CellAddress(row_begin, col_begin); } - - /** Position of end of range */ - inline CellAddress to() const { return CellAddress(row_end, col_end); } - - /** Start of range as a string */ - inline std::string fromCellString() const { return CellAddress(row_begin, col_begin).toString(); } - - /** End of range as a string */ - inline std::string toCellString() const { return CellAddress(row_end, col_end).toString(); } - - /** Current cell as a string */ - inline std::string address() const { return CellAddress(row_curr, col_curr).toString(); } - - /** The raneg as a string */ - inline std::string rangeString() const { - return CellAddress(row_begin, col_begin).toString() + ":" + CellAddress(row_end, col_end).toString(); - } - - CellAddress operator*() const { return CellAddress(row_curr, col_curr); } - - /** Number of elements in range */ - inline int size() const { return (row_end - row_begin + 1) * (col_end - col_begin + 1); } - -private: - int row_curr, col_curr; - int row_begin, col_begin; - int row_end, col_end; -}; - -} - -#endif // RANGE_H diff --git a/src/Mod/Spreadsheet/App/Sheet.cpp b/src/Mod/Spreadsheet/App/Sheet.cpp index aa973cfad353..31b41cc16fed 100644 --- a/src/Mod/Spreadsheet/App/Sheet.cpp +++ b/src/Mod/Spreadsheet/App/Sheet.cpp @@ -38,11 +38,9 @@ #include #include #include -#include "SpreadsheetExpression.h" #include "Sheet.h" #include "SheetObserver.h" #include "Utils.h" -#include "Range.h" #include "SheetPy.h" #include #include diff --git a/src/Mod/Spreadsheet/App/Sheet.h b/src/Mod/Spreadsheet/App/Sheet.h index dba9cc51946a..0f0d7a82bfa6 100644 --- a/src/Mod/Spreadsheet/App/Sheet.h +++ b/src/Mod/Spreadsheet/App/Sheet.h @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include "PropertySheet.h" @@ -43,12 +44,12 @@ #include "PropertyRowHeights.h" #include "Utils.h" + namespace Spreadsheet { class Sheet; class Cell; -class Range; class SheetObserver; /** Spreadsheet quantity property @@ -86,25 +87,25 @@ class SpreadsheetExport Sheet : public App::DocumentObject bool exportToFile(const std::string & filename, char delimiter = '\t', char quoteChar = '\0', char escapeChar = '\\') const; - bool mergeCells(const Range &range); + bool mergeCells(const App::Range &range); - void splitCell(CellAddress address); + void splitCell(App::CellAddress address); - Cell * getCell(CellAddress address); + Cell * getCell(App::CellAddress address); - Cell *getNewCell(CellAddress address); + Cell *getNewCell(App::CellAddress address); void setCell(const char *address, const char *value); - void setCell(CellAddress address, const char *value); + void setCell(App::CellAddress address, const char *value); void clearAll(); - void clear(CellAddress address, bool all = true); + void clear(App::CellAddress address, bool all = true); - void getSpans(CellAddress address, int & rows, int & cols) const; + void getSpans(App::CellAddress address, int & rows, int & cols) const; - bool isMergedCell(CellAddress address) const; + bool isMergedCell(App::CellAddress address) const; void setColumnWidth(int col, int width); @@ -124,31 +125,31 @@ class SpreadsheetExport Sheet : public App::DocumentObject void removeRows(int row, int count); - void setContent(CellAddress address, const char * value); + void setContent(App::CellAddress address, const char * value); - void setAlignment(CellAddress address, int alignment); + void setAlignment(App::CellAddress address, int alignment); - void setStyle(CellAddress address, const std::set & style); + void setStyle(App::CellAddress address, const std::set & style); - void setForeground(CellAddress address, const App::Color &color); + void setForeground(App::CellAddress address, const App::Color &color); - void setBackground(CellAddress address, const App::Color &color); + void setBackground(App::CellAddress address, const App::Color &color); - void setDisplayUnit(CellAddress address, const std::string & unit); + void setDisplayUnit(App::CellAddress address, const std::string & unit); - void setComputedUnit(CellAddress address, const Base::Unit & unit); + void setComputedUnit(App::CellAddress address, const Base::Unit & unit); - void setAlias(CellAddress address, const std::string & alias); + void setAlias(App::CellAddress address, const std::string & alias); std::string getAddressFromAlias(const std::string & alias) const; bool isValidAlias(const std::string &candidate); - void setSpans(CellAddress address, int rows, int columns); + void setSpans(App::CellAddress address, int rows, int columns); - std::set dependsOn(CellAddress address) const; + std::set dependsOn(App::CellAddress address) const; - void providesTo(CellAddress address, std::set & result) const; + void providesTo(App::CellAddress address, std::set & result) const; PyObject *getPyObject(); @@ -160,7 +161,7 @@ class SpreadsheetExport Sheet : public App::DocumentObject App::DocumentObjectExecReturn *execute(void); - void getCellAddress(const App::Property *prop, CellAddress &address); + void getCellAddress(const App::Property *prop, App::CellAddress &address); std::map getColumnWidths() const; @@ -168,9 +169,9 @@ class SpreadsheetExport Sheet : public App::DocumentObject // Signals - boost::signal cellUpdated; + boost::signal cellUpdated; - boost::signal cellSpanChanged; + boost::signal cellSpanChanged; boost::signal columnWidthChanged; @@ -231,7 +232,7 @@ class SpreadsheetExport Sheet : public App::DocumentObject protected: - void providesTo(CellAddress address, std::set & result) const; + void providesTo(App::CellAddress address, std::set & result) const; void onDocumentRestored(); @@ -239,25 +240,25 @@ class SpreadsheetExport Sheet : public App::DocumentObject void onRenamedDocument(const App::Document & document); - void recomputeCell(CellAddress p); + void recomputeCell(App::CellAddress p); - App::Property *getProperty(CellAddress key) const; + App::Property *getProperty(App::CellAddress key) const; App::Property *getProperty(const char * addr) const; - void updateAlias(CellAddress key); + void updateAlias(App::CellAddress key); - void updateProperty(CellAddress key); + void updateProperty(App::CellAddress key); - App::Property *setStringProperty(CellAddress key, const std::string & value) ; + App::Property *setStringProperty(App::CellAddress key, const std::string & value) ; - App::Property *setFloatProperty(CellAddress key, double value); + App::Property *setFloatProperty(App::CellAddress key, double value); - App::Property *setQuantityProperty(CellAddress key, double value, const Base::Unit &unit); + App::Property *setQuantityProperty(App::CellAddress key, double value, const Base::Unit &unit); void renamedDocumentObject(const App::DocumentObject * docObj); - void aliasRemoved(CellAddress address, const std::string &alias); + void aliasRemoved(App::CellAddress address, const std::string &alias); void removeAliases(); @@ -267,13 +268,13 @@ class SpreadsheetExport Sheet : public App::DocumentObject App::DynamicProperty props; /* Mapping of properties to cell position */ - std::map propAddress; + std::map propAddress; /* Removed (unprocessed) aliases */ - std::map removedAliases; + std::map removedAliases; /* Set of cells with errors */ - std::set cellErrors; + std::set cellErrors; /* Properties */ diff --git a/src/Mod/Spreadsheet/App/SheetPyImp.cpp b/src/Mod/Spreadsheet/App/SheetPyImp.cpp index 9b65085e6bdc..0bcfa286e9c6 100644 --- a/src/Mod/Spreadsheet/App/SheetPyImp.cpp +++ b/src/Mod/Spreadsheet/App/SheetPyImp.cpp @@ -28,7 +28,7 @@ #include #include #include "Utils.h" -#include "Range.h" +#include // inclusion of the generated files (generated out of SheetPy.xml) #include "SheetPy.h" diff --git a/src/Mod/Spreadsheet/App/SpreadsheetExpression.cpp b/src/Mod/Spreadsheet/App/SpreadsheetExpression.cpp deleted file mode 100644 index fd6bc102b68f..000000000000 --- a/src/Mod/Spreadsheet/App/SpreadsheetExpression.cpp +++ /dev/null @@ -1,485 +0,0 @@ -/*************************************************************************** - * Copyright (c) Eivind Kvedalen (eivind@kvedalen.name) 2015 * - * * - * This file is part of the FreeCAD CAx development system. * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Library General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library 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 Library General Public License for more details. * - * * - * You should have received a copy of the GNU Library General Public * - * License along with this library; see the file COPYING.LIB. If not, * - * write to the Free Software Foundation, Inc., 59 Temple Place, * - * Suite 330, Boston, MA 02111-1307, USA * - * * - ***************************************************************************/ - -#include "PreCompiled.h" -#ifdef __GNUC__ -# include -#endif - -#include "Base/Exception.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "SpreadsheetExpression.h" -#include -#include -#include "Utils.h" -#include - -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif -#ifndef M_E -#define M_E 2.71828182845904523536 -#endif -#ifndef DOUBLE_MAX -# define DOUBLE_MAX 1.7976931348623157E+308 /* max decimal value of a "double"*/ -#endif -#ifndef DOUBLE_MIN -# define DOUBLE_MIN 2.2250738585072014E-308 /* min decimal value of a "double"*/ -#endif - -#if defined(_MSC_VER) -#define strtoll _strtoi64 -#pragma warning(disable : 4003) -#pragma warning(disable : 4065) -#endif - -using namespace App; -using namespace Base; -using namespace Spreadsheet; - -// -// FunctionExpression class. This class handles functions with one or two parameters. -// - -TYPESYSTEM_SOURCE(Spreadsheet::AggregateFunctionExpression, App::FunctionExpression); - -AggregateFunctionExpression::AggregateFunctionExpression(const DocumentObject *_owner, - App::FunctionExpression::Function _f, - std::vector _args) - : FunctionExpression(_owner, static_cast(_f), _args) -{ -} - -AggregateFunctionExpression::~AggregateFunctionExpression() -{ -} - -Expression *AggregateFunctionExpression::copy() const -{ - std::vector::const_iterator i = args.begin(); - std::vector a; - - while (i != args.end()) { - a.push_back((*i)->copy()); - ++i; - } - - return new AggregateFunctionExpression(owner, f, a); -} - -/** - * Evaluate function. Returns a NumberExpression if evaluation is successfuly. - * Throws an exception if something fails. - * - * @returns A NumberExpression with the result. - */ - -Expression * AggregateFunctionExpression::eval() const -{ - switch (static_cast(f)) { - case SUM: - case AVERAGE: - case STDDEV: - case COUNT: - case MIN: - case MAX: - { - RangeExpression * v = freecad_dynamic_cast(args[0]); - Quantity q; - Quantity mean; - Quantity M2; - - int n = 0; - bool first = true; - - if (!v) - throw Exception("Expected range as argument"); - - Range range(v->getRange()); - - do { - Property * p = owner->getPropertyByName(range.address().c_str()); - PropertyQuantity * qp; - PropertyFloat * fp; - Quantity value; - - if (!p) - continue; - - if ((qp = freecad_dynamic_cast(p)) != 0) - value = qp->getQuantityValue(); - else if ((fp = freecad_dynamic_cast(p)) != 0) - value = fp->getValue(); - else - throw Exception("Invalid property type for aggregate"); - - if (first) { - q.setUnit(value.getUnit()); - mean.setUnit(value.getUnit()); - M2.setUnit(value.getUnit()); - } - - switch (static_cast(f)) { - case AVERAGE: - n++; - case SUM: - q = q + value; - break; - case STDDEV: { - n++; - - const Quantity delta = value - mean; - mean = mean + delta / n; - M2 = M2 + delta * (value - mean); - break; - } - case COUNT: - q = q + 1; - break; - case MIN: - if (first || value < q) - q = value; - break; - case MAX: - if (first || value > q) - q = value; - break; - default: - break; - } - - first = false; - } while (range.next()); - - switch (static_cast(f)) { - case AVERAGE: - q = q / (double)n; - break; - case STDDEV: - if (n < 2) - q = Quantity(); - else - q = (M2 / (n - 1.0)).pow(Quantity(0.5)); - break; - default: - break; - } - - return new NumberExpression(owner, q); - } - default: - return App::FunctionExpression::eval(); - } -} - -/** - * Create a string representation of the expression. - * - * @returns A string representing the expression. - */ - -std::string AggregateFunctionExpression::toString() const -{ - switch (static_cast(f)) { - case SUM: - return "sum(" + args[0]->toString() + ")"; - case COUNT: - return "count(" + args[0]->toString() + ")"; - case AVERAGE: - return "average(" + args[0]->toString() + ")"; - case STDDEV: - return "stddev(" + args[0]->toString() + ")"; - case MIN: - return "min(" + args[0]->toString() + ")"; - case MAX: - return "max(" + args[0]->toString() + ")"; - default: - return App::FunctionExpression::toString(); - } -} - -TYPESYSTEM_SOURCE(Spreadsheet::RangeExpression, App::Expression); - -RangeExpression::RangeExpression(const DocumentObject *_owner, const std::string &begin, const std::string &end) - : Expression(_owner) - , range((begin + ":" + end).c_str()) -{ -} - -bool RangeExpression::isTouched() const -{ - Range i(range); - - do { - Property * prop = owner->getPropertyByName(i.address().c_str()); - - if (prop && prop->isTouched()) - return true; - } while (i.next()); - - return false; -} - -Expression *RangeExpression::eval() const -{ - throw Exception("Range expression cannot be evaluated"); -} - -std::string RangeExpression::toString() const -{ - return range.rangeString(); -} - -Expression *RangeExpression::copy() const -{ - return new RangeExpression(owner, range.fromCellString(), range.toCellString()); -} - -void RangeExpression::getDeps(std::set &props) const -{ - Range i(range); - - do { - props.insert(ObjectIdentifier(owner, i.address())); - } while (i.next()); -} - -Expression *RangeExpression::simplify() const -{ - return copy(); -} - -void RangeExpression::setRange(const Range &r) -{ - range = r; -} - - -namespace Spreadsheet { - -namespace ExpressionParser { - -/** - * Error function for parser. Throws a generic Base::Exception with the parser error. - */ - -void ExpressionParser_yyerror(char *errorinfo) -{ -} - -/* helper function for tuning number strings with groups in a locale agnostic way... */ -double num_change(char* yytext,char dez_delim,char grp_delim) -{ - double ret_val; - char temp[40]; - int i = 0; - for(char* c=yytext;*c!='\0';c++){ - // skipp group delimiter - if(*c==grp_delim) continue; - // check for a dez delimiter othere then dot - if(*c==dez_delim && dez_delim !='.') - temp[i++] = '.'; - else - temp[i++] = *c; - // check buffor overflow - if (i>39) return 0.0; - } - temp[i] = '\0'; - - errno = 0; - ret_val = strtod( temp, NULL ); - if (ret_val == 0 && errno == ERANGE) - throw Base::Exception("Number underflow."); - if (ret_val == HUGE_VAL || ret_val == -HUGE_VAL) - throw Base::Exception("Number overflow."); - - return ret_val; -} - -static Expression * ScanResult = 0; /**< The resulting expression after a successful parsing */ -static const DocumentObject * DocumentObject = 0; /**< The DocumentObject that will own the expression */ -static bool unitExpression = false; /**< True if the parsed string is a unit only */ -static bool valueExpression = false; /**< True if the parsed string is a full expression */ -static std::stack labels; /**< Label string primitive */ -static std::map registered_functions; /**< Registerd functions */ - -// show the parser the lexer method -#undef YYTOKENTYPE -#undef YYSTYPE -#undef YYSTYPE_ISDECLARED -#define yylex ExpressionParserlex -int ExpressionParserlex(void); - -// Parser, defined in ExpressionParser.y -#include -#include - -#ifndef DOXYGEN_SHOULD_SKIP_THIS -// Scanner, defined in ExpressionParser.l -#include -#endif // DOXYGEN_SHOULD_SKIP_THIS -#ifdef _MSC_VER -# define strdup _strdup -#endif - -static void initParser(const App::DocumentObject *owner) -{ - static bool has_registered_functions = false; - - using namespace Spreadsheet::ExpressionParser; - - ScanResult = 0; - Spreadsheet::ExpressionParser::DocumentObject = owner; - labels = std::stack(); - unitExpression = valueExpression = false; - - if (!has_registered_functions) { - registered_functions["acos"] = FunctionExpression::ACOS; - registered_functions["asin"] = FunctionExpression::ASIN; - registered_functions["atan"] = FunctionExpression::ATAN; - registered_functions["abs"] = FunctionExpression::ABS; - registered_functions["exp"] = FunctionExpression::EXP; - registered_functions["log"] = FunctionExpression::LOG; - registered_functions["log10"] = FunctionExpression::LOG10; - registered_functions["sin"] = FunctionExpression::SIN; - registered_functions["sinh"] = FunctionExpression::SINH; - registered_functions["tan"] = FunctionExpression::TAN; - registered_functions["tanh"] = FunctionExpression::TANH; - registered_functions["sqrt"] = FunctionExpression::SQRT; - registered_functions["cos"] = FunctionExpression::COS; - registered_functions["cosh"] = FunctionExpression::COSH; - registered_functions["atan2"] = FunctionExpression::ATAN2; - registered_functions["mod"] = FunctionExpression::MOD; - registered_functions["pow"] = FunctionExpression::POW; - registered_functions["round"] = FunctionExpression::ROUND; - registered_functions["trunc"] = FunctionExpression::TRUNC; - registered_functions["ceil"] = FunctionExpression::CEIL; - registered_functions["floor"] = FunctionExpression::FLOOR; - - // Aggregates - registered_functions["sum"] = static_cast(AggregateFunctionExpression::SUM); - registered_functions["count"] = static_cast(AggregateFunctionExpression::COUNT); - registered_functions["average"] = static_cast(AggregateFunctionExpression::AVERAGE); - registered_functions["stddev"] = static_cast(AggregateFunctionExpression::STDDEV); - registered_functions["min"] = static_cast(AggregateFunctionExpression::MIN); - registered_functions["max"] = static_cast(AggregateFunctionExpression::MAX); - - has_registered_functions = true; - } -} - -/** - * Parse the expression given by \a buffer, and use \a owner as the owner of the - * returned expression. If the parser fails for some reason, and exception is thrown. - * - * @param owner The DocumentObject that will own the expression. - * @param buffer The sting buffer to parse. - * - * @returns A pointer to an expression. - * - */ - -Expression * parse(const App::DocumentObject *owner, const char* buffer) -{ - // parse from buffer - ExpressionParser::YY_BUFFER_STATE my_string_buffer = ExpressionParser_scan_string (buffer); - - initParser(owner); - - // run the parser - int result = ExpressionParser::ExpressionParser_yyparse (); - - // free the scan buffer - ExpressionParser::ExpressionParser_delete_buffer (my_string_buffer); - - if (result != 0) - throw Base::Exception("Failed to parse expression."); - - if (ScanResult == 0) - throw Base::Exception("Unknown error in expression"); - - if (valueExpression) - return ScanResult; - else { - delete ScanResult; - throw Expression::Exception("Expression can not evaluate to a value."); - return 0; - } -} - -UnitExpression * parseUnit(const App::DocumentObject *owner, const char* buffer) -{ - // parse from buffer - ExpressionParser::YY_BUFFER_STATE my_string_buffer = ExpressionParser_scan_string (buffer); - - initParser(owner); - - // run the parser - int result = ExpressionParser::ExpressionParser_yyparse (); - - // free the scan buffer - ExpressionParser::ExpressionParser_delete_buffer (my_string_buffer); - - if (result != 0) - throw Base::Exception("Failed to parse expression."); - - if (ScanResult == 0) - throw Base::Exception("Unknown error in expression"); - - // Simplify expression - Expression * simplified = ScanResult->simplify(); - delete ScanResult; - - if (unitExpression) { - NumberExpression * num = freecad_dynamic_cast(simplified); - - if (num) { - simplified = new UnitExpression(num->getOwner(), num->getQuantity()); - delete num; - } - return freecad_dynamic_cast(simplified); - } - else { - delete simplified; - throw Expression::Exception("Expression is not a unit."); - return 0; - } -} - -} - -} - diff --git a/src/Mod/Spreadsheet/App/SpreadsheetExpression.h b/src/Mod/Spreadsheet/App/SpreadsheetExpression.h deleted file mode 100644 index d2848cd87989..000000000000 --- a/src/Mod/Spreadsheet/App/SpreadsheetExpression.h +++ /dev/null @@ -1,107 +0,0 @@ -/*************************************************************************** - * Copyright (c) Eivind Kvedalen (eivind@kvedalen.name) 2015 * - * * - * This file is part of the FreeCAD CAx development system. * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Library General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library 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 Library General Public License for more details. * - * * - * You should have received a copy of the GNU Library General Public * - * License along with this library; see the file COPYING.LIB. If not, * - * write to the Free Software Foundation, Inc., 59 Temple Place, * - * Suite 330, Boston, MA 02111-1307, USA * - * * - ***************************************************************************/ - -#ifndef SPREADSHEET_EXPRESSION_H -#define SPREADSHEET_EXPRESSION_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace Spreadsheet { - -class SpreadsheetExport RangeExpression : public App::Expression { - TYPESYSTEM_HEADER(); -public: - RangeExpression(const App::DocumentObject * _owner = 0, const std::string & begin = std::string(), const std::string & end = std::string()); - - virtual ~RangeExpression() { } - - virtual bool isTouched() const; - - virtual Expression * eval() const; - - virtual std::string toString() const; - - virtual Expression * copy() const; - - virtual int priority() const { return 20; } - - virtual void getDeps(std::set &props) const; - - virtual App::Expression * simplify() const; - - Range getRange() const { return range; } - - void setRange(const Range & r); - -protected: - Range range; -}; - -/** - * Class implementing various functions, e.g sin, cos, etc. - * - */ - -class SpreadsheetExport AggregateFunctionExpression : public App::FunctionExpression { - TYPESYSTEM_HEADER(); -public: - enum Function { - NONE, - - // Aggregates - SUM = App::FunctionExpression::LAST, - AVERAGE, - STDDEV, - COUNT, - MIN, - MAX - }; - - AggregateFunctionExpression(const App::DocumentObject *_owner = 0, - App::FunctionExpression::Function _f = App::FunctionExpression::NONE, - std::vector _args = std::vector()); - - virtual ~AggregateFunctionExpression(); - - virtual Expression * copy() const; - - virtual App::Expression * eval() const; - - virtual std::string toString() const; -}; - -namespace ExpressionParser { -SpreadsheetExport App::Expression * parse(const App::DocumentObject *owner, const char *buffer); -SpreadsheetExport App::UnitExpression * parseUnit(const App::DocumentObject *owner, const char *buffer); -SpreadsheetExport App::ObjectIdentifier parsePath(const App::DocumentObject *owner, const char* buffer); -} - -} -#endif // EXPRESSION_H diff --git a/src/Mod/Spreadsheet/App/Utils.cpp b/src/Mod/Spreadsheet/App/Utils.cpp index e687de429eb6..e07a8a819e74 100644 --- a/src/Mod/Spreadsheet/App/Utils.cpp +++ b/src/Mod/Spreadsheet/App/Utils.cpp @@ -32,9 +32,6 @@ #include #include "Sheet.h" -const int Spreadsheet::CellAddress::MAX_ROWS = 16384; -const int Spreadsheet::CellAddress::MAX_COLUMNS = 26 * 26 + 26; - /** * Encode \a col as a string. * @@ -74,126 +71,6 @@ std::string Spreadsheet::rowName(int row) return s.str(); } -/** - * Decode a row specification into a 0-based integer. - * - * @param rowstr Row specified as a string, with "1" being the first row. - * - * @returns The row. - */ - -int Spreadsheet::decodeRow(const std::string &rowstr) -{ - int row = validRow(rowstr); - - if (row >= 0) - return row; - else - throw Base::Exception("Invalid row specification."); -} - -/** - * Decode a column specification into a 0-based integer. - * - * @param colstr Column specified as a string, with "A" begin the first column. - * - * @returns The column. - * - */ - -int Spreadsheet::decodeColumn(const std::string &colstr) -{ - int col = validColumn(colstr); - - if (col >= 0) - return col; - else - throw Base::Exception("Invalid column specification"); -} - -/** - * Determine wheter a row specification is valid or not. - * - * @param rowstr Row specified as a string, with "1" being the first row. - * - * @returns 0 or positive on success, -1 on error. - */ - -int Spreadsheet::validRow(const std::string &rowstr) -{ - char * end; - int i = strtol(rowstr.c_str(), &end, 10); - - if (i <0 || i >= CellAddress::MAX_ROWS || *end) - return -1; - - return i - 1; -} - -/** - * Determine whether a column specification is valid or not. - * - * @param colstr Column specified as a string, with "A" begin the first column. - * - * @returns 0 or positive on success, -1 on error. - * - */ - -int Spreadsheet::validColumn(const std::string &colstr) -{ - int col = 0; - - if (colstr.length() == 1) { - if ((colstr[0] >= 'A' && colstr[0] <= 'Z')) - col = colstr[0] - 'A'; - else - return -1; - } - else { - col = 0; - for (std::string::const_reverse_iterator i = colstr.rbegin(); i != colstr.rend(); ++i) { - int v; - - if ((*i >= 'A' && *i <= 'Z')) - v = *i - 'A'; - else - return -1; - - col = col * 26 + v; - } - col += 26; - } - return col; -} - -/** - * Convert a string address into integer \a row and \a column. - * row and col are 0-based. - * - * This function will throw an exception if the specified \a address is invalid. - * - * @param address Address to parse. - * @param row Reference to integer where row position is stored. - * @param col Reference to integer where col position is stored. - * - */ - -Spreadsheet::CellAddress Spreadsheet::stringToAddress(const char * strAddress) -{ - static const boost::regex e("\\${0,1}([A-Z]{1,2})\\${0,1}([0-9]{1,5})"); - boost::cmatch cm; - - Q_ASSERT(strAddress != 0); - - if (boost::regex_match(strAddress, cm, e)) { - const boost::sub_match colstr = cm[1]; - const boost::sub_match rowstr = cm[2]; - - return CellAddress(Spreadsheet::decodeRow(rowstr.str()), Spreadsheet::decodeColumn(colstr.str())); - } - else - throw Base::Exception("Invalid cell specifier."); -} void Spreadsheet::createRectangles(std::set > & cells, std::map, std::pair > & rectangles) { @@ -349,28 +226,3 @@ std::string Spreadsheet::unquote(const std::string & input) return output; } - - -/** - * Convert given \a cell address into its string representation. - * - * @returns Address given as a string. - */ - -std::string Spreadsheet::CellAddress::toString() const -{ - std::stringstream s; - - if (col() < 26) - s << (char)('A' + col()); - else { - int colnum = col() - 26; - - s << (char)('A' + (colnum / 26)); - s << (char)('A' + (colnum % 26)); - } - - s << (row() + 1); - - return s.str(); -} diff --git a/src/Mod/Spreadsheet/App/Utils.h b/src/Mod/Spreadsheet/App/Utils.h index 7be4b60bea02..d4dfe1028657 100644 --- a/src/Mod/Spreadsheet/App/Utils.h +++ b/src/Mod/Spreadsheet/App/Utils.h @@ -31,60 +31,13 @@ namespace Spreadsheet { -struct CellAddress; - SpreadsheetExport std::string columnName(int col); SpreadsheetExport std::string rowName(int row); -int decodeColumn(const std::string &colstr); -int decodeRow(const std::string &rowstr); -int validColumn(const std::string &colstr); -int validRow(const std::string &rowstr); -SpreadsheetExport CellAddress stringToAddress(const char *strAddress); SpreadsheetExport void createRectangles(std::set > & cells, std::map, std::pair > & rectangles); SpreadsheetExport std::string quote(const std::string &input); SpreadsheetExport std::string unquote(const std::string & input); -struct SpreadsheetExport CellAddress { - - CellAddress(int row = -1, int col = -1) : _row(row), _col(col) { } - - CellAddress(const char * address) { - *this = stringToAddress(address); - } - - CellAddress(const std::string & address) { - *this = stringToAddress(address.c_str()); - } - - inline int row() const { return _row; } - - inline int col() const { return _col; } - - inline bool operator<(const CellAddress & other) const { return asInt() < other.asInt(); } - - inline bool operator==(const CellAddress & other) const { return asInt() == other.asInt(); } - - inline bool operator!=(const CellAddress & other) const { return asInt() != other.asInt(); } - - inline bool isValid() { return (row() >=0 && row() < MAX_ROWS && col() >= 0 && col() < MAX_COLUMNS); } - - std::string toString() const; - - // Static members - - static const int MAX_ROWS; - - static const int MAX_COLUMNS; - -protected: - - inline unsigned int asInt() const { return ((_row << 16) | _col); } - - short _row; - short _col; -}; - } #endif // UTILS_H diff --git a/src/Mod/Spreadsheet/Gui/Command.cpp b/src/Mod/Spreadsheet/Gui/Command.cpp index 56e5f5decbdc..1a9d4bf8c412 100644 --- a/src/Mod/Spreadsheet/Gui/Command.cpp +++ b/src/Mod/Spreadsheet/Gui/Command.cpp @@ -37,7 +37,7 @@ #include "SpreadsheetView.h" #include "../App/Sheet.h" -#include "../App/Range.h" +#include #include "ViewProviderSpreadsheet.h" #include "PropertiesDialog.h" @@ -46,6 +46,7 @@ using namespace SpreadsheetGui; using namespace Spreadsheet; using namespace Base; +using namespace App; //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -793,7 +794,7 @@ void CmdSpreadsheetSetAlias::activated(int iMsg) QModelIndexList selection = sheetView->selectedIndexes(); if (selection.size() == 1) { - std::vector range; + std::vector range; range.push_back(Range(selection[0].row(), selection[0].column(), selection[0].row(), selection[0].column())); diff --git a/src/Mod/Spreadsheet/Gui/PropertiesDialog.cpp b/src/Mod/Spreadsheet/Gui/PropertiesDialog.cpp index a10ef3e66a35..24146a7e7ccf 100644 --- a/src/Mod/Spreadsheet/Gui/PropertiesDialog.cpp +++ b/src/Mod/Spreadsheet/Gui/PropertiesDialog.cpp @@ -24,8 +24,7 @@ #include "PreCompiled.h" #include "PropertiesDialog.h" #include -#include -#include +#include #include #include "ui_PropertiesDialog.h" @@ -185,7 +184,7 @@ void PropertiesDialog::displayUnitChanged(const QString & text) QPalette palette = ui->displayUnit->palette(); try { - std::auto_ptr e(Spreadsheet::ExpressionParser::parseUnit(sheet, text.toUtf8().constData())); + std::auto_ptr e(App::ExpressionParser::parseUnit(sheet, text.toUtf8().constData())); displayUnit = DisplayUnit(text.toUtf8().constData(), e->getUnit(), e->getScaler()); palette.setColor(QPalette::Text, Qt::black); diff --git a/src/Mod/Spreadsheet/Gui/PropertiesDialog.h b/src/Mod/Spreadsheet/Gui/PropertiesDialog.h index 411e45223133..695bdf7d82cd 100644 --- a/src/Mod/Spreadsheet/Gui/PropertiesDialog.h +++ b/src/Mod/Spreadsheet/Gui/PropertiesDialog.h @@ -37,7 +37,7 @@ class PropertiesDialog : public QDialog Q_OBJECT public: - explicit PropertiesDialog(Spreadsheet::Sheet *_sheet, const std::vector & _ranges, QWidget *parent = 0); + explicit PropertiesDialog(Spreadsheet::Sheet *_sheet, const std::vector & _ranges, QWidget *parent = 0); ~PropertiesDialog(); void apply(); @@ -52,7 +52,7 @@ private Q_SLOTS: void aliasChanged(const QString &text); private: Spreadsheet::Sheet * sheet; - std::vector ranges; + std::vector ranges; Ui::PropertiesDialog *ui; App::Color foregroundColor; App::Color backgroundColor; diff --git a/src/Mod/Spreadsheet/Gui/SheetModel.cpp b/src/Mod/Spreadsheet/Gui/SheetModel.cpp index 32f2e857398b..1a6d05afab8f 100644 --- a/src/Mod/Spreadsheet/Gui/SheetModel.cpp +++ b/src/Mod/Spreadsheet/Gui/SheetModel.cpp @@ -30,7 +30,6 @@ #include #include "SheetModel.h" -#include #include #include "../App/Sheet.h" #include diff --git a/src/Mod/Spreadsheet/Gui/SheetModel.h b/src/Mod/Spreadsheet/Gui/SheetModel.h index dbb8b92e5494..6a9738a71118 100644 --- a/src/Mod/Spreadsheet/Gui/SheetModel.h +++ b/src/Mod/Spreadsheet/Gui/SheetModel.h @@ -26,6 +26,7 @@ #include #include #include +#include namespace Spreadsheet { class Sheet; @@ -49,7 +50,7 @@ class SheetModel : public QAbstractTableModel Qt::ItemFlags flags(const QModelIndex &) const; private: - void cellUpdated(Spreadsheet::CellAddress address); + void cellUpdated(App::CellAddress address); boost::BOOST_SIGNALS_NAMESPACE::scoped_connection cellUpdatedConnection; Spreadsheet::Sheet * sheet; diff --git a/src/Mod/Spreadsheet/Gui/SheetTableView.cpp b/src/Mod/Spreadsheet/Gui/SheetTableView.cpp index 29a14afafff0..e0bb005fb1f5 100644 --- a/src/Mod/Spreadsheet/Gui/SheetTableView.cpp +++ b/src/Mod/Spreadsheet/Gui/SheetTableView.cpp @@ -29,13 +29,14 @@ #include #include #include "../App/Utils.h" -#include "../App/Range.h" +#include #include "SheetTableView.h" #include "LineEdit.h" #include "PropertiesDialog.h" using namespace SpreadsheetGui; using namespace Spreadsheet; +using namespace App; void SheetViewHeader::mouseReleaseEvent(QMouseEvent *event) { @@ -236,7 +237,7 @@ SheetTableView::~SheetTableView() } -void SheetTableView::updateCellSpan(Spreadsheet::CellAddress address) +void SheetTableView::updateCellSpan(CellAddress address) { int rows, cols; diff --git a/src/Mod/Spreadsheet/Gui/SheetTableView.h b/src/Mod/Spreadsheet/Gui/SheetTableView.h index 0eb54f5509e0..d55210dbe671 100644 --- a/src/Mod/Spreadsheet/Gui/SheetTableView.h +++ b/src/Mod/Spreadsheet/Gui/SheetTableView.h @@ -53,10 +53,10 @@ class SheetTableView : public QTableView void edit(const QModelIndex &index); void setSheet(Spreadsheet::Sheet *_sheet); - std::vector selectedRanges() const; + std::vector selectedRanges() const; protected Q_SLOTS: void commitData(QWidget *editor); - void updateCellSpan(Spreadsheet::CellAddress address); + void updateCellSpan(App::CellAddress address); void insertRows(); void removeRows(); void insertColumns(); diff --git a/src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp b/src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp index 218200277416..10c349e1bc33 100644 --- a/src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp +++ b/src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp @@ -37,9 +37,8 @@ #include "SpreadsheetView.h" #include "SpreadsheetDelegate.h" -#include #include -#include +#include #include #include #include @@ -57,6 +56,7 @@ using namespace SpreadsheetGui; using namespace Spreadsheet; using namespace Gui; +using namespace App; /* TRANSLATOR SpreadsheetGui::SheetView */ @@ -120,7 +120,7 @@ SheetView::SheetView(Gui::Document *pcDocument, App::DocumentObject *docObj, QWi SheetView::~SheetView() { - Application::Instance->detachView(this); + Gui::Application::Instance->detachView(this); //delete delegate; } diff --git a/src/Mod/Spreadsheet/Gui/SpreadsheetView.h b/src/Mod/Spreadsheet/Gui/SpreadsheetView.h index e8d58166908f..cadb4350b175 100644 --- a/src/Mod/Spreadsheet/Gui/SpreadsheetView.h +++ b/src/Mod/Spreadsheet/Gui/SpreadsheetView.h @@ -69,7 +69,7 @@ class SpreadsheetGuiExport SheetView : public Gui::MDIView Spreadsheet::Sheet * getSheet() { return sheet; } - std::vector selectedRanges() const; + std::vector selectedRanges() const; QModelIndexList selectedIndexes() const; diff --git a/src/Mod/Spreadsheet/Gui/ViewProviderSpreadsheet.cpp b/src/Mod/Spreadsheet/Gui/ViewProviderSpreadsheet.cpp index 11912ced9159..73e26cfde0e3 100644 --- a/src/Mod/Spreadsheet/Gui/ViewProviderSpreadsheet.cpp +++ b/src/Mod/Spreadsheet/Gui/ViewProviderSpreadsheet.cpp @@ -36,7 +36,7 @@ #include "SpreadsheetView.h" #include -#include +#include #include #include #include @@ -49,6 +49,7 @@ using namespace Base; using namespace Gui; +using namespace App; using namespace SpreadsheetGui; using namespace Spreadsheet; diff --git a/src/Mod/Spreadsheet/Gui/Workbench.cpp b/src/Mod/Spreadsheet/Gui/Workbench.cpp index 00e0b569bc08..fe455c6ee76e 100644 --- a/src/Mod/Spreadsheet/Gui/Workbench.cpp +++ b/src/Mod/Spreadsheet/Gui/Workbench.cpp @@ -37,10 +37,11 @@ #include #include "qtcolorpicker.h" #include "Mod/Spreadsheet/App/Sheet.h" -#include "Mod/Spreadsheet/App/Range.h" +#include #include "Mod/Spreadsheet/Gui/SpreadsheetView.h" using namespace Base; +using namespace App; using namespace SpreadsheetGui; using namespace Spreadsheet;