summaryrefslogtreecommitdiff
path: root/external/lasso-builtins-generator-9.lasso
blob: 015629952635f78e18a2d604a138800b14f1daff (plain)
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#!/usr/bin/lasso9

/*
	Builtins Generator for Lasso 9

	This is the shell script that was used to extract Lasso 9's built-in keywords
	and generate most of the _lasso_builtins.py file. When run, it creates a file
	containing the types, traits, methods, and members of the currently-installed
	version of Lasso 9.

	A list of tags in Lasso 8 can be generated with this code:

	<?LassoScript
		local('l8tags' = list,
					'l8libs' = array('Cache','ChartFX','Client','Database','File','HTTP',
						'iCal','Lasso','Link','List','PDF','Response','Stock','String',
						'Thread','Valid','WAP','XML'));
		iterate(#l8libs, local('library'));
			local('result' = namespace_load(#library));
		/iterate;
		iterate(tags_list, local('i'));
			#l8tags->insert(string_removeleading(#i, -pattern='_global_'));
		/iterate;
		#l8tags->sort;
		iterate(#l8tags, local('i'));
			string_lowercase(#i)+"<br>";
		/iterate;

*/

output("This output statement is required for a complete list of methods.")
local(f) = file("_lasso_builtins-9.py")
#f->doWithClose => {

#f->openTruncate
#f->writeString('# -*- coding: utf-8 -*-
"""
    pygments.lexers._lasso_builtins
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Built-in Lasso types, traits, methods, and members.

    :copyright: Copyright 2006-'+date->year+' by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
"""

')

// Load and register contents of $LASSO9_MASTER_HOME/LassoModules/
database_initialize

// Load all of the libraries from builtins and lassoserver
// This forces all possible available types and methods to be registered
local(srcs =
	(:
		dir(sys_masterHomePath + '/LassoLibraries/builtins/')->eachFilePath,
		dir(sys_masterHomePath + '/LassoLibraries/lassoserver/')->eachFilePath
	)
)

with topLevelDir in delve(#srcs)
where not #topLevelDir->lastComponent->beginsWith('.')
do protect => {
	handle_error => {
		stdoutnl('Unable to load: ' + #topLevelDir + ' ' + error_msg)
	}
	library_thread_loader->loadLibrary(#topLevelDir)
	stdoutnl('Loaded: ' + #topLevelDir)
}

email_initialize
log_initialize
session_initialize

local(
	typesList = set(),
	traitsList = set(),
	unboundMethodsList = set(),
	memberMethodsList = set()
)

// types
with type in sys_listTypes
where not #type->asString->endsWith('$')		// skip threads
do {
	#typesList->insert(#type)
}

// traits
with trait in sys_listTraits
where not #trait->asString->beginsWith('$')		// skip combined traits
do {
	#traitsList->insert(#trait)
}

// member methods
with type in #typesList
do {
	with method in #type->getType->listMethods
	where #method->typeName == #type	 // skip inherited methods
	let name = #method->methodName
	where not #name->asString->endsWith('=')		// skip setter methods
	where #name->asString->isAlpha(1)		// skip unpublished methods
	do {
		#memberMethodsList->insert(#name)
	}
}
with trait in #traitsList
do {
	with method in #trait->getType->provides
	where #method->typeName == #trait		// skip inherited methods
	let name = #method->methodName
	where not #name->asString->endsWith('=')		// skip setter methods
	where #name->asString->isAlpha(1)		// skip unpublished methods
	do {
		#memberMethodsList->insert(#name)
	}
}

// unbound methods
with method in sys_listUnboundMethods
let name = #method->methodName
where not #name->asString->endsWith('=')		// skip setter methods
where #name->asString->isAlpha(1)		// skip unpublished methods
where #typesList !>> #name
where #traitsList !>> #name
do {
	#unboundMethodsList->insert(#name)
}

// write to file
with i in (:
	pair(#typesList, "BUILTINS = {
    'Types': (
"),
	pair(#traitsList, "    ),
    'Traits': (
"),
	pair(#unboundMethodsList, "    ),
    'Unbound Methods': (
"),
	pair(#memberMethodsList, "    )
}
MEMBERS = {
    'Member Methods': (
")
)
do {
	#f->writeString(#i->second)
	with t in (#i->first)
	let ts = #t->asString
	order by #ts
	do {
		#f->writeString("        '"+#ts->lowercase&asString+"',\n")
	}
}

#f->writeString("    )
}
")

}