diff options
| author | Laurenz <laurmaedje@gmail.com> | 2020-09-01 13:25:53 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-09-01 13:25:53 +0200 |
| commit | 862f1ccad821820c10eef85c204e2b7b0c9f8d84 (patch) | |
| tree | 1617d58f1ab23c0686c3f773752bb7b027acc3bf /src/layout | |
| parent | 798c8a10c861c6185f1fdee3b0ce3c46dcd96700 (diff) | |
| parent | 280cd91474fc214d0684aeaa57e95d6f17163f2b (diff) | |
Merge pull request #15 from typst/headings
Add section headings 👨🦲
Diffstat (limited to 'src/layout')
| -rw-r--r-- | src/layout/tree.rs | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/layout/tree.rs b/src/layout/tree.rs index aa0e0df1..faecc42b 100644 --- a/src/layout/tree.rs +++ b/src/layout/tree.rs @@ -6,7 +6,7 @@ use super::*; use crate::style::LayoutStyle; use crate::syntax::decoration::Decoration; use crate::syntax::span::{Span, Spanned}; -use crate::syntax::tree::{CallExpr, Code, SyntaxNode, SyntaxTree}; +use crate::syntax::tree::{CallExpr, Code, Heading, SyntaxNode, SyntaxTree}; use crate::{DynFuture, Feedback, Pass}; /// Layout a syntax tree into a collection of boxes. @@ -81,6 +81,8 @@ impl<'a> TreeLayouter<'a> { self.layout_text(text).await; } + SyntaxNode::Heading(heading) => self.layout_heading(heading).await, + SyntaxNode::Raw(lines) => self.layout_raw(lines).await, SyntaxNode::Code(block) => self.layout_code(block).await, @@ -114,6 +116,18 @@ impl<'a> TreeLayouter<'a> { ); } + async fn layout_heading(&mut self, heading: &Heading) { + let style = self.style.text.clone(); + self.style.text.font_scale *= 1.5 - 0.1 * heading.level.v.min(5) as f64; + self.style.text.bolder = true; + + self.layout_parbreak(); + self.layout_tree(&heading.tree).await; + self.layout_parbreak(); + + self.style.text = style; + } + async fn layout_raw(&mut self, lines: &[String]) { // TODO: Make this more efficient. let fallback = self.style.text.fallback.clone(); |
