From 00a56ab4479db6b21628aeca0cd43de822c826f1 Mon Sep 17 00:00:00 2001 From: kwaroran Date: Mon, 15 Jul 2024 19:48:51 +0900 Subject: [PATCH] Add CurrentCharacter import --- src/ts/parser.ts | 136 +++++++++++++++++++++++++++-------------------- 1 file changed, 79 insertions(+), 57 deletions(-) diff --git a/src/ts/parser.ts b/src/ts/parser.ts index 94acbda3..8dd5f3c2 100644 --- a/src/ts/parser.ts +++ b/src/ts/parser.ts @@ -5,7 +5,7 @@ import { getFileSrc } from './storage/globalApi'; import { processScriptFull } from './process/scripts'; import { get } from 'svelte/store'; import css from '@adobe/css-tools' -import { CurrentChat, SizeStore, selectedCharID } from './stores'; +import { CurrentCharacter, CurrentChat, SizeStore, selectedCharID } from './stores'; import { calcString } from './process/infunctions'; import { findCharacterbyId, parseKeyValue, sfc32, sleep, uuidtoNumber } from './util'; import { getInlayImage, writeInlayImage } from './process/files/image'; @@ -242,79 +242,101 @@ async function renderHighlightableMarkdown(data:string) { } -export const assetRegex = /{{(raw|img|video|audio|bg|emotion|asset|video-img)::(.+?)}}/g +export const assetRegex = /{{(raw|img|video|audio|bg|emotion|asset|video-img|source)::(.+?)}}/g async function parseAdditionalAssets(data:string, char:simpleCharacterArgument|character, mode:'normal'|'back', mode2:'unset'|'pre'|'post' = 'unset'){ const db = get(DataBase) const assetWidthString = (db.assetWidth && db.assetWidth !== -1 || db.assetWidth === 0) ? `max-width:${db.assetWidth}rem;` : '' - if(char.additionalAssets || char.emotionImages){ + let assetPaths:{[key:string]:{ + path:string + ext?:string + }} = {} + let emoPaths:{[key:string]:{ + path:string + }} = {} - let assetPaths:{[key:string]:{ - path:string - ext?:string - }} = {} - let emoPaths:{[key:string]:{ - path:string - }} = {} - - if(char.additionalAssets){ - for(const asset of char.additionalAssets){ - const assetPath = await getFileSrc(asset[1]) - assetPaths[asset[0].toLocaleLowerCase()] = { - path: assetPath, - ext: asset[2] - } + if(char.additionalAssets){ + for(const asset of char.additionalAssets){ + const assetPath = await getFileSrc(asset[1]) + assetPaths[asset[0].toLocaleLowerCase()] = { + path: assetPath, + ext: asset[2] } } - if(char.emotionImages){ - for(const emo of char.emotionImages){ - const emoPath = await getFileSrc(emo[1]) - emoPaths[emo[0].toLocaleLowerCase()] = { - path: emoPath, - } + } + if(char.emotionImages){ + for(const emo of char.emotionImages){ + const emoPath = await getFileSrc(emo[1]) + emoPaths[emo[0].toLocaleLowerCase()] = { + path: emoPath, } } - const videoExtention = ['mp4', 'webm', 'avi', 'm4p', 'm4v'] - data = data.replaceAll(assetRegex, (full:string, type:string, name:string) => { - name = name.toLocaleLowerCase() - if(type === 'emotion'){ - const path = emoPaths[name]?.path - if(!path){ - return '' - } - return `${path}` - } - const path = assetPaths[name] + } + const videoExtention = ['mp4', 'webm', 'avi', 'm4p', 'm4v'] + let needsSourceAccess = false + data = data.replaceAll(assetRegex, (full:string, type:string, name:string) => { + name = name.toLocaleLowerCase() + if(type === 'emotion'){ + const path = emoPaths[name]?.path if(!path){ return '' } - switch(type){ - case 'raw': - return path.path - case 'img': - return `${path.path}` - case 'video': - return `` - case 'video-img': - return `` - case 'audio': - return `` - case 'bg': - if(mode === 'back'){ - return `
` - } - break - case 'asset':{ - if(path.ext && videoExtention.includes(path.ext)){ - return `` - } - return `${path.path}` + return `${path}` + } + if(type === 'source'){ + needsSourceAccess = true + switch(name){ + case 'char':{ + return '\uE9b4CHAR\uE9b4' + } + case 'user': { + return '\uE9b4USER\uE9b4' } } + } + const path = assetPaths[name] + if(!path){ return '' - }) + } + switch(type){ + case 'raw': + return path.path + case 'img': + return `${path.path}` + case 'video': + return `` + case 'video-img': + return `` + case 'audio': + return `` + case 'bg': + if(mode === 'back'){ + return `
` + } + break + case 'asset':{ + if(path.ext && videoExtention.includes(path.ext)){ + return `` + } + return `${path.path}` + } + } + return '' + }) + + if(needsSourceAccess){ + const chara = get(CurrentCharacter) + if(chara.image){} + data = data.replace(/\uE9b4CHAR\uE9b4/g, + chara.image ? (await getFileSrc(chara.image)) : '' + ) + + data = data.replace(/\uE9b4USER\uE9b4/g, + db.userIcon ? (await getFileSrc(db.userIcon)) : '' + ) } + return data }