pleast
is a Typst package designed to parse and process Property List files, which are commonly used to store configuration data, especially .tmTheme
files. This package enhances the experience of reading plist files by optimizing the process. It takes plist files read using Typst's built-in xml()
function and converts them into a more user-friendly dictionary format.
Import @preview/pleast:0.3.0
in your .typ
file.
#import "@preview/pleast:0.3.0": plist
Typst only supports .tmTheme
files, a type of Plist format file, for customizing syntax highlighting themes. Here is an example, using the background and foreground colors defined in .tmTheme
in code blocks, which are two properties that would normally be ignored by Typst.
#import "@preview/pleast:0.3.0": plist
#let data = plist(read("path/to/your/textmate-theme.tmTheme", encoding: none))
#let foreground = data.settings.at(0).settings.at("foreground", default: none)
#let background = data.settings.at(0).settings.at("background", default: none)
#set raw(theme: "path/to/your/textmate-theme.tmTheme")
#show raw: set text(fill: rgb(foreground)) if foreground != none
#place(
block(
radius: 0.5em,
inset: 1em,
fill: if background != none { rgb(background) } else { none },
```rust
fn main() {
println!("Hello, world!");
}
```,
),
center,
)
With the Monokai theme, the result of above code is:
The plist data types supported by pleast
are: dict
, array
, date
, string
, integer
, real
, boolean
, and data
. You can customize the parser for some types: date
, integer
, real
, and data
.
The default parser behavior of pleast
is as follows:
date
: Usespleast.utils.parse-rfc3339()
, which only parses time strings in RFC 3339 format;integer
: Uses Typst's built-inint
;real
: Uses Typst's built-infloat
;data
: No processing, directly outputs the Base64 string.
You can override the default parsers via the parsers
parameter of plist()
. Below is an example using the based package to handle the data
type.
A plist xml file HelloWorld.xml
with Base64 data:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>helloWord</key>
<data>
SGVsbG8sIHdvcmxkIQ==
</data>
</dict>
</plist>
And a typst file:
#import "@preview/pleast:0.3.0": plist
#import "@preview/based:0.2.0": base64
#let data = plist(
read("HelloWorld.xml", encoding: none),
parsers: (data: base64.decode),
)
#assert.eq(str(data.helloWord), "Hello, world!")
pleast
is licensed under the MIT license.