tk_as_gem 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (345) hide show
  1. data/README +22 -0
  2. data/Rakefile +11 -0
  3. data/VERSION +1 -0
  4. data/ext/ChangeLog.tkextlib +935 -0
  5. data/ext/MANUAL_tcltklib.eng +469 -0
  6. data/ext/MANUAL_tcltklib.eucj +579 -0
  7. data/ext/README.1st +19 -0
  8. data/ext/README.ActiveTcl +49 -0
  9. data/ext/README.fork +34 -0
  10. data/ext/README.macosx-aqua +67 -0
  11. data/ext/README.tcltklib +85 -0
  12. data/ext/depend +2 -0
  13. data/ext/extconf.rb +451 -0
  14. data/ext/lib/README +30 -0
  15. data/ext/lib/multi-tk.rb +3491 -0
  16. data/ext/lib/remote-tk.rb +530 -0
  17. data/ext/lib/tcltk.rb +367 -0
  18. data/ext/lib/tk.rb +5584 -0
  19. data/ext/lib/tk/after.rb +6 -0
  20. data/ext/lib/tk/autoload.rb +414 -0
  21. data/ext/lib/tk/bgerror.rb +29 -0
  22. data/ext/lib/tk/bindtag.rb +138 -0
  23. data/ext/lib/tk/button.rb +30 -0
  24. data/ext/lib/tk/canvas.rb +789 -0
  25. data/ext/lib/tk/canvastag.rb +434 -0
  26. data/ext/lib/tk/checkbutton.rb +30 -0
  27. data/ext/lib/tk/clipboard.rb +75 -0
  28. data/ext/lib/tk/clock.rb +71 -0
  29. data/ext/lib/tk/composite.rb +458 -0
  30. data/ext/lib/tk/console.rb +52 -0
  31. data/ext/lib/tk/dialog.rb +326 -0
  32. data/ext/lib/tk/encodedstr.rb +187 -0
  33. data/ext/lib/tk/entry.rb +119 -0
  34. data/ext/lib/tk/event.rb +542 -0
  35. data/ext/lib/tk/font.rb +2344 -0
  36. data/ext/lib/tk/frame.rb +131 -0
  37. data/ext/lib/tk/grid.rb +279 -0
  38. data/ext/lib/tk/image.rb +275 -0
  39. data/ext/lib/tk/itemconfig.rb +1215 -0
  40. data/ext/lib/tk/itemfont.rb +327 -0
  41. data/ext/lib/tk/kinput.rb +71 -0
  42. data/ext/lib/tk/label.rb +21 -0
  43. data/ext/lib/tk/labelframe.rb +29 -0
  44. data/ext/lib/tk/listbox.rb +282 -0
  45. data/ext/lib/tk/macpkg.rb +78 -0
  46. data/ext/lib/tk/menu.rb +681 -0
  47. data/ext/lib/tk/menubar.rb +131 -0
  48. data/ext/lib/tk/menuspec.rb +275 -0
  49. data/ext/lib/tk/message.rb +22 -0
  50. data/ext/lib/tk/mngfocus.rb +33 -0
  51. data/ext/lib/tk/msgcat.rb +296 -0
  52. data/ext/lib/tk/namespace.rb +551 -0
  53. data/ext/lib/tk/optiondb.rb +377 -0
  54. data/ext/lib/tk/optionobj.rb +212 -0
  55. data/ext/lib/tk/pack.rb +107 -0
  56. data/ext/lib/tk/package.rb +143 -0
  57. data/ext/lib/tk/palette.rb +55 -0
  58. data/ext/lib/tk/panedwindow.rb +258 -0
  59. data/ext/lib/tk/place.rb +128 -0
  60. data/ext/lib/tk/radiobutton.rb +71 -0
  61. data/ext/lib/tk/root.rb +95 -0
  62. data/ext/lib/tk/scale.rb +111 -0
  63. data/ext/lib/tk/scrollable.rb +82 -0
  64. data/ext/lib/tk/scrollbar.rb +177 -0
  65. data/ext/lib/tk/scrollbox.rb +39 -0
  66. data/ext/lib/tk/selection.rb +86 -0
  67. data/ext/lib/tk/spinbox.rb +119 -0
  68. data/ext/lib/tk/tagfont.rb +43 -0
  69. data/ext/lib/tk/text.rb +1596 -0
  70. data/ext/lib/tk/textimage.rb +88 -0
  71. data/ext/lib/tk/textmark.rb +204 -0
  72. data/ext/lib/tk/texttag.rb +318 -0
  73. data/ext/lib/tk/textwindow.rb +154 -0
  74. data/ext/lib/tk/timer.rb +669 -0
  75. data/ext/lib/tk/toplevel.rb +262 -0
  76. data/ext/lib/tk/ttk_selector.rb +76 -0
  77. data/ext/lib/tk/txtwin_abst.rb +39 -0
  78. data/ext/lib/tk/validation.rb +397 -0
  79. data/ext/lib/tk/variable.rb +1765 -0
  80. data/ext/lib/tk/virtevent.rb +139 -0
  81. data/ext/lib/tk/winfo.rb +392 -0
  82. data/ext/lib/tk/winpkg.rb +153 -0
  83. data/ext/lib/tk/wm.rb +552 -0
  84. data/ext/lib/tk/xim.rb +122 -0
  85. data/ext/lib/tkafter.rb +4 -0
  86. data/ext/lib/tkbgerror.rb +4 -0
  87. data/ext/lib/tkcanvas.rb +4 -0
  88. data/ext/lib/tkclass.rb +47 -0
  89. data/ext/lib/tkconsole.rb +4 -0
  90. data/ext/lib/tkdialog.rb +4 -0
  91. data/ext/lib/tkentry.rb +4 -0
  92. data/ext/lib/tkextlib/ICONS.rb +13 -0
  93. data/ext/lib/tkextlib/ICONS/icons.rb +129 -0
  94. data/ext/lib/tkextlib/ICONS/setup.rb +8 -0
  95. data/ext/lib/tkextlib/SUPPORT_STATUS +196 -0
  96. data/ext/lib/tkextlib/blt.rb +187 -0
  97. data/ext/lib/tkextlib/blt/barchart.rb +79 -0
  98. data/ext/lib/tkextlib/blt/bitmap.rb +112 -0
  99. data/ext/lib/tkextlib/blt/busy.rb +82 -0
  100. data/ext/lib/tkextlib/blt/component.rb +2145 -0
  101. data/ext/lib/tkextlib/blt/container.rb +28 -0
  102. data/ext/lib/tkextlib/blt/cutbuffer.rb +23 -0
  103. data/ext/lib/tkextlib/blt/dragdrop.rb +268 -0
  104. data/ext/lib/tkextlib/blt/eps.rb +32 -0
  105. data/ext/lib/tkextlib/blt/graph.rb +67 -0
  106. data/ext/lib/tkextlib/blt/htext.rb +111 -0
  107. data/ext/lib/tkextlib/blt/setup.rb +8 -0
  108. data/ext/lib/tkextlib/blt/spline.rb +23 -0
  109. data/ext/lib/tkextlib/blt/stripchart.rb +74 -0
  110. data/ext/lib/tkextlib/blt/table.rb +399 -0
  111. data/ext/lib/tkextlib/blt/tabnotebook.rb +110 -0
  112. data/ext/lib/tkextlib/blt/tabset.rb +500 -0
  113. data/ext/lib/tkextlib/blt/ted.rb +65 -0
  114. data/ext/lib/tkextlib/blt/tile.rb +21 -0
  115. data/ext/lib/tkextlib/blt/tile/button.rb +16 -0
  116. data/ext/lib/tkextlib/blt/tile/checkbutton.rb +17 -0
  117. data/ext/lib/tkextlib/blt/tile/frame.rb +16 -0
  118. data/ext/lib/tkextlib/blt/tile/label.rb +16 -0
  119. data/ext/lib/tkextlib/blt/tile/radiobutton.rb +17 -0
  120. data/ext/lib/tkextlib/blt/tile/scrollbar.rb +16 -0
  121. data/ext/lib/tkextlib/blt/tile/toplevel.rb +16 -0
  122. data/ext/lib/tkextlib/blt/tree.rb +1058 -0
  123. data/ext/lib/tkextlib/blt/treeview.rb +1272 -0
  124. data/ext/lib/tkextlib/blt/unix_dnd.rb +135 -0
  125. data/ext/lib/tkextlib/blt/vector.rb +256 -0
  126. data/ext/lib/tkextlib/blt/watch.rb +175 -0
  127. data/ext/lib/tkextlib/blt/win_printer.rb +61 -0
  128. data/ext/lib/tkextlib/blt/winop.rb +107 -0
  129. data/ext/lib/tkextlib/bwidget.rb +151 -0
  130. data/ext/lib/tkextlib/bwidget/arrowbutton.rb +21 -0
  131. data/ext/lib/tkextlib/bwidget/bitmap.rb +21 -0
  132. data/ext/lib/tkextlib/bwidget/button.rb +31 -0
  133. data/ext/lib/tkextlib/bwidget/buttonbox.rb +90 -0
  134. data/ext/lib/tkextlib/bwidget/combobox.rb +51 -0
  135. data/ext/lib/tkextlib/bwidget/dialog.rb +182 -0
  136. data/ext/lib/tkextlib/bwidget/dragsite.rb +31 -0
  137. data/ext/lib/tkextlib/bwidget/dropsite.rb +39 -0
  138. data/ext/lib/tkextlib/bwidget/dynamichelp.rb +63 -0
  139. data/ext/lib/tkextlib/bwidget/entry.rb +43 -0
  140. data/ext/lib/tkextlib/bwidget/label.rb +41 -0
  141. data/ext/lib/tkextlib/bwidget/labelentry.rb +80 -0
  142. data/ext/lib/tkextlib/bwidget/labelframe.rb +52 -0
  143. data/ext/lib/tkextlib/bwidget/listbox.rb +358 -0
  144. data/ext/lib/tkextlib/bwidget/mainframe.rb +128 -0
  145. data/ext/lib/tkextlib/bwidget/messagedlg.rb +192 -0
  146. data/ext/lib/tkextlib/bwidget/notebook.rb +166 -0
  147. data/ext/lib/tkextlib/bwidget/pagesmanager.rb +73 -0
  148. data/ext/lib/tkextlib/bwidget/panedwindow.rb +37 -0
  149. data/ext/lib/tkextlib/bwidget/panelframe.rb +57 -0
  150. data/ext/lib/tkextlib/bwidget/passwddlg.rb +44 -0
  151. data/ext/lib/tkextlib/bwidget/progressbar.rb +20 -0
  152. data/ext/lib/tkextlib/bwidget/progressdlg.rb +58 -0
  153. data/ext/lib/tkextlib/bwidget/scrollableframe.rb +40 -0
  154. data/ext/lib/tkextlib/bwidget/scrolledwindow.rb +38 -0
  155. data/ext/lib/tkextlib/bwidget/scrollview.rb +25 -0
  156. data/ext/lib/tkextlib/bwidget/selectcolor.rb +73 -0
  157. data/ext/lib/tkextlib/bwidget/selectfont.rb +86 -0
  158. data/ext/lib/tkextlib/bwidget/separator.rb +20 -0
  159. data/ext/lib/tkextlib/bwidget/setup.rb +8 -0
  160. data/ext/lib/tkextlib/bwidget/spinbox.rb +98 -0
  161. data/ext/lib/tkextlib/bwidget/statusbar.rb +52 -0
  162. data/ext/lib/tkextlib/bwidget/titleframe.rb +33 -0
  163. data/ext/lib/tkextlib/bwidget/tree.rb +453 -0
  164. data/ext/lib/tkextlib/bwidget/widget.rb +129 -0
  165. data/ext/lib/tkextlib/itcl.rb +13 -0
  166. data/ext/lib/tkextlib/itcl/incr_tcl.rb +178 -0
  167. data/ext/lib/tkextlib/itcl/setup.rb +13 -0
  168. data/ext/lib/tkextlib/itk.rb +13 -0
  169. data/ext/lib/tkextlib/itk/incr_tk.rb +446 -0
  170. data/ext/lib/tkextlib/itk/setup.rb +13 -0
  171. data/ext/lib/tkextlib/iwidgets.rb +94 -0
  172. data/ext/lib/tkextlib/iwidgets/buttonbox.rb +120 -0
  173. data/ext/lib/tkextlib/iwidgets/calendar.rb +125 -0
  174. data/ext/lib/tkextlib/iwidgets/canvasprintbox.rb +53 -0
  175. data/ext/lib/tkextlib/iwidgets/canvasprintdialog.rb +38 -0
  176. data/ext/lib/tkextlib/iwidgets/checkbox.rb +129 -0
  177. data/ext/lib/tkextlib/iwidgets/combobox.rb +104 -0
  178. data/ext/lib/tkextlib/iwidgets/dateentry.rb +20 -0
  179. data/ext/lib/tkextlib/iwidgets/datefield.rb +58 -0
  180. data/ext/lib/tkextlib/iwidgets/dialog.rb +20 -0
  181. data/ext/lib/tkextlib/iwidgets/dialogshell.rb +120 -0
  182. data/ext/lib/tkextlib/iwidgets/disjointlistbox.rb +50 -0
  183. data/ext/lib/tkextlib/iwidgets/entryfield.rb +185 -0
  184. data/ext/lib/tkextlib/iwidgets/extbutton.rb +40 -0
  185. data/ext/lib/tkextlib/iwidgets/extfileselectionbox.rb +46 -0
  186. data/ext/lib/tkextlib/iwidgets/extfileselectiondialog.rb +33 -0
  187. data/ext/lib/tkextlib/iwidgets/feedback.rb +35 -0
  188. data/ext/lib/tkextlib/iwidgets/fileselectionbox.rb +46 -0
  189. data/ext/lib/tkextlib/iwidgets/fileselectiondialog.rb +33 -0
  190. data/ext/lib/tkextlib/iwidgets/finddialog.rb +42 -0
  191. data/ext/lib/tkextlib/iwidgets/hierarchy.rb +365 -0
  192. data/ext/lib/tkextlib/iwidgets/hyperhelp.rb +50 -0
  193. data/ext/lib/tkextlib/iwidgets/labeledframe.rb +39 -0
  194. data/ext/lib/tkextlib/iwidgets/labeledwidget.rb +45 -0
  195. data/ext/lib/tkextlib/iwidgets/mainwindow.rb +67 -0
  196. data/ext/lib/tkextlib/iwidgets/menubar.rb +211 -0
  197. data/ext/lib/tkextlib/iwidgets/messagebox.rb +92 -0
  198. data/ext/lib/tkextlib/iwidgets/messagedialog.rb +20 -0
  199. data/ext/lib/tkextlib/iwidgets/notebook.rb +174 -0
  200. data/ext/lib/tkextlib/iwidgets/optionmenu.rb +92 -0
  201. data/ext/lib/tkextlib/iwidgets/panedwindow.rb +133 -0
  202. data/ext/lib/tkextlib/iwidgets/promptdialog.rb +131 -0
  203. data/ext/lib/tkextlib/iwidgets/pushbutton.rb +35 -0
  204. data/ext/lib/tkextlib/iwidgets/radiobox.rb +120 -0
  205. data/ext/lib/tkextlib/iwidgets/scopedobject.rb +24 -0
  206. data/ext/lib/tkextlib/iwidgets/scrolledcanvas.rb +353 -0
  207. data/ext/lib/tkextlib/iwidgets/scrolledframe.rb +59 -0
  208. data/ext/lib/tkextlib/iwidgets/scrolledhtml.rb +58 -0
  209. data/ext/lib/tkextlib/iwidgets/scrolledlistbox.rb +207 -0
  210. data/ext/lib/tkextlib/iwidgets/scrolledtext.rb +564 -0
  211. data/ext/lib/tkextlib/iwidgets/scrolledwidget.rb +20 -0
  212. data/ext/lib/tkextlib/iwidgets/selectionbox.rb +102 -0
  213. data/ext/lib/tkextlib/iwidgets/selectiondialog.rb +92 -0
  214. data/ext/lib/tkextlib/iwidgets/setup.rb +8 -0
  215. data/ext/lib/tkextlib/iwidgets/shell.rb +38 -0
  216. data/ext/lib/tkextlib/iwidgets/spindate.rb +48 -0
  217. data/ext/lib/tkextlib/iwidgets/spinint.rb +30 -0
  218. data/ext/lib/tkextlib/iwidgets/spinner.rb +169 -0
  219. data/ext/lib/tkextlib/iwidgets/spintime.rb +48 -0
  220. data/ext/lib/tkextlib/iwidgets/tabnotebook.rb +180 -0
  221. data/ext/lib/tkextlib/iwidgets/tabset.rb +144 -0
  222. data/ext/lib/tkextlib/iwidgets/timeentry.rb +25 -0
  223. data/ext/lib/tkextlib/iwidgets/timefield.rb +58 -0
  224. data/ext/lib/tkextlib/iwidgets/toolbar.rb +112 -0
  225. data/ext/lib/tkextlib/iwidgets/watch.rb +56 -0
  226. data/ext/lib/tkextlib/pkg_checker.rb +184 -0
  227. data/ext/lib/tkextlib/setup.rb +8 -0
  228. data/ext/lib/tkextlib/tcllib.rb +90 -0
  229. data/ext/lib/tkextlib/tcllib/README +135 -0
  230. data/ext/lib/tkextlib/tcllib/autoscroll.rb +158 -0
  231. data/ext/lib/tkextlib/tcllib/ctext.rb +160 -0
  232. data/ext/lib/tkextlib/tcllib/cursor.rb +97 -0
  233. data/ext/lib/tkextlib/tcllib/datefield.rb +57 -0
  234. data/ext/lib/tkextlib/tcllib/dialog.rb +84 -0
  235. data/ext/lib/tkextlib/tcllib/getstring.rb +134 -0
  236. data/ext/lib/tkextlib/tcllib/history.rb +73 -0
  237. data/ext/lib/tkextlib/tcllib/ico.rb +116 -0
  238. data/ext/lib/tkextlib/tcllib/ip_entry.rb +66 -0
  239. data/ext/lib/tkextlib/tcllib/panelframe.rb +72 -0
  240. data/ext/lib/tkextlib/tcllib/plotchart.rb +886 -0
  241. data/ext/lib/tkextlib/tcllib/ruler.rb +65 -0
  242. data/ext/lib/tkextlib/tcllib/screenruler.rb +68 -0
  243. data/ext/lib/tkextlib/tcllib/scrollwin.rb +61 -0
  244. data/ext/lib/tkextlib/tcllib/setup.rb +8 -0
  245. data/ext/lib/tkextlib/tcllib/style.rb +61 -0
  246. data/ext/lib/tkextlib/tcllib/superframe.rb +51 -0
  247. data/ext/lib/tkextlib/tcllib/swaplist.rb +150 -0
  248. data/ext/lib/tkextlib/tcllib/tablelist.rb +27 -0
  249. data/ext/lib/tkextlib/tcllib/tablelist_core.rb +782 -0
  250. data/ext/lib/tkextlib/tcllib/tablelist_tile.rb +25 -0
  251. data/ext/lib/tkextlib/tcllib/tkpiechart.rb +314 -0
  252. data/ext/lib/tkextlib/tcllib/tooltip.rb +95 -0
  253. data/ext/lib/tkextlib/tcllib/widget.rb +48 -0
  254. data/ext/lib/tkextlib/tclx.rb +13 -0
  255. data/ext/lib/tkextlib/tclx/setup.rb +8 -0
  256. data/ext/lib/tkextlib/tclx/tclx.rb +74 -0
  257. data/ext/lib/tkextlib/tile.rb +419 -0
  258. data/ext/lib/tkextlib/tile/dialog.rb +96 -0
  259. data/ext/lib/tkextlib/tile/setup.rb +8 -0
  260. data/ext/lib/tkextlib/tile/sizegrip.rb +29 -0
  261. data/ext/lib/tkextlib/tile/style.rb +316 -0
  262. data/ext/lib/tkextlib/tile/tbutton.rb +33 -0
  263. data/ext/lib/tkextlib/tile/tcheckbutton.rb +36 -0
  264. data/ext/lib/tkextlib/tile/tcombobox.rb +54 -0
  265. data/ext/lib/tkextlib/tile/tentry.rb +48 -0
  266. data/ext/lib/tkextlib/tile/tframe.rb +33 -0
  267. data/ext/lib/tkextlib/tile/tlabel.rb +33 -0
  268. data/ext/lib/tkextlib/tile/tlabelframe.rb +36 -0
  269. data/ext/lib/tkextlib/tile/tmenubutton.rb +36 -0
  270. data/ext/lib/tkextlib/tile/tnotebook.rb +139 -0
  271. data/ext/lib/tkextlib/tile/tpaned.rb +231 -0
  272. data/ext/lib/tkextlib/tile/tprogressbar.rb +56 -0
  273. data/ext/lib/tkextlib/tile/tradiobutton.rb +36 -0
  274. data/ext/lib/tkextlib/tile/treeview.rb +1239 -0
  275. data/ext/lib/tkextlib/tile/tscale.rb +53 -0
  276. data/ext/lib/tkextlib/tile/tscrollbar.rb +54 -0
  277. data/ext/lib/tkextlib/tile/tseparator.rb +33 -0
  278. data/ext/lib/tkextlib/tile/tsquare.rb +30 -0
  279. data/ext/lib/tkextlib/tkDND.rb +18 -0
  280. data/ext/lib/tkextlib/tkDND/setup.rb +8 -0
  281. data/ext/lib/tkextlib/tkDND/shape.rb +125 -0
  282. data/ext/lib/tkextlib/tkDND/tkdnd.rb +182 -0
  283. data/ext/lib/tkextlib/tkHTML.rb +13 -0
  284. data/ext/lib/tkextlib/tkHTML/htmlwidget.rb +453 -0
  285. data/ext/lib/tkextlib/tkHTML/setup.rb +8 -0
  286. data/ext/lib/tkextlib/tkimg.rb +36 -0
  287. data/ext/lib/tkextlib/tkimg/README +26 -0
  288. data/ext/lib/tkextlib/tkimg/bmp.rb +33 -0
  289. data/ext/lib/tkextlib/tkimg/gif.rb +33 -0
  290. data/ext/lib/tkextlib/tkimg/ico.rb +33 -0
  291. data/ext/lib/tkextlib/tkimg/jpeg.rb +33 -0
  292. data/ext/lib/tkextlib/tkimg/pcx.rb +33 -0
  293. data/ext/lib/tkextlib/tkimg/pixmap.rb +44 -0
  294. data/ext/lib/tkextlib/tkimg/png.rb +33 -0
  295. data/ext/lib/tkextlib/tkimg/ppm.rb +33 -0
  296. data/ext/lib/tkextlib/tkimg/ps.rb +33 -0
  297. data/ext/lib/tkextlib/tkimg/setup.rb +8 -0
  298. data/ext/lib/tkextlib/tkimg/sgi.rb +33 -0
  299. data/ext/lib/tkextlib/tkimg/sun.rb +33 -0
  300. data/ext/lib/tkextlib/tkimg/tga.rb +33 -0
  301. data/ext/lib/tkextlib/tkimg/tiff.rb +33 -0
  302. data/ext/lib/tkextlib/tkimg/window.rb +33 -0
  303. data/ext/lib/tkextlib/tkimg/xbm.rb +33 -0
  304. data/ext/lib/tkextlib/tkimg/xpm.rb +33 -0
  305. data/ext/lib/tkextlib/tktable.rb +14 -0
  306. data/ext/lib/tkextlib/tktable/setup.rb +8 -0
  307. data/ext/lib/tkextlib/tktable/tktable.rb +957 -0
  308. data/ext/lib/tkextlib/tktrans.rb +14 -0
  309. data/ext/lib/tkextlib/tktrans/setup.rb +8 -0
  310. data/ext/lib/tkextlib/tktrans/tktrans.rb +64 -0
  311. data/ext/lib/tkextlib/treectrl.rb +13 -0
  312. data/ext/lib/tkextlib/treectrl/setup.rb +8 -0
  313. data/ext/lib/tkextlib/treectrl/tktreectrl.rb +2461 -0
  314. data/ext/lib/tkextlib/trofs.rb +13 -0
  315. data/ext/lib/tkextlib/trofs/setup.rb +8 -0
  316. data/ext/lib/tkextlib/trofs/trofs.rb +51 -0
  317. data/ext/lib/tkextlib/version.rb +6 -0
  318. data/ext/lib/tkextlib/vu.rb +48 -0
  319. data/ext/lib/tkextlib/vu/bargraph.rb +61 -0
  320. data/ext/lib/tkextlib/vu/charts.rb +53 -0
  321. data/ext/lib/tkextlib/vu/dial.rb +102 -0
  322. data/ext/lib/tkextlib/vu/pie.rb +282 -0
  323. data/ext/lib/tkextlib/vu/setup.rb +8 -0
  324. data/ext/lib/tkextlib/vu/spinbox.rb +22 -0
  325. data/ext/lib/tkextlib/winico.rb +14 -0
  326. data/ext/lib/tkextlib/winico/setup.rb +8 -0
  327. data/ext/lib/tkextlib/winico/winico.rb +224 -0
  328. data/ext/lib/tkfont.rb +4 -0
  329. data/ext/lib/tkmacpkg.rb +4 -0
  330. data/ext/lib/tkmenubar.rb +4 -0
  331. data/ext/lib/tkmngfocus.rb +4 -0
  332. data/ext/lib/tkpalette.rb +4 -0
  333. data/ext/lib/tkscrollbox.rb +4 -0
  334. data/ext/lib/tktext.rb +4 -0
  335. data/ext/lib/tkvirtevent.rb +4 -0
  336. data/ext/lib/tkwinpkg.rb +4 -0
  337. data/ext/old-README.tcltklib.eucj +159 -0
  338. data/ext/stubs.c +531 -0
  339. data/ext/stubs.h +33 -0
  340. data/ext/tcltklib.c +10155 -0
  341. data/ext/tkutil/.cvsignore +3 -0
  342. data/ext/tkutil/depend +1 -0
  343. data/ext/tkutil/extconf.rb +14 -0
  344. data/ext/tkutil/tkutil.c +1789 -0
  345. metadata +418 -0
@@ -0,0 +1,1596 @@
1
+ #
2
+ # tk/text.rb - Tk text classes
3
+ # by Yukihiro Matsumoto <matz@caelum.co.jp>
4
+ require 'tk'
5
+ require 'tk/itemfont'
6
+ require 'tk/itemconfig'
7
+ require 'tk/scrollable'
8
+ require 'tk/txtwin_abst'
9
+
10
+ module TkTextTagConfig
11
+ include TkTreatItemFont
12
+ include TkItemConfigMethod
13
+
14
+ def __item_cget_cmd(id) # id := [ type, tagOrId ]
15
+ [self.path, id[0], 'cget', id[1]]
16
+ end
17
+ private :__item_cget_cmd
18
+
19
+ def __item_config_cmd(id) # id := [ type, tagOrId ]
20
+ [self.path, id[0], 'configure', id[1]]
21
+ end
22
+ private :__item_config_cmd
23
+
24
+ def __item_pathname(id)
25
+ if id.kind_of?(Array)
26
+ id = tagid(id[1])
27
+ end
28
+ [self.path, id].join(';')
29
+ end
30
+ private :__item_pathname
31
+
32
+ def tag_cget(tagOrId, option)
33
+ itemcget(['tag', tagOrId], option)
34
+ end
35
+ def tag_cget_strict(tagOrId, option)
36
+ itemcget_strict(['tag', tagOrId], option)
37
+ end
38
+ def tag_configure(tagOrId, slot, value=None)
39
+ itemconfigure(['tag', tagOrId], slot, value)
40
+ end
41
+ def tag_configinfo(tagOrId, slot=nil)
42
+ itemconfiginfo(['tag', tagOrId], slot)
43
+ end
44
+ def current_tag_configinfo(tagOrId, slot=nil)
45
+ current_itemconfiginfo(['tag', tagOrId], slot)
46
+ end
47
+
48
+ def window_cget(tagOrId, option)
49
+ itemcget(['window', tagOrId], option)
50
+ end
51
+ def window_cget_strict(tagOrId, option)
52
+ itemcget_strict(['window', tagOrId], option)
53
+ end
54
+ def window_configure(tagOrId, slot, value=None)
55
+ itemconfigure(['window', tagOrId], slot, value)
56
+ end
57
+ def window_configinfo(tagOrId, slot=nil)
58
+ itemconfiginfo(['window', tagOrId], slot)
59
+ end
60
+ def current_window_configinfo(tagOrId, slot=nil)
61
+ current_itemconfiginfo(['window', tagOrId], slot)
62
+ end
63
+
64
+ private :itemcget, :itemcget_strict
65
+ private :itemconfigure, :itemconfiginfo, :current_itemconfiginfo
66
+ end
67
+
68
+ class Tk::Text<TkTextWin
69
+ ItemConfCMD = ['tag'.freeze, 'configure'.freeze].freeze
70
+ #include TkTreatTextTagFont
71
+ include TkTextTagConfig
72
+ include Scrollable
73
+
74
+ #######################################
75
+
76
+ module IndexModMethods
77
+ def +(mod)
78
+ return chars(mod) if mod.kind_of?(Numeric)
79
+
80
+ mod = mod.to_s
81
+ if mod =~ /^\s*[+-]?\d/
82
+ Tk::Text::IndexString.new(String.new(id) << ' + ' << mod)
83
+ else
84
+ Tk::Text::IndexString.new(String.new(id) << ' ' << mod)
85
+ end
86
+ end
87
+
88
+ def -(mod)
89
+ return chars(-mod) if mod.kind_of?(Numeric)
90
+
91
+ mod = mod.to_s
92
+ if mod =~ /^\s*[+-]?\d/
93
+ Tk::Text::IndexString.new(String.new(id) << ' - ' << mod)
94
+ elsif mod =~ /^\s*[-]\s+(\d.*)$/
95
+ Tk::Text::IndexString.new(String.new(id) << ' - -' << $1)
96
+ else
97
+ Tk::Text::IndexString.new(String.new(id) << ' ' << mod)
98
+ end
99
+ end
100
+
101
+ def chars(mod)
102
+ fail ArgumentError, 'expect Integer' unless mod.kind_of?(Integer)
103
+ if mod < 0
104
+ Tk::Text::IndexString.new(String.new(id) << ' ' << mod.to_s << ' chars')
105
+ else
106
+ Tk::Text::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' chars')
107
+ end
108
+ end
109
+ alias char chars
110
+
111
+ def display_chars(mod)
112
+ # Tk8.5 feature
113
+ fail ArgumentError, 'expect Integer' unless mod.kind_of?(Integer)
114
+ if mod < 0
115
+ Tk::Text::IndexString.new(String.new(id) << ' ' << mod.to_s << ' display chars')
116
+ else
117
+ Tk::Text::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' display chars')
118
+ end
119
+ end
120
+ alias display_char display_chars
121
+
122
+ def any_chars(mod)
123
+ # Tk8.5 feature
124
+ fail ArgumentError, 'expect Integer' unless mod.kind_of?(Integer)
125
+ if mod < 0
126
+ Tk::Text::IndexString.new(String.new(id) << ' ' << mod.to_s << ' any chars')
127
+ else
128
+ Tk::Text::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' any chars')
129
+ end
130
+ end
131
+ alias any_char any_chars
132
+
133
+ def indices(mod)
134
+ # Tk8.5 feature
135
+ fail ArgumentError, 'expect Integer' unless mod.kind_of?(Integer)
136
+ if mod < 0
137
+ Tk::Text::IndexString.new(String.new(id) << ' ' << mod.to_s << ' indices')
138
+ else
139
+ Tk::Text::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' indices')
140
+ end
141
+ end
142
+
143
+ def display_indices(mod)
144
+ # Tk8.5 feature
145
+ fail ArgumentError, 'expect Integer' unless mod.kind_of?(Integer)
146
+ if mod < 0
147
+ Tk::Text::IndexString.new(String.new(id) << ' ' << mod.to_s << ' display indices')
148
+ else
149
+ Tk::Text::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' display indices')
150
+ end
151
+ end
152
+
153
+ def any_indices(mod)
154
+ # Tk8.5 feature
155
+ fail ArgumentError, 'expect Integer' unless mod.kind_of?(Integer)
156
+ if mod < 0
157
+ Tk::Text::IndexString.new(String.new(id) << ' ' << mod.to_s << ' any indices')
158
+ else
159
+ Tk::Text::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' any indices')
160
+ end
161
+ end
162
+
163
+ def lines(mod)
164
+ fail ArgumentError, 'expect Integer' unless mod.kind_of?(Integer)
165
+ if mod < 0
166
+ Tk::Text::IndexString.new(String.new(id) << ' ' << mod.to_s << ' lines')
167
+ else
168
+ Tk::Text::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' lines')
169
+ end
170
+ end
171
+ alias line lines
172
+
173
+ def display_lines(mod)
174
+ # Tk8.5 feature
175
+ fail ArgumentError, 'expect Integer' unless mod.kind_of?(Integer)
176
+ if mod < 0
177
+ Tk::Text::IndexString.new(String.new(id) << ' ' << mod.to_s << ' display_lines')
178
+ else
179
+ Tk::Text::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' display lines')
180
+ end
181
+ end
182
+ alias display_line display_lines
183
+
184
+ def any_lines(mod)
185
+ # Tk8.5 feature
186
+ fail ArgumentError, 'expect Integer' unless mod.kind_of?(Integer)
187
+ if mod < 0
188
+ Tk::Text::IndexString.new(String.new(id) << ' ' << mod.to_s << ' any_lines')
189
+ else
190
+ Tk::Text::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' any lines')
191
+ end
192
+ end
193
+ alias any_line any_lines
194
+
195
+ def linestart
196
+ Tk::Text::IndexString.new(String.new(id) << ' linestart')
197
+ end
198
+ def lineend
199
+ Tk::Text::IndexString.new(String.new(id) << ' lineend')
200
+ end
201
+
202
+ def display_linestart
203
+ # Tk8.5 feature
204
+ Tk::Text::IndexString.new(String.new(id) << ' display linestart')
205
+ end
206
+ def display_lineend
207
+ # Tk8.5 feature
208
+ Tk::Text::IndexString.new(String.new(id) << ' display lineend')
209
+ end
210
+
211
+ def wordstart
212
+ Tk::Text::IndexString.new(String.new(id) << ' wordstart')
213
+ end
214
+ def wordend
215
+ Tk::Text::IndexString.new(String.new(id) << ' wordend')
216
+ end
217
+
218
+ def display_wordstart
219
+ # Tk8.5 feature
220
+ Tk::Text::IndexString.new(String.new(id) << ' display wordstart')
221
+ end
222
+ def display_wordend
223
+ # Tk8.5 feature
224
+ Tk::Text::IndexString.new(String.new(id) << ' display wordend')
225
+ end
226
+ end
227
+
228
+ class IndexString < String
229
+ include IndexModMethods
230
+
231
+ def self.at(x,y)
232
+ self.new("@#{x},#{y}")
233
+ end
234
+
235
+ def self.new(str)
236
+ if str.kind_of?(String)
237
+ super(str)
238
+ elsif str.kind_of?(Symbol)
239
+ super(str.to_s)
240
+ else
241
+ str
242
+ end
243
+ end
244
+
245
+ def id
246
+ self
247
+ end
248
+ end
249
+
250
+ #######################################
251
+
252
+ TkCommandNames = ['text'.freeze].freeze
253
+ WidgetClassName = 'Text'.freeze
254
+ WidgetClassNames[WidgetClassName] = self
255
+
256
+ def self.new(*args, &block)
257
+ obj = super(*args){}
258
+ obj.init_instance_variable
259
+ if TkCore::WITH_RUBY_VM ### Ruby 1.9 !!!!
260
+ obj.instance_exec(obj, &block) if defined? yield
261
+ else
262
+ obj.instance_eval(&block) if defined? yield
263
+ end
264
+ obj
265
+ end
266
+
267
+ def init_instance_variable
268
+ @cmdtbl = []
269
+ @tags = {}
270
+ end
271
+
272
+ def __destroy_hook__
273
+ TkTextTag::TTagID_TBL.mutex.synchronize{
274
+ TkTextTag::TTagID_TBL.delete(@path)
275
+ }
276
+ TkTextTag::TMarkID_TBL.mutex.synchronize{
277
+ TkTextMark::TMarkID_TBL.delete(@path)
278
+ }
279
+ end
280
+
281
+ def create_self(keys)
282
+ #if keys and keys != None
283
+ # #tk_call_without_enc('text', @path, *hash_kv(keys, true))
284
+ # tk_call_without_enc(self.class::TkCommandNames[0], @path,
285
+ # *hash_kv(keys, true))
286
+ #else
287
+ # #tk_call_without_enc('text', @path)
288
+ # tk_call_without_enc(self.class::TkCommandNames[0], @path)
289
+ #end
290
+ super(keys)
291
+ init_instance_variable
292
+ end
293
+ private :create_self
294
+
295
+ def __strval_optkeys
296
+ super() << 'inactiveseletcionbackground'
297
+ end
298
+ private :__strval_optkeys
299
+
300
+ def self.at(x, y)
301
+ Tk::Text::IndexString.at(x, y)
302
+ end
303
+
304
+ def at(x, y)
305
+ Tk::Text::IndexString.at(x, y)
306
+ end
307
+
308
+ def index(idx)
309
+ Tk::Text::IndexString.new(tk_send_without_enc('index',
310
+ _get_eval_enc_str(idx)))
311
+ end
312
+
313
+ def get_displaychars(*index)
314
+ # Tk8.5 feature
315
+ get('-displaychars', *index)
316
+ end
317
+
318
+ def value
319
+ _fromUTF8(tk_send_without_enc('get', "1.0", "end - 1 char"))
320
+ end
321
+
322
+ def value= (val)
323
+ tk_send_without_enc('delete', "1.0", 'end')
324
+ tk_send_without_enc('insert', "1.0", _get_eval_enc_str(val))
325
+ val
326
+ end
327
+
328
+ def clear
329
+ tk_send_without_enc('delete', "1.0", 'end')
330
+ self
331
+ end
332
+ alias erase clear
333
+
334
+ def _addcmd(cmd)
335
+ @cmdtbl.push cmd
336
+ end
337
+
338
+ def _addtag(name, obj)
339
+ @tags[name] = obj
340
+ end
341
+
342
+ def tagid(tag)
343
+ if tag.kind_of?(TkTextTag) \
344
+ || tag.kind_of?(TkTextMark) \
345
+ || tag.kind_of?(TkTextImage) \
346
+ || tag.kind_of?(TkTextWindow)
347
+ tag.id
348
+ else
349
+ tag # maybe an Array of configure paramters
350
+ end
351
+ end
352
+ private :tagid
353
+
354
+ def tagid2obj(tagid)
355
+ if @tags[tagid]
356
+ @tags[tagid]
357
+ else
358
+ tagid
359
+ end
360
+ end
361
+
362
+ def tag_names(index=None)
363
+ #tk_split_simplelist(_fromUTF8(tk_send_without_enc('tag', 'names', _get_eval_enc_str(index)))).collect{|elt|
364
+ tk_split_simplelist(tk_send_without_enc('tag', 'names', _get_eval_enc_str(index)), false, true).collect{|elt|
365
+ tagid2obj(elt)
366
+ }
367
+ end
368
+
369
+ def mark_names
370
+ #tk_split_simplelist(_fromUTF8(tk_send_without_enc('mark', 'names'))).collect{|elt|
371
+ tk_split_simplelist(tk_send_without_enc('mark', 'names'), false, true).collect{|elt|
372
+ tagid2obj(elt)
373
+ }
374
+ end
375
+
376
+ def mark_gravity(mark, direction=nil)
377
+ if direction
378
+ tk_send_without_enc('mark', 'gravity',
379
+ _get_eval_enc_str(mark), direction)
380
+ self
381
+ else
382
+ tk_send_without_enc('mark', 'gravity', _get_eval_enc_str(mark))
383
+ end
384
+ end
385
+
386
+ def mark_set(mark, index)
387
+ tk_send_without_enc('mark', 'set', _get_eval_enc_str(mark),
388
+ _get_eval_enc_str(index))
389
+ self
390
+ end
391
+ alias set_mark mark_set
392
+
393
+ def mark_unset(*marks)
394
+ tk_send_without_enc('mark', 'unset',
395
+ *(marks.collect{|mark| _get_eval_enc_str(mark)}))
396
+ self
397
+ end
398
+ alias unset_mark mark_unset
399
+
400
+ def mark_next(index)
401
+ tagid2obj(_fromUTF8(tk_send_without_enc('mark', 'next',
402
+ _get_eval_enc_str(index))))
403
+ end
404
+ alias next_mark mark_next
405
+
406
+ def mark_previous(index)
407
+ tagid2obj(_fromUTF8(tk_send_without_enc('mark', 'previous',
408
+ _get_eval_enc_str(index))))
409
+ end
410
+ alias previous_mark mark_previous
411
+
412
+ def image_cget_strict(index, slot)
413
+ case slot.to_s
414
+ when 'text', 'label', 'show', 'data', 'file'
415
+ _fromUTF8(tk_send_without_enc('image', 'cget',
416
+ _get_eval_enc_str(index), "-#{slot}"))
417
+ else
418
+ tk_tcl2ruby(_fromUTF8(tk_send_without_enc('image', 'cget',
419
+ _get_eval_enc_str(index),
420
+ "-#{slot}")))
421
+ end
422
+ end
423
+
424
+ def image_cget(index, slot)
425
+ unless TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__
426
+ image_cget_strict(index, slot)
427
+ else
428
+ begin
429
+ image_cget_strict(index, slot)
430
+ rescue => e
431
+ begin
432
+ if current_image_configinfo(index).has_key?(slot.to_s)
433
+ # not tag error & option is known -> error on known option
434
+ fail e
435
+ else
436
+ # not tag error & option is unknown
437
+ nil
438
+ end
439
+ rescue
440
+ fail e # tag error
441
+ end
442
+ end
443
+ end
444
+ end
445
+
446
+ def image_configure(index, slot, value=None)
447
+ if slot.kind_of?(Hash)
448
+ _fromUTF8(tk_send_without_enc('image', 'configure',
449
+ _get_eval_enc_str(index),
450
+ *hash_kv(slot, true)))
451
+ else
452
+ _fromUTF8(tk_send_without_enc('image', 'configure',
453
+ _get_eval_enc_str(index),
454
+ "-#{slot}",
455
+ _get_eval_enc_str(value)))
456
+ end
457
+ self
458
+ end
459
+
460
+ def image_configinfo(index, slot = nil)
461
+ if TkComm::GET_CONFIGINFO_AS_ARRAY
462
+ if slot
463
+ case slot.to_s
464
+ when 'text', 'label', 'show', 'data', 'file'
465
+ #conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}")))
466
+ conf = tk_split_simplelist(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}"), false, true)
467
+ else
468
+ #conf = tk_split_list(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}")))
469
+ conf = tk_split_list(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}"), 0, false, true)
470
+ end
471
+ conf[0] = conf[0][1..-1]
472
+ conf
473
+ else
474
+ # tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index)))).collect{|conflist|
475
+ # conf = tk_split_simplelist(conflist)
476
+ tk_split_simplelist(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index)), false, false).collect{|conflist|
477
+ conf = tk_split_simplelist(conflist, false, true)
478
+ conf[0] = conf[0][1..-1]
479
+ case conf[0]
480
+ when 'text', 'label', 'show', 'data', 'file'
481
+ else
482
+ if conf[3]
483
+ if conf[3].index('{')
484
+ conf[3] = tk_split_list(conf[3])
485
+ else
486
+ conf[3] = tk_tcl2ruby(conf[3])
487
+ end
488
+ end
489
+ if conf[4]
490
+ if conf[4].index('{')
491
+ conf[4] = tk_split_list(conf[4])
492
+ else
493
+ conf[4] = tk_tcl2ruby(conf[4])
494
+ end
495
+ end
496
+ end
497
+ conf[1] = conf[1][1..-1] if conf.size == 2 # alias info
498
+ conf
499
+ }
500
+ end
501
+ else # ! TkComm::GET_CONFIGINFO_AS_ARRAY
502
+ if slot
503
+ case slot.to_s
504
+ when 'text', 'label', 'show', 'data', 'file'
505
+ #conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}")))
506
+ conf = tk_split_simplelist(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}"), false, true)
507
+ else
508
+ #conf = tk_split_list(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}")))
509
+ conf = tk_split_list(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}"), 0, false, true)
510
+ end
511
+ key = conf.shift[1..-1]
512
+ { key => conf }
513
+ else
514
+ ret = {}
515
+ #tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index)))).each{|conflist|
516
+ # conf = tk_split_simplelist(conflist)
517
+ tk_split_simplelist(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index)), false, false).each{|conflist|
518
+ conf = tk_split_simplelist(conflist, false, true)
519
+ key = conf.shift[1..-1]
520
+ case key
521
+ when 'text', 'label', 'show', 'data', 'file'
522
+ else
523
+ if conf[2]
524
+ if conf[2].index('{')
525
+ conf[2] = tk_split_list(conf[2])
526
+ else
527
+ conf[2] = tk_tcl2ruby(conf[2])
528
+ end
529
+ end
530
+ if conf[3]
531
+ if conf[3].index('{')
532
+ conf[3] = tk_split_list(conf[3])
533
+ else
534
+ conf[3] = tk_tcl2ruby(conf[3])
535
+ end
536
+ end
537
+ end
538
+ if conf.size == 1
539
+ ret[key] = conf[0][1..-1] # alias info
540
+ else
541
+ ret[key] = conf
542
+ end
543
+ }
544
+ ret
545
+ end
546
+ end
547
+ end
548
+
549
+ def current_image_configinfo(index, slot = nil)
550
+ if TkComm::GET_CONFIGINFO_AS_ARRAY
551
+ if slot
552
+ conf = image_configinfo(index, slot)
553
+ {conf[0] => conf[4]}
554
+ else
555
+ ret = {}
556
+ image_configinfo(index).each{|conf|
557
+ ret[conf[0]] = conf[4] if conf.size > 2
558
+ }
559
+ ret
560
+ end
561
+ else # ! TkComm::GET_CONFIGINFO_AS_ARRAY
562
+ ret = {}
563
+ image_configinfo(index, slot).each{|k, conf|
564
+ ret[k] = conf[-1] if conf.kind_of?(Array)
565
+ }
566
+ ret
567
+ end
568
+ end
569
+
570
+ def image_names
571
+ #tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'names'))).collect{|elt|
572
+ tk_split_simplelist(tk_send_without_enc('image', 'names'), false, true).collect{|elt|
573
+ tagid2obj(elt)
574
+ }
575
+ end
576
+
577
+ def set_insert(index)
578
+ tk_send_without_enc('mark','set','insert', _get_eval_enc_str(index))
579
+ self
580
+ end
581
+
582
+ def set_current(index)
583
+ tk_send_without_enc('mark','set','current', _get_eval_enc_str(index))
584
+ self
585
+ end
586
+
587
+ def insert(index, chars, *tags)
588
+ if tags[0].kind_of?(Array)
589
+ # multiple chars-taglist argument :: str, [tag,...], str, [tag,...], ...
590
+ args = [chars]
591
+ while tags.size > 0
592
+ args << tags.shift.collect{|x|_get_eval_string(x)}.join(' ') # taglist
593
+ args << tags.shift if tags.size > 0 # chars
594
+ end
595
+ super(index, *args)
596
+ else
597
+ # single chars-taglist argument :: str, tag, tag, ...
598
+ if tags.size == 0
599
+ super(index, chars)
600
+ else
601
+ super(index, chars, tags.collect{|x|_get_eval_string(x)}.join(' '))
602
+ end
603
+ end
604
+ end
605
+
606
+ def destroy
607
+ @tags = {} unless @tags
608
+ @tags.each_value do |t|
609
+ t.destroy
610
+ end
611
+ super()
612
+ end
613
+
614
+ def backspace
615
+ self.delete 'insert'
616
+ end
617
+
618
+ def bbox(index)
619
+ list(tk_send_without_enc('bbox', _get_eval_enc_str(index)))
620
+ end
621
+
622
+ def compare(idx1, op, idx2)
623
+ bool(tk_send_without_enc('compare', _get_eval_enc_str(idx1),
624
+ op, _get_eval_enc_str(idx2)))
625
+ end
626
+
627
+ def count(idx1, idx2, *opts)
628
+ # opts are Tk8.5 feature
629
+ cnt = 0
630
+ args = opts.collect{|opt|
631
+ str = opt.to_s
632
+ cnt += 1 if str != 'update'
633
+ '-' + str
634
+ }
635
+ args << _get_eval_enc_str(idx1) << _get_eval_enc_str(idx2)
636
+ if cnt <= 1
637
+ number(tk_send_without_enc('count', *opts))
638
+ else
639
+ list(tk_send_without_enc('count', *opts))
640
+ end
641
+ end
642
+
643
+ def count_info(idx1, idx2, update=true)
644
+ # Tk8.5 feature
645
+ opts = [
646
+ :chars, :displaychars, :displayindices, :displaylines,
647
+ :indices, :lines, :xpixels, :ypixels
648
+ ]
649
+ if update
650
+ lst = count(idx1, idx2, :update, *opts)
651
+ else
652
+ lst = count(idx1, idx2, *opts)
653
+ end
654
+ info = {}
655
+ opts.each_with_index{|key, idx| info[key] = lst[idx]}
656
+ info
657
+ end
658
+
659
+ def peer_names()
660
+ # Tk8.5 feature
661
+ list(tk_send_without_enc('peer', 'names'))
662
+ end
663
+
664
+ def replace(idx1, idx2, *opts)
665
+ tk_send('replace', idx1, idx2, *opts)
666
+ self
667
+ end
668
+
669
+ def debug
670
+ bool(tk_send_without_enc('debug'))
671
+ end
672
+ def debug=(boolean)
673
+ tk_send_without_enc('debug', boolean)
674
+ #self
675
+ boolean
676
+ end
677
+
678
+ def dlineinfo(index)
679
+ list(tk_send_without_enc('dlineinfo', _get_eval_enc_str(index)))
680
+ end
681
+
682
+ def modified?
683
+ bool(tk_send_without_enc('edit', 'modified'))
684
+ end
685
+ def modified(mode)
686
+ tk_send_without_enc('edit', 'modified', mode)
687
+ self
688
+ end
689
+ def modified=(mode)
690
+ modified(mode)
691
+ mode
692
+ end
693
+
694
+ def edit_redo
695
+ tk_send_without_enc('edit', 'redo')
696
+ self
697
+ end
698
+ def edit_reset
699
+ tk_send_without_enc('edit', 'reset')
700
+ self
701
+ end
702
+ def edit_separator
703
+ tk_send_without_enc('edit', 'separator')
704
+ self
705
+ end
706
+ def edit_undo
707
+ tk_send_without_enc('edit', 'undo')
708
+ self
709
+ end
710
+
711
+ def xview_pickplace(index)
712
+ tk_send_without_enc('xview', '-pickplace', _get_eval_enc_str(index))
713
+ self
714
+ end
715
+
716
+ def yview_pickplace(index)
717
+ tk_send_without_enc('yview', '-pickplace', _get_eval_enc_str(index))
718
+ self
719
+ end
720
+
721
+ def text_copy
722
+ # Tk8.4 feature
723
+ tk_call_without_enc('tk_textCopy', @path)
724
+ self
725
+ end
726
+
727
+ def text_cut
728
+ # Tk8.4 feature
729
+ tk_call_without_enc('tk_textCut', @path)
730
+ self
731
+ end
732
+
733
+ def text_paste
734
+ # Tk8.4 feature
735
+ tk_call_without_enc('tk_textPaste', @path)
736
+ self
737
+ end
738
+
739
+ def tag_add(tag, index1, index2=None)
740
+ tk_send_without_enc('tag', 'add', _get_eval_enc_str(tag),
741
+ _get_eval_enc_str(index1),
742
+ _get_eval_enc_str(index2))
743
+ self
744
+ end
745
+ alias addtag tag_add
746
+ alias add_tag tag_add
747
+
748
+ def tag_delete(*tags)
749
+ tk_send_without_enc('tag', 'delete',
750
+ *(tags.collect{|tag| _get_eval_enc_str(tag)}))
751
+ TkTextTag::TTagID_TBL.mutex.synchronize{
752
+ if TkTextTag::TTagID_TBL[@path]
753
+ tags.each{|tag|
754
+ if tag.kind_of?(TkTextTag)
755
+ TkTextTag::TTagID_TBL[@path].delete(tag.id)
756
+ else
757
+ TkTextTag::TTagID_TBL[@path].delete(tag)
758
+ end
759
+ }
760
+ end
761
+ }
762
+ self
763
+ end
764
+ alias deltag tag_delete
765
+ alias delete_tag tag_delete
766
+
767
+ #def tag_bind(tag, seq, cmd=Proc.new, *args)
768
+ # _bind([@path, 'tag', 'bind', tag], seq, cmd, *args)
769
+ # self
770
+ #end
771
+ def tag_bind(tag, seq, *args)
772
+ # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
773
+ if TkComm._callback_entry?(args[0]) || !block_given?
774
+ cmd = args.shift
775
+ else
776
+ cmd = Proc.new
777
+ end
778
+ _bind([@path, 'tag', 'bind', tag], seq, cmd, *args)
779
+ self
780
+ end
781
+
782
+ #def tag_bind_append(tag, seq, cmd=Proc.new, *args)
783
+ # _bind_append([@path, 'tag', 'bind', tag], seq, cmd, *args)
784
+ # self
785
+ #end
786
+ def tag_bind_append(tag, seq, *args)
787
+ # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
788
+ if TkComm._callback_entry?(args[0]) || !block_given?
789
+ cmd = args.shift
790
+ else
791
+ cmd = Proc.new
792
+ end
793
+ _bind_append([@path, 'tag', 'bind', tag], seq, cmd, *args)
794
+ self
795
+ end
796
+
797
+ def tag_bind_remove(tag, seq)
798
+ _bind_remove([@path, 'tag', 'bind', tag], seq)
799
+ self
800
+ end
801
+
802
+ def tag_bindinfo(tag, context=nil)
803
+ _bindinfo([@path, 'tag', 'bind', tag], context)
804
+ end
805
+
806
+ =begin
807
+ def tag_cget(tag, key)
808
+ case key.to_s
809
+ when 'text', 'label', 'show', 'data', 'file'
810
+ tk_call_without_enc(@path, 'tag', 'cget',
811
+ _get_eval_enc_str(tag), "-#{key}")
812
+ when 'font', 'kanjifont'
813
+ #fnt = tk_tcl2ruby(tk_send('tag', 'cget', tag, "-#{key}"))
814
+ fnt = tk_tcl2ruby(_fromUTF8(tk_send_without_enc('tag','cget',_get_eval_enc_str(tag),'-font')))
815
+ unless fnt.kind_of?(TkFont)
816
+ fnt = tagfontobj(tag, fnt)
817
+ end
818
+ if key.to_s == 'kanjifont' && JAPANIZED_TK && TK_VERSION =~ /^4\.*/
819
+ # obsolete; just for compatibility
820
+ fnt.kanji_font
821
+ else
822
+ fnt
823
+ end
824
+ else
825
+ tk_tcl2ruby(_fromUTF8(tk_call_without_enc(@path,'tag','cget',_get_eval_enc_str(tag),"-#{key}")))
826
+ end
827
+ end
828
+
829
+ def tag_configure(tag, key, val=None)
830
+ if key.kind_of?(Hash)
831
+ key = _symbolkey2str(key)
832
+ if ( key['font'] || key['kanjifont'] \
833
+ || key['latinfont'] || key['asciifont'] )
834
+ tagfont_configure(tag, key)
835
+ else
836
+ tk_send_without_enc('tag', 'configure', _get_eval_enc_str(tag),
837
+ *hash_kv(key, true))
838
+ end
839
+
840
+ else
841
+ if key == 'font' || key == :font ||
842
+ key == 'kanjifont' || key == :kanjifont ||
843
+ key == 'latinfont' || key == :latinfont ||
844
+ key == 'asciifont' || key == :asciifont
845
+ if val == None
846
+ tagfontobj(tag)
847
+ else
848
+ tagfont_configure(tag, {key=>val})
849
+ end
850
+ else
851
+ tk_send_without_enc('tag', 'configure', _get_eval_enc_str(tag),
852
+ "-#{key}", _get_eval_enc_str(val))
853
+ end
854
+ end
855
+ self
856
+ end
857
+
858
+ def tag_configinfo(tag, key=nil)
859
+ if TkComm::GET_CONFIGINFO_AS_ARRAY
860
+ if key
861
+ case key.to_s
862
+ when 'text', 'label', 'show', 'data', 'file'
863
+ conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('tag','configure',_get_eval_enc_str(tag),"-#{key}")))
864
+ when 'font', 'kanjifont'
865
+ conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('tag','configure',_get_eval_enc_str(tag),"-#{key}")))
866
+ conf[4] = tagfont_configinfo(tag, conf[4])
867
+ else
868
+ conf = tk_split_list(_fromUTF8(tk_send_without_enc('tag','configure',_get_eval_enc_str(tag),"-#{key}")))
869
+ end
870
+ conf[0] = conf[0][1..-1]
871
+ conf
872
+ else
873
+ ret = tk_split_simplelist(_fromUTF8(tk_send('tag','configure',_get_eval_enc_str(tag)))).collect{|conflist|
874
+ conf = tk_split_simplelist(conflist)
875
+ conf[0] = conf[0][1..-1]
876
+ case conf[0]
877
+ when 'text', 'label', 'show', 'data', 'file'
878
+ else
879
+ if conf[3]
880
+ if conf[3].index('{')
881
+ conf[3] = tk_split_list(conf[3])
882
+ else
883
+ conf[3] = tk_tcl2ruby(conf[3])
884
+ end
885
+ end
886
+ if conf[4]
887
+ if conf[4].index('{')
888
+ conf[4] = tk_split_list(conf[4])
889
+ else
890
+ conf[4] = tk_tcl2ruby(conf[4])
891
+ end
892
+ end
893
+ end
894
+ conf[1] = conf[1][1..-1] if conf.size == 2 # alias info
895
+ conf
896
+ }
897
+ fontconf = ret.assoc('font')
898
+ if fontconf
899
+ ret.delete_if{|item| item[0] == 'font' || item[0] == 'kanjifont'}
900
+ fontconf[4] = tagfont_configinfo(tag, fontconf[4])
901
+ ret.push(fontconf)
902
+ else
903
+ ret
904
+ end
905
+ end
906
+ else # ! TkComm::GET_CONFIGINFO_AS_ARRAY
907
+ if key
908
+ case key.to_s
909
+ when 'text', 'label', 'show', 'data', 'file'
910
+ conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('tag','configure',_get_eval_enc_str(tag),"-#{key}")))
911
+ when 'font', 'kanjifont'
912
+ conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('tag','configure',_get_eval_enc_str(tag),"-#{key}")))
913
+ conf[4] = tagfont_configinfo(tag, conf[4])
914
+ else
915
+ conf = tk_split_list(_fromUTF8(tk_send_without_enc('tag','configure',_get_eval_enc_str(tag),"-#{key}")))
916
+ end
917
+ key = conf.shift[1..-1]
918
+ { key => conf }
919
+ else
920
+ ret = {}
921
+ tk_split_simplelist(_fromUTF8(tk_send('tag','configure',_get_eval_enc_str(tag)))).each{|conflist|
922
+ conf = tk_split_simplelist(conflist)
923
+ key = conf.shift[1..-1]
924
+ case key
925
+ when 'text', 'label', 'show', 'data', 'file'
926
+ else
927
+ if conf[2]
928
+ if conf[2].index('{')
929
+ conf[2] = tk_split_list(conf[2])
930
+ else
931
+ conf[2] = tk_tcl2ruby(conf[2])
932
+ end
933
+ end
934
+ if conf[3]
935
+ if conf[3].index('{')
936
+ conf[3] = tk_split_list(conf[3])
937
+ else
938
+ conf[3] = tk_tcl2ruby(conf[3])
939
+ end
940
+ end
941
+ end
942
+ if conf.size == 1
943
+ ret[key] = conf[0][1..-1] # alias info
944
+ else
945
+ ret[key] = conf
946
+ end
947
+ }
948
+ fontconf = ret['font']
949
+ if fontconf
950
+ ret.delete('font')
951
+ ret.delete('kanjifont')
952
+ fontconf[3] = tagfont_configinfo(tag, fontconf[3])
953
+ ret['font'] = fontconf
954
+ end
955
+ ret
956
+ end
957
+ end
958
+ end
959
+
960
+ def current_tag_configinfo(tag, key=nil)
961
+ if TkComm::GET_CONFIGINFO_AS_ARRAY
962
+ if key
963
+ conf = tag_configinfo(tag, key)
964
+ {conf[0] => conf[4]}
965
+ else
966
+ ret = {}
967
+ tag_configinfo(tag).each{|conf|
968
+ ret[conf[0]] = conf[4] if conf.size > 2
969
+ }
970
+ ret
971
+ end
972
+ else # ! TkComm::GET_CONFIGINFO_AS_ARRAY
973
+ ret = {}
974
+ tag_configinfo(tag, key).each{|k, conf|
975
+ ret[k] = conf[-1] if conf.kind_of?(Array)
976
+ }
977
+ ret
978
+ end
979
+ end
980
+ =end
981
+
982
+ def tag_raise(tag, above=None)
983
+ tk_send_without_enc('tag', 'raise', _get_eval_enc_str(tag),
984
+ _get_eval_enc_str(above))
985
+ self
986
+ end
987
+
988
+ def tag_lower(tag, below=None)
989
+ tk_send_without_enc('tag', 'lower', _get_eval_enc_str(tag),
990
+ _get_eval_enc_str(below))
991
+ self
992
+ end
993
+
994
+ def tag_remove(tag, *indices)
995
+ tk_send_without_enc('tag', 'remove', _get_eval_enc_str(tag),
996
+ *(indices.collect{|idx| _get_eval_enc_str(idx)}))
997
+ self
998
+ end
999
+
1000
+ def tag_ranges(tag)
1001
+ #l = tk_split_simplelist(tk_send_without_enc('tag', 'ranges',
1002
+ # _get_eval_enc_str(tag)))
1003
+ l = tk_split_simplelist(tk_send_without_enc('tag', 'ranges',
1004
+ _get_eval_enc_str(tag)),
1005
+ false, true)
1006
+ r = []
1007
+ while key=l.shift
1008
+ r.push [Tk::Text::IndexString.new(key), Tk::Text::IndexString.new(l.shift)]
1009
+ end
1010
+ r
1011
+ end
1012
+
1013
+ def tag_nextrange(tag, first, last=None)
1014
+ simplelist(tk_send_without_enc('tag', 'nextrange',
1015
+ _get_eval_enc_str(tag),
1016
+ _get_eval_enc_str(first),
1017
+ _get_eval_enc_str(last))).collect{|idx|
1018
+ Tk::Text::IndexString.new(idx)
1019
+ }
1020
+ end
1021
+
1022
+ def tag_prevrange(tag, first, last=None)
1023
+ simplelist(tk_send_without_enc('tag', 'prevrange',
1024
+ _get_eval_enc_str(tag),
1025
+ _get_eval_enc_str(first),
1026
+ _get_eval_enc_str(last))).collect{|idx|
1027
+ Tk::Text::IndexString.new(idx)
1028
+ }
1029
+ end
1030
+
1031
+ =begin
1032
+ def window_cget(index, slot)
1033
+ case slot.to_s
1034
+ when 'text', 'label', 'show', 'data', 'file'
1035
+ _fromUTF8(tk_send_without_enc('window', 'cget',
1036
+ _get_eval_enc_str(index), "-#{slot}"))
1037
+ when 'font', 'kanjifont'
1038
+ #fnt = tk_tcl2ruby(tk_send('window', 'cget', index, "-#{slot}"))
1039
+ fnt = tk_tcl2ruby(_fromUTF8(tk_send_without_enc('window', 'cget', _get_eval_enc_str(index), '-font')))
1040
+ unless fnt.kind_of?(TkFont)
1041
+ fnt = tagfontobj(index, fnt)
1042
+ end
1043
+ if slot.to_s == 'kanjifont' && JAPANIZED_TK && TK_VERSION =~ /^4\.*/
1044
+ # obsolete; just for compatibility
1045
+ fnt.kanji_font
1046
+ else
1047
+ fnt
1048
+ end
1049
+ else
1050
+ tk_tcl2ruby(_fromUTF8(tk_send_without_enc('window', 'cget', _get_eval_enc_str(index), "-#{slot}")))
1051
+ end
1052
+ end
1053
+
1054
+ def window_configure(index, slot, value=None)
1055
+ if index.kind_of?(TkTextWindow)
1056
+ index.configure(slot, value)
1057
+ else
1058
+ if slot.kind_of?(Hash)
1059
+ slot = _symbolkey2str(slot)
1060
+ win = slot['window']
1061
+ # slot['window'] = win.epath if win.kind_of?(TkWindow)
1062
+ slot['window'] = _epath(win) if win
1063
+ if slot['create']
1064
+ p_create = slot['create']
1065
+ if p_create.kind_of?(Proc)
1066
+ #=begin
1067
+ slot['create'] = install_cmd(proc{
1068
+ id = p_create.call
1069
+ if id.kind_of?(TkWindow)
1070
+ id.epath
1071
+ else
1072
+ id
1073
+ end
1074
+ })
1075
+ #=end
1076
+ slot['create'] = install_cmd(proc{_epath(p_create.call)})
1077
+ end
1078
+ end
1079
+ tk_send_without_enc('window', 'configure',
1080
+ _get_eval_enc_str(index),
1081
+ *hash_kv(slot, true))
1082
+ else
1083
+ if slot == 'window' || slot == :window
1084
+ # id = value
1085
+ # value = id.epath if id.kind_of?(TkWindow)
1086
+ value = _epath(value)
1087
+ end
1088
+ if slot == 'create' || slot == :create
1089
+ p_create = value
1090
+ if p_create.kind_of?(Proc)
1091
+ #=begin
1092
+ value = install_cmd(proc{
1093
+ id = p_create.call
1094
+ if id.kind_of?(TkWindow)
1095
+ id.epath
1096
+ else
1097
+ id
1098
+ end
1099
+ })
1100
+ #=end
1101
+ value = install_cmd(proc{_epath(p_create.call)})
1102
+ end
1103
+ end
1104
+ tk_send_without_enc('window', 'configure',
1105
+ _get_eval_enc_str(index),
1106
+ "-#{slot}", _get_eval_enc_str(value))
1107
+ end
1108
+ end
1109
+ self
1110
+ end
1111
+
1112
+ def window_configinfo(win, slot = nil)
1113
+ if TkComm::GET_CONFIGINFO_AS_ARRAY
1114
+ if slot
1115
+ case slot.to_s
1116
+ when 'text', 'label', 'show', 'data', 'file'
1117
+ conf = tk_split_simplelist(_fromUTF8(tk_send('window', 'configure', _get_eval_enc_str(win), "-#{slot}")))
1118
+ else
1119
+ conf = tk_split_list(_fromUTF8(tk_send('window', 'configure', _get_eval_enc_str(win), "-#{slot}")))
1120
+ end
1121
+ conf[0] = conf[0][1..-1]
1122
+ conf
1123
+ else
1124
+ tk_split_simplelist(_fromUTF8(tk_send('window', 'configure', _get_eval_enc_str(win)))).collect{|conflist|
1125
+ conf = tk_split_simplelist(conflist)
1126
+ conf[0] = conf[0][1..-1]
1127
+ case conf[0]
1128
+ when 'text', 'label', 'show', 'data', 'file'
1129
+ else
1130
+ if conf[3]
1131
+ if conf[3].index('{')
1132
+ conf[3] = tk_split_list(conf[3])
1133
+ else
1134
+ conf[3] = tk_tcl2ruby(conf[3])
1135
+ end
1136
+ end
1137
+ if conf[4]
1138
+ if conf[4].index('{')
1139
+ conf[4] = tk_split_list(conf[4])
1140
+ else
1141
+ conf[4] = tk_tcl2ruby(conf[4])
1142
+ end
1143
+ end
1144
+ end
1145
+ conf[1] = conf[1][1..-1] if conf.size == 2 # alias info
1146
+ conf
1147
+ }
1148
+ end
1149
+ else # ! TkComm::GET_CONFIGINFO_AS_ARRAY
1150
+ if slot
1151
+ case slot.to_s
1152
+ when 'text', 'label', 'show', 'data', 'file'
1153
+ conf = tk_split_simplelist(_fromUTF8(tk_send('window', 'configure', _get_eval_enc_str(win), "-#{slot}")))
1154
+ else
1155
+ conf = tk_split_list(_fromUTF8(tk_send('window', 'configure', _get_eval_enc_str(win), "-#{slot}")))
1156
+ end
1157
+ key = conf.shift[1..-1]
1158
+ { key => conf }
1159
+ else
1160
+ ret = {}
1161
+ tk_split_simplelist(_fromUTF8(tk_send('window', 'configure', _get_eval_enc_str(win)))).each{|conflist|
1162
+ conf = tk_split_simplelist(conflist)
1163
+ key = conf.shift[1..-1]
1164
+ case key
1165
+ when 'text', 'label', 'show', 'data', 'file'
1166
+ else
1167
+ if conf[2]
1168
+ if conf[2].index('{')
1169
+ conf[2] = tk_split_list(conf[2])
1170
+ else
1171
+ conf[2] = tk_tcl2ruby(conf[2])
1172
+ end
1173
+ end
1174
+ if conf[3]
1175
+ if conf[3].index('{')
1176
+ conf[3] = tk_split_list(conf[3])
1177
+ else
1178
+ conf[3] = tk_tcl2ruby(conf[3])
1179
+ end
1180
+ end
1181
+ end
1182
+ if conf.size == 1
1183
+ ret[key] = conf[0][1..-1] # alias info
1184
+ else
1185
+ ret[key] = conf
1186
+ end
1187
+ }
1188
+ ret
1189
+ end
1190
+ end
1191
+ end
1192
+
1193
+ def current_window_configinfo(win, slot = nil)
1194
+ if TkComm::GET_CONFIGINFO_AS_ARRAY
1195
+ if slot
1196
+ conf = window_configinfo(win, slot)
1197
+ {conf[0] => conf[4]}
1198
+ else
1199
+ ret = {}
1200
+ window_configinfo(win).each{|conf|
1201
+ ret[conf[0]] = conf[4] if conf.size > 2
1202
+ }
1203
+ ret
1204
+ end
1205
+ else # ! TkComm::GET_CONFIGINFO_AS_ARRAY
1206
+ ret = {}
1207
+ window_configinfo(win, slot).each{|k, conf|
1208
+ ret[k] = conf[-1] if conf.kind_of?(Array)
1209
+ }
1210
+ ret
1211
+ end
1212
+ end
1213
+ =end
1214
+
1215
+ def window_names
1216
+ # tk_split_simplelist(_fromUTF8(tk_send_without_enc('window', 'names'))).collect{|elt|
1217
+ tk_split_simplelist(tk_send_without_enc('window', 'names'), false, true).collect{|elt|
1218
+ tagid2obj(elt)
1219
+ }
1220
+ end
1221
+
1222
+ def _ktext_length(txt)
1223
+ if TkCore::WITH_ENCODING ### Ruby 1.9 !!!!!!!!!!!!!
1224
+ return txt.length
1225
+ end
1226
+ ###########################
1227
+
1228
+ if $KCODE !~ /n/i
1229
+ return txt.gsub(/[^\Wa-zA-Z_\d]/, ' ').length
1230
+ end
1231
+
1232
+ # $KCODE == 'NONE'
1233
+ if JAPANIZED_TK
1234
+ tk_call_without_enc('kstring', 'length',
1235
+ _get_eval_enc_str(txt)).to_i
1236
+ else
1237
+ begin
1238
+ tk_call_without_enc('encoding', 'convertto', 'ascii',
1239
+ _get_eval_enc_str(txt)).length
1240
+ rescue StandardError, NameError
1241
+ # sorry, I have no plan
1242
+ txt.length
1243
+ end
1244
+ end
1245
+ end
1246
+ private :_ktext_length
1247
+
1248
+ def tksearch(*args)
1249
+ # call 'search' subcommand of text widget
1250
+ # args ::= [<array_of_opts>] <pattern> <start_index> [<stop_index>]
1251
+ # If <pattern> is regexp, then it must be a regular expression of Tcl
1252
+ nocase = false
1253
+ if args[0].kind_of?(Array)
1254
+ opts = args.shift.collect{|opt|
1255
+ s_opt = opt.to_s
1256
+ nocase = true if s_opt == 'nocase'
1257
+ '-' + s_opt
1258
+ }
1259
+ else
1260
+ opts = []
1261
+ end
1262
+
1263
+ if args[0].kind_of?(Regexp)
1264
+ regexp = args.shift
1265
+ if !nocase && (regexp.options & Regexp::IGNORECASE) != 0
1266
+ opts << '-nocase'
1267
+ end
1268
+ args.unshift(regexp.source)
1269
+ end
1270
+
1271
+ opts << '--'
1272
+
1273
+ ret = tk_send('search', *(opts + args))
1274
+ if ret == ""
1275
+ nil
1276
+ else
1277
+ Tk::Text::IndexString.new(ret)
1278
+ end
1279
+ end
1280
+
1281
+ def tksearch_with_count(*args)
1282
+ # call 'search' subcommand of text widget
1283
+ # args ::= [<array_of_opts>] <var> <pattern> <start_index> [<stop_index>]
1284
+ # If <pattern> is regexp, then it must be a regular expression of Tcl
1285
+ nocase = false
1286
+ if args[0].kind_of?(Array)
1287
+ opts = args.shift.collect{|opt|
1288
+ s_opt = opt.to_s
1289
+ nocase = true if s_opt == 'nocase'
1290
+ '-' + s_opt
1291
+ }
1292
+ else
1293
+ opts = []
1294
+ end
1295
+
1296
+ opts << '-count' << args.shift
1297
+
1298
+ if args[0].kind_of?(Regexp)
1299
+ regexp = args.shift
1300
+ if !nocase && (regexp.options & Regexp::IGNORECASE) != 0
1301
+ opts << '-nocase'
1302
+ end
1303
+ args.unshift(regexp.source)
1304
+ end
1305
+
1306
+ opts << '--'
1307
+
1308
+ ret = tk_send('search', *(opts + args))
1309
+ if ret == ""
1310
+ nil
1311
+ else
1312
+ Tk::Text::IndexString.new(ret)
1313
+ end
1314
+ end
1315
+
1316
+ def search_with_length(pat,start,stop=None)
1317
+ pat = pat.chr if pat.kind_of?(Integer)
1318
+ if stop != None
1319
+ return ["", 0] if compare(start,'>=',stop)
1320
+ txt = get(start,stop)
1321
+ if (pos = txt.index(pat))
1322
+ match = $&
1323
+ #pos = txt[0..(pos-1)].split('').length if pos > 0
1324
+ pos = _ktext_length(txt[0..(pos-1)]) if pos > 0
1325
+ if pat.kind_of?(String)
1326
+ #return [index(start + " + #{pos} chars"), pat.split('').length]
1327
+ return [index(start + " + #{pos} chars"),
1328
+ _ktext_length(pat), pat.dup]
1329
+ else
1330
+ #return [index(start + " + #{pos} chars"), $&.split('').length]
1331
+ return [index(start + " + #{pos} chars"),
1332
+ _ktext_length(match), match]
1333
+ end
1334
+ else
1335
+ return ["", 0]
1336
+ end
1337
+ else
1338
+ txt = get(start,'end - 1 char')
1339
+ if (pos = txt.index(pat))
1340
+ match = $&
1341
+ #pos = txt[0..(pos-1)].split('').length if pos > 0
1342
+ pos = _ktext_length(txt[0..(pos-1)]) if pos > 0
1343
+ if pat.kind_of?(String)
1344
+ #return [index(start + " + #{pos} chars"), pat.split('').length]
1345
+ return [index(start + " + #{pos} chars"),
1346
+ _ktext_length(pat), pat.dup]
1347
+ else
1348
+ #return [index(start + " + #{pos} chars"), $&.split('').length]
1349
+ return [index(start + " + #{pos} chars"),
1350
+ _ktext_length(match), match]
1351
+ end
1352
+ else
1353
+ txt = get('1.0','end - 1 char')
1354
+ if (pos = txt.index(pat))
1355
+ match = $&
1356
+ #pos = txt[0..(pos-1)].split('').length if pos > 0
1357
+ pos = _ktext_length(txt[0..(pos-1)]) if pos > 0
1358
+ if pat.kind_of?(String)
1359
+ #return [index("1.0 + #{pos} chars"), pat.split('').length]
1360
+ return [index("1.0 + #{pos} chars"),
1361
+ _ktext_length(pat), pat.dup]
1362
+ else
1363
+ #return [index("1.0 + #{pos} chars"), $&.split('').length]
1364
+ return [index("1.0 + #{pos} chars"), _ktext_length(match), match]
1365
+ end
1366
+ else
1367
+ return ["", 0]
1368
+ end
1369
+ end
1370
+ end
1371
+ end
1372
+
1373
+ def search(pat,start,stop=None)
1374
+ search_with_length(pat,start,stop)[0]
1375
+ end
1376
+
1377
+ def rsearch_with_length(pat,start,stop=None)
1378
+ pat = pat.chr if pat.kind_of?(Integer)
1379
+ if stop != None
1380
+ return ["", 0] if compare(start,'<=',stop)
1381
+ txt = get(stop,start)
1382
+ if (pos = txt.rindex(pat))
1383
+ match = $&
1384
+ #pos = txt[0..(pos-1)].split('').length if pos > 0
1385
+ pos = _ktext_length(txt[0..(pos-1)]) if pos > 0
1386
+ if pat.kind_of?(String)
1387
+ #return [index(stop + " + #{pos} chars"), pat.split('').length]
1388
+ return [index(stop + " + #{pos} chars"), _ktext_length(pat), pat.dup]
1389
+ else
1390
+ #return [index(stop + " + #{pos} chars"), $&.split('').length]
1391
+ return [index(stop + " + #{pos} chars"), _ktext_length(match), match]
1392
+ end
1393
+ else
1394
+ return ["", 0]
1395
+ end
1396
+ else
1397
+ txt = get('1.0',start)
1398
+ if (pos = txt.rindex(pat))
1399
+ match = $&
1400
+ #pos = txt[0..(pos-1)].split('').length if pos > 0
1401
+ pos = _ktext_length(txt[0..(pos-1)]) if pos > 0
1402
+ if pat.kind_of?(String)
1403
+ #return [index("1.0 + #{pos} chars"), pat.split('').length]
1404
+ return [index("1.0 + #{pos} chars"), _ktext_length(pat), pat.dup]
1405
+ else
1406
+ #return [index("1.0 + #{pos} chars"), $&.split('').length]
1407
+ return [index("1.0 + #{pos} chars"), _ktext_length(match), match]
1408
+ end
1409
+ else
1410
+ txt = get('1.0','end - 1 char')
1411
+ if (pos = txt.rindex(pat))
1412
+ match = $&
1413
+ #pos = txt[0..(pos-1)].split('').length if pos > 0
1414
+ pos = _ktext_length(txt[0..(pos-1)]) if pos > 0
1415
+ if pat.kind_of?(String)
1416
+ #return [index("1.0 + #{pos} chars"), pat.split('').length]
1417
+ return [index("1.0 + #{pos} chars"), _ktext_length(pat), pat.dup]
1418
+ else
1419
+ #return [index("1.0 + #{pos} chars"), $&.split('').length]
1420
+ return [index("1.0 + #{pos} chars"), _ktext_length(match), match]
1421
+ end
1422
+ else
1423
+ return ["", 0]
1424
+ end
1425
+ end
1426
+ end
1427
+ end
1428
+
1429
+ def rsearch(pat,start,stop=None)
1430
+ rsearch_with_length(pat,start,stop)[0]
1431
+ end
1432
+
1433
+ def dump(type_info, *index, &block)
1434
+ if type_info.kind_of?(Symbol)
1435
+ type_info = [ type_info.to_s ]
1436
+ elsif type_info.kind_of?(String)
1437
+ type_info = [ type_info ]
1438
+ end
1439
+ args = type_info.collect{|inf| '-' + inf}
1440
+ args << '-command' << block if block
1441
+ str = tk_send('dump', *(args + index))
1442
+ result = []
1443
+ sel = nil
1444
+ i = 0
1445
+ while i < str.size
1446
+ # retrieve key
1447
+ idx = str.index(/ /, i)
1448
+ result.push str[i..(idx-1)]
1449
+ i = idx + 1
1450
+
1451
+ # retrieve value
1452
+ case result[-1]
1453
+ when 'text'
1454
+ if str[i] == ?{
1455
+ # text formed as {...}
1456
+ val, i = _retrieve_braced_text(str, i)
1457
+ result.push val
1458
+ else
1459
+ # text which may contain backslahes
1460
+ val, i = _retrieve_backslashed_text(str, i)
1461
+ result.push val
1462
+ end
1463
+ else
1464
+ idx = str.index(/ /, i)
1465
+ val = str[i..(idx-1)]
1466
+ case result[-1]
1467
+ when 'mark'
1468
+ case val
1469
+ when 'insert'
1470
+ result.push TkTextMarkInsert.new(self)
1471
+ when 'current'
1472
+ result.push TkTextMarkCurrent.new(self)
1473
+ when 'anchor'
1474
+ result.push TkTextMarkAnchor.new(self)
1475
+ else
1476
+ result.push tk_tcl2ruby(val)
1477
+ end
1478
+ when 'tagon'
1479
+ if val == 'sel'
1480
+ if sel
1481
+ result.push sel
1482
+ else
1483
+ result.push TkTextTagSel.new(self)
1484
+ end
1485
+ else
1486
+ result.push tk_tcl2ruby(val)
1487
+ end
1488
+ when 'tagoff'
1489
+ result.push tk_tcl2ruby(val)
1490
+ when 'window'
1491
+ result.push tk_tcl2ruby(val)
1492
+ when 'image'
1493
+ result.push tk_tcl2ruby(val)
1494
+ end
1495
+ i = idx + 1
1496
+ end
1497
+
1498
+ # retrieve index
1499
+ idx = str.index(/ /, i)
1500
+ if idx
1501
+ result.push(Tk::Text::IndexString.new(str[i..(idx-1)]))
1502
+ i = idx + 1
1503
+ else
1504
+ result.push(Tk::Text::IndexString.new(str[i..-1]))
1505
+ break
1506
+ end
1507
+ end
1508
+
1509
+ kvis = []
1510
+ until result.empty?
1511
+ kvis.push [result.shift, result.shift, result.shift]
1512
+ end
1513
+ kvis # result is [[key1, value1, index1], [key2, value2, index2], ...]
1514
+ end
1515
+
1516
+ def _retrieve_braced_text(str, i)
1517
+ cnt = 0
1518
+ idx = i
1519
+ while idx < str.size
1520
+ case str[idx]
1521
+ when ?{
1522
+ cnt += 1
1523
+ when ?}
1524
+ cnt -= 1
1525
+ if cnt == 0
1526
+ break
1527
+ end
1528
+ end
1529
+ idx += 1
1530
+ end
1531
+ return str[i+1..idx-1], idx + 2
1532
+ end
1533
+ private :_retrieve_braced_text
1534
+
1535
+ def _retrieve_backslashed_text(str, i)
1536
+ j = i
1537
+ idx = nil
1538
+ loop {
1539
+ idx = str.index(/ /, j)
1540
+ if str[idx-1] == ?\\
1541
+ j += 1
1542
+ else
1543
+ break
1544
+ end
1545
+ }
1546
+ val = str[i..(idx-1)]
1547
+ val.gsub!(/\\( |\{|\})/, '\1')
1548
+ return val, idx + 1
1549
+ end
1550
+ private :_retrieve_backslashed_text
1551
+
1552
+ def dump_all(*index, &block)
1553
+ dump(['all'], *index, &block)
1554
+ end
1555
+ def dump_mark(*index, &block)
1556
+ dump(['mark'], *index, &block)
1557
+ end
1558
+ def dump_tag(*index, &block)
1559
+ dump(['tag'], *index, &block)
1560
+ end
1561
+ def dump_text(*index, &block)
1562
+ dump(['text'], *index, &block)
1563
+ end
1564
+ def dump_window(*index, &block)
1565
+ dump(['window'], *index, &block)
1566
+ end
1567
+ def dump_image(*index, &block)
1568
+ dump(['image'], *index, &block)
1569
+ end
1570
+ end
1571
+
1572
+ #TkText = Tk::Text unless Object.const_defined? :TkText
1573
+ Tk.__set_toplevel_aliases__(:Tk, Tk::Text, :TkText)
1574
+
1575
+
1576
+ #######################################
1577
+
1578
+ class Tk::Text::Peer < Tk::Text
1579
+ # Tk8.5 feature
1580
+ def initialize(text, parent=nil, keys={})
1581
+ unless text.kind_of?(Tk::Text)
1582
+ fail ArgumentError, "Tk::Text is expected for 1st argument"
1583
+ end
1584
+ @src_text = text
1585
+ super(parent, keys)
1586
+ end
1587
+
1588
+ def create_self(keys)
1589
+ if keys and keys != None
1590
+ tk_call_without_enc(@src_text.path, 'peer', 'create', @path)
1591
+ else
1592
+ tk_call_without_enc(@src_text.path, 'peer', 'create', @path)
1593
+ end
1594
+ end
1595
+ private :create_self
1596
+ end