From 76e14d6f2a747050f5c682d8fa3ce1cd2108c629 Mon Sep 17 00:00:00 2001 From: mcDandy Date: Wed, 10 Jun 2026 15:58:46 +0200 Subject: [PATCH] AI: attempt to add autocomplete --- more_math/Parser/compile.ps1 | 190 +++++++++++-- more_math/Parser/inbuilt_symbols.py | 237 ++++++++++++++++ web/ScriptTextInput.vue | 44 +-- web/autocomplete.js | 417 ++++++++++++++++++++++++++++ web/inbuilt_symbols.js | 239 +++++++++++++++- web/script_text_input.js | 3 + 6 files changed, 1072 insertions(+), 58 deletions(-) create mode 100644 web/autocomplete.js diff --git a/more_math/Parser/compile.ps1 b/more_math/Parser/compile.ps1 index a20b649..fe6324f 100644 --- a/more_math/Parser/compile.ps1 +++ b/more_math/Parser/compile.ps1 @@ -1,12 +1,18 @@ -Write-Host "===================================================" -ForegroundColor Cyan -Write-Host "1/2 Compiling ANTLR Grammars" -ForegroundColor Cyan -Write-Host "===================================================" -ForegroundColor Cyan +param( + [switch]$SkipAntlr +) -Write-Host "Compiling legacy version (ANTLR 4.9.3)..." -ForegroundColor Yellow -antlr4 -v 4.9.3 -Dlanguage=Python3 -visitor -o ./legacy MathExpr.g4 +if (-not $SkipAntlr) { + Write-Host "===================================================" -ForegroundColor Cyan + Write-Host "1/2 Compiling ANTLR Grammars" -ForegroundColor Cyan + Write-Host "===================================================" -ForegroundColor Cyan -Write-Host "Compiling modern version (ANTLR 4.13.2)..." -ForegroundColor Yellow -antlr4 -v 4.13.2 -Dlanguage=Python3 -visitor -o ./grammer MathExpr.g4 + Write-Host "Compiling legacy version (ANTLR 4.9.3)..." -ForegroundColor Yellow + antlr4 -v 4.9.3 -Dlanguage=Python3 -visitor -o ./legacy MathExpr.g4 + + Write-Host "Compiling modern version (ANTLR 4.13.2)..." -ForegroundColor Yellow + antlr4 -v 4.13.2 -Dlanguage=Python3 -visitor -o ./grammer MathExpr.g4 +} Write-Host "" Write-Host "===================================================" -ForegroundColor Cyan @@ -19,12 +25,107 @@ if (-not (Test-Path $g4Path)) { exit 1 } -# 1. Načtení a očištění gramatiky od komentářů -$content = [System.IO.File]::ReadAllText($g4Path, [System.Text.Encoding]::UTF8) -$content = $content -replace '//.*', '' +$rawContent = [System.IO.File]::ReadAllText($g4Path, [System.Text.Encoding]::UTF8) +$content = $rawContent -replace '//.*', '' $content = $content -replace '/\*[\s\S]*?\*/', '' -# 2. Vytažení všech alfabetických řetězců v apostrofech +function Get-LexerNames([string]$grammarText) { + $map = @{} + foreach ($line in ($grammarText -split "`r?`n")) { + $t = $line.Trim() + if ($t -notmatch '^([A-Z][A-Z0-9_]*)\s*:\s*(.+);\s*$') { continue } + $token = $matches[1] + $rhs = $matches[2] + $names = @( + [regex]::Matches($rhs, "'([^']*)'") | ForEach-Object { $_.Groups[1].Value.ToLower() } + ) | Sort-Object -Unique + if ($names.Count -gt 0) { + $map[$token] = $names + } + } + return $map +} + +function Get-ArgBounds([string]$inner) { + $inner = $inner.Trim() + if ([string]::IsNullOrWhiteSpace($inner)) { + return @{ min = 0; max = 0 } + } + + $exprCount = ([regex]::Matches($inner, '\b(expr|indexExpr)\b')).Count + $optExpr = 0 + foreach ($g in [regex]::Matches($inner, '\([^()]*\)\?')) { + $optExpr += ([regex]::Matches($g.Value, '\b(expr|indexExpr)\b')).Count + } + + $hasStar = $inner -match '\(COMMA (expr|indexExpr)\)\*' + $hasPlus = $inner -match '\(COMMA (expr|indexExpr)\)\+' + + $min = $exprCount - $optExpr + if ($hasStar) { + $min = [Math]::Max(1, $exprCount - 1 - $optExpr) + return @{ min = $min; max = $null } + } + if ($hasPlus) { + $min = [Math]::Max(1, $exprCount - $optExpr) + return @{ min = $min; max = $null } + } + + return @{ min = $min; max = $exprCount } +} + +function New-Snippet([string]$name) { + return "${name}()" +} + +function Add-FunctionRuleLine([hashtable]$meta, [hashtable]$lexerMap, [string]$line) { + $clean = (($line -split '\s+#')[0]).Trim().TrimEnd(';') + if ($clean -notmatch 'LPAREN') { return } + if ($clean -notmatch '(?:^\s*\|\s*)?(\w+)\s+LPAREN\s*(.*?)\s+RPAREN\s*$') { return } + + $token = $matches[1] + $inner = $matches[2].Trim() + $bounds = Get-ArgBounds $inner + $names = $lexerMap[$token] + if (-not $names) { return } + + foreach ($fn in $names) { + $entry = @{ + minArgs = $bounds.min + snippet = (New-Snippet $fn) + } + if ($null -eq $bounds.max) { + $entry.maxArgs = $null + } else { + $entry.maxArgs = $bounds.max + } + $meta[$fn] = $entry + } +} + +function Get-FunctionMeta([string]$grammarText, [hashtable]$lexerMap) { + $meta = @{} + $inFunc = $false + + foreach ($line in ($grammarText -split "`r?`n")) { + if ($line -match '^\s*//\s*LEXER') { $inFunc = $false } + if ($line -match '^\s*(func0|func1|func2|func3|func4|func5|funcN|funcNoise)\s*:\s*(.*)$') { + $inFunc = $true + $inline = $matches[2].Trim() + if ($inline -and $inline -match 'LPAREN') { + Add-FunctionRuleLine $meta $lexerMap $inline + } + continue + } + if (-not $inFunc) { continue } + + Add-FunctionRuleLine $meta $lexerMap $line + } + + return $meta +} + +# 1. Extract quoted symbols for keyword/function lists $matches = [regex]::Matches($content, "'([a-zA-Z_][a-zA-Z0-9_]*)'") $allSymbols = @() foreach ($m in $matches) { @@ -32,51 +133,92 @@ foreach ($m in $matches) { } $allSymbols = $allSymbols | Sort-Object -Unique -# 3. Definice pevných množin +# 2. Fixed sets $keywords = @('if', 'else', 'while', 'for', 'in', 'break', 'continue', 'return', 'none', 'None', 'null', 'NULL') | Sort-Object -Unique $constants = @('pi', 'PI', 'e', 'E') | Sort-Object -Unique -# Vše ostatní, co jsou slova a nejsou klíčová slova ani konstanty, jsou funkce $functions = @() foreach ($sym in $allSymbols) { if ($sym -notin $keywords -and $sym -notin $constants) { - $functions += $sym + $functions += $sym.ToLower() } } $functions = $functions | Sort-Object -Unique -# 4. Formátování a zápis do PYTHON souboru (do kořene/aktuální složky vedle .g4) +# 3. Function metadata from grammar rules +$lexerMap = Get-LexerNames $content +$functionMeta = Get-FunctionMeta $content $lexerMap + +# Ensure every listed function has meta (fallback: variadic unknown) +foreach ($fn in $functions) { + if (-not $functionMeta.ContainsKey($fn)) { + $functionMeta[$fn] = @{ + minArgs = 1 + maxArgs = $null + snippet = (New-Snippet $fn) + } + } +} + +$sortedMetaKeys = $functionMeta.Keys | Sort-Object + +# 4. Python export +$pyMetaLines = @() +foreach ($key in $sortedMetaKeys) { + $m = $functionMeta[$key] + $maxPart = if ($null -eq $m.maxArgs) { "None" } else { [string]$m.maxArgs } + $pyMetaLines += " '$key': {'min_args': $($m.minArgs), 'max_args': $maxPart, 'snippet': '$($m.snippet)'}," +} + $pyPath = "inbuilt_symbols.py" $pyContent = @( "# Generated automatically by compile.ps1. Do not edit.", - "INBUILT_KEYWORDS = {" + (($keywords | foreach { "'$_'" }) -join ", ") + "}", - "INBUILT_CONSTANTS = {" + (($constants | foreach { "'$_'" }) -join ", ") + "}", - "INBUILT_FUNCTIONS = {" + (($functions | foreach { "'$_'" }) -join ", ") + "}" + "INBUILT_KEYWORDS = {" + (($keywords | ForEach-Object { "'$_'" }) -join ", ") + "}", + "INBUILT_CONSTANTS = {" + (($constants | ForEach-Object { "'$_'" }) -join ", ") + "}", + "INBUILT_FUNCTIONS = {" + (($functions | ForEach-Object { "'$_'" }) -join ", ") + "}", + "", + "INBUILT_FUNCTION_META = {", + ($pyMetaLines -join [Environment]::NewLine), + "}" ) -join [Environment]::NewLine [System.IO.File]::WriteAllText($pyPath, $pyContent, [System.Text.Encoding]::UTF8) Write-Host "-> Exported Python symbols to root: $pyPath" -ForegroundColor Green -# 5. Formátování a zápis do JAVASCRIPT souboru (odskok do složky web) -# Pokud máš složku web hned vedle .g4, změň '..\web' na 'web' -$jsDir = "..\..\web" +# 5. JavaScript export +$jsDir = "..\..\web" if (-not (Test-Path $jsDir)) { New-Item -ItemType Directory -Force -Path $jsDir | Out-Null } $jsPath = Join-Path $jsDir "inbuilt_symbols.js" +$jsMetaLines = @() +foreach ($key in $sortedMetaKeys) { + $m = $functionMeta[$key] + if ($null -eq $m.maxArgs) { + $jsMetaLines += " $key`: { minArgs: $($m.minArgs), maxArgs: null, snippet: `"$($m.snippet)`" }," + } else { + $jsMetaLines += " $key`: { minArgs: $($m.minArgs), maxArgs: $($m.maxArgs), snippet: `"$($m.snippet)`" }," + } +} + $jsContent = @( "// Generated automatically by compile.ps1. Do not edit.", "", - "export const KEYWORDS = new Set([" + (($keywords | foreach { "`"$_`"" }) -join ", ") + "]);", + "export const KEYWORDS = new Set([" + (($keywords | ForEach-Object { "`"$_`"" }) -join ", ") + "]);", "", - "export const CONSTANTS = new Set([" + (($constants | foreach { "`"$_`"" }) -join ", ") + "]);", + "export const CONSTANTS = new Set([" + (($constants | ForEach-Object { "`"$_`"" }) -join ", ") + "]);", "", - "export const FUNCTIONS = new Set([" + (($functions | foreach { "`"$_`"" }) -join ", ") + "]);" + "export const FUNCTIONS = new Set([" + (($functions | ForEach-Object { "`"$_`"" }) -join ", ") + "]);", + "", + "export const FUNCTION_META = {", + ($jsMetaLines -join [Environment]::NewLine), + "};" ) -join [Environment]::NewLine [System.IO.File]::WriteAllText($jsPath, $jsContent, [System.Text.Encoding]::UTF8) Write-Host "-> Exported JS symbols to: $jsPath" -ForegroundColor Green +Write-Host "-> Function metadata entries: $($sortedMetaKeys.Count)" -ForegroundColor Green Write-Host "" Write-Host "===================================================" -ForegroundColor Cyan diff --git a/more_math/Parser/inbuilt_symbols.py b/more_math/Parser/inbuilt_symbols.py index 054774a..d7ad42e 100644 --- a/more_math/Parser/inbuilt_symbols.py +++ b/more_math/Parser/inbuilt_symbols.py @@ -7,4 +7,241 @@ INBUILT_CONSTANTS = { } INBUILT_FUNCTIONS = { 'abs', 'acos', 'acosh', 'all', 'angle', 'any', 'append', 'argmax', 'argmin', 'argsort', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'band', 'batch_shuffle', 'bitcount', 'bitwise_and', 'bitwise_not', 'bitwise_or', 'bitwise_xor', 'blur', 'bnot', 'bor', 'botk', 'botk_ind', 'botk_indices', 'bxor', 'cat', 'ceil', 'cellular', 'cellular_noise', 'cielab_to_rgb', 'clamp', 'cnt', 'concat', 'concatenate', 'conv', 'convolution', 'corr', 'correlation', 'cos', 'cosh', 'cosine_similarity', 'cossim', 'count', 'cov', 'crop', 'cross', 'cubic', 'cubic_ease', 'cumprod', 'cumsum', 'dilate', 'dist', 'distance', 'domain_warp', 'domain_warp_noise', 'dot', 'edge', 'elastic', 'elastic_ease', 'entropy', 'erf', 'erfinv', 'erode', 'exp', 'ezconv', 'ezconvolution', 'fft', 'find', 'flatten', 'flip', 'float', 'floor', 'flow_ang', 'flow_angle', 'flow_apply', 'flow_mag', 'flow_magnitude', 'flow_to_image', 'fract', 'gamma', 'gaussian', 'gelu', 'get_value', 'hist', 'histogram', 'hsv_to_rgb', 'ifft', 'int', 'int_to_rgb', 'interpolate_area', 'interpolate_linear', 'interpolate_nearest', 'interpolate_nearest_exact', 'join', 'length', 'lerp', 'linspace', 'ln', 'log', 'logspace', 'lower', 'map', 'matmul', 'mean', 'median', 'mode', 'moment', 'morph_close', 'morph_open', 'motion_mask', 'nan_to_num', 'noise', 'now', 'nvl', 'oklab_to_rgb', 'overlay', 'pad', 'percentile', 'perlin', 'perlin_noise', 'perm', 'permute', 'pinv', 'plasma', 'plasma_noise', 'popcnt', 'popcount', 'pow', 'prcnt', 'print', 'print_shape', 'pshp', 'quantile', 'quartil', 'quartile', 'rand', 'randb', 'randbeta', 'randc', 'rande', 'randg', 'randgumbel', 'randchi2', 'randl', 'randln', 'randn', 'random_bernoulli', 'random_beta', 'random_cauchy', 'random_exponential', 'random_gamma', 'random_gumbel', 'random_chi2', 'random_laplace', 'random_log_normal', 'random_normal', 'random_poisson', 'random_studentt', 'random_uniform', 'random_weibull', 'randp', 'randt', 'randu', 'randw', 'range', 'relu', 'remap', 'replace', 'reshape', 'rgb_to_cielab', 'rgb_to_hsv', 'rgb_to_int', 'rgb_to_oklab', 'ridged', 'ridged_noise', 'rife', 'roll', 'round', 'rshp', 'select', 'shape', 'shuffle', 'sigm', 'sign', 'sin', 'sine', 'sine_ease', 'sinh', 'smax', 'smin', 'smootherstep', 'smoothstep', 'snorm', 'softmax', 'softmin', 'softplus', 'sort', 'split', 'sqrt', 'stack_clear', 'stack_get', 'stack_has', 'stack_pop', 'stack_push', 'std', 'step', 'substr', 'substring', 'sum', 'swap', 'tan', 'tanh', 'tensor', 'text_image', 'timestamp', 'tmax', 'tmin', 'tnorm', 'topk', 'topk_ind', 'topk_indices', 'trim', 'turbulence', 'unique', 'upper', 'var', 'voronoi', 'voronoi_noise', 'where', 'worley' +} + +INBUILT_FUNCTION_META = { + 'abs': {'min_args': 1, 'max_args': 1, 'snippet': 'abs()'}, + 'acos': {'min_args': 1, 'max_args': 1, 'snippet': 'acos()'}, + 'acosh': {'min_args': 1, 'max_args': 1, 'snippet': 'acosh()'}, + 'all': {'min_args': 1, 'max_args': 1, 'snippet': 'all()'}, + 'angle': {'min_args': 1, 'max_args': 1, 'snippet': 'angle()'}, + 'any': {'min_args': 1, 'max_args': 1, 'snippet': 'any()'}, + 'append': {'min_args': 2, 'max_args': 2, 'snippet': 'append()'}, + 'argmax': {'min_args': 1, 'max_args': 1, 'snippet': 'argmax()'}, + 'argmin': {'min_args': 1, 'max_args': 1, 'snippet': 'argmin()'}, + 'argsort': {'min_args': 1, 'max_args': 2, 'snippet': 'argsort()'}, + 'asin': {'min_args': 1, 'max_args': 1, 'snippet': 'asin()'}, + 'asinh': {'min_args': 1, 'max_args': 1, 'snippet': 'asinh()'}, + 'atan': {'min_args': 1, 'max_args': 1, 'snippet': 'atan()'}, + 'atan2': {'min_args': 2, 'max_args': 2, 'snippet': 'atan2()'}, + 'atanh': {'min_args': 1, 'max_args': 1, 'snippet': 'atanh()'}, + 'band': {'min_args': 2, 'max_args': 2, 'snippet': 'band()'}, + 'batch_shuffle': {'min_args': 2, 'max_args': 2, 'snippet': 'batch_shuffle()'}, + 'bitcount': {'min_args': 1, 'max_args': 1, 'snippet': 'bitcount()'}, + 'bitwise_and': {'min_args': 2, 'max_args': 2, 'snippet': 'bitwise_and()'}, + 'bitwise_not': {'min_args': 1, 'max_args': 1, 'snippet': 'bitwise_not()'}, + 'bitwise_or': {'min_args': 2, 'max_args': 2, 'snippet': 'bitwise_or()'}, + 'bitwise_xor': {'min_args': 2, 'max_args': 2, 'snippet': 'bitwise_xor()'}, + 'blur': {'min_args': 2, 'max_args': 3, 'snippet': 'blur()'}, + 'bnot': {'min_args': 1, 'max_args': 1, 'snippet': 'bnot()'}, + 'bor': {'min_args': 2, 'max_args': 2, 'snippet': 'bor()'}, + 'botk': {'min_args': 2, 'max_args': 2, 'snippet': 'botk()'}, + 'botk_ind': {'min_args': 2, 'max_args': 2, 'snippet': 'botk_ind()'}, + 'botk_indices': {'min_args': 2, 'max_args': 2, 'snippet': 'botk_indices()'}, + 'bxor': {'min_args': 2, 'max_args': 2, 'snippet': 'bxor()'}, + 'cat': {'min_args': 2, 'max_args': None, 'snippet': 'cat()'}, + 'ceil': {'min_args': 1, 'max_args': 1, 'snippet': 'ceil()'}, + 'cellular': {'min_args': 2, 'max_args': 5, 'snippet': 'cellular()'}, + 'cellular_noise': {'min_args': 2, 'max_args': 5, 'snippet': 'cellular_noise()'}, + 'cielab_to_rgb': {'min_args': 1, 'max_args': 3, 'snippet': 'cielab_to_rgb()'}, + 'clamp': {'min_args': 3, 'max_args': 3, 'snippet': 'clamp()'}, + 'cnt': {'min_args': 1, 'max_args': 1, 'snippet': 'cnt()'}, + 'concat': {'min_args': 2, 'max_args': None, 'snippet': 'concat()'}, + 'concatenate': {'min_args': 2, 'max_args': None, 'snippet': 'concatenate()'}, + 'conv': {'min_args': 2, 'max_args': None, 'snippet': 'conv()'}, + 'convolution': {'min_args': 2, 'max_args': None, 'snippet': 'convolution()'}, + 'corr': {'min_args': 2, 'max_args': 2, 'snippet': 'corr()'}, + 'correlation': {'min_args': 2, 'max_args': 2, 'snippet': 'correlation()'}, + 'cos': {'min_args': 1, 'max_args': 1, 'snippet': 'cos()'}, + 'cosh': {'min_args': 1, 'max_args': 1, 'snippet': 'cosh()'}, + 'cosine_similarity': {'min_args': 2, 'max_args': 2, 'snippet': 'cosine_similarity()'}, + 'cossim': {'min_args': 2, 'max_args': 2, 'snippet': 'cossim()'}, + 'count': {'min_args': 1, 'max_args': 1, 'snippet': 'count()'}, + 'cov': {'min_args': 2, 'max_args': 2, 'snippet': 'cov()'}, + 'crop': {'min_args': 3, 'max_args': 3, 'snippet': 'crop()'}, + 'cross': {'min_args': 2, 'max_args': 2, 'snippet': 'cross()'}, + 'cubic': {'min_args': 3, 'max_args': 3, 'snippet': 'cubic()'}, + 'cubic_ease': {'min_args': 3, 'max_args': 3, 'snippet': 'cubic_ease()'}, + 'cumprod': {'min_args': 1, 'max_args': 1, 'snippet': 'cumprod()'}, + 'cumsum': {'min_args': 1, 'max_args': 1, 'snippet': 'cumsum()'}, + 'dilate': {'min_args': 1, 'max_args': 2, 'snippet': 'dilate()'}, + 'dist': {'min_args': 4, 'max_args': 4, 'snippet': 'dist()'}, + 'distance': {'min_args': 4, 'max_args': 4, 'snippet': 'distance()'}, + 'domain_warp': {'min_args': 4, 'max_args': 8, 'snippet': 'domain_warp()'}, + 'domain_warp_noise': {'min_args': 4, 'max_args': 8, 'snippet': 'domain_warp_noise()'}, + 'dot': {'min_args': 2, 'max_args': 2, 'snippet': 'dot()'}, + 'edge': {'min_args': 1, 'max_args': 2, 'snippet': 'edge()'}, + 'elastic': {'min_args': 3, 'max_args': 3, 'snippet': 'elastic()'}, + 'elastic_ease': {'min_args': 3, 'max_args': 3, 'snippet': 'elastic_ease()'}, + 'entropy': {'min_args': 1, 'max_args': 1, 'snippet': 'entropy()'}, + 'erf': {'min_args': 1, 'max_args': 1, 'snippet': 'erf()'}, + 'erfinv': {'min_args': 1, 'max_args': 1, 'snippet': 'erfinv()'}, + 'erode': {'min_args': 1, 'max_args': 2, 'snippet': 'erode()'}, + 'exp': {'min_args': 1, 'max_args': 1, 'snippet': 'exp()'}, + 'ezconv': {'min_args': 2, 'max_args': None, 'snippet': 'ezconv()'}, + 'ezconvolution': {'min_args': 2, 'max_args': None, 'snippet': 'ezconvolution()'}, + 'fft': {'min_args': 1, 'max_args': 1, 'snippet': 'fft()'}, + 'find': {'min_args': 2, 'max_args': 2, 'snippet': 'find()'}, + 'flatten': {'min_args': 1, 'max_args': 1, 'snippet': 'flatten()'}, + 'flip': {'min_args': 2, 'max_args': 2, 'snippet': 'flip()'}, + 'float': {'min_args': 1, 'max_args': 1, 'snippet': 'float()'}, + 'floor': {'min_args': 1, 'max_args': 1, 'snippet': 'floor()'}, + 'flow_ang': {'min_args': 1, 'max_args': 1, 'snippet': 'flow_ang()'}, + 'flow_angle': {'min_args': 1, 'max_args': 1, 'snippet': 'flow_angle()'}, + 'flow_apply': {'min_args': 2, 'max_args': 2, 'snippet': 'flow_apply()'}, + 'flow_mag': {'min_args': 1, 'max_args': 1, 'snippet': 'flow_mag()'}, + 'flow_magnitude': {'min_args': 1, 'max_args': 1, 'snippet': 'flow_magnitude()'}, + 'flow_to_image': {'min_args': 1, 'max_args': 1, 'snippet': 'flow_to_image()'}, + 'fract': {'min_args': 1, 'max_args': 1, 'snippet': 'fract()'}, + 'gamma': {'min_args': 1, 'max_args': 1, 'snippet': 'gamma()'}, + 'gaussian': {'min_args': 2, 'max_args': 3, 'snippet': 'gaussian()'}, + 'gelu': {'min_args': 1, 'max_args': 1, 'snippet': 'gelu()'}, + 'get_value': {'min_args': 2, 'max_args': 2, 'snippet': 'get_value()'}, + 'hist': {'min_args': 4, 'max_args': 4, 'snippet': 'hist()'}, + 'histogram': {'min_args': 4, 'max_args': 4, 'snippet': 'histogram()'}, + 'hsv_to_rgb': {'min_args': 1, 'max_args': 4, 'snippet': 'hsv_to_rgb()'}, + 'ifft': {'min_args': 1, 'max_args': 2, 'snippet': 'ifft()'}, + 'int': {'min_args': 1, 'max_args': 1, 'snippet': 'int()'}, + 'int_to_rgb': {'min_args': 1, 'max_args': 1, 'snippet': 'int_to_rgb()'}, + 'interpolate_area': {'min_args': 2, 'max_args': 2, 'snippet': 'interpolate_area()'}, + 'interpolate_linear': {'min_args': 2, 'max_args': 2, 'snippet': 'interpolate_linear()'}, + 'interpolate_nearest': {'min_args': 2, 'max_args': 2, 'snippet': 'interpolate_nearest()'}, + 'interpolate_nearest_exact': {'min_args': 2, 'max_args': 2, 'snippet': 'interpolate_nearest_exact()'}, + 'join': {'min_args': 1, 'max_args': 2, 'snippet': 'join()'}, + 'length': {'min_args': 1, 'max_args': 1, 'snippet': 'length()'}, + 'lerp': {'min_args': 3, 'max_args': 3, 'snippet': 'lerp()'}, + 'linspace': {'min_args': 3, 'max_args': 3, 'snippet': 'linspace()'}, + 'ln': {'min_args': 1, 'max_args': 1, 'snippet': 'ln()'}, + 'log': {'min_args': 1, 'max_args': 1, 'snippet': 'log()'}, + 'logspace': {'min_args': 4, 'max_args': 4, 'snippet': 'logspace()'}, + 'lower': {'min_args': 1, 'max_args': 1, 'snippet': 'lower()'}, + 'map': {'min_args': 2, 'max_args': None, 'snippet': 'map()'}, + 'matmul': {'min_args': 2, 'max_args': 2, 'snippet': 'matmul()'}, + 'mean': {'min_args': 1, 'max_args': 1, 'snippet': 'mean()'}, + 'median': {'min_args': 1, 'max_args': 1, 'snippet': 'median()'}, + 'mode': {'min_args': 1, 'max_args': 1, 'snippet': 'mode()'}, + 'moment': {'min_args': 3, 'max_args': 3, 'snippet': 'moment()'}, + 'morph_close': {'min_args': 1, 'max_args': 2, 'snippet': 'morph_close()'}, + 'morph_open': {'min_args': 1, 'max_args': 2, 'snippet': 'morph_open()'}, + 'motion_mask': {'min_args': 1, 'max_args': 1, 'snippet': 'motion_mask()'}, + 'nan_to_num': {'min_args': 4, 'max_args': 4, 'snippet': 'nan_to_num()'}, + 'noise': {'min_args': 1, 'max_args': 2, 'snippet': 'noise()'}, + 'now': {'min_args': 0, 'max_args': 0, 'snippet': 'now()'}, + 'nvl': {'min_args': 4, 'max_args': 4, 'snippet': 'nvl()'}, + 'oklab_to_rgb': {'min_args': 1, 'max_args': 3, 'snippet': 'oklab_to_rgb()'}, + 'overlay': {'min_args': 3, 'max_args': 4, 'snippet': 'overlay()'}, + 'pad': {'min_args': 2, 'max_args': 2, 'snippet': 'pad()'}, + 'percentile': {'min_args': 2, 'max_args': 2, 'snippet': 'percentile()'}, + 'perlin': {'min_args': 2, 'max_args': 5, 'snippet': 'perlin()'}, + 'perlin_noise': {'min_args': 2, 'max_args': 5, 'snippet': 'perlin_noise()'}, + 'perm': {'min_args': 2, 'max_args': 2, 'snippet': 'perm()'}, + 'permute': {'min_args': 2, 'max_args': 2, 'snippet': 'permute()'}, + 'pinv': {'min_args': 1, 'max_args': 1, 'snippet': 'pinv()'}, + 'plasma': {'min_args': 2, 'max_args': 5, 'snippet': 'plasma()'}, + 'plasma_noise': {'min_args': 2, 'max_args': 5, 'snippet': 'plasma_noise()'}, + 'popcnt': {'min_args': 1, 'max_args': 1, 'snippet': 'popcnt()'}, + 'popcount': {'min_args': 1, 'max_args': 1, 'snippet': 'popcount()'}, + 'pow': {'min_args': 2, 'max_args': 2, 'snippet': 'pow()'}, + 'prcnt': {'min_args': 2, 'max_args': 2, 'snippet': 'prcnt()'}, + 'print': {'min_args': 1, 'max_args': 1, 'snippet': 'print()'}, + 'print_shape': {'min_args': 1, 'max_args': 1, 'snippet': 'print_shape()'}, + 'pshp': {'min_args': 1, 'max_args': 1, 'snippet': 'pshp()'}, + 'quantile': {'min_args': 2, 'max_args': 2, 'snippet': 'quantile()'}, + 'quartil': {'min_args': 2, 'max_args': 2, 'snippet': 'quartil()'}, + 'quartile': {'min_args': 2, 'max_args': 2, 'snippet': 'quartile()'}, + 'rand': {'min_args': 1, 'max_args': 2, 'snippet': 'rand()'}, + 'randb': {'min_args': 2, 'max_args': 3, 'snippet': 'randb()'}, + 'randbeta': {'min_args': 3, 'max_args': 4, 'snippet': 'randbeta()'}, + 'randc': {'min_args': 3, 'max_args': 4, 'snippet': 'randc()'}, + 'rande': {'min_args': 2, 'max_args': 3, 'snippet': 'rande()'}, + 'randg': {'min_args': 3, 'max_args': 4, 'snippet': 'randg()'}, + 'randgumbel': {'min_args': 3, 'max_args': 4, 'snippet': 'randgumbel()'}, + 'randchi2': {'min_args': 2, 'max_args': 3, 'snippet': 'randchi2()'}, + 'randl': {'min_args': 3, 'max_args': 4, 'snippet': 'randl()'}, + 'randln': {'min_args': 3, 'max_args': 4, 'snippet': 'randln()'}, + 'randn': {'min_args': 1, 'max_args': 2, 'snippet': 'randn()'}, + 'random_bernoulli': {'min_args': 2, 'max_args': 3, 'snippet': 'random_bernoulli()'}, + 'random_beta': {'min_args': 3, 'max_args': 4, 'snippet': 'random_beta()'}, + 'random_cauchy': {'min_args': 3, 'max_args': 4, 'snippet': 'random_cauchy()'}, + 'random_exponential': {'min_args': 2, 'max_args': 3, 'snippet': 'random_exponential()'}, + 'random_gamma': {'min_args': 3, 'max_args': 4, 'snippet': 'random_gamma()'}, + 'random_gumbel': {'min_args': 3, 'max_args': 4, 'snippet': 'random_gumbel()'}, + 'random_chi2': {'min_args': 2, 'max_args': 3, 'snippet': 'random_chi2()'}, + 'random_laplace': {'min_args': 3, 'max_args': 4, 'snippet': 'random_laplace()'}, + 'random_log_normal': {'min_args': 3, 'max_args': 4, 'snippet': 'random_log_normal()'}, + 'random_normal': {'min_args': 1, 'max_args': 2, 'snippet': 'random_normal()'}, + 'random_poisson': {'min_args': 2, 'max_args': 3, 'snippet': 'random_poisson()'}, + 'random_studentt': {'min_args': 2, 'max_args': 3, 'snippet': 'random_studentt()'}, + 'random_uniform': {'min_args': 1, 'max_args': 2, 'snippet': 'random_uniform()'}, + 'random_weibull': {'min_args': 3, 'max_args': 4, 'snippet': 'random_weibull()'}, + 'randp': {'min_args': 2, 'max_args': 3, 'snippet': 'randp()'}, + 'randt': {'min_args': 2, 'max_args': 3, 'snippet': 'randt()'}, + 'randu': {'min_args': 1, 'max_args': 2, 'snippet': 'randu()'}, + 'randw': {'min_args': 3, 'max_args': 4, 'snippet': 'randw()'}, + 'range': {'min_args': 3, 'max_args': 3, 'snippet': 'range()'}, + 'relu': {'min_args': 1, 'max_args': None, 'snippet': 'relu()'}, + 'remap': {'min_args': 5, 'max_args': 5, 'snippet': 'remap()'}, + 'replace': {'min_args': 3, 'max_args': 3, 'snippet': 'replace()'}, + 'reshape': {'min_args': 2, 'max_args': 2, 'snippet': 'reshape()'}, + 'rgb_to_cielab': {'min_args': 1, 'max_args': 3, 'snippet': 'rgb_to_cielab()'}, + 'rgb_to_hsv': {'min_args': 1, 'max_args': 4, 'snippet': 'rgb_to_hsv()'}, + 'rgb_to_int': {'min_args': 1, 'max_args': 3, 'snippet': 'rgb_to_int()'}, + 'rgb_to_oklab': {'min_args': 1, 'max_args': 3, 'snippet': 'rgb_to_oklab()'}, + 'ridged': {'min_args': 2, 'max_args': 5, 'snippet': 'ridged()'}, + 'ridged_noise': {'min_args': 2, 'max_args': 5, 'snippet': 'ridged_noise()'}, + 'rife': {'min_args': 4, 'max_args': 5, 'snippet': 'rife()'}, + 'roll': {'min_args': 2, 'max_args': 3, 'snippet': 'roll()'}, + 'round': {'min_args': 1, 'max_args': 1, 'snippet': 'round()'}, + 'rshp': {'min_args': 2, 'max_args': 2, 'snippet': 'rshp()'}, + 'select': {'min_args': 2, 'max_args': 2, 'snippet': 'select()'}, + 'shape': {'min_args': 1, 'max_args': 1, 'snippet': 'shape()'}, + 'shuffle': {'min_args': 2, 'max_args': 2, 'snippet': 'shuffle()'}, + 'sigm': {'min_args': 1, 'max_args': 1, 'snippet': 'sigm()'}, + 'sign': {'min_args': 1, 'max_args': 1, 'snippet': 'sign()'}, + 'sin': {'min_args': 1, 'max_args': 1, 'snippet': 'sin()'}, + 'sine': {'min_args': 3, 'max_args': 3, 'snippet': 'sine()'}, + 'sine_ease': {'min_args': 3, 'max_args': 3, 'snippet': 'sine_ease()'}, + 'sinh': {'min_args': 1, 'max_args': 1, 'snippet': 'sinh()'}, + 'smax': {'min_args': 1, 'max_args': None, 'snippet': 'smax()'}, + 'smin': {'min_args': 1, 'max_args': None, 'snippet': 'smin()'}, + 'smootherstep': {'min_args': 3, 'max_args': 3, 'snippet': 'smootherstep()'}, + 'smoothstep': {'min_args': 3, 'max_args': 3, 'snippet': 'smoothstep()'}, + 'snorm': {'min_args': 1, 'max_args': 1, 'snippet': 'snorm()'}, + 'softmax': {'min_args': 1, 'max_args': 2, 'snippet': 'softmax()'}, + 'softmin': {'min_args': 1, 'max_args': 2, 'snippet': 'softmin()'}, + 'softplus': {'min_args': 1, 'max_args': 1, 'snippet': 'softplus()'}, + 'sort': {'min_args': 1, 'max_args': 1, 'snippet': 'sort()'}, + 'split': {'min_args': 1, 'max_args': 2, 'snippet': 'split()'}, + 'sqrt': {'min_args': 1, 'max_args': 1, 'snippet': 'sqrt()'}, + 'stack_clear': {'min_args': 1, 'max_args': 1, 'snippet': 'stack_clear()'}, + 'stack_get': {'min_args': 1, 'max_args': 1, 'snippet': 'stack_get()'}, + 'stack_has': {'min_args': 1, 'max_args': 1, 'snippet': 'stack_has()'}, + 'stack_pop': {'min_args': 1, 'max_args': 1, 'snippet': 'stack_pop()'}, + 'stack_push': {'min_args': 2, 'max_args': 2, 'snippet': 'stack_push()'}, + 'std': {'min_args': 1, 'max_args': 1, 'snippet': 'std()'}, + 'step': {'min_args': 2, 'max_args': 2, 'snippet': 'step()'}, + 'substr': {'min_args': 2, 'max_args': 3, 'snippet': 'substr()'}, + 'substring': {'min_args': 2, 'max_args': 3, 'snippet': 'substring()'}, + 'sum': {'min_args': 1, 'max_args': 1, 'snippet': 'sum()'}, + 'swap': {'min_args': 4, 'max_args': 4, 'snippet': 'swap()'}, + 'tan': {'min_args': 1, 'max_args': 1, 'snippet': 'tan()'}, + 'tanh': {'min_args': 1, 'max_args': 1, 'snippet': 'tanh()'}, + 'tensor': {'min_args': 2, 'max_args': 3, 'snippet': 'tensor()'}, + 'text_image': {'min_args': 3, 'max_args': 9, 'snippet': 'text_image()'}, + 'timestamp': {'min_args': 0, 'max_args': 0, 'snippet': 'timestamp()'}, + 'tmax': {'min_args': 2, 'max_args': 2, 'snippet': 'tmax()'}, + 'tmin': {'min_args': 2, 'max_args': 2, 'snippet': 'tmin()'}, + 'tnorm': {'min_args': 1, 'max_args': 1, 'snippet': 'tnorm()'}, + 'topk': {'min_args': 2, 'max_args': 2, 'snippet': 'topk()'}, + 'topk_ind': {'min_args': 2, 'max_args': 2, 'snippet': 'topk_ind()'}, + 'topk_indices': {'min_args': 2, 'max_args': 2, 'snippet': 'topk_indices()'}, + 'trim': {'min_args': 1, 'max_args': 1, 'snippet': 'trim()'}, + 'turbulence': {'min_args': 2, 'max_args': 5, 'snippet': 'turbulence()'}, + 'unique': {'min_args': 1, 'max_args': 1, 'snippet': 'unique()'}, + 'upper': {'min_args': 1, 'max_args': 1, 'snippet': 'upper()'}, + 'var': {'min_args': 1, 'max_args': 1, 'snippet': 'var()'}, + 'voronoi': {'min_args': 2, 'max_args': 5, 'snippet': 'voronoi()'}, + 'voronoi_noise': {'min_args': 2, 'max_args': 5, 'snippet': 'voronoi_noise()'}, + 'where': {'min_args': 3, 'max_args': 3, 'snippet': 'where()'}, + 'worley': {'min_args': 2, 'max_args': 5, 'snippet': 'worley()'}, } \ No newline at end of file diff --git a/web/ScriptTextInput.vue b/web/ScriptTextInput.vue index 582db91..c8d1b99 100644 --- a/web/ScriptTextInput.vue +++ b/web/ScriptTextInput.vue @@ -1,6 +1,7 @@