EMF and WMF import now plays the records with the shared craft-metafile
reader (storytold/craft-libs#778, at the craft-libs rev the SVG, EPS and
DXF crates already use) and maps its picture onto the document here:
paths with their fills, strokes, caps, joins, miter limits and dashes,
clipping groups, images and point type. The EMF and WMF record players in
crates/metafile/src/import and the DIB decoder they used are removed. The
writers are unchanged, and the PICT reader keeps its own player.
What changes for a file being opened, placed or pasted, and for an EPS
file's Windows metafile preview (read when its PostScript can't be):
- An EMF that draws with EMF+ records is read from them. It opened empty,
with a warning that EMF+ is not read. A file with both kinds of record
is read from its EMF+ records too.
- Hatched and pattern brushes fill with the average color of the brush's
tile, translucent where the tile has gaps. Hatches filled with the hatch
color and pattern brushes with gray.
- Translucent fills, strokes and EMF+ text keep their alpha as opacity.
- Text keeps a stretch across from the world transform; it kept only the
turn. Text the file clips to a rectangle is clipped to it, and an
underlined or struck-through font gives underlined or struck-through
type.
- A clip path whose bounding box holds the whole picture is kept unless
it is that rectangle; a diamond or a bow tie around the picture was
dropped.
- Images drawn with SRCAND, SRCPAINT or SRCINVERT are drawn as they look
over white, and images drawn with other raster operations are drawn as
a plain copy. They were left out with a warning.
- Excluded clip rectangles and the other clip region modes are applied.
A clip path combined with RGN_OR, RGN_XOR or RGN_DIFF is ignored
without the warning it gave.
- An image past the reader's size or pixel limits, or one that can't be
decoded, is left out without a warning of its own. A file past the
reader's limits (more than 32 nested clip paths, 200,000 drawn items,
256 MiB held) is read up to that point without a warning.
- An EMF record whose size is not a multiple of 4 ends the file, with the
"ends early" warning.
Tests: an EMF+ only picture imports its fill (it failed before), a dual
EMF+ file draws its translucent EMF+ fill and not its fallback, hatch and
pattern brush colors, clipped and underlined text, excluded clip
rectangles, a shared clipping group, an odd record size, WMF at 1440
units an inch without a placeable header and at its own units with an
inverted box, an EMF without a frame, diamond and bow-tie clips, text with a
stretch, clips nested past the stack and 200,000 clip records; the fuzz
test gains random EMF+ records.
PDF/X-1a allows device colors only, but a gray TIFF that carried a gray
ICC profile kept it when no color conversion applied, and the export
then failed its PDF/X check. A gray or RGB PNG or JPEG with a profile
went the same way through the PDF writer. In PDF/X-1a, images are now
written without the profile they carry; the other standards and plain
exports keep it.
The Hindi localization page said the untranslated report has no Hindi
section, and the language table said Hindi has no gaps in it. On main
f793044f83 the report lists 608 missing Hindi rows (28 menu strings,
30 tl! strings, 11 undo labels and 539 messages) and 68 more that every
checked language lacks (10 menu strings, 2 undo labels and 56 messages).
Both pages now give these counts, and the table's remaining work for
Hindi includes the reported rows.
A radial gradient whose circles both have the same negative radius (as a
variable font's instance can give) draws no circle. A glyph painted with
only that gradient was read as no colour glyph, so layout drew its
outline instead. It is now colour art that draws nothing.
Indonesian had a row in both tables with different counts. Keep the row
in the key-language table and give it the counts on main at a47d7eec91.
Bosnian was described as having complete messages, but `bs` is not in
COMPLETE_MESSAGES. Its row now gives its counts and the menu, `tl!`
and undo gaps the untranslated report lists, and the measurement note
names Bosnian with the other languages outside COMPLETE_MESSAGES.
Paste read a file copied in a file manager whole with std::fs::read,
with no size limit. It now checks the opened file's size against
MAX_BYTES (64 MiB, the limit the Wayland clipboard reads already use,
now shared) before reading its first bytes, and reads the rest with a
bounded reader, so a file that grows after the check is read to at
most one byte past the limit and skipped. A skipped file lets the next
copied file that is art paste, as an unreadable one does.