Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | add readme to TSB |
---|---|
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
a316d24b47aa74780bd26b5bf962dc9e |
User & Date: | chw 2019-07-13 06:10:33.910 |
Context
2019-07-13
| ||
06:12 | fix formatting in TSB's readme check-in: dcfb8c8dac user: chw tags: trunk | |
06:10 | add readme to TSB check-in: a316d24b47 user: chw tags: trunk | |
05:26 | in TSB cheatsheet add notes about tsb::asciimath check-in: 7c79ecb7a4 user: chw tags: trunk | |
Changes
Added undroid/tsb/README.md.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 | # Taygete Scrap Book (WIP) This is an experimental, partial, compact rebuild of some ideas of Jupyter Notebook which first was presented at EuroTcl 2019. The name is derived from the small retrograde irregular satellite of Jupiter called Taygete, aka Jupiter XX. It consists of a webview (the rendering component/library of a web browser) with an added Tcl interface, plus some Tcl and JavaScript to provide a user interface resembling Jupyter Notebook. The webview part is basically taken from the Tiny cross-platform [webview] library for C/C++/Golang with the Python interface taken as starting point for the Tcl interface. No browser and webserver are required so it can be made into one binary with zero installation and without requiring network infrastructure. Uncloudy, so to speak clean hot air. A ready made ZIP kit for immediate experimation is available in [tsbkit]. It supports the three major desktop platforms Windows (32 and 64 bit), MacOS (Intel, 64 bit), Linux (Intel, 32 and 64 bit, distro agnostic but a decent version with gnome 3 runtime is required). If started without further arguments, it presents an overview page with links to examples. <center><img src="data:image/png;base64, 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"></center> ## How does it work? In Tcl a webview is created set W [twv:new -width 800 -height 600 -url ... -callback ...] From Tcl JavaScript code can be evaluated using $W eval JavaScript-code-string $W call JavaScript-function ?string-argument...? From JavaScript Tcl code can be evaluated using window.external.invoke(Tcl-callback-argument); The bootstrap in the webview constructor is an URL which contains JavaScript to evaluate Tcl code, which writes the skeleton of a HTML document including the necessary JavaScript functions to interface with the rest of the Tcl code, i.e. calls document.write(HTML+CSS+JavaScript-code); document.close(); With these means a REPL is build which initially consists of an HTML textarea as input field plus two HTML divs for output of preformatted text and HTML. When text is input into the textarea and <Shift-Return> is entered, that text is evaluated as Tcl script, or HTML/Markdown. The result is put into one of the HTML divs for output. In case the evaluation did not produce an error, a new empty HTML textarea plus two new HTML divs for output are added to the document, which then are used for the next evaluation, and so on. # And what is it good for? Good question. At least, one can quickly, interactively check out Tcl code and at the same time write some good looking documentation, which can be immediately printed out (platform dependent) or written as HTML to a file for later display in a browser. # How to hang yourself without a rope? The current version does not use a Tcl slave interpreter for command evaluation (which would allow for limitation of runtime and a "safe" set of available Tcl commands). Thus, the easiest way to hang yourself is to enter while {1} {} No measures are implemented to limit the interpreter's capabilities, thus malicious creativity like exec sudo sh -c {rm -rf .*} is possible. You have been warned! [webview]: https://github.com/zserge/webview [tsbkit]: http://www.ch-werner.de/AndroWish/TSB.kit |
Changes to undroid/tsb/tsb.tcl.
︙ | ︙ | |||
1030 1031 1032 1033 1034 1035 1036 | var Wraw = function(id, str) { var output = document.getElementById('out' + id + '-raw'); if (needsClear[id]) { output.innerHTML = str; } else { output.innerHTML += str; } | | | 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 | var Wraw = function(id, str) { var output = document.getElementById('out' + id + '-raw'); if (needsClear[id]) { output.innerHTML = str; } else { output.innerHTML += str; } if (!msLike && asciimath.AMprocessNode) { asciimath.AMprocessNode(output, false, null); } if (needsClear[id]) { output = document.getElementById('out' + id + '-pre').firstChild; if (output.innerHTML.length > 0) { output.style.color = 'inherit'; |
︙ | ︙ |