From a5d85f1e7cdbf144e2793da3bb5183eff9c6a7bc Mon Sep 17 00:00:00 2001 From: "caleb.mabry.15@cnu.edu" Date: Tue, 22 Mar 2022 00:16:34 -0400 Subject: converted to typescript --- webAO/utils/aoml.ts | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 webAO/utils/aoml.ts (limited to 'webAO/utils/aoml.ts') diff --git a/webAO/utils/aoml.ts b/webAO/utils/aoml.ts new file mode 100644 index 0000000..898d8fb --- /dev/null +++ b/webAO/utils/aoml.ts @@ -0,0 +1,133 @@ +import request from "../services/request" + +interface Aoml { + name: string; + start: string; + end: string; + remove: number; + talking: number; + color: string; +} +const aomlParser = (text: string) => { + let parsed: {[key: string]: Aoml}= {} + let currentHeader = '' + for (const line of text.split(/\r?\n/)) { + if (line === '') { + currentHeader = '' + continue; + } + const content = line.split(' = ') + const contentName = content[0] + const contentValue = content[1] + if (currentHeader === '') { + currentHeader = contentName + parsed[currentHeader] = { + color: contentValue + } as Aoml + } else { + const contentKey = contentName.split('_')[1] + parsed[currentHeader][contentKey] = contentValue + } + } + return parsed +} + + + + +const mlConfig = (AO_HOST) => { + const defaultUrl = `${AO_HOST}themes/default/chat_config.ini` + let aomlParsed: {[key: string]: Aoml} = {} + + request(defaultUrl).then((data) => { + aomlParsed = aomlParser(data) + } + ); + + const createIdentifiers = () => { + const identifiers = new Map() + for (const [ruleName, value] of Object.entries(aomlParsed)) { + if (identifiers.has(value.start)) { + throw new Error() + } + else if (value.start && value.end) { + identifiers.set(value.start, value) + identifiers.set(value.end, value) + } + + + } + return identifiers + } + const createStartIdentifiers = () => { + const startingIdentifiers = new Set() + for (const [ruleName, value] of Object.entries(aomlParsed)) { + if (value?.start && value?.end) { + startingIdentifiers.add(value.start) + } + } + return startingIdentifiers + } + + const applyMarkdown = (text: string, defaultColor: string) => { + const identifiers = createIdentifiers() + const startIdentifiers = createStartIdentifiers() + const closingStack = [] + const colorStack = [] + // each value in output will be an html element + let output: HTMLSpanElement[] = [] + for (const letter of text) { + let currentSelector = document.createElement('span') + let currentIdentifier = identifiers.get(letter) + const currentClosingLetter = closingStack[closingStack.length-1] + const keepChar = Number(currentIdentifier?.remove) === 0 + console.log(startIdentifiers) + if (startIdentifiers.has(letter)) { + const color = identifiers.get(letter).color.split(',') + const r = color[0] + const g = color[1] + const b = color[2] + colorStack.push([r,g,b]) + closingStack.push(currentIdentifier.end) + const currentColor = `color: rgb(${r},${g},${b});` + currentSelector.setAttribute('style', currentColor) + if (keepChar) { + currentSelector.innerHTML = letter + } + } else if (currentClosingLetter === letter) { + if (colorStack.length === 0) { + currentSelector.className = `test_${defaultColor}` + } else { + const r = colorStack[colorStack.length-1][0] + const g = colorStack[colorStack.length-1][1] + const b = colorStack[colorStack.length-1][2] + const currentColor = `color: rgb(${r},${g},${b});` + currentSelector.setAttribute('style', currentColor) + } + closingStack.pop() + colorStack.pop() + if (keepChar) { + currentSelector.innerHTML = letter + } + } else { + currentSelector.innerHTML = letter + if (colorStack.length === 0) { + currentSelector.className = `text_${defaultColor}` + } else { + const r = colorStack[colorStack.length-1][0] + const g = colorStack[colorStack.length-1][1] + const b = colorStack[colorStack.length-1][2] + const currentColor = `color: rgb(${r},${g},${b});` + currentSelector.setAttribute('style', currentColor) + } + } + output.push(currentSelector) + } + return output + } + return { + applyMarkdown + } +} + +export default mlConfig \ No newline at end of file -- cgit From 7c88c0bcca6e47cca4e2632df8ced778fa38c341 Mon Sep 17 00:00:00 2001 From: "caleb.mabry.15@cnu.edu" Date: Wed, 23 Mar 2022 00:33:18 -0400 Subject: Final commit --- webAO/utils/aoml.ts | 51 ++++++++++++++++++--------------------------------- 1 file changed, 18 insertions(+), 33 deletions(-) (limited to 'webAO/utils/aoml.ts') diff --git a/webAO/utils/aoml.ts b/webAO/utils/aoml.ts index 898d8fb..fb26db8 100644 --- a/webAO/utils/aoml.ts +++ b/webAO/utils/aoml.ts @@ -32,46 +32,34 @@ const aomlParser = (text: string) => { return parsed } - - - const mlConfig = (AO_HOST) => { const defaultUrl = `${AO_HOST}themes/default/chat_config.ini` - let aomlParsed: {[key: string]: Aoml} = {} + let aomlParsed: Promise<{[key: string]: Aoml}> = request(defaultUrl).then((data) => aomlParser(data)); - request(defaultUrl).then((data) => { - aomlParsed = aomlParser(data) - } - ); + - const createIdentifiers = () => { + const createIdentifiers = async () => { const identifiers = new Map() - for (const [ruleName, value] of Object.entries(aomlParsed)) { - if (identifiers.has(value.start)) { - throw new Error() - } - else if (value.start && value.end) { + for (const [ruleName, value] of Object.entries(await aomlParsed)) { + if (value.start && value.end) { identifiers.set(value.start, value) identifiers.set(value.end, value) - } - - + } } return identifiers } - const createStartIdentifiers = () => { + const createStartIdentifiers = async () => { const startingIdentifiers = new Set() - for (const [ruleName, value] of Object.entries(aomlParsed)) { + for (const [ruleName, value] of Object.entries(await aomlParsed)) { if (value?.start && value?.end) { startingIdentifiers.add(value.start) } } return startingIdentifiers } - - const applyMarkdown = (text: string, defaultColor: string) => { - const identifiers = createIdentifiers() - const startIdentifiers = createStartIdentifiers() + const applyMarkdown = async (text: string, defaultColor: string) => { + const identifiers = await createIdentifiers() + const startIdentifiers = await createStartIdentifiers() const closingStack = [] const colorStack = [] // each value in output will be an html element @@ -81,7 +69,8 @@ const mlConfig = (AO_HOST) => { let currentIdentifier = identifiers.get(letter) const currentClosingLetter = closingStack[closingStack.length-1] const keepChar = Number(currentIdentifier?.remove) === 0 - console.log(startIdentifiers) + console.log(currentClosingLetter, letter, keepChar) + if (startIdentifiers.has(letter)) { const color = identifiers.get(letter).color.split(',') const r = color[0] @@ -95,15 +84,11 @@ const mlConfig = (AO_HOST) => { currentSelector.innerHTML = letter } } else if (currentClosingLetter === letter) { - if (colorStack.length === 0) { - currentSelector.className = `test_${defaultColor}` - } else { - const r = colorStack[colorStack.length-1][0] - const g = colorStack[colorStack.length-1][1] - const b = colorStack[colorStack.length-1][2] - const currentColor = `color: rgb(${r},${g},${b});` - currentSelector.setAttribute('style', currentColor) - } + const r = colorStack[colorStack.length-1][0] + const g = colorStack[colorStack.length-1][1] + const b = colorStack[colorStack.length-1][2] + const currentColor = `color: rgb(${r},${g},${b});` + currentSelector.setAttribute('style', currentColor) closingStack.pop() colorStack.pop() if (keepChar) { -- cgit From efe16e1c1e7d4b0ea13c04b816d046ad21eeadb0 Mon Sep 17 00:00:00 2001 From: "caleb.mabry.15@cnu.edu" Date: Wed, 23 Mar 2022 00:38:26 -0400 Subject: Artifacts from testing --- webAO/utils/aoml.ts | 1 - 1 file changed, 1 deletion(-) (limited to 'webAO/utils/aoml.ts') diff --git a/webAO/utils/aoml.ts b/webAO/utils/aoml.ts index fb26db8..da66d0c 100644 --- a/webAO/utils/aoml.ts +++ b/webAO/utils/aoml.ts @@ -69,7 +69,6 @@ const mlConfig = (AO_HOST) => { let currentIdentifier = identifiers.get(letter) const currentClosingLetter = closingStack[closingStack.length-1] const keepChar = Number(currentIdentifier?.remove) === 0 - console.log(currentClosingLetter, letter, keepChar) if (startIdentifiers.has(letter)) { const color = identifiers.get(letter).color.split(',') -- cgit From 63410fd71e31e0de21aed41016983146405e2e9d Mon Sep 17 00:00:00 2001 From: stonedDiscord Date: Wed, 23 Mar 2022 21:52:13 +0100 Subject: ao host is a string --- webAO/utils/aoml.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'webAO/utils/aoml.ts') diff --git a/webAO/utils/aoml.ts b/webAO/utils/aoml.ts index da66d0c..154274d 100644 --- a/webAO/utils/aoml.ts +++ b/webAO/utils/aoml.ts @@ -32,7 +32,7 @@ const aomlParser = (text: string) => { return parsed } -const mlConfig = (AO_HOST) => { +const mlConfig = (AO_HOST: string) => { const defaultUrl = `${AO_HOST}themes/default/chat_config.ini` let aomlParsed: Promise<{[key: string]: Aoml}> = request(defaultUrl).then((data) => aomlParser(data)); -- cgit