From d986bc4b0a35957c3f5cece82497c69e957f5c79 Mon Sep 17 00:00:00 2001 From: Martin Haug Date: Tue, 1 Sep 2020 13:10:48 +0200 Subject: =?UTF-8?q?Add=20section=20headings=20=F0=9F=91=A8=E2=80=8D?= =?UTF-8?q?=F0=9F=A6=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Laurenz Mädje --- src/layout/tree.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src/layout/tree.rs') 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(); -- cgit v1.2.3