[feat] add automark

This commit is contained in:
kwaroran
2023-07-18 00:28:44 +09:00
parent 44c81e10f9
commit 1d84f0cae1
5 changed files with 69 additions and 85 deletions

View File

@@ -343,5 +343,6 @@ export const languageEnglish = {
creationSuccess: "Creation Success",
noweb: "This feature cannot be used on web version.",
createBotInternet: "Create Bot from Internet with AI",
createBotInternetAlert: "Please provide the character's name and the corresponding series/game."
createBotInternetAlert: "Please provide the character's name and the corresponding series/game.",
able:"Able"
}

View File

@@ -4,56 +4,58 @@
import { alertConfirm } from "src/ts/alert";
import { DataBase } from "src/ts/storage/database";
import { importPlugin } from "src/ts/plugins/plugins";
import Check from "src/lib/Others/Check.svelte";
</script>
<h2 class="mb-2 text-2xl font-bold mt-2">{language.plugin}</h2>
<span class="text-draculared text-xs mb-4">{language.pluginWarn}</span>
<div class="border-solid border-borderc p-2 flex flex-col border-1">
{#if $DataBase.plugins.length === 0}
<span class="text-gray-500">No Plugins</span>
{:else}
{#each $DataBase.plugins as plugin, i}
{#if i !== 0}
<div class="border-borderc mt-2 mb-2 w-full border-solid border-b-1 seperator"></div>
{/if}
<div class="flex">
<span class="font-bold flex-grow">{plugin.displayName ?? plugin.name}</span>
<button class="gray-500 hover:gray-200 cursor-pointer" on:click={async () => {
const v = await alertConfirm(language.removeConfirm + (plugin.displayName ?? plugin.name))
if(v){
if($DataBase.currentPluginProvider === plugin.name){
$DataBase.currentPluginProvider = ''
}
let plugins = $DataBase.plugins
plugins.splice(i, 1)
$DataBase.plugins = plugins
}
}}>
<TrashIcon />
</button>
</div>
{#if Object.keys(plugin.arguments).length > 0}
<div class="flex flex-col mt-2 bg-dark-900 bg-opacity-50 p-3">
{#each Object.keys(plugin.arguments) as arg}
<span>{arg}</span>
{#if Array.isArray(plugin.arguments[arg])}
<select class="bg-transparent input-text mt-2 mb-4 text-gray-200 appearance-none" bind:value={$DataBase.plugins[i].realArg[arg]}>
{#each plugin.arguments[arg] as a}
<option value={a} class="bg-darkbg appearance-none">a</option>
{/each}
</select>
{:else if plugin.arguments[arg] === 'string'}
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" bind:value={$DataBase.plugins[i].realArg[arg]}>
{:else if plugin.arguments[arg] === 'int'}
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" type="number" bind:value={$DataBase.plugins[i].realArg[arg]}>
{/if}
{/each}
</div>
{/if}
{/each}
{/if}
<div class="flex">
<span class="font-bold flex-grow">AutoMark <span class="text-green-500 italic">(Official Plugin)</span></span>
</div>
<div class="flex items-center mt-2">
<Check bind:check={$DataBase.officialplugins.automark} name={language.able}/>
</div>
{#each $DataBase.plugins as plugin, i}
<div class="border-borderc mt-2 mb-2 w-full border-solid border-b-1 seperator"></div>
<div class="flex">
<span class="font-bold flex-grow">{plugin.displayName ?? plugin.name}</span>
<button class="gray-500 hover:gray-200 cursor-pointer" on:click={async () => {
const v = await alertConfirm(language.removeConfirm + (plugin.displayName ?? plugin.name))
if(v){
if($DataBase.currentPluginProvider === plugin.name){
$DataBase.currentPluginProvider = ''
}
let plugins = $DataBase.plugins
plugins.splice(i, 1)
$DataBase.plugins = plugins
}
}}>
<TrashIcon />
</button>
</div>
{#if Object.keys(plugin.arguments).length > 0}
<div class="flex flex-col mt-2 bg-dark-900 bg-opacity-50 p-3">
{#each Object.keys(plugin.arguments) as arg}
<span>{arg}</span>
{#if Array.isArray(plugin.arguments[arg])}
<select class="bg-transparent input-text mt-2 mb-4 text-gray-200 appearance-none" bind:value={$DataBase.plugins[i].realArg[arg]}>
{#each plugin.arguments[arg] as a}
<option value={a} class="bg-darkbg appearance-none">a</option>
{/each}
</select>
{:else if plugin.arguments[arg] === 'string'}
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" bind:value={$DataBase.plugins[i].realArg[arg]}>
{:else if plugin.arguments[arg] === 'int'}
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" type="number" bind:value={$DataBase.plugins[i].realArg[arg]}>
{/if}
{/each}
</div>
{/if}
{/each}
</div>
<div class="text-gray-500 mt-2 flex">
<button on:click={() => {

View File

@@ -4,49 +4,22 @@ const reg:[RegExp,string][] = []
export function autoMarkPlugin(data:string){
if(reg.length === 0){
const pluginRegex = [
{
"in": "“|”",
"out": "\"",
"flag": "g"
},
{
"in": "|",
"out": "'",
"flag": "g"
},
{
"in": "^(?!\\d\\.)([\\wㄱ-ㅎ가-힣'])(?!.*[{<>}])|(?<=^\\[.*\\] *|^\\(.*\\) *)([\\wㄱ-ㅎ가-힣'])(?!.*[{<>}])",
"out": "<em>$1$2",
"flag": "gm"
},
{
"in": "(?<!^ +.*)(\".*|<em>.*)(?<!\")$",
"out": "$1</em>",
"flag": "gm"
},
{
"in": "(?<=<em>.*|^\".*)( +\"[\\S])|(?<=<em>.*|\" +.*)( *\\[)",
"out": "</em>$1$2",
"flag": "gm"
},
{
"in": "(?<=^\".*|<\\/em>.*)([\\S]\" +|[\\S]\"(?=[,.…ㄱ-ㅎ가-힣]))|(?<=<\\/em>.*)( *\\] *)",
"out": "$1$2<em>",
"flag": "gm"
},
{
"in": "(?<=<em>.*? +|\\[|\\[.* +|\\(|\\(.* +|\"|\".*? +)(?<!style=.*)(')|(?<=<em>)('[\\wㄱ-ㅎ가-힣])",
"out": "<strong><em>$1$2",
"flag": "gm"
},
{
"in": "(?<=<strong><em>')(.*?')(?= +.+?|[ㄱ-ㅎ가-힣?!:;,.…—-])|(?<=<strong><em>'.*)(')(?=<\\/em>|\")|(?<=\\(<strong><em>')(?=\\))",
"out": "$1$2</em></strong>",
"flag": "gm"
}
{"comment":"──── ▼ Head 스크립트 ▼ ───────────────────────────────────────────────","in":"","out":"","type":"editinput","ableFlag":false,"flag":"g"},
{"comment":"[ 💱 ]ㅤ구조변환 #1=ㅤ대사 부호 수정","in":"“|”","out":"\"","type":"editdisplay","ableFlag":false},
{"comment":"[ 💱 ]ㅤ구조변환 #2=ㅤ생각 부호 수정","in":"|","out":"'","type":"editdisplay","ableFlag":false},
{"comment":"──── ▼ Auto 스크립트 ▼ ───────────────────────────────────────────────","in":"","out":"","type":"editinput","ableFlag":false,"flag":"g"},
{"comment":"[ 🧷 ]ㅤ이탈릭체 #1=ㅤ문장 앞 묶음 추가","in":"^(?!\\d\\.)([\\wㄱ-ㅎ가-힣'])(?!.*[{<>}])|(?<=^\\[.*\\] *|^\\(.*\\) *)([\\wㄱ-ㅎ가-힣'])(?!.*[{<>}])","out":"<em>$1$2","type":"editdisplay","ableFlag":true,"flag":"gm"},
{"comment":"[ 🧷 ]ㅤ이탈릭체 #2=ㅤ문장 뒤 묶음 추가","in":"(?<!^ +.*)(\".*|<em>.*)(?<!\")$","out":"$1</em>","type":"editdisplay","ableFlag":true,"flag":"gm"},
{"comment":"[ 🧷 ]ㅤ대사묶음 #1=ㅤ대사 앞 묶음 추가","in":"(?<=<em>.*|^\".*)( +\"[\\S])|(?<=<em>.*|\" +.*)( *\\[)","out":"</em>$1$2","type":"editdisplay","ableFlag":true,"flag":"gm"},
{"comment":"[ 🧷 ]ㅤ대사묶음 #2=ㅤ대사 뒤 묶음 추가","in":"(?<=^\".*|<\\/em>.*)([\\S]\" +|[\\S]\"(?=[,.…ㄱ-ㅎ가-힣]))|(?<=<\\/em>.*)( *\\] *)","out":"$1$2<em>","type":"editdisplay","ableFlag":true,"flag":"gm"},
{"comment":"[ 🧷 ]ㅤ생각묶음 #1=ㅤ생각 앞 묶음 추가","in":"(?<=<em>.*? +|\\[|\\[.* +|\\(|\\(.* +|\"|\".*? +)(?<!style=.*)(')|(?<=<em>)('[\\wㄱ-ㅎ가-힣])","out":"<strong><em>$1$2","type":"editdisplay","ableFlag":true,"flag":"gm"},
{"comment":"[ 🧷 ]ㅤ생각묶음 #2=ㅤ생각 뒤 묶음 추가","in":"(?<=<strong><em>')(.*?')(?= +.+?|[ㄱ-ㅎ가-힣?!:;,.…—-])|(?<=<strong><em>'.*)(')(?=<\\/em>|\")|(?<=\\(<strong><em>')(?=\\))","out":"$1$2</em></strong>","type":"editdisplay","ableFlag":true,"flag":"gm"},
{"comment":"──── ▼ Key 스크립트 ▼ ────────────────────────────────────────────────","in":"","out":"","type":"editinput","ableFlag":false},
{"comment":"[ 📝 ]ㅤ추가핫키 #1=ㅤ따옴표 추가 : (`)","in":"(?<!`)`(?!`)","out":"\"","type":"editinput","ableFlag":false},
{"comment":"[ 📝 ]ㅤ추가핫키 #2=OOC 추가 : (``)","in":"^``(?!`) *(.*)$","out":"(OOC: $1)","type":"editinput","ableFlag":true,"flag":"gm"}
]
for(const r of pluginRegex){
reg.push([new RegExp(r.in, r.flag),r.out])
reg.push([new RegExp(r.in, r.ableFlag ? r.flag : 'g'),r.out])
}
}
for(let i=0;i<reg.length;i++){

View File

@@ -6,6 +6,7 @@ import { alertError, alertNormal } from "../alert";
import { language } from "src/lang";
import { selectSingleFile } from "../util";
import { risuChatParser as risuChatParserOrg } from "../parser";
import { autoMarkPlugin } from "../plugins/automark";
const dreg = /{{data}}/g
const randomness = /\|\|\|/g
@@ -139,6 +140,9 @@ export function processScriptFull(char:character|groupChat, data:string, mode:Sc
}
}
}
if(db.officialplugins.automark){
data = autoMarkPlugin(data)
}
return {data, emoChanged}
}

View File

@@ -281,6 +281,7 @@ export function setDatabase(data:Database){
data.openrouterKey ??= ''
data.openrouterRequestModel ??= 'openai/gpt-3.5-turbo'
data.toggleConfirmRecommendedPreset ??= true
data.officialplugins ??= {}
changeLanguage(data.language)
DataBase.set(data)
}
@@ -465,6 +466,9 @@ export interface Database{
language: string
translator: string
plugins: RisuPlugin[]
officialplugins: {
automark?: boolean
}
currentPluginProvider: string
zoomsize:number
lastup:string