rita 3.1.0 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/rita.cjs +1 -1
- package/dist/rita.cjs.map +1 -1
- package/dist/rita.js +1 -1
- package/dist/rita.js.map +1 -1
- package/dist/rita.min.js +3 -3
- package/dist/rita.min.js.map +1 -1
- package/package.json +1 -1
package/dist/rita.min.js
CHANGED
|
@@ -135,19 +135,19 @@ Make sure that all grammar rule definitions are done before 'performSelfAnalysis
|
|
|
135
135
|
`+this.errors[0].message);return n}buildRules(){let a=this,n=this.tokensMap;a.RULE("script",()=>{a.MANY(()=>a.SUBRULE(a.expr))}),a.RULE("expr",()=>{a.AT_LEAST_ONE(()=>a.SUBRULE(a.atom))}),a.RULE("atom",()=>{a.OR(this.atomTypes.map(e=>({ALT:()=>a.SUBRULE(a[e])})))}),a.RULE("wexpr",()=>{a.MANY(()=>{a.OR([{ALT:()=>a.SUBRULE(a.expr)},{ALT:()=>a.CONSUME(n.Weight)}])})}),a.RULE("symbol",()=>{a.CONSUME(n.Symbol),a.MANY(()=>a.CONSUME(n.Transform))}),a.RULE("choice",()=>{a.CONSUME(n.OC),a.OPTION1(()=>a.SUBRULE(a.gate)),a.SUBRULE(a.orExpr),a.OPTION2(()=>{a.SUBRULE2(a.elseExpr)}),a.CONSUME(n.CC),a.MANY(()=>a.CONSUME(n.Transform))}),a.RULE("assign",()=>{a.CONSUME(n.Symbol),a.CONSUME(n.EQ),a.SUBRULE(a.expr)}),a.RULE("silent",()=>{a.CONSUME(n.OS),a.OPTION1(()=>a.SUBRULE(a.gate)),a.CONSUME(n.Symbol),a.OPTION2(()=>{a.CONSUME(n.EQ),a.SUBRULE(a.expr)}),a.CONSUME(n.CS)}),a.RULE("orExpr",()=>{a.MANY_SEP({SEP:n.OR,DEF:()=>a.SUBRULE(a.wexpr)})}),a.RULE("elseExpr",()=>{a.CONSUME(n.ELSE),a.SUBRULE(a.orExpr)}),a.RULE("pgate",()=>{a.CONSUME(n.PendingGate)}),a.RULE("entity",()=>{a.CONSUME(n.Entity)}),a.RULE("gate",()=>{a.MANY(()=>a.CONSUME(n.Gate))}),a.RULE("text",()=>{a.OR(this.textTypes.map(e=>({ALT:()=>a.CONSUME(n[e])})))}),this.performSelfAnalysis()}},Up=class Hn{static formatAny(n){if(typeof n=="string")return`'${n}'`;if(typeof n=="number")return n;if(typeof n=="function")throw Error("unexpected function");return JSON.stringify(n).replace(/"/g,"")}static transformNames(n){return n&&n.length?n.map(e=>e.image.replace(/(^\.|\(\)$)/g,""),[]):[]}static escapeText(n,e){if(typeof n!="string")return Hn.formatAny(n);let r=n.replace(/\r?\n/g,"\\n");return e||!r.length?"'"+r+"'":r}static stringHash(n){let e,r=0;for(let i=0;i<n.length;i++)e=n.charCodeAt(i),r=(r<<5)-r+e,r|=0;let t=r.toString().padStart(9,"0");return r<0?t.replace("-","0"):t}static escapeMarkdownLink(n){let e=n;return Object.entries({"[":"[","]":"]","(":"(",")":")","/":"/"}).forEach(([t,i])=>e=e.replace(new RegExp(`\\${t}`,"g"),i)),e}static slashEscToEntities(n){return n=Hn.replaceAll(n,"\\(","("),n=Hn.replaceAll(n,"\\)",")"),n=Hn.replaceAll(n,"\\[","["),n=Hn.replaceAll(n,"\\]","]"),n=Hn.replaceAll(n,"\\{","&lcqb;"),n=Hn.replaceAll(n,"\\}","&rcqb;"),n=Hn.replaceAll(n,"\\@","@"),n=Hn.replaceAll(n,"\\#","#"),n=Hn.replaceAll(n,"\\|"," &vert"),n=Hn.replaceAll(n,"\\="," &equals"),n}static escapeJSONRegex(n){return n.replace(/\/([^/]+?)\/([igmsuy]*)/g,`"${Hn.RegexEscape}$1${Hn.RegexEscape}$2${Hn.RegexEscape}"`)}static escapeRegExp(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}static replaceAll(n,e,r){return n.replace(new RegExp(Hn.escapeRegExp(e),"g"),()=>r)}};Rt(Up,"RegexEscape","_RE_");var Ph=Up,{escapeText:Fp,stringHash:s3,formatAny:_t,transformNames:o3}=Ph,l3=class{constructor(a){this.input="",this.nowarn=!1,this.tracePath=!0,this.scripting=a,this.warnOnInvalidGates=!1,this.maxRecursionDepth=10}textFromCstNode(a){return Array.isArray(a)&&(a=a[0]),this.input.substring(a.location.startOffset,a.location.endOffset+1)}isCstNode(a){return Array.isArray(a)&&(a=a[0]),typeof a=="object"&&("accept"in a||"name"in a&&"location"in a&&"children"in a)}visit(a,n){if(Array.isArray(a)&&(a=a[0]),typeof a>"u")return;if(!this.isCstNode(a))throw Error("Non-cstNode passed to visit: "+JSON.stringify(a));this.nodeText=this.textFromCstNode(a);let e=a.name;if(typeof this[e]!="function")throw Error(`BaseVisitor.visit: expecting function for this[${e}], found ${typeof this[e]}: ${JSON.stringify(this[e])}`);return this[e](a.children,n)}validateVisitor(){}},js=class extends l3{constructor(a,n={}){super(a),this.order=0,this.trace=0,this.indent=0,this.choices={},this.context=n,this.isNoRepeat=!1,this.Symbols=this.scripting.Symbols,this.Escaped=this.scripting.Escaped,this.statics={},this.dynamics={},this.pendingGates={},this.validateVisitor()}start(a={}){if(this.input=a.input,this.trace=a.trace,this.nowarn=a.silent,this.traceTx=a.traceTx,!a.cst)throw Error("no cst");return super.visit(a.cst)}script(a){if(this.order=this.indent=0,Object.keys(a).length!==1)throw Error("script: invalid expr");let n=a.expr[0].children.atom.length;if(this.print("script",`'${Fp(this.input)}' :: ${n} atom(s)`),!n)return"";this.indent++;let e=this.visit(a.expr);return this.indent--,this.print("/script"),e}expr(a){let n=Object.keys(a);if(n.length!==1)throw Error("invalid expr: "+n.length);let e=a.atom.map(r=>this.visit(r));if(e.length===1)return e[0];for(let r=1;r<e.length-1;r++)e[r].length===0&&e[r-1].endsWith(" ")&&e[r+1].startsWith(" ")&&(e[r+1]=e[r+1].substring(1));return e.join("")}atom(a){let n,e=Object.keys(a);if(e.length!==1)throw Error("invalid atom: "+e);return this.scripting.parser.atomTypes.forEach(r=>{if(a[r]){if(a[r].length!==1)throw Error(r+": bad length -> "+a[r].length);n=this.visit(a[r][0]),typeof n=="function"&&(n=n.call())}}),n}silent(a){return this.print("silent",this.nodeText),this.indent++,a.EQ?this.assign(a,{silent:!0}):this.symbol(a,{silent:!0}),this.indent--,this.print("/silent","statics="+_t(this.statics)),""}assign(a,n){let e=a.Symbol[0].image,r=this.nodeText,t=e.replace(this.scripting.regex.AnySymbol,""),i=e.startsWith(this.Symbols.STATIC),h=n?.silent,s=`${r} ${i&&h?"{#static,silent}":(i?"{#static}":"")+(h?"{silent}":"")}`;this.print("assign",s);let o;if(i)t in this.statics&&!this.scripting.isParseable(this.statics[t])?(o=this.statics[t],s=`${e} = ${_t(o)} {#resolved}`):(this.indent++,o=this.visit(a.expr),this.indent--,this.statics[t]=o,typeof o=="string"&&this.scripting.isParseable(o)&&(o=this.inlineStaticAssign(t,a.Transform,o)),s=`${e} = ${_t(o)}`),this.print("/assign",s);else{let u=this;this.indent++,o=()=>u.visit(a.expr),this.indent--,this.dynamics[t]=o,this.print("/assign",`${e} = <f*:pending>`)}return o}symbol(a,n){if(a.Symbol.length!==1)throw Error("[1] invalid symbol");let e=n?.silent,r=this.nodeText,t=a.Symbol[0].image.replace(/\(\)$/,""),i=t.replace(this.scripting.regex.AnySymbol,"");this.isNoRepeat=this.hasNoRepeat(a.Transform),this.print("symbol",`${r} ${e?" {silent}":""}`);let{result:h,isStatic:s,isUser:o,resolved:u}=this.checkContext(i);if(!s&&this.scripting.regex.StaticSymbol.test(t)&&!this.scripting.regex.Entity.test(t))throw Error(`Attempt to refer to dynamic symbol '${i}' as ${this.Symbols.STATIC}${i}, did you mean $${i}?`);for(let p=0;typeof h=="function";p++)if(h=h.call(),u=!this.scripting.isParseable(h),p===this.maxRecursionDepth)throw Error("Max recursion depth reached");if(this.isNoRepeat&&(s||o)){this.isNoRepeat=!1;let p="Attempt to call norepeat() on "+(s?"static symbol '"+t+"'. Did you mean to use '"+this.Symbols.DYNAMIC+i+"' ?":"non-dynamic symbol '"+i+"'. Did you mean to define '"+this.Symbols.DYNAMIC+i+"' in riscript?");throw Error(p)}if(typeof h>"u")return this.print("/symbol",t+" -> '"+r+"' ctx="+this.lookupsToString(),"[deferred]",n?.silent?"{silent}":""),r;let d=n?.trace?`${r.replace(/\(\)$/,"")} -> ${_t(h)}`+(n?.silent?" {silent}":""):null;return typeof h=="string"&&!u?(s?(h=this.inlineStaticAssign(i,a.Transform,h),this.print("/symbol",`${r} -> ${h}`)):(a.Transform&&(h=this.restoreTransforms(h,a.Transform)),this.print("/symbol",d)),h):(s&&(this.statics[i]=h),a.Transform?(h=this.applyTransforms(h,a.Transform),d+="-> '"+h+"'",this.isNoRepeat&&(d+=" (norepeat)")):h.length===0&&t.length===1&&(h=t,d="** $ **"),this.print("/symbol",d),this.isNoRepeat=!1,h)}choice(a,n){let e=this.Symbols,r=this.nodeText,t=s3(r+" #"+this.choiceId(a)),i,h,s=a.Transform;if(!this.isNoRepeat&&this.hasNoRepeat(a.Transform))throw Error("noRepeat() not allowed on choice (use a $variable instead): "+r);this.print("choice",r);let o="accept";if(n?.forceReject)o="reject";else{let m=a?.gate?.[0]?.children?.Gate;if(m){i=m[0].image,this.indent++,h=this.visit(a.gate),this.indent--,o=h.decision;let v=`${i} -> ${o!=="defer"?o.toUpperCase():`DEFER ${e.PENDING_GATE}${t}`} ${this.lookupsToString()}`;this.print("gate",v)}if(h&&h.decision==="defer")return this.pendingGates[t]={gateText:i,deferredContext:a,operands:h.operands},`${e.PENDING_GATE}${t}`}let u=a?.orExpr[0];if(o==="reject"){if(!("elseExpr"in a))return"";u=a.elseExpr[0].children.orExpr[0]}let d=this.parseOptions(u);if(!d)throw Error("No options in choice: "+r);let p=null,b=[],y=!1;for(;p===null;){p=this.choose(d,b);for(let m=0;this.isCstNode(p);m++)if(this.indent++,p=this.visit(p),this.indent--,m===this.maxRecursionDepth)throw Error("Max recursion depth reached");if(typeof p=="string"?p=p.trim():typeof p!="number"&&(a.Transform&&(p=this.applyTransforms(p,a.Transform)),s=!1),this.scripting.isParseable(p)){a.Transform&&(p=this.restoreTransforms(p,a.Transform)),y=!0;break}if(s&&(p=this.applyTransforms(p,a.Transform)),this.isNoRepeat&&p===this.choices[t]){this.print("choice-reject",p+" [norepeat]"),b.push(p),p=null;continue}}return y||(this.choices[t]=p),this.print("choice/",r+" -> '"+p+"'"),p}choose(a,n=[]){if(!a||!a.length)throw Error("Invalid choice: no options");let e=a.filter(i=>!n.includes(i));if(!e.length)throw Error("Invalid choice: no valid options");let r=this.scripting.RiTa.randi(e.length);return e[r]}text(a){if(Object.keys(a).length!==1)throw Error("[2] invalid text");let n=this.scripting.textTypes.filter(r=>a[r]),e=a[n][0].image;return this.print("text/",Fp("'"+e+"'")),e}entity(a){return this.nodeText}gate(a){if(a.Gate.length!==1)throw Error("Invalid gate: "+a.Gate);let n=a.Gate[0].image,e;n.startsWith(this.Symbols.OPEN_GATE)&&(n=n.substring(1));try{e=this.scripting.createQuery(n)}catch(s){if(!this.warnOnInvalidGates)throw Error(`Invalid gate[2]: "@${n}"
|
|
136
136
|
|
|
137
137
|
RootCause -> ${s}`);return!this.scripting.RiTa.SILENT&&!this.nowarn&&console.warn(`[WARN] Ignoring invalid gate: @${n}@
|
|
138
|
-
`,s),{decision:"accept"}}let r={},t=[],i=e.operands();if(i.forEach(s=>{let{result:o,resolved:u,isStatic:d,isUser:p}=this.checkContext(s);for(let b=0;typeof o=="function";b++)if(o=o.call(),u=!this.scripting.isParseable(o),b===this.maxRecursionDepth)throw Error("Max recursion depth reached");typeof o>"u"||!u?t.push(s):(d?this.statics[s]=o:p?this.context[s]=o:this.dynamics[s]=o,r[s]=o)}),Object.keys(r).length+t.length!==i.length)throw Error("invalid operands");if(t.length)return{decision:"defer",operands:t};let h=e.test(r);return!h&&this.castValues(r)&&(h=e.test(r)),{decision:h?"accept":"reject"}}pgate(a){this.print("pgate",this.nodeText);let n=this.nodeText,e=n.replace(this.Symbols.PENDING_GATE,""),r=this.pendingGates[e];if(!r)throw Error('no pending gate="'+n+'" pgates='+JSON.stringify(Object.keys(this.pendingGates)));return r.operands.some(i=>{let{result:h,resolved:s}=this.checkContext(i);return typeof h=="function"&&(h=h.call(),s=!this.scripting.isParseable(h)),typeof h>"u"||!s})?n:this.choice(r.deferredContext)}else(a){return this.visit(a.expr).trim()}hasNoRepeat(a){let n=o3(a);return n.length?n.includes("nr")||n.includes("norepeat"):!1}checkContext(a,n={}){let e=!1,r=!1,t;if(a.length===0)return{result:"",resolved:!0,isStatic:e,isUser:r};t=this.dynamics[a],typeof t>"u"&&(t=this.statics[a],typeof t<"u"&&(e=!0)),typeof t>"u"&&(t=this.context[a],typeof t<"u"&&(r=!0)),typeof t>"u"&&(t=this.scripting.transforms[a]);let i=!this.scripting.isParseable(t);return{result:t,isStatic:e,isUser:r,resolved:i}}inlineStaticAssign(a,n,e){let r=this.Symbols,t=r.STATIC+a,i=e,h=r.OPEN_CHOICE+(t+"="+i)+r.CLOSE_CHOICE;return e=this.restoreTransforms(h,n),e}choiceId(a){if(!a.OC||!a.OC.length)throw Error("invalid choice");return a.OC[0].startOffset+"."+a.OC[0].endOffset}parseOptions(a){let n=[];if(a&&a?.children?.wexpr){let e=a.children.wexpr;for(let r=0;r<e.length;r++){let t=e[r],i=t.children.expr;if(i&&i.length!=1)throw Error("invalid choice-expr: "+i.length);let h=t.children.Weight;if(h){if(h.length!=1)throw Error("invalid weight: "+h.length);let s=1;try{s=parseInt(this.Symbols.CLOSE_WEIGHT.length?h[0].image.trim().slice(1,-1):h[0].image.trim().slice(1))}catch{console.log("EX: "+s)}Array.from({length:s},()=>n.push(i))}else n.push(i||"")}}return n}applyTransforms(a,n){this.indent++,this.traceTx&&console.log("applyTransforms",this.formatTxs(...arguments));for(let e=0;e<n.length;e++)a=this.applyTransform(a,n[e]);return this.indent--,a}applyTransform(a,n){let e=n.image,r=a+e,t=_t(a)+e,i=e.substring(1).replace(/\(\)$/,""),h=this.scripting.RiTa,s;return typeof this.dynamics[i]=="function"?s=this.dynamics[i].bind(this.context)(a):typeof this.statics[i]=="function"?s=this.statics[i].call(this.context,a):typeof this.context[i]=="function"?s=this.context[i].call(this.context,a):typeof this.scripting.transforms[i]=="function"?s=this.scripting.transforms[i].call(this.context,a):typeof a[i]=="function"?s=a[i]():a.hasOwnProperty(i)?s=a[i]:(!h.SILENT&&!this.silent&&console.warn("[WARN] Unresolved transform: "+r),s=r.replace(/\(\)$/,"()")),this.print("transform/",`${t} -> '${s}'`),s}restoreTransforms(a,n){if(typeof a=="string"){let e=new RegExp("^"+this.Escaped.OPEN_CHOICE+".*"+this.Escaped.CLOSE_CHOICE+"$"),r=new RegExp(`(${this.Escaped.DYNAMIC}|${this.Escaped.STATIC}[A-Za-z_0-9])[A-Za-z_0-9]*`);!e.test(a)&&!r.test(a)&&(a=this.Symbols.OPEN_CHOICE+a+this.Symbols.CLOSE_CHOICE),n&&n.forEach(t=>a+=t.image),this.traceTx&&console.log("restoreTransforms:",a)}return a}castValues(a){let n=!1;return Object.entries(a).forEach(([e,r])=>{let t=parseFloat(r);isNaN(t)||(n=!0,a[e]=t)}),n}contextIsResolved(a){let n=!0;return Object.entries(a).forEach(([e,r])=>{this.scripting.isParseable(r)||(n=!1)}),n}lookupsToString(){let a={},n={};return Object.entries(this.dynamics||{}).forEach(([e,r])=>a[`$${e}`]=r),Object.entries(this.statics||{}).forEach(([e,r])=>n[`#${e}`]=r),JSON.stringify({...this.context,...n,...a},(e,r)=>typeof r=="function"?"<f*:pending>":r).replace(/"/g,"")}formatTxs(a,n){return a+n.map(e=>e.image.replace(/()/,"")+"()").join("")}print(a,...n){if(this.trace){let r=`${" ".repeat(this.indent)}<${a}>${a.startsWith("/")?"":" "}`;++this.order<10&&(r=" "+r),console.log(this.order,r,...n)}}};function u3(a){let n={OR:"|",ELSE:"||",DYNAMIC:"$",STATIC:"#",ENTITY:"&",OPEN_GATE:"@",PENDING_GATE:"@@",OPEN_SILENT:"{",CLOSE_SILENT:"}"};Object.assign(n,a?{OPEN_CHOICE:"(",CLOSE_CHOICE:")",OPEN_WEIGHT:"[",CLOSE_WEIGHT:"]",CONTINUATION:"\\"}:{OPEN_CHOICE:"[",CLOSE_CHOICE:"]",OPEN_WEIGHT:"^",CLOSE_WEIGHT:"^",CONTINUATION:"~"});let t={};Object.entries(n).forEach(([Q,V])=>{t[Q]=p3(V)});let i=/&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-fA-F]{1,6});/i,h=new RegExp(`${t.PENDING_GATE}([0-9]{9,11})`);t.SPECIAL=Object.values(t).join("").replace(/[<>@]/g,"");let s=fn({name:"DYN",pattern:new RegExp(t.DYNAMIC)}),o=fn({name:"STAT",pattern:new RegExp(t.STATIC)}),u=fn({name:"OC",pattern:new RegExp(t.OPEN_CHOICE+"\\s*")}),d=fn({name:"CC",pattern:new RegExp(`\\s*${t.CLOSE_CHOICE}`)}),p=fn({name:"OS",pattern:new RegExp(`${t.OPEN_SILENT}\\s*`)}),b=fn({name:"CS",pattern:new RegExp(`\\s*${t.CLOSE_SILENT}`)}),y=fn({name:"ELSE",pattern:/\s*\|\|\s*/}),m=fn({name:"OR",pattern:/\s*\|\s*/}),v=fn({name:"EQ",pattern:/\s*=\s*/}),A=fn({name:"AMP",pattern:/&/}),w=fn({name:"Symbol",pattern:new RegExp(`(${t.DYNAMIC}|${t.STATIC}[A-Za-z_0-9])[A-Za-z_0-9]*(\\(\\))?`)}),g=fn({name:"Transform",pattern:/\.[A-Za-z_0-9][A-Za-z_0-9]*(\(\))?/}),S=fn({name:"Entity",pattern:i}),N=fn({name:"Weight",pattern:new RegExp(`\\s*${t.OPEN_WEIGHT}
|
|
138
|
+
`,s),{decision:"accept"}}let r={},t=[],i=e.operands();if(i.forEach(s=>{let{result:o,resolved:u,isStatic:d,isUser:p}=this.checkContext(s);for(let b=0;typeof o=="function";b++)if(o=o.call(),u=!this.scripting.isParseable(o),b===this.maxRecursionDepth)throw Error("Max recursion depth reached");typeof o>"u"||!u?t.push(s):(d?this.statics[s]=o:p?this.context[s]=o:this.dynamics[s]=o,r[s]=o)}),Object.keys(r).length+t.length!==i.length)throw Error("invalid operands");if(t.length)return{decision:"defer",operands:t};let h=e.test(r);return!h&&this.castValues(r)&&(h=e.test(r)),{decision:h?"accept":"reject"}}pgate(a){this.print("pgate",this.nodeText);let n=this.nodeText,e=n.replace(this.Symbols.PENDING_GATE,""),r=this.pendingGates[e];if(!r)throw Error('no pending gate="'+n+'" pgates='+JSON.stringify(Object.keys(this.pendingGates)));return r.operands.some(i=>{let{result:h,resolved:s}=this.checkContext(i);return typeof h=="function"&&(h=h.call(),s=!this.scripting.isParseable(h)),typeof h>"u"||!s})?n:this.choice(r.deferredContext)}else(a){return this.visit(a.expr).trim()}hasNoRepeat(a){let n=o3(a);return n.length?n.includes("nr")||n.includes("norepeat"):!1}checkContext(a,n={}){let e=!1,r=!1,t;if(a.length===0)return{result:"",resolved:!0,isStatic:e,isUser:r};t=this.dynamics[a],typeof t>"u"&&(t=this.statics[a],typeof t<"u"&&(e=!0)),typeof t>"u"&&(t=this.context[a],typeof t<"u"&&(r=!0)),typeof t>"u"&&(t=this.scripting.transforms[a]);let i=!this.scripting.isParseable(t);return{result:t,isStatic:e,isUser:r,resolved:i}}inlineStaticAssign(a,n,e){let r=this.Symbols,t=r.STATIC+a,i=e,h=r.OPEN_CHOICE+(t+"="+i)+r.CLOSE_CHOICE;return e=this.restoreTransforms(h,n),e}choiceId(a){if(!a.OC||!a.OC.length)throw Error("invalid choice");return a.OC[0].startOffset+"."+a.OC[0].endOffset}parseOptions(a){let n=[];if(a&&a?.children?.wexpr){let e=a.children.wexpr;for(let r=0;r<e.length;r++){let t=e[r],i=t.children.expr;if(i&&i.length!=1)throw Error("invalid choice-expr: "+i.length);let h=t.children.Weight;if(h){if(h.length!=1)throw Error("invalid weight: "+h.length);let s=1;try{s=parseInt(this.Symbols.CLOSE_WEIGHT.length?h[0].image.trim().slice(1,-1):h[0].image.trim().slice(1))}catch{console.log("EX: "+s)}Array.from({length:s},()=>n.push(i))}else n.push(i||"")}}return n}applyTransforms(a,n){this.indent++,this.traceTx&&console.log("applyTransforms",this.formatTxs(...arguments));for(let e=0;e<n.length;e++)a=this.applyTransform(a,n[e]);return this.indent--,a}applyTransform(a,n){let e=n.image,r=a+e,t=_t(a)+e,i=e.substring(1).replace(/\(\)$/,""),h=this.scripting.RiTa,s;return typeof this.dynamics[i]=="function"?s=this.dynamics[i].bind(this.context)(a):typeof this.statics[i]=="function"?s=this.statics[i].call(this.context,a):typeof this.context[i]=="function"?s=this.context[i].call(this.context,a):typeof this.scripting.transforms[i]=="function"?s=this.scripting.transforms[i].call(this.context,a):typeof a[i]=="function"?s=a[i]():a.hasOwnProperty(i)?s=a[i]:(!h.SILENT&&!this.silent&&console.warn("[WARN] Unresolved transform: "+r),s=r.replace(/\(\)$/,"()")),this.print("transform/",`${t} -> '${s}'`),s}restoreTransforms(a,n){if(typeof a=="string"){let e=new RegExp("^"+this.Escaped.OPEN_CHOICE+".*"+this.Escaped.CLOSE_CHOICE+"$"),r=new RegExp(`(${this.Escaped.DYNAMIC}|${this.Escaped.STATIC}[A-Za-z_0-9])[A-Za-z_0-9]*`);!e.test(a)&&!r.test(a)&&(a=this.Symbols.OPEN_CHOICE+a+this.Symbols.CLOSE_CHOICE),n&&n.forEach(t=>a+=t.image),this.traceTx&&console.log("restoreTransforms:",a)}return a}castValues(a){let n=!1;return Object.entries(a).forEach(([e,r])=>{let t=parseFloat(r);isNaN(t)||(n=!0,a[e]=t)}),n}contextIsResolved(a){let n=!0;return Object.entries(a).forEach(([e,r])=>{this.scripting.isParseable(r)||(n=!1)}),n}lookupsToString(){let a={},n={};return Object.entries(this.dynamics||{}).forEach(([e,r])=>a[`$${e}`]=r),Object.entries(this.statics||{}).forEach(([e,r])=>n[`#${e}`]=r),JSON.stringify({...this.context,...n,...a},(e,r)=>typeof r=="function"?"<f*:pending>":r).replace(/"/g,"")}formatTxs(a,n){return a+n.map(e=>e.image.replace(/()/,"")+"()").join("")}print(a,...n){if(this.trace){let r=`${" ".repeat(this.indent)}<${a}>${a.startsWith("/")?"":" "}`;++this.order<10&&(r=" "+r),console.log(this.order,r,...n)}}};function u3(a){let n={OR:"|",ELSE:"||",DYNAMIC:"$",STATIC:"#",ENTITY:"&",OPEN_GATE:"@",PENDING_GATE:"@@",OPEN_SILENT:"{",CLOSE_SILENT:"}"};Object.assign(n,a?{OPEN_CHOICE:"(",CLOSE_CHOICE:")",OPEN_WEIGHT:"[",CLOSE_WEIGHT:"]",CONTINUATION:"\\"}:{OPEN_CHOICE:"[",CLOSE_CHOICE:"]",OPEN_WEIGHT:"^",CLOSE_WEIGHT:"^",CONTINUATION:"~"});let t={};Object.entries(n).forEach(([Q,V])=>{t[Q]=p3(V)});let i=/&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-fA-F]{1,6});/i,h=new RegExp(`${t.PENDING_GATE}([0-9]{9,11})`);t.SPECIAL=Object.values(t).join("").replace(/[<>@]/g,"");let s=fn({name:"DYN",pattern:new RegExp(t.DYNAMIC)}),o=fn({name:"STAT",pattern:new RegExp(t.STATIC)}),u=fn({name:"OC",pattern:new RegExp(t.OPEN_CHOICE+"\\s*")}),d=fn({name:"CC",pattern:new RegExp(`\\s*${t.CLOSE_CHOICE}`)}),p=fn({name:"OS",pattern:new RegExp(`${t.OPEN_SILENT}\\s*`)}),b=fn({name:"CS",pattern:new RegExp(`\\s*${t.CLOSE_SILENT}`)}),y=fn({name:"ELSE",pattern:/\s*\|\|\s*/}),m=fn({name:"OR",pattern:/\s*\|\s*/}),v=fn({name:"EQ",pattern:/\s*=\s*/}),A=fn({name:"AMP",pattern:/&/}),w=fn({name:"Symbol",pattern:new RegExp(`(${t.DYNAMIC}|${t.STATIC}[A-Za-z_0-9])[A-Za-z_0-9]*(\\(\\))?`)}),g=fn({name:"Transform",pattern:/\.[A-Za-z_0-9][A-Za-z_0-9]*(\(\))?/}),S=fn({name:"Entity",pattern:i}),N=fn({name:"Weight",pattern:new RegExp(`\\s*${t.OPEN_WEIGHT}\\d+${t.CLOSE_WEIGHT}\\s*`)}),R=fn({name:"PendingGate",pattern:h}),D=fn({name:"Raw",pattern:new RegExp(`[^${t.SPECIAL}]+`)});return{tokens:[fn({name:"Gate",line_breaks:!0,pattern:d3}),S,N,y,u,d,m,v,w,s,o,A,g,p,b,R,D],Constants:{Symbols:n,Escaped:t}}}function d3(a,n){if(!/^@/.test(a.substring(n)))return null;let e=n+1,r=0;r&&console.log("bracketMatch",a);let t=a.charCodeAt(e);for(;t===32;)e++,t=a.charCodeAt(e);if(t!==123)return r&&console.log(` "${a.substring(n,e)}" -> null1`),null;e++,t=a.charCodeAt(e);let i=1;for(;i>0;)t===123?i++:t===125&&i--,r&&console.log(" depth",i,a.substring(n,e)),e++,t=a.charCodeAt(e);if(e===n)return r&&console.log(`"${a.substring(n,e)}" -> null3`),null;{let h=a.substring(n,e);return r&&console.log(" returned -> ",[h]),[h]}}function p3(a){return a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var Bp=["Raw","STAT","AMP"],Gp=class ms{constructor(n={},e={},r={}){if(this.rules={},this.context=e,this.scripting=r.RiTa?.riscript??new Or(r),typeof n=="string"&&(n=qp(n)),typeof n!="object")throw Error("RiGrammar: expecting object, found "+typeof n);this.setRules(n)}static expand(n,e,r){return new ms(n,e).expand(r)}addTransform(n,e){return this.scripting.addTransform(n,e),this}removeTransform(n){return this.scripting.removeTransform(n),this}getTransforms(){return this.scripting.getTransforms()}equals(n){return n.toJSON()===this.toJSON()}expand(n={}){if("context"in n)throw Error("pass context to RiScript.grammar() or new RiGrammar() instead");let e=new js(this.scripting);e.context=this.context||{};let r={...n,visitor:e,input:this._toScript(n)};return this.scripting._evaluate(r)}addRule(n,e){return this._validateRule(n,e),this.rules[n]=e,this}setRules(n){if(typeof n>"u")throw Error("undefined rules");this.rules={};let e=typeof n=="string"?qp(n):n;return Object.entries(e).forEach(r=>this.addRule(...r)),this}removeRule(n){return n in this.rules&&delete this.rules[n],this}toJSON(n,e){return JSON.stringify(this.rules,n,e)}toString(n={}){let e=n.replacer||0,r=n.space||2,t=n?.linebreak,i=this.toJSON(e,r);return t&&(i=i.replace(/\n/g,t)),i}static fromJSON(n,e){return new ms(JSON.parse(n),e)}_toScript(n){let e="",r=n.start||"start",{Symbols:t}=this.scripting;if(r.startsWith(t.DYNAMIC)&&(r=r.substring(t.DYNAMIC.length)),r.startsWith(t.STATIC)&&(r=r.substring(t.STATIC.length)),!(r in this.rules||t.STATIC+r in this.rules))throw Error('Rule: "'+r+'" not found in grammar');return Object.entries(this.rules).forEach(([i,h],s)=>{for(;i.startsWith(t.DYNAMIC);)i=i.substring(1);i.startsWith(t.STATIC)||(i=t.DYNAMIC+i),this.scripting.regex.ChoiceWrap.test(h)||(h=t.OPEN_CHOICE+h+t.CLOSE_CHOICE),e+=`${i}=${h}
|
|
139
139
|
`}),n.trace&&console.log(`Grammar:
|
|
140
140
|
`+e.replace(/^\$/gm," $")),e+=`${t.DYNAMIC}${r}`,e}_validateRule(n,e){if(typeof n!="string"||n.length===0)throw Error("expected [string] name");if(typeof e>"u")throw Error("undefined rule def: "+n);let{Symbols:r}=this.scripting;if(n.startsWith(r.DYNAMIC))throw n=n.substring(r.DYNAMIC.length),Error("Grammar rules are dynamic by default; if you need a static rule, use '"+r.STATIC+n+"', otherwise just use '"+n+"'.")}};Rt(Gp,"RiScript",null);var Fh=Gp;function qp(a){if(typeof a=="string")try{return JSON.parse(a)}catch{throw Error(`RiGrammar appears to be invalid JSON, please check it at http://jsonlint.com/
|
|
141
141
|
`+a)}}var{decode:c3}=Mp.default,b3=/[aeiou]/,y3=/&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-fA-F]{1,6});/gi,{escapeText:$h,slashEscToEntities:m3,escapeMarkdownLink:j3,escapeJSONRegex:v3}=Ph,Vp=class extends Mn{constructor(a,n,e){if(typeof n!="string")try{n=JSON.stringify(n)}catch(r){throw Error(n.toString().includes("@")?`Replace @ with $ when passing an object to RiQuery
|
|
142
142
|
Root: `+r:r)}if(!n.includes("$"))throw Error("Invalid Gate: '"+n+"' -> operand must include $symbol or $function()");n=n.replace(/(\$|\(\))/g,"").replace(/@/g,"$"),n=a.parseJSOL(n),super(n,e)}test(a){let n=this.compiled;for(let e=0,r=n.length;e<r;e++)if(!n[e](a))return!1;return!0}operands(){let a=[this.condition],n=new Set;for(;a?.length>0;){let e=a.pop();Object.keys(e).forEach(r=>{let t=e[r];r.startsWith("$")||n.add(r),typeof t=="object"&&t!==null&&(Array.isArray(t)?t:[t]).forEach(h=>a.push(h))})}return Array.from(n)}},Bh=class ue{static grammar(n,e,r){return new Fh(n,e,r)}static evaluate(n,e,r={}){return new ue(r).evaluate(n,e,r)}constructor(n={}){this.Escaped=void 0,this.Symbols=void 0,this.visitor=void 0,this.v2Compatible=n.compatibility===2;let{Constants:e,tokens:r}=u3(this.v2Compatible);({Escaped:this.Escaped,Symbols:this.Symbols}=e),this.pendingGateRe=new RegExp(`${this.Escaped.PENDING_GATE}([0-9]{9,11})`,"g"),this.textTypes=Bp,this.RiTa=n.RiTa||{VERSION:0,randi:t=>Math.floor(Math.random()*t)},this.transforms=this._createTransforms(),this.regex=this._createRegexes(r),this.lexer=new Rn(r),this.parser=new h3(r,Bp)}lex(n){if(!n.input)throw Error("no input");let e=this.lexer.tokenize(n.input);if(e.errors.length)throw console.error("Input: "+n.input+`
|
|
143
143
|
`,e.errors[0].message),Error("[LEXING] "+e.errors[0].message);n.traceLex&&this._printTokens(e.tokens),n.tokens=e.tokens}parse(n){n.cst=this.parser.parse(n)}visit(n){return this.visitor.start(n)}evaluate(n,e,r){if(typeof n!="string")throw Error("evaluate() expects a string, got "+typeof n);return typeof r!="object"&&(r={}),r.input=n,r.visitor=new js(this,e),this._evaluate(r)}lexParseVisit(n={}){return this.lex(n),this.parse(n),this.visit(n)}addTransform(n,e){return this.transforms[n]=e,this}getTransforms(){return Object.keys(this.transforms)}removeTransform(n){return delete this.transforms[n],this}_evaluate(n){let{input:e,visitor:r,trace:t,onepass:i,silent:h}=n;if(!e)throw Error("no input");if(!r)throw Error("no visitor");let s,o=this.regex.EndingBreak.test(e),u=this._preParse(e,n);if(!u)return"";if(!n.visitor)throw Error("no visitor");this.visitor=n.visitor,delete n.visitor,t&&(console.log(`
|
|
144
|
-
Input: '${$h(e)}' ctx=${r.lookupsToString()}`),e!==u&&console.log(`Parsed: '${$h(u)}'`));for(let d=1;u!==s&&d<=10&&(s=u,t&&console.log("-".repeat(20)+" Pass#"+d+" "+"-".repeat(20)),n.input=u,u=this.lexParseVisit(n),t&&console.log(`Result(${d}) -> "${$h(u)}" ctx=${this.visitor.lookupsToString()}`),!(i||!this.isParseable(u)));d++);return!h&&!this.RiTa.SILENT&&this.regex.ValidSymbol.test(u.replace(y3,""))&&console.warn('[WARN] Unresolved symbol(s) in "'+u.replace(/\n/g,"\\n")+'" '),this._postParse(u,n)+(o?`
|
|
144
|
+
Input: '${$h(e)}' ctx=${r.lookupsToString()}`),e!==u&&console.log(`Parsed: '${$h(u)}'`));for(let d=1;u!==s&&d<=10&&(s=u,t&&console.log("-".repeat(20)+" Pass#"+d+" "+"-".repeat(20)),n.input=u,u=this.lexParseVisit(n)??"",t&&console.log(`Result(${d}) -> "${$h(u||"")}" ctx=${this.visitor.lookupsToString()}`),!(i||!this.isParseable(u)));d++);return!h&&!this.RiTa.SILENT&&this.regex.ValidSymbol.test(u.replace(y3,""))&&console.warn('[WARN] Unresolved symbol(s) in "'+u.replace(/\n/g,"\\n")+'" '),this._postParse(u,n)+(o?`
|
|
145
145
|
`:"")}_printTokens(n){let e=n.reduce((r,t)=>{let{name:i}=t.tokenType,h=i;return h==="TEXT"&&(h=$h(t.image,!0)),h==="Symbol"&&(h="sym("+t.image+")"),h==="TX"&&(h="tx("+t.image+")"),r+h+", "},"").slice(0,-2);console.log(`
|
|
146
146
|
Tokens: [ `+e+` ]
|
|
147
147
|
`)}_preParse(n,e){if(typeof n!="string")return"";let r=this.Symbols,t=n;this.v2Compatible||(t=t.replace(this.regex.ParenthesizedWeights,"^$1^"));let i=t.match(this.regex.MarkdownLinks);i&&i.forEach(o=>t=t.replace(o,j3(o))),t=t.replace(this.regex.MultiLineComments,""),t=t.replace(this.regex.SingleLineComments,""),t=t.replace(this.regex.Continue,""),t=m3(t);let h="",s=t.split(this.regex.LineBreaks);for(let o=0;o<s.length;o++)if(this.regex.RawAssign.test(s[o])){let u=s[o].indexOf("=");if(u<0)throw Error("invalid state: no assigment: "+s[o]);let d=s[o].substring(0,u),p=s[o].substring(u+1),b=Lh(p,r.OPEN_CHOICE),y=Lh(p,r.CLOSE_CHOICE);for(;b>y;){let m=s[++o];p+=`
|
|
148
148
|
`+m,b+=Lh(m,r.OPEN_CHOICE),y+=Lh(m,r.CLOSE_CHOICE)}h+=r.OPEN_SILENT+(d+"="+p)+r.CLOSE_SILENT}else h+=s[o],o<s.length-1&&(h+=`
|
|
149
149
|
`);return h}createQuery(n,e){return new Vp(this,n,e)}_postParse(n,e){if(typeof n!="string")return"";let t=c3(n).replace(this.regex.Whitespace," ").replace(this.regex.EndingBreak,""),i=[...t.matchAll(this.pendingGateRe)];return e.trace&&i.length&&console.log("-".repeat(20)+" pGates "+"-".repeat(20)),this.visitor.order=0,i.forEach(h=>{if(!h||!h[0]||!h[1])throw Error("bad gate: "+h);let s=this.visitor.pendingGates[h[1]];if(!s)throw Error("no deferredGate: "+h[1]);let{deferredContext:o,operands:u,gateText:d}=s;if(!u.length)throw Error("no operands");let p=this.visitor.choice(o,{forceReject:!0});t=t.replace(h[0],p),e.trace&&console.log("Unresolved gate: '"+d+"' {reject}")}),e.trace&&console.log(`
|
|
150
|
-
Final: '${t}'`),e.preserveLookups||(this.visitor.statics=void 0,this.visitor.dynamics=void 0),t}parseJSOL(n){let e=h=>{let s=Ph.RegexEscape,o=h;if(typeof h=="string"&&h.startsWith(s)&&h.endsWith(s)){let u=h.split(s);if(u.length!==4)throw Error("invalid regex in unescape");o=new RegExp(u[1],u[2])}return o},r=v3(n).replace(this.regex.JSOLIdent,'"$1":').replace(/'/g,'"'),t=JSON.parse(r),i=e;return Object.keys(t).forEach(h=>t[h]=i(t[h])),t}isParseable(n){let e=!0;return typeof n=="number"&&(n=n.toString()),typeof n=="string"&&(e=this.regex.Special.test(n)||n.includes(this.Symbols.PENDING_GATE)),e}static pluralize(n,e){return e?.pluralize?e.pluralize(n):(!ue.RiTaWarnings.plurals&&!ue.RiTaWarnings.silent&&(ue.RiTaWarnings.plurals=!0,console.warn("[WARN] Install RiTa for proper pluralization")),n.endsWith("s")?n:n+"s")}static articlize(n,e){if(!n||!n.length)return"";let r=n.split(/\s+/)[0];if(!e?.phones)return!ue.RiTaWarnings.phones&&!ue.RiTaWarnings.silent&&(console.warn("[WARN] Install RiTa for proper phonemes"),ue.RiTaWarnings.phones=!0),(/^[aeiou].*/i.test(r)?"an ":"a ")+n;let t=e.phones(r,{silent:!0});return(t?.length&&b3.test(t[0])?"an ":"a ")+n}static capitalize(n){return n?n[0].toUpperCase()+n.substring(1):""}static uppercase(n){return n?n.toUpperCase():""}static quotify(n){return"“"+(n||"")+"”"}static identity(n){return n}_createRegexes(n){let e=this.Escaped,r=e.OPEN_CHOICE,t=e.CLOSE_CHOICE,i=e.STATIC+e.DYNAMIC;return{LineBreaks:/\r?\n/,EndingBreak:/\r?\n$/,NonGateAtSigns:/([^}])@(?!{)/,AnySymbol:new RegExp(`[${i}]`),ParenthesizedWeights:/\((\s*\d+\s*)\)/g,MultiLineComments:/\/\*[^]*?(\r?\n)?\//g,SingleLineComments:/\/\/[^\n]+(\r?\n|$)/g,MarkdownLinks:/\[([^\]]+)\]\(([^)"]+)(?: \"([^\"]+)\")?\)/g,RawAssign:new RegExp(`^[${i}][A-Za-z_0-9][A-Za-z_0-9]*\\s*=`),JSOLIdent:new RegExp(`([${i}]?[A-Za-z_0-9][A-Za-z_0-9]*)\\s*:`,"g"),ChoiceWrap:new RegExp("^"+r+"[^"+r+t+"]*"+t+"$"),ValidSymbol:new RegExp("("+e.DYNAMIC+"|"+e.STATIC+"[A-Za-z_0-9])[A-Za-z_0-9]*"),Entity:n.filter(h=>h.name==="Entity")[0].PATTERN,StaticSymbol:new RegExp(e.STATIC+"[A-Za-z_0-9][A-Za-z_0-9]*"),Special:new RegExp(`[${e.SPECIAL.replace("&","")}]`),Continue:new RegExp(e.CONTINUATION+"\\r?\\n","g"),Whitespace:/[\u00a0\u2000-\u200b\u2028-\u2029\u3000]+/g}}_createTransforms(){let n={quotify:e=>ue.quotify(e),pluralize:e=>ue.pluralize(e,this.RiTa),articlize:e=>ue.articlize(e,this.RiTa),capitalize:e=>ue.capitalize(e),uppercase:e=>ue.uppercase(e),norepeat:e=>ue.identity(e)};return n.art=n.articlize,n.nr=n.norepeat,n.cap=n.capitalize,n.uc=n.uppercase,n.qq=n.quotify,n.s=n.pluralize,n.ucf=n.capitalize,n}};Rt(Bh,"VERSION","1.1.0");Rt(Bh,"Query",Vp);Rt(Bh,"RiTaWarnings",{plurals:!1,phones:!1,silent:!1});var Or=Bh;function Lh(a,n){let e=0;for(let r=0;r<a.length;r++)a[r]===n&&e++;return e}Or.Visitor=js;Or.Util=Ph;var I=class a{static grammar(n,e,r){return new Fh(n,e,{...r,RiTa:a})}static addTransform(n,e){a.riscript.addTransform(n,e)}static removeTransform(n){a.riscript.removeTransform(n)}static getTransforms(){return a.riscript.getTransforms()}static articlize(n){return Or.articlize(n,a)}static evaluate(n,e,r){return a.riscript.evaluate(n,e,{...r})}static markov(n,e){return new Vr(n,e)}static kwic(n,e){return a.concorder.kwic(n,e)}static concordance(n,e){return a.concorder.concordance(n,e)}static randomOrdering(n){return a.randomizer.randomOrdering(n)}static randomSeed(n){a.randomizer.seed(n)}static isQuestion(n){return a.QUESTIONS.includes(a.tokenize(n)[0].toLowerCase())}static isVowel(n){return n&&n.length===1&&a.VOWELS.includes(n)}static isConsonant(n){return n&&n.length===1&&!a.VOWELS.includes(n)&&S3.test(n)}static capitalize(n){return n?n[0].toUpperCase()+n.substring(1):""}static randomWord(n,e){return a.lexicon.randomWord(n,e)}static async rhymes(n,e){return await a.lexicon.rhymes(n,e)}static isRhyme(n,e){return a.lexicon.isRhyme(n,e)}static async alliterations(n,e){return await a.lexicon.alliterations(n,e)}static hasWord(n,e){return a.lexicon.hasWord(n,e)}static isAbbrev(n,e){if(typeof n=="string"){if(e?.caseSensitive)return a.ABRV.includes(n.trim());let r=n.trim().toLowerCase();return a.ABRV.some(t=>t.toLowerCase()===r)}}static isAlliteration(n,e){return a.lexicon.isAlliteration(n,e)}static async spellsLike(n,e){return await a.lexicon.spellsLike(n,e)}static async soundsLike(n,e){return await a.lexicon.soundsLike(n,e)}static pos(n,e){if(e&&"inline"in e)throw Error("Use RiTa.posInline() instead");return a.tagger.tag(n,e)}static isNoun(n){return a.tagger.isNoun(n)}static isAdjective(n){return a.tagger.isAdjective(n)}static isAdverb(n){return a.tagger.isAdverb(n)}static isVerb(n){return a.tagger.isVerb(n)}static isPunct(n){return n&&n.length&&f3.test(n)}static posInline(n,e){return a.tagger.tag(n,{...e,inline:!0})}static singularize(n){return a.inflector.singularize(n)}static pluralize(n){return a.inflector.pluralize(n)}static async search(n,e){return await a.lexicon.search(n,e)}static tokens(n,e={caseSensitive:!1,ignoreStopWords:!1,splitContractions:!1,includePunct:!1,sort:!1}){return a.tokenizer.tokens(n,e)}static tokenize(n,e){return a.tokenizer.tokenize(n,e)}static untokenize(n,e=" "){return a.tokenizer.untokenize(n,e)}static sentences(n,e){return a.tokenizer.sentences(n,e)}static isStopWord(n){return a.STOP_WORDS.includes(n.toLowerCase())}static stem(n){return $t.stem(n)}static presentPart(n){return a.conjugator.presentPart(n)}static pastPart(n){return a.conjugator.pastPart(n)}static conjugate(n,e){return a.conjugator.conjugate(n,e)}static stresses(n,e){return a.analyzer.analyze(n,e).stresses}static syllables(n,e){return a.analyzer.analyze(n,e).syllables}static phones(n,e){return a.analyzer.analyze(n,e).phones}static analyze(n,e){return a.analyzer.analyze(n,e)}static spellsLikeSync(n,e){return a.lexicon.spellsLikeSync(n,e)}static soundsLikeSync(n,e){return a.lexicon.soundsLikeSync(n,e)}static rhymesSync(n,e){return a.lexicon.rhymesSync(n,e)}static searchSync(n,e){return a.lexicon.searchSync(n,e)}static alliterationsSync(n,e){return a.lexicon.alliterationsSync(n,e)}static randi(n,e){return Math.floor(a.random(...arguments))}static random(n,e){return a.randomizer.random(...arguments)}};I.RiGrammar=Fh;I.RiMarkov=Vr;I.Stemmer=$t;I.randomizer=new Bs;I.tagger=new Is(I);I.analyzer=new Ps(I);I.concorder=new Fs(I);I.tokenizer=new Ds(I);I.inflector=new $s(I);I.lexicon=new Ns(I);I.conjugator=new Rs(I);Vr.parent=I;$t.tokenizer=I.tokenizer;I.SILENT=!1;I.SILENCE_LTS=!1;I.VERSION="3.1.0";I.FIRST=1;I.SECOND=2;I.THIRD=3;I.PAST=4;I.PRESENT=5;I.FUTURE=6;I.SINGULAR=7;I.PLURAL=8;I.NORMAL=9;I.STRESS="1";I.NOSTRESS="0";I.PHONE_BOUNDARY="-";I.WORD_BOUNDARY=" ";I.SYLLABLE_BOUNDARY="/";I.SENTENCE_BOUNDARY="|";I.VOWELS="aeiou";I.PHONES=["aa","ae","ah","ao","aw","ay","b","ch","d","dh","eh","er","ey","f","g","hh","ih","iy","jh","k","l","m","n","ng","ow","oy","p","r","s","sh","t","th","uh","uw","v","w","y","z","zh"];I.ABRV=["Adm.","Capt.","Cmdr.","Col.","Dr.","Gen.","Gov.","Lt.","Maj.","Messrs.","Mr.","Mrs.","Ms.","Prof.","Rep.","Reps.","Rev.","Sen.","Sens.","Sgt.","Sr.","St.","A.k.a.","C.f.","I.e.","E.g.","Vs.","V.","Jan.","Feb.","Mar.","Apr.","Mar.","Jun.","Jul.","Aug.","Sept.","Oct.","Nov.","Dec."];I.QUESTIONS=["was","what","when","where","which","why","who","will","would","who","how","if","is","could","might","does","are","have"];I.STOP_WORDS=["and","a","of","in","i","you","is","to","that","it","for","on","have","with","this","be","not","are","as","was","but","or","from","my","at","if","they","your","all","he","by","one","me","what","so","can","will","do","an","about","we","just","would","there","no","like","out","his","has","up","more","who","when","don't","some","had","them","any","their","it's","only","which","i'm","been","other","were","how","then","now","her","than","she","well","also","us","very","because","am","here","could","even","him","into","our","much","too","did","should","over","want","these","may","where","most","many","those","does","why","please","off","going","its","i've","down","that's","can't","you're","didn't","another","around","must","few","doesn't","the","every","yes","each","maybe","i'll","away","doing","oh","else","isn't","he's","there's","hi","won't","ok","they're","yeah","mine","we're","what's","shall","she's","hello","okay","here's","less","didn't","said","over","this","that","just","then","under","some"];I.MASS_NOUNS=["abalone","asbestos","barracks","bathos","breeches","beef","britches","chaos","chinese","cognoscenti","clippers","corps","cosmos","crossroads","diabetes","ethos","gallows","graffiti","herpes","innings","lens","means","measles","mews","mumps","news","pasta","pathos","pincers","pliers","proceedings","rabies","rhinoceros","sassafras","scissors","series","shears","species","tuna","acoustics","aesthetics","aquatics","basics","ceramics","classics","cosmetics","dialectics","deer","dynamics","ethics","harmonics","heroics","mechanics","metrics","ooze","optics","physics","polemics","pyrotechnics","statistics","tactics","tropics","bengalese","bengali","bonsai","booze","cellulose","mess","moose","burmese","chinese","colossus","congolese","discus","electrolysis","emphasis","expertise","flu","fructose","gauze","glucose","grease","guyanese","haze","incense","japanese","lebanese","malaise","mayonnaise","maltese","music","money","menopause","merchandise","olympics","overuse","paradise","poise","potash","portuguese","prose","recompense","remorse","repose","senegalese","siamese","singhalese","sleaze","sioux","sudanese","suspense","swiss","taiwanese","vietnamese","unease","aircraft","anise","antifreeze","applause","archdiocese","apparatus","asparagus","bellows","bison","bluefish","bourgeois","bream","brill","butterfingers","cargo","carp","catfish","chassis","clone","clones","clothes","chub","cod","codfish","coley","contretemps","crawfish","crayfish","cuttlefish","dice","dogfish","doings","dory","downstairs","eldest","earnings","economics","electronics","firstborn","fish","flatfish","flounder","fowl","fry","fries","works","goldfish","golf","grand","grief","haddock","hake","halibut","headquarters","herring","hertz","honey","horsepower","goods","hovercraft","ironworks","kilohertz","ling","shrimp","swine","lungfish","mackerel","macaroni","megahertz","moorfowl","moorgame","mullet","nepalese","offspring","pants","patois","pekinese","perch","pickerel","pike","potpourri","precis","quid","rand","rendezvous","roach","salmon","samurai","seychelles","shad","sheep","shellfish","smelt","spaghetti","spacecraft","starfish","stockfish","sunfish","superficies","sweepstakes","smallpox","swordfish","tennis","tobacco","triceps","trout","tunafish","turbot","trousers","turf","dibs","undersigned","waterfowl","waterworks","waxworks","wildfowl","woodworm","yen","aries","pisces","forceps","jeans","mathematics","odds","politics","remains","aids","wildlife","shall","would","may","might","ought","should","acne","admiration","advice","air","anger","anticipation","assistance","awareness","bacon","baggage","blood","bravery","chess","clay","clothing","coal","compliance","comprehension","confusion","consciousness","cream","darkness","diligence","dust","education","empathy","enthusiasm","envy","equality","equipment","evidence","feedback","fitness","flattery","foliage","fun","furniture","garbage","gold","gossip","grammar","gratitude","gravel","guilt","happiness","hardware","hate","hay","health","heat","help","hesitation","homework","honesty","honor","honour","hospitality","hostility","humanity","humility","ice","immortality","independence","information","integrity","intimidation","jargon","jealousy","jewelry","justice","knowledge","literacy","logic","luck","lumber","luggage","mail","management","milk","morale","mud","nonsense","oppression","optimism","oxygen","participation","pay","peace","perseverance","pessimism","pneumonia","poetry","police","pride","privacy","propaganda","public","punctuation","recovery","rice","rust","satisfaction","schnapps","shame","slang","software","stamina","starvation","steam","steel","stuff","support","sweat","thunder","timber","toil","traffic","tongs","training","trash","valor","vehemence","violence","warmth","waste","weather","wheat","wisdom","work","accommodation","advertising","aid","art","bread","business","butter","calm","cash","cheese","childhood","clothing ","coffee","content","corruption","courage","currency","damage","danger","determination","electricity","employment","energy","entertainment","failure","fame","fire","flour","food","freedom","friendship","fuel","genetics","hair","harm","hospitality ","housework","humour","imagination","importance","innocence","intelligence","juice","kindness","labour","lack","laughter","leisure","literature","litter","love","magic","metal","motherhood","motivation","nature","nutrition","obesity","oil","old age","paper","patience","permission","pollution","poverty","power","production","progress","pronunciation","publicity","quality","quantity","racism","rain","relaxation","research","respect","room (space)","rubbish","safety","salt","sand","seafood","shopping","silence","smoke","snow","soup","speed","spelling","stress ","sugar","sunshine","tea","time","tolerance","trade","transportation","travel","trust","understanding","unemployment","usage","vision","water","wealth","weight","welfare","width","wood","yoga","youth","homecare","childcare","fanfare","healthcare","medicare"];I.INFINITIVE=1;I.GERUND=2;I.SPLIT_CONTRACTIONS=!1;var f3=/^[\p{P}|\+|-|<|>|\^|\$|\ufffd|`]*$/u,S3=/^[a-z\u00C0-\u00ff]+$/;I.riscript=new Or({RiTa:I});return nc(g3);})();
|
|
150
|
+
Final: '${t}'`),e.preserveLookups||(this.visitor.statics=void 0,this.visitor.dynamics=void 0),t}parseJSOL(n){let e=h=>{let s=Ph.RegexEscape,o=h;if(typeof h=="string"&&h.startsWith(s)&&h.endsWith(s)){let u=h.split(s);if(u.length!==4)throw Error("invalid regex in unescape");o=new RegExp(u[1],u[2])}return o},r=v3(n).replace(this.regex.JSOLIdent,'"$1":').replace(/'/g,'"'),t=JSON.parse(r),i=e;return Object.keys(t).forEach(h=>t[h]=i(t[h])),t}isParseable(n){let e=!0;return typeof n=="number"&&(n=n.toString()),typeof n=="string"&&(e=this.regex.Special.test(n)||n.includes(this.Symbols.PENDING_GATE)),e}static pluralize(n,e){return e?.pluralize?e.pluralize(n):(!ue.RiTaWarnings.plurals&&!ue.RiTaWarnings.silent&&(ue.RiTaWarnings.plurals=!0,console.warn("[WARN] Install RiTa for proper pluralization")),n.endsWith("s")?n:n+"s")}static articlize(n,e){if(!n||!n.length)return"";let r=n.split(/\s+/)[0];if(!e?.phones)return!ue.RiTaWarnings.phones&&!ue.RiTaWarnings.silent&&(console.warn("[WARN] Install RiTa for proper phonemes"),ue.RiTaWarnings.phones=!0),(/^[aeiou].*/i.test(r)?"an ":"a ")+n;let t=e.phones(r,{silent:!0});return(t?.length&&b3.test(t[0])?"an ":"a ")+n}static capitalize(n){return n?n[0].toUpperCase()+n.substring(1):""}static uppercase(n){return n?n.toUpperCase():""}static quotify(n){return"“"+(n||"")+"”"}static identity(n){return n}_createRegexes(n){let e=this.Escaped,r=e.OPEN_CHOICE,t=e.CLOSE_CHOICE,i=e.STATIC+e.DYNAMIC;return{LineBreaks:/\r?\n/,EndingBreak:/\r?\n$/,NonGateAtSigns:/([^}])@(?!{)/,AnySymbol:new RegExp(`[${i}]`),ParenthesizedWeights:/\(\s*(\d+)\s*\)/g,MultiLineComments:/\/\*[^]*?(\r?\n)?\//g,SingleLineComments:/\/\/[^\n]+(\r?\n|$)/g,MarkdownLinks:/\[([^\]]+)\]\(([^)"]+)(?: \"([^\"]+)\")?\)/g,RawAssign:new RegExp(`^[${i}][A-Za-z_0-9][A-Za-z_0-9]*\\s*=`),JSOLIdent:new RegExp(`([${i}]?[A-Za-z_0-9][A-Za-z_0-9]*)\\s*:`,"g"),ChoiceWrap:new RegExp("^"+r+"[^"+r+t+"]*"+t+"$"),ValidSymbol:new RegExp("("+e.DYNAMIC+"|"+e.STATIC+"[A-Za-z_0-9])[A-Za-z_0-9]*"),Entity:n.filter(h=>h.name==="Entity")[0].PATTERN,StaticSymbol:new RegExp(e.STATIC+"[A-Za-z_0-9][A-Za-z_0-9]*"),Special:new RegExp(`[${e.SPECIAL.replace("&","")}]`),Continue:new RegExp(e.CONTINUATION+"\\r?\\n","g"),Whitespace:/[\u00a0\u2000-\u200b\u2028-\u2029\u3000]+/g}}_createTransforms(){let n={quotify:e=>ue.quotify(e),pluralize:e=>ue.pluralize(e,this.RiTa),articlize:e=>ue.articlize(e,this.RiTa),capitalize:e=>ue.capitalize(e),uppercase:e=>ue.uppercase(e),norepeat:e=>ue.identity(e)};return n.art=n.articlize,n.nr=n.norepeat,n.cap=n.capitalize,n.uc=n.uppercase,n.qq=n.quotify,n.s=n.pluralize,n.ucf=n.capitalize,n}};Rt(Bh,"VERSION","1.1.1");Rt(Bh,"Query",Vp);Rt(Bh,"RiTaWarnings",{plurals:!1,phones:!1,silent:!1});var Or=Bh;function Lh(a,n){let e=0;for(let r=0;r<a.length;r++)a[r]===n&&e++;return e}Or.Visitor=js;Or.Util=Ph;var I=class a{static grammar(n,e,r){return new Fh(n,e,{...r,RiTa:a})}static addTransform(n,e){a.riscript.addTransform(n,e)}static removeTransform(n){a.riscript.removeTransform(n)}static getTransforms(){return a.riscript.getTransforms()}static articlize(n){return Or.articlize(n,a)}static evaluate(n,e,r){return a.riscript.evaluate(n,e,{...r})}static markov(n,e){return new Vr(n,e)}static kwic(n,e){return a.concorder.kwic(n,e)}static concordance(n,e){return a.concorder.concordance(n,e)}static randomOrdering(n){return a.randomizer.randomOrdering(n)}static randomSeed(n){a.randomizer.seed(n)}static isQuestion(n){return a.QUESTIONS.includes(a.tokenize(n)[0].toLowerCase())}static isVowel(n){return n&&n.length===1&&a.VOWELS.includes(n)}static isConsonant(n){return n&&n.length===1&&!a.VOWELS.includes(n)&&S3.test(n)}static capitalize(n){return n?n[0].toUpperCase()+n.substring(1):""}static randomWord(n,e){return a.lexicon.randomWord(n,e)}static async rhymes(n,e){return await a.lexicon.rhymes(n,e)}static isRhyme(n,e){return a.lexicon.isRhyme(n,e)}static async alliterations(n,e){return await a.lexicon.alliterations(n,e)}static hasWord(n,e){return a.lexicon.hasWord(n,e)}static isAbbrev(n,e){if(typeof n=="string"){if(e?.caseSensitive)return a.ABRV.includes(n.trim());let r=n.trim().toLowerCase();return a.ABRV.some(t=>t.toLowerCase()===r)}}static isAlliteration(n,e){return a.lexicon.isAlliteration(n,e)}static async spellsLike(n,e){return await a.lexicon.spellsLike(n,e)}static async soundsLike(n,e){return await a.lexicon.soundsLike(n,e)}static pos(n,e){if(e&&"inline"in e)throw Error("Use RiTa.posInline() instead");return a.tagger.tag(n,e)}static isNoun(n){return a.tagger.isNoun(n)}static isAdjective(n){return a.tagger.isAdjective(n)}static isAdverb(n){return a.tagger.isAdverb(n)}static isVerb(n){return a.tagger.isVerb(n)}static isPunct(n){return n&&n.length&&f3.test(n)}static posInline(n,e){return a.tagger.tag(n,{...e,inline:!0})}static singularize(n){return a.inflector.singularize(n)}static pluralize(n){return a.inflector.pluralize(n)}static async search(n,e){return await a.lexicon.search(n,e)}static tokens(n,e={caseSensitive:!1,ignoreStopWords:!1,splitContractions:!1,includePunct:!1,sort:!1}){return a.tokenizer.tokens(n,e)}static tokenize(n,e){return a.tokenizer.tokenize(n,e)}static untokenize(n,e=" "){return a.tokenizer.untokenize(n,e)}static sentences(n,e){return a.tokenizer.sentences(n,e)}static isStopWord(n){return a.STOP_WORDS.includes(n.toLowerCase())}static stem(n){return $t.stem(n)}static presentPart(n){return a.conjugator.presentPart(n)}static pastPart(n){return a.conjugator.pastPart(n)}static conjugate(n,e){return a.conjugator.conjugate(n,e)}static stresses(n,e){return a.analyzer.analyze(n,e).stresses}static syllables(n,e){return a.analyzer.analyze(n,e).syllables}static phones(n,e){return a.analyzer.analyze(n,e).phones}static analyze(n,e){return a.analyzer.analyze(n,e)}static spellsLikeSync(n,e){return a.lexicon.spellsLikeSync(n,e)}static soundsLikeSync(n,e){return a.lexicon.soundsLikeSync(n,e)}static rhymesSync(n,e){return a.lexicon.rhymesSync(n,e)}static searchSync(n,e){return a.lexicon.searchSync(n,e)}static alliterationsSync(n,e){return a.lexicon.alliterationsSync(n,e)}static randi(n,e){return Math.floor(a.random(...arguments))}static random(n,e){return a.randomizer.random(...arguments)}};I.RiGrammar=Fh;I.RiMarkov=Vr;I.Stemmer=$t;I.randomizer=new Bs;I.tagger=new Is(I);I.analyzer=new Ps(I);I.concorder=new Fs(I);I.tokenizer=new Ds(I);I.inflector=new $s(I);I.lexicon=new Ns(I);I.conjugator=new Rs(I);Vr.parent=I;$t.tokenizer=I.tokenizer;I.SILENT=!1;I.SILENCE_LTS=!1;I.VERSION="3.1.1";I.FIRST=1;I.SECOND=2;I.THIRD=3;I.PAST=4;I.PRESENT=5;I.FUTURE=6;I.SINGULAR=7;I.PLURAL=8;I.NORMAL=9;I.STRESS="1";I.NOSTRESS="0";I.PHONE_BOUNDARY="-";I.WORD_BOUNDARY=" ";I.SYLLABLE_BOUNDARY="/";I.SENTENCE_BOUNDARY="|";I.VOWELS="aeiou";I.PHONES=["aa","ae","ah","ao","aw","ay","b","ch","d","dh","eh","er","ey","f","g","hh","ih","iy","jh","k","l","m","n","ng","ow","oy","p","r","s","sh","t","th","uh","uw","v","w","y","z","zh"];I.ABRV=["Adm.","Capt.","Cmdr.","Col.","Dr.","Gen.","Gov.","Lt.","Maj.","Messrs.","Mr.","Mrs.","Ms.","Prof.","Rep.","Reps.","Rev.","Sen.","Sens.","Sgt.","Sr.","St.","A.k.a.","C.f.","I.e.","E.g.","Vs.","V.","Jan.","Feb.","Mar.","Apr.","Mar.","Jun.","Jul.","Aug.","Sept.","Oct.","Nov.","Dec."];I.QUESTIONS=["was","what","when","where","which","why","who","will","would","who","how","if","is","could","might","does","are","have"];I.STOP_WORDS=["and","a","of","in","i","you","is","to","that","it","for","on","have","with","this","be","not","are","as","was","but","or","from","my","at","if","they","your","all","he","by","one","me","what","so","can","will","do","an","about","we","just","would","there","no","like","out","his","has","up","more","who","when","don't","some","had","them","any","their","it's","only","which","i'm","been","other","were","how","then","now","her","than","she","well","also","us","very","because","am","here","could","even","him","into","our","much","too","did","should","over","want","these","may","where","most","many","those","does","why","please","off","going","its","i've","down","that's","can't","you're","didn't","another","around","must","few","doesn't","the","every","yes","each","maybe","i'll","away","doing","oh","else","isn't","he's","there's","hi","won't","ok","they're","yeah","mine","we're","what's","shall","she's","hello","okay","here's","less","didn't","said","over","this","that","just","then","under","some"];I.MASS_NOUNS=["abalone","asbestos","barracks","bathos","breeches","beef","britches","chaos","chinese","cognoscenti","clippers","corps","cosmos","crossroads","diabetes","ethos","gallows","graffiti","herpes","innings","lens","means","measles","mews","mumps","news","pasta","pathos","pincers","pliers","proceedings","rabies","rhinoceros","sassafras","scissors","series","shears","species","tuna","acoustics","aesthetics","aquatics","basics","ceramics","classics","cosmetics","dialectics","deer","dynamics","ethics","harmonics","heroics","mechanics","metrics","ooze","optics","physics","polemics","pyrotechnics","statistics","tactics","tropics","bengalese","bengali","bonsai","booze","cellulose","mess","moose","burmese","chinese","colossus","congolese","discus","electrolysis","emphasis","expertise","flu","fructose","gauze","glucose","grease","guyanese","haze","incense","japanese","lebanese","malaise","mayonnaise","maltese","music","money","menopause","merchandise","olympics","overuse","paradise","poise","potash","portuguese","prose","recompense","remorse","repose","senegalese","siamese","singhalese","sleaze","sioux","sudanese","suspense","swiss","taiwanese","vietnamese","unease","aircraft","anise","antifreeze","applause","archdiocese","apparatus","asparagus","bellows","bison","bluefish","bourgeois","bream","brill","butterfingers","cargo","carp","catfish","chassis","clone","clones","clothes","chub","cod","codfish","coley","contretemps","crawfish","crayfish","cuttlefish","dice","dogfish","doings","dory","downstairs","eldest","earnings","economics","electronics","firstborn","fish","flatfish","flounder","fowl","fry","fries","works","goldfish","golf","grand","grief","haddock","hake","halibut","headquarters","herring","hertz","honey","horsepower","goods","hovercraft","ironworks","kilohertz","ling","shrimp","swine","lungfish","mackerel","macaroni","megahertz","moorfowl","moorgame","mullet","nepalese","offspring","pants","patois","pekinese","perch","pickerel","pike","potpourri","precis","quid","rand","rendezvous","roach","salmon","samurai","seychelles","shad","sheep","shellfish","smelt","spaghetti","spacecraft","starfish","stockfish","sunfish","superficies","sweepstakes","smallpox","swordfish","tennis","tobacco","triceps","trout","tunafish","turbot","trousers","turf","dibs","undersigned","waterfowl","waterworks","waxworks","wildfowl","woodworm","yen","aries","pisces","forceps","jeans","mathematics","odds","politics","remains","aids","wildlife","shall","would","may","might","ought","should","acne","admiration","advice","air","anger","anticipation","assistance","awareness","bacon","baggage","blood","bravery","chess","clay","clothing","coal","compliance","comprehension","confusion","consciousness","cream","darkness","diligence","dust","education","empathy","enthusiasm","envy","equality","equipment","evidence","feedback","fitness","flattery","foliage","fun","furniture","garbage","gold","gossip","grammar","gratitude","gravel","guilt","happiness","hardware","hate","hay","health","heat","help","hesitation","homework","honesty","honor","honour","hospitality","hostility","humanity","humility","ice","immortality","independence","information","integrity","intimidation","jargon","jealousy","jewelry","justice","knowledge","literacy","logic","luck","lumber","luggage","mail","management","milk","morale","mud","nonsense","oppression","optimism","oxygen","participation","pay","peace","perseverance","pessimism","pneumonia","poetry","police","pride","privacy","propaganda","public","punctuation","recovery","rice","rust","satisfaction","schnapps","shame","slang","software","stamina","starvation","steam","steel","stuff","support","sweat","thunder","timber","toil","traffic","tongs","training","trash","valor","vehemence","violence","warmth","waste","weather","wheat","wisdom","work","accommodation","advertising","aid","art","bread","business","butter","calm","cash","cheese","childhood","clothing ","coffee","content","corruption","courage","currency","damage","danger","determination","electricity","employment","energy","entertainment","failure","fame","fire","flour","food","freedom","friendship","fuel","genetics","hair","harm","hospitality ","housework","humour","imagination","importance","innocence","intelligence","juice","kindness","labour","lack","laughter","leisure","literature","litter","love","magic","metal","motherhood","motivation","nature","nutrition","obesity","oil","old age","paper","patience","permission","pollution","poverty","power","production","progress","pronunciation","publicity","quality","quantity","racism","rain","relaxation","research","respect","room (space)","rubbish","safety","salt","sand","seafood","shopping","silence","smoke","snow","soup","speed","spelling","stress ","sugar","sunshine","tea","time","tolerance","trade","transportation","travel","trust","understanding","unemployment","usage","vision","water","wealth","weight","welfare","width","wood","yoga","youth","homecare","childcare","fanfare","healthcare","medicare"];I.INFINITIVE=1;I.GERUND=2;I.SPLIT_CONTRACTIONS=!1;var f3=/^[\p{P}|\+|-|<|>|\^|\$|\ufffd|`]*$/u,S3=/^[a-z\u00C0-\u00ff]+$/;I.riscript=new Or({RiTa:I});return nc(g3);})();
|
|
151
151
|
/*! Bundled license information:
|
|
152
152
|
|
|
153
153
|
he/he.js:
|