summaryrefslogtreecommitdiff
path: root/src/library/text
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2022-10-18 00:02:38 +0200
committerLaurenz <laurmaedje@gmail.com>2022-10-18 00:04:12 +0200
commitc0e972b91a7bf8d22cd24a38fc92a9c6214c8a0c (patch)
tree19362eb993f15ef1b9bceeac821852bb6edfe955 /src/library/text
parente21822665591dc19766275da1e185215a6b945ef (diff)
Reduce dependencies from compiler on library
Diffstat (limited to 'src/library/text')
-rw-r--r--src/library/text/lang.rs74
-rw-r--r--src/library/text/mod.rs16
2 files changed, 14 insertions, 76 deletions
diff --git a/src/library/text/lang.rs b/src/library/text/lang.rs
deleted file mode 100644
index f2193f05..00000000
--- a/src/library/text/lang.rs
+++ /dev/null
@@ -1,74 +0,0 @@
-use crate::geom::Dir;
-use crate::model::Value;
-
-/// A code for a natural language.
-#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
-pub struct Lang([u8; 3], u8);
-
-impl Lang {
- /// The code for the english language.
- pub const ENGLISH: Self = Self(*b"en ", 2);
-
- /// Construct a language from a two- or three-byte ISO 639-1/2/3 code.
- pub fn from_str(iso: &str) -> Option<Self> {
- let len = iso.len();
- if matches!(len, 2 ..= 3) && iso.is_ascii() {
- let mut bytes = [b' '; 3];
- bytes[.. len].copy_from_slice(iso.as_bytes());
- bytes.make_ascii_lowercase();
- Some(Self(bytes, len as u8))
- } else {
- None
- }
- }
-
- /// Return the language code as an all lowercase string slice.
- pub fn as_str(&self) -> &str {
- std::str::from_utf8(&self.0[.. usize::from(self.1)]).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 or three letter language code (ISO 639-1/2/3)")?,
-}
-
-/// A code for a region somewhere in the world.
-#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
-pub struct Region([u8; 2]);
-
-impl Region {
- /// Construct a region from its two-byte ISO 3166-1 alpha-2 code.
- pub fn from_str(iso: &str) -> Option<Self> {
- if iso.is_ascii() {
- let mut bytes: [u8; 2] = iso.as_bytes().try_into().ok()?;
- bytes.make_ascii_uppercase();
- Some(Self(bytes))
- } else {
- None
- }
- }
-
- /// Return the region code as an all uppercase string slice.
- pub fn as_str(&self) -> &str {
- std::str::from_utf8(&self.0).unwrap_or_default()
- }
-}
-
-castable! {
- Region,
- Expected: "string",
- Value::Str(string) => Self::from_str(&string)
- .ok_or("expected two letter region code (ISO 3166-1 alpha-2)")?,
-}
diff --git a/src/library/text/mod.rs b/src/library/text/mod.rs
index c9bf2e57..299357de 100644
--- a/src/library/text/mod.rs
+++ b/src/library/text/mod.rs
@@ -1,7 +1,6 @@
//! Text handling and paragraph layout.
mod deco;
-mod lang;
mod link;
mod par;
mod quotes;
@@ -11,7 +10,6 @@ mod shaping;
mod shift;
pub use deco::*;
-pub use lang::*;
pub use link::*;
pub use par::*;
pub use quotes::*;
@@ -290,6 +288,20 @@ castable! {
}),
}
+castable! {
+ Lang,
+ Expected: "string",
+ Value::Str(string) => Self::from_str(&string)
+ .ok_or("expected two or three letter language code (ISO 639-1/2/3)")?,
+}
+
+castable! {
+ Region,
+ Expected: "string",
+ Value::Str(string) => Self::from_str(&string)
+ .ok_or("expected two letter region code (ISO 3166-1 alpha-2)")?,
+}
+
/// The direction of text and inline objects in their line.
#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
pub struct HorizontalDir(pub Dir);