From 2efa86cbdf3e60602fe5524aeaa0befdf14eafcf Mon Sep 17 00:00:00 2001 From: Ana Gelez Date: Mon, 25 Mar 2024 14:32:02 +0100 Subject: Fix smart quotes in PDF outline (#3790) --- crates/typst/src/text/smartquote.rs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'crates') diff --git a/crates/typst/src/text/smartquote.rs b/crates/typst/src/text/smartquote.rs index dbcca6dc..4bb5ca01 100644 --- a/crates/typst/src/text/smartquote.rs +++ b/crates/typst/src/text/smartquote.rs @@ -2,7 +2,9 @@ use ecow::EcoString; use unicode_segmentation::UnicodeSegmentation; use crate::diag::{bail, StrResult}; -use crate::foundations::{array, cast, dict, elem, Array, Dict, FromValue, Smart, Str}; +use crate::foundations::{ + array, cast, dict, elem, Array, Dict, FromValue, Packed, PlainText, Smart, Str, +}; use crate::layout::Dir; use crate::syntax::is_newline; use crate::text::{Lang, Region}; @@ -26,7 +28,7 @@ use crate::text::{Lang, Region}; /// # Syntax /// This function also has dedicated syntax: The normal quote characters /// (`'` and `"`). Typst automatically makes your quotes smart. -#[elem(name = "smartquote")] +#[elem(name = "smartquote", PlainText)] pub struct SmartQuoteElem { /// Whether this should be a double quote. #[default(true)] @@ -85,6 +87,16 @@ pub struct SmartQuoteElem { pub quotes: Smart, } +impl PlainText for Packed { + fn plain_text(&self, text: &mut EcoString) { + if self.double.unwrap_or(true) { + text.push_str("\""); + } else { + text.push_str("'"); + } + } +} + /// State machine for smart quote substitution. #[derive(Debug, Clone)] pub struct SmartQuoter { -- cgit v1.2.3