aboutsummaryrefslogtreecommitdiff
path: root/webAO/iniParse.js
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 /webAO/iniParse.js
parentccbca8b9cede972480dd1ef7a73db71a99be9609 (diff)
Moved into another file and linted
Diffstat (limited to 'webAO/iniParse.js')
-rw-r--r--webAO/iniParse.js42
1 files changed, 42 insertions, 0 deletions
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;