From d025854457b4c2d1c2285bd1c5e795edad79a749 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Wed, 13 Apr 2022 15:01:19 +0200 Subject: [PATCH] Make language non-optional with english as default --- src/library/text/lang.rs | 39 +++++++++++++++++++++++++++++++++++ src/library/text/mod.rs | 36 ++++---------------------------- src/library/text/par.rs | 14 +++++-------- tests/ref/text/linebreak.png | Bin 18645 -> 18653 bytes tests/typ/text/hyphenate.typ | 10 ++++----- tests/typ/text/justify.typ | 1 - tests/typ/text/knuth.typ | 2 +- tests/typ/text/microtype.typ | 2 +- tests/typ/text/quotes.typ | 4 ---- 9 files changed, 55 insertions(+), 53 deletions(-) create mode 100644 src/library/text/lang.rs diff --git a/src/library/text/lang.rs b/src/library/text/lang.rs new file mode 100644 index 000000000..343359d1e --- /dev/null +++ b/src/library/text/lang.rs @@ -0,0 +1,39 @@ +use crate::eval::Value; +use crate::geom::Dir; + +/// A natural language. +#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)] +pub struct Lang([u8; 2]); + +impl Lang { + /// The code for the english language. + pub const ENGLISH: Self = Self(*b"en"); + + /// Construct a language from a two-byte ISO 639-1 code. + pub fn from_str(iso: &str) -> Option { + let mut bytes: [u8; 2] = iso.as_bytes().try_into().ok()?; + bytes.make_ascii_lowercase(); + Some(Self(bytes)) + } + + /// Return the language code as a string slice. + pub fn as_str(&self) -> &str { + std::str::from_utf8(&self.0).unwrap_or_default() + } + + /// The default direction for the language. + pub fn dir(&self) -> Dir { + match self.as_str() { + "ar" | "dv" | "fa" | "he" | "ks" | "pa" | "ps" | "sd" | "ug" | "ur" + | "yi" => Dir::RTL, + _ => Dir::LTR, + } + } +} + +castable! { + Lang, + Expected: "string", + Value::Str(string) => Self::from_str(&string) + .ok_or("expected two letter language code")?, +} diff --git a/src/library/text/mod.rs b/src/library/text/mod.rs index a25b28275..636b878c8 100644 --- a/src/library/text/mod.rs +++ b/src/library/text/mod.rs @@ -1,6 +1,7 @@ //! Text handling and paragraph layout. mod deco; +mod lang; mod link; mod par; mod quotes; @@ -8,6 +9,7 @@ mod raw; mod shaping; pub use deco::*; +pub use lang::*; pub use link::*; pub use par::*; pub use quotes::*; @@ -64,8 +66,7 @@ impl TextNode { pub const BOTTOM_EDGE: TextEdge = TextEdge::Metric(VerticalFontMetric::Baseline); /// An ISO 639-1 language code. - #[property(referenced)] - pub const LANG: Option = None; + pub const LANG: Lang = Lang::ENGLISH; /// The direction for text and inline objects. When `auto`, the direction is /// automatically inferred from the language. #[property(resolve)] @@ -257,32 +258,6 @@ castable! { }), } -/// A natural language. -#[derive(Debug, Clone, Eq, PartialEq, Hash)] -pub struct Lang(EcoString); - -impl Lang { - /// The default direction for the language. - pub fn dir(&self) -> Dir { - match self.0.as_str() { - "ar" | "dv" | "fa" | "he" | "ks" | "pa" | "ps" | "sd" | "ug" | "ur" - | "yi" => Dir::RTL, - _ => Dir::LTR, - } - } - - /// Return the language code as a string slice. - pub fn as_str(&self) -> &str { - &self.0 - } -} - -castable! { - Lang, - Expected: "string", - Value::Str(string) => Self(string.to_lowercase()), -} - /// The direction of text and inline objects in their line. #[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] pub struct HorizontalDir(pub Dir); @@ -301,10 +276,7 @@ impl Resolve for Smart { fn resolve(self, styles: StyleChain) -> Self::Output { match self { - Smart::Auto => match styles.get(TextNode::LANG) { - Some(lang) => lang.dir(), - None => Dir::LTR, - }, + Smart::Auto => styles.get(TextNode::LANG).dir(), Smart::Custom(dir) => dir.0, } } diff --git a/src/library/text/par.rs b/src/library/text/par.rs index 19ab10824..232a5d0f2 100644 --- a/src/library/text/par.rs +++ b/src/library/text/par.rs @@ -408,11 +408,7 @@ fn collect<'a>( if styles.get(TextNode::SMART_QUOTES) { // TODO: Also get region. let lang = styles.get(TextNode::LANG); - let quotes = lang - .as_ref() - .map(|lang| Quotes::from_lang(lang.as_str(), "")) - .unwrap_or_default(); - + let quotes = Quotes::from_lang(lang.as_str(), ""); let peeked = iter.peek().and_then(|(child, _)| match child { ParChild::Text(text) => text.chars().next(), ParChild::Quote(_) => Some('"'), @@ -750,7 +746,7 @@ fn breakpoints<'a>(p: &'a Preparation) -> Breakpoints<'a> { end: 0, mandatory: false, hyphenate: p.get_shared(TextNode::HYPHENATE), - lang: p.get_shared(TextNode::LANG).map(Option::as_ref), + lang: p.get_shared(TextNode::LANG), } } @@ -773,7 +769,7 @@ struct Breakpoints<'a> { /// Whether to hyphenate if it's the same for all children. hyphenate: Option, /// The text language if it's the same for all children. - lang: Option>, + lang: Option, } impl Iterator for Breakpoints<'_> { @@ -831,9 +827,9 @@ impl Breakpoints<'_> { /// The text language at the given offset. fn lang_at(&self, offset: usize) -> Option { - let lang = self.lang.unwrap_or_else(|| { + let lang = self.lang.or_else(|| { let shaped = self.p.find(offset)?.text()?; - shaped.styles.get(TextNode::LANG).as_ref() + Some(shaped.styles.get(TextNode::LANG)) })?; let bytes = lang.as_str().as_bytes().try_into().ok()?; diff --git a/tests/ref/text/linebreak.png b/tests/ref/text/linebreak.png index 43ac9c68a77acf0cec7ee2534059442c000f33b8..4a691d72a47ec21d9dbc78cab2db69fc6577d72c 100644 GIT binary patch literal 18653 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 IM6N<$f~PU&jsO4v diff --git a/tests/typ/text/hyphenate.typ b/tests/typ/text/hyphenate.typ index 6bb87b13b..4dc5255f4 100644 --- a/tests/typ/text/hyphenate.typ +++ b/tests/typ/text/hyphenate.typ @@ -6,13 +6,13 @@ #set page(width: auto) #grid( columns: (70pt, 60pt), - text(lang: "en")[Warm welcomes to Typst.], + [Warm welcomes to Typst.], text(lang: "el")[διαμερίσματα. \ λατρευτός], ) --- // Test disabling hyphenation for short passages. -#set text(lang: "en", hyphenate: true) +#set text(hyphenate: true) Welcome to wonderful experiences. \ Welcome to `wonderful` experiences. \ @@ -20,14 +20,14 @@ Welcome to #text(hyphenate: false)[wonderful] experiences. \ Welcome to wonde#text(hyphenate: false)[rf]ul experiences. \ // Test enabling hyphenation for short passages. -#set text(lang: "en", hyphenate: false) +#set text(hyphenate: false) Welcome to wonderful experiences. \ Welcome to wo#text(hyphenate: true)[nd]erful experiences. \ --- // Hyphenate between shape runs. #set page(width: 80pt) -#set text(lang: "en", hyphenate: true) +#set text(hyphenate: true) It's a #emph[Tree]beard. --- @@ -46,5 +46,5 @@ It's a #emph[Tree]beard. // do that. The test passes if there's just one hyphenation between // "net" and "works". #set page(width: 70pt) -#set text(lang: "en", hyphenate: true) +#set text(hyphenate: true) #h(6pt) networks, the rest. diff --git a/tests/typ/text/justify.typ b/tests/typ/text/justify.typ index 3659f8efb..0cdef0000 100644 --- a/tests/typ/text/justify.typ +++ b/tests/typ/text/justify.typ @@ -1,7 +1,6 @@ --- #set page(width: 180pt) -#set text(lang: "en") #set par( justify: true, indent: 14pt, diff --git a/tests/typ/text/knuth.typ b/tests/typ/text/knuth.typ index 33249ef49..5adeee91a 100644 --- a/tests/typ/text/knuth.typ +++ b/tests/typ/text/knuth.typ @@ -1,6 +1,6 @@ #set page(width: auto, height: auto) #set par(leading: 4pt, justify: true) -#set text(lang: "en", family: "Latin Modern Roman") +#set text(family: "Latin Modern Roman") #let story = [ In olden times when wishing still helped one, there lived a king whose diff --git a/tests/typ/text/microtype.typ b/tests/typ/text/microtype.typ index d3b47f6dc..991e0d0dc 100644 --- a/tests/typ/text/microtype.typ +++ b/tests/typ/text/microtype.typ @@ -4,7 +4,7 @@ // Test hanging punctuation. #set page(width: 130pt, margins: 15pt) #set par(justify: true, linebreaks: "simple") -#set text(lang: "en", size: 9pt) +#set text(size: 9pt) #rect(fill: rgb(repr(teal) + "00"), width: 100%)[ This is a little bit of text that builds up to hang-ing hyphens and dash---es and then, you know, diff --git a/tests/typ/text/quotes.typ b/tests/typ/text/quotes.typ index 3f0649e8a..b447258fc 100644 --- a/tests/typ/text/quotes.typ +++ b/tests/typ/text/quotes.typ @@ -24,12 +24,10 @@ --- // Test single pair of quotes. -#set text(lang: "en") "" --- // Test sentences with numbers and apostrophes. -#set text(lang: "en") The 5'11" 'quick' brown fox jumps over the "lazy" dog's ear. He said "I'm a big fella." @@ -40,7 +38,6 @@ The 5\'11\" 'quick\' brown fox jumps over the \"lazy" dog\'s ear. --- // Test turning smart quotes off. -#set text(lang: "en") He's told some books contain questionable "example text". #set text(smart-quotes: false) @@ -48,7 +45,6 @@ He's told some books contain questionable "example text". --- // Test changing properties within text. -#set text(lang: "en") "She suddenly started speaking french: #text(lang: "fr")['Je suis une banane.']" Roman told me. Some people's thought on this would be #text(smart-quotes: false)["strange."]