Every Smarty tag either prints a variable or invokes some sort of function. These are processed and displayed by enclosing the function and its attributes within delimiters like so: {funcname attr1='val1' attr2='val2'}.
Both built-in functions and custom functions have the same syntax within templates.
Built-in functions are the inner workings of Smarty, such as {if}, {section} and {strip}. There should be no need to change or modify them.
Custom functions are additional functions implemented via plugins. They can be modified to your liking, or you can create new ones. {html_options} and {popup} are examples of custom functions.
See also register_function()