summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorA-Walrus <58790821+A-Walrus@users.noreply.github.com>2024-04-09 14:49:38 +0300
committerLaurenz <laurmaedje@gmail.com>2024-05-17 14:27:59 +0200
commit8e025c9cdfbb0a5dae536aafc27b5e19eeac1810 (patch)
tree3fa26b5c81b8934c8067862c7d2ceaaa393d5d8d
parentfcd7705fb656a3b4f25b8d01e6830891db71dc0c (diff)
Fix raw bidi text (#3885)
-rw-r--r--crates/typst/src/layout/inline/mod.rs10
-rw-r--r--crates/typst/src/text/raw.rs1
-rw-r--r--tests/ref/layout/par-bidi.pngbin25731 -> 31441 bytes
-rw-r--r--tests/typ/layout/par-bidi.typ10
4 files changed, 16 insertions, 5 deletions
diff --git a/crates/typst/src/layout/inline/mod.rs b/crates/typst/src/layout/inline/mod.rs
index 9928cb82..6cbc89ba 100644
--- a/crates/typst/src/layout/inline/mod.rs
+++ b/crates/typst/src/layout/inline/mod.rs
@@ -450,10 +450,10 @@ fn collect<'a>(
let prev = full.len();
let dir = TextElem::dir_in(styles);
if dir != outer_dir {
- // Insert "Explicit Directional Isolate".
+ // Insert "Explicit Directional Embedding".
match dir {
- Dir::LTR => full.push('\u{2066}'),
- Dir::RTL => full.push('\u{2067}'),
+ Dir::LTR => full.push('\u{202A}'),
+ Dir::RTL => full.push('\u{202B}'),
_ => {}
}
}
@@ -465,8 +465,8 @@ fn collect<'a>(
}
if dir != outer_dir {
- // Insert "Pop Directional Isolate".
- full.push('\u{2069}');
+ // Insert "Pop Directional Formatting".
+ full.push('\u{202C}');
}
Segment::Text(full.len() - prev)
} else if let Some(elem) = child.to_packed::<HElem>() {
diff --git a/crates/typst/src/text/raw.rs b/crates/typst/src/text/raw.rs
index f0105363..dc288a66 100644
--- a/crates/typst/src/text/raw.rs
+++ b/crates/typst/src/text/raw.rs
@@ -443,6 +443,7 @@ impl ShowSet for Packed<RawElem> {
fn show_set(&self, styles: StyleChain) -> Styles {
let mut out = Styles::new();
out.set(TextElem::set_overhang(false));
+ out.set(TextElem::set_lang(Lang::ENGLISH));
out.set(TextElem::set_hyphenate(Hyphenate(Smart::Custom(false))));
out.set(TextElem::set_size(TextSize(Em::new(0.8).into())));
out.set(TextElem::set_font(FontList(vec![FontFamily::new("DejaVu Sans Mono")])));
diff --git a/tests/ref/layout/par-bidi.png b/tests/ref/layout/par-bidi.png
index 4750ccb8..af66a719 100644
--- a/tests/ref/layout/par-bidi.png
+++ b/tests/ref/layout/par-bidi.png
Binary files differ
diff --git a/tests/typ/layout/par-bidi.typ b/tests/typ/layout/par-bidi.typ
index edbd75e1..4ff83802 100644
--- a/tests/typ/layout/par-bidi.typ
+++ b/tests/typ/layout/par-bidi.typ
@@ -55,6 +55,16 @@ Lריווח #h(1cm) R
ב #text("12:00 - 13:00",dir:ltr) בצהריים
---
+// Mixing raw
+#set text(lang: "he")
+לדוג. `if a == b:` זה תנאי
+#set raw(lang:"python")
+לדוג. `if a == b:` זה תנאי
+
+#show raw: set text(dir:rtl)
+לתכנת בעברית `אם א == ב:`
+
+---
// Test setting a vertical direction.
// Ref: false