@@ -329,7 +329,7 @@ JsVar *jswrap_string_replace(JsVar *parent, JsVar *subStr, JsVar *newSubStr) {
329
329
JsVarInt idx = jsvGetIntegerAndUnLock (jsvObjectGetChild (match ,"index" ,0 ));
330
330
JsVarInt len = (JsVarInt )jsvGetStringLength (matchStr );
331
331
// do the replacement
332
- jsvStringIteratorAppendString (& dst , str , lastIndex , (idx - lastIndex )); // the string before the match
332
+ jsvStringIteratorAppendString (& dst , str , ( size_t ) lastIndex , (idx - lastIndex )); // the string before the match
333
333
if (jsvIsFunction (replace )) {
334
334
unsigned int argCount = 0 ;
335
335
JsVar * args [13 ];
@@ -376,7 +376,7 @@ JsVar *jswrap_string_replace(JsVar *parent, JsVar *subStr, JsVar *newSubStr) {
376
376
match = jswrap_regexp_exec (subStr , str );
377
377
}
378
378
}
379
- jsvStringIteratorAppendString (& dst , str , lastIndex , JSVAPPENDSTRINGVAR_MAXLENGTH ); // append the rest of the string
379
+ jsvStringIteratorAppendString (& dst , str , ( size_t ) lastIndex , JSVAPPENDSTRINGVAR_MAXLENGTH ); // append the rest of the string
380
380
jsvStringIteratorFree (& dst );
381
381
jsvUnLock3 (match ,replace ,str );
382
382
// reset lastIndex if global
@@ -508,15 +508,15 @@ JsVar *jswrap_string_split(JsVar *parent, JsVar *split) {
508
508
#ifndef SAVE_ON_FLASH
509
509
// Use RegExp if one is passed in
510
510
if (jsvIsInstanceOf (split , "RegExp" )) {
511
- unsigned int last = 0 ;
511
+ int last = 0 ;
512
512
JsVar * match ;
513
513
jsvObjectSetChildAndUnLock (split , "lastIndex" , jsvNewFromInteger (0 ));
514
514
match = jswrap_regexp_exec (split , parent );
515
515
while (match && !jsvIsNull (match )) {
516
516
// get info about match
517
517
JsVar * matchStr = jsvGetArrayItem (match ,0 );
518
518
JsVarInt idx = jsvGetIntegerAndUnLock (jsvObjectGetChild (match ,"index" ,0 ));
519
- JsVarInt len = (JsVarInt )jsvGetStringLength (matchStr );
519
+ int len = (int )jsvGetStringLength (matchStr );
520
520
jsvUnLock (matchStr );
521
521
// do the replacement
522
522
jsvArrayPushAndUnLock (array , jsvNewFromStringVar (parent , (size_t )last , (size_t )(idx - last )));
@@ -529,7 +529,7 @@ JsVar *jswrap_string_split(JsVar *parent, JsVar *split) {
529
529
jsvUnLock (match );
530
530
jsvObjectSetChildAndUnLock (split , "lastIndex" , jsvNewFromInteger (0 ));
531
531
// add remaining string after last match
532
- if (last <= jsvGetStringLength (parent ))
532
+ if (last <= ( int ) jsvGetStringLength (parent ))
533
533
jsvArrayPushAndUnLock (array , jsvNewFromStringVar (parent , (size_t )last , JSVAPPENDSTRINGVAR_MAXLENGTH ));
534
534
return array ;
535
535
}
@@ -657,8 +657,8 @@ bool jswrap_string_startsWith(JsVar *parent, JsVar *search, int position) {
657
657
JsVar * searchStr = jsvAsString (search );
658
658
bool match = false;
659
659
if (position >= 0 &&
660
- jsvGetStringLength (searchStr )+ position <= jsvGetStringLength (parent ))
661
- match = jsvCompareString (parent , searchStr , position ,0 ,true)== 0 ;
660
+ ( int ) jsvGetStringLength (searchStr )+ position <= ( int ) jsvGetStringLength (parent ))
661
+ match = jsvCompareString (parent , searchStr , ( size_t ) position ,0 ,true)== 0 ;
662
662
jsvUnLock (searchStr );
663
663
return match ;
664
664
}
@@ -680,11 +680,11 @@ bool jswrap_string_endsWith(JsVar *parent, JsVar *search, JsVar *length) {
680
680
if (!jsvIsString (parent )) return false;
681
681
int position = jsvIsNumeric (length ) ? jsvGetInteger (length ) : (int )jsvGetStringLength (parent );
682
682
JsVar * searchStr = jsvAsString (search );
683
- position -= jsvGetStringLength (searchStr );
683
+ position -= ( int ) jsvGetStringLength (searchStr );
684
684
bool match = false;
685
685
if (position >= 0 &&
686
- jsvGetStringLength (searchStr )+ position <= jsvGetStringLength (parent ))
687
- match = jsvCompareString (parent , searchStr , position ,0 ,true)== 0 ;
686
+ ( int ) jsvGetStringLength (searchStr )+ position <= ( int ) jsvGetStringLength (parent ))
687
+ match = jsvCompareString (parent , searchStr , ( size_t ) position ,0 ,true)== 0 ;
688
688
jsvUnLock (searchStr );
689
689
return match ;
690
690
}
@@ -728,3 +728,63 @@ JsVar *jswrap_string_repeat(JsVar *parent, int count) {
728
728
jsvAppendStringVarComplete (result , parent );
729
729
return result ;
730
730
}
731
+
732
+ /*JSON{
733
+ "type" : "method",
734
+ "class" : "String",
735
+ "name" : "padStart",
736
+ "ifndef" : "SAVE_ON_FLASH",
737
+ "generate_full" : "jswrap_string_padX(parent, targetLength, padString, true)",
738
+ "params" : [
739
+ ["targetLength","int","The length to pad this string to"],
740
+ ["padString","JsVar","[optional] The string to pad with, default is `' '`"]
741
+ ],
742
+ "return" : ["JsVar","A string containing this string padded to the correct length"],
743
+ "return_object" : "String"
744
+ }
745
+ Pad this string at the beginnind to the required number of characters
746
+
747
+ ```
748
+ "Hello".padStart(10) == " Hello"
749
+ "123".padStart(10,".-") == ".-.-.-.123"
750
+ ```
751
+ */
752
+ /*JSON{
753
+ "type" : "method",
754
+ "class" : "String",
755
+ "name" : "padEnd",
756
+ "ifndef" : "SAVE_ON_FLASH",
757
+ "generate_full" : "jswrap_string_padX(parent, targetLength, padString, false)",
758
+ "params" : [
759
+ ["targetLength","int","The length to pad this string to"],
760
+ ["padString","JsVar","[optional] The string to pad with, default is `' '`"]
761
+ ],
762
+ "return" : ["JsVar","A string containing this string padded to the correct length"],
763
+ "return_object" : "String"
764
+ }
765
+ Pad this string at the end to the required number of characters
766
+
767
+ ```
768
+ "Hello".padEnd(10) == "Hello "
769
+ "123".padEnd(10,".-") == "123.-.-.-."
770
+ ```
771
+ */
772
+ JsVar * jswrap_string_padX (JsVar * str , int targetLength , JsVar * padString , bool padStart ) {
773
+ if (!jsvIsString (str ) || (int )jsvGetStringLength (str )>=targetLength )
774
+ return jsvLockAgain (str );
775
+
776
+ int padChars = targetLength - (int )jsvGetStringLength (str );
777
+
778
+ JsVar * result = padStart ? jsvNewFromEmptyString () : jsvNewFromStringVar (str ,0 ,JSVAPPENDSTRINGVAR_MAXLENGTH );
779
+ if (!result ) return 0 ;
780
+
781
+ padString = padString ? jsvAsString (padString ) : jsvNewFromString (" " );
782
+ int padLength = (int )jsvGetStringLength (padString );
783
+ while (padChars > 0 ) {
784
+ jsvAppendStringVar (result , padString , 0 , (size_t )((padLength > padChars ) ? padChars : padLength ));
785
+ padChars -= padLength ;
786
+ }
787
+ if (padStart ) jsvAppendStringVarComplete (result , str );
788
+ jsvUnLock (padString );
789
+ return result ;
790
+ }
0 commit comments