diff --git a/Cargo.lock b/Cargo.lock index 663e74e..0d1055a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2343,6 +2343,9 @@ dependencies = [ "pathdiff", "pyo3", "same-file", + "serde", + "serde_json", + "serde_yaml", "siphasher 1.0.1", "tar", "typst", diff --git a/Cargo.toml b/Cargo.toml index 922dd6c..41a6394 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,6 +27,9 @@ fontdb = "0.17.0" pathdiff = "0.2" pyo3 = { version = "0.21.2", features = ["abi3-py37"] } same-file = "1" +serde = { version = "1.0.184", features = ["derive"] } +serde_json = "1" +serde_yaml = "0.9" siphasher = "1.0" tar = "0.4" typst ="0.11.1" diff --git a/README.md b/README.md index d924c75..5a8226d 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,11 @@ images = typst.compile("hello.typ", output="hello{n}.png", format="png") # Or use Compiler class to avoid reinitialization compiler = typst.Compiler("hello.typ") compiler.compile(format="png", ppi=144.0) + +# Query something +import json + +values = json.loads(typst.query("hello.typ", "", field="value", one=True)) ``` ## License diff --git a/python/typst/__init__.pyi b/python/typst/__init__.pyi index b6a3f5d..c0a9e75 100644 --- a/python/typst/__init__.pyi +++ b/python/typst/__init__.pyi @@ -1,5 +1,5 @@ import pathlib -from typing import List, Optional, TypeVar, overload, Dict, Union +from typing import List, Optional, TypeVar, overload, Dict, Union, Literal PathLike = TypeVar("PathLike", str, pathlib.Path) @@ -22,7 +22,7 @@ class Compiler: def compile( self, output: Optional[PathLike] = None, - format: Optional[str] = None, + format: Optional[Literal["pdf", "svg", "png"]] = None, ppi: Optional[float] = None, ) -> Optional[Union[bytes, List[bytes]]]: """Compile a Typst project. @@ -36,13 +36,30 @@ class Compiler: Optional[Union[bytes, List[bytes]]]: Return the compiled file as `bytes` if output is `None`. """ + def query( + self, + selector: str, + field: Optional[str] = None, + one: bool = False, + format: Optional[Literal["json", "yaml"]] = None, + ) -> str: + """Query a Typst document. + Args: + selector (str): Typst selector like `