Toolserver:User:Luxo
Appearance
This page was moved from the Toolserver wiki.
Toolserver has been replaced by Toolforge. As such, the instructions here may no longer work, but may still be of historical interest.
Please help by updating examples, links, template links, etc. If a page is still relevant, move it to a normal title and leave a redirect.
Hi!
I'm
- Benutzer:Luxo at German Wikipedia (My Homewiki)
- User:Luxo at English Wikipedia
- User:Luxo at Wikimedia:Commons
- Luxo at mediawiki
- ~luxo on the Toolserver → :Category:Tools by luxo, User:Luxo/Licenses
--Luxo 21:04, 6 July 2011 (UTC)
Get all templates from wikitext and put it in a array {{Template|index=para1}} ↓ ↓ ↓ Array ( [0] => Array ( [fulltemplate] => {{Template|index=para1}} [name] => Template [parameters] => Array ( [index] => para1 ) ) )
function templateparser($wikitext,$marktemplates=true)
{
//Parser for wikisyntax templates
/*
Copyright © Luxo 2011
This function is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This function is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this function. If not, see <http://www.gnu.org/licenses/>.
*/
if(!is_string($wikitext)) {
die("templateparser: no string attatched");
}
$wikitext = str_replace("\n", "¶", $wikitext);
$templates = array();
$reg = "/\{\{[^\{\{]*\}\}/Uu";
while(preg_match($reg, $wikitext, $x) == 1){
$templates[]['fulltemplate'] = $x[0];
$replacer = count($templates) - 1;
$replacer = ($marktemplates == true) ? "�".$replacer."�" : "";
//exclude this template from wikitext
$wikitext = str_replace($x[0], $replacer, $wikitext);
}
//Array with Templates generated. Read name of the template
foreach($templates as $key => $template) {
$reg = "/\{\{([^\}\|]*).*/u";
$templates[$key]["name"] = trim(preg_replace($reg,"\\1",$template['fulltemplate']));
}
//Get all keys and content
foreach($templates as $key => $template) {
$templates[$key]["parameters"] = array();
//links with [[goal|text]] must be changed
$reg ="/(\[\[[^\{\}\[\]]*)\|([^\{\}\[\]]*\]\])/Uu";
$t = preg_replace($reg, "\\1�\\2", $templates[$key]["fulltemplate"]);
//split parameters
$reg = "/\{\{".preg_quote($templates[$key]["name"])."|(.*)\}\}/Uu";
$x = preg_replace($reg,"\\1",$t);
$x = explode("|", $x);
foreach($x as $keyX => $param) {
if(trim($param) != "") {
if(!stripos($param, "=")) {
$templates[$key]["parameters"][$keyX] = $param;
} else {
$v = explode("=", $param, 2);
$v = str_replace("¶", "\n", $v);
$templates[$key]["parameters"][trim($v[0])] = str_replace("�","|",$v[1]);
}
}
}
}
return $templates;
}