diff --git a/src/lib/Setting/Pages/AdvancedSettings.svelte b/src/lib/Setting/Pages/AdvancedSettings.svelte
index bd8617ba..8e7d2f90 100644
--- a/src/lib/Setting/Pages/AdvancedSettings.svelte
+++ b/src/lib/Setting/Pages/AdvancedSettings.svelte
@@ -78,6 +78,11 @@
+
+
+
+
+
{
// access code is "tendo"
diff --git a/src/styles.css b/src/styles.css
index b84cd0ac..f309373b 100644
--- a/src/styles.css
+++ b/src/styles.css
@@ -65,6 +65,12 @@ html, body{
color: var(--FontColorItalicBold);
}
+.chattext x-em{
+ color: var(--FontColorItalicBold);
+ font-style: italic;
+ font-weight: bold;
+}
+
::-webkit-scrollbar {
width: 5px;
height: 5px;
diff --git a/src/ts/parser.ts b/src/ts/parser.ts
index 815469ae..f729d269 100644
--- a/src/ts/parser.ts
+++ b/src/ts/parser.ts
@@ -12,6 +12,7 @@ import { calcString } from './process/infunctions';
import { findCharacterbyId } from './util';
import { getInlayImage } from './image';
import { cloneDeep } from 'lodash';
+import { autoMarkNew } from './plugins/automark';
const convertora = new showdown.Converter({
simpleLineBreaks: true,
@@ -134,7 +135,7 @@ export interface simpleCharacterArgument{
export async function ParseMarkdown(data:string, charArg:(simpleCharacterArgument | groupChat | string) = null, mode:'normal'|'back' = 'normal', chatID=-1) {
let firstParsed = ''
const orgDat = data
-
+ const db = get(DataBase)
let char = (typeof(charArg) === 'string') ? (findCharacterbyId(charArg)) : (charArg)
if(char && char.type !== 'group'){
data = await parseAdditionalAssets(data, char, mode, 'pre')
@@ -147,11 +148,31 @@ export async function ParseMarkdown(data:string, charArg:(simpleCharacterArgumen
data = await parseAdditionalAssets(data, char, mode, 'post')
}
data = await parseInlayImages(data)
- return decodeStyle(DOMPurify.sanitize(mconverted.parse(encodeStyle(data)), {
- ADD_TAGS: ["iframe", "style", "risu-style"],
- ADD_ATTR: ["allow", "allowfullscreen", "frameborder", "scrolling", "risu-btn"],
- FORBID_ATTR: ["href"]
- }))
+ if(db.automark){
+ // data = autoMarkNew(DOMPurify.sanitize(data, {
+ // ADD_TAGS: ["iframe", "style", "risu-style", "x-em"],
+ // ADD_ATTR: ["allow", "allowfullscreen", "frameborder", "scrolling", "risu-btn"],
+ // FORBID_ATTR: ["href"]
+ // }))
+ // return data
+ // data = autoMarkNew(data)
+ // data = encodeStyle(data)
+ // data = mconverted.parse(data)
+ return (DOMPurify.sanitize(autoMarkNew(data), {
+ ADD_TAGS: ["iframe", "style", "risu-style", "x-em"],
+ ADD_ATTR: ["allow", "allowfullscreen", "frameborder", "scrolling", "risu-btn"],
+ FORBID_ATTR: ["href"]
+ }))
+ }
+ else{
+ data = encodeStyle(data)
+ data = mconverted.parse(data)
+ return decodeStyle(DOMPurify.sanitize(data, {
+ ADD_TAGS: ["iframe", "style", "risu-style", "x-em"],
+ ADD_ATTR: ["allow", "allowfullscreen", "frameborder", "scrolling", "risu-btn"],
+ FORBID_ATTR: ["href"]
+ }))
+ }
}
export function parseMarkdownSafe(data:string) {
diff --git a/src/ts/plugins/automark.ts b/src/ts/plugins/automark.ts
index 8f3ddb7b..9ded4aab 100644
--- a/src/ts/plugins/automark.ts
+++ b/src/ts/plugins/automark.ts
@@ -26,4 +26,134 @@ export function autoMarkPlugin(data:string){
return data
+}
+
+export function autoMarkNew(dat:string){
+ const excludeTexts = ["#","1.","2.","3.","4.","5.","6.","7.","8.","9.","0."]
+ const mark = (data:string) => {
+ for(const text of excludeTexts){
+ if(data.startsWith(text)){
+ return document.createTextNode(data)
+ }
+ }
+
+ let index = 0
+ let stacks:Node[] = [document.createElement('p')]
+ let stackText = [""]
+ let stackType:number[] = [0]
+ function isAlpha(str:string) {
+ //check if string is alphabet, including extended latin by charcode. string.length === 1
+ const code = str.charCodeAt(0)
+ return (code > 64 && code < 91) || (code > 96 && code < 123) || (code > 127 && code < 256)
+ }
+ let stackIndex = 0
+ while(index < data.length){
+ switch(data[index]){
+ case '"':
+ case '“':
+ case '”':{
+ if(stackType[stackIndex] === 1){
+ const stack = stacks.pop()
+ stackText[stackIndex] += data[index]
+ stack.appendChild(document.createTextNode(stackText.pop()))
+ stackType.pop()
+ stackIndex--
+ stacks[stackIndex].appendChild(stack)
+ }
+ else{
+ stacks[stackIndex].appendChild(document.createTextNode(stackText[stackIndex]))
+ stackText[stackIndex] = ""
+ stacks.push(document.createElement('x-placeholder'))
+ stackText.push(data[index])
+ stackType.push(1)
+ stackIndex++
+ }
+ break
+ }
+ case "'":
+ case "‘":
+ case "’":{
+ if(stackType[stackIndex] === 2){
+ if(data[index+1] === undefined || !isAlpha(data[index+1])){
+ const stack = stacks.pop()
+ stackText[stackIndex] += data[index]
+ stack.appendChild(document.createTextNode(stackText.pop()))
+ stackType.pop()
+ stackIndex--
+ stacks[stackIndex].appendChild(stack)
+ }
+ else{
+ stackText[stackIndex] += data[index]
+ }
+ }
+ else{
+ if(data[index-1] === ' ' || data[index-1] === '\n' || data[index-1] === undefined){
+ stacks[stackIndex].appendChild(document.createTextNode(stackText[stackIndex]))
+ stackText[stackIndex] = ""
+ stacks.push(document.createElement('x-em'))
+ stackText.push(data[index])
+ stackType.push(2)
+ stackIndex++
+ }
+ else{
+ stackText[stackIndex] += data[index]
+ }
+
+ }
+ break
+ }
+ case '\n':{
+ stacks[stackIndex].appendChild(document.createTextNode(stackText[stackIndex]))
+ stackText[stackIndex] = ""
+ stacks[stackIndex].appendChild(document.createElement('br'))
+ }
+ default:{
+ stackText[stackIndex] += data[index]
+ }
+ }
+ index++
+ }
+ for(let i=stackIndex;i>0;i--){
+ stacks[i-1].appendChild(document.createTextNode(stackText[i]))
+ stacks[i-1].appendChild(stacks[i])
+ }
+ stacks[0].appendChild(document.createTextNode(stackText[0]))
+ const childs = stacks[0].childNodes
+ for(let i=0;i${dat}