From b706bf73a5e6f2adc69932225882176a64fbcc53 Mon Sep 17 00:00:00 2001 From: jriegel Date: Fri, 29 Nov 2013 18:24:17 +0100 Subject: [PATCH 1/5] Add limits to the InputField --- src/Base/Quantity.cpp | 6 ------ src/Base/Quantity.h | 7 +++++++ src/Gui/InputField.cpp | 20 ++++++++++---------- src/Gui/InputField.h | 4 ++++ 4 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/Base/Quantity.cpp b/src/Base/Quantity.cpp index 97073d44ef..8d293a06ec 100644 --- a/src/Base/Quantity.cpp +++ b/src/Base/Quantity.cpp @@ -39,12 +39,6 @@ # pragma warning(disable : 4335) // disable MAC file format warning on VC #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 using namespace Base; diff --git a/src/Base/Quantity.h b/src/Base/Quantity.h index c64d2f74b1..e965215cd2 100644 --- a/src/Base/Quantity.h +++ b/src/Base/Quantity.h @@ -27,6 +27,13 @@ #include "Unit.h" #include +#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 + namespace Base { /** diff --git a/src/Gui/InputField.cpp b/src/Gui/InputField.cpp index 3a106b7cdc..588ce4820b 100644 --- a/src/Gui/InputField.cpp +++ b/src/Gui/InputField.cpp @@ -40,7 +40,7 @@ using namespace Base; // -------------------------------------------------------------------- InputField::InputField ( QWidget * parent ) - : QLineEdit(parent) + : QLineEdit(parent), StepSize(1.0), Maximum(DOUBLE_MAX),Minimum(-DOUBLE_MAX) { this->setContextMenuPolicy(Qt::DefaultContextMenu); @@ -149,37 +149,37 @@ void InputField::setUnit(const Base::Unit& unit) /// get the value of the singleStep property double InputField::singleStep(void)const { - return 0.0; + return StepSize; } /// set the value of the singleStep property -void InputField::setSingleStep(double) +void InputField::setSingleStep(double s) { - + StepSize = s; } /// get the value of the maximum property double InputField::maximum(void)const { - return 0.0; + return Maximum; } /// set the value of the maximum property -void InputField::setMaximum(double) +void InputField::setMaximum(double m) { - + Maximum = m; } /// get the value of the minimum property double InputField::minimum(void)const { - return 0.0; + return Minimum; } /// set the value of the minimum property -void InputField::setMinimum(double) +void InputField::setMinimum(double m) { - + Minimum = m; } diff --git a/src/Gui/InputField.h b/src/Gui/InputField.h index f0274028f3..8ac314a6eb 100644 --- a/src/Gui/InputField.h +++ b/src/Gui/InputField.h @@ -128,6 +128,10 @@ private: Base::Quantity actQuantity; Base::Unit actUnit; + + double Maximum; + double Minimum; + double StepSize; }; From f2ebb0813e51a0de443e2acc23387f40cf82165c Mon Sep 17 00:00:00 2001 From: jmaustpc Date: Mon, 25 Nov 2013 18:20:25 +1100 Subject: [PATCH 2/5] remove path error from 18 svg icons There was an extra path with no line or fill colour in these 18 icons. In some svg applications displayed this as a square in the top righ corner of the icon. --- src/Gui/Icons/Document.svg | 13 +++---------- src/Gui/Icons/SpNav-PanLR.svg | 15 ++++----------- src/Gui/Icons/SpNav-PanUD.svg | 15 ++++----------- src/Gui/Icons/SpNav-Roll.svg | 15 ++++----------- src/Gui/Icons/SpNav-Spin.svg | 11 ++--------- src/Gui/Icons/SpNav-Tilt.svg | 13 +++---------- src/Gui/Icons/SpNav-Zoom.svg | 21 +++++++-------------- src/Gui/Icons/add.svg | 23 ++++++++--------------- src/Gui/Icons/breakpoint.svg | 17 +++++------------ src/Gui/Icons/bulb.svg | 25 +++++++++---------------- src/Gui/Icons/button_down.svg | 13 +++---------- src/Gui/Icons/button_left.svg | 13 +++---------- src/Gui/Icons/button_right.svg | 13 +++---------- src/Gui/Icons/button_up.svg | 13 +++---------- src/Gui/Icons/debug-marker.svg | 13 +++---------- src/Gui/Icons/delete.svg | 11 ++--------- src/Gui/Icons/edit_remove.svg | 13 +++---------- src/Gui/Icons/mouse_pointer.svg | 13 +++---------- 18 files changed, 72 insertions(+), 198 deletions(-) diff --git a/src/Gui/Icons/Document.svg b/src/Gui/Icons/Document.svg index b5f1d7f24c..28cc05918a 100644 --- a/src/Gui/Icons/Document.svg +++ b/src/Gui/Icons/Document.svg @@ -545,8 +545,8 @@ guidetolerance="1px" stroke="#729fcf" inkscape:window-width="1280" - inkscape:window-height="964" - inkscape:window-x="-2" + inkscape:window-height="1004" + inkscape:window-x="1278" inkscape:window-y="-3" showborder="true" inkscape:showpageshadow="false" @@ -647,7 +647,7 @@ image/svg+xml - + Lapo Calamandrei @@ -695,13 +695,6 @@ inkscape:r_cx="true" inkscape:r_cy="true" transform="translate(0,16)"> - image/svg+xml - + Lapo Calamandrei @@ -705,13 +705,6 @@ inkscape:r_cx="true" inkscape:r_cy="true" transform="translate(0,16)"> - image/svg+xml - + Lapo Calamandrei @@ -701,13 +701,6 @@ id="path4222-5" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccc" /> - image/svg+xml - + Lapo Calamandrei @@ -695,13 +695,6 @@ inkscape:r_cx="true" inkscape:r_cy="true" transform="translate(0,16)"> - - image/svg+xml - + Lapo Calamandrei @@ -695,13 +695,6 @@ inkscape:r_cx="true" inkscape:r_cy="true" transform="translate(0,16)"> - image/svg+xml - + Lapo Calamandrei @@ -702,13 +702,6 @@ d="m 36.083267,30.538509 -7.032696,-0.03137 0.02385,4.684398 -4.218964,0.146053 7.829105,7.842237 7.795073,-7.632419 -4.220336,-0.164137 z" style="fill:#6dff00;fill-opacity:0.99215686;stroke:#31d900;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" inkscape:transform-center-y="-2.3443223" /> - image/svg+xml - + Lapo Calamandrei @@ -652,13 +652,6 @@ inkscape:r_cx="true" inkscape:r_cy="true" transform="translate(0,16)"> - diff --git a/src/Gui/Icons/breakpoint.svg b/src/Gui/Icons/breakpoint.svg index 1b05573f40..01c73ebe07 100644 --- a/src/Gui/Icons/breakpoint.svg +++ b/src/Gui/Icons/breakpoint.svg @@ -478,9 +478,9 @@ borderopacity="0.19607843" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="6.3984375" - inkscape:cx="21.496455" - inkscape:cy="12.062993" + inkscape:zoom="13" + inkscape:cx="32" + inkscape:cy="32" inkscape:current-layer="layer1" showgrid="false" inkscape:grid-bbox="true" @@ -492,8 +492,8 @@ guidetolerance="1px" stroke="#729fcf" inkscape:window-width="1280" - inkscape:window-height="964" - inkscape:window-x="-2" + inkscape:window-height="1004" + inkscape:window-x="1278" inkscape:window-y="-3" showborder="true" inkscape:showpageshadow="false" @@ -642,13 +642,6 @@ inkscape:r_cx="true" inkscape:r_cy="true" transform="translate(0,16)"> - image/svg+xml - + Lapo Calamandrei @@ -741,13 +741,6 @@ inkscape:r_cx="true" inkscape:r_cy="true" transform="translate(0,16)"> - image/svg+xml - + Lapo Calamandrei @@ -662,13 +662,6 @@ inkscape:r_cx="true" inkscape:r_cy="true" transform="translate(0,16)"> - image/svg+xml - + Lapo Calamandrei @@ -652,13 +652,6 @@ inkscape:r_cx="true" inkscape:r_cy="true" transform="translate(0,16)"> - image/svg+xml - + Lapo Calamandrei @@ -652,13 +652,6 @@ inkscape:r_cx="true" inkscape:r_cy="true" transform="translate(0,16)"> - image/svg+xml - + Lapo Calamandrei @@ -652,13 +652,6 @@ inkscape:r_cx="true" inkscape:r_cy="true" transform="translate(0,16)"> - - - image/svg+xml - + Lapo Calamandrei @@ -695,13 +695,6 @@ inkscape:r_cx="true" inkscape:r_cy="true" transform="translate(0,16)"> - - From ae3c1704c98040b9f934053ebc68282c269eb3ae Mon Sep 17 00:00:00 2001 From: jriegel Date: Fri, 29 Nov 2013 18:43:11 +0100 Subject: [PATCH 3/5] Using return to write the logBook in UnitsCalculator --- src/Gui/DlgUnitsCalculatorImp.cpp | 6 ++++++ src/Gui/DlgUnitsCalculatorImp.h | 2 ++ 2 files changed, 8 insertions(+) diff --git a/src/Gui/DlgUnitsCalculatorImp.cpp b/src/Gui/DlgUnitsCalculatorImp.cpp index 3f16158e0a..7cd7389caa 100644 --- a/src/Gui/DlgUnitsCalculatorImp.cpp +++ b/src/Gui/DlgUnitsCalculatorImp.cpp @@ -48,7 +48,9 @@ DlgUnitsCalculator::DlgUnitsCalculator( QWidget* parent, Qt::WFlags fl ) this->setAttribute(Qt::WA_DeleteOnClose); connect(this->ValueInput, SIGNAL(valueChanged(Base::Quantity)), this, SLOT(valueChanged(Base::Quantity))); + connect(this->ValueInput, SIGNAL(returnPressed () ), this, SLOT(returnPressed())); connect(this->UnitInput, SIGNAL(valueChanged(Base::Quantity)), this, SLOT(unitValueChanged(Base::Quantity))); + connect(this->UnitInput, SIGNAL(returnPressed()), this, SLOT(returnPressed())); connect(this->pushButton_Help, SIGNAL(clicked()), this, SLOT(help())); connect(this->pushButton_Close, SIGNAL(clicked()), this, SLOT(accept())); @@ -131,6 +133,10 @@ void DlgUnitsCalculator::help(void) //TODO: call help page Std_UnitsCalculator } +void DlgUnitsCalculator::returnPressed(void) +{ + this->textEdit->append(this->ValueInput->text() + QString::fromAscii(" = ") + this->ValueOutput->text()); +} diff --git a/src/Gui/DlgUnitsCalculatorImp.h b/src/Gui/DlgUnitsCalculatorImp.h index fbe3cfe93e..70090bd8c6 100644 --- a/src/Gui/DlgUnitsCalculatorImp.h +++ b/src/Gui/DlgUnitsCalculatorImp.h @@ -51,6 +51,7 @@ protected Q_SLOTS: void copy(void); void help(void); + void returnPressed(void); void parseError(const QString& errorText); @@ -58,6 +59,7 @@ private: Base::Quantity actValue; Base::Quantity actUnit; + }; } // namespace Dialog From 68f3a1fda4e40dd0d35ed730f4f1058edf03d00d Mon Sep 17 00:00:00 2001 From: jriegel Date: Sat, 30 Nov 2013 17:57:55 +0100 Subject: [PATCH 4/5] Shifting standard unit definitions --- src/Base/Quantity.cpp | 72 ++++++ src/Base/Quantity.h | 73 ++++++ src/Base/QuantityLexer.c | 465 ++++++++++++++++++++------------------ src/Base/QuantityParser.l | 128 ++++++----- src/Base/Unit.h | 2 +- 5 files changed, 464 insertions(+), 276 deletions(-) diff --git a/src/Base/Quantity.cpp b/src/Base/Quantity.cpp index 8d293a06ec..c7651efe69 100644 --- a/src/Base/Quantity.cpp +++ b/src/Base/Quantity.cpp @@ -144,6 +144,78 @@ void Quantity::setInvalid(void) _Value = DOUBLE_MIN ; } +// === Predefined types ===================================================== + +Quantity Quantity::NanoMeter (1.0e-6 ,Unit(1)); +Quantity Quantity::MicroMeter (1.0e-3 ,Unit(1)); +Quantity Quantity::MilliMeter (1.0 ,Unit(1)); +Quantity Quantity::CentiMeter (10.0 ,Unit(1)); +Quantity Quantity::DeciMeter (100.0 ,Unit(1)); +Quantity Quantity::Meter (1.0e3 ,Unit(1)); +Quantity Quantity::KiloMeter (1.0e6 ,Unit(1)); + +Quantity Quantity::Liter (1000000.0 ,Unit(3)); + +Quantity Quantity::MicroGram (1.0e-9 ,Unit(0,1)); +Quantity Quantity::MilliGram (1.0e-6 ,Unit(0,1)); +Quantity Quantity::Gram (1.0e-3 ,Unit(0,1)); +Quantity Quantity::KiloGram (1.0 ,Unit(0,1)); +Quantity Quantity::Ton (1.0e3 ,Unit(0,1)); + +Quantity Quantity::Second (1.0 ,Unit(0,0,1)); +Quantity Quantity::Minut (60.0 ,Unit(0,0,1)); +Quantity Quantity::Hour (3600.0 ,Unit(0,0,1)); + +Quantity Quantity::Ampere (1.0 ,Unit(0,0,0,1)); +Quantity Quantity::MilliAmpere (0.001 ,Unit(0,0,0,1)); +Quantity Quantity::KiloAmpere (1000.0 ,Unit(0,0,0,1)); +Quantity Quantity::MegaAmpere (1.0e6 ,Unit(0,0,0,1)); + +Quantity Quantity::Kelvin (1.0 ,Unit(0,0,0,0,1)); +Quantity Quantity::MilliKelvin (0.001 ,Unit(0,0,0,0,1)); +Quantity Quantity::MicroKelvin (0.000001 ,Unit(0,0,0,0,1)); + +Quantity Quantity::Mole (1.0 ,Unit(0,0,0,0,0,1)); + +Quantity Quantity::Candela (1.0 ,Unit(0,0,0,0,0,0,1)); + +Quantity Quantity::Inch (25.4 ,Unit(1)); +Quantity Quantity::Foot (304.8 ,Unit(1)); +Quantity Quantity::Thou (0.0254 ,Unit(1)); +Quantity Quantity::Yard (914.4 ,Unit(1)); + +Quantity Quantity::Pound (0.45359237 ,Unit(0,1)); +Quantity Quantity::Ounce (0.45359237 ,Unit(0,1)); +Quantity Quantity::Stone (6.35029318 ,Unit(0,1)); +Quantity Quantity::Hundredweights (50.80234544 ,Unit(0,1)); + +Quantity Quantity::Newton (1000.0 ,Unit(1,1,-2)); // Newton (kg*m/s^2) +Quantity Quantity::KiloNewton (1e+6 ,Unit(1,1,-2)); +Quantity Quantity::MegaNewton (1e+9 ,Unit(1,1,-2)); +Quantity Quantity::MilliNewton (1.0 ,Unit(1,1,-2)); + +Quantity Quantity::Pascal (0.001 ,Unit(-1,1,-2)); // Pascal (kg/m*s^2 or N/m^2) +Quantity Quantity::KiloPascal (1.00 ,Unit(-1,1,-2)); +Quantity Quantity::MegaPascal (1000.0 ,Unit(-1,1,-2)); +Quantity Quantity::GigaPascal (1e+6 ,Unit(-1,1,-2)); + +Quantity Quantity::PSI (0.145038 ,Unit(-1,1,-2)); // pounds/in^2 + +Quantity Quantity::Watt (1e+6 ,Unit(2,1,-3)); // Watt (kg*m^2/s^3) +Quantity Quantity::VoltAmpere (1e+6 ,Unit(2,1,-3)); // VoltAmpere (kg*m^2/s^3) + +Quantity Quantity::Joul (1e+6 ,Unit(2,1,-2)); // Joule (kg*m^2/s^2) +Quantity Quantity::NewtonMeter (1e+6 ,Unit(2,1,-2)); // Joule (kg*m^2/s^2) +Quantity Quantity::VoltAmpereSecond (1e+6 ,Unit(2,1,-2)); // Joule (kg*m^2/s^2) +Quantity Quantity::WattSecond (1e+6 ,Unit(2,1,-2)); // Joule (kg*m^2/s^2) + +Quantity Quantity::Degree (1.0 ,Unit(0,0,0,0,0,0,0,1)); // degree (internal standard angle) +Quantity Quantity::Radian (180/M_PI ,Unit(0,0,0,0,0,0,0,1)); // radian +Quantity Quantity::Gon (360.0/400.0 ,Unit(0,0,0,0,0,0,0,1)); // gon + + + + // === Parser & Scanner stuff =============================================== // include the Scanner and the Parser for the Quantitys diff --git a/src/Base/Quantity.h b/src/Base/Quantity.h index e965215cd2..e92ab9e83e 100644 --- a/src/Base/Quantity.h +++ b/src/Base/Quantity.h @@ -83,6 +83,79 @@ public: void setInvalid(void); + /** Predefined Unit types. */ + //@{ + static Quantity NanoMeter; + static Quantity MicroMeter; + static Quantity CentiMeter; + static Quantity DeciMeter; + static Quantity Meter; + static Quantity MilliMeter; + static Quantity KiloMeter; + + static Quantity Liter; + + static Quantity MicroGram; + static Quantity MilliGram; + static Quantity Gram; + static Quantity KiloGram; + static Quantity Ton; + + static Quantity Second ; + static Quantity Minut ; + static Quantity Hour ; + + static Quantity Ampere ; + static Quantity MilliAmpere ; + static Quantity KiloAmpere ; + static Quantity MegaAmpere ; + + static Quantity Kelvin ; + static Quantity MilliKelvin ; + static Quantity MicroKelvin ; + + static Quantity Mole ; + + static Quantity Candela ; + + static Quantity Inch ; + static Quantity Foot ; + static Quantity Thou ; + static Quantity Yard ; + + static Quantity Pound ; + static Quantity Ounce ; + static Quantity Stone ; + static Quantity Hundredweights ; + + static Quantity Newton ; + static Quantity KiloNewton ; + static Quantity MegaNewton ; + static Quantity MilliNewton ; + + static Quantity Pascal ; + static Quantity KiloPascal ; + static Quantity MegaPascal ; + static Quantity GigaPascal ; + + static Quantity PSI ; + + static Quantity Watt ; + static Quantity VoltAmpere ; + + static Quantity Joul ; + static Quantity NewtonMeter ; + static Quantity VoltAmpereSecond; + static Quantity WattSecond ; + + static Quantity Degree ; + static Quantity Radian ; + static Quantity Gon ; + + + //@} + + protected: double _Value; Unit _Unit; diff --git a/src/Base/QuantityLexer.c b/src/Base/QuantityLexer.c index cc3939bfc0..efaceda435 100644 --- a/src/Base/QuantityLexer.c +++ b/src/Base/QuantityLexer.c @@ -361,8 +361,8 @@ static void yy_fatal_error (yyconst char msg[] ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 76 -#define YY_END_OF_BUFFER 77 +#define YY_NUM_RULES 82 +#define YY_END_OF_BUFFER 83 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -370,22 +370,23 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[126] = +static yyconst flex_int16_t yy_accept[136] = { 0, - 0, 0, 0, 0, 77, 76, 4, 5, 36, 38, - 6, 57, 23, 76, 50, 27, 76, 45, 76, 76, - 48, 1, 76, 76, 76, 59, 76, 17, 22, 76, - 76, 14, 12, 76, 76, 76, 76, 20, 19, 76, - 3, 2, 5, 56, 57, 53, 26, 51, 46, 49, - 54, 0, 0, 0, 0, 31, 10, 0, 0, 0, - 11, 0, 37, 0, 35, 25, 18, 13, 41, 0, - 24, 28, 16, 0, 9, 0, 7, 42, 58, 0, - 0, 0, 0, 0, 43, 0, 39, 29, 15, 8, - 40, 56, 0, 52, 66, 0, 0, 0, 64, 44, + 0, 0, 0, 0, 83, 82, 4, 5, 33, 35, + 6, 63, 23, 82, 82, 53, 27, 82, 42, 82, + 82, 51, 1, 82, 82, 82, 65, 82, 17, 22, + 82, 82, 14, 12, 82, 82, 82, 82, 20, 19, + 82, 3, 2, 5, 62, 63, 56, 0, 26, 44, + 0, 54, 46, 52, 57, 0, 0, 0, 0, 31, + 10, 0, 0, 0, 11, 0, 34, 0, 32, 25, + 43, 0, 18, 13, 38, 0, 24, 28, 45, 16, + 0, 9, 0, 7, 39, 64, 0, 0, 0, 0, + 0, 40, 0, 36, 29, 15, 8, 37, 62, 0, - 32, 65, 34, 68, 21, 67, 30, 70, 47, 33, - 71, 0, 73, 0, 55, 60, 61, 62, 0, 72, - 75, 74, 63, 69, 0 + 49, 48, 55, 72, 0, 0, 0, 70, 41, 58, + 71, 60, 47, 74, 21, 73, 30, 76, 50, 59, + 77, 0, 79, 0, 61, 66, 67, 68, 0, 78, + 81, 80, 69, 75, 0 } ; static yyconst flex_int32_t yy_ec[256] = @@ -397,13 +398,13 @@ static yyconst flex_int32_t yy_ec[256] = 6, 6, 7, 8, 7, 8, 6, 9, 10, 11, 12, 12, 12, 12, 12, 12, 12, 1, 1, 1, 6, 1, 1, 1, 13, 1, 14, 1, 15, 1, - 1, 1, 1, 16, 17, 1, 18, 19, 1, 20, - 1, 1, 1, 1, 1, 21, 22, 1, 1, 1, - 23, 1, 24, 6, 1, 1, 25, 26, 27, 28, + 16, 1, 1, 17, 18, 1, 19, 20, 1, 21, + 1, 1, 1, 1, 1, 22, 23, 1, 1, 1, + 24, 1, 25, 6, 1, 1, 26, 27, 28, 29, - 29, 30, 31, 32, 33, 1, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 1, 1, 44, 45, - 46, 47, 1, 1, 1, 1, 1, 1, 1, 1, + 30, 31, 32, 33, 34, 1, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 1, 1, 45, 46, + 47, 48, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -420,105 +421,109 @@ static yyconst flex_int32_t yy_ec[256] = 1, 1, 1, 1, 1 } ; -static yyconst flex_int32_t yy_meta[48] = +static yyconst flex_int32_t yy_meta[49] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1 + 1, 1, 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_int16_t yy_base[127] = +static yyconst flex_int16_t yy_base[137] = { 0, - 0, 0, 45, 46, 167, 168, 168, 163, 168, 168, - 168, 46, 168, 144, 168, 168, 151, 127, 137, 148, - 118, 168, 25, 35, 24, 114, 120, 119, 168, 119, - 46, 36, 59, 119, 107, 42, 128, 45, 61, 70, - 168, 168, 149, 93, 105, 168, 168, 168, 168, 109, - 168, 108, 111, 115, 122, 168, 168, 104, 102, 113, - 168, 104, 168, 105, 168, 168, 168, 168, 168, 110, - 168, 168, 168, 103, 168, 61, 168, 168, 168, 95, - 104, 84, 73, 66, 168, 63, 168, 168, 168, 168, - 168, 109, 116, 168, 168, 57, 61, 57, 168, 168, + 0, 0, 46, 47, 177, 178, 178, 173, 178, 178, + 178, 47, 178, 153, 153, 178, 178, 40, 136, 146, + 158, 127, 178, 35, 36, 37, 123, 129, 128, 178, + 128, 56, 25, 67, 128, 116, 52, 137, 48, 57, + 66, 178, 178, 159, 100, 109, 178, 135, 178, 178, + 134, 178, 178, 116, 178, 115, 118, 122, 129, 178, + 178, 111, 109, 120, 178, 111, 178, 112, 178, 178, + 178, 123, 178, 178, 178, 116, 178, 178, 178, 178, + 109, 178, 71, 178, 178, 178, 101, 111, 115, 89, + 84, 178, 78, 178, 178, 178, 178, 178, 113, 122, - 168, 168, 168, 81, 168, 168, 168, 168, 168, 168, - 51, 38, 34, 120, 124, 168, 168, 54, 55, 168, - 168, 168, 168, 168, 168, 60 + 178, 178, 178, 178, 71, 67, 64, 178, 178, 178, + 178, 178, 178, 87, 178, 178, 178, 178, 178, 178, + 63, 50, 37, 126, 130, 178, 178, 57, 57, 178, + 178, 178, 178, 178, 178, 53 } ; -static yyconst flex_int16_t yy_def[127] = +static yyconst flex_int16_t yy_def[137] = { 0, - 125, 1, 126, 126, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 135, 1, 136, 136, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 0, 125 + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 0, 135 } ; -static yyconst flex_int16_t yy_nxt[216] = +static yyconst flex_int16_t yy_nxt[227] = { 0, 6, 7, 8, 9, 10, 11, 11, 6, 12, 12, 12, 12, 13, 14, 6, 15, 16, 17, 18, 19, - 20, 21, 22, 6, 23, 6, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 6, - 37, 38, 39, 6, 6, 40, 6, 6, 6, 44, - 52, 53, 60, 44, 45, 45, 45, 45, 66, 61, - 41, 69, 56, 124, 123, 122, 54, 55, 42, 42, - 57, 71, 58, 70, 79, 72, 67, 83, 59, 80, - 121, 68, 120, 81, 84, 86, 88, 85, 106, 73, - 119, 74, 87, 118, 75, 107, 76, 117, 116, 113, + 20, 21, 22, 23, 6, 24, 6, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 6, 38, 39, 40, 6, 6, 41, 6, 6, 6, + 45, 75, 49, 42, 45, 46, 46, 46, 46, 50, + 51, 56, 57, 76, 60, 134, 64, 133, 70, 132, + 43, 43, 61, 65, 62, 71, 72, 58, 59, 77, + 63, 90, 93, 95, 78, 86, 79, 73, 91, 94, + 87, 92, 74, 131, 88, 130, 129, 96, 80, 116, - 89, 92, 92, 92, 92, 90, 112, 93, 44, 111, - 91, 110, 44, 45, 45, 45, 45, 92, 92, 92, - 92, 93, 114, 93, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 109, 93, 108, 105, - 104, 103, 102, 101, 100, 99, 98, 97, 96, 95, - 94, 43, 82, 78, 77, 65, 64, 63, 62, 51, - 50, 49, 48, 47, 46, 43, 125, 5, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 81, 128, 97, 82, 127, 83, 117, 98, 99, 99, + 99, 99, 45, 126, 100, 123, 45, 46, 46, 46, + 46, 99, 99, 99, 99, 122, 121, 100, 124, 100, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 100, 120, 119, 118, 115, 114, 113, 112, + 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, + 101, 44, 89, 85, 84, 69, 68, 67, 66, 55, + 54, 53, 52, 48, 47, 44, 135, 5, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125 + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135 } ; -static yyconst flex_int16_t yy_chk[216] = +static yyconst flex_int16_t yy_chk[227] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 3, 4, 12, - 23, 23, 25, 12, 12, 12, 12, 12, 31, 25, - 126, 32, 24, 119, 118, 113, 23, 23, 3, 4, - 24, 33, 24, 32, 36, 33, 31, 38, 24, 36, - 112, 31, 111, 36, 38, 39, 40, 38, 76, 33, - 104, 33, 39, 98, 33, 76, 33, 97, 96, 86, + 1, 1, 1, 1, 1, 1, 1, 1, 3, 4, + 12, 33, 18, 136, 12, 12, 12, 12, 12, 18, + 18, 24, 24, 33, 25, 129, 26, 128, 32, 123, + 3, 4, 25, 26, 25, 32, 32, 24, 24, 34, + 25, 39, 40, 41, 34, 37, 34, 32, 39, 40, + 37, 39, 32, 122, 37, 121, 114, 41, 34, 83, - 40, 44, 44, 44, 44, 40, 84, 44, 45, 83, - 40, 82, 45, 45, 45, 45, 45, 92, 92, 92, - 92, 44, 93, 92, 93, 93, 93, 93, 114, 114, - 114, 114, 115, 115, 115, 115, 81, 92, 80, 74, - 70, 64, 62, 60, 59, 58, 55, 54, 53, 52, - 50, 43, 37, 35, 34, 30, 28, 27, 26, 21, - 20, 19, 18, 17, 14, 8, 5, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 34, 107, 41, 34, 106, 34, 83, 41, 45, 45, + 45, 45, 46, 105, 45, 93, 46, 46, 46, 46, + 46, 99, 99, 99, 99, 91, 90, 99, 100, 45, + 100, 100, 100, 100, 124, 124, 124, 124, 125, 125, + 125, 125, 99, 89, 88, 87, 81, 76, 72, 68, + 66, 64, 63, 62, 59, 58, 57, 56, 54, 51, + 48, 44, 38, 36, 35, 31, 29, 28, 27, 22, + 21, 20, 19, 15, 14, 8, 5, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125 + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135 } ; static yy_state_type yy_last_accepting_state; @@ -549,7 +554,7 @@ char *yytext; /* the manual says "somewhat more optimized" */ /* no support for include files is planned */ -#line 553 "QuantityLexer.c" +#line 558 "QuantityLexer.c" #define INITIAL 0 #define C_COMMENT 1 @@ -733,7 +738,7 @@ YY_DECL #line 28 "QuantityParser.l" -#line 737 "QuantityLexer.c" +#line 742 "QuantityLexer.c" if ( !(yy_init) ) { @@ -786,13 +791,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 126 ) + if ( yy_current_state >= 136 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_current_state != 125 ); + while ( yy_current_state != 135 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); @@ -846,354 +851,384 @@ YY_RULE_SETUP case 7: YY_RULE_SETUP #line 40 "QuantityParser.l" -yylval = Quantity(1.0e-6 ,Unit(1)); return UNIT; // nano meter +yylval = Quantity::NanoMeter; return UNIT; // nano meter YY_BREAK case 8: YY_RULE_SETUP #line 41 "QuantityParser.l" -yylval = Quantity(1.0e-3 ,Unit(1)); return UNIT; // micro meter +yylval = Quantity::MicroMeter; return UNIT; // micro meter YY_BREAK case 9: YY_RULE_SETUP #line 42 "QuantityParser.l" -yylval = Quantity(1.0 ,Unit(1)); return UNIT; // milli meter +yylval = Quantity::MilliMeter; return UNIT; // milli meter (internal standard length) YY_BREAK case 10: YY_RULE_SETUP #line 43 "QuantityParser.l" -yylval = Quantity(10.0 ,Unit(1)); return UNIT; // centi meter +yylval = Quantity::CentiMeter; return UNIT; // centi meter YY_BREAK case 11: YY_RULE_SETUP #line 44 "QuantityParser.l" -yylval = Quantity(100.0 ,Unit(1)); return UNIT; // deci meter +yylval = Quantity::DeciMeter; return UNIT; // deci meter YY_BREAK case 12: YY_RULE_SETUP #line 45 "QuantityParser.l" -yylval = Quantity(1.0e3 ,Unit(1)); return UNIT; // meter +yylval = Quantity::Meter; return UNIT; // meter YY_BREAK case 13: YY_RULE_SETUP #line 46 "QuantityParser.l" -yylval = Quantity(1.0e6 ,Unit(1)); return UNIT; // kilo meter +yylval = Quantity::KiloMeter; return UNIT; // kilo meter YY_BREAK case 14: YY_RULE_SETUP -#line 47 "QuantityParser.l" -yylval = Quantity(1000000.0 ,Unit(3)); return UNIT; // Liter dm^3 +#line 48 "QuantityParser.l" +yylval = Quantity::Liter; return UNIT; // Liter dm^3 YY_BREAK case 15: YY_RULE_SETUP -#line 49 "QuantityParser.l" -yylval = Quantity(1.0e-9 ,Unit(0,1)); return UNIT; // milli gram +#line 50 "QuantityParser.l" +yylval = Quantity::MicroGram; return UNIT; // micro gram YY_BREAK case 16: YY_RULE_SETUP -#line 50 "QuantityParser.l" -yylval = Quantity(1.0e-6 ,Unit(0,1)); return UNIT; // milli gram +#line 51 "QuantityParser.l" +yylval = Quantity::MilliGram; return UNIT; // milli gram YY_BREAK case 17: YY_RULE_SETUP -#line 51 "QuantityParser.l" -yylval = Quantity(1.0e-3 ,Unit(0,1)); return UNIT; // gram +#line 52 "QuantityParser.l" +yylval = Quantity::Gram; return UNIT; // gram YY_BREAK case 18: YY_RULE_SETUP -#line 52 "QuantityParser.l" -yylval = Quantity(1.0 ,Unit(0,1)); return UNIT; // kilo gram (internal standard for mass) +#line 53 "QuantityParser.l" +yylval = Quantity::KiloGram; return UNIT; // kilo gram (internal standard for mass) YY_BREAK case 19: YY_RULE_SETUP -#line 53 "QuantityParser.l" -yylval = Quantity(1000.0 ,Unit(0,1)); return UNIT; // ton +#line 54 "QuantityParser.l" +yylval = Quantity::Ton; return UNIT; // ton YY_BREAK case 20: YY_RULE_SETUP -#line 55 "QuantityParser.l" -yylval = Quantity(1.0 ,Unit(0,0,1)); return UNIT; // second (internal standard time) +#line 56 "QuantityParser.l" +yylval = Quantity::Second; return UNIT; // second (internal standard time) YY_BREAK case 21: YY_RULE_SETUP -#line 56 "QuantityParser.l" -yylval = Quantity(60.0 ,Unit(0,0,1)); return UNIT; // minute +#line 57 "QuantityParser.l" +yylval = Quantity::Minut; return UNIT; // minute YY_BREAK case 22: YY_RULE_SETUP -#line 57 "QuantityParser.l" -yylval = Quantity(3600.0 ,Unit(0,0,1)); return UNIT; // hour +#line 58 "QuantityParser.l" +yylval = Quantity::Hour; return UNIT; // hour YY_BREAK case 23: YY_RULE_SETUP -#line 59 "QuantityParser.l" -yylval = Quantity(1.0 ,Unit(0,0,0,1)); return UNIT; // Ampere (internal standard electric current) +#line 60 "QuantityParser.l" +yylval = Quantity::Ampere; return UNIT; // Ampere (internal standard electric current) YY_BREAK case 24: YY_RULE_SETUP -#line 60 "QuantityParser.l" -yylval = Quantity(0.001 ,Unit(0,0,0,1)); return UNIT; // milli Ampere +#line 61 "QuantityParser.l" +yylval = Quantity::MilliAmpere; return UNIT; // milli Ampere YY_BREAK case 25: YY_RULE_SETUP -#line 61 "QuantityParser.l" -yylval = Quantity(1000.0 ,Unit(0,0,0,1)); return UNIT; // kilo Ampere +#line 62 "QuantityParser.l" +yylval = Quantity::KiloAmpere; return UNIT; // kilo Ampere YY_BREAK case 26: YY_RULE_SETUP -#line 62 "QuantityParser.l" -yylval = Quantity(1.0e6 ,Unit(0,0,0,1)); return UNIT; // Mega Ampere +#line 63 "QuantityParser.l" +yylval = Quantity::MegaAmpere; return UNIT; // Mega Ampere YY_BREAK case 27: YY_RULE_SETUP -#line 64 "QuantityParser.l" -yylval = Quantity(1.0 ,Unit(0,0,0,0,1)); return UNIT; // Kelvin (internal standard thermodynamic temperature) +#line 65 "QuantityParser.l" +yylval = Quantity::Kelvin; return UNIT; // Kelvin (internal standard thermodynamic temperature) YY_BREAK case 28: YY_RULE_SETUP -#line 65 "QuantityParser.l" -yylval = Quantity(0.001 ,Unit(0,0,0,0,1)); return UNIT; // Kelvin +#line 66 "QuantityParser.l" +yylval = Quantity::MilliKelvin; return UNIT; // Kelvin YY_BREAK case 29: YY_RULE_SETUP -#line 66 "QuantityParser.l" -yylval = Quantity(0.000001 ,Unit(0,0,0,0,1)); return UNIT; // Kelvin +#line 67 "QuantityParser.l" +yylval = Quantity::MicroKelvin; return UNIT; // Kelvin YY_BREAK case 30: YY_RULE_SETUP -#line 68 "QuantityParser.l" -yylval = Quantity(1.0 ,Unit(0,0,0,0,0,1)); return UNIT; // Mole (internal standard amount of substance) +#line 69 "QuantityParser.l" +yylval = Quantity::Mole; return UNIT; // Mole (internal standard amount of substance) YY_BREAK case 31: YY_RULE_SETUP -#line 70 "QuantityParser.l" -yylval = Quantity(1.0 ,Unit(0,0,0,0,0,0,1)); return UNIT; // Candela (internal standard luminous intensity) +#line 71 "QuantityParser.l" +yylval = Quantity::Candela; return UNIT; // Candela (internal standard luminous intensity) YY_BREAK case 32: YY_RULE_SETUP -#line 72 "QuantityParser.l" -yylval = Quantity(1.0 ,Unit(0,0,0,0,0,0,0,1)); return UNIT; // degree (internal standard angle) +#line 73 "QuantityParser.l" +yylval = Quantity::Inch; return UNIT; // inch YY_BREAK case 33: YY_RULE_SETUP -#line 73 "QuantityParser.l" -yylval = Quantity(180/M_PI ,Unit(0,0,0,0,0,0,0,1)); return UNIT; // radian +#line 74 "QuantityParser.l" +yylval = Quantity::Inch; return UNIT; // inch YY_BREAK case 34: YY_RULE_SETUP -#line 74 "QuantityParser.l" -yylval = Quantity(360.0/400.0 ,Unit(0,0,0,0,0,0,0,1)); return UNIT; // gon +#line 75 "QuantityParser.l" +yylval = Quantity::Foot; return UNIT; // foot YY_BREAK case 35: YY_RULE_SETUP #line 76 "QuantityParser.l" -yylval = Quantity(25.4 ,Unit(1)); return UNIT; // inch +yylval = Quantity::Foot; return UNIT; // foot YY_BREAK case 36: YY_RULE_SETUP #line 77 "QuantityParser.l" -yylval = Quantity(25.4 ,Unit(1)); return UNIT; // inch +yylval = Quantity::Thou; return UNIT; // thou YY_BREAK case 37: YY_RULE_SETUP #line 78 "QuantityParser.l" -yylval = Quantity(304.8 ,Unit(1)); return UNIT; // foot +yylval = Quantity::Yard; return UNIT; // yard YY_BREAK case 38: YY_RULE_SETUP -#line 79 "QuantityParser.l" -yylval = Quantity(304.8 ,Unit(1)); return UNIT; // foot +#line 81 "QuantityParser.l" +yylval = Quantity::Pound; return UNIT; // pound YY_BREAK case 39: YY_RULE_SETUP -#line 80 "QuantityParser.l" -yylval = Quantity(0.0254 ,Unit(1)); return UNIT; // thou +#line 82 "QuantityParser.l" +yylval = Quantity::Ounce; return UNIT; // ounce YY_BREAK case 40: YY_RULE_SETUP -#line 81 "QuantityParser.l" -yylval = Quantity(914.4 ,Unit(1)); return UNIT; // yard +#line 83 "QuantityParser.l" +yylval = Quantity::Stone; return UNIT; // Stone YY_BREAK case 41: YY_RULE_SETUP #line 84 "QuantityParser.l" -yylval = Quantity(0.45359237 ,Unit(0,1)); return UNIT; // pound +yylval = Quantity::Hundredweights; return UNIT; // hundredweights YY_BREAK case 42: YY_RULE_SETUP -#line 85 "QuantityParser.l" -yylval = Quantity(0.45359237 ,Unit(0,1)); return UNIT; // ounce +#line 86 "QuantityParser.l" +yylval = Quantity::Newton; return UNIT; // Newton (kg*m/s^2) YY_BREAK case 43: YY_RULE_SETUP -#line 86 "QuantityParser.l" -yylval = Quantity(6.35029318 ,Unit(0,1)); return UNIT; // Stone +#line 87 "QuantityParser.l" +yylval = Quantity::KiloNewton; return UNIT; // Newton YY_BREAK case 44: YY_RULE_SETUP -#line 87 "QuantityParser.l" -yylval = Quantity(50.80234544 ,Unit(0,1)); return UNIT; // hundredweights +#line 88 "QuantityParser.l" +yylval = Quantity::MegaNewton; return UNIT; // Newton YY_BREAK case 45: YY_RULE_SETUP #line 89 "QuantityParser.l" -yylval = Quantity(1000.0 ,Unit(1,1,-2)); return UNIT; // Newton (kg*m/s^2) +yylval = Quantity::MilliNewton; return UNIT; // Newton YY_BREAK case 46: YY_RULE_SETUP #line 91 "QuantityParser.l" -yylval = Quantity(0.001 ,Unit(-1,1,-2)); return UNIT; // Pascal (kg/m*s^2) +yylval = Quantity::Pascal; return UNIT; // Pascal (kg/m*s^2 or N/m^2) YY_BREAK case 47: YY_RULE_SETUP #line 92 "QuantityParser.l" -yylval = Quantity(0.145038 ,Unit(-1,1,-2)); return UNIT; // pounds/in^2 +yylval = Quantity::KiloPascal; return UNIT; // Pascal YY_BREAK case 48: YY_RULE_SETUP -#line 94 "QuantityParser.l" -yylval = Quantity(1e+6 ,Unit(2,1,-3)); return UNIT; // Watt (kg*m^2/s^3) +#line 93 "QuantityParser.l" +yylval = Quantity::MegaPascal; return UNIT; // Pascal YY_BREAK case 49: YY_RULE_SETUP -#line 95 "QuantityParser.l" -yylval = Quantity(1e+6 ,Unit(2,1,-3)); return UNIT; // VoltAmpere (kg*m^2/s^3) +#line 94 "QuantityParser.l" +yylval = Quantity::GigaPascal; return UNIT; // Pascal YY_BREAK case 50: YY_RULE_SETUP -#line 97 "QuantityParser.l" -yylval = Quantity(1e+6 ,Unit(2,1,-2)); return UNIT; // Joule (kg*m^2/s^2) +#line 96 "QuantityParser.l" +yylval = Quantity::PSI; return UNIT; // pounds/in^2 YY_BREAK case 51: YY_RULE_SETUP #line 98 "QuantityParser.l" -yylval = Quantity(1e+6 ,Unit(2,1,-2)); return UNIT; // Joule (kg*m^2/s^2) +yylval = Quantity::Watt; return UNIT; // Watt (kg*m^2/s^3) YY_BREAK case 52: YY_RULE_SETUP #line 99 "QuantityParser.l" -yylval = Quantity(1e+6 ,Unit(2,1,-2)); return UNIT; // Joule (kg*m^2/s^2) +yylval = Quantity::VoltAmpere; return UNIT; // VoltAmpere (kg*m^2/s^3) YY_BREAK case 53: YY_RULE_SETUP -#line 100 "QuantityParser.l" -yylval = Quantity(1e+6 ,Unit(2,1,-2)); return UNIT; // Joule (kg*m^2/s^2) +#line 101 "QuantityParser.l" +yylval = Quantity::Joul; return UNIT; // Joule (kg*m^2/s^2) YY_BREAK case 54: YY_RULE_SETUP -#line 101 "QuantityParser.l" -yylval = Quantity(1e+6 ,Unit(2,1,-2)); return UNIT; // Joule (kg*m^2/s^2) +#line 102 "QuantityParser.l" +yylval = Quantity::NewtonMeter; return UNIT; // Joule (kg*m^2/s^2) YY_BREAK case 55: YY_RULE_SETUP #line 103 "QuantityParser.l" -{for(char* c=yytext;*c!='\0';c++)if(*c==',')*c='.'; yylval = atof( yytext ); return NUM;} +yylval = Quantity::VoltAmpereSecond; return UNIT; // Joule (kg*m^2/s^2) YY_BREAK case 56: YY_RULE_SETUP #line 104 "QuantityParser.l" -{for(char* c=yytext;*c!='\0';c++)if(*c==',')*c='.'; yylval = atof( yytext ); return NUM;} +yylval = Quantity::WattSecond; return UNIT; // Joule (kg*m^2/s^2) YY_BREAK case 57: YY_RULE_SETUP #line 105 "QuantityParser.l" -{yylval = atof( yytext ); return NUM;} +yylval = Quantity::WattSecond; return UNIT; // Joule (kg*m^2/s^2) YY_BREAK case 58: YY_RULE_SETUP #line 107 "QuantityParser.l" -{yylval = M_PI ; return NUM;} // constant pi +yylval = Quantity::Degree; return UNIT; // degree (internal standard angle) YY_BREAK case 59: YY_RULE_SETUP #line 108 "QuantityParser.l" -{yylval = M_E ; return NUM;} // constant e +yylval = Quantity::Radian; return UNIT; // radian YY_BREAK case 60: YY_RULE_SETUP -#line 110 "QuantityParser.l" -return ACOS; +#line 109 "QuantityParser.l" +yylval = Quantity::Gon; return UNIT; // gon YY_BREAK case 61: YY_RULE_SETUP #line 111 "QuantityParser.l" -return ASIN; +{for(char* c=yytext;*c!='\0';c++)if(*c==',')*c='.'; yylval = atof( yytext ); return NUM;} YY_BREAK case 62: YY_RULE_SETUP #line 112 "QuantityParser.l" -return ATAN; +{for(char* c=yytext;*c!='\0';c++)if(*c==',')*c='.'; yylval = atof( yytext ); return NUM;} YY_BREAK case 63: YY_RULE_SETUP #line 113 "QuantityParser.l" -return ATAN2; +{yylval = atof( yytext ); return NUM;} YY_BREAK case 64: YY_RULE_SETUP -#line 114 "QuantityParser.l" -return COS; +#line 115 "QuantityParser.l" +{yylval = M_PI ; return NUM;} // constant pi YY_BREAK case 65: YY_RULE_SETUP -#line 115 "QuantityParser.l" -return EXP; +#line 116 "QuantityParser.l" +{yylval = M_E ; return NUM;} // constant e YY_BREAK case 66: YY_RULE_SETUP -#line 116 "QuantityParser.l" -return ABS; +#line 118 "QuantityParser.l" +return ACOS; YY_BREAK case 67: YY_RULE_SETUP -#line 117 "QuantityParser.l" -return MOD; +#line 119 "QuantityParser.l" +return ASIN; YY_BREAK case 68: YY_RULE_SETUP -#line 118 "QuantityParser.l" -return LOG; +#line 120 "QuantityParser.l" +return ATAN; YY_BREAK case 69: YY_RULE_SETUP -#line 119 "QuantityParser.l" -return LOG10; +#line 121 "QuantityParser.l" +return ATAN2; YY_BREAK case 70: YY_RULE_SETUP -#line 120 "QuantityParser.l" -return POW; +#line 122 "QuantityParser.l" +return COS; YY_BREAK case 71: YY_RULE_SETUP -#line 121 "QuantityParser.l" -return SIN; +#line 123 "QuantityParser.l" +return EXP; YY_BREAK case 72: YY_RULE_SETUP -#line 122 "QuantityParser.l" -return SINH; +#line 124 "QuantityParser.l" +return ABS; YY_BREAK case 73: YY_RULE_SETUP -#line 123 "QuantityParser.l" -return TAN; +#line 125 "QuantityParser.l" +return MOD; YY_BREAK case 74: YY_RULE_SETUP -#line 124 "QuantityParser.l" -return TANH; +#line 126 "QuantityParser.l" +return LOG; YY_BREAK case 75: YY_RULE_SETUP -#line 125 "QuantityParser.l" -return SQRT; +#line 127 "QuantityParser.l" +return LOG10; YY_BREAK case 76: YY_RULE_SETUP -#line 127 "QuantityParser.l" +#line 128 "QuantityParser.l" +return POW; + YY_BREAK +case 77: +YY_RULE_SETUP +#line 129 "QuantityParser.l" +return SIN; + YY_BREAK +case 78: +YY_RULE_SETUP +#line 130 "QuantityParser.l" +return SINH; + YY_BREAK +case 79: +YY_RULE_SETUP +#line 131 "QuantityParser.l" +return TAN; + YY_BREAK +case 80: +YY_RULE_SETUP +#line 132 "QuantityParser.l" +return TANH; + YY_BREAK +case 81: +YY_RULE_SETUP +#line 133 "QuantityParser.l" +return SQRT; + YY_BREAK +case 82: +YY_RULE_SETUP +#line 135 "QuantityParser.l" ECHO; YY_BREAK -#line 1197 "QuantityLexer.c" +#line 1232 "QuantityLexer.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(C_COMMENT): yyterminate(); @@ -1487,7 +1522,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 126 ) + if ( yy_current_state >= 136 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -1515,11 +1550,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 126 ) + if ( yy_current_state >= 136 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 125); + yy_is_jam = (yy_current_state == 135); return yy_is_jam ? 0 : yy_current_state; } @@ -2152,4 +2187,4 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 127 "QuantityParser.l" +#line 135 "QuantityParser.l" diff --git a/src/Base/QuantityParser.l b/src/Base/QuantityParser.l index 365a8a7bb0..5fe915587f 100644 --- a/src/Base/QuantityParser.l +++ b/src/Base/QuantityParser.l @@ -37,68 +37,76 @@ ID [a-z][a-z0-9]* [-+()=/*^] { return *yytext; } -"nm" yylval = Quantity(1.0e-6 ,Unit(1)); return UNIT; // nano meter -"ym" yylval = Quantity(1.0e-3 ,Unit(1)); return UNIT; // micro meter -"mm" yylval = Quantity(1.0 ,Unit(1)); return UNIT; // milli meter -"cm" yylval = Quantity(10.0 ,Unit(1)); return UNIT; // centi meter -"dm" yylval = Quantity(100.0 ,Unit(1)); return UNIT; // deci meter -"m" yylval = Quantity(1.0e3 ,Unit(1)); return UNIT; // meter -"km" yylval = Quantity(1.0e6 ,Unit(1)); return UNIT; // kilo meter -"l" yylval = Quantity(1000000.0 ,Unit(3)); return UNIT; // Liter dm^3 + "nm" yylval = Quantity::NanoMeter; return UNIT; // nano meter + "ym" yylval = Quantity::MicroMeter; return UNIT; // micro meter + "mm" yylval = Quantity::MilliMeter; return UNIT; // milli meter (internal standard length) + "cm" yylval = Quantity::CentiMeter; return UNIT; // centi meter + "dm" yylval = Quantity::DeciMeter; return UNIT; // deci meter + "m" yylval = Quantity::Meter; return UNIT; // meter + "km" yylval = Quantity::KiloMeter; return UNIT; // kilo meter - "yg" yylval = Quantity(1.0e-9 ,Unit(0,1)); return UNIT; // milli gram - "mg" yylval = Quantity(1.0e-6 ,Unit(0,1)); return UNIT; // milli gram - "g" yylval = Quantity(1.0e-3 ,Unit(0,1)); return UNIT; // gram - "kg" yylval = Quantity(1.0 ,Unit(0,1)); return UNIT; // kilo gram (internal standard for mass) - "t" yylval = Quantity(1000.0 ,Unit(0,1)); return UNIT; // ton - - "s" yylval = Quantity(1.0 ,Unit(0,0,1)); return UNIT; // second (internal standard time) - "min" yylval = Quantity(60.0 ,Unit(0,0,1)); return UNIT; // minute - "h" yylval = Quantity(3600.0 ,Unit(0,0,1)); return UNIT; // hour - - "A" yylval = Quantity(1.0 ,Unit(0,0,0,1)); return UNIT; // Ampere (internal standard electric current) - "mA" yylval = Quantity(0.001 ,Unit(0,0,0,1)); return UNIT; // milli Ampere - "kA" yylval = Quantity(1000.0 ,Unit(0,0,0,1)); return UNIT; // kilo Ampere - "MA" yylval = Quantity(1.0e6 ,Unit(0,0,0,1)); return UNIT; // Mega Ampere - - "K" yylval = Quantity(1.0 ,Unit(0,0,0,0,1)); return UNIT; // Kelvin (internal standard thermodynamic temperature) - "mK" yylval = Quantity(0.001 ,Unit(0,0,0,0,1)); return UNIT; // Kelvin - "yK" yylval = Quantity(0.000001 ,Unit(0,0,0,0,1)); return UNIT; // Kelvin - - "mol" yylval = Quantity(1.0 ,Unit(0,0,0,0,0,1)); return UNIT; // Mole (internal standard amount of substance) - - "cd" yylval = Quantity(1.0 ,Unit(0,0,0,0,0,0,1)); return UNIT; // Candela (internal standard luminous intensity) - - "deg" yylval = Quantity(1.0 ,Unit(0,0,0,0,0,0,0,1)); return UNIT; // degree (internal standard angle) - "rad" yylval = Quantity(180/M_PI ,Unit(0,0,0,0,0,0,0,1)); return UNIT; // radian - "gon" yylval = Quantity(360.0/400.0 ,Unit(0,0,0,0,0,0,0,1)); return UNIT; // gon - - "in" yylval = Quantity(25.4 ,Unit(1)); return UNIT; // inch - "\"" yylval = Quantity(25.4 ,Unit(1)); return UNIT; // inch - "fo" yylval = Quantity(304.8 ,Unit(1)); return UNIT; // foot - "'" yylval = Quantity(304.8 ,Unit(1)); return UNIT; // foot - "th" yylval = Quantity(0.0254 ,Unit(1)); return UNIT; // thou - "yr" yylval = Quantity(914.4 ,Unit(1)); return UNIT; // yard - - - "lb" yylval = Quantity(0.45359237 ,Unit(0,1)); return UNIT; // pound - "oz" yylval = Quantity(0.45359237 ,Unit(0,1)); return UNIT; // ounce - "st" yylval = Quantity(6.35029318 ,Unit(0,1)); return UNIT; // Stone - "cwt" yylval = Quantity(50.80234544 ,Unit(0,1)); return UNIT; // hundredweights - - "N" yylval = Quantity(1000.0 ,Unit(1,1,-2)); return UNIT; // Newton (kg*m/s^2) + "l" yylval = Quantity::Liter; return UNIT; // Liter dm^3 - "Pa" yylval = Quantity(0.001 ,Unit(-1,1,-2)); return UNIT; // Pascal (kg/m*s^2) - "psi" yylval = Quantity(0.145038 ,Unit(-1,1,-2)); return UNIT; // pounds/in^2 - - "W" yylval = Quantity(1e+6 ,Unit(2,1,-3)); return UNIT; // Watt (kg*m^2/s^3) - "VA" yylval = Quantity(1e+6 ,Unit(2,1,-3)); return UNIT; // VoltAmpere (kg*m^2/s^3) - - "J" yylval = Quantity(1e+6 ,Unit(2,1,-2)); return UNIT; // Joule (kg*m^2/s^2) - "Nm" yylval = Quantity(1e+6 ,Unit(2,1,-2)); return UNIT; // Joule (kg*m^2/s^2) - "VAs" yylval = Quantity(1e+6 ,Unit(2,1,-2)); return UNIT; // Joule (kg*m^2/s^2) - "CV" yylval = Quantity(1e+6 ,Unit(2,1,-2)); return UNIT; // Joule (kg*m^2/s^2) - "Ws" yylval = Quantity(1e+6 ,Unit(2,1,-2)); return UNIT; // Joule (kg*m^2/s^2) + "yg" yylval = Quantity::MicroGram; return UNIT; // micro gram + "mg" yylval = Quantity::MilliGram; return UNIT; // milli gram + "g" yylval = Quantity::Gram; return UNIT; // gram + "kg" yylval = Quantity::KiloGram; return UNIT; // kilo gram (internal standard for mass) + "t" yylval = Quantity::Ton; return UNIT; // ton + + "s" yylval = Quantity::Second; return UNIT; // second (internal standard time) + "min" yylval = Quantity::Minut; return UNIT; // minute + "h" yylval = Quantity::Hour; return UNIT; // hour + + "A" yylval = Quantity::Ampere; return UNIT; // Ampere (internal standard electric current) + "mA" yylval = Quantity::MilliAmpere; return UNIT; // milli Ampere + "kA" yylval = Quantity::KiloAmpere; return UNIT; // kilo Ampere + "MA" yylval = Quantity::MegaAmpere; return UNIT; // Mega Ampere + + "K" yylval = Quantity::Kelvin; return UNIT; // Kelvin (internal standard thermodynamic temperature) + "mK" yylval = Quantity::MilliKelvin; return UNIT; // Kelvin + "yK" yylval = Quantity::MicroKelvin; return UNIT; // Kelvin + + "mol" yylval = Quantity::Mole; return UNIT; // Mole (internal standard amount of substance) + + "cd" yylval = Quantity::Candela; return UNIT; // Candela (internal standard luminous intensity) + + "in" yylval = Quantity::Inch; return UNIT; // inch + "\"" yylval = Quantity::Inch; return UNIT; // inch + "fo" yylval = Quantity::Foot; return UNIT; // foot + "'" yylval = Quantity::Foot; return UNIT; // foot + "th" yylval = Quantity::Thou; return UNIT; // thou + "yr" yylval = Quantity::Yard; return UNIT; // yard + + + "lb" yylval = Quantity::Pound; return UNIT; // pound + "oz" yylval = Quantity::Ounce; return UNIT; // ounce + "st" yylval = Quantity::Stone; return UNIT; // Stone + "cwt" yylval = Quantity::Hundredweights; return UNIT; // hundredweights + + "N" yylval = Quantity::Newton; return UNIT; // Newton (kg*m/s^2) + "kN" yylval = Quantity::KiloNewton; return UNIT; // Newton + "MN" yylval = Quantity::MegaNewton; return UNIT; // Newton + "mN" yylval = Quantity::MilliNewton; return UNIT; // Newton + + "Pa" yylval = Quantity::Pascal; return UNIT; // Pascal (kg/m*s^2 or N/m^2) + "kPa" yylval = Quantity::KiloPascal; return UNIT; // Pascal + "MPa" yylval = Quantity::MegaPascal; return UNIT; // Pascal + "GPa" yylval = Quantity::GigaPascal; return UNIT; // Pascal + + "psi" yylval = Quantity::PSI; return UNIT; // pounds/in^2 + + "W" yylval = Quantity::Watt; return UNIT; // Watt (kg*m^2/s^3) + "VA" yylval = Quantity::VoltAmpere; return UNIT; // VoltAmpere (kg*m^2/s^3) + + "J" yylval = Quantity::Joul; return UNIT; // Joule (kg*m^2/s^2) + "Nm" yylval = Quantity::NewtonMeter; return UNIT; // Joule (kg*m^2/s^2) + "VAs" yylval = Quantity::VoltAmpereSecond; return UNIT; // Joule (kg*m^2/s^2) + "CV" yylval = Quantity::WattSecond; return UNIT; // Joule (kg*m^2/s^2) + "Ws" yylval = Quantity::WattSecond; return UNIT; // Joule (kg*m^2/s^2) + + "deg" yylval = Quantity::Degree; return UNIT; // degree (internal standard angle) + "rad" yylval = Quantity::Radian; return UNIT; // radian + "gon" yylval = Quantity::Gon; return UNIT; // gon {DIGIT}+["."","]{DIGIT}*[eE][-+]?[0-9]+ {for(char* c=yytext;*c!='\0';c++)if(*c==',')*c='.'; yylval = atof( yytext ); return NUM;} {DIGIT}+["."","]{DIGIT}* {for(char* c=yytext;*c!='\0';c++)if(*c==',')*c='.'; yylval = atof( yytext ); return NUM;} diff --git a/src/Base/Unit.h b/src/Base/Unit.h index a011c4658a..5c72a47aca 100644 --- a/src/Base/Unit.h +++ b/src/Base/Unit.h @@ -94,7 +94,7 @@ public: static Unit ElectricCurrent; static Unit AmountOfSubstance; static Unit LuminoseIntensity; - + //@} protected: UnitSignature Sig; }; From 15ecd1ffe82c38bd107b16414dbca03f33a36a7b Mon Sep 17 00:00:00 2001 From: jriegel Date: Sat, 30 Nov 2013 21:46:36 +0100 Subject: [PATCH 5/5] Adding Unit definition to the python modul --- src/App/Application.cpp | 5 + src/App/FreeCADInit.py | 75 ++++++++++ src/Base/Quantity.cpp | 4 + src/Base/Quantity.h | 78 +++++----- src/Base/QuantityLexer.c | 283 +++++++++++++++++++------------------ src/Base/QuantityParser.l | 1 + src/Base/QuantityPy.xml | 12 +- src/Base/QuantityPyImp.cpp | 23 ++- 8 files changed, 301 insertions(+), 180 deletions(-) diff --git a/src/App/Application.cpp b/src/App/Application.cpp index 4d14f42800..bcb959a619 100644 --- a/src/App/Application.cpp +++ b/src/App/Application.cpp @@ -73,6 +73,8 @@ #include #include #include +#include +#include #include "GeoFeature.h" #include "FeatureTest.h" @@ -233,6 +235,9 @@ Application::Application(ParameterManager * /*pcSysParamMngr*/, //insert Units module PyObject* pUnitsModule = Py_InitModule3("Units", Base::UnitsApi::Methods, "The Unit API"); + Base::Interpreter().addType(&Base::QuantityPy ::Type,pUnitsModule,"Quantity"); + Base::Interpreter().addType(&Base::UnitPy ::Type,pUnitsModule,"Unit"); + Py_INCREF(pUnitsModule); PyModule_AddObject(pAppModule, "Units", pUnitsModule); diff --git a/src/App/FreeCADInit.py b/src/App/FreeCADInit.py index 9eeb633b0b..315e036b02 100644 --- a/src/App/FreeCADInit.py +++ b/src/App/FreeCADInit.py @@ -135,6 +135,81 @@ FreeCAD.EndingAdd("FreeCAD document (*.FCStd)","FreeCAD") # set to no gui, is overwritten by InitGui App.GuiUp = 0 +# fill up unit definitions +App.Units.NanoMeter = App.Units.Quantity('nm') +App.Units.MicroMeter = App.Units.Quantity('ym') +App.Units.MilliMeter = App.Units.Quantity('mm') +App.Units.CentiMeter = App.Units.Quantity('cm') +App.Units.DeciMeter = App.Units.Quantity('dm') +App.Units.Meter = App.Units.Quantity('m') +App.Units.KiloMeter = App.Units.Quantity('km') + +App.Units.Liter = App.Units.Quantity('l') + +App.Units.MicroGram = App.Units.Quantity('yg') +App.Units.MilliGram = App.Units.Quantity('mg') +App.Units.Gram = App.Units.Quantity('g') +App.Units.KiloGram = App.Units.Quantity('kg') +App.Units.Ton = App.Units.Quantity('t') + +App.Units.Second = App.Units.Quantity('s') +App.Units.Minut = App.Units.Quantity('min') +App.Units.Hour = App.Units.Quantity('h') + +App.Units.Ampere = App.Units.Quantity('A') +App.Units.MilliAmpere = App.Units.Quantity('mA') +App.Units.KiloAmpere = App.Units.Quantity('kA') +App.Units.MegaAmpere = App.Units.Quantity('MA') + +App.Units.Kelvin = App.Units.Quantity('K') +App.Units.MilliKelvin = App.Units.Quantity('mK') +App.Units.MicroKelvin = App.Units.Quantity('yK') + +App.Units.Mole = App.Units.Quantity('mol') + +App.Units.Candela = App.Units.Quantity('cd') + +App.Units.Inch = App.Units.Quantity('in') +App.Units.Foot = App.Units.Quantity('fo') +App.Units.Thou = App.Units.Quantity('th') +App.Units.Yard = App.Units.Quantity('yr') +App.Units.Mile = App.Units.Quantity('mile') + +App.Units.Pound = App.Units.Quantity('lb') +App.Units.Ounce = App.Units.Quantity('oz') +App.Units.Stone = App.Units.Quantity('st') +App.Units.Hundredweights= App.Units.Quantity('cwt') + +App.Units.Newton = App.Units.Quantity('N') +App.Units.KiloNewton = App.Units.Quantity('kN') +App.Units.MegaNewton = App.Units.Quantity('MN') +App.Units.MilliNewton = App.Units.Quantity('mN') + +App.Units.Pascal = App.Units.Quantity('Pa') +App.Units.KiloPascal = App.Units.Quantity('kPa') +App.Units.MegaPascal = App.Units.Quantity('MPa') +App.Units.GigaPascal = App.Units.Quantity('GPa') + +App.Units.PSI = App.Units.Quantity('psi') + +App.Units.Watt = App.Units.Quantity('W') +App.Units.VoltAmpere = App.Units.Quantity('VA') + +App.Units.Joul = App.Units.Quantity('J') +App.Units.NewtonMeter = App.Units.Quantity('Nm') +App.Units.VoltAmpereSecond = App.Units.Quantity('VAs') +App.Units.WattSecond = App.Units.Quantity('Ws') + +App.Units.MPH = App.Units.Quantity('mile/h') +App.Units.KMH = App.Units.Quantity('km/h') + + +App.Units.Degree = App.Units.Quantity('deg') +App.Units.Radian = App.Units.Quantity('rad') +App.Units.Gon = App.Units.Quantity('gon') + + + # clean up namespace del(InitApplications) diff --git a/src/Base/Quantity.cpp b/src/Base/Quantity.cpp index c7651efe69..cbc3323a8a 100644 --- a/src/Base/Quantity.cpp +++ b/src/Base/Quantity.cpp @@ -183,6 +183,7 @@ Quantity Quantity::Inch (25.4 ,Unit(1)); Quantity Quantity::Foot (304.8 ,Unit(1)); Quantity Quantity::Thou (0.0254 ,Unit(1)); Quantity Quantity::Yard (914.4 ,Unit(1)); +Quantity Quantity::Mile (1609344.0 ,Unit(1)); Quantity Quantity::Pound (0.45359237 ,Unit(0,1)); Quantity Quantity::Ounce (0.45359237 ,Unit(0,1)); @@ -209,6 +210,9 @@ Quantity Quantity::NewtonMeter (1e+6 ,Unit(2,1,-2)); // Joule (kg Quantity Quantity::VoltAmpereSecond (1e+6 ,Unit(2,1,-2)); // Joule (kg*m^2/s^2) Quantity Quantity::WattSecond (1e+6 ,Unit(2,1,-2)); // Joule (kg*m^2/s^2) +Quantity Quantity::KMH (277.778 ,Unit(1,0,-1)); // km/h +Quantity Quantity::MPH (447.04 ,Unit(1,0,-1)); // Mile/h + Quantity Quantity::Degree (1.0 ,Unit(0,0,0,0,0,0,0,1)); // degree (internal standard angle) Quantity Quantity::Radian (180/M_PI ,Unit(0,0,0,0,0,0,0,1)); // radian Quantity Quantity::Gon (360.0/400.0 ,Unit(0,0,0,0,0,0,0,1)); // gon diff --git a/src/Base/Quantity.h b/src/Base/Quantity.h index e92ab9e83e..86454c5205 100644 --- a/src/Base/Quantity.h +++ b/src/Base/Quantity.h @@ -101,56 +101,60 @@ public: static Quantity KiloGram; static Quantity Ton; - static Quantity Second ; - static Quantity Minut ; - static Quantity Hour ; + static Quantity Second; + static Quantity Minut; + static Quantity Hour; - static Quantity Ampere ; - static Quantity MilliAmpere ; - static Quantity KiloAmpere ; - static Quantity MegaAmpere ; + static Quantity Ampere; + static Quantity MilliAmpere; + static Quantity KiloAmpere; + static Quantity MegaAmpere; - static Quantity Kelvin ; - static Quantity MilliKelvin ; - static Quantity MicroKelvin ; + static Quantity Kelvin; + static Quantity MilliKelvin; + static Quantity MicroKelvin; - static Quantity Mole ; + static Quantity Mole; - static Quantity Candela ; + static Quantity Candela; - static Quantity Inch ; - static Quantity Foot ; - static Quantity Thou ; - static Quantity Yard ; + static Quantity Inch; + static Quantity Foot; + static Quantity Thou; + static Quantity Yard; - static Quantity Pound ; - static Quantity Ounce ; - static Quantity Stone ; - static Quantity Hundredweights ; + static Quantity Pound; + static Quantity Ounce; + static Quantity Stone; + static Quantity Hundredweights; + static Quantity Mile; - static Quantity Newton ; - static Quantity KiloNewton ; - static Quantity MegaNewton ; - static Quantity MilliNewton ; + static Quantity Newton; + static Quantity KiloNewton; + static Quantity MegaNewton; + static Quantity MilliNewton; - static Quantity Pascal ; - static Quantity KiloPascal ; - static Quantity MegaPascal ; - static Quantity GigaPascal ; + static Quantity Pascal; + static Quantity KiloPascal; + static Quantity MegaPascal; + static Quantity GigaPascal; - static Quantity PSI ; + static Quantity PSI; - static Quantity Watt ; - static Quantity VoltAmpere ; + static Quantity Watt; + static Quantity VoltAmpere; - static Quantity Joul ; - static Quantity NewtonMeter ; + static Quantity Joul; + static Quantity NewtonMeter; static Quantity VoltAmpereSecond; - static Quantity WattSecond ; + static Quantity WattSecond; - static Quantity Degree ; - static Quantity Radian ; - static Quantity Gon ; + static Quantity KMH; + static Quantity MPH; + + static Quantity Degree; + static Quantity Radian; + static Quantity Gon; //@} diff --git a/src/Base/QuantityLexer.c b/src/Base/QuantityLexer.c index efaceda435..c5b93964d6 100644 --- a/src/Base/QuantityLexer.c +++ b/src/Base/QuantityLexer.c @@ -361,8 +361,8 @@ static void yy_fatal_error (yyconst char msg[] ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 82 -#define YY_END_OF_BUFFER 83 +#define YY_NUM_RULES 83 +#define YY_END_OF_BUFFER 84 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -370,23 +370,23 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[136] = +static yyconst flex_int16_t yy_accept[138] = { 0, - 0, 0, 0, 0, 83, 82, 4, 5, 33, 35, - 6, 63, 23, 82, 82, 53, 27, 82, 42, 82, - 82, 51, 1, 82, 82, 82, 65, 82, 17, 22, - 82, 82, 14, 12, 82, 82, 82, 82, 20, 19, - 82, 3, 2, 5, 62, 63, 56, 0, 26, 44, - 0, 54, 46, 52, 57, 0, 0, 0, 0, 31, + 0, 0, 0, 0, 84, 83, 4, 5, 33, 35, + 6, 64, 23, 83, 83, 54, 27, 83, 43, 83, + 83, 52, 1, 83, 83, 83, 66, 83, 17, 22, + 83, 83, 14, 12, 83, 83, 83, 83, 20, 19, + 83, 3, 2, 5, 63, 64, 57, 0, 26, 45, + 0, 55, 47, 53, 58, 0, 0, 0, 0, 31, 10, 0, 0, 0, 11, 0, 34, 0, 32, 25, - 43, 0, 18, 13, 38, 0, 24, 28, 45, 16, - 0, 9, 0, 7, 39, 64, 0, 0, 0, 0, - 0, 40, 0, 36, 29, 15, 8, 37, 62, 0, + 44, 0, 18, 13, 39, 0, 24, 28, 46, 16, + 0, 9, 0, 7, 40, 65, 0, 0, 0, 0, + 0, 41, 0, 36, 29, 15, 8, 37, 63, 0, - 49, 48, 55, 72, 0, 0, 0, 70, 41, 58, - 71, 60, 47, 74, 21, 73, 30, 76, 50, 59, - 77, 0, 79, 0, 61, 66, 67, 68, 0, 78, - 81, 80, 69, 75, 0 + 50, 49, 56, 73, 0, 0, 0, 71, 42, 59, + 72, 61, 48, 75, 0, 21, 74, 30, 77, 51, + 60, 78, 0, 80, 0, 62, 67, 68, 69, 0, + 38, 79, 82, 81, 70, 76, 0 } ; static yyconst flex_int32_t yy_ec[256] = @@ -430,45 +430,45 @@ static yyconst flex_int32_t yy_meta[49] = 1, 1, 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_int16_t yy_base[137] = +static yyconst flex_int16_t yy_base[139] = { 0, - 0, 0, 46, 47, 177, 178, 178, 173, 178, 178, - 178, 47, 178, 153, 153, 178, 178, 40, 136, 146, - 158, 127, 178, 35, 36, 37, 123, 129, 128, 178, - 128, 56, 25, 67, 128, 116, 52, 137, 48, 57, - 66, 178, 178, 159, 100, 109, 178, 135, 178, 178, - 134, 178, 178, 116, 178, 115, 118, 122, 129, 178, - 178, 111, 109, 120, 178, 111, 178, 112, 178, 178, - 178, 123, 178, 178, 178, 116, 178, 178, 178, 178, - 109, 178, 71, 178, 178, 178, 101, 111, 115, 89, - 84, 178, 78, 178, 178, 178, 178, 178, 113, 122, + 0, 0, 46, 47, 179, 180, 180, 175, 180, 180, + 180, 47, 180, 155, 155, 180, 180, 40, 138, 148, + 160, 129, 180, 35, 36, 37, 125, 131, 130, 180, + 130, 56, 25, 67, 130, 118, 52, 139, 48, 57, + 66, 180, 180, 161, 100, 109, 180, 137, 180, 180, + 136, 180, 180, 118, 180, 117, 120, 124, 131, 180, + 180, 113, 111, 122, 180, 113, 180, 114, 180, 180, + 180, 125, 180, 180, 180, 118, 180, 180, 180, 180, + 30, 180, 71, 180, 180, 180, 104, 114, 118, 108, + 103, 180, 106, 180, 180, 180, 180, 180, 113, 122, - 178, 178, 178, 178, 71, 67, 64, 178, 178, 178, - 178, 178, 178, 87, 178, 178, 178, 178, 178, 178, - 63, 50, 37, 126, 130, 178, 178, 57, 57, 178, - 178, 178, 178, 178, 178, 53 + 180, 180, 180, 180, 84, 88, 78, 180, 180, 180, + 180, 180, 180, 104, 75, 180, 180, 180, 180, 180, + 180, 69, 53, 63, 126, 130, 180, 180, 83, 61, + 180, 180, 180, 180, 180, 180, 180, 53 } ; -static yyconst flex_int16_t yy_def[137] = +static yyconst flex_int16_t yy_def[139] = { 0, - 135, 1, 136, 136, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 137, 1, 138, 138, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 0, 135 + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 0, 137 } ; -static yyconst flex_int16_t yy_nxt[227] = +static yyconst flex_int16_t yy_nxt[229] = { 0, 6, 7, 8, 9, 10, 11, 11, 6, 12, 12, 12, 12, 13, 14, 6, 15, 16, 17, 18, 19, @@ -476,54 +476,54 @@ static yyconst flex_int16_t yy_nxt[227] = 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 6, 38, 39, 40, 6, 6, 41, 6, 6, 6, 45, 75, 49, 42, 45, 46, 46, 46, 46, 50, - 51, 56, 57, 76, 60, 134, 64, 133, 70, 132, + 51, 56, 57, 76, 60, 115, 64, 116, 70, 136, 43, 43, 61, 65, 62, 71, 72, 58, 59, 77, 63, 90, 93, 95, 78, 86, 79, 73, 91, 94, - 87, 92, 74, 131, 88, 130, 129, 96, 80, 116, + 87, 92, 74, 135, 88, 134, 133, 96, 80, 117, - 81, 128, 97, 82, 127, 83, 117, 98, 99, 99, - 99, 99, 45, 126, 100, 123, 45, 46, 46, 46, - 46, 99, 99, 99, 99, 122, 121, 100, 124, 100, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 100, 120, 119, 118, 115, 114, 113, 112, - 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, - 101, 44, 89, 85, 84, 69, 68, 67, 66, 55, - 54, 53, 52, 48, 47, 44, 135, 5, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 81, 132, 97, 82, 131, 83, 118, 98, 99, 99, + 99, 99, 45, 130, 100, 129, 45, 46, 46, 46, + 46, 99, 99, 99, 99, 128, 127, 100, 125, 100, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 100, 124, 123, 122, 121, 120, 119, 114, + 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, + 103, 102, 101, 44, 89, 85, 84, 69, 68, 67, + 66, 55, 54, 53, 52, 48, 47, 44, 137, 5, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135 + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137 } ; -static yyconst flex_int16_t yy_chk[227] = +static yyconst flex_int16_t yy_chk[229] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4, - 12, 33, 18, 136, 12, 12, 12, 12, 12, 18, - 18, 24, 24, 33, 25, 129, 26, 128, 32, 123, + 12, 33, 18, 138, 12, 12, 12, 12, 12, 18, + 18, 24, 24, 33, 25, 81, 26, 81, 32, 130, 3, 4, 25, 26, 25, 32, 32, 24, 24, 34, 25, 39, 40, 41, 34, 37, 34, 32, 39, 40, - 37, 39, 32, 122, 37, 121, 114, 41, 34, 83, + 37, 39, 32, 129, 37, 124, 123, 41, 34, 83, - 34, 107, 41, 34, 106, 34, 83, 41, 45, 45, - 45, 45, 46, 105, 45, 93, 46, 46, 46, 46, - 46, 99, 99, 99, 99, 91, 90, 99, 100, 45, - 100, 100, 100, 100, 124, 124, 124, 124, 125, 125, - 125, 125, 99, 89, 88, 87, 81, 76, 72, 68, - 66, 64, 63, 62, 59, 58, 57, 56, 54, 51, - 48, 44, 38, 36, 35, 31, 29, 28, 27, 22, - 21, 20, 19, 15, 14, 8, 5, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 34, 122, 41, 34, 115, 34, 83, 41, 45, 45, + 45, 45, 46, 114, 45, 107, 46, 46, 46, 46, + 46, 99, 99, 99, 99, 106, 105, 99, 100, 45, + 100, 100, 100, 100, 125, 125, 125, 125, 126, 126, + 126, 126, 99, 93, 91, 90, 89, 88, 87, 76, + 72, 68, 66, 64, 63, 62, 59, 58, 57, 56, + 54, 51, 48, 44, 38, 36, 35, 31, 29, 28, + 27, 22, 21, 20, 19, 15, 14, 8, 5, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135 + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137 } ; static yy_state_type yy_last_accepting_state; @@ -791,13 +791,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 136 ) + if ( yy_current_state >= 138 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_current_state != 135 ); + while ( yy_current_state != 137 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); @@ -1005,98 +1005,98 @@ yylval = Quantity::Yard; return UNIT; // yard YY_BREAK case 38: YY_RULE_SETUP -#line 81 "QuantityParser.l" -yylval = Quantity::Pound; return UNIT; // pound +#line 79 "QuantityParser.l" +yylval = Quantity::Mile; return UNIT; // mile YY_BREAK case 39: YY_RULE_SETUP #line 82 "QuantityParser.l" -yylval = Quantity::Ounce; return UNIT; // ounce +yylval = Quantity::Pound; return UNIT; // pound YY_BREAK case 40: YY_RULE_SETUP #line 83 "QuantityParser.l" -yylval = Quantity::Stone; return UNIT; // Stone +yylval = Quantity::Ounce; return UNIT; // ounce YY_BREAK case 41: YY_RULE_SETUP #line 84 "QuantityParser.l" -yylval = Quantity::Hundredweights; return UNIT; // hundredweights +yylval = Quantity::Stone; return UNIT; // Stone YY_BREAK case 42: YY_RULE_SETUP -#line 86 "QuantityParser.l" -yylval = Quantity::Newton; return UNIT; // Newton (kg*m/s^2) +#line 85 "QuantityParser.l" +yylval = Quantity::Hundredweights; return UNIT; // hundredweights YY_BREAK case 43: YY_RULE_SETUP #line 87 "QuantityParser.l" -yylval = Quantity::KiloNewton; return UNIT; // Newton +yylval = Quantity::Newton; return UNIT; // Newton (kg*m/s^2) YY_BREAK case 44: YY_RULE_SETUP #line 88 "QuantityParser.l" -yylval = Quantity::MegaNewton; return UNIT; // Newton +yylval = Quantity::KiloNewton; return UNIT; // Newton YY_BREAK case 45: YY_RULE_SETUP #line 89 "QuantityParser.l" -yylval = Quantity::MilliNewton; return UNIT; // Newton +yylval = Quantity::MegaNewton; return UNIT; // Newton YY_BREAK case 46: YY_RULE_SETUP -#line 91 "QuantityParser.l" -yylval = Quantity::Pascal; return UNIT; // Pascal (kg/m*s^2 or N/m^2) +#line 90 "QuantityParser.l" +yylval = Quantity::MilliNewton; return UNIT; // Newton YY_BREAK case 47: YY_RULE_SETUP #line 92 "QuantityParser.l" -yylval = Quantity::KiloPascal; return UNIT; // Pascal +yylval = Quantity::Pascal; return UNIT; // Pascal (kg/m*s^2 or N/m^2) YY_BREAK case 48: YY_RULE_SETUP #line 93 "QuantityParser.l" -yylval = Quantity::MegaPascal; return UNIT; // Pascal +yylval = Quantity::KiloPascal; return UNIT; // Pascal YY_BREAK case 49: YY_RULE_SETUP #line 94 "QuantityParser.l" -yylval = Quantity::GigaPascal; return UNIT; // Pascal +yylval = Quantity::MegaPascal; return UNIT; // Pascal YY_BREAK case 50: YY_RULE_SETUP -#line 96 "QuantityParser.l" -yylval = Quantity::PSI; return UNIT; // pounds/in^2 +#line 95 "QuantityParser.l" +yylval = Quantity::GigaPascal; return UNIT; // Pascal YY_BREAK case 51: YY_RULE_SETUP -#line 98 "QuantityParser.l" -yylval = Quantity::Watt; return UNIT; // Watt (kg*m^2/s^3) +#line 97 "QuantityParser.l" +yylval = Quantity::PSI; return UNIT; // pounds/in^2 YY_BREAK case 52: YY_RULE_SETUP #line 99 "QuantityParser.l" -yylval = Quantity::VoltAmpere; return UNIT; // VoltAmpere (kg*m^2/s^3) +yylval = Quantity::Watt; return UNIT; // Watt (kg*m^2/s^3) YY_BREAK case 53: YY_RULE_SETUP -#line 101 "QuantityParser.l" -yylval = Quantity::Joul; return UNIT; // Joule (kg*m^2/s^2) +#line 100 "QuantityParser.l" +yylval = Quantity::VoltAmpere; return UNIT; // VoltAmpere (kg*m^2/s^3) YY_BREAK case 54: YY_RULE_SETUP #line 102 "QuantityParser.l" -yylval = Quantity::NewtonMeter; return UNIT; // Joule (kg*m^2/s^2) +yylval = Quantity::Joul; return UNIT; // Joule (kg*m^2/s^2) YY_BREAK case 55: YY_RULE_SETUP #line 103 "QuantityParser.l" -yylval = Quantity::VoltAmpereSecond; return UNIT; // Joule (kg*m^2/s^2) +yylval = Quantity::NewtonMeter; return UNIT; // Joule (kg*m^2/s^2) YY_BREAK case 56: YY_RULE_SETUP #line 104 "QuantityParser.l" -yylval = Quantity::WattSecond; return UNIT; // Joule (kg*m^2/s^2) +yylval = Quantity::VoltAmpereSecond; return UNIT; // Joule (kg*m^2/s^2) YY_BREAK case 57: YY_RULE_SETUP @@ -1105,23 +1105,23 @@ yylval = Quantity::WattSecond; return UNIT; // Joule (kg*m^2/s^2) YY_BREAK case 58: YY_RULE_SETUP -#line 107 "QuantityParser.l" -yylval = Quantity::Degree; return UNIT; // degree (internal standard angle) +#line 106 "QuantityParser.l" +yylval = Quantity::WattSecond; return UNIT; // Joule (kg*m^2/s^2) YY_BREAK case 59: YY_RULE_SETUP #line 108 "QuantityParser.l" -yylval = Quantity::Radian; return UNIT; // radian +yylval = Quantity::Degree; return UNIT; // degree (internal standard angle) YY_BREAK case 60: YY_RULE_SETUP #line 109 "QuantityParser.l" -yylval = Quantity::Gon; return UNIT; // gon +yylval = Quantity::Radian; return UNIT; // radian YY_BREAK case 61: YY_RULE_SETUP -#line 111 "QuantityParser.l" -{for(char* c=yytext;*c!='\0';c++)if(*c==',')*c='.'; yylval = atof( yytext ); return NUM;} +#line 110 "QuantityParser.l" +yylval = Quantity::Gon; return UNIT; // gon YY_BREAK case 62: YY_RULE_SETUP @@ -1131,104 +1131,109 @@ YY_RULE_SETUP case 63: YY_RULE_SETUP #line 113 "QuantityParser.l" -{yylval = atof( yytext ); return NUM;} +{for(char* c=yytext;*c!='\0';c++)if(*c==',')*c='.'; yylval = atof( yytext ); return NUM;} YY_BREAK case 64: YY_RULE_SETUP -#line 115 "QuantityParser.l" -{yylval = M_PI ; return NUM;} // constant pi +#line 114 "QuantityParser.l" +{yylval = atof( yytext ); return NUM;} YY_BREAK case 65: YY_RULE_SETUP #line 116 "QuantityParser.l" -{yylval = M_E ; return NUM;} // constant e +{yylval = M_PI ; return NUM;} // constant pi YY_BREAK case 66: YY_RULE_SETUP -#line 118 "QuantityParser.l" -return ACOS; +#line 117 "QuantityParser.l" +{yylval = M_E ; return NUM;} // constant e YY_BREAK case 67: YY_RULE_SETUP #line 119 "QuantityParser.l" -return ASIN; +return ACOS; YY_BREAK case 68: YY_RULE_SETUP #line 120 "QuantityParser.l" -return ATAN; +return ASIN; YY_BREAK case 69: YY_RULE_SETUP #line 121 "QuantityParser.l" -return ATAN2; +return ATAN; YY_BREAK case 70: YY_RULE_SETUP #line 122 "QuantityParser.l" -return COS; +return ATAN2; YY_BREAK case 71: YY_RULE_SETUP #line 123 "QuantityParser.l" -return EXP; +return COS; YY_BREAK case 72: YY_RULE_SETUP #line 124 "QuantityParser.l" -return ABS; +return EXP; YY_BREAK case 73: YY_RULE_SETUP #line 125 "QuantityParser.l" -return MOD; +return ABS; YY_BREAK case 74: YY_RULE_SETUP #line 126 "QuantityParser.l" -return LOG; +return MOD; YY_BREAK case 75: YY_RULE_SETUP #line 127 "QuantityParser.l" -return LOG10; +return LOG; YY_BREAK case 76: YY_RULE_SETUP #line 128 "QuantityParser.l" -return POW; +return LOG10; YY_BREAK case 77: YY_RULE_SETUP #line 129 "QuantityParser.l" -return SIN; +return POW; YY_BREAK case 78: YY_RULE_SETUP #line 130 "QuantityParser.l" -return SINH; +return SIN; YY_BREAK case 79: YY_RULE_SETUP #line 131 "QuantityParser.l" -return TAN; +return SINH; YY_BREAK case 80: YY_RULE_SETUP #line 132 "QuantityParser.l" -return TANH; +return TAN; YY_BREAK case 81: YY_RULE_SETUP #line 133 "QuantityParser.l" -return SQRT; +return TANH; YY_BREAK case 82: YY_RULE_SETUP -#line 135 "QuantityParser.l" +#line 134 "QuantityParser.l" +return SQRT; + YY_BREAK +case 83: +YY_RULE_SETUP +#line 136 "QuantityParser.l" ECHO; YY_BREAK -#line 1232 "QuantityLexer.c" +#line 1237 "QuantityLexer.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(C_COMMENT): yyterminate(); @@ -1522,7 +1527,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 136 ) + if ( yy_current_state >= 138 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -1550,11 +1555,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 136 ) + if ( yy_current_state >= 138 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 135); + yy_is_jam = (yy_current_state == 137); return yy_is_jam ? 0 : yy_current_state; } @@ -2187,4 +2192,4 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 135 "QuantityParser.l" +#line 136 "QuantityParser.l" diff --git a/src/Base/QuantityParser.l b/src/Base/QuantityParser.l index 5fe915587f..f1dfddf776 100644 --- a/src/Base/QuantityParser.l +++ b/src/Base/QuantityParser.l @@ -76,6 +76,7 @@ ID [a-z][a-z0-9]* "'" yylval = Quantity::Foot; return UNIT; // foot "th" yylval = Quantity::Thou; return UNIT; // thou "yr" yylval = Quantity::Yard; return UNIT; // yard + "mile" yylval = Quantity::Mile; return UNIT; // mile "lb" yylval = Quantity::Pound; return UNIT; // pound diff --git a/src/Base/QuantityPy.xml b/src/Base/QuantityPy.xml index 7dfeaefc35..7f56971e9a 100644 --- a/src/Base/QuantityPy.xml +++ b/src/Base/QuantityPy.xml @@ -58,5 +58,15 @@ Quantity(string) -- arbitrary mixture of numbers and chars defining a Quantity - + + + + + Definition of NanoMeter + + + + + + diff --git a/src/Base/QuantityPyImp.cpp b/src/Base/QuantityPyImp.cpp index d0ccf23708..d4bfe96b41 100644 --- a/src/Base/QuantityPyImp.cpp +++ b/src/Base/QuantityPyImp.cpp @@ -33,10 +33,17 @@ int QuantityPy::PyInit(PyObject* args, PyObject* kwd) Quantity *self = getQuantityPtr(); double f = DOUBLE_MAX; - - if (PyArg_ParseTuple(args, "|d", &f)) { + int i1=0; + int i2=0; + int i3=0; + int i4=0; + int i5=0; + int i6=0; + int i7=0; + int i8=0; + if (PyArg_ParseTuple(args, "|diiiiiiii", &f,&i1,&i2,&i3,&i4,&i5,&i6,&i7,&i8)) { if(f!=DOUBLE_MAX) - *self = Quantity(f); + *self = Quantity(f,Unit(i1,i2,i3,i4,i5,i6,i7,i8)); return 0; } PyErr_Clear(); // set by PyArg_ParseTuple() @@ -170,4 +177,14 @@ int QuantityPy::setCustomAttributes(const char* /*attr*/, PyObject* /*obj*/) return 0; } +// All the standard unit definitions =============================== + +Py::Object QuantityPy::getNanoMeter(void) const +{ + return Py::Object(new QuantityPy(new Quantity(Quantity::NanoMeter))); +} + + + +