scratch extesion: string by rssaromeo

none

目前為 2025-01-26 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name scratch extesion: string by rssaromeo
  3. // @version 1
  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 a = loadlib("allfuncs")
  32. var vm
  33. loadlib("libloader")
  34. .waitforlib("scratch")
  35. .then(() => (vm = loadlib("scratch").vm))
  36.  
  37. newext(
  38. "string",
  39. "rssaromeo",
  40. class {
  41. strreplace({ replacethis, replacein, replacewith, count }) {
  42. replacethis = totype(replacethis, "string")
  43. replacein = totype(replacein, "string")
  44. replacewith = totype(replacewith, "string")
  45. count = totype(count, "number")
  46. if (count) {
  47. var i = 0
  48. while (i++ < count) {
  49. replacein = replacein.replace(replacethis, replacewith)
  50. if (!replacein.includes(replacethis)) break
  51. }
  52. return replacein
  53. } else return replacein.replaceAll(replacethis, replacewith)
  54. }
  55. regreplace({ replacethis, flags, replacein, replacewith }) {
  56. flags = totype(flags, "string") ?? ""
  57. replacewith = totype(replacewith, "string")
  58. replacein = totype(replacein, "string")
  59. replacethis = totype(replacethis, "string")
  60. flags = flags.toLowerCase()
  61. if (!count && !flags.includes("g")) flags += "g"
  62. return replacein.replace(
  63. new RegExp(replacethis, flags),
  64. replacewith
  65. )
  66. }
  67. substr({ string, start, end }) {
  68. string = totype(string, "string")
  69. start = totype(start, "number", 1)
  70. end = totype(end, "number", 1)
  71. return string.substring(start - 1, end)
  72. }
  73. indexof({ x, y }) {
  74. return x.indexOf(y) + 1
  75. }
  76. lowercase({ string }) {
  77. string = totype(string, "string")
  78. return string.toLowerCase()
  79. }
  80. uppercase({ string }) {
  81. string = totype(string, "string")
  82. return string.toUpperCase()
  83. }
  84. splittoarr({ string, arr, chars }) {
  85. var [sprite, arrname] = JSON.parse(arr)
  86. scratchlist(arrname, string.split(chars), sprite)
  87. }
  88. joinfromarr({ arr, chars }) {
  89. var [sprite, arrname] = JSON.parse(arr)
  90. return (
  91. scratchlist(arrname, undefined, sprite)?.join?.(chars) ||
  92. false
  93. )
  94. }
  95. string({ string }) {
  96. return totype(string, "string")
  97. }
  98. },
  99. [
  100. newblock(
  101. bt.ret,
  102. "strreplace",
  103. "string replace: in [replacein] replace [replacethis] with [replacewith], count: [count]",
  104. [
  105. [inp.str, "some main text"],
  106. [inp.str, "main"],
  107. [inp.str, "other"],
  108. ]
  109. ),
  110. newblock(
  111. bt.ret,
  112. "regreplace",
  113. "regex replace: in [replacein] replace [replacethis][flags] with [replacewith]",
  114. [
  115. [inp.str, "some main text"],
  116. [inp.str, "..."],
  117. [inp.str, "g"],
  118. [inp.str, "[$&]"],
  119. ]
  120. ),
  121. newblock(bt.ret, "substr", "[string] from [start] to [end]", [
  122. [inp.str, "some main text"],
  123. [inp.num, "3"],
  124. [inp.num, "5"],
  125. ]),
  126. newblock(bt.ret, "indexof", "in [x], index of [y]", [
  127. [inp.str, "some main text"],
  128. [inp.str, "main"],
  129. ]),
  130. newblock(bt.ret, "lowercase", "lowercase [string]", [
  131. [inp.str, "Some main Text"],
  132. ]),
  133. newblock(bt.ret, "uppercase", "uppercase [string]", [
  134. [inp.text, "Some main Text"],
  135. ]),
  136. newblock(
  137. bt.cmd,
  138. "splittoarr",
  139. "split [string] into [arr] by [chars]",
  140. [inp.str, newmenu("listnames", { defaultValue: "" }), inp.str]
  141. ),
  142. newblock(bt.ret, "joinfromarr", "join [arr] by [chars]", [
  143. newmenu("listnames", { defaultValue: "" }),
  144. inp.str,
  145. ]),
  146. newblock(bt.ret, "string", "[string]"),
  147. ],
  148. "12B312",
  149. "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="
  150. )
  151. })()