<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://safernicotine.wiki/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Template%3AStr_left%2Fdoc</id>
	<title>Template:Str left/doc - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://safernicotine.wiki/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Template%3AStr_left%2Fdoc"/>
	<link rel="alternate" type="text/html" href="https://safernicotine.wiki/mediawiki/index.php?title=Template:Str_left/doc&amp;action=history"/>
	<updated>2026-04-07T21:02:08Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://safernicotine.wiki/mediawiki/index.php?title=Template:Str_left/doc&amp;diff=40715&amp;oldid=prev</id>
		<title>imported&gt;GKFX: /* Examples of limitations */ correct documentation</title>
		<link rel="alternate" type="text/html" href="https://safernicotine.wiki/mediawiki/index.php?title=Template:Str_left/doc&amp;diff=40715&amp;oldid=prev"/>
		<updated>2022-01-23T11:20:41Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Examples of limitations: &lt;/span&gt; correct documentation&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Documentation subpage}}&lt;br /&gt;
&amp;lt;!-- Categories go where indicated at the bottom of this page, please; interwikis go to Wikidata (see also: [[Wikipedia:Wikidata]]). --&amp;gt;&lt;br /&gt;
{{used in system}}&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
: {{Template link expanded|Str left|&amp;lt;string&amp;gt;|&amp;lt;count&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Gives the resultant &amp;lt;count&amp;gt; of characters &amp;#039;&amp;#039;creating a substring of characters&amp;#039;&amp;#039; from the start of the [[w:Trim (programming)|trimmed]] string (i.e. the substring returned will have length &amp;lt;count&amp;gt;, exclusive of leading whitespace characters, which are trimmed first before &amp;lt;count&amp;gt; is invoked).&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;count&amp;gt; is invalid, empty or zero, an empty string is returned. If undefined, it defaults to 1.&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
* Length to 500: The maximum substring stops at 500 long, yet gives no error message. Only 500 characters can be extracted even if the &amp;lt;string&amp;gt; is longer.&lt;br /&gt;
* Inexpensive (uses no other templates).&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
:* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt; {{BASEPAGENAME}} | Lorem ipsum dolor sit amet | 10 &amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rarr; {{ {{BASEPAGENAME}} | Lorem ipsum dolor sit amet | 10 }}&lt;br /&gt;
:*&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Str left| &amp;amp;nbsp; Lorem ipsum dolor sit amet | 4 }}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rarr; {{Str left|    Lorem ipsum dolor sit amet | 4 }}, (note leading spaces trimmed!)&lt;br /&gt;
:* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt; {{BASEPAGENAME}} | Lorem ipsum dolor sit amet | 1 &amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rarr; {{ {{BASEPAGENAME}} | Lorem ipsum dolor sit amet | 1 }}&lt;br /&gt;
:* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt; {{BASEPAGENAME}} | Lorem ipsum dolor sit amet | 0 &amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rarr; {{ {{BASEPAGENAME}} | Lorem ipsum dolor sit amet | 0 }}&lt;br /&gt;
:* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt; {{BASEPAGENAME}} | Lorem ipsum dolor sit amet | &amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rarr; {{ {{BASEPAGENAME}} | Lorem ipsum dolor sit amet | }}&lt;br /&gt;
:* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt; {{BASEPAGENAME}} | Lorem ipsum dolor sit amet &amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rarr; {{ {{BASEPAGENAME}} | Lorem ipsum dolor sit amet }}&lt;br /&gt;
:* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt; {{BASEPAGENAME}} | Lorem ipsum dolor sit amet | 40 &amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rarr; {{ {{BASEPAGENAME}} | Lorem ipsum dolor sit amet | 40 }}&lt;br /&gt;
:* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt; {{BASEPAGENAME}} | àçé | 2 &amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rarr; {{ {{BASEPAGENAME}} | àçé | 2 }}&lt;br /&gt;
:*: This example is demonstrating the safety of this template with the UTF-8 encoding (this should work now) :&lt;br /&gt;
&lt;br /&gt;
===Examples of limitations===&lt;br /&gt;
All the limitations of use for this template and shown below are caused by the current implementation of the &amp;lt;nowiki&amp;gt;{{padleft:}}&amp;lt;/nowiki&amp;gt; parser function used in this template, which does not filter its third parameter containing the characters used for padding a string to the specified length (it currently counts incorrectly the characters to extract from the padding string, and incorrectly measures its effective length; in addition this parameter is limited to 500 bytes).&lt;br /&gt;
&lt;br /&gt;
The following examples are demonstrating that this template does not interpret character entity references as the character they represent. It treats them as multiple characters and can leave them truncated.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt; {{BASEPAGENAME}} | a&amp;amp;amp;nbsp;c | 3 &amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rarr; {{ {{BASEPAGENAME}} | a&amp;amp;nbsp;c | 3 }}&lt;br /&gt;
*: The output &amp;quot;a&amp;amp;nbsp;c&amp;quot; may have been intended, but the named character entity was truncated, leaving no length available for the final &amp;quot;c&amp;quot;.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt; {{BASEPAGENAME}} | a&amp;amp;amp;#66;c | 3 &amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rarr; {{ {{BASEPAGENAME}} | a&amp;amp;#66;c | 3 }}&lt;br /&gt;
*: This should display &amp;quot;abc&amp;quot;, but the named character entity was truncated, leaving no length available for the final &amp;quot;c&amp;quot;.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt; {{BASEPAGENAME}} | a c | 3 &amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rarr; {{ {{BASEPAGENAME}} | a c | 3 }}&lt;br /&gt;
*: The result is correct, as expected.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt; {{BASEPAGENAME}} | a&amp;amp;amp;#32;c | 3 &amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rarr; {{ {{BASEPAGENAME}} | a&amp;amp;#32;c | 3 }}&lt;br /&gt;
*: This last example should be equivalent to the previous one, but it is not.&lt;br /&gt;
&lt;br /&gt;
This template will erase nowiki tags without counting their length:&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt; {{BASEPAGENAME}} | a&amp;amp;lt;nowiki/&amp;amp;gt;bcd | 3 &amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rarr; {{ {{BASEPAGENAME}} | a&amp;lt;nowiki/&amp;gt;bcd | 3 }}&lt;br /&gt;
*: Returns three characters as expected&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt; {{BASEPAGENAME}} | a&amp;amp;lt;nowiki&amp;gt;E&amp;amp;lt;/nowiki&amp;amp;gt;bcd | 3 &amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rarr; {{ {{BASEPAGENAME}} | a&amp;lt;nowiki&amp;gt;E&amp;lt;/nowiki&amp;gt;bcd | 3 }}&lt;br /&gt;
*: Returns three characters, but not aEb as might have been expected.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt; {{BASEPAGENAME}} | a&amp;amp;lt;nowiki/&amp;amp;gt;bc | 10 &amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rarr; {{ {{BASEPAGENAME}} | a&amp;lt;nowiki/&amp;gt;bc | 10 }}&lt;br /&gt;
*: Returns 10 characters as expected.&lt;br /&gt;
&lt;br /&gt;
HTML comments, and the &amp;quot;noinclude&amp;quot;, &amp;quot;includeonly&amp;quot; and &amp;quot;onlyinclude&amp;quot; wiki markup tags are also ignored, because they are preprocessed in template parameters, before including it and substituting parameters:&lt;br /&gt;
:* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt; {{BASEPAGENAME}} | a&amp;amp;lt;noinclude/&amp;amp;gt;bc | 3 &amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rarr; {{ {{BASEPAGENAME}} | a&amp;lt;noinclude/&amp;gt;bc | 3 }}&lt;br /&gt;
:* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt; {{BASEPAGENAME}} | a&amp;amp;lt;!-- comment --&amp;amp;gt;bc | 3 &amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rarr; {{ {{BASEPAGENAME}} | a&amp;lt;!-- comment --&amp;gt;bc | 3 }}&lt;br /&gt;
&lt;br /&gt;
Note also that the specified length will cause the input string to be padded by repeating it, if this length is larger than the input string length:&lt;br /&gt;
:* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt; {{BASEPAGENAME}} | Abc. | 10 &amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rarr; {{ {{BASEPAGENAME}} | Abc. | 10 }}&lt;br /&gt;
&lt;br /&gt;
== Template data ==&lt;br /&gt;
{{TemplateData header}}&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
        &amp;quot;description&amp;quot;: &amp;quot;A template to give the &amp;lt;count&amp;gt; substring of characters from the start of the trimmed string &amp;quot;,&lt;br /&gt;
        &amp;quot;params&amp;quot;: {&lt;br /&gt;
                &amp;quot;1&amp;quot;: {&lt;br /&gt;
                        &amp;quot;label&amp;quot;: &amp;quot;String&amp;quot;,&lt;br /&gt;
                        &amp;quot;description&amp;quot;: &amp;quot;The string to be trimmed and counted&amp;quot;,&lt;br /&gt;
                        &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
                        &amp;quot;required&amp;quot;: true&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;2&amp;quot;: {&lt;br /&gt;
                        &amp;quot;label&amp;quot;: &amp;quot;Count&amp;quot;,&lt;br /&gt;
                        &amp;quot;description&amp;quot;: &amp;quot;Gives the &amp;lt;count&amp;gt; substring of characters from the start of the trimmed string&amp;quot;,&lt;br /&gt;
                        &amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
                        &amp;quot;required&amp;quot;: true&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Bugzilla:22555]] (historical; need for correcting padleft/padright functions and to provide better string-handling parser functions)&lt;br /&gt;
&lt;br /&gt;
{{String-handling templates |sub}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{Sandbox other||&lt;br /&gt;
&amp;lt;!-- Categories go below this line, please; interwikis go to Wikidata, thank you! --&amp;gt;&lt;br /&gt;
[[Category:String manipulation templates]]&lt;br /&gt;
&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>imported&gt;GKFX</name></author>
	</entry>
</feed>