@sutton-signwriting/core
Version:
a javascript package for node and browsers that supports general processing of the Sutton SignWriting script
3 lines (2 loc) • 9.8 kB
JavaScript
/* Sutton SignWriting Core Module v2.0.1 (https://github.com/sutton-signwriting/core), author: Steve Slevinski (https://SteveSlevinski.me), license: MIT */
let t={null:"S00000",symbol:"S[123][0-9a-f]{2}[0-5][0-9a-f]",coord:"[0-9]{3}x[0-9]{3}",sort:"A",box:"[BLMR]"};t.nullorsymbol=`(?:${t.null}|${t.symbol})`,t.prefix=`(?:${t.sort}${t.nullorsymbol}+)`,t.spatial=`${t.symbol}${t.coord}`,t.signbox=`${t.box}${t.coord}(?:${t.spatial})*`,t.sign=`${t.prefix}?${t.signbox}`,t.sortable=`${t.prefix}${t.signbox}`;let r={null:"",symbol:"(?:(?:\ud8c0[\udc01-\udfff])|(?:[\ud8c1-\ud8fc][\udc00-\udfff])|(?:\ud8fd[\udc00-\udc80]))",coord:"(?:\ud836[\udc0c-\uddff]){2}",sort:"𝠀",box:"\ud836[\udc01-\udc04]"};r.nullorsymbol=`(?:${r.null}|${r.symbol})`,r.prefix=`(?:${r.sort}(?:${r.nullorsymbol})+)`,r.spatial=`${r.symbol}${r.coord}`,r.signbox=`${r.box}${r.coord}(?:${r.spatial})*`,r.sign=`${r.prefix}?${r.signbox}`,r.sortable=`${r.prefix}${r.signbox}`;const n=["101011","101021","101031","101041","101051","101061","101071","101081","101091","101101","101111","101121","101131","101141","102011","102021","102031","102041","102051","102061","102071","102081","102091","102101","102111","102121","102131","102141","102151","102161","103011","103021","103031","103041","103051","103061","103071","103081","103091","103101","103111","103121","103131","103141","103151","103161","103171","103181","103191","103201","103211","103221","103231","103241","103251","103261","103271","103281","103291","103301","103311","103321","103331","103341","103351","103361","103371","103381","104011","104021","104031","104041","104051","104061","104071","104081","105011","105021","105031","105041","105051","105061","105071","105081","105091","105101","105111","105121","105131","105141","105151","105161","105171","105181","105191","105201","105211","105221","105231","105241","105251","105261","105271","105281","105291","105301","105311","105321","105331","105341","105351","105361","105371","105381","105391","105401","105411","105421","105431","105441","105451","105461","105471","105481","105491","105501","105511","105521","105531","105541","105551","105561","105571","105581","106011","106021","106031","106041","106051","106061","106071","106081","106091","106101","106111","106121","106131","106141","106151","106161","106171","106181","106191","106201","106211","106221","106231","106241","106251","106261","106271","106281","106291","106301","107011","107021","107031","107041","107051","107061","107071","107081","107091","107101","107111","107121","107131","107141","107151","107161","107171","107181","107191","107201","107211","107221","108011","108021","108031","108041","108051","108061","108071","108081","108091","108101","108111","108121","108131","108141","108151","108161","108171","108181","108191","109011","109021","109031","109041","109051","109061","109071","109081","109091","109101","109111","109121","109131","109141","109151","109161","109171","109181","109191","109201","109211","109221","109231","109241","109251","109261","109271","109281","109291","109301","109311","109321","109331","109341","109351","109361","109371","109381","109391","109401","110011","110021","110031","110041","110051","110061","110071","110081","110091","110101","110111","110121","110131","110141","110151","110161","201011","201021","201031","201041","201051","201061","201071","201081","201091","201101","201111","201121","201131","201141","201151","201161","201171","202011","202012","202021","202022","202031","202041","202042","202051","202052","202061","202071","202081","202082","202091","202092","202101","202102","202111","202121","202131","203011","203012","203013","203014","203015","203021","203022","203031","203032","203041","203051","203052","203061","203062","203071","203072","203073","203081","203082","203083","203084","203091","203092","203093","203101","203102","203103","203111","203112","203113","203121","203122","203123","203131","203141","203151","203161","203171","203181","203191","203201","203202","203203","204011","204012","204013","204014","204021","204022","204023","204024","204031","204032","204033","204034","204041","204042","204043","204044","205011","205012","205013","205014","205015","205021","205022","205031","205032","205041","205051","205052","205061","205062","205071","205081","205082","205083","205091","205101","205102","205103","205111","205112","205113","205121","205122","205123","205131","205141","205151","205161","205171","205181","205191","206011","206012","206013","206014","206021","206022","206023","206024","206031","206032","206041","206042","206043","206051","206052","206053","206054","206061","206062","206063","206064","206065","206066","206071","206072","206073","206081","206091","206101","206111","207011","207021","207031","207041","207051","207061","207071","207091","207101","207111","207121","207131","207141","207151","207161","207162","207163","208011","208012","208021","208022","208023","208024","208031","208032","208033","208034","208041","208042","208051","208061","208071","208081","208082","208091","208092","208093","208094","208101","208102","208103","208104","208111","208112","208121","208131","208141","209011","209012","209013","209014","209015","209021","209031","209041","209042","209043","209051","209061","209071","209081","210011","210012","210021","210022","210031","210032","210033","210041","210042","210043","210051","210052","210061","210062","210071","210072","210073","210074","210081","210082","301011","301021","301031","301032","301041","301042","301043","301044","401011","401021","401031","401041","401051","401061","401071","401081","401091","401101","401102","402011","402012","402013","402021","402022","402023","402024","402031","402032","402033","402041","402042","402043","402044","402045","402051","402052","402053","402054","402055","402061","402062","402063","402071","402072","402073","402081","402082","402083","402091","402101","402111","403011","403012","403013","403021","403022","403023","403031","403041","403042","403043","403044","403051","403052","403061","403062","403071","403072","404011","404012","404013","404021","404022","404023","404031","404032","404033","404041","404042","404043","404051","404052","404053","404061","404062","404063","404071","404072","404073","404081","404082","404083","404091","404092","404093","404101","404111","404112","405011","405012","405013","405014","405015","405021","405031","405041","405051","405052","405061","405062","405071","405072","405081","405091","405101","405111","405121","405131","501011","501021","501031","501041","501051","501061","501071","501081","501091","502011","502021","502022","502023","502024","502031","502032","502033","502041","601011","601012","601021","601031","601041","601051","601061","601071","701011","701012","701021","701022","701031"],e=t=>({"𝠀":"A","𝠁":"B","𝠂":"L","𝠃":"M","𝠄":"R"}[t]),o=t=>({A:"𝠀",B:"𝠁",L:"𝠂",M:"𝠃",R:"𝠄"}[t]),c=t=>parseInt(t.codePointAt(0))-120844+250,s=t=>String.fromCodePoint(120844+parseInt(t)-250),a=t=>[c(t.slice(0,2)),c(t.slice(2,4))],i=t=>t.map((t=>s(t))).join(""),l=t=>t.split("x").map((t=>parseInt(t))),p=t=>t.join("x"),d=t=>parseInt(t.codePointAt(0)),u=t=>String.fromCodePoint(t),f=t=>d(t)-262144,$=t=>u(t+262144),g=t=>"S00000"===t?0:1+96*(parseInt(t.slice(1,4),16)-256)+16*parseInt(t.slice(4,5),16)+parseInt(t.slice(5,6),16),x=t=>{if(0===t)return"S00000";const r=t-1,n=parseInt(r/96),e=parseInt((r-96*n)/16),o=parseInt(r-96*n-16*e);return"S"+(n+256).toString(16)+e.toString(16)+o.toString(16)},h=t=>{if(""===t)return"S00000";const r=d(t)-262145,n=parseInt(r/96),e=parseInt((r-96*n)/16),o=parseInt(r-96*n-16*e);return"S"+(n+256).toString(16)+e.toString(16)+o.toString(16)},m=t=>u("S00000"===t?262144:262145+96*(parseInt(t.slice(1,4),16)-256)+16*parseInt(t.slice(4,5),16)+parseInt(t.slice(5,6),16)),b=t=>{if(!t)return"";let n=t.replace(/𝠀/g,"A").replace(/𝠁/g,"B").replace(/𝠂/g,"L").replace(/𝠃/g,"M").replace(/𝠄/g,"R");const e=n.match(new RegExp(r.nullorsymbol,"g"));e&&e.forEach((function(t){n=n.replace(t,h(t))}));const o=n.match(new RegExp(r.coord,"g"));return o&&o.forEach((function(t){n=n.replace(t,a(t).join("x"))})),n},S=r=>{if(!r)return"";const n=r.match(new RegExp(t.prefix,"g"));n&&n.forEach((function(t){r=r.replace(t,"𝠀"+t.slice(1).match(/.{6}/g).map((t=>m(t))).join(""))}));const e=r.match(new RegExp(t.box+t.coord,"g"));e&&e.forEach((function(t){r=r.replace(t,o(t.slice(0,1))+i(l(t.slice(1,8))))}));const c=r.match(new RegExp(t.spatial,"g"));return c&&c.forEach((function(t){r=r.replace(t,m(t.slice(0,6))+i(l(t.slice(6,13))))})),r},I=t=>{if(!/^\d{6}(?:\d{3})?$/.test(t))return"";let r=`0${t.charAt(0)}-${t.charAt(1)}${t.charAt(2)}-0${t.charAt(3)}${t.charAt(4)}-0${t.charAt(5)}`;return t.length>6&&(r+=`-0${t.charAt(6)}-${t.charAt(7)}${t.charAt(8)}`),r},A=t=>{const r=t.match(/^0(\d)-(\d{2})-0(\d{2})-0(\d)(?:-0(\d)-(\d{2}))?$/);return r?r[5]?r[1]+r[2]+r[3]+r[4]+r[5]+r[6]:r[1]+r[2]+r[3]+r[4]:""},y=t=>{const r=t.match(/^0(\d)-(\d{2})-0(\d{2})-0(\d)(?:-0(\d)-(\d{2}))?$/);if(!r)return"";const e=r[1]+r[2]+r[3]+r[4],o=n.indexOf(e);return-1===o?"":r[5]?"S"+(256+o).toString(16)+(parseInt(r[5],10)-1)+(parseInt(r[6],10)-1).toString(16):"S"+(256+o).toString(16)},E=t=>{const r=t.match(/^S([1-3][0-9a-f]{2})(?:([0-5])([0-9a-f]))?$/);if(!r)return"";const e=parseInt(r[1],16)-256;return e>=n.length?"":r[3]?I(n[e])+"-0"+(1+parseInt(r[2]))+"-"+(parseInt(r[3],16)+1).toString().padStart(2,"0"):I(n[e])};export{u as code2swu,p as coord2fsw,i as coord2swu,l as fsw2coord,S as fsw2swu,x as id2key,$ as id2swu,g as key2id,m as key2swu,E as key2symid,o as mark2swu,s as num2swu,d as swu2code,a as swu2coord,b as swu2fsw,f as swu2id,h as swu2key,e as swu2mark,c as swu2num,y as symid2key,n as symidArr,I as symidMax,A as symidMin};