From d7ca604c9943ea51ee21c682b6ca6ad8d2cab120 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 21 Oct 2019 11:49:55 +0200 Subject: [PATCH] Support for Frequency in quantity parser --- src/App/FreeCADInit.py | 1 + src/Base/Quantity.cpp | 5 + src/Base/Quantity.h | 5 + src/Base/QuantityLexer.c | 615 ++++++++++++++++--------------- src/Base/QuantityParser.l | 5 + src/Base/UnitsSchemaInternal.cpp | 18 + src/Base/UnitsSchemaMKS.cpp | 18 + 7 files changed, 373 insertions(+), 294 deletions(-) diff --git a/src/App/FreeCADInit.py b/src/App/FreeCADInit.py index 9664cada8a..50563e3333 100644 --- a/src/App/FreeCADInit.py +++ b/src/App/FreeCADInit.py @@ -726,6 +726,7 @@ App.Units.AngleOfFriction = App.Units.Unit(0,0,0,0,0,0,0,1) App.Units.Density = App.Units.Unit(-3,1) App.Units.TimeSpan = App.Units.Unit(0,0,1) +App.Units.Frequency = App.Units.Unit(0,0,-1) App.Units.Velocity = App.Units.Unit(1,0,-1) App.Units.Acceleration = App.Units.Unit(1,0,-2) App.Units.Temperature = App.Units.Unit(0,0,0,0,1) diff --git a/src/Base/Quantity.cpp b/src/Base/Quantity.cpp index 1d03a6d7dc..ff2c879e5f 100644 --- a/src/Base/Quantity.cpp +++ b/src/Base/Quantity.cpp @@ -248,6 +248,11 @@ Quantity Quantity::KiloMetre (1.0e6 ,Unit(1)); Quantity Quantity::Liter (1000000.0 ,Unit(3)); +Quantity Quantity::Hertz (1.0 ,Unit(0,0,-1)); +Quantity Quantity::KiloHertz (1.0e3 ,Unit(0,0,-1)); +Quantity Quantity::MegaHertz (1.0e6 ,Unit(0,0,-1)); +Quantity Quantity::GigaHertz (1.0e9 ,Unit(0,0,-1)); + 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)); diff --git a/src/Base/Quantity.h b/src/Base/Quantity.h index edcf14548b..890359d3be 100644 --- a/src/Base/Quantity.h +++ b/src/Base/Quantity.h @@ -188,6 +188,11 @@ public: static Quantity Liter; + static Quantity Hertz; + static Quantity KiloHertz; + static Quantity MegaHertz; + static Quantity GigaHertz; + static Quantity MicroGram; static Quantity MilliGram; static Quantity Gram; diff --git a/src/Base/QuantityLexer.c b/src/Base/QuantityLexer.c index acc0640b40..ec0c82b083 100644 --- a/src/Base/QuantityLexer.c +++ b/src/Base/QuantityLexer.c @@ -353,8 +353,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 105 -#define YY_END_OF_BUFFER 106 +#define YY_NUM_RULES 109 +#define YY_END_OF_BUFFER 110 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -362,30 +362,31 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[194] = +static const flex_int16_t yy_accept[202] = { 0, - 0, 0, 0, 0, 106, 104, 4, 5, 38, 40, - 6, 104, 7, 104, 82, 81, 27, 104, 104, 68, - 31, 77, 51, 104, 79, 104, 67, 65, 1, 104, - 104, 104, 87, 104, 21, 26, 104, 104, 17, 15, - 104, 104, 104, 104, 24, 23, 104, 104, 104, 104, - 3, 105, 2, 5, 85, 83, 84, 82, 82, 0, - 71, 0, 30, 53, 0, 69, 55, 0, 66, 72, - 0, 0, 0, 0, 36, 13, 0, 0, 0, 14, - 0, 39, 0, 37, 29, 52, 0, 22, 16, 0, - 45, 0, 28, 32, 54, 0, 20, 44, 12, 0, + 0, 0, 0, 0, 110, 108, 4, 5, 42, 44, + 6, 108, 7, 108, 86, 85, 31, 108, 108, 108, + 72, 35, 81, 55, 108, 83, 108, 71, 69, 1, + 108, 108, 108, 91, 108, 25, 30, 108, 108, 17, + 15, 108, 108, 108, 108, 28, 27, 108, 108, 108, + 108, 3, 109, 2, 5, 89, 87, 88, 86, 86, + 0, 75, 0, 0, 18, 34, 0, 57, 0, 73, + 59, 0, 70, 76, 0, 0, 0, 0, 40, 13, + 0, 0, 0, 14, 0, 43, 0, 41, 33, 0, + 56, 0, 26, 16, 0, 49, 0, 32, 36, 58, - 9, 47, 86, 0, 0, 0, 0, 0, 48, 0, - 0, 34, 0, 18, 10, 43, 73, 0, 0, 0, - 0, 0, 84, 0, 82, 0, 0, 82, 58, 57, - 0, 70, 94, 0, 0, 0, 92, 49, 74, 93, - 76, 56, 64, 50, 46, 96, 0, 42, 25, 95, - 35, 98, 63, 75, 99, 0, 101, 0, 0, 33, - 0, 19, 11, 78, 80, 8, 0, 85, 0, 83, - 0, 84, 0, 82, 59, 88, 89, 90, 0, 0, - 100, 103, 102, 41, 0, 0, 91, 97, 60, 61, - 0, 62, 0 + 0, 24, 48, 12, 0, 9, 51, 90, 0, 0, + 0, 0, 0, 52, 0, 0, 38, 0, 22, 10, + 47, 77, 0, 0, 0, 0, 0, 88, 0, 86, + 0, 0, 86, 21, 62, 20, 61, 0, 74, 98, + 0, 0, 0, 96, 53, 78, 97, 80, 19, 60, + 68, 54, 50, 100, 0, 46, 29, 99, 39, 102, + 67, 79, 103, 0, 105, 0, 0, 37, 0, 23, + 11, 82, 84, 8, 0, 89, 0, 87, 0, 88, + 0, 86, 63, 92, 93, 94, 0, 0, 104, 107, + 106, 45, 0, 0, 95, 101, 64, 65, 0, 66, + 0 } ; static const YY_CHAR yy_ec[256] = @@ -397,30 +398,30 @@ static const YY_CHAR yy_ec[256] = 6, 6, 7, 8, 9, 10, 6, 11, 12, 13, 14, 14, 14, 14, 14, 14, 14, 1, 1, 1, 6, 1, 1, 1, 15, 1, 16, 1, 17, 1, - 18, 1, 1, 19, 20, 1, 21, 22, 1, 23, - 1, 1, 24, 25, 1, 26, 27, 1, 1, 1, - 28, 1, 29, 6, 1, 1, 30, 31, 32, 33, + 18, 19, 1, 20, 21, 1, 22, 23, 1, 24, + 1, 1, 25, 26, 1, 27, 28, 1, 1, 1, + 29, 1, 30, 6, 1, 1, 31, 32, 33, 34, - 34, 35, 36, 37, 38, 1, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 1, 50, 51, - 52, 53, 1, 1, 1, 1, 1, 54, 1, 1, - 1, 1, 1, 1, 1, 55, 1, 1, 1, 1, + 35, 36, 37, 38, 39, 1, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 1, 51, 52, + 53, 54, 1, 1, 1, 1, 1, 55, 1, 1, 1, 1, 1, 1, 1, 56, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 57, 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, 57, 1, 58, 59, 1, - 60, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 61, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 58, 1, 59, 60, 1, + 61, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 62, 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, 62, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 63, 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 const YY_CHAR yy_meta[63] = +static const YY_CHAR yy_meta[64] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -428,108 +429,112 @@ static const YY_CHAR yy_meta[63] = 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 const flex_int16_t yy_base[195] = +static const flex_int16_t yy_base[203] = { 0, - 0, 0, 60, 61, 324, 325, 325, 320, 325, 325, - 325, 54, 325, 58, 65, 83, 325, 296, 298, 325, - 325, 65, 279, 289, 325, 275, 302, 269, 325, 54, - 65, 40, 264, 266, 270, 325, 270, 88, 61, 98, - 270, 257, 69, 279, 83, 89, 89, 275, 80, 29, - 325, 325, 325, 304, 131, 138, 145, 156, 170, 182, - 325, 276, 325, 325, 275, 325, 325, 258, 256, 325, - 255, 258, 262, 269, 325, 325, 251, 249, 260, 325, - 251, 325, 252, 325, 325, 325, 263, 325, 325, 254, - 92, 255, 325, 325, 325, 247, 325, 121, 325, 113, + 0, 0, 61, 62, 332, 333, 333, 328, 333, 333, + 333, 55, 333, 59, 66, 76, 333, 303, 75, 275, + 333, 333, 81, 286, 296, 333, 282, 310, 276, 333, + 49, 68, 71, 271, 273, 277, 333, 277, 99, 63, + 106, 277, 264, 76, 286, 89, 78, 116, 282, 72, + 70, 333, 333, 333, 312, 143, 150, 157, 169, 183, + 194, 333, 260, 282, 333, 333, 258, 333, 280, 333, + 333, 263, 261, 333, 260, 263, 267, 274, 333, 333, + 256, 254, 265, 333, 256, 333, 257, 333, 333, 245, + 333, 267, 333, 333, 258, 98, 220, 333, 333, 333, - 325, 325, 325, 239, 250, 254, 244, 206, 325, 209, - 195, 325, 191, 325, 325, 325, 325, 172, 116, 169, - 198, 207, 189, 215, 219, 228, 232, 236, 325, 325, - 171, 325, 325, 168, 157, 156, 325, 325, 325, 325, - 325, 325, 325, 325, 325, 176, 140, 325, 325, 325, - 325, 325, 325, 325, 148, 129, 139, 122, 120, 325, - 121, 325, 325, 325, 325, 325, 243, 247, 251, 255, - 259, 263, 267, 271, 325, 325, 325, 147, 143, 101, - 325, 325, 325, 325, 92, 86, 325, 325, 325, 325, - 76, 325, 325, 104 + 211, 333, 103, 333, 118, 333, 333, 333, 202, 213, + 209, 196, 181, 333, 183, 180, 333, 179, 333, 333, + 333, 333, 188, 106, 159, 208, 220, 224, 233, 237, + 249, 176, 199, 333, 333, 333, 333, 155, 333, 333, + 151, 155, 141, 333, 333, 333, 333, 333, 333, 333, + 333, 333, 333, 167, 130, 333, 333, 333, 333, 333, + 333, 333, 138, 126, 135, 122, 104, 333, 105, 333, + 333, 333, 333, 333, 253, 257, 262, 266, 270, 274, + 278, 282, 333, 333, 333, 126, 120, 70, 333, 333, + 333, 333, 61, 56, 333, 333, 333, 333, 38, 333, + 333, 74 } ; -static const flex_int16_t yy_def[195] = +static const flex_int16_t yy_def[203] = { 0, - 193, 1, 194, 194, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, + 201, 1, 202, 202, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 0, 193 + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 0, 201 } ; -static const flex_int16_t yy_nxt[388] = +static const flex_int16_t yy_nxt[397] = { 0, 6, 7, 8, 9, 10, 11, 11, 12, 13, 14, 15, 16, 15, 15, 17, 18, 6, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 6, 30, - 6, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 6, 44, 45, 46, 47, 6, - 6, 48, 6, 6, 6, 6, 6, 6, 6, 6, - 49, 50, 52, 52, 55, 55, 55, 55, 56, 56, - 56, 56, 57, 79, 58, 59, 59, 59, 59, 63, - 80, 60, 119, 120, 71, 72, 64, 65, 53, 53, - 57, 91, 58, 59, 59, 59, 59, 75, 60, 60, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 6, + 31, 6, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 6, 45, 46, 47, 48, + 6, 6, 49, 6, 6, 6, 6, 6, 6, 6, + 6, 50, 51, 53, 53, 56, 56, 56, 56, 57, + 57, 57, 57, 58, 52, 59, 60, 60, 60, 60, + 75, 76, 61, 58, 200, 59, 60, 60, 60, 60, + 54, 54, 61, 63, 96, 66, 77, 78, 64, 67, - 73, 74, 85, 92, 51, 76, 103, 77, 112, 86, - 87, 104, 93, 113, 78, 105, 60, 94, 110, 95, - 107, 192, 96, 88, 114, 111, 144, 108, 89, 115, - 109, 191, 145, 97, 90, 98, 117, 190, 99, 118, - 100, 55, 55, 55, 55, 150, 189, 121, 56, 56, - 56, 56, 151, 188, 122, 123, 123, 123, 123, 187, - 148, 124, 149, 186, 121, 185, 125, 125, 125, 125, - 184, 122, 126, 164, 165, 183, 182, 57, 124, 58, - 59, 59, 59, 59, 181, 180, 60, 179, 127, 126, - 127, 160, 128, 128, 128, 128, 161, 178, 177, 123, + 61, 79, 199, 68, 69, 83, 97, 198, 115, 80, + 61, 81, 84, 89, 108, 116, 197, 90, 82, 109, + 98, 91, 92, 110, 124, 125, 99, 112, 100, 122, + 196, 101, 123, 152, 113, 93, 117, 114, 195, 153, + 94, 118, 102, 156, 103, 157, 95, 104, 194, 105, + 193, 158, 119, 56, 56, 56, 56, 120, 159, 126, + 57, 57, 57, 57, 172, 173, 127, 128, 128, 128, + 128, 192, 191, 129, 190, 189, 188, 126, 187, 130, + 130, 130, 130, 186, 127, 131, 133, 133, 133, 133, + 58, 129, 59, 60, 60, 60, 60, 185, 184, 61, - 123, 123, 123, 60, 167, 124, 167, 162, 168, 168, - 168, 168, 163, 169, 176, 169, 175, 170, 170, 170, - 170, 171, 124, 171, 166, 172, 172, 172, 172, 125, - 125, 125, 125, 159, 173, 126, 173, 158, 174, 174, - 174, 174, 128, 128, 128, 128, 128, 128, 128, 128, - 157, 156, 126, 168, 168, 168, 168, 168, 168, 168, - 168, 170, 170, 170, 170, 170, 170, 170, 170, 172, - 172, 172, 172, 172, 172, 172, 172, 174, 174, 174, - 174, 174, 174, 174, 174, 155, 154, 153, 152, 147, - 146, 143, 142, 141, 140, 139, 138, 137, 136, 135, + 132, 183, 132, 131, 133, 133, 133, 133, 168, 133, + 133, 133, 133, 169, 175, 174, 175, 61, 176, 176, + 176, 176, 167, 166, 170, 165, 177, 164, 177, 171, + 178, 178, 178, 178, 128, 128, 128, 128, 163, 179, + 129, 179, 162, 180, 180, 180, 180, 130, 130, 130, + 130, 161, 160, 131, 155, 181, 154, 181, 129, 182, + 182, 182, 182, 176, 176, 176, 176, 176, 176, 176, + 176, 131, 178, 178, 178, 178, 178, 178, 178, 178, + 180, 180, 180, 180, 180, 180, 180, 180, 182, 182, + 182, 182, 182, 182, 182, 182, 151, 150, 149, 148, + + 147, 146, 145, 144, 143, 142, 141, 140, 139, 138, + 137, 136, 135, 134, 55, 121, 111, 107, 106, 88, + 87, 86, 85, 74, 73, 72, 71, 70, 65, 62, + 55, 201, 5, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201 - 134, 133, 132, 131, 130, 129, 54, 116, 106, 102, - 101, 84, 83, 82, 81, 70, 69, 68, 67, 66, - 62, 61, 54, 193, 5, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193 } ; -static const flex_int16_t yy_chk[388] = +static const flex_int16_t yy_chk[397] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -537,42 +542,44 @@ static const flex_int16_t yy_chk[388] = 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, 12, 12, 12, 14, 14, - 14, 14, 15, 32, 15, 15, 15, 15, 15, 22, - 32, 15, 50, 50, 30, 30, 22, 22, 3, 4, - 16, 39, 16, 16, 16, 16, 16, 31, 15, 16, + 1, 1, 1, 3, 4, 12, 12, 12, 12, 14, + 14, 14, 14, 15, 202, 15, 15, 15, 15, 15, + 31, 31, 15, 16, 199, 16, 16, 16, 16, 16, + 3, 4, 16, 19, 40, 23, 31, 31, 19, 23, - 30, 30, 38, 39, 194, 31, 43, 31, 47, 38, - 38, 43, 40, 47, 31, 43, 16, 40, 46, 40, - 45, 191, 40, 38, 47, 46, 91, 45, 38, 47, - 45, 186, 91, 40, 38, 40, 49, 185, 40, 49, - 40, 55, 55, 55, 55, 100, 180, 55, 56, 56, - 56, 56, 100, 179, 56, 57, 57, 57, 57, 178, - 98, 57, 98, 161, 55, 159, 58, 58, 58, 58, - 158, 56, 58, 119, 119, 157, 156, 59, 57, 59, - 59, 59, 59, 59, 155, 147, 59, 146, 60, 58, - 60, 118, 60, 60, 60, 60, 118, 136, 135, 123, + 15, 32, 194, 23, 23, 33, 40, 193, 47, 32, + 16, 32, 33, 39, 44, 47, 188, 39, 32, 44, + 41, 39, 39, 44, 51, 51, 41, 46, 41, 50, + 187, 41, 50, 96, 46, 39, 48, 46, 186, 96, + 39, 48, 41, 103, 41, 103, 39, 41, 169, 41, + 167, 105, 48, 56, 56, 56, 56, 48, 105, 56, + 57, 57, 57, 57, 124, 124, 57, 58, 58, 58, + 58, 166, 165, 58, 164, 163, 155, 56, 154, 59, + 59, 59, 59, 143, 57, 59, 132, 132, 132, 132, + 60, 58, 60, 60, 60, 60, 60, 142, 141, 60, - 123, 123, 123, 59, 121, 123, 121, 118, 121, 121, - 121, 121, 118, 122, 134, 122, 131, 122, 122, 122, - 122, 124, 123, 124, 120, 124, 124, 124, 124, 125, - 125, 125, 125, 113, 126, 125, 126, 111, 126, 126, - 126, 126, 127, 127, 127, 127, 128, 128, 128, 128, - 110, 108, 125, 167, 167, 167, 167, 168, 168, 168, - 168, 169, 169, 169, 169, 170, 170, 170, 170, 171, - 171, 171, 171, 172, 172, 172, 172, 173, 173, 173, - 173, 174, 174, 174, 174, 107, 106, 105, 104, 96, - 92, 90, 87, 83, 81, 79, 78, 77, 74, 73, + 61, 138, 61, 59, 61, 61, 61, 61, 123, 133, + 133, 133, 133, 123, 126, 125, 126, 60, 126, 126, + 126, 126, 118, 116, 123, 115, 127, 113, 127, 123, + 127, 127, 127, 127, 128, 128, 128, 128, 112, 129, + 128, 129, 111, 129, 129, 129, 129, 130, 130, 130, + 130, 110, 109, 130, 101, 131, 97, 131, 128, 131, + 131, 131, 131, 175, 175, 175, 175, 176, 176, 176, + 176, 130, 177, 177, 177, 177, 178, 178, 178, 178, + 179, 179, 179, 179, 180, 180, 180, 180, 181, 181, + 181, 181, 182, 182, 182, 182, 95, 92, 90, 87, + + 85, 83, 82, 81, 78, 77, 76, 75, 73, 72, + 69, 67, 64, 63, 55, 49, 45, 43, 42, 38, + 36, 35, 34, 29, 28, 27, 25, 24, 20, 18, + 8, 5, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201 - 72, 71, 69, 68, 65, 62, 54, 48, 44, 42, - 41, 37, 35, 34, 33, 28, 27, 26, 24, 23, - 19, 18, 8, 5, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193 } ; static yy_state_type yy_last_accepting_state; @@ -600,12 +607,12 @@ char *yytext; * on Win32. The C++ scanner uses STL streams instead. */ #define YY_NO_UNISTD_H -#line 604 "QuantityLexer.c" +#line 611 "QuantityLexer.c" /*** Flex Declarations and Options ***/ /* the manual says "somewhat more optimized" */ /* no support for include files is planned */ -#line 609 "QuantityLexer.c" +#line 616 "QuantityLexer.c" #define INITIAL 0 #define C_COMMENT 1 @@ -824,7 +831,7 @@ YY_DECL #line 32 "" -#line 828 "QuantityLexer.c" +#line 835 "QuantityLexer.c" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -851,13 +858,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 >= 194 ) + if ( yy_current_state >= 202 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_current_state != 193 ); + while ( yy_current_state != 201 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); @@ -966,444 +973,464 @@ yylval = Quantity::Liter; return UNIT; // Liter dm^3 case 18: YY_RULE_SETUP #line 58 "" -yylval = Quantity::MicroGram; return UNIT; // micro gram +yylval = Quantity::Hertz; return UNIT; // Hertz YY_BREAK case 19: YY_RULE_SETUP #line 59 "" -yylval = Quantity::MicroGram; return UNIT; // micro gram +yylval = Quantity::KiloHertz; return UNIT; // Kilo Hertz YY_BREAK case 20: YY_RULE_SETUP #line 60 "" -yylval = Quantity::MilliGram; return UNIT; // milli gram +yylval = Quantity::MegaHertz; return UNIT; // Mega Hertz YY_BREAK case 21: YY_RULE_SETUP #line 61 "" -yylval = Quantity::Gram; return UNIT; // gram +yylval = Quantity::GigaHertz; return UNIT; // Giga Hertz YY_BREAK case 22: YY_RULE_SETUP -#line 62 "" -yylval = Quantity::KiloGram; return UNIT; // kilo gram (internal standard for mass) +#line 63 "" +yylval = Quantity::MicroGram; return UNIT; // micro gram YY_BREAK case 23: YY_RULE_SETUP -#line 63 "" -yylval = Quantity::Ton; return UNIT; // Metric Tonne +#line 64 "" +yylval = Quantity::MicroGram; return UNIT; // micro gram YY_BREAK case 24: YY_RULE_SETUP #line 65 "" -yylval = Quantity::Second; return UNIT; // second (internal standard time) +yylval = Quantity::MilliGram; return UNIT; // milli gram YY_BREAK case 25: YY_RULE_SETUP #line 66 "" -yylval = Quantity::Minute; return UNIT; // minute +yylval = Quantity::Gram; return UNIT; // gram YY_BREAK case 26: YY_RULE_SETUP #line 67 "" -yylval = Quantity::Hour; return UNIT; // hour +yylval = Quantity::KiloGram; return UNIT; // kilo gram (internal standard for mass) YY_BREAK case 27: YY_RULE_SETUP -#line 69 "" -yylval = Quantity::Ampere; return UNIT; // Ampere (internal standard electric current) +#line 68 "" +yylval = Quantity::Ton; return UNIT; // Metric Tonne YY_BREAK case 28: YY_RULE_SETUP #line 70 "" -yylval = Quantity::MilliAmpere; return UNIT; // milli Ampere +yylval = Quantity::Second; return UNIT; // second (internal standard time) YY_BREAK case 29: YY_RULE_SETUP #line 71 "" -yylval = Quantity::KiloAmpere; return UNIT; // kilo Ampere +yylval = Quantity::Minute; return UNIT; // minute YY_BREAK case 30: YY_RULE_SETUP #line 72 "" -yylval = Quantity::MegaAmpere; return UNIT; // Mega Ampere +yylval = Quantity::Hour; return UNIT; // hour YY_BREAK case 31: YY_RULE_SETUP #line 74 "" -yylval = Quantity::Kelvin; return UNIT; // Kelvin (internal standard thermodynamic temperature) +yylval = Quantity::Ampere; return UNIT; // Ampere (internal standard electric current) YY_BREAK case 32: YY_RULE_SETUP #line 75 "" -yylval = Quantity::MilliKelvin; return UNIT; // Kelvin +yylval = Quantity::MilliAmpere; return UNIT; // milli Ampere YY_BREAK case 33: YY_RULE_SETUP #line 76 "" -yylval = Quantity::MicroKelvin; return UNIT; // Kelvin +yylval = Quantity::KiloAmpere; return UNIT; // kilo Ampere YY_BREAK case 34: YY_RULE_SETUP #line 77 "" -yylval = Quantity::MicroKelvin; return UNIT; // Kelvin +yylval = Quantity::MegaAmpere; return UNIT; // Mega Ampere YY_BREAK case 35: YY_RULE_SETUP #line 79 "" -yylval = Quantity::Mole; return UNIT; // Mole (internal standard amount of substance) +yylval = Quantity::Kelvin; return UNIT; // Kelvin (internal standard thermodynamic temperature) YY_BREAK case 36: YY_RULE_SETUP -#line 81 "" -yylval = Quantity::Candela; return UNIT; // Candela (internal standard luminous intensity) +#line 80 "" +yylval = Quantity::MilliKelvin; return UNIT; // Kelvin YY_BREAK case 37: YY_RULE_SETUP -#line 83 "" -yylval = Quantity::Inch; return UNIT; // inch +#line 81 "" +yylval = Quantity::MicroKelvin; return UNIT; // Kelvin YY_BREAK case 38: YY_RULE_SETUP -#line 84 "" -yylval = Quantity::Inch; return UNIT; // inch +#line 82 "" +yylval = Quantity::MicroKelvin; return UNIT; // Kelvin YY_BREAK case 39: YY_RULE_SETUP -#line 85 "" -yylval = Quantity::Foot; return UNIT; // foot +#line 84 "" +yylval = Quantity::Mole; return UNIT; // Mole (internal standard amount of substance) YY_BREAK case 40: YY_RULE_SETUP #line 86 "" -yylval = Quantity::Foot; return UNIT; // foot +yylval = Quantity::Candela; return UNIT; // Candela (internal standard luminous intensity) YY_BREAK case 41: YY_RULE_SETUP -#line 87 "" -yylval = Quantity::Thou; return UNIT; // thou (in/1000) +#line 88 "" +yylval = Quantity::Inch; return UNIT; // inch YY_BREAK case 42: YY_RULE_SETUP -#line 88 "" -yylval = Quantity::Thou; return UNIT; // mil (the thou in US) +#line 89 "" +yylval = Quantity::Inch; return UNIT; // inch YY_BREAK case 43: YY_RULE_SETUP -#line 89 "" -yylval = Quantity::Yard; return UNIT; // yard +#line 90 "" +yylval = Quantity::Foot; return UNIT; // foot YY_BREAK case 44: YY_RULE_SETUP -#line 90 "" -yylval = Quantity::Mile; return UNIT; // mile +#line 91 "" +yylval = Quantity::Foot; return UNIT; // foot YY_BREAK case 45: YY_RULE_SETUP -#line 94 "" -yylval = Quantity::Pound; return UNIT; // pound +#line 92 "" +yylval = Quantity::Thou; return UNIT; // thou (in/1000) YY_BREAK case 46: YY_RULE_SETUP -#line 95 "" -yylval = Quantity::Pound; return UNIT; // pound +#line 93 "" +yylval = Quantity::Thou; return UNIT; // mil (the thou in US) YY_BREAK case 47: YY_RULE_SETUP -#line 96 "" -yylval = Quantity::Ounce; return UNIT; // ounce +#line 94 "" +yylval = Quantity::Yard; return UNIT; // yard YY_BREAK case 48: YY_RULE_SETUP -#line 97 "" -yylval = Quantity::Stone; return UNIT; // Stone +#line 95 "" +yylval = Quantity::Mile; return UNIT; // mile YY_BREAK case 49: YY_RULE_SETUP -#line 98 "" -yylval = Quantity::Hundredweights; return UNIT; // hundredweights +#line 99 "" +yylval = Quantity::Pound; return UNIT; // pound YY_BREAK case 50: YY_RULE_SETUP #line 100 "" -yylval = Quantity::PoundForce; return UNIT; // pound +yylval = Quantity::Pound; return UNIT; // pound YY_BREAK case 51: YY_RULE_SETUP -#line 102 "" -yylval = Quantity::Newton; return UNIT; // Newton (kg*m/s^2) +#line 101 "" +yylval = Quantity::Ounce; return UNIT; // ounce YY_BREAK case 52: YY_RULE_SETUP -#line 103 "" -yylval = Quantity::KiloNewton; return UNIT; // Newton +#line 102 "" +yylval = Quantity::Stone; return UNIT; // Stone YY_BREAK case 53: YY_RULE_SETUP -#line 104 "" -yylval = Quantity::MegaNewton; return UNIT; // Newton +#line 103 "" +yylval = Quantity::Hundredweights; return UNIT; // hundredweights YY_BREAK case 54: YY_RULE_SETUP #line 105 "" -yylval = Quantity::MilliNewton; return UNIT; // Newton +yylval = Quantity::PoundForce; return UNIT; // pound YY_BREAK case 55: YY_RULE_SETUP #line 107 "" -yylval = Quantity::Pascal; return UNIT; // Pascal (kg/m/s^2 or N/m^2) +yylval = Quantity::Newton; return UNIT; // Newton (kg*m/s^2) YY_BREAK case 56: YY_RULE_SETUP #line 108 "" -yylval = Quantity::KiloPascal; return UNIT; // Pascal +yylval = Quantity::KiloNewton; return UNIT; // Newton YY_BREAK case 57: YY_RULE_SETUP #line 109 "" -yylval = Quantity::MegaPascal; return UNIT; // Pascal +yylval = Quantity::MegaNewton; return UNIT; // Newton YY_BREAK case 58: YY_RULE_SETUP #line 110 "" -yylval = Quantity::GigaPascal; return UNIT; // Pascal +yylval = Quantity::MilliNewton; return UNIT; // Newton YY_BREAK case 59: YY_RULE_SETUP #line 112 "" -yylval = Quantity::Torr; return UNIT; // portion of Pascal ( 101325/760 ) +yylval = Quantity::Pascal; return UNIT; // Pascal (kg/m/s^2 or N/m^2) YY_BREAK case 60: YY_RULE_SETUP #line 113 "" -yylval = Quantity::mTorr; return UNIT; // +yylval = Quantity::KiloPascal; return UNIT; // Pascal YY_BREAK case 61: YY_RULE_SETUP #line 114 "" -yylval = Quantity::yTorr; return UNIT; // +yylval = Quantity::MegaPascal; return UNIT; // Pascal YY_BREAK case 62: YY_RULE_SETUP #line 115 "" -yylval = Quantity::yTorr; return UNIT; // +yylval = Quantity::GigaPascal; return UNIT; // Pascal YY_BREAK case 63: YY_RULE_SETUP #line 117 "" -yylval = Quantity::PSI; return UNIT; // pounds/in^2 +yylval = Quantity::Torr; return UNIT; // portion of Pascal ( 101325/760 ) YY_BREAK case 64: YY_RULE_SETUP #line 118 "" -yylval = Quantity::KSI; return UNIT; // 1000 x pounds/in^2 +yylval = Quantity::mTorr; return UNIT; // YY_BREAK case 65: YY_RULE_SETUP -#line 120 "" -yylval = Quantity::Watt; return UNIT; // Watt (kg*m^2/s^3) +#line 119 "" +yylval = Quantity::yTorr; return UNIT; // YY_BREAK case 66: YY_RULE_SETUP -#line 121 "" -yylval = Quantity::VoltAmpere; return UNIT; // VoltAmpere (kg*m^2/s^3) +#line 120 "" +yylval = Quantity::yTorr; return UNIT; // YY_BREAK case 67: YY_RULE_SETUP -#line 123 "" -yylval = Quantity::Volt; return UNIT; // Volt (kg*m^2/A/s^3) +#line 122 "" +yylval = Quantity::PSI; return UNIT; // pounds/in^2 YY_BREAK case 68: YY_RULE_SETUP -#line 125 "" -yylval = Quantity::Joule; return UNIT; // Joule (kg*m^2/s^2) +#line 123 "" +yylval = Quantity::KSI; return UNIT; // 1000 x pounds/in^2 YY_BREAK case 69: YY_RULE_SETUP -#line 126 "" -yylval = Quantity::NewtonMeter; return UNIT; // N*m = Joule +#line 125 "" +yylval = Quantity::Watt; return UNIT; // Watt (kg*m^2/s^3) YY_BREAK case 70: YY_RULE_SETUP -#line 127 "" -yylval = Quantity::VoltAmpereSecond; return UNIT; // V*A*s = Joule +#line 126 "" +yylval = Quantity::VoltAmpere; return UNIT; // VoltAmpere (kg*m^2/s^3) YY_BREAK case 71: YY_RULE_SETUP #line 128 "" -yylval = Quantity::WattSecond; return UNIT; // +yylval = Quantity::Volt; return UNIT; // Volt (kg*m^2/A/s^3) YY_BREAK case 72: YY_RULE_SETUP -#line 129 "" -yylval = Quantity::WattSecond; return UNIT; // W*s = Joule +#line 130 "" +yylval = Quantity::Joule; return UNIT; // Joule (kg*m^2/s^2) YY_BREAK case 73: YY_RULE_SETUP #line 131 "" -yylval = Quantity::Degree; return UNIT; // degree (internal standard angle) +yylval = Quantity::NewtonMeter; return UNIT; // N*m = Joule YY_BREAK case 74: YY_RULE_SETUP #line 132 "" -yylval = Quantity::Degree; return UNIT; // degree (internal standard angle) +yylval = Quantity::VoltAmpereSecond; return UNIT; // V*A*s = Joule YY_BREAK case 75: YY_RULE_SETUP #line 133 "" -yylval = Quantity::Radian; return UNIT; // radian +yylval = Quantity::WattSecond; return UNIT; // YY_BREAK case 76: YY_RULE_SETUP #line 134 "" -yylval = Quantity::Gon; return UNIT; // gon +yylval = Quantity::WattSecond; return UNIT; // W*s = Joule YY_BREAK case 77: YY_RULE_SETUP -#line 135 "" -yylval = Quantity::AngMinute; return UNIT; // minute(Angular) +#line 136 "" +yylval = Quantity::Degree; return UNIT; // degree (internal standard angle) YY_BREAK case 78: YY_RULE_SETUP -#line 136 "" -yylval = Quantity::AngMinute; return UNIT; // minute(Angular) +#line 137 "" +yylval = Quantity::Degree; return UNIT; // degree (internal standard angle) YY_BREAK case 79: YY_RULE_SETUP -#line 137 "" -yylval = Quantity::AngSecond; return UNIT; // second(Angular) +#line 138 "" +yylval = Quantity::Radian; return UNIT; // radian YY_BREAK case 80: YY_RULE_SETUP -#line 138 "" -yylval = Quantity::AngSecond; return UNIT; // second(Angular) +#line 139 "" +yylval = Quantity::Gon; return UNIT; // gon YY_BREAK case 81: YY_RULE_SETUP #line 140 "" -yylval = Quantity(1.0); return ONE; +yylval = Quantity::AngMinute; return UNIT; // minute(Angular) YY_BREAK case 82: YY_RULE_SETUP #line 141 "" -{ yylval = Quantity(num_change(yytext,'.',','));return NUM; } +yylval = Quantity::AngMinute; return UNIT; // minute(Angular) YY_BREAK case 83: YY_RULE_SETUP #line 142 "" -{ yylval = Quantity(num_change(yytext,'.',','));return NUM; } +yylval = Quantity::AngSecond; return UNIT; // second(Angular) YY_BREAK case 84: YY_RULE_SETUP #line 143 "" -{ yylval = Quantity(num_change(yytext,',','.'));return NUM; } +yylval = Quantity::AngSecond; return UNIT; // second(Angular) YY_BREAK case 85: YY_RULE_SETUP -#line 144 "" -{ yylval = Quantity(num_change(yytext,',','.'));return NUM; } +#line 145 "" +yylval = Quantity(1.0); return ONE; YY_BREAK case 86: YY_RULE_SETUP -#line 147 "" -{yylval = Quantity(M_PI) ; return NUM;} // constant pi +#line 146 "" +{ yylval = Quantity(num_change(yytext,'.',','));return NUM; } YY_BREAK case 87: YY_RULE_SETUP -#line 148 "" -{yylval = Quantity(M_E) ; return NUM;} // constant e +#line 147 "" +{ yylval = Quantity(num_change(yytext,'.',','));return NUM; } YY_BREAK case 88: YY_RULE_SETUP -#line 150 "" -return ACOS; +#line 148 "" +{ yylval = Quantity(num_change(yytext,',','.'));return NUM; } YY_BREAK case 89: YY_RULE_SETUP -#line 151 "" -return ASIN; +#line 149 "" +{ yylval = Quantity(num_change(yytext,',','.'));return NUM; } YY_BREAK case 90: YY_RULE_SETUP #line 152 "" -return ATAN; +{yylval = Quantity(M_PI) ; return NUM;} // constant pi YY_BREAK case 91: YY_RULE_SETUP #line 153 "" -return ATAN2; +{yylval = Quantity(M_E) ; return NUM;} // constant e YY_BREAK case 92: YY_RULE_SETUP -#line 154 "" -return COS; +#line 155 "" +return ACOS; YY_BREAK case 93: YY_RULE_SETUP -#line 155 "" -return EXP; +#line 156 "" +return ASIN; YY_BREAK case 94: YY_RULE_SETUP -#line 156 "" -return ABS; +#line 157 "" +return ATAN; YY_BREAK case 95: YY_RULE_SETUP -#line 157 "" -return MOD; +#line 158 "" +return ATAN2; YY_BREAK case 96: YY_RULE_SETUP -#line 158 "" -return LOG; +#line 159 "" +return COS; YY_BREAK case 97: YY_RULE_SETUP -#line 159 "" -return LOG10; +#line 160 "" +return EXP; YY_BREAK case 98: YY_RULE_SETUP -#line 160 "" -return POW; +#line 161 "" +return ABS; YY_BREAK case 99: YY_RULE_SETUP -#line 161 "" -return SIN; +#line 162 "" +return MOD; YY_BREAK case 100: YY_RULE_SETUP -#line 162 "" -return SINH; +#line 163 "" +return LOG; YY_BREAK case 101: YY_RULE_SETUP -#line 163 "" -return TAN; +#line 164 "" +return LOG10; YY_BREAK case 102: YY_RULE_SETUP -#line 164 "" -return TANH; +#line 165 "" +return POW; YY_BREAK case 103: YY_RULE_SETUP -#line 165 "" -return SQRT; +#line 166 "" +return SIN; YY_BREAK case 104: YY_RULE_SETUP #line 167 "" -return *yytext; +return SINH; YY_BREAK case 105: YY_RULE_SETUP #line 168 "" +return TAN; + YY_BREAK +case 106: +YY_RULE_SETUP +#line 169 "" +return TANH; + YY_BREAK +case 107: +YY_RULE_SETUP +#line 170 "" +return SQRT; + YY_BREAK +case 108: +YY_RULE_SETUP +#line 172 "" +return *yytext; + YY_BREAK +case 109: +YY_RULE_SETUP +#line 173 "" ECHO; YY_BREAK -#line 1407 "QuantityLexer.c" +#line 1434 "QuantityLexer.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(C_COMMENT): yyterminate(); @@ -1702,7 +1729,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 >= 194 ) + if ( yy_current_state >= 202 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -1730,11 +1757,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 >= 194 ) + if ( yy_current_state >= 202 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 193); + yy_is_jam = (yy_current_state == 201); return yy_is_jam ? 0 : yy_current_state; } @@ -2373,4 +2400,4 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 168 "" +#line 173 "" diff --git a/src/Base/QuantityParser.l b/src/Base/QuantityParser.l index e16eee1b3c..e43832f8f2 100644 --- a/src/Base/QuantityParser.l +++ b/src/Base/QuantityParser.l @@ -55,6 +55,11 @@ CGRP '\,'[0-9][0-9][0-9] "l" yylval = Quantity::Liter; return UNIT; // Liter dm^3 +"Hz" yylval = Quantity::Hertz; return UNIT; // Hertz +"kHz" yylval = Quantity::KiloHertz; return UNIT; // Kilo Hertz +"MHz" yylval = Quantity::MegaHertz; return UNIT; // Mega Hertz +"GHz" yylval = Quantity::GigaHertz; return UNIT; // Giga Hertz + "ug" yylval = Quantity::MicroGram; return UNIT; // micro gram "\xC2\xB5g" yylval = Quantity::MicroGram; return UNIT; // micro gram "mg" yylval = Quantity::MilliGram; return UNIT; // milli gram diff --git a/src/Base/UnitsSchemaInternal.cpp b/src/Base/UnitsSchemaInternal.cpp index 9e90509afc..ca7c834824 100644 --- a/src/Base/UnitsSchemaInternal.cpp +++ b/src/Base/UnitsSchemaInternal.cpp @@ -179,6 +179,24 @@ QString UnitsSchemaInternal::schemaTranslate(const Quantity &quant, double &fact unitString = QString::fromLatin1("W/m^2"); factor = 1.0; } + else if (unit == Unit::Frequency) { + if (UnitValue < 1000.0) { + unitString = QString::fromLatin1("Hz"); + factor = 1.0; + } + else if (UnitValue < 1000000.0) { + unitString = QString::fromLatin1("kHz"); + factor = 1000.0; + } + else if (UnitValue < 1000000000.0) { + unitString = QString::fromLatin1("MHz"); + factor = 1000000.0; + } + else { + unitString = QString::fromLatin1("GHz"); + factor = 1000000000.0; + } + } else if (unit == Unit::Velocity) { unitString = QString::fromLatin1("mm/s"); factor = 1.0; diff --git a/src/Base/UnitsSchemaMKS.cpp b/src/Base/UnitsSchemaMKS.cpp index 8e13368c9e..23ffcbb40b 100644 --- a/src/Base/UnitsSchemaMKS.cpp +++ b/src/Base/UnitsSchemaMKS.cpp @@ -186,6 +186,24 @@ QString UnitsSchemaMKS::schemaTranslate(const Quantity &quant, double &factor, Q unitString = QString::fromLatin1("W/m^2"); factor = 1.0; } + else if (unit == Unit::Frequency) { + if (UnitValue < 1000.0) { + unitString = QString::fromLatin1("Hz"); + factor = 1.0; + } + else if (UnitValue < 1000000.0) { + unitString = QString::fromLatin1("kHz"); + factor = 1000.0; + } + else if (UnitValue < 1000000000.0) { + unitString = QString::fromLatin1("MHz"); + factor = 1000000.0; + } + else { + unitString = QString::fromLatin1("GHz"); + factor = 1000000000.0; + } + } else if (unit == Unit::Velocity) { unitString = QString::fromLatin1("m/s"); factor = 1000.0;