Global templates (alternative concept)
Notice: This is just an alternative concept of what global templates could look like. Currently, a similar function is offered by Wikifunctions, and the concept of global templates is an alias for Wikifunctions.
Definition
[edit]Global templates are special, which can be run on any Wikipedia. Global templates achieve the simplicity of calling templates, but at the same time the performance of programming languages.
Calls
[edit]Global templates always start with an underscore. A global call has a lower priority than a local one – it can be overridden.
Parameters
[edit]Parameters can be defined in 2 ways:
- by default as call template in the present,
- in the format of global templates.
Parameters are always sent as text from the forend.
Global templates (format)
[edit]Calling is similar to the C like programming language. Ie: key=value.
The basic types are:
- variable (a=2024),
- array (a=[2023,2024]),
- object (a={before=2023, now=2024}).
Example
[edit]Call example
[edit]In the wiki syntax:
{{_sucet_2_parameters|5|3}}
Call definition
[edit]In the special section of the all global call definitions:
name=addition_2_parameters
parameter_1=string
parameter_2=string
Implementations
[edit]Implementation (C)
[edit]The parameters in the front end are not before-processed in any way, so the implementation has to process them by itself.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
char *addition_2_parameters(
char *number1, uint16_t length1,
char *number2, uint16_t length2
)
{
long long int n1, n2, suma;
char buffer[100];
char *output;
if(sscanf(number1, "%lld", &n1) != 1)
return NULL;
if(sscanf(number2, "%lld", &n2) != 1)
return NULL;
suma=n1+n2;
snprintf(buffer, 100, "%lld", suma);
output=strdup(buffer);
return output;
}
#ifdef TEST
int main()
{
char *result;
// {{_addition_2_parameters|5|3}}
result=addition_2_parameters(
"5", 1,
"3", 1
);
puts(result);
free(result);
return 0;
}
#endif
Implementation (C + glib)
[edit]The parameters in the front end are not before-processed in any way, so the implementation has to process them by itself.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <glib-2.0/glib.h>
GString *sucet_2_parameters(
char *number1, uint16_t length1,
char *number2, uint16_t length2
)
{
long long int n1, n2, suma;
GString *output;
if(sscanf(number1, "%lld", &n1) != 1)
return NULL;
if(sscanf(number2, "%lld", &n2) != 1)
return NULL;
output=g_string_new(NULL);
g_string_append_printf(output, "%lld", (long long int) (n1+n2));
return output;
}
#ifdef TEST
int main()
{
GString *result;
// {{_sucet_2_parameters|5|3}}
result=sucet_2_parameters(
"5", 1,
"3", 1
);
puts(result->str);
g_string_free(result, TRUE);
return 0;
}
#endif
Implementation (PHP)
[edit]The parameters in the front end are not before-processed in any way, so the implementation has to process them by itself.
<?php
function sucet_2_parameters(array $fargs) : string|bool
{
if(!isset($fargs[0])) return false;
if(!ctype_digit($fargs[0])) return false;
if(!isset($fargs[1])) return false;
if(!ctype_digit($fargs[1])) return false;
return $fargs[0]+$fargs[1];
}
// {{_sucet_2_parameters|5|3}}
$result=sucet_2_parameters(array("5", "3"));
echo $result."\n";