mirror of
https://github.com/typst/typst
synced 2025-05-13 20:46:23 +08:00
Fix smart quotes in PDF outline (#3790)
This commit is contained in:
parent
a33d8bf322
commit
2efa86cbdf
@ -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<SmartQuoteDict>,
|
||||
}
|
||||
|
||||
impl PlainText for Packed<SmartQuoteElem> {
|
||||
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 {
|
||||
|
BIN
tests/ref/bugs/3662-pdf-smartquotes.png
Normal file
BIN
tests/ref/bugs/3662-pdf-smartquotes.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
12
tests/typ/bugs/3662-pdf-smartquotes.typ
Normal file
12
tests/typ/bugs/3662-pdf-smartquotes.typ
Normal file
@ -0,0 +1,12 @@
|
||||
// Smart quotes were not appearing in the PDF outline, because they didn't
|
||||
// implement `PlainText`
|
||||
// https://github.com/typst/typst/issues/3662
|
||||
|
||||
---
|
||||
= It's "Unnormal Heading"
|
||||
= It’s “Normal Heading”
|
||||
|
||||
#set smartquote(enabled: false)
|
||||
= It's "Unnormal Heading"
|
||||
= It's 'single quotes'
|
||||
= It’s “Normal Heading”
|
Loading…
x
Reference in New Issue
Block a user