summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/changelog/0.13.0.md324
-rw-r--r--docs/changelog/welcome.md1
-rw-r--r--docs/src/lib.rs1
3 files changed, 326 insertions, 0 deletions
diff --git a/docs/changelog/0.13.0.md b/docs/changelog/0.13.0.md
new file mode 100644
index 00000000..50819f65
--- /dev/null
+++ b/docs/changelog/0.13.0.md
@@ -0,0 +1,324 @@
+---
+title: Unreleased changes planned for 0.13.0
+description: Changes slated to appear in Typst 0.13.0
+---
+
+# Unreleased
+
+## Highlights
+- There is now a distinction between [proper paragraphs]($par) and just
+ inline-level content. This is important for future work on accessibility and
+ means that [first line indent]($par.first-line-indent) can now be enabled for
+ all paragraphs instead of just consecutive ones.
+- The [`outline`] has a better out-of-the-box look and is more customizable
+- The new [`curve`] function (that supersedes the `path` function) provides a
+ simpler and more flexible interface for creating Bézier curves
+- The `image` function now supports raw [pixel raster formats]($image.format)
+ for generating images from within Typst
+- Functions that accept [file paths]($syntax/#paths) now also accept raw
+ [bytes] instead, for full flexibility
+- WebAssembly [plugins]($plugin) are more flexible and automatically run
+ multi-threaded
+- Fixed a long-standing bug where single-letter strings in math (`[$"a"$]`)
+ would be displayed in italics
+- You can now specify which charset should be [covered]($text.font) by which
+ font family
+- The [`pdf.embed`] function lets you embed arbitrary files in the exported
+ PDF
+- HTML export is currently under active development. The feature is still _very_
+ incomplete, but already available for experimentation behind a feature flag.
+
+## Model
+- There is now a distinction between [proper paragraphs]($par) and just
+ inline-level content **(Breaking change)**
+ - All text at the root of a document is wrapped in paragraphs. Meanwhile, text
+ in a container (like a block) is only wrapped in a paragraph if the
+ container holds any block-level content. If all of the content is
+ inline-level, no paragraph is created.
+ - In the laid-out document, it's not immediately visible whether text became
+ part of a paragraph. However, it is still important for accessibility, HTML
+ export, and for properties like `first-line-indent`.
+ - Show rules on `par` now only affect proper paragraphs
+ - The `first-line-indent` and `hanging-indent` properties also only affect
+ proper paragraphs
+ - Creating a `{par[..]}` with body content that is not fully inline-level will
+ result in a warning
+ - The default show rules of various built-in elements like lists, quotes, etc.
+ were adjusted to ensure they produce/don't produce paragraphs as appropriate
+- The [`outline`] function was fully reworked to improve its out-of-the-box
+ behavior **(Breaking change)**
+ - [Outline entries]($outline.entry) are now [blocks]($block) and are thus
+ affected by block spacing
+ - The `{auto}` indentation mode now aligns numberings and titles outline-wide
+ for a grid-like look
+ - Automatic indentation now also indents entries without a numbering
+ - Titles wrapping over multiple lines now have hanging indent
+ - The page number won't appear alone on its own line anymore
+ - The link now spans the full entry instead of just the title and page number
+ - The default spacing between outline leader dots was increased
+ - The [`fill`]($outline.entry.fill) parameter was moved from `outline` to
+ `outline.entry` and can thus be configured through show-set rules
+ - Removed `body` and `page` fields from outline entry
+ - Added `indented`, `prefix`, `inner`, `body`, and `page` methods on outline
+ entries to simplify writing of show rules
+- Added configuration to [`par.first-line-indent`] for indenting all paragraphs
+ instead of just consecutive ones
+- Added [`form`]($ref.form) parameter to `ref` function. Setting the form to
+ `{"page"}` will produce a page reference instead of a textual one.
+- Added [`document.description`] field, which results in corresponding PDF and
+ HTML metadata
+- Added [`enum.reversed`] parameter
+- Added support for Greek [numbering]
+- When the [`link`] function wraps around a container like a [block], it will
+ now generate only one link for the whole block instead of individual links for
+ all the visible leaf elements. This significantly reduces PDF file sizes when
+ combining `link` and [`repeat`].
+- The [`link`] function will now only strip one prefix (like `mailto:` or
+ `tel:`) instead of multiple
+- The link function now suppresses hyphenation via a built-in show-set rule
+ rather than through its default show rule
+- Displaying the page counter without a specified numbering will now take the
+ page numbering into account
+
+## Visualization
+- Added new [`curve`] function that supersedes the [`path`] function and
+ provides a simpler and more flexible interface. The `path` function is now
+ deprecated.
+- The `image` function now supports raw [pixel raster formats]($image.format).
+ This can be used to generate images from within Typst without the need for
+ encoding in an image exchange format.
+- Added [`image.scaling`] parameter for configuring how an image is scaled by
+ PNG export and PDF viewers (smooth or pixelated)
+- Added [`image.icc`] parameter for providing or overriding the ICC profile of
+ an image
+- Renamed `pattern` to [`tiling`]. The name `pattern` remains as a deprecated
+ alias.
+- Added [`gradient.center`], [`gradient.radius`], [`gradient.focal-center`], and
+ [`gradient.focal-radius`] methods
+- Fixed interaction of clipping and outset on [`box`] and [`block`]
+- Fixed panic with [`path`] of infinite length
+- Fixed non-solid (e.g. tiling) text fills in clipped blocks
+- Auto-detection of image formats from a raw buffer now has basic support for
+ SVGs
+
+## Scripting
+- Functions that accept [file paths]($syntax/#paths) now also accept raw
+ [bytes]
+ - [`image`], [`cbor`], [`csv`], [`json`], [`toml`], [`xml`], and [`yaml`] now
+ support a path string or bytes and their `.decode` variants are deprecated
+ - [`plugin`], [`bibliography`], [`bibliography.style`], [`cite.style`],
+ [`raw.theme`], and [`raw.syntaxes`] now accept bytes in addition to path
+ strings. These did not have `.decode` variants, so this adds new
+ flexibility.
+ - The `path` argument/field of [`image`] and [`bibliography`] was renamed to
+ `source` and `sources`, respectively **(Minor breaking change)**
+- Improved WebAssembly [plugins]($plugin)
+ - The `plugin` type is replaced by a [`plugin` function]($plugin) that returns
+ a [module] containing normal Typst functions. This module can be used with
+ import syntax. **(Breaking change)**
+ - Plugins now automatically run in multiple threads without any changes by
+ plugin authors
+ - A new [`plugin.transition`] API is introduced which allows plugins to run
+ impure initialization in a way that doesn't break Typst's purity guarantees
+- The variable name bound by a bare import (no renaming, no import list) is now
+ determined statically and dynamic imports without `{as}` renaming (e.g.
+ `{import "ot" + "her.typ"}`) are a hard error **(Breaking change)**
+- Values of the [`arguments`] type can now be added with `+` and
+ [joined]($scripting/#blocks) in curly-braced code blocks
+- Functions in an element function's scope can now be called with method syntax,
+ bringing elements and types closer (in anticipation of a future full
+ unification of the two). Currently, this is only useful for [`outline.entry`]
+ as no other element function defines methods.
+- Added [`calc.norm`] function
+- Added support for 32-bit floats in [`float.from-bytes`] and [`float.to-bytes`]
+- The [`decimal`] constructor now also accepts decimal values
+- Improved `repr` of [symbols]($symbol), [arguments], and [types]($type)
+- Duplicate [symbol] variants and modifiers are now a hard error
+ **(Breaking change)**
+
+## Math
+- Fixed a bug where single letter strings in math (`[$"a"$]`) would be displayed
+ in italics
+- Math function calls can now have hyphenated named arguments and support
+ [argument spreading]($arguments/#spreading)
+- Better looking accents thanks to support for the `flac` (Flattened Accent
+ Forms) and `dtls` (Dotless Forms) OpenType features
+- Added `lcm` [text operator]($math.op)
+- The [`bold`]($math.bold) function now works with ϝ and Ϝ
+- The [`italic`]($math.italic) function now works with ħ
+- Fixed a bug where the extent of a math equation was wrongly affected by
+ internal metadata
+- Fixed interaction of [`lr`]($math.lr) and [context] expressions
+- Fixed weak spacing being unconditionally ignored in [`lr`]($math.lr)
+- Fixed sub/superscripts sometimes being in the wrong position with
+ [`lr`]($math.lr)
+- Fixed multi-line annotations (e.g. overbrace) changing the math baseline
+- Fixed merging of attachments when the base is a nested equation
+- Fixed resolving of contextual (em-based) text sizes within math
+- Fixed spacing around ⊥
+
+## Bibliography
+- Prose and author-only citations now use editor names if the author names are
+ unavailable
+- Some non-standard but widely used BibLaTeX `editortype`s like `producer`,
+ `writer`, `scriptwriter`, and `none` (defined by widespread style
+ `biblatex-chicago` to mean performers within `music` and `video` entries) are
+ now recognized
+- CSL styles can now render affixes around the bibliography
+- For BibTeX entries with `eprinttype = {pubmed}`, the PubMed ID will now be
+ correctly processed
+- Whitespace handling for strings delimiting initialized names has been improved
+- Uppercase spelling after apostrophes used as quotation marks is now possible
+- Fixed bugs around the handling of CSL delimiting characters
+- Fixed a problem with parsing multibyte characters in page ranges that could
+ prevent Hayagriva from parsing some BibTeX page ranges
+- Updated CSL APA style
+- Updated CSL locales for Finnish, Swiss German, Austrian German, German, and
+ Arabic
+
+## Text
+- Added support for specifying which charset should be [covered]($text.font) by
+ which font family
+- Added [`all`]($smallcaps.all) parameter to `smallcaps` function that also
+ enables small capitals on uppercase letters
+- Added basic i18n for Basque and Bulgarian
+- [Justification]($par.justify) does not affect [raw] blocks anymore
+- [CJK-Latin-spacing]($text.cjk-latin-spacing) does not affect [raw] text
+ anymore
+- Fixed wrong language codes being used for Greek and Ukrainian
+- Fixed default quotes for Croatian
+- Fixed crash in RTL text handling
+- Added support for [`raw`] syntax highlighting for a few new languages: CFML,
+ NSIS, and WGSL
+- New font metadata exception for New Computer Modern Sans Math
+- Updated bundled New Computer Modern fonts to version 7.0
+
+## Layout
+- Fixed various bugs with footnotes
+ - Fixed footnotes getting lost when multiple footnotes were nested within
+ another footnote
+ - Fixed endless loops with empty and overlarge footnotes
+ - Fixed crash with overlarge footnotes within a floating placement
+- Fixed sizing of quadratic shapes ([`square`] and [`circle`])
+- Fixed [`block.sticky`] not working properly at the top of a container
+- Fixed crash due to consecutive weak spacing
+- Fixed crash when a [block] or text have negative sizes
+- Fixed unnecessary hyphenations occurring in rare scenarios due to a bad
+ interaction between padding and paragraph optimization
+- Fixed lone [citations]($cite) in [`align`] not becoming their own paragraph
+
+## Syntax
+- Top-level closing square brackets that do not have a matching opening square
+ bracket are now a hard error **(Minor breaking change)**
+- Adding a space between the identifier and the parentheses in a set rule is not
+ allowed anymore **(Minor breaking change)**
+- Numbers with a unit cannot have a base prefix anymore, e.g. `0b100000pt` is
+ not allowed anymore. Previously, it was syntactically allowed but always
+ resolved to a value of zero. **(Minor breaking change)**
+- Using `is` as an identifier will now warn as it might become a keyword in the
+ future
+- Fixed minor whitespace handling bugs
+ - in math mode argument lists
+ - at the end of headings
+ - between a term list's term and description
+- Fixed parsing of empty single line raw blocks with 3+ backticks and a language
+ tag
+- Fixed minor bug with parentheses parsing in math
+- Markup that can only appear at the start of the line (headings, lists) can now
+ also appear at the start of a list item
+- A shebang `#!` at the very start of a file is now ignored
+
+## PDF export
+- Added `pdf.embed` function for embedding arbitrary files in the exported PDF
+- Added support for PDF/A-3b export
+- The PDF timestamp will now contain the timezone by default
+
+## HTML export
+**Note:** HTML export is currently under active development. The feature is
+still _very_ incomplete, but already available for experimentation behind a
+feature flag.
+
+- Added HTML output support for some (but not all) of the built-in elements
+- Added [`html.elem`] function for outputting an arbitrary HTML element
+- Added [`html.frame`] function for integrating content that requires layout
+ into HTML (by embedding an SVG)
+- Added [`target`] function which returns either `{"paged"}` or `{"html"}`
+ depending on the export target
+
+## Tooling and Diagnostics
+- Autocompletion improvements
+ - Added autocompletion for file paths
+ - Smarter autocompletion of variables: Completing `{rect(fill: |)}` will now
+ only show variables which contain a valid fill (either directly or nested,
+ e.g. a dictionary containing a valid fill)
+ - Different functions will now autocomplete with different brackets (round vs
+ square) depending on which kind is more useful
+ - Positional parameters which are already provided aren't autocompleted again
+ anymore
+ - Fixed variable autocompletion not considering parameters
+ - Added autocompletion snippets for common figure usages
+ - Fixed autocompletion after half-completed import item
+ - Fixed autocompletion for `cite` function
+- Added warning when an unconditional return in a code block discards joined
+ content
+- Fixed error message when accessing non-existent label
+- Fixed handling of nested imports in IDE functionality
+
+## Command Line Interface
+- Added `--features` argument and `TYPST_FEATURES` environment variable for
+ opting into experimental features. The only feature so far is `html`.
+- Added a live reloading HTTP server to `typst watch` when targeting HTML
+- Fixed self-update not being aware about certain target architectures
+- Fixed crash when piping `typst fonts` output to another command
+
+## Symbols
+- New
+ - `inter`, `inter.and`, `inter.big`, `inter.dot`, `inter.double`, `inter.sq`,
+ `inter.sq.big`, `inter.sq.double`, `integral.inter`
+ - `asymp`, `asymp.not`
+ - `mapsto`, `mapsto.long`
+ - `divides.not.rev`, `divides.struck`
+ - `interleave`, `interleave.big`, `interleave.struck`
+ - `eq.triple.not`, `eq.dots`, `eq.dots.down`, `eq.dots.up`
+ - `smt`, `smt.eq`, `lat`, `lat.eq`
+ - `colon.tri`, `colon.tri.op`
+ - `dagger.triple`, `dagger.l`, `dagger.r`, `dagger.inv`
+ - `hourglass.stroked`, `hourglass.filled`
+ - `die.six`, `die.five`, `die.four`, `die.three`, `die.two`, `die.one`
+ - `errorbar.square.stroked`, `errorbar.square.filled`,
+ `errorbar.diamond.stroked`, `errorbar.diamond.filled`,
+ `errorbar.circle.stroked`, `errorbar.circle.filled`
+ - `numero`
+ - `Omega.inv`
+- Renamed
+ - `ohm.inv` to `Omega.inv`
+- Changed codepoint
+ - `angle.l.double` from `《` to `⟪`
+ - `angle.r.double` from `》` to `⟫`
+ - `angstrom` from U+212B (`Å`) to U+00C5 (`Å`)
+- Deprecated
+ - `sect` and all its variants in favor of `inter`
+ - `integral.sect` in favor of `integral.inter`
+- Removed
+ - `degree.c` in favor of `°C` (`[$upright(°C)$]` or `[$upright(degree C)$]` in math)
+ - `degree.f` in favor of `°F` (`[$upright(°F)$]` or `[$upright(degree F)$]` in math)
+ - `kelvin` in favor of just K (`[$upright(K)$]` in math)
+
+## Deprecations
+- The [`path`] function in favor of the [`curve`] function
+- The name `pattern` for tiling patterns in favor of the new name [`tiling`]
+- [`image.decode`], [`cbor.decode`], [`csv.decode`], [`json.decode`],
+ [`toml.decode`], [`xml.decode`], [`yaml.decode`] in favor of the top-level
+ functions directly accepting both paths and bytes
+- The `sect` and its variants in favor of `inter`, and `integral.sect` in favor
+ of `integral.inter`
+- Fully removed type/str compatibility behavior (e.g. `{int == "integer"}`)
+ which was temporarily introduced in Typst 0.8 **(Breaking change)**
+
+## Development
+- The `typst::compile` function is now generic and can return either a
+ `PagedDocument` or an `HtmlDocument`
+- `typst-timing` now supports WebAssembly targets via `web-sys` when the `wasm`
+ feature is enabled
+- Increased minimum supported Rust version to 1.80
+- Fixed linux/arm64 Docker image
diff --git a/docs/changelog/welcome.md b/docs/changelog/welcome.md
index 12b6b896..bb245eb0 100644
--- a/docs/changelog/welcome.md
+++ b/docs/changelog/welcome.md
@@ -10,6 +10,7 @@ forward. This section documents all changes to Typst since its initial public
release.
## Versions
+- [Unreleased changes planned for Typst 0.13.0]($changelog/0.13.0)
- [Typst 0.12.0]($changelog/0.12.0)
- [Typst 0.11.1]($changelog/0.11.1)
- [Typst 0.11.0]($changelog/0.11.0)
diff --git a/docs/src/lib.rs b/docs/src/lib.rs
index f9ee05bb..fae74e0f 100644
--- a/docs/src/lib.rs
+++ b/docs/src/lib.rs
@@ -188,6 +188,7 @@ fn changelog_pages(resolver: &dyn Resolver) -> PageModel {
let mut page = md_page(resolver, resolver.base(), load!("changelog/welcome.md"));
let base = format!("{}changelog/", resolver.base());
page.children = vec![
+ md_page(resolver, &base, load!("changelog/0.13.0.md")),
md_page(resolver, &base, load!("changelog/0.12.0.md")),
md_page(resolver, &base, load!("changelog/0.11.1.md")),
md_page(resolver, &base, load!("changelog/0.11.0.md")),