.ai import: graphs open as their drawn art, with a note

A graph in a legacy .ai, or in a current file's editing data, is written
as `%_Gs`, its data and settings on `%_` lines, its drawn art in a group
with a `%_... Go` tag after each object, and `%_GS`. The reader stopped
on the graph operators as ones it doesn't know, so such a file did not
open through its layers.

The reader now leaves the graph's records out with their operands and
reads the drawn art as usual: the bars, lines and labels come in as the
groups, paths and type they are written as. Paint operators on `%_`
lines between `Gt` and `GT` set nothing. One note per file says the
graphs came in as plain art without their data or settings. A graph
that starts inside another, or doesn't end before its layer does, keeps
the art read so far with a second note. Graph operators outside a graph
stay unknown.
This commit is contained in:
dotCooCoo
2026-11-02 12:04:24 +07:00
committed by bflatastic
parent 69e5eecde0
commit 795cbc060d
29 changed files with 313 additions and 6 deletions
+39
View File
@@ -5248,3 +5248,42 @@ proptest! {
survive("mutated .ai blend", || Some(vectorcraft_eps::layered_ai(&private, Document::new(100.0, 100.0), vec![], false, true, 1.0).0))?;
}
}
/// A graph in `.ai` editing data, written by hand from the version 7 specification's chapter 17:
/// its data and settings on `%_` lines (cells, strings, an array, a name), then its drawn art, a bar
/// with its `Go` tag and an empty group, in a group.
fn graph_text() -> String {
"%_Gs\n%_10 10 110 90 Gb\n%_3 0 0 12 1 1 0 0 2 30 0 Gy\n%_6 1 1 0 80 70 0 50 60 80 70 Gd\n%_0 1 Gj\n\
%_1 () Ga 0 12 0 0 0 0 0 () 0 0 GA\n%_40 Gw\n%_2 2 1 1 Gz\n%_() Gc (East) Gc (Q1) Gc 7 Gc GC\n\
%_Gt\n%_(Bars) GD [1 2 3] 0 Ge\n%_/Name 1 Gi\n%_0.5 G\n%_0 g\n%_GT\n\
u\n0 0 0 1 k\n10 10 m\n10 50 L\n30 50 L\n30 10 L\nf\n%_2 0 0 0 Go\nu\nU\nU\n%_GS\n"
.to_string()
}
proptest! {
#![proptest_config(config())]
/// A `.ai` graph whose records are damaged, cut or hostile never panics. With only the numbers
/// in its records changed, the records keep their shape, and the bar still comes in.
#[test]
fn ai_graph_never_panics(cut in 0usize..700, edits in prop::collection::vec((0usize..700, prop::sample::select(vec!['0', '9', '-', '.', ' ', '\n', '(', ')', '[', ']', '/', '%', '_', 'G', 's', 'S', 't', 'T', 'u', 'U'])), 0..12), digits in prop::collection::vec((0usize..600, 0u8..10), 0..12)) {
let text = mutate_text(&graph_text(), cut, &edits);
let private = ai_private(&text);
survive("mutated .ai graph", || Some(vectorcraft_eps::layered_ai(&private, Document::new(100.0, 100.0), vec![], false, true, 1.0).0))?;
let src = graph_text();
let records = src.find("u\n0 0 0 1 k").unwrap_or(0).max(1);
let mut kept: Vec<char> = src.chars().collect();
for (at, d) in digits {
if let Some(c) = kept.get_mut(at % records).filter(|c| c.is_ascii_digit()) {
*c = char::from(b'0' + d);
}
}
let (doc, notes, read) = vectorcraft_eps::layered_ai(&ai_private(&kept.into_iter().collect::<String>()), Document::new(4000.0, 200.0), vec![], false, true, 1.0);
prop_assert!(read, "{:?}", notes);
let mut paths = 0;
doc.walk(|n| paths += usize::from(matches!(n.kind, vectorcraft_doc::NodeKind::Path { .. })));
prop_assert_eq!(paths, 1, "{:?}", notes);
prop_assert!(notes.iter().any(|n| n.contains("graphs come in as plain art")), "{:?}", notes);
prop_assert!(!notes.iter().any(|n| n.contains("art this can't read")), "the records aren't art: {:?}", notes);
}
}
+9 -2
View File
@@ -51,6 +51,10 @@
//! - Type in the legacy format (version 7 specification §15): `type To` … `TO`, read by
//! [`legacy_text`].
//!
//! - Graphs (version 7 specification §17): `%_Gs`, the graph's data and settings on `%_` lines,
//! its drawn art as ordinary groups, paths and type (each object followed by `%_… Go`), `%_GS`.
//! The drawn art is read; the data and settings are left out, with a note.
//!
//! - Swatches: the palette (`%AI5_BeginPalette`), read by [`super::palette`], replaces the
//! default swatches.
//!
@@ -92,9 +96,9 @@ use art::preview_png;
pub use document::{PaletteSwatches, VariableLibrary, artboards, palette, variables};
pub(crate) use document::{slot_frame, slot_of};
pub use types::IMAGE_TOO_LARGE;
use types::{BLEND_BUDGET, FLIP, Frame, GState, Kind, PatternHead, PendingEnvelope, Place, Raster};
use types::{BLEND_BUDGET, FLIP, Frame, GState, Graph, Kind, PatternHead, PendingEnvelope, Place, Raster};
#[cfg(test)]
pub use types::{NON_NATIVE_ART, NON_NATIVE_ART_UNREAD, VERSIONED_UNENDED};
pub use types::{GRAPH_PLAIN, GRAPH_UNENDED, NON_NATIVE_ART, NON_NATIVE_ART_UNREAD, VERSIONED_UNENDED};
pub(super) use types::{blend_mode, blend_name};
#[path = "legacy_text.rs"]
@@ -302,6 +306,8 @@ struct Reader<'a> {
/// The legacy text object being read (`To` … `TO`), and the modal type attributes.
text: Option<legacy_text::LegacyText>,
type_state: legacy_text::TypeState,
/// The graph being read (see [`Reader::graph_record`]).
graph: Option<Graph>,
}
/// A section comment's marker without its `AI<version>_` prefix and value (`AI14_BeginSymbol` →
@@ -399,6 +405,7 @@ impl<'a> Reader<'a> {
pattern_tiles: HashMap::new(),
text: None,
type_state: legacy_text::TypeState::default(),
graph: None,
}
}
@@ -529,6 +529,9 @@ impl<'a> Reader<'a> {
}
pub(super) fn finish(mut self) -> Result<Structure, String> {
if self.graph.take().is_some() {
self.warn(super::types::GRAPH_UNENDED);
}
// Envelopes whose plugin never closed them keep their drawn art.
if !self.envelopes.is_empty() {
self.envelopes.clear();
+41 -4
View File
@@ -1,9 +1,9 @@
use super::containers::close;
use super::document::slot_of;
use super::types::{BLENDS, FLIP, Frame, IGNORED, Kind, MAX_DEPTH};
use super::types::{BLENDS, FLIP, Frame, GRAPH_OPS, GRAPH_PLAIN, GRAPH_UNENDED, IGNORED, Kind, MAX_DEPTH};
use super::{
Affine, Appearance, AppearanceItem, Arc, BlendMode, Dash, FillLayer, FillRule, Gradient, GradientDef, HashMap, HashSet, Instance, Knockout,
LayerColor, LineCap, LineJoin, Node, NodeId, NodeKind, Paint, Reader, Rect, StrokeLayer, V, obj, paint,
Affine, Appearance, AppearanceItem, Arc, BlendMode, Dash, FillLayer, FillRule, Gradient, GradientDef, Graph, HashMap, HashSet, Instance,
Knockout, LayerColor, LineCap, LineJoin, Node, NodeId, NodeKind, Paint, Reader, Rect, StrokeLayer, V, obj, paint,
};
impl<'a> Reader<'a> {
@@ -77,6 +77,9 @@ impl<'a> Reader<'a> {
let mesh_ended = std::mem::take(&mut self.mesh_ended);
let vals = self.operands();
let vals = self.take_head(vals);
if self.graph_record(w, hidden) {
return Ok(());
}
// Only `Bh` reads an undefined number. Anywhere else it would reach a point or a size, so
// the operator is one the reader doesn't know, as before.
if w != "Bh" && !self.frames.is_empty() && vals.iter().any(|v| matches!(v, V::Num(n) if n.is_nan())) {
@@ -145,7 +148,14 @@ impl<'a> Reader<'a> {
a.name = vals.iter().rev().find_map(V::text).unwrap_or_default();
}
}
"LB" => self.end_layer()?,
"LB" => {
// A graph started in this layer that hasn't ended doesn't go on past it.
if self.graph.as_ref().is_some_and(|g| g.frames >= self.frames.len()) {
self.graph = None;
self.warn(GRAPH_UNENDED);
}
self.end_layer()?
}
// Paths.
"m" | "l" | "L" | "c" | "C" | "v" | "V" | "y" | "Y" => self.path_op(w, &vals)?,
"h" => close(&mut self.path),
@@ -324,6 +334,33 @@ impl<'a> Reader<'a> {
Ok(())
}
/// A graph's records (version 7 specification §17 and appendix A): `%_Gs` starts the graph on
/// a layer, `GS` ends it, and its data and settings (the operators in [`GRAPH_OPS`], and any
/// operator on a `%_` line between `Gt` and `GT`) are left out with their operands. Its drawn
/// art, and anything else, is read as usual. `true` when `w` was one of them.
fn graph_record(&mut self, w: &str, hidden: bool) -> bool {
let Some(g) = self.graph.as_mut() else {
// Outside a graph, its operators stay ones the reader doesn't know.
if w == "Gs" && hidden && !self.frames.is_empty() {
self.graph = Some(Graph { settings: false, frames: self.frames.len() });
self.warn(GRAPH_PLAIN);
return true;
}
return false;
};
match w {
// A graph doesn't start inside another: the one being read goes on.
"Gs" => self.warn(GRAPH_UNENDED),
"GS" => self.graph = None,
"Gt" => g.settings = true,
"GT" => g.settings = false,
_ if GRAPH_OPS.contains(&w) => {}
_ if hidden && g.settings => {}
_ => return false,
}
true
}
/// `… Lb`: a layer's options, `visible preview unlocked printing dimmed`, then the colour index
/// and its RGB. The colour index is at 5 with fewer than ten operands, 6 with ten to twelve
/// (`masks` before it) and 7 with thirteen or more (one more flag before it). Four places after
+25
View File
@@ -301,3 +301,28 @@ pub const NON_NATIVE_ART_UNREAD: &str = "non-native art (a placed PDF's content)
/// The name of the group a `/ForeignObject`'s art comes in as.
pub const NON_NATIVE_ART: &str = "Non-native art";
/// The note for a file with a graph (`%_Gs` … `%_GS`): its drawn art comes in, its data and
/// settings don't.
pub const GRAPH_PLAIN: &str = "graphs come in as plain art, without their data or settings";
/// The note for a graph that starts inside another or doesn't end before its layer does: the art
/// read so far is kept, and what follows the layer is read as usual.
pub const GRAPH_UNENDED: &str = "a graph's records don't end where they should: its art was read as it is";
/// A graph's records (the version 7 specification's chapter 17 and appendix A): two-letter
/// operators starting with `G`, read and left out with their operands.
pub(super) const GRAPH_OPS: &[&str] = &[
"G1", "G+", "Ga", "GA", "Gb", "Gc", "GC", "Gd", "GD", "Ge", "Gf", "Gg", "Gi", "Gj", "Gl", "Gm", "Go", "Gp", "Gr", "Gs", "GS", "Gt", "GT", "Gv",
"Gw", "GX", "Gx", "Gy", "Gz",
];
/// A graph being read (`%_Gs` … `%_GS`).
#[derive(Debug)]
pub(super) struct Graph {
/// Between `Gt` and `GT`, where the graph's settings may use paint and type operators on `%_`
/// lines too.
pub(super) settings: bool,
/// How many frames were open at its `Gs`: a layer that ends with fewer ends the graph.
pub(super) frames: usize,
}
+142
View File
@@ -3811,3 +3811,145 @@ fn an_objects_on_path_group_in_versioned_content_opens_once() {
assert_eq!(kids[0].children().unwrap().len(), 5);
assert!(kids[0].extras().objects_on_path.is_some());
}
use read::{GRAPH_PLAIN, GRAPH_UNENDED};
/// Editing data in the legacy format (version 7 specification, chapter 2): `%AI5_FileFormat 2.0`,
/// the art size and the template box in the header, then `body`.
fn stream7(body: &str) -> String {
format!(
"%!PS-Adobe-3.0\n%%Creator: test\n%AI5_FileFormat 2.0\n%AI5_ArtSize: 612 792\n%AI3_TemplateBox: 306 396 306 396\n%%EndComments\n\
%%BeginProlog\n%%EndProlog\n%%BeginSetup\n%%EndSetup\n{body}\n%%PageTrailer\ngsave annotatepage grestore showpage\n%%Trailer\n%%EOF\n"
)
}
/// One layer named `name` in the legacy format (ten operands before `Lb`) holding `art`.
fn layer7(name: &str, art: &str) -> String {
format!("%AI5_BeginLayer\n1 1 1 1 0 0 0 79 128 255 Lb\n({name}) Ln\n0 A\n{art}\nLB\n%AI5_EndLayer--\n")
}
/// A graph's data on `%_` lines, in the order the version 7 specification's chapter 17 gives:
/// bounds, style and dialog settings, a subscription, three axes, a column width and the table
/// (two rows of two cells, one of them empty).
const GRAPH_DATA: &str = "%_Gs\n%_10 10 110 90 Gb\n%_3 0 0 12 1 1 0 0 2 30 0 Gy\n%_6 1 1 0 80 70 0\n%_ 50 60 80 70 Gd\n%_0 1 Gj\n\
%_1 () Ga 0 12 0 0 0 0 0 () 0 0 GA\n%_2 () Ga 0 12 0 1 0.5 0 1 () 0 0 GA\n%_3 () Ga 0 12 0 4 1 0 0 () 0 0 GA\n%_40 Gw\n\
%_2 2 1 1 Gz\n%_() Gc (East) Gc\n%_(Q1) Gc 7 Gc GC\n";
/// A graph's settings (`Gt` … `GT`): a design's name and paint operators on `%_` lines.
const GRAPH_SETTINGS: &str = "%_Gt\n%_(Bars) GD\n%_0.5 G\n%_0 g\n%_1 0 Gv\n%_GT\n";
/// A graph whose drawn art is `art` (in its group, then `%_GS`).
fn graph(settings: &str, art: &str) -> String {
format!("{GRAPH_DATA}{settings}u\n{art}U\n%_GS\n")
}
/// A filled bar of a graph, with its `Go` tag.
fn bar(x: f64) -> String {
format!("0 0 0 1 k\n{}f\n%_2 0 0 0 Go\n", rect_path(x, 10.0, x + 20.0, 50.0))
}
/// The gray (`k`) of `n`'s stroke.
fn stroke_k(n: &Node) -> Option<f32> {
match n.appearance.stroke().and_then(|s| s.paint.color()) {
Some(Color::Gray { k }) => Some(k),
_ => None,
}
}
/// A graph opens as its drawn art: the bar comes in, in its group, with one note.
#[test]
fn a_graph_opens_as_its_drawn_art() {
let r = read(stream7(&layer7("Graph", &graph(GRAPH_SETTINGS, &bar(10.0)))).as_bytes()).unwrap();
let a = art(&r.doc);
assert_eq!(a.len(), 1);
let NodeKind::Group { children, clip: false } = &a[0].kind else { panic!("{:?}", a[0].kind) };
assert_eq!(children.len(), 1);
assert!(matches!(children[0].kind, NodeKind::Path { .. }));
assert_eq!(fill(&children[0]).color(), Some(Color::cmyk(0.0, 0.0, 0.0, 1.0)));
assert_eq!(r.warnings, [GRAPH_PLAIN]);
assert!(r.hidden_unread.is_empty(), "the records aren't unread art: {:?}", r.hidden_unread);
// Two graphs, the second without settings: one note still.
let two = format!("{}{}", graph(GRAPH_SETTINGS, &bar(10.0)), graph("", &bar(40.0)));
let r = read(stream7(&layer7("Graph", &two)).as_bytes()).unwrap();
assert_eq!(art(&r.doc).len(), 2);
assert_eq!(r.warnings, [GRAPH_PLAIN]);
// A graph with only the records a minimal one needs (bounds and table), and the newer header.
let minimal = "%_Gs\n%_0 0 50 50 Gb\n%_1 1 1 1 Gz\n%_3 Gc GC\n";
let r = read_ok(&layer(&format!("{minimal}u\n{}U\n%_GS\n", bar(0.0))));
assert_eq!(art(&r.doc).len(), 1);
assert_eq!(r.warnings, [GRAPH_PLAIN]);
}
/// Paint operators on `%_` lines in a graph's settings set nothing; the same operators in its drawn
/// art, and after it, paint as usual.
#[test]
fn a_graphs_settings_paint_nothing_and_its_drawn_art_paints_as_usual() {
let stroked = |x: f64| format!("{}S\n", rect_path(x, 60.0, x + 5.0, 70.0));
let drawn = format!("{}0.25 G\n{}", stroked(0.0), stroked(10.0));
let body = format!("0.75 G\n{}0.5 G\n{}", graph(GRAPH_SETTINGS, &drawn), stroked(20.0));
let r = read(stream7(&layer7("Graph", &body)).as_bytes()).unwrap();
let a = art(&r.doc);
assert_eq!(a.len(), 2);
let kids = a[0].children().unwrap();
assert_eq!(stroke_k(&kids[0]), Some(0.25), "the gray set before the graph, not its settings' `%_0.5 G`");
assert_eq!(stroke_k(&kids[1]), Some(0.75), "a gray set in the drawn art");
assert_eq!(stroke_k(&a[1]), Some(0.5), "a gray set after the graph");
}
/// Graph operators outside a graph stay operators the reader doesn't know: an error on a layer that
/// shows, noted as unread on `%_` lines (as any operator there), and no graph note.
#[test]
fn graph_operators_outside_a_graph_are_unknown() {
for stray in ["Gs\n", "Go\n", "1 2 Gc\n"] {
let err = read(stream7(&layer7("L", &format!("{}{stray}", rect_path(0.0, 0.0, 5.0, 5.0)))).as_bytes()).unwrap_err();
assert!(err.contains("operators VectorCraft doesn't know"), "{stray}: {err}");
}
for (stray, op) in [("%_2 0 0 0 Go\n", "`Go`"), ("%_GS\n", "`GS`"), ("%_1 2 Gc\n", "`Gc`")] {
let r = read(stream7(&layer7("L", &format!("{}f\n{stray}", rect_path(0.0, 0.0, 5.0, 5.0)))).as_bytes()).unwrap();
assert!(r.hidden_unread.contains(op), "{stray}: {:?}", r.hidden_unread);
assert!(r.warnings.is_empty(), "{stray}: {:?}", r.warnings);
}
}
/// A graph that starts inside another is noted and the first goes on; one that doesn't end stops at
/// its layer's end, with the art read so far, and the next layer reads as usual.
#[test]
fn malformed_graphs_keep_their_art() {
let nested = format!("{GRAPH_DATA}u\n{}%_Gs\n{}U\n%_GS\n", bar(0.0), bar(30.0));
let r = read(stream7(&layer7("Graph", &nested)).as_bytes()).unwrap();
assert_eq!(art(&r.doc)[0].children().unwrap().len(), 2);
assert_eq!(r.warnings, [GRAPH_PLAIN, GRAPH_UNENDED]);
let unended = format!("{GRAPH_DATA}%_Gt\nu\n{}U\n", bar(0.0));
let next = format!("%_0.5 G\n{}S\n", rect_path(0.0, 60.0, 5.0, 70.0));
let r = read(stream7(&format!("{}{}", layer7("Graph", &unended), layer7("Next", &next))).as_bytes()).unwrap();
assert_eq!(art(&r.doc).len(), 1, "the drawn art read before the layer ended");
let after = r.doc.layers[1].children().unwrap();
assert_eq!(stroke_k(&after[0]), Some(0.5), "the next layer isn't in the graph's settings");
assert_eq!(r.warnings, [GRAPH_PLAIN, GRAPH_UNENDED]);
// One that doesn't end before the file does.
let cut = stream7(&layer7("Graph", &format!("{GRAPH_DATA}u\n{}U\n", bar(0.0)))).replace("LB\n%AI5_EndLayer--\n", "");
assert!(read(cut.as_bytes()).is_err(), "a layer that doesn't end is still an error");
}
/// A graph's records in the shapes the specification's appendix A gives: several cells on one line,
/// strings, arrays and names as operands, and empty groups among its drawn art.
#[test]
fn a_graphs_records_take_their_operands() {
let settings = "%_Gt\n%_(Bars) GD [1 2 3] 0 Ge\n%_/Name 1 Gi (a) (b) Gl\n%_1 2 3 4 Gm 0 Gp 1 Gr 0 G+ 2 G1 0 Gf 0 Gg 0 Gx 1 GX\n%_GT\n";
let drawn = format!("u\nU\nu\nu\nU\nU\n{}", bar(10.0));
let r = read(stream7(&layer7("Graph", &graph(settings, &drawn))).as_bytes()).unwrap();
let a = art(&r.doc);
assert_eq!(a.len(), 1);
let kids = a[0].children().unwrap();
fn paths(n: &Node) -> usize {
match n.children() {
Some(c) => c.iter().map(|c| paths(c)).sum(),
None => usize::from(matches!(n.kind, NodeKind::Path { .. })),
}
}
assert!(matches!(kids.last().map(|k| &k.kind), Some(NodeKind::Path { .. })), "the bar is kept after the empty groups: {kids:?}");
assert_eq!(paths(&a[0]), 1, "the empty groups hold no art");
assert_eq!(r.warnings, [GRAPH_PLAIN]);
}
@@ -123,6 +123,37 @@ fn a_postscript_ai_that_names_its_prolog_without_including_it_opens_with_its_lay
assert_eq!(tree(d.layers[1].children().unwrap()), "p");
}
/// A `.ai` in PostScript form with a graph on each of two layers (version 7 specification §17): its
/// data on `%_` lines, then its drawn art in a group, each object followed by `%_… Go`.
fn graphs_on_layers() -> String {
let graph = |x: u32| {
format!(
"%_Gs\n%_{x} 10 {} 90 Gb\n%_2 0 0 12 1 1 0 0 2 30 0 Gy\n%_1 1 1 1 Gz\n%_() Gc 5 Gc GC\n%_Gt\n%_0.5 g\n%_GT\n\
u\n0 0 0 1 k\n{x} 10 m\n{} 10 L\n{} 50 L\n{x} 50 L\n{x} 10 L\nf\n%_1 0 0 0 Go\nu\nU\nU\n%_GS\n",
x + 60,
x + 20,
x + 20
)
};
NAMED_PROLOG
.replace("10 10 L\nS\nLB", &format!("10 10 L\nS\n{}LB", graph(100)))
.replace("190 90 L\nS\nLB", &format!("190 90 L\nS\n{}LB", graph(10)))
}
#[test]
fn graphs_open_as_their_drawn_art_on_their_layers() {
let r = import(graphs_on_layers().as_bytes()).unwrap();
assert!(!r.preview, "read through the layers, not a fallback preview");
let d = &r.document;
let names: Vec<_> = d.layers.iter().map(|l| l.name.clone().unwrap_or_default()).collect();
assert_eq!(names, ["SECTION::Cut", "SECTION::Hatch"]);
assert_eq!(tree(d.layers[0].children().unwrap()), "p g[p g[]]");
assert_eq!(tree(d.layers[1].children().unwrap()), "p g[p g[]]");
let notes: Vec<_> = r.warnings.iter().filter(|w| w.contains("graphs come in as plain art")).collect();
assert_eq!(notes.len(), 1, "{:?}", r.warnings);
assert!(!r.warnings.iter().any(|w| w.contains("doesn't know") || w.contains("couldn't be read")), "{:?}", r.warnings);
}
/// A `.ai` in PostScript form whose layers can't be read either says why, after what stopped its
/// program.
#[test]
+1
View File
@@ -4871,6 +4871,7 @@ digits Malayalam Malaiàlam
@msg an image of {w} × {h} pixels is shown at reduced size una imatge de {w} × {h} píxels es mostra a mida reduïda
@msg an image of {w} × {h} pixels is too large to draw una imatge de {w} × {h} píxels és massa gran per dibuixar-la
@msg an image VectorCraft can't read was left out s’ha omès una imatge que VectorCraft no pot llegir
@msg graphs come in as plain art, without their data or settings els gràfics s’importen com a il·lustració normal, sense les seves dades ni la seva configuració
@msg an image whose data is cut short was left out s’ha omès una imatge les dades de la qual estan tallades
@msg an object can't be read no es pot llegir un objecte
@msg an object in perspective would leave the edited grid un objecte en perspectiva sortiria de la quadrícula editada
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -4886,6 +4886,7 @@ imageTrace Outline Obrys
@msg objects with several fills or strokes, effects or brushes came in as their drawn look ({_1}): their appearance isn't editable yet objekty s více výplněmi nebo tahy, efekty či štětci byly načteny jako vykreslený vzhled ({_1}): jejich vzhled zatím nelze upravovat
@msg gradient “{name}” isn't defined in the file: a plain colour stands in for it přechod „{name}“ není v souboru definován: zastupuje ho plná barva
@msg an image VectorCraft can't read was left out obrázek, který VectorCraft neumí přečíst, byl vynechán
@msg graphs come in as plain art, without their data or settings grafy se načtou jako obyčejná grafika, bez svých dat a nastavení
@msg an image whose data is cut short was left out obrázek s useknutými daty byl vynechán
@msg linked pictures show the low-resolution preview saved in the file until their files are found: relink them in the Links panel propojené obrázky se zobrazují jako náhled v nízkém rozlišení uložený v souboru, dokud se nenajdou jejich soubory: znovu je propojte v panelu Propojení
@msg area type in frames too short for a line of the font it shows in got taller frames ({_1}): their type wouldn't show otherwise text v oblasti v rámcích příliš nízkých pro řádek písma, ve kterém se zde zobrazuje, dostal vyšší rámce ({_1}): jinak by nebyl vidět
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -4495,6 +4495,7 @@ theme Appearance Erscheinungsbild
@msg objects with several fills or strokes, effects or brushes came in as their drawn look ({_1}): their appearance isn't editable yet Objekte mit mehreren Flächen oder Konturen, Effekten oder Pinseln wurden so übernommen, wie sie gezeichnet aussehen ({_1}): Ihr Aussehen ist noch nicht bearbeitbar
@msg gradient “{name}” isn't defined in the file: a plain colour stands in for it der Verlauf „{name}“ ist in der Datei nicht definiert: Eine einfache Farbe steht an seiner Stelle
@msg an image VectorCraft can't read was left out ein Bild, das VectorCraft nicht lesen kann, wurde ausgelassen
@msg graphs come in as plain art, without their data or settings Diagramme werden als einfache Grafik übernommen, ohne ihre Daten und Einstellungen
@msg an image whose data is cut short was left out ein Bild mit abgeschnittenen Daten wurde ausgelassen
@msg linked pictures show the low-resolution preview saved in the file until their files are found: relink them in the Links panel verknüpfte Bilder zeigen die in der Datei gespeicherte Vorschau in niedriger Auflösung, bis ihre Dateien gefunden werden: Verknüpfen Sie sie im Bedienfeld „Verknüpfungen“ neu
@msg area type in frames too short for a line of the font it shows in got taller frames ({_1}): their type wouldn't show otherwise Flächentext in Rahmen, die für eine Zeile der Schrift, in der er hier erscheint, zu niedrig sind, hat höhere Rahmen bekommen ({_1}): Sonst wäre der Text nicht zu sehen
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -4528,6 +4528,7 @@ digits Malayalam Μαλαγιάλαμ
@msg objects with several fills or strokes, effects or brushes came in as their drawn look ({_1}): their appearance isn't editable yet τα αντικείμενα με πολλαπλά γεμίσματα, περιγράμματα, εφέ ή πινέλα εισήχθησαν ως απεικονίσεις ({_1}): η εμφάνισή τους δεν είναι ακόμη επεξεργάσιμη
@msg gradient “{name}” isn't defined in the file: a plain colour stands in for it το ντεγκραντέ «{name}» δεν ορίζεται στο αρχείο: χρησιμοποιείται στη θέση του ένα συμπαγές χρώμα
@msg an image VectorCraft can't read was left out παραλείφθηκε εικόνα που δεν μπορεί να διαβάσει το VectorCraft
@msg graphs come in as plain art, without their data or settings τα γραφήματα εισάγονται ως απλή γραφική, χωρίς τα δεδομένα και τις ρυθμίσεις τους
@msg an image whose data is cut short was left out παραλείφθηκε εικόνα με περικομμένα δεδομένα
@msg linked pictures show the low-resolution preview saved in the file until their files are found: relink them in the Links panel οι συνδεδεμένες εικόνες εμφανίζουν την προεπισκόπηση χαμηλής ανάλυσης που έχει αποθηκευτεί, μέχρι να βρεθούν τα αρχεία τους: επανασυνδέστε τις στον πίνακα Σύνδεσμοι
@msg area type in frames too short for a line of the font it shows in got taller frames ({_1}): their type wouldn't show otherwise οι περιοχές κειμένου με πλαίσια πολύ μικρά για μία γραμμή της γραμματοσειράς τους απέκτησαν μεγαλύτερο ύψος ({_1}), διαφορετικά το κείμενο δεν θα εμφανιζόταν
Can't render this file because it contains an unexpected character in line 164 and column 5.
+1
View File
@@ -4580,6 +4580,7 @@ axis Both Ambos
@msg objects with several fills or strokes, effects or brushes came in as their drawn look ({_1}): their appearance isn't editable yet los objetos con varios rellenos o trazos, efectos o pinceles se importaron con su aspecto dibujado ({_1}): su aspecto aún no se puede editar
@msg gradient “{name}” isn't defined in the file: a plain colour stands in for it el degradado “{name}” no está definido en el archivo: lo sustituye un color sólido
@msg an image VectorCraft can't read was left out se omitió una imagen que VectorCraft no puede leer
@msg graphs come in as plain art, without their data or settings los gráficos se importan como ilustración normal, sin sus datos ni sus ajustes
@msg an image whose data is cut short was left out se omitió una imagen con datos incompletos
@msg linked pictures show the low-resolution preview saved in the file until their files are found: relink them in the Links panel las imágenes vinculadas muestran la vista previa de baja resolución guardada en el archivo hasta que se encuentren sus archivos: vuelva a vincularlas en el panel Vínculos
@msg area type in frames too short for a line of the font it shows in got taller frames ({_1}): their type wouldn't show otherwise el texto de área en marcos demasiado bajos para una línea de la fuente en que se muestra recibió marcos más altos ({_1}): de otro modo no se vería
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -4788,6 +4788,7 @@ imageTrace Outline Ääriviiva
@msg objects with several fills or strokes, effects or brushes came in as their drawn look ({_1}): their appearance isn't editable yet objektit, joilla on useita täyttöjä tai viivoja, tehosteita tai siveltimiä, tuotiin piirretyn näköisinä ({_1}): niiden ulkoasua ei voi vielä muokata
@msg gradient “{name}” isn't defined in the file: a plain colour stands in for it liukuväriä “{name}” ei ole määritetty tiedostossa: sen tilalla on tasaväri
@msg an image VectorCraft can't read was left out kuva, jota VectorCraft ei voi lukea, jätettiin pois
@msg graphs come in as plain art, without their data or settings kaaviot tuodaan tavallisena grafiikkana ilman niiden tietoja ja asetuksia
@msg an image whose data is cut short was left out kuva, jonka data on katkennut, jätettiin pois
@msg linked pictures show the low-resolution preview saved in the file until their files are found: relink them in the Links panel linkitetyt kuvat näyttävät tiedostoon tallennetun matalan tarkkuuden esikatselun, kunnes niiden tiedostot löytyvät: linkitä ne uudelleen Linkit-paneelissa
@msg area type in frames too short for a line of the font it shows in got taller frames ({_1}): their type wouldn't show otherwise aluetekstin kehykset, jotka olivat liian matalia yhdelle riville niiden fontilla, korotettiin ({_1}): muuten niiden teksti ei näkyisi
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -4570,6 +4570,7 @@ axis Both Les deux
@msg objects with several fills or strokes, effects or brushes came in as their drawn look ({_1}): their appearance isn't editable yet les objets à plusieurs fonds ou contours, effets ou formes ont été importés tels qu’ils sont dessinés ({_1}) : leur aspect n’est pas encore modifiable
@msg gradient “{name}” isn't defined in the file: a plain colour stands in for it le dégradé « {name} » n’est pas défini dans le fichier : une couleur unie le remplace
@msg an image VectorCraft can't read was left out une image que VectorCraft ne peut pas lire a été ignorée
@msg graphs come in as plain art, without their data or settings les graphes sont importés comme illustration ordinaire, sans leurs données ni leurs réglages
@msg an image whose data is cut short was left out une image aux données tronquées a été ignorée
@msg linked pictures show the low-resolution preview saved in the file until their files are found: relink them in the Links panel les images liées affichent l’aperçu basse résolution enregistré dans le fichier tant que leurs fichiers ne sont pas trouvés : liez-les à nouveau dans le panneau Liens
@msg area type in frames too short for a line of the font it shows in got taller frames ({_1}): their type wouldn't show otherwise le texte captif dans des cadres trop bas pour une ligne de la police dans laquelle il s’affiche a reçu des cadres plus hauts ({_1}) : il ne s’afficherait pas autrement
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -4616,6 +4616,7 @@ imageTrace Outline Körvonal
@msg add a format to export adj meg egy exportálási formátumot
@msg already editing a pattern már folyik egy mintázat szerkesztése
@msg an image VectorCraft can't read was left out kimaradt egy kép, amelyet a VectorCraft nem tud olvasni
@msg graphs come in as plain art, without their data or settings a diagramok egyszerű grafikaként kerülnek be, adataik és beállításaik nélkül
@msg an image whose data is cut short was left out kimaradt egy csonka adatú kép
@msg linked pictures show the low-resolution preview saved in the file until their files are found: relink them in the Links panel a csatolt képek a fájlban mentett kis felbontású előnézetet mutatják, amíg a fájljaik elő nem kerülnek: csatold őket újra a Csatolások panelen
@msg area type in frames too short for a line of the font it shows in got taller frames ({_1}): their type wouldn't show otherwise a túl alacsony keretben lévő területszöveg, amelybe a megjelenítő betűtípus egy sora sem fér el, magasabb keretet kapott ({_1}): különben nem látszana
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -4621,6 +4621,7 @@ axis Both Entrambi
@msg objects with several fills or strokes, effects or brushes came in as their drawn look ({_1}): their appearance isn't editable yet gli oggetti con più riempimenti o tratti, effetti o pennelli sono stati importati come appaiono disegnati ({_1}): il loro aspetto non è ancora modificabile
@msg gradient “{name}” isn't defined in the file: a plain colour stands in for it la sfumatura “{name}” non è definita nel file: la sostituisce un colore pieno
@msg an image VectorCraft can't read was left out un'immagine che VectorCraft non può leggere è stata omessa
@msg graphs come in as plain art, without their data or settings i grafici vengono importati come grafica semplice, senza i loro dati e le loro impostazioni
@msg an image whose data is cut short was left out un'immagine con dati incompleti è stata omessa
@msg linked pictures show the low-resolution preview saved in the file until their files are found: relink them in the Links panel le immagini collegate mostrano l'anteprima a bassa risoluzione salvata nel file finché i loro file non vengono trovati: ricollegale nel pannello Collegamenti
@msg area type in frames too short for a line of the font it shows in got taller frames ({_1}): their type wouldn't show otherwise il testo in area in cornici troppo basse per una riga del font in cui viene mostrato ha ricevuto cornici più alte ({_1}): altrimenti non sarebbe visibile
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -4323,6 +4323,7 @@ swatch Bright Violet ビビッドバイオレット
@msg its objects are nested too deeply オブジェクトの入れ子が深すぎます
@msg its section ending with `%{end}` doesn't end `%{end}` で終わるはずのセクションが終わっていません
@msg an image VectorCraft can't read was left out VectorCraft で読み込めない画像は除外されました
@msg graphs come in as plain art, without their data or settings グラフは通常のアートとして読み込まれ、データと設定は保持されません
@msg an image whose data is cut short was left out データが途中で切れている画像は除外されました
@msg linked pictures show the low-resolution preview saved in the file until their files are found: relink them in the Links panel リンク画像は、元のファイルが見つかるまで、ファイルに保存された低解像度のプレビューで表示されます:リンクパネルで再リンクしてください
@msg area type in frames too short for a line of the font it shows in got taller frames ({_1}): their type wouldn't show otherwise 表示に使われるフォントの 1 行に対して低すぎるフレーム内のエリア内文字は、フレームを高くしました ({_1}): そうしないと文字が表示されません
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -4319,6 +4319,7 @@ font-technology Variable ცვლადი
@msg objects with several fills or strokes, effects or brushes came in as their drawn look ({_1}): their appearance isn't editable yet რამდენიმე შევსების ან კონტურის, ეფექტის ან ფუნჯის მქონე ობიექტები შემოვიდა დახატული სახით ({_1}): მათი იერსახე ჯერ არ რედაქტირდება
@msg gradient “{name}” isn't defined in the file: a plain colour stands in for it გრადიენტი „{name}“ ფაილში განსაზღვრული არ არის: მის ნაცვლად ერთგვაროვანი ფერია
@msg an image VectorCraft can't read was left out გამოსახულება, რომელსაც VectorCraft ვერ კითხულობს, გამოტოვებულია
@msg graphs come in as plain art, without their data or settings დიაგრამები შემოდის როგორც ჩვეულებრივი გრაფიკა, მათი მონაცემებისა და პარამეტრების გარეშე
@msg an image whose data is cut short was left out გამოსახულება, რომლის მონაცემებიც შეკვეცილია, გამოტოვებულია
@msg its editing data doesn't say where its art is მისი რედაქტირების მონაცემები არ მიუთითებს, სად არის მისი ნახატი
@msg this file was saved without PDF compatibility, and its editing data can't be read ({why}) ეს ფაილი PDF-თავსებადობის გარეშეა შენახული და მისი რედაქტირების მონაცემების წაკითხვა ვერ ხერხდება ({why})
Can't render this file because it is too large.
+1
View File
@@ -4250,6 +4250,7 @@ theme Appearance 외관
@msg its objects are nested too deeply 개체가 너무 깊게 중첩되어 있습니다
@msg its section ending with `%{end}` doesn't end `%{end}`로 끝나는 구역이 끝나지 않습니다
@msg an image VectorCraft can't read was left out VectorCraft가 읽을 수 없는 이미지는 제외했습니다
@msg graphs come in as plain art, without their data or settings 그래프는 데이터와 설정 없이 일반 아트로 가져왔습니다
@msg an image whose data is cut short was left out 데이터가 잘린 이미지는 제외했습니다
@msg linked pictures show the low-resolution preview saved in the file until their files are found: relink them in the Links panel 연결된 그림은 해당 파일을 찾을 때까지 파일에 저장된 저해상도 미리 보기로 표시됩니다: 링크 패널에서 다시 연결하세요
@msg area type in frames too short for a line of the font it shows in got taller frames ({_1}): their type wouldn't show otherwise 표시되는 글꼴의 한 줄보다 낮은 프레임의 영역 문자는 프레임을 더 높였습니다({_1}). 그렇지 않으면 문자가 표시되지 않습니다
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -4712,6 +4712,7 @@ imageTrace Outline Kontur
@msg objects with several fills or strokes, effects or brushes came in as their drawn look ({_1}): their appearance isn't editable yet obiekty z kilkoma wypełnieniami lub obrysami, efektami albo pędzlami wczytano jako ich narysowany wygląd ({_1}): ich wyglądu nie można jeszcze edytować
@msg gradient “{name}” isn't defined in the file: a plain colour stands in for it gradient „{name}” nie jest zdefiniowany w pliku: zastąpiono go jednolitym kolorem
@msg an image VectorCraft can't read was left out pominięto obraz, którego VectorCraft nie potrafi odczytać
@msg graphs come in as plain art, without their data or settings wykresy są wczytywane jako zwykła grafika, bez ich danych i ustawień
@msg an image whose data is cut short was left out pominięto obraz z uciętymi danymi
@msg linked pictures show the low-resolution preview saved in the file until their files are found: relink them in the Links panel połączone obrazy pokazują zapisany w pliku podgląd niskiej rozdzielczości, dopóki ich pliki nie zostaną znalezione: połącz je ponownie w panelu Łącza
@msg area type in frames too short for a line of the font it shows in got taller frames ({_1}): their type wouldn't show otherwise tekst akapitowy w ramkach niższych niż wiersz wyświetlanej czcionki otrzymał wyższe ramki ({_1}): inaczej tekst nie byłby widoczny
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -4162,6 +4162,7 @@ axis Both Ambos
@msg objects with several fills or strokes, effects or brushes came in as their drawn look ({_1}): their appearance isn't editable yet objetos com vários preenchimentos ou traços, efeitos ou pincéis entraram com a aparência desenhada ({_1}): sua aparência ainda não é editável
@msg gradient “{name}” isn't defined in the file: a plain colour stands in for it o gradiente “{name}” não está definido no arquivo: uma cor sólida o substitui
@msg an image VectorCraft can't read was left out uma imagem que o VectorCraft não consegue ler foi omitida
@msg graphs come in as plain art, without their data or settings os gráficos são importados como arte comum, sem seus dados nem configurações
@msg an image whose data is cut short was left out uma imagem com dados incompletos foi omitida
@msg its editing data doesn't say where its art is seus dados de edição não indicam onde está a arte
@msg this file was saved without PDF compatibility, and its editing data can't be read ({why}) este arquivo foi salvo sem compatibilidade com PDF e seus dados de edição não podem ser lidos ({why})
Can't render this file because it contains an unexpected character in line 6 and column 47.
+1
View File
@@ -4616,6 +4616,7 @@ axis Both Оба
@msg objects with several fills or strokes, effects or brushes came in as their drawn look ({_1}): their appearance isn't editable yet объекты с несколькими заливками или обводками, эффектами или кистями импортированы в нарисованном виде ({_1}): их оформление пока нельзя редактировать
@msg gradient “{name}” isn't defined in the file: a plain colour stands in for it градиент «{name}» не определён в файле: вместо него используется сплошной цвет
@msg an image VectorCraft can't read was left out изображение, которое VectorCraft не может прочитать, пропущено
@msg graphs come in as plain art, without their data or settings диаграммы импортируются как обычная графика, без их данных и настроек
@msg an image whose data is cut short was left out изображение с обрезанными данными пропущено
@msg linked pictures show the low-resolution preview saved in the file until their files are found: relink them in the Links panel связанные изображения показываются как сохранённый в файле просмотр низкого разрешения, пока их файлы не найдены: восстановите связи на панели «Связи»
@msg area type in frames too short for a line of the font it shows in got taller frames ({_1}): their type wouldn't show otherwise текст в области в рамках, слишком низких для строки шрифта, которым он отображается, получил более высокие рамки ({_1}): иначе он не был бы виден
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -4479,6 +4479,7 @@ axis Both Båda
@msg objects with several fills or strokes, effects or brushes came in as their drawn look ({_1}): their appearance isn't editable yet objekt med flera fyllningar eller konturer, effekter eller penslar importerades som sitt ritade utseende ({_1}): deras utseende går inte att redigera än
@msg gradient “{name}” isn't defined in the file: a plain colour stands in for it gradienten ”{name}” är inte definierad i filen: en enfärgad fyllning används i stället
@msg an image VectorCraft can't read was left out en bild som VectorCraft inte kan läsa utelämnades
@msg graphs come in as plain art, without their data or settings diagram läses in som vanlig grafik, utan sina data och inställningar
@msg an image whose data is cut short was left out en bild med avkortade data utelämnades
@msg linked pictures show the low-resolution preview saved in the file until their files are found: relink them in the Links panel länkade bilder visar förhandsgranskningen med låg upplösning som sparats i filen tills deras filer hittas: länka om dem i panelen Länkar
@msg area type in frames too short for a line of the font it shows in got taller frames ({_1}): their type wouldn't show otherwise områdestext i ramar som var för låga för en rad i det typsnitt den visas med fick högre ramar ({_1}): annars skulle texten inte synas
Can't render this file because it contains an unexpected character in line 5 and column 25.
+1
View File
@@ -4317,6 +4317,7 @@ axis Both Her İkisi
@msg objects with several fills or strokes, effects or brushes came in as their drawn look ({_1}): their appearance isn't editable yet çeşitli dolgulara veya konturlara, efektlere veya fırçalara sahip nesneler çizilmiş görünümleri olarak geldi ({_1}): görünümleri henüz düzenlenemez
@msg gradient “{name}” isn't defined in the file: a plain colour stands in for it “{name}” degradesi dosyada tanımlı değil: onun yerine düz bir renk geliyor
@msg an image VectorCraft can't read was left out VectorCraft'ın okuyamadığı bir resim dışarıda bırakıldı
@msg graphs come in as plain art, without their data or settings grafikler, verileri ve ayarları olmadan düz çizim olarak içe aktarılır
@msg an image whose data is cut short was left out verileri kısa kesilen bir resim dışarıda bırakıldı
@msg linked pictures show the low-resolution preview saved in the file until their files are found: relink them in the Links panel bağlantılı resimler, dosyaları bulunana kadar dosyaya kaydedilen düşük çözünürlüklü önizlemeyi gösterir: bunları Bağlantılar panelinde yeniden bağlayın
@msg area type in frames too short for a line of the font it shows in got taller frames ({_1}): their type wouldn't show otherwise çerçevelerdeki alan türü, daha uzun çerçevelerde gösterdiği yazı tipinin bir satırı için çok kısa ({_1}): bunların türü aksi halde gösterilmez
Can't render this file because it contains an unexpected character in line 5 and column 25.
+1
View File
@@ -4605,6 +4605,7 @@ axis Both Обидві
@msg objects with several fills or strokes, effects or brushes came in as their drawn look ({_1}): their appearance isn't editable yet об’єкти з кількома заливками або обведеннями, ефектами або пензлями імпортовані в намальованому вигляді ({_1}): їх оформлення поки що не можна редагувати
@msg gradient “{name}” isn't defined in the file: a plain colour stands in for it градієнт «{name}» не визначено у файлі: замість нього використовується суцільний колір
@msg an image VectorCraft can't read was left out зображення, яке VectorCraft не може прочитати, пропущено
@msg graphs come in as plain art, without their data or settings діаграми імпортуються як звичайна графіка, без їхніх даних і налаштувань
@msg an image whose data is cut short was left out зображення з обрізаними даними пропущено
@msg linked pictures show the low-resolution preview saved in the file until their files are found: relink them in the Links panel пов’язані зображення показуються як збережений у файлі перегляд низької роздільності, доки їхні файли не знайдено: відновіть зв’язки на панелі «Зв’язки»
@msg area type in frames too short for a line of the font it shows in got taller frames ({_1}): their type wouldn't show otherwise текст в області в рамках, занизьких для рядка шрифту, яким він показується, отримав вищі рамки ({_1}): інакше його не було б видно
Can't render this file because it contains an unexpected character in line 178 and column 5.
+1
View File
@@ -4268,6 +4268,7 @@ theme Appearance Giao diện
@msg add a format to export thêm định dạng để xuất
@msg already editing a pattern đang chỉnh sửa họa tiết
@msg an image VectorCraft can't read was left out một ảnh VectorCraft không đọc được đã bị bỏ qua
@msg graphs come in as plain art, without their data or settings biểu đồ được nhập dưới dạng hình vẽ thường, không kèm dữ liệu và thiết lập của chúng
@msg an image whose data is cut short was left out một ảnh bị cắt ngắn dữ liệu đã bị bỏ qua
@msg an object can't be read không thể đọc một đối tượng
@msg an object in perspective would leave the edited grid đối tượng trong phối cảnh sẽ rời khỏi lưới đang chỉnh sửa
Can't render this file because it contains an unexpected character in line 200 and column 5.
+1
View File
@@ -4048,6 +4048,7 @@ imageTrace Outline 轮廓
@msg its objects are nested too deeply 其对象嵌套过深
@msg its section ending with `%{end}` doesn't end 其以 `%{end}` 结束的部分没有结束
@msg an image VectorCraft can't read was left out 已略去 VectorCraft 无法读取的图像
@msg graphs come in as plain art, without their data or settings 图表作为普通图稿导入,不保留其数据和设置
@msg an image whose data is cut short was left out 已略去数据不完整的图像
@msg gradient “{name}” isn't defined in the file: a plain colour stands in for it 文件中未定义渐变“{name}”:已改用纯色代替
@msg objects with several fills or strokes, effects or brushes came in as their drawn look ({_1}): their appearance isn't editable yet 带有多个填色或描边、效果或画笔的对象已按其绘制外观导入 ({_1}):其外观尚不可编辑
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -1970,6 +1970,7 @@ file-filter Templates 範本
@msg its objects are nested too deeply 其物件巢狀層級過深
@msg its section ending with `%{end}` doesn't end 其以 `%{end}` 結尾的區段沒有結束
@msg an image VectorCraft can't read was left out 已略過 VectorCraft 無法讀取的影像
@msg graphs come in as plain art, without their data or settings 圖表以一般圖稿匯入,不保留其資料與設定
@msg an image whose data is cut short was left out 已略過資料不完整的影像
@msg gradient “{name}” isn't defined in the file: a plain colour stands in for it 檔案中未定義漸層「{name}」:已改用單色替代
@msg objects with several fills or strokes, effects or brushes came in as their drawn look ({_1}): their appearance isn't editable yet 具有多個填色或筆畫、效果或筆刷的物件已依其繪製外觀匯入 ({_1}):其外觀目前尚無法編輯
Can't render this file because it contains an unexpected character in line 6 and column 47.
+2
View File
@@ -91,6 +91,8 @@ private editing data. VectorCraft:
without the prolog opens since #1027, its legacy type (`To` … `TO`) since #868.
lines lost (#779), some files 4× slower to open since the editing data is read whole (#758), live effects,
brushes and symbols come in as their drawn look (#637; pattern fills are read since #1025); legacy `.ai`
without the prolog opens since #1027, its legacy type (`To` … `TO`) since #868. Graphs (`%_Gs` … `%_GS`)
come in as their drawn art, as plain groups, paths and type, without their data or settings, with a note.
without the prolog opens since #1027, its legacy type (`To` … `TO`) since #868, with its paragraphs' letter
and word spacing (`TC`, `TW`), hanging punctuation (`Tq`) and hyphenation (`Th`).
- Estimate: **~65%** for real exchange with Illustrator users (open: ~75%; save: PDF-compatible, or legacy