Laid foundation for modifiers and built a couple.

This commit is contained in:
Brad Arant 2024-11-13 14:51:34 -08:00
parent 39f5936787
commit 7fbbac4a65
4 changed files with 146 additions and 1 deletions

View File

@ -1,6 +1,7 @@
#include "Global.h" #include "Global.h"
#include "Exception.h" #include "Exception.h"
#include "__mysql.h" #include "__mysql.h"
#include "Modifiers.h"
#include <iostream> #include <iostream>
#include <stdlib.h> #include <stdlib.h>
@ -38,9 +39,29 @@ namespace jet {
} }
coreutils::MString& Global::processModifier(coreutils::MString &value, coreutils::MString &modifier) { coreutils::MString& Global::processModifier(coreutils::MString &value, coreutils::MString &modifier) {
Modifiers modifiers;
if(modifier.getLength() == 0) if(modifier.getLength() == 0)
return value; return value;
lastConverted = modifier; if(modifier == "tobinary")
modifiers.processToBinaryModifier(value, lastConverted);
if(modifier == "frombinary")
modifiers.processFromBinaryModifier(value, lastConverted);
if(modifier == "tohex")
modifiers.processToHexModifier(value, lastConverted);
if(modifier == "fromhex")
modifiers.processFromHexModifier(value, lastConverted);
if(modifier == "tobase64")
modifiers.processToBase64Modifier(value, lastConverted);
if(modifier == "frombase64")
modifiers.processFromBase64Modifier(value, lastConverted);
if(modifier == "toupper")
modifiers.processToUpperModifier(value, lastConverted);
if(modifier == "tolower")
modifiers.processToLowerModifier(value, lastConverted);
if(modifier == "tocgi")
modifiers.processToCGIModifier(value, lastConverted);
if(modifier == "fromcgi")
modifiers.processFromCGIModifier(value, lastConverted);
return lastConverted; return lastConverted;
} }

85
Modifiers.cpp Normal file
View File

@ -0,0 +1,85 @@
#include "Modifiers.h"
#include "Exception.h"
namespace jet {
void Modifiers::processToBinaryModifier(coreutils::MString &value, coreutils::MString &lastConverted) {
value.reset();
lastConverted = "";
char temp;
while(!value.eod()) {
temp = value.nextChar();
if(strchr("\\'\".\0\r\n", temp))
lastConverted.write('\\');
lastConverted.write(temp);
}
value.reset();
}
void Modifiers::processFromBinaryModifier(coreutils::MString &value, coreutils::MString &lastConverted) {
}
void Modifiers::processToHexModifier(coreutils::MString &value, coreutils::MString &lastConverted) {
value.reset();
lastConverted = "";
char temp;
while(!value.eod()) {
temp = value.nextChar();
char temp2 = temp;
temp >>= 4;
lastConverted.write(hexChar(temp));
lastConverted.write(hexChar(temp2));
}
value.reset();
}
void Modifiers::processFromHexModifier(coreutils::MString &value, coreutils::MString &lastConverted) {
value.reset();
lastConverted = "";
while(!value.eod()) {
char ch1 = value.nextChar();
ch1 -= 48;
if(ch1 > 9)
ch1 -= 7;
ch1 <<= 4;
ch1 &= 240;
if(value.eod())
coreutils::Exception("conversion from hex requires even number of characters.");
char ch2 = value.nextChar();
ch2 -= 48;
if(ch2 > 9)
ch2 -= 7;
ch2 &= 15;
ch1 |= ch2;
lastConverted.write(ch1);
}
value.reset();
}
void Modifiers::processToBase64Modifier(coreutils::MString &value, coreutils::MString &lastConverted) {
}
void Modifiers::processFromBase64Modifier(coreutils::MString &value, coreutils::MString &lastConverted) {
}
void Modifiers::processToUpperModifier(coreutils::MString &value, coreutils::MString &lastConverted) {
}
void Modifiers::processToLowerModifier(coreutils::MString &value, coreutils::MString &lastConverted) {
}
void Modifiers::processToCGIModifier(coreutils::MString &value, coreutils::MString &lastConverted) {
}
void Modifiers::processFromCGIModifier(coreutils::MString &value, coreutils::MString &lastConverted) {
}
char Modifiers::hexChar(char c) {
c &= 15;
c += 48;
if(c > 57)
c += 7;
return c;
}
}

29
Modifiers.h Normal file
View File

@ -0,0 +1,29 @@
#ifndef __MODIFIERS_H__
#define __MODIFIERS_H__
#include "MString.h"
namespace jet {
class Modifiers {
public:
void processToBinaryModifier(coreutils::MString &value, coreutils::MString &lastConverted);
void processFromBinaryModifier(coreutils::MString &value, coreutils::MString &lastConverted);
void processToHexModifier(coreutils::MString &value, coreutils::MString &lastConverted);
void processFromHexModifier(coreutils::MString &value, coreutils::MString &lastConverted);
void processToBase64Modifier(coreutils::MString &value, coreutils::MString &lastConverted);
void processFromBase64Modifier(coreutils::MString &value, coreutils::MString &lastConverted);
void processToUpperModifier(coreutils::MString &value, coreutils::MString &lastConverted);
void processToLowerModifier(coreutils::MString &value, coreutils::MString &lastConverted);
void processToCGIModifier(coreutils::MString &value, coreutils::MString &lastConverted);
void processFromCGIModifier(coreutils::MString &value, coreutils::MString &lastConverted);
private:
char hexChar(char c);
};
}
#endif

10
tests/testmodifiers.jet Executable file
View File

@ -0,0 +1,10 @@
#!../jet-2.0
<jet>
<set name="tester1" value="this is a test of the hex conversion." />
<set name="tester2" value="$[tester1;tohex]" />
1) $[tester1;tobinary]
2) $[tester1;tohex]
3) $[tester2;fromhex]
4) $[tester1]
5) $[tester2]
</jet>