Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/LaurentDardenne/Template
Code generation by using text templates
https://github.com/LaurentDardenne/Template
conditional parsing-engine powershell powershell-module preprocessing preprocessor regex template template-engine transformations
Last synced: 3 months ago
JSON representation
Code generation by using text templates
- Host: GitHub
- URL: https://github.com/LaurentDardenne/Template
- Owner: LaurentDardenne
- Created: 2016-10-20T11:35:05.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2017-08-01T10:32:13.000Z (over 7 years ago)
- Last Synced: 2024-05-22T22:35:45.107Z (6 months ago)
- Topics: conditional, parsing-engine, powershell, powershell-module, preprocessing, preprocessor, regex, template, template-engine, transformations
- Language: PowerShell
- Size: 170 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
- jimsghstars - LaurentDardenne/Template - Code generation by using text templates (PowerShell)
README
[![Build status](https://ci.appveyor.com/api/projects/status/ll5tv37ggguiulva?svg=true)](https://ci.appveyor.com/project/LaurentDardenne/template)
![Logo](https://raw.githubusercontent.com/LaurentDardenne/Template/master/Assets/Template.png)# Template
Code generation by using text templates.
A template specifies a text template with placeholders for data to be extracted from models.The 'Template' module offers these features:
* [Text replacement](https://github.com/LaurentDardenne/Template/wiki/Text-replacement), simple or by regex or regex with [MatchEvaluator](https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.matchevaluator(v=vs.110).aspx) (Scriptblock)
* [File inclusion](https://github.com/LaurentDardenne/Template/wiki/File-inclusion)
* [Directive to run embedded scripts](https://github.com/LaurentDardenne/Template/wiki/Directive-to-run-embedded-scripts)
* [Conditionnal directive](https://github.com/LaurentDardenne/Template/wiki/Conditionnal-directives) (#Define & #Undef)
* [Removal and uncomment directive](https://github.com/LaurentDardenne/Template/wiki/Removal-and-uncomment-directive)## Install
```powershell
$PSGalleryPublishUri = 'https://www.myget.org/F/ottomatt/api/v2/package'
$PSGallerySourceUri = 'https://www.myget.org/F/ottomatt/api/v2'
Register-PSRepository -Name OttoMatt -SourceLocation $PSGallerySourceUri -PublishLocation $PSGalleryPublishUri #-InstallationPolicy TrustedInstall-Module Template -Repository OttoMatt
```
## Principle
A template is a file that serves as a starting point for a new document.
The 'Template' module, allow to insert directives, as a comment, inside the source code.
For example :
```Powershell
Write-Debug 'Test' #<%REMOVE%>
```
In this case, the presence of this directive does not require to transform the source code before to execute it.For this example, the directives require a transformation :
```Powershell
Import-Module Template
#Initialize-TemplateModule.ps1 create the hashtable $TemplateDefaultSettings$File='C:\temp\Code.PS1'
@'
Write 'Text before the directive'
<#%ScriptBlock%
#
. .\Convert-ObjectToClass.ps1
#Class PS >= v5
Convert-ObjectToClass -InputObject (Get-Process|Select Name,VirtualMemorySize -First 1)
##
. .\New-PSCustomObjectFunction.ps1
#PSCustomObject >= v3
New-PSCustomObjectFunction -Noun ProcessLight -Parameters Name,VirtualMemorySize -AsFunction
#
#>
Write 'Text after the directive'
'@ > $File
```
The following script transform the content:
```Powershell
[string[]]$Lines=Get-Content -Path $File -ReadCount 0 -Encoding UTF8
#Edit-Template need an ARRAY of string
$Result=,$Lines|Edit-Template -ConditionnalsKeyWord "V5"|
Edit-Template -Clean
$Result
```
to :
```Powershell
Write 'Text before the directive'
<#%ScriptBlock%. .\New-PSCustomObjectFunction.ps1
#PSCustomObject >= v3
New-PSCustomObjectFunction -Noun ProcessLight -Parameters Name,VirtualMemorySize -File
#>
Write 'Text after the directive'
```
The text between the directive \#<DEFINE %V5%> and \#<UNDEF %V5%> is deleted.
The parameter _*-Clean*_ remove the remaining directives inside the text.The second step, invoke the script to generate text :
```Powershell
#Edit-String need a string
$ofs="`r`n"
"$Result"|
Edit-String -Setting $TemplateDefaultSettings
```
The final source code :
```Powershell
Write 'Text before the directive'
Function New-ProcessLight{
param(
[Parameter(Mandatory=$True,position=0)]
$Name,
[Parameter(Mandatory=$True,position=1)]
$VirtualMemorySize
)[pscustomobject]@{
PSTypeName='ProcessLight';
Name=$Name;
VirtualMemorySize=$VirtualMemorySize;
}}# New-ProcessLight
Write 'Text after the directive'
```With this script :
```Powershell
Get-Content -Path $File -ReadCount 0 -Encoding UTF8|
Edit-Template -ConditionnalsKeyWord "V3"|
Edit-Template -Clean|
Out-string|
Edit-String -Hashtable $TemplateDefaultSettings
```
The result text is :
```Powershell
Write 'Text before the directive'
class ProcessLight
{
[string] $Name;
[int] $VirtualMemorySize;ProcessLight([System.Diagnostics.Process] $Process) {
$this.Name = $Process.Name
$this.VirtualMemorySize = $Process.VirtualMemorySize}
} #ProcessLight
Write 'Text after the directive'
```