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
editGlobal 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
editGlobal templates always start with an underscore. A global call has a lower priority than a local one – it can be overridden.
Parameters
editParameters 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)
editCalling 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
editCall example
editIn the wiki syntax:
{{_sucet_2_parameters|5|3}}
Call definition
editIn the special section of the all global call definitions:
name=addition_2_parameters
parameter_1=string
parameter_2=string
Implementations
editImplementation (C)
editThe 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)
editThe 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)
editThe 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";