@cyklang/cli 0.1.2 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/build/AssetCommand.d.ts +4 -0
  2. package/build/AssetCommand.js +293 -0
  3. package/build/Cmd.d.ts +2 -1
  4. package/build/Cmd.js +3 -3
  5. package/build/DBClient.d.ts +1 -0
  6. package/build/DBClient.js +51 -17
  7. package/build/ModuleCommand.js +28 -6
  8. package/build/TableCommand.js +235 -45
  9. package/build/index.js +3 -0
  10. package/package.json +6 -3
  11. package/pgdata/entry.csv +22 -0
  12. package/pgdata/setting.csv +4 -0
  13. package/src/AssetCommand.ts +307 -0
  14. package/src/Cmd.ts +4 -3
  15. package/src/DBClient.ts +70 -31
  16. package/src/ModuleCommand.ts +31 -5
  17. package/src/TableCommand.ts +269 -56
  18. package/src/index.ts +3 -0
  19. package/test/cyklang.xsd +439 -0
  20. package/test/t0.output +4 -0
  21. package/test/t0.xml +26 -0
  22. package/test/t01.output +32 -0
  23. package/test/t01.xml +185 -0
  24. package/test/t02.output +10 -0
  25. package/test/t02.xml +88 -0
  26. package/test/t03.output +9 -0
  27. package/test/t03.xml +74 -0
  28. package/test/t04.output +29 -0
  29. package/test/t04.xml +116 -0
  30. package/test/t05.output +18 -0
  31. package/test/t05.xml +41 -0
  32. package/test/t06.output +4 -0
  33. package/test/t06.xml +16 -0
  34. package/test/t07.output +5 -0
  35. package/test/t07.xml +82 -0
  36. package/test/t08.output +8 -0
  37. package/test/t08.xml +57 -0
  38. package/test/t09.output +10 -0
  39. package/test/t09.xml +29 -0
  40. package/test/t10.xml +125 -0
  41. package/test/t11.output +3 -0
  42. package/test/t11.xml +25 -0
  43. package/test/t12.output +7 -0
  44. package/test/t12.xml +42 -0
  45. package/test/t13.xml +23 -0
  46. package/test/t14.output +50 -0
  47. package/test/t14.xml +82 -0
  48. package/test/t14.xsd +102 -0
  49. package/test/t15.xml +47 -0
  50. package/test/t16.output +49 -0
  51. package/test/t16.xml +86 -0
  52. package/test/t17.output +5 -0
  53. package/test/t17.xml +21 -0
  54. package/test/t18.output +22 -0
  55. package/test/t18.xml +59 -0
  56. package/test/t19.xml +234 -0
  57. package/test/t20.xml +15 -0
  58. package/test/t21.output +21 -0
  59. package/test/t21.xml +71 -0
  60. package/test/t22.xml +23 -0
  61. package/test/t23.xml +44 -0
  62. package/test/t24.xml +10 -0
  63. package/test/test.json +113 -0
package/test/t07.xml ADDED
@@ -0,0 +1,82 @@
1
+ <?xml-model href="cyklang.xsd" ?>
2
+ <module>
3
+ <print>"begin"</print>
4
+ <number name="jean">12345</number>
5
+ <type name="form"/>
6
+ <type name="form.grid" />
7
+ <type name="form.field"/>
8
+ <type name="form.input" />
9
+ <type name="form.button" />
10
+ <type name="form.onclick"/>
11
+ <type name="form.template" literal=""/>
12
+ <form name="ident_form">
13
+ <string name="tip">"information"</string>
14
+ <grid template-columns="1fr 1fr" column="1 / 3">
15
+ <input model="v1"></input>
16
+ </grid>
17
+ <input model="surname" label="Surname" />
18
+ <input model="name" label="Name" />
19
+ <button label="OK" icon="done">
20
+ <onclick>
21
+ <!-- <closeform/> -->
22
+ </onclick>
23
+ </button>
24
+ </form>
25
+ <print>"ident_form.tip " + ident_form.tip</print>
26
+ <form name="f1">ident_form</form>
27
+ <print>"f1.tip " + f1.tip</print>
28
+
29
+ <form name="form1" template-columns="auto auto">
30
+ <string name="tip">"information"</string>
31
+ <input model="v1" bg-color="green-1" label="Label Version" stack-label="" hint="Hint info V1" autogrow=""></input>
32
+ <input model="v1" label="Label V1" stack-label="" hint="Hint V1" type="textarea"></input>
33
+
34
+ <grid template-columns="1fr 1fr" column="1 / 3">
35
+ <input model="v1"></input>
36
+ </grid>
37
+
38
+ <input model="mdp" label="Password V2" stack-label=""></input>
39
+
40
+ <input model="mdp" label="Password V2" stack-label="" type="password"></input>
41
+
42
+ <input model="heure" label="Time" stack-label=""></input>
43
+ <input model="heure" label="Time" stack-label="" type="time"></input>
44
+
45
+ <input model="date" label="Date" stack-label=""></input>
46
+ <input model="date" label="Date" stack-label="" type="date"></input>
47
+
48
+ <field>
49
+ <template name="control">
50
+ <![CDATA[
51
+ DEBUT DE CONTROL
52
+ <div>CECI EST UN CHAMP</div>
53
+ <div>FIELD</div>
54
+ ]]>
55
+ </template>
56
+ </field>
57
+
58
+
59
+ <input model="numb" label="Number" stack-label="">
60
+ <template name="prepend">
61
+ <![CDATA[
62
+ <span class="text-caption"> lorem ipsum
63
+ </span>
64
+ ]]>
65
+
66
+ </template>
67
+ </input>
68
+ <input model="numb" label="Number" stack-label="" type="number"></input>
69
+
70
+ <button label="Ok" icon="event">
71
+ <onclick>
72
+ <function>
73
+ <block>
74
+ <print>"toto"</print>
75
+ </block>
76
+ </function>
77
+ </onclick>
78
+ </button>
79
+ </form>
80
+ <print>"form1.tip " + form1.tip</print>
81
+ <print>"end"</print>
82
+ </module>
@@ -0,0 +1,8 @@
1
+ jean bernard
2
+ alain
3
+ dupont
4
+ result.actor.at(0).first_name Nick
5
+ result.resultset.at(0).film.title Jersey Sassy
6
+ result.resultset.at(0).actor.last_name Wahlberg <mika?>
7
+ Jersey Sassy Wahlberg <mika?>
8
+ Smile Earring Wahlberg <mika?>
package/test/t08.xml ADDED
@@ -0,0 +1,57 @@
1
+ <?xml-model href="cyklang.xsd" ?>
2
+ <module>
3
+ <string name="a" literal="">jean bernard
4
+ alain
5
+ </string>
6
+ <string name="b">"dupont"</string>
7
+ <print>a + b</print>
8
+
9
+ <object name="result">
10
+ <object name="actor">
11
+ <object>
12
+ <number name="actor_id">2</number>
13
+ <string name="first_name" literal="">Nick</string>
14
+ <string name="last_name" literal="">Wahlberg &lt;mika?&gt;</string>
15
+ <string name="last_update" literal="">Sun May 26 2013 14:50:58 GMT+0400 (heure de La Réunion)</string>
16
+ </object>
17
+ </object>
18
+ <object name="film">
19
+ <object>
20
+ <number name="film_id">485</number>
21
+ <string name="title" literal="">Jersey Sassy</string>
22
+ <string name="description" literal="">A Lacklusture Documentary of a Madman And a Mad Cow who must Find a Feminist in Ancient Japan</string>
23
+ <number name="release_year">2006</number>
24
+ </object>
25
+ <object>
26
+ <number name="film_id">811</number>
27
+ <string name="title" literal="">Smile Earring</string>
28
+ <string name="description" literal="">A Intrepid Drama of a Teacher And a Butler who must Build a Pastry Chef in Berlin</string>
29
+ <number name="release_year">2006</number>
30
+ </object>
31
+ </object>
32
+ <object name="resultset">
33
+ <object>
34
+ <object name="actor">actor.at(0)</object>
35
+ <object name="film">film.at(0)</object>
36
+ </object>
37
+ <object>
38
+ <object name="actor">actor.at(0)</object>
39
+ <object name="film">film.at(1)</object>
40
+ </object>
41
+ </object>
42
+ </object>
43
+
44
+ <print>" result.actor.at(0).first_name " + result.actor.at(0).first_name</print>
45
+ <print>" result.resultset.at(0).film.title " + result.resultset.at(0).film.title</print>
46
+ <print>" result.resultset.at(0).actor.last_name " + result.resultset.at(0).actor.last_name</print>
47
+
48
+ <call object="result.resultset" method="foreach">
49
+ <function>
50
+ <object name="result" />
51
+ <block>
52
+ <print>result.film.title + ' ' + result.actor.last_name</print>
53
+ </block>
54
+ </function>
55
+ </call>
56
+
57
+ </module>
@@ -0,0 +1,10 @@
1
+ date of birth : 1963-11-04 00:00:00 GMT+0400, now : 2022-07-22 15:31:35 GMT+0400
2
+ french true
3
+ 150
4
+ 160
5
+ 170
6
+ 180
7
+ 190
8
+ 200 number(" 1234.56")+10 : 1244.56
9
+ n2 = undefined
10
+ n1 + n2 = 100undefined
package/test/t09.xml ADDED
@@ -0,0 +1,29 @@
1
+ <?xml-model href="cyklang.xsd" ?>
2
+ <module>
3
+ <object name="dates">
4
+ <datetime name="datebirth">datetime(&quot;11/04/1963&quot;)</datetime>
5
+ <datetime name="datenow">now()</datetime>
6
+ <boolean name="french">true</boolean>
7
+ </object>
8
+
9
+ <print>"date of birth : " + dates.datebirth + ", now : "+dates.datenow</print>
10
+ <print>"french " + dates.french </print>
11
+
12
+ <number name="num1"/>
13
+ <set name="num1">150</set>
14
+ <while>
15
+ <condition><![CDATA[ num1 < 200 ]]> </condition>
16
+ <then>
17
+ <print>num1</print>
18
+ <set name="num1">num1 + 10</set>
19
+ </then>
20
+ </while>
21
+
22
+ <string name="str1">string(num1)</string>
23
+ <print>str1 + ' number(" 1234.56")+10 : ' + (number(" 1234.56") + 10)</print>
24
+
25
+ <number name="n1">100</number>
26
+ <number name="n2">null</number>
27
+ <print>"n2 = " + n2</print>
28
+ <print>"n1 + n2 = " + (n1 + n2)</print>
29
+ </module>
package/test/t10.xml ADDED
@@ -0,0 +1,125 @@
1
+ <?xml-model href="cyklang.xsd" ?>
2
+ <module>
3
+
4
+ <db.table name="actor">
5
+ <number name="actor_id" type="int" primary="" generated='by default'/>
6
+ <string name="first_name" type="varchar(50)"/>
7
+ <string name="last_name" type="text" />
8
+ <datetime name="last_update" type="timestamp with time zone"/>
9
+ <string name="cyk_remark" type="varchar(255)" />
10
+ <boolean name="cyk_disable" type="boolean"/>
11
+ </db.table>
12
+
13
+ <db.table name="film">
14
+ <number name="film_id" type="int" primary="" generated='by default'/>
15
+ <string name="title" type="varchar(255)" />
16
+ <string name="description" type="text" />
17
+ <number name="release_year" type="int"/>
18
+ <number name="length" type="int" />
19
+ <number name="language_id" type="int"/>
20
+ </db.table>
21
+
22
+ <db.table name="film_actor">
23
+ <number name="actor_id" type="int" primary=""/>
24
+ <number name="film_id" type="int" primary=""/>
25
+ <number name="length" type="int"/>
26
+ </db.table>
27
+
28
+ <db.query name="films_actors">
29
+ <number name="length_from">0</number>
30
+ <number name="length_to">999</number>
31
+ <string name="__entities__">"actor film"</string>
32
+ <string name="__sql__" literal="">
33
+ SELECT * FROM public.actor
34
+ join film_actor on film_actor.actor_id = actor.actor_id
35
+ join film on film_actor.film_id = film.film_id
36
+ where film.length between {{ length_from }} and {{ length_to }}
37
+ -- and actor.actor_id = 2
38
+ ORDER BY actor.actor_id ASC ;
39
+ </string>
40
+ </db.query>
41
+
42
+ <object name="actor_maria">
43
+ <string name="first_name">"Maria" </string>
44
+ <string name='last_name'>'CHANE YOU KAYE'</string>
45
+ <string name='cyk_remark'> 'remarque' </string>
46
+ </object>
47
+
48
+ <!-- <db.execute insert_into_table="actor" returning_into="actor_maria" >
49
+ <object name="actor">actor_maria</object>
50
+ </db.execute> -->
51
+
52
+ <db.insert table="actor" returning_into="actor_maria">
53
+ <object name="actor">actor_maria</object>
54
+ </db.insert>
55
+
56
+ <object name="new_film">
57
+ <string name="title">"La mélodie du bonheur"</string>
58
+ <string name="description">"Le film préféré de Mao"</string>
59
+ <number name="language_id">1</number>
60
+ <number name="release_year">2022</number>
61
+ <number name="length">60</number>
62
+ </object>
63
+
64
+ <!-- <db.execute insert_into_table="film" returning_into="new_film">
65
+ <object> new_film </object>
66
+ </db.execute> -->
67
+
68
+ <db.insert table="film" returning_into="new_film">
69
+ <object>new_film</object>
70
+ </db.insert>
71
+
72
+ <print>"New film ID " + new_film.film_id </print>
73
+
74
+ <let name="new_film.release_year"> 1965 </let>
75
+
76
+ <!-- <db.execute update_table="film">
77
+ <object name="film"> new_film </object>
78
+ </db.execute> -->
79
+
80
+ <db.update table="film">
81
+ <object name="film"> new_film </object>
82
+ </db.update>
83
+
84
+ <!-- <db.execute insert_into_table="film_actor">
85
+ <object>
86
+ <number name="actor_id">actor_maria.actor_id</number>
87
+ <number name="film_id">new_film.film_id</number>
88
+ </object>
89
+ </db.execute> -->
90
+
91
+ <db.insert table="film_actor">
92
+ <object>
93
+ <number name="actor_id">actor_maria.actor_id</number>
94
+ <number name="film_id">new_film.film_id</number>
95
+ </object>
96
+ </db.insert>
97
+
98
+ <object name="films_actors" />
99
+
100
+ <!-- <db.execute query="films_actors" result="films_actors">
101
+ <number name="length_from">60</number>
102
+ <number name="length_to">60</number>
103
+ </db.execute> -->
104
+
105
+ <db.runquery name="films_actors" result="films_actors">
106
+ <number name="length_from">60</number>
107
+ <number name="length_to">60</number>
108
+ </db.runquery>
109
+
110
+ <print>"films_actors.resultset.at(0).actor.last_name " + films_actors.resultset.at(0).actor.last_name</print>
111
+ <call object="films_actors.resultset" method="foreach">
112
+ <function>
113
+ <object name="result" />
114
+ <block>
115
+ <print>"actor " + result.actor.actor_id + " " + result.actor.first_name + " " + result.actor.last_name
116
+ + ", film " + result.film.film_id + " " + result.film.title
117
+ </print>
118
+ </block>
119
+ </function>
120
+ </call>
121
+
122
+ <print>"string(films_actors) : "+string(films_actors)</print>
123
+
124
+
125
+ </module>
@@ -0,0 +1,3 @@
1
+ p1.x = 0, p1.y = 1
2
+ ctor of colorOrigin this.resume : colorOrigin : x = 0, y = 0
3
+ co.x = 0, co.y = 0, co.color = red, co.resume = colorOrigin : x = 0, y = 0
package/test/t11.xml ADDED
@@ -0,0 +1,25 @@
1
+ <?xml-model href="cyklang.xsd" ?>
2
+ <module>
3
+ <type name="point">
4
+ <number name="x">0</number>
5
+ <number name="y">1</number>
6
+ <string name="resume">"x = "+x + ", y = "+ y</string>
7
+ </type>
8
+ <object type="point" name="p1" />
9
+ <print>"p1.x = "+p1.x +", p1.y = "+p1.y</print>
10
+ <type name="colorOrigin" base="point">
11
+ <number name="y">0</number>
12
+ <string name="color">"yellow"</string>
13
+ <method name="__init__">
14
+ <block>
15
+ <set name="this.resume">"colorOrigin : x = "+this.x + ", y = "+this.y</set>
16
+ <print>"ctor of colorOrigin this.resume : "+this.resume</print>
17
+ </block>
18
+ </method>
19
+ </type>
20
+ <object type="colorOrigin" name="co">
21
+ <string name="color">"red"</string>
22
+ </object>
23
+ <print>"co.x = " + co.x + ", co.y = "+co.y+", co.color = "+co.color+", co.resume = "+co.resume</print>
24
+
25
+ </module>
@@ -0,0 +1,7 @@
1
+ MOD.x = 10
2
+ MOD.y = 20
3
+ INSIDE mod.sum = 30
4
+ PRINT MOD.sum = 30
5
+ mycar autonomy = 666.6666666666667
6
+ INSIDE mod.sum = 30
7
+ MOD.sum = 30
package/test/t12.xml ADDED
@@ -0,0 +1,42 @@
1
+ <?xml-model href="cyklang.xsd" ?>
2
+ <module>
3
+ <module name="mod" import="oilcar x">
4
+ <number name="x">10</number>
5
+ <number name="y">20</number>
6
+ <function name="sum" returns="result: number">
7
+ <block>
8
+ <print>"INSIDE mod.sum = "+ (x+y)</print>
9
+ <set name="result">x + y</set>
10
+ </block>
11
+ </function>
12
+ <type name="vehicle">
13
+ <string name="carplatenumber"/>
14
+ <method name="getAutonomy" returns="autonomy:number">
15
+ </method>
16
+ </type>
17
+ <type name="oilcar" base="vehicle">
18
+ <number name="tankcapacity" />
19
+ <number name="l100"/>
20
+ <method name="getAutonomy" returns="autonomy:number">
21
+ <block>
22
+ <let name="autonomy">100 * (this.tankcapacity / this.l100)</let>
23
+ </block>
24
+ </method>
25
+ </type>
26
+ </module>
27
+ <print>"MOD.x = "+x</print>
28
+ <print>"MOD.y = "+MOD.y</print>
29
+ <print>"PRINT MOD.sum = "+MOD.sum()</print>
30
+ <object type="oilcar" name="mycar">
31
+ <string name="carplatenumber">"CV584MK"</string>
32
+ <number name="tankcapacity">60</number>
33
+ <number name="l100">9</number>
34
+ </object>
35
+ <print>"mycar autonomy = "+mycar.getAutonomy()</print>
36
+
37
+ <number name="result"/>
38
+ <call function="MOD.sum" returns="result"/>
39
+ <print>"MOD.sum = "+result</print>
40
+
41
+ <!-- <module name="__form__" dbname="form" import="*"/> -->
42
+ </module>
package/test/t13.xml ADDED
@@ -0,0 +1,23 @@
1
+ <?xml-model href="cyklang.xsd" ?>
2
+ <module>
3
+ <object name="films_actors" />
4
+ <number name="index">2</number>
5
+ <while>
6
+ <condition>index > 0</condition>
7
+ <then>
8
+ <set name="index">index - 1</set>
9
+ <!-- <db.execute query="films_actors" result="films_actors">
10
+ <number name="length_from">60</number>
11
+ <number name="length_to">60</number>
12
+ </db.execute> -->
13
+ <db.runquery name="films_actors" result="films_actors">
14
+ <number name="length_from">60</number>
15
+ <number name="length_to">60</number>
16
+ </db.runquery>
17
+ <print>"index = "+index</print>
18
+ <sleep>5000</sleep>
19
+
20
+ </then>
21
+ </while>
22
+
23
+ </module>
@@ -0,0 +1,50 @@
1
+ obj2 <object name="selected">
2
+ </object>
3
+ <string name="command" literal="">new</string>
4
+ undefined = undefined
5
+ actor <string name="actor_id">
6
+ </string>
7
+ <string name="first_name">
8
+ </string>
9
+ ========
10
+ undefined
11
+ --------
12
+ condition actor.actor_id == undefined is true
13
+ undefined
14
+ actor.actor_id == undefined
15
+ ========= TEST OF COPY =======
16
+ init copie with source.copy()
17
+ copie first first orig, second second orig
18
+ after changing copie.first
19
+ source.first first orig, copie.first new first
20
+ source.second second orig, copie.second second orig
21
+ ========= TEST OF setValuesFrom =======
22
+ after source.setValuesFrom(copie)
23
+ source.first new first, copie.first new first
24
+ source.second second orig, copie.second second orig
25
+ ========= TEST OF newDBRow =======
26
+ actress <number name="actor_id">
27
+ </number>
28
+ <string name="first_name">
29
+ </string>
30
+ <string name="last_name">
31
+ </string>
32
+ <datetime name="last_update">
33
+ </datetime>
34
+ <string name="cyk_remark">
35
+ </string>
36
+ <boolean name="cyk_disable">
37
+ </boolean>
38
+ user1 <number name="user_id">
39
+ </number>
40
+ <string name="user_name">
41
+ </string>
42
+ <string name="user_email">
43
+ </string>
44
+ <string name="user_password">
45
+ </string>
46
+ <string name="user_access">
47
+ </string>
48
+ <string name="user_appli">
49
+ </string>
50
+ <boolean name="user_disable">false</boolean>
package/test/t14.xml ADDED
@@ -0,0 +1,82 @@
1
+ <?xml-model href="cyklang.xsd" ?>
2
+ <module>
3
+ <object name="obj1">
4
+ <string name="name">"obj1_name"</string>
5
+ </object>
6
+ <object name="obj2"></object>
7
+
8
+ <function name="funct" returns="result: object">
9
+ <object name="ret">
10
+ <object name='selected'/>
11
+ <string name='command'>'new'</string>
12
+ </object>
13
+ <block>
14
+ <set name="result"> ret </set>
15
+ </block>
16
+ </function>
17
+ <set name="obj2">funct()</set>
18
+ <print>"obj2 "+string(obj2)</print>
19
+
20
+ <print>"undefined = "+undefined</print>
21
+
22
+ <object name="actor">
23
+ <string name="actor_id"/>
24
+ <string name="first_name"/>
25
+ </object>
26
+ <print>"actor "+string(actor)</print>
27
+ <print>"========"</print>
28
+ <print>actor.actor_id</print>
29
+ <print>"--------"</print>
30
+ <if>
31
+ <condition>actor.actor_id == undefined</condition>
32
+ <then>
33
+ <print>"condition actor.actor_id == undefined is true"</print>
34
+ </then>
35
+ <else>
36
+ <print>"condition actor.actor_id == undefined is false"</print>
37
+ </else>
38
+ </if>
39
+ <print>actor.actor_id</print>
40
+ <print>"actor.actor_id == "+actor.actor_id</print>
41
+
42
+ <!-- actor.actor_id is undefined, set undefined to n1 -->
43
+
44
+ <number name="n1"/>
45
+ <set name="n1">actor.actor_id</set>
46
+
47
+ <!-- objectData.copy() duplicates each variable of objectData, returns new ObjectData -->
48
+ <print>"========= TEST OF COPY ======="</print>
49
+ <object name="source">
50
+ <string name="first">"first orig"</string>
51
+ <string name="second">"second orig"</string>
52
+ </object>
53
+ <object name="copie">
54
+ source.copy()
55
+ </object>
56
+
57
+ <set name="copie">source.copy()</set>
58
+
59
+ <print>"init copie with source.copy()"</print>
60
+ <print>"copie first "+ copie.first + ", second " + copie.second</print>
61
+
62
+ <set name="copie.first">"new first"</set>
63
+ <print>"after changing copie.first "</print>
64
+ <print>"source.first "+source.first +", copie.first "+copie.first</print>
65
+ <print>"source.second "+source.second +", copie.second "+copie.second</print>
66
+
67
+ <print>"========= TEST OF setValuesFrom ======="</print>
68
+
69
+ <set name="source">source.setValuesFrom(copie)</set>
70
+ <print>"after source.setValuesFrom(copie)"</print>
71
+ <print>"source.first "+source.first +", copie.first "+copie.first</print>
72
+ <print>"source.second "+source.second +", copie.second "+copie.second</print>
73
+
74
+ <print>"========= TEST OF newDBRow ======="</print>
75
+
76
+ <object name="actress">newDBRow("actor")</object>
77
+ <print>"actress "+string(actress)</print>
78
+
79
+ <object name="user1">newDBRow("cyk_user")</object>
80
+ <print>"user1 "+string(user1)</print>
81
+
82
+ </module>
package/test/t14.xsd ADDED
@@ -0,0 +1,102 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
3
+ <xs:element name="module">
4
+ <xs:complexType>
5
+ <xs:sequence>
6
+ <xs:element name="object" maxOccurs="unbounded">
7
+ <xs:complexType mixed="true">
8
+ <xs:sequence minOccurs="0">
9
+ <xs:element name="string" minOccurs="0">
10
+ <xs:complexType>
11
+ <xs:simpleContent>
12
+ <xs:extension base="xs:string">
13
+ <xs:attribute name="name" use="required" />
14
+ </xs:extension>
15
+ </xs:simpleContent>
16
+ </xs:complexType>
17
+ </xs:element>
18
+ </xs:sequence>
19
+ <xs:attribute name="name" use="required" />
20
+ </xs:complexType>
21
+ </xs:element>
22
+ <xs:element name="function">
23
+ <xs:complexType>
24
+ <xs:sequence>
25
+ <xs:element name="block">
26
+ <xs:complexType>
27
+ <xs:sequence>
28
+ <xs:element name="set">
29
+ <xs:complexType mixed="true">
30
+ <xs:sequence>
31
+ <xs:element name="object">
32
+ <xs:complexType>
33
+ <xs:sequence>
34
+ <xs:element name="object">
35
+ <xs:complexType>
36
+ <xs:attribute name="name" use="required" />
37
+ </xs:complexType>
38
+ </xs:element>
39
+ <xs:element name="string">
40
+ <xs:complexType>
41
+ <xs:simpleContent>
42
+ <xs:extension base="xs:string">
43
+ <xs:attribute name="name" use="required" />
44
+ </xs:extension>
45
+ </xs:simpleContent>
46
+ </xs:complexType>
47
+ </xs:element>
48
+ </xs:sequence>
49
+ </xs:complexType>
50
+ </xs:element>
51
+ </xs:sequence>
52
+ <xs:attribute name="name" use="required" />
53
+ </xs:complexType>
54
+ </xs:element>
55
+ </xs:sequence>
56
+ </xs:complexType>
57
+ </xs:element>
58
+ </xs:sequence>
59
+ <xs:attribute name="name" use="required" />
60
+ <xs:attribute name="returns" use="required" />
61
+ </xs:complexType>
62
+ </xs:element>
63
+ <xs:element name="set" maxOccurs="unbounded">
64
+ <xs:complexType>
65
+ <xs:simpleContent>
66
+ <xs:extension base="xs:string">
67
+ <xs:attribute name="name" use="required" />
68
+ </xs:extension>
69
+ </xs:simpleContent>
70
+ </xs:complexType>
71
+ </xs:element>
72
+ <xs:element name="print" maxOccurs="unbounded" type="xs:string" />
73
+ <xs:element name="if">
74
+ <xs:complexType>
75
+ <xs:sequence>
76
+ <xs:element name="condition" type="xs:string" />
77
+ <xs:element name="then">
78
+ <xs:complexType>
79
+ <xs:sequence>
80
+ <xs:element name="print" type="xs:string" />
81
+ </xs:sequence>
82
+ </xs:complexType>
83
+ </xs:element>
84
+ <xs:element name="else">
85
+ <xs:complexType>
86
+ <xs:sequence>
87
+ <xs:element name="print" type="xs:string" />
88
+ </xs:sequence>
89
+ </xs:complexType>
90
+ </xs:element>
91
+ </xs:sequence>
92
+ </xs:complexType>
93
+ </xs:element>
94
+ <xs:element name="number">
95
+ <xs:complexType>
96
+ <xs:attribute name="name" use="required" />
97
+ </xs:complexType>
98
+ </xs:element>
99
+ </xs:sequence>
100
+ </xs:complexType>
101
+ </xs:element>
102
+ </xs:schema>