Template:Tlc/doc
This is a documentation subpage for
Template documentation[edit]
Template sandbox and testcases for TEMPLATE_NAME[edit]Overview[edit]This page provides a clean workflow to safely edit and validate TEMPLATE_NAME:
Use this page to:
Quick links[edit]
How to test[edit]1. Edit the sandbox at Template:TEMPLATE_NAME/sandbox. 2. Open this test page and click “Show preview” to render the sandbox with inputs below. 3. Verify each testcase: Does the “Actual output” match the “Expected output”? 4. If all pass, consider copying sandbox to live using an edit summary like: “Sync from /sandbox: passes all /testcases as of YYYY-MM-DD.” Previewing tips[edit]
Test harness[edit]The following sections render the sandbox template against curated inputs. Each testcase shows:
Testcase A: Minimal invocation[edit]Parameters: {{TEMPLATE_NAME}} Expected output: [Minimal successful output with defaults: e.g., a neutral message or basic box] Actual output (sandbox): Character and language test sandbox This sandbox is used to test how Template:TEMPLATE NAME behaves with special characters (such as Greek letters) and language-specific spans. Basic examples[edit]
Within the template[edit]Below are example calls of the template using these characters as parameters. {{TEMPLATE NAME | title = Greek test: α γ | summary = Demonstrating Greek letters: α, β, γ, and entities like γ. | attr1 = Direct Greek: α β γ δ | attr2 = Entity Greek: α β γ δ | attr3 = German label: <span lang="de">A</span>, English label: A }} Preview the page to check if:
Notes[edit]
Testcase B: Common parameters[edit]Parameters: {{TEMPLATE_NAME | param1 = Alpha | param2 = Beta | flag = yes }} Expected output: [Example: shows "Alpha" and "Beta" in designated slots; flag toggles enhanced styling] Actual output (sandbox): Character and language test sandbox This sandbox is used to test how Template:TEMPLATE NAME behaves with special characters (such as Greek letters) and language-specific spans. Basic examples[edit]
Within the template[edit]Below are example calls of the template using these characters as parameters. {{TEMPLATE NAME | title = Greek test: α γ | summary = Demonstrating Greek letters: α, β, γ, and entities like γ. | attr1 = Direct Greek: α β γ δ | attr2 = Entity Greek: α β γ δ | attr3 = German label: <span lang="de">A</span>, English label: A }} Preview the page to check if:
Notes[edit]
Testcase C: Edge values and escaping[edit]Parameters: {{TEMPLATE_NAME | param1 = [[Linked target|Visible text]] | param2 = {{subst:CURRENTTIMESTAMP}} | raw = <code><span class="x">escaped</span></code> }} Expected output: [Links render correctly; timestamp subst is literal in expected; raw shows escaped markup] Actual output (sandbox): Character and language test sandbox This sandbox is used to test how Template:TEMPLATE NAME behaves with special characters (such as Greek letters) and language-specific spans. Basic examples[edit]
Within the template[edit]Below are example calls of the template using these characters as parameters. {{TEMPLATE NAME | title = Greek test: α γ | summary = Demonstrating Greek letters: α, β, γ, and entities like γ. | attr1 = Direct Greek: α β γ δ | attr2 = Entity Greek: α β γ δ | attr3 = German label: <span lang="de">A</span>, English label: A }} Preview the page to check if:
Notes[edit]
Testcase D: Internationalization (i18n)[edit]Parameters: {{TEMPLATE_NAME | lang = ja | text = こんにちは世界 }} Expected output: [Text displays correctly for non-ASCII; applies lang attribute or rtl/ltr where applicable] Actual output (sandbox): Character and language test sandbox This sandbox is used to test how Template:TEMPLATE NAME behaves with special characters (such as Greek letters) and language-specific spans. Basic examples[edit]
Within the template[edit]Below are example calls of the template using these characters as parameters. {{TEMPLATE NAME | title = Greek test: α γ | summary = Demonstrating Greek letters: α, β, γ, and entities like γ. | attr1 = Direct Greek: α β γ δ | attr2 = Entity Greek: α β γ δ | attr3 = German label: <span lang="de">A</span>, English label: A }} Preview the page to check if:
Notes[edit]
Testcase E: Error handling[edit]Parameters: {{TEMPLATE_NAME | param1 = | required = <!-- intentionally omitted --> }} Expected output: [Shows a gentle error or maintenance category; does not break page layout] Actual output (sandbox): Character and language test sandbox This sandbox is used to test how Template:TEMPLATE NAME behaves with special characters (such as Greek letters) and language-specific spans. Basic examples[edit]
Within the template[edit]Below are example calls of the template using these characters as parameters. {{TEMPLATE NAME | title = Greek test: α γ | summary = Demonstrating Greek letters: α, β, γ, and entities like γ. | attr1 = Direct Greek: α β γ δ | attr2 = Entity Greek: α β γ δ | attr3 = German label: <span lang="de">A</span>, English label: A }} Preview the page to check if:
Notes[edit]
Maintenance[edit]
Categories[edit]Copy-paste skeletons[edit]Below are ready-to-use skeletons for the sandbox and testcases subpages. Skeleton: Template:TEMPLATE_NAME/sandbox[edit]<!-- Sandbox for TEMPLATE_NAME --> <!-- Copy the entire template source here; edit safely. --> {{#if:{{{required|}}} | <!-- normal output --> <div class="tmpl"> <b>{{{param1|}}}</b> · <i>{{{param2|}}}</i> {{#if:{{{flag|}}}|<span class="flag">✓</span>|}} {{#if:{{{raw|}}}|<span class="raw">{{{raw}}}</span>|}} </div> | <!-- error / missing required --> <span class="error">TEMPLATE_NAME: missing required parameter</span> [[Category:Pages with TEMPLATE_NAME errors]] }} Skeleton: Template:TEMPLATE_NAME/testcases[edit]<!-- Testcases for TEMPLATE_NAME; render against /sandbox --> ; Minimal : {{TEMPLATE_NAME/sandbox}} ; Common params : {{TEMPLATE_NAME/sandbox | param1 = Alpha | param2 = Beta | flag = yes }} ; Edge and escaping : {{TEMPLATE_NAME/sandbox | param1 = [[Linked target|Visible text]] | param2 = 20250101T000000Z | raw = <code><span class="x">escaped</span></code> }} ; I18n : {{TEMPLATE_NAME/sandbox | lang = ja | text = こんにちは世界 }} ; Error handling : {{TEMPLATE_NAME/sandbox | required = }} Review checklist[edit]
Template:Terminate sentence ensures a sentence ends with a specified terminator (default: a period). It avoids adding duplicate terminators and can optionally trim trailing spaces. It attempts to ignore trailing closing quotes or brackets when deciding whether a terminator is already present. Usage[edit]Basic: {{Terminate sentence|This is a sentence}}
→ This is a sentence.
Named parameters: {{Terminate sentence
|text=He said "Hello"
|term=.
}}
→ He said "Hello".
Custom terminator: {{Terminate sentence|text=Warning|term=!}}
→ Warning!
Avoid duplicate terminator: {{Terminate sentence|text=Already done.|term=.}}
→ Already done.
Trim trailing spaces: {{Terminate sentence|text=Ends with space |trim=yes}}
→ Ends with space.
Skip processing: {{Terminate sentence|text=No changes here|skip=yes}}
→ No changes here
Append a note: {{Terminate sentence|text=Complete|note=(source: 2025)}}
→ Complete. (source: 2025)
Parameters[edit]
Behavior details[edit]
Examples[edit]
{{Terminate sentence|text=He whispered "hush"|term=.}}
→ He whispered "hush".
{{Terminate sentence|text=Complete (verified)|term=.}}
→ Complete (verified).
{{Terminate sentence|text=Alert|term=!}}
→ Alert!
{{Terminate sentence|text=Wait...|term=.|allowdup=yes}}
→ Wait.... Best practices[edit]
Lua-powered variant (optional)[edit]For more robust detection (including multilingual quotes and punctuation), create -- Module:TerminateUtil
local M = {}
local closing = {
[")"] = true, ["]"] = true, ["}"] = true,
['"'] = true, ["'"] = true, ["”"] = true, ["’"] = true, ["»"] = true, ["›"] = true
}
local function trimRight(s)
return (s:gsub("%s+$",""))
end
function M.lastVisibleChar(args)
local s = args.s or ""
s = trimRight(s)
local i = #s
while i > 0 do
local c = s:sub(i,i)
if closing[c] then
i = i - 1
else
return c
end
end
return ""
end
return M
Then update the template to call: {{#invoke:TerminateUtil|lastVisibleChar|s=text}}
This improves detection for closing quotes and brackets. See also[edit]It may contain usage information, categories and other content that is not part of the original template page. |
This page provides the full documentation for {{tlc}}, {{tld}}, {{tlf}}.
Purpose and naming
[edit]When a template name with braces is to be shown in documentation, the braces have to be escaped in some way so it doesn't become an actual call to the template. Instead of using <nowiki></nowiki> tags you can write it more simply and concisely by using the {{tlc}}, {{tld}}, or {{tlf}} templates.
These templates work similarly to {{tl}} and {{tlx}}, but don't make the template name into a link. When writing documentation you might want to avoid a lot of unnecessary links, since they can decrease readability. So on the first occurrence of a template name use {{tl}} or {{tlx}}, and then use {{tlc}}, {{tld}} or {{tlf}} thereafter.
| Template | Mnemonic | Format differentiation |
|---|---|---|
{{tlc}} |
Template link code | Uses the <code>...</code> tags meant for showing programming code. Essentially the non-linking equivalent of {{tlx}}. |
{{tld}} |
Template link dialup-host | |
{{tlf}} |
Template link format-normal | Uses proportional-spaced font as is normal for regular text rather than a monospace font as typically used with programming code. Essentially the non-linking equivalent of {{tlp}}. |
The three names were based on {{tl}} template link, despite the fact that, unlike the actual {{tl}} template, these three don't include an actual link. The mnemonics for {{tld}} and {{tlf}} were invented after the fact, since the template creator used the single letters still available rather than the preferred {{tlt}} (using <tt>) and {{tln}} (using "normal", non-coded text style) monikers.
Basic operation
[edit]Here is how these templates look. Code is to the left; actual rendering to the right:
{{tlc|name|parameters}}={{name|parameters}}{{tld|name|parameters}}= {{name|parameters}}{{tlf|name|parameters}}= {{name|parameters}}
Use with editprotected templates
[edit]Most Wikipedia users and even editors will have little or no need for use (or knowledge) of these templates. You will find them of more use if you are a writer or documenter of templates. However, editors may be pointed here when attempting to deal with edit requests on pages which have been protected in some way.
Pages which have been protected can't be edited by every user, but would-be editors can request specific changes on the corresponding Discussion page. An editor requesting a change to a semi-protected page, for example, would add the {{editsemiprotected}} template, followed by their request, to the Talk page. The {{editsemiprotected}} template expands to a texty notice which includes the instruction "Replace the {{editsemiprotected}} template with {{tlf|editsemiprotected}} when the request has been accepted or rejected." An empowered editor acting on the request would then change the template per this instruction.
The desired effect is to replace the {{editsemiprotected}} template (with its big, eye-catching box of information) by the name of the template, merely showing that the template had been there, and acted upon. The use of the {{tlf}} template means that the template should appear in a normal, proportional font-face, as in "{{editsemiprotected}}".
Documentation
[edit]Functional details
[edit]- This template takes another template-name and some associated pipe-tricked (numbered) parameters (or 'pass parameters'), and displays them as an 'example demonstration' of how the template-name template could be coded, literally. Its primary use is in instruction and documentation.
- Specifics here???
- Features of
{{tlc}},{{tld}}and{{tlf}}:- They show a template name and up to eight parameters.
- They also show empty parameters. (See examples hereafter.)
- They prevent line wraps in their output.
Usage
[edit]{{Tlc|Template|first_parameter|second|third|fourth|...|eighth}} → {{Template|first_parameter|second|third|fourth|fifth|sixth|seventh|eighth}}
{{Tld|Template|first_parameter|second|third|fourth|...|eighth}} → {{Template|first_parameter|second|third|fourth|fifth|sixth|seventh|eighth}}
{{Tlf|Template|first_parameter|second|third|fourth|...|eighth}} → {{Template|first_parameter|second|third|fourth|fifth|sixth|seventh|eighth}}
Examples
[edit]Note: Wikitables make the <code></code> tags transparent, unfortunately, so the "code colouring" is missing in these examples.
| Code | Result | Comment |
|---|---|---|
{{tlc}} | {{{{{1}}}}} | Shows its own syntax. |
{{tlc|name}} | {{name}} | |
{{tlc|name|one}} | {{name|one}} | |
{{tlc|name|one|two}} | {{name|one|two}} | |
{{tlc|name|a|b|c|d|e|f|g|h|i|j}} | {{name|a|b|c|d|e|f|g|h}} | Shows up to eight parameters. The rest are dropped. |
{{tlc|name|||three|four}} | {{name|||three|four}} | Also shows empty parameters. |
{{tlc|name|||three||}} | {{name|||three||}} | Even shows empty parameters that come in the end. |
{{tlc|name|one=a|two=b}} | {{name}} | The use of equal signs is a problem, but there is a fix; see next row. |
{{tlc|name|one{{=}}a|two{{=}}b}} | {{name|one=a|two=b}} | Use {{=}} in place of an equal sign, so that it gets rendered properly. |
{{tlc|name|{{IPA|/tʃ/}}|two}} | {{tlc|name|/tʃ/|two}} | Nested template calls also cause problems ... |
{{tlc|name|{{tlf|IPA|/tʃ/}}|two}} | {{tlc|name|{{IPA|/tʃ/}}|two}} | ... but there are ways to get around this issue, also. |
{{tlc|name|{{((}}IPA{{!}}/tʃ/{{))}}|two}} | {{tlc|name|{{IPA|/tʃ/}}|two}} | ... another way to do the same thing, using {{((}}, {{!}} and {{))}} to insert literal {{, | and }}, respectively. |
An alternative to using constructs such as {{=}} and {{tlf|...}} to prevent characters from getting interpreted syntactically is to use <code><nowiki>...</nowiki></code>, which will prevent all characters from being interpreted. For example, in place of
{{tlc|name|one{{=}}{{tlf|IPA|/tʃ/}}|two}}
you can use
<code><nowiki>{{name|one={{IPA|/tʃ/}}|two}}</nowiki></code>
Both render as
{{name|one={{IPA|/tʃ/}}|two}}
If a vertical display with parameters on their own lines is desired, this can also be laid out manually in this manner, or more rapidly done with <pre>...</pre>.
Here are the codes to emulate {{tlf}}, {{tld}} and {{tlc}} using <nowiki>:
| Using templates: | Using <nowiki>: | Rendered result: |
|---|---|---|
{{tlf|name|one{{=}}a|two{{=}}b}} |
<nowiki>{{name|one=a|two=b}}</nowiki> |
{{name|one=a|two=b}} |
{{tld|name|one{{=}}a|two{{=}}b}} |
<code><nowiki>{{name|one=a|two=b}}</nowiki></code> |
{{name|one=a|two=b}} |
{{tlc|name|one{{=}}a|two{{=}}b}} |
<code><nowiki>{{name|one=a|two=b}}</nowiki></code> |
{{name|one=a|two=b}} |