-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcreateConstFile.tcl
77 lines (62 loc) · 1.98 KB
/
createConstFile.tcl
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
# Copyright: 2007-2015 Paul Obermeier ([email protected])
# Distributed under BSD license.
#
# This script can be used to create all enumeration constants for the Cawt
# Office modules.
# See the createConstFile.bat batch file for using this script to generate
# the enumerations of Excel, Word and PowerPoint.
if { $argc != 2 } {
puts ""
puts "Usage: $argv0 FullPathOfOfficeApplication Namespace"
puts ""
exit 1
}
set applName [lindex $argv 0]
set nsName [lindex $argv 1]
set shortApplName [join [lrange [file split $applName] 2 end] "/"]
set cawtDir [pwd]
set auto_path [linsert $auto_path 0 $cawtDir [file join $cawtDir "Externals"]]
package require twapi 4
# Workaround for loading ITypeLibProxy_from_path in Twapi 4.0 alpha.
catch { twapi::name_to_iid }
set typeLib [twapi::ITypeLibProxy_from_path $applName]
set allEnumDict [dict get [$typeLib @Read -type enum] enum]
puts "# Auto generated by createConstFile.tcl based on the type library"
puts "# of \"$shortApplName\"."
puts "#"
puts "# Copyright: 2007-2015 Paul Obermeier ([email protected])"
puts "# Distributed under BSD license."
puts ""
puts "namespace eval $nsName \{"
puts ""
puts " namespace ensemble create"
foreach enum [lsort [dict keys $allEnumDict]] {
puts ""
puts " # Enumeration $enum"
set enumDict [dict get $allEnumDict $enum]
set valueDict [dict get $enumDict "-values"]
foreach var [lsort [dict keys $valueDict]] {
puts " variable $var [dict get $valueDict $var]"
}
}
puts ""
puts " variable enums"
puts ""
puts " array set enums \{"
foreach enum [lsort [dict keys $allEnumDict]] {
puts -nonewline " $enum \{"
set enumDict [dict get $allEnumDict $enum]
set valueDict [dict get $enumDict "-values"]
foreach var [lsort [dict keys $valueDict]] {
puts -nonewline " $var [dict get $valueDict $var]"
}
puts " \}"
}
puts " \}"
set fp [open "constUtilProcs.tcl" "r"]
puts ""
puts [read $fp]
close $fp
puts "\}"
$typeLib Release
exit 0