Skip to content

Commit e631acf

Browse files
committed
fix function expand_module_String(options)
1 parent 5684194 commit e631acf

4 files changed

Lines changed: 25 additions & 13 deletions

File tree

_test suite/test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5813,7 +5813,7 @@ function test_wiki() {
58135813
var options = CeL.wiki.add_session_to_options(enwiki, { on_page_title: 'ABC', allow_promise: true });
58145814
return Promise.all([
58155815
'{{w|ABC}}{{w|ABC|DEF}}',
5816-
'{{str rightc |Lorem ipsum dolor sit amet |10}}',
5816+
'{{str right |Lorem ipsum dolor sit amet |10}}',
58175817
// [[w:en:Template:Str sub new]]
58185818
'{{str sub new|1234567890|3|7}}',
58195819
'{{str sub new|1234567890|3|-3}}',
@@ -5832,7 +5832,7 @@ function test_wiki() {
58325832
//console.trace(results);
58335833
var i = 0;
58345834
assert(['[[ABC]][[ABC|DEF]]', results[i++].toString()], 'CeL.wiki.expand_transclusion() using wiki.template_functions: {{w}}');
5835-
assert(['r sit amet', results[i++].toString()], 'CeL.wiki.expand_transclusion( {{str rightc}} )');
5835+
assert(['m dolor sit amet', results[i++].toString()], 'CeL.wiki.expand_transclusion( {{str right}} )');
58365836
// [[w:en:Template:Str sub new]]
58375837
assert(['34567', results[i++].toString()], 'CeL.wiki.expand_transclusion( {{str sub new ||+|+ }} )');
58385838
assert(['345678', results[i++].toString()], 'CeL.wiki.expand_transclusion( {{str sub new ||+|-}} )');

application/net/wiki/parser/evaluate.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1982,7 +1982,9 @@ function module_code(library_namespace) {
19821982
expression = eval_expr(expression);
19831983
if (expression instanceof wiki_API.wiki_error)
19841984
return expression.toString();
1985-
token = get_parameter_String(expression ? 2 : 3) || '';
1985+
token = get_parameter_String(expression && expression !== '0' ? 2
1986+
: 3)
1987+
|| '';
19861988
token = wiki_API.trim_token(token);
19871989
// console.trace(token);
19881990
break;

application/net/wiki/parser/misc.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1210,8 +1210,8 @@ function module_code(library_namespace) {
12101210
|| to_template_token.type !== 'transclusion'
12111211
|| !Array.isArray(from_template_token)
12121212
|| from_template_token.type !== 'transclusion') {
1213-
throw new Error(
1214-
'merge_template_parameters: Invalid template token!');
1213+
throw new Error('merge_template_parameters: '
1214+
+ 'Invalid template token!');
12151215
return;
12161216
}
12171217

application/net/wiki/template_functions/general_functions.js

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -622,6 +622,7 @@ function module_code(library_namespace) {
622622
var parameters = token.parameters;
623623
if (!(NO in parameters))
624624
return;
625+
625626
var value = parameters[NO].toString();
626627
if (/{{/.test(value)) {
627628
var _value = wiki_API.expand_transclusion(value, options);
@@ -640,24 +641,33 @@ function module_code(library_namespace) {
640641
// [[w:en:Module:String]]
641642
function expand_module_String(options) {
642643
/* const */var token = this;
644+
var index = 1;
645+
// 警告: 本函數中取用 get_parameter(NO) 必須嚴格按照 [[Module:String]]
646+
// 的順序,且每一參數僅能取用一次。
643647
function get_parameter(NO) {
644-
return get_parameter_of_token(NO, token, options);
648+
var parameter_value = get_parameter_of_token(NO, token, options);
649+
if (parameter_value === undefined) {
650+
// @see function str._getParameters @ [[Module:String]]
651+
parameter_value = get_parameter_of_token(index++, token,
652+
options);
653+
}
654+
return parameter_value;
645655
}
646656

647657
switch (token.function_name) {
648658
case 'len':
649-
return (get_parameter('s') || get_parameter(1)).length;
659+
return get_parameter('s').length;
650660

651661
case 'endswith':
652-
return (get_parameter('source') || get_parameter(1))
653-
.endsWith(get_parameter('pattern') || get_parameter(2)) ? 'yes'
654-
: '';
662+
var source = get_parameter('source');
663+
var pattern = get_parameter('pattern');
664+
return source.endsWith(pattern) ? 'yes' : '';
655665

656666
case 'replace':
657-
var pattern = get_parameter('pattern') || get_parameter(2);
667+
var source = get_parameter('source');
668+
var pattern = get_parameter('pattern');
658669
pattern = Lua_pattern_to_RegExp_pattern(pattern, 'g');
659-
return (get_parameter('source') || get_parameter(1)).replace(
660-
pattern, get_parameter('replace') || get_parameter(3));
670+
return source.replace(pattern, get_parameter('replace'));
661671

662672
case 'sub':
663673
// function str.sub( frame )

0 commit comments

Comments
 (0)