User:PerfektesChaos/js/WikiSyntaxTextMod/dI.js

/// PerfektesChaos/js/WikiSyntaxTextMod/dI.js /// 2023-04-03 PerfektesChaos@de.wikipedia /// Fingerprint: #0#0# /// License: CC-by-sa/4.0 /// // WikiSyntaxTextMod: Wiki syntax media parameter handling /* global mw:true, mediaWiki:false                                    */ /* jshint forin:false, bitwise:true, curly:true, eqeqeq:true, latedef:true, laxbreak:true, nocomma:true, strict:true, undef:true, unused:true          */

if ( typeof mediaWiki !==  "object" ) {   // disconnected mw =  { config: false, libs:  { WikiSyntaxTextMod:  { } },           log:    function  {"use strict";} }; } ( function ( mw ) {  "use strict";   var version  =  -7.61,       sign     =  "WikiSyntaxTextMod",       sub      =  "I",       rls, self, WSTM;   if ( typeof mw.loader  ===  "object" ) {      rls   =  { };      self  =  "user:PerfektesChaos/" + sign + "/" + sub;      rls[ self ] = "loading";      mw.loader.state( rls );   }   if ( typeof mw.libs[ sign ]  !==  "object" ) {   // isolated      mw.libs[ sign ]  =  { };   }   WSTM  =  mw.libs[ sign ];   if ( typeof WSTM.w  !==  "object" ) {      WSTM.w  =  { img: { }  };   }   if ( typeof WSTM.w.img  !==  "object" ) {      WSTM.w.img  =  { };   }   WSTM.w.img.vsn   =  version;   WSTM.w.img.self  =  self;   if ( typeof WSTM.bb  !==  "object" ) {      WSTM.bb  =  { };   }   if ( typeof WSTM.debugging  !==  "object" ) {      WSTM.debugging  =  { };   } } ( mw ) );

/* Requires: JavaScript 1.3 String.charCodeAt JavaScript 1.5 RegExp non-capturing parenthese */

//---

mw.libs.WikiSyntaxTextMod.bb.bbI =  function (WSTM) { // Building block and run environment support // 2012-05-18 PerfektesChaos@de.wikipedia "use strict"; if ( typeof WSTM.util !==  "object" ) { WSTM.util =  { }; }

if ( typeof WSTM.util.fiatObjects !==  "function" ) { WSTM.util.fiatObjects =  function ( adult, activate, assign ) { // Ensure existence of at least empty object // Precondition: //   adult     -- parent object //   activate  -- String with name of child object //   assign    -- optional object with initial definition //                if containing object components, //                they will be asserted as well // Postcondition: //   adult has been extended // Uses: //   .util.fiatObjects  -- recursive // 2012-05-18 PerfektesChaos@de.wikipedia var elt, obj, s;        if ( typeof adult[ activate ]  !==  "object" ) { adult[ activate ] =  ( assign  ?  assign  :  { } ); }        if ( assign ) { obj =  adult[ activate ]; for ( s in assign ) { elt =  assign[ s ]; if ( typeof elt ===  "object" ) { WSTM.util.fiatObjects( obj, s, elt ); }           }  // for s in obj }     };   // .util.fiatObjects }

WSTM.util.fiatObjects(WSTM, "debugging",  { loud: false });

};  // .bb.bbI mw.libs.WikiSyntaxTextMod.bb.bbI(mw.libs.WikiSyntaxTextMod); delete mw.libs.WikiSyntaxTextMod.bb.bbI;

//---

mw.libs.WikiSyntaxTextMod.bb.img =  function ( WSTM ) { // Image parameter handling // Uses: //   .util.fiatObjects // 2012-10-10 PerfektesChaos@de.wikipedia "use strict"; var IMG; WSTM.util.fiatObjects( WSTM, "w",                          { img:  { }  }                        ); IMG =  WSTM.w.img;

IMG.d =  { "alt":            {lone:false,  type:"string",  group:"alt"}, "baseline":       {lone:true,   type:false,     group:"v"}, "border":         {lone:true,   type:false,     group:"border"}, "bottom":         {lone:true,   type:false,     group:"v"}, "center":         {lone:true,   type:false,     group:"h"}, "class":          {lone:false,  type:"string",  group:"class"}, "disablecontrols": {lone:false, type:"string",  group:"mc"}, "endtime":        {lone:false,  type:"time",    group:"me"}, "framed":         {lone:true,   type:false,     group:"f"}, "frameless":      {lone:true,   type:false,     group:"f"}, "lang":           {lone:false,  type:"string",  group:"lang"}, "left":           {lone:true,   type:false,     group:"h"}, "link":           {lone:false,  type:"string",  group:"link"}, "lossy":          {lone:false,  type:"string",  group:"lossy"}, "middle":         {lone:true,   type:false,     group:"v"}, "noicon":         {lone:true,   type:false,     group:"mi"}, "none":           {lone:true,   type:false,     group:"h"}, "noplayer":       {lone:true,   type:false,     group:"mp"}, "page":           {lone:false,  type:"number",  group:"page"}, "px":             {lone:false,  type:true,      group:"px"}, "right":          {lone:true,   type:false,     group:"h"}, "starttime":      {lone:false,  type:"time",    group:"ms"}, "sub":            {lone:true,   type:false,     group:"v"}, "super":          {lone:true,   type:false,     group:"v"}, "text-bottom":    {lone:true,   type:false,     group:"v"}, "text-top":       {lone:true,   type:false,     group:"v"}, "thumbnail":      {lone:true,   type:"string",  group:"f"}, "thumbtime":      {lone:false,  type:"time",    group:"mt"}, "top":            {lone:true,   type:false,     group:"v"}, "upright":        {lone:true,   type:"number",  group:"upright"} };  // 2019-12-14   IMG.pattern  =  [ "page", "px", "upright", "f", "h", "v", "class", "link", "alt", "mi", "mp", "ms", "me", "mt", "mc", "unknown", "title" ];  // 2019-12-14

IMG.factory =  function ( apply ) { // Initialize media keyword translation // Precondition: //   apply  -- 0: read/write,  -1: read,  1: write // Uses: //   >  .lang.translate.read //   >  .str.spaces //   >  .lang.translate.write //   >  .lang.translate.d      //    >< .w.img.d      //     < .w.img.language //    < .w.img.re.* //    < .w.img.translate //   .lang.translate.feed //   .lang.translate.fiat // 2016-07-20 PerfektesChaos@de.wikipedia var e,  // element in .w.img.d          i, k, m, n,          q,   // element in .lang.translate.d          s,          t,          v;      if ( ! this.language ) { this.language =  { }; for ( s in this.d ) { this.language[ s ] =  s;         }  // for s in this.d      } if ( apply <= 0 ) { t =  ""; for ( s in this.d ) { t =  WSTM.lang.translate.feed( t,                                            "$" + s,                                            s,                                            WSTM.lang.translate.read,                                            false ); } // for s in this.d         t             =  t.substr(0,  t.length - 1); if ( typeof this.re !==  "object" ) { this.re =  { }; }        this.re.beg   =  new RegExp( "^(" + t + ")\\b",  "i" ); s            =  "[ " + WSTM.str.spaces + "]"; t            =  WSTM.lang.translate.feed( "|",                                                    "$px",                                                    "px",                                                WSTM.lang.translate.read,                                                   true ); t            =  "^" + "([0-9]*)"                      // 1                           + "(" + s + "*[x*×]" + s + "*"     // 2 x                            + "([0-9]+)"                      // 3                           + ")?" + s + "*" + "(" + t + ")"                   // 4 + "$";        this.re.px    =  new RegExp( t, "i" ); t            =  "^("                           + s + "*[:_=]?" + s + "*)"  // 1 :_= + "([0-9]+)?"              // 2 numeric value + "([.,]"                  // 3 decimal sep                            + "([0-9]*)"               // 4 decimals                           + ")?$"; this.re.vnum =  new RegExp( t, "" ); t            =  "^" + "(" + s + "*[:_=]?" + s + "*)"  // 1 sep + "(.+)$";                        // 2 value this.re.vstr =  new RegExp( t, "" ); t            =  "^" + "(" + s + "*[_=]?" + s + "*)"   // 1 sep + "([0-9]?[0-9]+)?"               // 2 min + "(:([0-5]?[0-9]))?"             // 4 sec + "(\\.([0-9]*))?$";              // 6 msec this.re.vtim =  new RegExp( t, "" ); n            =  WSTM.lang.translate.read.length; for ( s in this.d ) { e =  this.d[ s ]; q =  WSTM.lang.translate.d[ "$" + s ]; if ( q ) { for ( i = 0; i < n;  i++ ) { v =  q[ WSTM.lang.translate.read[ i ] ]; switch ( typeof v ) { case "string" : if ( ! this.language[ v ] ) { this.language[ v ] =  s;                        } break; case "object" : m =  v.length; for ( k = 0; k < m;  k++ ) { t =  v[k]; if ( t ) { if ( typeof t ===  "object" ) { t =  WSTM.lang.translate.fiat( t ); }                             if ( ! this.language[ t ] ) { this.language[ t ] =  s;                              } }                       }   //  for k                        break; }  // switch typeof v               }   //  for i            } } // for s in this.d      } if ( apply >= 0 ) { n =  WSTM.lang.translate.write.length; for ( s in this.d ) { e       =  this.d[ s ]; e.write =  s;            q        =  WSTM.lang.translate.d[ "$" + s ]; if ( q ) { for ( i = 0; i < n;  i++ ) { t =  WSTM.lang.translate.write[ i ]; v =  q[ t ]; switch ( typeof v ) { case "string" : e.write =  v;                        i        =  n;                        break; case "object" : v =  v[ 0 ]; if ( v ) { e.write =  WSTM.lang.translate.fiat( v ); }                       i  =  n;                        break; }  // switch typeof v               }   // for i            } } // for s in this.d      } };  // .w.img.factory

IMG.fault =  function ( action, about, accumulate ) { // Submit error message // Precondition: //   action      -- message key string //                          "Contradiction", //                          "InvalidValue", //                          "MissingValue", //                          "Unrecognized", //                          "ValueConflict" //   about       -- string with objectionable element //   accumulate  -- object with transclusion parameters //                  >  .file$   file name //                  >< .error$ // Uses: //   .errors.found // 2012-09-20 PerfektesChaos@de.wikipedia if ( ! accumulate.error$ ) { WSTM.errors.found( "imgPar" + action,                           false,                            about + "\n(" + accumulate.file$ + ")" ); accumulate.error$ =  true; }  };   // .w.img.fault

IMG.feature =  function ( attr, adapt, alter, apply, accumulate ) { // Format valid assignment // Precondition: //   attr        -- attribute name, generic //   adapt       -- entry for attr in definition //   alter       -- attribute name, local //   apply       -- string with value assignment;  else false //                  leading '=' or px      //    accumulate  -- object with transclusion parameters // Postcondition: //   Returns string with assignment in local format // Uses: //   .w.img.disablecontrols //   .w.img.lang //   .hooks.fire // 2013-06-14 PerfektesChaos@de.wikipedia var r;     switch ( attr ) { case "disablecontrols" : case "lang" : r =  this[ attr ]( apply, accumulate ); if ( r ) { r =  adapt.write + r;            } break; case "px" : r =  apply + adapt.write; break; case "thumbnail" : r =  WSTM.hooks.fire( "thumbnail", alter ); if (! r) { r =  adapt.write; }           r  =  r  +  (apply ? apply : ""); break; default: r =  adapt.write  +  ( apply ? apply : "" ); } // switch attr return r;   };   // .w.img.feature

IMG.feed =  function ( attr, apply, alter, attempt, accumulate ) { // Store transclusion parameter assignment // Precondition: //   attr        -- known attribute name, generic //                  false: unknown, may be title //   apply       -- string with value assignment;  else false //                  leading '=' or px      //    alter       -- attribute name, local;  else false //   attempt     -- full string, if not attr //   accumulate  -- object with transclusion parameters //                  >  .title //                  >< .unknown //                   < .all$   dump entire // Postcondition: //   Returns string with formatted parameter assignment, or false //   Extends accumulate // Uses: //   >  .w.img.d      //    .w.img.fault //   .w.img.feature // 2020-01-10 PerfektesChaos@de.wikipedia var r      =  attempt, stored, what; if ( attr ) { what =  this.d[ attr ]; if ( what.lone || apply ) { if ( accumulate.title || accumulate.unknown ) { accumulate.all$ =  true; }           stored  =  accumulate[ attr ]; if ( stored ) { if ( stored === apply ||  ! apply ) { r =  false;   // remove double parameters } else if ( attr === "px" &&  apply ) { accumulate[ attr ] =  apply; } else if ( stored === true &&  apply ) { accumulate.all$    =  true;   // already without value accumulate[ attr ] =  apply; } else { stored =  false; this.fault( "ValueConflict", attempt, accumulate ); }           } else { accumulate[attr] =  ( apply ? apply : true ); stored           =  true; }           if ( stored  &&  r ) { r =  this.feature( attr,                                   what,                                   alter,                                   apply,                                   accumulate ); }        } else { this.fault( "MissingValue", alter, accumulate ); }     } else { if ( accumulate.unknown ) { this.fault( "Unrecognized", accumulate.unknown, accumulate ); } else {  // may be title accumulate.unknown =  attempt; }     }      return  r;   };   // .w.img.feed

IMG.file =  function (assert) { // Ensure media file format // Precondition: //   assert  -- string with presumable media file title, or null // Postcondition: //   Returns string with downcased extension, or false //   Error message issued, if assert invalid // Uses: //   >  .w.link.mediatypes //   >< .w.img.re.tit //    < .w.img.re.ext //   .errors.found // 2016-07-20 PerfektesChaos@de.wikipedia var r =  false, g, s;     if ( typeof this.re  !==  "object" ) { this.re =  { }; }     if ( typeof this.re.tit  !==  "object" ) { this.re.ext =  new RegExp("\\.(" + WSTM.w.link.mediatypes + ")$",                                   "i"); this.re.tit =  new RegExp("^[^/#|{}\n]+\\.[a-zA-Z]+[0-9]?$"); }     if (assert) { s =  WSTM.str.trim(assert); g =  this.re.tit.exec(s); if (g) { g =  this.re.ext.exec(s); if (g) { r =  g[1].toLowerCase; } else { WSTM.errors.found("fileTypeUnkown", false, s); }        } else { WSTM.errors.found("fileInvalid", false, s); }     }   };   // .w.img.file

IMG.fix =  function (assign, accumulate) { // Format single media transclusion parameter // Precondition: //   assign      -- string with trimmed attribute or assignment //   accumulate  -- object with transclusion parameters // Postcondition: //   Returns string with formatted parameter assignment, or false //   Extends accumulate // Uses: //   >  .w.img.re.beg //   >  .w.img.re.px      //    .w.img.front //   .w.img.px //   .w.img.feed // 2016-07-20 PerfektesChaos@de.wikipedia var g =  this.re.beg.exec( assign ), r =  assign; if ( g ) { r =  this.front( g[ 1 ], assign, accumulate ); } else { g =  this.re.px.exec( assign ); if ( g ) { r =  this.px( g[ 4 ],  g[ 1 ],  g[ 3 ],  accumulate ); } else { r =  this.feed( false, false, false, assign, accumulate ); }     }      return  r;   };   // .w.img.fix

IMG.flip =  function (assignment, accumulate) { // Reorder media transclusion parameters // Precondition: //   assignment  -- string with all parameters //   accumulate  -- object with transclusion parameters //                  >  .unknown //                  >  .all$    dump entire // Uses: //   >  .w.img.pattern //   >  .w.img.d      //    >  .g.projLang //   >  .lang.chr.rtl //   >< .w.img.cross //   >< .w.img.horizontal //   .w.img.fault //   .w.img.feature // 2020-01-02 PerfektesChaos@de.wikipedia var lapsus =  false, n      =  WSTM.w.img.pattern.length, r      =  assignment, show   =  "", i, k,         q,          s,          select, single, type, what; if ( accumulate.noicon ||          accumulate.noplayer ) { delete accumulate.noicon; delete accumulate.noplayer; accumulate.all$ =  true; }     if ( accumulate.end ) { accumulate.endtime =  accumulate.end; delete accumulate.end; accumulate.all$ =  true; }     if ( accumulate.start ) { accumulate.starttime =  accumulate.start; delete accumulate.start; accumulate.all$ =  true; }     if ( typeof accumulate.framed  !==  "undefined"   &&           typeof accumulate.px      !==  "undefined" ) { this.fault( "Contradiction", "framed ./. px", accumulate ); }     if ( ! this.cross ) { this.cross =  new Array( n ); for ( i = 0; i < n;  i++ ) { select          =  this.pattern[ i ]; this.cross[ i ] =  [ ]; for ( s in this.d ) { what =  this.d[ s ]; if ( what.group === select ) { this.cross[ i ].push( s ); }           }  // for s in this.d            if ( select === "h" ) { this.horizontal =  this.cross[ i ]; }        }  // for i      } if ( accumulate.thumbnail ) { for ( k = 0; k < this.horizontal.length;  k++ ) { s =  this.horizontal[ k ]; if ( typeof accumulate[ s ] !==  "undefined" ) { if ( single ) { single =  false; break; } else { single =  s;               } }        }  // for k         if ( single ) { s =  ":" + WSTM.g.projLang + ":"; if ( WSTM.lang.chr.rtl.indexOf( s ) <  0 ) { //  TODO   WSTM.lang.forward    2016  _M 6.13 if ( single === "right" ) { accumulate.all$  =  true; accumulate.right =  undefined; }           } else { if ( single === "left" ) { accumulate.all$ =  true; accumulate.left =  undefined; }           }         }      }      for ( i = 0;  i < n;  i++ ) { type   =  this.cross[ i ]; single =  false; for ( k = 0; k < type.length;  k++ ) { s =  type[ k ]; if ( typeof accumulate[ s ] !==  "undefined" ) { if ( single ) { lapsus =  true; this.fault( "Contradiction",                             single + " ./. " + s,                              accumulate ); } else if ( ! lapsus ) { if ( accumulate[ s ] === true ) { q =  false; } else { q =  accumulate[ s ]; }                 s  =  this.feature( s,                                      this.d[ s ],                                      false,                                      q,                                      accumulate ); if ( s ) { if ( show ) { show =  show + "|"; }                    show    =  show + s;                     single  =  s;                  } }           }         }  // for k      }  // for i      if ( ! lapsus ) { if ( accumulate.unknown ) { show =  show + "|" + accumulate.unknown; }        if ( accumulate.all$ ) { r =  show; }     }      return  r;   };   // .w.img.flip

IMG.format =  function ( arglist ) { // Format media transclusion parameters // Precondition: //   arglist  -- Wikilink object //      >  .score     -- file name //      >  .sequence  -- string with transclusion parameters //      >  .last      -- pipe at end of parameter list // Postcondition: //   Returns string with transclusion parameters, or false // Uses: //   .str.trim //   .w.img.file //   .w.img.fix //   .w.img.flip // Requires: JavaScript 1.3  charCodeAt // 2016-07-20 PerfektesChaos@de.wikipedia var current =  { "all$":   false, "error$": false, "file$": arglist.score, title:   false, unknown: false }, i       =  -99, r       =  "", show    =  arglist.sequence, sparse  =  WSTM.str.trim( show ), story   =  sparse, s,         single; this.file( arglist.score ); while ( story ) { i =  story.indexOf( "|" ); if (i > 0) { single =  story.substr( 0, i ); story  =  story.substr( i + 1 ); } else if ( i ) { single =  story; story  =  false; } else if ( ! i ) { single =  false; story  =  story.substr(1); }        if ( single ) { single =  WSTM.str.trim( single, true, true ); }        if (single) { s =  this.fix( single, current ); if ( s ) { if ( r ) { r =  r + "|"; }              r  =  r + s;            } }     }  // while story if ( ! current.error$ ) { r =  this.flip( r, current ); }     if ( sparse.charCodeAt( sparse.length - 1 )  ===  124          &&    ! arglist.last ) {   // '|' r =  r + "|"; }     if ( current.title ) { if ( show.charCodeAt( show.length - 1 ) ===  32 ) {   // ' ' r =  r + " "; }     } //    if (r === show) { //      r  =  false; //   }      return  r;   };   // .w.img.format

IMG.front =  function ( attribute, assign, accumulate ) { // Analysis of leading parameter name // Precondition: //   attribute   -- known attribute name, local with case //   assign      -- string with attribute or assignment //   accumulate  -- object with transclusion parameters // Postcondition: //   Returns string with formatted parameter assignment //   Extends accumulate // Uses: //   >  .w.img.language //   >  .w.img.d      //    >  .w.img.re.vnum //   >  .w.img.re.vstr //   >  .w.img.re.vtim //   .str.trimL //   .str.parseIntNumber //   .str.trim //   .w.img.disablecontrols //   .w.img.fault //   .w.img.feed // Requires: JavaScript 1.3  charCodeAt // 2023-04-03 PerfektesChaos@de.wikipedia var r       =  assign, setting =  false, slip    =  attribute.toLowerCase, seed    =  this.language[ slip ], suffix  =  assign.substr( attribute.length ), what    =  this.d[ seed ], i, j, k, s,         got; if ( what ) { switch ( what.type ) { case "link" : //TODO format protect break; case "number" : if ( suffix ) { s   =  WSTM.str.trimL( suffix ); got =  this.re.vnum.exec( s ); if ( got ) { i =  WSTM.str.parseIntNumber( got[ 2 ],  10 ); j =  got[4]; if ( i || j ) {  // no sign possible in regexp if (j) { switch ( seed ) { case "upright" : j =  j.substr(0, 1); if ( j === "0" ) { if ( i === 0 ) { j =  "1"; } else { j =  false; }                                }                                 break; default: j =  false; }  // switch } else { j =  false; }                       if ( i || j ) { setting =  "=" + i;                           if ( j ) { setting =  setting + "." + j;                          } }                    } else if ( WSTM.str.trim( got[ 1 ] ) ) { seed =  false; this.fault( "InvalidValue", assign, accumulate ); }                 } else { seed =  false; }              }               break; case "string" : suffix =  WSTM.str.trimL( suffix ); got    =  this.re.vstr.exec( suffix ); if ( got ) { if ( got[ 1 ] ) { if ( slip === "disablecontrols" ) { setting =  this.disablecontrols( got[ 2 ] ); if ( ! setting ) { seed =  false; }                    } else { setting =  "=" + got[ 2 ]; }                 } else if ( seed === "alt"  ||                              seed === "link" ) { // TODO //Unrecognized if ( got[ 0 ] === "=" ) { setting =  "="; } else { seed =  false; }                 } else { seed =  false; }              } else if ( ! what.lone ) { seed =  false; }              break; case "time" : suffix =  WSTM.str.trim( suffix ); got    =  this.re.vtim.exec( suffix ); if ( got ) { if ( ! got[3 ]) { got[4] =  got[ 2 ]; got[3] =  true; got[2] =  false; }                 if ( got[ 2 ] ) { i =  got[ 2 ]; } else { i =  0; }                 if ( got[ 3 ] ) { if ( got[ 4 ] ) { j =  parseInt( got[ 4 ], 10 ); } else { j =  0; }                 } else if ( i ) { j =  0; }                 if (got[6]) { k =  parseInt( got[ 6 ], 10 ); } else { k =  0; }                 setting  =  "="; if (i) { setting =  setting + i + ":"; }                 if (j || k) { setting =  setting   +   ( j < 10  ?  "0"  :  "" ) +  j;                     if (k) { setting =  setting + "." + got[ 6 ]; }                 } else if (i) { setting =  setting  +  "00"; } else { setting =  setting  +  "0"; /*                 } else if (WSTM.str.trim(got[1])) { seed    =  false; this.fault("InvalidValue", assign, accumulate); }              } else { seed =  false; }              break; default: if ( suffix ) { seed =  false; }        }   // switch what.type r =  this.feed( seed, setting, slip, assign, accumulate ); } else { mw.log( WSTM.debugging,".w.img.front what?\n" + assign, 2 ); }     return  r;   };   // .w.img.front

IMG.disablecontrols =  function ( assign ) { // Analysis of width parameter // Precondition: //   assign  -- comma-separated list of keywords // Postcondition: //   Returns string with '=' and formatted parameter assignment // 2013-06-10 PerfektesChaos@de.wikipedia var r    =  false, pars =  { fullscreen: [ false, "fullscreen" ], options:   [ false, "options" ], timedtext: [ false, "timedText" ] },         e;      for ( e in pars ) { if ( assign.search( new RegExp( "\\b" + e + "\\b", "i" ) )              >= 0 ) { pars[e][0] =  true; }     }   // for e in pars for ( e in pars ) { if ( pars[ e ][ 0 ] ) { if ( r ) { r =  r + ","; } else { r =  "="; }           r  =  r + pars[e][1]; }     }   // for e in pars return r;   };   // .w.img.disablecontrols

IMG.lang =  function (assign, accumulate) { // Analysis of lang parameter // Precondition: //   assign      -- expecting language code (ISO 639, or wiki) //                  "= de-CH" //   accumulate  -- object with transclusion parameters //                  >  .file$  -- expecting SVG file name // Postcondition: //   Returns string with '=' and formatted parameter assignment // Uses: //   >< .w.img.re.svg //    < .w.img.re. //   .str.trim //   .w.img.fault // 2019-12-29 PerfektesChaos@de.wikipedia var r = false, got; if ( typeof this.re.svg !==  "object" ) { this.re.svg  =  new RegExp( "\\.svg$", "i" ); this.re.lang =  new RegExp( "^([a-z][a-z][a-z]?)(-[a-z]+)?$",                                      "i" ); }     if ( accumulate.file$.match( this.re.svg ) ) { if ( assign.substr(0,1) === "=" ) { r   =  WSTM.str.trim(assign.substr(1)); got =  this.re.lang.exec( r ); if ( got ) { r =  "=" + got[1].toLowerCase; if ( got[ 2 ] ) { r =  r + "-" + got[ 2 ]; }           } else { r =  false; }        }      } else { this.fault( "LangNoSVG", accumulate.file$, accumulate ); }     return  r;   };   // .w.img.lang

IMG.px =  function ( attribute, ahead, after, accumulate ) { // Analysis of width parameter // Precondition: //   attribute   -- known attribute name, local with case //   ahead       -- number before x      //    after       -- number after x; x is present //   accumulate  -- object with transclusion parameters // Postcondition: //   Returns string with formatted parameter assignment //   Extends accumulate // Uses: //   .w.img.fault //   .w.img.feed // Requires: JavaScript 1.3  charCodeAt // 2012-09-21 PerfektesChaos@de.wikipedia var setting =  ""; if ( ahead === 0 ||  after === 0 ) { this.fault( "InvalidValue", "0px", accumulate ); }     if ( ahead ) { setting =  ahead.toString; }     if ( after ) { setting =  setting + "x" + after; }     if ( typeof accumulate.px  !==  "undefined" ) { if ( setting === accumulate.px ) { setting =  false; } else { this.fault( "ValueConflict",                       setting + "px ./. " + accumulate.px + "px",                        accumulate ); setting =  accumulate.px + "px|" + setting; }     }      if ( setting ) { return this.feed( "px", setting, attribute, true, accumulate ); }  };   // .w.img.px

};  // .bb.img mw.libs.WikiSyntaxTextMod.bb.img(mw.libs.WikiSyntaxTextMod); delete mw.libs.WikiSyntaxTextMod.bb.img;

//---

( function ( WSTM ) {  "use strict";   var sub      =  "I",       self     =  WSTM.w.img.self,       version  =  WSTM.w.img.vsn,       rls;   if ( typeof WSTM.main  !==  "object" ) {      WSTM.main  =  { };   }   if ( ! WSTM.main.bb ) {     WSTM.main.bb  =  { };   }   WSTM.main.bb[ sub ]  =  { load: true,                             vsn:  version };   if ( typeof WSTM.main.wait  ===  "function" ) {      // Start on import: callback to waiting ...      WSTM.main.wait( sub, version );   }   if ( typeof mw.loader  ===  "object"   && typeof mw.hook !==  "undefined" ) {      rls = { };      rls[ self ] = "ready";      mw.loader.state( rls );      mw.hook( "WikiSyntaxTextMod/" + sub + ".ready" )        .fire( [ sub, version ] );   } } ( mw.libs.WikiSyntaxTextMod ) );

// Emacs // Local Variables: // coding: utf-8-dos // fill-column: 80 // End:

/// EOF  WikiSyntaxTextMod/dI.js