tk 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1060) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.travis.yml +6 -0
  4. data/BSDL +22 -0
  5. data/ChangeLog.tkextlib +949 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +56 -0
  8. data/MANUAL_tcltklib.eng +467 -0
  9. data/MANUAL_tcltklib.ja +578 -0
  10. data/README.1st +19 -0
  11. data/README.ActiveTcl +62 -0
  12. data/README.fork +34 -0
  13. data/README.macosx-aqua +67 -0
  14. data/README.md +33 -0
  15. data/README.tcltklib +152 -0
  16. data/Rakefile +16 -0
  17. data/bin/console +14 -0
  18. data/bin/setup +8 -0
  19. data/ext/tk/config_list.in +41 -0
  20. data/ext/tk/extconf.rb +2098 -0
  21. data/ext/tk/old-extconf.rb +441 -0
  22. data/ext/tk/stubs.c +592 -0
  23. data/ext/tk/stubs.h +33 -0
  24. data/ext/tk/tcltklib.c +11066 -0
  25. data/ext/tk/tkutil/extconf.rb +14 -0
  26. data/ext/tk/tkutil/tkutil.c +1900 -0
  27. data/lib/README +30 -0
  28. data/lib/multi-tk.rb +3743 -0
  29. data/lib/remote-tk.rb +527 -0
  30. data/lib/tcltk.rb +369 -0
  31. data/lib/tk.rb +5758 -0
  32. data/lib/tk/after.rb +7 -0
  33. data/lib/tk/autoload.rb +763 -0
  34. data/lib/tk/bgerror.rb +30 -0
  35. data/lib/tk/bindtag.rb +139 -0
  36. data/lib/tk/busy.rb +119 -0
  37. data/lib/tk/button.rb +32 -0
  38. data/lib/tk/canvas.rb +847 -0
  39. data/lib/tk/canvastag.rb +460 -0
  40. data/lib/tk/checkbutton.rb +33 -0
  41. data/lib/tk/clipboard.rb +76 -0
  42. data/lib/tk/clock.rb +72 -0
  43. data/lib/tk/composite.rb +485 -0
  44. data/lib/tk/console.rb +53 -0
  45. data/lib/tk/dialog.rb +327 -0
  46. data/lib/tk/encodedstr.rb +188 -0
  47. data/lib/tk/entry.rb +121 -0
  48. data/lib/tk/event.rb +563 -0
  49. data/lib/tk/font.rb +2352 -0
  50. data/lib/tk/fontchooser.rb +181 -0
  51. data/lib/tk/frame.rb +133 -0
  52. data/lib/tk/grid.rb +280 -0
  53. data/lib/tk/image.rb +396 -0
  54. data/lib/tk/itemconfig.rb +1222 -0
  55. data/lib/tk/itemfont.rb +328 -0
  56. data/lib/tk/kinput.rb +72 -0
  57. data/lib/tk/label.rb +23 -0
  58. data/lib/tk/labelframe.rb +32 -0
  59. data/lib/tk/listbox.rb +285 -0
  60. data/lib/tk/macpkg.rb +81 -0
  61. data/lib/tk/menu.rb +719 -0
  62. data/lib/tk/menubar.rb +138 -0
  63. data/lib/tk/menuspec.rb +457 -0
  64. data/lib/tk/message.rb +25 -0
  65. data/lib/tk/mngfocus.rb +34 -0
  66. data/lib/tk/msgcat.rb +300 -0
  67. data/lib/tk/namespace.rb +547 -0
  68. data/lib/tk/optiondb.rb +372 -0
  69. data/lib/tk/optionobj.rb +213 -0
  70. data/lib/tk/pack.rb +108 -0
  71. data/lib/tk/package.rb +144 -0
  72. data/lib/tk/palette.rb +56 -0
  73. data/lib/tk/panedwindow.rb +261 -0
  74. data/lib/tk/place.rb +129 -0
  75. data/lib/tk/radiobutton.rb +74 -0
  76. data/lib/tk/root.rb +96 -0
  77. data/lib/tk/scale.rb +113 -0
  78. data/lib/tk/scrollable.rb +83 -0
  79. data/lib/tk/scrollbar.rb +184 -0
  80. data/lib/tk/scrollbox.rb +40 -0
  81. data/lib/tk/selection.rb +87 -0
  82. data/lib/tk/spinbox.rb +145 -0
  83. data/lib/tk/tagfont.rb +44 -0
  84. data/lib/tk/text.rb +1605 -0
  85. data/lib/tk/textimage.rb +89 -0
  86. data/lib/tk/textmark.rb +205 -0
  87. data/lib/tk/texttag.rb +322 -0
  88. data/lib/tk/textwindow.rb +155 -0
  89. data/lib/tk/timer.rb +666 -0
  90. data/lib/tk/tk_mac.rb +159 -0
  91. data/lib/tk/toplevel.rb +265 -0
  92. data/lib/tk/ttk_selector.rb +99 -0
  93. data/lib/tk/txtwin_abst.rb +40 -0
  94. data/lib/tk/validation.rb +398 -0
  95. data/lib/tk/variable.rb +1797 -0
  96. data/lib/tk/virtevent.rb +140 -0
  97. data/lib/tk/winfo.rb +393 -0
  98. data/lib/tk/winpkg.rb +157 -0
  99. data/lib/tk/wm.rb +553 -0
  100. data/lib/tk/xim.rb +123 -0
  101. data/lib/tkafter.rb +5 -0
  102. data/lib/tkbgerror.rb +5 -0
  103. data/lib/tkcanvas.rb +5 -0
  104. data/lib/tkclass.rb +48 -0
  105. data/lib/tkconsole.rb +5 -0
  106. data/lib/tkdialog.rb +5 -0
  107. data/lib/tkentry.rb +5 -0
  108. data/lib/tkextlib/ICONS.rb +14 -0
  109. data/lib/tkextlib/ICONS/icons.rb +130 -0
  110. data/lib/tkextlib/ICONS/setup.rb +9 -0
  111. data/lib/tkextlib/SUPPORT_STATUS +193 -0
  112. data/lib/tkextlib/blt.rb +190 -0
  113. data/lib/tkextlib/blt/barchart.rb +80 -0
  114. data/lib/tkextlib/blt/bitmap.rb +113 -0
  115. data/lib/tkextlib/blt/busy.rb +84 -0
  116. data/lib/tkextlib/blt/component.rb +2219 -0
  117. data/lib/tkextlib/blt/container.rb +29 -0
  118. data/lib/tkextlib/blt/cutbuffer.rb +24 -0
  119. data/lib/tkextlib/blt/dragdrop.rb +270 -0
  120. data/lib/tkextlib/blt/eps.rb +33 -0
  121. data/lib/tkextlib/blt/graph.rb +68 -0
  122. data/lib/tkextlib/blt/htext.rb +113 -0
  123. data/lib/tkextlib/blt/setup.rb +9 -0
  124. data/lib/tkextlib/blt/spline.rb +24 -0
  125. data/lib/tkextlib/blt/stripchart.rb +75 -0
  126. data/lib/tkextlib/blt/table.rb +413 -0
  127. data/lib/tkextlib/blt/tabnotebook.rb +111 -0
  128. data/lib/tkextlib/blt/tabset.rb +505 -0
  129. data/lib/tkextlib/blt/ted.rb +69 -0
  130. data/lib/tkextlib/blt/tile.rb +26 -0
  131. data/lib/tkextlib/blt/tile/button.rb +17 -0
  132. data/lib/tkextlib/blt/tile/checkbutton.rb +18 -0
  133. data/lib/tkextlib/blt/tile/frame.rb +17 -0
  134. data/lib/tkextlib/blt/tile/label.rb +17 -0
  135. data/lib/tkextlib/blt/tile/radiobutton.rb +18 -0
  136. data/lib/tkextlib/blt/tile/scrollbar.rb +17 -0
  137. data/lib/tkextlib/blt/tile/toplevel.rb +17 -0
  138. data/lib/tkextlib/blt/tree.rb +1059 -0
  139. data/lib/tkextlib/blt/treeview.rb +1288 -0
  140. data/lib/tkextlib/blt/unix_dnd.rb +142 -0
  141. data/lib/tkextlib/blt/vector.rb +257 -0
  142. data/lib/tkextlib/blt/watch.rb +176 -0
  143. data/lib/tkextlib/blt/win_printer.rb +62 -0
  144. data/lib/tkextlib/blt/winop.rb +108 -0
  145. data/lib/tkextlib/bwidget.rb +154 -0
  146. data/lib/tkextlib/bwidget/arrowbutton.rb +22 -0
  147. data/lib/tkextlib/bwidget/bitmap.rb +22 -0
  148. data/lib/tkextlib/bwidget/button.rb +32 -0
  149. data/lib/tkextlib/bwidget/buttonbox.rb +91 -0
  150. data/lib/tkextlib/bwidget/combobox.rb +63 -0
  151. data/lib/tkextlib/bwidget/dialog.rb +195 -0
  152. data/lib/tkextlib/bwidget/dragsite.rb +32 -0
  153. data/lib/tkextlib/bwidget/dropsite.rb +40 -0
  154. data/lib/tkextlib/bwidget/dynamichelp.rb +64 -0
  155. data/lib/tkextlib/bwidget/entry.rb +44 -0
  156. data/lib/tkextlib/bwidget/label.rb +42 -0
  157. data/lib/tkextlib/bwidget/labelentry.rb +81 -0
  158. data/lib/tkextlib/bwidget/labelframe.rb +53 -0
  159. data/lib/tkextlib/bwidget/listbox.rb +362 -0
  160. data/lib/tkextlib/bwidget/mainframe.rb +133 -0
  161. data/lib/tkextlib/bwidget/messagedlg.rb +193 -0
  162. data/lib/tkextlib/bwidget/notebook.rb +167 -0
  163. data/lib/tkextlib/bwidget/pagesmanager.rb +74 -0
  164. data/lib/tkextlib/bwidget/panedwindow.rb +43 -0
  165. data/lib/tkextlib/bwidget/panelframe.rb +68 -0
  166. data/lib/tkextlib/bwidget/passwddlg.rb +45 -0
  167. data/lib/tkextlib/bwidget/progressbar.rb +21 -0
  168. data/lib/tkextlib/bwidget/progressdlg.rb +59 -0
  169. data/lib/tkextlib/bwidget/scrollableframe.rb +41 -0
  170. data/lib/tkextlib/bwidget/scrolledwindow.rb +49 -0
  171. data/lib/tkextlib/bwidget/scrollview.rb +26 -0
  172. data/lib/tkextlib/bwidget/selectcolor.rb +74 -0
  173. data/lib/tkextlib/bwidget/selectfont.rb +92 -0
  174. data/lib/tkextlib/bwidget/separator.rb +21 -0
  175. data/lib/tkextlib/bwidget/setup.rb +9 -0
  176. data/lib/tkextlib/bwidget/spinbox.rb +99 -0
  177. data/lib/tkextlib/bwidget/statusbar.rb +63 -0
  178. data/lib/tkextlib/bwidget/titleframe.rb +34 -0
  179. data/lib/tkextlib/bwidget/tree.rb +501 -0
  180. data/lib/tkextlib/bwidget/widget.rb +130 -0
  181. data/lib/tkextlib/itcl.rb +14 -0
  182. data/lib/tkextlib/itcl/incr_tcl.rb +179 -0
  183. data/lib/tkextlib/itcl/setup.rb +14 -0
  184. data/lib/tkextlib/itk.rb +14 -0
  185. data/lib/tkextlib/itk/incr_tk.rb +447 -0
  186. data/lib/tkextlib/itk/setup.rb +14 -0
  187. data/lib/tkextlib/iwidgets.rb +95 -0
  188. data/lib/tkextlib/iwidgets/buttonbox.rb +122 -0
  189. data/lib/tkextlib/iwidgets/calendar.rb +126 -0
  190. data/lib/tkextlib/iwidgets/canvasprintbox.rb +54 -0
  191. data/lib/tkextlib/iwidgets/canvasprintdialog.rb +39 -0
  192. data/lib/tkextlib/iwidgets/checkbox.rb +131 -0
  193. data/lib/tkextlib/iwidgets/combobox.rb +105 -0
  194. data/lib/tkextlib/iwidgets/dateentry.rb +21 -0
  195. data/lib/tkextlib/iwidgets/datefield.rb +59 -0
  196. data/lib/tkextlib/iwidgets/dialog.rb +21 -0
  197. data/lib/tkextlib/iwidgets/dialogshell.rb +122 -0
  198. data/lib/tkextlib/iwidgets/disjointlistbox.rb +51 -0
  199. data/lib/tkextlib/iwidgets/entryfield.rb +186 -0
  200. data/lib/tkextlib/iwidgets/extbutton.rb +41 -0
  201. data/lib/tkextlib/iwidgets/extfileselectionbox.rb +47 -0
  202. data/lib/tkextlib/iwidgets/extfileselectiondialog.rb +34 -0
  203. data/lib/tkextlib/iwidgets/feedback.rb +36 -0
  204. data/lib/tkextlib/iwidgets/fileselectionbox.rb +47 -0
  205. data/lib/tkextlib/iwidgets/fileselectiondialog.rb +34 -0
  206. data/lib/tkextlib/iwidgets/finddialog.rb +43 -0
  207. data/lib/tkextlib/iwidgets/hierarchy.rb +366 -0
  208. data/lib/tkextlib/iwidgets/hyperhelp.rb +51 -0
  209. data/lib/tkextlib/iwidgets/labeledframe.rb +40 -0
  210. data/lib/tkextlib/iwidgets/labeledwidget.rb +46 -0
  211. data/lib/tkextlib/iwidgets/mainwindow.rb +68 -0
  212. data/lib/tkextlib/iwidgets/menubar.rb +213 -0
  213. data/lib/tkextlib/iwidgets/messagebox.rb +94 -0
  214. data/lib/tkextlib/iwidgets/messagedialog.rb +21 -0
  215. data/lib/tkextlib/iwidgets/notebook.rb +176 -0
  216. data/lib/tkextlib/iwidgets/optionmenu.rb +93 -0
  217. data/lib/tkextlib/iwidgets/panedwindow.rb +135 -0
  218. data/lib/tkextlib/iwidgets/promptdialog.rb +132 -0
  219. data/lib/tkextlib/iwidgets/pushbutton.rb +36 -0
  220. data/lib/tkextlib/iwidgets/radiobox.rb +122 -0
  221. data/lib/tkextlib/iwidgets/scopedobject.rb +25 -0
  222. data/lib/tkextlib/iwidgets/scrolledcanvas.rb +354 -0
  223. data/lib/tkextlib/iwidgets/scrolledframe.rb +60 -0
  224. data/lib/tkextlib/iwidgets/scrolledhtml.rb +59 -0
  225. data/lib/tkextlib/iwidgets/scrolledlistbox.rb +208 -0
  226. data/lib/tkextlib/iwidgets/scrolledtext.rb +569 -0
  227. data/lib/tkextlib/iwidgets/scrolledwidget.rb +21 -0
  228. data/lib/tkextlib/iwidgets/selectionbox.rb +103 -0
  229. data/lib/tkextlib/iwidgets/selectiondialog.rb +93 -0
  230. data/lib/tkextlib/iwidgets/setup.rb +9 -0
  231. data/lib/tkextlib/iwidgets/shell.rb +39 -0
  232. data/lib/tkextlib/iwidgets/spindate.rb +49 -0
  233. data/lib/tkextlib/iwidgets/spinint.rb +31 -0
  234. data/lib/tkextlib/iwidgets/spinner.rb +170 -0
  235. data/lib/tkextlib/iwidgets/spintime.rb +49 -0
  236. data/lib/tkextlib/iwidgets/tabnotebook.rb +182 -0
  237. data/lib/tkextlib/iwidgets/tabset.rb +146 -0
  238. data/lib/tkextlib/iwidgets/timeentry.rb +26 -0
  239. data/lib/tkextlib/iwidgets/timefield.rb +59 -0
  240. data/lib/tkextlib/iwidgets/toolbar.rb +113 -0
  241. data/lib/tkextlib/iwidgets/watch.rb +57 -0
  242. data/lib/tkextlib/pkg_checker.rb +185 -0
  243. data/lib/tkextlib/setup.rb +9 -0
  244. data/lib/tkextlib/tcllib.rb +106 -0
  245. data/lib/tkextlib/tcllib/README +135 -0
  246. data/lib/tkextlib/tcllib/autoscroll.rb +159 -0
  247. data/lib/tkextlib/tcllib/calendar.rb +56 -0
  248. data/lib/tkextlib/tcllib/canvas_sqmap.rb +37 -0
  249. data/lib/tkextlib/tcllib/canvas_zoom.rb +22 -0
  250. data/lib/tkextlib/tcllib/chatwidget.rb +152 -0
  251. data/lib/tkextlib/tcllib/crosshair.rb +118 -0
  252. data/lib/tkextlib/tcllib/ctext.rb +161 -0
  253. data/lib/tkextlib/tcllib/cursor.rb +98 -0
  254. data/lib/tkextlib/tcllib/dateentry.rb +63 -0
  255. data/lib/tkextlib/tcllib/datefield.rb +58 -0
  256. data/lib/tkextlib/tcllib/diagrams.rb +225 -0
  257. data/lib/tkextlib/tcllib/dialog.rb +85 -0
  258. data/lib/tkextlib/tcllib/getstring.rb +135 -0
  259. data/lib/tkextlib/tcllib/history.rb +74 -0
  260. data/lib/tkextlib/tcllib/ico.rb +147 -0
  261. data/lib/tkextlib/tcllib/ip_entry.rb +76 -0
  262. data/lib/tkextlib/tcllib/khim.rb +69 -0
  263. data/lib/tkextlib/tcllib/menuentry.rb +48 -0
  264. data/lib/tkextlib/tcllib/ntext.rb +147 -0
  265. data/lib/tkextlib/tcllib/panelframe.rb +79 -0
  266. data/lib/tkextlib/tcllib/plotchart.rb +1405 -0
  267. data/lib/tkextlib/tcllib/ruler.rb +66 -0
  268. data/lib/tkextlib/tcllib/screenruler.rb +69 -0
  269. data/lib/tkextlib/tcllib/scrolledwindow.rb +58 -0
  270. data/lib/tkextlib/tcllib/scrollwin.rb +62 -0
  271. data/lib/tkextlib/tcllib/setup.rb +9 -0
  272. data/lib/tkextlib/tcllib/statusbar.rb +80 -0
  273. data/lib/tkextlib/tcllib/style.rb +62 -0
  274. data/lib/tkextlib/tcllib/superframe.rb +52 -0
  275. data/lib/tkextlib/tcllib/swaplist.rb +151 -0
  276. data/lib/tkextlib/tcllib/tablelist.rb +29 -0
  277. data/lib/tkextlib/tcllib/tablelist_core.rb +1073 -0
  278. data/lib/tkextlib/tcllib/tablelist_tile.rb +44 -0
  279. data/lib/tkextlib/tcllib/tkpiechart.rb +315 -0
  280. data/lib/tkextlib/tcllib/toolbar.rb +176 -0
  281. data/lib/tkextlib/tcllib/tooltip.rb +105 -0
  282. data/lib/tkextlib/tcllib/validator.rb +66 -0
  283. data/lib/tkextlib/tcllib/widget.rb +83 -0
  284. data/lib/tkextlib/tclx.rb +14 -0
  285. data/lib/tkextlib/tclx/setup.rb +9 -0
  286. data/lib/tkextlib/tclx/tclx.rb +75 -0
  287. data/lib/tkextlib/tile.rb +450 -0
  288. data/lib/tkextlib/tile/dialog.rb +103 -0
  289. data/lib/tkextlib/tile/setup.rb +9 -0
  290. data/lib/tkextlib/tile/sizegrip.rb +33 -0
  291. data/lib/tkextlib/tile/style.rb +337 -0
  292. data/lib/tkextlib/tile/tbutton.rb +35 -0
  293. data/lib/tkextlib/tile/tcheckbutton.rb +39 -0
  294. data/lib/tkextlib/tile/tcombobox.rb +56 -0
  295. data/lib/tkextlib/tile/tentry.rb +50 -0
  296. data/lib/tkextlib/tile/tframe.rb +35 -0
  297. data/lib/tkextlib/tile/tlabel.rb +35 -0
  298. data/lib/tkextlib/tile/tlabelframe.rb +39 -0
  299. data/lib/tkextlib/tile/tmenubutton.rb +39 -0
  300. data/lib/tkextlib/tile/tnotebook.rb +148 -0
  301. data/lib/tkextlib/tile/tpaned.rb +246 -0
  302. data/lib/tkextlib/tile/tprogressbar.rb +58 -0
  303. data/lib/tkextlib/tile/tradiobutton.rb +39 -0
  304. data/lib/tkextlib/tile/treeview.rb +1337 -0
  305. data/lib/tkextlib/tile/tscale.rb +57 -0
  306. data/lib/tkextlib/tile/tscrollbar.rb +64 -0
  307. data/lib/tkextlib/tile/tseparator.rb +35 -0
  308. data/lib/tkextlib/tile/tspinbox.rb +108 -0
  309. data/lib/tkextlib/tile/tsquare.rb +31 -0
  310. data/lib/tkextlib/tkDND.rb +19 -0
  311. data/lib/tkextlib/tkDND/setup.rb +9 -0
  312. data/lib/tkextlib/tkDND/shape.rb +126 -0
  313. data/lib/tkextlib/tkDND/tkdnd.rb +183 -0
  314. data/lib/tkextlib/tkHTML.rb +14 -0
  315. data/lib/tkextlib/tkHTML/htmlwidget.rb +454 -0
  316. data/lib/tkextlib/tkHTML/setup.rb +9 -0
  317. data/lib/tkextlib/tkimg.rb +37 -0
  318. data/lib/tkextlib/tkimg/README +26 -0
  319. data/lib/tkextlib/tkimg/bmp.rb +34 -0
  320. data/lib/tkextlib/tkimg/dted.rb +34 -0
  321. data/lib/tkextlib/tkimg/gif.rb +34 -0
  322. data/lib/tkextlib/tkimg/ico.rb +34 -0
  323. data/lib/tkextlib/tkimg/jpeg.rb +34 -0
  324. data/lib/tkextlib/tkimg/pcx.rb +34 -0
  325. data/lib/tkextlib/tkimg/pixmap.rb +45 -0
  326. data/lib/tkextlib/tkimg/png.rb +34 -0
  327. data/lib/tkextlib/tkimg/ppm.rb +34 -0
  328. data/lib/tkextlib/tkimg/ps.rb +34 -0
  329. data/lib/tkextlib/tkimg/raw.rb +34 -0
  330. data/lib/tkextlib/tkimg/setup.rb +9 -0
  331. data/lib/tkextlib/tkimg/sgi.rb +34 -0
  332. data/lib/tkextlib/tkimg/sun.rb +34 -0
  333. data/lib/tkextlib/tkimg/tga.rb +34 -0
  334. data/lib/tkextlib/tkimg/tiff.rb +34 -0
  335. data/lib/tkextlib/tkimg/window.rb +34 -0
  336. data/lib/tkextlib/tkimg/xbm.rb +34 -0
  337. data/lib/tkextlib/tkimg/xpm.rb +34 -0
  338. data/lib/tkextlib/tktable.rb +15 -0
  339. data/lib/tkextlib/tktable/setup.rb +9 -0
  340. data/lib/tkextlib/tktable/tktable.rb +967 -0
  341. data/lib/tkextlib/tktrans.rb +15 -0
  342. data/lib/tkextlib/tktrans/setup.rb +9 -0
  343. data/lib/tkextlib/tktrans/tktrans.rb +65 -0
  344. data/lib/tkextlib/treectrl.rb +14 -0
  345. data/lib/tkextlib/treectrl/setup.rb +9 -0
  346. data/lib/tkextlib/treectrl/tktreectrl.rb +2523 -0
  347. data/lib/tkextlib/trofs.rb +14 -0
  348. data/lib/tkextlib/trofs/setup.rb +9 -0
  349. data/lib/tkextlib/trofs/trofs.rb +52 -0
  350. data/lib/tkextlib/version.rb +7 -0
  351. data/lib/tkextlib/vu.rb +49 -0
  352. data/lib/tkextlib/vu/bargraph.rb +62 -0
  353. data/lib/tkextlib/vu/charts.rb +54 -0
  354. data/lib/tkextlib/vu/dial.rb +103 -0
  355. data/lib/tkextlib/vu/pie.rb +287 -0
  356. data/lib/tkextlib/vu/setup.rb +9 -0
  357. data/lib/tkextlib/vu/spinbox.rb +23 -0
  358. data/lib/tkextlib/winico.rb +15 -0
  359. data/lib/tkextlib/winico/setup.rb +9 -0
  360. data/lib/tkextlib/winico/winico.rb +225 -0
  361. data/lib/tkfont.rb +5 -0
  362. data/lib/tkmacpkg.rb +5 -0
  363. data/lib/tkmenubar.rb +5 -0
  364. data/lib/tkmngfocus.rb +5 -0
  365. data/lib/tkpalette.rb +5 -0
  366. data/lib/tkscrollbox.rb +5 -0
  367. data/lib/tktext.rb +5 -0
  368. data/lib/tkvirtevent.rb +5 -0
  369. data/lib/tkwinpkg.rb +5 -0
  370. data/old-README.tcltklib.ja +159 -0
  371. data/sample/24hr_clock.rb +287 -0
  372. data/sample/binding_sample.rb +88 -0
  373. data/sample/bindtag_sample.rb +128 -0
  374. data/sample/binstr_usage.rb +46 -0
  375. data/sample/btn_with_frame.rb +21 -0
  376. data/sample/cd_timer.rb +82 -0
  377. data/sample/cmd_res_test.rb +18 -0
  378. data/sample/cmd_resource +5 -0
  379. data/sample/demos-en/ChangeLog +64 -0
  380. data/sample/demos-en/ChangeLog.prev +9 -0
  381. data/sample/demos-en/README +138 -0
  382. data/sample/demos-en/README.1st +18 -0
  383. data/sample/demos-en/README.tkencoding +29 -0
  384. data/sample/demos-en/anilabel.rb +175 -0
  385. data/sample/demos-en/aniwave.rb +119 -0
  386. data/sample/demos-en/arrow.rb +250 -0
  387. data/sample/demos-en/bind.rb +128 -0
  388. data/sample/demos-en/bitmap.rb +76 -0
  389. data/sample/demos-en/browse1 +63 -0
  390. data/sample/demos-en/browse2 +82 -0
  391. data/sample/demos-en/button.rb +85 -0
  392. data/sample/demos-en/check.rb +73 -0
  393. data/sample/demos-en/check2.rb +110 -0
  394. data/sample/demos-en/clrpick.rb +88 -0
  395. data/sample/demos-en/colors.rb +159 -0
  396. data/sample/demos-en/combo.rb +97 -0
  397. data/sample/demos-en/cscroll.rb +137 -0
  398. data/sample/demos-en/ctext.rb +208 -0
  399. data/sample/demos-en/dialog1.rb +39 -0
  400. data/sample/demos-en/dialog2.rb +42 -0
  401. data/sample/demos-en/doc.org/README +7 -0
  402. data/sample/demos-en/doc.org/README.JP +14 -0
  403. data/sample/demos-en/doc.org/README.tk80 +46 -0
  404. data/sample/demos-en/doc.org/license.terms +39 -0
  405. data/sample/demos-en/doc.org/license.terms.tk80 +39 -0
  406. data/sample/demos-en/entry1.rb +59 -0
  407. data/sample/demos-en/entry2.rb +94 -0
  408. data/sample/demos-en/entry3.rb +221 -0
  409. data/sample/demos-en/filebox.rb +103 -0
  410. data/sample/demos-en/floor.rb +1724 -0
  411. data/sample/demos-en/floor2.rb +1723 -0
  412. data/sample/demos-en/form.rb +65 -0
  413. data/sample/demos-en/goldberg.rb +2007 -0
  414. data/sample/demos-en/hello +14 -0
  415. data/sample/demos-en/hscale.rb +76 -0
  416. data/sample/demos-en/icon.rb +106 -0
  417. data/sample/demos-en/image1.rb +66 -0
  418. data/sample/demos-en/image2.rb +108 -0
  419. data/sample/demos-en/image3.rb +126 -0
  420. data/sample/demos-en/items.rb +382 -0
  421. data/sample/demos-en/ixset +333 -0
  422. data/sample/demos-en/ixset2 +367 -0
  423. data/sample/demos-en/knightstour.rb +272 -0
  424. data/sample/demos-en/label.rb +73 -0
  425. data/sample/demos-en/labelframe.rb +96 -0
  426. data/sample/demos-en/mclist.rb +118 -0
  427. data/sample/demos-en/menu.rb +197 -0
  428. data/sample/demos-en/menu84.rb +216 -0
  429. data/sample/demos-en/menubu.rb +238 -0
  430. data/sample/demos-en/msgbox.rb +91 -0
  431. data/sample/demos-en/msgbox2.rb +92 -0
  432. data/sample/demos-en/paned1.rb +48 -0
  433. data/sample/demos-en/paned2.rb +95 -0
  434. data/sample/demos-en/pendulum.rb +241 -0
  435. data/sample/demos-en/plot.rb +125 -0
  436. data/sample/demos-en/puzzle.rb +135 -0
  437. data/sample/demos-en/radio.rb +87 -0
  438. data/sample/demos-en/radio2.rb +110 -0
  439. data/sample/demos-en/radio3.rb +118 -0
  440. data/sample/demos-en/rmt +268 -0
  441. data/sample/demos-en/rolodex +320 -0
  442. data/sample/demos-en/ruler.rb +206 -0
  443. data/sample/demos-en/sayings.rb +107 -0
  444. data/sample/demos-en/search.rb +188 -0
  445. data/sample/demos-en/spin.rb +66 -0
  446. data/sample/demos-en/square +81 -0
  447. data/sample/demos-en/states.rb +81 -0
  448. data/sample/demos-en/style.rb +232 -0
  449. data/sample/demos-en/tcolor +526 -0
  450. data/sample/demos-en/text.rb +129 -0
  451. data/sample/demos-en/textpeer.rb +77 -0
  452. data/sample/demos-en/timer +136 -0
  453. data/sample/demos-en/tkencoding.rb +43 -0
  454. data/sample/demos-en/toolbar.rb +131 -0
  455. data/sample/demos-en/tree.rb +120 -0
  456. data/sample/demos-en/ttkbut.rb +140 -0
  457. data/sample/demos-en/ttkmenu.rb +86 -0
  458. data/sample/demos-en/ttknote.rb +90 -0
  459. data/sample/demos-en/ttkpane.rb +214 -0
  460. data/sample/demos-en/ttkprogress.rb +67 -0
  461. data/sample/demos-en/twind.rb +292 -0
  462. data/sample/demos-en/twind2.rb +385 -0
  463. data/sample/demos-en/unicodeout.rb +115 -0
  464. data/sample/demos-en/vscale.rb +80 -0
  465. data/sample/demos-en/widget +1087 -0
  466. data/sample/demos-jp/README +54 -0
  467. data/sample/demos-jp/README.1st +20 -0
  468. data/sample/demos-jp/anilabel.rb +178 -0
  469. data/sample/demos-jp/aniwave.rb +121 -0
  470. data/sample/demos-jp/arrow.rb +248 -0
  471. data/sample/demos-jp/bind.rb +126 -0
  472. data/sample/demos-jp/bitmap.rb +75 -0
  473. data/sample/demos-jp/browse1 +63 -0
  474. data/sample/demos-jp/browse2 +82 -0
  475. data/sample/demos-jp/button.rb +84 -0
  476. data/sample/demos-jp/check.rb +71 -0
  477. data/sample/demos-jp/check2.rb +111 -0
  478. data/sample/demos-jp/clrpick.rb +85 -0
  479. data/sample/demos-jp/colors.rb +156 -0
  480. data/sample/demos-jp/combo.rb +99 -0
  481. data/sample/demos-jp/cscroll.rb +135 -0
  482. data/sample/demos-jp/ctext.rb +205 -0
  483. data/sample/demos-jp/dialog1.rb +40 -0
  484. data/sample/demos-jp/dialog2.rb +44 -0
  485. data/sample/demos-jp/doc.org/README +7 -0
  486. data/sample/demos-jp/doc.org/README.JP +14 -0
  487. data/sample/demos-jp/doc.org/README.tk80 +46 -0
  488. data/sample/demos-jp/doc.org/license.terms +39 -0
  489. data/sample/demos-jp/doc.org/license.terms.tk80 +39 -0
  490. data/sample/demos-jp/entry1.rb +61 -0
  491. data/sample/demos-jp/entry2.rb +92 -0
  492. data/sample/demos-jp/entry3.rb +226 -0
  493. data/sample/demos-jp/filebox.rb +103 -0
  494. data/sample/demos-jp/floor.rb +1722 -0
  495. data/sample/demos-jp/floor2.rb +1720 -0
  496. data/sample/demos-jp/form.rb +67 -0
  497. data/sample/demos-jp/goldberg.rb +2012 -0
  498. data/sample/demos-jp/hello +10 -0
  499. data/sample/demos-jp/hscale.rb +79 -0
  500. data/sample/demos-jp/icon.rb +104 -0
  501. data/sample/demos-jp/image1.rb +65 -0
  502. data/sample/demos-jp/image2.rb +107 -0
  503. data/sample/demos-jp/image3.rb +128 -0
  504. data/sample/demos-jp/items.rb +380 -0
  505. data/sample/demos-jp/ixset +333 -0
  506. data/sample/demos-jp/ixset2 +369 -0
  507. data/sample/demos-jp/knightstour.rb +274 -0
  508. data/sample/demos-jp/label.rb +70 -0
  509. data/sample/demos-jp/labelframe.rb +103 -0
  510. data/sample/demos-jp/mclist.rb +122 -0
  511. data/sample/demos-jp/menu.rb +202 -0
  512. data/sample/demos-jp/menu84.rb +214 -0
  513. data/sample/demos-jp/menu8x.rb +234 -0
  514. data/sample/demos-jp/menubu.rb +239 -0
  515. data/sample/demos-jp/msgbox.rb +90 -0
  516. data/sample/demos-jp/msgbox2.rb +91 -0
  517. data/sample/demos-jp/paned1.rb +53 -0
  518. data/sample/demos-jp/paned2.rb +101 -0
  519. data/sample/demos-jp/pendulum.rb +243 -0
  520. data/sample/demos-jp/plot.rb +127 -0
  521. data/sample/demos-jp/puzzle.rb +132 -0
  522. data/sample/demos-jp/radio.rb +85 -0
  523. data/sample/demos-jp/radio2.rb +113 -0
  524. data/sample/demos-jp/radio3.rb +120 -0
  525. data/sample/demos-jp/rmt +268 -0
  526. data/sample/demos-jp/rolodex +320 -0
  527. data/sample/demos-jp/rolodex-j +300 -0
  528. data/sample/demos-jp/ruler.rb +204 -0
  529. data/sample/demos-jp/sayings.rb +104 -0
  530. data/sample/demos-jp/search.rb +185 -0
  531. data/sample/demos-jp/spin.rb +72 -0
  532. data/sample/demos-jp/square +81 -0
  533. data/sample/demos-jp/states.rb +75 -0
  534. data/sample/demos-jp/style.rb +271 -0
  535. data/sample/demos-jp/tcolor +534 -0
  536. data/sample/demos-jp/text.rb +121 -0
  537. data/sample/demos-jp/textpeer.rb +83 -0
  538. data/sample/demos-jp/timer +136 -0
  539. data/sample/demos-jp/toolbar.rb +137 -0
  540. data/sample/demos-jp/tree.rb +121 -0
  541. data/sample/demos-jp/ttkbut.rb +146 -0
  542. data/sample/demos-jp/ttkmenu.rb +92 -0
  543. data/sample/demos-jp/ttknote.rb +98 -0
  544. data/sample/demos-jp/ttkpane.rb +217 -0
  545. data/sample/demos-jp/ttkprogress.rb +72 -0
  546. data/sample/demos-jp/twind.rb +293 -0
  547. data/sample/demos-jp/twind2.rb +385 -0
  548. data/sample/demos-jp/unicodeout.rb +120 -0
  549. data/sample/demos-jp/vscale.rb +81 -0
  550. data/sample/demos-jp/widget +1122 -0
  551. data/sample/editable_listbox.rb +149 -0
  552. data/sample/encstr_usage.rb +31 -0
  553. data/sample/figmemo_sample.rb +457 -0
  554. data/sample/images/earth.gif +0 -0
  555. data/sample/images/earthris.gif +0 -0
  556. data/sample/images/face.xbm +173 -0
  557. data/sample/images/flagdown.xbm +27 -0
  558. data/sample/images/flagup.xbm +27 -0
  559. data/sample/images/gray25.xbm +6 -0
  560. data/sample/images/grey.25 +6 -0
  561. data/sample/images/grey.5 +6 -0
  562. data/sample/images/letters.xbm +27 -0
  563. data/sample/images/noletter.xbm +27 -0
  564. data/sample/images/pattern.xbm +6 -0
  565. data/sample/images/tcllogo.gif +0 -0
  566. data/sample/images/teapot.ppm +31 -0
  567. data/sample/irbtk.rb +31 -0
  568. data/sample/irbtkw.rbw +156 -0
  569. data/sample/iso2022-kr.txt +2 -0
  570. data/sample/menubar1.rb +52 -0
  571. data/sample/menubar2.rb +57 -0
  572. data/sample/menubar3.rb +73 -0
  573. data/sample/msgs_rb/README +3 -0
  574. data/sample/msgs_rb/cs.msg +84 -0
  575. data/sample/msgs_rb/de.msg +88 -0
  576. data/sample/msgs_rb/el.msg +98 -0
  577. data/sample/msgs_rb/en.msg +83 -0
  578. data/sample/msgs_rb/en_gb.msg +7 -0
  579. data/sample/msgs_rb/eo.msg +87 -0
  580. data/sample/msgs_rb/es.msg +84 -0
  581. data/sample/msgs_rb/fr.msg +84 -0
  582. data/sample/msgs_rb/it.msg +84 -0
  583. data/sample/msgs_rb/ja.msg +13 -0
  584. data/sample/msgs_rb/nl.msg +123 -0
  585. data/sample/msgs_rb/pl.msg +87 -0
  586. data/sample/msgs_rb/ru.msg +87 -0
  587. data/sample/msgs_rb2/README +5 -0
  588. data/sample/msgs_rb2/de.msg +88 -0
  589. data/sample/msgs_rb2/ja.msg +85 -0
  590. data/sample/msgs_tk/README +4 -0
  591. data/sample/msgs_tk/cs.msg +84 -0
  592. data/sample/msgs_tk/de.msg +88 -0
  593. data/sample/msgs_tk/el.msg +103 -0
  594. data/sample/msgs_tk/en.msg +83 -0
  595. data/sample/msgs_tk/en_gb.msg +7 -0
  596. data/sample/msgs_tk/eo.msg +87 -0
  597. data/sample/msgs_tk/es.msg +84 -0
  598. data/sample/msgs_tk/fr.msg +84 -0
  599. data/sample/msgs_tk/it.msg +84 -0
  600. data/sample/msgs_tk/ja.msg +13 -0
  601. data/sample/msgs_tk/license.terms +39 -0
  602. data/sample/msgs_tk/nl.msg +123 -0
  603. data/sample/msgs_tk/pl.msg +87 -0
  604. data/sample/msgs_tk/ru.msg +87 -0
  605. data/sample/multi-ip_sample.rb +104 -0
  606. data/sample/multi-ip_sample2.rb +30 -0
  607. data/sample/optobj_sample.rb +68 -0
  608. data/sample/propagate.rb +31 -0
  609. data/sample/remote-ip_sample.rb +34 -0
  610. data/sample/remote-ip_sample2.rb +57 -0
  611. data/sample/resource.en +13 -0
  612. data/sample/resource.ja +13 -0
  613. data/sample/safe-tk.rb +132 -0
  614. data/sample/scrollframe.rb +250 -0
  615. data/sample/tcltklib/batsu.gif +0 -0
  616. data/sample/tcltklib/lines0.tcl +42 -0
  617. data/sample/tcltklib/lines1.rb +51 -0
  618. data/sample/tcltklib/lines2.rb +55 -0
  619. data/sample/tcltklib/lines3.rb +55 -0
  620. data/sample/tcltklib/lines4.rb +55 -0
  621. data/sample/tcltklib/maru.gif +0 -0
  622. data/sample/tcltklib/safeTk.rb +23 -0
  623. data/sample/tcltklib/sample0.rb +40 -0
  624. data/sample/tcltklib/sample1.rb +635 -0
  625. data/sample/tcltklib/sample2.rb +452 -0
  626. data/sample/tkalignbox.rb +236 -0
  627. data/sample/tkballoonhelp.rb +221 -0
  628. data/sample/tkbiff.rb +156 -0
  629. data/sample/tkbrowse.rb +80 -0
  630. data/sample/tkcombobox.rb +498 -0
  631. data/sample/tkdialog.rb +62 -0
  632. data/sample/tkextlib/ICONS/Orig_LICENSE.txt +61 -0
  633. data/sample/tkextlib/ICONS/tkIcons +195 -0
  634. data/sample/tkextlib/ICONS/tkIcons-sample.kde +658 -0
  635. data/sample/tkextlib/ICONS/tkIcons.kde +195 -0
  636. data/sample/tkextlib/ICONS/viewIcons.rb +330 -0
  637. data/sample/tkextlib/blt/barchart5.rb +102 -0
  638. data/sample/tkextlib/blt/calendar.rb +118 -0
  639. data/sample/tkextlib/blt/graph6.rb +2223 -0
  640. data/sample/tkextlib/blt/graph7.rb +41 -0
  641. data/sample/tkextlib/blt/graph7a.rb +64 -0
  642. data/sample/tkextlib/blt/graph7b.rb +42 -0
  643. data/sample/tkextlib/blt/graph7c.rb +46 -0
  644. data/sample/tkextlib/blt/images/buckskin.gif +0 -0
  645. data/sample/tkextlib/blt/images/chalk.gif +0 -0
  646. data/sample/tkextlib/blt/images/qv100.t.gif +0 -0
  647. data/sample/tkextlib/blt/images/rain.gif +0 -0
  648. data/sample/tkextlib/blt/images/sample.gif +0 -0
  649. data/sample/tkextlib/blt/pareto.rb +91 -0
  650. data/sample/tkextlib/blt/plot1.rb +10 -0
  651. data/sample/tkextlib/blt/plot1b.rb +11 -0
  652. data/sample/tkextlib/blt/readme.txt +2 -0
  653. data/sample/tkextlib/blt/scripts/stipples.rb +157 -0
  654. data/sample/tkextlib/blt/winop1.rb +41 -0
  655. data/sample/tkextlib/blt/winop2.rb +29 -0
  656. data/sample/tkextlib/bwidget/Orig_LICENSE.txt +53 -0
  657. data/sample/tkextlib/bwidget/basic.rb +199 -0
  658. data/sample/tkextlib/bwidget/bwidget.xbm +46 -0
  659. data/sample/tkextlib/bwidget/demo.rb +244 -0
  660. data/sample/tkextlib/bwidget/dnd.rb +47 -0
  661. data/sample/tkextlib/bwidget/manager.rb +151 -0
  662. data/sample/tkextlib/bwidget/select.rb +83 -0
  663. data/sample/tkextlib/bwidget/tmpldlg.rb +222 -0
  664. data/sample/tkextlib/bwidget/tree.rb +290 -0
  665. data/sample/tkextlib/bwidget/x1.xbm +2258 -0
  666. data/sample/tkextlib/iwidgets/catalog_demo/Orig_LICENSE.txt +42 -0
  667. data/sample/tkextlib/iwidgets/catalog_demo/images/box.xbm +14 -0
  668. data/sample/tkextlib/iwidgets/catalog_demo/images/clear.gif +0 -0
  669. data/sample/tkextlib/iwidgets/catalog_demo/images/close.gif +0 -0
  670. data/sample/tkextlib/iwidgets/catalog_demo/images/copy.gif +0 -0
  671. data/sample/tkextlib/iwidgets/catalog_demo/images/cut.gif +0 -0
  672. data/sample/tkextlib/iwidgets/catalog_demo/images/exit.gif +0 -0
  673. data/sample/tkextlib/iwidgets/catalog_demo/images/find.gif +0 -0
  674. data/sample/tkextlib/iwidgets/catalog_demo/images/help.gif +0 -0
  675. data/sample/tkextlib/iwidgets/catalog_demo/images/line.xbm +14 -0
  676. data/sample/tkextlib/iwidgets/catalog_demo/images/mag.gif +0 -0
  677. data/sample/tkextlib/iwidgets/catalog_demo/images/new.gif +0 -0
  678. data/sample/tkextlib/iwidgets/catalog_demo/images/open.gif +0 -0
  679. data/sample/tkextlib/iwidgets/catalog_demo/images/oval.xbm +14 -0
  680. data/sample/tkextlib/iwidgets/catalog_demo/images/paste.gif +0 -0
  681. data/sample/tkextlib/iwidgets/catalog_demo/images/points.xbm +14 -0
  682. data/sample/tkextlib/iwidgets/catalog_demo/images/poly.gif +0 -0
  683. data/sample/tkextlib/iwidgets/catalog_demo/images/print.gif +0 -0
  684. data/sample/tkextlib/iwidgets/catalog_demo/images/ruler.gif +0 -0
  685. data/sample/tkextlib/iwidgets/catalog_demo/images/save.gif +0 -0
  686. data/sample/tkextlib/iwidgets/catalog_demo/images/select.gif +0 -0
  687. data/sample/tkextlib/iwidgets/catalog_demo/images/text.xbm +14 -0
  688. data/sample/tkextlib/iwidgets/sample/buttonbox.rb +23 -0
  689. data/sample/tkextlib/iwidgets/sample/calendar.rb +11 -0
  690. data/sample/tkextlib/iwidgets/sample/canvasprintbox.rb +9 -0
  691. data/sample/tkextlib/iwidgets/sample/canvasprintdialog.rb +9 -0
  692. data/sample/tkextlib/iwidgets/sample/checkbox.rb +13 -0
  693. data/sample/tkextlib/iwidgets/sample/combobox.rb +33 -0
  694. data/sample/tkextlib/iwidgets/sample/dateentry.rb +8 -0
  695. data/sample/tkextlib/iwidgets/sample/datefield.rb +9 -0
  696. data/sample/tkextlib/iwidgets/sample/dialog.rb +21 -0
  697. data/sample/tkextlib/iwidgets/sample/dialogshell.rb +15 -0
  698. data/sample/tkextlib/iwidgets/sample/disjointlistbox.rb +17 -0
  699. data/sample/tkextlib/iwidgets/sample/entryfield-1.rb +40 -0
  700. data/sample/tkextlib/iwidgets/sample/entryfield-2.rb +45 -0
  701. data/sample/tkextlib/iwidgets/sample/entryfield-3.rb +41 -0
  702. data/sample/tkextlib/iwidgets/sample/extbutton.rb +21 -0
  703. data/sample/tkextlib/iwidgets/sample/extfileselectionbox.rb +9 -0
  704. data/sample/tkextlib/iwidgets/sample/extfileselectiondialog.rb +30 -0
  705. data/sample/tkextlib/iwidgets/sample/feedback.rb +11 -0
  706. data/sample/tkextlib/iwidgets/sample/fileselectionbox.rb +9 -0
  707. data/sample/tkextlib/iwidgets/sample/fileselectiondialog.rb +29 -0
  708. data/sample/tkextlib/iwidgets/sample/finddialog.rb +16 -0
  709. data/sample/tkextlib/iwidgets/sample/hierarchy.rb +26 -0
  710. data/sample/tkextlib/iwidgets/sample/hyperhelp.rb +15 -0
  711. data/sample/tkextlib/iwidgets/sample/labeledframe.rb +15 -0
  712. data/sample/tkextlib/iwidgets/sample/labeledwidget.rb +14 -0
  713. data/sample/tkextlib/iwidgets/sample/mainwindow.rb +65 -0
  714. data/sample/tkextlib/iwidgets/sample/menubar.rb +125 -0
  715. data/sample/tkextlib/iwidgets/sample/menubar2.rb +45 -0
  716. data/sample/tkextlib/iwidgets/sample/messagebox1.rb +20 -0
  717. data/sample/tkextlib/iwidgets/sample/messagebox2.rb +20 -0
  718. data/sample/tkextlib/iwidgets/sample/messagedialog.rb +45 -0
  719. data/sample/tkextlib/iwidgets/sample/notebook.rb +31 -0
  720. data/sample/tkextlib/iwidgets/sample/notebook2.rb +31 -0
  721. data/sample/tkextlib/iwidgets/sample/optionmenu.rb +15 -0
  722. data/sample/tkextlib/iwidgets/sample/panedwindow.rb +23 -0
  723. data/sample/tkextlib/iwidgets/sample/panedwindow2.rb +23 -0
  724. data/sample/tkextlib/iwidgets/sample/promptdialog.rb +18 -0
  725. data/sample/tkextlib/iwidgets/sample/pushbutton.rb +10 -0
  726. data/sample/tkextlib/iwidgets/sample/radiobox.rb +14 -0
  727. data/sample/tkextlib/iwidgets/sample/scrolledcanvas.rb +14 -0
  728. data/sample/tkextlib/iwidgets/sample/scrolledframe.rb +19 -0
  729. data/sample/tkextlib/iwidgets/sample/scrolledhtml.rb +16 -0
  730. data/sample/tkextlib/iwidgets/sample/scrolledlistbox.rb +23 -0
  731. data/sample/tkextlib/iwidgets/sample/scrolledtext.rb +12 -0
  732. data/sample/tkextlib/iwidgets/sample/selectionbox.rb +20 -0
  733. data/sample/tkextlib/iwidgets/sample/selectiondialog.rb +13 -0
  734. data/sample/tkextlib/iwidgets/sample/shell.rb +18 -0
  735. data/sample/tkextlib/iwidgets/sample/spindate.rb +8 -0
  736. data/sample/tkextlib/iwidgets/sample/spinint.rb +11 -0
  737. data/sample/tkextlib/iwidgets/sample/spinner.rb +34 -0
  738. data/sample/tkextlib/iwidgets/sample/spintime.rb +8 -0
  739. data/sample/tkextlib/iwidgets/sample/tabnotebook.rb +27 -0
  740. data/sample/tkextlib/iwidgets/sample/tabnotebook2.rb +31 -0
  741. data/sample/tkextlib/iwidgets/sample/tabset.rb +35 -0
  742. data/sample/tkextlib/iwidgets/sample/timeentry.rb +8 -0
  743. data/sample/tkextlib/iwidgets/sample/timefield.rb +9 -0
  744. data/sample/tkextlib/iwidgets/sample/toolbar.rb +153 -0
  745. data/sample/tkextlib/iwidgets/sample/watch.rb +19 -0
  746. data/sample/tkextlib/tcllib/Orig_LICENSE.txt +46 -0
  747. data/sample/tkextlib/tcllib/datefield.rb +30 -0
  748. data/sample/tkextlib/tcllib/plotdemos1.rb +159 -0
  749. data/sample/tkextlib/tcllib/plotdemos2.rb +72 -0
  750. data/sample/tkextlib/tcllib/plotdemos3.rb +84 -0
  751. data/sample/tkextlib/tcllib/xyplot.rb +18 -0
  752. data/sample/tkextlib/tile/Orig_LICENSE.txt +30 -0
  753. data/sample/tkextlib/tile/demo.rb +984 -0
  754. data/sample/tkextlib/tile/iconlib.tcl +110 -0
  755. data/sample/tkextlib/tile/readme.txt +2 -0
  756. data/sample/tkextlib/tile/repeater.tcl +117 -0
  757. data/sample/tkextlib/tile/themes/blue/blue.tcl +149 -0
  758. data/sample/tkextlib/tile/themes/blue/blue/arrowdown-h.gif +0 -0
  759. data/sample/tkextlib/tile/themes/blue/blue/arrowdown-p.gif +0 -0
  760. data/sample/tkextlib/tile/themes/blue/blue/arrowdown.gif +0 -0
  761. data/sample/tkextlib/tile/themes/blue/blue/arrowleft-h.gif +0 -0
  762. data/sample/tkextlib/tile/themes/blue/blue/arrowleft-p.gif +0 -0
  763. data/sample/tkextlib/tile/themes/blue/blue/arrowleft.gif +0 -0
  764. data/sample/tkextlib/tile/themes/blue/blue/arrowright-h.gif +0 -0
  765. data/sample/tkextlib/tile/themes/blue/blue/arrowright-p.gif +0 -0
  766. data/sample/tkextlib/tile/themes/blue/blue/arrowright.gif +0 -0
  767. data/sample/tkextlib/tile/themes/blue/blue/arrowup-h.gif +0 -0
  768. data/sample/tkextlib/tile/themes/blue/blue/arrowup-p.gif +0 -0
  769. data/sample/tkextlib/tile/themes/blue/blue/arrowup.gif +0 -0
  770. data/sample/tkextlib/tile/themes/blue/blue/button-h.gif +0 -0
  771. data/sample/tkextlib/tile/themes/blue/blue/button-n.gif +0 -0
  772. data/sample/tkextlib/tile/themes/blue/blue/button-n.xcf +0 -0
  773. data/sample/tkextlib/tile/themes/blue/blue/button-p.gif +0 -0
  774. data/sample/tkextlib/tile/themes/blue/blue/check-hc.gif +0 -0
  775. data/sample/tkextlib/tile/themes/blue/blue/check-hu.gif +0 -0
  776. data/sample/tkextlib/tile/themes/blue/blue/check-nc.gif +0 -0
  777. data/sample/tkextlib/tile/themes/blue/blue/check-nu.gif +0 -0
  778. data/sample/tkextlib/tile/themes/blue/blue/radio-hc.gif +0 -0
  779. data/sample/tkextlib/tile/themes/blue/blue/radio-hu.gif +0 -0
  780. data/sample/tkextlib/tile/themes/blue/blue/radio-nc.gif +0 -0
  781. data/sample/tkextlib/tile/themes/blue/blue/radio-nu.gif +0 -0
  782. data/sample/tkextlib/tile/themes/blue/blue/sb-thumb-p.gif +0 -0
  783. data/sample/tkextlib/tile/themes/blue/blue/sb-thumb.gif +0 -0
  784. data/sample/tkextlib/tile/themes/blue/blue/sb-vthumb-p.gif +0 -0
  785. data/sample/tkextlib/tile/themes/blue/blue/sb-vthumb.gif +0 -0
  786. data/sample/tkextlib/tile/themes/blue/blue/slider-p.gif +0 -0
  787. data/sample/tkextlib/tile/themes/blue/blue/slider.gif +0 -0
  788. data/sample/tkextlib/tile/themes/blue/blue/vslider-p.gif +0 -0
  789. data/sample/tkextlib/tile/themes/blue/blue/vslider.gif +0 -0
  790. data/sample/tkextlib/tile/themes/blue/pkgIndex.tcl +6 -0
  791. data/sample/tkextlib/tile/themes/keramik/keramik.tcl +194 -0
  792. data/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-n.gif +0 -0
  793. data/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-p.gif +0 -0
  794. data/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-n.gif +0 -0
  795. data/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-p.gif +0 -0
  796. data/sample/tkextlib/tile/themes/keramik/keramik/arrowright-n.gif +0 -0
  797. data/sample/tkextlib/tile/themes/keramik/keramik/arrowright-p.gif +0 -0
  798. data/sample/tkextlib/tile/themes/keramik/keramik/arrowup-n.gif +0 -0
  799. data/sample/tkextlib/tile/themes/keramik/keramik/arrowup-p.gif +0 -0
  800. data/sample/tkextlib/tile/themes/keramik/keramik/button-d.gif +0 -0
  801. data/sample/tkextlib/tile/themes/keramik/keramik/button-h.gif +0 -0
  802. data/sample/tkextlib/tile/themes/keramik/keramik/button-n.gif +0 -0
  803. data/sample/tkextlib/tile/themes/keramik/keramik/button-p.gif +0 -0
  804. data/sample/tkextlib/tile/themes/keramik/keramik/button-s.gif +0 -0
  805. data/sample/tkextlib/tile/themes/keramik/keramik/check-c.gif +0 -0
  806. data/sample/tkextlib/tile/themes/keramik/keramik/check-u.gif +0 -0
  807. data/sample/tkextlib/tile/themes/keramik/keramik/hsb-n.gif +0 -0
  808. data/sample/tkextlib/tile/themes/keramik/keramik/hsb-p.gif +0 -0
  809. data/sample/tkextlib/tile/themes/keramik/keramik/hslider-n.gif +0 -0
  810. data/sample/tkextlib/tile/themes/keramik/keramik/mbut-a.gif +0 -0
  811. data/sample/tkextlib/tile/themes/keramik/keramik/mbut-arrow-n.gif +0 -0
  812. data/sample/tkextlib/tile/themes/keramik/keramik/mbut-d.gif +0 -0
  813. data/sample/tkextlib/tile/themes/keramik/keramik/mbut-n.gif +0 -0
  814. data/sample/tkextlib/tile/themes/keramik/keramik/radio-c.gif +0 -0
  815. data/sample/tkextlib/tile/themes/keramik/keramik/radio-u.gif +0 -0
  816. data/sample/tkextlib/tile/themes/keramik/keramik/tab-n.gif +0 -0
  817. data/sample/tkextlib/tile/themes/keramik/keramik/tab-p.gif +0 -0
  818. data/sample/tkextlib/tile/themes/keramik/keramik/tbar-a.gif +0 -0
  819. data/sample/tkextlib/tile/themes/keramik/keramik/tbar-n.gif +0 -0
  820. data/sample/tkextlib/tile/themes/keramik/keramik/tbar-p.gif +0 -0
  821. data/sample/tkextlib/tile/themes/keramik/keramik/vsb-n.gif +0 -0
  822. data/sample/tkextlib/tile/themes/keramik/keramik/vsb-p.gif +0 -0
  823. data/sample/tkextlib/tile/themes/keramik/keramik/vslider-n.gif +0 -0
  824. data/sample/tkextlib/tile/themes/keramik/pkgIndex.tcl +15 -0
  825. data/sample/tkextlib/tile/themes/kroc.rb +227 -0
  826. data/sample/tkextlib/tile/themes/kroc/kroc.tcl +163 -0
  827. data/sample/tkextlib/tile/themes/kroc/kroc/button-h.gif +0 -0
  828. data/sample/tkextlib/tile/themes/kroc/kroc/button-n.gif +0 -0
  829. data/sample/tkextlib/tile/themes/kroc/kroc/button-p.gif +0 -0
  830. data/sample/tkextlib/tile/themes/kroc/kroc/check-hc.gif +0 -0
  831. data/sample/tkextlib/tile/themes/kroc/kroc/check-hu.gif +0 -0
  832. data/sample/tkextlib/tile/themes/kroc/kroc/check-nc.gif +0 -0
  833. data/sample/tkextlib/tile/themes/kroc/kroc/check-nu.gif +0 -0
  834. data/sample/tkextlib/tile/themes/kroc/kroc/radio-hc.gif +0 -0
  835. data/sample/tkextlib/tile/themes/kroc/kroc/radio-hu.gif +0 -0
  836. data/sample/tkextlib/tile/themes/kroc/kroc/radio-nc.gif +0 -0
  837. data/sample/tkextlib/tile/themes/kroc/kroc/radio-nu.gif +0 -0
  838. data/sample/tkextlib/tile/themes/kroc/pkgIndex.tcl +15 -0
  839. data/sample/tkextlib/tile/themes/plastik/pkgIndex.tcl +16 -0
  840. data/sample/tkextlib/tile/themes/plastik/plastik.tcl +125 -0
  841. data/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-n.gif +0 -0
  842. data/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-p.gif +0 -0
  843. data/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-n.gif +0 -0
  844. data/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-p.gif +0 -0
  845. data/sample/tkextlib/tile/themes/plastik/plastik/arrowright-n.gif +0 -0
  846. data/sample/tkextlib/tile/themes/plastik/plastik/arrowright-p.gif +0 -0
  847. data/sample/tkextlib/tile/themes/plastik/plastik/arrowup-n.gif +0 -0
  848. data/sample/tkextlib/tile/themes/plastik/plastik/arrowup-p.gif +0 -0
  849. data/sample/tkextlib/tile/themes/plastik/plastik/button-h.gif +0 -0
  850. data/sample/tkextlib/tile/themes/plastik/plastik/button-n.gif +0 -0
  851. data/sample/tkextlib/tile/themes/plastik/plastik/button-p.gif +0 -0
  852. data/sample/tkextlib/tile/themes/plastik/plastik/check-hc.gif +0 -0
  853. data/sample/tkextlib/tile/themes/plastik/plastik/check-hu.gif +0 -0
  854. data/sample/tkextlib/tile/themes/plastik/plastik/check-nc.gif +0 -0
  855. data/sample/tkextlib/tile/themes/plastik/plastik/check-nu.gif +0 -0
  856. data/sample/tkextlib/tile/themes/plastik/plastik/check-pc.gif +0 -0
  857. data/sample/tkextlib/tile/themes/plastik/plastik/hsb-n.gif +0 -0
  858. data/sample/tkextlib/tile/themes/plastik/plastik/hslider-n.gif +0 -0
  859. data/sample/tkextlib/tile/themes/plastik/plastik/radio-hc.gif +0 -0
  860. data/sample/tkextlib/tile/themes/plastik/plastik/radio-hu.gif +0 -0
  861. data/sample/tkextlib/tile/themes/plastik/plastik/radio-nc.gif +0 -0
  862. data/sample/tkextlib/tile/themes/plastik/plastik/radio-nu.gif +0 -0
  863. data/sample/tkextlib/tile/themes/plastik/plastik/radio-pc.gif +0 -0
  864. data/sample/tkextlib/tile/themes/plastik/plastik/vsb-n.gif +0 -0
  865. data/sample/tkextlib/tile/themes/plastik/plastik/vslider-n.gif +0 -0
  866. data/sample/tkextlib/tile/toolbutton.tcl +152 -0
  867. data/sample/tkextlib/tkHTML/Orig_COPYRIGHT.txt +12 -0
  868. data/sample/tkextlib/tkHTML/README +12 -0
  869. data/sample/tkextlib/tkHTML/hv.rb +314 -0
  870. data/sample/tkextlib/tkHTML/page1/image1 +0 -0
  871. data/sample/tkextlib/tkHTML/page1/image10 +0 -0
  872. data/sample/tkextlib/tkHTML/page1/image11 +0 -0
  873. data/sample/tkextlib/tkHTML/page1/image12 +0 -0
  874. data/sample/tkextlib/tkHTML/page1/image13 +0 -0
  875. data/sample/tkextlib/tkHTML/page1/image14 +0 -0
  876. data/sample/tkextlib/tkHTML/page1/image2 +0 -0
  877. data/sample/tkextlib/tkHTML/page1/image3 +0 -0
  878. data/sample/tkextlib/tkHTML/page1/image4 +0 -0
  879. data/sample/tkextlib/tkHTML/page1/image5 +0 -0
  880. data/sample/tkextlib/tkHTML/page1/image6 +0 -0
  881. data/sample/tkextlib/tkHTML/page1/image7 +0 -0
  882. data/sample/tkextlib/tkHTML/page1/image8 +0 -0
  883. data/sample/tkextlib/tkHTML/page1/image9 +0 -0
  884. data/sample/tkextlib/tkHTML/page1/index.html +115 -0
  885. data/sample/tkextlib/tkHTML/page2/image1 +0 -0
  886. data/sample/tkextlib/tkHTML/page2/image10 +0 -0
  887. data/sample/tkextlib/tkHTML/page2/image11 +0 -0
  888. data/sample/tkextlib/tkHTML/page2/image12 +0 -0
  889. data/sample/tkextlib/tkHTML/page2/image13 +0 -0
  890. data/sample/tkextlib/tkHTML/page2/image14 +0 -0
  891. data/sample/tkextlib/tkHTML/page2/image15 +0 -0
  892. data/sample/tkextlib/tkHTML/page2/image16 +0 -0
  893. data/sample/tkextlib/tkHTML/page2/image17 +0 -0
  894. data/sample/tkextlib/tkHTML/page2/image18 +0 -0
  895. data/sample/tkextlib/tkHTML/page2/image19 +0 -0
  896. data/sample/tkextlib/tkHTML/page2/image2 +0 -0
  897. data/sample/tkextlib/tkHTML/page2/image20 +0 -0
  898. data/sample/tkextlib/tkHTML/page2/image21 +0 -0
  899. data/sample/tkextlib/tkHTML/page2/image22 +0 -0
  900. data/sample/tkextlib/tkHTML/page2/image23 +0 -0
  901. data/sample/tkextlib/tkHTML/page2/image24 +0 -0
  902. data/sample/tkextlib/tkHTML/page2/image25 +0 -0
  903. data/sample/tkextlib/tkHTML/page2/image26 +0 -0
  904. data/sample/tkextlib/tkHTML/page2/image27 +0 -0
  905. data/sample/tkextlib/tkHTML/page2/image28 +0 -0
  906. data/sample/tkextlib/tkHTML/page2/image29 +0 -0
  907. data/sample/tkextlib/tkHTML/page2/image3 +0 -0
  908. data/sample/tkextlib/tkHTML/page2/image30 +0 -0
  909. data/sample/tkextlib/tkHTML/page2/image31 +0 -0
  910. data/sample/tkextlib/tkHTML/page2/image32 +0 -0
  911. data/sample/tkextlib/tkHTML/page2/image33 +0 -0
  912. data/sample/tkextlib/tkHTML/page2/image34 +0 -0
  913. data/sample/tkextlib/tkHTML/page2/image35 +0 -0
  914. data/sample/tkextlib/tkHTML/page2/image36 +0 -0
  915. data/sample/tkextlib/tkHTML/page2/image37 +0 -0
  916. data/sample/tkextlib/tkHTML/page2/image38 +0 -0
  917. data/sample/tkextlib/tkHTML/page2/image39 +0 -0
  918. data/sample/tkextlib/tkHTML/page2/image4 +0 -0
  919. data/sample/tkextlib/tkHTML/page2/image5 +0 -0
  920. data/sample/tkextlib/tkHTML/page2/image6 +0 -0
  921. data/sample/tkextlib/tkHTML/page2/image7 +0 -0
  922. data/sample/tkextlib/tkHTML/page2/image8 +0 -0
  923. data/sample/tkextlib/tkHTML/page2/image9 +0 -0
  924. data/sample/tkextlib/tkHTML/page2/index.html +433 -0
  925. data/sample/tkextlib/tkHTML/page3/image1 +0 -0
  926. data/sample/tkextlib/tkHTML/page3/image10 +0 -0
  927. data/sample/tkextlib/tkHTML/page3/image11 +0 -0
  928. data/sample/tkextlib/tkHTML/page3/image12 +0 -0
  929. data/sample/tkextlib/tkHTML/page3/image13 +0 -0
  930. data/sample/tkextlib/tkHTML/page3/image14 +0 -0
  931. data/sample/tkextlib/tkHTML/page3/image2 +0 -0
  932. data/sample/tkextlib/tkHTML/page3/image3 +0 -0
  933. data/sample/tkextlib/tkHTML/page3/image4 +0 -0
  934. data/sample/tkextlib/tkHTML/page3/image5 +0 -0
  935. data/sample/tkextlib/tkHTML/page3/image6 +0 -0
  936. data/sample/tkextlib/tkHTML/page3/image7 +0 -0
  937. data/sample/tkextlib/tkHTML/page3/image8 +0 -0
  938. data/sample/tkextlib/tkHTML/page3/image9 +0 -0
  939. data/sample/tkextlib/tkHTML/page3/index.html +2787 -0
  940. data/sample/tkextlib/tkHTML/page4/image1 +0 -0
  941. data/sample/tkextlib/tkHTML/page4/image2 +0 -0
  942. data/sample/tkextlib/tkHTML/page4/image3 +0 -0
  943. data/sample/tkextlib/tkHTML/page4/image4 +0 -0
  944. data/sample/tkextlib/tkHTML/page4/image5 +0 -0
  945. data/sample/tkextlib/tkHTML/page4/image6 +0 -0
  946. data/sample/tkextlib/tkHTML/page4/image7 +0 -0
  947. data/sample/tkextlib/tkHTML/page4/image8 +0 -0
  948. data/sample/tkextlib/tkHTML/page4/image9 +0 -0
  949. data/sample/tkextlib/tkHTML/page4/index.html +768 -0
  950. data/sample/tkextlib/tkHTML/ss.rb +437 -0
  951. data/sample/tkextlib/tkimg/demo.rb +1479 -0
  952. data/sample/tkextlib/tkimg/license_terms_of_Img_extension +41 -0
  953. data/sample/tkextlib/tkimg/readme.txt +3 -0
  954. data/sample/tkextlib/tktable/Orig_LICENSE.txt +52 -0
  955. data/sample/tkextlib/tktable/basic.rb +61 -0
  956. data/sample/tkextlib/tktable/buttons.rb +77 -0
  957. data/sample/tkextlib/tktable/command.rb +90 -0
  958. data/sample/tkextlib/tktable/debug.rb +102 -0
  959. data/sample/tkextlib/tktable/dynarows.rb +100 -0
  960. data/sample/tkextlib/tktable/maxsize.rb +68 -0
  961. data/sample/tkextlib/tktable/spreadsheet.rb +138 -0
  962. data/sample/tkextlib/tktable/tcllogo.gif +0 -0
  963. data/sample/tkextlib/tktable/valid.rb +89 -0
  964. data/sample/tkextlib/treectrl/bitmaps.rb +77 -0
  965. data/sample/tkextlib/treectrl/demo.rb +1306 -0
  966. data/sample/tkextlib/treectrl/explorer.rb +431 -0
  967. data/sample/tkextlib/treectrl/help.rb +405 -0
  968. data/sample/tkextlib/treectrl/imovie.rb +131 -0
  969. data/sample/tkextlib/treectrl/layout.rb +160 -0
  970. data/sample/tkextlib/treectrl/mailwasher.rb +270 -0
  971. data/sample/tkextlib/treectrl/outlook-folders.rb +125 -0
  972. data/sample/tkextlib/treectrl/outlook-newgroup.rb +449 -0
  973. data/sample/tkextlib/treectrl/pics/big-dll.gif +0 -0
  974. data/sample/tkextlib/treectrl/pics/big-exe.gif +0 -0
  975. data/sample/tkextlib/treectrl/pics/big-file.gif +0 -0
  976. data/sample/tkextlib/treectrl/pics/big-folder.gif +0 -0
  977. data/sample/tkextlib/treectrl/pics/big-txt.gif +0 -0
  978. data/sample/tkextlib/treectrl/pics/checked.gif +0 -0
  979. data/sample/tkextlib/treectrl/pics/file.gif +0 -0
  980. data/sample/tkextlib/treectrl/pics/folder-closed.gif +0 -0
  981. data/sample/tkextlib/treectrl/pics/folder-open.gif +0 -0
  982. data/sample/tkextlib/treectrl/pics/help-book-closed.gif +0 -0
  983. data/sample/tkextlib/treectrl/pics/help-book-open.gif +0 -0
  984. data/sample/tkextlib/treectrl/pics/help-page.gif +0 -0
  985. data/sample/tkextlib/treectrl/pics/imovie-01.gif +0 -0
  986. data/sample/tkextlib/treectrl/pics/imovie-02.gif +0 -0
  987. data/sample/tkextlib/treectrl/pics/imovie-03.gif +0 -0
  988. data/sample/tkextlib/treectrl/pics/imovie-04.gif +0 -0
  989. data/sample/tkextlib/treectrl/pics/imovie-05.gif +0 -0
  990. data/sample/tkextlib/treectrl/pics/imovie-06.gif +0 -0
  991. data/sample/tkextlib/treectrl/pics/imovie-07.gif +0 -0
  992. data/sample/tkextlib/treectrl/pics/internet-check-off.gif +0 -0
  993. data/sample/tkextlib/treectrl/pics/internet-check-on.gif +0 -0
  994. data/sample/tkextlib/treectrl/pics/internet-print.gif +0 -0
  995. data/sample/tkextlib/treectrl/pics/internet-radio-off.gif +0 -0
  996. data/sample/tkextlib/treectrl/pics/internet-radio-on.gif +0 -0
  997. data/sample/tkextlib/treectrl/pics/internet-search.gif +0 -0
  998. data/sample/tkextlib/treectrl/pics/internet-security.gif +0 -0
  999. data/sample/tkextlib/treectrl/pics/mac-collapse.gif +0 -0
  1000. data/sample/tkextlib/treectrl/pics/mac-expand.gif +0 -0
  1001. data/sample/tkextlib/treectrl/pics/outlook-arrow.gif +0 -0
  1002. data/sample/tkextlib/treectrl/pics/outlook-clip.gif +0 -0
  1003. data/sample/tkextlib/treectrl/pics/outlook-deleted.gif +0 -0
  1004. data/sample/tkextlib/treectrl/pics/outlook-draft.gif +0 -0
  1005. data/sample/tkextlib/treectrl/pics/outlook-folder.gif +0 -0
  1006. data/sample/tkextlib/treectrl/pics/outlook-group.gif +0 -0
  1007. data/sample/tkextlib/treectrl/pics/outlook-inbox.gif +0 -0
  1008. data/sample/tkextlib/treectrl/pics/outlook-local.gif +0 -0
  1009. data/sample/tkextlib/treectrl/pics/outlook-main.gif +0 -0
  1010. data/sample/tkextlib/treectrl/pics/outlook-outbox.gif +0 -0
  1011. data/sample/tkextlib/treectrl/pics/outlook-read-2.gif +0 -0
  1012. data/sample/tkextlib/treectrl/pics/outlook-read.gif +0 -0
  1013. data/sample/tkextlib/treectrl/pics/outlook-sent.gif +0 -0
  1014. data/sample/tkextlib/treectrl/pics/outlook-server.gif +0 -0
  1015. data/sample/tkextlib/treectrl/pics/outlook-unread.gif +0 -0
  1016. data/sample/tkextlib/treectrl/pics/outlook-watch.gif +0 -0
  1017. data/sample/tkextlib/treectrl/pics/sky.gif +0 -0
  1018. data/sample/tkextlib/treectrl/pics/small-dll.gif +0 -0
  1019. data/sample/tkextlib/treectrl/pics/small-exe.gif +0 -0
  1020. data/sample/tkextlib/treectrl/pics/small-file.gif +0 -0
  1021. data/sample/tkextlib/treectrl/pics/small-folder.gif +0 -0
  1022. data/sample/tkextlib/treectrl/pics/small-txt.gif +0 -0
  1023. data/sample/tkextlib/treectrl/pics/unchecked.gif +0 -0
  1024. data/sample/tkextlib/treectrl/random.rb +509 -0
  1025. data/sample/tkextlib/treectrl/readme.txt +2 -0
  1026. data/sample/tkextlib/treectrl/www-options.rb +304 -0
  1027. data/sample/tkextlib/vu/Orig_LICENSE.txt +51 -0
  1028. data/sample/tkextlib/vu/README.txt +50 -0
  1029. data/sample/tkextlib/vu/canvItems.rb +91 -0
  1030. data/sample/tkextlib/vu/canvSticker.rb +83 -0
  1031. data/sample/tkextlib/vu/canvSticker2.rb +102 -0
  1032. data/sample/tkextlib/vu/dial_demo.rb +114 -0
  1033. data/sample/tkextlib/vu/m128_000.xbm +174 -0
  1034. data/sample/tkextlib/vu/oscilloscope.rb +69 -0
  1035. data/sample/tkextlib/vu/pie.rb +57 -0
  1036. data/sample/tkextlib/vu/vu_demo.rb +68 -0
  1037. data/sample/tkfrom.rb +133 -0
  1038. data/sample/tkhello.rb +11 -0
  1039. data/sample/tkline.rb +48 -0
  1040. data/sample/tkmenubutton.rb +136 -0
  1041. data/sample/tkmsgcat-load_rb.rb +103 -0
  1042. data/sample/tkmsgcat-load_rb2.rb +103 -0
  1043. data/sample/tkmsgcat-load_tk.rb +119 -0
  1044. data/sample/tkmulticolumnlist.rb +744 -0
  1045. data/sample/tkmultilistbox.rb +655 -0
  1046. data/sample/tkmultilistframe.rb +941 -0
  1047. data/sample/tkoptdb-safeTk.rb +74 -0
  1048. data/sample/tkoptdb.rb +107 -0
  1049. data/sample/tkrttimer.rb +78 -0
  1050. data/sample/tksleep_sample.rb +30 -0
  1051. data/sample/tktextframe.rb +282 -0
  1052. data/sample/tktextio.rb +1061 -0
  1053. data/sample/tktimer.rb +51 -0
  1054. data/sample/tktimer2.rb +48 -0
  1055. data/sample/tktimer3.rb +60 -0
  1056. data/sample/tktree.rb +104 -0
  1057. data/sample/tktree.tcl +305 -0
  1058. data/sample/ttk_wrapper.rb +155 -0
  1059. data/tk.gemspec +24 -0
  1060. metadata +1144 -0
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: false
2
+ begin
3
+ require 'mkmf'
4
+
5
+ have_func("rb_obj_instance_exec", "ruby.h")
6
+ have_func("rb_obj_untrust", "ruby.h")
7
+ have_func("rb_obj_taint", "ruby.h")
8
+ have_func("rb_sym2str", "ruby.h")
9
+ have_func("rb_id2str", "ruby.h")
10
+ have_func("rb_ary_cat", "ruby.h")
11
+ have_func("strndup", "string.h")
12
+
13
+ create_makefile('tkutil')
14
+ end
@@ -0,0 +1,1900 @@
1
+ /************************************************
2
+
3
+ tkutil.c -
4
+
5
+ $Author$
6
+ created at: Fri Nov 3 00:47:54 JST 1995
7
+
8
+ ************************************************/
9
+
10
+ #define TKUTIL_RELEASE_DATE "2010-03-26"
11
+
12
+ #include "ruby.h"
13
+
14
+ #ifdef RUBY_VM
15
+ static int rb_thread_critical; /* dummy */
16
+ #else
17
+ /* On Ruby 1.8.x, use rb_thread_critical (defined at rubysig.h) */
18
+ #include "rubysig.h"
19
+ #endif
20
+ #ifdef HAVE_RUBY_ST_H
21
+ #include "ruby/st.h"
22
+ #else
23
+ #include "st.h"
24
+ #endif
25
+
26
+ #undef RUBY_UNTYPED_DATA_WARNING
27
+ #define RUBY_UNTYPED_DATA_WARNING 1
28
+
29
+ #if !defined(RHASH_TBL)
30
+ #define RHASH_TBL(h) (RHASH(h)->tbl)
31
+ #endif
32
+ #if !defined(RSTRING_PTR)
33
+ #define RSTRING_PTR(s) (RSTRING(s)->ptr)
34
+ #define RSTRING_LEN(s) (RSTRING(s)->len)
35
+ #endif
36
+ #if !defined(RARRAY_PTR)
37
+ #define RARRAY_PTR(s) (RARRAY(s)->ptr)
38
+ #define RARRAY_LEN(s) (RARRAY(s)->len)
39
+ #endif
40
+ #if !defined(RARRAY_CONST_PTR)
41
+ #define RARRAY_CONST_PTR(s) (const VALUE *)RARRAY_PTR(s)
42
+ #endif
43
+ #if !defined(RARRAY_AREF)
44
+ #define RARRAY_AREF(a, i) RARRAY_CONST_PTR(a)[i]
45
+ #endif
46
+
47
+ #if defined(HAVE_STRNDUP) && !defined(_GNU_SOURCE)
48
+ extern char *strndup(const char* _ptr, size_t _len);
49
+ #endif
50
+
51
+ #ifndef HAVE_RB_SYM2STR
52
+ # define rb_sym2str(obj) rb_id2str(SYM2ID(obj))
53
+ #endif
54
+
55
+ #ifndef HAVE_RB_ID2STR
56
+ # define rb_id2str(id) rb_str_new2(rb_id2name(id))
57
+ #endif
58
+
59
+ static VALUE cMethod;
60
+
61
+ static VALUE cTclTkLib;
62
+
63
+ static VALUE cTkObject;
64
+ static VALUE cTkCallbackEntry;
65
+
66
+ static VALUE TK_None;
67
+
68
+ static VALUE cCB_SUBST;
69
+ static VALUE cSUBST_INFO;
70
+
71
+ static VALUE ENCODING_NAME_UTF8; /* for saving GC cost */
72
+
73
+ static ID ID_split_tklist;
74
+ static ID ID_toUTF8;
75
+ static ID ID_fromUTF8;
76
+ static ID ID_path;
77
+ static ID ID_at_path;
78
+ static ID ID_at_enc;
79
+ static ID ID_to_eval;
80
+ static ID ID_to_s;
81
+ static ID ID_source;
82
+ static ID ID_downcase;
83
+ static ID ID_install_cmd;
84
+ static ID ID_merge_tklist;
85
+ static ID ID_encoding;
86
+ static ID ID_encoding_system;
87
+ static ID ID_call;
88
+
89
+ static ID ID_SUBST_INFO;
90
+
91
+ static VALUE CALLBACK_TABLE;
92
+ static unsigned long CALLBACK_ID_NUM = 0;
93
+
94
+ /*************************************/
95
+
96
+ #ifndef HAVE_STRNDUP
97
+ static char * strndup _((const char *, size_t));
98
+ static char *
99
+ strndup(ptr, len)
100
+ const char *ptr;
101
+ size_t len;
102
+ {
103
+ char *newptr = malloc(len + 1);
104
+ if (newptr) {
105
+ memcpy(newptr, ptr, len);
106
+ newptr[len] = '\0';
107
+ }
108
+ return newptr;
109
+ }
110
+ #endif
111
+
112
+ #ifndef HAVE_RB_ARY_CAT
113
+ static VALUE rb_ary_cat _((VALUE, const VALUE *, long));
114
+ static VALUE
115
+ rb_ary_cat(ary, argv, len)
116
+ VALUE ary;
117
+ const VALUE *argv;
118
+ long len;
119
+ {
120
+ long i;
121
+ for (i = 0; i < len; i++) {
122
+ rb_ary_push(ary, argv[i]);
123
+ }
124
+ return ary;
125
+ }
126
+ #endif
127
+
128
+ /*************************************/
129
+
130
+ #if defined(HAVE_RB_OBJ_INSTANCE_EXEC) && !defined(RUBY_VM)
131
+ extern VALUE rb_obj_instance_exec _((int, VALUE*, VALUE));
132
+ #endif
133
+ static VALUE
134
+ tk_s_new(argc, argv, klass)
135
+ int argc;
136
+ VALUE *argv;
137
+ VALUE klass;
138
+ {
139
+ VALUE obj = rb_class_new_instance(argc, argv, klass);
140
+
141
+ if (rb_block_given_p()) {
142
+ #ifndef HAVE_RB_OBJ_INSTANCE_EXEC
143
+ rb_obj_instance_eval(0, 0, obj);
144
+ #else
145
+ rb_obj_instance_exec(1, &obj, obj);
146
+ #endif
147
+ }
148
+ return obj;
149
+ }
150
+
151
+ /*************************************/
152
+
153
+ static VALUE
154
+ tkNone_to_s(self)
155
+ VALUE self;
156
+ {
157
+ return rb_str_new2("");
158
+ }
159
+
160
+ static VALUE
161
+ tkNone_inspect(self)
162
+ VALUE self;
163
+ {
164
+ return rb_str_new2("None");
165
+ }
166
+
167
+ /*************************************/
168
+
169
+ static VALUE
170
+ tk_obj_untrust(self, obj)
171
+ VALUE self;
172
+ VALUE obj;
173
+ {
174
+ #ifdef HAVE_RB_OBJ_TAINT
175
+ rb_obj_taint(obj);
176
+ #endif
177
+ #ifdef HAVE_RB_OBJ_UNTRUST
178
+ rb_obj_untrust(obj);
179
+ #endif
180
+
181
+ return obj;
182
+ }
183
+
184
+ static VALUE
185
+ tk_eval_cmd(argc, argv, self)
186
+ int argc;
187
+ VALUE argv[];
188
+ VALUE self;
189
+ {
190
+ VALUE cmd, rest;
191
+
192
+ rb_scan_args(argc, argv, "1*", &cmd, &rest);
193
+ return rb_eval_cmd(cmd, rest, 0);
194
+ }
195
+
196
+ static VALUE
197
+ tk_do_callback(argc, argv, self)
198
+ int argc;
199
+ VALUE *argv;
200
+ VALUE self;
201
+ {
202
+ #if 0
203
+ volatile VALUE id;
204
+ volatile VALUE rest;
205
+
206
+ rb_scan_args(argc, argv, "1*", &id, &rest);
207
+ return rb_apply(rb_hash_aref(CALLBACK_TABLE, id), ID_call, rest);
208
+ #endif
209
+ return rb_funcall2(rb_hash_aref(CALLBACK_TABLE, argv[0]),
210
+ ID_call, argc - 1, argv + 1);
211
+ }
212
+
213
+ static const char cmd_id_head[] = "ruby_cmd TkUtil callback ";
214
+ static const char cmd_id_prefix[] = "cmd";
215
+
216
+ static VALUE
217
+ tk_install_cmd_core(cmd)
218
+ VALUE cmd;
219
+ {
220
+ volatile VALUE id_num;
221
+
222
+ id_num = ULONG2NUM(CALLBACK_ID_NUM++);
223
+ id_num = rb_funcallv(id_num, ID_to_s, 0, 0);
224
+ id_num = rb_str_append(rb_str_new2(cmd_id_prefix), id_num);
225
+ rb_hash_aset(CALLBACK_TABLE, id_num, cmd);
226
+ return rb_str_append(rb_str_new2(cmd_id_head), id_num);
227
+ }
228
+
229
+ static VALUE
230
+ tk_install_cmd(argc, argv, self)
231
+ int argc;
232
+ VALUE *argv;
233
+ VALUE self;
234
+ {
235
+ volatile VALUE cmd;
236
+
237
+ #if 0
238
+ if (rb_scan_args(argc, argv, "01", &cmd) == 0) {
239
+ cmd = rb_block_proc();
240
+ }
241
+ return tk_install_cmd_core(cmd);
242
+ #endif
243
+ if (argc == 0) {
244
+ cmd = rb_block_proc();
245
+ } else {
246
+ cmd = argv[0];
247
+ }
248
+ return tk_install_cmd_core(cmd);
249
+ }
250
+
251
+ static VALUE
252
+ tk_uninstall_cmd(self, cmd_id)
253
+ VALUE self;
254
+ VALUE cmd_id;
255
+ {
256
+ size_t head_len = strlen(cmd_id_head);
257
+ size_t prefix_len = strlen(cmd_id_prefix);
258
+
259
+ StringValue(cmd_id);
260
+ if (strncmp(cmd_id_head, RSTRING_PTR(cmd_id), head_len) != 0) {
261
+ return Qnil;
262
+ }
263
+ if (strncmp(cmd_id_prefix,
264
+ RSTRING_PTR(cmd_id) + head_len, prefix_len) != 0) {
265
+ return Qnil;
266
+ }
267
+
268
+ return rb_hash_delete(CALLBACK_TABLE,
269
+ rb_str_new2(RSTRING_PTR(cmd_id) + head_len));
270
+ }
271
+
272
+ static VALUE
273
+ tk_toUTF8(argc, argv, self)
274
+ int argc;
275
+ VALUE *argv;
276
+ VALUE self;
277
+ {
278
+ return rb_funcall2(cTclTkLib, ID_toUTF8, argc, argv);
279
+ }
280
+
281
+ static VALUE
282
+ tk_fromUTF8(argc, argv, self)
283
+ int argc;
284
+ VALUE *argv;
285
+ VALUE self;
286
+ {
287
+ return rb_funcall2(cTclTkLib, ID_fromUTF8, argc, argv);
288
+ }
289
+
290
+ static VALUE
291
+ fromDefaultEnc_toUTF8(str, self)
292
+ VALUE str;
293
+ VALUE self;
294
+ {
295
+ VALUE argv[1];
296
+
297
+ argv[0] = str;
298
+ return tk_toUTF8(1, argv, self);
299
+ }
300
+
301
+ #if 0
302
+ static VALUE
303
+ fromUTF8_toDefaultEnc(str, self)
304
+ VALUE str;
305
+ VALUE self;
306
+ {
307
+ VALUE argv[1];
308
+
309
+ argv[0] = str;
310
+ return tk_fromUTF8(1, argv, self);
311
+ }
312
+ #endif
313
+
314
+ static int
315
+ to_strkey(key, value, hash)
316
+ VALUE key;
317
+ VALUE value;
318
+ VALUE hash;
319
+ {
320
+ rb_hash_aset(hash, rb_funcallv(key, ID_to_s, 0, 0), value);
321
+ return ST_CHECK;
322
+ }
323
+
324
+ static VALUE
325
+ tk_symbolkey2str(self, keys)
326
+ VALUE self;
327
+ VALUE keys;
328
+ {
329
+ volatile VALUE new_keys = rb_hash_new();
330
+
331
+ if (NIL_P(keys)) return new_keys;
332
+ keys = rb_convert_type(keys, T_HASH, "Hash", "to_hash");
333
+ st_foreach_check(RHASH_TBL(keys), to_strkey, new_keys, Qundef);
334
+ return new_keys;
335
+ }
336
+
337
+ static VALUE get_eval_string_core _((VALUE, VALUE, VALUE));
338
+ static VALUE ary2list _((VALUE, VALUE, VALUE));
339
+ static VALUE ary2list2 _((VALUE, VALUE, VALUE));
340
+ static VALUE hash2list _((VALUE, VALUE));
341
+ static VALUE hash2list_enc _((VALUE, VALUE));
342
+ static VALUE hash2kv _((VALUE, VALUE, VALUE));
343
+ static VALUE hash2kv_enc _((VALUE, VALUE, VALUE));
344
+
345
+ static VALUE
346
+ ary2list(ary, enc_flag, self)
347
+ VALUE ary;
348
+ VALUE enc_flag;
349
+ VALUE self;
350
+ {
351
+ long idx, idx2, size, size2;
352
+ int req_chk_flag;
353
+ volatile VALUE val, val2, str_val;
354
+ volatile VALUE dst;
355
+ volatile VALUE sys_enc, dst_enc, str_enc;
356
+
357
+ sys_enc = rb_funcallv(cTclTkLib, ID_encoding, 0, 0);
358
+ if (NIL_P(sys_enc)) {
359
+ sys_enc = rb_funcallv(cTclTkLib, ID_encoding_system, 0, 0);
360
+ sys_enc = rb_funcallv(sys_enc, ID_to_s, 0, 0);
361
+ }
362
+
363
+ if (NIL_P(enc_flag)) {
364
+ dst_enc = sys_enc;
365
+ req_chk_flag = 1;
366
+ } else if (enc_flag == Qtrue || enc_flag == Qfalse) {
367
+ dst_enc = enc_flag;
368
+ req_chk_flag = 0;
369
+ } else {
370
+ dst_enc = rb_funcallv(enc_flag, ID_to_s, 0, 0);
371
+ req_chk_flag = 0;
372
+ }
373
+
374
+ /* size = RARRAY_LEN(ary); */
375
+ size = 0;
376
+ for(idx = 0; idx < RARRAY_LEN(ary); idx++) {
377
+ if (RB_TYPE_P(RARRAY_AREF(ary, idx), T_HASH)) {
378
+ size += 2 * RHASH_SIZE(RARRAY_AREF(ary, idx));
379
+ } else {
380
+ size++;
381
+ }
382
+ }
383
+
384
+ dst = rb_ary_new2(size);
385
+ for(idx = 0; idx < RARRAY_LEN(ary); idx++) {
386
+ val = RARRAY_AREF(ary, idx);
387
+ str_val = Qnil;
388
+ switch(TYPE(val)) {
389
+ case T_ARRAY:
390
+ str_val = ary2list(val, enc_flag, self);
391
+ rb_ary_push(dst, str_val);
392
+
393
+ if (req_chk_flag) {
394
+ str_enc = rb_ivar_get(str_val, ID_at_enc);
395
+ if (!NIL_P(str_enc)) {
396
+ str_enc = rb_funcallv(str_enc, ID_to_s, 0, 0);
397
+ } else {
398
+ str_enc = sys_enc;
399
+ }
400
+ if (!rb_str_cmp(str_enc, dst_enc)) {
401
+ dst_enc = Qtrue;
402
+ req_chk_flag = 0;
403
+ }
404
+ }
405
+
406
+ break;
407
+
408
+ case T_HASH:
409
+ /* rb_ary_push(dst, hash2list(val, self)); */
410
+ if (RTEST(enc_flag)) {
411
+ val = hash2kv_enc(val, Qnil, self);
412
+ } else {
413
+ val = hash2kv(val, Qnil, self);
414
+ }
415
+ size2 = RARRAY_LEN(val);
416
+ for(idx2 = 0; idx2 < size2; idx2++) {
417
+ val2 = RARRAY_AREF(val, idx2);
418
+ switch(TYPE(val2)) {
419
+ case T_ARRAY:
420
+ str_val = ary2list(val2, enc_flag, self);
421
+ rb_ary_push(dst, str_val);
422
+ break;
423
+
424
+ case T_HASH:
425
+ if (RTEST(enc_flag)) {
426
+ str_val = hash2list_enc(val2, self);
427
+ } else {
428
+ str_val = hash2list(val2, self);
429
+ }
430
+ rb_ary_push(dst, str_val);
431
+ break;
432
+
433
+ default:
434
+ if (val2 != TK_None) {
435
+ str_val = get_eval_string_core(val2, enc_flag, self);
436
+ rb_ary_push(dst, str_val);
437
+ }
438
+ }
439
+
440
+ if (req_chk_flag) {
441
+ str_enc = rb_ivar_get(str_val, ID_at_enc);
442
+ if (!NIL_P(str_enc)) {
443
+ str_enc = rb_funcallv(str_enc, ID_to_s, 0, 0);
444
+ } else {
445
+ str_enc = sys_enc;
446
+ }
447
+ if (!rb_str_cmp(str_enc, dst_enc)) {
448
+ dst_enc = Qtrue;
449
+ req_chk_flag = 0;
450
+ }
451
+ }
452
+ }
453
+ break;
454
+
455
+ default:
456
+ if (val != TK_None) {
457
+ str_val = get_eval_string_core(val, enc_flag, self);
458
+ rb_ary_push(dst, str_val);
459
+
460
+ if (req_chk_flag) {
461
+ str_enc = rb_ivar_get(str_val, ID_at_enc);
462
+ if (!NIL_P(str_enc)) {
463
+ str_enc = rb_funcallv(str_enc, ID_to_s, 0, 0);
464
+ } else {
465
+ str_enc = sys_enc;
466
+ }
467
+ if (!rb_str_cmp(str_enc, dst_enc)) {
468
+ dst_enc = Qtrue;
469
+ req_chk_flag = 0;
470
+ }
471
+ }
472
+ }
473
+ }
474
+ }
475
+
476
+ if (RTEST(dst_enc) && !NIL_P(sys_enc)) {
477
+ for(idx = 0; idx < RARRAY_LEN(dst); idx++) {
478
+ str_val = RARRAY_AREF(dst, idx);
479
+ if (rb_obj_respond_to(self, ID_toUTF8, Qtrue)) {
480
+ str_val = rb_funcall(self, ID_toUTF8, 1, str_val);
481
+ } else {
482
+ str_val = rb_funcall(cTclTkLib, ID_toUTF8, 1, str_val);
483
+ }
484
+ RARRAY_ASET(dst, idx, str_val);
485
+ }
486
+ val = rb_apply(cTclTkLib, ID_merge_tklist, dst);
487
+ if (RB_TYPE_P(dst_enc, T_STRING)) {
488
+ val = rb_funcall(cTclTkLib, ID_fromUTF8, 2, val, dst_enc);
489
+ rb_ivar_set(val, ID_at_enc, dst_enc);
490
+ } else {
491
+ rb_ivar_set(val, ID_at_enc, ENCODING_NAME_UTF8);
492
+ }
493
+ return val;
494
+ } else {
495
+ return rb_apply(cTclTkLib, ID_merge_tklist, dst);
496
+ }
497
+ }
498
+
499
+ static VALUE
500
+ ary2list2(ary, enc_flag, self)
501
+ VALUE ary;
502
+ VALUE enc_flag;
503
+ VALUE self;
504
+ {
505
+ long idx, size;
506
+ int req_chk_flag;
507
+ volatile VALUE val, str_val;
508
+ volatile VALUE dst;
509
+ volatile VALUE sys_enc, dst_enc, str_enc;
510
+
511
+ sys_enc = rb_funcallv(cTclTkLib, ID_encoding, 0, 0);
512
+ if (NIL_P(sys_enc)) {
513
+ sys_enc = rb_funcallv(cTclTkLib, ID_encoding_system, 0, 0);
514
+ sys_enc = rb_funcallv(sys_enc, ID_to_s, 0, 0);
515
+ }
516
+
517
+ if (NIL_P(enc_flag)) {
518
+ dst_enc = sys_enc;
519
+ req_chk_flag = 1;
520
+ } else if (enc_flag == Qtrue || enc_flag == Qfalse) {
521
+ dst_enc = enc_flag;
522
+ req_chk_flag = 0;
523
+ } else {
524
+ dst_enc = rb_funcallv(enc_flag, ID_to_s, 0, 0);
525
+ req_chk_flag = 0;
526
+ }
527
+
528
+ size = RARRAY_LEN(ary);
529
+ dst = rb_ary_new2(size);
530
+ for(idx = 0; idx < RARRAY_LEN(ary); idx++) {
531
+ val = RARRAY_AREF(ary, idx);
532
+ str_val = Qnil;
533
+ switch(TYPE(val)) {
534
+ case T_ARRAY:
535
+ str_val = ary2list(val, enc_flag, self);
536
+ break;
537
+
538
+ case T_HASH:
539
+ if (RTEST(enc_flag)) {
540
+ str_val = hash2list(val, self);
541
+ } else {
542
+ str_val = hash2list_enc(val, self);
543
+ }
544
+ break;
545
+
546
+ default:
547
+ if (val != TK_None) {
548
+ str_val = get_eval_string_core(val, enc_flag, self);
549
+ }
550
+ }
551
+
552
+ if (!NIL_P(str_val)) {
553
+ rb_ary_push(dst, str_val);
554
+
555
+ if (req_chk_flag) {
556
+ str_enc = rb_ivar_get(str_val, ID_at_enc);
557
+ if (!NIL_P(str_enc)) {
558
+ str_enc = rb_funcallv(str_enc, ID_to_s, 0, 0);
559
+ } else {
560
+ str_enc = sys_enc;
561
+ }
562
+ if (!rb_str_cmp(str_enc, dst_enc)) {
563
+ dst_enc = Qtrue;
564
+ req_chk_flag = 0;
565
+ }
566
+ }
567
+ }
568
+ }
569
+
570
+ if (RTEST(dst_enc) && !NIL_P(sys_enc)) {
571
+ for(idx = 0; idx < RARRAY_LEN(dst); idx++) {
572
+ str_val = RARRAY_AREF(dst, idx);
573
+ if (rb_obj_respond_to(self, ID_toUTF8, Qtrue)) {
574
+ str_val = rb_funcall(self, ID_toUTF8, 1, str_val);
575
+ } else {
576
+ str_val = rb_funcall(cTclTkLib, ID_toUTF8, 1, str_val);
577
+ }
578
+ RARRAY_ASET(dst, idx, str_val);
579
+ }
580
+ val = rb_apply(cTclTkLib, ID_merge_tklist, dst);
581
+ if (RB_TYPE_P(dst_enc, T_STRING)) {
582
+ val = rb_funcall(cTclTkLib, ID_fromUTF8, 2, val, dst_enc);
583
+ rb_ivar_set(val, ID_at_enc, dst_enc);
584
+ } else {
585
+ rb_ivar_set(val, ID_at_enc, ENCODING_NAME_UTF8);
586
+ }
587
+ return val;
588
+ } else {
589
+ return rb_apply(cTclTkLib, ID_merge_tklist, dst);
590
+ }
591
+ }
592
+
593
+ static VALUE
594
+ key2keyname(key)
595
+ VALUE key;
596
+ {
597
+ return rb_str_append(rb_str_new2("-"), rb_funcallv(key, ID_to_s, 0, 0));
598
+ }
599
+
600
+ static VALUE
601
+ assoc2kv(assoc, ary, self)
602
+ VALUE assoc;
603
+ VALUE ary;
604
+ VALUE self;
605
+ {
606
+ long i, len;
607
+ volatile VALUE pair;
608
+ volatile VALUE val;
609
+ volatile VALUE dst = rb_ary_new2(2 * RARRAY_LEN(assoc));
610
+
611
+ len = RARRAY_LEN(assoc);
612
+
613
+ for(i = 0; i < len; i++) {
614
+ pair = RARRAY_AREF(assoc, i);
615
+ if (!RB_TYPE_P(pair, T_ARRAY)) {
616
+ rb_ary_push(dst, key2keyname(pair));
617
+ continue;
618
+ }
619
+ switch(RARRAY_LEN(assoc)) {
620
+ case 2:
621
+ rb_ary_push(dst, RARRAY_AREF(pair, 2));
622
+
623
+ case 1:
624
+ rb_ary_push(dst, key2keyname(RARRAY_AREF(pair, 0)));
625
+
626
+ case 0:
627
+ continue;
628
+
629
+ default:
630
+ rb_ary_push(dst, key2keyname(RARRAY_AREF(pair, 0)));
631
+
632
+ val = rb_ary_new2(RARRAY_LEN(pair) - 1);
633
+ rb_ary_cat(val, RARRAY_CONST_PTR(pair) + 1, RARRAY_LEN(pair) - 1);
634
+
635
+ rb_ary_push(dst, val);
636
+ }
637
+ }
638
+
639
+ if (NIL_P(ary)) {
640
+ return dst;
641
+ } else {
642
+ return rb_ary_plus(ary, dst);
643
+ }
644
+ }
645
+
646
+ static VALUE
647
+ assoc2kv_enc(assoc, ary, self)
648
+ VALUE assoc;
649
+ VALUE ary;
650
+ VALUE self;
651
+ {
652
+ long i, len;
653
+ volatile VALUE pair;
654
+ volatile VALUE val;
655
+ volatile VALUE dst = rb_ary_new2(2 * RARRAY_LEN(assoc));
656
+
657
+ len = RARRAY_LEN(assoc);
658
+
659
+ for(i = 0; i < len; i++) {
660
+ pair = RARRAY_AREF(assoc, i);
661
+ if (!RB_TYPE_P(pair, T_ARRAY)) {
662
+ rb_ary_push(dst, key2keyname(pair));
663
+ continue;
664
+ }
665
+ switch(RARRAY_LEN(assoc)) {
666
+ case 2:
667
+ rb_ary_push(dst, get_eval_string_core(RARRAY_AREF(pair, 2), Qtrue, self));
668
+
669
+ case 1:
670
+ rb_ary_push(dst, key2keyname(RARRAY_AREF(pair, 0)));
671
+
672
+ case 0:
673
+ continue;
674
+
675
+ default:
676
+ rb_ary_push(dst, key2keyname(RARRAY_AREF(pair, 0)));
677
+
678
+ val = rb_ary_new2(RARRAY_LEN(pair) - 1);
679
+ rb_ary_cat(val, RARRAY_CONST_PTR(pair) + 1, RARRAY_LEN(pair) - 1);
680
+
681
+ rb_ary_push(dst, get_eval_string_core(val, Qtrue, self));
682
+ }
683
+ }
684
+
685
+ if (NIL_P(ary)) {
686
+ return dst;
687
+ } else {
688
+ return rb_ary_plus(ary, dst);
689
+ }
690
+ }
691
+
692
+ static int
693
+ push_kv(key, val, args)
694
+ VALUE key;
695
+ VALUE val;
696
+ VALUE args;
697
+ {
698
+ volatile VALUE ary;
699
+
700
+ ary = RARRAY_AREF(args, 0);
701
+
702
+ #if 0
703
+ rb_ary_push(ary, key2keyname(key));
704
+ if (val != TK_None) rb_ary_push(ary, val);
705
+ #endif
706
+ rb_ary_push(ary, key2keyname(key));
707
+
708
+ if (val == TK_None) return ST_CHECK;
709
+
710
+ rb_ary_push(ary, get_eval_string_core(val, Qnil, RARRAY_AREF(args, 1)));
711
+
712
+ return ST_CHECK;
713
+ }
714
+
715
+ static VALUE
716
+ hash2kv(hash, ary, self)
717
+ VALUE hash;
718
+ VALUE ary;
719
+ VALUE self;
720
+ {
721
+ volatile VALUE dst = rb_ary_new2(2 * RHASH_SIZE(hash));
722
+ volatile VALUE args = rb_ary_new3(2, dst, self);
723
+
724
+ st_foreach_check(RHASH_TBL(hash), push_kv, args, Qundef);
725
+
726
+ if (NIL_P(ary)) {
727
+ return dst;
728
+ } else {
729
+ return rb_ary_concat(ary, dst);
730
+ }
731
+ }
732
+
733
+ static int
734
+ push_kv_enc(key, val, args)
735
+ VALUE key;
736
+ VALUE val;
737
+ VALUE args;
738
+ {
739
+ volatile VALUE ary;
740
+
741
+ ary = RARRAY_AREF(args, 0);
742
+
743
+ #if 0
744
+ rb_ary_push(ary, key2keyname(key));
745
+ if (val != TK_None) {
746
+ rb_ary_push(ary, get_eval_string_core(val, Qtrue,
747
+ RARRAY_AREF(args, 1)));
748
+ }
749
+ #endif
750
+ rb_ary_push(ary, key2keyname(key));
751
+
752
+ if (val == TK_None) return ST_CHECK;
753
+
754
+ rb_ary_push(ary, get_eval_string_core(val, Qtrue, RARRAY_AREF(args, 1)));
755
+
756
+ return ST_CHECK;
757
+ }
758
+
759
+ static VALUE
760
+ hash2kv_enc(hash, ary, self)
761
+ VALUE hash;
762
+ VALUE ary;
763
+ VALUE self;
764
+ {
765
+ volatile VALUE dst = rb_ary_new2(2 * RHASH_SIZE(hash));
766
+ volatile VALUE args = rb_ary_new3(2, dst, self);
767
+
768
+ st_foreach_check(RHASH_TBL(hash), push_kv_enc, args, Qundef);
769
+
770
+ if (NIL_P(ary)) {
771
+ return dst;
772
+ } else {
773
+ return rb_ary_concat(ary, dst);
774
+ }
775
+ }
776
+
777
+ static VALUE
778
+ hash2list(hash, self)
779
+ VALUE hash;
780
+ VALUE self;
781
+ {
782
+ return ary2list2(hash2kv(hash, Qnil, self), Qfalse, self);
783
+ }
784
+
785
+
786
+ static VALUE
787
+ hash2list_enc(hash, self)
788
+ VALUE hash;
789
+ VALUE self;
790
+ {
791
+ return ary2list2(hash2kv_enc(hash, Qnil, self), Qfalse, self);
792
+ }
793
+
794
+ static VALUE
795
+ tk_hash_kv(argc, argv, self)
796
+ int argc;
797
+ VALUE *argv;
798
+ VALUE self;
799
+ {
800
+ volatile VALUE hash, enc_flag, ary;
801
+
802
+ ary = Qnil;
803
+ enc_flag = Qnil;
804
+ switch(argc) {
805
+ case 3:
806
+ ary = argv[2];
807
+ if (!NIL_P(ary)) Check_Type(ary, T_ARRAY);
808
+ case 2:
809
+ enc_flag = argv[1];
810
+ case 1:
811
+ hash = argv[0];
812
+ break;
813
+ case 0:
814
+ rb_raise(rb_eArgError, "too few arguments");
815
+ default: /* >= 3 */
816
+ rb_raise(rb_eArgError, "too many arguments");
817
+ }
818
+
819
+ switch(TYPE(hash)) {
820
+ case T_ARRAY:
821
+ if (RTEST(enc_flag)) {
822
+ return assoc2kv_enc(hash, ary, self);
823
+ } else {
824
+ return assoc2kv(hash, ary, self);
825
+ }
826
+
827
+ case T_HASH:
828
+ if (RTEST(enc_flag)) {
829
+ return hash2kv_enc(hash, ary, self);
830
+ } else {
831
+ return hash2kv(hash, ary, self);
832
+ }
833
+
834
+ case T_NIL:
835
+ if (NIL_P(ary)) {
836
+ return rb_ary_new();
837
+ } else {
838
+ return ary;
839
+ }
840
+
841
+ default:
842
+ if (hash == TK_None) {
843
+ if (NIL_P(ary)) {
844
+ return rb_ary_new();
845
+ } else {
846
+ return ary;
847
+ }
848
+ }
849
+ rb_raise(rb_eArgError, "Hash is expected for 1st argument");
850
+ }
851
+
852
+ UNREACHABLE;
853
+ }
854
+
855
+ static VALUE
856
+ get_eval_string_core(obj, enc_flag, self)
857
+ VALUE obj;
858
+ VALUE enc_flag;
859
+ VALUE self;
860
+ {
861
+ switch(TYPE(obj)) {
862
+ case T_FLOAT:
863
+ case T_FIXNUM:
864
+ case T_BIGNUM:
865
+ return rb_funcallv(obj, ID_to_s, 0, 0);
866
+
867
+ case T_STRING:
868
+ if (RTEST(enc_flag)) {
869
+ if (rb_obj_respond_to(self, ID_toUTF8, Qtrue)) {
870
+ return rb_funcall(self, ID_toUTF8, 1, obj);
871
+ } else {
872
+ return fromDefaultEnc_toUTF8(obj, self);
873
+ }
874
+ } else {
875
+ return obj;
876
+ }
877
+
878
+ case T_SYMBOL:
879
+ if (RTEST(enc_flag)) {
880
+ if (rb_obj_respond_to(self, ID_toUTF8, Qtrue)) {
881
+ return rb_funcall(self, ID_toUTF8, 1,
882
+ rb_str_dup(rb_sym2str(obj)));
883
+ } else {
884
+ return fromDefaultEnc_toUTF8(rb_sym2str(obj), self);
885
+ }
886
+ } else {
887
+ return rb_sym2str(obj);
888
+ }
889
+
890
+ case T_HASH:
891
+ if (RTEST(enc_flag)) {
892
+ return hash2list_enc(obj, self);
893
+ } else {
894
+ return hash2list(obj, self);
895
+ }
896
+
897
+ case T_ARRAY:
898
+ return ary2list(obj, enc_flag, self);
899
+
900
+ case T_FALSE:
901
+ return rb_str_new2("0");
902
+
903
+ case T_TRUE:
904
+ return rb_str_new2("1");
905
+
906
+ case T_NIL:
907
+ return rb_str_new2("");
908
+
909
+ case T_REGEXP:
910
+ return rb_funcallv(obj, ID_source, 0, 0);
911
+
912
+ default:
913
+ if (rb_obj_is_kind_of(obj, cTkObject)) {
914
+ /* return rb_str_new3(rb_funcallv(obj, ID_path, 0, 0)); */
915
+ return get_eval_string_core(rb_funcallv(obj, ID_path, 0, 0),
916
+ enc_flag, self);
917
+ }
918
+
919
+ if (rb_obj_is_kind_of(obj, rb_cProc)
920
+ || rb_obj_is_kind_of(obj, cMethod)
921
+ || rb_obj_is_kind_of(obj, cTkCallbackEntry)) {
922
+ if (rb_obj_respond_to(self, ID_install_cmd, Qtrue)) {
923
+ return rb_funcall(self, ID_install_cmd, 1, obj);
924
+ } else {
925
+ return tk_install_cmd_core(obj);
926
+ }
927
+ }
928
+
929
+ if (obj == TK_None) return Qnil;
930
+
931
+ if (rb_obj_respond_to(obj, ID_to_eval, Qtrue)) {
932
+ /* return rb_funcallv(obj, ID_to_eval, 0, 0); */
933
+ return get_eval_string_core(rb_funcallv(obj, ID_to_eval, 0, 0),
934
+ enc_flag, self);
935
+ } else if (rb_obj_respond_to(obj, ID_path, Qtrue)) {
936
+ /* return rb_funcallv(obj, ID_path, 0, 0); */
937
+ return get_eval_string_core(rb_funcallv(obj, ID_path, 0, 0),
938
+ enc_flag, self);
939
+ } else if (rb_obj_respond_to(obj, ID_to_s, Qtrue)) {
940
+ return rb_funcallv(obj, ID_to_s, 0, 0);
941
+ }
942
+ }
943
+
944
+ rb_warning("fail to convert '%+"PRIsVALUE"' to string for Tk", obj);
945
+
946
+ return obj;
947
+ }
948
+
949
+ static VALUE
950
+ tk_get_eval_string(argc, argv, self)
951
+ int argc;
952
+ VALUE *argv;
953
+ VALUE self;
954
+ {
955
+ VALUE obj, enc_flag;
956
+
957
+ if (rb_scan_args(argc, argv, "11", &obj, &enc_flag) == 1) {
958
+ enc_flag = Qnil;
959
+ }
960
+
961
+ return get_eval_string_core(obj, enc_flag, self);
962
+ }
963
+
964
+ static VALUE
965
+ tk_get_eval_enc_str(self, obj)
966
+ VALUE self;
967
+ VALUE obj;
968
+ {
969
+ if (obj == TK_None) {
970
+ return obj;
971
+ } else {
972
+ return get_eval_string_core(obj, Qtrue, self);
973
+ }
974
+ }
975
+
976
+ static VALUE
977
+ tk_conv_args(argc, argv, self)
978
+ int argc;
979
+ VALUE *argv; /* [0]:base_array, [1]:enc_mode, [2]..[n]:args */
980
+ VALUE self;
981
+ {
982
+ int idx;
983
+ long size;
984
+ volatile VALUE dst;
985
+ int thr_crit_bup;
986
+ VALUE old_gc;
987
+
988
+ if (argc < 2) {
989
+ rb_raise(rb_eArgError, "too few arguments");
990
+ }
991
+
992
+ thr_crit_bup = rb_thread_critical;
993
+ rb_thread_critical = Qtrue;
994
+ old_gc = rb_gc_disable();
995
+
996
+ for(size = 0, idx = 2; idx < argc; idx++) {
997
+ if (RB_TYPE_P(argv[idx], T_HASH)) {
998
+ size += 2 * RHASH_SIZE(argv[idx]);
999
+ } else {
1000
+ size++;
1001
+ }
1002
+ }
1003
+ /* dst = rb_ary_new2(argc - 2); */
1004
+ dst = rb_ary_new2(size);
1005
+ for(idx = 2; idx < argc; idx++) {
1006
+ if (RB_TYPE_P(argv[idx], T_HASH)) {
1007
+ if (RTEST(argv[1])) {
1008
+ hash2kv_enc(argv[idx], dst, self);
1009
+ } else {
1010
+ hash2kv(argv[idx], dst, self);
1011
+ }
1012
+ } else if (argv[idx] != TK_None) {
1013
+ rb_ary_push(dst, get_eval_string_core(argv[idx], argv[1], self));
1014
+ }
1015
+ }
1016
+
1017
+ if (old_gc == Qfalse) rb_gc_enable();
1018
+ rb_thread_critical = thr_crit_bup;
1019
+
1020
+ return rb_ary_plus(argv[0], dst);
1021
+ }
1022
+
1023
+
1024
+ /*************************************/
1025
+
1026
+ static VALUE
1027
+ tcl2rb_bool(self, value)
1028
+ VALUE self;
1029
+ VALUE value;
1030
+ {
1031
+ if (RB_TYPE_P(value, T_FIXNUM)) {
1032
+ if (NUM2INT(value) == 0) {
1033
+ return Qfalse;
1034
+ } else {
1035
+ return Qtrue;
1036
+ }
1037
+ }
1038
+
1039
+ if (value == Qtrue || value == Qfalse) {
1040
+ return value;
1041
+ }
1042
+
1043
+ rb_check_type(value, T_STRING);
1044
+
1045
+ value = rb_funcall(value, ID_downcase, 0);
1046
+
1047
+ if (RSTRING_PTR(value) == (char*)NULL) return Qnil;
1048
+
1049
+ if (RSTRING_PTR(value)[0] == '\0'
1050
+ || strcmp(RSTRING_PTR(value), "0") == 0
1051
+ || strcmp(RSTRING_PTR(value), "no") == 0
1052
+ || strcmp(RSTRING_PTR(value), "off") == 0
1053
+ || strcmp(RSTRING_PTR(value), "false") == 0) {
1054
+ return Qfalse;
1055
+ } else {
1056
+ return Qtrue;
1057
+ }
1058
+ }
1059
+
1060
+ #if 0
1061
+ static VALUE
1062
+ tkstr_to_dec(value)
1063
+ VALUE value;
1064
+ {
1065
+ return rb_cstr_to_inum(RSTRING_PTR(value), 10, 1);
1066
+ }
1067
+ #endif
1068
+
1069
+ static VALUE
1070
+ tkstr_to_int(value)
1071
+ VALUE value;
1072
+ {
1073
+ return rb_cstr_to_inum(RSTRING_PTR(value), 0, 1);
1074
+ }
1075
+
1076
+ static VALUE
1077
+ tkstr_to_float(value)
1078
+ VALUE value;
1079
+ {
1080
+ return rb_float_new(rb_cstr_to_dbl(RSTRING_PTR(value), 1));
1081
+ }
1082
+
1083
+ static VALUE
1084
+ tkstr_invalid_numstr(value)
1085
+ VALUE value;
1086
+ {
1087
+ rb_raise(rb_eArgError,
1088
+ "invalid value for Number: '%s'", RSTRING_PTR(value));
1089
+ return Qnil; /*dummy*/
1090
+ }
1091
+
1092
+ static VALUE
1093
+ tkstr_rescue_float(value)
1094
+ VALUE value;
1095
+ {
1096
+ return rb_rescue2(tkstr_to_float, value,
1097
+ tkstr_invalid_numstr, value,
1098
+ rb_eArgError, 0);
1099
+ }
1100
+
1101
+ static VALUE
1102
+ tkstr_to_number(value)
1103
+ VALUE value;
1104
+ {
1105
+ rb_check_type(value, T_STRING);
1106
+
1107
+ if (RSTRING_PTR(value) == (char*)NULL) return INT2FIX(0);
1108
+
1109
+ return rb_rescue2(tkstr_to_int, value,
1110
+ tkstr_rescue_float, value,
1111
+ rb_eArgError, 0);
1112
+ }
1113
+
1114
+ static VALUE
1115
+ tcl2rb_number(self, value)
1116
+ VALUE self;
1117
+ VALUE value;
1118
+ {
1119
+ return tkstr_to_number(value);
1120
+ }
1121
+
1122
+ static VALUE
1123
+ tkstr_to_str(value)
1124
+ VALUE value;
1125
+ {
1126
+ char * ptr;
1127
+ long len;
1128
+
1129
+ ptr = RSTRING_PTR(value);
1130
+ len = RSTRING_LEN(value);
1131
+
1132
+ if (len > 1 && *ptr == '{' && *(ptr + len - 1) == '}') {
1133
+ return rb_str_new(ptr + 1, len - 2);
1134
+ }
1135
+ return value;
1136
+ }
1137
+
1138
+ static VALUE
1139
+ tcl2rb_string(self, value)
1140
+ VALUE self;
1141
+ VALUE value;
1142
+ {
1143
+ rb_check_type(value, T_STRING);
1144
+
1145
+ if (RSTRING_PTR(value) == (char*)NULL) return rb_tainted_str_new2("");
1146
+
1147
+ return tkstr_to_str(value);
1148
+ }
1149
+
1150
+ static VALUE
1151
+ tcl2rb_num_or_str(self, value)
1152
+ VALUE self;
1153
+ VALUE value;
1154
+ {
1155
+ rb_check_type(value, T_STRING);
1156
+
1157
+ if (RSTRING_PTR(value) == (char*)NULL) return rb_tainted_str_new2("");
1158
+
1159
+ return rb_rescue2(tkstr_to_number, value,
1160
+ tkstr_to_str, value,
1161
+ rb_eArgError, 0);
1162
+ }
1163
+
1164
+ static VALUE
1165
+ tcl2rb_num_or_nil(self, value)
1166
+ VALUE self;
1167
+ VALUE value;
1168
+ {
1169
+ rb_check_type(value, T_STRING);
1170
+
1171
+ if (RSTRING_LEN(value) == 0) return Qnil;
1172
+
1173
+ return tkstr_to_number(value);
1174
+ }
1175
+
1176
+
1177
+ /*************************************/
1178
+
1179
+ #define CBSUBST_TBL_MAX (256)
1180
+ struct cbsubst_info {
1181
+ long full_subst_length;
1182
+ long keylen[CBSUBST_TBL_MAX];
1183
+ char *key[CBSUBST_TBL_MAX];
1184
+ char type[CBSUBST_TBL_MAX];
1185
+ ID ivar[CBSUBST_TBL_MAX];
1186
+ VALUE proc;
1187
+ VALUE aliases;
1188
+ };
1189
+
1190
+ static void
1191
+ subst_mark(ptr)
1192
+ struct cbsubst_info *ptr;
1193
+ {
1194
+ rb_gc_mark(ptr->proc);
1195
+ rb_gc_mark(ptr->aliases);
1196
+ }
1197
+
1198
+ static void
1199
+ subst_free(ptr)
1200
+ struct cbsubst_info *ptr;
1201
+ {
1202
+ int i;
1203
+
1204
+ if (ptr) {
1205
+ for(i = 0; i < CBSUBST_TBL_MAX; i++) {
1206
+ if (ptr->key[i] != NULL) {
1207
+ free(ptr->key[i]); /* allocated by malloc */
1208
+ ptr->key[i] = NULL;
1209
+ }
1210
+ }
1211
+ xfree(ptr); /* allocated by ALLOC */
1212
+ }
1213
+ }
1214
+
1215
+ static size_t
1216
+ subst_memsize(ptr)
1217
+ const struct cbsubst_info *ptr;
1218
+ {
1219
+ return sizeof(*ptr);
1220
+ }
1221
+
1222
+ static const rb_data_type_t cbsubst_info_type = {
1223
+ "TkUtil/CallbackSubst/Info",
1224
+ {
1225
+ subst_mark,
1226
+ subst_free,
1227
+ subst_memsize,
1228
+ },
1229
+ 0, 0, RUBY_TYPED_FREE_IMMEDIATELY,
1230
+ };
1231
+
1232
+ static VALUE
1233
+ allocate_cbsubst_info(struct cbsubst_info **inf_ptr)
1234
+ {
1235
+ struct cbsubst_info *inf;
1236
+ volatile VALUE proc, aliases;
1237
+ int idx;
1238
+
1239
+ VALUE info = TypedData_Make_Struct(cSUBST_INFO, struct cbsubst_info,
1240
+ &cbsubst_info_type, inf);
1241
+
1242
+ inf->full_subst_length = 0;
1243
+
1244
+ for(idx = 0; idx < CBSUBST_TBL_MAX; idx++) {
1245
+ inf->keylen[idx] = 0;
1246
+ inf->key[idx] = NULL;
1247
+ inf->type[idx] = '\0';
1248
+ inf->ivar[idx] = (ID) 0;
1249
+ }
1250
+
1251
+ proc = rb_hash_new();
1252
+ inf->proc = proc;
1253
+
1254
+ aliases = rb_hash_new();
1255
+ inf->aliases = aliases;
1256
+
1257
+ if (inf_ptr != (struct cbsubst_info **)NULL) *inf_ptr = inf;
1258
+
1259
+ return info;
1260
+ }
1261
+
1262
+ static void
1263
+ cbsubst_init(void)
1264
+ {
1265
+ rb_const_set(cCB_SUBST, ID_SUBST_INFO,
1266
+ allocate_cbsubst_info((struct cbsubst_info **)NULL));
1267
+ }
1268
+
1269
+ static struct cbsubst_info *
1270
+ cbsubst_get_ptr(klass)
1271
+ VALUE klass;
1272
+ {
1273
+ return rb_check_typeddata(rb_const_get(klass, ID_SUBST_INFO), &cbsubst_info_type);
1274
+ }
1275
+
1276
+ static VALUE
1277
+ cbsubst_initialize(argc, argv, self)
1278
+ int argc;
1279
+ VALUE *argv;
1280
+ VALUE self;
1281
+ {
1282
+ struct cbsubst_info *inf;
1283
+ int idx, iv_idx;
1284
+
1285
+ inf = cbsubst_get_ptr(rb_obj_class(self));
1286
+
1287
+ if (argc > 0) {
1288
+ idx = 0;
1289
+ for (iv_idx = 0; iv_idx < CBSUBST_TBL_MAX; iv_idx++) {
1290
+ if (inf->ivar[iv_idx] == (ID)0) continue;
1291
+ rb_ivar_set(self, inf->ivar[iv_idx], argv[idx++]);
1292
+ if (idx >= argc) break;
1293
+ }
1294
+ }
1295
+
1296
+ return self;
1297
+ }
1298
+
1299
+ static VALUE
1300
+ cbsubst_ret_val(self, val)
1301
+ VALUE self;
1302
+ VALUE val;
1303
+ {
1304
+ /* This method may be overwritten on some sub-classes. */
1305
+ /* This method is used for converting from ruby's callback-return-value */
1306
+ /* to tcl's value (e.g. validation procedure of entry widget). */
1307
+ return val;
1308
+ }
1309
+
1310
+ static int
1311
+ each_attr_def(key, value, klass)
1312
+ VALUE key, value, klass;
1313
+ {
1314
+ ID key_id, value_id;
1315
+
1316
+ if (key == Qundef) return ST_CONTINUE;
1317
+
1318
+ switch(TYPE(key)) {
1319
+ case T_STRING:
1320
+ key_id = rb_intern_str(key);
1321
+ break;
1322
+ case T_SYMBOL:
1323
+ key_id = SYM2ID(key);
1324
+ break;
1325
+ default:
1326
+ rb_raise(rb_eArgError,
1327
+ "includes invalid key(s). expected a String or a Symbol");
1328
+ }
1329
+
1330
+ switch(TYPE(value)) {
1331
+ case T_STRING:
1332
+ value_id = rb_intern_str(value);
1333
+ break;
1334
+ case T_SYMBOL:
1335
+ value_id = SYM2ID(value);
1336
+ break;
1337
+ default:
1338
+ rb_raise(rb_eArgError,
1339
+ "includes invalid value(s). expected a String or a Symbol");
1340
+ }
1341
+
1342
+ rb_alias(klass, key_id, value_id);
1343
+
1344
+ return ST_CONTINUE;
1345
+ }
1346
+
1347
+ static VALUE
1348
+ cbsubst_def_attr_aliases(self, tbl)
1349
+ VALUE self;
1350
+ VALUE tbl;
1351
+ {
1352
+ struct cbsubst_info *inf;
1353
+
1354
+ if (!RB_TYPE_P(tbl, T_HASH)) {
1355
+ rb_raise(rb_eArgError, "expected a Hash");
1356
+ }
1357
+
1358
+ inf = cbsubst_get_ptr(self);
1359
+
1360
+ rb_hash_foreach(tbl, each_attr_def, self);
1361
+
1362
+ return rb_funcall(inf->aliases, rb_intern("update"), 1, tbl);
1363
+ }
1364
+
1365
+ static VALUE
1366
+ cbsubst_append_inf_key(str, inf, idx)
1367
+ VALUE str;
1368
+ const struct cbsubst_info *inf;
1369
+ int idx;
1370
+ {
1371
+ const long len = inf->keylen[idx];
1372
+ const long olen = RSTRING_LEN(str);
1373
+ char *buf, *ptr;
1374
+
1375
+ rb_str_modify_expand(str, (len ? len : 1) + 2);
1376
+ buf = RSTRING_PTR(str);
1377
+ ptr = buf + olen;
1378
+
1379
+ *(ptr++) = '%';
1380
+
1381
+ if (len != 0) {
1382
+ /* longname */
1383
+ strncpy(ptr, inf->key[idx], len);
1384
+ ptr += len;
1385
+ }
1386
+ else {
1387
+ /* single char */
1388
+ *(ptr++) = (unsigned char)idx;
1389
+ }
1390
+
1391
+ *(ptr++) = ' ';
1392
+
1393
+ rb_str_set_len(str, ptr - buf);
1394
+
1395
+ return str;
1396
+ }
1397
+
1398
+ static VALUE
1399
+ cbsubst_sym_to_subst(self, sym)
1400
+ VALUE self;
1401
+ VALUE sym;
1402
+ {
1403
+ struct cbsubst_info *inf;
1404
+ VALUE str;
1405
+ int idx;
1406
+ ID id;
1407
+ volatile VALUE ret;
1408
+
1409
+ if (!RB_TYPE_P(sym, T_SYMBOL)) return sym;
1410
+
1411
+ inf = cbsubst_get_ptr(self);
1412
+
1413
+ if (!NIL_P(ret = rb_hash_aref(inf->aliases, sym))) {
1414
+ str = rb_sym2str(ret);
1415
+ } else {
1416
+ str = rb_sym2str(sym);
1417
+ }
1418
+
1419
+ id = rb_intern_str(rb_sprintf("@%"PRIsVALUE, str));
1420
+
1421
+ for(idx = 0; idx < CBSUBST_TBL_MAX; idx++) {
1422
+ if (inf->ivar[idx] == id) break;
1423
+ }
1424
+ if (idx >= CBSUBST_TBL_MAX) return sym;
1425
+
1426
+ return cbsubst_append_inf_key(rb_str_new(0, 0), inf, idx);
1427
+ }
1428
+
1429
+ static VALUE
1430
+ cbsubst_get_subst_arg(argc, argv, self)
1431
+ int argc;
1432
+ VALUE *argv;
1433
+ VALUE self;
1434
+ {
1435
+ struct cbsubst_info *inf;
1436
+ VALUE str;
1437
+ int i, idx;
1438
+ ID id;
1439
+ VALUE arg_sym, ret, result;
1440
+
1441
+ inf = cbsubst_get_ptr(self);
1442
+
1443
+ result = rb_str_new(0, 0);
1444
+ for(i = 0; i < argc; i++) {
1445
+ switch(TYPE(argv[i])) {
1446
+ case T_STRING:
1447
+ str = argv[i];
1448
+ arg_sym = rb_check_symbol(&str);
1449
+ if (NIL_P(arg_sym)) goto not_found;
1450
+ break;
1451
+ case T_SYMBOL:
1452
+ arg_sym = argv[i];
1453
+ str = rb_sym2str(arg_sym);
1454
+ break;
1455
+ default:
1456
+ rb_raise(rb_eArgError, "arg #%d is not a String or a Symbol", i);
1457
+ }
1458
+
1459
+ if (!NIL_P(ret = rb_hash_aref(inf->aliases, arg_sym))) {
1460
+ str = rb_sym2str(ret);
1461
+ }
1462
+
1463
+ ret = rb_sprintf("@%"PRIsVALUE, str);
1464
+ id = rb_check_id(&ret);
1465
+ if (!id) goto not_found;
1466
+
1467
+ for(idx = 0; idx < CBSUBST_TBL_MAX; idx++) {
1468
+ if (inf->ivar[idx] == id) break;
1469
+ }
1470
+ if (idx >= CBSUBST_TBL_MAX) {
1471
+ not_found:
1472
+ rb_raise(rb_eArgError, "cannot find attribute :%"PRIsVALUE, str);
1473
+ }
1474
+
1475
+ result = cbsubst_append_inf_key(result, inf, idx);
1476
+ }
1477
+
1478
+ return result;
1479
+ }
1480
+
1481
+ static VALUE
1482
+ cbsubst_get_subst_key(self, str)
1483
+ VALUE self;
1484
+ VALUE str;
1485
+ {
1486
+ struct cbsubst_info *inf;
1487
+ VALUE list;
1488
+ VALUE ret;
1489
+ long i, len, keylen;
1490
+ int idx;
1491
+ char *buf, *ptr;
1492
+
1493
+ list = rb_funcall(cTclTkLib, ID_split_tklist, 1, str);
1494
+ Check_Type(list, T_ARRAY);
1495
+ len = RARRAY_LEN(list);
1496
+
1497
+ inf = cbsubst_get_ptr(self);
1498
+
1499
+ ret = rb_str_new(0, len);
1500
+ ptr = buf = RSTRING_PTR(ret);
1501
+
1502
+ for(i = 0; i < len; i++) {
1503
+ VALUE keyval = RARRAY_AREF(list, i);
1504
+ const char *key = (Check_Type(keyval, T_STRING), StringValueCStr(keyval));
1505
+ if (*key == '%') {
1506
+ if (*(key + 2) == '\0') {
1507
+ /* single char */
1508
+ *(ptr++) = *(key + 1);
1509
+ } else {
1510
+ /* search longname-key */
1511
+ keylen = RSTRING_LEN(keyval) - 1;
1512
+ for(idx = 0; idx < CBSUBST_TBL_MAX; idx++) {
1513
+ if (inf->keylen[idx] != keylen) continue;
1514
+ if ((unsigned char)inf->key[idx][0] != (unsigned char)*(key + 1)) continue;
1515
+ if (strncmp(inf->key[idx], key + 1, keylen)) continue;
1516
+ break;
1517
+ }
1518
+ if (idx < CBSUBST_TBL_MAX) {
1519
+ *(ptr++) = (unsigned char)idx;
1520
+ } else {
1521
+ *(ptr++) = ' ';
1522
+ }
1523
+ }
1524
+ } else {
1525
+ *(ptr++) = ' ';
1526
+ }
1527
+ }
1528
+
1529
+ rb_str_set_len(ret, ptr - buf);
1530
+ return ret;
1531
+ }
1532
+
1533
+ static VALUE
1534
+ cbsubst_get_all_subst_keys(self)
1535
+ VALUE self;
1536
+ {
1537
+ struct cbsubst_info *inf;
1538
+ char *keys_buf, *keys_ptr;
1539
+ int idx;
1540
+ VALUE str, keys_str;
1541
+
1542
+ inf = cbsubst_get_ptr(self);
1543
+
1544
+ str = rb_str_new(0, 0);
1545
+ keys_str = rb_str_new(0, CBSUBST_TBL_MAX);
1546
+ keys_ptr = keys_buf = RSTRING_PTR(keys_str);
1547
+
1548
+ for(idx = 0; idx < CBSUBST_TBL_MAX; idx++) {
1549
+ if (inf->ivar[idx] == (ID) 0) continue;
1550
+
1551
+ *(keys_ptr++) = (unsigned char)idx;
1552
+
1553
+ str = cbsubst_append_inf_key(str, inf, idx);
1554
+ }
1555
+ rb_str_set_len(keys_str, keys_ptr - keys_buf);
1556
+
1557
+ return rb_ary_new3(2, keys_str, str);
1558
+ }
1559
+
1560
+ static VALUE
1561
+ cbsubst_table_setup(argc, argv, self)
1562
+ int argc;
1563
+ VALUE *argv;
1564
+ VALUE self;
1565
+ {
1566
+ VALUE cbsubst_obj;
1567
+ VALUE key_inf;
1568
+ VALUE longkey_inf;
1569
+ VALUE proc_inf;
1570
+ VALUE inf, subst, name, type, ivar, proc;
1571
+ const VALUE *infp;
1572
+ ID id;
1573
+ struct cbsubst_info *subst_inf;
1574
+ long idx;
1575
+ unsigned char chr;
1576
+
1577
+ /* accept (key_inf, proc_inf) or (key_inf, longkey_inf, procinf) */
1578
+ if (rb_scan_args(argc, argv, "21", &key_inf, &longkey_inf, &proc_inf) == 2) {
1579
+ proc_inf = longkey_inf;
1580
+ longkey_inf = rb_ary_new();
1581
+ }
1582
+ Check_Type(key_inf, T_ARRAY);
1583
+ Check_Type(longkey_inf, T_ARRAY);
1584
+ Check_Type(proc_inf, T_ARRAY);
1585
+
1586
+ /* check the number of longkeys */
1587
+ if (RARRAY_LEN(longkey_inf) > 125 /* from 0x80 to 0xFD */) {
1588
+ rb_raise(rb_eArgError, "too many longname-key definitions");
1589
+ }
1590
+
1591
+ /* init */
1592
+ cbsubst_obj = allocate_cbsubst_info(&subst_inf);
1593
+
1594
+ /*
1595
+ * keys : array of [subst, type, ivar]
1596
+ * subst ==> char code or string
1597
+ * type ==> char code or string
1598
+ * ivar ==> symbol
1599
+ */
1600
+ for(idx = 0; idx < RARRAY_LEN(key_inf); idx++) {
1601
+ inf = RARRAY_AREF(key_inf, idx);
1602
+ if (!RB_TYPE_P(inf, T_ARRAY)) continue;
1603
+ if (RARRAY_LEN(inf) < 3) continue;
1604
+ infp = RARRAY_CONST_PTR(inf);
1605
+ subst = infp[0];
1606
+ type = infp[1];
1607
+ ivar = infp[2];
1608
+
1609
+ chr = NUM2CHR(subst);
1610
+ subst_inf->type[chr] = NUM2CHR(type);
1611
+
1612
+ subst_inf->full_subst_length += 3;
1613
+
1614
+ id = SYM2ID(ivar);
1615
+ subst_inf->ivar[chr] = rb_intern_str(rb_sprintf("@%"PRIsVALUE, rb_id2str(id)));
1616
+
1617
+ rb_attr(self, id, 1, 0, Qtrue);
1618
+ }
1619
+ RB_GC_GUARD(key_inf);
1620
+
1621
+
1622
+ /*
1623
+ * longkeys : array of [name, type, ivar]
1624
+ * name ==> longname key string
1625
+ * type ==> char code or string
1626
+ * ivar ==> symbol
1627
+ */
1628
+ for(idx = 0; idx < RARRAY_LEN(longkey_inf); idx++) {
1629
+ inf = RARRAY_AREF(longkey_inf, idx);
1630
+ if (!RB_TYPE_P(inf, T_ARRAY)) continue;
1631
+ if (RARRAY_LEN(inf) < 3) continue;
1632
+ infp = RARRAY_CONST_PTR(inf);
1633
+ name = infp[0];
1634
+ type = infp[1];
1635
+ ivar = infp[2];
1636
+
1637
+ Check_Type(name, T_STRING);
1638
+ chr = (unsigned char)(0x80 + idx);
1639
+ subst_inf->keylen[chr] = RSTRING_LEN(name);
1640
+ subst_inf->key[chr] = strndup(RSTRING_PTR(name),
1641
+ RSTRING_LEN(name));
1642
+ subst_inf->type[chr] = NUM2CHR(type);
1643
+
1644
+ subst_inf->full_subst_length += (subst_inf->keylen[chr] + 2);
1645
+
1646
+ id = SYM2ID(ivar);
1647
+ subst_inf->ivar[chr] = rb_intern_str(rb_sprintf("@%"PRIsVALUE, rb_id2str(id)));
1648
+
1649
+ rb_attr(self, id, 1, 0, Qtrue);
1650
+ }
1651
+ RB_GC_GUARD(longkey_inf);
1652
+
1653
+ /*
1654
+ * procs : array of [type, proc]
1655
+ * type ==> char code or string
1656
+ * proc ==> proc/method/obj (must respond to 'call')
1657
+ */
1658
+ for(idx = 0; idx < RARRAY_LEN(proc_inf); idx++) {
1659
+ inf = RARRAY_AREF(proc_inf, idx);
1660
+ if (!RB_TYPE_P(inf, T_ARRAY)) continue;
1661
+ if (RARRAY_LEN(inf) < 2) continue;
1662
+ type = rb_ary_entry(inf, 0);
1663
+ proc = rb_ary_entry(inf, 1);
1664
+ if (RB_TYPE_P(type, T_STRING))
1665
+ type = INT2FIX(*(RSTRING_PTR(type)));
1666
+ rb_hash_aset(subst_inf->proc, type, proc);
1667
+ }
1668
+ RB_GC_GUARD(proc_inf);
1669
+
1670
+ rb_const_set(self, ID_SUBST_INFO, cbsubst_obj);
1671
+
1672
+ return self;
1673
+ }
1674
+
1675
+ static VALUE
1676
+ cbsubst_get_extra_args_tbl(self)
1677
+ VALUE self;
1678
+ {
1679
+ return rb_ary_new();
1680
+ }
1681
+
1682
+ static VALUE
1683
+ cbsubst_scan_args(self, arg_key, val_ary)
1684
+ VALUE self;
1685
+ VALUE arg_key;
1686
+ VALUE val_ary;
1687
+ {
1688
+ struct cbsubst_info *inf;
1689
+ long idx;
1690
+ unsigned char *keyptr = (unsigned char*)StringValueCStr(arg_key);
1691
+ long keylen = RSTRING_LEN(arg_key);
1692
+ long vallen = (Check_Type(val_ary, T_ARRAY), RARRAY_LEN(val_ary));
1693
+ unsigned char type_chr;
1694
+ volatile VALUE dst = rb_ary_new2(vallen);
1695
+ volatile VALUE proc;
1696
+ int thr_crit_bup;
1697
+ VALUE old_gc;
1698
+
1699
+ thr_crit_bup = rb_thread_critical;
1700
+ rb_thread_critical = Qtrue;
1701
+
1702
+ old_gc = rb_gc_disable();
1703
+
1704
+ inf = cbsubst_get_ptr(self);
1705
+
1706
+ for(idx = 0; idx < vallen; idx++) {
1707
+ if (idx >= keylen) {
1708
+ proc = Qnil;
1709
+ } else if (*(keyptr + idx) == ' ') {
1710
+ proc = Qnil;
1711
+ } else {
1712
+ if ((type_chr = inf->type[*(keyptr + idx)]) != 0) {
1713
+ proc = rb_hash_aref(inf->proc, INT2FIX((int)type_chr));
1714
+ } else {
1715
+ proc = Qnil;
1716
+ }
1717
+ }
1718
+
1719
+ if (NIL_P(proc)) {
1720
+ rb_ary_push(dst, RARRAY_AREF(val_ary, idx));
1721
+ } else {
1722
+ rb_ary_push(dst, rb_funcall(proc, ID_call, 1,
1723
+ RARRAY_AREF(val_ary, idx)));
1724
+ }
1725
+ }
1726
+
1727
+ if (old_gc == Qfalse) rb_gc_enable();
1728
+ rb_thread_critical = thr_crit_bup;
1729
+
1730
+ return dst;
1731
+ }
1732
+
1733
+ static VALUE
1734
+ cbsubst_inspect(self)
1735
+ VALUE self;
1736
+ {
1737
+ return rb_str_new2("CallbackSubst");
1738
+ }
1739
+
1740
+ static VALUE
1741
+ substinfo_inspect(self)
1742
+ VALUE self;
1743
+ {
1744
+ return rb_str_new2("SubstInfo");
1745
+ }
1746
+
1747
+ /*************************************/
1748
+
1749
+ static VALUE
1750
+ tk_cbe_inspect(self)
1751
+ VALUE self;
1752
+ {
1753
+ return rb_str_new2("TkCallbackEntry");
1754
+ }
1755
+
1756
+ /*************************************/
1757
+
1758
+ static VALUE
1759
+ tkobj_path(self)
1760
+ VALUE self;
1761
+ {
1762
+ return rb_ivar_get(self, ID_at_path);
1763
+ }
1764
+
1765
+
1766
+ /*************************************/
1767
+ /* release date */
1768
+ const char tkutil_release_date[] = TKUTIL_RELEASE_DATE;
1769
+
1770
+ void
1771
+ Init_tkutil(void)
1772
+ {
1773
+ VALUE cTK = rb_define_class("TkKernel", rb_cObject);
1774
+ VALUE mTK = rb_define_module("TkUtil");
1775
+
1776
+ /* --------------------- */
1777
+
1778
+ rb_define_const(mTK, "RELEASE_DATE",
1779
+ rb_obj_freeze(rb_str_new2(tkutil_release_date)));
1780
+
1781
+ /* --------------------- */
1782
+ rb_global_variable(&cMethod);
1783
+ cMethod = rb_const_get(rb_cObject, rb_intern("Method"));
1784
+
1785
+ ID_path = rb_intern("path");
1786
+ ID_at_path = rb_intern("@path");
1787
+ ID_at_enc = rb_intern("@encoding");
1788
+ ID_to_eval = rb_intern("to_eval");
1789
+ ID_to_s = rb_intern("to_s");
1790
+ ID_source = rb_intern("source");
1791
+ ID_downcase = rb_intern("downcase");
1792
+ ID_install_cmd = rb_intern("install_cmd");
1793
+ ID_merge_tklist = rb_intern("_merge_tklist");
1794
+ ID_encoding = rb_intern("encoding");
1795
+ ID_encoding_system = rb_intern("encoding_system");
1796
+ ID_call = rb_intern("call");
1797
+
1798
+ /* --------------------- */
1799
+ cCB_SUBST = rb_define_class_under(mTK, "CallbackSubst", rb_cObject);
1800
+ rb_define_singleton_method(cCB_SUBST, "inspect", cbsubst_inspect, 0);
1801
+
1802
+ cSUBST_INFO = rb_define_class_under(cCB_SUBST, "Info", rb_cObject);
1803
+ rb_define_singleton_method(cSUBST_INFO, "inspect", substinfo_inspect, 0);
1804
+
1805
+ ID_SUBST_INFO = rb_intern("SUBST_INFO");
1806
+ rb_define_singleton_method(cCB_SUBST, "ret_val", cbsubst_ret_val, 1);
1807
+ rb_define_singleton_method(cCB_SUBST, "scan_args", cbsubst_scan_args, 2);
1808
+ rb_define_singleton_method(cCB_SUBST, "_sym2subst",
1809
+ cbsubst_sym_to_subst, 1);
1810
+ rb_define_singleton_method(cCB_SUBST, "subst_arg",
1811
+ cbsubst_get_subst_arg, -1);
1812
+ rb_define_singleton_method(cCB_SUBST, "_get_subst_key",
1813
+ cbsubst_get_subst_key, 1);
1814
+ rb_define_singleton_method(cCB_SUBST, "_get_all_subst_keys",
1815
+ cbsubst_get_all_subst_keys, 0);
1816
+ rb_define_singleton_method(cCB_SUBST, "_setup_subst_table",
1817
+ cbsubst_table_setup, -1);
1818
+ rb_define_singleton_method(cCB_SUBST, "_get_extra_args_tbl",
1819
+ cbsubst_get_extra_args_tbl, 0);
1820
+ rb_define_singleton_method(cCB_SUBST, "_define_attribute_aliases",
1821
+ cbsubst_def_attr_aliases, 1);
1822
+
1823
+ rb_define_method(cCB_SUBST, "initialize", cbsubst_initialize, -1);
1824
+
1825
+ cbsubst_init();
1826
+
1827
+ /* --------------------- */
1828
+ rb_global_variable(&cTkCallbackEntry);
1829
+ cTkCallbackEntry = rb_define_class("TkCallbackEntry", cTK);
1830
+ rb_define_singleton_method(cTkCallbackEntry, "inspect", tk_cbe_inspect, 0);
1831
+
1832
+ /* --------------------- */
1833
+ rb_global_variable(&cTkObject);
1834
+ cTkObject = rb_define_class("TkObject", cTK);
1835
+ rb_define_method(cTkObject, "path", tkobj_path, 0);
1836
+
1837
+ /* --------------------- */
1838
+ rb_require("tcltklib");
1839
+ rb_global_variable(&cTclTkLib);
1840
+ cTclTkLib = rb_const_get(rb_cObject, rb_intern("TclTkLib"));
1841
+ ID_split_tklist = rb_intern("_split_tklist");
1842
+ ID_toUTF8 = rb_intern("_toUTF8");
1843
+ ID_fromUTF8 = rb_intern("_fromUTF8");
1844
+
1845
+ /* --------------------- */
1846
+ rb_define_singleton_method(cTK, "new", tk_s_new, -1);
1847
+
1848
+ /* --------------------- */
1849
+ rb_global_variable(&TK_None);
1850
+ TK_None = rb_obj_alloc(rb_cObject);
1851
+ rb_define_const(mTK, "None", TK_None);
1852
+ rb_define_singleton_method(TK_None, "to_s", tkNone_to_s, 0);
1853
+ rb_define_singleton_method(TK_None, "inspect", tkNone_inspect, 0);
1854
+ OBJ_FREEZE(TK_None);
1855
+
1856
+ /* --------------------- */
1857
+ rb_global_variable(&CALLBACK_TABLE);
1858
+ CALLBACK_TABLE = rb_hash_new();
1859
+
1860
+ /* --------------------- */
1861
+ rb_define_singleton_method(mTK, "untrust", tk_obj_untrust, 1);
1862
+
1863
+ rb_define_singleton_method(mTK, "eval_cmd", tk_eval_cmd, -1);
1864
+ rb_define_singleton_method(mTK, "callback", tk_do_callback, -1);
1865
+ rb_define_singleton_method(mTK, "install_cmd", tk_install_cmd, -1);
1866
+ rb_define_singleton_method(mTK, "uninstall_cmd", tk_uninstall_cmd, 1);
1867
+ rb_define_singleton_method(mTK, "_symbolkey2str", tk_symbolkey2str, 1);
1868
+ rb_define_singleton_method(mTK, "hash_kv", tk_hash_kv, -1);
1869
+ rb_define_singleton_method(mTK, "_get_eval_string",
1870
+ tk_get_eval_string, -1);
1871
+ rb_define_singleton_method(mTK, "_get_eval_enc_str",
1872
+ tk_get_eval_enc_str, 1);
1873
+ rb_define_singleton_method(mTK, "_conv_args", tk_conv_args, -1);
1874
+
1875
+ rb_define_singleton_method(mTK, "bool", tcl2rb_bool, 1);
1876
+ rb_define_singleton_method(mTK, "number", tcl2rb_number, 1);
1877
+ rb_define_singleton_method(mTK, "string", tcl2rb_string, 1);
1878
+ rb_define_singleton_method(mTK, "num_or_str", tcl2rb_num_or_str, 1);
1879
+ rb_define_singleton_method(mTK, "num_or_nil", tcl2rb_num_or_nil, 1);
1880
+
1881
+ rb_define_method(mTK, "_toUTF8", tk_toUTF8, -1);
1882
+ rb_define_method(mTK, "_fromUTF8", tk_fromUTF8, -1);
1883
+ rb_define_method(mTK, "_symbolkey2str", tk_symbolkey2str, 1);
1884
+ rb_define_method(mTK, "hash_kv", tk_hash_kv, -1);
1885
+ rb_define_method(mTK, "_get_eval_string", tk_get_eval_string, -1);
1886
+ rb_define_method(mTK, "_get_eval_enc_str", tk_get_eval_enc_str, 1);
1887
+ rb_define_method(mTK, "_conv_args", tk_conv_args, -1);
1888
+
1889
+ rb_define_method(mTK, "bool", tcl2rb_bool, 1);
1890
+ rb_define_method(mTK, "number", tcl2rb_number, 1);
1891
+ rb_define_method(mTK, "string", tcl2rb_string, 1);
1892
+ rb_define_method(mTK, "num_or_str", tcl2rb_num_or_str, 1);
1893
+ rb_define_method(mTK, "num_or_nil", tcl2rb_num_or_nil, 1);
1894
+
1895
+ /* --------------------- */
1896
+ rb_global_variable(&ENCODING_NAME_UTF8);
1897
+ ENCODING_NAME_UTF8 = rb_obj_freeze(rb_str_new2("utf-8"));
1898
+
1899
+ /* --------------------- */
1900
+ }