Jump to content

Template:Template usage: Difference between revisions

From Fifth Empire Wiki
Undid revision 671498875 by Cpiral (talk)
version 3 rewrite: simpler code, more parameter flexibility
Line 1: Line 1:
<!-- Curly brackets matching should ignore [^}], \{{!}}; insource:/\{} is OK.
<!-- Curly brackets matching should ignore [^}], \{{!}}; insource:/\{} is OK.
--><onlyinclude>{{#if:
--><onlyinclude><onlyinclude><!--
{{{pattern|}}}
Make a search link.
| <!-- PATTERN true -->
-->{{plain link
  {{#if:
  |url =
  {{{prefix|}}}
    {{fullurl:Special:Search|search=<!--
  | <!-- PREFIX AND PATTERN true, Plainlinks #1
        -->{{urlencode:<!-- encodes spaces, so let's avoid unecessary spaces.


    -->{{plain link | url = {{fullurl:Special:Search|search={{urlencode:
          Build this query:
    hastemplate:"{{{1|{{{template|Template usage}}}}}}" <!-- hastemplate, an all-important filter.
          hastemplate: template insource:/\{\{ *[Tt]emplate *\| *[^}]*pattern/
    A filter is always recommended for what this template is built for,
    an insource:/regexp pattern/.  But there's always the hastemplate part,
    even if no insource:/regexp/ part.


    --> insource:/\{<!-- 1st a space. Start /{regexp/ with curly bracket.
          Add the ever present "hastemplate:" filter and a space
    You saw the starting / of the /regexp/.
          -->hastemplate:"{{{template|{{{1|Template usage}}}}}}" <!--  


    -->[{{#invoke:String|sub<!-- first [ of "[Xx]" <!-- building [Xx]
          Add the "insource:/\{\{ *"
    Now save from an expensive, /regexp/i, case-insensitive search
          -->insource:/\{\{ *<!--
    by outputing [Xx] where x is first letter of template name. -->
    |{{uc:{{{1|{{{template|val}}}}}}}}|1|1}}{{#invoke:String|sub
    |{{lc:{{{1|{{{template|val}}}}}}}}|1|1}}]{{#invoke:String|sub <!-- built [Xx] -->
    |{{{1|{{{template|val}}}}}}|2}}\{{!}}<!-- Template name and its pipe: \|, i.e. {{!}}
    Trickiest part: [character class] inverted with ^:  [^any char NOT }]


    -->[^}]*<!-- Zero or more (*) All this shows in bold in the search results
          Add the "[Tt]".
   
          Save from an expensive, /regexp/i.
    -->{{{pattern}}}/<!--User part: last part of regexp, shows in bold too.
          -->[{{#invoke:String|sub<!-- saw first [ of a "[Tt]"  -->
    You saw the ending / of the /regexp/.
          |{{uc:{{{template|{{{1|Template usage}}}}}}}}|1|1}}{{#invoke:String|sub
    You see the the space before prefix next:
          |{{lc:{{{template|{{{1|Template usage}}}}}}}}|1|1}}]{{#invoke:String|sub
          <!--                                               ^
                                                    You saw ].  


    --> prefix:{{#switch:{{{prefix}}}
          Add "emplate", the rest of the template name, starting from char 2.-->
        |#default = {{{prefix}}}
          |{{{template|{{{1|Template usage}}}}}}|2}}<!--
        |n = {{NAMESPACE}}
 
        |0|: = :
          Add the tricky regexp part.
        |1 = {{ns:1}}:
          --> *\{{!}} *[^}]*<!-- optional space " *" around initial pipe
        |2 = {{ns:2}}:
          initial pipe is \|, i.e. \{{!}}
        |3 = {{ns:3}}:
          Trickiest part: [character class] inverted with ^: [^any char NOT }]
        |4 = {{ns:4}}:
          Zero or more (*) of those "non-curly brackets".
        |5 = {{ns:5}}:
          All this stuff always matches, shows in bold in the search results
        |6 = {{ns:6}}:
        |7 = {{ns:7}}:
        |8 = {{ns:8}}:
        |9 = {{ns:9}}:
        |10 = {{ns:10}}:
        |11 = {{ns:11}}:
        |12 = {{ns:12}}:
        |13 = {{ns:13}}:
        |14 = {{ns:14}}:
        |15 = {{ns:15}}:
        |100 = {{ns:100}}:
        |101 = {{ns:101}}:
        |108 = {{ns:108}}:
        |109 = {{ns:109}}:
        |118 = {{ns:118}}:
        |119 = {{ns:119}}:
      }}
    }}<!-- saw end urlencode -->
    }}<!-- end fullurl  of plainlinks #1, but name it now
    For show, appearance of link looks just like the query: -->


    | name = {{{2|{{{label|{{#invoke:String|replace
          Add the users regexp pattern part and closing /.
    |{{#invoke:String|replace
          -->{{{pattern|{{{2|''regexp''}}}}}}/<!--
    |hastemplate:"{{{1|{{{template|Template usage}}}}}}"<!--
    --> insource:<kbd>/\{<!--
    -->[{{#invoke:String|sub
    |{{uc:{{{1|{{{template|val}}}}}}}}|1|1}}{{#invoke:String|sub
    |{{lc:{{{1|{{{template|val}}}}}}}}|1|1}}]{{#invoke:String|sub
    |{{{1|{{{template|val}}}}}}|2}}\{{!}}<!--
    -->[^}]*<!--
    -->{{{pattern}}}/</kbd><!--  Namespace numbers need upkeep
    --> prefix:{{#switch:{{{prefix}}}
        |#default = {{{prefix}}}
        |n = {{NAMESPACE}}
        |0|: = &#58;
        |1 = {{ns:1}}:
        |2 = {{ns:2}}:
        |3 = {{ns:3}}:
        |4 = {{ns:4}}:
        |5 = {{ns:5}}:
        |6 = {{ns:6}}:
        |7 = {{ns:7}}:
        |8 = {{ns:8}}:
        |9 = {{ns:9}}:
        |10 = {{ns:10}}:
        |11 = {{ns:11}}:
        |12 = {{ns:12}}:
        |13 = {{ns:13}}:
        |14 = {{ns:14}}:
        |15 = {{ns:15}}:
        |100 = {{ns:100}}:
        |101 = {{ns:101}}:
        |108 = {{ns:108}}:
        |109 = {{ns:109}}:
        |118 = {{ns:118}}:
        |119 = {{ns:119}}:
      }}|[|&#91;}}|]|&#93;}}}}}}}}<!-- end {{replace}} {{{label}}} -->
    }}<!-- End of plainlinks #1, true true


  -->| <!-- PREFIX now false, PATTERN still true -->
          Add "prefix:" You see the space before it.
    {{plain link <!-- plainlinks #2 -->
          --> prefix:<!--
      | url =
          -->{{#switch:<!-- add namespace "numbers and letters" recognition -->
        {{fullurl:
             {{{prefix|{{{3|}}}}}}
          Special:Search
            |#default = {{{prefix|{{{3|{{FULLPAGENAME}}}}}}}}
          |search={{urlencode: 
            hastemplate:"{{{1|{{{template|Template usage}}}}}}" insource:/\{<!--
            -->[{{#invoke:String|sub
            |{{uc:{{{1|{{{template|val}}}}}}}}|1|1}}{{#invoke:String|sub
            |{{lc:{{{1|{{{template|val}}}}}}}}|1|1}}]{{#invoke:String|sub
            |{{{1|{{{template|val}}}}}}|2}}\{{!}}<!--  
            -->[^}]*<!--
             -->{{{pattern}}}/<!--
            --> prefix:{{FULLPAGENAME}}
          }}
        }}
      | name = {{#invoke:String|replace
        |{{#invoke:String|replace
        |Test <kbd>/\{[{{#invoke:String|sub
        |{{uc:{{{1|{{{template|val}}}}}}}}|1|1}}{{#invoke:String|sub
        |{{lc:{{{1|{{{template|val}}}}}}}}|1|1}}]{{#invoke:String|sub
        |{{{1|{{{template|val}}}}}}|2}}\{{!}}<!--
        -->[^}]*<!--
        -->{{{pattern}}}/</kbd>|[|&#91;}}|]|&#93;}} on this page.
    }}<!-- end plainlinks #2 -->
  }}<!-- end first nested #if:prefix -->
| <!-- PATTERN false -->
  {{#if: <!-- start second nested #if:prefix -->
  {{{prefix|}}}
  | <!-- PATTERN false PREFIX true -->
    {{plain link <!-- plainlinks #3 -->
      | url =
        {{fullurl:
          Special:Search
          |search={{urlencode: 
            hastemplate:"{{{1|{{{template|Template usage}}}}}}"<!--
            --> prefix:{{#switch:{{{prefix}}}
            |#default = {{{prefix}}}
             |n = {{NAMESPACE}}
             |n = {{NAMESPACE}}
             |0|: = :
             |0|: = :
Line 159: Line 65:
             |118 = {{ns:118}}:
             |118 = {{ns:118}}:
             |119 = {{ns:119}}:
             |119 = {{ns:119}}:
             }}
             |446 = {{ns:446}}:
            |447 = {{ns:447}}:
            |711 = {{ns:711}}:
            |710 = {{ns:710}}:
            |828 = {{ns:828}}:
            |829 = {{ns:829}}:
            |2600 = {{ns:2600}}:
           }}
           }}
        }}<!-- End urlencode. -->
      }}<!-- End fullurl
    url done
    Now for name param of plainlinks.
  Appearance of link looks just like the query, unless labeled.
  So we're rebuilding the query just for show this time. -->
  |name = <!-- for commentary see duplicate above -->
    {{#if:
      {{{label|{{{4|}}}}}}
      |{{{label|{{{4}}}}}}
      |{{#if:
        {{{prefix|{{{3|}}}}}}
        |hastemplate:"{{{template|{{{1|Template usage}}}}}}" <!--
        -->insource:/\{\{ *<!--
        -->&#91;{{#invoke:String|sub<!-- saw first [ of a "[Tt]"  -->
          |{{uc:{{{template|{{{1|Template usage}}}}}}}}|1|1}}{{#invoke:String|sub
          |{{lc:{{{template|{{{1|Template usage}}}}}}}}|1|1}}&#93;{{#invoke:String|sub
          |{{{template|{{{1|Template usage}}}}}}|2}}<!--    ^
        --> *\{{!}} *&#91;^}&#93;*<!-- optional space " *" around initial pipe
        -->{{#invoke:String|replace
          |{{#invoke:String|replace
            |{{{pattern|{{{2|''regexp''}}}}}}<!-- Given pattern
          -->|[|&#91;}}<!-- Replace any/all [ with HTML symbol
        -->|]|&#93;}}/<!-- replace any/all ] with there HTML symbol
        --> prefix:<!--
        -->{{#switch:<!-- add namespace "numbers and letters" recognition -->
          {{{prefix|{{{3|}}}}}}
          |#default = {{{prefix|{{{3|{{FULLPAGENAME}}}}}}}}
          |n = {{NAMESPACE}}
          |0|: = <nowiki />:
          |1 = {{ns:1}}:
          |2 = {{ns:2}}:
          |3 = {{ns:3}}:
          |4 = {{ns:4}}:
          |5 = {{ns:5}}:
          |6 = {{ns:6}}:
          |7 = {{ns:7}}:
          |8 = {{ns:8}}:
          |9 = {{ns:9}}:
          |10 = {{ns:10}}:
          |11 = {{ns:11}}:
          |12 = {{ns:12}}:
          |13 = {{ns:13}}:
          |14 = {{ns:14}}:
          |15 = {{ns:15}}:
          |100 = {{ns:100}}:
          |101 = {{ns:101}}:
          |108 = {{ns:108}}:
          |109 = {{ns:109}}:
          |118 = {{ns:118}}:
          |119 = {{ns:119}}:
          |446 = {{ns:446}}:
          |447 = {{ns:447}}:
          |711 = {{ns:711}}:
          |710 = {{ns:710}}:
          |828 = {{ns:828}}:
          |829 = {{ns:829}}:
          |2600 = {{ns:2600}}:
         }}
         }}
      | name =
      {{{2|{{{label|{{#invoke:String|replace
       |{{#invoke:String|replace
       |{{#invoke:String|replace
      |hastemplate:"{{{1|{{{template|Template usage}}}}}}"<!--
          |{{#invoke:String|replace
      --> prefix:{{#switch:{{{prefix}}}
            |'''Testing''' <kbd>{{{pattern|{{{2}}}}}}</kbd> '''on this page'''<!--
      |#default = {{{prefix}}}
          -->|[|&#91;}}<!-- Replace any/all [ with HTML symbol
      |n = {{NAMESPACE}}
        -->|]|&#93;}}<!-- replace any/all ] with there HTML symbol-->
      |0|: = &#58;
       }}
      |1 = {{ns:1}}:
  }}
      |2 = {{ns:2}}:
}}<!-- End of plainlinks
      |3 = {{ns:3}}:
--></onlyinclude><noinclude>{{Documentation}}</noinclude>
      |4 = {{ns:4}}:
      |5 = {{ns:5}}:
      |6 = {{ns:6}}:
      |7 = {{ns:7}}:
      |8 = {{ns:8}}:
      |9 = {{ns:9}}:
      |10 = {{ns:10}}:
      |11 = {{ns:11}}:
      |12 = {{ns:12}}:
      |13 = {{ns:13}}:
      |14 = {{ns:14}}:
      |15 = {{ns:15}}:
      |100 = {{ns:100}}:
      |101 = {{ns:101}}:
      |108 = {{ns:108}}:
      |109 = {{ns:109}}:
      |118 = {{ns:118}}:
      |119 = {{ns:119}}:
      }}|[|&#91;}}|]|&#93;}}}}}}}}<!-- end {{replace}} {{{label}}} -->
    }} <!-- end plainlinks #3
  -->| <!-- PREFIX now false, PATTERN still false -->
    {{plain link <!-- plainlinks #4 -->
       | url =
        {{fullurl:
          Special:Search
          |search={{urlencode: 
            hastemplate:"{{{1|{{{template|Template usage}}}}}}"
          }}
        }}
      | name =  {{{2|{{{label|{{#invoke:String|replace
      |{{#invoke:String|replace
      |hastemplate:"{{{1|{{{template|Template usage}}}}}}"|[|&#91;}}|]|&#93;}}}}}}}}
    }} <!-- end plainlinks #4 -->
  }} <!-- end of second nested #if:prefix -->
}}</onlyinclude><!-- end of first, opening #if:pattern -->
<noinclude>{{Documentation}}</noinclude>

Revision as of 19:41, 16 July 2015

Testing {{{2}}} on this page