diff options
| author | Li Jin <dragon-fly@qq.com> | 2023-08-17 10:36:15 +0800 |
|---|---|---|
| committer | Li Jin <dragon-fly@qq.com> | 2023-08-17 10:36:15 +0800 |
| commit | e61cce21ef7def2c2e52dd6cb6a5b540ebcac29d (patch) | |
| tree | 6e7c5e7e6f13157e9f8db26c38f6d8cba75683e5 /spec/inputs/unicode/macro.yue | |
| parent | 289faf45ac26f7e0ac1a1e4305e5c42fc1e5b866 (diff) | |
| download | yuescript-e61cce21ef7def2c2e52dd6cb6a5b540ebcac29d.tar.gz yuescript-e61cce21ef7def2c2e52dd6cb6a5b540ebcac29d.tar.bz2 yuescript-e61cce21ef7def2c2e52dd6cb6a5b540ebcac29d.zip | |
add unicode identifier support, fix more issue from #144
Diffstat (limited to 'spec/inputs/unicode/macro.yue')
| -rw-r--r-- | spec/inputs/unicode/macro.yue | 291 |
1 files changed, 291 insertions, 0 deletions
diff --git a/spec/inputs/unicode/macro.yue b/spec/inputs/unicode/macro.yue new file mode 100644 index 0000000..79d3c07 --- /dev/null +++ b/spec/inputs/unicode/macro.yue | |||
| @@ -0,0 +1,291 @@ | |||
| 1 | import "unicode.macro_export" as { | ||
| 2 | $, -- import all macros | ||
| 3 | $配置: $我的配置, -- rename macro $config to $myconfig | ||
| 4 | } | ||
| 5 | |||
| 6 | import "unicode.macro_todo" as $ | ||
| 7 | |||
| 8 | $断言集 对象 == nil | ||
| 9 | |||
| 10 | $我的配置 false | ||
| 11 | |||
| 12 | 结果 = $断言 对象 == nil | ||
| 13 | |||
| 14 | macro 和 = (...)-> | ||
| 15 | 值们 = [元素 for 元素 in *{...}] | ||
| 16 | $显示宏 "和", "#{ table.concat 值们, " and " }" | ||
| 17 | |||
| 18 | if $和 函数1! | ||
| 19 | 打印 "没问题" | ||
| 20 | |||
| 21 | if $和 函数1!, 函数2!, 函数3! | ||
| 22 | 打印 "没问题" | ||
| 23 | |||
| 24 | 对象 = $复制( | ||
| 25 | @ | ||
| 26 | {位置: {}, 标签: 标签::转数字!} | ||
| 27 | 标识 | ||
| 28 | 连接们 | ||
| 29 | 位置.x坐标 | ||
| 30 | 位置.y坐标 | ||
| 31 | 位置.z坐标 | ||
| 32 | ) | ||
| 33 | |||
| 34 | macro 在 = (目标, ...)-> | ||
| 35 | 值们 = [元素 for 元素 in *{...}] | ||
| 36 | $显示宏 "在", table.concat ["#{目标} == #{值}" for 值 in *值们], " or " | ||
| 37 | |||
| 38 | if 变量x |> $在 "🍎", "🐷", "🐶" | ||
| 39 | 打印 "存在" | ||
| 40 | |||
| 41 | macro 映射 = (数组, 动作)-> | ||
| 42 | $显示宏 "映射", "[#{动作} for _ in *#{数组}]" | ||
| 43 | |||
| 44 | macro 过滤 = (数组, 动作)-> | ||
| 45 | $显示宏 "过滤", "[_ for _ in *#{数组} when #{动作}]" | ||
| 46 | |||
| 47 | macro 合并 = (数组, 默认值, 动作)-> | ||
| 48 | $显示宏 "合并", "if ##{数组} == 0 | ||
| 49 | #{默认值} | ||
| 50 | else | ||
| 51 | _1 = #{默认值} | ||
| 52 | for _2 in *#{数组} | ||
| 53 | _1 = #{动作} | ||
| 54 | _1" | ||
| 55 | |||
| 56 | macro 每一个 = (数组, 动作)-> | ||
| 57 | $显示宏 "每一个", "for _ in *#{数组} | ||
| 58 | #{动作}" | ||
| 59 | |||
| 60 | macro 管道 = (...)-> | ||
| 61 | switch select "#", ... | ||
| 62 | when 0 then return "" | ||
| 63 | when 1 then return ... | ||
| 64 | 操作数组 = {...} | ||
| 65 | 最后一个 = 操作数组[1] | ||
| 66 | 声明数组 = for 计数 = 2, #操作数组 | ||
| 67 | 声明 = "\tlocal _#{计数} = #{最后一个} |> #{操作数组[计数]}" | ||
| 68 | 最后一个 = "_#{计数}" | ||
| 69 | 声明 | ||
| 70 | 结果 = "do | ||
| 71 | #{table.concat 声明数组, "\n"} | ||
| 72 | #{最后一个}" | ||
| 73 | $显示宏 "管道", 结果 | ||
| 74 | |||
| 75 | {1,2,3} |> $映射(_ * 2) |> $过滤(_ > 4) |> $每一个 打印 _ | ||
| 76 | |||
| 77 | $每一个 $过滤($映射({1,2,3}, _ * 2), _ > 4), 打印 _ | ||
| 78 | |||
| 79 | 值 = $管道( | ||
| 80 | {1, 2, 3} | ||
| 81 | [[$映射(_ * 2)]] | ||
| 82 | [[$过滤(_ > 4)]] | ||
| 83 | [[$合并(0, _1 + _2)]] | ||
| 84 | ) | ||
| 85 | |||
| 86 | macro 加 = (参数a, 参数b)-> "#{参数a} + #{参数b}" | ||
| 87 | |||
| 88 | $加(1,2)\调用 123 | ||
| 89 | |||
| 90 | 结果 = 1 |> $加 2 | ||
| 91 | |||
| 92 | macro 柯里化 = (...)-> | ||
| 93 | 参数数组 = {...} | ||
| 94 | 长度 = #参数数组 | ||
| 95 | 主体 = 参数数组[长度] | ||
| 96 | 定义 = table.concat ["(#{参数数组[计数]})->" for 计数 = 1, 长度 - 1] | ||
| 97 | "#{定义}\n#{主体\gsub "^do%s*\n",""}" | ||
| 98 | |||
| 99 | f = $柯里化 参数x,参数y,参数z,do | ||
| 100 | 打印 参数x,参数y,参数z | ||
| 101 | |||
| 102 | macro 获取里值 = (值)-> "do | ||
| 103 | 变量a = 1 | ||
| 104 | 变量a + 1" | ||
| 105 | |||
| 106 | macro 获取里值_保持卫生 = (值)-> "(-> | ||
| 107 | local 变量a = 1 | ||
| 108 | 变量a + 1)!" | ||
| 109 | |||
| 110 | do | ||
| 111 | 变量a = 8 | ||
| 112 | 变量a = $获取里值! | ||
| 113 | 变量a += $获取里值! | ||
| 114 | 打印 变量a | ||
| 115 | |||
| 116 | do | ||
| 117 | 变量a = 8 | ||
| 118 | 变量a = $获取里值_保持卫生! | ||
| 119 | 变量a += $获取里值_保持卫生! | ||
| 120 | 打印 变量a | ||
| 121 | |||
| 122 | macro Lua代码 = (代码)-> { | ||
| 123 | code: 代码 | ||
| 124 | type: "lua" | ||
| 125 | } | ||
| 126 | |||
| 127 | 变量x = 0 | ||
| 128 | |||
| 129 | $Lua代码 [[ | ||
| 130 | local function f(a) | ||
| 131 | return a + 1 | ||
| 132 | end | ||
| 133 | x = x + f(3) | ||
| 134 | ]] | ||
| 135 | |||
| 136 | $Lua代码[[ | ||
| 137 | function tb:func() | ||
| 138 | print(123) | ||
| 139 | end | ||
| 140 | ]] | ||
| 141 | |||
| 142 | 打印 变量x | ||
| 143 | |||
| 144 | macro 定义函数 = (函数名, ...)-> | ||
| 145 | 参数数组 = {...} | ||
| 146 | 最后一个 = table.remove 参数数组 | ||
| 147 | { | ||
| 148 | code: $显示宏 "定义函数", "local function #{函数名}(#{table.concat 参数数组, ', '}) | ||
| 149 | #{最后一个} | ||
| 150 | end" | ||
| 151 | type: "lua" | ||
| 152 | } | ||
| 153 | |||
| 154 | sel = (参数a, 参数b, 参数c)-> if 参数a then 参数b else 参数c | ||
| 155 | |||
| 156 | $定义函数 sel, a, b, c, [[ | ||
| 157 | if a then | ||
| 158 | return b | ||
| 159 | else | ||
| 160 | return c | ||
| 161 | end | ||
| 162 | ]] | ||
| 163 | |||
| 164 | $定义函数 dummy,[[]] | ||
| 165 | |||
| 166 | macro 插入注释 = (文本)-> { | ||
| 167 | code: "-- #{文本\match '[\'"](.*)[\'"]'}" | ||
| 168 | type: "lua" | ||
| 169 | } | ||
| 170 | |||
| 171 | $插入注释 "这有个注释" | ||
| 172 | |||
| 173 | import '下划线' as _ | ||
| 174 | |||
| 175 | macro 链式调用 = (...)-> | ||
| 176 | 主调用 = nil | ||
| 177 | for 元素 in *{...} | ||
| 178 | 主调用 = 主调用? and "(#{主调用})\\#{元素}" or 元素 | ||
| 179 | $显示宏 "链式调用", 主调用 | ||
| 180 | |||
| 181 | 结果a = $链式调用( | ||
| 182 | _{1, 2, 3, 4, -2, 3} | ||
| 183 | 链! | ||
| 184 | 映射 => @ * 2 | ||
| 185 | 过滤 => @ > 3 | ||
| 186 | 取值! | ||
| 187 | ) | ||
| 188 | |||
| 189 | $链式调用( | ||
| 190 | _{1, 2, 3, 4, -2, 3} | ||
| 191 | 链! | ||
| 192 | 映射 => @ * 2 | ||
| 193 | 过滤 => @ > 3 | ||
| 194 | 每一个 => 打印 @ | ||
| 195 | ) | ||
| 196 | |||
| 197 | 结果 = $链式调用( | ||
| 198 | 原点.变换.根节点.游戏对象\父节点! | ||
| 199 | 后代! | ||
| 200 | 选择启用! | ||
| 201 | 选择可见! | ||
| 202 | 标签等于 "fx" | ||
| 203 | 其中 (x)-> x.名称\结尾为 "(克隆)" | ||
| 204 | 摧毁! | ||
| 205 | ) | ||
| 206 | |||
| 207 | macro 链式调用B = (...)-> | ||
| 208 | switch select "#", ... | ||
| 209 | when 0 then return "" | ||
| 210 | when 1 then return ... | ||
| 211 | 参数数组 = {...} | ||
| 212 | 最后一个 = nil | ||
| 213 | 声明数组 = for 计数 = 1,#参数数组 | ||
| 214 | 声明 = if 计数 == #参数数组 | ||
| 215 | 最后的字符串 = 最后一个 and "#{最后一个}\\" or "" | ||
| 216 | "\t#{最后的字符串}#{参数数组[计数]}" | ||
| 217 | else | ||
| 218 | 最后的字符串 = 最后一个 and "#{最后一个}\\" or "" | ||
| 219 | "\tlocal _#{计数} = #{最后的字符串}#{参数数组[计数]}" | ||
| 220 | 最后一个 = "_#{计数}" | ||
| 221 | 声明 | ||
| 222 | 结果 = "do | ||
| 223 | #{table.concat 声明数组, '\n'} | ||
| 224 | " | ||
| 225 | $显示宏 "链式调用B", 结果 | ||
| 226 | |||
| 227 | $链式调用B( | ||
| 228 | 原点.变换.根节点.游戏对象\父节点! | ||
| 229 | 后代! | ||
| 230 | 选择启用! | ||
| 231 | 选择可见! | ||
| 232 | 标签等于 "fx" | ||
| 233 | 其中 (x)-> x.名称\结尾为 "(克隆)" | ||
| 234 | 摧毁! | ||
| 235 | ) | ||
| 236 | |||
| 237 | macro 链式调用C = (...)-> | ||
| 238 | import "yue" as {:to_lua} | ||
| 239 | 主调用 = nil | ||
| 240 | 编译配置 = { | ||
| 241 | implicit_return_root: false | ||
| 242 | reserve_line_number: false | ||
| 243 | } | ||
| 244 | for 参数 in *{...} | ||
| 245 | 参数转代码 = to_lua(参数,编译配置)\gsub '%s*$','' | ||
| 246 | if 主调用? | ||
| 247 | 主调用 = "#{主调用}:#{参数转代码}" | ||
| 248 | else | ||
| 249 | 主调用 = 参数转代码 | ||
| 250 | { | ||
| 251 | code: $显示宏 "链式调用C", 主调用 | ||
| 252 | type: "lua" | ||
| 253 | } | ||
| 254 | |||
| 255 | $链式调用C( | ||
| 256 | 原点.变换.根节点.游戏对象\父节点! | ||
| 257 | 后代! | ||
| 258 | 选择启用! | ||
| 259 | 选择可见! | ||
| 260 | 标签等于 "fx" | ||
| 261 | 其中 (x)-> x.名称\结尾为 "(克隆)" | ||
| 262 | 摧毁! | ||
| 263 | ) | ||
| 264 | |||
| 265 | macro 表 = -> "{'abc', 字段a:123, <call>:=> 998}" | ||
| 266 | 打印 $表[1], $表.字段a, ($表)!, $表! | ||
| 267 | |||
| 268 | 打印 "当前代码行数: #{ $LINE }" | ||
| 269 | |||
| 270 | $待办 | ||
| 271 | |||
| 272 | macro 跳过 = -> "" | ||
| 273 | |||
| 274 | do | ||
| 275 | 打印 1 | ||
| 276 | <- $跳过 | ||
| 277 | 打印 2 | ||
| 278 | 打印 3 | ||
| 279 | |||
| 280 | macro 跳过 = -> "while false do break" | ||
| 281 | |||
| 282 | _1 = -> | ||
| 283 | 打印 1 | ||
| 284 | <- $跳过 | ||
| 285 | 打印 2 | ||
| 286 | 打印 3 | ||
| 287 | |||
| 288 | macro 隐式返回宏是允许的 = -> "打印 'abc'\n123" | ||
| 289 | |||
| 290 | $隐式返回宏是允许的 | ||
| 291 | |||
