@@ -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