Compare commits

..

3 Commits

Author SHA1 Message Date
Laurenz
c417b17442 Fix docs outline for nested definitions (#5823) 2025-02-06 11:24:19 +01:00
Malo
c2316b9a3e Documentation fixes and improvements (#5816) 2025-02-06 11:24:19 +01:00
Laurenz
d8b79b5b9b Autocomplete content methods (#5822) 2025-02-06 11:24:19 +01:00
18 changed files with 71 additions and 64 deletions

View File

@ -398,7 +398,17 @@ fn field_access_completions(
value: &Value,
styles: &Option<Styles>,
) {
for (name, binding) in value.ty().scope().iter() {
let scopes = {
let ty = value.ty().scope();
let elem = match value {
Value::Content(content) => Some(content.elem().scope()),
_ => None,
};
elem.into_iter().chain(Some(ty))
};
// Autocomplete methods from the element's or type's scope.
for (name, binding) in scopes.flat_map(|scope| scope.iter()) {
ctx.call_completion(name.clone(), binding.read());
}
@ -1747,4 +1757,15 @@ mod tests {
.must_include(["this", "that"])
.must_exclude(["*", "figure"]);
}
#[test]
fn test_autocomplete_type_methods() {
test("#\"hello\".", -1).must_include(["len", "contains"]);
}
#[test]
fn test_autocomplete_content_methods() {
test("#show outline.entry: it => it.\n#outline()\n= Hi", 30)
.must_include(["indented", "body", "page"]);
}
}

View File

@ -1281,7 +1281,7 @@ impl ControlPoints {
}
}
/// Helper to draw arcs with bezier curves.
/// Helper to draw arcs with zier curves.
trait CurveExt {
fn arc(&mut self, start: Point, center: Point, end: Point);
fn arc_move(&mut self, start: Point, center: Point, end: Point);
@ -1305,7 +1305,7 @@ impl CurveExt for Curve {
}
}
/// Get the control points for a bezier curve that approximates a circular arc for
/// Get the control points for a zier curve that approximates a circular arc for
/// a start point, an end point and a center of the circle whose arc connects
/// the two.
fn bezier_arc_control(start: Point, center: Point, end: Point) -> [Point; 2] {

View File

@ -148,9 +148,7 @@ use crate::loading::{DataSource, Load};
#[func(scope)]
pub fn plugin(
engine: &mut Engine,
/// A path to a WebAssembly file or raw WebAssembly bytes.
///
/// For more details about paths, see the [Paths section]($syntax/#paths).
/// A [path]($syntax/#paths) to a WebAssembly file or raw WebAssembly bytes.
source: Spanned<DataSource>,
) -> SourceResult<Module> {
let data = source.load(engine.world)?;

View File

@ -20,9 +20,7 @@ use crate::loading::{DataSource, Load};
#[func(scope, title = "CBOR")]
pub fn cbor(
engine: &mut Engine,
/// A path to a CBOR file or raw CBOR bytes.
///
/// For more details about paths, see the [Paths section]($syntax/#paths).
/// A [path]($syntax/#paths) to a CBOR file or raw CBOR bytes.
source: Spanned<DataSource>,
) -> SourceResult<Value> {
let data = source.load(engine.world)?;

View File

@ -26,9 +26,7 @@ use crate::loading::{DataSource, Load, Readable};
#[func(scope, title = "CSV")]
pub fn csv(
engine: &mut Engine,
/// Path to a CSV file or raw CSV bytes.
///
/// For more details about paths, see the [Paths section]($syntax/#paths).
/// A [path]($syntax/#paths) to a CSV file or raw CSV bytes.
source: Spanned<DataSource>,
/// The delimiter that separates columns in the CSV file.
/// Must be a single ASCII character.

View File

@ -51,9 +51,7 @@ use crate::loading::{DataSource, Load, Readable};
#[func(scope, title = "JSON")]
pub fn json(
engine: &mut Engine,
/// Path to a JSON file or raw JSON bytes.
///
/// For more details about paths, see the [Paths section]($syntax/#paths).
/// A [path]($syntax/#paths) to a JSON file or raw JSON bytes.
source: Spanned<DataSource>,
) -> SourceResult<Value> {
let data = source.load(engine.world)?;

View File

@ -29,9 +29,7 @@ use crate::loading::{DataSource, Load, Readable};
#[func(scope, title = "TOML")]
pub fn toml(
engine: &mut Engine,
/// A path to a TOML file or raw TOML bytes.
///
/// For more details about paths, see the [Paths section]($syntax/#paths).
/// A [path]($syntax/#paths) to a TOML file or raw TOML bytes.
source: Spanned<DataSource>,
) -> SourceResult<Value> {
let data = source.load(engine.world)?;

View File

@ -58,9 +58,7 @@ use crate::loading::{DataSource, Load, Readable};
#[func(scope, title = "XML")]
pub fn xml(
engine: &mut Engine,
/// A path to an XML file or raw XML bytes.
///
/// For more details about paths, see the [Paths section]($syntax/#paths).
/// A [path]($syntax/#paths) to an XML file or raw XML bytes.
source: Spanned<DataSource>,
) -> SourceResult<Value> {
let data = source.load(engine.world)?;

View File

@ -41,9 +41,7 @@ use crate::loading::{DataSource, Load, Readable};
#[func(scope, title = "YAML")]
pub fn yaml(
engine: &mut Engine,
/// A path to a YAML file or raw YAML bytes.
///
/// For more details about paths, see the [Paths section]($syntax/#paths).
/// A [path]($syntax/#paths) to a YAML file or raw YAML bytes.
source: Spanned<DataSource>,
) -> SourceResult<Value> {
let data = source.load(engine.world)?;

View File

@ -623,7 +623,7 @@ impl OutlineEntry {
/// The content which is displayed in place of the referred element at its
/// entry in the outline. For a heading, this is its
/// [`body`]($heading.body), for a figure a caption, and for equations it is
/// [`body`]($heading.body); for a figure a caption and for equations, it is
/// empty.
#[func]
pub fn body(&self) -> StrResult<Content> {

View File

@ -32,12 +32,10 @@ use crate::World;
/// embedded file conforms to PDF/A-1 or PDF/A-2.
#[elem(Show, Locatable)]
pub struct EmbedElem {
/// Path of the file to be embedded.
/// The [path]($syntax/#paths) of the file to be embedded.
///
/// Must always be specified, but is only read from if no data is provided
/// in the following argument.
///
/// For more details about paths, see the [Paths section]($syntax/#paths).
#[required]
#[parse(
let Spanned { v: path, span } =

View File

@ -10,12 +10,12 @@ use crate::foundations::{
use crate::layout::{Abs, Axes, BlockElem, Length, Point, Rel, Size};
use crate::visualize::{FillRule, Paint, Stroke};
/// A curve consisting of movements, lines, and Beziér segments.
/// A curve consisting of movements, lines, and Bézier segments.
///
/// At any point in time, there is a conceptual pen or cursor.
/// - Move elements move the cursor without drawing.
/// - Line/Quadratic/Cubic elements draw a segment from the cursor to a new
/// position, potentially with control point for a Beziér curve.
/// position, potentially with control point for a Bézier curve.
/// - Close elements draw a straight or smooth line back to the start of the
/// curve or the latest preceding move segment.
///
@ -26,7 +26,7 @@ use crate::visualize::{FillRule, Paint, Stroke};
/// or relative to the current pen/cursor position, that is, the position where
/// the previous segment ended.
///
/// Beziér curve control points can be skipped by passing `{none}` or
/// Bézier curve control points can be skipped by passing `{none}` or
/// automatically mirrored from the preceding segment by passing `{auto}`.
///
/// # Example
@ -88,7 +88,7 @@ pub struct CurveElem {
#[fold]
pub stroke: Smart<Option<Stroke>>,
/// The components of the curve, in the form of moves, line and Beziér
/// The components of the curve, in the form of moves, line and Bézier
/// segment, and closes.
#[variadic]
pub components: Vec<CurveComponent>,
@ -225,7 +225,7 @@ pub struct CurveLine {
pub relative: bool,
}
/// Adds a quadratic Beziér curve segment from the last point to `end`, using
/// Adds a quadratic Bézier curve segment from the last point to `end`, using
/// `control` as the control point.
///
/// ```example
@ -245,9 +245,9 @@ pub struct CurveLine {
/// ```
#[elem(name = "quad", title = "Curve Quadratic Segment")]
pub struct CurveQuad {
/// The control point of the quadratic Beziér curve.
/// The control point of the quadratic Bézier curve.
///
/// - If `{auto}` and this segment follows another quadratic Beziér curve,
/// - If `{auto}` and this segment follows another quadratic Bézier curve,
/// the previous control point will be mirrored.
/// - If `{none}`, the control point defaults to `end`, and the curve will
/// be a straight line.
@ -272,7 +272,7 @@ pub struct CurveQuad {
pub relative: bool,
}
/// Adds a cubic Beziér curve segment from the last point to `end`, using
/// Adds a cubic Bézier curve segment from the last point to `end`, using
/// `control-start` and `control-end` as the control points.
///
/// ```example
@ -388,7 +388,7 @@ pub enum CloseMode {
Straight,
}
/// A curve consisting of movements, lines, and Beziér segments.
/// A curve consisting of movements, lines, and Bézier segments.
#[derive(Debug, Default, Clone, Eq, PartialEq, Hash)]
pub struct Curve(pub Vec<CurveItem>);

View File

@ -46,10 +46,11 @@ use crate::text::LocalName;
/// ```
#[elem(scope, Show, LocalName, Figurable)]
pub struct ImageElem {
/// A path to an image file or raw bytes making up an image in one of the
/// supported [formats]($image.format).
/// A [path]($syntax/#paths) to an image file or raw bytes making up an
/// image in one of the supported [formats]($image.format).
///
/// For more details about paths, see the [Paths section]($syntax/#paths).
/// Bytes can be used to specify raw pixel data in a row-major,
/// left-to-right, top-to-bottom format.
///
/// ```example
/// #let original = read("diagram.svg")

View File

@ -8,7 +8,7 @@ use crate::foundations::{
use crate::layout::{Axes, BlockElem, Length, Rel};
use crate::visualize::{FillRule, Paint, Stroke};
/// A path through a list of points, connected by Bezier curves.
/// A path through a list of points, connected by Bézier curves.
///
/// # Example
/// ```example
@ -59,8 +59,8 @@ pub struct PathElem {
#[fold]
pub stroke: Smart<Option<Stroke>>,
/// Whether to close this path with one last bezier curve. This curve will
/// takes into account the adjacent control points. If you want to close
/// Whether to close this path with one last zier curve. This curve will
/// take into account the adjacent control points. If you want to close
/// with a straight line, simply add one last point that's the same as the
/// start point.
#[default(false)]

View File

@ -412,7 +412,7 @@ pub enum Geometry {
Line(Point),
/// A rectangle with its origin in the topleft corner.
Rect(Size),
/// A curve consisting of movements, lines, and Bezier segments.
/// A curve consisting of movements, lines, and Bézier segments.
Curve(Curve),
}

View File

@ -16,7 +16,7 @@ description: Changes slated to appear in Typst 0.13.0
- 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
[bytes], 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"$]`)
@ -155,7 +155,7 @@ description: Changes slated to appear in Typst 0.13.0
- 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 ⊥
- Fixed spacing around up tacks ()
## Bibliography
- Prose and author-only citations now use editor names if the author names are
@ -229,7 +229,7 @@ description: Changes slated to appear in Typst 0.13.0
- 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 [`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

View File

@ -11,7 +11,7 @@ the PNG you exported, you will notice a loss of quality. Typst calculates the
resolution of your PNGs based on each page's physical dimensions and the PPI. If
you need guidance for choosing a PPI value, consider the following:
- A DPI value of 300 or 600 is typical for desktop printing.
- A value of 300 or 600 is typical for desktop printing.
- Professional prints of detailed graphics can go up to 1200 PPI.
- If your document is only viewed at a distance, e.g. a poster, you may choose a
smaller value than 300.

View File

@ -550,8 +550,6 @@ fn func_outline(model: &FuncModel, id_base: &str) -> Vec<OutlineItem> {
.collect(),
});
}
outline.extend(scope_outline(&model.scope));
} else {
outline.extend(model.params.iter().map(|param| OutlineItem {
id: eco_format!("{id_base}-{}", urlify(param.name)),
@ -560,27 +558,30 @@ fn func_outline(model: &FuncModel, id_base: &str) -> Vec<OutlineItem> {
}));
}
outline.extend(scope_outline(&model.scope, id_base));
outline
}
/// Produce an outline for a function scope.
fn scope_outline(scope: &[FuncModel]) -> Option<OutlineItem> {
fn scope_outline(scope: &[FuncModel], id_base: &str) -> Option<OutlineItem> {
if scope.is_empty() {
return None;
}
Some(OutlineItem {
id: "definitions".into(),
name: "Definitions".into(),
children: scope
.iter()
.map(|func| {
let id = urlify(&eco_format!("definitions-{}", func.name));
let children = func_outline(func, &id);
OutlineItem { id, name: func.title.into(), children }
})
.collect(),
})
let dash = if id_base.is_empty() { "" } else { "-" };
let id = eco_format!("{id_base}{dash}definitions");
let children = scope
.iter()
.map(|func| {
let id = urlify(&eco_format!("{id}-{}", func.name));
let children = func_outline(func, &id);
OutlineItem { id, name: func.title.into(), children }
})
.collect();
Some(OutlineItem { id, name: "Definitions".into(), children })
}
/// Create a page for a group of functions.
@ -687,7 +688,7 @@ fn type_outline(model: &TypeModel) -> Vec<OutlineItem> {
});
}
outline.extend(scope_outline(&model.scope));
outline.extend(scope_outline(&model.scope, ""));
outline
}