blob: 3baa448f42fe7c3b748c68a3277d863bb1fe05db (
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
|
##ifdef CAMLTK
(* sp to avoid being picked up by doc scripts *)
type index_constrs =
CNumber
| CActiveElement
| CEnd
| CLast
| CNoIndex
| CInsert
| CSelFirst
| CSelLast
| CAt
| CAtXY
| CAnchorPoint
| CPattern
| CLineChar
| CMark
| CTagFirst
| CTagLast
| CEmbedded
;;
let index_any_table =
[CNumber; CActiveElement; CEnd; CLast; CNoIndex; CInsert; CSelFirst;
CSelLast; CAt; CAtXY; CAnchorPoint; CPattern; CLineChar;
CMark; CTagFirst; CTagLast; CEmbedded]
;;
let index_canvas_table =
[CNumber; CEnd; CInsert; CSelFirst; CSelLast; CAtXY]
;;
let index_entry_table =
[CNumber; CAnchorPoint; CEnd; CInsert; CSelFirst; CSelLast; CAt]
;;
let index_listbox_table =
[CNumber; CActiveElement; CAnchorPoint; CEnd; CAtXY]
;;
let index_menu_table =
[CNumber; CActiveElement; CEnd; CLast; CNoIndex; CAt; CPattern]
;;
let index_text_table =
[CLineChar; CAtXY; CEnd; CMark; CTagFirst; CTagLast; CEmbedded]
;;
let cCAMLtoTKindex table = function
Number x -> chk_sub "Number" table CNumber; TkToken (string_of_int x)
| ActiveElement -> chk_sub "ActiveElement" table CActiveElement; TkToken "active"
| End -> chk_sub "End" table CEnd; TkToken "end"
| Last -> chk_sub "Last" table CLast; TkToken "last"
| NoIndex -> chk_sub "NoIndex" table CNoIndex; TkToken "none"
| Insert -> chk_sub "Insert" table CInsert; TkToken "insert"
| SelFirst -> chk_sub "SelFirst" table CSelFirst; TkToken "sel.first"
| SelLast -> chk_sub "SelLast" table CSelLast; TkToken "sel.last"
| At n -> chk_sub "At" table CAt; TkToken ("@"^string_of_int n)
| AtXY (x,y) -> chk_sub "AtXY" table CAtXY;
TkToken ("@"^string_of_int x^","^string_of_int y)
| AnchorPoint -> chk_sub "AnchorPoint" table CAnchorPoint; TkToken "anchor"
| Pattern s -> chk_sub "Pattern" table CPattern; TkToken s
| LineChar (l,c) -> chk_sub "LineChar" table CLineChar;
TkToken (string_of_int l^"."^string_of_int c)
| Mark s -> chk_sub "Mark" table CMark; TkToken s
| TagFirst t -> chk_sub "TagFirst" table CTagFirst;
TkToken (t^".first")
| TagLast t -> chk_sub "TagLast" table CTagLast;
TkToken (t^".last")
| Embedded w -> chk_sub "Embedded" table CEmbedded;
cCAMLtoTKwidget widget_any_table w
;;
let char_index c s =
let rec find i =
if i >= String.length s
then raise Not_found
else if String.get s i = c then i
else find (i+1) in
find 0
;;
(* Assume returned values are only numerical and l.c *)
(* .menu index returns none if arg is none, but blast it *)
let cTKtoCAMLindex s =
try
let p = char_index '.' s in
LineChar(int_of_string (String.sub s 0 p),
int_of_string (String.sub s (p+1) (String.length s - p - 1)))
with
Not_found ->
try Number (int_of_string s)
with _ -> raise (Invalid_argument ("TKtoCAMLindex: "^s))
;;
##else
let cCAMLtoTKindex (* Don't put explicit typing *) = function
| `Num x -> TkToken (string_of_int x)
| `Active -> TkToken "active"
| `End -> TkToken "end"
| `Last -> TkToken "last"
| `None -> TkToken "none"
| `Insert -> TkToken "insert"
| `Selfirst -> TkToken "sel.first"
| `Sellast -> TkToken "sel.last"
| `At n -> TkToken ("@" ^ string_of_int n)
| `Atxy (x,y) -> TkToken ("@" ^ string_of_int x ^ "," ^ string_of_int y)
| `Anchor -> TkToken "anchor"
| `Pattern s -> TkToken s
| `Linechar (l,c) -> TkToken (string_of_int l ^ "." ^ string_of_int c)
| `Mark s -> TkToken s
| `Tagfirst t -> TkToken (t ^ ".first")
| `Taglast t -> TkToken (t ^ ".last")
| `Window (w : any widget) -> cCAMLtoTKwidget w
| `Image s -> TkToken s
;;
let cCAMLtoTKcanvas_index = (cCAMLtoTKindex : canvas_index -> tkArgs);;
let cCAMLtoTKentry_index = (cCAMLtoTKindex : entry_index -> tkArgs);;
let cCAMLtoTKlistbox_index = (cCAMLtoTKindex : listbox_index -> tkArgs);;
let cCAMLtoTKmenu_index = (cCAMLtoTKindex : menu_index -> tkArgs);;
let cCAMLtoTKtext_index = (cCAMLtoTKindex : text_index -> tkArgs);;
(* Assume returned values are only numerical and l.c *)
let cTKtoCAMLtext_index s =
try
let p = String.index s '.' in
`Linechar (int_of_string (String.sub s ~pos:0 ~len:p),
int_of_string (String.sub s ~pos:(p + 1)
~len:(String.length s - p - 1)))
with
Not_found ->
raise (Invalid_argument ("TKtoCAMLtext_index: " ^ s))
;;
let cTKtoCAMLlistbox_index s =
try `Num (int_of_string s)
with _ -> raise (Invalid_argument ("TKtoCAMLlistbox_index: " ^ s))
;;
##endif
|