scratch extesion: string by rssaromeo

none

  1. // ==UserScript==
  2. // @name scratch extesion: string by rssaromeo
  3. // @version 2
  4. // @description none
  5. // @run-at document-start
  6. // @author rssaromeo
  7. // @license GPLv3
  8. // @tag lib
  9. // @match *://*/*
  10. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABABAMAAABYR2ztAAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAC1QTFRFAAAAGO0YDocO/////v/9//7///3/EIcOIYQO/v/////9E4YO/f/////+/f3/6+V7QQAAAA90Uk5TAP//////////////////5Y2epgAAAedJREFUeJy9lTtOAzEQhj0EgbQIWPMQUijSUXOEUNDQwAXQcgUKRAk1TdIiIZE7cADECZJLRKIAvG2QosXPmdmNvUnFSlk59uf/H3vtGRD4QI7NqqRebEnBH7UAsPk1DYiPExEAiVgYUTVAchWPKAbYIXJxhHsDCtRWofAFQaAepZ1tX+AFmquwg8oDZrC+TX7QUBAX8ISyQFTATdc/B0QE7HQHxB2chNJAwiFIQNIBgZSD94C0g5OAtMMKgPaowIYAuRKSnVRh/q3t/pitliaERWB/XupORUBvIukk6+7+WAPnzxawURRD2fliwOOg1DMGNx4QFydD2PtmgPEUynwLB8hsmm1yi6c7ExQD9Jbl/ML138XHpQfMPsLpuA74ZSkEjj5r65TDArqHEwI6O1XJ12ktewww+hw4M9ugBAFGH0YFAm/XMaA7ReD2tczuHziQeFYDksfBHft/AVqixBO1BAge0lykXPcez16uvIPgxx4BOSpCGquaQOfgV9kGB0IQpn99WxBgbxa7vN35rNzaIMBd3vbb7fNDewJZmoLaAMxyUQ/McgkJ5xCAeMUJqdgONk18JsZsH6t6VA4aBUewasAqDteggsNrFhEKRbDq0RcPM+N1sxElB5rEstpNuYSqP9dg6ewPfinyF4eDNn8AAAAASUVORK5CYII=
  11. // @grant none
  12. // @namespace https://greasyfork.org/users/1184528
  13. // ==/UserScript==
  14.  
  15. ;(async () => {
  16. await loadlib("libloader").waitforlib("scratchextesnsionmanager")
  17. const {
  18. newext,
  19. newmenu,
  20. newblock,
  21. bt,
  22. inp,
  23. gettarget,
  24. totype,
  25. scratch_math,
  26. projectid,
  27. canvas,
  28. scratchvar,
  29. scratchlist,
  30. } = loadlib("scratchextesnsionmanager")
  31. var vm
  32. loadlib("libloader")
  33. .waitforlib("scratch")
  34. .then(() => (vm = loadlib("scratch").vm))
  35.  
  36. newext(
  37. "string",
  38. "rssaromeo",
  39. class {
  40. strreplace({ replacethis, replacein, replacewith, count }) {
  41. replacethis = totype(replacethis, "string")
  42. replacein = totype(replacein, "string")
  43. replacewith = totype(replacewith, "string")
  44. count = totype(count, "number")
  45. if (count) {
  46. var i = 0
  47. while (i++ < count) {
  48. replacein = replacein.replace(replacethis, replacewith)
  49. if (!replacein.includes(replacethis)) break
  50. }
  51. return replacein
  52. } else return replacein.replaceAll(replacethis, replacewith)
  53. }
  54. regreplace({ replacethis, flags, replacein, replacewith }) {
  55. flags = totype(flags, "string") ?? ""
  56. replacewith = totype(replacewith, "string")
  57. replacein = totype(replacein, "string")
  58. replacethis = totype(replacethis, "string")
  59. flags = flags.toLowerCase()
  60. if (!count && !flags.includes("g")) flags += "g"
  61. return replacein.replace(
  62. new RegExp(replacethis, flags),
  63. replacewith
  64. )
  65. }
  66. substr({ string, start, end }) {
  67. string = totype(string, "string")
  68. start = totype(start, "number", 1)
  69. end = totype(end, "number", 1)
  70. return string.substring(start - 1, end)
  71. }
  72. indexof({ x, y }) {
  73. return x.indexOf(y) + 1
  74. }
  75. lowercase({ string }) {
  76. string = totype(string, "string")
  77. return string.toLowerCase()
  78. }
  79. uppercase({ string }) {
  80. string = totype(string, "string")
  81. return string.toUpperCase()
  82. }
  83. splittoarr({ string, arr, chars }) {
  84. var [sprite, arrname] = JSON.parse(arr)
  85. scratchlist(arrname, string.split(chars), sprite)
  86. }
  87. joinfromarr({ arr, chars }) {
  88. var [sprite, arrname] = JSON.parse(arr)
  89. return (
  90. scratchlist(arrname, undefined, sprite)?.join?.(chars) ||
  91. false
  92. )
  93. }
  94. string({ string }) {
  95. return totype(string, "string")
  96. }
  97. },
  98. [
  99. newblock(
  100. bt.ret,
  101. "strreplace",
  102. "string replace: in [replacein] replace [replacethis] with [replacewith], count: [count]",
  103. [
  104. [inp.str, "some main text"],
  105. [inp.str, "main"],
  106. [inp.str, "other"],
  107. ]
  108. ),
  109. newblock(
  110. bt.ret,
  111. "regreplace",
  112. "regex replace: in [replacein] replace [replacethis][flags] with [replacewith]",
  113. [
  114. [inp.str, "some main text"],
  115. [inp.str, "..."],
  116. [inp.str, "g"],
  117. [inp.str, "[$&]"],
  118. ]
  119. ),
  120. newblock(bt.ret, "substr", "[string] from [start] to [end]", [
  121. [inp.str, "some main text"],
  122. [inp.num, "3"],
  123. [inp.num, "5"],
  124. ]),
  125. newblock(bt.ret, "indexof", "in [x], index of [y]", [
  126. [inp.str, "some main text"],
  127. [inp.str, "main"],
  128. ]),
  129. newblock(bt.ret, "lowercase", "lowercase [string]", [
  130. [inp.str, "Some main Text"],
  131. ]),
  132. newblock(bt.ret, "uppercase", "uppercase [string]", [
  133. [inp.text, "Some main Text"],
  134. ]),
  135. newblock(
  136. bt.cmd,
  137. "splittoarr",
  138. "split [string] into [arr] by [chars]",
  139. [inp.str, newmenu("listnames", { defaultValue: "" }), inp.str]
  140. ),
  141. newblock(bt.ret, "joinfromarr", "join [arr] by [chars]", [
  142. newmenu("listnames", { defaultValue: "" }),
  143. inp.str,
  144. ]),
  145. newblock(bt.ret, "string", "[string]"),
  146. ],
  147. "12B312",
  148. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABABAMAAABYR2ztAAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAC1QTFRFAAAAGO0YDocO/////v/9//7///3/EIcOIYQO/v/////9E4YO/f/////+/f3/6+V7QQAAAA90Uk5TAP//////////////////5Y2epgAAAedJREFUeJy9lTtOAzEQhj0EgbQIWPMQUijSUXOEUNDQwAXQcgUKRAk1TdIiIZE7cADECZJLRKIAvG2QosXPmdmNvUnFSlk59uf/H3vtGRD4QI7NqqRebEnBH7UAsPk1DYiPExEAiVgYUTVAchWPKAbYIXJxhHsDCtRWofAFQaAepZ1tX+AFmquwg8oDZrC+TX7QUBAX8ISyQFTATdc/B0QE7HQHxB2chNJAwiFIQNIBgZSD94C0g5OAtMMKgPaowIYAuRKSnVRh/q3t/pitliaERWB/XupORUBvIukk6+7+WAPnzxawURRD2fliwOOg1DMGNx4QFydD2PtmgPEUynwLB8hsmm1yi6c7ExQD9Jbl/ML138XHpQfMPsLpuA74ZSkEjj5r65TDArqHEwI6O1XJ12ktewww+hw4M9ugBAFGH0YFAm/XMaA7ReD2tczuHziQeFYDksfBHft/AVqixBO1BAge0lykXPcez16uvIPgxx4BOSpCGquaQOfgV9kGB0IQpn99WxBgbxa7vN35rNzaIMBd3vbb7fNDewJZmoLaAMxyUQ/McgkJ5xCAeMUJqdgONk18JsZsH6t6VA4aBUewasAqDteggsNrFhEKRbDq0RcPM+N1sxElB5rEstpNuYSqP9dg6ewPfinyF4eDNn8AAAAASUVORK5CYII="
  149. )
  150. })()