.ai import: a wraparound group's graphics wrap with no offset

Every graphic in a version 7 wraparound group (`*w` … `*W`), before
or after its type, is now a wrap object with an offset of 0 instead of
the 6 pt default, and a group with no type in it marks all of its
graphics. A graphic before the type is below it, so the type flows
around it only after it is moved above. Operands on `*w` or `*W`, and
a `*w` inside a compound path, are errors.

Docs: docs/file-format-parity.md.
This commit is contained in:
dotCooCoo
2026-11-02 12:04:06 +07:00
committed by bflatastic
parent 79d5b5a0bf
commit c3093fcafb
27 changed files with 91 additions and 12 deletions
+3 -1
View File
@@ -8,7 +8,9 @@
//! canvas (16,383 points around the template box's centre) or from edge to edge of one artboard
//! is a ruler guide on that layer ([`Document::guides`]); other guide paths stay paths.
//! - Groups `u` … `U`, compound paths `*u` … `*U`, clipping groups `q` … `Q` (the path painted
//! with `W` clips); a group's transparency and name follow its end.
//! with `W` clips); a group's transparency and name follow its end. A wraparound group `*w` …
//! `*W` (version 7 specification §15.4.2) is a group whose objects other than its type wrap
//! area type, with no offset.
//! - Paths: `m`, `l`/`L`, `c`/`C`, `v`/`V`, `y`/`Y`, painted by `N n F f S s B b` (lower case
//! closes), `(op) *` for a guide. Stroke `w J j M d`, fill rule `XR`, overprint `O`/`R`.
//! - State: hidden `Xw`, locked `A`, transparency `mode opacity isolate knockout shape Xy`.
+7 -7
View File
@@ -98,13 +98,13 @@ impl<'a> Reader<'a> {
self.pending_unread_fill = pending_unread_fill;
self.pending_unread_stroke = pending_unread_stroke;
}
// Wraparound text: the objects after its text object are wrap objects, at the default
// options (the format gives none) unless their dictionaries give theirs.
if matches!(kind, Kind::Wrap)
&& let Some(text) = kids.iter().position(|k| matches!(k.kind, NodeKind::Text(_)) || slot_of(k.name.as_deref()).is_some())
{
for k in kids.iter_mut().skip(text + 1).filter(|k| k.extras().wrap.is_none()) {
k.extras_mut().wrap = Some(TextWrap::default());
// Wraparound text: every object in it other than type is a wrap object, before the text or
// after it, with no offset (the format gives none) unless its dictionary gives its options.
// One before the text is below it, so the text flows around it only once it is moved above.
if matches!(kind, Kind::Wrap) {
let graphics = kids.iter_mut().filter(|k| !matches!(k.kind, NodeKind::Text(_)) && slot_of(k.name.as_deref()).is_none());
for k in graphics.filter(|k| k.extras().wrap.is_none()) {
k.extras_mut().wrap = Some(TextWrap { offset: 0.0, invert: false });
}
}
// A group holding only clipping paths (`q … u <path> W n U … Q`) doesn't clip on its own: `u`/`U` don't save
+5
View File
@@ -125,6 +125,11 @@ impl<'a> Reader<'a> {
self.end_path_quietly();
self.open(Kind::Compound, hidden)?
}
// A wraparound group takes no operands and isn't an element of a compound path.
"*w" | "*W" if !vals.is_empty() => return Err(format!("`{w}` takes no operands")),
"*w" if self.frames.iter().any(|f| matches!(f.kind, Kind::Compound)) => {
return Err("a wraparound group is inside a compound path".into());
}
"*w" => {
self.end_path_quietly();
self.open(Kind::Wrap, hidden)?
+2 -2
View File
@@ -142,8 +142,8 @@ pub(super) struct LayerAttrs {
pub(super) enum Kind {
Layer(Box<LayerAttrs>),
Group,
/// Wraparound text (`*w` … `*W`, version 7 specification §15.4.2): a group whose objects after
/// its text object are wrap objects.
/// Wraparound text (`*w` … `*W`, version 7 specification §15.4.2): a group whose objects other
/// than its type are wrap objects.
Wrap,
Compound,
Clip,
+31 -2
View File
@@ -3337,12 +3337,41 @@ fn legacy_wrap_group() {
assert_eq!(kids.len(), 1, "{:?}", r.warnings);
let NodeKind::Group { children, clip: false } = &kids[0].kind else { panic!("a group: {:?}", kids[0].kind) };
let wraps: Vec<(bool, bool)> = children.iter().map(|c| (matches!(c.kind, NodeKind::Text(_)), wrap_of(c).is_some())).collect();
assert_eq!(wraps, [(false, false), (true, false), (false, true), (false, true)], "{:?}", r.warnings);
assert_eq!(wrap_of(&children[2]), Some(vectorcraft_doc::TextWrap::default()));
assert_eq!(wraps, [(false, true), (true, false), (false, true), (false, true)], "objects before the text are wrap objects too: {:?}", r.warnings);
let none = Some(vectorcraft_doc::TextWrap { offset: 0.0, invert: false });
assert_eq!(wrap_of(&children[0]), none, "no offset");
assert_eq!(wrap_of(&children[2]), none, "no offset");
assert_eq!(wrap_of(&children[3]), Some(vectorcraft_doc::TextWrap { offset: 3.0, invert: true }));
assert!(!r.warnings.iter().any(|w| w.contains("*w") || w.contains("*W")), "{:?}", r.warnings);
}
/// A wraparound group with no type in it: each of its objects is a wrap object, with no offset.
#[test]
fn legacy_wrap_group_without_text() {
let body = format!("*w\n{RED}{}f\n{}f\n*W\n", rect_path(0.0, 0.0, 5.0, 5.0), rect_path(30.0, 30.0, 50.0, 50.0));
let r = read_ok(&layer(&body));
let kids = art(&r.doc);
assert_eq!(kids.len(), 1, "{:?}", r.warnings);
let NodeKind::Group { children, clip: false } = &kids[0].kind else { panic!("a group: {:?}", kids[0].kind) };
let wraps: Vec<_> = children.iter().map(|c| wrap_of(c)).collect();
assert_eq!(wraps, [Some(vectorcraft_doc::TextWrap { offset: 0.0, invert: false }); 2]);
}
/// `*w` and `*W` take no operands, and a wraparound group can't be an element of a compound path.
#[test]
fn legacy_wrap_group_errors() {
let square = format!("{RED}{}f\n", rect_path(0.0, 0.0, 5.0, 5.0));
for (body, error) in [
(format!("1 *w\n{square}*W\n"), "`*w` takes no operands"),
(format!("*w\n{square}0 *W\n"), "`*W` takes no operands"),
(format!("*u\n*w\n{square}*W\n*U\n"), "a wraparound group is inside a compound path"),
(format!("*u\nu\n*w\n{square}*W\nU\n*U\n"), "a wraparound group is inside a compound path"),
] {
let e = read(stream(&layer(&body)).as_bytes()).unwrap_err();
assert!(e.contains(error), "{body:?}: {e}");
}
}
/// The printer's crop marks Illustrator draws after the last layer (`%AI3_BeginCrops`, inside
/// `userdict /AI3_noCropMarks known not { … } if`) aren't art outside the layers: the file reads
/// from its layers, without them (the crop area is `%AI3_Cropmarks`).
+2
View File
@@ -4810,6 +4810,8 @@ digits Malayalam Malaiàlam
@msg `{to}` is not an available name `{to}` no és un nom disponible
@msg `{what}` closes nothing `{what}` no tanca res
@msg `{what}` closes something it didn't open `{what}` tanca una cosa que no havia obert
@msg `{w}` takes no operands `{w}` no admet operands
@msg a wraparound group is inside a compound path un grup d’ajustament del text és dins d’un traçat compost
@msg a bitmap is empty un mapa de bits és buit
@msg a bitmap is too large to read un mapa de bits és massa gran per llegir-lo
@msg a bristle brush name can have at most {max} characters: `{name}` has {count} el nom d’un pinzell de cerres pot tenir com a màxim {max} caràcters: `{name}` en té {count}
Can't render this file because it contains an unexpected character in line 2 and column 73.
+2
View File
@@ -4868,6 +4868,8 @@ imageTrace Outline Obrys
@msg this isn't a flat-colour logo ({_1}% of its solid areas match a few flat colours), so Flat Logo mode would turn its gradients into patches: use Color mode instead nejde o logo s plnými barvami ({_1} % jeho plných ploch odpovídá několika plným barvám), takže režim Ploché logo by z jeho přechodů udělal skvrny: použijte místo toho režim Barva
@msg `{what}` closes nothing `{what}` nic neuzavírá
@msg `{what}` closes something it didn't open `{what}` uzavírá něco, co neotevřel
@msg `{w}` takes no operands `{w}` nepřijímá žádné operandy
@msg a wraparound group is inside a compound path skupina obtékání textu je uvnitř složené cesty
@msg a path has too many points cesta má příliš mnoho bodů
@msg it ends inside a layer končí uvnitř vrstvy
@msg it has art outside its layers má kresbu mimo své vrstvy
Can't render this file because it contains an unexpected character in line 2 and column 73.
+2
View File
@@ -4477,6 +4477,8 @@ theme Appearance Erscheinungsbild
@msg this isn't a flat-colour logo ({_1}% of its solid areas match a few flat colours), so Flat Logo mode would turn its gradients into patches: use Color mode instead dies ist kein Logo aus flächigen Farben ({_1} % seiner einfarbigen Bereiche entsprechen wenigen flächigen Farben), daher würde der Modus „Flaches Logo“ seine Verläufe in Flecken zerlegen: Verwenden Sie stattdessen den Modus „Farbe“
@msg `{what}` closes nothing `{what}` schließt nichts
@msg `{what}` closes something it didn't open `{what}` schließt etwas, das es nicht geöffnet hat
@msg `{w}` takes no operands `{w}` nimmt keine Operanden
@msg a wraparound group is inside a compound path eine Textumfluss-Gruppe liegt in einem zusammengesetzten Pfad
@msg a path has too many points ein Pfad hat zu viele Punkte
@msg it ends inside a layer es endet innerhalb einer Ebene
@msg it has art outside its layers es enthält Grafik außerhalb seiner Ebenen
Can't render this file because it contains an unexpected character in line 2 and column 73.
+2
View File
@@ -4510,6 +4510,8 @@ digits Malayalam Μαλαγιάλαμ
@msg this isn't a flat-colour logo ({_1}% of its solid areas match a few flat colours), so Flat Logo mode would turn its gradients into patches: use Color mode instead αυτό δεν είναι λογότυπο επίπεδων χρωμάτων ({_1}% των συμπαγών περιοχών του αντιστοιχούν σε λίγα χρώματα), επομένως η λειτουργία Επίπεδο λογότυπο θα μετατρέψει τα ντεγκραντέ σε κηλίδες: χρησιμοποιήστε τη λειτουργία Χρώμα
@msg `{what}` closes nothing το `{what}` δεν κλείνει κανένα στοιχείο
@msg `{what}` closes something it didn't open το `{what}` κλείνει στοιχείο που δεν άνοιξε
@msg `{w}` takes no operands το `{w}` δεν δέχεται τελεστέους
@msg a wraparound group is inside a compound path μια ομάδα αναδίπλωσης κειμένου βρίσκεται μέσα σε σύνθετη διαδρομή
@msg a path has too many points η διαδρομή έχει υπερβολικά πολλά σημεία
@msg it ends inside a layer τερματίζει μέσα σε επίπεδο
@msg it has art outside its layers περιέχει σχέδιο εκτός των επιπέδων του
Can't render this file because it contains an unexpected character in line 164 and column 5.
+2
View File
@@ -4562,6 +4562,8 @@ axis Both Ambos
@msg this isn't a flat-colour logo ({_1}% of its solid areas match a few flat colours), so Flat Logo mode would turn its gradients into patches: use Color mode instead esto no es un logotipo de colores planos ({_1}% de sus zonas sólidas coinciden con unos pocos colores planos), así que el modo Logotipo plano convertiría sus degradados en manchas: usa el modo Color
@msg `{what}` closes nothing `{what}` no cierra nada
@msg `{what}` closes something it didn't open `{what}` cierra algo que no abrió
@msg `{w}` takes no operands `{w}` no admite operandos
@msg a wraparound group is inside a compound path un grupo de ceñir texto está dentro de un trazado compuesto
@msg a path has too many points un trazado tiene demasiados puntos
@msg it ends inside a layer terminan dentro de una capa
@msg it has art outside its layers tienen ilustraciones fuera de sus capas
Can't render this file because it contains an unexpected character in line 2 and column 73.
+2
View File
@@ -4770,6 +4770,8 @@ imageTrace Outline Ääriviiva
@msg this isn't a flat-colour logo ({_1}% of its solid areas match a few flat colours), so Flat Logo mode would turn its gradients into patches: use Color mode instead tämä ei ole tasavärinen logo ({_1} % sen yhtenäisistä alueista vastaa muutamaa tasaväriä), joten Tasavärilogo-tila muuttaisi sen liukuvärit laikuiksi: käytä sen sijaan Väri-tilaa
@msg `{what}` closes nothing `{what}` ei sulje mitään
@msg `{what}` closes something it didn't open `{what}` sulkee jotain, mitä se ei avannut
@msg `{w}` takes no operands `{w}` ei ota operandeja
@msg a wraparound group is inside a compound path tekstin rivitysryhmä on yhdistelmäpolun sisällä
@msg a path has too many points polulla on liian monta pistettä
@msg it ends inside a layer se päättyy tason sisään
@msg it has art outside its layers siinä on kuvitusta tasojensa ulkopuolella
Can't render this file because it contains an unexpected character in line 2 and column 73.
+2
View File
@@ -4552,6 +4552,8 @@ axis Both Les deux
@msg this isn't a flat-colour logo ({_1}% of its solid areas match a few flat colours), so Flat Logo mode would turn its gradients into patches: use Color mode instead ce n’est pas un logo en aplats ({_1} % de ses zones pleines correspondent à quelques couleurs unies), donc le mode Logo en aplats transformerait ses dégradés en taches : utilisez le mode Couleur
@msg `{what}` closes nothing `{what}` ne ferme rien
@msg `{what}` closes something it didn't open `{what}` ferme quelque chose qu’il n’a pas ouvert
@msg `{w}` takes no operands `{w}` n’accepte aucun opérande
@msg a wraparound group is inside a compound path un groupe d’habillage de texte se trouve dans un tracé transparent
@msg a path has too many points un tracé a trop de points
@msg it ends inside a layer elles se terminent à l’intérieur d’un calque
@msg it has art outside its layers elles contiennent des illustrations hors de leurs calques
Can't render this file because it contains an unexpected character in line 2 and column 73.
+2
View File
@@ -4553,6 +4553,8 @@ imageTrace Outline Körvonal
@msg `{to}` is not an available name ez a név nem használható: `{to}`
@msg `{what}` closes nothing `{what}` semmit sem zár le
@msg `{what}` closes something it didn't open `{what}` olyat zár le, amit nem nyitott meg
@msg `{w}` takes no operands `{w}` nem fogad operandusokat
@msg a wraparound group is inside a compound path egy szövegkörbefuttatási csoport összetett útvonalon belül van
@msg a bitmap is empty egy bitkép üres
@msg a bitmap is too large to read egy bitkép túl nagy a beolvasáshoz
@msg A browser with WebGPU or WebGL2 is required. WebGPU-t vagy WebGL2-t támogató böngésző szükséges.
Can't render this file because it contains an unexpected character in line 2 and column 73.
+2
View File
@@ -4603,6 +4603,8 @@ axis Both Entrambi
@msg this isn't a flat-colour logo ({_1}% of its solid areas match a few flat colours), so Flat Logo mode would turn its gradients into patches: use Color mode instead questo non è un logo a colori piatti ({_1}% delle sue aree piene corrisponde a pochi colori piatti), quindi la modalità Logo piatto trasformerebbe i suoi sfumati in macchie: usa la modalità Colore
@msg `{what}` closes nothing `{what}` non chiude nulla
@msg `{what}` closes something it didn't open `{what}` chiude qualcosa che non ha aperto
@msg `{w}` takes no operands `{w}` non accetta operandi
@msg a wraparound group is inside a compound path un gruppo di testo attorno si trova in un tracciato composto
@msg a path has too many points un tracciato ha troppi punti
@msg it ends inside a layer terminano all'interno di un livello
@msg it has art outside its layers contengono grafica al di fuori dei loro livelli
Can't render this file because it contains an unexpected character in line 2 and column 73.
+2
View File
@@ -4307,6 +4307,8 @@ swatch Bright Violet ビビッドバイオレット
@msg unknown command `{0}`; did you mean `{1}`? `{0}` は不明なコマンドです。`{1}` のことですか?
@msg `{what}` closes nothing `{what}` に対応する開始部分がありません
@msg `{what}` closes something it didn't open `{what}` が対応しない開始部分を閉じています
@msg `{w}` takes no operands `{w}` はオペランドを取りません
@msg a wraparound group is inside a compound path テキストの回り込みグループが複合パスの中にあります
@msg a path has too many points ポイントが多すぎるパスがあります
@msg it ends inside a layer レイヤーの途中で終わっています
@msg it has art outside its layers レイヤーの外にアートがあります
Can't render this file because it contains an unexpected character in line 2 and column 73.
+2
View File
@@ -4302,6 +4302,8 @@ font-technology Variable ცვლადი
@msg this isn't a flat-colour logo ({_1}% of its solid areas match a few flat colours), so Flat Logo mode would turn its gradients into patches: use Color mode instead ეს ერთფეროვანი ლოგო არ არის (მისი მყარი არეების {_1}% რამდენიმე ერთგვაროვან ფერს ემთხვევა), ამიტომ Flat Logo რეჟიმი მის გრადიენტებს ლაქებად აქცევდა: გამოიყენეთ Color რეჟიმი
@msg `{what}` closes nothing `{what}` არაფერს ხურავს
@msg `{what}` closes something it didn't open `{what}` ხურავს იმას, რაც არ გაუხსნია
@msg `{w}` takes no operands `{w}` ოპერანდებს არ იღებს
@msg a wraparound group is inside a compound path ტექსტის გარსშემოვლების ჯგუფი შედგენილი ტრაექტორიის შიგნითაა
@msg a path has too many points ტრაექტორიას ზედმეტად ბევრი წერტილი აქვს
@msg it ends inside a layer ის შრის შიგნით მთავრდება
@msg it has art outside its layers მას შრეების გარეთ ნახატი აქვს
Can't render this file because it is too large.
+2
View File
@@ -4234,6 +4234,8 @@ theme Appearance 외관
@msg unknown command `{0}`; did you mean `{1}`? 알 수 없는 명령 `{0}`: `{1}`을(를) 의미하셨습니까?
@msg `{what}` closes nothing `{what}`이(가) 닫는 항목이 없습니다
@msg `{what}` closes something it didn't open `{what}`이(가) 열지 않은 항목을 닫습니다
@msg `{w}` takes no operands `{w}`은(는) 피연산자를 받지 않습니다
@msg a wraparound group is inside a compound path 문자 감싸기 그룹이 컴파운드 패스 안에 있습니다
@msg a path has too many points 패스의 점이 너무 많습니다
@msg it ends inside a layer 레이어 안에서 끝납니다
@msg it has art outside its layers 레이어 밖에 아트웍이 있습니다
Can't render this file because it contains an unexpected character in line 2 and column 73.
+2
View File
@@ -4694,6 +4694,8 @@ imageTrace Outline Kontur
@msg this isn't a flat-colour logo ({_1}% of its solid areas match a few flat colours), so Flat Logo mode would turn its gradients into patches: use Color mode instead to nie jest logo z płaskimi kolorami ({_1}% jego jednolitych obszarów pasuje do kilku płaskich kolorów), więc tryb Płaskie logo zamieniłby jego gradienty w plamy: użyj trybu Kolor
@msg `{what}` closes nothing `{what}` niczego nie zamyka
@msg `{what}` closes something it didn't open `{what}` zamyka coś, czego nie otworzył
@msg `{w}` takes no operands `{w}` nie przyjmuje operandów
@msg a wraparound group is inside a compound path grupa oblewania tekstem jest wewnątrz ścieżki złożonej
@msg a path has too many points ścieżka ma zbyt wiele punktów
@msg it ends inside a layer kończy się wewnątrz warstwy
@msg it has art outside its layers ma kompozycję poza warstwami
Can't render this file because it contains an unexpected character in line 2 and column 73.
+2
View File
@@ -4148,6 +4148,8 @@ axis Both Ambos
@msg this isn't a flat-colour logo ({_1}% of its solid areas match a few flat colours), so Flat Logo mode would turn its gradients into patches: use Color mode instead este não é um logotipo de cores chapadas ({_1}% de suas áreas sólidas correspondem a poucas cores chapadas), então o modo Logotipo plano transformaria seus gradientes em manchas: use o modo Cor
@msg `{what}` closes nothing `{what}` não fecha nada
@msg `{what}` closes something it didn't open `{what}` fecha algo que não abriu
@msg `{w}` takes no operands `{w}` não aceita operandos
@msg a wraparound group is inside a compound path um grupo de quebra de texto está dentro de um traçado composto
@msg a path has too many points um traçado tem pontos demais
@msg it ends inside a layer termina dentro de uma camada
@msg it has art outside its layers tem arte fora de suas camadas
Can't render this file because it contains an unexpected character in line 6 and column 47.
+2
View File
@@ -4598,6 +4598,8 @@ axis Both Оба
@msg this isn't a flat-colour logo ({_1}% of its solid areas match a few flat colours), so Flat Logo mode would turn its gradients into patches: use Color mode instead это не логотип из плоских цветов ({_1}% его сплошных областей совпадает с несколькими плоскими цветами), поэтому режим «Плоский логотип» превратил бы градиенты в пятна: используйте режим «Цвет»
@msg `{what}` closes nothing `{what}` ничего не закрывает
@msg `{what}` closes something it didn't open `{what}` закрывает то, что не открывал
@msg `{w}` takes no operands `{w}` не принимает операндов
@msg a wraparound group is inside a compound path группа обтекания текстом находится внутри составного контура
@msg a path has too many points в контуре слишком много точек
@msg it ends inside a layer они заканчиваются внутри слоя
@msg it has art outside its layers в них есть графика вне слоёв
Can't render this file because it contains an unexpected character in line 2 and column 73.
+2
View File
@@ -4461,6 +4461,8 @@ axis Both Båda
@msg this isn't a flat-colour logo ({_1}% of its solid areas match a few flat colours), so Flat Logo mode would turn its gradients into patches: use Color mode instead det här är ingen logotyp i platta färger ({_1} % av dess enfärgade ytor matchar några få platta färger), så läget Platt logotyp skulle göra om dess gradienter till fläckar: använd läget Färg i stället
@msg `{what}` closes nothing `{what}` stänger ingenting
@msg `{what}` closes something it didn't open `{what}` stänger något som den inte öppnade
@msg `{w}` takes no operands `{w}` tar inga operander
@msg a wraparound group is inside a compound path en textombrytningsgrupp ligger inuti en sammansatt bana
@msg a path has too many points en bana har för många punkter
@msg it ends inside a layer den slutar inuti ett lager
@msg it has art outside its layers den har grafik utanför sina lager
Can't render this file because it contains an unexpected character in line 5 and column 25.
+2
View File
@@ -4299,6 +4299,8 @@ axis Both Her İkisi
@msg this isn't a flat-colour logo ({_1}% of its solid areas match a few flat colours), so Flat Logo mode would turn its gradients into patches: use Color mode instead bu düz renkli bir logo değildir (düz alanların %{_1}'si birkaç düz renkle eşleşir), dolayısıyla Düz Logo modu degradelerini yamalara dönüştürür: bunun yerine Renk modunu kullanın
@msg `{what}` closes nothing `{what}` hiçbir şeyi kapatmaz
@msg `{what}` closes something it didn't open `{what}` açmadığı bir şeyi kapatıyor
@msg `{w}` takes no operands `{w}` işlenen almaz
@msg a wraparound group is inside a compound path bir metin kaydırma grubu bileşik bir yolun içinde
@msg a path has too many points bir yolun çok fazla noktası var
@msg it ends inside a layer bir katmanın içinde bitiyor
@msg it has art outside its layers katmanlarının dışında sanat var
Can't render this file because it contains an unexpected character in line 5 and column 25.
+2
View File
@@ -4587,6 +4587,8 @@ axis Both Обидві
@msg this isn't a flat-colour logo ({_1}% of its solid areas match a few flat colours), so Flat Logo mode would turn its gradients into patches: use Color mode instead це не логотип із плоских кольорів ({_1}% його суцільних областей збігається з кількома плоскими кольорами), тому режим «Плоский логотип» перетворив би градієнти на плями: використовуйте режим «Колір»
@msg `{what}` closes nothing `{what}` нічого не закриває
@msg `{what}` closes something it didn't open `{what}` закриває те, що не відкривав
@msg `{w}` takes no operands `{w}` не приймає операндів
@msg a wraparound group is inside a compound path група обтікання текстом розташована всередині складеного контуру
@msg a path has too many points у контурі занадто багато точок
@msg it ends inside a layer вони закінчуються всередині шару
@msg it has art outside its layers у них є графіка поза шарами
Can't render this file because it contains an unexpected character in line 178 and column 5.
+2
View File
@@ -4205,6 +4205,8 @@ theme Appearance Giao diện
@msg `{to}` is not an available name `{to}` không phải là tên khả dụng
@msg `{what}` closes nothing `{what}` không đóng gì
@msg `{what}` closes something it didn't open `{what}` đóng thứ nó chưa mở
@msg `{w}` takes no operands `{w}` không nhận toán hạng
@msg a wraparound group is inside a compound path một nhóm bao văn bản nằm trong một đường dẫn phức
@msg a bitmap is empty ảnh bitmap trống
@msg a bitmap is too large to read ảnh bitmap quá lớn để đọc
@msg A browser with WebGPU or WebGL2 is required. Cần trình duyệt hỗ trợ WebGPU hoặc WebGL2.
Can't render this file because it contains an unexpected character in line 200 and column 5.
+2
View File
@@ -4032,6 +4032,8 @@ imageTrace Outline 轮廓
@msg unknown command `{0}`; did you mean `{1}`? 未知命令 `{0}`;您是否想输入 `{1}`?
@msg `{what}` closes nothing `{what}` 没有可结束的内容
@msg `{what}` closes something it didn't open `{what}` 结束了并非由它开始的内容
@msg `{w}` takes no operands `{w}` 不接受操作数
@msg a wraparound group is inside a compound path 文本绕排组位于复合路径内
@msg a path has too many points 某条路径的点过多
@msg it ends inside a layer 它在图层内部结束
@msg it has art outside its layers 它有位于图层之外的图稿
Can't render this file because it contains an unexpected character in line 2 and column 73.
+2
View File
@@ -1958,6 +1958,8 @@ file-filter Templates 範本
@msg unknown command `{0}`; did you mean `{1}`? 未知的指令 `{0}`;您是指 `{1}` 嗎?
@msg `{what}` closes nothing `{what}` 沒有可結束的內容
@msg `{what}` closes something it didn't open `{what}` 結束了並非由它開始的內容
@msg `{w}` takes no operands `{w}` 不接受運算元
@msg a wraparound group is inside a compound path 文字繞圖群組位於複合路徑內
@msg a path has too many points 有一條路徑的點過多
@msg it ends inside a layer 它在圖層內部結束
@msg it has art outside its layers 它有位於圖層之外的圖稿
Can't render this file because it contains an unexpected character in line 6 and column 47.
File diff suppressed because one or more lines are too long