149 lines
4.1 KiB
Markdown
149 lines
4.1 KiB
Markdown
# EFTL Language Extension for VS Code
|
|
|
|
Syntax highlighting and language support for **EFTL (ElixForms Template Language)**.
|
|
|
|
## Features
|
|
|
|
- **Syntax Highlighting** for all EFTL constructs
|
|
- **Code Snippets** for common patterns
|
|
- **Bracket Matching** for EFTL blocks
|
|
- **Code Folding** for block structures
|
|
|
|
## Supported Syntax
|
|
|
|
### Block Delimiters
|
|
|
|
- `[EFTL]...[/EFTL]` - Main EFTL block
|
|
- `[VAR name="..." type="..."]...[/VAR]` - Variable declarations
|
|
- `[IF]...[/IF]` - Conditionals
|
|
- `[WHILE]...[/WHILE]` - Loops
|
|
|
|
### Expressions
|
|
|
|
- `[% expression %]` - Execute expression
|
|
- `[%= expression %]` - Output expression value
|
|
|
|
### Data Tags
|
|
|
|
- `[TAG]GETVALUEBYTAG,TAG_NAME,REQUEST,IUQOID[/TAG]`
|
|
- `[TAG]SCHEMAID,schemaId,COL0001,IUQOID, , [/TAG]`
|
|
|
|
### Functions
|
|
|
|
- `[SPLIT regex="..."]...[/SPLIT]` - Split string
|
|
- `[TRIM]...[/TRIM]` - Trim whitespace
|
|
- `[VALUE_OF varname="..." index="..." /]` - Get array element
|
|
- `[SIZE_OF varname="..." /]` - Get array size
|
|
- `[CONTAINS varname="..."]...[/CONTAINS]` - Check containment
|
|
- `[FORMAT type="..." pattern="..."]...[/FORMAT]` - Format values
|
|
|
|
### Control Structures
|
|
|
|
- `[IF]`, `[CONDITION]`, `[THEN]`, `[ELSE]`, `[ELSE IF]`
|
|
- `[WHILE]`, `[DO]`
|
|
|
|
### Comments
|
|
|
|
- `[!-- comment --]`
|
|
|
|
## Building and Installation
|
|
|
|
### 1. Build from Source
|
|
|
|
To compile the extension, you need [Node.js](https://nodejs.org/) installed.
|
|
|
|
1. Open a terminal in the project root.
|
|
2. Install dependencies:
|
|
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
3. Compile the TypeScript code:
|
|
|
|
```bash
|
|
npm run compile
|
|
```
|
|
|
|
*Alternatively, use `npm run watch` to automatically recompile on changes.*
|
|
|
|
### 2. Manual Installation (for testing)
|
|
|
|
To make the extension available in your VS Code without packaging it as a VSIX:
|
|
|
|
#### Windows
|
|
|
|
1. Open a command prompt (as Administrator for symlinks) or PowerShell.
|
|
2. Create a link to this folder in your VS Code extensions directory:
|
|
|
|
```powershell
|
|
# PowerShell
|
|
New-Item -ItemType Junction -Path "$env:USERPROFILE\.vscode\extensions\eftl-language" -Value "$(pwd)"
|
|
```
|
|
|
|
*Note: Replace the value path with the actual absolute path to your project folder if it differs.*
|
|
|
|
#### Linux / macOS
|
|
|
|
1. Create a symbolic link:
|
|
|
|
```bash
|
|
ln -s "$(pwd)" ~/.vscode/extensions/eftl-language
|
|
```
|
|
|
|
2. **Restart VS Code**. The extension will now be loaded.
|
|
|
|
### 3. Development Mode (Debugging)
|
|
|
|
If you want to debug the extension or the language server:
|
|
|
|
1. Open the project folder in VS Code.
|
|
2. Ensure you have run `npm install` and `npm run compile`.
|
|
3. Press `F5` (or go to the **Run and Debug** view and click **Launch Extension**).
|
|
4. A new **Extension Development Host** window will open.
|
|
5. In that window, open any `.eftl` file to test syntax highlighting and the language server.
|
|
|
|
## Snippets
|
|
|
|
| Prefix | Description |
|
|
| ----------- | ---------------------- |
|
|
| `eftl` | EFTL block with header |
|
|
| `var` | Variable declaration |
|
|
| `vartag` | Variable from TAG |
|
|
| `varschema` | Variable from SCHEMAID |
|
|
| `if` | IF statement |
|
|
| `ifelse` | IF-ELSE statement |
|
|
| `while` | WHILE loop |
|
|
| `split` | Split function |
|
|
| `trim` | Trim function |
|
|
| `valueof` | VALUE_OF function |
|
|
| `sizeof` | SIZE_OF function |
|
|
| `contains` | CONTAINS function |
|
|
| `formatnum` | Format number |
|
|
| `tag` | GETVALUEBYTAG tag |
|
|
| `schema` | SCHEMAID tag |
|
|
| `out` | Output expression |
|
|
| `comment` | Comment block |
|
|
|
|
## Example
|
|
|
|
```eftl
|
|
[EFTL][HEADER name="trimDocument" value="true" type="boolean" /]
|
|
[VAR name="total" type="number"][% total = 0; %][/VAR]
|
|
[VAR name="items" type="iterable"][SPLIT regex=";"][TAG]GETVALUEBYTAG,ITEMS,REQUEST,IUQOID[/TAG][/SPLIT][/VAR]
|
|
|
|
[!-- Calculate total --]
|
|
[VAR name="count" type="number"][SIZE_OF varname="items" /][/VAR]
|
|
|
|
[IF]
|
|
[CONDITION][% count > 0 %][/CONDITION]
|
|
[THEN][%= count %] items found[/THEN]
|
|
[ELSE]No items[/ELSE]
|
|
[/IF]
|
|
[/EFTL]
|
|
```
|
|
|
|
## License
|
|
|
|
MIT
|