X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.runtime%2Fscl%2FString.scl;fp=bundles%2Forg.simantics.scl.runtime%2Fscl%2FString.scl;h=11116c5a01254a4c72f70c75b48b4113aa307413;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.runtime/scl/String.scl b/bundles/org.simantics.scl.runtime/scl/String.scl new file mode 100644 index 000000000..11116c5a0 --- /dev/null +++ b/bundles/org.simantics.scl.runtime/scl/String.scl @@ -0,0 +1,82 @@ +import "Prelude" hiding (group) + +importJava "java.util.regex.Pattern" where + data Pattern + + compile :: String -> Pattern + matcher :: Pattern -> String -> Matcher + +importJava "java.util.regex.Matcher" where + data Matcher + + matches :: Matcher -> Boolean + + group :: Matcher -> String + + @JavaName find + matcherFind :: Matcher -> Boolean + + appendReplacement :: Matcher -> StringBuffer -> String -> Matcher + appendTail :: Matcher -> StringBuffer -> StringBuffer + + @JavaName replaceAll + replaceAll_ :: Matcher -> String -> String + + @JavaName replaceFirst + replaceFirst_ :: Matcher -> String -> String + + quoteReplacement :: String -> String + +importJava "java.lang.StringBuffer" where + data StringBuffer + + @JavaName "" + newStringBuffer :: () -> StringBuffer + + @JavaName toString + freezeStringBuffer :: StringBuffer -> String + +""" +@replaceAll pattern replacement text@ replaces all matches of @pattern@ in the @text@ +by @replacement@. +""" +replaceAll :: String -> String -> String -> String +replaceAll pattern replacement text = + replaceAll_ (matcher (compile pattern) text) replacement + +""" +@replaceFirst pattern replacement text@ replaces the first match of @pattern@ in the @text@ +by @replacement@. +""" +replaceFirst :: String -> String -> String -> String +replaceFirst pattern replacement text = + replaceFirst_ (matcher (compile pattern) text) replacement + +""" +@substituteAll pattern f text@ replaces all matches of @pattern@ in the @text@ +by the string returned by @f@ given the matched region of the string as a parameter. +""" +substituteAll :: String -> (String -> String) -> String -> String +substituteAll pattern f text = runProc do + m = matcher (compile pattern) text + buf = newStringBuffer () + while (matcherFind m) do + appendReplacement m buf $ f $ group m + appendTail m buf + freezeStringBuffer buf + + +""" +@substituteFirst pattern f text@ replaces the first match of @pattern@ in the @text@ +by the string returned by @f@ given the matched region of the string as a parameter. +""" +substituteFirst :: String -> (String -> String) -> String -> String +substituteFirst pattern f text = runProc do + m = matcher (compile pattern) text + if (matcherFind m) then do + buf = newStringBuffer () + appendReplacement m buf $ f $ group m + appendTail m buf + freezeStringBuffer buf + else text + \ No newline at end of file