Merge pull request #7286 from dotCooCoo/fix/actions-load-reports-unknown-commands

Actions: Load Actions reports steps with unknown command ids
This commit is contained in:
BFlat
2026-11-14 20:39:02 +07:00
committed by GitHub
28 changed files with 296 additions and 7 deletions
+2
View File
@@ -5876,6 +5876,7 @@ digits Malayalam Malaiàlam
@msg no action set to save no hi ha cap conjunt d’accions per desar
@msg the action set file can't be read in full el fitxer de conjunt d’accions no es pot llegir sencer
@msgplural Loaded “{name}”: {n} step was left out|Loaded “{name}”: {n} steps were left out S’ha carregat “{name}”: s’ha omès {n} pas|S’ha carregat “{name}”: s’han omès {n} passos
@msgplural Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`|Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}` S’ha carregat “{name}”: {n} pas té una ordre desconeguda i s’ha conservat: “{action}”, pas {step}, `{command}`|S’ha carregat “{name}”: {n} passos tenen ordres desconegudes i s’han conservat; el primer: “{action}”, pas {step}, `{command}`
@msg not an action set file no és un fitxer de conjunt d’accions
@msg the action set file is larger than 8 MiB el fitxer de conjunt d’accions supera els 8 MiB
@msg `{ID}`: the reference would be larger than {MAX_BYTES} bytes `{ID}`: la referència superaria els {MAX_BYTES} bytes
@@ -6367,6 +6368,7 @@ digits Malayalam Malaiàlam
@msg truncated truncat
@msg Unembedded to {_1} S’ha desincrustat a {_1}
@msg unknown command `{0}` ordre desconeguda `{0}`
@msg step {step} of “{action}” runs the unknown command `{command}` el pas {step} de “{action}” executa l’ordre desconeguda `{command}`
@msg unknown command `{0}`; did you mean `{1}`? ordre desconeguda `{0}`; volies dir `{1}`?
@msg unknown control `{name}`: fillStroke, coloring, drawMode or screenMode control desconegut `{name}`: fillStroke, coloring, drawMode o screenMode
@msg Unknown dimension mode Mode de dimensió desconegut
Can't render this file because it contains an unexpected character in line 2 and column 73.
+2
View File
@@ -5055,6 +5055,7 @@ imageTrace Outline Obrys
@msg no action set to save žádná sada akcí k uložení
@msg the action set file can't be read in full soubor sady akcí nelze přečíst celý
@msgplural Loaded “{name}”: {n} step was left out|Loaded “{name}”: {n} steps were left out Načteno „{name}“: vynechán {n} krok|Načteno „{name}“: vynechány {n} kroky|Načteno „{name}“: vynecháno {n} kroků
@msgplural Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`|Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}` Načteno „{name}“: {n} krok má neznámý příkaz a byl ponechán: „{action}“, krok {step}, `{command}`|Načteno „{name}“: {n} kroky mají neznámé příkazy a byly ponechány; první: „{action}“, krok {step}, `{command}`|Načteno „{name}“: {n} kroků má neznámé příkazy a bylo ponecháno; první: „{action}“, krok {step}, `{command}`
@msg not an action set file není to soubor sady akcí
@msg the action set file is larger than 8 MiB soubor sady akcí je větší než 8 MiB
@msg `{ID}`: the reference would be larger than {MAX_BYTES} bytes `{ID}`: reference by byla větší než {MAX_BYTES} bajtů
@@ -5295,6 +5296,7 @@ imageTrace Outline Obrys
@msg tool shortcuts must be a single key (optionally with Shift) zkratky nástrojů musí být jediná klávesa (volitelně se Shift)
@msg truncated zkráceno
@msg unknown command `{0}` neznámý příkaz `{0}`
@msg step {step} of “{action}” runs the unknown command `{command}` krok {step} akce „{action}“ spouští neznámý příkaz `{command}`
@msg unknown command `{0}`; did you mean `{1}`? neznámý příkaz `{0}`; mysleli jste `{1}`?
@msg unknown effect `{id}` neznámý efekt `{id}`
@msg unknown format neznámý formát
Can't render this file because it is too large.
+2
View File
@@ -4669,6 +4669,7 @@ theme Appearance Erscheinungsbild
@msg no action set to save kein Aktionssatz zum Speichern
@msg the action set file can't be read in full die Aktionssatzdatei kann nicht vollständig gelesen werden
@msgplural Loaded “{name}”: {n} step was left out|Loaded “{name}”: {n} steps were left out „{name}“ geladen: {n} Schritt wurde ausgelassen|„{name}“ geladen: {n} Schritte wurden ausgelassen
@msgplural Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`|Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}` „{name}“ geladen: {n} Schritt hat einen unbekannten Befehl und wurde behalten: „{action}“, Schritt {step}, `{command}`|„{name}“ geladen: {n} Schritte haben unbekannte Befehle und wurden behalten; der erste: „{action}“, Schritt {step}, `{command}`
@msg not an action set file keine Aktionssatzdatei
@msg the action set file is larger than 8 MiB die Aktionssatzdatei ist größer als 8 MiB
@msg `{ID}`: the reference would be larger than {MAX_BYTES} bytes `{ID}`: die Referenz wäre größer als {MAX_BYTES} Byte
@@ -4910,6 +4911,7 @@ theme Appearance Erscheinungsbild
@msg tool shortcuts must be a single key (optionally with Shift) Tastaturbefehle für Werkzeuge müssen aus einer einzelnen Taste bestehen (optional mit Shift)
@msg truncated abgeschnitten
@msg unknown command `{0}` unbekannter Befehl `{0}`
@msg step {step} of “{action}” runs the unknown command `{command}` Schritt {step} von „{action}“ führt den unbekannten Befehl `{command}` aus
@msg unknown command `{0}`; did you mean `{1}`? unbekannter Befehl `{0}`; meinten Sie `{1}`?
@msg unknown effect `{id}` unbekannter Effekt `{id}`
@msg unknown format unbekanntes Format
Can't render this file because it is too large.
+2
View File
@@ -4701,6 +4701,7 @@ digits Malayalam Μαλαγιάλαμ
@msg no action set to save δεν υπάρχει σύνολο ενεργειών για αποθήκευση
@msg the action set file can't be read in full το αρχείο συνόλου ενεργειών δεν μπορεί να διαβαστεί ολόκληρο
@msgplural Loaded “{name}”: {n} step was left out|Loaded “{name}”: {n} steps were left out Φορτώθηκε το «{name}»: παραλείφθηκε {n} βήμα|Φορτώθηκε το «{name}»: παραλείφθηκαν {n} βήματα
@msgplural Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`|Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}` Φορτώθηκε το «{name}»: {n} βήμα έχει άγνωστη εντολή και διατηρήθηκε: «{action}», βήμα {step}, `{command}`|Φορτώθηκε το «{name}»: {n} βήματα έχουν άγνωστες εντολές και διατηρήθηκαν· το πρώτο: «{action}», βήμα {step}, `{command}`
@msg not an action set file δεν είναι αρχείο συνόλου ενεργειών
@msg the action set file is larger than 8 MiB το αρχείο συνόλου ενεργειών είναι μεγαλύτερο από 8 MiB
@msg `{ID}`: the reference would be larger than {MAX_BYTES} bytes `{ID}`: η αναφορά θα ήταν μεγαλύτερη από {MAX_BYTES} byte
@@ -4935,6 +4936,7 @@ digits Malayalam Μαλαγιάλαμ
@msg tool shortcuts must be a single key (optionally with Shift) οι συντομεύσεις εργαλείων πρέπει να περιλαμβάνουν ένα πλήκτρο (προαιρετικά με Shift)
@msg truncated περικομμένο
@msg unknown command `{0}` άγνωστη εντολή `{0}`
@msg step {step} of “{action}” runs the unknown command `{command}` το βήμα {step} της ενέργειας «{action}» εκτελεί την άγνωστη εντολή `{command}`
@msg unknown command `{0}`; did you mean `{1}`? άγνωστη εντολή `{0}`· μήπως εννοείτε `{1}`;
@msg unknown effect `{id}` άγνωστο εφέ `{id}`
@msg unknown format άγνωστη μορφή
Can't render this file because it is too large.
+2
View File
@@ -4745,6 +4745,7 @@ axis Both Ambos
@msg no action set to save no hay ningún conjunto de acciones que guardar
@msg the action set file can't be read in full el archivo de conjunto de acciones no se puede leer completo
@msgplural Loaded “{name}”: {n} step was left out|Loaded “{name}”: {n} steps were left out Se cargó “{name}”: se omitió {n} paso|Se cargó “{name}”: se omitieron {n} pasos
@msgplural Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`|Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}` Se cargó “{name}”: {n} paso tiene un comando desconocido y se conservó: “{action}”, paso {step}, `{command}`|Se cargó “{name}”: {n} pasos tienen comandos desconocidos y se conservaron; el primero: “{action}”, paso {step}, `{command}`
@msg not an action set file no es un archivo de conjunto de acciones
@msg the action set file is larger than 8 MiB el archivo de conjunto de acciones supera los 8 MiB
@msg `{ID}`: the reference would be larger than {MAX_BYTES} bytes `{ID}`: la referencia superaría los {MAX_BYTES} bytes
@@ -4986,6 +4987,7 @@ axis Both Ambos
@msg tool shortcuts must be a single key (optionally with Shift) los atajos de herramientas deben ser una sola tecla (opcionalmente con Shift)
@msg truncated truncado
@msg unknown command `{0}` comando desconocido `{0}`
@msg step {step} of “{action}” runs the unknown command `{command}` el paso {step} de “{action}” ejecuta el comando desconocido `{command}`
@msg unknown command `{0}`; did you mean `{1}`? comando desconocido `{0}`; ¿quiso decir `{1}`?
@msg unknown effect `{id}` efecto desconocido `{id}`
@msg unknown format formato desconocido
Can't render this file because it contains an unexpected character in line 2 and column 73.
+2
View File
@@ -4961,6 +4961,7 @@ imageTrace Outline Ääriviiva
@msg no action set to save ei tallennettavaa toimintosarjaa
@msg the action set file can't be read in full toimintosarjatiedostoa ei voi lukea kokonaan
@msgplural Loaded “{name}”: {n} step was left out|Loaded “{name}”: {n} steps were left out Ladattiin ”{name}”: jätettiin pois {n} vaihe|Ladattiin ”{name}”: jätettiin pois {n} vaihetta
@msgplural Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`|Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}` Ladattiin ”{name}”: {n} vaiheella on tuntematon komento, ja se säilytettiin: ”{action}”, vaihe {step}, `{command}`|Ladattiin ”{name}”: {n} vaiheella on tuntemattomia komentoja, ja ne säilytettiin; ensimmäinen: ”{action}”, vaihe {step}, `{command}`
@msg not an action set file ei ole toimintosarjatiedosto
@msg the action set file is larger than 8 MiB toimintosarjatiedosto on suurempi kuin 8 MiB
@msg `{ID}`: the reference would be larger than {MAX_BYTES} bytes `{ID}`: viite olisi suurempi kuin {MAX_BYTES} tavua
@@ -5194,6 +5195,7 @@ imageTrace Outline Ääriviiva
@msg tool shortcuts must be a single key (optionally with Shift) työkalujen pikanäppäinten on oltava yksittäinen näppäin (valinnaisesti Vaihto-näppäimen kanssa)
@msg truncated katkaistu
@msg unknown command `{0}` tuntematon komento `{0}`
@msg step {step} of “{action}” runs the unknown command `{command}` toiminnon ”{action}” vaihe {step} suorittaa tuntemattoman komennon `{command}`
@msg unknown command `{0}`; did you mean `{1}`? tuntematon komento `{0}`; tarkoititko `{1}`?
@msg unknown effect `{id}` tuntematon tehoste `{id}`
@msg unknown format tuntematon muoto
Can't render this file because it contains an unexpected character in line 2 and column 73.
+2
View File
@@ -4734,6 +4734,7 @@ axis Both Les deux
@msg no action set to save aucun jeu de scripts à enregistrer
@msg the action set file can't be read in full le fichier de jeu de scripts ne peut pas être lu en entier
@msgplural Loaded “{name}”: {n} step was left out|Loaded “{name}”: {n} steps were left out « {name} » chargé : {n} étape a été ignorée|« {name} » chargé : {n} étapes ont été ignorées
@msgplural Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`|Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}` « {name} » chargé : {n} étape a une commande inconnue et a été conservée : « {action} », étape {step}, `{command}`|« {name} » chargé : {n} étapes ont des commandes inconnues et ont été conservées ; la première : « {action} », étape {step}, `{command}`
@msg not an action set file ce n’est pas un fichier de jeu de scripts
@msg the action set file is larger than 8 MiB le fichier de jeu de scripts dépasse 8 Mio
@msg `{ID}`: the reference would be larger than {MAX_BYTES} bytes `{ID}` : la référence dépasserait {MAX_BYTES} octets
@@ -4975,6 +4976,7 @@ axis Both Les deux
@msg tool shortcuts must be a single key (optionally with Shift) les raccourcis d’outils doivent être une seule touche (éventuellement avec Maj)
@msg truncated tronqué
@msg unknown command `{0}` commande inconnue `{0}`
@msg step {step} of “{action}” runs the unknown command `{command}` l’étape {step} de « {action} » exécute la commande inconnue `{command}`
@msg unknown command `{0}`; did you mean `{1}`? commande inconnue `{0}` ; vouliez-vous dire `{1}` ?
@msg unknown effect `{id}` effet inconnu `{id}`
@msg unknown format format inconnu
Can't render this file because it is too large.
+2
View File
@@ -7520,6 +7520,7 @@ antiAlias Sharp शार्प
@msg not a Word document: its WordDocument stream doesn't start with a file information block वर्ड डॉक्यूमेंट नहीं: इसकी WordDocument धारा फ़ाइल सूचना ब्लॉक के साथ शुरू नहीं होती है
@msg the action set file can't be read in full एक्शन सेट फ़ाइल पूरी तरह नहीं पढ़ी जा सकती
@msgplural Loaded “{name}”: {n} step was left out|Loaded “{name}”: {n} steps were left out “{name}” लोड किया गया: {n} चरण छोड़ा गया|“{name}” लोड किया गया: {n} चरण छोड़े गए
@msgplural Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`|Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}` “{name}” लोड किया गया: {n} चरण में अज्ञात आदेश है और उसे रखा गया: “{action}”, चरण {step}, `{command}`|“{name}” लोड किया गया: {n} चरणों में अज्ञात आदेश हैं और उन्हें रखा गया; पहला: “{action}”, चरण {step}, `{command}`
@msg not an action set file एक एक्शन सेट फ़ाइल नहीं
@msg not an EMF or WMF file नहीं एक EMF या WMF फ़ाइल
@msg not an HP-GL file HP-GL फ़ाइल नहीं है
@@ -8410,6 +8411,7 @@ antiAlias Sharp शार्प
@msg unknown character style number field अज्ञात चरित्र स्टाइल संख्या क्षेत्र
@msg unknown CMYK profile `{name}` अज्ञात CMYK प्रोफ़ाइल `{name}`
@msg unknown command `{0}` अज्ञात आदेश `{0}`
@msg step {step} of “{action}” runs the unknown command `{command}` “{action}” का चरण {step} अज्ञात आदेश `{command}` चलाता है
@msg unknown command `{0}`; did you mean `{1}`? अज्ञात आदेश `{0}`; क्या आपको `{1}` का मतलब है?
@msg unknown control `{name}`: fillStroke, coloring, drawMode or screenMode अज्ञात नियंत्रण `{name}`: fillStroke, रंग, drawMode या screenMode
@msg Unknown dimension mode अज्ञात आयाम मोड
Can't render this file because it is too large.
+2
View File
@@ -5434,6 +5434,7 @@ imageTrace Outline Körvonal
@msg no action set to save nincs menthető műveletkészlet
@msg the action set file can't be read in full a műveletkészlet-fájl nem olvasható be teljesen
@msgplural Loaded “{name}”: {n} step was left out|Loaded “{name}”: {n} steps were left out „{name}” betöltve; kihagyott lépések: {n}
@msgplural Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`|Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}` „{name}” betöltve; megtartott lépések ismeretlen paranccsal: {n}; az első: „{action}”, lépés: {step}, `{command}`
@msg not an action set file nem műveletkészlet-fájl
@msg the action set file is larger than 8 MiB a műveletkészlet-fájl nagyobb 8 MiB-nál
@msg `{ID}`: the reference would be larger than {MAX_BYTES} bytes `{ID}`: a referencia nagyobb lenne {MAX_BYTES} bájtnál
@@ -5807,6 +5808,7 @@ imageTrace Outline Körvonal
@msg truncated csonka
@msg Unembedded to {_1} Beágyazás megszüntetve, ide: {_1}
@msg unknown command `{0}` ismeretlen parancs: `{0}`
@msg step {step} of “{action}” runs the unknown command `{command}` „{action}”, lépés: {step}: ismeretlen parancsot futtat: `{command}`
@msg unknown command `{0}`; did you mean `{1}`? ismeretlen parancs: `{0}`; erre gondolt: `{1}`?
@msg unknown effect `{id}` ismeretlen effektus: `{id}`
@msg unknown format ismeretlen formátum
Can't render this file because it contains an unexpected character in line 2 and column 73.
+2
View File
@@ -4797,6 +4797,7 @@ axis Both Entrambi
@msg no action set to save nessun set di azioni da salvare
@msg the action set file can't be read in full il file di set di azioni non può essere letto per intero
@msgplural Loaded “{name}”: {n} step was left out|Loaded “{name}”: {n} steps were left out Caricato “{name}”: {n} passaggio è stato omesso|Caricato “{name}”: {n} passaggi sono stati omessi
@msgplural Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`|Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}` Caricato “{name}”: {n} passaggio ha un comando sconosciuto ed è stato mantenuto: “{action}”, passaggio {step}, `{command}`|Caricato “{name}”: {n} passaggi hanno comandi sconosciuti e sono stati mantenuti; il primo: “{action}”, passaggio {step}, `{command}`
@msg not an action set file non è un file di set di azioni
@msg the action set file is larger than 8 MiB il file del set di azioni supera 8 MiB
@msg `{ID}`: the reference would be larger than {MAX_BYTES} bytes `{ID}`: il riferimento supererebbe {MAX_BYTES} byte
@@ -5038,6 +5039,7 @@ axis Both Entrambi
@msg tool shortcuts must be a single key (optionally with Shift) le scelte rapide degli strumenti devono essere un singolo tasto (eventualmente con Shift)
@msg truncated troncato
@msg unknown command `{0}` comando sconosciuto `{0}`
@msg step {step} of “{action}” runs the unknown command `{command}` il passaggio {step} di “{action}” esegue il comando sconosciuto `{command}`
@msg unknown command `{0}`; did you mean `{1}`? comando sconosciuto `{0}`; forse intendevate `{1}`?
@msg unknown effect `{id}` effetto sconosciuto `{id}`
@msg unknown format formato sconosciuto
Can't render this file because it is too large.
+2
View File
@@ -4715,6 +4715,7 @@ swatch Bright Violet ビビッドバイオレット
@msg objects can't be nested more than 32 deep オブジェクトは 32 階層より深く入れ子にできません
@msg the SVG's elements are nested more than {0} deep SVG の要素が {0} 階層より深く入れ子になっています
@msg unknown command `{0}` `{0}` は不明なコマンドです
@msg step {step} of “{action}” runs the unknown command `{command}` 「{action}」のステップ {step} は不明なコマンド `{command}` を実行します
@msg unknown command `{0}`; did you mean `{1}`? `{0}` は不明なコマンドです。`{1}` のことですか?
@msg `{what}` closes nothing `{what}` に対応する開始部分がありません
@msg `{what}` closes something it didn't open `{what}` が対応しない開始部分を閉じています
@@ -5064,6 +5065,7 @@ swatch Bright Violet ビビッドバイオレット
@msg no action set to save 保存するアクションセットがありません
@msg the action set file can't be read in full アクションセットファイルをすべて読み込めません
@msgplural Loaded “{name}”: {n} step was left out|Loaded “{name}”: {n} steps were left out 「{name}」を読み込みました。{n} 個のステップは省きました
@msgplural Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`|Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}` 「{name}」を読み込みました。不明なコマンドのステップ {n} 個はそのまま残しました。最初は「{action}」のステップ {step}、`{command}` です
@msg not an action set file アクションセットファイルではありません
@msg the action set file is larger than 8 MiB アクションセットファイルが 8 MiB を超えています
@msg `{ID}`: the reference would be larger than {MAX_BYTES} bytes `{ID}`: リファレンスが {MAX_BYTES} バイトを超えます
Can't render this file because it contains an unexpected character in line 2 and column 73.
+2
View File
@@ -4425,6 +4425,7 @@ font-technology Variable ცვლადი
@msg no action set to save შესანახი მოქმედებების ნაკრები არ არის
@msg the action set file can't be read in full მოქმედებების ნაკრების ფაილის სრულად წაკითხვა შეუძლებელია
@msgplural Loaded “{name}”: {n} step was left out|Loaded “{name}”: {n} steps were left out ჩაიტვირთა „{name}“; გამოტოვებული ნაბიჯები: {n}
@msgplural Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`|Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}` ჩაიტვირთა „{name}“; შენახული ნაბიჯები უცნობი ბრძანებით: {n}; პირველი: „{action}“, ნაბიჯი {step}, `{command}`
@msg not an action set file ეს არ არის მოქმედებების ნაკრების ფაილი
@msg the action set file is larger than 8 MiB მოქმედებების ნაკრების ფაილი 8 MiB-ზე დიდია
@msg `{ID}`: the reference would be larger than {MAX_BYTES} bytes `{ID}`: ცნობარი {MAX_BYTES} ბაიტზე დიდი იქნებოდა
@@ -4644,6 +4645,7 @@ font-technology Variable ცვლადი
@msg tool shortcuts must be a single key (optionally with Shift) ხელსაწყოს მალსახმობი ერთი კლავიში უნდა იყოს (სურვილისამებრ Shift-ით)
@msg truncated შეკვეცილია
@msg unknown command `{0}` უცნობი ბრძანება `{0}`
@msg step {step} of “{action}” runs the unknown command `{command}` „{action}“, ნაბიჯი {step}: უცნობი ბრძანება `{command}`
@msg unknown command `{0}`; did you mean `{1}`? უცნობი ბრძანება `{0}`; იქნებ `{1}` იგულისხმეთ?
@msg unknown effect `{id}` უცნობი ეფექტი `{id}`
@msg unknown format უცნობი ფორმატი
Can't render this file because it is too large.
+2
View File
@@ -4642,6 +4642,7 @@ theme Appearance 외관
@msg objects can't be nested more than 32 deep 개체는 32단계보다 깊게 중첩할 수 없습니다
@msg the SVG's elements are nested more than {0} deep SVG 요소가 {0}단계보다 깊게 중첩되어 있습니다
@msg unknown command `{0}` 알 수 없는 명령 `{0}`
@msg step {step} of “{action}” runs the unknown command `{command}` “{action}”의 단계 {step}에서 알 수 없는 명령 `{command}`을(를) 실행합니다
@msg unknown command `{0}`; did you mean `{1}`? 알 수 없는 명령 `{0}`: `{1}`을(를) 의미하셨습니까?
@msg `{what}` closes nothing `{what}`이(가) 닫는 항목이 없습니다
@msg `{what}` closes something it didn't open `{what}`이(가) 열지 않은 항목을 닫습니다
@@ -4991,6 +4992,7 @@ theme Appearance 외관
@msg no action set to save 저장할 액션 세트가 없습니다
@msg the action set file can't be read in full 액션 세트 파일을 전부 읽을 수 없습니다
@msgplural Loaded “{name}”: {n} step was left out|Loaded “{name}”: {n} steps were left out “{name}”을(를) 불러왔습니다. 단계 {n}개를 제외했습니다
@msgplural Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`|Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}` “{name}”을(를) 불러왔습니다. 알 수 없는 명령이 있는 단계 {n}개를 그대로 두었습니다. 첫 번째: “{action}”, 단계 {step}, `{command}`
@msg not an action set file 액션 세트 파일이 아닙니다
@msg the action set file is larger than 8 MiB 액션 세트 파일이 8 MiB보다 큽니다
@msg `{ID}`: the reference would be larger than {MAX_BYTES} bytes `{ID}`: 참조가 {MAX_BYTES}바이트보다 커집니다
Can't render this file because it is too large.
+2
View File
@@ -5112,6 +5112,7 @@ imageTrace Outline Contour
@msg no action set to save geen actieset om op te slaan
@msg the action set file can't be read in full het actiesetbestand kan niet volledig worden gelezen
@msgplural Loaded “{name}”: {n} step was left out|Loaded “{name}”: {n} steps were left out „{name}” geladen: {n} stap is weggelaten|„{name}” geladen: {n} stappen zijn weggelaten
@msgplural Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`|Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}` „{name}” geladen: {n} stap heeft een onbekende opdracht en is behouden: „{action}”, stap {step}, `{command}`|„{name}” geladen: {n} stappen hebben onbekende opdrachten en zijn behouden; de eerste: „{action}”, stap {step}, `{command}`
@msg not an action set file geen actiesetbestand
@msg the action set file is larger than 8 MiB het actiesetbestand is groter dan 8 MiB
@msg the action set file holds more than 1,000 actions het actiesetbestand bevat meer dan 1.000 acties
@@ -5313,6 +5314,7 @@ imageTrace Outline Contour
@msg tool shortcuts must be a single key (optionally with Shift) gereedschapsneltoetsen moeten uit één toets bestaan (eventueel met Shift)
@msg truncated afgekapt
@msg unknown command `{0}` onbekende opdracht `{0}`
@msg step {step} of “{action}” runs the unknown command `{command}` stap {step} van „{action}” voert de onbekende opdracht `{command}` uit
@msg unknown command `{0}`; did you mean `{1}`? onbekende opdracht `{0}`; bedoelde je `{1}`?
@msg unknown effect `{id}` onbekend effect `{id}`
@msg unknown format onbekende indeling
Can't render this file because it is too large.
+2
View File
@@ -4879,6 +4879,7 @@ imageTrace Outline Kontur
@msg no action set to save brak zestawu operacji do zapisania
@msg the action set file can't be read in full nie można odczytać całego pliku zestawu operacji
@msgplural Loaded “{name}”: {n} step was left out|Loaded “{name}”: {n} steps were left out Wczytano „{name}”: pominięto {n} krok|Wczytano „{name}”: pominięto {n} kroki|Wczytano „{name}”: pominięto {n} kroków
@msgplural Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`|Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}` Wczytano „{name}”: {n} krok ma nieznane polecenie i został zachowany: „{action}”, krok {step}, `{command}`|Wczytano „{name}”: {n} kroki mają nieznane polecenia i zostały zachowane; pierwszy: „{action}”, krok {step}, `{command}`|Wczytano „{name}”: {n} kroków ma nieznane polecenia i zostało zachowanych; pierwszy: „{action}”, krok {step}, `{command}`
@msg not an action set file to nie jest plik zestawu operacji
@msg the action set file is larger than 8 MiB plik zestawu operacji jest większy niż 8 MiB
@msg `{ID}`: the reference would be larger than {MAX_BYTES} bytes `{ID}`: dokumentacja byłaby większa niż {MAX_BYTES} bajtów
@@ -5122,6 +5123,7 @@ imageTrace Outline Kontur
@msg tool shortcuts must be a single key (optionally with Shift) skróty narzędzi muszą być pojedynczym klawiszem (opcjonalnie z Shift)
@msg truncated obcięty
@msg unknown command `{0}` nieznane polecenie `{0}`
@msg step {step} of “{action}” runs the unknown command `{command}` krok {step} operacji „{action}” uruchamia nieznane polecenie `{command}`
@msg unknown command `{0}`; did you mean `{1}`? nieznane polecenie `{0}`; czy chodziło o `{1}`?
@msg unknown effect `{id}` nieznany efekt `{id}`
@msg unknown format nieznany format
Can't render this file because it is too large.
+2
View File
@@ -4199,6 +4199,7 @@ axis Both Ambos
@msg no action set to save nenhum conjunto de ações para salvar
@msg the action set file can't be read in full o arquivo de conjunto de ações não pode ser lido por inteiro
@msgplural Loaded “{name}”: {n} step was left out|Loaded “{name}”: {n} steps were left out “{name}” carregado: {n} etapa foi omitida|“{name}” carregado: {n} etapas foram omitidas
@msgplural Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`|Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}` “{name}” carregado: {n} etapa tem um comando desconhecido e foi mantida: “{action}”, etapa {step}, `{command}`|“{name}” carregado: {n} etapas têm comandos desconhecidos e foram mantidas; a primeira: “{action}”, etapa {step}, `{command}`
@msg not an action set file não é um arquivo de conjunto de ações
@msg the action set file is larger than 8 MiB o arquivo de conjunto de ações tem mais de 8 MiB
@msg `{ID}`: the reference would be larger than {MAX_BYTES} bytes `{ID}`: a referência teria mais de {MAX_BYTES} bytes
@@ -4438,6 +4439,7 @@ axis Both Ambos
@msg tool shortcuts must be a single key (optionally with Shift) os atalhos de ferramenta devem ser uma única tecla (opcionalmente com Shift)
@msg truncated truncado
@msg unknown command `{0}` comando desconhecido `{0}`
@msg step {step} of “{action}” runs the unknown command `{command}` a etapa {step} de “{action}” executa o comando desconhecido `{command}`
@msg unknown command `{0}`; did you mean `{1}`? comando desconhecido `{0}`; você quis dizer `{1}`?
@msg unknown effect `{id}` efeito desconhecido `{id}`
@msg unknown format formato desconhecido
Can't render this file because it is too large.
+2
View File
@@ -4782,6 +4782,7 @@ axis Both Оба
@msg no action set to save нет набора действий для сохранения
@msg the action set file can't be read in full файл набора действий невозможно прочитать целиком
@msgplural Loaded “{name}”: {n} step was left out|Loaded “{name}”: {n} steps were left out Загружено «{name}»: пропущен {n} шаг|Загружено «{name}»: пропущено {n} шага|Загружено «{name}»: пропущено {n} шагов
@msgplural Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`|Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}` Загружено «{name}»: {n} шаг с неизвестной командой сохранён: «{action}», шаг {step}, `{command}`|Загружено «{name}»: {n} шага с неизвестными командами сохранены; первый: «{action}», шаг {step}, `{command}`|Загружено «{name}»: {n} шагов с неизвестными командами сохранены; первый: «{action}», шаг {step}, `{command}`
@msg not an action set file это не файл набора действий
@msg the action set file is larger than 8 MiB файл набора действий больше 8 MiB
@msg `{ID}`: the reference would be larger than {MAX_BYTES} bytes `{ID}`: справочник был бы больше {MAX_BYTES} байт
@@ -5023,6 +5024,7 @@ axis Both Оба
@msg tool shortcuts must be a single key (optionally with Shift) сочетания инструментов должны быть одной клавишей (необязательно с Shift)
@msg truncated усечено
@msg unknown command `{0}` неизвестная команда `{0}`
@msg step {step} of “{action}” runs the unknown command `{command}` шаг {step} действия «{action}» выполняет неизвестную команду `{command}`
@msg unknown command `{0}`; did you mean `{1}`? неизвестная команда `{0}`; возможно, имелась в виду `{1}`?
@msg unknown effect `{id}` неизвестный эффект `{id}`
@msg unknown format неизвестный формат
Can't render this file because it is too large.
+2
View File
@@ -4645,6 +4645,7 @@ axis Both Båda
@msg no action set to save ingen åtgärdsuppsättning att spara
@msg the action set file can't be read in full filen med åtgärdsuppsättning kan inte läsas helt
@msgplural Loaded “{name}”: {n} step was left out|Loaded “{name}”: {n} steps were left out Läste in ”{name}”: {n} steg utelämnades|Läste in ”{name}”: {n} steg utelämnades
@msgplural Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`|Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}` Läste in ”{name}”: {n} steg har ett okänt kommando och behölls: ”{action}”, steg {step}, `{command}`|Läste in ”{name}”: {n} steg har okända kommandon och behölls; det första: ”{action}”, steg {step}, `{command}`
@msg not an action set file inte en fil med åtgärdsuppsättning
@msg the action set file is larger than 8 MiB filen med åtgärdsuppsättningen är större än 8 MiB
@msg `{ID}`: the reference would be larger than {MAX_BYTES} bytes `{ID}`: referensen skulle bli större än {MAX_BYTES} byte
@@ -4879,6 +4880,7 @@ axis Both Båda
@msg tool shortcuts must be a single key (optionally with Shift) kortkommandon för verktyg måste vara en enda tangent (eventuellt med Shift)
@msg truncated avkortad
@msg unknown command `{0}` okänt kommando `{0}`
@msg step {step} of “{action}” runs the unknown command `{command}` steg {step} i ”{action}” kör det okända kommandot `{command}`
@msg unknown command `{0}`; did you mean `{1}`? okänt kommando `{0}`; menade du `{1}`?
@msg unknown effect `{id}` okänd effekt `{id}`
@msg unknown format okänt format
Can't render this file because it is too large.
+4
View File
@@ -2524,6 +2524,10 @@ const COUNTED_STATUS_MESSAGES: &[(&str, &str)] = &[
("Downloaded 1 file", "Downloaded 2 files"),
("Exported 1 file to /out", "Exported 2 files to /out"),
("Loaded “Tidy”: 1 step was left out", "Loaded “Tidy”: 2 steps were left out"),
(
"Loaded “Tidy”: 1 step has an unknown command and was kept: “Export”, step 4, `example.finish`",
"Loaded “Tidy”: 2 steps have unknown commands and were kept; the first: “Export”, step 4.2, `example.finish`",
),
];
/// The link, font, export and action set status messages name a count of 1 in the singular and other counts in
+2
View File
@@ -4479,6 +4479,7 @@ axis Both Her İkisi
@msg no action set to save kaydedilecek eylem seti yok
@msg the action set file can't be read in full eylem seti dosyası tamamen okunamıyor
@msgplural Loaded “{name}”: {n} step was left out|Loaded “{name}”: {n} steps were left out “{name}” yüklendi: {n} adım atlandı
@msgplural Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`|Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}` “{name}” yüklendi: bilinmeyen komutlu {n} adım korundu; ilki: “{action}”, adım {step}, `{command}`
@msg not an action set file bir eylem seti dosyası değil
@msg the action set file is larger than 8 MiB eylem seti dosyası 8 MiB'den büyük
@msg `{ID}`: the reference would be larger than {MAX_BYTES} bytes `{ID}`: başvuru {MAX_BYTES} bayttan büyük olur
@@ -4702,6 +4703,7 @@ axis Both Her İkisi
@msg tool shortcuts must be a single key (optionally with Shift) araç kısayolları tek tuş olmalıdır (isteğe bağlı olarak Shift ile)
@msg truncated kesik
@msg unknown command `{0}` bilinmeyen komut `{0}`
@msg step {step} of “{action}” runs the unknown command `{command}` “{action}” eylemi, adım {step}: bilinmeyen `{command}` komutunu çalıştırıyor
@msg unknown command `{0}`; did you mean `{1}`? bilinmeyen komut `{0}`; `{1}` mi demek istediniz?
@msg unknown effect `{id}` bilinmeyen etki `{id}`
@msg unknown format bilinmeyen format
Can't render this file because it contains an unexpected character in line 5 and column 25.
+2
View File
@@ -4781,6 +4781,7 @@ axis Both Обидві
@msg no action set to save немає набору дій для збереження
@msg the action set file can't be read in full файл набору дій неможливо прочитати повністю
@msgplural Loaded “{name}”: {n} step was left out|Loaded “{name}”: {n} steps were left out Завантажено «{name}»: пропущено {n} крок|Завантажено «{name}»: пропущено {n} кроки|Завантажено «{name}»: пропущено {n} кроків
@msgplural Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`|Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}` Завантажено «{name}»: {n} крок із невідомою командою збережено: «{action}», крок {step}, `{command}`|Завантажено «{name}»: {n} кроки з невідомими командами збережено; перший: «{action}», крок {step}, `{command}`|Завантажено «{name}»: {n} кроків із невідомими командами збережено; перший: «{action}», крок {step}, `{command}`
@msg not an action set file це не файл набору дій
@msg the action set file is larger than 8 MiB файл набору дій більший за 8 MiB
@msg `{ID}`: the reference would be larger than {MAX_BYTES} bytes `{ID}`: довідник був би більшим за {MAX_BYTES} байтів
@@ -5022,6 +5023,7 @@ axis Both Обидві
@msg tool shortcuts must be a single key (optionally with Shift) поєднання інструментів має бути однією клавішею (необов’язково з Shift)
@msg truncated усічено
@msg unknown command `{0}` невідома команда `{0}`
@msg step {step} of “{action}” runs the unknown command `{command}` крок {step} дії «{action}» виконує невідому команду `{command}`
@msg unknown command `{0}`; did you mean `{1}`? невідома команда `{0}`; можливо, ви мали на увазі `{1}`?
@msg unknown effect `{id}` невідомий ефект `{id}`
@msg unknown format невідомий формат
Can't render this file because it is too large.
+2
View File
@@ -5094,6 +5094,7 @@ theme Appearance Giao diện
@msg no action set to save không có bộ hành động nào để lưu
@msg the action set file can't be read in full không thể đọc hết tệp bộ hành động
@msgplural Loaded “{name}”: {n} step was left out|Loaded “{name}”: {n} steps were left out Đã tải “{name}”: bỏ qua {n} bước
@msgplural Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`|Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}` Đã tải “{name}”: giữ lại {n} bước có lệnh không xác định; bước đầu tiên: “{action}”, bước {step}, `{command}`
@msg not an action set file không phải tệp bộ hành động
@msg the action set file is larger than 8 MiB tệp bộ hành động lớn hơn 8 MiB
@msg `{ID}`: the reference would be larger than {MAX_BYTES} bytes `{ID}`: tài liệu tham khảo sẽ lớn hơn {MAX_BYTES} byte
@@ -5535,6 +5536,7 @@ theme Appearance Giao diện
@msg truncated bị cắt ngắn
@msg Unembedded to {_1} Đã bỏ nhúng vào {_1}
@msg unknown command `{0}` lệnh không xác định `{0}`
@msg step {step} of “{action}” runs the unknown command `{command}` bước {step} của “{action}” chạy lệnh không xác định `{command}`
@msg unknown command `{0}`; did you mean `{1}`? lệnh không xác định `{0}`; ý bạn là `{1}`?
@msg unknown effect `{id}` hiệu ứng không xác định `{id}`
@msg unknown format định dạng không xác định
Can't render this file because it contains an unexpected character in line 204 and column 5.
+2
View File
@@ -4409,6 +4409,7 @@ imageTrace Outline 轮廓
@msg objects can't be nested more than 32 deep 对象的嵌套不能超过 32 层
@msg the SVG's elements are nested more than {0} deep SVG 的元素嵌套超过 {0} 层
@msg unknown command `{0}` 未知命令 `{0}`
@msg step {step} of “{action}” runs the unknown command `{command}` “{action}”的步骤 {step} 运行未知命令 `{command}`
@msg unknown command `{0}`; did you mean `{1}`? 未知命令 `{0}`;您是否想输入 `{1}`?
@msg `{what}` closes nothing `{what}` 没有可结束的内容
@msg `{what}` closes something it didn't open `{what}` 结束了并非由它开始的内容
@@ -4744,6 +4745,7 @@ imageTrace Outline 轮廓
@msg no action set to save 没有要存储的动作组
@msg the action set file can't be read in full 无法完整读取动作组文件
@msgplural Loaded “{name}”: {n} step was left out|Loaded “{name}”: {n} steps were left out 已载入“{name}”:已略过 {n} 个步骤
@msgplural Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`|Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}` 已载入“{name}”:保留了 {n} 个含未知命令的步骤;第一个:“{action}”,步骤 {step},`{command}`
@msg not an action set file 不是动作组文件
@msg the action set file is larger than 8 MiB 动作组文件大于 8 MiB
@msg `{ID}`: the reference would be larger than {MAX_BYTES} bytes `{ID}`:参考将大于 {MAX_BYTES} 字节
Can't render this file because it is too large.
+2
View File
@@ -2120,6 +2120,7 @@ file-filter Templates 範本
@msg objects can't be nested more than 32 deep 物件的巢狀層級不能超過 32 層
@msg the SVG's elements are nested more than {0} deep SVG 的元素巢狀超過 {0} 層
@msg unknown command `{0}` 未知的指令 `{0}`
@msg step {step} of “{action}” runs the unknown command `{command}` 「{action}」的步驟 {step} 執行未知的指令 `{command}`
@msg unknown command `{0}`; did you mean `{1}`? 未知的指令 `{0}`;您是指 `{1}` 嗎?
@msg `{what}` closes nothing `{what}` 沒有可結束的內容
@msg `{what}` closes something it didn't open `{what}` 結束了並非由它開始的內容
@@ -2458,6 +2459,7 @@ file-filter Templates 範本
@msg no action set to save 沒有要儲存的動作組
@msg the action set file can't be read in full 無法完整讀取動作組檔案
@msgplural Loaded “{name}”: {n} step was left out|Loaded “{name}”: {n} steps were left out 已載入「{name}」:已略過 {n} 個步驟
@msgplural Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`|Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}` 已載入「{name}」:保留了 {n} 個含未知指令的步驟;第一個:「{action}」,步驟 {step},`{command}`
@msg not an action set file 不是動作組檔案
@msg the action set file is larger than 8 MiB 動作組檔案大於 8 MiB
@msg `{ID}`: the reference would be larger than {MAX_BYTES} bytes `{ID}`:參考將大於 {MAX_BYTES} 位元組
Can't render this file because it is too large.
+184 -2
View File
@@ -85,6 +85,70 @@ impl Action {
})
.collect()
}
/// The steps whose command `known` does not hold, in order, as (step index, the index of the
/// command in a `command.batch` step, command id). A `command.batch` step's own commands are
/// checked one by one, as playback runs them ([`Action::included_commands`]); a command of one
/// with no command id has the id "". With `included_only`, excluded steps are passed over.
pub(crate) fn unknown_commands<'a>(
&'a self,
known: &'a KnownCommands,
included_only: bool,
) -> impl Iterator<Item = (usize, Option<usize>, &'a str)> + 'a {
self.steps.iter().enumerate().filter(move |(i, _)| !(included_only && self.excluded_steps.contains(i))).flat_map(
|(i, (command, params))| -> Vec<(usize, Option<usize>, &'a str)> {
match params.get("commands").and_then(Value::as_array) {
Some(steps) if command == "command.batch" => steps
.iter()
.enumerate()
.map(|(j, step)| (i, Some(j), step.get("command").and_then(Value::as_str).unwrap_or_default()))
.filter(|(_, _, id)| !known.has(id))
.collect(),
_ if known.has(command) => vec![],
_ => vec![(i, None, command.as_str())],
}
},
)
}
}
/// The command ids a step of an action can run now: the built-in engine commands, the commands the
/// installed plug-ins add, the View menu commands the app plays itself ([`crate::menus::plays_in_app`])
/// and stops ([`STOP_STEP`]).
pub(crate) struct KnownCommands(std::collections::HashSet<&'static str>);
impl KnownCommands {
/// The command ids known when it is called: a plug-in installed or removed later is not in it.
pub(crate) fn now() -> Self {
let engine = vectorcraft_engine::command_specs().iter().map(|c| c.id);
let plugins = vectorcraft_engine::cmd::plugin::command_specs().into_iter().map(|c| c.id);
Self(engine.chain(plugins).chain([STOP_STEP]).collect())
}
/// Whether a step can run command `id`.
pub(crate) fn has(&self, id: &str) -> bool {
self.0.contains(id) || crate::menus::plays_in_app(id)
}
}
/// The one-based place of a step that [`Action::unknown_commands`] gives: `3` for the third step,
/// `3.2` for the second command of a `command.batch` third step.
pub(crate) fn step_place(step: usize, in_batch: Option<usize>) -> String {
match in_batch {
Some(j) => format!("{}.{}", step + 1, j + 1),
None => (step + 1).to_string(),
}
}
/// `text` as a status message shows it: control characters become `�`, and text past 80
/// characters ends in `…`.
pub(crate) fn shown_text(text: &str) -> String {
const MAX: usize = 80;
let mut shown: String = text.chars().take(MAX).map(|c| if c.is_control() { '\u{fffd}' } else { c }).collect();
if text.chars().nth(MAX).is_some() {
shown.push('…');
}
shown
}
/// An action id no other action in this run has.
@@ -257,7 +321,10 @@ pub fn default_sets() -> Vec<ActionSet> {
/// Accelerated runs every included step at once as a single undoable batch → what `command.batch`
/// returns, {results}. Step by Step and Pause For run the first step now, each as its own undo step,
/// and leave the rest to [`tick_playback`] → {results: [the first step's result], pending: the steps
/// left}. While a paced playback is in progress, another action does not play.
/// left}. While a paced playback is in progress, another action does not play. An action with an
/// included step whose command is not known now ([`KnownCommands`]), a plug-in's command after the
/// plug-in was removed for one, does not play: the error names the first such step and its command,
/// and no step runs. An excluded step is not checked.
///
/// An action with an included stop ([`STOP_STEP`]) plays up to the stop and waits there at any speed
/// ([`continue_playback`]). At Accelerated, the steps between two stops are one undo step. → {results:
@@ -275,6 +342,13 @@ pub fn play(app: &mut VectorcraftApp, set: usize, idx: usize) -> Result<Value, S
if app.ui.action_playing.is_some() {
return Err("an action is already playing".into());
}
// A step whose command is not known now would fail only when playback reaches it, after the
// steps before it changed the document.
let known = KnownCommands::now();
if let Some((step, in_batch, command)) = a.unknown_commands(&known, true).next() {
let (step, action, command) = (step_place(step, in_batch), shown_text(&a.name), shown_text(command));
return Err(format!("step {step} of “{action}” runs the unknown command `{command}`"));
}
let options = app.ui.action_playback;
if has_stop(&commands) {
return play_with_stops(app, a.name, commands, options);
@@ -3907,6 +3981,112 @@ mod tests {
assert_eq!(set_names(&app), before, "no set added");
}
/// A step whose command is not known loads as it is, excluded or not and in a `command.batch`
/// step too, from `data` and from `path`: the answer lists each one and the status bar names the
/// first and how many there are. A set whose commands are all known loads with neither.
#[test]
fn load_actions_reports_steps_with_unknown_commands() {
let mut app = app_with_sets();
let files = with_files(&mut app, "/sets/unused.vcactions");
let batch = json!({"commands": [{"command": "object.move", "params": {"dx": 1, "dy": 0}}, {"command": "example.unknown.inner"}]});
let export = json!([
{"command": "object.move", "params": {"dx": 1, "dy": 0}},
{"command": "view.zoomIn", "params": {}},
{"command": STOP_STEP, "params": {"message": "", "allowContinue": false}},
{"command": "example.unknown.finish", "params": {"x": [1, 2]}},
{"command": "command.batch", "params": batch},
{"command": "example.unknown.off", "params": {}, "excluded": true},
]);
let tidy = json!({"name": "Tidy", "steps": [{"command": "object.move", "params": {"dx": 1, "dy": 0}}]});
let file = json!({"format": "vcactions", "version": 6, "name": "Print", "actions": [tidy, {"name": "Export", "steps": export}]}).to_string();
let want = json!([
{"action": "Export", "actionIndex": 1, "step": 4, "stepIndex": 3, "command": "example.unknown.finish"},
{"action": "Export", "actionIndex": 1, "step": 5, "stepIndex": 4, "batchStep": 2, "command": "example.unknown.inner"},
{"action": "Export", "actionIndex": 1, "step": 6, "stepIndex": 5, "command": "example.unknown.off"},
]);
let r = app.run(LOAD_SET, json!({"data": file})).unwrap();
assert_eq!(r, json!({"set": 3, "name": "Print", "actions": 2, "unknownCommands": want, "unknownCount": 3}));
assert_eq!(
app.ui.status,
"Loaded “Print”: 3 steps have unknown commands and were kept; the first: “Export”, step 4, `example.unknown.finish`"
);
let loaded = &app.ui.action_sets[3].actions[1];
assert_eq!(loaded.steps.len(), 6, "every step is kept");
assert_eq!(loaded.steps[3], ("example.unknown.finish".to_string(), json!({"x": [1, 2]})), "with its params");
assert_eq!(loaded.excluded_steps, BTreeSet::from([5]));
files.borrow_mut().insert("/sets/Print.vcactions".into(), file.into_bytes());
let r = app.run(LOAD_SET, json!({"path": "/sets/Print.vcactions"})).unwrap();
assert_eq!((r["name"].clone(), r["unknownCommands"].clone(), r["unknownCount"].clone()), (json!("Print 2"), want, json!(3)));
let saved = files::write_set(&app.ui.action_sets[4]);
assert!(saved.contains("example.unknown.finish") && saved.contains("example.unknown.inner"), "Save Actions… writes them back");
app.ui.status.clear();
let known = files::write_set(&app.ui.action_sets[1]);
assert_eq!(app.run(LOAD_SET, json!({"data": known})).unwrap(), json!({"set": 5, "name": "Mine 2", "actions": 2}));
assert_eq!(app.ui.status, "", "no message for a set whose commands are all known");
let empty = json!({"format": "vcactions", "version": 1, "name": "Empty", "actions": []}).to_string();
assert_eq!(app.run(LOAD_SET, json!({"data": empty})).unwrap(), json!({"set": 6, "name": "Empty", "actions": 0}));
assert_eq!(app.ui.status, "");
}
/// Load Actions… lists the first 1,000 steps with an unknown command and counts them all, and
/// the status bar shows an action name or command id with no control character and at most 80
/// characters, while the set and the answer keep them as they are. One step is named in the
/// singular.
#[test]
fn load_actions_bounds_what_it_reports_of_unknown_commands() {
let mut app = app_with_sets();
let steps = vec![json!({"command": "example.unknown"}); 1001];
let many = json!({"format": "vcactions", "version": 1, "name": "Many", "actions": [{"name": "A", "steps": steps}]});
let r = app.run(LOAD_SET, json!({"data": many.to_string()})).unwrap();
assert_eq!((r["unknownCommands"].as_array().map(Vec::len), r["unknownCount"].clone()), (Some(1000), json!(1001)));
assert_eq!(r["unknownCommands"][999], json!({"action": "A", "actionIndex": 0, "step": 1000, "stepIndex": 999, "command": "example.unknown"}));
let (name, id) = ("Odd\u{1b}[31m\nname", format!("example.\r\n{}", "x".repeat(200)));
let odd = json!({"format": "vcactions", "version": 1, "name": "Odd", "actions": [{"name": name, "steps": [{"command": id}]}]});
let r = app.run(LOAD_SET, json!({"data": odd.to_string()})).unwrap();
assert_eq!((r["unknownCommands"][0]["action"].clone(), r["unknownCommands"][0]["command"].clone()), (json!(name), json!(id)));
assert_eq!(app.ui.action_sets.last().unwrap().actions[0].steps[0].0, id, "the set keeps the id");
let shown_id = format!("example.\u{fffd}\u{fffd}{}…", "x".repeat(70));
assert_eq!(
app.ui.status,
format!("Loaded “Odd”: 1 step has an unknown command and was kept: “Odd\u{fffd}[31m\u{fffd}name”, step 1, `{shown_id}`")
);
}
/// An action with an included step whose command is not known does not play at any speed: no
/// step runs, and the error names the step, a `command.batch` step's command by its place in
/// the batch too. An excluded step with an unknown command does not stop it.
#[test]
fn an_action_with_an_unknown_command_does_not_play() {
let mut app = VectorcraftApp::new(Session::new(), Default::default());
app.run("file.new", json!({"width": 200, "height": 100})).unwrap();
let id = vectorcraft_doc::NodeId(
app.run("shape.rectangle", json!({"x": 10, "y": 10, "width": 20, "height": 20})).unwrap()["id"].as_u64().unwrap(),
);
app.run("select.set", json!({"ids": [id.0]})).unwrap();
let step = || ("object.move".to_string(), json!({"dx": 5, "dy": 0}));
let inner = json!({"commands": [{"command": "object.move", "params": {"dx": 5, "dy": 0}}, {"command": "example.unknown.inner"}]});
app.ui.action_sets = vec![ActionSet::new(
"Test",
vec![
Action::new("Move", vec![step(), ("example.unknown.finish".into(), json!({})), step()]),
Action::new("Batch", vec![step(), ("command.batch".into(), inner)]),
],
)];
let x = |app: &VectorcraftApp| app.session.active().unwrap().doc.node(id).unwrap().geometric_bounds().unwrap().x0;
let before = x(&app);
for speed in [PlaybackSpeed::Accelerated, PlaybackSpeed::Step] {
app.ui.action_playback.speed = speed;
assert_eq!(play(&mut app, 0, 0).unwrap_err(), "step 2 of “Move” runs the unknown command `example.unknown.finish`");
assert_eq!(play(&mut app, 0, 1).unwrap_err(), "step 2.2 of “Batch” runs the unknown command `example.unknown.inner`");
assert_eq!(x(&app), before, "no step ran");
assert!(app.ui.action_playing.is_none());
}
app.ui.action_playback.speed = PlaybackSpeed::Accelerated;
app.ui.action_sets[0].actions[0].excluded_steps.insert(1);
play(&mut app, 0, 0).unwrap();
assert!((x(&app) - before - 10.0).abs() < 1e-9, "both included moves ran");
}
/// Where the host can read part of a file, Load Actions… reads one byte past 8 MiB: a larger
/// file is refused without reading all of it, and a smaller one loads.
#[test]
@@ -5086,7 +5266,9 @@ mod tests {
fn a_failing_step_ends_a_paced_playback_with_its_error() {
let (mut app, x) = app_with_three_moves();
app.run(PLAYBACK_OPTIONS, json!({"speed": "step"})).unwrap();
app.ui.action_sets[0].actions[0].steps[1] = ("no.such.command".into(), json!({}));
// A Select Object step that finds no object fails as it plays.
app.ui.action_sets[0].actions[0].steps[1] =
(SELECT_OBJECT_STEP.into(), json!({"note": "missing", "caseSensitive": false, "wholeWord": false}));
play(&mut app, 0, 0).unwrap();
assert_eq!(frame(&mut app, 0.0), None, "the frame after Play draws the first step");
assert_eq!(frame(&mut app, 0.0), None);
+48 -2
View File
@@ -41,7 +41,8 @@ pub(super) const MAX_SET_ACTIONS: usize = 1000;
/// The most steps [`read_set`] reads in one action.
pub(super) const MAX_ACTION_STEPS: usize = 10_000;
/// The most left-out steps that Load Actions… lists for an action set another app saved.
/// The most left-out steps that Load Actions… lists for an action set another app saved, and the
/// most steps with an unknown command it lists for an action set file.
const MAX_SKIPPED: usize = 1000;
/// An action set file: a header, the set's name and its actions.
@@ -488,6 +489,11 @@ fn load_aia(app: &mut VectorcraftApp, params: Value) -> Result<Value, String> {
/// Actions… would write as a file Load Actions… refuses (larger than 8 MiB, as a file with less
/// white space or a name that gets a number can give) is refused too, and no set is added.
///
/// A step whose command is not known now ([`super::KnownCommands`]), excluded or not, and a command
/// of a `command.batch` step that is not, still loads as it is. The answer then also lists them,
/// and the status bar names the first and how many there are → `{…, unknownCommands: [{action,
/// actionIndex, step, stepIndex, batchStep?, command}] (at most 1,000), unknownCount: n}`.
///
/// An action set another app saved as text (`.aia`, read with `actionSet.read`) comes in with its
/// actions and the steps that stand for a VectorCraft command ([`step_name`], [`step_commands`]),
/// with no params; a step that is off in the file is excluded from playback. A set with no name is
@@ -537,7 +543,47 @@ pub fn load_set(app: &mut VectorcraftApp, p: &Value) -> Result<Value, String> {
set.name = free_set_name(&app.ui.action_sets, &set.name);
// A number added to the name can make a file at the limit larger than it.
super::edit_keeps_set_loadable(app, None, &set)?;
let (unknown, unknown_count, first) = unknown_commands(&set);
let (name, actions) = (set.name.clone(), set.actions.len());
app.ui.action_sets.push(set);
Ok(json!({ "set": app.ui.action_sets.len() - 1, "name": name, "actions": actions }))
let mut answer = json!({ "set": app.ui.action_sets.len() - 1, "name": name, "actions": actions });
if let Some((action, step, command)) = first {
app.status(crate::i18n::msg_n(
unknown_count as u64,
"Loaded “{name}”: {n} step has an unknown command and was kept: “{action}”, step {step}, `{command}`",
"Loaded “{name}”: {n} steps have unknown commands and were kept; the first: “{action}”, step {step}, `{command}`",
&[
("name", &super::shown_text(&name)),
("action", &super::shown_text(&action)),
("step", &step),
("command", &super::shown_text(&command)),
],
));
answer["unknownCommands"] = json!(unknown);
answer["unknownCount"] = json!(unknown_count);
}
Ok(answer)
}
/// The steps of `set` whose command is not known now ([`super::KnownCommands`]), excluded steps
/// included: the first [`MAX_SKIPPED`] as `[{action, actionIndex, step, stepIndex, batchStep?,
/// command}]` (`step` and `batchStep` count from 1, the indexes from 0), how many there are, and the
/// first one's action name, place ([`super::step_place`]) and command.
fn unknown_commands(set: &ActionSet) -> (Vec<Value>, usize, Option<(String, String, String)>) {
let known = super::KnownCommands::now();
let (mut listed, mut count, mut first) = (vec![], 0usize, None);
for (a, action) in set.actions.iter().enumerate() {
for (step, in_batch, command) in action.unknown_commands(&known, false) {
count += 1;
first.get_or_insert_with(|| (action.name.clone(), super::step_place(step, in_batch), command.to_string()));
if listed.len() < MAX_SKIPPED {
let mut entry = json!({ "action": action.name, "actionIndex": a, "step": step + 1, "stepIndex": step, "command": command });
if let Some(j) = in_batch {
entry["batchStep"] = json!(j + 1);
}
listed.push(entry);
}
}
}
(listed, count, first)
}
+13 -3
View File
@@ -3299,7 +3299,13 @@ already walks Image Trace. Short agent entry points:
action and preference. An empty folder and the scratch disk choices `Startup` and `None` save. `ui.actionSet.load {path? | data?}` reads
the file at `path`, else a picked one, or the file's text `data`, adds its set after the other sets and returns
`{set, name, actions}`. A set named like one already in the panel gets the next free number (`Print 2`), and the
other sets and the current set stay as they are. An action set file (`.vcactions`) is JSON:
other sets and the current set stay as they are. A step whose command is not a built-in command, a command of an
installed plug-in, a View menu step or a stop, and such a command of a `command.batch` step, loads as it is, excluded
or not, and `ui.actionSet.save` writes it back. The answer then also has `unknownCommands: [{action, actionIndex, step,
stepIndex, batchStep?, command}]`, the first 1,000 such steps (`step` and `batchStep` count from 1, `actionIndex` and
`stepIndex` from 0, and `batchStep` is the command's place in a `command.batch` step), and `unknownCount`, how many
there are; the status bar names the first and the count, with control characters replaced and long names cut at 80
characters. These are VectorCraft's own rules. An action set file (`.vcactions`) is JSON:
`{"format": "vcactions", "version": 1 to 6, "name", "actions": [{"name", "steps": [{"command", "params", "excluded"?}]}]}`, each step
a command id and its params as `command.batch` takes them, or a stop: the command `action.stop` with
`{message, allowContinue}`. A Select Object step is the command `select.byNote` with `{note, caseSensitive,
@@ -3379,8 +3385,12 @@ already walks Image Trace. Short agent entry points:
made active, or that document was closed), the playback ends with a status and the rest do not play; a step that
makes another document active itself does not end it. A name that no
action has, or that more than one action in the sets looked in has, or whose every step is excluded, is an error, and
then nothing plays. So is an action played while another is still playing at Step by Step or Pause For. A
`command.batch` step, which an action played or a panel operation run as one batch records, plays as its own steps,
then nothing plays. So is an action played while another is still playing at Step by Step or Pause For. So is an
action with an included step whose command is not a built-in command, a command of an installed plug-in, a View menu
step or a stop at the time it plays, at every speed: the error names the first such step, as in step 2 of “Print”
runs the unknown command `example.finish`, and a command of a `command.batch` step by its place in the batch, as in
step 2.3. An excluded step is not checked.
A `command.batch` step, which an action played or a panel operation run as one batch records, plays as its own steps,
here and in Batch…. An action with an included stop plays up to the stop at any speed and then waits, with its
message box open, until `ui.action.continue` or `ui.action.stop`. At Accelerated the steps between two stops are one
undoable batch each. The result is then `{results, pending, atStop?}`, with `atStop: true` when the action already
+1
View File
@@ -772,6 +772,7 @@ Moved from the ROADMAP's "Shipped so far" on 2026-10-10. Update it when a featur
- Batch…: Override Save and Override Export name each file with the extension of the format the step writes, however the step spells the format (`.svg` and `SVG` give `.svg`, `png8` gives `.png`), in `action.batch`.
- Batch…: Override Export writes the files of an Export for Screens or Export Assets step into a folder for each source file or data set inside the destination folder, under the names the export gives them (`action.batch`). The folder and file names drop trailing periods and spaces (`a..svg` gives `a`). When two source files would get the same name that way (compared without case), or a later file's folder or file would take the name of an output an earlier file wrote, of a source file in the destination folder or, for data sets, of a file already there, Batch adds `-2`, `-3`… to the later one's name.
- Actions panel menu: Save Actions… writes the current action set with all its actions to a file, and Load Actions… adds the set from such a file to the panel ([Manage a set of actions](https://helpx.adobe.com/illustrator/desktop/automate-visualize-data/automate-actions/manage-a-set-of-actions.html); `ui.actionSet.save`, `ui.actionSet.load`). The file is VectorCraft's own action set file (`.vcactions`); a loaded set named like one in the panel gets the next free number.
- Actions panel menu: Load Actions… keeps a step whose command this build or its installed plug-ins do not have, and reports each one when the set loads: the `ui.actionSet.load` answer lists the action, step and command id (`unknownCommands`, `unknownCount`), and the status bar names the first and the count. An action with such a step included does not play, and the error names the step and its id before any step runs; an excluded one does not stop it. These are VectorCraft's own rules. Tests `panels::actions::tests::{load_actions_reports_steps_with_unknown_commands, load_actions_bounds_what_it_reports_of_unknown_commands, an_action_with_an_unknown_command_does_not_play}`.
- Actions panel menu: Save Actions… does not write a set with a step that sets a folder preference (the Fonts, Plug-ins, Templates and Recovery folders and the two scratch disks) to a folder, and names the action and the preference instead; an empty folder and the scratch disk choices Startup and None save. Export Preferences leaves out both scratch disks, and `ui.inspect` under automation read roots leaves such a folder outside them out of recorded steps. These are VectorCraft's own rules (`ui.actionSet.save`, `prefs.export`).
- Actions panel menu: Load Actions… also reads action sets saved as `.aia` files ([Actions panel overview](https://helpx.adobe.com/illustrator/desktop/automate-visualize-data/automate-actions/actions-panel-overview.html); `actionSet.read`, `ui.actionSet.load`). VectorCraft's own rules: the set comes in with all its actions. A step with a label and no recorded values comes in as the one menu command with the step's label, when that command is directly in a top menu, is what its menu bar item runs with no values and opens no dialog. A step that is off in the file stays excluded from playback. The other steps, recorded menu items included, are left out, and the status bar says how many.
- Actions panel: the panel menu's Action Options… renames the selected action and keeps its steps ([Actions panel overview](https://helpx.adobe.com/illustrator/desktop/automate-visualize-data/automate-actions/actions-panel-overview.html): the menu item opens a dialog that renames the action or gives it a function key and color; `ui.action.options`). It also sets the action's function key and color.