Difference between revisions 137842 and 137924 on testwiki

/// PerfektesChaos/js/WikisyntaxTextMod/?L.js
/// 2012-06-202 [email protected]
/// Fingerprint: #0#0#
/// <nowiki>
// Localization for WikiSyntaxTextMod



if (typeof(mediaWiki) !== "object") {   // disconnected
   mw  =  { libs:   { WikiSyntaxTextMod:  {debugging: false}
                    },
            log:    function () {}
          };
}
if (typeof(mw.libs.WikiSyntaxTextMod) !== "object") {   // isolated
   mw.libs.WikiSyntaxTextMod  =  { };
}
if (typeof(mw.libs.WikiSyntaxTextMod.l10n) !== "object") {
   mw.libs.WikiSyntaxTextMod.l10n  =  { };
}
mw.libs.WikiSyntaxTextMod.l10n.vsn  =  -3.99891;
if (typeof(mw.libs.WikiSyntaxTextMod.bb) !== "object") {
   mw.libs.WikiSyntaxTextMod.bb  =  { };
}
with (mw.libs) {   // "W"
   if (typeof(WikiSyntaxTextMod.main) !== "object") {
      WikiSyntaxTextMod.main  =  { modules: [ ] };   // "W"
   }
   if (typeof(WikiSyntaxTextMod.main.modules) !== "object") {
      WikiSyntaxTextMod.main.modules  =  [ ];   // "W"
   }
}   // with mw.libs



/*
    < .hooks
   wikisyntax_de_polish()
   wikisyntax_dewiki_***()
Uses:
   >  .g.projLang
   >  .g.wDBname
    < Wikisyntax_Deutsch_TagMonat              // DEPRECATED
    < Wikisyntax_Deutsch_TagMonat_Link         // DEPRECATED
    < Wikisyntax_Deutsch_TagMonatJahr_Links    // DEPRECATED
    < Wikisyntax_Deutsch_Datum_TMJahr          // DEPRECATED
    < Wikisyntax_Jahreszahl4_Link              // DEPRECATED
    < .g.projSpace
Requires: JavaScript 1.3  (String.charCodeAt String.fromCharCode)
          JavaScript 1.5  RegExp non-capturing parenthese
 */
var Wikisyntax_Deutsch_TagMonat;
var Wikisyntax_Deutsch_TagMonat_Link;
var Wikisyntax_Deutsch_TagMonatJahr_Links;
var Wikisyntax_Deutsch_Datum_TMJahr;
var Wikisyntax_Jahreszahl4_Link;



//-----------------------------------------------------------------------



mw.libs.WikiSyntaxTextMod.bb.utilL  =  function (WSTM) {
   // Building block and run environment support
   // 2012-05-18 [email protected]
   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 [email protected]
         var elt;
         var obj;
         var s;
         if (typeof( adult[activate] )  !==  "object") {
            adult[activate]  =  (assign  ?  assign  :  { } );
         }
         if (assign) {
            obj  =  adult[activate];
            for (s in assign) {
               if (assign.hasOwnProperty(s)) {
                  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.utilL()
mw.libs.WikiSyntaxTextMod.bb.utilL(mw.libs.WikiSyntaxTextMod);
delete mw.libs.WikiSyntaxTextMod.bb.utilL;



//-----------------------------------------------------------------------



mw.libs.WikiSyntaxTextMod.bb.gL  =  function (WSTM) {
   // Global storage
   // Uses:
   //    .util.fiatObjects()
   // 2012-05-18 [email protected]
   WSTM.util.fiatObjects(WSTM,  "g",
                         { learnt: false,
                           re:     { },
                           s:      {  re: { }  }
                         } );



   WSTM.g.s.re.Filetypes  =
         // Regexp for known filetypes (media)
         "(avi"     +
         "|css"     +
         "|djvu"    +
         "|doc"     +
         "|gif"     +
         "|jpe?g"   +
         "|js"      +
         "|mid"     +
         "|mp3"     +
         "|odt"     +
         "|og[agv]" +
         "|pdf"     +
         "|png"     +
         "|svg"     +
         "|tiff?"   +
         "|xcf"     +
         "|xls"     +
         "|xml"     +
         ")";
         // 2011-07-12
   WSTM.g.s.re.interwMap  =
         // Regexp for some interwiki mapped to sister projects
         //                Terminated by ')'
         // Target keeps wikisyntax (no query)
         // Last known interwiki database update: 13 November 2010
         // 2012-05-29
         "|MW|bugzilla|gerrit|rev|svn|download|wg|WP"
         + "|Advisory|betawiki|betawikiversity|dbdump"
         + "|Foundation|Incubator|Mail|mailarchive|MediaZilla"
         + "|MetaWikiPedia"
         + "|OldWikisource|OTRS|OTRSwiki|Outreach|OutreachWiki"
         + "|pyrev|Quality|semantic-mw|spcom|Species"
         + "|Strategy|Tenwiki|Testwiki|Ticket|Tools|translatewiki|tswiki"
         + "|usability"
         + "|Wikimedia|WikipediaWikipedia|Wikispecies|Wikitech"
         + "|wmar|wmau|wmca|wmch|wmcz|wmdc|wmde|wmfr|wmhk|wmhu|wmid|wmil"
         + "|wmin|wmit|wmno|wmrs|wmru|wmse|wmtw|wmuk"
         + "|Wm2005|Wm2006|Wm2007|Wm2008|Wm2009|Wm2010|Wm2011"
         + "|Wmania|Wmteam"
         + ")";
   WSTM.g.s.re.interwURL  =
         // Global syntax: Regexp for some interwiki mapped to URL
         //    [[Special:Interwiki]]      [[meta:Interwiki map]]
         // Requires: JavaScript 1.3   fromCharCode()
         // 2012-05-29 [email protected]
         "|Aew|BLW|Dcc|DOI|IRC|ISSN|RFC|viaf|WMF|Wqy|ZUM"
         + "|AbbeNormal|Acronym|Advogato|Airwarfare|AIWiki"
         + "|AllWiki|Appropedia|AquariumWiki|Arborwiki|arXiv"
         + "|AtmWiki"
         + "|BattlestarWiki|BCNbio|BEMI|BenefitsWiki"
         + "|BibleWiki|BluWiki|Botwiki|Boxrec|BrickWiki"
         + "|bulba|buzztard|Bytesmiths"
         + "|C2|C2find|Cache|CANWiki|CanyonWiki"
         + "|" + String.fromCharCode(264) + "EJ"
         + "|CellWiki|CentralWikia|ChEJ|ChoralWiki|Citizendium"
         + "|CKWiss|CNDbName|CNDbTitle|Comixpedia|CommunityScheme"
         + "|CommunityWiki|comune|CorpKnowPedia|CrazyHacks"
         + "|CreativeCommons|CreativeCommonsWiki"
         + "|CreaturesWiki|CxEJ"
         + "|DCDatabase|DCMA|DejaNews|Delicious|Demokraatia"
         + "|Devmo|Dict|Dictionary|Disinfopedia"
         + "|distributedproofreaders|distributedproofreadersca"
         + "|dmoz|dmozs|DocBook|doom_wiki"
         + "|DRAE|Dreamhost|DrumCorpsWiki|DWJWiki"
         + "|E" + String.fromCharCode(265) + "eI"
         + "|EcheI|EcoReality|EcxeI|ELibre|EmacsWiki"
         + "|Encyc|EnergieWiki|EoKulturCentro"
         + "|Ethnologue|EthnologueFamily|EvoWiki|Exotica"
         + "|FanimutationWiki|FinalEmpire|FinalFantasy|Finnix"
         + "|FlickrPhoto|FlickrUser|FloralWIKI|FlyerWiki-de|Foldoc"
         + "|ForthFreak|FoxWiki|FreeBio|FreeBSDman"
         + "|FreeCultureWiki|Freedomdefined|FreeFeel|FreekiWiki|Freenode"
         + "|ganfyd|Gardenology|GaussWiki|Gentoo-Wiki|GenWiki"
         + "|GlobalVoices|GlossarWiki|GlossaryWiki"
         + "|Golem"   // 2010; ex 2012
         + "|Google|GoogleDefine|GoogleGroups"
         + "|GotAMac|GreatLakesWiki|GuildWarsWiki|Guildwiki"
         + "|gutenberg|gutenbergwiki"
         + "|H2Wiki|HammondWiki|heroeswiki"
         + "|HerzKinderWiki"   // 2010; ex 2012
         + "|HRFWiki|HRWiki|HupWiki"
         + "|IMDbCompany|IMDbCharacter|IMDbName|IMDbTitle"
         + "|infoAnarchy|Infosecpedia|Infosphere|ircrc|ISO639-3"
         + "|Iuridictum"
         + "|JamesHoward|JavaNet|Javapedia|JEFO|JiniWiki"
         + "|Jira|JspWiki|JSTOR"
         + "|Kamelo|Karlsruhe|KerimWiki|KinoWiki|KmWiki"
         + "|KontuWiki|KoslarWiki|Kpopwiki"
         + "|LinguistList|LinuxWiki|LinuxWikiDe|LISWiki|LiteratePrograms"
         + "|Livepedia|Lojban|Lostpedia|LQWiki|LugKR|Luxo"
         + "|Mariowiki|MarvelDatabase|MeatBall|MemoryAlpha|MetaWiki"
         + "|Mineralienatlas|MoinMoin|Monstropedia|MosaPedia|MozCom"
         + "|MozillaWiki|MozillaZineKB|MusicBrainz|MWOD|MWOT"
         + "|nara|NKcells|NoSmoke|Nost"
         + "|OEIS|OLPC|OneLook|OpenFacts|Openlibrary"
         + "|Openstreetmap|OpenWetWare|OpenWiki|Opera7Wiki|OrganicDesign"
         + "|OrthodoxWiki|OSI reference model|osmwiki"
         + "|OurMedia"
         + "|Panawiki|PatWIKI|PerlNet|PersonalTelco|PHPWiki|PHWiki"
         + "|PlanetMath|PMEG|psycle|PythonInfo|PythonWiki|PyWiki"
         + "|rcirc|ReutersWiki|ReVo|RheinNeckar|RoboWiki|RoWiki|rtfm"
         + "|S23Wiki|Scholar|SchoolsWP|Scores|Scoutwiki"
         + "|Scramble|SeaPig|SeattleWiki|SeattleWireless"
         + "|SecureWikiDC|SenseisLibrary"
         + "|silcode|Slashdot|SLWiki|SMikipedia|SourceForge|Squeak"
         + "|stable"   // 2010; ex 2012
         + "|stewardry"
         + "|StrategyWiki|SulutilSVGWiki|SwinBrain|SwingWiki|Swtrain"
         + "|TabWiki|Tavi|TclersWiki|Technorati|TESOLTaiwan"
         + "|Thelemapedia|Theopedia|ThinkWiki|TibiaWiki"
         + "|TMBW|TmNet|TMwiki"
         + "|Trash!Italia|Turismo|TVIV|TVtropes|TWiki|TyvaWiki"
         + "|Unreal|Urbandict|USEJ|UseMod"
         + "|ValueWiki"
         + "|Veropedia"   // 2010; ex 2012
         + "|Vinismo|VKoL|VLOS|VoIPinfo"
         + "|Webisodes|Wiki|Wikia|WikiaSite|Wikichat"
         + "|WikiChristian|Wikicities|Wikicity|WikiF1|WikiFur"
         + "|wikiHow|WikiIndex|WikiLemon|Wikilivres|WikiMac-de"
         + "|Wikinfo|Wikinvest|Wikipaltz|Wikischool|WikiSkripta"
         + "|wikisophia|Wikispot|WikiTI|WikiTravel|WikiTree"
         + "|WikiWeet|WikiWikiWeb|Wipipedia|WLUG|Wookieepedia"
         + "|World66|WoWWiki|wqy|WurmPedia"
         + "|ZRHwiki|zum|ZWiki|ZZZ Wiki";
   WSTM.g.s.re.lang  =  "[a-z][a-z][a-z]?"
                        + "|simple"
                        + "|[a-z][a-z][a-z]?-[a-z][a-z][-a-z]*";
   WSTM.g.s.re.Lang  =  WSTM.g.s.re.lang;   // deprecated
   WSTM.g.s.re.ProtocolRelative  =
         // Regexp for subdomains to be protocol relative URL
         "|advisory|bits|blog|incubator|otrs-wiki|outreach"
         + "|quality|spcom|species|strategy|usability|upload|";
         // 2011-10-28
   WSTM.g.s.re.ProtocolSecure  =
         // Regexp for subdomains to be converted into https URL
         "|bugzilla|gerrit|labsconsole|ticket|";
         // wiki.toolserver.org  jira.toolserver.org
         // 2012-05-28
   WSTM.g.s.re.ProtocolPlain  =
         "|download|mobile|";
         // 2012-01-29
   WSTM.g.s.re.Variables  =  { "_": "i" };
   WSTM.g.s.re.Variables.$  =
         // Regexp for generic variable names
           "ANCHORENCODE|"
         + "(ARTICLE|BASE|FULL|SUB(JECT)?|TALK)?PAGENAMEE?|"
         + "(ARTICLE|NAME|SUBJECT|TALK)SPACEE?|"
         + "CONTENTLANG(UAGE)?|"
         + "(CURRENT|LOCAL)"
         +    "(DAY(2|NAME)?|"
         +     "DOW|"
         +     "HOUR|"
         +     "MONTH(1|2|ABBREV|NAME(GEN)?)?|"
         +     "TIME(STAMP)?|"
         +     "|VERSION"
         +     "|WEEK"
         +     "YEAR)|"
         + "DIR(ECTION)?MARK|"
         + "NAMESPACENUMBER|"
         + "NUMBER"
         +   "(OF"
         +    "(ACTIVEUSERS|ADMINS|ARTICLES"
         +                "|EDITS|FILES|PAGES|USERS|VIEWS)"
         +   ")|"
         + "PAGES(INCAT(EGORY)?|IZE)|"
         + "PATH|"
         + "PROTECTIONLEVEL|"
         + "QUERY|"
         + "REVISION(ID|DAY2?|MONTH1?|TIMESTAMP|USER|YEAR)|"
         + "(ARTICLE|SCRIPT|STYLE)PATH|"
         + "SERVER(NAME)?|"
         + "WIKI";   // 2012-04-24
   WSTM.g.s.re.Variables[":"]  =
         // Regexp for generic variable names terminated by colon ':'
      "DEFAULTSORT|DISPLAYTITLE|GENDER|INT|PLURAL|PROTECTIONLEVEL|"
      + "PAGESI(NCATEGORY|ZE)|"
      + "(CANONICA|FUL|LOCA)LURLE?|"
      + "anchorencode|filepath|formatnum|msgnw|ns|urlencode|"
      + "[lu]c(first)?|"
      + "pad(lef|righ)t";   // 2012-04-02
   // legacy  vsn 3  2012
   if (typeof(WSTM.g.projLang) !== "string") {
      if (typeof(Wiki_ProjectLang) === "string") {
         WSTM.g.projLang  =  Wiki_ProjectLang;
      }
   }
   if (typeof(WSTM.g.projType) !== "string") {
      if (typeof(Wiki_ProjectType) === "string") {
         WSTM.g.projSpace  =  Wiki_ProjectType;
         WSTM.g.projType   =  Wiki_ProjectType;
      }
   }
   if (typeof(WSTM.main.modules) === "object") {
      if (WSTM.main.modules.length < 5) {   // "W.3"
         Wikisyntax_Re_Filetypes         =  WSTM.g.s.re.Filetypes;
         Wikisyntax_Re_Interw_Mapping    =  WSTM.g.s.re.interwMap;
         Wikisyntax_Re_Interw_URL        =  WSTM.g.s.re.interwURL;
         Wikisyntax_Re_ProtocolRelative  =  WSTM.g.s.re.ProtocolRelative;
         Wikisyntax_Re_ProtocolSecure    =  WSTM.g.s.re.ProtocolSecure;
      }
   }



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



//-----------------------------------------------------------------------



mw.libs.WikiSyntaxTextMod.bb.l10nL  =  function (WSTM) {
   // Variant localization functions
   // Uses:
   //    .util.fiatObjects()
   // 2012-05-18 [email protected]
   WSTM.util.fiatObjects(WSTM,  "l10n",
                         { lang:      { s:  {  re: { }  } },
                           proj:      { },
                           s:         { re: { } },
                           re:        { },
                           templates: { },
                           text:      { },
                           word:      { }
                         } );
   var word  =  WSTM.l10n.word;



   WSTM.l10n.lang.find  =  function (adjust) {
      // Find less common language code and replace by major language
      // Precondition:
      //    adjust  -- language code, also ISO 639-2 and RFC 1766 subtag
      // Postcondition:
      //    Returns appropriate language code, ISO 639-1 downcased
      // Uses:
      //    .l10n.lang.fragment()
      // 2011-12-25 [email protected]
      var r  =  this.fragment(adjust);
      switch (r) {
         case "als" :
         case "nds" :
            r  =  "de";
            break;
      }   // switch adjust
      return  r;
   };   // .l10n.lang.find()



   WSTM.l10n.lang.fix  =  function (adjust) {
      // Fix frequently mistaken language code
      // Precondition:
      //    adjust  -- language code
      // Postcondition:
      //    Returns appropriate language code
      // 2011-12-23 [email protected]
      var r  =  adjust.toLowerCase();
      switch (r) {
         case "cz" :
            r  =  "cs";
            break;
         case "dk" :
            r  =  "da";
            break;
         case "gr" :
            r  =  "el";
            break;
         case "in" :
            r  =  "id";
            break;
         case "iw" :
            r  =  "he";
            break;
         case "jp" :
            r  =  "ja";
            break;
      }   // switch adjust
      return  r;
   };   // .l10n.lang.fix()



   WSTM.l10n.lang.s.re.c3  =  "ace|als|ang|arc|ast|ast|" +
                              "bar|bcl|bjn|bpy|bug|bxr|" +
                              "cdo|ceb|cho|chr|chy|ckb|crh|csb|" +
                              "diq|dsb|" +
                              "eml|epo|ext|" +
                              "frp|frr|fur|" +
                              "gag|gan|glk|got|gsw|" +
                              "hak|haw|hif|hsb|" +
                              "ilo|" +
                              "jbo|" +
                              "kaa|kab|kbd|koi|krc|ksh|" +
                              "lad|lbe|lez|lij|lmo|ltg|lzh|" +
                              "mdf|mhr|mrj|mus|mwl|myv|mzn|" +
                              "nah|nan|nap|nds|new|nov|nrm|nso|" +
                              "pag|pam|pap|pcd|pdc|pfl|pih|pms|pnb|pnt|" +
                              "rmy|rue|" +
                              "scn|scn|sco|sgs|srn|stq|szl|" +
                              "tet|tpi|tum|" +
                              "udm|" +
                              "vec|vep|vls|vro|" +
                              "war|wuu|" +
                              "wuu|" +
                              "xal|xmf|" +
                              "yue|" +
                              "zea";   // 2012-06-20
   WSTM.l10n.s.re.Variables     =  { };
   WSTM.l10n.s.re.Variables.de  =
        "AKTIVE_BENUTZER|"
      + "ARTIKEL(ANZAHL|PFAD)|"
      + "(ADMIN|BEARBEITUNGS|BENUTZER|DATEI|SEITEN)ANZAHL|"
      + "BETRACHTUNGEN|"
      + "(DATUMS|ZAHLEN)FORMAT|"
      + "((DISKUSSIONS|HAUPT)(NAMENSRAUM|SEITE)"
      +  "|DISK(_NR)?"
      +  "|NAMENSRAUM"
      +  "|(OB|UNT)ERSEITE"
      +  "|(VOLLER_)?SEITENNAME)(_URL)?|"
      + "FÜLLEN(LINK|RECHT)S|"
      + "INHALTSSPRACHE|"
      + "(JETZIG|LOKAL)E(_(KALENDERWOCHE|UHRZEIT|VERSION)|"
      +                 "R_(KALENDERTAG(_2)?"
      +                   "|MONAT((_[12])|SNAME(_GENITIV|_KURZ)?)?"
      +                   "|WOCHENTAG(_ZAHL)?"
      +                   "|ZEITSTEMPEL)"
      +                 "S_JAHR)|"
      + "PROJEKTNAME|"
      + "REVISIONS(BENUTZER|ID|JAHR|MONAT1?|TAG2?|ZEITSTEMPEL)|"
      + "SCHUTZSTATUS|"
      + "SEITEN(GRÖSSE|_IN_KATEGORIE|_KAT|TITEL)|"
      + "(SKRIPT|STYLE)PFAD|"
      + "TEXTAUSRICHTUNG";   // 2012-02-04
   WSTM.l10n.s.re.Variables["de:"]  =
         // Regexp for generic variable names terminated by colon ':'
      "SORTIERUNG|"
      + "SEITEN(_IN_KATEGORIE|GRÖSSE|TITEL)|"
      + "(SPRUNGMARKE|URL)ENKODIERT|"
      + "(LOKAL|VOLLSTÄNDIG)E_URL|"
      + "DATEIPFAD|GESCHLECHT|NACHRICHT|SCHUTZSTATUS|ZAHLENFORMAT|"
      + "(INITIAL_)?(GROSS|KLEIN)|"
      + "FÜLLEN(LINK|RECHT)S";   // 2012-04-02



   WSTM.l10n.templates.issn  =  { trsl: false };



WSTM.l10n.text.trsl  =  {
   // 2012-06-18 [email protected]
   "BadRegExp":             {"en": "Invalid RegExp",
                             "de": "Syntaxfehler in RegExp"},
   "BadRegExpFlag":         {"en": "Invalid RegExp flag",
                             "de": "Fehlerhafter RegExp flag"},
   "ExceptionListHas":      {"en": "exception list has",
                             "de": "Ausschluss-Liste hat"},
   "HasMoreThan4Elements":  {"en": "Has More Than 4 Elements",
                             "de": "hat mehr als 4 Elemente"},
   "Invalid":               {"en": "invalid",
                             "de": "unzulässig"},
   "IsNotAnArray":          {"en": "is not an array",
                             "de": "ist kein Array"},
   "IsNotAString":          {"en": "is not a string",
                             "de": "ist kein String"},
   "IsNotStringOrFunction": {"en": "is neither string nor function",
                             "de": "ist weder String noch Function"},
   "Not":                   {"en": "not",
                             "de": "nicht"},
   "ReplacementIn":         {"en": "replacement in",
                             "de": "Ersetzung in"},
   "anchorRepeated":        {"en": "Anchor id= repeated",
                             "de": "Anker id= wiederholt"},
   "badISBN13bookland":     {"en": "Bad ISBN-13: bookland (EAN)",
                             "de": "ISBN-13 falsch (Bookland EAN)"},
   "badISBNcheckdigChar":   {"en": "Bad ISBN: checkdigit is illegal",
                             "de": "ISBN falsch (Prüfziffer illegal)"},
   "badISBNcheckdigEmpty":  {"en": "Bad ISBN: checkdigit is empty",
                             "de": "ISBN falsch (Prüfziffer leer)"},
   "badISBNcheckdigLength": {"en": "Bad ISBN: checkdigit of bad length",
                             "de": "ISBN falsch (Prüfzifferlänge)"},
   "badISBNcheckdigWrong":  {"en": "Bad ISBN: wrong checkdigit",
                             "de": "ISBN falsch (falsche Prüfziffer)"},
   "badISBNcountingDigits": {"en": "Bad ISBN: bad number of digits",
                             "de": "ISBN falsch (Anzahl der Ziffern)"},
   "badISBNdigitAfterX":    {"en": "Bad ISBN: digit after 'X'",
                             "de": "ISBN falsch (Ziffer nach 'X')"},
   "badISBNhyphenAfterEnd": {"en": "Bad ISBN: hyphen after last digit",
                             "de": "ISBN: '-' nach letzter Ziffer"},
   "badISBNmultipleX":      {"en": "Bad ISBN: multiple 'X'",
                             "de": "ISBN falsch (mehrfaches 'X')"},
   "badISBNtooManyDigits1": {"en": "Bad ISBN: too many digits [a]",
                             "de": "ISBN falsch (zu viele Ziffern [a])"},
   "badISBNtooManyDigits2": {"en": "Bad ISBN: too many digits [b]",
                             "de": "ISBN falsch (zu viele Ziffern [b])"},
   "badISBNXbadPosition":   {"en": "Bad ISBN: 'X' at bad position",
                             "de": "ISBN falsch (Position von 'X')"},
   "bracketsInURL":         {"en": "URL containing square brackets",
                             "de": "Weblink mit eckigen Klammern"},
   "defaultsortEmpty":      {"en": "DEFAULTSORT: sort key is empty",
                             "de": "SORTIERUNG: Schlüssel ist leer"},
   "defaultsortLineBreak":  {"en": "DEFAULTSORT: line break in sort key",
                             "de": "SORTIERUNG: Zeilenumbruch verboten"},
   "defaultsortRepeated":   {"en": "DEFAULTSORT: repeated definition",
                             "de": "SORTIERUNG: Definition wiederholt"},
   "defaultsortSuperfluous":{"en": "DEFAULTSORT: sort key same as title",
                             "de": "SORTIERUNG: Definition überflüssig"},
   "defaultsortValue":      {"en": "DEFAULTSORT: invalid sort key",
                             "de": "SORTIERUNG: Schlüssel ungültig"},
   "displaytitleDubios":    {"en": "DISPLAYTITLE: title suspicious",
                             "de": "SEITENTITEL: Titel verdächtig"},
   "displaytitleEmpty":     {"en": "DISPLAYTITLE: title is empty",
                             "de": "SEITENTITEL: Titel nicht angegeben"},
   "displaytitleRepeated":  {"en": "DISPLAYTITLE: repeated definition",
                             "de": "SEITENTITEL: Definition wiederholt"},
   "duplicatedCategory":    {"en": "Category duplication",
                             "de": "Kategorie-Wiederholung"},
   "duplicatedInterWiki":   {"en": "interwiki link duplication",
                             "de": "Wiederholung von InterWiki-Link"},
   "headlineEnd":           {"en": "Headline end not expected",
                             "de": "Überschrift-Ende unerwartet"},
   "headlineUnequal":       {"en": "Headline '=' unbalanced",
                             "de": "Überschrift mit ungleichen '='"},
   "interwikiTitled":       {"en": "Removed title from interwiki link",
                             "de": "Titel von Interwiki-Link entfernt"},
   "linkTargetMissing":     {"en": "Link target is missing",
                             "de": "Linkziel fehlt"},
   "meaninglessLinkTarget": {"en": "Meaningless link target '[|]]'",
                             "de": "Sinnlose Verlinkung '[|]]'"},
   "modCommentRequired":    {"en": "Comment enclosure required",
                             "de": "Kommentarformat benötigt"},
   "modArrayRequired":      {"en": "Array required",
                             "de": "Array benötigt"},
   "modStringRequired":     {"en": "String required",
                             "de": "String benötigt"},
   "multiplePipeSymbols":   {"en": "Multiple pipe symbols '|'",
                             "de": "Mehrfache Pipe-Symbole '|'"},
   "referencesRepeated":    {"en": "Repeated &lt;references />",
                             "de": "Wiederholtes &lt;references />"},
   "secondClosingBracket":  {"en": "Second closing bracket appended",
                             "de": "Zweite schließende Klammer gesetzt"},
   "tagAttrInvalid":        {"en": "Bad attribute format within tag",
                             "de": "Falsches Attribut-Format im Tag"},
   "tagAttrMissing":        {"en": "Tag requires attribute",
                             "de": "Tag ohne notwendiges Attribut"},
   "tagAttrQuote":          {"en": "Tag with \" and ' in attribute",
                             "de": "Tag mit \" und ' im Attribut"},
   "tagAttrRepeated":       {"en": "Tag with repeated attribute",
                             "de": "Tag mit wiederholtem Attribut"},
   "tagAttrUnexpected":     {"en": "Tag expects no attribute",
                             "de": "Tag mit unerwartetem Attribut"},
   "tagAttrUnknown":        {"en": "Tag attribute not permitted",
                             "de": "Tag mit unbekanntem Attribut"},
   "tagAttrValue":          {"en": "Tag attribute not recognized",
                             "de": "Tag mit unerwartetem Attributwert"},
   "tagAttrValueEmpty":     {"en": "Tag attribute value empty",
                             "de": "Tag mit leerem Attributwert"},
   "tagCommentBegin":       {"en": "Strange begin of comment",
                             "de": "Kommentarbeginn fehlformatiert"},
   "tagCommentNoEnd":       {"en": "Missing comment end",
                             "de": "Ende des Kommentars fehlt"},
   "tagEmptyUndesired":     {"en": "Content expected for this element",
                             "de": "Inhalt erwartet für Element"},
   "tagEndHeading":         {"en": "Tag sequence begins with end tag",
                             "de": "End-Tag steht am Anfang"},
   "tagEndMissing":         {"en": "End tag missing",
                             "de": "End-Tag fehlt"},
   "tagEndMissingFinal":    {"en": "End tag missing at text end",
                             "de": "End-Tag fehlt zum Ende des Textes"},
   "tagEndAttr":            {"en": "End tag with attributes",
                             "de": "End-Tag mit Attributen"},
   "tagForbidden":          {"en": "HTML tag not permitted",
                             "de": "Unerlaubtes HTML-Tag"},
   "tagFormBroken":         {"en": "Empty line within tag",
                             "de": "Leerzeile in einem Tag"},
   "tagFormNoEnd":          {"en": "Missing '&gt;' as tag end",
                             "de": "Fehlendes '&gt;' als Ende des Tag"},
   "tagFormReOpen":         {"en": "End of tag missing, found '&lt;'",
                             "de": "Ende des Tag fehlt / '&lt;'"},
   "tagNesting":            {"en": "Tag nesting wrong",
                             "de": "Tag unerlaubt verschachtelt"},
   "tagNestingSelf":        {"en": "Tag self-nested",
                             "de": "Tag selbst-verschachtelt"},
   "tagUnaryIllegal":       {"en": "Unary tag not permitted",
                             "de": "Element muss Inhalt umfassen"},
   "tagUnaryNoAttr":        {"en": "Unary tag requires attribute",
                             "de": "Element braucht Attribut"},
   "templateParStart":      {"en": "Template parameter unterminated",
                             "de": "Vorlagenparameter unbeendet"},
   "templateParStart=":     {"en": "Template parameter starts with '='",
                             "de": "Vorlagenparameter beginnt mit '='"},
   "templateStart":         {"en": "Template unterminated",
                             "de": "Vorlage unbeendet"},
   "tooManyLeftBrackets":   {"en": "Too many opening brackets",
                             "de": "Zu viele linke Klammern"},
   "tooManySlashes":        {"en": "Too many slashes",
                             "de": "Zu viele Schrägstriche"},
   "weblinkBracketRight":   {"en": "Closing ']' missing",
                             "de": "Schließende ']' fehlt"},
   "wikilinkBracketsAhead": {"en": "Wikilink '[[' strange",
                             "de": "Wikilink-'[[' seltsam"},
   "wikilinkInterwikiDeep": {"en": "Interwiki link not on top level",
                             "de": "Interwiki nicht auf oberster Ebene"},
   "_ErrorBegin1":          {"en": "A severe error"
                                    + " was detected in wikitext.",
                             "de": "Im Text wurde"
                                    + " ein schwerer Fehler gefunden."},
   "_ErrorBeginN":          {"en": "Severe errors"
                                    + " were detected in wikitext.",
                             "de": "Im Text wurden"
                                    + " schwere Fehler gefunden."},
   "_ErrorBeginAuto1":      {"en": "Please check the following"
                                    + " automatic attempt:",
                             "de": "Bitte überprüfe den folgenden"
                                    + " automatischen"
                                    + " Behebungsversuch."},
   "_ErrorBeginAutoN":      {"en": "Please check the following"
                                    + " automatic attempts:",
                             "de": "Bitte überprüfe die folgenden"
                                    + " automatischen"
                                    + " Behebungsversuche."},
   "_ErrorBeginMan1":       {"en": "Automatic repairing"
                                    + " might be impossible."
                                    + " Please resolve"
                                    + " the following issue manually:",
                             "de": "Nicht alles lässt sich "
                                    + " automatisch beheben."
                                    + " Bitte"
                                    + " kläre das folgende Problem"
                                    + " von Hand:"},
   "_ErrorBeginManN":       {"en": "Automatic repairing"
                                    + " might be impossible."
                                    + " Please resolve"
                                    + " the following issues manually:",
                             "de": "Nicht alles lässt sich "
                                    + " automatisch beheben."
                                    + " Bitte"
                                    + " kläre die folgenden Probleme"
                                    + " von Hand:"},
   "_ErrorEpilog":          {"en": "The corresponding comment has been"
                                    + " removed from this diffpage"
                                    + " automatically.",
                             "de": "Der entsprechende"
                                    + " auf dieser DiffPage sichtbare"
                                    + " Kommentar wurde bereits"
                                    + " automatisch entfernt."},
   "_ErrorLimitMore":       {"en": "More problems detected.",
                             "de": "Weitere Probleme festgestellt."},
   "TextRepository_TEST":   {"en": "en:TextRepository_TEST",
                             "de": "de:TextRepository_TEST"}
};   // .l10n.text.trsl



   word.res  =  {
          // 2012-02-03 [email protected]
         "border":    "border",
         "center":    "cent(re|er)",
         "framed":    "(en)?framed?",
         "frameless": "frameless",
         "left":      "left",
         "link$":     "link *= *([^|\n]*)",
         "none":      "none",
         "page$":     "page *[_=]? *([0-9]+)",
         "right":     "right",
         "thumb":     "thumb(nail)?",
         "thumb$":    "thumb(nail)?(=[^|\n]+)",
         "upright":   "upright",
         "upright$":  "upright *[ =_] *([.0-9]+)"
   };   // .l10n.word.res



word.trsl  =  {
   // 2012-06-11 [email protected]
   "Category":     {"de":     "Kategorie",
                    "pt":     "Categoria",
                    "sv":     "Kategori"},
   "DEFAULTSORT":  {"dewiki": "SORTIERUNG",
                    "svwiki": "STANDARDSORTERING"},
   "DISPLAYTITLE": {"dewiki": "SEITENTITEL"},
   "File":         {"de":     "Datei",
                    "fr":     "Fichier",
                    "pl":     "Plik",
                    "ru":     "Файл",
                    "sv":     "Fil"},
   "Image":        {"af":     "Beeld",
                    "fr":     "Image",
                    "de":     "Bild",
                    "it":     "Immagine",
                    "sv":     "Fil"},
   "Page":         {"de":     "Seite"},
   "REDIRECT":     {"dewiki": "WEITERLEITUNG",
                    "svwiki": "OMDIRIGERING"},
   "Special":      {"de":     "Spezial"},
   "Template":     {"da":     "Skabelon",
                    "de":     "Vorlage",
                    "es":     "Plantilla",
                    "fr":     "Modèle",
                    "it":     "Template",
                    "pl":     "Szablon",
                    "pt":     "Predefinição",
                    "sv":     "Mall",
                    "tr":     "Şablon"},
   "image_":       {"$":      [ [word.res.link$,          "link=$1"],
                                [word.res.page$,          "page=$1"],
                                [word.res.upright$,       "upright=$1"]
                              ],
                    "dewiki": [ [word.res.border,         "rand"],
                                [word.res.center,         "zentriert"],
                                [word.res.framed,         "gerahmt"],
                                [word.res.frameless,      "rahmenlos"],
                                [word.res.left,           "links"],
                                [word.res.link$,          "verweis=$1"],
                                [word.res.none,           "ohne"],
                                [word.res.page$,          "seite=$1"],
                                ["seite[ _]*([0-9]+)",    "seite=$1"],
                                [word.res.right,          "rechts"],
                                [word.res.thumb,          "miniatur"],
                                [word.res.thumb$,         "miniatur=$1"],
                                [word.res.upright,        "hochkant"],
                                [word.res.upright$,       "hochkant=$1"],
                                ["hochkant[ _]+([.0-9]+)", "hochkant=$1"]
                              ],
                    "svwiki": [ [word.res.center,         "center"],
                                [word.res.left,           "vänster"],
                                [word.res.right,          "höger"],
                                [word.res.thumb,          "miniatyr"],
                                [word.res.thumb$,         "miniatyr=$1"]
                              ]}
};   // .l10n.word.trsl



WSTM.l10n.word.fetch  =  function (ask, accumulate) {   // "W" MOVED M.js
   // Define keywords in local languages and project
   // Precondition:
   //    ask         -- keyword in English
   //                   Category DEFAULTSORT File Image REDIRECT Template
   //                   or "image_" for parameter map
   //    accumulate  -- 0  for current project and language
   //                      single localized major translation, keep case
   //                   1  sequence of current project/language | English
   //                   2  sequence of keyword in all languages requested
   // Postcondition:
   //    Return     0  keyword in major translation, case kept
   //                  parameter map for "image_"
   //              >0  sequence of keywords in accumulate languages
   //                  lowercase and separated by '|'
   // Uses:
   //    >  .l10n.word.trsl
   //    >  .g.projLang
   //    >  .g.wDBname
   // 2012-02-03 [email protected]
   var r  =  false;
   with (mw.libs.WikiSyntaxTextMod) {
      var trsl  =  l10n.word.trsl[ ask ];
      if (typeof(trsl) === "object") {   // keyword found
         var q;
         if (accumulate < 2) {
            var d  =  (ask === "image_"  ?  "object"  :  "string");
            q  =  trsl[ g.wDBname ];
            if (typeof(q) !== d) {
               q  =  trsl[ g.projLang ];
            }
            if (typeof(q) === d) {   // found
               if (accumulate) {   // current project/language | English
                  r  =  ask.toLowerCase();
                  s  =  q.toLowerCase();
                  if (s !== r) {
                     r  =  s + "|" + r;
                  }
               } else {   // current project and language (localized)
                  r  =  q;
               }
            } else {   // project / language unknown, return itself
               if (d === "string") {   // return itself
                  r  =  ask;
               } else {   // return  image_  en default
                  r  =  trsl[ "$" ];
               }
            }
         } else {   // sequence in all languages requested
            var s;
            r  =  "|" + ask.toLowerCase() + "|";
            for (q in trsl) {
               s  =  trsl[ q ];
               if (typeof(s) === "string") {   // cave prototype
                  s  =  s.toLowerCase();
                  if (r.indexOf("|" + s + "|")  <  0) {
                     r  =  r + s + "|";
                  }
               }
            }   // for q in trsl
            r  =  r.substr(1,  r.length - 2);
         }
      }
   }   // with WSTM
   return  r;
};   // .l10n.word.fetch()



   WSTM.l10n.templates.issn.format  =  function (adjust) {
      // Format ISSN code
      // Precondition:
      //    adjust  -- ISSN code
      // Postcondition:
      //    Returns false if
      // Uses:
      //    >  .str.sticks
      //    >< .l10n.templates.issn.trsl
      //    strTrslMap_build()
      //    stringUtl_trimL()
      //    stringUtl_trimR()
      //    strTrslMap_replace()
      // 2012-03-30 [email protected]
      var r;
      var redig4;
      var redigX;
      var tms;
      if (! this.trsl) {
         redig4  =  "([0-9][0-9][0-9][0-9])";
         redigX  =  "([0-9][0-9][0-9][0-9xX])\f";
         tms     =  [ ["[ \n]*([^}|\n]+)[ \n]*",
                       "$1\f"],
                      [redig4 + "[" + WSTM.str.sticks + " ]?" + redigX,
                       "$1-$2"],
                      [redig4 + redigX,
                       "$1-$2"]
                    ];
         this.trsl  =  strTrslMap_build(tms, true);
      }   // ! l10n.templates.issn.trsl
      r  =  strTrslMap_replace(stringUtl_trimL(stringUtl_trimR(adjust,
                                                               true),
                                               true).toUpperCase(),
                               this.trsl);
      r  =  (r === adjust  ?  false  :  r);
      return  r;
   };   // .l10n.templates.issn.format()



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



//-----------------------------------------------------------------------



mw.libs.WikiSyntaxTextMod.bb.de  =  function (WSTM) {
   // Localization functions for de language
   // Uses:
   // >  .g.s.re.yyyy
   //  < Wikisyntax_Deutsch_TagMonat             // DEPRECATED
   //  < Wikisyntax_Deutsch_TagMonat_Link        // DEPRECATED
   //  < Wikisyntax_Deutsch_TagMonatJahr_Links   // DEPRECATED
   //  < Wikisyntax_Deutsch_Datum_TMJahr         // DEPRECATED
   //  < Wikisyntax_Jahreszahl4_Link             // DEPRECATED
   // 2012-04-30 [email protected]
   if (typeof(WSTM.l10n.lang.de) !== "object") {
      WSTM.l10n.lang.de  =  {  re:       {},
                               s:        { re:     {} },
                               template: { anchor: "Anker" },
                               tms:      { }
                            };
   }



WSTM.l10n.lang.de.s.re.dom  =   //  _Tagesdatum
   // Sicheres Format für deutschen Tag im Monat
   // Ersetzung:  "$2$3."   (bzw. entsprechend hochgezählt)
   // Entfernt führende Null bei einstelligem Tag nach w:de:WP:DK
   "(0?([1-9])|([12][0-9]|3[01]))\\.";

WSTM.l10n.lang.de.s.re.moy  =   //  _Monatsnummer
   // Sicheres Format für deutsche Monatsnummer
   // Ersetzung:  "$2$3."   (bzw. entsprechend hochgezählt)
   // Entfernt führende Null bei einstelligem Monat nach w:de:WP:DK
   "(0?([1-9])|(1[012]))\\.";

WSTM.l10n.lang.de.s.re.monthname  =   //  _Monat
   // Deutscher Monatsname
   // Ersetzung:  "$1"   (bzw. entsprechend hochgezählt)
   "(Januar|Jänner|J&auml;nner|Februar|März|M&auml;rz|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)";

WSTM.l10n.lang.de.s.re.daymonthlong  =   //  _TagMonat
   // Deutsche Datumsgruppe "Tag. Monat"
   // Tolerant; berichtigt nach WP:DK
   // Ersetzung:   "$2$3. $4"   (bzw. entsprechend hochgezählt)
   // Uses:
   // >  .l10n.lang.de.s.re.dom
   // >  .l10n.lang.de.s.re.monthname
   "\\b" + WSTM.l10n.lang.de.s.re.dom
         + " *"
         + WSTM.l10n.lang.de.s.re.monthname + "\\b";

Wikisyntax_Deutsch_TagMonat  =  WSTM.l10n.lang.de.s.re.daymonthlong;

Wikisyntax_Deutsch_TagMonat_Link  =
   // Deutsche Datumsgruppe "Tag. Monat" verlinkt (zur Entlinkung)
   // Tolerant; berichtigt nach WP:DK
   // Ersetzung:   "$2$3. $4"   (bzw. entsprechend hochgezählt)
   // >  .l10n.lang.de.s.re.daymonthlong
      "\\[\\[ *" + WSTM.l10n.lang.de.s.re.daymonthlong + " *\\]\\]";

Wikisyntax_Jahreszahl4_Link  =
   // Jahreszahl von 1000 bis 2099 verlinkt (zur Entlinkung)
   // Ersetzung:  "$1"   (bzw. entsprechend hochgezählt)
   // >  .g.s.re.yyyy
      "\\[\\[ *" + WSTM.g.s.re.yyyy + " *\\]\\]";

Wikisyntax_Deutsch_TagMonatJahr_Links  =
   // Deutsche Datumsgruppe "Tag. Monat Jahr" verlinkt (zur Entlinkung)
   // Tolerant; berichtigt nach WP:DK
   // Ersetzung:   "$2$3. $4 $5"   (bzw. entsprechend hochgezählt)
   // >  Wikisyntax_Deutsch_TagMonat_Link
   // >  Wikisyntax_Jahreszahl4_Link
      Wikisyntax_Deutsch_TagMonat_Link + " +" +
      Wikisyntax_Jahreszahl4_Link;

Wikisyntax_Deutsch_Datum_TMJahr  =
   // Deutsche Datumsgruppe "(T)T.(M)M.JJJJ"
   // Wert:  T=$2$3  M=$5$6  J=$7   (bzw. entsprechend hochgezählt)
   // >  .l10n.lang.de.s.re.dom
   // >  .l10n.lang.de.s.re.moy
   // >  Wikisyntax_Jahreszahl4_Link
   WSTM.l10n.lang.de.s.re.dom +
   WSTM.l10n.lang.de.s.re.moy +
   Wikisyntax_Jahreszahl4_Link;



WSTM.l10n.lang.de.tms.Werkzeugleiste  =  [
         ["'''Fetter Text'''",
            ""],
         ["''Kursiver Text''",
            ""],
         ["\\[\\[Link-Text\\]\\]",
            ""],
         ["\\[\\[Verweistext\\]\\]",
            ""],
         ["\\[http://www\\.example\\.com Link-Text\\]",
            ""],
         ["== Überschrift ==",
            ""],
         ["\\[\\[Datei:Beispiel\\.jpg\\]\\]",
            ""],
         ["\\[\\[Media:Beispiel\\.ogg\\]\\]",
            ""],
         ["<ref>Fußnotentext hier einfügen</ref>",
            ""],
         ["<math>Formel hier einfügen</math>",
            ""],
         ["Formel hier einfügen",
            ""],
         ["<nowiki>Unformatierten Text hier einfügen</" +
                                                        ///shield nowiki\
                                                        "nowiki>",
            ""],
         ["Unformatierten Text hier einfügen",
            ""],
         ["<ref (((name|group|follow)=\"[^ \"\n>]+\")+) *> *</ref>",
            "<ref $1 />"],
         ["(<ref[^>\n]*>[^>\n]*)<small>([^<\n]*)</small>(.*</ref>)",
          "$1$2$3",
          "gi"],
         ["(<ref[^>\n]*>[^>\n]*)<small>([^<\n]*)</small>(.*</ref>)",
          "$1$2$3",
          "gi"],
         ["(<ref[^>\n]*>[^>\n]*)<small>([^<\n]*)</small>(.*</ref>)",
          "$1$2$3",
          "gi"],
         ["(<su[bp][^>\n]*>)<small>([^<\n]*)</small>(</su[bp]>)",
          "$1$2$3",
          "gi"]
   ];   // .l10n.lang.de.tms.Werkzeugleiste



   WSTM.l10n.lang.de.finishing  =  function () {
      // Poliere deutschsprachige Syntaxelemente
      // Postcondition:
      //    Nodes are modified where suitable.
      //    RegExp was used.
      // Uses:
      //    >  .l10n.lang.de.tms.Werkzeugleiste
      //    >  WikisyntaxDeutschVieles
      //    >  .text
      //    .util.translate.factory()
      //    .o.WikiTom.replace()
      // 2012-05-27 [email protected]
      var tms  =  false;
      var tms_Deutsch_Datei_Vieles  =  [
            ["(\\[\\[Datei:[^[\n]+)\\|<small>([^|\n]+)</small>\\]\\]",
             "$1$2]]",
             "gi"]
      ];   // tms_Deutsch_Datei_Vieles
      if (WSTM.config.Werkzeugleiste ||
          typeof(WikisyntaxDeutschVieles) === "boolean") {
         if (WikisyntaxDeutschVieles ||
             WSTM.config.Werkzeugleiste) {
            tms  =  WSTM.l10n.lang.de.tms.Werkzeugleiste;
            if (WikisyntaxDeutschVieles) {
               tms  =  tms.concat(tms_Deutsch_Datei_Vieles);
            }
         }
         if (tms) {
            tms  =  WSTM.util.translate.factory(tms,
                                              ".l10n.lang.de.finishing");
            if (tms) {
               WSTM.text.replace(tms, false);
            }
         }
      }   //
   }   // .l10n.lang.de.finishing()



WSTM.l10n.lang.de.formatDate  =  function (adjust) {
   // Uses:
   //    >  .l10n.lang.de.s.re.daymonthlong
   //    >  .g.s.re.yyyy
   //    >< .l10n.lang.de.re.daymonthlongyear
   // 2012-04-24 [email protected]
   var r  =  false;
   var s;
   if (! WSTM.l10n.lang.de.re.daymonthlongyear) {
      WSTM.l10n.lang.de.re.daymonthlongyear  =  new RegExp(
                                      WSTM.l10n.lang.de.s.re.daymonthlong
                                      + " +"
                                      + WSTM.g.s.re.yyyy
                                      + "\\b",
                                      "gi");
   }
   s  =  adjust.replace(WSTM.l10n.lang.de.re.daymonthlongyear,
                        "$2$3. $4 $5");
   // TODO   TT.MM.JJJJ
   // TODO   D. Mon. YYYY
   if (s !== adjust) {
      r  =  s;
   }
   return  r;
/*
function Deutsch_Monat(adjust) {
   // Deutscher Monatsname -- Zeichenkette mit Monatsnummer ersetzen
   // Precondition:
   //    adjust  -- Zeichenkette mit "Nummer" oder "Nummer."
   //               Nummer = 1,...,12
   // Postcondition:
   //    Returns string, either
   //       unmodified adjust (if invalid) or
   //       requested name
   // 2010-04-01 [email protected]
   var mn  =  ["Januar",
               "Februar",
               "März",
               "April",
               "Mai",
               "Juni",
               "Juli",
               "August",
               "September",
               "Oktober",
               "November",
               "Dezember"];
   var s  =  adjust;
   var m  =  Number(s);
   if (m != Number.NaN) {
      if (m > 0  &&  m < 13) {
         s  =  mn[m];
      }
   }   // Number
   return  s;
}   // Deutsch_Monat
*/
};   // .l10n.lang.de.formatDate()



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



//-----------------------------------------------------------------------



mw.libs.WikiSyntaxTextMod.bb.dewiki  =  function (WSTM) {
   // Localization functions for dewiki project
   // 2012-04-24 [email protected]
   if (typeof(WSTM.l10n.proj.dewiki) !== "object") {
      WSTM.l10n.proj.dewiki  =  {  re:       { s:      {} },
                                   template: { anchor: "Anker" }
                                };
   }



WSTM.l10n.proj.dewiki.comment  =  function (arglist) {
   // Handler for encountered <!-- comment -->
   // Precondition:
   //    arglist  -- String: comment content, including whitespace around
   // Postcondition:
   //    Returns false, if not adjusted
   //            String with adjusted content including whitespace around
   //            true   remove entire content
   // Uses:
   //     < .w.encountered.schweizbezogen
   // 2012-05-30 [email protected]
   var r  =  false;
   if (/[ \n]*schweiz-?bezogen[ \n]*/i.test(arglist)) {
      WSTM.w.encountered.schweizbezogen  =  true;
      if (arglist !== "schweizbezogen") {
         r  =  "schweizbezogen";
      }
   }
   return  r;
};   // .l10n.proj.dewiki.comment()



WSTM.l10n.proj.dewiki.valEqualsign  =  function (arglist) {
   // Handler for template with '=' heading value
   // Precondition:
   //    arglist  -- String: template name
   // Postcondition:
   //    Returns false, if not known
   //            true   permit '=' heading value
   // 2012-06-16 [email protected]
   var r  =  false;
   switch (arglist) {
      case "Schachbrett" :
      case "schachbrett" :
         r  =  true;
         break;
   }   // switch arglist
   return  r;
};   // .l10n.proj.dewiki.valEqualsign()



WSTM.l10n.proj.dewiki.template.fresh  =  function (arglist) {
   // Prüfe und berichtige ggf. Vorlagen in deutschsprachiger Wikipedia
   // Precondition:
   //    arglist  -- [0] template name
   //                [1] node number of template start
   //                [2] node number of template end
   //                [3] WikiTom sequence
   // Postcondition:
   //    Returns false, if not adjusted
   //            or Array   [0] newname
   //                       [1] true: place template on single line(s)
   //                       [2] function callback, or false
   //                           requires forked element as parameter
   //    WikiTom sequence was changed if necessary
   //    RegExp was used.
   // Uses:
   //    >  WikisyntaxDeutschVieles
   //    (.l10n.proj.dewiki.template.normdaten.fire)
   //    (.l10n.proj.dewiki.template.personendaten.fire)
   // 2012-05-30 [email protected]
   var r  =  false;
   switch (arglist[0]) {
      case "Anker" :
      case "anker" :
         r  =  ["Anker",
                false,
                null];// // // // // // // // //
        break;
      case "Normdaten" :
      case "normdaten" :
         r  =  ["Normdaten",
                true,
                this.normdaten.fire];
        break;
      case "Personendaten" :
      case "personendaten" :
         r  =  ["Personendaten",
                true,
                this.personendaten.fire];
        break;
      case "Belege" :
      case "belege" :
      case "belege fehlen" :
      case "Quelle" :
      case "quelle" :
      case "Quellen" :
      case "quellen" :
      case "Quellen fehlen" :
      case "quellen fehlen" :
         r  =  ["Belege fehlen", true, false];
         break;
      default:
         /*
         if (WikisyntaxDeutschVieles) {
            var scope  =  arglist[0].toLowerCase();
            if (scope ===  "commons cat") {
               r  =  "Commonscat";
            }
         }   // WikisyntaxDeutschVieles
         */
   }   // switch arglist
   return  r;
};   // .l10n.proj.dewiki.template.fresh()



WSTM.l10n.proj.dewiki.template.normdaten  =  { };



WSTM.l10n.proj.dewiki.template.normdaten.fire  =  function (adjust) {
   // Vorlage:Normdaten -- Formatierung
   // Precondition:
   //    adjust  -- WikiTom sequence (forked element)
   //               .symbol
   //               .values
   // Postcondition:
   //    adjust was changed if necessary
   // Uses:
   //    .l10n.proj.dewiki.template.normdaten.format()
   // Remark: May be used as event handler -- 'this' is not accessed
   // 2012-05-30 [email protected]
if (WSTM.config) {
if (! WSTM.config.xEvaluation) {
   WSTM.l10n.proj.dewiki.template.normdaten.format(adjust);
}
}
};   // .l10n.proj.dewiki.template.normdaten.fire()



WSTM.l10n.proj.dewiki.template.normdaten.format  =  function (adjust) {
   // Vorlage:Normdaten -- Formatierung
   // Precondition:
   //    adjust  -- WikiTom sequence (forked element)
   //               .values
   // Postcondition:
   //    adjust was changed if necessary
   // Uses:
   //     < .w.encountered.normdaten
   //    .w.template.mod.trim()
   //    .w.template.mod.flush()
   //    .w.template.mod.fix()
   //    .w.template.par.find()
   //    .w.template.par.fiat()
   //    .w.template.mod.fixed()
   //    .w.template.mod.furnish()
   //    .w.template.mod.format()
   // 2012-05-31 [email protected]
   var d  =  [ [/^SELIBR$/i,            true],
               [/^(PND|GKD|SWD|EST)$/i, false] ];
   var t  =  [ [/^Normdaten/i,  "Normdaten"],
               [/^TYP$/i,       "TYP",       true],      //  1
               [/^GND$/i,       "GND",       true],      //  2
               [/^LCCN$/i,      "LCCN",      false],     //  3
               [/^NDL$/i,       "NDL",       false],     //  4
               [/^VIAF$/i,      "VIAF",      false],     //  5
               [/^GNDName$/i,   "GNDName",   false],     //  6
               [/^GNDfehlt$/i,  "GNDfehlt",  false],     //  7
               [/^GNDCheck$/i,  "GNDCheck",  false],     //  8
               [/^GKD$/i,       "GKD",       false],     //  9
               [/^PND$/i,       "PND",       false],     // 10
               [/^SWD$/i,       "SWD",       false],     // 11
               [/^EST$/i,       "EST",       false] ];   // 12
   var p;
   var v;
//mw.log(WSTM.debugging,".l10n.proj.dewiki.normdaten.format()>>",0,adjust);
   WSTM.w.template.mod.trim(adjust);
   WSTM.w.template.mod.flush(adjust, d);
   WSTM.w.template.par.fix(t, adjust);
   p  =  WSTM.w.template.par.find(adjust, "PND");
   if (p) {
      v  =  WSTM.w.template.par.find(adjust, "GND");
      if (v) {
         if (v.value.toString()) {
            v  =  false;
         } else {
            v.value  =  p.value;
         }
      } else {
         v  =  WSTM.w.template.par.fiat(adjust, "GND", p.value);
      }
      if (v) {
         WSTM.w.template.par.fiat(adjust, "TYP", "p");
         WSTM.w.template.mod.flush(adjust,  [ [/^PND$/, true] ]);
      }
   }
   WSTM.w.template.par.fixed(t, adjust);
   WSTM.w.template.mod.furnish( adjust,
                                { indent:    0,
                                  later:     false,
                                  leap:      false,
                                  leave:     false,
                                  linebreak: false,
                                  lineup:    false
                                } );
   if (adjust.learnt) {
      WSTM.w.template.mod.format(adjust);
   }
   WSTM.w.encountered.normdaten  =  true;
};   // .l10n.proj.dewiki.template.normdaten.format()



WSTM.l10n.proj.dewiki.template.personendaten  =  { };



WSTM.l10n.proj.dewiki.template.personendaten.fire  =  function (adjust) {
   // Vorlage:Personendaten -- Formatierung
   // Precondition:
   //    adjust  -- WikiTom sequence (forked element)
   //               .symbol
   //               .values
   // Postcondition:
   //    adjust was changed if necessary
   // Uses:
   //    .l10n.proj.dewiki.template.personendaten.format()
   // Remark: May be used as event handler -- 'this' is not accessed
   // 2012-04-25 [email protected]
   WSTM.l10n.proj.dewiki.template.personendaten.format(adjust);
};   // .l10n.proj.dewiki.template.personendaten.fire()



WSTM.l10n.proj.dewiki.template.personendaten.format  =  function (adjust) {
   // Vorlage:Personendaten -- Formatierung
   // Precondition:
   //    adjust  -- WikiTom sequence (forked element)
   // Postcondition:
   //    adjust was changed if necessary
   // Uses:
   //    >  .str.sticks
   //    >< .l10n.proj.dewiki.template.personendaten.tmap.*
   //     < .w.encountered.personendaten
   //    .w.template.par.fix()
   //    .w.template.par.fixed()
   //    .w.template.mod.trim()
   //    .util.translate.factory()
   //    .w.link.wiki.flush()
   //    .o.WikiTom().replace()
   //    .l10n.proj.dewiki.template.personendaten.formatDatum()
   //    .w.template.mod.furnish()
   //    .o.WikiTom().fresh()
   // Requires: JavaScript 1.3   fromCharCode()
   // 2012-05-31 [email protected]
   var g;
   var i;
   var t  =  [ [/^Personendaten$/i,    "Personendaten"],
               [/^NAME$/i,             "NAME",             true],    // 1
               [/^ALTERNATIVNAMEN?$/i, "ALTERNATIVNAMEN",  true],    // 2
               [/^KURZBESCHREIBUNG$/i, "KURZBESCHREIBUNG", true],    // 3
               [/^GEBURTSDATUM$/i,     "GEBURTSDATUM",     true],    // 4
               [/^GEBURTSORT$/i,       "GEBURTSORT",       true],    // 5
               [/^STERBEDATUM$/i,      "STERBEDATUM",      true],    // 6
               [/^STERBEORT$/i,        "STERBEORT",        true] ];  // 7
   // https://toolserver.org/~sk/cgi-bin/pd/pd.cgi?view=all
   WSTM.w.template.par.fix(t, adjust);
   WSTM.w.template.par.fixed(t, adjust);
   WSTM.w.template.mod.trim(adjust);
   if (! this.tmap) {
      this.tmap  =  { };
      this.tmap.all  =  WSTM.util.translate.factory(   [
                            ["&nbsp;",
                             " ",
                             "g"],
                            ["([^ 0-9\n][^ 0-9\n]),([^ 0-9\n][^ 0-9\n])",
                             "$1, $2",
                             "g"],
                            [" +,",
                             ",",
                             "g"],
                            [",,",
                             ",",
                             "g"],
                            ["  +",
                             " ",
                             "g"],
                            ["^ ",
                             ""]                          ],
                                                           "PD*");
      this.tmap.alt  =  WSTM.util.translate.factory(   [
                       ["(.+[^ \n]) +-+$",
                        "$1",
                        ""],
                       ["\\bPseud\\. *",
                        "Pseudonym ",
                        "gi"],
                       ["(?:(?:bürgerlicher|eigentlicher|richtiger) Name"
                        + "|(?:bürgerlich|eigentlich))\\b",
                        "wirklicher Name",
                        "gi"],
                       ["\\bvoller Name\\b",
                        "vollständiger Name",
                        "gi"]                              ],
                                                           "PD-ALT");
      this.tmap.ank  =  WSTM.util.translate.factory(   [
                      ["^(.+[^ \n]) *[" + WSTM.str.sticks + ",:`]+$",
                       "$1",
                       ""],
                      ["([^&\n]+.[^ \n]) *;([^ \n].+)",
                       "$1; $2",
                       "g"],
                      [" +\\)",
                       ")",
                       "g"],                               ],
                                                           "PD-ALT/KB");
      this.tmap.kub  =  WSTM.util.translate.factory(   [
                      ["(\\b[12]?[0-9]?[0-9][0-9])"
                       + "[" + WSTM.str.sticks + "]"
                       + "([12]?[0-9]?[0-9][0-9])\\b",
                       "$1" + String.fromCharCode(8211) + "$2",
                       ""],
                      ["('''?)(.+)\\1",
                       "$2",
                       ""],
                      ["(.*[^ \n])\\(",
                       "$1 (",
                       ""],
                      ["(.+[^ \n][^ \n][^ \n][^ IVX\n]) *\\.+$",
                       "$1",
                       ""],
                      ["(.+[^ \n]) *-+$",
                       "$1",
                       ""]                                 ],
                                                           "PD-KB");
   }
   for (i = 1;  i < 8;  i++) {
      g  =  adjust.values[i].value;
      if (g) {
         g.replace(this.tmap.all, false);
      }
   }   // for i
   g  =  adjust.values[2].value;
   if (g) {
      g.replace(this.tmap.alt, false);
      g.replace(this.tmap.ank, false);
   }
   g  =  adjust.values[3].value;
   if (g) {
      g.replace(this.tmap.ank, false);
      g.replace(this.tmap.kub, false);
   }
   for (i = 1;  i < 7;  i++) {
      if (i !== 5) {
         g  =  adjust.values[i].value;
         if (g) {
            if (g.children) {
               if (g.children.length > 2) {
                  WSTM.w.link.wiki.flush(g);
                  adjust.learnt  =  true;
               }
            }
         }
      }
   }   // for i
   this.formatDatum(adjust.values, 4, true);
   this.formatDatum(adjust.values, 6, false);
   WSTM.w.template.mod.furnish( adjust,
                                { indent:    0,
                                  later:     false,
                                  lastline:  false,
                                  leap:      false,
                                  leave:     false,
                                  linebreak: true,
                                  lineup:    false
                                } );
   if (adjust.learnt) {
      WSTM.w.template.mod.format(adjust);
   }
   WSTM.w.encountered.personendaten  =  true;
};   // .l10n.proj.dewiki.template.personendaten.format()



WSTM.l10n.proj.dewiki.template.personendaten.formatDatum  =
   function (assigned, access, ahead) {
   // Vorlage:Personendaten -- Datums-Formatierung
   // Precondition:
   //    assigned  -- Array with assignments
   //                 >  [access].value  -- WikiTom with value string
   //                                       >  .children
   //                                       >< .source
   //    access    -- element number in assigned
   //    ahead     -- true: birth;  false: death
   // Postcondition:
   //    Returns string iff modified
   //                    < assigned.learnt  -- true
   //    RegExp was used.
   // Uses:
   //    >.l10n.lang.de.s.re.dom
   //    >< .l10n.proj.dewiki.template.personendaten.reDatum0
   //    >< .l10n.proj.dewiki.template.personendaten.reDatum1
   //    >< .l10n.proj.dewiki.template.personendaten.reDatum2
   //    >< .l10n.proj.dewiki.template.personendaten.reDatum3
   //    >< .l10n.proj.dewiki.template.personendaten.reDatumB
   //    >< .l10n.proj.dewiki.template.personendaten.reDatum
   //    .str.trimR()
   //    .l10n.lang.de.formatDate()
   // 2012-05-31 [email protected]
   var r    =  false;
   var v    =  assigned[access].value;
   var got;
   var s;
   var src;
   var sub;
   if (! v.children) {
      src  =  WSTM.str.trimR(v.source, true, true);
      if (src) {
         if (! this.reDatum0) {
            s  =  "([12]?[0-9]?[0-9][0-9])\\b";
            this.reDatum0   =  new RegExp(" *"
                                          + "(vor "
                                          + "|nach "
                                          + "|zwischen "
                                          + "|getauft "
                                          + "|begraben "
                                          + "|unsicher: ?)?"
                                          + " *"
                                          + "([^ \n].*[^ \n]) *\n?",
                                          "i");
            this.reDatum1   =  new RegExp("\\b(?:"
                                            + "(?:"
                                              + "(?:ungefähr"
                                                + "|gegen"
                                                + "|etwa"
                                                + "|circa"
                                                + ") +)"
                                              + "|"
                                              + "(?:"
                                                + "(?:ca.|~)"
                                                + " *))"
                                          + s,
                                          "gi");
            this.reDatum2   =  new RegExp("\\b(?:"
                                              + "(?:später als"
                                                + "|frühestens"
                                                + "|nicht vor) +)"
                                          + s,
                                          "gi");
            this.reDatum3   =  new RegExp("\\b" + s
                                                + " +\\(oder später\\)",
                                          "gi");
            this.reDatumB1  =  new RegExp("^("
                                           + WSTM.l10n.lang.de.s.re.dom
                                           + ".*)"
                                          + " +\\(Tauf(?:e|datum)\\)",
                                          "gi");
            this.reDatumD1  =  new RegExp("(.*)\\b"
                                          + "(?:verschollen"
                                            + "|vermi(?:ss|ß)t) +"
                                          + s,
                                          "gi");
            this.reDatumD2  =  new RegExp("^("
                                           + WSTM.l10n.lang.de.s.re.dom
                                           + ".*)"
                                          + " +\\((?:Beerdigung"
                                                + "|Begräbnis)\\)",
                                          "gi");
            this.reDatumD3  =  new RegExp("^beerdigt +"
                                          + "("
                                            + WSTM.l10n.lang.de.s.re.dom
                                            + ".+)",
                                          "gi");
         }
         got  =  this.reDatum0.exec(v.source);
         if (got) {
            s  =  got[2];
            if (s) {
               r  =  WSTM.l10n.lang.de.formatDate(s);
               if (r) {
                  s  =  r;
               }
            }
            if (got[1]) {
               s  =  WSTM.str.trimR(got[1], false)
                     +  (s  ?  " " + s  :  s)
                     +  "\n";
            }
            s  =  s.replace(this.reDatum1,  "um $1");
            s  =  s.replace(this.reDatum2,  "nach $1");
            s  =  s.replace(this.reDatum3,  "nach $1");
            if (ahead) {
               s  =  s.replace(this.reDatumB1, "getauft $1");
            } else {
               s  =  s.replace(this.reDatumD1,  "$1nach $2");
               s  =  s.replace(this.reDatumD2,  "begraben $1");
               s  =  s.replace(this.reDatumD3,  "begraben $1");
            }
            if (s !== src) {
               v.source         =  s;
               assigned.learnt  =  true;
               r                =  s;
            }
         }   // got
      }
   }
   return  r;
};   // .l10n.proj.dewiki.template.personendaten.formatDatum()



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



//-----------------------------------------------------------------------



mw.libs.WikiSyntaxTextMod.bb.hooks  =  function (WSTM) {
   if (typeof(WSTM.hooks) !== "object") {
      WSTM.hooks  =  { };
   }



WSTM.hooks.fire  =  function (action, arglist) {
   // Adopt execution to sister projects and content language
   //    Dedicated to run as a method in a stringDOM_Nodelist object.
   // Precondition:
   //    action   -- activity for current project and language
   //                *         initialization
   //                template  return false or [newname, relpos]
   //    arglist  -- parameter as appropriate, may be array
   // Postcondition:
   //    Returns appropriate answer of hook
   // Uses:
   //    >  .g.projLang
   //    >  .g.wDBname
   //    .hooks.first()                      trwiki *
   //    .hooks.booksources()
   //    .hooks.commonscat()                 commonscat
   //    .hooks.defaultsort_strict()         defaultsort.strict
   //    .hooks.headline_spacing()
   //    .l10n.de_INIT()                     de     *
   //    wikisyntax_de_polish()              de     polish
   //    .l10n.lang.de.finishing()           de     finishing
   //    .l10n.dewiki_fragmentAnker()        dewiki fragment
   //    wikisyntax_dewiki_Vorlage()         dewiki template
   //    .l10n.proj.dewiki.template.fresh()  dewiki template
   //    .l10n.dewiki_wikilink_lower1()      dewiki wikilink-lower1
   // 2012-06-16 [email protected]
   var r  =  false;
   var x;
   switch (action) {
      case "*" :
         this.first();
         break;
      case "anchor" :
      case "comment" :
      case "valEqualsign" :
         x  =  WSTM.l10n.proj[ WSTM.g.wDBname ];
         if (typeof(x) === "object") {
            x  =  x[ action ];
            if (typeof(x) === "function") {
               r  =  x(arglist);
            }
         }
         break;
      case "booksources" :
         r  =  this.booksources(arglist);
         break;
      case "commonscat" :
         r  =  this.commonscat(arglist);
         break;
      case "defaultsort.strict" :
         r  =  this.defaultsort_strict();
         break;
      case "displaytitle.localize" :
         r  =  this.displaytitle_localize();
         break;
      case "finishing" :
         x  =  WSTM.l10n.lang[ WSTM.g.projLang ];
         if (typeof(x) === "object") {
            x  =  x[ action ];
            if (typeof(x) === "function") {
               r  =  x(arglist);
            }
         }
         break;
      case "headline-spacing" :
         r  =  this.headline_spacing();
         break;
      case "issn" :
         r  =  this.issn(arglist);
         break;
   }   // switch action
   switch (WSTM.g.projLang) {
      case "de" :   // deprecated
         switch (action) {
            case "*" :   // deprecated
               WSTM.l10n.de_INIT();
               break;
            case "polish" :   // deprecated
               if (typeof(arglist) === "object") {
                  arglist.plugin  =  wikisyntax_de_polish;
                  arglist.plugin();
               }
               break;
         }   // switch action de
         break;
   }   // switch .g.projLang
   switch (WSTM.g.wDBname) {
      case "dewiki" :
         switch (action) {
            case "anchor" :
               r  =  WSTM.l10n.proj.dewiki.template.anchor;
               break;
            case "fragment" :   // deprecated
               r  =  WSTM.l10n.dewiki_fragmentAnker(arglist);
               break;
            case "template" :   // deprecated
               if (arglist.length > 2) {
                  arglist[0].plugin  =  wikisyntax_dewiki_Vorlage;
                  r  =  arglist[0].plugin( [ arglist[1],
                                             arglist[2] ] );
               }
               break;
            case "Template" :
               r  =  WSTM.l10n.proj.dewiki.template.fresh(arglist);
               break;
            case "wikilink-lower1" :
               r  =  WSTM.l10n.dewiki_wikilink_lower1(arglist);
               break;
         }   // switch action dewiki
         break;
   }   // switch .g.wDBname
   return  r;
};   // .hooks.fire()



WSTM.hooks.first  =  function () {
   // Adopt particular sister projects in specific language
   // Uses:
   //    >  .g.wDBname
   //     < .g.projSpace
   // 2011-12-26 [email protected]
   if (typeof(WSTM.g.projLang) !== "string") {   /// 2011
      if (typeof(Wiki_ProjectLang) === "string") {
         WSTM.g.projLang  =  Wiki_ProjectLang;
      }
   }
   if (typeof(WSTM.g.projType) !== "string") {   /// 2011
      if (typeof(Wiki_ProjectType) === "string") {
         WSTM.g.projSpace  =  Wiki_ProjectType;
         WSTM.g.projType   =  Wiki_ProjectType;
      }
   }
   switch (WSTM.g.wDBname) {
      case "trwiki" :
         WSTM.g.projSpace  =  "vikipedi";
         break;
   }   // switch .g.wDBname
};   // .hooks.first()



WSTM.hooks.booksources  =  function (adjust) {
   // Postcondition:
   //    Returns true if adjust is the 'BookSources' within Special:
   // Uses:
   //    >  .g.wDBname
   // 2011-12-25 [email protected]
   var r  =  (adjust === "BookSources");
   if (! r) {
      switch (WSTM.g.wDBname) {
         case "dewiki" :
            r  =  (adjust === "ISBN-Suche");
            break;
      }   // switch .g.wDBname
   }
   return  r;
};   // .hooks.booksources()



WSTM.hooks.commonscat  =  function (adjust) {
   // Retrieve commonscat template name
   // Precondition:
   //    adjust  -- "Commonscat" or "Commons cat" (defaults), or false
   // Postcondition:
   //    Returns appropriate template name, or false
   // Uses:
   //    >  .g.wDBname
   // 2011-12-25 [email protected]
   var r  =  adjust;
   switch (WSTM.g.wDBname) {
      case "dewiki" :
      case "nlwiki" :
      case "svwiki" :
         // w:de:Vorlage:Commons cat 2010-03-06  2011: 0 transclusions
         r  =  "Commonscat";
         // w:de: 2011:  180.000 transclusions
         break;
      case "enwiki" :
         r  =  "Commons category";
         // w:en: 2011:  200.000 transclusions
         break;
      case "dawiki" :
         r  =  "Commonskat";
         break;
      case "trwiki" :
         r  =  "CommonsKat-ufak";
         break;
   }   // switch .g.wDBname
   return  r;
};   // .hooks.commonscat()



WSTM.hooks.defaultsort_strict  =  function () {
   // Forbid DEFAULTSORTKEY|DEFAULTCATEGORYSORT instead of DEFAULTSORT
   // Postcondition:
   //    Returns false iff variant is permitted
   // Uses:
   //    >  .g.wDBname
   // 2011-04-24 [email protected]
   var r  =  true;
   /*
   switch (WSTM.g.wDBname) {
   }   // switch .g.wDBname
   */
   return  r;
};   // .hooks.defaultsort_strict()



WSTM.hooks.displaytitle_localize  =  function () {
   // Force localization of DISPLAYTITLE
   // Postcondition:
   //    Returns false iff variant is permitted
   // Uses:
   //    >  .g.wDBname
   // 2012-04-04 [email protected]
   var r  =  false;
   /*
   switch (WSTM.g.wDBname) {
   }   // switch .g.wDBname
   */
   return  r;
};   // .hooks.displaytitle_localize()



WSTM.hooks.headline_spacing  =  function () {
   // Retrieve headline spacing policy
   // Postcondition:
   //    Returns required policy code, or false
   //             1  -- 1 space between == and headline
   //            -1  -- no space at all between == and headline
   // Uses:
   //    >  .g.wDBname
   // 2012-03-26 [email protected]
   var r  =  false;
   switch (WSTM.g.wDBname) {
      case "dewiki" :
         r  =  1;
         break;
   }   // switch .g.wDBname
   return  r;
};   // .hooks.headline_spacing()



WSTM.hooks.issn  =  function (arglist) {
   // Standardize ISSN encoding
   // Precondition:
   //    arglist  -- Array[2]
   //                [0]  -- string: plain code or longer expression
   //                [1]  -- true: try to make template,  format ID
   // Postcondition:
   //    Returns string with standardized ID (not trimmed) or
   //            created template transclusion
   // Uses:
   //    >  .str.sticks
   //    ><.g.re.issn_badform
   //    ><.g.re.issn_encode
   // 2012-05-316-22 [email protected]
   var r  =  arglist[0];
   var x;
mw.log(WSTM.debugging,".hooks.issn()",0,WSTM.g.re);
   if (! WSTM.g.re.issn_badform) {
      WSTM.g.re.issn_badform  =  new RegExp("\\bISSN[:=]?( *[0-9])", "");
   }
   if (! WSTM.g.re.issn_encode) {
      WSTM.g.re.issn_encode  =  new RegExp("([0-9])[" + WSTM.str.sticks + " ]
                                           + " ]([0-9xX])",
                                           "g");
   }
   r  =  r.replace(WSTM.g.re.issn_encode, "-$1-$2");
   if (arglist[1]) {
      x  =  WSTM.l10n.lang[WSTM.g.projLang];
      if (typeof(x) === "object") {
         x  =  x.issn;
         if (typeof(x) === "function") {
            r  =  x(r);
         }
      }
   } else {
      r  =  r.toUpperCase().replace(/\bISSN[:=]?( *[0-9])/, "WSTM.g.re.issn_badform, "ISSN $1");
   }
   return  r;
};   // .hooks.issn()



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



//-----------------------------------------------------------------------



function stringUtl_isBlank(ask, any) {
   /**
    Test for invisible character
    @version 2011-01-27 [email protected]
    @param   ask  character code to be examined
    @param   any  true: include zero width and direction marks
    @return  true iff ask is any space or other invisible character code
   */
   var r  =  false;
   switch (ask) {
      case   32 : // ' '
      case  160 : // nbsp
      case 8194 : // N-SPACE
      case 8195 : // M-SPACE
      case 8196 : // THREE-PER-EM SPACE
      case 8197 : // FOUR-PER-EM SPACE
      case 8198 : // SIX-PER-EM SPACE
      case 8199 : // FIGURE SPACE
      case 8200 : // PUNCTUATION SPACE
      case 8201 : // thinsp
      case 8202 : // hair space (english typography)
      case 8239 : // NARROW NO-BREAK SPACE
         r  =  true;
         break;
      case 8203 : // ZERO WIDTH SPACE
      case 8204 : // zwnj
      case 8205 : // zwj
      case 8206 : // lrm
      case 8207 : // rlm
      case 8236 : // POP DIRECTIONAL FORMATTING
         if (any) {
            r  =  true;
            break;
         }
   }   // switch ask
   return  r;
}   // stringUtl_isBlank



function stringUtl_trimL(adjust, any) {
   /**
    Return string without heading spaces charcodes of any kind
    @version 2011-01-20 [email protected]
    @param   adjust  string to be trimmed
    @param   any     true: include zero width and direction marks
   */
   // Uses:
   //    stringUtl_isBlank()
   // Requires: JavaScript 1.3   charCodeAt()
   var r  =  adjust;
   var k  =  r.charCodeAt(0);
   while (k) {
      if (stringUtl_isBlank(k, any)) {
         r  =  r.substr(1);
         k  =  r.charCodeAt(0);
      } else {
         k  =  false;
      }
   }   // while k
   return  r;
}   // stringUtl_trimL



function stringUtl_trimR(adjust) {
   /**
    Return string without trailing spaces charcodes of any kind
    @version 2011-01-26 [email protected]
    @param   adjust  string to be trimmed
   */
   // Uses:
   //    stringUtl_isBlank()
   // Requires: JavaScript 1.3   charCodeAt()
   var r  =  adjust;
   var k;
   var n  =  r.length - 1;
   while (n > -1) {
      k  =  r.charCodeAt(n);
      if (stringUtl_isBlank(k, false)) {
         if (n === 0) {
            r  =  "";
            break;   // while
         } else {
            r  =  r.substr(0, n);
            n--;
         }
      } else {
         break;   // while
      }
   }   // while n
   return  r;
}   // stringUtl_trimR



mw.libs.WikiSyntaxTextMod.l10n.de_INIT  =
   function () {
   // Setup German language project
   // Uses:
   //    >< WikisyntaxDeutschVieles
   // 2011-07-23 [email protected]
   if (typeof(WikisyntaxDeutschVieles) !== "boolean") {
      WikisyntaxDeutschVieles  =  false;
   }   // typeof WikisyntaxDeutschVieles
};   // .l10n.de_INIT()



function wikisyntax_de_polish() {
   // Poliere deutschsprachige Syntaxelemente
   //    Dedicated to run as a method in a stringDOM_Nodelist object.
   // Precondition:
   //    None.
   // Postcondition:
   //    Nodes are modified where suitable.
   //    RegExp was used.
   // Uses:
   //    strTrslMap_build()
   //    stringDOM_Nodelist::
   //          getCount()
   //          replace()
   //    >  .l10n.lang.de.tms.Werkzeugleiste
   //    >  WikisyntaxDeutschVieles
   // 2012-05-30 [email protected]
   var tms;
   var tms_Deutsch  =  [   // DEPRECATED
         ["\n\n(\n\n)+",   // mehr als zwei Leerzeilen
            "\n\n\n"],
         ["((^|\n)==+)([^\n =][^\n=]*==+) *\n",
            "$1 $3\n"],
         ["((^|\n)==+)([^\n =][^\n=]*==+) *\n",
            "$1 $3\n"],
         ["((^|\n)==+ [^\n=]*[^\n =])(==+) *\n",
            "$1 $3\n"],
         ["((^|\n)==+ [^\n=]*[^\n =])(==+) *\n",
            "$1 $3\n"]
                         ];
   var tms_Deutsch_Vieles        =  mw.libs.WikiSyntaxTextMod.l10n.lang.de.tms.Werkzeugleiste;
   var tms_Deutsch_Datei_Vieles  =  [
         ["(\\[\\[Datei:[^[\n]+)\\|<small>([^|\n]+)</small>\\]\\]",
          "$1$2]]",
          "gi"]
   ];   // tms_Deutsch_Datei_Vieles
   tms  =  tms_Deutsch;
   if (typeof(WikisyntaxDeutschVieles) === "boolean") {
      if (WikisyntaxDeutschVieles) {
         tms  =  tms.concat(tms_Deutsch_Vieles);
      }
   }   // typeof WikisyntaxDeutschVieles
   this.replace(strTrslMap_build(tms,  (this.getCount() > 1)));
}   // wikisyntax_de_polish()



mw.libs.WikiSyntaxTextMod.l10n.dewiki_fragmentAnker  =
   function (adjust) {
   // Entferne ggf. veraltete "Anker:"-Vorlage aus wikilink-Fragment
   // Precondition:
   //    adjust  -- fragment (starting after '#')
   // Postcondition:
   //    false   if nothing to do
   //    string  Fragment ohne führendes "Anker:"
   // 2010-05-04 [email protected]
   var r  =  false;
   if (adjust.substr(0, 6)  ===  "Anker:"){
      r  =  adjust.substr(6);
   }
   return  r;
};   // .l10n.dewiki_fragmentAnker()



function wikisyntax_dewiki_Vorlage(arglist) {
   // Prüfe und berichtige ggf. Vorlagen in deutschsprachiger Wikipedia
   //    Dedicated to run as a method in a stringDOM_Nodelist object.
   // Precondition:
   //    arglist  -- [0] template name
   //                [1] found info: after {{
   //                    [0]  position
   //                    [1]  node number
   // Postcondition:
   //    Returns false, if not adjusted
   //            or [newname, relpos]
   //    DEPRECATED:
   //    Nodes are modified where suitable.
   //    RegExp was used.
   // Uses:
   //    >  WikisyntaxDeutschVieles
   //    wikisyntax_dewiki_Personendaten()
   // 2011-07-08 [email protected]
   var r  =  false;
   var x;
   switch (arglist[0]) {
      case "personendaten" :
         r  =  ["Personendaten", 0];
      case "Personendaten" :
         this.plugin  =  wikisyntax_dewiki_Personendaten;
         x  =  this.plugin(arglist[1]);
         if (x) {   // insertion
            r  =  x;
         }
         break;
      case "Belege" :
      case "belege" :
      case "belege fehlen" :
      case "Quelle" :
      case "Quellen" :
      case "quelle" :
      case "quellen" :
         r  =  ["Belege fehlen", 0];
         break;
      default:
         /*
         if (WikisyntaxDeutschVieles) {
            var scope  =  arglist[0].toLowerCase();
            if (scope ===  "commons cat") {
               r  =  "Commonscat";
            }
         }   // WikisyntaxDeutschVieles
         */
   }   // switch arglist
   return  r;
}   // wikisyntax_dewiki_Vorlage



mw.libs.WikiSyntaxTextMod.l10n.dewiki_wikilink_lower1  =
   function (adjust) {
   // Kleinschreibung von Wikilink-Lemma in deutschsprachiger Wikipedia
   // Precondition:
   //    adjust  -- array[2]
   //               [0] Wikilink target with lowercase begin
   //                   no sister project, no language, no namespace
   //               [1] Wikilink title, or false
   // Postcondition:
   //    Returns false iff capitalized link not appropriate for project
   //    RegExp was used.
   // Uses:
   // 2011-02-05 [email protected]
   var re      =  new RegExp("^[a-z][a-z][a-z][a-z]");
   var subject =  adjust[0];
   var low2up  =  re.test(subject);
   if (low2up) {
      var show  =  adjust[1];
      if (show) {
         var start  =  show.substr(0, 1);
         if (start === start.toLowerCase()) {
            start  =  show + " (";
            if (start  ===  subject.substr(0, start.length)) {
               low2up  =  false;
            }   // kleingeschriebenes Klammerlemma
         }   // lowercase title
      }   // titled
   }   // low2up
   return low2up;
};   // .l10n.dewiki_wikilink_lower1()



/*
 Erprobung der Vorlagen-Syntax
 am Beispiel der {{Personendaten ... }}  (deutschsprachige Wikipedia)
 als einer der häufigsten und Routine-Berichtigungen zugänglichen
 */



function wikisyntax_dewiki_Personendaten(access) {
   // Prüfe und berichtige ggf. "{{Personendaten ... }}"
   //    Dedicated to run as a method in a stringDOM_Nodelist object.
   // Precondition:
   //    access  -- pointer array to the location of  "{{Personendaten"
   //               [0]  position after "{{"
   //               [1]  node number
   // Postcondition:
   //    Returns false, if access[0] not adjusted
   //            or  ["Personendaten ... ", relpos]
   //                relpos positive: moved forward after access[0]
   //    stringDOM_Node modified, if indicated
   // Uses:
   //    strTrslMap_build()
   //    strTrslMap_replace()
   //    wikisyntax_link_remove()
   //    wikisyntax_dewiki_Personendaten_Datum()
   //    stringUtl_trimL()
   //    stringDOM_Nodelist::
   //          getCount()
   //          getNode()
   //    stringDOM_Node_String::
   //          toString()
   //          set()
   // >  .str.sticks
   // >  .l10n.lang.de.s.re.dom
   // Requires: JavaScript 1.3   charCodeAt()   fromCharCode()
   // 2012-04-24 [email protected]
   var node    =  this.getNode(access[1]);
   var scope   =  node.toString();
   var keep    =  access[0] - node.beg - 2;
   var sub     =  scope.substr(keep);
   var joiner  =  sub.indexOf("}}");
   var r       =  false;
   if (joiner > 0) {
      joiner  +=  2;
      sub      =  sub.substr(0, joiner);
      if (sub.substr(15).indexOf("{{") < 0) {
         var tms  =  [  ["[Pp]ersonendaten *\\| *\n? *([A-Z])",
                         "Personendaten\n|$1",
                         ""],
                        ["\\| *NAME *=",
                         "|NAME=",
                         "i"],
                        ["&nbsp;",
                         " ",
                         "g"],
                        [" *\\| *([A-Z]+) *= *([^ \n]?.*[^ \n]) *\n",
                         "|$1=$2\n",
                         "gi"],
                        ["([^\n ]) *\\| *([A-Z]{4,16}) *=",
                         "$1\n|$2=",
                         "gi"],
                        ["\n([^|}])",
                         " $1",
                         "g"],
                        ["([^ \n]) +\n",
                         "$1\n",
                         "g"],
                        ["([^ 0-9\n][^ 0-9\n]),([^ 0-9\n][^ 0-9\n])",
                         "$1, $2",
                         "g"],
                        [" +,",
                         ",",
                         "g"],
                        [",,",
                         ",",
                         "g"],
["(\n\\|NAME=.+\n)\\|KURZBESCHREIBUNG=",
 "$1|ALTERNATIVNAMEN=\n|KURZBESCHREIBUNG=",
 "i"],
["\n\\|ALTERNATIVNAME=",
 "\n|ALTERNATIVNAMEN=",
 "i"],
["(\\|ALTERNATIVNAMEN="
 + ".+[^ \n]) +-+ *\n",
 "$1\n",
 ""],
["(\n\\|ALTERNATIVNAMEN=.*)\\bPseud\\. *",
 "$1Pseudonym ",
 "i"],
["(\n\\|ALTERNATIVNAMEN=.*)\\bPseud\\. *",
 "$1Pseudonym ",
 "i"],
["(\n\\|ALTERNATIVNAMEN=.*)\\bPseud\\. *",
 "$1Pseudonym ",
 "i"],
["(\n\\|ALTERNATIVNAMEN=.*)\\b"
 + "((bürgerlicher|eigentlicher|richtiger) Name|"
 +  "(bürgerlich|eigentlich))\\b",
 "$1wirklicher Name",
 "i"],
["(\n\\|ALTERNATIVNAMEN=.*)\\b"
 + "((bürgerlicher|eigentlicher|richtiger) Name|"
 +  "(bürgerlich|eigentlich))\\b",
 "$1wirklicher Name",
 "i"],
["(\n\\|ALTERNATIVNAMEN=.*)\\bvoller Name\\b",
 "$1vollständiger Name",
 "i"],
["(\n\\|ALTERNATIVNAMEN=.*)\\bvoller Name\\b",
 "$1vollständiger Name",
 "i"],
["(\\|(ALTERNATIVNAMEN|KURZBESCHREIBUNG)="
 + ".+[^ \n]) *[" + mw.libs.WikiSyntaxTextMod.str.sticks + ",:`]+ *\n",
 "$1\n",
 ""],
["(\\|(ALTERNATIVNAMEN|KURZBESCHREIBUNG)="
 + "[^&\n]+.[^ \n]) *;([^ \n].+) *\n",
 "$1; $2\n",
 ""],
["(\\|(ALTERNATIVNAMEN|KURZBESCHREIBUNG)="
 + ".*) +\\)",
 "$1)",
 ""],
["(\\|(ALTERNATIVNAMEN|KURZBESCHREIBUNG)="
 + ".*) +\\)",
 "$1)",
 ""],
["(\\|(ALTERNATIVNAMEN|KURZBESCHREIBUNG)="
 + ".*) +\\)",
 "$1)",
 ""],
["(\\|KURZBESCHREIBUNG=.*\\b[12]?[0-9]?[0-9][0-9])["
 + mw.libs.WikiSyntaxTextMod.str.sticks
 + "]([12]?[0-9]?[0-9][0-9])\\b",
 "$1" + String.fromCharCode(8211) + "$2",
 ""],
["(\\|KURZBESCHREIBUNG=.*)('''?)(.+)\\2",
 "$1$3",
 ""],
["(\\|KURZBESCHREIBUNG=.*[^ \n])\\(",
 "$1 (",
 ""],
["(\\|KURZBESCHREIBUNG="
 + ".+[^ \n][^ \n][^ \n][^ IVX\n]) *\\.+ *\n",
 "$1\n",
 ""],
["(\\|KURZBESCHREIBUNG="
 + ".+[^ \n]) *-+ *\n",
 "$1\n",
 ""],
//////////////////
["(\\|(GEBURTS|STERBE)DATUM=.+)\\]\\] *\\[\\[",
 "$1 ",
 "gi"],
["(\\|(GEBURTS|STERBE)DATUM=.*)\\[\\[",
 "$1",
 "gi"],
["(\\|(GEBURTS|STERBE)DATUM=.+)\\]\\]",
 "$1",
 "gi"],
["(\n\\|GEBURTSORT=.*)\n?\\}\\}",
 "$1\n|STERBEDATUM=\n|STERBEORT=\n}}",
 "i"],
["(\\|(GEBURTS|STERBE)DATUM=.*)"
 + "\\b(((ungefähr|gegen|etwa|circa) +)|((ca.|~) *))"
 + "([12]?[0-9]?[0-9][0-9])\\b",
 "$1um $8",
 "gi"],
["(\\|(GEBURTS|STERBE)DATUM=.*)"
 + "\\b((später als|frühestens|nicht vor) +)"
 + "([12]?[0-9]?[0-9][0-9])\\b",
 "$1nach $6",
 "gi"],
["(\\|(GEBURTS|STERBE)DATUM=.*)"
 + "\\b([12]?[0-9]?[0-9][0-9]) \\(oder später\\)",
 "$1nach $3",
 "gi"],
["(\\|GEBURTSDATUM=)("
 + mw.libs.WikiSyntaxTextMod.l10n.lang.de.s.re.dom
 + ") \\(Tauf(e|datum)\\)\n",
 "$1getauft $2",
 "gi"],
["(\\|STERBEDATUM=.*)\\b((verschollen|vermi(ss|ß)t) +)"
 + "([12]?[0-9]?[0-9][0-9])\\b",
 "$1nach $5",
 "gi"],
["(\\|STERBEDATUM=)("
 + mw.libs.WikiSyntaxTextMod.l10n.lang.de.s.re.dom
 + ") \\(Beerdigung|Begräbnis\\)\n",
 "$1begraben $2",
 "gi"],
["(\\|STERBEDATUM=)beerdigt ("
 + mw.libs.WikiSyntaxTextMod.l10n.lang.de.s.re.dom
 + ")\n",
 "$1begraben $2",
 "gi"],
                        ["  +",
                         " ",
                         "g"]
                      ];
         var got;
         var re   =  new RegExp(
        "(\\{\\{[^\0]+\\|KURZBESCHREIBUNG=)(.*\\[\\[.+)(\n[^\0]+\\}\\})",
                                "");
         var stm  =  strTrslMap_build(tms, false);
         var s    =  strTrslMap_replace(sub, stm);
         if (s.charCodeAt(s.length-3) !== 10) {   // \n
            s  =  s.substr(0, s.length-2) + "\n}}";
         }   // "}}" auf neue Zeile
         got  =  re.exec(s);
         if (got !== null) {
            var scan  =  wikisyntax_link_remove(got[2]);
            if (scan) {
               s  =  got[1] + scan + got[3];
            }
         }   // KURZBESCHREIBUNG
         if (s === sub) {
            sub  =  false;
         } else {
            sub  =  s;
         }   // changes?
      } else {
         sub  =  false;
      }   // keine Vorlage in dieser Vorlage
   } else {
      sub  =  "\n<!-- Vorlage 'Personendaten' nicht beendet?? -->\n";
      if (access[1] + 1  <  this.getCount()) {
         var nodex  =  this.getNode(access[1]+1);
         joiner  =  0;
         if (! nodex.learn) {
            sub  =  "\n<!-- unzulässiges Syntaxelement"
                    + " in Vorlage 'Personendaten' -->";
         }
      }
      r  =  ["Personendaten ... ", sub.length];
   }   // Vorlage kaputt?
   if (sub) {
      if (keep > 0) {
         sub      =  scope.substr(0, keep)  +  sub;
         joiner  +=  keep;
      }
      if (scope.length > joiner) {
         var suffix  =  stringUtl_trimL(scope.substr(joiner));
         if (! suffix.charCodeAt(0) !== 10) {
            suffix  =  "\n" + suffix;
         }
         sub  =  sub + suffix;
      }   // tail
      node.set(sub);
   }   // modification
   return r;
}   // wikisyntax_dewiki_Personendaten



function wikisyntax_dewiki_Personendaten_Datum(assignment) {
   // Prüfe und berichtige ggf. *DATUM  in {{Personendaten}}
   //    assignment  -- "|*DATUM=...\n"
   // Returns assignment, either modified or unchanged
   // Uses:
   //    >  Wikisyntax_Deutsch_TagMonatJahr_Links
   //    >  Wikisyntax_Deutsch_TagMonat
   // 2011-07-23 [email protected]
   var rea  =  "\\|(GEBURTSDATUM|STERBEDATUM)= *";
   var red  =  "(vor |nach |zwischen |getauft |begraben |unsicher: )? *";
   var re   =  new RegExp(rea + red + "([^ \n].*[^ \n]) *\n", "i");
   var sub  =  assignment;
   var got  =  assignment.match(re);
   if (got !== null) {
      sub  =  "|" + got[1].toUpperCase() + "=";
      if (got[2] !== null) {
         sub  =  sub + got[2];
      }   // 2
      if (got.length === 4) {
         var s    =  got[3];
         var tms  =  [  [Wikisyntax_Deutsch_TagMonatJahr_Links,
                         "$2$3. $4 $5",
                         "g"],   // Datum entlinken
                        [Wikisyntax_Deutsch_TagMonat + "\\b",
                         "$2$3. $4",
                         "g"]   // WP:DK
                      ];
         var stm  =  strTrslMap_build(tms, false);
         s  =  strTrslMap_replace(s, stm);
      }   // 4
      sub  =  sub + "\n";
      if (sub === assignment) {
         sub  =  assignment;
      }   // unchanged; discard allocated string
   }   // got
   return  sub;
}   // wikisyntax_dewiki_Personendaten_Datum



// Start on import: callback to waiting ...
with (mw.libs.WikiSyntaxTextMod) {
   if (typeof(main.wait) === "function") {
      mw.libs.WikiSyntaxTextMod.main.wait("L", l10n.vsn);
   } else if (typeof(WikisyntaxTextMod_Wait) === "function") {
      WikisyntaxTextMod_Wait("L", l10n.vsn);
   }
   delete l10n.vsn;
}   // with WSTM



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

/// EOF </nowiki>   WikiSyntaxTextMod/?L.js