diff --git a/library/src/lib.rs b/library/src/lib.rs index a2f52549a..a195c7178 100644 --- a/library/src/lib.rs +++ b/library/src/lib.rs @@ -7,6 +7,7 @@ pub mod math; pub mod meta; pub mod prelude; pub mod shared; +pub mod symbols; pub mod text; pub mod visualize; @@ -17,15 +18,14 @@ use self::layout::LayoutRoot; /// Construct the standard library. pub fn build() -> Library { - let sym = text::sym(); - let math = math::module(&sym); + let math = math::module(); let calc = compute::calc(); - let global = global(sym, math.clone(), calc); + let global = global(math.clone(), calc); Library { global, math, styles: styles(), items: items() } } /// Construct the module with global definitions. -fn global(sym: Module, math: Module, calc: Module) -> Module { +fn global(math: Module, calc: Module) -> Module { let mut global = Scope::deduplicating(); // Basics. @@ -50,8 +50,6 @@ fn global(sym: Module, math: Module, calc: Module) -> Module { global.def_func::("strike"); global.def_func::("overline"); global.def_func::("raw"); - global.define("sym", sym); - global.define("emoji", text::emoji()); // Math. global.define("math", math); @@ -92,6 +90,10 @@ fn global(sym: Module, math: Module, calc: Module) -> Module { global.def_func::("link"); global.def_func::("outline"); + // Symbols. + global.define("sym", symbols::sym()); + global.define("emoji", symbols::emoji()); + // Compute. global.def_func::("type"); global.def_func::("repr"); diff --git a/library/src/math/mod.rs b/library/src/math/mod.rs index 656fc2e01..3e461150b 100644 --- a/library/src/math/mod.rs +++ b/library/src/math/mod.rs @@ -15,7 +15,6 @@ mod row; mod spacing; mod stretch; mod style; -mod symbols; mod underover; pub use self::accent::*; @@ -46,7 +45,7 @@ use crate::text::{ }; /// Create a module with all math definitions. -pub fn module(sym: &Module) -> Module { +pub fn module() -> Module { let mut math = Scope::deduplicating(); math.def_func::("formula"); math.def_func::("text"); @@ -96,10 +95,13 @@ pub fn module(sym: &Module) -> Module { math.def_func::("op"); op::define(&mut math); - // Symbols and spacing. - symbols::define(&mut math); + // Spacings. spacing::define(&mut math); - math.copy_from(sym.scope()); + + // Symbols. + for (name, symbol) in crate::symbols::SYM { + math.define(*name, symbol.clone()); + } Module::new("math").with_scope(math) } diff --git a/library/src/math/style.rs b/library/src/math/style.rs index 9ae773467..9e1f66992 100644 --- a/library/src/math/style.rs +++ b/library/src/math/style.rs @@ -443,6 +443,10 @@ pub(super) fn styled_char(style: MathStyle, c: char) -> char { '∂' | 'ϵ' | 'ϑ' | 'ϰ' | 'ϕ' | 'ϱ' | 'ϖ' )); + if let Some(c) = basic_exception(c) { + return c; + } + if let Some(c) = latin_exception(c, variant, bold, italic) { return c; } @@ -537,6 +541,16 @@ pub(super) fn styled_char(style: MathStyle, c: char) -> char { std::char::from_u32(start + (c as u32 - base as u32)).unwrap() } +fn basic_exception(c: char) -> Option { + Some(match c { + '〈' => '⟨', + '〉' => '⟩', + '《' => '⟪', + '》' => '⟫', + _ => return None, + }) +} + fn latin_exception( c: char, variant: MathVariant, diff --git a/library/src/math/symbols.rs b/library/src/math/symbols.rs deleted file mode 100644 index c68616fa2..000000000 --- a/library/src/math/symbols.rs +++ /dev/null @@ -1,426 +0,0 @@ -use typst::model::symbols; - -symbols! { - define, - - // Lowercase Greek. - alpha: 'α', - beta: ['β', "alt": 'ϐ'], - chi: 'χ', - delta: 'δ', - epsilon: ['ε', "alt": 'ϵ'], - eta: 'η', - gamma: 'γ', - iota: 'ι', - kai: 'ϗ', - kappa: ['κ', "alt": 'ϰ'], - lambda: 'λ', - mu: 'μ', - nu: 'ν', - ohm: ['Ω', "inv": '℧'], - omega: 'ω', - omicron: 'ο', - phi: ['φ', "alt": 'ϕ'], - pi: ['π', "alt": 'ϖ'], - psi: 'ψ', - rho: ['ρ', "alt": 'ϱ'], - sigma: 'σ', - tau: 'τ', - theta: ['θ', "alt": 'ϑ'], - upsilon: 'υ', - xi: 'ξ', - zeta: 'ζ', - - // Uppercase Greek. - Alpha: 'Α', - Beta: 'Β', - Chi: 'Χ', - Delta: 'Δ', - Epsilon: 'Ε', - Eta: 'Η', - Gamma: 'Γ', - Iota: 'Ι', - Kai: 'Ϗ', - Kappa: 'Κ', - Lambda: 'Λ', - Mu: 'Μ', - Nu: 'Ν', - Omega: 'Ω', - Omicron: 'Ο', - Phi: 'Φ', - Pi: 'Π', - Psi: 'Ψ', - Rho: 'Ρ', - Sigma: 'Σ', - Tau: 'Τ', - Theta: 'Θ', - Upsilon: 'Υ', - Xi: 'Ξ', - Zeta: 'Ζ', - - // Hebrew. - alef: 'א', - bet: 'ב', - gimel: 'ג', - shin: 'ש', - - // Double-struck. - AA: '𝔸', - BB: '𝔹', - CC: 'ℂ', - DD: '𝔻', - EE: '𝔼', - FF: '𝔽', - GG: '𝔾', - HH: 'ℍ', - II: '𝕀', - JJ: '𝕁', - KK: '𝕂', - LL: '𝕃', - MM: '𝕄', - NN: 'ℕ', - OO: '𝕆', - PP: 'ℙ', - QQ: 'ℚ', - RR: 'ℝ', - SS: '𝕊', - TT: '𝕋', - UU: '𝕌', - VV: '𝕍', - WW: '𝕎', - XX: '𝕏', - YY: '𝕐', - ZZ: 'ℤ', - - // Override. - angled: [ - "l": '⟨', - "l.double": '⟪', - "r": '⟩', - "r.double": '⟫', - ], - - // Operators. - plus: [ - '+', - "circle": '⊕', - "circle.arrow": '⟴', - "circle.big": '⨁', - "dot": '∔', - "minus": '±', - "small": '﹢', - "square": '⊞', - "triangle": '⨹', - ], - minus: [ - '−', - "circle": '⊖', - "dot": '∸', - "plus": '∓', - "square": '⊟', - "tilde": '≂', - "triangle": '⨺', - ], - dot: [ - '⋅', - "circle": '⊙', - "circle.big": '⨀', - "square": '⊡', - ], - div: [ - '∕', - "circle": '⊘', - "sign": '÷', - "sign.circle": '⨸', - ], - times: [ - '×', - "big": '⨉', - "circle": '⊗', - "circle.big": '⨂', - "div": '⋇', - "l": '⋋', - "r": '⋌', - "square": '⊠', - "triangle": '⨻', - ], - ast: [ - '∗', - "circle": '⊛', - "small": '﹡', - "sq": '⧆', - ], - star: '⋆', - smash: '⨳', - wreath: '≀', - - // Relations. - eq: [ - '=', - "ast": '≛', - "circle": '⊜', - "colon": '≕', - "def": '≝', - "delta": '≜', - "equi": '≚', - "est": '≙', - "gt": '⋝', - "lt": '⋜', - "m": '≞', - "not": '≠', - "prec": '⋞', - "quest": '≟', - "small": '﹦', - "succ": '⋟', - ], - gt: [ - '>', - "circle": '⧁', - "dot": '⋗', - "double": '≫', - "eq": '≥', - "eq.lt": '⋛', - "eq.not": '≱', - "eqq": '≧', - "lt": '≷', - "lt.not": '≹', - "neqq": '≩', - "not": '≯', - "ntilde": '⋧', - "small": '﹥', - "tilde": '≳', - "tilde.not": '≵', - "triple": '⋙', - "triple.nested": '⫸', - ], - lt: [ - '<', - "circle": '⧀', - "dot": '⋖', - "double": '≪', - "eq": '≤', - "eq.gt": '⋚', - "eq.not": '≰', - "eqq": '≦', - "gt": '≶', - "gt.not": '≸', - "neqq": '≨', - "not": '≮', - "ntilde": '⋦', - "small": '﹤', - "tilde": '≲', - "tilde.not": '≴', - "triple": '⋘', - "triple.nested": '⫷', - ], - prec: [ - '≺', - "approx": '⪷', - "double": '⪻', - "eq": '≼', - "eq.not": '⋠', - "eqq": '⪳', - "napprox": '⪹', - "neqq": '⪵', - "not": '⊀', - "ntilde": '⋨', - "tilde": '≾', - ], - succ: [ - '≻', - "approx": '⪸', - "double": '⪼', - "eq": '≽', - "eq.not": '⋡', - "eqq": '⪴', - "napprox": '⪺', - "neqq": '⪶', - "not": '⊁', - "ntilde": '⋩', - "tilde": '≿', - ], - ident: ['≡', "not": '≢', "strict": '≣'], - approx: ['≈', "eq": '≊', "not": '≉'], - tilde: [ - '∼', - "eq": '≃', - "eq.not": '≄', - "eq.rev": '⋍', - "eqq": '≅', - "eqq.not": '≇', - "neqq": '≆', - "not": '≁', - "rev": '∽', - "rev.eqq": '≌', - "triple": '≋', - ], - - // Set theory. - nothing: ['∅', "rev": '⦰'], - in: [ - '∈', - "not": '∉', - "rev": '∋', - "rev.not": '∌', - "rev.small": '∍', - "small": '∊', - ], - subset: [ - '⊂', - "dot": '⪽', - "double": '⋐', - "eq": '⊆', - "eq.not": '⊈', - "eq.sq": '⊑', - "eq.sq.not": '⋢', - "neq": '⊊', - "not": '⊄', - "sq": '⊏', - "sq.neq": '⋤', - ], - supset: [ - '⊃', - "dot": '⪾', - "double": '⋑', - "eq": '⊇', - "eq.not": '⊉', - "eq.sq": '⊒', - "eq.sq.not": '⋣', - "neq": '⊋', - "not": '⊅', - "sq": '⊐', - "sq.neq": '⋥', - ], - union: [ - '∪', - "arrow": '⊌', - "big": '⋃', - "dot": '⊍', - "dot.big": '⨃', - "double": '⋓', - "minus": '⩁', - "or": '⩅', - "plus": '⊎', - "plus.big": '⨄', - "sq": '⊔', - "sq.big": '⨆', - "sq.double": '⩏', - ], - sect: [ - '∩', - "and": '⩄', - "big": '⋂', - "dot": '⩀', - "double": '⋒', - "sq": '⊓', - "sq.big": '⨅', - "sq.double": '⩎', - ], - without: '∖', - complement: '∁', - - // Relational algebra. - join: [ - '⨝', - "r": '⟖', - "l": '⟕', - "l.r": '⟗', - ], - - // Logic. - forall: '∀', - exists: ['∃', "not": '∄'], - top: '⊤', - bot: '⊥', - not: '¬', - and: [ - '∧', - "big": '⋀', - "curly": '⋏', - "dot": '⟑', - "double": '⩓', - ], - or: [ - '∨', - "big": '⋁', - "curly": '⋎', - "dot": '⟇', - "double": '⩔', - ], - models: '⊧', - therefore: '∴', - because: '∵', - qed: '∎', - tack: [ - "r": '⊢', - "r.long": '⟝', - "l": '⊣', - "l.long": '⟞', - "l.short": '⫞', - "t": '⊥', - "t.big": '⟘', - "t.double": '⫫', - "t.short": '⫠', - "b": '⊤', - "b.big": '⟙', - "b.double": '⫪', - "b.short": '⫟', - "l.r": '⟛', - ], - - // Geometry. - perp: ['⟂', "circle": '⦹'], - parallel: ['∥', "circle": '⦷', "not": '∦'], - angle: [ - '∠', - "acute": '⦟', - "arc": '∡', - "arc.rev": '⦛', - "rev": '⦣', - "right": '∟', - "right.rev": '⯾', - "right.arc": '⊾', - "right.dot": '⦝', - "right.sq": '⦜', - "spatial": '⟀', - "spheric": '∢', - "spheric.rev": '⦠', - "spheric.top": '⦡', - ], - - // Analysis. - infty: '∞', - sum: ['∑', "integral": '⨋'], - prod: ['∏', "co": '∐'], - integral: [ - '∫', - "arrow.hook": '⨗', - "ccw": '⨑', - "cont": '∮', - "cont.ccw": '∳', - "cont.cw": '∲', - "cw": '∱', - "double": '∬', - "quad": '⨌', - "sect": '⨙', - "sq": '⨖', - "surf": '∯', - "times": '⨘', - "triple": '∭', - "union": '⨚', - "vol": '∰', - ], - prop: '∝', - divides: ['∣', "not": '∤'], - compose: '∘', - - // Miscellaneous. - diff: '∂', - nabla: '∇', - kelvin: 'K', - micro: 'µ', - degree: ['°', "c": '℃', "f": '℉'], - planck: ['ℎ', "reduce": 'ℏ'], - angstrom: 'Å', - diameter: '⌀', -} diff --git a/library/src/symbols/emoji.rs b/library/src/symbols/emoji.rs new file mode 100644 index 000000000..efde0e764 --- /dev/null +++ b/library/src/symbols/emoji.rs @@ -0,0 +1,1356 @@ +use typst::model::{symbols, Module, Scope, Symbol}; + +/// A module with all emoji. +pub fn emoji() -> Module { + let mut scope = Scope::new(); + for (name, symbol) in EMOJI { + scope.define(*name, symbol.clone()); + } + Module::new("emoji").with_scope(scope) +} + +/// A list of named emoji. +const EMOJI: &[(&'static str, Symbol)] = symbols! { + abacus: '🧮', + abc: '🔤', + abcd: '🔡', + ABCD: '🔠', + accordion: '🪗', + aesculapius: '⚕', + airplane: [ + '✈', + landing: '🛬', + small: '🛩', + takeoff: '🛫', + ], + alembic: '⚗', + alien: ['👽', monster: '👾'], + ambulance: '🚑', + amphora: '🏺', + anchor: '⚓', + anger: '💢', + ant: '🐜', + apple: [green: '🍏', red: '🍎'], + arm: [mech: '🦾', muscle: '💪', selfie: '🤳'], + arrow: [ + r.filled: '➡', + r.hook: '↪', + r.soon: '🔜', + l.filled: '⬅', + l.hook: '↩', + l.back: '🔙', + l.end: '🔚', + t.filled: '⬆', + t.curve: '⤴', + t.top: '🔝', + b.filled: '⬇', + b.curve: '⤵', + l.r: '↔', + l.r.on: '🔛', + t.b: '↕', + bl: '↙', + br: '↘', + tl: '↖', + tr: '↗', + ], + arrows: [cycle: '🔄'], + ast: ['*', box: '✳'], + atm: '🏧', + atom: '⚛', + aubergine: '🍆', + avocado: '🥑', + axe: '🪓', + baby: ['👶', angel: '👼', box: '🚼'], + babybottle: '🍼', + backpack: '🎒', + bacon: '🥓', + badger: '🦡', + badminton: '🏸', + bagel: '🥯', + baggageclaim: '🛄', + baguette: '🥖', + balloon: '🎈', + ballot: [check: '☑'], + ballotbox: '🗳', + banana: '🍌', + banjo: '🪕', + bank: '🏦', + barberpole: '💈', + baseball: '⚾', + basecap: '🧢', + basket: '🧺', + basketball: ['⛹', ball: '🏀'], + bat: '🦇', + bathtub: ['🛀', foam: '🛁'], + battery: ['🔋', low: '🪫'], + beach: [palm: '🏝', umbrella: '🏖'], + beads: '📿', + beans: '🫘', + bear: '🐻', + beaver: '🦫', + bed: ['🛏', person: '🛌'], + bee: '🐝', + beer: ['🍺', clink: '🍻'], + beetle: ['🪲', lady: '🐞'], + bell: ['🔔', ding: '🛎', not: '🔕'], + bento: '🍱', + bicyclist: ['🚴', mountain: '🚵'], + bike: ['🚲', not: '🚳'], + bikini: '👙', + billiards: '🎱', + bin: '🗑', + biohazard: '☣', + bird: '🐦', + bison: '🦬', + blood: '🩸', + blouse: '👚', + blowfish: '🐡', + blueberries: '🫐', + boar: '🐗', + boat: [ + sail: '⛵', + row: '🚣', + motor: '🛥', + speed: '🚤', + canoe: '🛶', + ], + bolt: '🔩', + bomb: '💣', + bone: '🦴', + book: [ + red: '📕', + blue: '📘', + green: '📗', + orange: '📙', + spiral: '📒', + open: '📖', + ], + bookmark: '🔖', + books: '📚', + boomerang: '🪃', + bordercontrol: '🛂', + bouquet: '💐', + bow: '🏹', + bowl: [spoon: '🥣', steam: '🍜'], + bowling: '🎳', + boxing: '🥊', + boy: '👦', + brain: '🧠', + bread: '🍞', + brick: '🧱', + bride: '👰', + bridge: [fog: '🌁', night: '🌉'], + briefcase: '💼', + briefs: '🩲', + brightness: [high: '🔆', low: '🔅'], + broccoli: '🥦', + broom: '🧹', + brush: '🖌', + bubble: [ + speech.r: '💬', + speech.l: '🗨', + thought: '💭', + anger.r: '🗯', + ], + bubbles: '🫧', + bubbletea: '🧋', + bucket: '🪣', + buffalo: [water: '🐃'], + bug: '🐛', + builder: '👷', + burger: '🍔', + burrito: '🌯', + bus: [ + '🚌', + front: '🚍', + small: '🚐', + stop: '🚏', + trolley: '🚎', + ], + butter: '🧈', + butterfly: '🦋', + button: ['🔲', alt: '🔳', radio: '🔘'], + cabinet: [file: '🗄'], + cablecar: ['🚠', small: '🚡'], + cactus: '🌵', + cake: [ + '🎂', + fish: '🍥', + moon: '🥮', + slice: '🍰', + ], + calendar: ['📅', spiral: '🗓', tearoff: '📆'], + camel: ['🐫', dromedar: '🐪'], + camera: [ + '📷', + flash: '📸', + movie: '🎥', + movie.box: '🎦', + video: '📹', + ], + camping: '🏕', + can: '🥫', + candle: '🕯', + candy: '🍬', + cane: '🦯', + car: [ + '🚗', + front: '🚘', + pickup: '🛻', + police: '🚓', + police.front: '🚔', + racing: '🏎', + rickshaw: '🛺', + suv: '🚙', + ], + card: [credit: '💳', id: '🪪'], + cardindex: '📇', + carrot: '🥕', + cart: '🛒', + cassette: '📼', + castle: [eu: '🏰', jp: '🏯'], + cat: [ + '🐈', + face: '🐱', + face.angry: '😾', + face.cry: '😿', + face.heart: '😻', + face.joy: '😹', + face.kiss: '😽', + face.laugh: '😸', + face.shock: '🙀', + face.smile: '😺', + face.smirk: '😼', + ], + chain: '🔗', + chains: '⛓', + chair: '🪑', + champagne: '🍾', + chart: [ + bar: '📊', + up: '📈', + down: '📉', + yen.up: '💹', + ], + checkmark: [heavy: '✔', box: '✅'], + cheese: '🧀', + cherries: '🍒', + chess: '♟', + chestnut: '🌰', + chicken: [ + '🐔', + baby: '🐥', + baby.egg: '🐣', + baby.head: '🐤', + leg: '🍗', + male: '🐓', + ], + child: '🧒', + chipmunk: '🐿', + chocolate: '🍫', + chopsticks: '🥢', + church: ['⛪', love: '💒'], + cigarette: ['🚬', not: '🚭'], + circle: [ + black: '⚫', + blue: '🔵', + brown: '🟤', + green: '🟢', + orange: '🟠', + purple: '🟣', + white: '⚪', + red: '🔴', + yellow: '🟡', + stroked: '⭕', + ], + circus: '🎪', + city: [ + '🏙', + dusk: '🌆', + night: '🌃', + sunset: '🌇', + ], + clamp: '🗜', + clapperboard: '🎬', + climbing: '🧗', + clip: '📎', + clipboard: '📋', + clips: '🖇', + clock: [ + one: '🕐', + one.thirty: '🕜', + two: '🕑', + two.thirty: '🕝', + three: '🕒', + three.thirty: '🕞', + four: '🕓', + four.thirty: '🕟', + five: '🕔', + five.thirty: '🕠', + six: '🕕', + six.thirty: '🕡', + seven: '🕖', + seven.thirty: '🕢', + eight: '🕗', + eight.thirty: '🕣', + nine: '🕘', + nine.thirty: '🕤', + ten: '🕙', + ten.thirty: '🕥', + eleven: '🕚', + eleven.thirty: '🕦', + twelve: '🕛', + twelve.thirty: '🕧', + alarm: '⏰', + old: '🕰', + timer: '⏲', + ], + cloud: [ + '☁', + dust: '💨', + rain: '🌧', + snow: '🌨', + storm: '⛈', + sun: '⛅', + sun.hidden: '🌥', + sun.rain: '🌦', + thunder: '🌩', + ], + coat: ['🧥', lab: '🥼'], + cockroach: '🪳', + cocktail: [martini: '🍸', tropical: '🍹'], + coconut: '🥥', + coffee: '☕', + coffin: '⚰', + coin: '🪙', + comet: '☄', + compass: '🧭', + computer: '🖥', + computermouse: '🖱', + confetti: '🎊', + construction: '🚧', + controller: '🎮', + cookie: ['🍪', fortune: '🥠'], + cooking: '🍳', + cool: '🆒', + copyright: '©', + coral: '🪸', + corn: '🌽', + couch: '🛋', + couple: '💑', + cow: ['🐄', face: '🐮'], + crab: '🦀', + crane: '🏗', + crayon: '🖍', + cricket: '🦗', + cricketbat: '🏏', + crocodile: '🐊', + croissant: '🥐', + crossmark: ['❌', box: '❎'], + crown: '👑', + crutch: '🩼', + crystal: '🔮', + cucumber: '🥒', + cup: [straw: '🥤'], + cupcake: '🧁', + curling: '🥌', + curry: '🍛', + custard: '🍮', + customs: '🛃', + cutlery: '🍴', + cyclone: '🌀', + dancing: [man: '🕺', woman: '💃', women.bunny: '👯'], + darts: '🎯', + dash: [wave.double: '〰'], + deer: '🦌', + desert: '🏜', + detective: '🕵', + diamond: [ + blue: '🔷', + blue.small: '🔹', + orange: '🔶', + orange.small: '🔸', + dot: '💠', + ], + die: '🎲', + dino: [pod: '🦕', rex: '🦖'], + disc: [cd: '💿', dvd: '📀', mini: '💽'], + discoball: '🪩', + diving: '🤿', + dodo: '🦤', + dog: [ + '🐕', + face: '🐶', + guide: '🦮', + poodle: '🐩', + ], + dollar: '💲', + dolphin: '🐬', + donut: '🍩', + door: '🚪', + dove: [peace: '🕊'], + dragon: ['🐉', face: '🐲'], + dress: ['👗', kimono: '👘', sari: '🥻'], + drop: '💧', + drops: '💦', + drum: ['🥁', big: '🪘'], + duck: '🦆', + dumpling: '🥟', + eagle: '🦅', + ear: ['👂', aid: '🦻'], + egg: '🥚', + eighteen: [not: '🔞'], + elephant: '🐘', + elevator: '🛗', + elf: '🧝', + email: '📧', + excl: [ + '❗', + white: '❕', + double: '‼', + quest: '⁉', + ], + explosion: '💥', + extinguisher: '🧯', + eye: '👁', + eyes: '👀', + face: [ + grin: '😀', + angry: '😠', + angry.red: '😡', + anguish: '😧', + astonish: '😲', + bandage: '🤕', + beam: '😁', + blank: '😶', + clown: '🤡', + cold: '🥶', + concern: '😦', + cool: '😎', + cover: '🤭', + cowboy: '🤠', + cry: '😭', + devil.smile: '😈', + devil.frown: '👿', + diagonal: '🫤', + disguise: '🥸', + dizzy: '😵', + dotted: '🫥', + down: '😞', + down.sweat: '😓', + drool: '🤤', + explode: '🤯', + eyeroll: '🙄', + friendly: '☺', + fear: '😨', + fear.sweat: '😰', + fever: '🤒', + flush: '😳', + frown: '☹', + frown.slight: '🙁', + frust: '😣', + goofy: '🤪', + halo: '😇', + happy: '😊', + heart: '😍', + hearts: '🥰', + heat: '🥵', + hug: '🤗', + inv: '🙃', + joy: '😂', + kiss: '😗', + kiss.smile: '😙', + kiss.heart: '😘', + kiss.blush: '😚', + lick: '😋', + lie: '🤥', + mask: '😷', + meh: '😒', + melt: '🫠', + money: '🤑', + monocle: '🧐', + nausea: '🤢', + nerd: '🤓', + neutral: '😐', + open: '😃', + party: '🥳', + peek: '🫣', + plead: '🥺', + relief: '😌', + rofl: '🤣', + sad: '😔', + salute: '🫡', + shock: '😱', + shush: '🤫', + skeptic: '🤨', + sleep: '😴', + sleepy: '😪', + smile: '😄', + smile.slight: '🙂', + smile.sweat: '😅', + smile.tear: '🥲', + smirk: '😏', + sneeze: '🤧', + speak.not: '🫢', + squint: '😆', + stars: '🤩', + straight: '😑', + suffer: '😖', + surprise: '😯', + symbols: '🤬', + tear: '😢', + tear.relief: '😥', + tear.withheld: '🥹', + teeth: '😬', + think: '🤔', + tired: '😫', + tongue: '😛', + tongue.squint: '😝', + tongue.wink: '😜', + triumph: '😤', + unhappy: '😕', + vomit: '🤮', + weary: '😩', + wink: '😉', + woozy: '🥴', + worry: '😟', + wow: '😮', + yawn: '🥱', + zip: '🤐', + ], + factory: '🏭', + fairy: '🧚', + faith: [ + christ: '✝', + dharma: '☸', + islam: '☪', + judaism: '✡', + menorah: '🕎', + om: '🕉', + orthodox: '☦', + peace: '☮', + star.dot: '🔯', + worship: '🛐', + yinyang: '☯', + ], + falafel: '🧆', + family: '👪', + fax: '📠', + feather: '🪶', + feeding: [breast: '🤱'], + fencing: '🤺', + ferriswheel: '🎡', + filebox: '🗃', + filedividers: '🗂', + film: '🎞', + finger: [ + r: '👉', + l: '👈', + t: '👆', + t.alt: '☝', + b: '👇', + front: '🫵', + m: '🖕', + ], + fingers: [cross: '🤞', pinch: '🤌', snap: '🫰'], + fire: '🔥', + firecracker: '🧨', + fireengine: '🚒', + fireworks: '🎆', + fish: ['🐟', tropical: '🐠'], + fishing: '🎣', + fist: [ + front: '👊', + r: '🤜', + l: '🤛', + raised: '✊', + ], + flag: [ + black: '🏴', + white: '🏳', + goal: '🏁', + golf: '⛳', + red: '🚩', + ], + flags: [jp.crossed: '🎌'], + flamingo: '🦩', + flashlight: '🔦', + flatbread: '🫓', + fleur: '⚜', + floppy: '💾', + flower: [ + hibiscus: '🌺', + lotus: '🪷', + pink: '🌸', + rose: '🌹', + sun: '🌻', + tulip: '🌷', + white: '💮', + wilted: '🥀', + yellow: '🌼', + ], + fly: '🪰', + fog: '🌫', + folder: ['📁', open: '📂'], + fondue: '🫕', + foot: '🦶', + football: ['⚽', am: '🏈'], + forex: '💱', + fountain: '⛲', + fox: '🦊', + free: '🆓', + fries: '🍟', + frisbee: '🥏', + frog: [face: '🐸'], + fuelpump: '⛽', + garlic: '🧄', + gear: '⚙', + gem: '💎', + genie: '🧞', + ghost: '👻', + giraffe: '🦒', + girl: '👧', + glass: [ + clink: '🥂', + milk: '🥛', + pour: '🫗', + tumbler: '🥃', + ], + glasses: ['👓', sun: '🕶'], + globe: [ + am: '🌎', + as.au: '🌏', + eu.af: '🌍', + meridian: '🌐', + ], + gloves: '🧤', + goal: '🥅', + goat: '🐐', + goggles: '🥽', + golfing: '🏌', + gorilla: '🦍', + grapes: '🍇', + guard: [man: '💂'], + guitar: '🎸', + gymnastics: '🤸', + haircut: '💇', + hammer: ['🔨', pick: '⚒', wrench: '🛠'], + hamsa: '🪬', + hamster: [face: '🐹'], + hand: [ + raised: '✋', + raised.alt: '🤚', + r: '🫱', + l: '🫲', + t: '🫴', + b: '🫳', + ok: '👌', + call: '🤙', + love: '🤟', + part: '🖖', + peace: '✌', + pinch: '🤏', + rock: '🤘', + splay: '🖐', + wave: '👋', + write: '✍', + ], + handbag: '👜', + handball: '🤾', + handholding: [man.man: '👬', woman.man: '👫', woman.woman: '👭'], + hands: [ + folded: '🙏', + palms: '🤲', + clap: '👏', + heart: '🫶', + open: '👐', + raised: '🙌', + shake: '🤝', + ], + hash: '#', + hat: [ribbon: '👒', top: '🎩'], + headphone: '🎧', + heart: [ + '❤', + arrow: '💘', + beat: '💓', + black: '🖤', + blue: '💙', + box: '💟', + broken: '💔', + brown: '🤎', + double: '💕', + excl: '❣', + green: '💚', + grow: '💗', + orange: '🧡', + purple: '💜', + real: '🫀', + revolve: '💞', + ribbon: '💝', + spark: '💖', + white: '🤍', + yellow: '💛', + ], + hedgehog: '🦔', + helicopter: '🚁', + helix: '🧬', + helmet: [cross: '⛑', military: '🪖'], + hippo: '🦛', + hockey: '🏑', + hole: '🕳', + honey: '🍯', + hongbao: '🧧', + hook: '🪝', + horn: [postal: '📯'], + horse: [ + '🐎', + carousel: '🎠', + face: '🐴', + race: '🏇', + ], + hospital: '🏥', + hotdog: '🌭', + hotel: ['🏨', love: '🏩'], + hotspring: '♨', + hourglass: ['⌛', flow: '⏳'], + house: [ + '🏠', + derelict: '🏚', + garden: '🏡', + multiple: '🏘', + ], + hundred: '💯', + hut: '🛖', + ice: '🧊', + icecream: ['🍨', shaved: '🍧', soft: '🍦'], + icehockey: '🏒', + id: '🆔', + info: 'ℹ', + izakaya: '🏮', + jar: '🫙', + jeans: '👖', + jigsaw: '🧩', + joystick: '🕹', + juggling: '🤹', + juice: '🧃', + kaaba: '🕋', + kadomatsu: '🎍', + kangaroo: '🦘', + gachi: '🈷', + go: '🈴', + hi: '㊙', + ka: '🉑', + kachi: '🈹', + kara: '🈳', + kon: '🈲', + man: '🈵', + muryo: '🈚', + shin: '🈸', + shuku: '㊗', + toku: '🉐', + yo: '🈺', + yubi: '🈯', + yuryo: '🈶', + koko: '🈁', + sa: '🈂', + kebab: '🥙', + key: ['🔑', old: '🗝'], + keyboard: '⌨', + kiss: '💏', + kissmark: '💋', + kite: '🪁', + kiwi: '🥝', + knife: ['🔪', dagger: '🗡'], + knot: '🪢', + koala: '🐨', + koinobori: '🎏', + label: '🏷', + lacrosse: '🥍', + ladder: '🪜', + lamp: [diya: '🪔'], + laptop: '💻', + a: '🅰', + ab: '🆎', + b: '🅱', + cl: '🆑', + o: '🅾', + leaf: [ + clover.three: '☘', + clover.four: '🍀', + fall: '🍂', + herb: '🌿', + maple: '🍁', + wind: '🍃', + ], + leftluggage: '🛅', + leg: ['🦵', mech: '🦿'], + lemon: '🍋', + leopard: '🐆', + letter: [love: '💌'], + liberty: '🗽', + lightbulb: '💡', + lightning: '⚡', + lion: '🦁', + lipstick: '💄', + litter: ['🚮', not: '🚯'], + lizard: '🦎', + llama: '🦙', + lobster: '🦞', + lock: [ + '🔒', + key: '🔐', + open: '🔓', + pen: '🔏', + ], + lollipop: '🍭', + lotion: '🧴', + luggage: '🧳', + lungs: '🫁', + mage: '🧙', + magnet: '🧲', + magnify: [r: '🔎', l: '🔍'], + mahjong: [dragon.red: '🀄'], + mail: ['✉', arrow: '📩'], + mailbox: [ + closed.empty: '📪', + closed.full: '📫', + open.empty: '📭', + open.full: '📬', + ], + mammoth: '🦣', + man: [ + '👨', + box: '🚹', + crown: '🤴', + guapimao: '👲', + levitate: '🕴', + old: '👴', + pregnant: '🫃', + turban: '👳', + tuxedo: '🤵', + ], + mango: '🥭', + map: [world: '🗺', jp: '🗾'], + martialarts: '🥋', + masks: '🎭', + mate: '🧉', + matryoshka: '🪆', + meat: ['🥩', bone: '🍖'], + medal: [ + first: '🥇', + second: '🥈', + third: '🥉', + sports: '🏅', + military: '🎖', + ], + megaphone: ['📢', simple: '📣'], + melon: '🍈', + merperson: '🧜', + metro: 'Ⓜ', + microbe: '🦠', + microphone: ['🎤', studio: '🎙'], + microscope: '🔬', + milkyway: '🌌', + mirror: '🪞', + mixer: '🎛', + money: [ + bag: '💰', + dollar: '💵', + euro: '💶', + pound: '💷', + yen: '💴', + wings: '💸', + ], + monkey: [ + '🐒', + face: '🐵', + hear.not: '🙉', + see.not: '🙈', + speak.not: '🙊', + ], + moon: [ + crescent: '🌙', + full: '🌕', + full.face: '🌝', + new: '🌑', + new.face: '🌚', + wane.one: '🌖', + wane.two: '🌗', + wane.three.face: '🌜', + wane.three: '🌘', + wax.one: '🌒', + wax.two: '🌓', + wax.two.face: '🌛', + wax.three: '🌔', + ], + mortarboard: '🎓', + mosque: '🕌', + mosquito: '🦟', + motorcycle: '🏍', + motorway: '🛣', + mountain: [ + '⛰', + fuji: '🗻', + snow: '🏔', + sunrise: '🌄', + ], + mouse: ['🐁', face: '🐭'], + mousetrap: '🪤', + mouth: ['👄', bite: '🫦'], + moyai: '🗿', + museum: '🏛', + mushroom: '🍄', + musicalscore: '🎼', + nails: [polish: '💅'], + namebadge: '📛', + nazar: '🧿', + necktie: '👔', + needle: '🪡', + nest: [empty: '🪹', eggs: '🪺'], + new: '🆕', + newspaper: ['📰', rolled: '🗞'], + ng: '🆖', + ningyo: '🎎', + ninja: '🥷', + noentry: '⛔', + nose: '👃', + notebook: ['📓', deco: '📔'], + notepad: '🗒', + notes: ['🎵', triple: '🎶'], + numbers: '🔢', + octopus: '🐙', + office: '🏢', + oil: '🛢', + ok: '🆗', + olive: '🫒', + oni: '👹', + onion: '🧅', + orangutan: '🦧', + otter: '🦦', + owl: '🦉', + ox: '🐂', + oyster: '🦪', + package: '📦', + paella: '🥘', + page: ['📄', curl: '📃', pencil: '📝'], + pager: '📟', + pages: [tabs: '📑'], + painting: '🖼', + palette: '🎨', + pancakes: '🥞', + panda: '🐼', + parachute: '🪂', + park: '🏞', + parking: '🅿', + parrot: '🦜', + partalteration: '〽', + party: '🎉', + peach: '🍑', + peacock: '🦚', + peanuts: '🥜', + pear: '🍐', + pedestrian: ['🚶', not: '🚷'], + pen: [ball: '🖊', fountain: '🖋'], + pencil: '✏', + penguin: '🐧', + pepper: ['🫑', hot: '🌶'], + person: [ + '🧑', + angry: '🙎', + beard: '🧔', + blonde: '👱', + bow: '🙇', + crown: '🫅', + deaf: '🧏', + facepalm: '🤦', + frown: '🙍', + hijab: '🧕', + kneel: '🧎', + lotus: '🧘', + massage: '💆', + no: '🙅', + ok: '🙆', + old: '🧓', + pregnant: '🫄', + raise: '🙋', + sassy: '💁', + shrug: '🤷', + stand: '🧍', + steam: '🧖', + ], + petri: '🧫', + phone: [ + '📱', + arrow: '📲', + classic: '☎', + not: '📵', + off: '📴', + receiver: '📞', + signal: '📶', + vibrate: '📳', + ], + piano: '🎹', + pick: '⛏', + pie: '🥧', + pig: ['🐖', face: '🐷', node: '🐽'], + pill: '💊', + pin: ['📌', round: '📍'], + pinata: '🪅', + pineapple: '🍍', + pingpong: '🏓', + pistol: '🔫', + pizza: '🍕', + placard: '🪧', + planet: '🪐', + plant: '🪴', + plaster: '🩹', + plate: [cutlery: '🍽'], + playback: [ + down: '⏬', + eject: '⏏', + forward: '⏩', + pause: '⏸', + record: '⏺', + repeat: '🔁', + repeat.once: '🔂', + repeat.v: '🔃', + restart: '⏮', + rewind: '⏪', + shuffle: '🔀', + skip: '⏭', + stop: '⏹', + toggle: '⏯', + up: '⏫', + ], + playingcard: [flower: '🎴', joker: '🃏'], + plunger: '🪠', + policeofficer: '👮', + poo: '💩', + popcorn: '🍿', + post: [eu: '🏤', jp: '🏣'], + postbox: '📮', + potato: ['🥔', sweet: '🍠'], + pouch: '👝', + powerplug: '🔌', + present: '🎁', + pretzel: '🥨', + printer: '🖨', + prints: [foot: '👣', paw: '🐾'], + prohibited: '🚫', + projector: '📽', + pumpkin: [lantern: '🎃'], + purse: '👛', + quest: ['❓', white: '❔'], + rabbit: ['🐇', face: '🐰'], + raccoon: '🦝', + radio: '📻', + radioactive: '☢', + railway: '🛤', + rainbow: '🌈', + ram: '🐏', + rat: '🐀', + razor: '🪒', + receipt: '🧾', + recycling: '♻', + reg: '®', + restroom: '🚻', + rhino: '🦏', + ribbon: ['🎀', remind: '🎗'], + rice: [ + '🍚', + cracker: '🍘', + ear: '🌾', + onigiri: '🍙', + ], + ring: '💍', + ringbuoy: '🛟', + robot: '🤖', + rock: '🪨', + rocket: '🚀', + rollercoaster: '🎢', + rosette: '🏵', + rugby: '🏉', + ruler: ['📏', triangle: '📐'], + running: '🏃', + safetypin: '🧷', + safetyvest: '🦺', + sake: '🍶', + salad: '🥗', + salt: '🧂', + sandwich: '🥪', + santa: [man: '🎅', woman: '🤶'], + satdish: '📡', + satellite: '🛰', + saw: '🪚', + saxophone: '🎷', + scales: '⚖', + scarf: '🧣', + school: '🏫', + scissors: '✂', + scooter: ['🛴', motor: '🛵'], + scorpion: '🦂', + screwdriver: '🪛', + scroll: '📜', + seal: '🦭', + seat: '💺', + seedling: '🌱', + shark: '🦈', + sheep: '🐑', + shell: [spiral: '🐚'], + shield: '🛡', + ship: ['🚢', cruise: '🛳', ferry: '⛴'], + shirt: [sports: '🎽', t: '👕'], + shoe: [ + '👞', + ballet: '🩰', + flat: '🥿', + heel: '👠', + hike: '🥾', + ice: '⛸', + roller: '🛼', + sandal.heel: '👡', + ski: '🎿', + sneaker: '👟', + tall: '👢', + thong: '🩴', + ], + shopping: '🛍', + shorts: '🩳', + shoshinsha: '🔰', + shower: '🚿', + shrimp: ['🦐', fried: '🍤'], + shrine: '⛩', + sign: [crossing: '🚸', stop: '🛑'], + silhouette: [ + '👤', + double: '👥', + hug: '🫂', + speak: '🗣', + ], + siren: '🚨', + skateboard: '🛹', + skewer: [dango: '🍡', oden: '🍢'], + skiing: '⛷', + skull: ['💀', bones: '☠'], + skunk: '🦨', + sled: '🛷', + slide: '🛝', + slider: '🎚', + sloth: '🦥', + slots: '🎰', + snail: '🐌', + snake: '🐍', + snowboarding: '🏂', + snowflake: '❄', + snowman: ['⛄', snow: '☃'], + soap: '🧼', + socks: '🧦', + softball: '🥎', + sos: '🆘', + soup: '🍲', + spaghetti: '🍝', + sparkle: [box: '❇'], + sparkler: '🎇', + sparkles: '✨', + speaker: [ + '🔈', + not: '🔇', + wave: '🔉', + waves: '🔊', + ], + spider: '🕷', + spiderweb: '🕸', + spinach: '🥬', + sponge: '🧽', + spoon: '🥄', + square: [ + black: '⬛', + black.tiny: '▪', + black.small: '◾', + black.medium: '◼', + white: '⬜', + white.tiny: '▫', + white.small: '◽', + white.medium: '◻', + blue: '🟦', + brown: '🟫', + green: '🟩', + orange: '🟧', + purple: '🟪', + red: '🟥', + yellow: '🟨', + ], + squid: '🦑', + stadium: '🏟', + star: [ + '⭐', + arc: '💫', + box: '✴', + glow: '🌟', + shoot: '🌠', + ], + stethoscope: '🩺', + store: [big: '🏬', small: '🏪'], + strawberry: '🍓', + suit: [ + club: '♣', + diamond: '♦', + heart: '♥', + spade: '♠', + ], + sun: ['☀', cloud: '🌤', face: '🌞'], + sunrise: '🌅', + superhero: '🦸', + supervillain: '🦹', + surfing: '🏄', + sushi: '🍣', + swan: '🦢', + swimming: '🏊', + swimsuit: '🩱', + swords: '⚔', + symbols: '🔣', + synagogue: '🕍', + syringe: '💉', + taco: '🌮', + takeout: '🥡', + tamale: '🫔', + tanabata: '🎋', + tangerine: '🍊', + tap: ['🚰', not: '🚱'], + taxi: ['🚕', front: '🚖'], + teacup: '🍵', + teapot: '🫖', + teddy: '🧸', + telescope: '🔭', + temple: '🛕', + ten: '🔟', + tengu: '👺', + tennis: '🎾', + tent: '⛺', + testtube: '🧪', + thermometer: '🌡', + thread: '🧵', + thumb: [up: '👍', down: '👎'], + ticket: [event: '🎟', travel: '🎫'], + tiger: ['🐅', face: '🐯'], + tm: '™', + toilet: '🚽', + toiletpaper: '🧻', + tomato: '🍅', + tombstone: '🪦', + tongue: '👅', + toolbox: '🧰', + tooth: '🦷', + toothbrush: '🪥', + tornado: '🌪', + tower: [tokyo: '🗼'], + trackball: '🖲', + tractor: '🚜', + trafficlight: [v: '🚦', h: '🚥'], + train: [ + '🚆', + car: '🚃', + light: '🚈', + metro: '🚇', + mono: '🚝', + mountain: '🚞', + speed: '🚄', + speed.bullet: '🚅', + steam: '🚂', + stop: '🚉', + suspend: '🚟', + tram: '🚊', + tram.car: '🚋', + ], + transgender: '⚧', + tray: [inbox: '📥', mail: '📨', outbox: '📤'], + tree: [ + deciduous: '🌳', + evergreen: '🌲', + palm: '🌴', + xmas: '🎄', + ], + triangle: [ + r: '▶', + l: '◀', + t: '🔼', + b: '🔽', + t.red: '🔺', + b.red: '🔻', + ], + trident: '🔱', + troll: '🧌', + trophy: '🏆', + truck: ['🚚', trailer: '🚛'], + trumpet: '🎺', + tsukimi: '🎑', + turkey: '🦃', + turtle: '🐢', + tv: '📺', + ufo: '🛸', + umbrella: [ + open: '☂', + closed: '🌂', + rain: '☔', + sun: '⛱', + ], + unicorn: '🦄', + unknown: '🦳', + up: '🆙', + urn: '⚱', + vampire: '🧛', + violin: '🎻', + volcano: '🌋', + volleyball: '🏐', + vs: '🆚', + waffle: '🧇', + wand: '🪄', + warning: '⚠', + watch: ['⌚', stop: '⏱'], + watermelon: '🍉', + waterpolo: '🤽', + wave: '🌊', + wc: '🚾', + weightlifting: '🏋', + whale: ['🐋', spout: '🐳'], + wheel: '🛞', + wheelchair: ['🦽', box: '♿', motor: '🦼'], + wind: '🌬', + windchime: '🎐', + window: '🪟', + wine: '🍷', + wolf: '🐺', + woman: [ + '👩', + box: '🚺', + crown: '👸', + old: '👵', + pregnant: '🤰', + ], + wood: '🪵', + worm: '🪱', + wrench: '🔧', + wrestling: '🤼', + xray: '🩻', + yarn: '🧶', + yoyo: '🪀', + zebra: '🦓', + zodiac: [ + aquarius: '♒', + aries: '♈', + cancer: '♋', + capri: '♑', + gemini: '♊', + leo: '♌', + libra: '♎', + ophi: '⛎', + pisces: '♓', + sagit: '♐', + scorpio: '♏', + taurus: '♉', + virgo: '♍', + ], + zombie: '🧟', + zzz: '💤', +}; diff --git a/library/src/symbols/mod.rs b/library/src/symbols/mod.rs new file mode 100644 index 000000000..8cd5f2f35 --- /dev/null +++ b/library/src/symbols/mod.rs @@ -0,0 +1,7 @@ +//! Modifiable symbols. + +mod emoji; +mod sym; + +pub use emoji::*; +pub use sym::*; diff --git a/library/src/symbols/sym.rs b/library/src/symbols/sym.rs new file mode 100644 index 000000000..5a68cc803 --- /dev/null +++ b/library/src/symbols/sym.rs @@ -0,0 +1,808 @@ +use typst::model::{symbols, Module, Scope, Symbol}; + +/// A module with all general symbols. +pub fn sym() -> Module { + let mut scope = Scope::new(); + for (name, symbol) in SYM { + scope.define(*name, symbol.clone()); + } + Module::new("sym").with_scope(scope) +} + +/// The list of general symbols. +pub(crate) const SYM: &[(&'static str, Symbol)] = symbols! { + // Control. + wj: '\u{2060}', + zwj: '\u{200D}', + zwnj: '\u{200C}', + zws: '\u{200B}', + + // Spaces. + space: [ + ' ', + nobreak: '\u{A0}', + en: '\u{2002}', + quad: '\u{2003}', + third: '\u{2004}', + quarter: '\u{2005}', + sixth: '\u{2006}', + med: '\u{205F}', + fig: '\u{2007}', + punct: '\u{2008}', + thin: '\u{2009}', + hair: '\u{200A}', + ], + + // Delimiters. + paren: [l: '(', r: ')', t: '⏜', b: '⏝'], + brace: [l: '{', r: '}', t: '⏞', b: '⏟'], + bracket: [l: '[', r: ']', t: '⎴', b: '⎵'], + turtle: [l: '〔', r: '〕', t: '⏠', b: '⏡'], + bar: [v: '|', v.double: '‖', v.triple: '⦀', v.broken: '¦', v.circle: '⦶', h: '―'], + fence: [l: '⧘', l.double: '⧚', r: '⧙', r.double: '⧛', dotted: '⦙'], + angle: [ + '∠', + l: '〈', + r: '〉', + l.double: '《', + r.double: '》', + acute: '⦟', + arc: '∡', + arc.rev: '⦛', + rev: '⦣', + right: '∟', + right.rev: '⯾', + right.arc: '⊾', + right.dot: '⦝', + right.sq: '⦜', + spatial: '⟀', + spheric: '∢', + spheric.rev: '⦠', + spheric.top: '⦡', + ], + + // Punctuation. + amp: ['&', inv: '⅋'], + ast: [ + '*', + low: '⁎', + double: '⁑', + triple: '⁂', + small: '﹡', + op: '∗', + circle: '⊛', + sq: '⧆', + ], + at: '@', + backslash: ['\\', circle: '⦸', not: '⧷'], + co: '℅', + colon: [':', eq: '≔', double.eq: '⩴'], + comma: ',', + dagger: ['†', double: '‡'], + dash: [ + en: '–', + em: '—', + fig: '‒', + wave: '〜', + colon: '∹', + circle: '⊝', + wave.double: '〰', + ], + dot: ['.', op: '⋅', c: '·', circle: '⊙', circle.big: '⨀', square: '⊡'], + excl: ['!', double: '‼', inv: '¡', quest: '⁉'], + quest: ['?', double: '⁇', excl: '⁈', inv: '¿'], + interrobang: '‽', + hash: '#', + hyph: ['‐', minus: '\u{2D}', nobreak: '\u{2011}', point: '‧', soft: '\u{ad}'], + percent: '%', + copyright: ['©', sound: '℗'], + permille: '‰', + pilcrow: ['¶', rev: '⁋'], + section: '§', + semi: [';', rev: '⁏'], + slash: ['/', double: '⫽', triple: '⫻'], + dots: [h: '…', h.c: '⋯', v: '⋮', down: '⋱', up: '⋰'], + tilde: [ + '~', + op: '∼', + eq: '≃', + eq.not: '≄', + eq.rev: '⋍', + eqq: '≅', + eqq.not: '≇', + neqq: '≆', + not: '≁', + rev: '∽', + rev.eqq: '≌', + triple: '≋', + ], + + // Accents, quotes, and primes. + acute: ['´', double: '˝'], + breve: '˘', + caret: '‸', + caron: 'ˇ', + hat: '^', + diaer: '¨', + grave: '`', + macron: '¯', + quote: [ + double: '"', + single: '\'', + l.double: '“', + l.single: '‘', + r.double: '”', + r.single: '’', + angle.l.double: '«', + angle.l.single: '‹', + angle.r.double: '»', + angle.r.single: '›', + high.double: '‟', + high.single: '‛', + low.double: '„', + low.single: '‚', + ], + prime: [ + '′', + rev: '‵', + double: '″', + double.rev: '‶', + triple: '‴', + triple.rev: '‷', + quad: '⁗', + ], + + // https://en.wikipedia.org/wiki/List_of_mathematical_symbols_by_subject + // Arithmetic. + plus: [ + '+', + circle: '⊕', + circle.arrow: '⟴', + circle.big: '⨁', + dot: '∔', + minus: '±', + small: '﹢', + square: '⊞', + triangle: '⨹', + ], + minus: [ + '−', + circle: '⊖', + dot: '∸', + plus: '∓', + square: '⊟', + tilde: '≂', + triangle: '⨺', + ], + div: ['÷', circle: '⨸'], + times: [ + '×', + big: '⨉', + circle: '⊗', + circle.big: '⨂', + div: '⋇', + l: '⋋', + r: '⋌', + square: '⊠', + triangle: '⨻', + ], + ratio: '∶', + + // Relations. + eq: [ + '=', + star: '≛', + circle: '⊜', + colon: '≕', + def: '≝', + delta: '≜', + equi: '≚', + est: '≙', + gt: '⋝', + lt: '⋜', + m: '≞', + not: '≠', + prec: '⋞', + quest: '≟', + small: '﹦', + succ: '⋟', + ], + gt: [ + '>', + circle: '⧁', + dot: '⋗', + double: '≫', + eq: '≥', + eq.lt: '⋛', + eq.not: '≱', + eqq: '≧', + lt: '≷', + lt.not: '≹', + neqq: '≩', + not: '≯', + ntilde: '⋧', + small: '﹥', + tilde: '≳', + tilde.not: '≵', + triple: '⋙', + triple.nested: '⫸', + ], + lt: [ + '<', + circle: '⧀', + dot: '⋖', + double: '≪', + eq: '≤', + eq.gt: '⋚', + eq.not: '≰', + eqq: '≦', + gt: '≶', + gt.not: '≸', + neqq: '≨', + not: '≮', + ntilde: '⋦', + small: '﹤', + tilde: '≲', + tilde.not: '≴', + triple: '⋘', + triple.nested: '⫷', + ], + approx: ['≈', eq: '≊', not: '≉'], + prec: [ + '≺', + approx: '⪷', + double: '⪻', + eq: '≼', + eq.not: '⋠', + eqq: '⪳', + napprox: '⪹', + neqq: '⪵', + not: '⊀', + ntilde: '⋨', + tilde: '≾', + ], + succ: [ + '≻', + approx: '⪸', + double: '⪼', + eq: '≽', + eq.not: '⋡', + eqq: '⪴', + napprox: '⪺', + neqq: '⪶', + not: '⊁', + ntilde: '⋩', + tilde: '≿', + ], + ident: ['≡', not: '≢', strict: '≣'], + prop: '∝', + + // Set theory. + nothing: ['∅', rev: '⦰'], + without: '∖', + complement: '∁', + in: [ + '∈', + not: '∉', + rev: '∋', + rev.not: '∌', + rev.small: '∍', + small: '∊', + ], + subset: [ + '⊂', + dot: '⪽', + double: '⋐', + eq: '⊆', + eq.not: '⊈', + eq.sq: '⊑', + eq.sq.not: '⋢', + neq: '⊊', + not: '⊄', + sq: '⊏', + sq.neq: '⋤', + ], + supset: [ + '⊃', + dot: '⪾', + double: '⋑', + eq: '⊇', + eq.not: '⊉', + eq.sq: '⊒', + eq.sq.not: '⋣', + neq: '⊋', + not: '⊅', + sq: '⊐', + sq.neq: '⋥', + ], + union: [ + '∪', + arrow: '⊌', + big: '⋃', + dot: '⊍', + dot.big: '⨃', + double: '⋓', + minus: '⩁', + or: '⩅', + plus: '⊎', + plus.big: '⨄', + sq: '⊔', + sq.big: '⨆', + sq.double: '⩏', + ], + sect: [ + '∩', + and: '⩄', + big: '⋂', + dot: '⩀', + double: '⋒', + sq: '⊓', + sq.big: '⨅', + sq.double: '⩎', + ], + + // Calculus. + infty: '∞', + diff: '∂', + nabla: '∇', + sum: ['∑', integral: '⨋'], + product: ['∏', co: '∐'], + integral: [ + '∫', + arrow.hook: '⨗', + ccw: '⨑', + cont: '∮', + cont.ccw: '∳', + cont.cw: '∲', + cw: '∱', + double: '∬', + quad: '⨌', + sect: '⨙', + sq: '⨖', + surf: '∯', + times: '⨘', + triple: '∭', + union: '⨚', + vol: '∰', + ], + + // Logic. + forall: '∀', + exists: ['∃', not: '∄'], + top: '⊤', + bot: '⊥', + not: '¬', + and: ['∧', big: '⋀', curly: '⋏', dot: '⟑', double: '⩓'], + or: ['∨', big: '⋁', curly: '⋎', dot: '⟇', double: '⩔'], + models: '⊧', + therefore: '∴', + because: '∵', + qed: '∎', + + // Function and category theory. + compose: '∘', + convolve: '∗', + multimap: '⊸', + + // Number theory. + divides: ['∣', not: '∤'], + perp: ['⟂', circle: '⦹'], + + // Geometry. + parallel: ['∥', circle: '⦷', not: '∦'], + + // Miscellaneous Technical. + diameter: '⌀', + join: ['⨝', r: '⟖', l: '⟕', l.r: '⟗'], + degree: ['°', c: '℃', f: '℉'], + smash: '⨳', + wreath: '≀', + + // Currency. + bitcoin: '₿', + dollar: '$', + euro: '€', + franc: '₣', + lira: '₺', + peso: '₱', + pound: '£', + ruble: '₽', + rupee: '₹', + won: '₩', + yen: '¥', + + // Miscellaneous. + ballot: ['☐', x: '☒'], + checkmark: ['✓', light: '🗸'], + floral: ['❦', l: '☙', r: '❧'], + notes: [up: '🎜', down: '🎝'], + refmark: '※', + servicemark: '℠', + maltese: '✠', + suit: [club: '♣', diamond: '♦', heart: '♥', spade: '♠'], + + // Shapes. + circle: [ + stroked: '○', + stroked.tiny: '∘', + stroked.small: '⚬', + stroked.big: '◯', + filled: '●', + filled.tiny: '⦁', + filled.small: '∙', + filled.big: '⬤', + dotted: '◌', + nested: '⊚', + ], + ellipse: [ + stroked.h: '⬭', + stroked.v: '⬯', + filled.h: '⬬', + filled.v: '⬮', + ], + triangle: [ + stroked.r: '▷', + stroked.l: '◁', + stroked.t: '△', + stroked.b: '▽', + stroked.bl: '◺', + stroked.br: '◿', + stroked.tl: '◸', + stroked.tr: '◹', + stroked.small.r: '▹', + stroked.small.b: '▿', + stroked.small.l: '◃', + stroked.small.t: '▵', + stroked.rounded: '🛆', + stroked.nested: '⟁', + stroked.dot: '◬', + filled.r: '▶', + filled.l: '◀', + filled.t: '▲', + filled.b: '▼', + filled.bl: '◣', + filled.br: '◢', + filled.tl: '◤', + filled.tr: '◥', + filled.small.r: '▸', + filled.small.b: '▾', + filled.small.l: '◂', + filled.small.t: '▴', + ], + square: [ + stroked: '□', + stroked.tiny: '▫', + stroked.small: '◽', + stroked.medium: '◻', + stroked.big: '⬜', + stroked.dotted: '⬚', + stroked.rounded: '▢', + filled: '■', + filled.tiny: '▪', + filled.small: '◾', + filled.medium: '◼', + filled.big: '⬛', + ], + rect: [ + stroked.h: '▭', + stroked.v: '▯', + filled.h: '▬', + filled.v: '▮', + ], + penta: [stroked: '⬠', filled: '⬟'], + hexa: [stroked: '⬡', filled: '⬢'], + diamond: [ + stroked: '◇', + stroked.small: '⋄', + stroked.medium: '⬦', + stroked.dot: '⟐', + filled: '◆', + filled.medium: '⬥', + filled.small: '⬩', + ], + lozenge: [ + stroked: '◊', + stroked.small: '⬫', + stroked.medium: '⬨', + filled: '⧫', + filled.small: '⬪', + filled.medium: '⬧', + ], + star: [op: '⋆', stroked: '★', filled: '★'], + + // Arrows, harpoons, and tacks. + arrow: [ + r: '→', + r.long.bar: '⟼', + r.bar: '↦', + r.curve: '⤷', + r.dashed: '⇢', + r.dotted: '⤑', + r.double: '⇒', + r.double.bar: '⤇', + r.double.long: '⟹', + r.double.long.bar: '⟾', + r.double.not: '⇏', + r.filled: '➡', + r.hook: '↪', + r.long: '⟶', + r.long.squiggly: '⟿', + r.loop: '↬', + r.not: '↛', + r.quad: '⭆', + r.squiggly: '⇝', + r.stop: '⇥', + r.stroked: '⇨', + r.tail: '↣', + r.triple: '⇛', + r.twohead.bar: '⤅', + r.twohead: '↠', + r.wave: '↝', + l: '←', + l.bar: '↤', + l.curve: '⤶', + l.dashed: '⇠', + l.dotted: '⬸', + l.double: '⇐', + l.double.bar: '⤆', + l.double.long: '⟸', + l.double.long.bar: '⟽', + l.double.not: '⇍', + l.filled: '⬅', + l.hook: '↩', + l.long: '⟵', + l.long.bar: '⟻', + l.long.squiggly: '⬳', + l.loop: '↫', + l.not: '↚', + l.quad: '⭅', + l.squiggly: '⇜', + l.stop: '⇤', + l.stroked: '⇦', + l.tail: '↢', + l.triple: '⇚', + l.twohead.bar: '⬶', + l.twohead: '↞', + l.wave: '↜', + t: '↑', + t.bar: '↥', + t.curve: '⤴', + t.dashed: '⇡', + t.double: '⇑', + t.filled: '⬆', + t.quad: '⟰', + t.stop: '⤒', + t.stroked: '⇧', + t.triple: '⤊', + t.twohead: '↟', + b: '↓', + b.bar: '↧', + b.curve: '⤵', + b.dashed: '⇣', + b.double: '⇓', + b.filled: '⬇', + b.quad: '⟱', + b.stop: '⤓', + b.stroked: '⇩', + b.triple: '⤋', + b.twohead: '↡', + l.r: '↔', + l.r.double: '⇔', + l.r.double.long: '⟺', + l.r.double.not: '⇎', + l.r.filled: '⬌', + l.r.long: '⟷', + l.r.not: '↮', + l.r.stroked: '⬄', + l.r.wave: '↭', + t.b: '↕', + t.b.double: '⇕', + t.b.filled: '⬍', + t.b.stroked: '⇳', + tr: '↗', + tr.double: '⇗', + tr.filled: '⬈', + tr.hook: '⤤', + tr.stroked: '⬀', + br: '↘', + br.double: '⇘', + br.filled: '⬊', + br.hook: '⤥', + br.stroked: '⬂', + tl: '↖', + tl.double: '⇖', + tl.filled: '⬉', + tl.hook: '⤣', + tl.stroked: '⬁', + bl: '↙', + bl.double: '⇙', + bl.filled: '⬋', + bl.hook: '⤦', + bl.stroked: '⬃', + tl.br: '⤡', + tr.bl: '⤢', + ccw: '↺', + ccw.half: '↶', + cw: '↻', + cw.half: '↷', + zigzag: '↯', + ], + arrows: [ + rr: '⇉', + ll: '⇇', + tt: '⇈', + bb: '⇊', + lr: '⇆', + lr.stop: '↹', + rl: '⇄', + tb: '⇅', + bt: '⇵', + rrr: '⇶', + lll: '⬱', + ], + arrowhead: [ + t: '⌃', + b: '⌄', + ], + harpoon: [ + rt: '⇀', + rt.bar: '⥛', + rt.stop: '⥓', + rb: '⇁', + rb.bar: '⥟', + rb.stop: '⥗', + lt: '↼', + lt.bar: '⥚', + lt.stop: '⥒', + lb: '↽', + lb.bar: '⥞', + lb.stop: '⥖', + tl: '↿', + tl.bar: '⥠', + tl.stop: '⥘', + tr: '↾', + tr.bar: '⥜', + tr.stop: '⥔', + bl: '⇃', + bl.bar: '⥡', + bl.stop: '⥙', + br: '⇂', + br.bar: '⥝', + br.stop: '⥕', + lt.rt: '⥎', + lb.rb: '⥐', + lb.rt: '⥋', + lt.rb: '⥊', + tl.bl: '⥑', + tr.br: '⥏', + tl.br: '⥍', + tr.bl: '⥌', + ], + harpoons: [ + rtrb: '⥤', + blbr: '⥥', + bltr: '⥯', + lbrb: '⥧', + ltlb: '⥢', + ltrb: '⇋', + ltrt: '⥦', + rblb: '⥩', + rtlb: '⇌', + rtlt: '⥨', + tlbr: '⥮', + tltr: '⥣', + ], + tack: [ + r: '⊢', + r.long: '⟝', + l: '⊣', + l.long: '⟞', + l.short: '⫞', + t: '⊥', + t.big: '⟘', + t.double: '⫫', + t.short: '⫠', + b: '⊤', + b.big: '⟙', + b.double: '⫪', + b.short: '⫟', + l.r: '⟛', + ], + + // Lowercase Greek. + alpha: 'α', + beta: ['β', alt: 'ϐ'], + chi: 'χ', + delta: 'δ', + epsilon: ['ε', alt: 'ϵ'], + eta: 'η', + gamma: 'γ', + iota: 'ι', + kai: 'ϗ', + kappa: ['κ', alt: 'ϰ'], + lambda: 'λ', + mu: 'μ', + nu: 'ν', + ohm: ['Ω', inv: '℧'], + omega: 'ω', + omicron: 'ο', + phi: ['φ', alt: 'ϕ'], + pi: ['π', alt: 'ϖ'], + psi: 'ψ', + rho: ['ρ', alt: 'ϱ'], + sigma: 'σ', + tau: 'τ', + theta: ['θ', alt: 'ϑ'], + upsilon: 'υ', + xi: 'ξ', + zeta: 'ζ', + + // Uppercase Greek. + Alpha: 'Α', + Beta: 'Β', + Chi: 'Χ', + Delta: 'Δ', + Epsilon: 'Ε', + Eta: 'Η', + Gamma: 'Γ', + Iota: 'Ι', + Kai: 'Ϗ', + Kappa: 'Κ', + Lambda: 'Λ', + Mu: 'Μ', + Nu: 'Ν', + Omega: 'Ω', + Omicron: 'Ο', + Phi: 'Φ', + Pi: 'Π', + Psi: 'Ψ', + Rho: 'Ρ', + Sigma: 'Σ', + Tau: 'Τ', + Theta: 'Θ', + Upsilon: 'Υ', + Xi: 'Ξ', + Zeta: 'Ζ', + + // Hebrew. + alef: 'א', + bet: 'ב', + gimel: 'ג', + shin: 'ש', + + // Double-struck. + AA: '𝔸', + BB: '𝔹', + CC: 'ℂ', + DD: '𝔻', + EE: '𝔼', + FF: '𝔽', + GG: '𝔾', + HH: 'ℍ', + II: '𝕀', + JJ: '𝕁', + KK: '𝕂', + LL: '𝕃', + MM: '𝕄', + NN: 'ℕ', + OO: '𝕆', + PP: 'ℙ', + QQ: 'ℚ', + RR: 'ℝ', + SS: '𝕊', + TT: '𝕋', + UU: '𝕌', + VV: '𝕍', + WW: '𝕎', + XX: '𝕏', + YY: '𝕐', + ZZ: 'ℤ', + + // Miscellaneous letter-likes. + ell: 'ℓ', + planck: ['ℎ', reduce: 'ℏ'], + angstrom: 'Å', + kelvin: 'K', + Re: 'ℜ', + Im: 'ℑ', +}; diff --git a/library/src/text/emoji.rs b/library/src/text/emoji.rs deleted file mode 100644 index f38f27383..000000000 --- a/library/src/text/emoji.rs +++ /dev/null @@ -1,1355 +0,0 @@ -use typst::model::{symbols, Module, Scope}; - -/// A module with all emoji. -pub fn emoji() -> Module { - let mut scope = Scope::new(); - define(&mut scope); - Module::new("emoji").with_scope(scope) -} - -symbols! { - define, - - abacus: '🧮', - abc: '🔤', - abcd: '🔡', - ABCD: '🔠', - accordion: '🪗', - aesculapius: '⚕', - airplane: [ - '✈', - "landing": '🛬', - "small": '🛩', - "takeoff": '🛫', - ], - alembic: '⚗', - alien: ['👽', "monster": '👾'], - ambulance: '🚑', - amphora: '🏺', - anchor: '⚓', - anger: '💢', - ant: '🐜', - apple: ["green": '🍏', "red": '🍎'], - arm: ["mech": '🦾', "muscle": '💪', "selfie": '🤳'], - arrow: [ - "r.filled": '➡', - "r.hook": '↪', - "r.soon": '🔜', - "l.filled": '⬅', - "l.hook": '↩', - "l.back": '🔙', - "l.end": '🔚', - "t.filled": '⬆', - "t.curve": '⤴', - "t.top": '🔝', - "b.filled": '⬇', - "b.curve": '⤵', - "l.r": '↔', - "l.r.on": '🔛', - "t.b": '↕', - "bl": '↙', - "br": '↘', - "tl": '↖', - "tr": '↗', - ], - arrows: ["cycle": '🔄'], - ast: ['*', "box": '✳'], - atm: '🏧', - atom: '⚛', - aubergine: '🍆', - avocado: '🥑', - axe: '🪓', - baby: ['👶', "angel": '👼', "box": '🚼'], - babybottle: '🍼', - backpack: '🎒', - bacon: '🥓', - badger: '🦡', - badminton: '🏸', - bagel: '🥯', - baggageclaim: '🛄', - baguette: '🥖', - balloon: '🎈', - ballot: ["check": '☑'], - ballotbox: '🗳', - banana: '🍌', - banjo: '🪕', - bank: '🏦', - barberpole: '💈', - baseball: '⚾', - basecap: '🧢', - basket: '🧺', - basketball: ['⛹', "ball": '🏀'], - bat: '🦇', - bathtub: ['🛀', "foam": '🛁'], - battery: ['🔋', "low": '🪫'], - beach: ["palm": '🏝', "umbrella": '🏖'], - beads: '📿', - beans: '🫘', - bear: '🐻', - beaver: '🦫', - bed: ['🛏', "person": '🛌'], - bee: '🐝', - beer: ['🍺', "clink": '🍻'], - beetle: ['🪲', "lady": '🐞'], - bell: ['🔔', "ding": '🛎', "not": '🔕'], - bento: '🍱', - bicyclist: ['🚴', "mountain": '🚵'], - bike: ['🚲', "not": '🚳'], - bikini: '👙', - billiards: '🎱', - bin: '🗑', - biohazard: '☣', - bird: '🐦', - bison: '🦬', - blood: '🩸', - blouse: '👚', - blowfish: '🐡', - blueberries: '🫐', - boar: '🐗', - boat: [ - "sail": '⛵', - "row": '🚣', - "motor": '🛥', - "speed": '🚤', - "canoe": '🛶', - ], - bolt: '🔩', - bomb: '💣', - bone: '🦴', - book: [ - "red": '📕', - "blue": '📘', - "green": '📗', - "orange": '📙', - "spiral": '📒', - "open": '📖', - ], - bookmark: '🔖', - books: '📚', - boomerang: '🪃', - bordercontrol: '🛂', - bouquet: '💐', - bow: '🏹', - bowl: ["spoon": '🥣', "steam": '🍜'], - bowling: '🎳', - boxing: '🥊', - boy: '👦', - brain: '🧠', - bread: '🍞', - brick: '🧱', - bride: '👰', - bridge: ["fog": '🌁', "night": '🌉'], - briefcase: '💼', - briefs: '🩲', - brightness: ["high": '🔆', "low": '🔅'], - broccoli: '🥦', - broom: '🧹', - brush: '🖌', - bubble: [ - "speech.r": '💬', - "speech.l": '🗨', - "thought": '💭', - "anger.r": '🗯', - ], - bubbles: '🫧', - bubbletea: '🧋', - bucket: '🪣', - buffalo: ["water": '🐃'], - bug: '🐛', - builder: '👷', - burger: '🍔', - burrito: '🌯', - bus: [ - '🚌', - "front": '🚍', - "small": '🚐', - "stop": '🚏', - "trolley": '🚎', - ], - butter: '🧈', - butterfly: '🦋', - button: ['🔲', "alt": '🔳', "radio": '🔘'], - cabinet: ["file": '🗄'], - cablecar: ['🚠', "small": '🚡'], - cactus: '🌵', - cake: [ - '🎂', - "fish": '🍥', - "moon": '🥮', - "slice": '🍰', - ], - calendar: ['📅', "spiral": '🗓', "tearoff": '📆'], - camel: ['🐫', "dromedar": '🐪'], - camera: [ - '📷', - "flash": '📸', - "movie": '🎥', - "movie.box": '🎦', - "video": '📹', - ], - camping: '🏕', - can: '🥫', - candle: '🕯', - candy: '🍬', - cane: '🦯', - car: [ - '🚗', - "front": '🚘', - "pickup": '🛻', - "police": '🚓', - "police.front": '🚔', - "racing": '🏎', - "rickshaw": '🛺', - "suv": '🚙', - ], - card: ["credit": '💳', "id": '🪪'], - cardindex: '📇', - carrot: '🥕', - cart: '🛒', - cassette: '📼', - castle: ["eu": '🏰', "jp": '🏯'], - cat: [ - '🐈', - "face": '🐱', - "face.angry": '😾', - "face.cry": '😿', - "face.heart": '😻', - "face.joy": '😹', - "face.kiss": '😽', - "face.laugh": '😸', - "face.shock": '🙀', - "face.smile": '😺', - "face.smirk": '😼', - ], - chain: '🔗', - chains: '⛓', - chair: '🪑', - champagne: '🍾', - chart: [ - "bar": '📊', - "up": '📈', - "down": '📉', - "yen.up": '💹', - ], - checkmark: ["heavy": '✔', "box": '✅'], - cheese: '🧀', - cherries: '🍒', - chess: '♟', - chestnut: '🌰', - chicken: [ - '🐔', - "baby": '🐥', - "baby.egg": '🐣', - "baby.head": '🐤', - "leg": '🍗', - "male": '🐓', - ], - child: '🧒', - chipmunk: '🐿', - chocolate: '🍫', - chopsticks: '🥢', - church: ['⛪', "love": '💒'], - cigarette: ['🚬', "not": '🚭'], - circle: [ - "black": '⚫', - "blue": '🔵', - "brown": '🟤', - "green": '🟢', - "orange": '🟠', - "purple": '🟣', - "white": '⚪', - "red": '🔴', - "yellow": '🟡', - "stroked": '⭕', - ], - circus: '🎪', - city: [ - '🏙', - "dusk": '🌆', - "night": '🌃', - "sunset": '🌇', - ], - clamp: '🗜', - clapperboard: '🎬', - climbing: '🧗', - clip: '📎', - clipboard: '📋', - clips: '🖇', - clock: [ - "one": '🕐', - "one.thirty": '🕜', - "two": '🕑', - "two.thirty": '🕝', - "three": '🕒', - "three.thirty": '🕞', - "four": '🕓', - "four.thirty": '🕟', - "five": '🕔', - "five.thirty": '🕠', - "six": '🕕', - "six.thirty": '🕡', - "seven": '🕖', - "seven.thirty": '🕢', - "eight": '🕗', - "eight.thirty": '🕣', - "nine": '🕘', - "nine.thirty": '🕤', - "ten": '🕙', - "ten.thirty": '🕥', - "eleven": '🕚', - "eleven.thirty": '🕦', - "twelve": '🕛', - "twelve.thirty": '🕧', - "alarm": '⏰', - "old": '🕰', - "timer": '⏲', - ], - cloud: [ - '☁', - "dust": '💨', - "rain": '🌧', - "snow": '🌨', - "storm": '⛈', - "sun": '⛅', - "sun.hidden": '🌥', - "sun.rain": '🌦', - "thunder": '🌩', - ], - coat: ['🧥', "lab": '🥼'], - cockroach: '🪳', - cocktail: ["martini": '🍸', "tropical": '🍹'], - coconut: '🥥', - coffee: '☕', - coffin: '⚰', - coin: '🪙', - comet: '☄', - compass: '🧭', - computer: '🖥', - computermouse: '🖱', - confetti: '🎊', - construction: '🚧', - controller: '🎮', - cookie: ['🍪', "fortune": '🥠'], - cooking: '🍳', - cool: '🆒', - copyright: '©', - coral: '🪸', - corn: '🌽', - couch: '🛋', - couple: '💑', - cow: ['🐄', "face": '🐮'], - crab: '🦀', - crane: '🏗', - crayon: '🖍', - cricket: '🦗', - cricketbat: '🏏', - crocodile: '🐊', - croissant: '🥐', - crossmark: ['❌', "box": '❎'], - crown: '👑', - crutch: '🩼', - crystal: '🔮', - cucumber: '🥒', - cup: ["straw": '🥤'], - cupcake: '🧁', - curling: '🥌', - curry: '🍛', - custard: '🍮', - customs: '🛃', - cutlery: '🍴', - cyclone: '🌀', - dancing: ["man": '🕺', "woman": '💃', "women.bunny": '👯'], - darts: '🎯', - dash: ["wave.double": '〰'], - deer: '🦌', - desert: '🏜', - detective: '🕵', - diamond: [ - "blue": '🔷', - "blue.small": '🔹', - "orange": '🔶', - "orange.small": '🔸', - "dot": '💠', - ], - die: '🎲', - dino: ["pod": '🦕', "rex": '🦖'], - disc: ["cd": '💿', "dvd": '📀', "mini": '💽'], - discoball: '🪩', - diving: '🤿', - dodo: '🦤', - dog: [ - '🐕', - "face": '🐶', - "guide": '🦮', - "poodle": '🐩', - ], - dollar: '💲', - dolphin: '🐬', - donut: '🍩', - door: '🚪', - dove: ["peace": '🕊'], - dragon: ['🐉', "face": '🐲'], - dress: ['👗', "kimono": '👘', "sari": '🥻'], - drop: '💧', - drops: '💦', - drum: ['🥁', "big": '🪘'], - duck: '🦆', - dumpling: '🥟', - eagle: '🦅', - ear: ['👂', "aid": '🦻'], - egg: '🥚', - eighteen: ["not": '🔞'], - elephant: '🐘', - elevator: '🛗', - elf: '🧝', - email: '📧', - excl: [ - '❗', - "white": '❕', - "double": '‼', - "quest": '⁉', - ], - explosion: '💥', - extinguisher: '🧯', - eye: '👁', - eyes: '👀', - face: [ - "grin": '😀', - "angry": '😠', - "angry.red": '😡', - "anguish": '😧', - "astonish": '😲', - "bandage": '🤕', - "beam": '😁', - "blank": '😶', - "clown": '🤡', - "cold": '🥶', - "concern": '😦', - "cool": '😎', - "cover": '🤭', - "cowboy": '🤠', - "cry": '😭', - "devil.smile": '😈', - "devil.frown": '👿', - "diagonal": '🫤', - "disguise": '🥸', - "dizzy": '😵', - "dotted": '🫥', - "down": '😞', - "down.sweat": '😓', - "drool": '🤤', - "explode": '🤯', - "eyeroll": '🙄', - "friendly": '☺', - "fear": '😨', - "fear.sweat": '😰', - "fever": '🤒', - "flush": '😳', - "frown": '☹', - "frown.slight": '🙁', - "frust": '😣', - "goofy": '🤪', - "halo": '😇', - "happy": '😊', - "heart": '😍', - "hearts": '🥰', - "heat": '🥵', - "hug": '🤗', - "inv": '🙃', - "joy": '😂', - "kiss": '😗', - "kiss.smile": '😙', - "kiss.heart": '😘', - "kiss.blush": '😚', - "lick": '😋', - "lie": '🤥', - "mask": '😷', - "meh": '😒', - "melt": '🫠', - "money": '🤑', - "monocle": '🧐', - "nausea": '🤢', - "nerd": '🤓', - "neutral": '😐', - "open": '😃', - "party": '🥳', - "peek": '🫣', - "plead": '🥺', - "relief": '😌', - "rofl": '🤣', - "sad": '😔', - "salute": '🫡', - "shock": '😱', - "shush": '🤫', - "skeptic": '🤨', - "sleep": '😴', - "sleepy": '😪', - "smile": '😄', - "smile.slight": '🙂', - "smile.sweat": '😅', - "smile.tear": '🥲', - "smirk": '😏', - "sneeze": '🤧', - "speak.not": '🫢', - "squint": '😆', - "stars": '🤩', - "straight": '😑', - "suffer": '😖', - "surprise": '😯', - "symbols": '🤬', - "tear": '😢', - "tear.relief": '😥', - "tear.withheld": '🥹', - "teeth": '😬', - "think": '🤔', - "tired": '😫', - "tongue": '😛', - "tongue.squint": '😝', - "tongue.wink": '😜', - "triumph": '😤', - "unhappy": '😕', - "vomit": '🤮', - "weary": '😩', - "wink": '😉', - "woozy": '🥴', - "worry": '😟', - "wow": '😮', - "yawn": '🥱', - "zip": '🤐', - ], - factory: '🏭', - fairy: '🧚', - faith: [ - "christ": '✝', - "dharma": '☸', - "islam": '☪', - "judaism": '✡', - "menorah": '🕎', - "om": '🕉', - "orthodox": '☦', - "peace": '☮', - "star.dot": '🔯', - "worship": '🛐', - "yinyang": '☯', - ], - falafel: '🧆', - family: '👪', - fax: '📠', - feather: '🪶', - feeding: ["breast": '🤱'], - fencing: '🤺', - ferriswheel: '🎡', - filebox: '🗃', - filedividers: '🗂', - film: '🎞', - finger: [ - "r": '👉', - "l": '👈', - "t": '👆', - "t.alt": '☝', - "b": '👇', - "front": '🫵', - "m": '🖕', - ], - fingers: ["cross": '🤞', "pinch": '🤌', "snap": '🫰'], - fire: '🔥', - firecracker: '🧨', - fireengine: '🚒', - fireworks: '🎆', - fish: ['🐟', "tropical": '🐠'], - fishing: '🎣', - fist: [ - "front": '👊', - "r": '🤜', - "l": '🤛', - "raised": '✊', - ], - flag: [ - "black": '🏴', - "white": '🏳', - "goal": '🏁', - "golf": '⛳', - "red": '🚩', - ], - flags: ["jp.crossed": '🎌'], - flamingo: '🦩', - flashlight: '🔦', - flatbread: '🫓', - fleur: '⚜', - floppy: '💾', - flower: [ - "hibiscus": '🌺', - "lotus": '🪷', - "pink": '🌸', - "rose": '🌹', - "sun": '🌻', - "tulip": '🌷', - "white": '💮', - "wilted": '🥀', - "yellow": '🌼', - ], - fly: '🪰', - fog: '🌫', - folder: ['📁', "open": '📂'], - fondue: '🫕', - foot: '🦶', - football: ['⚽', "am": '🏈'], - forex: '💱', - fountain: '⛲', - fox: '🦊', - free: '🆓', - fries: '🍟', - frisbee: '🥏', - frog: ["face": '🐸'], - fuelpump: '⛽', - garlic: '🧄', - gear: '⚙', - gem: '💎', - genie: '🧞', - ghost: '👻', - giraffe: '🦒', - girl: '👧', - glass: [ - "clink": '🥂', - "milk": '🥛', - "pour": '🫗', - "tumbler": '🥃', - ], - glasses: ['👓', "sun": '🕶'], - globe: [ - "am": '🌎', - "as.au": '🌏', - "eu.af": '🌍', - "meridian": '🌐', - ], - gloves: '🧤', - goal: '🥅', - goat: '🐐', - goggles: '🥽', - golfing: '🏌', - gorilla: '🦍', - grapes: '🍇', - guard: ["man": '💂'], - guitar: '🎸', - gymnastics: '🤸', - haircut: '💇', - hammer: ['🔨', "pick": '⚒', "wrench": '🛠'], - hamsa: '🪬', - hamster: ["face": '🐹'], - hand: [ - "raised": '✋', - "raised.alt": '🤚', - "r": '🫱', - "l": '🫲', - "t": '🫴', - "b": '🫳', - "ok": '👌', - "call": '🤙', - "love": '🤟', - "part": '🖖', - "peace": '✌', - "pinch": '🤏', - "rock": '🤘', - "splay": '🖐', - "wave": '👋', - "write": '✍', - ], - handbag: '👜', - handball: '🤾', - handholding: ["man.man": '👬', "woman.man": '👫', "woman.woman": '👭'], - hands: [ - "folded": '🙏', - "palms": '🤲', - "clap": '👏', - "heart": '🫶', - "open": '👐', - "raised": '🙌', - "shake": '🤝', - ], - hash: '#', - hat: ["ribbon": '👒', "top": '🎩'], - headphone: '🎧', - heart: [ - '❤', - "arrow": '💘', - "beat": '💓', - "black": '🖤', - "blue": '💙', - "box": '💟', - "broken": '💔', - "brown": '🤎', - "double": '💕', - "excl": '❣', - "green": '💚', - "grow": '💗', - "orange": '🧡', - "purple": '💜', - "real": '🫀', - "revolve": '💞', - "ribbon": '💝', - "spark": '💖', - "white": '🤍', - "yellow": '💛', - ], - hedgehog: '🦔', - helicopter: '🚁', - helix: '🧬', - helmet: ["cross": '⛑', "military": '🪖'], - hippo: '🦛', - hockey: '🏑', - hole: '🕳', - honey: '🍯', - hongbao: '🧧', - hook: '🪝', - horn: ["postal": '📯'], - horse: [ - '🐎', - "carousel": '🎠', - "face": '🐴', - "race": '🏇', - ], - hospital: '🏥', - hotdog: '🌭', - hotel: ['🏨', "love": '🏩'], - hotspring: '♨', - hourglass: ['⌛', "flow": '⏳'], - house: [ - '🏠', - "derelict": '🏚', - "garden": '🏡', - "multiple": '🏘', - ], - hundred: '💯', - hut: '🛖', - ice: '🧊', - icecream: ['🍨', "shaved": '🍧', "soft": '🍦'], - icehockey: '🏒', - id: '🆔', - info: 'ℹ', - izakaya: '🏮', - jar: '🫙', - jeans: '👖', - jigsaw: '🧩', - joystick: '🕹', - juggling: '🤹', - juice: '🧃', - kaaba: '🕋', - kadomatsu: '🎍', - kangaroo: '🦘', - gachi: '🈷', - go: '🈴', - hi: '㊙', - ka: '🉑', - kachi: '🈹', - kara: '🈳', - kon: '🈲', - man: '🈵', - muryo: '🈚', - shin: '🈸', - shuku: '㊗', - toku: '🉐', - yo: '🈺', - yubi: '🈯', - yuryo: '🈶', - koko: '🈁', - sa: '🈂', - kebab: '🥙', - key: ['🔑', "old": '🗝'], - keyboard: '⌨', - kiss: '💏', - kissmark: '💋', - kite: '🪁', - kiwi: '🥝', - knife: ['🔪', "dagger": '🗡'], - knot: '🪢', - koala: '🐨', - koinobori: '🎏', - label: '🏷', - lacrosse: '🥍', - ladder: '🪜', - lamp: ["diya": '🪔'], - laptop: '💻', - a: '🅰', - ab: '🆎', - b: '🅱', - cl: '🆑', - o: '🅾', - leaf: [ - "clover.three": '☘', - "clover.four": '🍀', - "fall": '🍂', - "herb": '🌿', - "maple": '🍁', - "wind": '🍃', - ], - leftluggage: '🛅', - leg: ['🦵', "mech": '🦿'], - lemon: '🍋', - leopard: '🐆', - letter: ["love": '💌'], - liberty: '🗽', - lightbulb: '💡', - lightning: '⚡', - lion: '🦁', - lipstick: '💄', - litter: ['🚮', "not": '🚯'], - lizard: '🦎', - llama: '🦙', - lobster: '🦞', - lock: [ - '🔒', - "key": '🔐', - "open": '🔓', - "pen": '🔏', - ], - lollipop: '🍭', - lotion: '🧴', - luggage: '🧳', - lungs: '🫁', - mage: '🧙', - magnet: '🧲', - magnify: ["r": '🔎', "l": '🔍'], - mahjong: ["dragon.red": '🀄'], - mail: ['✉', "arrow": '📩'], - mailbox: [ - "closed.empty": '📪', - "closed.full": '📫', - "open.empty": '📭', - "open.full": '📬', - ], - mammoth: '🦣', - man: [ - '👨', - "box": '🚹', - "crown": '🤴', - "guapimao": '👲', - "levitate": '🕴', - "old": '👴', - "pregnant": '🫃', - "turban": '👳', - "tuxedo": '🤵', - ], - mango: '🥭', - map: ["world": '🗺', "jp": '🗾'], - martialarts: '🥋', - masks: '🎭', - mate: '🧉', - matryoshka: '🪆', - meat: ['🥩', "bone": '🍖'], - medal: [ - "first": '🥇', - "second": '🥈', - "third": '🥉', - "sports": '🏅', - "military": '🎖', - ], - megaphone: ['📢', "simple": '📣'], - melon: '🍈', - merperson: '🧜', - metro: 'Ⓜ', - microbe: '🦠', - microphone: ['🎤', "studio": '🎙'], - microscope: '🔬', - milkyway: '🌌', - mirror: '🪞', - mixer: '🎛', - money: [ - "bag": '💰', - "dollar": '💵', - "euro": '💶', - "pound": '💷', - "yen": '💴', - "wings": '💸', - ], - monkey: [ - '🐒', - "face": '🐵', - "hear.not": '🙉', - "see.not": '🙈', - "speak.not": '🙊', - ], - moon: [ - "crescent": '🌙', - "full": '🌕', - "full.face": '🌝', - "new": '🌑', - "new.face": '🌚', - "wane.one": '🌖', - "wane.two": '🌗', - "wane.three.face": '🌜', - "wane.three": '🌘', - "wax.one": '🌒', - "wax.two": '🌓', - "wax.two.face": '🌛', - "wax.three": '🌔', - ], - mortarboard: '🎓', - mosque: '🕌', - mosquito: '🦟', - motorcycle: '🏍', - motorway: '🛣', - mountain: [ - '⛰', - "fuji": '🗻', - "snow": '🏔', - "sunrise": '🌄', - ], - mouse: ['🐁', "face": '🐭'], - mousetrap: '🪤', - mouth: ['👄', "bite": '🫦'], - moyai: '🗿', - museum: '🏛', - mushroom: '🍄', - musicalscore: '🎼', - nails: ["polish": '💅'], - namebadge: '📛', - nazar: '🧿', - necktie: '👔', - needle: '🪡', - nest: ["empty": '🪹', "eggs": '🪺'], - new: '🆕', - newspaper: ['📰', "rolled": '🗞'], - ng: '🆖', - ningyo: '🎎', - ninja: '🥷', - noentry: '⛔', - nose: '👃', - notebook: ['📓', "deco": '📔'], - notepad: '🗒', - notes: ['🎵', "triple": '🎶'], - numbers: '🔢', - octopus: '🐙', - office: '🏢', - oil: '🛢', - ok: '🆗', - olive: '🫒', - oni: '👹', - onion: '🧅', - orangutan: '🦧', - otter: '🦦', - owl: '🦉', - ox: '🐂', - oyster: '🦪', - package: '📦', - paella: '🥘', - page: ['📄', "curl": '📃', "pencil": '📝'], - pager: '📟', - pages: ["tabs": '📑'], - painting: '🖼', - palette: '🎨', - pancakes: '🥞', - panda: '🐼', - parachute: '🪂', - park: '🏞', - parking: '🅿', - parrot: '🦜', - partalteration: '〽', - party: '🎉', - peach: '🍑', - peacock: '🦚', - peanuts: '🥜', - pear: '🍐', - pedestrian: ['🚶', "not": '🚷'], - pen: ["ball": '🖊', "fountain": '🖋'], - pencil: '✏', - penguin: '🐧', - pepper: ['🫑', "hot": '🌶'], - person: [ - '🧑', - "angry": '🙎', - "beard": '🧔', - "blonde": '👱', - "bow": '🙇', - "crown": '🫅', - "deaf": '🧏', - "facepalm": '🤦', - "frown": '🙍', - "hijab": '🧕', - "kneel": '🧎', - "lotus": '🧘', - "massage": '💆', - "no": '🙅', - "ok": '🙆', - "old": '🧓', - "pregnant": '🫄', - "raise": '🙋', - "sassy": '💁', - "shrug": '🤷', - "stand": '🧍', - "steam": '🧖', - ], - petri: '🧫', - phone: [ - '📱', - "arrow": '📲', - "classic": '☎', - "not": '📵', - "off": '📴', - "receiver": '📞', - "signal": '📶', - "vibrate": '📳', - ], - piano: '🎹', - pick: '⛏', - pie: '🥧', - pig: ['🐖', "face": '🐷', "node": '🐽'], - pill: '💊', - pin: ['📌', "round": '📍'], - pinata: '🪅', - pineapple: '🍍', - pingpong: '🏓', - pistol: '🔫', - pizza: '🍕', - placard: '🪧', - planet: '🪐', - plant: '🪴', - plaster: '🩹', - plate: ["cutlery": '🍽'], - playback: [ - "down": '⏬', - "eject": '⏏', - "forward": '⏩', - "pause": '⏸', - "record": '⏺', - "repeat": '🔁', - "repeat.once": '🔂', - "repeat.v": '🔃', - "restart": '⏮', - "rewind": '⏪', - "shuffle": '🔀', - "skip": '⏭', - "stop": '⏹', - "toggle": '⏯', - "up": '⏫', - ], - playingcard: ["flower": '🎴', "joker": '🃏'], - plunger: '🪠', - policeofficer: '👮', - poo: '💩', - popcorn: '🍿', - post: ["eu": '🏤', "jp": '🏣'], - postbox: '📮', - potato: ['🥔', "sweet": '🍠'], - pouch: '👝', - powerplug: '🔌', - present: '🎁', - pretzel: '🥨', - printer: '🖨', - prints: ["foot": '👣', "paw": '🐾'], - prohibited: '🚫', - projector: '📽', - pumpkin: ["lantern": '🎃'], - purse: '👛', - quest: ['❓', "white": '❔'], - rabbit: ['🐇', "face": '🐰'], - raccoon: '🦝', - radio: '📻', - radioactive: '☢', - railway: '🛤', - rainbow: '🌈', - ram: '🐏', - rat: '🐀', - razor: '🪒', - receipt: '🧾', - recycling: '♻', - reg: '®', - restroom: '🚻', - rhino: '🦏', - ribbon: ['🎀', "remind": '🎗'], - rice: [ - '🍚', - "cracker": '🍘', - "ear": '🌾', - "onigiri": '🍙', - ], - ring: '💍', - ringbuoy: '🛟', - robot: '🤖', - rock: '🪨', - rocket: '🚀', - rollercoaster: '🎢', - rosette: '🏵', - rugby: '🏉', - ruler: ['📏', "triangle": '📐'], - running: '🏃', - safetypin: '🧷', - safetyvest: '🦺', - sake: '🍶', - salad: '🥗', - salt: '🧂', - sandwich: '🥪', - santa: ["man": '🎅', "woman": '🤶'], - satdish: '📡', - satellite: '🛰', - saw: '🪚', - saxophone: '🎷', - scales: '⚖', - scarf: '🧣', - school: '🏫', - scissors: '✂', - scooter: ['🛴', "motor": '🛵'], - scorpion: '🦂', - screwdriver: '🪛', - scroll: '📜', - seal: '🦭', - seat: '💺', - seedling: '🌱', - shark: '🦈', - sheep: '🐑', - shell: ["spiral": '🐚'], - shield: '🛡', - ship: ['🚢', "cruise": '🛳', "ferry": '⛴'], - shirt: ["sports": '🎽', "t": '👕'], - shoe: [ - '👞', - "ballet": '🩰', - "flat": '🥿', - "heel": '👠', - "hike": '🥾', - "ice": '⛸', - "roller": '🛼', - "sandal.heel": '👡', - "ski": '🎿', - "sneaker": '👟', - "tall": '👢', - "thong": '🩴', - ], - shopping: '🛍', - shorts: '🩳', - shoshinsha: '🔰', - shower: '🚿', - shrimp: ['🦐', "fried": '🍤'], - shrine: '⛩', - sign: ["crossing": '🚸', "stop": '🛑'], - silhouette: [ - '👤', - "double": '👥', - "hug": '🫂', - "speak": '🗣', - ], - siren: '🚨', - skateboard: '🛹', - skewer: ["dango": '🍡', "oden": '🍢'], - skiing: '⛷', - skull: ['💀', "bones": '☠'], - skunk: '🦨', - sled: '🛷', - slide: '🛝', - slider: '🎚', - sloth: '🦥', - slots: '🎰', - snail: '🐌', - snake: '🐍', - snowboarding: '🏂', - snowflake: '❄', - snowman: ['⛄', "snow": '☃'], - soap: '🧼', - socks: '🧦', - softball: '🥎', - sos: '🆘', - soup: '🍲', - spaghetti: '🍝', - sparkle: ["box": '❇'], - sparkler: '🎇', - sparkles: '✨', - speaker: [ - '🔈', - "not": '🔇', - "wave": '🔉', - "waves": '🔊', - ], - spider: '🕷', - spiderweb: '🕸', - spinach: '🥬', - sponge: '🧽', - spoon: '🥄', - square: [ - "black": '⬛', - "black.tiny": '▪', - "black.small": '◾', - "black.medium": '◼', - "white": '⬜', - "white.tiny": '▫', - "white.small": '◽', - "white.medium": '◻', - "blue": '🟦', - "brown": '🟫', - "green": '🟩', - "orange": '🟧', - "purple": '🟪', - "red": '🟥', - "yellow": '🟨', - ], - squid: '🦑', - stadium: '🏟', - star: [ - '⭐', - "arc": '💫', - "box": '✴', - "glow": '🌟', - "shoot": '🌠', - ], - stethoscope: '🩺', - store: ["big": '🏬', "small": '🏪'], - strawberry: '🍓', - suit: [ - "club": '♣', - "diamond": '♦', - "heart": '♥', - "spade": '♠', - ], - sun: ['☀', "cloud": '🌤', "face": '🌞'], - sunrise: '🌅', - superhero: '🦸', - supervillain: '🦹', - surfing: '🏄', - sushi: '🍣', - swan: '🦢', - swimming: '🏊', - swimsuit: '🩱', - swords: '⚔', - symbols: '🔣', - synagogue: '🕍', - syringe: '💉', - taco: '🌮', - takeout: '🥡', - tamale: '🫔', - tanabata: '🎋', - tangerine: '🍊', - tap: ['🚰', "not": '🚱'], - taxi: ['🚕', "front": '🚖'], - teacup: '🍵', - teapot: '🫖', - teddy: '🧸', - telescope: '🔭', - temple: '🛕', - ten: '🔟', - tengu: '👺', - tennis: '🎾', - tent: '⛺', - testtube: '🧪', - thermometer: '🌡', - thread: '🧵', - thumb: ["up": '👍', "down": '👎'], - ticket: ["event": '🎟', "travel": '🎫'], - tiger: ['🐅', "face": '🐯'], - tm: '™', - toilet: '🚽', - toiletpaper: '🧻', - tomato: '🍅', - tombstone: '🪦', - tongue: '👅', - toolbox: '🧰', - tooth: '🦷', - toothbrush: '🪥', - tornado: '🌪', - tower: ["tokyo": '🗼'], - trackball: '🖲', - tractor: '🚜', - trafficlight: ["v": '🚦', "h": '🚥'], - train: [ - '🚆', - "car": '🚃', - "light": '🚈', - "metro": '🚇', - "mono": '🚝', - "mountain": '🚞', - "speed": '🚄', - "speed.bullet": '🚅', - "steam": '🚂', - "stop": '🚉', - "suspend": '🚟', - "tram": '🚊', - "tram.car": '🚋', - ], - transgender: '⚧', - tray: ["inbox": '📥', "mail": '📨', "outbox": '📤'], - tree: [ - "deciduous": '🌳', - "evergreen": '🌲', - "palm": '🌴', - "xmas": '🎄', - ], - triangle: [ - "r": '▶', - "l": '◀', - "t": '🔼', - "b": '🔽', - "t.red": '🔺', - "b.red": '🔻', - ], - trident: '🔱', - troll: '🧌', - trophy: '🏆', - truck: ['🚚', "trailer": '🚛'], - trumpet: '🎺', - tsukimi: '🎑', - turkey: '🦃', - turtle: '🐢', - tv: '📺', - ufo: '🛸', - umbrella: [ - "open": '☂', - "closed": '🌂', - "rain": '☔', - "sun": '⛱', - ], - unicorn: '🦄', - unknown: '🦳', - up: '🆙', - urn: '⚱', - vampire: '🧛', - violin: '🎻', - volcano: '🌋', - volleyball: '🏐', - vs: '🆚', - waffle: '🧇', - wand: '🪄', - warning: '⚠', - watch: ['⌚', "stop": '⏱'], - watermelon: '🍉', - waterpolo: '🤽', - wave: '🌊', - wc: '🚾', - weightlifting: '🏋', - whale: ['🐋', "spout": '🐳'], - wheel: '🛞', - wheelchair: ['🦽', "box": '♿', "motor": '🦼'], - wind: '🌬', - windchime: '🎐', - window: '🪟', - wine: '🍷', - wolf: '🐺', - woman: [ - '👩', - "box": '🚺', - "crown": '👸', - "old": '👵', - "pregnant": '🤰', - ], - wood: '🪵', - worm: '🪱', - wrench: '🔧', - wrestling: '🤼', - xray: '🩻', - yarn: '🧶', - yoyo: '🪀', - zebra: '🦓', - zodiac: [ - "aquarius": '♒', - "aries": '♈', - "cancer": '♋', - "capri": '♑', - "gemini": '♊', - "leo": '♌', - "libra": '♎', - "ophi": '⛎', - "pisces": '♓', - "sagit": '♐', - "scorpio": '♏', - "taurus": '♉', - "virgo": '♍', - ], - zombie: '🧟', - zzz: '💤', -} diff --git a/library/src/text/mod.rs b/library/src/text/mod.rs index 85e58ecd4..675876554 100644 --- a/library/src/text/mod.rs +++ b/library/src/text/mod.rs @@ -1,22 +1,18 @@ //! Text handling. mod deco; -mod emoji; mod misc; mod quotes; mod raw; mod shaping; mod shift; -mod symbols; pub use self::deco::*; -pub use self::emoji::*; pub use self::misc::*; pub use self::quotes::*; pub use self::raw::*; pub use self::shaping::*; pub use self::shift::*; -pub use self::symbols::*; use std::borrow::Cow; diff --git a/library/src/text/symbols.rs b/library/src/text/symbols.rs deleted file mode 100644 index 17ab6f4fc..000000000 --- a/library/src/text/symbols.rs +++ /dev/null @@ -1,458 +0,0 @@ -use typst::model::{symbols, Module, Scope}; - -/// A module with all symbols. -pub fn sym() -> Module { - let mut scope = Scope::new(); - define(&mut scope); - Module::new("sym").with_scope(scope) -} - -symbols! { - define, - - // Space and control. - space: [ - ' ', - "em": '\u{2003}', - "en": '\u{2002}', - "fig": '\u{2007}', - "hair": '\u{200A}', - "ideo": '\u{3000}', - "nobreak": '\u{A0}', - "punct": '\u{2008}', - "quarter": '\u{2005}', - "sixth": '\u{2006}', - "thin": '\u{2009}', - "third": '\u{2004}', - ], - wj: '\u{2060}', - zwj: '\u{200D}', - zwnj: '\u{200C}', - zws: '\u{200B}', - - // Punctuation. - dot: ['.', "c": '·'], - dots: [ - "h": '…', - "h.c": '⋯', - "v": '⋮', - "down": '⋱', - "up": '⋰', - ], - colon: [ - ':', - "eq": '≔', - "double.eq": '⩴', - ], - comma: ',', - semi: [';', "rev": '⁏'], - quest: ['?', "double": '⁇', "excl": '⁈', "inv": '¿'], - excl: ['!', "double": '‼', "inv": '¡', "quest": '⁉'], - interrobang: '‽', - hash: '#', - at: '@', - section: '§', - percent: '%', - permille: '‰', - co: '℅', - pilcrow: ['¶', "rev": '⁋'], - dagger: ['†', "double": '‡'], - slash: ['/', "double": '⫽', "triple": '⫻'], - backslash: ['\\', "circle": '⦸', "not": '⧷'], - ast: ['*', "low": '⁎', "double": '⁑', "triple": '⁂'], - amp: ['&', "inv": '⅋'], - dash: [ - "en": '–', - "em": '—', - "fig": '‒', - "wave": '〜', - "colon": '∹', - "circle": '⊝', - "wave.double": '〰', - ], - hyph: [ - '‐', - "minus": '\u{2D}', - "nobreak": '\u{2011}', - "point": '‧', - "soft": '\u{ad}', - ], - prime: [ - '′', - "rev": '‵', - "double": '″', - "double.rev": '‶', - "triple": '‴', - "triple.rev": '‷', - "quad": '⁗', - ], - quote: [ - "double": '"', - "single": '\'', - "l.double": '“', - "l.single": '‘', - "r.double": '”', - "r.single": '’', - "angle.l.double": '«', - "angle.l.single": '‹', - "angle.r.double": '»', - "angle.r.single": '›', - "high.double": '‟', - "high.single": '‛', - "low.double": '„', - "low.single": '‚', - ], - - // Delimiters. - paren: [ - "l": '(', - "r": ')', - "t": '⏜', - "b": '⏝', - ], - bracket: [ - "l": '[', - "r": ']', - "t": '⎴', - "b": '⎵', - ], - brace: [ - "l": '{', - "r": '}', - "t": '⏞', - "b": '⏟', - ], - turtle: [ - "l": '〔', - "r": '〕', - "t": '⏠', - "b": '⏡', - ], - angled: ["l": '〈', "r": '〉'], - bar: [ - "v": '|', - "v.double": '‖', - "v.triple": '⦀', - "v.broken": '¦', - "v.circle": '⦶', - "h": '―', - ], - fence: [ - "l": '⧘', - "l.double": '⧚', - "r": '⧙', - "r.double": '⧛', - "dotted": '⦙', - ], - - // Accents. - acute: ['´', "double": '˝'], - breve: '˘', - caret: '‸', - caron: 'ˇ', - hat: '^', - diaer: '¨', - grave: '`', - macron: '¯', - tilde: '~', - - // Currency. - bitcoin: '₿', - dollar: '$', - euro: '€', - franc: '₣', - lira: '₺', - peso: '₱', - pound: '£', - ruble: '₽', - rupee: '₹', - won: '₩', - yen: '¥', - - // Miscellaneous. - ballot: ['☐', "x": '☒'], - checkmark: ['✓', "light": '🗸'], - copyright: ['©', "sound": '℗'], - floral: ['❦', "l": '☙', "r": '❧'], - notes: ["up": '🎜', "down": '🎝'], - refmark: '※', - servicemark: '℠', - maltese: '✠', - suit: [ - "club": '♣', - "diamond": '♦', - "heart": '♥', - "spade": '♠', - ], - - // Shapes. - circle: [ - "stroked": '○', - "stroked.tiny": '∘', - "stroked.small": '⚬', - "stroked.big": '◯', - "filled": '●', - "filled.tiny": '⦁', - "filled.small": '∙', - "filled.big": '⬤', - "dotted": '◌', - "nested": '⊚', - ], - square: [ - "stroked": '□', - "stroked.tiny": '▫', - "stroked.small": '◽', - "stroked.medium": '◻', - "stroked.big": '⬜', - "stroked.dotted": '⬚', - "stroked.rounded": '▢', - "filled": '■', - "filled.tiny": '▪', - "filled.small": '◾', - "filled.medium": '◼', - "filled.big": '⬛', - ], - ellipse: [ - "stroked.h": '⬭', - "stroked.v": '⬯', - "filled.h": '⬬', - "filled.v": '⬮', - ], - rect: [ - "stroked.h": '▭', - "stroked.v": '▯', - "filled.h": '▬', - "filled.v": '▮', - ], - triangle: [ - "stroked.r": '▷', - "stroked.l": '◁', - "stroked.t": '△', - "stroked.b": '▽', - "stroked.bl": '◺', - "stroked.br": '◿', - "stroked.tl": '◸', - "stroked.tr": '◹', - "stroked.small.r": '▹', - "stroked.small.b": '▿', - "stroked.small.l": '◃', - "stroked.small.t": '▵', - "stroked.rounded": '🛆', - "stroked.nested": '⟁', - "stroked.dot": '◬', - "filled.r": '▶', - "filled.l": '◀', - "filled.t": '▲', - "filled.b": '▼', - "filled.bl": '◣', - "filled.br": '◢', - "filled.tl": '◤', - "filled.tr": '◥', - "filled.small.r": '▸', - "filled.small.b": '▾', - "filled.small.l": '◂', - "filled.small.t": '▴', - ], - diamond: [ - "stroked": '◇', - "stroked.small": '⋄', - "stroked.medium": '⬦', - "stroked.dot": '⟐', - "filled": '◆', - "filled.medium": '⬥', - "filled.small": '⬩', - ], - lozenge: [ - "stroked": '◊', - "stroked.small": '⬫', - "stroked.medium": '⬨', - "filled": '⧫', - "filled.small": '⬪', - "filled.medium": '⬧', - ], - penta: ["stroked": '⬠', "filled": '⬟'], - hexa: ["stroked": '⬡', "filled": '⬢'], - - // Arrows and harpoons. - arrow: [ - "r": '→', - "r.long.bar": '⟼', - "r.bar": '↦', - "r.curve": '⤷', - "r.dashed": '⇢', - "r.dotted": '⤑', - "r.double": '⇒', - "r.double.bar": '⤇', - "r.double.long": '⟹', - "r.double.long.bar": '⟾', - "r.double.not": '⇏', - "r.filled": '➡', - "r.hook": '↪', - "r.long": '⟶', - "r.long.squiggly": '⟿', - "r.loop": '↬', - "r.not": '↛', - "r.quad": '⭆', - "r.squiggly": '⇝', - "r.stop": '⇥', - "r.stroked": '⇨', - "r.tail": '↣', - "r.triple": '⇛', - "r.twohead.bar": '⤅', - "r.twohead": '↠', - "r.wave": '↝', - "l": '←', - "l.bar": '↤', - "l.curve": '⤶', - "l.dashed": '⇠', - "l.dotted": '⬸', - "l.double": '⇐', - "l.double.bar": '⤆', - "l.double.long": '⟸', - "l.double.long.bar": '⟽', - "l.double.not": '⇍', - "l.filled": '⬅', - "l.hook": '↩', - "l.long": '⟵', - "l.long.bar": '⟻', - "l.long.squiggly": '⬳', - "l.loop": '↫', - "l.not": '↚', - "l.quad": '⭅', - "l.squiggly": '⇜', - "l.stop": '⇤', - "l.stroked": '⇦', - "l.tail": '↢', - "l.triple": '⇚', - "l.twohead.bar": '⬶', - "l.twohead": '↞', - "l.wave": '↜', - "t": '↑', - "t.bar": '↥', - "t.curve": '⤴', - "t.dashed": '⇡', - "t.double": '⇑', - "t.filled": '⬆', - "t.quad": '⟰', - "t.stop": '⤒', - "t.stroked": '⇧', - "t.triple": '⤊', - "t.twohead": '↟', - "b": '↓', - "b.bar": '↧', - "b.curve": '⤵', - "b.dashed": '⇣', - "b.double": '⇓', - "b.filled": '⬇', - "b.quad": '⟱', - "b.stop": '⤓', - "b.stroked": '⇩', - "b.triple": '⤋', - "b.twohead": '↡', - "l.r": '↔', - "l.r.double": '⇔', - "l.r.double.long": '⟺', - "l.r.double.not": '⇎', - "l.r.filled": '⬌', - "l.r.long": '⟷', - "l.r.not": '↮', - "l.r.stroked": '⬄', - "l.r.wave": '↭', - "t.b": '↕', - "t.b.double": '⇕', - "t.b.filled": '⬍', - "t.b.stroked": '⇳', - "tr": '↗', - "tr.double": '⇗', - "tr.filled": '⬈', - "tr.hook": '⤤', - "tr.stroked": '⬀', - "br": '↘', - "br.double": '⇘', - "br.filled": '⬊', - "br.hook": '⤥', - "br.stroked": '⬂', - "tl": '↖', - "tl.double": '⇖', - "tl.filled": '⬉', - "tl.hook": '⤣', - "tl.stroked": '⬁', - "bl": '↙', - "bl.double": '⇙', - "bl.filled": '⬋', - "bl.hook": '⤦', - "bl.stroked": '⬃', - "tl.br": '⤡', - "tr.bl": '⤢', - "ccw": '↺', - "ccw.half": '↶', - "cw": '↻', - "cw.half": '↷', - "zigzag": '↯', - ], - arrows: [ - "rr": '⇉', - "ll": '⇇', - "tt": '⇈', - "bb": '⇊', - "lr": '⇆', - "lr.stop": '↹', - "rl": '⇄', - "tb": '⇅', - "bt": '⇵', - "rrr": '⇶', - "lll": '⬱', - ], - arrowhead: [ - "t": '⌃', - "b": '⌄', - ], - harpoon: [ - "rt": '⇀', - "rt.bar": '⥛', - "rt.stop": '⥓', - "rb": '⇁', - "rb.bar": '⥟', - "rb.stop": '⥗', - "lt": '↼', - "lt.bar": '⥚', - "lt.stop": '⥒', - "lb": '↽', - "lb.bar": '⥞', - "lb.stop": '⥖', - "tl": '↿', - "tl.bar": '⥠', - "tl.stop": '⥘', - "tr": '↾', - "tr.bar": '⥜', - "tr.stop": '⥔', - "bl": '⇃', - "bl.bar": '⥡', - "bl.stop": '⥙', - "br": '⇂', - "br.bar": '⥝', - "br.stop": '⥕', - "lt.rt": '⥎', - "lb.rb": '⥐', - "lb.rt": '⥋', - "lt.rb": '⥊', - "tl.bl": '⥑', - "tr.br": '⥏', - "tl.br": '⥍', - "tr.bl": '⥌', - ], - harpoons: [ - "rtrb": '⥤', - "blbr": '⥥', - "bltr": '⥯', - "lbrb": '⥧', - "ltlb": '⥢', - "ltrb": '⇋', - "ltrt": '⥦', - "rblb": '⥩', - "rtlb": '⇌', - "rtlt": '⥨', - "tlbr": '⥮', - "tltr": '⥣', - ], -} diff --git a/macros/src/lib.rs b/macros/src/lib.rs index 064e45b2a..e162745a0 100644 --- a/macros/src/lib.rs +++ b/macros/src/lib.rs @@ -22,6 +22,7 @@ mod capable; mod castable; mod func; mod node; +mod symbols; use proc_macro::TokenStream as BoundaryStream; use proc_macro2::{TokenStream, TokenTree}; @@ -68,6 +69,14 @@ pub fn castable(stream: BoundaryStream) -> BoundaryStream { .into() } +/// Define a list of symbols. +#[proc_macro] +pub fn symbols(stream: BoundaryStream) -> BoundaryStream { + symbols::symbols(stream.into()) + .unwrap_or_else(|err| err.to_compile_error()) + .into() +} + /// Extract documentation comments from an attribute list. fn documentation(attrs: &[syn::Attribute]) -> String { let mut doc = String::new(); diff --git a/macros/src/symbols.rs b/macros/src/symbols.rs new file mode 100644 index 000000000..fb120883c --- /dev/null +++ b/macros/src/symbols.rs @@ -0,0 +1,104 @@ +use syn::ext::IdentExt; +use syn::parse::{Parse, ParseStream}; +use syn::punctuated::Punctuated; +use syn::Token; + +use super::*; + +/// Expand the `symbols!` macro. +pub fn symbols(stream: TokenStream) -> Result { + let list: List = syn::parse2(stream)?; + let pairs = list.0.iter().map(Symbol::expand); + Ok(quote! { &[#(#pairs),*] }) +} + +struct List(Punctuated); + +impl Parse for List { + fn parse(input: ParseStream) -> Result { + Punctuated::parse_terminated(input).map(Self) + } +} + +struct Symbol { + name: syn::Ident, + kind: Kind, +} + +impl Parse for Symbol { + fn parse(input: ParseStream) -> Result { + let name = input.call(Ident::parse_any)?; + input.parse::()?; + let kind = input.parse()?; + Ok(Self { name, kind }) + } +} + +impl Symbol { + fn expand(&self) -> TokenStream { + let name = self.name.to_string(); + let kind = self.kind.expand(); + quote! { (#name, #kind) } + } +} + +enum Kind { + Single(syn::LitChar), + Multiple(Punctuated), +} + +impl Parse for Kind { + fn parse(input: ParseStream) -> Result { + if input.peek(syn::LitChar) { + Ok(Self::Single(input.parse()?)) + } else { + let content; + syn::bracketed!(content in input); + Ok(Self::Multiple(Punctuated::parse_terminated(&content)?)) + } + } +} + +impl Kind { + fn expand(&self) -> TokenStream { + match self { + Self::Single(c) => quote! { typst::model::Symbol::new(#c), }, + Self::Multiple(variants) => { + let variants = variants.iter().map(Variant::expand); + quote! { + typst::model::Symbol::list(&[#(#variants),*]) + } + } + } + } +} + +struct Variant { + name: String, + c: syn::LitChar, +} + +impl Parse for Variant { + fn parse(input: ParseStream) -> Result { + let mut name = String::new(); + if input.peek(syn::Ident::peek_any) { + name.push_str(&input.call(Ident::parse_any)?.to_string()); + while input.peek(Token![.]) { + input.parse::()?; + name.push('.'); + name.push_str(&input.call(Ident::parse_any)?.to_string()); + } + input.parse::()?; + } + let c = input.parse()?; + Ok(Self { name, c }) + } +} + +impl Variant { + fn expand(&self) -> TokenStream { + let name = &self.name; + let c = &self.c; + quote! { (#name, #c) } + } +} diff --git a/src/model/scope.rs b/src/model/scope.rs index 2e3b82445..18c75535c 100644 --- a/src/model/scope.rs +++ b/src/model/scope.rs @@ -109,15 +109,6 @@ impl Scope { self.0.insert(var.into(), Slot::new(value.into(), Kind::Captured)); } - /// Copy definitions from another scope that aren't yet defined in this one. - pub fn copy_from(&mut self, other: &Self) { - for (name, value) in other.iter() { - self.0 - .entry(name.clone()) - .or_insert_with(|| Slot::new(value.clone(), Kind::Normal)); - } - } - /// Try to access a variable immutably. pub fn get(&self, var: &str) -> Option<&Value> { self.0.get(var).map(Slot::read) diff --git a/src/model/symbol.rs b/src/model/symbol.rs index 435048acf..9d226801b 100644 --- a/src/model/symbol.rs +++ b/src/model/symbol.rs @@ -7,26 +7,8 @@ use crate::diag::StrResult; use crate::util::EcoString; /// Define a list of symbols. -#[macro_export] -#[doc(hidden)] -macro_rules! __symbols { - ($func:ident, $($name:ident: $value:tt),* $(,)?) => { - pub(super) fn $func(scope: &mut $crate::model::Scope) { - $(scope.define(stringify!($name), $crate::model::symbols!(@one $value));)* - } - }; - (@one $c:literal) => { $crate::model::Symbol::new($c) }; - (@one [$($first:literal $(: $second:literal)?),* $(,)?]) => { - $crate::model::Symbol::list(&[ - $($crate::model::symbols!(@pair $first $(: $second)?)),* - ]) - }; - (@pair $first:literal) => { ("", $first) }; - (@pair $first:literal: $second:literal) => { ($first, $second) }; -} - #[doc(inline)] -pub use crate::__symbols as symbols; +pub use typst_macros::symbols; /// A symbol. #[derive(Clone, Eq, PartialEq, Hash)] @@ -45,13 +27,13 @@ enum Repr { impl Symbol { /// Create a new symbol from a single character. - pub fn new(c: char) -> Self { + pub const fn new(c: char) -> Self { Self { repr: Repr::Single(c), modifiers: EcoString::new() } } /// Create a symbol with a static variant list. #[track_caller] - pub fn list(list: &'static [(&'static str, char)]) -> Self { + pub const fn list(list: &'static [(&'static str, char)]) -> Self { debug_assert!(!list.is_empty()); Self { repr: Repr::Static(list), diff --git a/tests/typ/math/cases.typ b/tests/typ/math/cases.typ index d591ae50e..83a5ab66f 100644 --- a/tests/typ/math/cases.typ +++ b/tests/typ/math/cases.typ @@ -2,7 +2,7 @@ --- $ f(x, y) := cases( - 1 quad &"if" (x dot y)/2 <= 0, + 1 quad &"if" (x dot.op y)/2 <= 0, 2 &"if" x divides 2, 3 &"if" x in NN, 4 &"else", diff --git a/tests/typ/math/matrix.typ b/tests/typ/math/matrix.typ index 63294e039..e10b77d7e 100644 --- a/tests/typ/math/matrix.typ +++ b/tests/typ/math/matrix.typ @@ -3,12 +3,12 @@ --- // Test semicolon syntax. #set align(center) -$mat() dot - mat(;) dot - mat(1, 2) dot +$mat() dot.op + mat(;) dot.op + mat(1, 2) dot.op mat(1, 2;) \ - mat(1; 2) dot - mat(1, 2; 3, 4) dot + mat(1; 2) dot.op + mat(1, 2; 3, 4) dot.op mat(1 + &2, 1/2; &3, 4)$ --- diff --git a/tests/typ/math/multiline.typ b/tests/typ/math/multiline.typ index b57d91666..1d268faee 100644 --- a/tests/typ/math/multiline.typ +++ b/tests/typ/math/multiline.typ @@ -4,13 +4,13 @@ // Test basic alignment. $ x &= x + y \ &= x + 2z \ - &= sum x dot 2z $ + &= sum x dot.op 2z $ --- // Test text before first alignment point. $ x + 1 &= a^2 + b^2 \ y &= a + b^2 \ - z &= alpha dot beta $ + z &= alpha dot.op beta $ --- // Test space between inner alignment points. diff --git a/tests/typ/math/spacing.typ b/tests/typ/math/spacing.typ index 6f2d6b443..c1050d680 100644 --- a/tests/typ/math/spacing.typ +++ b/tests/typ/math/spacing.typ @@ -10,7 +10,7 @@ $-a, +a$ \ $a not b$ \ $a+b, a*b$ \ $sum x, sum(x)$ \ -$sum prod x$ \ +$sum product x$ \ $f(x), zeta(x), "frac"(x)$ ---