{The jstools Libraries

Introduction
The jstools libraries are a collection of Tk/Tcl libraries used by the jstools applications, and distributed with the jstools package.  They provide a variety of higher­level facilities for constructing Tk­ and Tcl­based applications, and provide consistency of appearance and behaviour across applications.

This document describes version 4.0/4.0 of the jstools libraries.

Compatibility
Version 4.0/4.0b of the jstools libraries is compatible with Tk 4.0p1 and Tcl 7.4p1 or Tk 4.0p2 and Tcl 7.4p2; it may work properly with other versions, but then again, it might not.  I have tested the jstools libraries lightly under Tk 3.6, and they appear to work.

There's a bug in unpatched Tk 3.6 that causes wish(1) to die with a core dump under certain circumstances; you should apply the official patch to Tk, which is available with the Tk sources on the official Tk distribution sites.

There were focus­related bugs in Tk 4.0b2 (the second beta release) which caused the jstools applications (and some others) to crash frequently; later versions of Tk dowill not suffer from this problem.  I think j:dialogue in particular tends to trigger this.

Changes
See jstools changes since 3.6/3.0 for a change log (including pointers to earlier changes).

Libraries
The libraries in the jstools package can be divided up by function as follows:

Natural Language Database Support
This library lets your application look up strings it wants to display and present them in the user's preferred language.  It's designed to be independent from the other jstools libraries, so it can be used alone.  It's also fairly small.

jldb.tcl - localisation support for natural­language strings

Utility Libraries
These libraries don't provide significant functionality that the end­user can see, but they are used by the other libraries, or provide convenience proedures to save a few lines of code in applications.

jdebug.tcl - debugging support
jfileio.tcl - convenience procedures for reading from and writing to files
jinit.tcl - the common jstools initialisation sequence
jparseargs.tcl - procedures for parsing procedure and application arguments
jprefixmatch.tcl - filename expansion and abbreviation matching procedures
jprefs.tcl - general routines for loading, saving, and using preferences
	(see also jprefpanel.tcl)
jstools.tcl - miscellaneous procedures shared by jstools applications
jtkutils.tcl - convenience procedures and user­interface layout support
jtclutils.tcl - convenience procedures that don't require Tk
jtkversion.tcl - procedures for writing code compatible with both Tk 3 and Tk 4
jviewers.tcl - show manual pages or URLs with the user's preferred tools

Compound Widgets and Widget Wrappers
These libraries enhance the functionality of an existing Tk widget by providing a wrapper around it, or provide new widget­like entities with new functionality.

jmetawidgets.tcl - compound widgets including a colour chooser
joptionbutton.tcl - a button that lets the user choose one of several options
jtext.tcl - wrappers around the text widget's widget command

Popup Panels
These libraries provide popup panels or dialogue boxes of various kinds.  Except for the find panel provided by jfindpanel.tcl and the text display panel provided by jmore.tcl, these panels are modal.

jabout.tcl - richtext about panels
	(see also jrichtext.tcl)
jalert.tcl - popup notification panels
jconfirm.tcl - a panel asking the user to confirm actions
jfindpanel.tcl - a search­and­replace panel for the text widget
jfs.tcl - a file­selector panel
jmore.tcl - a text­display panel
jprefpanel.tcl - a preference panel for setting shared jstools preferences
jprompts.tcl - procedures to ask the user for various kinds of information

Procedures for Managing User­Visible Commands
The procedures in jcommand.tcl make managing user­visible commands (i.e., commands the user would give to your application, e.g. by clicking on a button or choosing a menu entry) easier.  Those in jmenu.tcl let you construct menus of those commands, as well as other kinds of menus, without a lot of typing.

jcommand.tcl - procedures to manage user-invokable commands
jmenu.tcl - procedures to manage menus

Procedures for Using Tagged Text
These procedures let you and your users use, type, load, and save tagged text, which may display multiple fonts or colours or include hypertext.  The jtagconvert.tcl library provides a way of converting multifont text in a text widget into other rich­text formats.

jrichtext.tcl - procedures to embed rich text in Tk applications
jtagconvert.tcl - procedures for saving multifont text in various formats
jtexttags.tcl - extensive support for working with tagged text
	(see also jtext.tcl)

Bindings Libraries
These libraries manage keyboard (and mouse) bindings for text and entry widgets.  Together with the preferences libraries, they let the user choose among `basic' bindings (more complete than the standard Tk 3.6 bindings), Emacs bindings, and vi bindings.  They depend on jtext.tcl, and support jtexttags.tcl if you're using it.

Currently, only jbindentry.tcl, jbindtext.tcl, jcompose.tcl, and jlatin1.tcl are documented at all, and they aren't documented very thoroughly.  However, the others are not intended to be called directly; they're called by the libraries mentioned above.

jbindentry.tcl - several user­selected styles of entry bindings
jbindtext.tcl - several user­selected styles of text bindings
	(see also jtext.tcl)
jcompose.tcl - support for the Compose key
jentrybasic.tcl - support for minimalist bindings
jentryedt.tcl - rudimentary support for EDT bindings
jentryemacs.tcl - support for Emacs­style entry bindings
jentrykeys.tcl - general support for entry keyboard bindings
jentrymouse.tcl - support for entry mouse bindings
jentryvi.tcl - support for vi­style entry bindings
jlatin1.tcl - additional support for the Compose key
jtextbasic.tcl - support for minimalist text bindings
jtextedt.tcl - rudimentary support for EDT bindings
jtextemacs.tcl - support for Emacs­style text bindings
jtextkeys.tcl - support for text keyboard bindings
jtextmouse.tcl - support for text mouse bindings
jtextvi.tcl - support for vi­style text bindings

Usage
If the jstools libraries have been installed normally at your site, you should be able to use them by making sure they're in your auto_path Tcl variable.  The jstools applications also all support the convention of letting you override the default location of the jstools libraries by setting the environment variable JSTOOLS_LIB, and also let you override individual jstools libraries by copying them to your ~/.tk directory and modifying them.  To accomplish all this, you should put the following code at or near the top of your wish(1) scripts:

  ## begin boiler_header
  
  global VERSION
  set VERSION {4.0/4.0b}
  
  if {[info exists env(JSTOOLS_LIB)]} {
    set jstools_library $env(JSTOOLS_LIB)
  } else {
    set jstools_library /usr/local/lib/jstools
  }
  
  # add the jstools library to the library search path:
  
  set auto_path [concat [list $jstools_library] $auto_path]
  
  # check for ~/.tk and prepend it to the auto_path
  # if it exists.  that way the user can override 
  # and customise the jstools libraries.
  
  if {[file isdirectory ~/.tk]} then {
    set auto_path [concat [list [glob ~/.tk]] $auto_path]
  }
  
  ## end boiler_header

You should also call j:jstools_init early in your code; this reads in global (cross­application) preferences, which are used by some of the other libraries, and automatically sets up bindings for entry and text widgets based on the user's preferences.

Credits and Copyright
Author
Jay Sekora 
js@calumet.org
http://shore.net/~js/

Copyright
The jstools distribution (applications, libraries, and support files) is copyright © 1992-1995 by Jay Sekora, but may be freely copied and modified for non­commercial purposes.  (Please contact me if you want to use it for a commercial purpose, this may be OK under some circumstances.)

Thanks
Most importantly, I'd like to thank John Ousterhout <ouster@tcl.eng.sun.com>, the author of Tk and Tcl, for providing such a wonderful, robust, simple language for writing X Windows applications, and the Tcl community which has helped extend Tk and Tcl without forcing them to succumb to feature bloat.

In many places in the libraries, I've borrowed code from other people (with permission); they're mentioned in the documentation files for the individual libraries and in comments in the code itself.

Future Directions
Feel free to report bugs (and feature requests) to me, <js@calumet.org>, and I will try to deal with them.  Also, feel free to fix bugs or add features on your own and let me know how you did it.

* I'd like to write a library for working with the contents of canvases (e.g. archiving and restoring them).

* I hope to overhaul the Preferences mechanism, which will probably involve new preferences libraries.  See the jstools documentation for more about this.

* I'd like to add libraries for popup menus and/or gesture commands.  (Actually, popup menu support is provided with Tk 4.0, but gesture commands would still be nice, and they could be combined - drag­right could pop up a menu, and drag­up could delete text, for instance.)

* I'd like to write a library for inter­application communication, to help tie the various applications more closely together.  See the jstools documentation for more about this.

} {{{jdoc:xref:link {4.67 4.91 13.212 13.222 16.4 16.33 24.0 24.8 29.0 29.10 30.0 30.11 31.0 31.9 32.0 32.14 33.0 33.16 34.0 34.10 35.11 35.25 36.0 36.11 37.0 37.12 38.0 38.13 39.0 39.14 40.0 40.12 45.0 45.16 46.0 46.17 47.0 47.9 50.112 50.126 50.166 50.175 52.0 52.10 53.11 53.24 54.0 54.10 55.0 55.12 56.0 56.14 57.0 57.7 58.0 58.9 59.0 59.14 60.0 60.12 63.18 63.30 63.197 63.206 65.0 65.12 66.0 66.9 71.0 71.13 72.0 72.15 73.0 73.13 74.11 74.20 77.271 77.280 77.294 77.307 79.16 79.30 79.32 79.45 79.47 79.59 79.65 79.76 81.0 81.14 82.0 82.13 83.11 83.20 84.0 84.12 91.0 91.11 127.21 127.35 148.108 148.133 148.138 148.153 152.132 152.157 152.162 152.177}} {jdoc:xref:manpage {11.46 11.50 100.125 100.152 100.532 100.536}} {jdoc:anchor:anchorname {3.0 4.0 18.0 19.0 99.0 100.0 129.0 130.0}} {richtext:font:roman {2.0 3.0 4.0 4.4 4.11 4.71 4.78 4.118 4.125 6.47 6.54 8.0 9.0 9.24 9.31 9.114 9.117 9.202 9.209 11.46 11.50 13.85 13.92 13.212 13.222 15.0 16.0 16.4 16.33 18.0 19.0 19.21 19.28 21.0 21.33 22.170 22.177 24.0 24.8 25.0 26.17 29.0 29.10 30.0 30.11 31.0 31.9 31.23 31.30 32.0 32.14 33.0 33.16 34.0 34.10 34.72 35.0 35.11 35.25 36.0 36.11 36.49 36.56 37.0 37.12 38.0 38.13 39.0 39.14 40.0 40.12 42.0 42.36 45.0 45.16 46.0 46.17 47.0 47.9 49.0 49.12 50.112 50.126 50.166 50.175 52.0 52.10 53.11 53.24 54.0 54.10 55.0 55.12 56.0 56.14 57.0 57.7 58.0 58.9 59.0 59.14 59.55 59.62 60.0 60.12 62.0 62.45 63.18 63.30 63.197 63.206 65.0 65.12 66.0 66.9 68.0 68.32 69.150 69.165 71.0 71.13 72.0 72.15 73.0 73.13 74.11 74.20 76.0 76.18 77.242 77.244 77.271 77.280 77.294 77.307 79.16 79.30 79.32 79.45 79.47 79.59 79.65 79.76 81.0 81.14 82.0 82.13 83.11 83.20 84.0 84.12 84.31 84.38 85.0 85.15 86.0 86.13 87.0 87.15 88.0 88.14 89.0 89.15 90.0 90.12 91.0 91.11 91.41 91.48 92.0 92.14 93.0 93.12 94.0 94.14 95.0 95.13 96.0 96.14 97.0 97.11 99.0 100.0 100.7 100.14 100.130 100.139 100.159 100.166 100.264 100.271 100.318 100.329 100.368 100.375 100.410 100.415 100.532 100.536 102.0 126.0 127.21 127.35 129.0 130.6 132.0 132.14 133.0 133.21 135.0 135.9 136.4 136.11 138.0 138.6 139.52 139.76 143.0 144.0 144.55 144.71 148.112 148.119 152.136 152.143 153.0}} {richtext:font:italic {9.114 9.117}} {richtext:font:bold {4.4 4.11 4.71 4.78 4.118 4.125 6.47 6.54 9.24 9.31 9.202 9.209 13.85 13.92 19.21 19.28 22.170 22.177 24.0 24.8 25.0 26.0 29.0 29.10 30.0 30.11 31.0 31.9 31.23 31.30 32.0 32.14 33.0 33.16 34.0 34.10 34.72 35.0 35.11 35.25 36.0 36.11 36.49 36.56 37.0 37.12 38.0 38.13 39.0 39.14 40.0 40.12 45.0 45.16 46.0 46.17 47.0 47.9 50.112 50.126 50.166 50.175 52.0 52.10 53.11 53.24 54.0 54.10 55.0 55.12 56.0 56.14 57.0 57.7 58.0 58.9 59.0 59.14 59.55 59.62 60.0 60.12 63.18 63.30 63.197 63.206 65.0 65.12 66.0 66.9 69.150 69.165 71.0 71.13 72.0 72.15 73.0 73.13 74.11 74.20 77.271 77.280 77.294 77.307 79.16 79.30 79.32 79.45 79.47 79.59 79.65 79.76 81.0 81.14 82.0 82.13 83.11 83.20 84.0 84.12 84.31 84.38 85.0 85.15 86.0 86.13 87.0 87.15 88.0 88.14 89.0 89.15 90.0 90.12 91.0 91.11 91.41 91.48 92.0 92.14 93.0 93.12 94.0 94.14 95.0 95.13 96.0 96.14 97.0 97.11 100.7 100.14 100.159 100.166 100.264 100.271 100.368 100.375 100.410 100.415 136.4 136.11 148.112 148.119 152.136 152.143}} {richtext:font:bolditalic {16.4 16.33}} {richtext:font:typewriter {11.46 11.50 13.212 13.222 77.242 77.244 100.130 100.139 100.318 100.329 100.532 100.536 102.0 126.0 127.21 127.35 132.0 132.14 133.0 133.21 139.52 139.76 144.55 144.71}} {richtext:font:heading0 {1.0 2.0}} {richtext:font:heading1 {3.0 4.0 18.0 19.0 99.0 100.0 129.0 130.0 143.0 144.0}} {richtext:font:heading2 {8.0 9.0 15.0 16.0 21.0 21.33 26.0 26.17 42.0 42.36 49.0 49.12 62.0 62.45 68.0 68.32 76.0 76.18 130.0 130.6 135.0 135.9 138.0 138.6}} {jdoc:anchorname:Usage {99.0 100.0}} {jdoc:manpage:wish {11.46 11.50 100.532 100.536}} {jdoc:link:jstools.jdoc {4.67 4.91 148.108 148.133 152.132 152.157}} {jdoc:link:jabout.tcl.jdoc {52.0 52.10}} {jdoc:link:jalert.tcl.jdoc {54.0 54.10}} {jdoc:link:jbindentry.tcl.jdoc {79.16 79.30 81.0 81.14}} {jdoc:link:jbindtext.tcl.jdoc {79.32 79.45 82.0 82.13}} {jdoc:link:jconfirm.tcl.jdoc {55.0 55.12}} {jdoc:link:jdebug.tcl.jdoc {29.0 29.10}} {jdoc:link:jfileio.tcl.jdoc {30.0 30.11}} {jdoc:link:jfindpanel.tcl.jdoc {50.112 50.126 56.0 56.14}} {jdoc:link:jfs.tcl.jdoc {57.0 57.7}} {jdoc:link:jinit.tcl.jdoc {31.0 31.9}} {jdoc:link:jmetawidgets.tcl.jdoc {45.0 45.16}} {jdoc:link:jmore.tcl.jdoc {50.166 50.175 58.0 58.9}} {jdoc:link:joptionbutton.tcl.jdoc {46.0 46.17}} {jdoc:link:jparseargs.tcl.jdoc {32.0 32.14}} {jdoc:link:jprefixmatch.tcl.jdoc {33.0 33.16}} {jdoc:link:jprefpanel.tcl.jdoc {35.11 35.25 59.0 59.14}} {jdoc:link:jprefs.tcl.jdoc {34.0 34.10}} {jdoc:link:jprompts.tcl.jdoc {60.0 60.12}} {jdoc:link:jrichtext.tcl.jdoc {53.11 53.24 71.0 71.13}} {jdoc:link:jtagconvert.tcl.jdoc {72.0 72.15}} {jdoc:link:jtext.tcl.jdoc {47.0 47.9 74.11 74.20 77.271 77.280 83.11 83.20}} {jdoc:link:jtexttags.tcl.jdoc {73.0 73.13 77.294 77.307}} {jdoc:link:jtkutils.tcl.jdoc {37.0 37.12}} {jdoc:manpage:library {100.125 100.152}} {jdoc:link:jinit.jdoc {127.21 127.35}} {jdoc:link:jstools.jdoc#Preferences_futures {148.138 148.153}} {jdoc:link:jstools.jdoc#interapplication_communication {152.162 152.177}} {jdoc:anchorname:Credits_and_Copyright {129.0 130.0}} {jdoc:anchorname:Libraries {18.0 19.0}} {jdoc:anchorname:Introduction {3.0 4.0}} {jdoc:link:jtkversion.tcl.jdoc {39.0 39.14}} {jdoc:link:jcompose.tcl.jdoc {79.47 79.59 84.0 84.12}} {jdoc:link:jlatin1.tcl.jdoc {79.65 79.76 91.0 91.11}} {jdoc:link:jtkutils.tcl.jdoc#j:dialogue {13.212 13.222}} {jdoc:link:jstools/jstools-changes-4.0.jdoc {16.4 16.33}} {jdoc:link:jldb.tcl.jdoc {24.0 24.8}} {jdoc:link:jtclutils.tcl.jdoc {38.0 38.13}} {jdoc:link:jstools.tcl.jdoc {36.0 36.11}} {jdoc:link:jcommand.tcl.jdoc {63.18 63.30 65.0 65.12}} {jdoc:link:jmenu.tcl.jdoc {63.197 63.206 66.0 66.9}} {jdoc:link:jviewers.tcl.jdoc {40.0 40.12}}} {{convert:place:99.0 99.0} {convert:place:57.7 57.7} {richptr 17.0} {convert:place:69.150 69.150} {convert:place:148.153 148.153} {convert:place:33.0 33.0} {convert:place:65.12 65.12} {convert:place:54.0 54.0} {convert:place:100.368 100.368} {current 11.127} {convert:place:22.170 22.170} {matchend 25.0} {convert:place:79.16 79.16} {convert:place:96.0 96.0} {convert:place:100.375 100.375} {convert:place:8.0 8.0} {convert:place:94.14 94.14} {convert:place:22.177 22.177} {convert:place:29.0 29.0} {convert:place:30.0 30.0} {convert:place:69.165 69.165} {convert:place:72.0 72.0} {convert:place:79.30 79.30} {convert:place:93.0 93.0} {convert:place:79.32 79.32} {convert:place:36.49 36.49} {convert:place:72.15 72.15} {convert:place:26.0 26.0} {convert:place:13.212 13.212} {convert:place:133.21 133.21} {convert:place:35.11 35.11} {convert:place:86.13 86.13} {convert:place:47.0 47.0} {convert:place:36.56 36.56} {convert:place:100.410 100.410} {convert:place:68.0 68.0} {convert:place:49.12 49.12} {convert:place:79.45 79.45} {convert:place:89.0 89.0} {convert:place:90.0 90.0} {convert:place:100.0 100.0} {convert:place:13.222 13.222} {convert:place:2.0 2.0} {convert:place:100.415 100.415} {convert:place:79.47 79.47} {convert:place:47.9 47.9} {convert:place:35.25 35.25} {convert:place:100.7 100.7} {convert:place:21.33 21.33} {matchstart 25.0} {convert:place:65.0 65.0} {convert:place:9.202 9.202} {convert:place:79.59 79.59} {convert:place:86.0 86.0} {convert:place:93.12 93.12} {convert:place:6.47 6.47} {abbrevend 40.50} {convert:place:19.0 19.0} {convert:place:79.65 79.65} {convert:place:138.0 138.0} {convert:place:9.209 9.209} {convert:place:6.54 6.54} {convert:place:56.14 56.14} {convert:place:62.0 62.0} {convert:place:138.6 138.6} {convert:place:132.14 132.14} {convert:place:71.13 71.13} {convert:place:100.130 100.130} {convert:place:79.76 79.76} {convert:place:16.0 16.0} {convert:place:34.10 34.10} {convert:place:135.0 135.0} {convert:place:37.0 37.0} {convert:place:16.4 16.4} {convert:place:85.15 85.15} {convert:place:19.21 19.21} {convert:place:58.0 58.0} {convert:place:100.139 100.139} {convert:place:42.36 42.36} {convert:place:135.9 135.9} {convert:place:139.52 139.52} {convert:place:19.28 19.28} {convert:place:132.0 132.0} {convert:place:58.9 58.9} {convert:place:34.0 34.0} {convert:place:153.0 153.0} {convert:place:55.0 55.0} {convert:place:63.18 63.18} {convert:place:76.0 76.0} {convert:place:100.159 100.159} {convert:place:26.17 26.17} {convert:place:92.14 92.14} {convert:place:97.0 97.0} {convert:place:9.0 9.0} {anchor 1.0} {convert:place:31.0 31.0} {convert:place:63.30 63.30} {insert 1.0} {convert:place:55.12 55.12} {convert:place:100.166 100.166} {convert:place:4.11 4.11} {convert:place:52.0 52.0} {convert:place:63.206 63.206} {convert:place:139.76 139.76} {convert:place:63.197 63.197} {convert:place:73.0 73.0} {convert:place:31.9 31.9} {convert:place:94.0 94.0} {convert:place:84.12 84.12} {abbrevstart 40.46} {convert:place:13.85 13.85} {convert:place:33.16 33.16} {convert:place:13.92 13.92} {convert:place:91.0 91.0} {convert:place:3.0 3.0} {convert:place:24.0 24.0} {convert:place:143.0 143.0} {convert:place:34.72 34.72} {convert:place:84.31 84.31} {convert:place:45.0 45.0} {convert:place:66.0 66.0} {convert:place:91.11 91.11} {convert:place:24.8 24.8} {convert:place:76.18 76.18} {convert:place:40.12 40.12} {convert:place:84.38 84.38} {convert:place:87.0 87.0} {convert:place:39.14 39.14} {convert:place:54.10 54.10} {convert:place:100.532 100.532} {convert:place:21.0 21.0} {convert:place:66.9 66.9} {convert:place:42.0 42.0} {convert:place:100.536 100.536} {convert:place:50.112 50.112} {convert:place:84.0 84.0} {convert:place:83.11 83.11} {convert:place:4.67 4.67} {convert:place:62.45 62.45} {convert:place:32.14 32.14} {convert:place:97.11 97.11} {convert:place:38.0 38.0} {convert:place:11.46 11.46} {convert:place:4.71 4.71} {convert:place:83.20 83.20} {convert:place:136.4 136.4} {convert:place:50.126 50.126} {convert:place:59.0 59.0} {convert:place:60.0 60.0} {convert:place:11.50 11.50} {convert:place:91.41 91.41} {convert:place:81.0 81.0} {convert:place:46.17 46.17} {convert:place:4.78 4.78} {convert:place:68.32 68.32} {convert:place:136.11 136.11} {convert:place:91.48 91.48} {convert:place:133.0 133.0} {convert:place:35.0 35.0} {convert:place:56.0 56.0} {convert:place:90.12 90.12} {convert:place:4.91 4.91} {convert:place:100.14 100.14} {convert:place:9.24 9.24} {convert:place:38.13 38.13} {convert:place:89.15 89.15} {convert:place:53.11 53.11} {emacs_mark 25.0} {convert:place:130.0 130.0} {convert:place:129.0 129.0} {convert:place:100.264 100.264} {convert:place:9.31 9.31} {convert:place:32.0 32.0} {convert:place:77.242 77.242} {convert:place:77.244 77.244} {convert:place:130.6 130.6} {convert:place:144.55 144.55} {convert:place:100.271 100.271} {convert:place:53.24 53.24} {convert:place:82.13 82.13} {convert:place:95.0 95.0} {convert:place:126.0 126.0} {convert:place:50.166 50.166} {convert:place:96.14 96.14} {convert:place:49.0 49.0} {convert:place:45.16 45.16} {convert:place:71.0 71.0} {convert:place:144.71 144.71} {convert:place:31.23 31.23} {convert:place:60.12 60.12} {convert:place:50.175 50.175} {convert:place:102.0 102.0} {convert:place:59.14 59.14} {convert:place:92.0 92.0} {convert:place:4.0 4.0} {convert:place:16.33 16.33} {convert:place:74.11 74.11} {convert:place:4.118 4.118} {convert:place:25.0 25.0} {convert:place:31.30 31.30} {convert:place:4.4 4.4} {convert:place:77.271 77.271} {convert:place:144.0 144.0} {convert:place:46.0 46.0} {convert:place:4.125 4.125} {convert:place:37.12 37.12} {convert:place:74.20 74.20} {convert:place:88.14 88.14} {convert:place:152.132 152.132} {convert:place:52.10 52.10} {convert:place:77.280 77.280} {convert:place:88.0 88.0} {convert:place:1.0 1.0} {convert:place:152.136 152.136} {convert:place:100.318 100.318} {convert:place:148.108 148.108} {convert:place:152.143 152.143} {convert:place:148.112 148.112} {convert:place:29.10 29.10} {convert:place:127.21 127.21} {convert:place:30.11 30.11} {convert:place:77.294 77.294} {convert:place:85.0 85.0} {convert:place:81.14 81.14} {convert:place:100.329 100.329} {convert:place:148.119 148.119} {convert:place:77.307 77.307} {convert:place:18.0 18.0} {convert:place:95.13 95.13} {convert:place:39.0 39.0} {convert:place:40.0 40.0} {convert:place:152.157 152.157} {convert:place:9.114 9.114} {convert:place:59.55 59.55} {convert:place:152.162 152.162} {convert:place:127.35 127.35} {convert:place:9.117 9.117} {convert:place:82.0 82.0} {convert:place:148.133 148.133} {convert:place:15.0 15.0} {convert:place:59.62 59.62} {convert:place:73.13 73.13} {convert:place:148.138 148.138} {convert:place:36.0 36.0} {convert:place:155.0 155.0} {convert:place:36.11 36.11} {convert:place:57.0 57.0} {convert:place:87.15 87.15} {convert:place:152.177 152.177}}}