aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcaleb.mabry.15@cnu.edu <caleb.mabry.15@cnu.edu>2022-03-06 17:33:07 -0500
committercaleb.mabry.15@cnu.edu <caleb.mabry.15@cnu.edu>2022-03-06 17:33:07 -0500
commit003862580fb809f0b0ef93f75d9dfea37de12e54 (patch)
tree6f56fd4398d451ca7a23551d2cd7369734076057
parentccbca8b9cede972480dd1ef7a73db71a99be9609 (diff)
Moved into another file and linted
-rw-r--r--webAO/client.js39
-rw-r--r--webAO/iniParse.js42
2 files changed, 44 insertions, 37 deletions
diff --git a/webAO/client.js b/webAO/client.js
index 7ff561b..eb7c7a2 100644
--- a/webAO/client.js
+++ b/webAO/client.js
@@ -18,6 +18,7 @@ import vanilla_background_arr from './backgrounds.js';
import vanilla_evidence_arr from './evidence.js';
import chatbox_arr from './styles/chatbox/chatboxes.js';
+import iniParse from './iniParse';
const version = process.env.npm_package_version;
@@ -843,7 +844,7 @@ class Client extends EventEmitter {
// If the ini doesn't exist on the server this will throw an error
try {
const cinidata = await request(`${AO_HOST}characters/${encodeURI(chargs[0].toLowerCase())}/char.ini`);
- cini = INI.parse(cinidata);
+ cini = iniParse(cinidata);
} catch (err) {
cini = {};
img.classList.add('noini');
@@ -2410,42 +2411,6 @@ class Viewport {
}
}
-class INI {
- static parse(data) {
- const regex = {
- section: /^\s*\[\s*([^\]]*)\s*\]\s*$/,
- param: /^\s*([\w.\-_]+)\s*=\s*(.*?)\s*$/,
- comment: /^\s*;.*$/,
- };
- const value = {};
- const lines = data.split(/\r\n|\r|\n/);
- let section;
- lines.forEach((line) => {
- if (regex.comment.test(line)) {
-
- } else if (line.length === 0) {
-
- } else if (regex.param.test(line)) {
- const match = line.match(regex.param);
- if (section) {
- if (match[1].toLowerCase() === 'showname') { // don't lowercase the showname
- value[section].showname = match[2];
- } else {
- value[section][match[1].toLowerCase()] = match[2].toLowerCase();
- }
- // } else { // we don't care about attributes without a section
- // value[match[1]] = match[2];
- }
- } else if (regex.section.test(line)) {
- const match = line.match(regex.section);
- value[match[1].toLowerCase()] = {}; // lowercase everything else
- section = match[1].toLowerCase();
- }
- });
- return value;
- }
-}
-
/**
* read a cookie from storage
* got this from w3schools
diff --git a/webAO/iniParse.js b/webAO/iniParse.js
new file mode 100644
index 0000000..fb04e67
--- /dev/null
+++ b/webAO/iniParse.js
@@ -0,0 +1,42 @@
+const regexPatterns = {
+ section: /^\s*\[\s*([^\]]*)\s*\]\s*$/,
+ param: /^\s*([\w.\-_]+)\s*=\s*(.*?)\s*$/,
+ comment: /^\s*;.*$/,
+};
+
+const valueHandler = (matchKey, matchValue) => (matchKey === 'showname' ? matchValue : matchValue.toLowerCase());
+
+const lineFilter = (value) => {
+ const isEmpty = value.length === 0;
+ const isComment = regexPatterns.comment.test(value);
+ if (isComment || isEmpty) {
+ return false;
+ }
+ return true;
+};
+
+const iniParse = (data) => {
+ const parsedIni = {};
+ const lines = data.split(/\r\n|\r|\n/);
+ const filteredLines = lines.filter(lineFilter);
+
+ let currentSection;
+ filteredLines.forEach((line) => {
+ const isParameter = regexPatterns.param.test(line);
+ const isSection = regexPatterns.section.test(line);
+ if (isParameter && currentSection) {
+ const match = line.match(regexPatterns.param);
+ const matchKey = match[1].toLowerCase();
+ const matchValue = match[2];
+ parsedIni[currentSection][matchKey] = valueHandler(matchKey, matchValue);
+ } else if (isSection) {
+ const match = line.match(regexPatterns.section);
+ const matchKey = match[1].toLowerCase();
+ parsedIni[matchKey] = {};
+ currentSection = matchKey;
+ }
+ });
+ return parsedIni;
+};
+
+export default iniParse;