Improve parser
This commit is contained in:
@@ -411,7 +411,7 @@ export async function ParseMarkdown(
|
|||||||
if(firstParsed !== data && char && char.type !== 'group'){
|
if(firstParsed !== data && char && char.type !== 'group'){
|
||||||
data = await parseAdditionalAssets(data, char, additionalAssetMode, 'post')
|
data = await parseAdditionalAssets(data, char, additionalAssetMode, 'post')
|
||||||
}
|
}
|
||||||
data = await parseInlayImages(data)
|
data = await parseInlayImages(data ?? '')
|
||||||
|
|
||||||
data = encodeStyle(data)
|
data = encodeStyle(data)
|
||||||
if(mode === 'normal'){
|
if(mode === 'normal'){
|
||||||
@@ -773,10 +773,10 @@ function basicMatcher (p1:string,matcherArg:matcherArg,vars:{[key:string]:string
|
|||||||
case 'messages':{
|
case 'messages':{
|
||||||
const selchar = db.characters[get(selectedCharID)]
|
const selchar = db.characters[get(selectedCharID)]
|
||||||
const chat = selchar.chats[selchar.chatPage]
|
const chat = selchar.chats[selchar.chatPage]
|
||||||
return makeArray(chat.message.concat([{
|
return makeArray([{
|
||||||
role: 'char',
|
role: 'char',
|
||||||
data: chat.fmIndex === -1 ? selchar.firstMessage : selchar.alternateGreetings[chat.fmIndex]
|
data: chat.fmIndex === -1 ? selchar.firstMessage : selchar.alternateGreetings[chat.fmIndex]
|
||||||
}]).map((v) => {
|
}].concat(chat.message).map((v) => {
|
||||||
v = safeStructuredClone(v)
|
v = safeStructuredClone(v)
|
||||||
v.data = risuChatParser(v.data, matcherArg)
|
v.data = risuChatParser(v.data, matcherArg)
|
||||||
return JSON.stringify(v)
|
return JSON.stringify(v)
|
||||||
@@ -1735,7 +1735,11 @@ function blockStartMatcher(p1:string,matcherArg:matcherArg):{type:blockMatch,typ
|
|||||||
return {type:'pure-display'}
|
return {type:'pure-display'}
|
||||||
}
|
}
|
||||||
if(p1.startsWith('#each')){
|
if(p1.startsWith('#each')){
|
||||||
return {type:'each',type2:p1.substring(5).trim()}
|
let t2 = p1.substring(5).trim()
|
||||||
|
if(t2.startsWith('as ')){
|
||||||
|
t2 = t2.substring(3).trim()
|
||||||
|
}
|
||||||
|
return {type:'each',type2:t2}
|
||||||
}
|
}
|
||||||
if(p1.startsWith('#func')){
|
if(p1.startsWith('#func')){
|
||||||
const statement = p1.split(' ')
|
const statement = p1.split(' ')
|
||||||
@@ -1839,6 +1843,12 @@ export function risuChatParser(da:string, arg:{
|
|||||||
arg:string[]
|
arg:string[]
|
||||||
}> = arg.functions ?? (new Map())
|
}> = arg.functions ?? (new Map())
|
||||||
|
|
||||||
|
arg.callStack = (arg.callStack ?? 0) + 1
|
||||||
|
|
||||||
|
if(arg.callStack > 20){
|
||||||
|
return 'ERROR: Call stack limit reached'
|
||||||
|
}
|
||||||
|
|
||||||
const matcherObj = {
|
const matcherObj = {
|
||||||
chatID: chatID,
|
chatID: chatID,
|
||||||
chara: chara,
|
chara: chara,
|
||||||
@@ -1850,7 +1860,8 @@ export function risuChatParser(da:string, arg:{
|
|||||||
role: arg.role,
|
role: arg.role,
|
||||||
runVar: arg.runVar ?? false,
|
runVar: arg.runVar ?? false,
|
||||||
consistantChar: arg.consistantChar ?? false,
|
consistantChar: arg.consistantChar ?? false,
|
||||||
cbsConditions: arg.cbsConditions ?? {}
|
cbsConditions: arg.cbsConditions ?? {},
|
||||||
|
callStack: arg.callStack,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1979,7 +1990,7 @@ export function risuChatParser(da:string, arg:{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(dat.startsWith('call::')){
|
if(dat.startsWith('call::')){
|
||||||
if(arg.callStack && arg.callStack > 10){
|
if(arg.callStack && arg.callStack > 20){
|
||||||
nested[0] += `ERROR: Call stack limit reached`
|
nested[0] += `ERROR: Call stack limit reached`
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@@ -1993,7 +2004,6 @@ export function risuChatParser(da:string, arg:{
|
|||||||
data = data.replaceAll(`{{arg::${i}}}`, argData[i])
|
data = data.replaceAll(`{{arg::${i}}}`, argData[i])
|
||||||
}
|
}
|
||||||
arg.functions = functions
|
arg.functions = functions
|
||||||
arg.callStack = (arg.callStack ?? 0) + 1
|
|
||||||
nested[0] += risuChatParser(data, arg)
|
nested[0] += risuChatParser(data, arg)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user