# ---------------------------- # INTEL ONE MONO OPENTYPE CODE - v1.4 # ---------------------------- # ---------------- # Language Systems # ---------------- languagesystem DFLT dflt; languagesystem latn dflt; languagesystem latn TRK; languagesystem latn AZE; languagesystem latn CRT; languagesystem latn CAT; # ------- # Classes # ------- # Base Letters @ltrUC = [A B C D E F G H I J K L M N O P Q R S T U V W X Y Z uni1E9E AE OE Schwa Eng Thorn Eth Dcroat Hbar Tbar Lslash Oslash Aring Ohorn Uhorn I]; @ltrLC = [a b c d e f g h i j k l m n o p q r s t u v w x y z germandbls ae oe schwa eng thorn eth dcroat hbar tbar lslash oslash aring ohorn uhorn dotlessi]; # Figures @fig = [zero one two three four five six seven eight nine]; @figSup = [zero.sup one.sup two.sup three.sup four.sup five.sup six.sup seven.sup eight.sup nine.sup]; @figInf = [zero.inf one.inf two.inf three.inf four.inf five.inf six.inf seven.inf eight.inf nine.inf]; @figNum = [zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num]; @figDen = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den]; # Marks Above @lcMarks = [acutecmb gravecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; @ucMarks = [acutecmb.cap gravecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; # Marks Below @belowMarks = [circumflexbelowcmb macronbelowcmb cedillacmb ogonekcmb]; # --------------- # Localized Forms # --------------- feature locl { script latn; language TRK; lookup iTurkish { sub i by idotaccent; } iTurkish; language AZE; lookup iTurkish; language CRT; lookup iTurkish; language CAT; sub l periodcentered' l by middotcat; sub L periodcentered' L by middotcat.cap; # try fusing them sub L middotcat.cap by L.dot; sub L middotcat by L.dot; sub l middotcat by l.dot; } locl; # --------------------------------- # Glyph Composition / Decomposition # --------------------------------- feature ccmp { # Decompose unicode lowercase characters whose uppercase counterparts have no unicode lookup Decomp { sub hlinebelow by h macronlowmod; sub jcaron by j caron; } Decomp; # Replace double above accents by combined drawings lookup DblMarks { sub dieresiscmb acutecmb by dieresisacute; sub dieresiscmb gravecmb by dieresisgrave; sub dieresiscmb caroncmb by dieresiscaron; sub dieresiscmb macroncmb by dieresismacron; sub brevecmb acutecmb by breveacute; sub brevecmb gravecmb by brevegrave; sub brevecmb hookcmb by brevehook; sub brevecmb tildecmb by brevetilde; sub circumflexcmb acutecmb by circumflexacute; sub circumflexcmb gravecmb by circumflexgrave; sub circumflexcmb hookcmb by circumflexhook; sub circumflexcmb tildecmb by circumflextilde; # capital forms sub dieresiscmb.cap acutecmb.cap by dieresisacute.cap; sub dieresiscmb.cap gravecmb.cap by dieresisgrave.cap; sub dieresiscmb.cap caroncmb.cap by dieresiscaron.cap; sub dieresiscmb.cap macroncmb.cap by dieresismacron.cap; sub brevecmb.cap acutecmb.cap by breveacute.cap; sub brevecmb.cap gravecmb.cap by brevegrave.cap; sub brevecmb.cap hookcmb.cap by brevehook.cap; sub brevecmb.cap tildecmb.cap by brevetilde.cap; sub circumflexcmb.cap acutecmb.cap by circumflexacute.cap; sub circumflexcmb.cap gravecmb.cap by circumflexgrave.cap; sub circumflexcmb.cap hookcmb.cap by circumflexhook.cap; sub circumflexcmb.cap tildecmb.cap by circumflextilde.cap; } DblMarks; # Replace combining marks that follow a uppercase letter by their uppercase form lookup CapitalMarks { sub [@ltrUC] [@lcMarks @belowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; sub [@ltrUC] [@lcMarks]' by [@ucMarks]; } CapitalMarks; # Replace letters with dotless counterparts when followed by a combining mark lookup Dotless { sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks] by [dotlessi dotlessj]; sub [i j]' [@lcMarks] by [dotlessi dotlessj]; } Dotless; # Replace e ogonek with eogonek lookup eogonek { sub e ogonekcmb by eogonek; } eogonek; } ccmp; # ---------- # Numerators # ---------- feature numr { sub @fig by @figNum; } numr; # ------------ # Denominators # ------------ feature dnom { sub @fig by @figDen; } dnom; # ----------- # Superscript # ----------- feature sups { sub @fig by @figSup; } sups; # --------------------- # Subscript & Inferiors # --------------------- feature subs { sub @fig by @figInf; } subs; feature sinf { sub @fig by @figInf; } sinf; # --------------------- # Contextual Alternates # --------------------- feature calt { # shifts colon to align with math symbols when used together sub colon' [plus equal greater less hyphen] by colon.fig; sub [plus equal less greater hyphen] colon' by colon.fig; sub colon' [colon colon.fig] by colon.fig; sub colon.fig colon' by colon.fig; } calt; # -------------- # Stylistic Sets # -------------- feature ss01 { featureNames { name "Programming ligatures"; # Windows English name 1 0 0 "Programming ligatures"; # Mac English }; # Classes @hyphens = [hyphen hyphen.start hyphen.middle hyphen.end]; @hyphenContextRaw = [hyphen bar less greater]; @startHyphenContext = [hyphen hyphen.start less_hyphen.start greater_hyphen.start bar_hyphen.start less_less_hyphen.start greater_greater_hyphen.start bar_bar_hyphen.start]; @middleHyphenContext1 = [hyphen hyphen.middle hyphen_bar_hyphen.middle hyphen_greater_hyphen.middle hyphen_less_hyphen.middle]; @middleHyphenContext2 = [hyphen_greater_greater_hyphen.m hyphen_less_less_hyphen.middle hyphen_bar_bar_hyphen.middle]; @endHyphenContext1 = [hyphen hyphen.end]; @endHyphenContext2 = [hyphen_less.end hyphen_greater.end hyphen_bar.end]; @endHyphenContext3 = [hyphen_less_less.end hyphen_greater_greater.end hyphen_bar_bar.end]; @hyphenLeft = [@startHyphenContext @middleHyphenContext1 @middleHyphenContext2]; @hyphenRight = [@middleHyphenContext1 @middleHyphenContext2 @endHyphenContext1 @endHyphenContext2 @endHyphenContext3]; # for overlapping ligatures in special cases @hyphenLeftExtra = [less_hyphen.liga greater_hyphen.liga bar_hyphen.liga less_less_hyphen.liga greater_greater_hyphen.liga bar_bar_hyphen.liga]; @hyphenRightExtra = [hyphen_less.liga hyphen_greater.liga hyphen_bar.liga hyphen_less_less.liga hyphen_greater_greater.liga hyphen_bar_bar.liga]; @colons = [colon colon.fig]; @equals = [equal equal.start equal.middle equal.end]; @equalContextRawStart = [equal bar slash]; # less and greater only 'depending' @equalContextRawEnd = [equal bar slash less]; @equalLeft = [equal equal.start equal.middle equal.end equal_equal.liga equal_equal_equal.liga less_equal.start greater_equal.start bar_equal.start slash_equal.start slash_slash_equal.start less_less_equal.start greater_greater_equal.start bar_bar_equal.start equal_bar_equal.middle equal_slash_slash_equal.middle equal_slash_equal.middle equal_bar_bar_equal.middle equal_greater_equal.middle equal_less_equal.middle equal_greater_greater_equal.m equal_less_less_equal.middle equal_colon_equal.middle equal_exclam_equal.middle]; @equalRight = [equal equal.start equal.middle equal.end equal_equal.liga equal_equal_equal.liga equal_bar_equal.middle equal_slash_slash_equal.middle equal_slash_equal.middle equal_bar_bar_equal.middle equal_greater_equal.middle equal_less_equal.middle equal_greater_greater_equal.m equal_less_less_equal.middle equal_colon_equal.middle equal_exclam_equal.middle equal_less.end equal_greater.end equal_bar.end equal_slash.end equal_less_less.end equal_greater_greater.end equal_bar_bar.end equal_slash_slash.end]; @equalLeftExtra = [less_equal.liga greater_equal.liga bar_equal.liga slash_equal.liga less_less_equal.liga greater_greater_equal.liga bar_bar_equal.liga slash_slash_equal.liga ]; @equalRightExtra = [equal_less.liga equal_greater.liga equal_bar.liga equal_slash.liga equal_less_less.liga equal_greater_greater.liga equal_bar_bar.liga equal_slash_slash.liga]; @numbersigns = [numbersign numbersign.start numbersign.middle numbersign.end]; @underscores = [underscore underscore.start underscore.middle underscore.end]; ### Hyphen-arrow things # double-triple equals lookup equal_equal_equal { sub ligspacer ligspacer equal' by equal_equal_equal.liga; ignore sub equal equal' equal equal; ignore sub equal' equal equal equal; ignore sub @equalContextRawStart equal' equal equal; ignore sub equal' equal equal @equalContextRawEnd; ignore sub [less greater] equal' equal equal; ignore sub equal' equal equal [less greater]; ignore sub equal' equal equal colon; ignore sub equal' equal equal exclam; ignore sub colon equal' equal equal; ignore sub exclam equal' equal equal; sub equal' equal equal by ligspacer; sub ligspacer equal' equal by ligspacer; } equal_equal_equal; lookup equal_equal { sub ligspacer equal' by equal_equal.liga; ignore sub @equalContextRawStart equal' equal; ignore sub equal' equal @equalContextRawEnd; ignore sub [less greater exclam colon] equal' equal; ignore sub equal' equal [less greater exclam colon]; ignore sub less less equal' equal; ignore sub equal equal' equal; ignore sub equal' equal equal; sub equal' equal by ligspacer; } equal_equal; # double-triple hyphens, with gaps lookup hyphen_hyphen_hyphen { sub ligspacer ligspacer hyphen' by hyphen_hyphen_hyphen.liga; ignore sub hyphen' hyphen hyphen hyphen; ignore sub hyphen hyphen' hyphen hyphen; ignore sub hyphen' hyphen hyphen greater; ignore sub hyphen' hyphen hyphen less; ignore sub hyphen' hyphen hyphen bar; ignore sub less hyphen' hyphen hyphen; ignore sub @hyphenContextRaw hyphen' hyphen hyphen; ignore sub hyphen' hyphen hyphen @hyphenContextRaw; sub hyphen' hyphen hyphen by ligspacer; sub ligspacer hyphen' hyphen by ligspacer; } hyphen_hyphen_hyphen; lookup hyphen_hyphen { sub ligspacer hyphen' by hyphen_hyphen.liga; ignore sub hyphen' hyphen hyphen; ignore sub hyphen hyphen' hyphen; ignore sub hyphen' hyphen greater; ignore sub hyphen' hyphen less; ignore sub hyphen' hyphen bar; ignore sub less hyphen' hyphen; ignore sub less exclam hyphen' hyphen; ignore sub greater hyphen' hyphen; ignore sub bar hyphen' hyphen; sub hyphen' hyphen by ligspacer; } hyphen_hyphen; ### Arbitrarily concatenating parts # Dynamic numbersign pieces lookup contextualHash { sub @numbersigns @numbersigns' @numbersigns by numbersign.middle; sub @numbersigns' @numbersigns by numbersign.start; sub @numbersigns @numbersigns' by numbersign.end; } contextualHash; # Dynamic underscore pieces lookup underscore_bar_underscore { # -|- sub @underscores bar' @underscores by underscore_bar_underscore.m; } underscore_bar_underscore; lookup contextualUnderscore { @underscoreContext = [@underscores underscore_bar_underscore.m]; sub @underscoreContext @underscores' @underscoreContext by underscore.middle; sub @underscores' @underscoreContext by underscore.start; sub @underscoreContext @underscores' by underscore.end; } contextualUnderscore; ### Single-line arrows # Dynamic hyphen pieces lookup contextualHyphens { # middle hyphen sub [@hyphenContextRaw @hyphens] @hyphens' [@hyphenContextRaw @hyphens] by hyphen.middle; # beginning hyphen ignore sub @hyphenContextRaw @hyphens' @hyphenContextRaw; ignore sub @hyphens @hyphens' @hyphenContextRaw; sub @hyphens' @hyphenContextRaw by hyphen.start; # end hyphen ignore sub @hyphenContextRaw @hyphens' @hyphenContextRaw; ignore sub @hyphenContextRaw @hyphens' @hyphens; sub [@hyphenContextRaw hyphen.start hyphen.middle] @hyphens' by hyphen.end; } contextualHyphens; # Middle parts - contextual lookup hyphen_bar_bar_hyphen { # -||- sub @hyphenLeft ligspacer bar' @hyphenRight by hyphen_bar_bar_hyphen.middle; sub @hyphenLeft bar' bar @hyphenRight by ligspacer; } hyphen_bar_bar_hyphen; lookup hyphen_less_less_hyphen { # -<<- sub @hyphenLeft ligspacer less' @hyphenRight by hyphen_less_less_hyphen.middle; sub @hyphenLeft less' less @hyphenRight by ligspacer; } hyphen_less_less_hyphen; lookup hyphen_greater_greater_hyphen { # ->>- sub @hyphenLeft ligspacer greater' @hyphenRight by hyphen_greater_greater_hyphen.m; sub @hyphenLeft greater' greater @hyphenRight by ligspacer; } hyphen_greater_greater_hyphen; lookup hyphen_bar_hyphen { # -|- sub @hyphenLeft bar' @hyphenRight by hyphen_bar_hyphen.middle; } hyphen_bar_hyphen; lookup hyphen_less_hyphen { # -<- sub @hyphenLeft less' @hyphenRight by hyphen_less_hyphen.middle; } hyphen_less_hyphen; lookup hyphen_greater_hyphen { # ->- sub @hyphenLeft greater' @hyphenRight by hyphen_greater_hyphen.middle; } hyphen_greater_hyphen; # Standalone ligatures that COULD be part of longer arrows but aren't lookup less_less_hyphen { # <<- sub ligspacer ligspacer @hyphens' by less_less_hyphen.liga; ignore sub less' less @hyphens @hyphenRight; sub less' less @hyphens by ligspacer; sub ligspacer less' @hyphens by ligspacer; } less_less_hyphen; lookup less_hyphen { # <- sub ligspacer @hyphens' by less_hyphen.liga; ignore sub less' @hyphens @hyphenRight; ignore sub hyphen less' hyphen; sub less' @hyphens by ligspacer; } less_hyphen; lookup greater_greater_hyphen { # >>- sub ligspacer ligspacer @hyphens' by greater_greater_hyphen.liga; ignore sub greater' greater @hyphens @hyphenRight; ignore sub hyphen greater' greater hyphen; sub greater' greater @hyphens by ligspacer; sub ligspacer greater' @hyphens by ligspacer; } greater_greater_hyphen; lookup greater_hyphen { # >- sub ligspacer @hyphens' by greater_hyphen.liga; ignore sub greater' @hyphens @hyphenRight; ignore sub hyphen greater' hyphen; sub greater' @hyphens by ligspacer; } greater_hyphen; lookup bar_bar_hyphen { # ||- sub ligspacer ligspacer @hyphens' by bar_bar_hyphen.liga; ignore sub bar' bar @hyphens @hyphenRight; ignore sub hyphen bar' bar hyphen; sub bar' bar @hyphens by ligspacer; sub ligspacer bar' @hyphens by ligspacer; } bar_bar_hyphen; lookup bar_hyphen { # |- sub ligspacer @hyphens' by bar_hyphen.liga; ignore sub bar' @hyphens @hyphenRight; ignore sub hyphen bar' hyphen; sub bar' @hyphens by ligspacer; } bar_hyphen; # Start sequences that do begin a longer sequence lookup less_less_hyphen_connecting { # <<- sub ligspacer ligspacer @hyphens' by less_less_hyphen.start; sub less' less @hyphens by ligspacer; sub ligspacer less' @hyphens by ligspacer; } less_less_hyphen_connecting; lookup less_hyphen_connecting { # <- sub ligspacer @hyphens' by less_hyphen.start; ignore sub hyphen less' hyphen; sub less' @hyphens by ligspacer; } less_hyphen_connecting; lookup greater_greater_hyphen_connecting { # >>- sub ligspacer ligspacer @hyphens' by greater_greater_hyphen.start; ignore sub hyphen greater' greater hyphen; sub greater' greater @hyphens by ligspacer; sub ligspacer greater' @hyphens by ligspacer; } greater_greater_hyphen_connecting; lookup greater_hyphen_connecting { # >- sub ligspacer @hyphens' by greater_hyphen.start; ignore sub hyphen greater' hyphen; sub greater' @hyphens by ligspacer; } greater_hyphen_connecting; lookup bar_bar_hyphen_connecting { # ||- sub ligspacer ligspacer @hyphens' by bar_bar_hyphen.start; ignore sub hyphen bar' bar hyphen; sub bar' bar @hyphens by ligspacer; sub ligspacer bar' @hyphens by ligspacer; } bar_bar_hyphen_connecting; lookup bar_hyphen_connecting { # |- sub ligspacer @hyphens' by bar_hyphen.start; ignore sub hyphen bar' hyphen; sub bar' @hyphens by ligspacer; } bar_hyphen_connecting; # Precomposed bits - end - connecting lookup hyphen_less_less_connecting { # -<< sub @hyphenLeft ligspacer ligspacer less' by hyphen_less_less.end; sub @hyphenLeft @hyphens' less less by ligspacer; sub @hyphenLeft ligspacer less' less by ligspacer; } hyphen_less_less_connecting; lookup hyphen_less_connecting { # -< sub @hyphenLeft ligspacer less' by hyphen_less.end; sub @hyphenLeft @hyphens' less by ligspacer; } hyphen_less_connecting; lookup hyphen_bar_bar_connecting { # -|| sub @hyphenLeft ligspacer ligspacer bar' by hyphen_bar_bar.end; sub @hyphenLeft @hyphens' bar bar by ligspacer; sub @hyphenLeft ligspacer bar' bar by ligspacer; } hyphen_bar_bar_connecting; lookup hyphen_bar_connecting { # -| sub @hyphenLeft ligspacer bar' by hyphen_bar.end; ignore sub hyphen' bar hyphen; sub @hyphenLeft @hyphens' bar by ligspacer; } hyphen_bar_connecting; lookup hyphen_greater_greater_connecting { # ->> sub @hyphenLeft ligspacer ligspacer greater' by hyphen_greater_greater.end; sub @hyphenLeft @hyphens' greater greater by ligspacer; sub @hyphenLeft ligspacer greater' greater by ligspacer; } hyphen_greater_greater_connecting; lookup hyphen_greater_connecting { # -> sub ligspacer greater' by hyphen_greater.end; sub @hyphenLeft @hyphens' greater by ligspacer; } hyphen_greater_connecting; # Bits that could be ends but really are just standalone ligatures lookup hyphen_less_less { # -<< sub ligspacer ligspacer less' by hyphen_less_less.liga; ignore sub @hyphenLeft @hyphens' less less; sub @hyphens' less less by ligspacer; sub ligspacer less' less by ligspacer; } hyphen_less_less; lookup hyphen_less { # -< sub ligspacer less' by hyphen_less.liga; ignore sub @hyphenLeft @hyphens' less; sub @hyphens' less by ligspacer; } hyphen_less; lookup hyphen_bar_bar { # -|| sub ligspacer ligspacer bar' by hyphen_bar_bar.liga; ignore sub @hyphenLeft @hyphens' bar bar; sub @hyphens' bar bar by ligspacer; sub ligspacer bar' bar by ligspacer; } hyphen_bar_bar; lookup hyphen_bar { # -| sub ligspacer bar' by hyphen_bar.liga; ignore sub hyphen' bar hyphen; ignore sub @hyphenLeft @hyphens' bar; sub @hyphens' bar by ligspacer; } hyphen_bar; lookup hyphen_greater_greater { # ->> sub ligspacer ligspacer greater' by hyphen_greater_greater.liga; ignore sub @hyphenLeft @hyphens' greater greater; sub @hyphens' greater greater by ligspacer; sub ligspacer greater' greater by ligspacer; } hyphen_greater_greater; lookup hyphen_greater { # -> sub ligspacer greater' by hyphen_greater.liga; ignore sub @hyphenLeft @hyphens' greater; sub @hyphens' greater by ligspacer; } hyphen_greater; # Precomposed - Standalone lookup less_hyphen_less { # <-< sub ligspacer ligspacer less' by less_hyphen_less.liga; sub less' hyphen less by ligspacer; sub ligspacer hyphen' less by ligspacer; } less_hyphen_less; lookup less_hyphen_less2 { # <-> sub ligspacer less' by less_hyphen_less.liga; sub less_hyphen.liga' less by ligspacer; } less_hyphen_less2; lookup less_hyphen_greater { # <-> sub ligspacer ligspacer greater' by less_hyphen_greater.liga; sub less' hyphen greater by ligspacer; sub ligspacer hyphen' greater by ligspacer; } less_hyphen_greater; lookup less_hyphen_greater2 { # <-> sub ligspacer greater' by less_hyphen_greater.liga; sub less_hyphen.liga' greater by ligspacer; } less_hyphen_greater2; lookup greater_hyphen_greater { # >-> sub ligspacer ligspacer greater' by greater_hyphen_greater.liga; sub greater' hyphen greater by ligspacer; sub ligspacer hyphen' greater by ligspacer; } greater_hyphen_greater; lookup greater_hyphen_greater2 { # <-> sub ligspacer greater' by greater_hyphen_greater.liga; sub greater_hyphen.liga' greater by ligspacer; } greater_hyphen_greater2; # loose ends - overlapping # for 3-glyph start/hyphen/end combos that don't have a standalone ligature lookup less_less_hyphenend { ignore sub [@hyphenLeft @hyphenLeftExtra] less' less @hyphenRight; sub [@hyphenLeft @hyphenLeftExtra] less' less by ligspacer; sub [@hyphenLeft @hyphenLeftExtra] ligspacer less' by hyphen_less_less.liga; } less_less_hyphenend; lookup less_hyphenend { ignore sub [@hyphenLeft @hyphenLeftExtra] less' @hyphenRight; sub [@hyphenLeft @hyphenLeftExtra] less' by hyphen_less.liga; } less_hyphenend; lookup bar_bar_hyphenend { ignore sub [@hyphenLeft @hyphenLeftExtra] bar' bar @hyphenRight; sub [@hyphenLeft @hyphenLeftExtra]bar' bar by ligspacer; sub [@hyphenLeft @hyphenLeftExtra] ligspacer bar' by hyphen_bar_bar.liga; } bar_bar_hyphenend; lookup bar_hyphenend { ignore sub [@hyphenLeft @hyphenLeftExtra] bar' @hyphenRight; sub [@hyphenLeft @hyphenLeftExtra] bar' by hyphen_bar.liga; } bar_hyphenend; lookup greater_greater_hyphenend { ignore sub [@hyphenLeft @hyphenLeftExtra] greater' greater @hyphenRight; sub [@hyphenLeft @hyphenLeftExtra] greater' greater by ligspacer; sub [@hyphenLeft @hyphenLeftExtra] ligspacer greater' by hyphen_greater_greater.liga; } greater_greater_hyphenend; lookup greater_hyphenend { ignore sub [@hyphenLeft @hyphenLeftExtra] greater' @hyphenRight; sub [@hyphenLeft @hyphenLeftExtra] greater' by hyphen_greater.liga; } greater_hyphenend; ### Double arrows # things that are not arrow end sequences, and get substituted first lookup bar_bar_bar_greater { sub ligspacer ligspacer ligspacer greater' by bar_bar_bar_greater.liga; ignore sub bar' greater greater; ignore sub bar bar' bar bar greater; sub bar' bar bar greater by ligspacer; sub ligspacer bar' bar greater by ligspacer; sub ligspacer ligspacer bar' greater by ligspacer; } bar_bar_bar_greater; lookup bar_bar_bar { sub ligspacer ligspacer bar' by bar_bar_bar.liga; ignore sub bar bar' bar bar; ignore sub bar' bar bar bar; ignore sub less bar' bar bar; sub bar' bar bar by ligspacer; sub ligspacer bar' bar by ligspacer; } bar_bar_bar; lookup bar_bar_greater { sub ligspacer ligspacer greater' by bar_bar_greater.liga; ignore sub bar' greater greater; ignore sub bar bar' bar greater; sub bar' bar greater by ligspacer; sub ligspacer bar' greater by ligspacer; } bar_bar_greater; lookup bar_braceright { sub ligspacer braceright' by bar_braceright.liga; ignore sub bar bar' braceright; ignore sub bar' braceright braceright; sub bar' braceright by ligspacer; } bar_braceright; lookup bar_bracketright { sub ligspacer bracketright' by bar_bracketright.liga; ignore sub bar bar' bracketright; ignore sub bar' bracketright bracketright; sub bar' bracketright by ligspacer; } bar_bracketright; lookup bar_greater { sub ligspacer greater' by bar_greater.liga; ignore sub bar' greater greater; ignore sub bar bar' greater; ignore sub less bar' greater; sub bar' greater by ligspacer; } bar_greater; # Precomposed bits that could start a sequence but don't lookup less_less_equal { # <<= sub ligspacer ligspacer @equals' by less_less_equal.liga; ignore sub less' less @equals [@equals @equalRight]; ignore sub @equals less' less @equals; sub less' less @equals by ligspacer; sub ligspacer less' @equals by ligspacer; } less_less_equal; # less_equal is a math symbol if it's standalone lookup greater_greater_equal { # >>= sub ligspacer ligspacer @equals' by greater_greater_equal.liga; ignore sub equal greater' greater equal; ignore sub greater' greater @equals [@equals @equalRight]; sub greater' greater @equals by ligspacer; sub ligspacer greater' @equals by ligspacer; } greater_greater_equal; # greater_equal math lookup bar_bar_equal { # ||= sub ligspacer ligspacer @equals' by bar_bar_equal.liga; ignore sub equal bar' bar equal; ignore sub bar' bar @equals [@equals @equalRight]; sub bar' bar @equals by ligspacer; sub ligspacer bar' @equals by ligspacer; } bar_bar_equal; lookup bar_equal { # |= sub ligspacer @equals' by bar_equal.liga; ignore sub equal bar' equal; ignore sub bar bar' @equals; ignore sub bar' @equals [@equals @equalRight]; sub bar' @equals by ligspacer; } bar_equal; lookup slash_slash_equal { # //= sub ligspacer ligspacer @equals' by slash_slash_equal.liga; ignore sub equal slash' slash equal; ignore sub slash' slash @equals [@equals @equalRight]; sub slash' slash @equals by ligspacer; sub ligspacer slash' @equals by ligspacer; } slash_slash_equal; lookup slash_equal { # /= sub ligspacer @equals' by slash_equal.liga; ignore sub @equals slash' @equals; ignore sub slash slash' @equals; ignore sub slash' @equals [@equals @equalRight]; sub slash' @equals by ligspacer; } slash_equal; # Dynamic equal pieces lookup contextualEquals { # middle equal sub [@equalContextRawStart @equals] @equals' [@equalContextRawEnd exclam colon colon.fig @equals] by equal.middle; sub [@equalContextRawStart @equals] @equals' @equals [less greater exclam colon colon.fig] by equal.middle; sub [@equalContextRawStart @equals] @equals' [less greater exclam colon] by equal.middle; sub [less greater exclam colon colon.fig] @equals @equals' [@equalContextRawEnd @equals exclam colon colon.fig] by equal.middle; sub [less greater exclam colon colon.fig] @equals' [@equalContextRawEnd @equals exclam colon colon.fig] by equal.middle; # beginning equal ignore sub @equalContextRawStart @equals' @equalContextRawEnd; ignore sub [less greater exclam colon colon.fig] @equals' @equalContextRawEnd; ignore sub @equals @equals' @equalContextRawEnd; sub @equals' @equalContextRawEnd by equal.start; sub @equals' @equals [less greater exclam colon colon.fig] by equal.start; sub @equals' [less greater exclam colon colon.fig] by equal.start; # end equal ignore sub @equalContextRawStart @equals' @equalContextRawEnd; ignore sub @equalContextRawStart @equals' @equals; ignore sub [less greater exclam colon colon.fig] @equals' @equals; sub @equals [less greater] @equals' by equal.end; sub @equals [less greater] [less greater] @equals' by equal.end; sub [@equalContextRawStart exclam colon colon.fig equal.start equal.middle] @equals' by equal.end; } contextualEquals; # Middle parts - contextual lookup equal_bar_bar_equal { # =||= sub @equalLeft ligspacer bar' @equalRight by equal_bar_bar_equal.middle; sub @equalLeft bar' bar @equalRight by ligspacer; } equal_bar_bar_equal; lookup equal_slash_slash_equal { # =//= sub @equalLeft ligspacer slash' @equalRight by equal_slash_slash_equal.middle; sub @equalLeft slash' slash @equalRight by ligspacer; } equal_slash_slash_equal; lookup equal_less_less_equal { # =<<= sub @equalLeft ligspacer less' @equalRight by equal_less_less_equal.middle; sub @equalLeft less' less @equalRight by ligspacer; } equal_less_less_equal; lookup equal_greater_greater_equal { # =>>= sub @equalLeft ligspacer greater' @equalRight by equal_greater_greater_equal.m; sub @equalLeft greater' greater @equalRight by ligspacer; } equal_greater_greater_equal; lookup equal_bar_equal { # =|= sub @equalLeft bar' @equalRight by equal_bar_equal.middle; } equal_bar_equal; lookup equal_slash_equal { # =/= sub @equalLeft slash' @equalRight by equal_slash_equal.middle; } equal_slash_equal; lookup equal_less_equal { # =<= sub @equalLeft less' @equalRight by equal_less_equal.middle; } equal_less_equal; lookup equal_greater_equal { # =>= sub @equalLeft greater' @equalRight by equal_greater_equal.middle; } equal_greater_equal; lookup equal_colon_equal { # =:= sub @equalLeft @colons' @equalRight by equal_colon_equal.middle; } equal_colon_equal; lookup equal_exclam_equal { # =!= sub @equalLeft exclam' @equalRight by equal_exclam_equal.middle; } equal_exclam_equal; # Precomposed bits - Start lookup less_less_equal_connecting { # <<= sub ligspacer ligspacer @equals' [@equals @equalRight] by less_less_equal.start; sub less' less @equals [@equals @equalRight] by ligspacer; sub ligspacer less' @equals [@equals @equalRight] by ligspacer; } less_less_equal_connecting; lookup less_equal_connecting { # <= sub ligspacer @equals' [@equals @equalRight] by less_equal.start; sub less' @equals [@equals @equalRight] by ligspacer; # 2+ equals after } less_equal_connecting; lookup less_equal2_connecting { # <= # for overlapping ends sub ligspacer @equals' [less greater bar] by less_equal.start; sub less' @equals [less greater bar] by ligspacer; # special case } less_equal2_connecting; lookup less_equal3_connecting { # <= @doublecontext = [equal_less_less_equal.middle equal_greater_greater_equal.m equal_bar_bar_equal.middle equal_slash_slash_equal.middle]; sub ligspacer @equals' ligspacer @doublecontext by less_equal.start; sub less' @equals ligspacer @doublecontext by ligspacer; # special case } less_equal3_connecting; lookup greater_greater_equal_connecting { # >>= sub ligspacer ligspacer @equals' [@equals @equalRight] by greater_greater_equal.start; ignore sub equal greater' greater equal; sub greater' greater @equals [@equals @equalRight] by ligspacer; sub ligspacer greater' @equals [@equals @equalRight] by ligspacer; } greater_greater_equal_connecting; lookup greater_equal_connecting { # >= sub ligspacer @equals' [@equals @equalRight] by greater_equal.start; ignore sub @equalLeft greater' @equals [@equals @equalRight]; sub greater' @equals [@equals @equalRight] by ligspacer; # 2+ equals after } greater_equal_connecting; lookup greater_equal2_connecting { sub ligspacer @equals' [greater less bar] by greater_equal.start; sub greater' @equals [greater less bar] by ligspacer; # special case } greater_equal2_connecting; lookup greater_equal3_connecting { @doublecontext = [equal_less_less_equal.middle equal_greater_greater_equal.m equal_bar_bar_equal.middle equal_slash_slash_equal.middle]; sub ligspacer @equals' ligspacer @doublecontext by greater_equal.start; sub greater' @equals ligspacer @doublecontext by ligspacer; # special case } greater_equal3_connecting; lookup bar_bar_equal_connecting { # ||= sub ligspacer ligspacer @equals' [@equals @equalRight] by bar_bar_equal.start; ignore sub @equals bar' bar @equals; sub bar' bar @equals [@equals @equalRight] by ligspacer; sub ligspacer bar' @equals [@equals @equalRight] by ligspacer; } bar_bar_equal_connecting; lookup bar_equal_connecting { # |= sub ligspacer @equals' [@equals @equalRight] by bar_equal.start; ignore sub @equals bar' @equals [@equals @equalRight]; sub bar' @equals [@equals @equalRight] by ligspacer; } bar_equal_connecting; lookup slash_slash_equal_connecting { # //= sub ligspacer ligspacer @equals' [@equals @equalRight] by slash_slash_equal.start; ignore sub @equals slash' slash @equals; sub slash' slash @equals [@equals @equalRight] by ligspacer; sub ligspacer slash' @equals [@equals @equalRight] by ligspacer; } slash_slash_equal_connecting; lookup slash_equal_connecting { # /= sub ligspacer @equals' [@equals @equalRight] by slash_equal.start; ignore sub @equals slash' @equals [@equals @equalRight]; sub slash' @equals [@equals @equalRight] by ligspacer; } slash_equal_connecting; # Precomposed bits - end - connecting lookup equal_less_less_connecting { # =<< sub @equalLeft ligspacer ligspacer less' by equal_less_less.end; sub @equalLeft @equals' less less by ligspacer; sub @equalLeft ligspacer less' less by ligspacer; } equal_less_less_connecting; lookup equal_less_connecting { # =< sub @equalLeft ligspacer less' by equal_less.end; ignore sub @equalLeft equal' less equal; sub @equalLeft @equals' less by ligspacer; } equal_less_connecting; lookup equal_bar_bar_connecting { # =|| sub @equalLeft ligspacer ligspacer bar' by equal_bar_bar.end; sub @equalLeft @equals' bar bar by ligspacer; sub @equalLeft ligspacer bar' bar by ligspacer; } equal_bar_bar_connecting; lookup equal_bar_connecting { # =| sub @equalLeft ligspacer bar' by equal_bar.end; ignore sub @equalLeft @equals' bar @equals; sub @equalLeft @equals' bar by ligspacer; } equal_bar_connecting; lookup equal_slash_slash_connecting { # =// sub @equalLeft ligspacer ligspacer slash' by equal_slash_slash.end; sub @equalLeft @equals' slash slash by ligspacer; sub @equalLeft ligspacer slash' slash by ligspacer; } equal_slash_slash_connecting; lookup equal_slash_connecting { # =/ sub @equalLeft ligspacer slash' by equal_slash.end; ignore sub @equalLeft @equals' slash @equals; sub @equalLeft @equals' slash by ligspacer; } equal_slash_connecting; lookup equal_greater_greater_connecting { # =>> sub @equalLeft ligspacer ligspacer greater' by equal_greater_greater.end; sub @equalLeft @equals' greater greater by ligspacer; sub @equalLeft ligspacer greater' greater by ligspacer; } equal_greater_greater_connecting; lookup equal_greater_connecting { # => sub @equalLeft ligspacer greater' by equal_greater.end; sub @equalLeft @equals' greater by ligspacer; } equal_greater_connecting; # loose ends - overlapping # for 3-glyph start/equal/end combos that don't have a standalone ligature lookup less_less_equalend { ignore sub [@equalLeft @equalLeftExtra] less' less @equalRight; sub [@equalLeft @equalLeftExtra] less' less by ligspacer; sub [@equalLeft @equalLeftExtra] ligspacer less' by equal_less_less.liga; } less_less_equalend; lookup less_equalend { ignore sub [@equalLeft @equalLeftExtra] less' @equalRight; sub [@equalLeft @equalLeftExtra] less' by equal_less.liga; } less_equalend; lookup bar_bar_equalend { ignore sub [@equalLeft @equalLeftExtra] bar' bar @equalRight; sub [@equalLeft @equalLeftExtra]bar' bar by ligspacer; sub [@equalLeft @equalLeftExtra] ligspacer bar' by equal_bar_bar.liga; } bar_bar_equalend; lookup bar_equalend { ignore sub [@equalLeft @equalLeftExtra] bar' @equalRight; sub [@equalLeft @equalLeftExtra] bar' by equal_bar.liga; } bar_equalend; lookup slash_slash_equalend { ignore sub [@equalLeft @equalLeftExtra] slash' slash @equalRight; sub [@equalLeft @equalLeftExtra]slash' slash by ligspacer; sub [@equalLeft @equalLeftExtra] ligspacer slash' by equal_slash_slash.liga; } slash_slash_equalend; lookup slash_equalend { ignore sub [@equalLeft @equalLeftExtra] slash' @equalRight; sub [@equalLeft @equalLeftExtra] slash' by equal_slash.liga; } slash_equalend; lookup greater_greater_equalend { ignore sub [@equalLeft @equalLeftExtra] greater' greater @equalRight; sub [@equalLeft @equalLeftExtra] greater' greater by ligspacer; sub [@equalLeft @equalLeftExtra] ligspacer greater' by equal_greater_greater.liga; } greater_greater_equalend; lookup greater_equalend { ignore sub [@equalLeft @equalLeftExtra] greater' @equalRight; sub [@equalLeft @equalLeftExtra] greater' by equal_greater.liga; } greater_equalend; # Precomposed bits - standalone ends lookup equal_less_less { # =<< sub ligspacer ligspacer less' by equal_less_less.liga; sub @equals' less less by ligspacer; sub ligspacer less' less by ligspacer; } equal_less_less; lookup equal_less { # =< sub ligspacer less' by equal_less.liga; ignore sub equal' less equal; sub @equals' less by ligspacer; } equal_less; lookup equal_bar_bar { # =|| sub ligspacer ligspacer bar' by equal_bar_bar.liga; sub @equals' bar bar by ligspacer; sub ligspacer bar' bar by ligspacer; } equal_bar_bar; lookup equal_bar { # =| sub ligspacer bar' by equal_bar.liga; ignore sub @equals' bar @equals; sub @equals' bar by ligspacer; } equal_bar; lookup equal_slash_slash { # =// sub ligspacer ligspacer slash' by equal_slash_slash.liga; sub @equals' slash slash by ligspacer; sub ligspacer slash' slash by ligspacer; } equal_slash_slash; lookup equal_slash { # =/ sub ligspacer slash' by equal_slash.liga; ignore sub @equals' slash @equals; sub @equals' slash by ligspacer; } equal_slash; lookup equal_greater_greater { # =>> sub ligspacer ligspacer greater' by equal_greater_greater.liga; sub @equals' greater greater by ligspacer; sub ligspacer greater' greater by ligspacer; } equal_greater_greater; lookup equal_greater { # => sub ligspacer greater' by equal_greater.liga; sub @equals' greater by ligspacer; } equal_greater; # Precomposed - Standalone lookup less_equal_less { # <=< sub ligspacer ligspacer less' by less_equal_less.liga; sub less' @equals less by ligspacer; sub ligspacer @equals' less by ligspacer; } less_equal_less; lookup less_equal_greater { # <=> sub ligspacer ligspacer greater' by less_equal_greater.liga; sub less' @equals greater by ligspacer; sub ligspacer @equals' greater by ligspacer; } less_equal_greater; lookup greater_equal_greater { # >=> sub ligspacer ligspacer greater' by greater_equal_greater.liga; sub greater' @equals greater by ligspacer; sub ligspacer @equals' greater by ligspacer; } greater_equal_greater; ### Ligature substitutions hereafter ### Less lookup less_less_less { sub ligspacer ligspacer less' by less_less_less.liga; ignore sub less' less less less; ignore sub less less' less less; sub less' less less by ligspacer; sub ligspacer less' less by ligspacer; } less_less_less; lookup less_less { sub ligspacer less' by less_less.liga; ignore sub less' less less; ignore sub less less' less; sub less' less by ligspacer; } less_less; lookup less_asciitilde_greater { sub ligspacer ligspacer greater' by less_asciitilde_greater.liga; sub less' asciitilde greater by ligspacer; sub ligspacer asciitilde' greater by ligspacer; } less_asciitilde_greater; lookup less_asciitilde_asciitilde { sub ligspacer ligspacer asciitilde' by less_asciitilde_asciitilde.liga; ignore sub less less' asciitilde asciitilde; ignore sub less' asciitilde asciitilde asciitilde; sub less' asciitilde asciitilde by ligspacer; sub ligspacer asciitilde' asciitilde by ligspacer; } less_asciitilde_asciitilde; lookup less_asciitilde { sub ligspacer asciitilde' by less_asciitilde.liga; ignore sub less less' asciitilde; ignore sub less' asciitilde asciitilde; sub less' asciitilde by ligspacer; } less_asciitilde; lookup less_asterisk_greater { sub ligspacer ligspacer greater' by less_asterisk_greater.liga; sub less' asterisk greater by ligspacer; sub ligspacer asterisk' greater by ligspacer; } less_asterisk_greater; lookup less_asterisk { sub ligspacer asterisk' by less_asterisk.liga; ignore sub less less' asterisk; ignore sub less' asterisk asterisk; sub less' asterisk by ligspacer; } less_asterisk; lookup less_bar_bar_bar { sub ligspacer ligspacer ligspacer bar' by less_bar_bar_bar.liga; ignore sub less less' bar; ignore sub less' bar bar bar bar; sub less' bar bar bar by ligspacer; sub ligspacer bar' bar bar by ligspacer; sub ligspacer ligspacer bar' bar by ligspacer; } less_bar_bar_bar; lookup less_bar_bar { sub ligspacer ligspacer bar' by less_bar_bar.liga; ignore sub less less' bar; ignore sub less' bar bar bar bar; sub less' bar bar by ligspacer; sub ligspacer bar' bar by ligspacer; } less_bar_bar; lookup less_bar_greater { sub ligspacer ligspacer greater' by less_bar_greater.liga; ignore sub less less' bar; ignore sub less' bar bar bar bar; ignore sub less' bar greater greater; sub less' bar greater by ligspacer; sub ligspacer bar' greater by ligspacer; } less_bar_greater; lookup less_bar { sub ligspacer bar' by less_bar.liga; ignore sub less less' bar; ignore sub less' bar bar bar bar; sub less' bar by ligspacer; } less_bar; lookup less_colon { sub ligspacer @colons' by less_colon.liga; ignore sub less less' @colons; ignore sub less' @colons @colons; sub less' @colons by ligspacer; } less_colon; lookup less_dollar_greater { sub ligspacer ligspacer greater' by less_dollar_greater.liga; ignore sub less less' dollar; ignore sub less' dollar dollar; ignore sub dollar' greater greater; ignore sub dollar dollar' greater; sub less' dollar greater by ligspacer; sub ligspacer dollar' greater by ligspacer; } less_dollar_greater; lookup less_dollar { sub ligspacer dollar' by less_dollar.liga; ignore sub less less' dollar; ignore sub less' dollar dollar; sub less' dollar by ligspacer; } less_dollar; lookup less_equal_math { sub ligspacer equal' by less_equal; # this is the math glyph ignore sub less' @equals @equalRight; ignore sub @equalLeft less' @equals; sub less' @equals by ligspacer; } less_equal_math; lookup less_exclam_hyphen_hyphen { sub ligspacer ligspacer ligspacer @hyphens' by less_exclam_hyphen_hyphen.liga; sub less' exclam @hyphens @hyphens by ligspacer; sub ligspacer exclam' @hyphens @hyphens by ligspacer; sub ligspacer ligspacer @hyphens' @hyphens by ligspacer; } less_exclam_hyphen_hyphen; lookup less_greater { sub ligspacer greater' by less_greater.liga; ignore sub less' greater greater; ignore sub less less' greater; sub less' greater by ligspacer; } less_greater; lookup less_plus_greater { sub ligspacer ligspacer greater' by less_plus_greater.liga; ignore sub less less' plus; ignore sub less' plus plus; ignore sub plus' greater greater; ignore sub plus plus' greater; sub less' plus greater by ligspacer; sub ligspacer plus' greater by ligspacer; } less_plus_greater; lookup less_plus { sub ligspacer plus' by less_plus.liga; ignore sub less less' plus; ignore sub less' plus plus; sub less' plus by ligspacer; } less_plus; lookup less_slash_greater { sub ligspacer ligspacer greater' by less_slash_greater.liga; ignore sub less less' slash; ignore sub less' slash slash; ignore sub slash' greater greater; ignore sub slash slash' greater; sub less' slash greater by ligspacer; sub ligspacer slash' greater by ligspacer; } less_slash_greater; lookup less_slash { sub ligspacer slash' by less_slash.liga; ignore sub less less' slash; ignore sub less' slash slash; sub less' slash by ligspacer; } less_slash; ### Ampersand lookup ampersand_ampersand { sub ligspacer ampersand' by ampersand_ampersand.liga; ignore sub ampersand' ampersand ampersand; ignore sub ampersand ampersand' ampersand; sub ampersand' ampersand by ligspacer; } ampersand_ampersand; ### Asciicircum lookup asciicircum_equal { #### check this #### sub ligspacer equal' by asciicircum_equal.liga; ignore sub asciicircum' equal equal; ignore sub asciicircum asciicircum' equal; sub asciicircum' equal by ligspacer; } asciicircum_equal; ### Asciitilde lookup asciitilde_asciitilde_greater { sub ligspacer ligspacer greater' by asciitilde_asciitilde_greater; ignore sub asciitilde' asciitilde greater greater; ignore sub asciitilde asciitilde' asciitilde greater; sub asciitilde' asciitilde greater by ligspacer; sub ligspacer asciitilde' greater by ligspacer; } asciitilde_asciitilde_greater; lookup asciitilde_asciitilde { sub ligspacer asciitilde' by asciitilde_asciitilde.liga; ignore sub asciitilde' asciitilde asciitilde; ignore sub asciitilde asciitilde' asciitilde; sub asciitilde' asciitilde by ligspacer; } asciitilde_asciitilde; lookup asciitilde_greater { sub ligspacer greater' by asciitilde_greater.liga; ignore sub asciitilde' greater greater; ignore sub asciitilde asciitilde' greater; sub asciitilde' greater by ligspacer; } asciitilde_greater; lookup asciitilde_hyphen { sub ligspacer hyphen' by asciitilde_hyphen.liga; ignore sub asciitilde' hyphen hyphen; ignore sub asciitilde asciitilde' hyphen; sub asciitilde' hyphen by ligspacer; } asciitilde_hyphen; lookup asciitilde_at { sub ligspacer at' by asciitilde_at.liga; ignore sub asciitilde' at at; ignore sub asciitilde asciitilde' at; sub asciitilde' at by ligspacer; } asciitilde_at; ### Asterisk lookup asterisk_asterisk_asterisk { sub ligspacer ligspacer asterisk' by asterisk_asterisk_asterisk.liga; ignore sub asterisk' asterisk asterisk asterisk; ignore sub asterisk asterisk' asterisk asterisk; sub asterisk' asterisk asterisk by ligspacer; sub ligspacer asterisk' asterisk by ligspacer; } asterisk_asterisk_asterisk; lookup asterisk_asterisk { sub ligspacer asterisk' by asterisk_asterisk.liga; ignore sub asterisk' asterisk asterisk; ignore sub asterisk asterisk' asterisk; sub asterisk' asterisk by ligspacer; } asterisk_asterisk; lookup asterisk_greater { sub ligspacer greater' by asterisk_greater.liga; ignore sub asterisk' greater greater; ignore sub asterisk asterisk' greater; sub asterisk' greater by ligspacer; } asterisk_greater; lookup asterisk_slash { sub ligspacer slash' by asterisk_slash.liga; ignore sub asterisk' slash slash; sub asterisk' slash by ligspacer; } asterisk_slash; ### Backslash lookup backslash_slash { sub ligspacer slash' by backslash_slash.liga; ignore sub backslash backslash' slash; ignore sub backslash' slash slash; sub backslash' slash by ligspacer; } backslash_slash; ### Bar # see above lookup bar_bar { sub ligspacer bar' by bar_bar.liga; ignore sub bar' bar bar; ignore sub bar bar' bar; sub bar' bar by ligspacer; } bar_bar; ### Brace lookup braceleft_bar { sub ligspacer bar' by braceleft_bar.liga; ignore sub braceleft braceleft' bar; ignore sub braceleft' bar bar; sub braceleft' bar by ligspacer; } braceleft_bar; ### Bracket lookup bracketleft_bar { sub ligspacer bar' by bracketleft_bar.liga; ignore sub bracketleft bracketleft' bar; ignore sub bracketleft' bar bar; sub bracketleft' bar by ligspacer; } bracketleft_bar; lookup bracketright_numbersign { sub ligspacer numbersign' by bracketright_numbersign.liga; ignore sub bracketright bracketright' numbersign; ignore sub bracketright' numbersign numbersign; sub bracketright' numbersign by ligspacer; } bracketright_numbersign; ### Colon lookup colon_colon_colon { sub ligspacer ligspacer @colons' by colon_colon_colon.liga; ignore sub @colons @colons' @colons @colons; ignore sub @colons' @colons @colons @colons; sub @colons' @colons @colons by ligspacer; sub ligspacer @colons' @colons by ligspacer; } colon_colon_colon; lookup colon_colon_equal { sub ligspacer ligspacer equal' by colon_colon_equal.liga; ignore sub @colons @colons' @colons equal; ignore sub @colons' @colons equal equal; sub @colons' @colons equal by ligspacer; sub ligspacer @colons' equal by ligspacer; } colon_colon_equal; lookup colon_colon { sub ligspacer @colons' by colon_colon.liga; ignore sub @colons @colons' @colons; ignore sub @colons' @colons @colons; sub @colons' @colons by ligspacer; } colon_colon; lookup colon_equal { sub ligspacer @equals' by colon_equal.liga; ignore sub @colons @colons' equal; ignore sub @colons' equal equal; ignore sub parenleft question @colons' equal; ignore sub equal @colons' equal; sub @colons' @equals by ligspacer; } colon_equal; lookup colon_greater { sub ligspacer greater' by colon_greater.liga; ignore sub @colons @colons' greater; ignore sub @colons' greater greater; sub @colons' greater by ligspacer; } colon_greater; lookup colon_less { sub ligspacer less' by colon_less.liga; ignore sub @colons @colons' less; ignore sub @colons' less less; sub @colons' less by ligspacer; } colon_less; ### Dollar lookup dollar_greater { sub ligspacer greater' by dollar_greater.liga; ignore sub dollar' greater greater; ignore sub dollar dollar' greater; sub dollar' greater by ligspacer; } dollar_greater; ### Equal see below ### Exclam lookup exclam_exclam_period { sub ligspacer ligspacer period' by exclam_exclam_period.liga; ignore sub exclam exclam' exclam period; ignore sub exclam' exclam period period; ignore sub period exclam' exclam period; sub exclam' exclam period by ligspacer; sub ligspacer exclam' period by ligspacer; } exclam_exclam_period; lookup exclam_exclam { sub ligspacer exclam' by exclam_exclam.liga; ignore sub exclam' exclam exclam; ignore sub exclam exclam' exclam; sub exclam' exclam by ligspacer; } exclam_exclam; lookup exclam_equal_equal { sub ligspacer ligspacer @equals' by exclam_equal_equal.liga; ignore sub exclam' @equals @equals @equals; ignore sub @equals exclam' @equals @equals; ignore sub @equalLeft exclam' @equals @equals; sub exclam' @equals @equals by ligspacer; sub ligspacer @equals' @equals by ligspacer; } exclam_equal_equal; lookup exclam_equal { sub ligspacer @equals' by exclam_equal.liga; ignore sub exclam exclam' @equals; ignore sub exclam' @equals @equals; ignore sub parenleft question exclam' @equals; ignore sub parenleft question less exclam' @equals; ignore sub @equals exclam' @equals; ignore sub @equalLeft exclam' @equals; sub exclam' @equals by ligspacer; } exclam_equal; ### Equal lookup equal_asciitilde { sub ligspacer asciitilde' by equal_asciitilde.liga; sub equal' asciitilde by ligspacer; } equal_asciitilde; lookup exclam_asciitilde { sub ligspacer asciitilde' by exclam_asciitilde.liga; sub exclam' asciitilde by ligspacer; } exclam_asciitilde; ### Greater lookup greater_greater_greater { sub ligspacer ligspacer greater' by greater_greater_greater.liga; ignore sub greater' greater greater greater; ignore sub greater greater' greater greater; sub greater' greater greater by ligspacer; sub ligspacer greater' greater by ligspacer; } greater_greater_greater; lookup greater_greater { sub ligspacer greater' by greater_greater.liga; ignore sub greater' greater greater; ignore sub greater greater' greater; sub greater' greater by ligspacer; } greater_greater; lookup greater_colon { sub ligspacer @colons' by greater_colon.liga; ignore sub greater greater' @colons; ignore sub greater' @colons @colons; sub greater' @colons by ligspacer; } greater_colon; lookup greater_equal_math { # the math symbol. arrow opener see below sub ligspacer @equals' by greater_equal; ignore sub greater' @equals equal; ignore sub greater greater' @equals; ignore sub greater' @equals greater; sub greater' @equals by ligspacer; } greater_equal_math; ### Hyphen # double and triple hyphens are with the arrows / combining hyphens lookup hyphen_asciitilde { sub ligspacer asciitilde' by hyphen_asciitilde.liga; ignore sub hyphen' asciitilde asciitilde; ignore sub hyphen hyphen' asciitilde; sub hyphen' asciitilde by ligspacer; } hyphen_asciitilde; # Less is up top ### Numbersign lookup numbersign_braceleft { sub ligspacer braceleft' by numbersign_braceleft.liga; ignore sub numbersign numbersign' braceleft; ignore sub numbersign' braceleft braceleft; sub numbersign' braceleft by ligspacer; } numbersign_braceleft; lookup numbersign_bracketleft { sub ligspacer bracketleft' by numbersign_bracketleft.liga; ignore sub numbersign numbersign' bracketleft; ignore sub numbersign' bracketleft bracketleft; sub numbersign' bracketleft by ligspacer; } numbersign_bracketleft; lookup numbersign_parenleft { sub ligspacer parenleft' by numbersign_parenleft.liga; ignore sub numbersign numbersign' parenleft; ignore sub numbersign' parenleft parenleft; sub numbersign' parenleft by ligspacer; } numbersign_parenleft; lookup numbersign_underscore_parenleft { sub ligspacer ligspacer parenleft' by numbersign_underscore_parenleft; ignore sub numbersign numbersign' underscore parenleft; sub numbersign' underscore parenleft by ligspacer; sub ligspacer underscore' parenleft by ligspacer; } numbersign_underscore_parenleft; lookup numbersign_underscore { sub ligspacer underscore' by numbersign_underscore.liga; ignore sub numbersign numbersign' underscore; ignore sub numbersign' underscore underscore; sub numbersign' underscore by ligspacer; } numbersign_underscore; lookup numbersign_colon { sub ligspacer @colons' by numbersign_colon.liga; ignore sub numbersign numbersign' @colons; ignore sub numbersign' @colons @colons; sub numbersign' @colons by ligspacer; } numbersign_colon; lookup numbersign_equal { sub ligspacer @equals' by numbersign_equal.liga; ignore sub numbersign numbersign' @equals; ignore sub numbersign' equal @equals; sub numbersign' @equals by ligspacer; } numbersign_equal; lookup numbersign_exclam { sub ligspacer exclam' by numbersign_exclam.liga; ignore sub numbersign numbersign' exclam; ignore sub numbersign' exclam exclam; sub numbersign' exclam by ligspacer; } numbersign_exclam; lookup numbersign_question { sub ligspacer question' by numbersign_question.liga; ignore sub numbersign numbersign' question; ignore sub numbersign' question question; sub numbersign' question by ligspacer; } numbersign_question; ### Percent lookup percent_percent { sub ligspacer percent' by percent_percent.liga; ignore sub percent' percent percent; ignore sub percent percent' percent; sub percent' percent by ligspacer; } percent_percent; ### Period lookup period_period_period { sub ligspacer ligspacer period' by period_period_period.liga; ignore sub period period' period period; ignore sub period' period period period; sub period' period period by ligspacer; sub ligspacer period' period by ligspacer; } period_period_period; lookup period_period_equal { sub ligspacer ligspacer equal' by period_period_equal.liga; ignore sub period period' period equal; ignore sub period' period equal equal; sub period' period equal by ligspacer; sub ligspacer period' equal by ligspacer; } period_period_equal; lookup period_period_less { sub ligspacer ligspacer less' by period_period_less.liga; ignore sub period period' period less; ignore sub period' period less less; sub period' period less by ligspacer; sub ligspacer period' less by ligspacer; } period_period_less; lookup period_period { sub ligspacer period' by period_period.liga; ignore sub period period' period; ignore sub period' period period; sub period' period by ligspacer; } period_period; lookup period_equal { sub ligspacer equal' by period_equal.liga; ignore sub period period' equal; ignore sub period' equal equal; sub period' equal by ligspacer; } period_equal; lookup period_hyphen { sub ligspacer hyphen' by period_hyphen.liga; ignore sub period period' hyphen; ignore sub period' hyphen hyphen; sub period' hyphen by ligspacer; } period_hyphen; lookup period_question { sub ligspacer question' by period_question.liga; ignore sub period period' question; ignore sub period' question question; sub period' question by ligspacer; } period_question; ### Plus lookup plus_plus_plus { sub ligspacer ligspacer plus' by plus_plus_plus.liga; ignore sub plus' plus plus plus; ignore sub plus plus' plus plus; sub plus' plus plus by ligspacer; sub ligspacer plus' plus by ligspacer; } plus_plus_plus; lookup plus_plus { sub ligspacer plus' by plus_plus.liga; ignore sub plus' plus plus; ignore sub plus plus' plus; sub plus' plus by ligspacer; } plus_plus; lookup plus_greater { sub ligspacer greater' by plus_greater.liga; ignore sub plus' greater greater; ignore sub plus plus' greater; sub plus' greater by ligspacer; } plus_greater; ### Question lookup question_question { sub ligspacer question' by question_question.liga; ignore sub question' question question; ignore sub question question' question; sub question' question by ligspacer; } question_question; lookup question_period { sub ligspacer period' by question_period.liga; ignore sub question' period period; ignore sub question question' period; sub question' period by ligspacer; } question_period; lookup question_colon { sub ligspacer @colons' by question_colon.liga; ignore sub question' @colons @colons; ignore sub question question' @colons; sub question' @colons by ligspacer; } question_colon; lookup question_equal { sub ligspacer equal' by question_equal.liga; ignore sub question' equal equal; ignore sub question question' equal; sub question' equal by ligspacer; } question_equal; ### Semicolon lookup semicolon_semicolon { sub ligspacer semicolon' by semicolon_semicolon.liga; ignore sub semicolon' semicolon semicolon; ignore sub semicolon semicolon' semicolon; sub semicolon' semicolon by ligspacer; } semicolon_semicolon; ### Slash lookup slash_slash_slash { sub ligspacer ligspacer slash' by slash_slash_slash.liga; ignore sub slash' slash slash slash; ignore sub slash slash' slash slash; sub slash' slash slash by ligspacer; sub ligspacer slash' slash by ligspacer; } slash_slash_slash; lookup slash_slash { sub ligspacer slash' by slash_slash.liga; ignore sub slash' slash slash; ignore sub slash slash' slash; ignore sub [@equals @equalLeft] slash' slash; sub slash' slash by ligspacer; } slash_slash; lookup slash_asterisk { sub ligspacer asterisk' by slash_asterisk.liga; sub slash' asterisk by ligspacer; } slash_asterisk; lookup slash_backslash { sub ligspacer backslash' by slash_backslash.liga; ignore sub slash' backslash backslash; ignore sub slash slash' backslash; sub slash' backslash by ligspacer; } slash_backslash; lookup slash_greater { sub ligspacer greater' by slash_greater.liga; ignore sub slash' greater greater; ignore sub slash slash' greater; sub slash' greater by ligspacer; } slash_greater; } ss01; feature ss02 { featureNames { name "Arrow forms for less-equal and greater-equal"; # Windows English name 1 0 0 "Arrow forms for less-equal and greater-equal"; # Mac English }; lookup moreArrows { sub less_equal by less_equal.liga; sub greater_equal by greater_equal.liga; } moreArrows; } ss02; feature ss03 { featureNames { name "www ligature"; # Windows English name 1 0 0 "www ligature"; # Mac English }; lookup w_w_w { sub ligspacer ligspacer w' by w_w_w.liga; ignore sub w' w w w; ignore sub w w' w w; sub w' w w by ligspacer; sub ligspacer w' w by ligspacer; } w_w_w; } ss03; feature ss11 { featureNames { name "Raised Colon (Figures Only)"; # Windows English name 1 0 0 "Raised Colon (Figures Only)"; # Mac English }; lookup FigureColonContextual { sub @fig colon' @fig by colon.fig; } FigureColonContextual; } ss11; feature ss12 { featureNames { name "Raised Colon (Global)"; # Windows English name 1 0 0 "Raised Colon (Global)"; # Mac English }; lookup FigureColon { sub colon by colon.fig; } FigureColon; } ss12; # -------------------- # Stylistic Alternates # -------------------- feature salt { lookup FigureColon; # SS12 } salt;