summaryrefslogtreecommitdiff
path: root/src/layout
diff options
context:
space:
mode:
Diffstat (limited to 'src/layout')
-rw-r--r--src/layout/tree.rs18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/layout/tree.rs b/src/layout/tree.rs
index e500c4ba..f039d9b0 100644
--- a/src/layout/tree.rs
+++ b/src/layout/tree.rs
@@ -3,7 +3,7 @@
use crate::style::LayoutStyle;
use crate::syntax::decoration::Decoration;
use crate::syntax::span::{Span, Spanned};
-use crate::syntax::tree::{CallExpr, SyntaxNode, SyntaxTree};
+use crate::syntax::tree::{CallExpr, SyntaxNode, SyntaxTree, CodeBlockExpr};
use crate::{DynFuture, Feedback, Pass};
use super::line::{LineContext, LineLayouter};
use super::text::{layout_text, TextContext};
@@ -80,6 +80,7 @@ impl<'a> TreeLayouter<'a> {
}
SyntaxNode::Raw(lines) => self.layout_raw(lines).await,
+ SyntaxNode::CodeBlock(block) => self.layout_code(block).await,
SyntaxNode::Par(par) => self.layout_par(par).await,
SyntaxNode::Call(call) => {
self.layout_call(Spanned::new(call, node.span)).await;
@@ -128,6 +129,21 @@ impl<'a> TreeLayouter<'a> {
self.style.text.fallback = fallback;
}
+ async fn layout_code(&mut self, block: &CodeBlockExpr) {
+ let fallback = self.style.text.fallback.clone();
+ self.style.text.fallback
+ .list_mut()
+ .insert(0, "monospace".to_string());
+ self.style.text.fallback.flatten();
+
+ for line in &block.raw {
+ self.layout_text(line).await;
+ self.layouter.finish_line();
+ }
+
+ self.style.text.fallback = fallback;
+ }
+
async fn layout_par(&mut self, par: &SyntaxTree) {
self.layout_tree(par).await;
self.layouter.add_secondary_spacing(