@@ -593,6 +593,33 @@ void parseEventVariables(String& s, struct EventStruct *event, boolean useURLenc
593
593
#undef SMART_REPL
594
594
595
595
bool getConvertArgument (const String& marker, const String& s, float & argument, int & startIndex, int & endIndex) {
596
+ String argumentString;
597
+ if (getConvertArgumentString (marker, s, argumentString, startIndex, endIndex)) {
598
+ if (!isFloat (argumentString)) return false ;
599
+ argument = argumentString.toFloat ();
600
+ return true ;
601
+ }
602
+ return false ;
603
+ }
604
+
605
+ bool getConvertArgument2 (const String& marker, const String& s, float & arg1, float & arg2, int & startIndex, int & endIndex) {
606
+ String argumentString;
607
+ if (getConvertArgumentString (marker, s, argumentString, startIndex, endIndex)) {
608
+ int pos_comma = argumentString.indexOf (' ,' );
609
+ if (pos_comma == -1 ) return false ;
610
+ String arg1_s = argumentString.substring (0 , pos_comma);
611
+ if (!isFloat (arg1_s)) return false ;
612
+ String arg2_s = argumentString.substring (pos_comma+1 );
613
+ if (!isFloat (arg2_s)) return false ;
614
+ arg1 = arg1_s.toFloat ();
615
+ arg2 = arg2_s.toFloat ();
616
+ return true ;
617
+ }
618
+ return false ;
619
+ }
620
+
621
+
622
+ bool getConvertArgumentString (const String& marker, const String& s, String& argumentString, int & startIndex, int & endIndex) {
596
623
startIndex = s.indexOf (marker);
597
624
if (startIndex == -1 ) return false ;
598
625
@@ -604,10 +631,8 @@ bool getConvertArgument(const String& marker, const String& s, float& argument,
604
631
endIndex = s.indexOf (' )' , startIndexArgument);
605
632
if (endIndex == -1 ) return false ;
606
633
607
- String argumentString = s.substring (startIndexArgument, endIndex);
608
- if (argumentString.length () == 0 || !isFloat (argumentString)) return false ;
609
-
610
- argument = argumentString.toFloat ();
634
+ argumentString = s.substring (startIndexArgument, endIndex);
635
+ if (argumentString.length () == 0 ) return false ;
611
636
++endIndex; // Must also strip ')' from the original string.
612
637
return true ;
613
638
}
@@ -618,21 +643,26 @@ void parseStandardConversions(String& s, boolean useURLencode) {
618
643
if (s.indexOf (F (" %c_" )) == -1 )
619
644
return ; // Nothing to replace
620
645
621
- float arg = 0.0 ;
646
+ float arg1 = 0.0 ;
622
647
int startIndex = 0 ;
623
648
int endIndex = 0 ;
624
649
// These replacements should be done in a while loop per marker,
625
650
// since they also replace the numerical parameter.
626
651
// The marker may occur more than once per string, but with different parameters.
627
- #define SMART_CONV (T,FUN ) while (getConvertArgument((T), s, arg, startIndex, endIndex)) { repl (s.substring (startIndex, endIndex), (FUN), s, useURLencode); }
628
- SMART_CONV (F (" %c_w_dir%" ), getBearing (arg))
629
- SMART_CONV (F (" %c_c2f%" ), toString (CelsiusToFahrenheit (arg), 1 ))
630
- SMART_CONV (F (" %c_ms2Bft%" ), String (m_secToBeaufort (arg)))
631
- SMART_CONV (F (" %c_cm2imp%" ), centimeterToImperialLength (arg))
632
- SMART_CONV (F (" %c_mm2imp%" ), millimeterToImperialLength (arg))
633
- SMART_CONV (F (" %c_m2day%" ), toString (minutesToDay (arg), 2 ))
634
- SMART_CONV (F (" %c_m2dh%" ), minutesToDayHour (arg))
635
- SMART_CONV (F (" %c_m2dhm%" ), minutesToDayHourMinute (arg))
636
- SMART_CONV (F (" %c_s2dhms%" ), secondsToDayHourMinuteSecond (arg))
652
+ #define SMART_CONV (T,FUN ) while (getConvertArgument((T), s, arg1, startIndex, endIndex)) { repl (s.substring (startIndex, endIndex), (FUN), s, useURLencode); }
653
+ SMART_CONV (F (" %c_w_dir%" ), getBearing (arg1))
654
+ SMART_CONV (F (" %c_c2f%" ), toString (CelsiusToFahrenheit (arg1), 2 ))
655
+ SMART_CONV (F (" %c_ms2Bft%" ), String (m_secToBeaufort (arg1)))
656
+ SMART_CONV (F (" %c_cm2imp%" ), centimeterToImperialLength (arg1))
657
+ SMART_CONV (F (" %c_mm2imp%" ), millimeterToImperialLength (arg1))
658
+ SMART_CONV (F (" %c_m2day%" ), toString (minutesToDay (arg1), 2 ))
659
+ SMART_CONV (F (" %c_m2dh%" ), minutesToDayHour (arg1))
660
+ SMART_CONV (F (" %c_m2dhm%" ), minutesToDayHourMinute (arg1))
661
+ SMART_CONV (F (" %c_s2dhms%" ), secondsToDayHourMinuteSecond (arg1))
662
+ #undef SMART_CONV
663
+ // Conversions with 2 parameters
664
+ #define SMART_CONV (T,FUN ) while (getConvertArgument2((T), s, arg1, arg2, startIndex, endIndex)) { repl (s.substring (startIndex, endIndex), (FUN), s, useURLencode); }
665
+ float arg2 = 0.0 ;
666
+ SMART_CONV (F (" %c_dew_th%" ), toString (compute_dew_point_temp (arg1, arg2), 2 ))
637
667
#undef SMART_CONV
638
668
}
0 commit comments