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";