base64 decoding for embedding image onto the src

This commit is contained in:
minjaesong
2020-06-03 23:22:34 +09:00
parent e59c507ea0
commit 55b167a66b
9 changed files with 105 additions and 453 deletions

3
.gitattributes vendored
View File

@@ -1,7 +1,10 @@
*.psd filter=lfs diff=lfs merge=lfs -text
*.kra filter=lfs diff=lfs merge=lfs -text
*.ogg filter=lfs diff=lfs merge=lfs -text
*.tga filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.opus filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.bytes filter=lfs diff=lfs merge=lfs -text
*.base64 filter=lfs diff=lfs merge=lfs -text

View File

@@ -64,4 +64,48 @@ system.maxmem = function() {
system.halt = function() {
exit();
};
Object.freeze(system);
Object.freeze(system);
// some utilities functions
var base64 = {};
base64._lookup = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
base64._revLookup = {"=":0,"A":0,"B":1,"C":2,"D":3,"E":4,"F":5,"G":6,"H":7,"I":8,"J":9,"K":10,"L":11,"M":12,"N":13,"O":14,"P":15,"Q":16,"R":17,"S":18,"T":19,"U":20,"V":21,"W":22,"X":23,"Y":24,"Z":25,"a":26,"b":27,"c":28,"d":29,"e":30,"f":31,"g":32,"h":33,"i":34,"j":35,"k":36,"l":37,"m":38,"n":39,"o":40,"p":41,"q":42,"r":43,"s":44,"t":45,"u":46,"v":47,"w":48,"x":49,"y":50,"z":51,"0":52,"1":53,"2":54,"3":55,"4":56,"5":57,"6":58,"7":59,"8":60,"9":61,"+":62,"/":63};
base64.atobarr = function(base64str) {
var ret = [];
for (var i = 0; i < base64str.length; i += 4) {
var bits = (base64._revLookup[base64str.charAt(i)] << 18) | (base64._revLookup[base64str.charAt(i+1)] << 12) | (base64._revLookup[base64str.charAt(i+2)] << 6) | (base64._revLookup[base64str.charAt(i+3)]);
var pads = (base64str.charAt(i+2) == "=") ? 2 : ((base64str.charAt(i+3) == "=") ? 1 : 0);
ret.push((bits >> 16) & 255);
if (pads <= 1) ret.push((bits >> 8) & 255);
if (pads == 0) ret.push(bits & 255);
}
return ret;
};
base64.atob = function(base64str) {
var ret = "";
for (var i = 0; i < base64str.length; i += 4) {
var bits = (base64._revLookup[base64str.charAt(i)] << 18) | (base64._revLookup[base64str.charAt(i+1)] << 12) | (base64._revLookup[base64str.charAt(i+2)] << 6) | (base64._revLookup[base64str.charAt(i+3)]);
var pads = (base64str.charAt(i+2) == "=") ? 2 : ((base64str.charAt(i+3) == "=") ? 1 : 0);
ret += String.fromCharCode((bits >> 16) & 255);
if (pads <= 1) ret += String.fromCharCode((bits >> 8) & 255);
if (pads == 0) ret += String.fromCharCode(bits & 255);
}
return ret;
};
base64.btoa = function(bytes) {
if (typeof bytes == "string") {
for (var i = 0; i < bytes.length; i += 3) {
}
}
else if (Array.isArray(bytes)) {
for (var i = 0; i < bytes.length; i += 3) {
}
}
else {
throw "Unknown byte representation (with typeof "+typeof bytes+")";
}
};
Object.freeze(base64);

File diff suppressed because one or more lines are too long

View File

@@ -77,6 +77,14 @@ function BasicArr() {
this.dimsize = dimsize;
}
}
// Abstract Syntax Tree
// creates empty tree node
function BasicAST() {
this.depth = 0;
this.leaves = [];
this.value = undefined;
this.type = "null"; // literal, operator, variable, function
}
basicInterpreterStatus.gosubStack = [];
basicInterpreterStatus.variables = {};
basicInterpreterStatus.defuns = {};
@@ -108,6 +116,38 @@ basicFunctions._isSeparator = function(code) {
basicFunctions._isOperator = function(code) {
return (code == 0x21 || code == 0x23 || code == 0x25 || code == 0x2A || code == 0x2B || code == 0x2D || code == 0x2E || code == 0x2F || (code >= 0x3C && code <= 0x3E) || code == 0x5E || code == 0x7C);
};
basicFunctions._parseTokens = function(tokens, states) {
// a line has one of these forms:
// VARIABLE = LITERAL
// VARIABLE = FUNCTION ARGUMENTS
// FUNCTION
// FUNCTION ARGUMENTS --arguments may contain another function call
// "FOR" VARIABLE "=" ARGUMENT "TO" ARGUMENT
// "FOR" VARIABLE "=" ARGUMENT "TO" ARGUMENT "STEP" ARGUMENT
// "IF" EXPRESSION "THEN" EXPRESSION
// "IF" EXPRESSION "THEN" EXPRESSION "ELSE" EXPRESSION
// "IF" EXPRESSION "GOTO" ARGUMENT
// "IF" EXPRESSION "GOTO" ARGUMENT "ELSE" EXPRESSION
// "WHILE" EXPRESSION
var i, j, k;
var headWord = tokens[0].toLowerCase();
var treeHead = BasicAST();
// is this a builtin function?
if (typeof basicInterpreterStatus.builtin[headWord] != "undefined") {
treeHead.value = headWord;
treeHead.type = "function";
// find and mark position of separators
var separators = [];
for (i = 1; i < tokens.length; i++) if (states[i] == "sep") separators.push(i);
// parse and populate leaves
// TODO
}
};
// @returns: line number for the next command, normally (lnum + 1); if GOTO or GOSUB was met, returns its line number
basicFunctions._interpretLine = function(lnum, cmd) {
var _debugprintStateTransition = false;
@@ -350,6 +390,11 @@ basicFunctions._interpretLine = function(lnum, cmd) {
// END TOKENISE
// PARSING (SYNTAX ANALYSIS)
var syntaxTree = basicFunctions._parseTokens(tokens, modes);
// END PARSING
println(tokens.join("~"));
println(modes.join(" "));

BIN
fox.base64 LFS Normal file

Binary file not shown.

BIN
fox.bytes LFS Normal file

Binary file not shown.

BIN
fox.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

BIN
fox.tga LFS Normal file

Binary file not shown.

View File

@@ -61,6 +61,7 @@ class VMGUI(val appConfig: LwjglApplicationConfiguration) : ApplicationAdapter()
//val fr = FileReader("./assets/tvdos/command.js")
val fr = FileReader("./assets/tbas/basic.js")
//val fr = FileReader("./assets/jscon.js")
val prg = fr.readText()
fr.close()