Skip to content

Commit d3c8deb

Browse files
author
linzhijun
committed
fix
1 parent 32cc72a commit d3c8deb

10 files changed

Lines changed: 182 additions & 121 deletions

File tree

‎JavaScript/src/Internals/Functions/CsharpWeb/Function_BASE64TOTEXT.js‎

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,26 @@
11
import { Function_1 } from '../Function_1.js';
22
import { Operand } from '../../../Operand.js';
33

4+
/**
5+
* Function_BASE64TOTEXT
6+
*/
7+
export class Function_BASE64TOTEXT extends Function_1 {
8+
/**
9+
* @param {FunctionBase[]} funcs
10+
*/
11+
constructor(funcs) {
12+
super(funcs);
13+
}
414

5-
class Function_BASE64TOTEXT extends Function_1 {
615
get Name() {
716
return "Base64ToText";
817
}
918

10-
constructor(a) {
11-
super(a);
12-
}
13-
19+
/**
20+
* @param {AlgorithmEngine} engine
21+
* @param {Function} tempParameter
22+
* @returns {Operand}
23+
*/
1424
evaluate(engine, tempParameter) {
1525
let args1 = this.getText_1(engine, tempParameter);
1626
if (args1.IsError) { return args1; }
@@ -19,10 +29,7 @@ class Function_BASE64TOTEXT extends Function_1 {
1929
let t = buffer.toString('utf-8');
2030
return Operand.Create(t);
2131
} catch (e) {
22-
return this.functionError();
32+
return this.parameterError(1);
2333
}
2434
}
2535
}
26-
27-
export { Function_BASE64TOTEXT };
28-

‎JavaScript/src/Internals/Functions/CsharpWeb/Function_BASE64URLTOTEXT.js‎

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,26 @@
11
import { Function_1 } from '../Function_1.js';
22
import { Operand } from '../../../Operand.js';
33

4+
/**
5+
* Function_BASE64URLTOTEXT
6+
*/
7+
export class Function_BASE64URLTOTEXT extends Function_1 {
8+
/**
9+
* @param {FunctionBase[]} funcs
10+
*/
11+
constructor(funcs) {
12+
super(funcs);
13+
}
414

5-
class Function_BASE64URLTOTEXT extends Function_1 {
615
get Name() {
716
return "Base64UrlToText";
817
}
918

10-
constructor(a) {
11-
super(a);
12-
}
13-
19+
/**
20+
* @param {AlgorithmEngine} engine
21+
* @param {Function} tempParameter
22+
* @returns {Operand}
23+
*/
1424
evaluate(engine, tempParameter) {
1525
let args1 = this.getText_1(engine, tempParameter);
1626
if (args1.IsError) { return args1; }
@@ -26,10 +36,7 @@ class Function_BASE64URLTOTEXT extends Function_1 {
2636
let t = buffer.toString('utf-8');
2737
return Operand.Create(t);
2838
} catch (e) {
29-
return this.functionError();
39+
return this.parameterError(1);
3040
}
3141
}
3242
}
33-
34-
export { Function_BASE64URLTOTEXT };
35-

‎JavaScript/src/Internals/Functions/CsharpWeb/Function_HTMLDECODE.js‎

Lines changed: 49 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,66 @@
11
import { Function_1 } from '../Function_1.js';
22
import { Operand } from '../../../Operand.js';
33

4+
/**
5+
* Function_HTMLDECODE
6+
*/
7+
export class Function_HTMLDECODE extends Function_1 {
8+
/**
9+
* @param {FunctionBase[]} funcs
10+
*/
11+
constructor(funcs) {
12+
super(funcs);
13+
}
414

5-
class Function_HTMLDECODE extends Function_1 {
615
get Name() {
716
return "HtmlDecode";
817
}
918

10-
constructor(a) {
11-
super(a);
12-
}
13-
19+
/**
20+
* @param {AlgorithmEngine} engine
21+
* @param {Function} tempParameter
22+
* @returns {Operand}
23+
*/
1424
evaluate(engine, tempParameter) {
1525
let args1 = this.getText_1(engine, tempParameter);
1626
if (args1.IsError) { return args1; }
1727
let s = args1.TextValue;
18-
let r = Function_HTMLDECODE.HtmlDecode(s);
28+
let r = htmlDecode(s);
1929
return Operand.Create(r);
2030
}
31+
}
2132

22-
static HtmlDecode(input) {
23-
if (input == null) return '';
24-
const entities = {
25-
'amp': '&', 'lt': '<', 'gt': '>', 'quot': '"', 'apos': "'",
26-
'nbsp': '\u00A0', 'iexcl': '\u00A1', 'cent': '\u00A2', 'pound': '\u00A3',
27-
'curren': '\u00A4', 'yen': '\u00A5', 'brvbar': '\u00A6', 'sect': '\u00A7',
28-
'uml': '\u00A8', 'copy': '\u00A9', 'ordf': '\u00AA', 'laquo': '\u00AB',
29-
'not': '\u00AC', 'shy': '\u00AD', 'reg': '\u00AE', 'macr': '\u00AF',
30-
'deg': '\u00B0', 'plusmn': '\u00B1', 'sup2': '\u00B2', 'sup3': '\u00B3',
31-
'acute': '\u00B4', 'micro': '\u00B5', 'para': '\u00B6', 'middot': '\u00B7',
32-
'cedil': '\u00B8', 'sup1': '\u00B9', 'ordm': '\u00BA', 'raquo': '\u00BB',
33-
'frac14': '\u00BC', 'frac12': '\u00BD', 'frac34': '\u00BE', 'iquest': '\u00BF',
34-
'times': '\u00D7', 'divide': '\u00F7', 'euro': '\u20AC', 'trade': '\u2122'
35-
};
36-
return input.toString().replace(/&(?:#\d+|#x[0-9a-fA-F]+|[a-zA-Z][a-zA-Z0-9]*);/g, function (match) {
37-
let body = match.slice(1, -1);
38-
if (body[0] === '#') {
39-
let code;
40-
if (body[1] === 'x' || body[1] === 'X') {
41-
code = parseInt(body.slice(2), 16);
42-
} else {
43-
code = parseInt(body.slice(1), 10);
44-
}
45-
if (isNaN(code)) { return match; }
46-
try {
47-
return String.fromCodePoint(code);
48-
} catch (e) {
49-
return match;
50-
}
33+
function htmlDecode(input) {
34+
if (input == null) return '';
35+
const entities = {
36+
'amp': '&', 'lt': '<', 'gt': '>', 'quot': '"', 'apos': "'",
37+
'nbsp': '\u00A0', 'iexcl': '\u00A1', 'cent': '\u00A2', 'pound': '\u00A3',
38+
'curren': '\u00A4', 'yen': '\u00A5', 'brvbar': '\u00A6', 'sect': '\u00A7',
39+
'uml': '\u00A8', 'copy': '\u00A9', 'ordf': '\u00AA', 'laquo': '\u00AB',
40+
'not': '\u00AC', 'shy': '\u00AD', 'reg': '\u00AE', 'macr': '\u00AF',
41+
'deg': '\u00B0', 'plusmn': '\u00B1', 'sup2': '\u00B2', 'sup3': '\u00B3',
42+
'acute': '\u00B4', 'micro': '\u00B5', 'para': '\u00B6', 'middot': '\u00B7',
43+
'cedil': '\u00B8', 'sup1': '\u00B9', 'ordm': '\u00BA', 'raquo': '\u00BB',
44+
'frac14': '\u00BC', 'frac12': '\u00BD', 'frac34': '\u00BE', 'iquest': '\u00BF',
45+
'times': '\u00D7', 'divide': '\u00F7', 'euro': '\u20AC', 'trade': '\u2122'
46+
};
47+
return input.toString().replace(/&(?:#\d+|#x[0-9a-fA-F]+|[a-zA-Z][a-zA-Z0-9]*);/g, function (match) {
48+
let body = match.slice(1, -1);
49+
if (body[0] === '#') {
50+
let code;
51+
if (body[1] === 'x' || body[1] === 'X') {
52+
code = parseInt(body.slice(2), 16);
53+
} else {
54+
code = parseInt(body.slice(1), 10);
5155
}
52-
let v = entities[body];
53-
return v !== undefined ? v : match;
54-
});
55-
}
56+
if (isNaN(code)) { return match; }
57+
try {
58+
return String.fromCodePoint(code);
59+
} catch (e) {
60+
return match;
61+
}
62+
}
63+
let v = entities[body];
64+
return v !== undefined ? v : match;
65+
});
5666
}
57-
58-
export { Function_HTMLDECODE };
59-
Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,45 @@
11
import { Function_1 } from '../Function_1.js';
22
import { Operand } from '../../../Operand.js';
33

4+
/**
5+
* Function_HTMLENCODE
6+
*/
7+
export class Function_HTMLENCODE extends Function_1 {
8+
/**
9+
* @param {FunctionBase[]} funcs
10+
*/
11+
constructor(funcs) {
12+
super(funcs);
13+
}
414

5-
class Function_HTMLENCODE extends Function_1 {
615
get Name() {
716
return "HtmlEncode";
817
}
918

10-
constructor(a) {
11-
super(a);
12-
}
13-
19+
/**
20+
* @param {AlgorithmEngine} engine
21+
* @param {Function} tempParameter
22+
* @returns {Operand}
23+
*/
1424
evaluate(engine, tempParameter) {
1525
let args1 = this.getText_1(engine, tempParameter);
1626
if (args1.IsError) { return args1; }
1727
let s = args1.TextValue;
18-
let r = Function_HTMLENCODE.HtmlEncode(s);
28+
let r = htmlEncode(s);
1929
return Operand.Create(r);
2030
}
21-
22-
static HtmlEncode(input) {
23-
if (input == null) return '';
24-
return input.toString().replace(/[&<>'"]/g, function (match) {
25-
switch (match) {
26-
case '&': return '&amp;';
27-
case '<': return '&lt;';
28-
case '>': return '&gt;';
29-
case '"': return '&quot;';
30-
case "'": return '&#39;';
31-
default: return match;
32-
}
33-
});
34-
}
3531
}
3632

37-
export { Function_HTMLENCODE };
38-
33+
function htmlEncode(input) {
34+
if (input == null) return '';
35+
return input.toString().replace(/[&<>'"]/g, function (match) {
36+
switch (match) {
37+
case '&': return '&amp;';
38+
case '<': return '&lt;';
39+
case '>': return '&gt;';
40+
case '"': return '&quot;';
41+
case "'": return '&#39;';
42+
default: return match;
43+
}
44+
});
45+
}

‎JavaScript/src/Internals/Functions/CsharpWeb/Function_TEXTTOBASE64.js‎

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,26 @@
11
import { Function_1 } from '../Function_1.js';
22
import { Operand } from '../../../Operand.js';
33

4+
/**
5+
* Function_TEXTTOBASE64
6+
*/
7+
export class Function_TEXTTOBASE64 extends Function_1 {
8+
/**
9+
* @param {FunctionBase[]} funcs
10+
*/
11+
constructor(funcs) {
12+
super(funcs);
13+
}
414

5-
class Function_TEXTTOBASE64 extends Function_1 {
615
get Name() {
716
return "TextToBase64";
817
}
918

10-
constructor(a) {
11-
super(a);
12-
}
13-
19+
/**
20+
* @param {AlgorithmEngine} engine
21+
* @param {Function} tempParameter
22+
* @returns {Operand}
23+
*/
1424
evaluate(engine, tempParameter) {
1525
let args1 = this.getText_1(engine, tempParameter);
1626
if (args1.IsError) { return args1; }
@@ -19,10 +29,7 @@ class Function_TEXTTOBASE64 extends Function_1 {
1929
let t = buffer.toString('base64');
2030
return Operand.Create(t);
2131
} catch (e) {
22-
return this.functionError();
32+
return this.parameterError(1);
2333
}
2434
}
2535
}
26-
27-
export { Function_TEXTTOBASE64 };
28-

‎JavaScript/src/Internals/Functions/CsharpWeb/Function_TEXTTOBASE64URL.js‎

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,26 @@
11
import { Function_1 } from '../Function_1.js';
22
import { Operand } from '../../../Operand.js';
33

4+
/**
5+
* Function_TEXTTOBASE64URL
6+
*/
7+
export class Function_TEXTTOBASE64URL extends Function_1 {
8+
/**
9+
* @param {FunctionBase[]} funcs
10+
*/
11+
constructor(funcs) {
12+
super(funcs);
13+
}
414

5-
class Function_TEXTTOBASE64URL extends Function_1 {
615
get Name() {
716
return "TextToBase64Url";
817
}
918

10-
constructor(a) {
11-
super(a);
12-
}
13-
19+
/**
20+
* @param {AlgorithmEngine} engine
21+
* @param {Function} tempParameter
22+
* @returns {Operand}
23+
*/
1424
evaluate(engine, tempParameter) {
1525
let args1 = this.getText_1(engine, tempParameter);
1626
if (args1.IsError) { return args1; }
@@ -22,10 +32,7 @@ class Function_TEXTTOBASE64URL extends Function_1 {
2232
.replace(/\//g, '_');
2333
return Operand.Create(t);
2434
} catch (e) {
25-
return this.functionError();
35+
return this.parameterError(1);
2636
}
2737
}
2838
}
29-
30-
export { Function_TEXTTOBASE64URL };
31-

‎JavaScript/src/Internals/Functions/CsharpWeb/Function_URLDECODE.js‎

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,26 @@
11
import { Function_1 } from '../Function_1.js';
22
import { Operand } from '../../../Operand.js';
33

4+
/**
5+
* Function_URLDECODE
6+
*/
7+
export class Function_URLDECODE extends Function_1 {
8+
/**
9+
* @param {FunctionBase[]} funcs
10+
*/
11+
constructor(funcs) {
12+
super(funcs);
13+
}
414

5-
class Function_URLDECODE extends Function_1 {
615
get Name() {
716
return "UrlDecode";
817
}
918

10-
constructor(a) {
11-
super(a);
12-
}
13-
19+
/**
20+
* @param {AlgorithmEngine} engine
21+
* @param {Function} tempParameter
22+
* @returns {Operand}
23+
*/
1424
evaluate(engine, tempParameter) {
1525
let args1 = this.getText_1(engine, tempParameter);
1626
if (args1.IsError) { return args1; }
@@ -20,11 +30,8 @@ class Function_URLDECODE extends Function_1 {
2030
let r = decodeURIComponent(s2);
2131
return Operand.Create(r);
2232
} catch (e) {
23-
// C# HttpUtility.UrlDecode 对无效编码不抛异常,原样返回
33+
// C# HttpUtility.UrlDecode 对无效编码不抛异常,返回部分解码结果
2434
return Operand.Create(s2);
2535
}
2636
}
2737
}
28-
29-
export { Function_URLDECODE };
30-

0 commit comments

Comments
 (0)