SOUL Syntax Highlighting Examples

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
* TEXT and HTML Block Examples
* Demonstrates text interpolation features

%TITLE = 'SOUL Language Report'
%AUTHOR = 'John Smith'
%DATE = $Curdate
%VERSION = '2.1'

* Simple TEXT block
TEXT
Welcome to the SOUL programming tutorial!
This is plain text output.
END TEXT

* TEXT block with variable interpolation
TEXT
Report Title: {%TITLE}
Author: {%AUTHOR}
Generated: {%DATE}
Version: {%VERSION}
END TEXT

* TEXT block with expressions
%COUNT = 10
%PRICE = 29.99
TEXT
Item Count: {%COUNT}
Unit Price: ${%PRICE}
Total: ${%COUNT * %PRICE}
Tax (8%): ${(%COUNT * %PRICE) * 0.08}
END TEXT

* TEXT block with function calls
%CUSTOMER_NAME = 'alice johnson'
TEXT
Customer: {$Proper(%CUSTOMER_NAME)}
Name Length: {$Len(%CUSTOMER_NAME)} characters
Uppercase: {$Upcase(%CUSTOMER_NAME)}
END TEXT

* HTML block for web output
HTML
<html>
<head>
    <title>{%TITLE}</title>
</head>
<body>
    <h1>{%TITLE}</h1>
    <p>Version: {%VERSION}</p>
</body>
</html>
END HTML

* Complex HTML with multiple interpolations
%ROWS = 5
HTML
<table>
    <tr>
        <th>Name</th>
        <th>Value</th>
    </tr>
END HTML

FOR %I FROM 1 TO %ROWS
    %ROW_NAME = 'Item ' WITH %I
    %ROW_VALUE = %I * 100
    HTML
    <tr>
        <td>{%ROW_NAME}</td>
        <td>{%ROW_VALUE}</td>
    </tr>
    END HTML
END FOR

HTML
</table>
END HTML

* TEXT block with object method calls
IMAGE REPORT_DATA
    HEADER IS STRING LEN 100
    FOOTER IS STRING LEN 100
    LINE_COUNT IS FIXED
END IMAGE

%REPORT = NEW REPORT_DATA
%REPORT:HEADER = 'Monthly Sales Report'
%REPORT:FOOTER = 'End of Report'
%REPORT:LINE_COUNT = 42

TEXT
{%REPORT:HEADER}
----------------------------------------
Total Lines: {%REPORT:LINE_COUNT}
----------------------------------------
{%REPORT:FOOTER}
END TEXT

* Nested expressions in TEXT blocks
%BASE = 10
%EXPONENT = 3
TEXT
Calculation: {%BASE} to the power of {%EXPONENT}
Result: {%BASE * %BASE * %BASE}
Using function: {$Power(%BASE, %EXPONENT)}
END TEXT

* Multi-line TEXT with formatting
TEXT
╔════════════════════════════════════╗
{$Center(%TITLE, 34)}
╠════════════════════════════════════╣
║  Author: {$Pad(%AUTHOR, 24)}
║  Date:   {$Pad(%DATE, 24)}
╚════════════════════════════════════╝
END TEXT