summaryrefslogtreecommitdiff
path: root/src/layout
diff options
context:
space:
mode:
authorMartin Haug <mhaug@live.de>2020-09-01 13:10:48 +0200
committerMartin Haug <mhaug@live.de>2020-09-01 13:10:48 +0200
commitd986bc4b0a35957c3f5cece82497c69e957f5c79 (patch)
treeacbf164c604f9c085866b23d7500b9282be12f2a /src/layout
parent798c8a10c861c6185f1fdee3b0ce3c46dcd96700 (diff)
Add section headings 👨‍🦲
Co-authored-by: Laurenz Mädje <laurmaedje@gmail.com>
Diffstat (limited to 'src/layout')
-rw-r--r--src/layout/tree.rs16
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();