Skip to content

v6.13.0

Choose a tag to compare

@github-actions github-actions released this 04 Sep 05:49
  • A .md opened by path decodes as markdown rather than as plain text, and
    list_file_types offers it. The extension only adds a candidate the bytes
    already allow; File::from_memory has no name, so it still needs
    FileType::markdown. Closes #760.

  • Breaking: a document decrypted from a password-protected package is no
    longer savable — every save overload throws UnsupportedOperation, where it
    used to write the content out unprotected. Towards #64.

  • A .docx wp:anchor drawing floats at its offset with its wrap and side,
    instead of sitting in the line. Closes #803.

  • A .docx table's own borders (w:tblPr/w:tblBorders) are drawn, and no
    longer four times too thick. New TableStyle::border,
    ::border_inside_horizontal and ::border_inside_vertical, mirrored in the
    JNI, Apple and Python bindings.

  • A table cell in a text document starts its content at the top, as word and
    odf do.

  • A fitted or zoomed view scales its text with the page in WebKit, where the
    type used to stay at its unscaled size. HtmlViewportMode::fit_width_by_view
    is usable on iOS. Closes #761.

  • A PDF gs applies the /ExtGState stroke parameters /LW, /LC, /LJ,
    /ML and /D. A producer that sets the line width only there — Canva does —
    used to have every stroke drawn at the initial width of 1.

  • A manual page break starts a new page box, and prints as break-before:page.
    New BreakType and ParagraphStyle::break_before/break_after, mirrored in
    the JNI, Apple and Python bindings. Towards #174.

  • ODF's text:soft-page-break is no longer part of the element tree, so a
    DocumentPath past one shifts.

  • New DocumentFile::thumbnail(), the preview the package carries or
    nullopt, mirrored in the JNI, Apple and Python bindings. Closes #21.

  • Breaking (Swift only): HtmlConfig's optional settings are Swift
    optionals of the real type rather than NSNumber/NSValue boxes —
    spreadsheetLimit is a TableDimensions?, initialZoom a Double?, and so
    on. ObjC callers see the boxed properties unchanged. Closes #759.

  • The HTML renderer warns, rather than silently dropping, when it reaches an
    element type it has no translate_* for. Across the test corpus that is
    page_break and nothing else. Towards #150.

  • An ODF draw:object chart is drawn from the chart part's own markup, not
    from the replacement image beside it: bar, line, area, scatter, pie and ring,
    with their titles, legends, axes and series colours. An object holding no
    chart we can read keeps the replacement. Closes #179.

  • An ODF custom shape is drawn as the shape its draw:enhanced-geometry
    describes rather than as its bounding box: draw:enhanced-path,
    draw:equation, draw:modifiers and the two mirror attributes. Closes #159.

  • ODF draws the shape elements it used to drop whole: draw:path,
    draw:polygon, draw:polyline, draw:regular-polygon, draw:connector,
    draw:ellipse, draw:measure and draw:caption. New path() on
    CustomShape, mirrored in the JNI, Apple and Python bindings.

  • An ODF draw:circle is drawn as an ellipse rather than a circle inscribed in
    its box.

  • An ODF drawing shape is drawn where its draw:transform puts it. New
    transform() on Frame, Rect, Line, Circle and CustomShape,
    mirrored in the JNI, Apple and Python bindings.

  • A StarView metafile's text is decoded by the charset it names. Every
    encoding but UCS2 used to emit the file's own bytes, and the invalid utf-8
    a non-ascii label made of that cost the whole image.

  • A curve in a StarView metafile is drawn as a curve. The polygon flags that
    say which of its points are bezier control points were read and dropped, so
    every curve came out as a line through them.

  • A StarView metafile's map mode is read in full: its unit, so a drawing that
    switches to twips or points is no longer off by the factor between them, and
    the relative map mode, which composes with the one before it rather than
    replacing it.

  • A StarView metafile draws its gradients, hatches and transparent shapes:
    GRADIENT, GRADIENTEX, HATCH and TRANSPARENT.

  • A spreadsheet decodes in less memory: 626 MB peak instead of 914 MB on a
    297 MB content.xml. Rendered output is unchanged.

  • A StarView metafile draws its remaining primitives: LINE, ELLIPSE,
    ROUNDRECT, ARC, PIE, CHORD, POINT and PIXEL. The lines are what
    rules a table drawn as a metafile, which used to come out as floating
    numbers.

  • A StarView metafile clips what it says it clips: CLIPREGION and the two
    that intersect one into it. A drawing that ran outside the clip used to be
    shown in full.

  • A StarView metafile draws its bitmaps (#194): BMP, BMPEX and their
    scaling and part variants, transparency mask included. Such a chart used to
    render as an empty frame.

  • A text action in a StarView metafile draws the run it names, not the whole
    string. Text drawn in runs used to overprint itself into a smear.

  • StarView metafile text keeps its font: italic, bold, underline, strikeout,
    rotation, alignment, per-character positions, and the width a stretched run
    fills (#95).

  • A StarView metafile draws through a graphics state stack: a colour, font or
    map mode set inside a PUSH no longer leaks past its POP.

  • A filled StarView shape keeps its outline, a poly-polygon cuts its holes, a
    line takes its LineInfo, and the font size scales with the drawing.

  • Text in a StarView metafile is escaped into the svg it renders as. An & or
    < in a label used to cost the whole image.

  • A StarView metafile translation logs what it drops: unimplemented actions,
    and a failure it used to fall back from silently.

  • An html attribute value drops the control characters xml forbids. One
    escaper writes both html and svg now.


Features

  • Write the svg through a writer that escapes, and log what we drop (#779)
  • Draw the text run a metafile names, with the font it names (#785)
  • Draw the bitmaps a metafile carries, as png where that is smaller (#786)
  • Clip the drawing to what the metafile clips it to (#787)
  • Draw the primitives, an arc as an arc (#788)
  • Fill with the gradients, hatches and transparency a metafile asks for (#789)
  • Draw a curve as a curve, not as a line through its control points (#791)
  • Draw a shape where its draw:transform puts it (#796)
  • Draw the shape elements the parser used to drop (#797)
  • Read the enhanced geometry languages, formulas and path alike (#798)
  • Draw a custom shape as the shape, not as its box (#799)
  • Draw the chart an embedded object holds, not its replacement image (#800)
  • Warn on the element types the renderer drops, instead of dropping them silently (#805)
  • Give HtmlConfig's optional settings their real Swift types (#807)
  • Hand out the thumbnail the package already carries (#808)
  • Honour the manual page break, and stop calling the automatic one a break (#809)
  • Let the file name offer a type no content probe can find (#814)

Fixes

  • Draw through a graphics state stack, and stop the fill killing the stroke (#784)
  • Read the map mode's unit, and compose the relative one (#790)
  • Decode the text, and close out the plan (#793)
  • Apply the /ExtGState stroke parameters, not just the alphas (#810)
  • Scale the text with the fit, where webkit holds it back (#811)
  • Float an anchored drawing, and draw a table's own borders (#812)
  • Refuse to save a package we only hold decrypted (#813)

Performance

  • Narrow the stored ids, sort the payload tables, size the sheet arrays (#780)

Refactoring

  • Give the xml and png helpers their own internal packages (#792)
  • Give internal::Document the read-only defaults nine engines pasted (#804)

Documentation

  • Hand the diff to edit as generateDiff returns it (#783)
  • Plan the drawing work #771 asks for, in the order the corpus argues for (#795)
  • Retire the drawings plan, its stages having landed (#802)

Tests

  • Pin the public reference output #811 emits

Build

  • Ignore the conan output and the test/data symlink at the repo root

CI

  • Fetch sources through ConanCenter's backup, not the upstream host (#801)
  • Run every embedded font through OTS (#806)

Publishing v6.13.0

  • conansuccess · conan package (conan.yml)
  • mavensuccess · app.opendocument:odr-core-java — Maven Central + GitHub Packages
  • androidsuccess · app.opendocument:odr-core-android — Maven Central + GitHub Packages
  • pythonsuccess · pyodr wheels — PyPI
  • applesuccess · OdrCoreObjC.xcframework — the release asset and its manifest
  • wasmsuccess · @opendocument/odr-core — npm