# Processador de modelo

Um processador de modelo (também conhecido como um mecanismo de modelo ou analisador de modelo, em inglês template processor, template engine ou template parser) é um pedaço de software ou um componente de software que é designado a combinar um ou mais modelos com um modelo de dados para produzir um ou mais documentos como resultado. A linguagem que os templates são escritos é conhecida como linguagem de modelo (template language). Para propósitos deste artigo, um documento de resultado é qualquer tipo de saída formatada, incluindo documentos, páginas web ou código fonte (em geração de código fonte), na totalidade ou em fragmentos. Um mecanismo de modelo é normalmente incluído como uma parte de um sistema de modelo web ou de um framework de aplicação, e pode ser usado como pré-processador ou filtro.

## Recursos comuns

Os mecanismos de modelo geralmente incluem recursos comuns à maioria das linguagens de programação de alto nível, com ênfase em recursos para processamento de texto sem formatação.
Tais recursos incluem:
* variáveis e funções
* substituição de texto
* inclusão de arquivo (ou transclusão)
* avaliação condicional e laços

## Mecanismos de modelo embutidos

Apesar dos processadores de modelo serem normalmente um software separado, usado como parte de um sistema ou framework, linguagens de modelo simples são comumente incluídas nos recursos de processamento de cadeias de caracteres (string) de linguagens de programação de uso geral e em programas de processamento de texto, notadamente editores de texto ou processadores de texto. As linguagens de modelagem são geralmente linguagens simples apenas de substituição, em contraste com os recursos mais sofisticados em processadores de modelos completos, mas podem conter alguma lógica.
Exemplos simples incluem strings de formato de impressão, encontradas em muitas linguagens de programação, e trechos, encontrados em vários editores de texto e editores de código-fonte. Em processadores de texto, os modelos são um recurso comum, enquanto que o preenchimento automático dos modelos é geralmente chamado de mala direta.
Um exemplo ilustrativo da natureza complementar da análise sintática (parsing) e modelagem é o comando s (substituto) no processador de texto sed, originado da pesquisa e substituição no editor de texto ed. Os comandos de substituição são da forma s/expreg/subsituição/, onde expreg é uma expressão regular, para análise sintática de entrada, e replacement é um modelo simples para saída, seja texto literal ou uma string de formato contendo os caracteres & e para "correspondência inteira" ou as seqüências especiais de escape \1 a \9 para a enésima sub-expressão. Por exemplo, s/(gato|cachorro)s?/\1s/g substitui todas as ocorrências de "gato" ou "cachorro" por "gatos" ou "cachorros", sem duplicar um "s" existente: (gato|cachorro) é a primeira (e única) sub-expressão na expressão regular, e \1 na string de formato substitui isso na saída.

## Elementos do sistema

Todos os sistemas de processamento de modelo consistem de, pelo menos, esses elementos primários:
* um modelo de dados associado;
* um ou mais modelos de origem;
* um processador ou mecanismo de modelo;
* saída gerada na forma de documentos resultantes.

### Modelo de dados

Isso pode ser um banco de dados relacional, um arquivo fonte, como XML, um formato alternativo de banco de dados de arquivo simples, uma planilha eletrônica ou qualquer outra fonte de dados pré-formatados. Alguns sistemas de processamento de modelo são limitados nos tipos de dados que podem ser usados. Outros são projetados para flexibilidade máxima e permitem muitos tipos diferentes de dados.

### Modelo fonte

Os modelos fonte são tradicionalmente especificados:
* de acordo com uma linguagem de programação preexistente;
* de acordo com uma linguagem de modelos especialmente definida;
* de acordo com os recursos de um aplicativo de software de hospedagem; ou
* de acordo com uma combinação híbrida de alguns ou todos os itens acima.

### Mecanismo de modelo

O mecanismo de modelo é responsável por:
* conectar ao modelo de dados;
* processar o código especificado nos modelos de origem; e
* direcionar a saída para um pipeline, arquivo de texto ou fluxo específico.
Além disso, alguns mecanismos de modelo permitem opções adicionais de configuração.

### Documentos resultantes

Estes podem consistir em um documento inteiro ou um fragmento de documento.