{
"tiddlers": {
"$:/Acknowledgements": {
"title": "$:/Acknowledgements",
"type": "text/vnd.tiddlywiki",
"text": "TiddlyWiki incorporates code from these fine OpenSource projects:\n\n* [[The Stanford Javascript Crypto Library|http://bitwiseshiftleft.github.io/sjcl/]]\n* [[The Jasmine JavaScript Test Framework|http://pivotal.github.io/jasmine/]]\n* [[Normalize.css by Nicolas Gallagher|http://necolas.github.io/normalize.css/]]\n\nAnd media from these projects:\n\n* World flag icons from [[Wikipedia|http://commons.wikimedia.org/wiki/Category:SVG_flags_by_country]]\n"
},
"$:/core/copyright.txt": {
"title": "$:/core/copyright.txt",
"type": "text/plain",
"text": "TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n\nCopyright © Jeremy Ruston 2004-2007\nCopyright © UnaMesa Association 2007-2014\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\nRedistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\nRedistributions in binary form must reproduce the above copyright notice, this\nlist of conditions and the following disclaimer in the documentation and/or other\nmaterials provided with the distribution.\n\nNeither the name of the UnaMesa Association nor the names of its contributors may be\nused to endorse or promote products derived from this software without specific\nprior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\nSHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n"
},
"$:/core/icon": {
"title": "$:/core/icon",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M64,0 L118.5596,32 L118.5596,96 L64,128 L9.44039956,96 L9.44039956,32 L64,0 Z M85.1274062,95.4080042 C81.5494069,95.3047989 79.9756384,95.3136745 78.1534289,92.2560668 L76.733228,92.2975844 C75.0801573,92.2226776 75.7690718,92.256631 74.6662332,92.2006037 C72.822332,92.1273894 73.1177105,90.3396383 72.7933215,89.3950941 C72.2744094,86.1888106 73.4800004,82.9659571 73.4419681,79.7590415 C73.428503,78.6206623 71.8498363,74.5912119 71.2858469,73.150598 C69.5178104,73.490271 67.7401827,73.5550323 65.9465048,73.6462337 C61.8120677,73.6358996 57.7056703,73.1192806 53.628962,72.4632293 C52.8345141,75.8119659 50.473106,80.4990751 52.4249964,83.9024219 C54.794228,87.4227874 56.45684,88.3980868 59.0339286,88.6103485 C61.6109895,88.8224384 62.1929077,91.7913467 61.5694236,92.8517379 C61.0175661,93.5845847 60.0476425,93.7176093 59.2235739,93.8951553 L57.5752147,93.9742093 C56.2780933,93.9296822 55.1187057,93.5723203 53.9629071,93.0211763 C52.0327307,91.9217335 50.0392154,89.6360411 48.5580719,87.9950695 C48.9028934,88.6503604 49.1085703,89.9296134 48.7958122,90.5249222 C47.9200982,91.7907825 44.1326257,91.7830485 42.3980986,90.996433 C40.4277043,90.1030197 35.6664658,83.8299171 34.9303347,79.1316435 C36.8887135,75.3525836 39.7416856,72.0607931 41.1850909,67.9459622 C38.038852,65.8974525 36.3537697,62.5626501 36.5725198,58.7851619 L36.6514762,58.3478913 C33.5557196,58.9392548 35.1611076,58.7192345 31.8308843,58.9762949 C21.2252017,58.9431831 11.8983553,51.6054609 17.1501626,40.2013394 C17.4916881,39.5260388 17.8165752,38.9120742 18.3955298,39.205288 C18.8602051,39.440565 18.793457,40.3843583 18.5597268,41.4309776 C15.5577203,55.057365 30.2297484,55.161659 39.2489049,52.6401668 C40.1440491,52.3898612 41.9243599,50.7040626 43.1576153,50.1452033 C45.1734825,49.231769 47.3615008,48.8611654 49.5329344,48.5941256 C54.9337165,47.9661653 61.4247946,50.8693254 64.7228943,50.9641212 C68.0210328,51.0589131 72.7127563,50.1582941 75.5928121,50.3479196 C77.6825379,50.4454833 79.734518,50.8303777 81.7507717,51.3786556 C83.0558682,44.8897102 83.1481363,40.1071855 86.2420439,39 C88.0578592,39.2926449 89.4570618,41.8175853 90.4927503,43.1666676 C92.6062592,43.0809984 94.6134653,43.6270518 96.6091885,44.233091 C100.222332,43.7098824 103.254293,41.6394732 106.445091,40.0288813 C103.211767,42.7223157 102.77315,47.1042714 103.142605,51.1564486 C103.280001,53.2591496 102.697713,55.5420684 101.977868,57.6949551 C100.630795,61.2025356 98.0292951,64.8997754 95.009908,64.7101481 C93.868464,64.673306 93.2053722,64.0138 92.3570101,63.3096933 C92.1924386,64.7358711 91.5456263,66.0084523 90.9221089,67.2697748 C89.4822206,70.066388 85.7194927,71.2987762 82.2354164,74.2849828 C78.7515768,77.2712347 83.3502408,87.9363951 84.4652464,89.8796277 C85.5800708,91.8230453 88.6922789,92.5339992 87.484639,94.28798 C87.1151913,94.8672415 86.5502884,95.0744181 85.9465544,95.2991347 L85.1274062,95.4080042 Z M45.0303574,86.5575217 L45.5828655,86.699414 C46.277142,86.4290005 47.6727292,86.8469317 48.4130246,87.0512628 C47.0498362,85.7357167 44.9960929,83.8038623 43.5164417,82.5859671 C43.0307739,81.1115156 43.2380006,79.6278431 43.3424927,78.122648 L43.3634516,77.9981264 C42.7802099,79.2030731 42.040056,80.3743566 41.6422405,81.6426885 C41.176708,83.3537773 43.7112632,85.1999538 44.6940603,86.2580263 L45.0303574,86.5575217 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/advanced-search-button": {
"title": "$:/core/images/advanced-search-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-advanced-search-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M74.5651535,87.9848361 C66.9581537,93.0488876 57.8237115,96 48,96 C21.490332,96 0,74.509668 0,48 C0,21.490332 21.490332,0 48,0 C74.509668,0 96,21.490332 96,48 C96,57.8541369 93.0305793,67.0147285 87.9377231,74.6357895 L122.284919,108.982985 C125.978897,112.676963 125.973757,118.65366 122.284271,122.343146 C118.593975,126.033442 112.613238,126.032921 108.92411,122.343793 L74.5651535,87.9848361 Z M48,80 C65.673112,80 80,65.673112 80,48 C80,30.326888 65.673112,16 48,16 C30.326888,16 16,30.326888 16,48 C16,65.673112 30.326888,80 48,80 Z\"></path>\n <circle cx=\"48\" cy=\"48\" r=\"8\"></circle>\n <circle cx=\"28\" cy=\"48\" r=\"8\"></circle>\n <circle cx=\"68\" cy=\"48\" r=\"8\"></circle>\n </g>\n</svg>"
},
"$:/core/images/blank": {
"title": "$:/core/images/blank",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-blank tc-image-button\" viewBox=\"63 152 64 64\" width=\"22pt\" height=\"22pt\"></svg>\n"
},
"$:/core/images/cancel-button": {
"title": "$:/core/images/cancel-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-cancel-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n\t<g fill-rule=\"evenodd\">\n\t <path d=\"M64,76.3137085 L47.0294734,93.2842351 C43.9038742,96.4098343 38.8399231,96.4084656 35.7157288,93.2842712 C32.5978915,90.166434 32.5915506,85.0947409 35.7157649,81.9705266 L52.6862915,65 L35.7157649,48.0294734 C32.5901657,44.9038742 32.5915344,39.8399231 35.7157288,36.7157288 C38.833566,33.5978915 43.9052591,33.5915506 47.0294734,36.7157649 L64,53.6862915 L80.9705266,36.7157649 C84.0961258,33.5901657 89.1600769,33.5915344 92.2842712,36.7157288 C95.4021085,39.833566 95.4084494,44.9052591 92.2842351,48.0294734 L75.3137085,65 L92.2842351,81.9705266 C95.4098343,85.0961258 95.4084656,90.1600769 92.2842712,93.2842712 C89.166434,96.4021085 84.0947409,96.4084494 80.9705266,93.2842351 L64,76.3137085 Z M64,129 C99.346224,129 128,100.346224 128,65 C128,29.653776 99.346224,1 64,1 C28.653776,1 1.13686838e-13,29.653776 1.13686838e-13,65 C1.13686838e-13,100.346224 28.653776,129 64,129 Z M64,113 C90.509668,113 112,91.509668 112,65 C112,38.490332 90.509668,17 64,17 C37.490332,17 16,38.490332 16,65 C16,91.509668 37.490332,113 64,113 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/chevron-down": {
"title": "$:/core/images/chevron-down",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-chevron-down tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n\t<g fill-rule=\"evenodd\" transform=\"translate(64.000000, 40.500000) rotate(-270.000000) translate(-64.000000, -40.500000) translate(-22.500000, -26.500000)\">\n <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n\t</g>\n</svg>"
},
"$:/core/images/chevron-left": {
"title": "$:/core/images/chevron-left",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-chevron-left tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\" version=\"1.1\">\n <g fill-rule=\"evenodd\" transform=\"translate(92.500000, 64.000000) rotate(-180.000000) translate(-92.500000, -64.000000) translate(6.000000, -3.000000)\">\n <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n </g>\n</svg>"
},
"$:/core/images/chevron-right": {
"title": "$:/core/images/chevron-right",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-chevron-right tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\" transform=\"translate(-48.000000, -3.000000)\">\n <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n </g>\n</svg>"
},
"$:/core/images/chevron-up": {
"title": "$:/core/images/chevron-up",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-chevron-up tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n\t<g fill-rule=\"evenodd\" transform=\"translate(64.000000, 89.500000) rotate(-90.000000) translate(-64.000000, -89.500000) translate(-22.500000, 22.500000)\">\n <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n\t</g>\n</svg>"
},
"$:/core/images/clone-button": {
"title": "$:/core/images/clone-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-clone-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M32.2650915,96 L32.2650915,120.002359 C32.2650915,124.419334 35.8432884,128 40.2627323,128 L120.002359,128 C124.419334,128 128,124.421803 128,120.002359 L128,40.2627323 C128,35.8457573 124.421803,32.2650915 120.002359,32.2650915 L96,32.2650915 L96,48 L108.858899,48 C110.519357,48 111.853018,49.3405131 111.853018,50.9941198 L111.853018,108.858899 C111.853018,110.519357 110.512505,111.853018 108.858899,111.853018 L50.9941198,111.853018 C49.333661,111.853018 48,110.512505 48,108.858899 L48,96 L32.2650915,96 Z\"></path>\n <path d=\"M40,56 L32.0070969,56 C27.5881712,56 24,52.418278 24,48 C24,43.5907123 27.5848994,40 32.0070969,40 L40,40 L40,32.0070969 C40,27.5881712 43.581722,24 48,24 C52.4092877,24 56,27.5848994 56,32.0070969 L56,40 L63.9929031,40 C68.4118288,40 72,43.581722 72,48 C72,52.4092877 68.4151006,56 63.9929031,56 L56,56 L56,63.9929031 C56,68.4118288 52.418278,72 48,72 C43.5907123,72 40,68.4151006 40,63.9929031 L40,56 Z M7.9992458,0 C3.58138434,0 0,3.5881049 0,7.9992458 L0,88.0007542 C0,92.4186157 3.5881049,96 7.9992458,96 L88.0007542,96 C92.4186157,96 96,92.4118951 96,88.0007542 L96,7.9992458 C96,3.58138434 92.4118951,0 88.0007542,0 L7.9992458,0 Z M19.0010118,16 C17.3435988,16 16,17.336731 16,19.0010118 L16,76.9989882 C16,78.6564012 17.336731,80 19.0010118,80 L76.9989882,80 C78.6564012,80 80,78.663269 80,76.9989882 L80,19.0010118 C80,17.3435988 78.663269,16 76.9989882,16 L19.0010118,16 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/close-all-button": {
"title": "$:/core/images/close-all-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-close-all-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\" transform=\"translate(-23.000000, -23.000000)\">\n <path d=\"M43,131 L22.9976794,131 C18.5827987,131 15,127.418278 15,123 C15,118.590712 18.5806831,115 22.9976794,115 L43,115 L43,94.9976794 C43,90.5827987 46.581722,87 51,87 C55.4092877,87 59,90.5806831 59,94.9976794 L59,115 L79.0023206,115 C83.4172013,115 87,118.581722 87,123 C87,127.409288 83.4193169,131 79.0023206,131 L59,131 L59,151.002321 C59,155.417201 55.418278,159 51,159 C46.5907123,159 43,155.419317 43,151.002321 L43,131 Z\" transform=\"translate(51.000000, 123.000000) rotate(-45.000000) translate(-51.000000, -123.000000) \"></path>\n <path d=\"M43,59 L22.9976794,59 C18.5827987,59 15,55.418278 15,51 C15,46.5907123 18.5806831,43 22.9976794,43 L43,43 L43,22.9976794 C43,18.5827987 46.581722,15 51,15 C55.4092877,15 59,18.5806831 59,22.9976794 L59,43 L79.0023206,43 C83.4172013,43 87,46.581722 87,51 C87,55.4092877 83.4193169,59 79.0023206,59 L59,59 L59,79.0023206 C59,83.4172013 55.418278,87 51,87 C46.5907123,87 43,83.4193169 43,79.0023206 L43,59 Z\" transform=\"translate(51.000000, 51.000000) rotate(-45.000000) translate(-51.000000, -51.000000) \"></path>\n <path d=\"M115,59 L94.9976794,59 C90.5827987,59 87,55.418278 87,51 C87,46.5907123 90.5806831,43 94.9976794,43 L115,43 L115,22.9976794 C115,18.5827987 118.581722,15 123,15 C127.409288,15 131,18.5806831 131,22.9976794 L131,43 L151.002321,43 C155.417201,43 159,46.581722 159,51 C159,55.4092877 155.419317,59 151.002321,59 L131,59 L131,79.0023206 C131,83.4172013 127.418278,87 123,87 C118.590712,87 115,83.4193169 115,79.0023206 L115,59 Z\" transform=\"translate(123.000000, 51.000000) rotate(-45.000000) translate(-123.000000, -51.000000) \"></path>\n <path d=\"M115,131 L94.9976794,131 C90.5827987,131 87,127.418278 87,123 C87,118.590712 90.5806831,115 94.9976794,115 L115,115 L115,94.9976794 C115,90.5827987 118.581722,87 123,87 C127.409288,87 131,90.5806831 131,94.9976794 L131,115 L151.002321,115 C155.417201,115 159,118.581722 159,123 C159,127.409288 155.419317,131 151.002321,131 L131,131 L131,151.002321 C131,155.417201 127.418278,159 123,159 C118.590712,159 115,155.419317 115,151.002321 L115,131 Z\" transform=\"translate(123.000000, 123.000000) rotate(-45.000000) translate(-123.000000, -123.000000) \"></path>\n </g>\n</svg>"
},
"$:/core/images/close-button": {
"title": "$:/core/images/close-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-close-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <g fill-rule=\"evenodd\">\n <path d=\"M65.0864256,75.4091629 L14.9727349,125.522854 C11.8515951,128.643993 6.78104858,128.64922 3.65685425,125.525026 C0.539017023,122.407189 0.5336324,117.334539 3.65902635,114.209145 L53.7727171,64.0954544 L3.65902635,13.9817637 C0.537886594,10.8606239 0.532659916,5.79007744 3.65685425,2.6658831 C6.77469148,-0.451954124 11.8473409,-0.457338747 14.9727349,2.66805521 L65.0864256,52.7817459 L115.200116,2.66805521 C118.321256,-0.453084553 123.391803,-0.458311231 126.515997,2.6658831 C129.633834,5.78372033 129.639219,10.8563698 126.513825,13.9817637 L76.4001341,64.0954544 L126.513825,114.209145 C129.634965,117.330285 129.640191,122.400831 126.515997,125.525026 C123.39816,128.642863 118.32551,128.648248 115.200116,125.522854 L65.0864256,75.4091629 L65.0864256,75.4091629 Z\"></path>\n </g>\n</svg>\n"
},
"$:/core/images/close-others-button": {
"title": "$:/core/images/close-others-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-close-others-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 127\">\n <g fill-rule=\"evenodd\">\n <path d=\"M64,128 C99.346224,128 128,99.346224 128,64 C128,28.653776 99.346224,0 64,0 C28.653776,0 0,28.653776 0,64 C0,99.346224 28.653776,128 64,128 Z M64,112 C90.509668,112 112,90.509668 112,64 C112,37.490332 90.509668,16 64,16 C37.490332,16 16,37.490332 16,64 C16,90.509668 37.490332,112 64,112 Z M64,96 C81.673112,96 96,81.673112 96,64 C96,46.326888 81.673112,32 64,32 C46.326888,32 32,46.326888 32,64 C32,81.673112 46.326888,96 64,96 Z M64,80 C72.836556,80 80,72.836556 80,64 C80,55.163444 72.836556,48 64,48 C55.163444,48 48,55.163444 48,64 C48,72.836556 55.163444,80 64,80 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/delete-button": {
"title": "$:/core/images/delete-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-delete-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <g fill-rule=\"evenodd\" transform=\"translate(12.000000, 0.000000)\">\n <rect x=\"0\" y=\"11\" width=\"105\" height=\"16\" rx=\"8\"></rect>\n <rect x=\"28\" y=\"0\" width=\"48\" height=\"16\" rx=\"8\"></rect>\n <rect x=\"8\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n <rect x=\"8\" y=\"112\" width=\"88\" height=\"16\" rx=\"8\"></rect>\n <rect x=\"80\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n <rect x=\"56\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n <rect x=\"32\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n </g>\n</svg>\n"
},
"$:/core/images/done-button": {
"title": "$:/core/images/done-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-done-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <g fill-rule=\"evenodd\">\n <path d=\"M3.52445141,76.8322939 C2.07397484,75.3828178 1.17514421,73.3795385 1.17514421,71.1666288 L1.17514421,23.1836596 C1.17514421,18.7531992 4.75686621,15.1751442 9.17514421,15.1751442 C13.5844319,15.1751442 17.1751442,18.7606787 17.1751442,23.1836596 L17.1751442,63.1751442 L119.173716,63.1751442 C123.590457,63.1751442 127.175144,66.7568662 127.175144,71.1751442 C127.175144,75.5844319 123.592783,79.1751442 119.173716,79.1751442 L9.17657227,79.1751442 C6.96796403,79.1751442 4.9674142,78.279521 3.51911285,76.8315312 Z\" id=\"Rectangle-285\" transform=\"translate(64.175144, 47.175144) rotate(-45.000000) translate(-64.175144, -47.175144) \"></path>\n </g>\n</svg>\n"
},
"$:/core/images/down-arrow": {
"title": "$:/core/images/down-arrow",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-down-arrow tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <path d=\"M109.35638,81.3533152 C107.923899,82.7869182 105.94502,83.6751442 103.759224,83.6751442 L24.5910645,83.6751442 C20.225873,83.6751442 16.6751442,80.1307318 16.6751442,75.7584775 C16.6751442,71.3951199 20.2192225,67.8418109 24.5910645,67.8418109 L95.8418109,67.8418109 L95.8418109,-3.40893546 C95.8418109,-7.77412698 99.3862233,-11.3248558 103.758478,-11.3248558 C108.121835,-11.3248558 111.675144,-7.78077754 111.675144,-3.40893546 L111.675144,75.7592239 C111.675144,77.9416955 110.789142,79.9205745 109.356651,81.3538862 Z\" transform=\"translate(64.175144, 36.175144) rotate(45.000000) translate(-64.175144, -36.175144) \"></path>\n</svg>\n"
},
"$:/core/images/download-button": {
"title": "$:/core/images/download-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-download-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 129 128\"><g fill-rule=\"evenodd\"><path class=\"tc-image-download-button-ring\" d=\"M64,128 C99.346224,128 128,99.346224 128,64 C128,28.653776 99.346224,0 64,0 C28.653776,0 0,28.653776 0,64 C0,99.346224 28.653776,128 64,128 Z M64,112 C90.509668,112 112,90.509668 112,64 C112,37.490332 90.509668,16 64,16 C37.490332,16 16,37.490332 16,64 C16,90.509668 37.490332,112 64,112 Z\"/><path d=\"M34.3496823,66.4308767 L61.2415823,93.634668 C63.0411536,95.4551107 65.9588502,95.4551107 67.7584215,93.634668 L94.6503215,66.4308767 C96.4498928,64.610434 96.4498928,61.6588981 94.6503215,59.8384554 C93.7861334,58.9642445 92.6140473,58.4731195 91.3919019,58.4731195 L82.9324098,58.4731195 C80.3874318,58.4731195 78.3243078,56.3860674 78.3243078,53.8115729 L78.3243078,38.6615466 C78.3243078,36.0870521 76.2611837,34 73.7162058,34 L55.283798,34 C52.7388201,34 50.675696,36.0870521 50.675696,38.6615466 L50.675696,38.6615466 L50.675696,53.8115729 C50.675696,56.3860674 48.612572,58.4731195 46.0675941,58.4731195 L37.608102,58.4731195 C35.063124,58.4731195 33,60.5601716 33,63.134666 C33,64.3709859 33.4854943,65.5566658 34.3496823,66.4308767 L34.3496823,66.4308767 Z\"/></g></svg>"
},
"$:/core/images/edit-button": {
"title": "$:/core/images/edit-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-edit-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <g fill-rule=\"evenodd\">\n <path d=\"M116.870058,45.3431458 L108.870058,45.3431458 L108.870058,45.3431458 L108.870058,61.3431458 L116.870058,61.3431458 L116.870058,45.3431458 Z M124.870058,45.3431458 L127.649881,45.3431458 C132.066101,45.3431458 135.656854,48.9248678 135.656854,53.3431458 C135.656854,57.7524334 132.07201,61.3431458 127.649881,61.3431458 L124.870058,61.3431458 L124.870058,45.3431458 Z M100.870058,45.3431458 L15.6638275,45.3431458 C15.5064377,45.3431458 15.3501085,45.3476943 15.1949638,45.3566664 L15.1949638,45.3566664 C15.0628002,45.3477039 14.928279,45.3431458 14.7913977,45.3431458 C6.68160973,45.3431458 -8.34314575,53.3431458 -8.34314575,53.3431458 C-8.34314575,53.3431458 6.85614548,61.3431458 14.7913977,61.3431458 C14.9266533,61.3431458 15.0596543,61.3384973 15.190398,61.3293588 C15.3470529,61.3385075 15.5049057,61.3431458 15.6638275,61.3431458 L100.870058,61.3431458 L100.870058,45.3431458 L100.870058,45.3431458 Z\" transform=\"translate(63.656854, 53.343146) rotate(-45.000000) translate(-63.656854, -53.343146) \"></path>\n <path d=\"M35.1714596,124.189544 C41.9594858,123.613403 49.068777,121.917633 58.85987,118.842282 C60.6854386,118.268877 62.4306907,117.705515 65.1957709,116.802278 C81.1962861,111.575575 87.0734839,109.994907 93.9414474,109.655721 C102.29855,109.242993 107.795169,111.785371 111.520478,118.355045 C112.610163,120.276732 115.051363,120.951203 116.97305,119.861518 C118.894737,118.771832 119.569207,116.330633 118.479522,114.408946 C113.146151,105.003414 104.734907,101.112919 93.5468356,101.66546 C85.6716631,102.054388 79.4899908,103.716944 62.7116783,109.197722 C59.9734132,110.092199 58.2519873,110.64787 56.4625698,111.20992 C37.002649,117.322218 25.6914684,118.282267 16.8654804,112.957098 C14.9739614,111.815848 12.5154166,112.424061 11.3741667,114.31558 C10.2329168,116.207099 10.84113,118.665644 12.7326489,119.806894 C19.0655164,123.627836 26.4866335,124.926678 35.1714596,124.189544 Z\"></path>\n </g>\n</svg>\n"
},
"$:/core/images/export-button": {
"title": "$:/core/images/export-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-export-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M8.00348646,127.999999 C8.00464867,128 8.00581094,128 8.00697327,128 L119.993027,128 C122.205254,128 124.207939,127.101378 125.657096,125.651198 L125.656838,125.65759 C127.104563,124.210109 128,122.21009 128,119.999949 L128,56.0000511 C128,51.5817449 124.409288,48 120,48 C115.581722,48 112,51.5797863 112,56.0000511 L112,112 L16,112 L16,56.0000511 C16,51.5817449 12.4092877,48 8,48 C3.581722,48 7.10542736e-15,51.5797863 7.10542736e-15,56.0000511 L7.10542736e-15,119.999949 C7.10542736e-15,124.418255 3.59071231,128 8,128 C8.00116233,128 8.0023246,128 8.00348681,127.999999 Z M56.6235633,27.3113724 L47.6580188,36.2769169 C44.5333664,39.4015692 39.4634864,39.4061295 36.339292,36.2819351 C33.2214548,33.1640979 33.2173444,28.0901742 36.3443103,24.9632084 L58.9616908,2.34582788 C60.5248533,0.782665335 62.5748436,0.000361191261 64.624516,2.38225238e-14 L64.6193616,0.00151809229 C66.6695374,0.000796251595 68.7211167,0.781508799 70.2854358,2.34582788 L92.9028163,24.9632084 C96.0274686,28.0878607 96.0320289,33.1577408 92.9078345,36.2819351 C89.7899973,39.3997724 84.7160736,39.4038827 81.5891078,36.2769169 L72.6235633,27.3113724 L72.6235633,88.5669606 C72.6235633,92.9781015 69.0418413,96.5662064 64.6235633,96.5662064 C60.2142756,96.5662064 56.6235633,92.984822 56.6235633,88.5669606 L56.6235633,27.3113724 L56.6235633,27.3113724 Z\"></path>\n </g>\n</svg>\n"
},
"$:/core/images/full-screen-button": {
"title": "$:/core/images/full-screen-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-full-screen-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g>\n <g>\n <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n </g>\n <g transform=\"translate(104.000000, 104.000000) rotate(-180.000000) translate(-104.000000, -104.000000) translate(80.000000, 80.000000)\">\n <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n </g>\n <g transform=\"translate(24.000000, 104.000000) rotate(-90.000000) translate(-24.000000, -104.000000) translate(0.000000, 80.000000)\">\n <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n </g>\n <g transform=\"translate(104.000000, 24.000000) rotate(90.000000) translate(-104.000000, -24.000000) translate(80.000000, 0.000000)\">\n <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n </g>\n </g>\n</svg>"
},
"$:/core/images/globe": {
"title": "$:/core/images/globe",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-globe tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M72.8111354,37.1275855 C72.8111354,37.9789875 72.8111354,38.8303894 72.8111354,39.6817913 C72.8111354,41.8784743 73.7885604,46.5631866 72.8111354,48.5143758 C71.3445471,51.4420595 68.1617327,52.0543531 66.4170946,54.3812641 C65.2352215,55.9575873 61.7987417,64.9821523 62.7262858,67.3005778 C66.6959269,77.2228204 74.26087,70.4881886 80.6887657,76.594328 C81.5527211,77.415037 83.5758191,78.8666631 83.985137,79.8899578 C87.2742852,88.1128283 76.4086873,94.8989524 87.7419325,106.189751 C88.9872885,107.430443 91.555495,102.372895 91.8205061,101.575869 C92.6726866,99.0129203 98.5458765,96.1267309 100.908882,94.5234439 C102.928056,93.1534443 105.782168,91.8557166 107.236936,89.7775886 C109.507391,86.5342557 108.717505,82.2640435 110.334606,79.0328716 C112.473794,74.7585014 114.163418,69.3979002 116.332726,65.0674086 C120.230862,57.2857361 121.054075,67.1596684 121.400359,67.5059523 C121.757734,67.8633269 122.411167,67.5059523 122.916571,67.5059523 C123.011132,67.5059523 124.364019,67.6048489 124.432783,67.5059523 C125.0832,66.5705216 123.390209,49.5852316 123.114531,48.2089091 C121.710578,41.1996597 116.17083,32.4278331 111.249523,27.7092761 C104.975994,21.6942076 104.160516,11.5121686 92.9912146,12.7547535 C92.7872931,12.7774397 87.906794,22.9027026 85.2136766,26.2672064 C81.486311,30.9237934 82.7434931,22.1144904 78.6876623,22.1144904 C78.6065806,22.1144904 77.5045497,22.0107615 77.4353971,22.1144904 C76.8488637,22.9942905 75.9952305,26.0101404 75.1288269,26.5311533 C74.8635477,26.6906793 73.4071369,26.2924966 73.2826811,26.5311533 C71.0401728,30.8313939 81.5394677,28.7427264 79.075427,34.482926 C76.7225098,39.9642538 72.747373,32.4860199 72.747373,43.0434079\"></path>\n <path d=\"M44.4668556,7.01044608 C54.151517,13.1403033 45.1489715,19.2084878 47.1611905,23.2253896 C48.8157833,26.5283781 51.4021933,28.6198851 48.8753629,33.038878 C46.8123257,36.6467763 42.0052989,37.0050492 39.251679,39.7621111 C36.2115749,42.8060154 33.7884281,48.7028116 32.4624592,52.6732691 C30.8452419,57.5158356 47.0088721,59.5388126 44.5246867,63.6811917 C43.1386839,65.9923513 37.7785192,65.1466282 36.0880227,63.8791519 C34.9234453,63.0059918 32.4946425,63.3331166 31.6713597,62.0997342 C29.0575851,58.1839669 29.4107339,54.0758543 28.0457962,49.9707786 C27.1076833,47.1493864 21.732611,47.8501656 20.2022714,49.3776393 C19.6790362,49.8998948 19.8723378,51.1703278 19.8723378,51.8829111 C19.8723378,57.1682405 26.9914913,55.1986414 26.9914913,58.3421973 C26.9914913,72.9792302 30.9191897,64.8771867 38.1313873,69.6793121 C48.1678018,76.3618966 45.9763926,76.981595 53.0777543,84.0829567 C56.7511941,87.7563965 60.8192437,87.7689005 62.503478,93.3767069 C64.1046972,98.7081071 53.1759798,98.7157031 50.786754,100.825053 C49.663965,101.816317 47.9736094,104.970571 46.5680513,105.439676 C44.7757187,106.037867 43.334221,105.93607 41.6242359,107.219093 C39.1967302,109.040481 37.7241465,112.151588 37.6034934,112.030935 C35.4555278,109.88297 34.0848666,96.5511248 33.7147244,93.7726273 C33.1258872,89.3524817 28.1241923,88.2337027 26.7275443,84.7420826 C25.1572737,80.8164061 28.2518481,75.223612 25.599097,70.9819941 C19.0797019,60.557804 13.7775712,56.4811506 10.2493953,44.6896152 C9.3074899,41.5416683 13.5912267,38.1609942 15.1264825,35.8570308 C17.0029359,33.0410312 17.7876232,30.0028946 19.8723378,27.2224065 C22.146793,24.1888519 40.8551166,9.46076832 43.8574051,8.63490613 L44.4668556,7.01044608 Z\"></path>\n <path d=\"M64,126 C98.2416545,126 126,98.2416545 126,64 C126,29.7583455 98.2416545,2 64,2 C29.7583455,2 2,29.7583455 2,64 C2,98.2416545 29.7583455,126 64,126 Z M64,120 C94.927946,120 120,94.927946 120,64 C120,33.072054 94.927946,8 64,8 C33.072054,8 8,33.072054 8,64 C8,94.927946 33.072054,120 64,120 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/home-button": {
"title": "$:/core/images/home-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-home-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <g fill-rule=\"evenodd\">\n <path d=\"M112.9847,119.501583 C112.99485,119.336814 113,119.170705 113,119.003406 L113,67.56802 C116.137461,70.5156358 121.076014,70.4518569 124.133985,67.3938855 C127.25818,64.2696912 127.260618,59.2068102 124.131541,56.0777326 L70.3963143,2.34250601 C68.8331348,0.779326498 66.7828947,-0.000743167069 64.7337457,1.61675364e-05 C62.691312,-0.00409949529 60.6426632,0.777559815 59.077717,2.34250601 L33,28.420223 L33,28.420223 L33,8.00697327 C33,3.58484404 29.4092877,0 25,0 C20.581722,0 17,3.59075293 17,8.00697327 L17,44.420223 L5.3424904,56.0777326 C2.21694607,59.2032769 2.22220878,64.2760483 5.34004601,67.3938855 C8.46424034,70.5180798 13.5271213,70.5205187 16.6561989,67.3914411 L17,67.04764 L17,119.993027 C17,119.994189 17.0000002,119.995351 17.0000007,119.996514 C17.0000002,119.997675 17,119.998838 17,120 C17,124.418278 20.5881049,128 24.9992458,128 L105.000754,128 C109.418616,128 113,124.409288 113,120 C113,119.832611 112.99485,119.666422 112.9847,119.501583 Z M97,112 L97,51.5736087 L97,51.5736087 L64.7370156,19.3106244 L33,51.04764 L33,112 L97,112 Z\"></path>\n </g>\n</svg>\n"
},
"$:/core/images/import-button": {
"title": "$:/core/images/import-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-import-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M105.449437,94.2138951 C105.449437,94.2138951 110.049457,94.1897106 110.049457,99.4026111 C110.049457,104.615512 105.163246,104.615511 105.163246,104.615511 L45.0075072,105.157833 C45.0075072,105.157833 0.367531803,106.289842 0.367532368,66.6449212 C0.367532934,27.0000003 45.0428249,27.0000003 45.0428249,27.0000003 L105.532495,27.0000003 C105.532495,27.0000003 138.996741,25.6734987 138.996741,55.1771866 C138.996741,84.6808745 105.727102,82.8457535 105.727102,82.8457535 L56.1735087,82.8457535 C56.1735087,82.8457535 22.6899229,85.1500223 22.6899229,66.0913753 C22.6899229,47.0327282 56.1735087,49.3383013 56.1735087,49.3383013 L105.727102,49.3383013 C105.727102,49.3383013 111.245209,49.3383024 111.245209,54.8231115 C111.245209,60.3079206 105.727102,60.5074524 105.727102,60.5074524 L56.1735087,60.5074524 C56.1735087,60.5074524 37.48913,60.5074528 37.48913,66.6449195 C37.48913,72.7823862 56.1735087,71.6766023 56.1735087,71.6766023 L105.727102,71.6766029 C105.727102,71.6766029 127.835546,73.1411469 127.835546,55.1771866 C127.835546,35.5304025 105.727102,38.3035317 105.727102,38.3035317 L45.0428249,38.3035317 C45.0428249,38.3035317 11.5287276,38.3035313 11.5287276,66.6449208 C11.5287276,94.9863103 45.0428244,93.9579678 45.0428244,93.9579678 L105.449437,94.2138951 Z\" transform=\"translate(69.367532, 66.000000) rotate(-45.000000) translate(-69.367532, -66.000000) \"></path>\n </g>\n</svg>"
},
"$:/core/images/info-button": {
"title": "$:/core/images/info-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-info-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <g fill-rule=\"evenodd\">\n <g transform=\"translate(0.049406, 0.000000)\">\n <path d=\"M64,128 C99.346224,128 128,99.346224 128,64 C128,28.653776 99.346224,0 64,0 C28.653776,0 0,28.653776 0,64 C0,99.346224 28.653776,128 64,128 Z M64,112 C90.509668,112 112,90.509668 112,64 C112,37.490332 90.509668,16 64,16 C37.490332,16 16,37.490332 16,64 C16,90.509668 37.490332,112 64,112 Z\"></path>\n <circle cx=\"64\" cy=\"32\" r=\"8\"></circle>\n <rect x=\"56\" y=\"48\" width=\"16\" height=\"56\" rx=\"8\"></rect>\n </g>\n </g>\n </g>\n</svg>\n"
},
"$:/core/images/locked-padlock": {
"title": "$:/core/images/locked-padlock",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-locked-padlock tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M96.4723753,64 L105,64 L105,96.0097716 C105,113.673909 90.6736461,128 73.001193,128 L55.998807,128 C38.3179793,128 24,113.677487 24,96.0097716 L24,64 L32.0000269,64 C32.0028554,48.2766389 32.3030338,16.2688026 64.1594984,16.2688041 C95.9543927,16.2688056 96.4648869,48.325931 96.4723753,64 Z M80.5749059,64 L48.4413579,64 C48.4426205,47.71306 48.5829272,31.9999996 64.1595001,31.9999996 C79.8437473,31.9999996 81.1369461,48.1359182 80.5749059,64 Z M67.7315279,92.3641717 C70.8232551,91.0923621 73,88.0503841 73,84.5 C73,79.8055796 69.1944204,76 64.5,76 C59.8055796,76 56,79.8055796 56,84.5 C56,87.947435 58.0523387,90.9155206 61.0018621,92.2491029 L55.9067479,115.020857 L72.8008958,115.020857 L67.7315279,92.3641717 L67.7315279,92.3641717 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/menu-button": {
"title": "$:/core/images/menu-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-menu-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <rect x=\"0\" y=\"16\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n <rect x=\"0\" y=\"56\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n <rect x=\"0\" y=\"96\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n</svg>\n"
},
"$:/core/images/new-button": {
"title": "$:/core/images/new-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-new-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <g fill-rule=\"evenodd\">\n <path d=\"M56,72 L8.00697327,72 C3.59075293,72 0,68.418278 0,64 C0,59.5907123 3.58484404,56 8.00697327,56 L56,56 L56,8.00697327 C56,3.59075293 59.581722,0 64,0 C68.4092877,0 72,3.58484404 72,8.00697327 L72,56 L119.993027,56 C124.409247,56 128,59.581722 128,64 C128,68.4092877 124.415156,72 119.993027,72 L72,72 L72,119.993027 C72,124.409247 68.418278,128 64,128 C59.5907123,128 56,124.415156 56,119.993027 L56,72 L56,72 Z\"></path>\n </g>\n</svg>\n"
},
"$:/core/images/new-here-button": {
"title": "$:/core/images/new-here-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-new-here-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n \t<g transform=\"translate(52.233611, 64.389922) rotate(75.000000) translate(-52.233611, -64.389922) translate(-7.734417, 3.702450)\">\n\t <path d=\"M18.9270186,45.959338 L18.9080585,49.6521741 C18.8884833,53.4648378 21.0574548,58.7482162 23.7526408,61.4434022 L78.5671839,116.257945 C81.2617332,118.952495 85.6348701,118.950391 88.3334363,116.251825 L115.863237,88.7220241 C118.555265,86.0299959 118.564544,81.6509578 115.869358,78.9557717 L61.0548144,24.1412286 C58.3602652,21.4466794 53.0787224,19.2788426 49.2595808,19.3006519 L25.9781737,19.4336012 C22.1633003,19.4553862 19.0471195,22.5673232 19.0275223,26.3842526 L18.9871663,34.2443819 C19.0818862,34.255617 19.1779758,34.2665345 19.2754441,34.2771502 C22.6891275,34.6489512 27.0485594,34.2348566 31.513244,33.2285542 C31.7789418,32.8671684 32.075337,32.5211298 32.4024112,32.1940556 C34.8567584,29.7397084 38.3789778,29.0128681 41.4406288,30.0213822 C41.5958829,29.9543375 41.7503946,29.8866669 41.9041198,29.8183808 L42.1110981,30.2733467 C43.1114373,30.6972371 44.0473796,31.3160521 44.8614145,32.1300869 C48.2842088,35.5528813 48.2555691,41.130967 44.7974459,44.5890903 C41.4339531,47.952583 36.0649346,48.0717177 32.6241879,44.9262969 C27.8170558,45.8919233 23.0726921,46.2881596 18.9270186,45.959338 Z\"></path>\n\t <path d=\"M45.4903462,38.8768094 C36.7300141,42.6833154 26.099618,44.7997354 18.1909048,43.9383587 C7.2512621,42.7468685 1.50150083,35.8404432 4.66865776,24.7010202 C7.51507386,14.6896965 15.4908218,6.92103848 24.3842626,4.38423012 C34.1310219,1.60401701 42.4070208,6.15882777 42.4070209,16.3101169 L34.5379395,16.310117 C34.5379394,11.9285862 31.728784,10.3825286 26.5666962,11.8549876 C20.2597508,13.6540114 14.3453742,19.4148216 12.2444303,26.8041943 C10.4963869,32.9523565 12.6250796,35.5092726 19.0530263,36.2093718 C25.5557042,36.9176104 35.0513021,34.9907189 42.7038419,31.5913902 L42.7421786,31.6756595 C44.3874154,31.5384763 47.8846101,37.3706354 45.9274416,38.6772897 L45.9302799,38.6835285 C45.9166992,38.6895612 45.9031139,38.6955897 45.8895238,38.7016142 C45.8389288,38.7327898 45.7849056,38.7611034 45.7273406,38.7863919 C45.6506459,38.8200841 45.571574,38.8501593 45.4903462,38.8768094 Z\"></path>\n </g>\n <rect x=\"96\" y=\"80\" width=\"16\" height=\"48\" rx=\"8\"></rect>\n <rect x=\"80\" y=\"96\" width=\"48\" height=\"16\" rx=\"8\"></rect>\n </g>\n </g>\n</svg>\n"
},
"$:/core/images/new-journal-button": {
"title": "$:/core/images/new-journal-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-new-journal-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M102.545455,112.818182 L102.545455,124.636364 L102.545455,124.636364 L102.545455,124.636364 C102.545455,125.941761 103.630828,127 104.969697,127 L111.030303,127 C112.369172,127 113.454545,125.941761 113.454545,124.636364 L113.454545,112.818182 L125.575758,112.818182 C126.914626,112.818182 128,111.759982 128,110.454545 L128,104.545455 C128,103.240018 126.914626,102.181818 125.575758,102.181818 L113.454545,102.181818 L113.454545,90.3636364 C113.454545,89.0582 112.369172,88 111.030303,88 L104.969697,88 L104.969697,88 C103.630828,88 102.545455,89.0582 102.545455,90.3636364 L102.545455,102.181818 L90.4242424,102.181818 L90.4242424,102.181818 C89.0853705,102.181818 88,103.240018 88,104.545455 L88,110.454545 L88,110.454545 L88,110.454545 C88,111.759982 89.0853705,112.818182 90.4242424,112.818182 L102.545455,112.818182 Z\"></path>\n <g transform=\"translate(59.816987, 64.316987) rotate(30.000000) translate(-59.816987, -64.316987) translate(20.316987, 12.816987)\">\n <g transform=\"translate(0.000000, 0.000000)\">\n <path d=\"M9.99631148,0 C4.4755011,0 -2.27373675e-13,4.48070044 -2.27373675e-13,9.99759461 L-2.27373675e-13,91.6128884 C-2.27373675e-13,97.1344074 4.46966773,101.610483 9.99631148,101.610483 L68.9318917,101.610483 C74.4527021,101.610483 78.9282032,97.1297826 78.9282032,91.6128884 L78.9282032,9.99759461 C78.9282032,4.47607557 74.4585355,0 68.9318917,0 L9.99631148,0 Z M20.8885263,26 C24.2022348,26 26.8885263,23.3137085 26.8885263,20 C26.8885263,16.6862915 24.2022348,14 20.8885263,14 C17.5748178,14 14.8885263,16.6862915 14.8885263,20 C14.8885263,23.3137085 17.5748178,26 20.8885263,26 Z M57.3033321,25.6783342 C60.6170406,25.6783342 63.3033321,22.9920427 63.3033321,19.6783342 C63.3033321,16.3646258 60.6170406,13.6783342 57.3033321,13.6783342 C53.9896236,13.6783342 51.3033321,16.3646258 51.3033321,19.6783342 C51.3033321,22.9920427 53.9896236,25.6783342 57.3033321,25.6783342 Z\"></path>\n <text font-family=\"Helvetica\" font-size=\"47.1724138\" font-weight=\"bold\" fill=\"#FFFFFF\">\n <tspan x=\"42\" y=\"77.4847912\" text-anchor=\"middle\"><<now \"DD\">></tspan>\n </text>\n </g>\n </g>\n </g>\n</svg>\n"
},
"$:/core/images/options-button": {
"title": "$:/core/images/options-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-options-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M110.48779,76.0002544 C109.354214,80.4045063 107.611262,84.5641217 105.354171,88.3838625 L105.354171,88.3838625 L112.07833,95.1080219 C115.20107,98.2307613 115.210098,103.299824 112.089164,106.420759 L106.420504,112.089418 C103.301049,115.208874 98.2346851,115.205502 95.1077675,112.078585 L88.3836082,105.354425 C84.5638673,107.611516 80.4042519,109.354468 76,110.488045 L76,110.488045 L76,119.993281 C76,124.409501 72.4220153,128.000254 68.0083475,128.000254 L59.9916525,128.000254 C55.5800761,128.000254 52,124.41541 52,119.993281 L52,110.488045 C47.5957481,109.354468 43.4361327,107.611516 39.6163918,105.354425 L32.8922325,112.078585 C29.7694931,115.201324 24.7004301,115.210353 21.5794957,112.089418 L15.9108363,106.420759 C12.7913807,103.301303 12.7947522,98.2349395 15.9216697,95.1080219 L22.6458291,88.3838625 C20.3887383,84.5641217 18.6457859,80.4045063 17.5122098,76.0002544 L8.00697327,76.0002544 C3.59075293,76.0002544 2.19088375e-16,72.4222697 4.89347582e-16,68.0086019 L9.80228577e-16,59.9919069 C1.25035972e-15,55.5803305 3.58484404,52.0002544 8.00697327,52.0002544 L17.5122098,52.0002544 C18.6457859,47.5960025 20.3887383,43.4363871 22.6458291,39.6166462 L15.9216697,32.8924868 C12.7989304,29.7697475 12.7899019,24.7006845 15.9108363,21.5797501 L21.5794957,15.9110907 C24.6989513,12.7916351 29.7653149,12.7950065 32.8922325,15.9219241 L39.6163918,22.6460835 C43.4361327,20.3889927 47.5957481,18.6460403 52,17.5124642 L52,8.00722764 C52,3.5910073 55.5779847,0.000254375069 59.9916525,0.000254375069 L68.0083475,0.000254375069 C72.4199239,0.000254375069 76,3.58509841 76,8.00722764 L76,17.5124642 C80.4042519,18.6460403 84.5638673,20.3889927 88.3836082,22.6460835 L95.1077675,15.9219241 C98.2305069,12.7991848 103.29957,12.7901562 106.420504,15.9110907 L112.089164,21.5797501 C115.208619,24.6992057 115.205248,29.7655693 112.07833,32.8924868 L105.354171,39.6166462 L105.354171,39.6166462 C107.611262,43.4363871 109.354214,47.5960025 110.48779,52.0002544 L119.993027,52.0002544 C124.409247,52.0002544 128,55.5782391 128,59.9919069 L128,68.0086019 C128,72.4201783 124.415156,76.0002544 119.993027,76.0002544 L110.48779,76.0002544 L110.48779,76.0002544 Z M64,96.0002544 C81.673112,96.0002544 96,81.6733664 96,64.0002544 C96,46.3271424 81.673112,32.0002544 64,32.0002544 C46.326888,32.0002544 32,46.3271424 32,64.0002544 C32,81.6733664 46.326888,96.0002544 64,96.0002544 Z\"></path>\n </g>\n</svg>\n"
},
"$:/core/images/permalink-button": {
"title": "$:/core/images/permalink-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-permalink-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M80.4834582,48 L73.0956761,80 L73.0956761,80 L47.5165418,80 L54.9043239,48 L80.4834582,48 Z M84.1773493,32 L89.8007299,7.64246248 C90.7941633,3.33942958 95.0918297,0.64641956 99.3968675,1.64031585 C103.693145,2.63218977 106.385414,6.93288901 105.390651,11.2416793 L100.598215,32 L104.000754,32 C108.411895,32 112,35.581722 112,40 C112,44.4092877 108.418616,48 104.000754,48 L96.9043239,48 L89.5165418,80 L104.000754,80 C108.411895,80 112,83.581722 112,88 C112,92.4092877 108.418616,96 104.000754,96 L85.8226507,96 L80.1992701,120.357538 C79.2058367,124.66057 74.9081703,127.35358 70.6031325,126.359684 C66.3068546,125.36781 63.6145865,121.067111 64.6093491,116.758321 L69.401785,96 L43.8226507,96 L38.1992701,120.357538 C37.2058367,124.66057 32.9081703,127.35358 28.6031325,126.359684 C24.3068546,125.36781 21.6145865,121.067111 22.6093491,116.758321 L27.401785,96 L23.9992458,96 C19.5881049,96 16,92.418278 16,88 C16,83.5907123 19.5813843,80 23.9992458,80 L31.0956761,80 L38.4834582,48 L23.9992458,48 C19.5881049,48 16,44.418278 16,40 C16,35.5907123 19.5813843,32 23.9992458,32 L42.1773493,32 L47.8007299,7.64246248 C48.7941633,3.33942958 53.0918297,0.64641956 57.3968675,1.64031585 C61.6931454,2.63218977 64.3854135,6.93288901 63.3906509,11.2416793 L58.598215,32 L84.1773493,32 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/permaview-button": {
"title": "$:/core/images/permaview-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-permaview-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M81.4834582,48 L79.6365127,56 L79.6365127,56 L74.0573784,56 L75.9043239,48 L81.4834582,48 Z M85.1773493,32 L90.8007299,7.64246248 C91.7941633,3.33942958 96.0918297,0.64641956 100.396867,1.64031585 C104.693145,2.63218977 107.385414,6.93288901 106.390651,11.2416793 L101.598215,32 L104.000754,32 C108.411895,32 112,35.581722 112,40 C112,44.4092877 108.418616,48 104.000754,48 L97.9043239,48 L96.0573784,56 L104.000754,56 C108.411895,56 112,59.581722 112,64 C112,68.4092877 108.418616,72 104.000754,72 L92.3634873,72 L90.5165418,80 L104.000754,80 C108.411895,80 112,83.581722 112,88 C112,92.4092877 108.418616,96 104.000754,96 L86.8226507,96 L81.1992701,120.357538 C80.2058367,124.66057 75.9081703,127.35358 71.6031325,126.359684 C67.3068546,125.36781 64.6145865,121.067111 65.6093491,116.758321 L70.401785,96 L64.8226507,96 L59.1992701,120.357538 C58.2058367,124.66057 53.9081703,127.35358 49.6031325,126.359684 C45.3068546,125.36781 42.6145865,121.067111 43.6093491,116.758321 L48.401785,96 L42.8226507,96 L37.1992701,120.357538 C36.2058367,124.66057 31.9081703,127.35358 27.6031325,126.359684 C23.3068546,125.36781 20.6145865,121.067111 21.6093491,116.758321 L26.401785,96 L23.9992458,96 C19.5881049,96 16,92.418278 16,88 C16,83.5907123 19.5813843,80 23.9992458,80 L30.0956761,80 L31.9426216,72 L23.9992458,72 C19.5881049,72 16,68.418278 16,64 C16,59.5907123 19.5813843,56 23.9992458,56 L35.6365127,56 L37.4834582,48 L23.9992458,48 C19.5881049,48 16,44.418278 16,40 C16,35.5907123 19.5813843,32 23.9992458,32 L41.1773493,32 L46.8007299,7.64246248 C47.7941633,3.33942958 52.0918297,0.64641956 56.3968675,1.64031585 C60.6931454,2.63218977 63.3854135,6.93288901 62.3906509,11.2416793 L57.598215,32 L63.1773493,32 L68.8007299,7.64246248 C69.7941633,3.33942958 74.0918297,0.64641956 78.3968675,1.64031585 C82.6931454,2.63218977 85.3854135,6.93288901 84.3906509,11.2416793 L79.598215,32 L85.1773493,32 Z M53.9043239,48 L52.0573784,56 L57.6365127,56 L59.4834582,48 L53.9043239,48 Z M75.9426216,72 L74.0956761,80 L74.0956761,80 L68.5165418,80 L70.3634873,72 L75.9426216,72 L75.9426216,72 Z M48.3634873,72 L46.5165418,80 L52.0956761,80 L53.9426216,72 L48.3634873,72 L48.3634873,72 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/plugin-generic-language": {
"title": "$:/core/images/plugin-generic-language",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M61.2072232,68.1369825 C56.8829239,70.9319564 54.2082892,74.793177 54.2082892,79.0581634 C54.2082892,86.9638335 63.3980995,93.4821994 75.2498076,94.3940006 C77.412197,98.2964184 83.8475284,101.178858 91.5684735,101.403106 C86.4420125,100.27851 82.4506393,97.6624107 80.9477167,94.3948272 C92.8046245,93.4861461 102,86.9662269 102,79.0581634 C102,70.5281905 91.3014611,63.6132813 78.1041446,63.6132813 C71.5054863,63.6132813 65.5315225,65.3420086 61.2072232,68.1369825 Z M74.001066,53.9793443 C69.6767667,56.7743182 63.7028029,58.5030456 57.1041446,58.5030456 C54.4851745,58.5030456 51.9646095,58.2307276 49.6065315,57.7275105 C46.2945155,59.9778212 41.2235699,61.4171743 35.5395922,61.4171743 C35.4545771,61.4171743 35.3696991,61.4168523 35.2849622,61.4162104 C39.404008,60.5235193 42.7961717,58.6691298 44.7630507,56.286533 C37.8379411,53.5817651 33.2082892,48.669413 33.2082892,43.0581634 C33.2082892,34.5281905 43.9068281,27.6132812 57.1041446,27.6132812 C70.3014611,27.6132812 81,34.5281905 81,43.0581634 C81,47.3231498 78.3253653,51.1843704 74.001066,53.9793443 Z M64,0 L118.5596,32 L118.5596,96 L64,128 L9.44039956,96 L9.44039956,32 L64,0 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/plugin-generic-plugin": {
"title": "$:/core/images/plugin-generic-plugin",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M40.3972881,76.4456988 L40.3972881,95.3404069 L54.5170166,95.3404069 L54.5170166,95.3404069 C54.5165526,95.3385183 54.516089,95.3366295 54.515626,95.3347404 C54.6093153,95.3385061 54.7034848,95.3404069 54.7980982,95.3404069 C58.6157051,95.3404069 61.710487,92.245625 61.710487,88.4280181 C61.710487,86.6197822 61.01617,84.9737128 59.8795929,83.7418666 L59.8795929,83.7418666 C59.8949905,83.7341665 59.9104102,83.7265043 59.925852,83.7188798 C58.8840576,82.5086663 58.2542926,80.9336277 58.2542926,79.2114996 C58.2542926,75.3938927 61.3490745,72.2991108 65.1666814,72.2991108 C68.9842884,72.2991108 72.0790703,75.3938927 72.0790703,79.2114996 C72.0790703,81.1954221 71.2432806,82.9841354 69.9045961,84.2447446 L69.9045961,84.2447446 C69.9333407,84.2629251 69.9619885,84.281245 69.9905383,84.2997032 L69.9905383,84.2997032 C69.1314315,85.4516923 68.6228758,86.8804654 68.6228758,88.4280181 C68.6228758,91.8584969 71.1218232,94.7053153 74.3986526,95.2474079 C74.3913315,95.2784624 74.3838688,95.3094624 74.3762652,95.3404069 L95.6963988,95.3404069 L95.6963988,75.5678578 L95.6963988,75.5678578 C95.6466539,75.5808558 95.5967614,75.5934886 95.5467242,75.6057531 C95.5504899,75.5120637 95.5523907,75.4178943 95.5523907,75.3232809 C95.5523907,71.505674 92.4576088,68.4108921 88.6400019,68.4108921 C86.831766,68.4108921 85.1856966,69.105209 83.9538504,70.2417862 L83.9538504,70.2417862 C83.9461503,70.2263886 83.938488,70.2109688 83.9308636,70.1955271 C82.7206501,71.2373215 81.1456115,71.8670865 79.4234834,71.8670865 C75.6058765,71.8670865 72.5110946,68.7723046 72.5110946,64.9546976 C72.5110946,61.1370907 75.6058765,58.0423088 79.4234834,58.0423088 C81.4074059,58.0423088 83.1961192,58.8780985 84.4567284,60.2167829 L84.4567284,60.2167829 C84.4749089,60.1880383 84.4932288,60.1593906 84.511687,60.1308407 L84.511687,60.1308407 C85.6636761,60.9899475 87.0924492,61.4985032 88.6400019,61.4985032 C92.0704807,61.4985032 94.9172991,58.9995558 95.4593917,55.7227265 C95.538755,55.7414363 95.6177614,55.761071 95.6963988,55.7816184 L95.6963988,40.0412962 L74.3762652,40.0412962 L74.3762652,40.0412962 C74.3838688,40.0103516 74.3913315,39.9793517 74.3986526,39.9482971 L74.3986526,39.9482971 C71.1218232,39.4062046 68.6228758,36.5593862 68.6228758,33.1289073 C68.6228758,31.5813547 69.1314315,30.1525815 69.9905383,29.0005925 C69.9619885,28.9821342 69.9333407,28.9638143 69.9045961,28.9456339 C71.2432806,27.6850247 72.0790703,25.8963113 72.0790703,23.9123888 C72.0790703,20.0947819 68.9842884,17 65.1666814,17 C61.3490745,17 58.2542926,20.0947819 58.2542926,23.9123888 C58.2542926,25.6345169 58.8840576,27.2095556 59.925852,28.419769 L59.925852,28.419769 C59.9104102,28.4273935 59.8949905,28.4350558 59.8795929,28.4427558 C61.01617,29.674602 61.710487,31.3206715 61.710487,33.1289073 C61.710487,36.9465143 58.6157051,40.0412962 54.7980982,40.0412962 C54.7034848,40.0412962 54.6093153,40.0393953 54.515626,40.0356296 L54.515626,40.0356296 C54.516089,40.0375187 54.5165526,40.0394075 54.5170166,40.0412962 L40.3972881,40.0412962 L40.3972881,52.887664 L40.3972881,52.887664 C40.4916889,53.3430132 40.5412962,53.8147625 40.5412962,54.2980982 C40.5412962,58.1157051 37.4465143,61.210487 33.6289073,61.210487 C32.0813547,61.210487 30.6525815,60.7019313 29.5005925,59.8428245 C29.4821342,59.8713744 29.4638143,59.9000221 29.4456339,59.9287667 C28.1850247,58.5900823 26.3963113,57.7542926 24.4123888,57.7542926 C20.5947819,57.7542926 17.5,60.8490745 17.5,64.6666814 C17.5,68.4842884 20.5947819,71.5790703 24.4123888,71.5790703 C26.134517,71.5790703 27.7095556,70.9493053 28.919769,69.9075109 L28.919769,69.9075109 C28.9273935,69.9229526 28.9350558,69.9383724 28.9427558,69.95377 C30.174602,68.8171928 31.8206715,68.1228758 33.6289073,68.1228758 C37.4465143,68.1228758 40.5412962,71.2176578 40.5412962,75.0352647 C40.5412962,75.5186004 40.4916889,75.9903496 40.3972881,76.4456988 Z M64,0 L118.5596,32 L118.5596,96 L64,128 L9.44039956,96 L9.44039956,32 L64,0 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/plugin-generic-theme": {
"title": "$:/core/images/plugin-generic-theme",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M27.6619958,98.5383065 C27.5690581,98.5388896 27.4761291,98.539182 27.383212,98.539182 C41.5122315,92.2342259 36.7359182,71.4340774 52.2062903,71.4340772 C52.3396942,72.0325374 52.4778143,72.6764878 52.6543744,73.3309353 C41.7206358,71.5725612 42.70852,93.6013809 27.6619958,98.5383065 Z M27.962646,98.5354078 C44.3675979,98.3221342 60.9448114,89.104528 60.944811,79.6231217 C57.0326028,79.6231217 55.0057081,78.1546059 53.8483468,76.2715831 C46.8437297,73.3160546 41.0335584,95.5643154 27.9626323,98.5354081 Z M60.4476718,66.8723739 C57.4632888,63.6421817 54.9582687,60.7541572 53.4305549,58.7453802 C47.3662923,50.7715364 44.307483,54.9700909 40.8462757,58.7453801 C37.3850684,62.5206692 41.7580858,65.5796149 38.4732643,68.2464352 C35.1884428,70.9132556 35.391237,71.8376623 29.8473278,66.9588778 C24.3034186,62.0800933 23.919977,60.7368279 26.4649349,57.9530299 C29.0098928,55.1692318 31.1369568,59.5524845 36.3357237,54.6053302 C41.5344905,49.6581758 37.1673192,45.2736183 37.1673192,45.2736183 C37.1673192,45.2736183 47.9916921,23.1463023 62.4556497,24.7805686 C76.9196074,26.4148348 56.9839048,22.6644011 52.0250205,40.0179431 C49.9018746,47.4478606 52.4201529,45.6971267 56.4460414,48.8353078 C57.8695188,49.9449088 63.120208,53.6842856 69.3136884,58.3372485 C77.8095419,50.1273311 87.3705002,40.8200581 90.1462007,38.0443577 C94.9225135,33.268045 99.6988262,38.0443577 94.9225134,42.8206705 C92.2168565,45.5263274 83.0052228,54.3768782 74.6585455,62.4104777 C84.7196352,70.2010353 95.1107413,79.0341049 95.1107416,82.5307694 C95.1107421,88.9149413 92.3944614,92.7263341 86.6764506,90.6368273 C83.0906414,89.3264812 73.3126471,80.2536547 65.0234105,71.7029822 C62.8994697,73.7599251 61.2357389,75.3821997 60.3189624,76.2989761 C57.6045976,78.4574835 53.6647127,73.2589589 55.5426497,71.5226634 C56.5140946,70.6244887 58.249291,68.9770292 60.4476718,66.8723739 L60.4476718,66.8723739 Z M64,0 L118.5596,32 L118.5596,96 L64,128 L9.44039956,96 L9.44039956,32 L64,0 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/refresh-button": {
"title": "$:/core/images/refresh-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-refresh-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M106.369002,39.4325143 C116.529932,60.3119371 112.939592,86.1974934 95.5979797,103.539105 C73.7286194,125.408466 38.2713806,125.408466 16.4020203,103.539105 C-5.46734008,81.6697449 -5.46734008,46.2125061 16.4020203,24.3431458 C19.5262146,21.2189514 24.5915344,21.2189514 27.7157288,24.3431458 C30.8399231,27.4673401 30.8399231,32.5326599 27.7157288,35.6568542 C12.0947571,51.2778259 12.0947571,76.6044251 27.7157288,92.2253967 C43.3367004,107.846368 68.6632996,107.846368 84.2842712,92.2253967 C97.71993,78.7897379 99.5995262,58.1740623 89.9230597,42.729491 L83.4844861,54.9932839 C81.4307001,58.9052072 76.5945372,60.4115251 72.682614,58.3577391 C68.7706907,56.3039532 67.2643728,51.4677903 69.3181587,47.555867 L84.4354914,18.7613158 C86.4966389,14.8353707 91.3577499,13.3347805 95.273202,15.415792 L124.145886,30.7612457 C128.047354,32.8348248 129.52915,37.6785572 127.455571,41.5800249 C125.381992,45.4814927 120.53826,46.9632892 116.636792,44.8897102 L106.369002,39.4325143 Z M98.1470904,27.0648707 C97.9798954,26.8741582 97.811187,26.6843098 97.6409651,26.4953413 L98.6018187,26.1987327 L98.1470904,27.0648707 Z\"></path>\n </g>\n</svg>\n"
},
"$:/core/images/right-arrow": {
"title": "$:/core/images/right-arrow",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-right-arrow tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <path d=\"M80.3563798,109.353315 C78.9238993,110.786918 76.9450203,111.675144 74.7592239,111.675144 L-4.40893546,111.675144 C-8.77412698,111.675144 -12.3248558,108.130732 -12.3248558,103.758478 C-12.3248558,99.3951199 -8.78077754,95.8418109 -4.40893546,95.8418109 L66.8418109,95.8418109 L66.8418109,24.5910645 C66.8418109,20.225873 70.3862233,16.6751442 74.7584775,16.6751442 C79.1218352,16.6751442 82.6751442,20.2192225 82.6751442,24.5910645 L82.6751442,103.759224 C82.6751442,105.941695 81.7891419,107.920575 80.3566508,109.353886 Z\" transform=\"translate(35.175144, 64.175144) rotate(-45.000000) translate(-35.175144, -64.175144) \"></path>\n</svg>"
},
"$:/core/images/save-button": {
"title": "$:/core/images/save-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-save-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <g fill-rule=\"evenodd\">\n <path d=\"M120.78304,34.329058 C125.424287,43.1924006 128.049406,53.2778608 128.049406,63.9764502 C128.049406,99.3226742 99.3956295,127.97645 64.0494055,127.97645 C28.7031816,127.97645 0.0494055385,99.3226742 0.0494055385,63.9764502 C0.0494055385,28.6302262 28.7031816,-0.0235498012 64.0494055,-0.0235498012 C82.8568763,-0.0235498012 99.769563,8.08898558 111.479045,21.0056358 L114.159581,18.3250998 C117.289194,15.1954866 122.356036,15.1939641 125.480231,18.3181584 C128.598068,21.4359957 128.601317,26.5107804 125.473289,29.6388083 L120.78304,34.329058 Z M108.72451,46.3875877 C110.870571,51.8341374 112.049406,57.767628 112.049406,63.9764502 C112.049406,90.4861182 90.5590735,111.97645 64.0494055,111.97645 C37.5397375,111.97645 16.0494055,90.4861182 16.0494055,63.9764502 C16.0494055,37.4667822 37.5397375,15.9764502 64.0494055,15.9764502 C78.438886,15.9764502 91.3495036,22.308215 100.147097,32.3375836 L58.9411255,73.5435552 L41.975581,56.5780107 C38.8486152,53.4510448 33.7746915,53.4551552 30.6568542,56.5729924 C27.5326599,59.6971868 27.5372202,64.7670668 30.6618725,67.8917192 L53.279253,90.5090997 C54.8435723,92.073419 56.8951519,92.8541315 58.9380216,92.8558261 C60.987971,92.8559239 63.0389578,92.0731398 64.6049211,90.5071765 L108.72451,46.3875877 Z\"></path>\n </g>\n</svg>\n"
},
"$:/core/images/star-filled": {
"title": "$:/core/images/star-filled",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-star-filled tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"nonzero\">\n <path d=\"M61.8361286,96.8228569 L99.1627704,124.110219 C101.883827,126.099427 105.541968,123.420868 104.505636,120.198072 L90.2895569,75.9887263 L89.0292911,79.8977279 L126.314504,52.5528988 C129.032541,50.5595011 127.635256,46.2255025 124.273711,46.2229134 L78.1610486,46.1873965 L81.4604673,48.6032923 L67.1773543,4.41589688 C66.1361365,1.19470104 61.6144265,1.19470104 60.5732087,4.41589688 L46.2900957,48.6032923 L49.5895144,46.1873965 L3.47685231,46.2229134 C0.115307373,46.2255025 -1.28197785,50.5595011 1.43605908,52.5528988 L38.7212719,79.8977279 L37.4610061,75.9887263 L23.2449266,120.198072 C22.2085954,123.420868 25.8667356,126.099427 28.5877926,124.110219 L65.9144344,96.8228569 L61.8361286,96.8228569 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/storyview-classic": {
"title": "$:/core/images/storyview-classic",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-storyview-classic tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 129 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M8.00697327,0 C3.58484404,0 0,3.59075293 0,8.00697327 L0,119.993027 C0,124.415156 3.59075293,128 8.00697327,128 L119.993027,128 C124.415156,128 128,124.409247 128,119.993027 L128,8.00697327 C128,3.58484404 124.409247,0 119.993027,0 L8.00697327,0 L8.00697327,0 Z M23.9992458,16 C19.5813843,16 16,19.5776607 16,23.9924054 L16,40.0075946 C16,44.4216782 19.5881049,48 23.9992458,48 L104.000754,48 C108.418616,48 112,44.4223393 112,40.0075946 L112,23.9924054 C112,19.5783218 108.411895,16 104.000754,16 L23.9992458,16 L23.9992458,16 Z M23.9992458,64 C19.5813843,64 16,67.5907123 16,72 C16,76.418278 19.5881049,80 23.9992458,80 L104.000754,80 C108.418616,80 112,76.4092877 112,72 C112,67.581722 108.411895,64 104.000754,64 L23.9992458,64 L23.9992458,64 Z M23.9992458,96 C19.5813843,96 16,99.5907123 16,104 C16,108.418278 19.5881049,112 23.9992458,112 L104.000754,112 C108.418616,112 112,108.409288 112,104 C112,99.581722 108.411895,96 104.000754,96 L23.9992458,96 L23.9992458,96 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/storyview-pop": {
"title": "$:/core/images/storyview-pop",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-storyview-pop tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M8.00697327,0 C3.58484404,0 0,3.59075293 0,8.00697327 L0,119.993027 C0,124.415156 3.59075293,128 8.00697327,128 L119.993027,128 C124.415156,128 128,124.409247 128,119.993027 L128,8.00697327 C128,3.58484404 124.409247,0 119.993027,0 L8.00697327,0 L8.00697327,0 Z M23.9992458,16 C19.5813843,16 16,19.5776607 16,23.9924054 L16,40.0075946 C16,44.4216782 19.5881049,48 23.9992458,48 L104.000754,48 C108.418616,48 112,44.4223393 112,40.0075946 L112,23.9924054 C112,19.5783218 108.411895,16 104.000754,16 L23.9992458,16 L23.9992458,16 Z M16.0098166,56 C11.586117,56 8,59.5776607 8,63.9924054 L8,80.0075946 C8,84.4216782 11.5838751,88 16.0098166,88 L111.990183,88 C116.413883,88 120,84.4223393 120,80.0075946 L120,63.9924054 C120,59.5783218 116.416125,56 111.990183,56 L16.0098166,56 L16.0098166,56 Z M23.9992458,96 C19.5813843,96 16,99.5907123 16,104 C16,108.418278 19.5881049,112 23.9992458,112 L104.000754,112 C108.418616,112 112,108.409288 112,104 C112,99.581722 108.411895,96 104.000754,96 L23.9992458,96 L23.9992458,96 Z M23.9992458,64 C19.5813843,64 16,67.5907123 16,72 C16,76.418278 19.5881049,80 23.9992458,80 L104.000754,80 C108.418616,80 112,76.4092877 112,72 C112,67.581722 108.411895,64 104.000754,64 L23.9992458,64 L23.9992458,64 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/storyview-zoomin": {
"title": "$:/core/images/storyview-zoomin",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-storyview-zoomin tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M8.00697327,0 C3.58484404,0 0,3.59075293 0,8.00697327 L0,119.993027 C0,124.415156 3.59075293,128 8.00697327,128 L119.993027,128 C124.415156,128 128,124.409247 128,119.993027 L128,8.00697327 C128,3.58484404 124.409247,0 119.993027,0 L8.00697327,0 L8.00697327,0 Z M23.9992458,16 C19.5813843,16 16,19.578055 16,24.0085154 L16,71.9914846 C16,76.4144655 19.5881049,80 23.9992458,80 L104.000754,80 C108.418616,80 112,76.421945 112,71.9914846 L112,24.0085154 C112,19.5855345 108.411895,16 104.000754,16 L23.9992458,16 L23.9992458,16 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/tag-button": {
"title": "$:/core/images/tag-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-tag-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M18.1643182,47.6600756 L18.1677196,51.7651887 C18.1708869,55.5878829 20.3581578,60.8623899 23.0531352,63.5573673 L84.9021823,125.406414 C87.5996731,128.103905 91.971139,128.096834 94.6717387,125.396234 L125.766905,94.3010679 C128.473612,91.5943612 128.472063,87.2264889 125.777085,84.5315115 L63.9280381,22.6824644 C61.2305472,19.9849735 55.9517395,17.801995 52.1318769,17.8010313 L25.0560441,17.7942007 C21.2311475,17.7932358 18.1421354,20.8872832 18.1452985,24.7049463 L18.1535504,34.6641936 C18.2481119,34.6754562 18.3439134,34.6864294 18.4409623,34.6971263 C22.1702157,35.1081705 26.9295004,34.6530132 31.806204,33.5444844 C32.1342781,33.0700515 32.5094815,32.6184036 32.9318197,32.1960654 C35.6385117,29.4893734 39.5490441,28.718649 42.94592,29.8824694 C43.0432142,29.8394357 43.1402334,29.7961748 43.2369683,29.7526887 L43.3646982,30.0368244 C44.566601,30.5115916 45.6933052,31.2351533 46.6655958,32.2074439 C50.4612154,36.0030635 50.4663097,42.1518845 46.6769742,45.94122 C43.0594074,49.5587868 37.2914155,49.7181264 33.4734256,46.422636 C28.1082519,47.5454734 22.7987486,48.0186448 18.1643182,47.6600756 Z\"></path>\n <path d=\"M47.6333528,39.5324628 L47.6562932,39.5834939 C37.9670934,43.9391617 26.0718874,46.3819521 17.260095,45.4107025 C5.27267473,44.0894301 -1.02778744,36.4307276 2.44271359,24.0779512 C5.56175386,12.9761516 14.3014034,4.36129832 24.0466405,1.54817001 C34.7269254,-1.53487574 43.7955833,3.51606438 43.7955834,14.7730751 L35.1728168,14.7730752 C35.1728167,9.91428944 32.0946059,8.19982862 26.4381034,9.83267419 C19.5270911,11.8276553 13.046247,18.2159574 10.7440788,26.4102121 C8.82861123,33.2280582 11.161186,36.0634845 18.2047888,36.8398415 C25.3302805,37.6252244 35.7353482,35.4884477 44.1208333,31.7188498 L44.1475077,31.7781871 C44.159701,31.7725635 44.1718402,31.7671479 44.1839238,31.7619434 C45.9448098,31.0035157 50.4503245,38.3109156 47.7081571,39.5012767 C47.6834429,39.512005 47.6585061,39.5223987 47.6333528,39.5324628 Z\"></path>\n </g>\n</svg>\n"
},
"$:/core/images/theme-button": {
"title": "$:/core/images/theme-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-theme-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 129\">\n <g fill-rule=\"evenodd\">\n <g transform=\"translate(6.762422, 19.968999)\">\n <path d=\"M0.824945506,108.186742 C0.664785639,108.187747 0.504640965,108.188251 0.344516735,108.188251 C24.6927592,97.3230528 16.4618388,61.4785938 43.121606,61.4785936 C43.3514982,62.5099075 43.5895175,63.6196137 43.8937798,64.7474092 C25.0518979,61.7172401 26.754298,99.6790423 0.824939051,108.186742 Z M1.34304326,108.181747 C29.613352,107.814217 58.1805158,91.9297101 58.1805151,75.5906019 C51.4386888,75.5906018 47.9457839,73.0599394 45.9513275,69.8149659 C33.880418,64.7217657 23.8678719,103.061726 1.34301955,108.181748 Z\"></path>\n <path d=\"M48.871084,61.6312522 C45.6348746,64.6233738 52.4243955,73.581882 57.1020034,69.8621716 C65.3329228,61.631253 108.502656,20.4006304 116.733576,12.169711 C124.964495,3.9387916 116.733576,-4.29212771 108.502656,3.9387916 C100.271737,12.1697108 57.4180113,53.7289683 48.871084,61.6312522 Z\"></path>\n </g>\n <path d=\"M62.2824054,71.6211067 C57.93733,66.8541323 54.3123948,62.6301561 51.9937779,59.5814279 C41.5433616,45.8402704 36.2721798,53.0755512 30.307554,59.5814276 C24.3429282,66.0873041 31.8788571,71.3587209 26.2181932,75.9543964 C20.5575294,80.5500719 20.9070004,82.1430826 11.3532982,73.7355757 C1.79959591,65.3280689 1.13881905,63.0132479 5.52449152,58.2159872 C9.91016399,53.4187265 13.5756887,60.9722938 22.5346144,52.4469667 C31.4935401,43.9216395 23.9676854,36.3658236 23.9676854,36.3658236 C23.9676854,36.3658236 42.6210998,-1.76571499 67.5465342,1.05058165 C92.4719685,3.8668783 58.1171911,-2.5961653 49.5716499,27.3088291 C45.9128772,40.1126497 50.2525733,37.0956468 57.1903023,42.5036084 C59.4792141,44.2878157 67.5103988,50.0176866 77.2457031,57.2905766 C71.4143155,62.9019825 66.2337717,67.8661661 62.2824054,71.6211067 Z M73.4870997,83.4678852 C87.4278174,97.7290403 103.323635,112.360587 109.285731,114.539289 C119.139459,118.140092 123.820369,111.571999 123.820368,100.570289 C123.820367,94.7414103 107.064445,80.3074425 90.2759123,67.2185217 C83.6390655,73.6178 77.7700759,79.2918373 73.4870997,83.4678852 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/unlocked-padlock": {
"title": "$:/core/images/unlocked-padlock",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-unlocked-padlock tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M48.6266053,64 L105,64 L105,96.0097716 C105,113.673909 90.6736461,128 73.001193,128 L55.998807,128 C38.3179793,128 24,113.677487 24,96.0097716 L24,64 L30.136303,64 C19.6806213,51.3490406 2.77158986,28.2115132 25.8366966,8.85759246 C50.4723026,-11.8141335 71.6711028,13.2108337 81.613302,25.0594855 C91.5555012,36.9081373 78.9368488,47.4964439 69.1559674,34.9513593 C59.375086,22.4062748 47.9893192,10.8049522 35.9485154,20.9083862 C23.9077117,31.0118202 34.192312,43.2685325 44.7624679,55.8655518 C47.229397,58.805523 48.403443,61.5979188 48.6266053,64 Z M67.7315279,92.3641717 C70.8232551,91.0923621 73,88.0503841 73,84.5 C73,79.8055796 69.1944204,76 64.5,76 C59.8055796,76 56,79.8055796 56,84.5 C56,87.947435 58.0523387,90.9155206 61.0018621,92.2491029 L55.9067479,115.020857 L72.8008958,115.020857 L67.7315279,92.3641717 L67.7315279,92.3641717 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/video": {
"title": "$:/core/images/video",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-video tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M64,12 C29.0909091,12 8.72727273,14.9166667 5.81818182,17.8333333 C2.90909091,20.75 1.93784382e-15,41.1666667 0,64.5 C1.93784382e-15,87.8333333 2.90909091,108.25 5.81818182,111.166667 C8.72727273,114.083333 29.0909091,117 64,117 C98.9090909,117 119.272727,114.083333 122.181818,111.166667 C125.090909,108.25 128,87.8333333 128,64.5 C128,41.1666667 125.090909,20.75 122.181818,17.8333333 C119.272727,14.9166667 98.9090909,12 64,12 Z M54.9161194,44.6182253 C51.102648,42.0759111 48.0112186,43.7391738 48.0112186,48.3159447 L48.0112186,79.6840553 C48.0112186,84.2685636 51.109784,85.9193316 54.9161194,83.3817747 L77.0838806,68.6032672 C80.897352,66.0609529 80.890216,61.9342897 77.0838806,59.3967328 L54.9161194,44.6182253 Z\"></path>\n </g>\n</svg>"
},
"$:/language/Buttons/AdvancedSearch/Caption": {
"title": "$:/language/Buttons/AdvancedSearch/Caption",
"text": "advanced search"
},
"$:/language/Buttons/AdvancedSearch/Hint": {
"title": "$:/language/Buttons/AdvancedSearch/Hint",
"text": "Advanced search"
},
"$:/language/Buttons/Cancel/Caption": {
"title": "$:/language/Buttons/Cancel/Caption",
"text": "cancel"
},
"$:/language/Buttons/Cancel/Hint": {
"title": "$:/language/Buttons/Cancel/Hint",
"text": "Cancel editing this tiddler"
},
"$:/language/Buttons/Clone/Caption": {
"title": "$:/language/Buttons/Clone/Caption",
"text": "clone"
},
"$:/language/Buttons/Clone/Hint": {
"title": "$:/language/Buttons/Clone/Hint",
"text": "Clone this tiddler"
},
"$:/language/Buttons/Close/Caption": {
"title": "$:/language/Buttons/Close/Caption",
"text": "close"
},
"$:/language/Buttons/Close/Hint": {
"title": "$:/language/Buttons/Close/Hint",
"text": "Close this tiddler"
},
"$:/language/Buttons/CloseAll/Caption": {
"title": "$:/language/Buttons/CloseAll/Caption",
"text": "close all"
},
"$:/language/Buttons/CloseAll/Hint": {
"title": "$:/language/Buttons/CloseAll/Hint",
"text": "Close all tiddlers"
},
"$:/language/Buttons/CloseOthers/Caption": {
"title": "$:/language/Buttons/CloseOthers/Caption",
"text": "close others"
},
"$:/language/Buttons/CloseOthers/Hint": {
"title": "$:/language/Buttons/CloseOthers/Hint",
"text": "Close other tiddlers"
},
"$:/language/Buttons/ControlPanel/Caption": {
"title": "$:/language/Buttons/ControlPanel/Caption",
"text": "control panel"
},
"$:/language/Buttons/ControlPanel/Hint": {
"title": "$:/language/Buttons/ControlPanel/Hint",
"text": "Open control panel"
},
"$:/language/Buttons/Delete/Caption": {
"title": "$:/language/Buttons/Delete/Caption",
"text": "delete"
},
"$:/language/Buttons/Delete/Hint": {
"title": "$:/language/Buttons/Delete/Hint",
"text": "Delete this tiddler"
},
"$:/language/Buttons/Edit/Caption": {
"title": "$:/language/Buttons/Edit/Caption",
"text": "edit"
},
"$:/language/Buttons/Edit/Hint": {
"title": "$:/language/Buttons/Edit/Hint",
"text": "Edit this tiddler"
},
"$:/language/Buttons/Encryption/Caption": {
"title": "$:/language/Buttons/Encryption/Caption",
"text": "encryption"
},
"$:/language/Buttons/Encryption/Hint": {
"title": "$:/language/Buttons/Encryption/Hint",
"text": "Set or clear a password for saving this wiki"
},
"$:/language/Buttons/Encryption/ClearPassword/Caption": {
"title": "$:/language/Buttons/Encryption/ClearPassword/Caption",
"text": "clear password"
},
"$:/language/Buttons/Encryption/ClearPassword/Hint": {
"title": "$:/language/Buttons/Encryption/ClearPassword/Hint",
"text": "Clear the password and save this wiki without encryption"
},
"$:/language/Buttons/Encryption/SetPassword/Caption": {
"title": "$:/language/Buttons/Encryption/SetPassword/Caption",
"text": "set password"
},
"$:/language/Buttons/Encryption/SetPassword/Hint": {
"title": "$:/language/Buttons/Encryption/SetPassword/Hint",
"text": "Set a password for saving this wiki with encryption"
},
"$:/language/Buttons/ExportPage/Caption": {
"title": "$:/language/Buttons/ExportPage/Caption",
"text": "export all"
},
"$:/language/Buttons/ExportPage/Hint": {
"title": "$:/language/Buttons/ExportPage/Hint",
"text": "Export all tiddlers"
},
"$:/language/Buttons/ExportTiddler/Caption": {
"title": "$:/language/Buttons/ExportTiddler/Caption",
"text": "export tiddler"
},
"$:/language/Buttons/ExportTiddler/Hint": {
"title": "$:/language/Buttons/ExportTiddler/Hint",
"text": "Export tiddler"
},
"$:/language/Buttons/ExportTiddlers/Caption": {
"title": "$:/language/Buttons/ExportTiddlers/Caption",
"text": "export tiddlers"
},
"$:/language/Buttons/ExportTiddlers/Hint": {
"title": "$:/language/Buttons/ExportTiddlers/Hint",
"text": "Export tiddlers"
},
"$:/language/Buttons/FullScreen/Caption": {
"title": "$:/language/Buttons/FullScreen/Caption",
"text": "full-screen"
},
"$:/language/Buttons/FullScreen/Hint": {
"title": "$:/language/Buttons/FullScreen/Hint",
"text": "Enter or leave full-screen mode"
},
"$:/language/Buttons/Import/Caption": {
"title": "$:/language/Buttons/Import/Caption",
"text": "import"
},
"$:/language/Buttons/Import/Hint": {
"title": "$:/language/Buttons/Import/Hint",
"text": "Import files"
},
"$:/language/Buttons/Info/Caption": {
"title": "$:/language/Buttons/Info/Caption",
"text": "info"
},
"$:/language/Buttons/Info/Hint": {
"title": "$:/language/Buttons/Info/Hint",
"text": "Show information for this tiddler"
},
"$:/language/Buttons/Home/Caption": {
"title": "$:/language/Buttons/Home/Caption",
"text": "home"
},
"$:/language/Buttons/Home/Hint": {
"title": "$:/language/Buttons/Home/Hint",
"text": "Open the default tiddlers"
},
"$:/language/Buttons/Language/Caption": {
"title": "$:/language/Buttons/Language/Caption",
"text": "language"
},
"$:/language/Buttons/Language/Hint": {
"title": "$:/language/Buttons/Language/Hint",
"text": "Choose the user interface language"
},
"$:/language/Buttons/More/Caption": {
"title": "$:/language/Buttons/More/Caption",
"text": "more"
},
"$:/language/Buttons/More/Hint": {
"title": "$:/language/Buttons/More/Hint",
"text": "More actions"
},
"$:/language/Buttons/NewHere/Caption": {
"title": "$:/language/Buttons/NewHere/Caption",
"text": "new here"
},
"$:/language/Buttons/NewHere/Hint": {
"title": "$:/language/Buttons/NewHere/Hint",
"text": "Create a new tiddler tagged with this one"
},
"$:/language/Buttons/NewJournal/Caption": {
"title": "$:/language/Buttons/NewJournal/Caption",
"text": "new journal"
},
"$:/language/Buttons/NewJournal/Hint": {
"title": "$:/language/Buttons/NewJournal/Hint",
"text": "Create a new journal tiddler"
},
"$:/language/Buttons/NewJournalHere/Caption": {
"title": "$:/language/Buttons/NewJournalHere/Caption",
"text": "new journal here"
},
"$:/language/Buttons/NewJournalHere/Hint": {
"title": "$:/language/Buttons/NewJournalHere/Hint",
"text": "Create a new journal tiddler tagged with this one"
},
"$:/language/Buttons/NewTiddler/Caption": {
"title": "$:/language/Buttons/NewTiddler/Caption",
"text": "new tiddler"
},
"$:/language/Buttons/NewTiddler/Hint": {
"title": "$:/language/Buttons/NewTiddler/Hint",
"text": "Create a new tiddler"
},
"$:/language/Buttons/Permalink/Caption": {
"title": "$:/language/Buttons/Permalink/Caption",
"text": "permalink"
},
"$:/language/Buttons/Permalink/Hint": {
"title": "$:/language/Buttons/Permalink/Hint",
"text": "Set browser address bar to a direct link to this tiddler"
},
"$:/language/Buttons/Permaview/Caption": {
"title": "$:/language/Buttons/Permaview/Caption",
"text": "permaview"
},
"$:/language/Buttons/Permaview/Hint": {
"title": "$:/language/Buttons/Permaview/Hint",
"text": "Set browser address bar to a direct link to all the tiddlers in this story"
},
"$:/language/Buttons/Refresh/Caption": {
"title": "$:/language/Buttons/Refresh/Caption",
"text": "refresh"
},
"$:/language/Buttons/Refresh/Hint": {
"title": "$:/language/Buttons/Refresh/Hint",
"text": "Perform a full refresh of the wiki"
},
"$:/language/Buttons/Save/Caption": {
"title": "$:/language/Buttons/Save/Caption",
"text": "save"
},
"$:/language/Buttons/Save/Hint": {
"title": "$:/language/Buttons/Save/Hint",
"text": "Save this tiddler"
},
"$:/language/Buttons/SaveWiki/Caption": {
"title": "$:/language/Buttons/SaveWiki/Caption",
"text": "save changes"
},
"$:/language/Buttons/SaveWiki/Hint": {
"title": "$:/language/Buttons/SaveWiki/Hint",
"text": "Save changes"
},
"$:/language/Buttons/StoryView/Caption": {
"title": "$:/language/Buttons/StoryView/Caption",
"text": "storyview"
},
"$:/language/Buttons/StoryView/Hint": {
"title": "$:/language/Buttons/StoryView/Hint",
"text": "Choose the story visualisation"
},
"$:/language/Buttons/HideSideBar/Caption": {
"title": "$:/language/Buttons/HideSideBar/Caption",
"text": "hide sidebar"
},
"$:/language/Buttons/HideSideBar/Hint": {
"title": "$:/language/Buttons/HideSideBar/Hint",
"text": "Hide sidebar"
},
"$:/language/Buttons/ShowSideBar/Caption": {
"title": "$:/language/Buttons/ShowSideBar/Caption",
"text": "show sidebar"
},
"$:/language/Buttons/ShowSideBar/Hint": {
"title": "$:/language/Buttons/ShowSideBar/Hint",
"text": "Show sidebar"
},
"$:/language/Buttons/TagManager/Caption": {
"title": "$:/language/Buttons/TagManager/Caption",
"text": "tag manager"
},
"$:/language/Buttons/TagManager/Hint": {
"title": "$:/language/Buttons/TagManager/Hint",
"text": "Open tag manager"
},
"$:/language/Buttons/Theme/Caption": {
"title": "$:/language/Buttons/Theme/Caption",
"text": "theme"
},
"$:/language/Buttons/Theme/Hint": {
"title": "$:/language/Buttons/Theme/Hint",
"text": "Choose the display theme"
},
"$:/language/ControlPanel/Advanced/Caption": {
"title": "$:/language/ControlPanel/Advanced/Caption",
"text": "Advanced"
},
"$:/language/ControlPanel/Advanced/Hint": {
"title": "$:/language/ControlPanel/Advanced/Hint",
"text": "Internal information about this TiddlyWiki"
},
"$:/language/ControlPanel/Appearance/Caption": {
"title": "$:/language/ControlPanel/Appearance/Caption",
"text": "Appearance"
},
"$:/language/ControlPanel/Appearance/Hint": {
"title": "$:/language/ControlPanel/Appearance/Hint",
"text": "Ways to customise the appearance of your TiddlyWiki."
},
"$:/language/ControlPanel/Basics/AnimDuration/Prompt": {
"title": "$:/language/ControlPanel/Basics/AnimDuration/Prompt",
"text": "Animation duration:"
},
"$:/language/ControlPanel/Basics/Caption": {
"title": "$:/language/ControlPanel/Basics/Caption",
"text": "Basics"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint",
"text": "Use [[double square brackets]] for titles with spaces. Or you can choose to <$button set=\"$:/DefaultTiddlers\" setTo=\"[list[$:/StoryList]]\">retain story ordering</$button>"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt",
"text": "Default tiddlers:"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint",
"text": "Choose which tiddlers are displayed at startup:"
},
"$:/language/ControlPanel/Basics/Language/Prompt": {
"title": "$:/language/ControlPanel/Basics/Language/Prompt",
"text": "Hello! Current language:"
},
"$:/language/ControlPanel/Basics/NewJournal/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt",
"text": "Title of new journal tiddlers"
},
"$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt",
"text": "Tags for new journal tiddlers"
},
"$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt",
"text": "Number of overridden shadow tiddlers:"
},
"$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt",
"text": "Number of shadow tiddlers:"
},
"$:/language/ControlPanel/Basics/Subtitle/Prompt": {
"title": "$:/language/ControlPanel/Basics/Subtitle/Prompt",
"text": "Subtitle:"
},
"$:/language/ControlPanel/Basics/SystemTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt",
"text": "Number of system tiddlers:"
},
"$:/language/ControlPanel/Basics/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tags/Prompt",
"text": "Number of tags:"
},
"$:/language/ControlPanel/Basics/Tiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tiddlers/Prompt",
"text": "Number of tiddlers:"
},
"$:/language/ControlPanel/Basics/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/Title/Prompt",
"text": "Title of this ~TiddlyWiki:"
},
"$:/language/ControlPanel/Basics/Username/Prompt": {
"title": "$:/language/ControlPanel/Basics/Username/Prompt",
"text": "Username for signing edits:"
},
"$:/language/ControlPanel/Basics/Version/Prompt": {
"title": "$:/language/ControlPanel/Basics/Version/Prompt",
"text": "~TiddlyWiki version:"
},
"$:/language/ControlPanel/EditorTypes/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Caption",
"text": "Editor Types"
},
"$:/language/ControlPanel/EditorTypes/Editor/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Editor/Caption",
"text": "Editor"
},
"$:/language/ControlPanel/EditorTypes/Hint": {
"title": "$:/language/ControlPanel/EditorTypes/Hint",
"text": "These tiddlers determine which editor is used to edit specific tiddler types."
},
"$:/language/ControlPanel/EditorTypes/Type/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Type/Caption",
"text": "Type"
},
"$:/language/ControlPanel/Info/Caption": {
"title": "$:/language/ControlPanel/Info/Caption",
"text": "Info"
},
"$:/language/ControlPanel/Info/Hint": {
"title": "$:/language/ControlPanel/Info/Hint",
"text": "Information about this TiddlyWiki"
},
"$:/language/ControlPanel/LoadedModules/Caption": {
"title": "$:/language/ControlPanel/LoadedModules/Caption",
"text": "Loaded Modules"
},
"$:/language/ControlPanel/LoadedModules/Hint": {
"title": "$:/language/ControlPanel/LoadedModules/Hint",
"text": "These are the currently loaded tiddler modules linked to their source tiddlers. Any italicised modules lack a source tiddler, typically because they were setup during the boot process."
},
"$:/language/ControlPanel/Palette/Caption": {
"title": "$:/language/ControlPanel/Palette/Caption",
"text": "Palette"
},
"$:/language/ControlPanel/Palette/Editor/Clone/Caption": {
"title": "$:/language/ControlPanel/Palette/Editor/Clone/Caption",
"text": "clone"
},
"$:/language/ControlPanel/Palette/Editor/Clone/Prompt": {
"title": "$:/language/ControlPanel/Palette/Editor/Clone/Prompt",
"text": "It is recommended that you clone this shadow palette before editing it"
},
"$:/language/ControlPanel/Palette/Editor/Prompt/Modified": {
"title": "$:/language/ControlPanel/Palette/Editor/Prompt/Modified",
"text": "This shadow palette has been modified"
},
"$:/language/ControlPanel/Palette/Editor/Prompt": {
"title": "$:/language/ControlPanel/Palette/Editor/Prompt",
"text": "Editing"
},
"$:/language/ControlPanel/Palette/Editor/Reset/Caption": {
"title": "$:/language/ControlPanel/Palette/Editor/Reset/Caption",
"text": "reset"
},
"$:/language/ControlPanel/Palette/HideEditor/Caption": {
"title": "$:/language/ControlPanel/Palette/HideEditor/Caption",
"text": "hide editor"
},
"$:/language/ControlPanel/Palette/Prompt": {
"title": "$:/language/ControlPanel/Palette/Prompt",
"text": "Current palette:"
},
"$:/language/ControlPanel/Palette/ShowEditor/Caption": {
"title": "$:/language/ControlPanel/Palette/ShowEditor/Caption",
"text": "show editor"
},
"$:/language/ControlPanel/Plugins/Caption": {
"title": "$:/language/ControlPanel/Plugins/Caption",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Disable/Caption": {
"title": "$:/language/ControlPanel/Plugins/Disable/Caption",
"text": "disable"
},
"$:/language/ControlPanel/Plugins/Disable/Hint": {
"title": "$:/language/ControlPanel/Plugins/Disable/Hint",
"text": "Disable this plugin when reloading page"
},
"$:/language/ControlPanel/Plugins/Disabled/Status": {
"title": "$:/language/ControlPanel/Plugins/Disabled/Status",
"text": "(disabled)"
},
"$:/language/ControlPanel/Plugins/Empty/Hint": {
"title": "$:/language/ControlPanel/Plugins/Empty/Hint",
"text": "None"
},
"$:/language/ControlPanel/Plugins/Enable/Caption": {
"title": "$:/language/ControlPanel/Plugins/Enable/Caption",
"text": "enable"
},
"$:/language/ControlPanel/Plugins/Enable/Hint": {
"title": "$:/language/ControlPanel/Plugins/Enable/Hint",
"text": "Enable this plugin when reloading page"
},
"$:/language/ControlPanel/Plugins/Language/Prompt": {
"title": "$:/language/ControlPanel/Plugins/Language/Prompt",
"text": "Languages"
},
"$:/language/ControlPanel/Plugins/Plugin/Prompt": {
"title": "$:/language/ControlPanel/Plugins/Plugin/Prompt",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Theme/Prompt": {
"title": "$:/language/ControlPanel/Plugins/Theme/Prompt",
"text": "Themes"
},
"$:/language/ControlPanel/Saving/Caption": {
"title": "$:/language/ControlPanel/Saving/Caption",
"text": "Saving"
},
"$:/language/ControlPanel/Saving/Heading": {
"title": "$:/language/ControlPanel/Saving/Heading",
"text": "Saving"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading",
"text": "Advanced Settings"
},
"$:/language/ControlPanel/Saving/TiddlySpot/BackupDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir",
"text": "Backup Directory"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Backups": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Backups",
"text": "Backups"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Description": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Description",
"text": "These settings are only used when saving to http://tiddlyspot.com or a compatible remote server"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Filename": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Filename",
"text": "Upload Filename"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Heading": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Heading",
"text": "~TiddlySpot"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Hint": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Hint",
"text": "//The server URL defaults to `http://<wikiname>.tiddlyspot.com/store.cgi` and can be changed to use a custom server address//"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Password": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Password",
"text": "Password"
},
"$:/language/ControlPanel/Saving/TiddlySpot/ServerURL": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL",
"text": "Server URL"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UploadDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir",
"text": "Upload Directory"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UserName": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UserName",
"text": "Wiki Name"
},
"$:/language/ControlPanel/Settings/AutoSave/Caption": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Caption",
"text": "Autosave"
},
"$:/language/ControlPanel/Settings/AutoSave/Disabled/Description": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description",
"text": "Do not save changes automatically"
},
"$:/language/ControlPanel/Settings/AutoSave/Enabled/Description": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description",
"text": "Save changes automatically"
},
"$:/language/ControlPanel/Settings/AutoSave/Hint": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Hint",
"text": "Automatically save changes during editing"
},
"$:/language/ControlPanel/Settings/Caption": {
"title": "$:/language/ControlPanel/Settings/Caption",
"text": "Settings"
},
"$:/language/ControlPanel/Settings/Hint": {
"title": "$:/language/ControlPanel/Settings/Hint",
"text": "These settings let you customise the behaviour of TiddlyWiki."
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption",
"text": "Navigation Address Bar"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint",
"text": "Behaviour of the browser address bar when navigating to a tiddler:"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description",
"text": "Do not update the address bar"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description",
"text": "Include the target tiddler"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description",
"text": "Include the target tiddler and the current story sequence"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Caption",
"text": "Navigation History"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Hint",
"text": "Update browser history when navigating to a tiddler:"
},
"$:/language/ControlPanel/Settings/NavigationHistory/No/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/No/Description",
"text": "Do not update history"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description",
"text": "Update history"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Caption": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Caption",
"text": "Toolbar Buttons"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Hint": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Hint",
"text": "Default toolbar button appearance:"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description",
"text": "Include icon"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description",
"text": "Include text"
},
"$:/language/ControlPanel/StoryView/Caption": {
"title": "$:/language/ControlPanel/StoryView/Caption",
"text": "Story View"
},
"$:/language/ControlPanel/StoryView/Prompt": {
"title": "$:/language/ControlPanel/StoryView/Prompt",
"text": "Current view:"
},
"$:/language/ControlPanel/Theme/Caption": {
"title": "$:/language/ControlPanel/Theme/Caption",
"text": "Theme"
},
"$:/language/ControlPanel/Theme/Prompt": {
"title": "$:/language/ControlPanel/Theme/Prompt",
"text": "Current theme:"
},
"$:/language/ControlPanel/TiddlerFields/Caption": {
"title": "$:/language/ControlPanel/TiddlerFields/Caption",
"text": "Tiddler Fields"
},
"$:/language/ControlPanel/TiddlerFields/Hint": {
"title": "$:/language/ControlPanel/TiddlerFields/Hint",
"text": "This is the full set of TiddlerFields in use in this wiki (including system tiddlers but excluding shadow tiddlers)."
},
"$:/language/ControlPanel/Toolbars/Caption": {
"title": "$:/language/ControlPanel/Toolbars/Caption",
"text": "Toolbars"
},
"$:/language/ControlPanel/Toolbars/EditToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/EditToolbar/Caption",
"text": "Edit Toolbar"
},
"$:/language/ControlPanel/Toolbars/EditToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/EditToolbar/Hint",
"text": "Choose which buttons are displayed for tiddlers in edit mode"
},
"$:/language/ControlPanel/Toolbars/Hint": {
"title": "$:/language/ControlPanel/Toolbars/Hint",
"text": "Select which toolbar buttons are displayed"
},
"$:/language/ControlPanel/Toolbars/PageControls/Caption": {
"title": "$:/language/ControlPanel/Toolbars/PageControls/Caption",
"text": "Page Toolbar"
},
"$:/language/ControlPanel/Toolbars/PageControls/Hint": {
"title": "$:/language/ControlPanel/Toolbars/PageControls/Hint",
"text": "Choose which buttons are displayed on the main page toolbar "
},
"$:/language/ControlPanel/Toolbars/ViewToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption",
"text": "View Toolbar"
},
"$:/language/ControlPanel/Toolbars/ViewToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint",
"text": "Choose which buttons are displayed for tiddlers in view mode"
},
"$:/language/ControlPanel/Tools/Download/Full/Caption": {
"title": "$:/language/ControlPanel/Tools/Download/Full/Caption",
"text": "Download full wiki"
},
"$:/language/Date/DaySuffix/1": {
"title": "$:/language/Date/DaySuffix/1",
"text": "st"
},
"$:/language/Date/DaySuffix/2": {
"title": "$:/language/Date/DaySuffix/2",
"text": "nd"
},
"$:/language/Date/DaySuffix/3": {
"title": "$:/language/Date/DaySuffix/3",
"text": "rd"
},
"$:/language/Date/DaySuffix/4": {
"title": "$:/language/Date/DaySuffix/4",
"text": "th"
},
"$:/language/Date/DaySuffix/5": {
"title": "$:/language/Date/DaySuffix/5",
"text": "th"
},
"$:/language/Date/DaySuffix/6": {
"title": "$:/language/Date/DaySuffix/6",
"text": "th"
},
"$:/language/Date/DaySuffix/7": {
"title": "$:/language/Date/DaySuffix/7",
"text": "th"
},
"$:/language/Date/DaySuffix/8": {
"title": "$:/language/Date/DaySuffix/8",
"text": "th"
},
"$:/language/Date/DaySuffix/9": {
"title": "$:/language/Date/DaySuffix/9",
"text": "th"
},
"$:/language/Date/DaySuffix/10": {
"title": "$:/language/Date/DaySuffix/10",
"text": "th"
},
"$:/language/Date/DaySuffix/11": {
"title": "$:/language/Date/DaySuffix/11",
"text": "th"
},
"$:/language/Date/DaySuffix/12": {
"title": "$:/language/Date/DaySuffix/12",
"text": "th"
},
"$:/language/Date/DaySuffix/13": {
"title": "$:/language/Date/DaySuffix/13",
"text": "th"
},
"$:/language/Date/DaySuffix/14": {
"title": "$:/language/Date/DaySuffix/14",
"text": "th"
},
"$:/language/Date/DaySuffix/15": {
"title": "$:/language/Date/DaySuffix/15",
"text": "th"
},
"$:/language/Date/DaySuffix/16": {
"title": "$:/language/Date/DaySuffix/16",
"text": "th"
},
"$:/language/Date/DaySuffix/17": {
"title": "$:/language/Date/DaySuffix/17",
"text": "th"
},
"$:/language/Date/DaySuffix/18": {
"title": "$:/language/Date/DaySuffix/18",
"text": "th"
},
"$:/language/Date/DaySuffix/19": {
"title": "$:/language/Date/DaySuffix/19",
"text": "th"
},
"$:/language/Date/DaySuffix/20": {
"title": "$:/language/Date/DaySuffix/20",
"text": "th"
},
"$:/language/Date/DaySuffix/21": {
"title": "$:/language/Date/DaySuffix/21",
"text": "st"
},
"$:/language/Date/DaySuffix/22": {
"title": "$:/language/Date/DaySuffix/22",
"text": "nd"
},
"$:/language/Date/DaySuffix/23": {
"title": "$:/language/Date/DaySuffix/23",
"text": "rd"
},
"$:/language/Date/DaySuffix/24": {
"title": "$:/language/Date/DaySuffix/24",
"text": "th"
},
"$:/language/Date/DaySuffix/25": {
"title": "$:/language/Date/DaySuffix/25",
"text": "th"
},
"$:/language/Date/DaySuffix/26": {
"title": "$:/language/Date/DaySuffix/26",
"text": "th"
},
"$:/language/Date/DaySuffix/27": {
"title": "$:/language/Date/DaySuffix/27",
"text": "th"
},
"$:/language/Date/DaySuffix/28": {
"title": "$:/language/Date/DaySuffix/28",
"text": "th"
},
"$:/language/Date/DaySuffix/29": {
"title": "$:/language/Date/DaySuffix/29",
"text": "th"
},
"$:/language/Date/DaySuffix/30": {
"title": "$:/language/Date/DaySuffix/30",
"text": "th"
},
"$:/language/Date/DaySuffix/31": {
"title": "$:/language/Date/DaySuffix/31",
"text": "st"
},
"$:/language/Date/Long/Day/0": {
"title": "$:/language/Date/Long/Day/0",
"text": "Sunday"
},
"$:/language/Date/Long/Day/1": {
"title": "$:/language/Date/Long/Day/1",
"text": "Monday"
},
"$:/language/Date/Long/Day/2": {
"title": "$:/language/Date/Long/Day/2",
"text": "Tuesday"
},
"$:/language/Date/Long/Day/3": {
"title": "$:/language/Date/Long/Day/3",
"text": "Wednesday"
},
"$:/language/Date/Long/Day/4": {
"title": "$:/language/Date/Long/Day/4",
"text": "Thursday"
},
"$:/language/Date/Long/Day/5": {
"title": "$:/language/Date/Long/Day/5",
"text": "Friday"
},
"$:/language/Date/Long/Day/6": {
"title": "$:/language/Date/Long/Day/6",
"text": "Saturday"
},
"$:/language/Date/Long/Month/1": {
"title": "$:/language/Date/Long/Month/1",
"text": "January"
},
"$:/language/Date/Long/Month/2": {
"title": "$:/language/Date/Long/Month/2",
"text": "February"
},
"$:/language/Date/Long/Month/3": {
"title": "$:/language/Date/Long/Month/3",
"text": "March"
},
"$:/language/Date/Long/Month/4": {
"title": "$:/language/Date/Long/Month/4",
"text": "April"
},
"$:/language/Date/Long/Month/5": {
"title": "$:/language/Date/Long/Month/5",
"text": "May"
},
"$:/language/Date/Long/Month/6": {
"title": "$:/language/Date/Long/Month/6",
"text": "June"
},
"$:/language/Date/Long/Month/7": {
"title": "$:/language/Date/Long/Month/7",
"text": "July"
},
"$:/language/Date/Long/Month/8": {
"title": "$:/language/Date/Long/Month/8",
"text": "August"
},
"$:/language/Date/Long/Month/9": {
"title": "$:/language/Date/Long/Month/9",
"text": "September"
},
"$:/language/Date/Long/Month/10": {
"title": "$:/language/Date/Long/Month/10",
"text": "October"
},
"$:/language/Date/Long/Month/11": {
"title": "$:/language/Date/Long/Month/11",
"text": "November"
},
"$:/language/Date/Long/Month/12": {
"title": "$:/language/Date/Long/Month/12",
"text": "December"
},
"$:/language/Date/Period/am": {
"title": "$:/language/Date/Period/am",
"text": "am"
},
"$:/language/Date/Period/pm": {
"title": "$:/language/Date/Period/pm",
"text": "pm"
},
"$:/language/Date/Short/Day/0": {
"title": "$:/language/Date/Short/Day/0",
"text": "Sun"
},
"$:/language/Date/Short/Day/1": {
"title": "$:/language/Date/Short/Day/1",
"text": "Mon"
},
"$:/language/Date/Short/Day/2": {
"title": "$:/language/Date/Short/Day/2",
"text": "Tue"
},
"$:/language/Date/Short/Day/3": {
"title": "$:/language/Date/Short/Day/3",
"text": "Wed"
},
"$:/language/Date/Short/Day/4": {
"title": "$:/language/Date/Short/Day/4",
"text": "Thu"
},
"$:/language/Date/Short/Day/5": {
"title": "$:/language/Date/Short/Day/5",
"text": "Fri"
},
"$:/language/Date/Short/Day/6": {
"title": "$:/language/Date/Short/Day/6",
"text": "Sat"
},
"$:/language/Date/Short/Month/1": {
"title": "$:/language/Date/Short/Month/1",
"text": "Jan"
},
"$:/language/Date/Short/Month/2": {
"title": "$:/language/Date/Short/Month/2",
"text": "Feb"
},
"$:/language/Date/Short/Month/3": {
"title": "$:/language/Date/Short/Month/3",
"text": "Mar"
},
"$:/language/Date/Short/Month/4": {
"title": "$:/language/Date/Short/Month/4",
"text": "Apr"
},
"$:/language/Date/Short/Month/5": {
"title": "$:/language/Date/Short/Month/5",
"text": "May"
},
"$:/language/Date/Short/Month/6": {
"title": "$:/language/Date/Short/Month/6",
"text": "Jun"
},
"$:/language/Date/Short/Month/7": {
"title": "$:/language/Date/Short/Month/7",
"text": "Jul"
},
"$:/language/Date/Short/Month/8": {
"title": "$:/language/Date/Short/Month/8",
"text": "Aug"
},
"$:/language/Date/Short/Month/9": {
"title": "$:/language/Date/Short/Month/9",
"text": "Sep"
},
"$:/language/Date/Short/Month/10": {
"title": "$:/language/Date/Short/Month/10",
"text": "Oct"
},
"$:/language/Date/Short/Month/11": {
"title": "$:/language/Date/Short/Month/11",
"text": "Nov"
},
"$:/language/Date/Short/Month/12": {
"title": "$:/language/Date/Short/Month/12",
"text": "Dec"
},
"$:/language/RelativeDate/Future/Days": {
"title": "$:/language/RelativeDate/Future/Days",
"text": "<<period>> days from now"
},
"$:/language/RelativeDate/Future/Hours": {
"title": "$:/language/RelativeDate/Future/Hours",
"text": "<<period>> hours from now"
},
"$:/language/RelativeDate/Future/Minutes": {
"title": "$:/language/RelativeDate/Future/Minutes",
"text": "<<period>> minutes from now"
},
"$:/language/RelativeDate/Future/Months": {
"title": "$:/language/RelativeDate/Future/Months",
"text": "<<period>> months from now"
},
"$:/language/RelativeDate/Future/Second": {
"title": "$:/language/RelativeDate/Future/Second",
"text": "1 second from now"
},
"$:/language/RelativeDate/Future/Seconds": {
"title": "$:/language/RelativeDate/Future/Seconds",
"text": "<<period>> seconds from now"
},
"$:/language/RelativeDate/Future/Years": {
"title": "$:/language/RelativeDate/Future/Years",
"text": "<<period>> years from now"
},
"$:/language/RelativeDate/Past/Days": {
"title": "$:/language/RelativeDate/Past/Days",
"text": "<<period>> days ago"
},
"$:/language/RelativeDate/Past/Hours": {
"title": "$:/language/RelativeDate/Past/Hours",
"text": "<<period>> hours ago"
},
"$:/language/RelativeDate/Past/Minutes": {
"title": "$:/language/RelativeDate/Past/Minutes",
"text": "<<period>> minutes ago"
},
"$:/language/RelativeDate/Past/Months": {
"title": "$:/language/RelativeDate/Past/Months",
"text": "<<period>> months ago"
},
"$:/language/RelativeDate/Past/Second": {
"title": "$:/language/RelativeDate/Past/Second",
"text": "1 second ago"
},
"$:/language/RelativeDate/Past/Seconds": {
"title": "$:/language/RelativeDate/Past/Seconds",
"text": "<<period>> seconds ago"
},
"$:/language/RelativeDate/Past/Years": {
"title": "$:/language/RelativeDate/Past/Years",
"text": "<<period>> years ago"
},
"$:/language/Docs/ModuleTypes/animation": {
"title": "$:/language/Docs/ModuleTypes/animation",
"text": "Animations that may be used with the RevealWidget."
},
"$:/language/Docs/ModuleTypes/command": {
"title": "$:/language/Docs/ModuleTypes/command",
"text": "Commands that can be executed under Node.js."
},
"$:/language/Docs/ModuleTypes/config": {
"title": "$:/language/Docs/ModuleTypes/config",
"text": "Data to be inserted into `$tw.config`."
},
"$:/language/Docs/ModuleTypes/filteroperator": {
"title": "$:/language/Docs/ModuleTypes/filteroperator",
"text": "Individual filter operator methods."
},
"$:/language/Docs/ModuleTypes/global": {
"title": "$:/language/Docs/ModuleTypes/global",
"text": "Global data to be inserted into `$tw`."
},
"$:/language/Docs/ModuleTypes/isfilteroperator": {
"title": "$:/language/Docs/ModuleTypes/isfilteroperator",
"text": "Operands for the ''is'' filter operator."
},
"$:/language/Docs/ModuleTypes/macro": {
"title": "$:/language/Docs/ModuleTypes/macro",
"text": "JavaScript macro definitions."
},
"$:/language/Docs/ModuleTypes/parser": {
"title": "$:/language/Docs/ModuleTypes/parser",
"text": "Parsers for different content types."
},
"$:/language/Docs/ModuleTypes/saver": {
"title": "$:/language/Docs/ModuleTypes/saver",
"text": "Savers handle different methods for saving files from the browser."
},
"$:/language/Docs/ModuleTypes/startup": {
"title": "$:/language/Docs/ModuleTypes/startup",
"text": "Startup functions."
},
"$:/language/Docs/ModuleTypes/storyview": {
"title": "$:/language/Docs/ModuleTypes/storyview",
"text": "Story views customise the animation and behaviour of list widgets."
},
"$:/language/Docs/ModuleTypes/tiddlerdeserializer": {
"title": "$:/language/Docs/ModuleTypes/tiddlerdeserializer",
"text": "Converts different content types into tiddlers."
},
"$:/language/Docs/ModuleTypes/tiddlerfield": {
"title": "$:/language/Docs/ModuleTypes/tiddlerfield",
"text": "Defines the behaviour of an individual tiddler field."
},
"$:/language/Docs/ModuleTypes/tiddlermethod": {
"title": "$:/language/Docs/ModuleTypes/tiddlermethod",
"text": "Adds methods to the `$tw.Tiddler` prototype."
},
"$:/language/Docs/ModuleTypes/upgrader": {
"title": "$:/language/Docs/ModuleTypes/upgrader",
"text": "Applies upgrade processing to tiddlers during an upgrade/import."
},
"$:/language/Docs/ModuleTypes/utils": {
"title": "$:/language/Docs/ModuleTypes/utils",
"text": "Adds methods to `$tw.utils`."
},
"$:/language/Docs/ModuleTypes/utils-node": {
"title": "$:/language/Docs/ModuleTypes/utils-node",
"text": "Adds Node.js-specific methods to `$tw.utils`."
},
"$:/language/Docs/ModuleTypes/widget": {
"title": "$:/language/Docs/ModuleTypes/widget",
"text": "Widgets encapsulate DOM rendering and refreshing."
},
"$:/language/Docs/ModuleTypes/wikimethod": {
"title": "$:/language/Docs/ModuleTypes/wikimethod",
"text": "Adds methods to `$tw.Wiki`."
},
"$:/language/Docs/ModuleTypes/wikirule": {
"title": "$:/language/Docs/ModuleTypes/wikirule",
"text": "Individual parser rules for the main WikiText parser."
},
"$:/language/Docs/PaletteColours/alert-background": {
"title": "$:/language/Docs/PaletteColours/alert-background",
"text": "Alert background"
},
"$:/language/Docs/PaletteColours/alert-border": {
"title": "$:/language/Docs/PaletteColours/alert-border",
"text": "Alert border"
},
"$:/language/Docs/PaletteColours/alert-highlight": {
"title": "$:/language/Docs/PaletteColours/alert-highlight",
"text": "Alert highlight"
},
"$:/language/Docs/PaletteColours/alert-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/alert-muted-foreground",
"text": "Alert muted foreground"
},
"$:/language/Docs/PaletteColours/background": {
"title": "$:/language/Docs/PaletteColours/background",
"text": "General background"
},
"$:/language/Docs/PaletteColours/blockquote-bar": {
"title": "$:/language/Docs/PaletteColours/blockquote-bar",
"text": "Blockquote bar"
},
"$:/language/Docs/PaletteColours/dirty-indicator": {
"title": "$:/language/Docs/PaletteColours/dirty-indicator",
"text": "Unsaved changes indicator"
},
"$:/language/Docs/PaletteColours/code-background": {
"title": "$:/language/Docs/PaletteColours/code-background",
"text": "Code background"
},
"$:/language/Docs/PaletteColours/code-border": {
"title": "$:/language/Docs/PaletteColours/code-border",
"text": "Code border"
},
"$:/language/Docs/PaletteColours/code-foreground": {
"title": "$:/language/Docs/PaletteColours/code-foreground",
"text": "Code foreground"
},
"$:/language/Docs/PaletteColours/download-background": {
"title": "$:/language/Docs/PaletteColours/download-background",
"text": "Download button background"
},
"$:/language/Docs/PaletteColours/download-foreground": {
"title": "$:/language/Docs/PaletteColours/download-foreground",
"text": "Download button foreground"
},
"$:/language/Docs/PaletteColours/dragger-background": {
"title": "$:/language/Docs/PaletteColours/dragger-background",
"text": "Dragger background"
},
"$:/language/Docs/PaletteColours/dragger-foreground": {
"title": "$:/language/Docs/PaletteColours/dragger-foreground",
"text": "Dragger foreground"
},
"$:/language/Docs/PaletteColours/dropdown-background": {
"title": "$:/language/Docs/PaletteColours/dropdown-background",
"text": "Dropdown background"
},
"$:/language/Docs/PaletteColours/dropdown-border": {
"title": "$:/language/Docs/PaletteColours/dropdown-border",
"text": "Dropdown border"
},
"$:/language/Docs/PaletteColours/dropdown-tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/dropdown-tab-background-selected",
"text": "Dropdown tab background for selected tabs"
},
"$:/language/Docs/PaletteColours/dropdown-tab-background": {
"title": "$:/language/Docs/PaletteColours/dropdown-tab-background",
"text": "Dropdown tab background"
},
"$:/language/Docs/PaletteColours/dropzone-background": {
"title": "$:/language/Docs/PaletteColours/dropzone-background",
"text": "Dropzone background"
},
"$:/language/Docs/PaletteColours/external-link-background-hover": {
"title": "$:/language/Docs/PaletteColours/external-link-background-hover",
"text": "External link background hover"
},
"$:/language/Docs/PaletteColours/external-link-background-visited": {
"title": "$:/language/Docs/PaletteColours/external-link-background-visited",
"text": "External link background visited"
},
"$:/language/Docs/PaletteColours/external-link-background": {
"title": "$:/language/Docs/PaletteColours/external-link-background",
"text": "External link background"
},
"$:/language/Docs/PaletteColours/external-link-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground-hover",
"text": "External link foreground hover"
},
"$:/language/Docs/PaletteColours/external-link-foreground-visited": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground-visited",
"text": "External link foreground visited"
},
"$:/language/Docs/PaletteColours/external-link-foreground": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground",
"text": "External link foreground"
},
"$:/language/Docs/PaletteColours/foreground": {
"title": "$:/language/Docs/PaletteColours/foreground",
"text": "General foreground"
},
"$:/language/Docs/PaletteColours/message-background": {
"title": "$:/language/Docs/PaletteColours/message-background",
"text": "Message box background"
},
"$:/language/Docs/PaletteColours/message-border": {
"title": "$:/language/Docs/PaletteColours/message-border",
"text": "Message box border"
},
"$:/language/Docs/PaletteColours/message-foreground": {
"title": "$:/language/Docs/PaletteColours/message-foreground",
"text": "Message box foreground"
},
"$:/language/Docs/PaletteColours/modal-backdrop": {
"title": "$:/language/Docs/PaletteColours/modal-backdrop",
"text": "Modal backdrop"
},
"$:/language/Docs/PaletteColours/modal-background": {
"title": "$:/language/Docs/PaletteColours/modal-background",
"text": "Modal background"
},
"$:/language/Docs/PaletteColours/modal-border": {
"title": "$:/language/Docs/PaletteColours/modal-border",
"text": "Modal border"
},
"$:/language/Docs/PaletteColours/modal-footer-background": {
"title": "$:/language/Docs/PaletteColours/modal-footer-background",
"text": "Modal footer background"
},
"$:/language/Docs/PaletteColours/modal-footer-border": {
"title": "$:/language/Docs/PaletteColours/modal-footer-border",
"text": "Modal footer border"
},
"$:/language/Docs/PaletteColours/modal-header-border": {
"title": "$:/language/Docs/PaletteColours/modal-header-border",
"text": "Modal header border"
},
"$:/language/Docs/PaletteColours/muted-foreground": {
"title": "$:/language/Docs/PaletteColours/muted-foreground",
"text": "General muted foreground"
},
"$:/language/Docs/PaletteColours/notification-background": {
"title": "$:/language/Docs/PaletteColours/notification-background",
"text": "Notification background"
},
"$:/language/Docs/PaletteColours/notification-border": {
"title": "$:/language/Docs/PaletteColours/notification-border",
"text": "Notification border"
},
"$:/language/Docs/PaletteColours/page-background": {
"title": "$:/language/Docs/PaletteColours/page-background",
"text": "Page background"
},
"$:/language/Docs/PaletteColours/pre-background": {
"title": "$:/language/Docs/PaletteColours/pre-background",
"text": "Preformatted code background"
},
"$:/language/Docs/PaletteColours/pre-border": {
"title": "$:/language/Docs/PaletteColours/pre-border",
"text": "Preformatted code border"
},
"$:/language/Docs/PaletteColours/primary": {
"title": "$:/language/Docs/PaletteColours/primary",
"text": "General primary"
},
"$:/language/Docs/PaletteColours/sidebar-button-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-button-foreground",
"text": "Sidebar button foreground"
},
"$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover",
"text": "Sidebar controls foreground hover"
},
"$:/language/Docs/PaletteColours/sidebar-controls-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground",
"text": "Sidebar controls foreground"
},
"$:/language/Docs/PaletteColours/sidebar-foreground-shadow": {
"title": "$:/language/Docs/PaletteColours/sidebar-foreground-shadow",
"text": "Sidebar foreground shadow"
},
"$:/language/Docs/PaletteColours/sidebar-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-foreground",
"text": "Sidebar foreground"
},
"$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover",
"text": "Sidebar muted foreground hover"
},
"$:/language/Docs/PaletteColours/sidebar-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground",
"text": "Sidebar muted foreground"
},
"$:/language/Docs/PaletteColours/sidebar-tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-background-selected",
"text": "Sidebar tab background for selected tabs"
},
"$:/language/Docs/PaletteColours/sidebar-tab-background": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-background",
"text": "Sidebar tab background"
},
"$:/language/Docs/PaletteColours/sidebar-tab-border-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-border-selected",
"text": "Sidebar tab border for selected tabs"
},
"$:/language/Docs/PaletteColours/sidebar-tab-border": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-border",
"text": "Sidebar tab border"
},
"$:/language/Docs/PaletteColours/sidebar-tab-divider": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-divider",
"text": "Sidebar tab divider"
},
"$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected",
"text": "Sidebar tab foreground for selected tabs"
},
"$:/language/Docs/PaletteColours/sidebar-tab-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground",
"text": "Sidebar tab foreground"
},
"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover",
"text": "Sidebar tiddler link foreground hover"
},
"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground",
"text": "Sidebar tiddler link foreground"
},
"$:/language/Docs/PaletteColours/static-alert-foreground": {
"title": "$:/language/Docs/PaletteColours/static-alert-foreground",
"text": "Static alert foreground"
},
"$:/language/Docs/PaletteColours/tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/tab-background-selected",
"text": "Tab background for selected tabs"
},
"$:/language/Docs/PaletteColours/tab-background": {
"title": "$:/language/Docs/PaletteColours/tab-background",
"text": "Tab background"
},
"$:/language/Docs/PaletteColours/tab-border-selected": {
"title": "$:/language/Docs/PaletteColours/tab-border-selected",
"text": "Tab border for selected tabs"
},
"$:/language/Docs/PaletteColours/tab-border": {
"title": "$:/language/Docs/PaletteColours/tab-border",
"text": "Tab border"
},
"$:/language/Docs/PaletteColours/tab-divider": {
"title": "$:/language/Docs/PaletteColours/tab-divider",
"text": "Tab divider"
},
"$:/language/Docs/PaletteColours/tab-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/tab-foreground-selected",
"text": "Tab foreground for selected tabs"
},
"$:/language/Docs/PaletteColours/tab-foreground": {
"title": "$:/language/Docs/PaletteColours/tab-foreground",
"text": "Tab foreground"
},
"$:/language/Docs/PaletteColours/table-border": {
"title": "$:/language/Docs/PaletteColours/table-border",
"text": "Table border"
},
"$:/language/Docs/PaletteColours/table-footer-background": {
"title": "$:/language/Docs/PaletteColours/table-footer-background",
"text": "Table footer background"
},
"$:/language/Docs/PaletteColours/table-header-background": {
"title": "$:/language/Docs/PaletteColours/table-header-background",
"text": "Table header background"
},
"$:/language/Docs/PaletteColours/tag-background": {
"title": "$:/language/Docs/PaletteColours/tag-background",
"text": "Tag background"
},
"$:/language/Docs/PaletteColours/tag-foreground": {
"title": "$:/language/Docs/PaletteColours/tag-foreground",
"text": "Tag foreground"
},
"$:/language/Docs/PaletteColours/tiddler-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-background",
"text": "Tiddler background"
},
"$:/language/Docs/PaletteColours/tiddler-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-border",
"text": "Tiddler border"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover",
"text": "Tiddler controls foreground hover"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected",
"text": "Tiddler controls foreground for selected controls"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground",
"text": "Tiddler controls foreground"
},
"$:/language/Docs/PaletteColours/tiddler-editor-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-background",
"text": "Tiddler editor background"
},
"$:/language/Docs/PaletteColours/tiddler-editor-border-image": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-border-image",
"text": "Tiddler editor border image"
},
"$:/language/Docs/PaletteColours/tiddler-editor-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-border",
"text": "Tiddler editor border"
},
"$:/language/Docs/PaletteColours/tiddler-editor-fields-even": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-even",
"text": "Tiddler editor background for even fields"
},
"$:/language/Docs/PaletteColours/tiddler-editor-fields-odd": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd",
"text": "Tiddler editor background for odd fields"
},
"$:/language/Docs/PaletteColours/tiddler-info-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-background",
"text": "Tiddler info panel background"
},
"$:/language/Docs/PaletteColours/tiddler-info-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-border",
"text": "Tiddler info panel border"
},
"$:/language/Docs/PaletteColours/tiddler-info-tab-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-tab-background",
"text": "Tiddler info panel tab background"
},
"$:/language/Docs/PaletteColours/tiddler-link-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-link-background",
"text": "Tiddler link background"
},
"$:/language/Docs/PaletteColours/tiddler-link-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-link-foreground",
"text": "Tiddler link foreground"
},
"$:/language/Docs/PaletteColours/tiddler-subtitle-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground",
"text": "Tiddler subtitle foreground"
},
"$:/language/Docs/PaletteColours/tiddler-title-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-title-foreground",
"text": "Tiddler title foreground"
},
"$:/language/Docs/PaletteColours/toolbar-new-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-new-button",
"text": "Toolbar 'new tiddler' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-options-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-options-button",
"text": "Toolbar 'options' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-save-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-save-button",
"text": "Toolbar 'save' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-info-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-info-button",
"text": "Toolbar 'info' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-edit-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-edit-button",
"text": "Toolbar 'edit' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-close-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-close-button",
"text": "Toolbar 'close' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-delete-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-delete-button",
"text": "Toolbar 'delete' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-cancel-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-cancel-button",
"text": "Toolbar 'cancel' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-done-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-done-button",
"text": "Toolbar 'done' button foreground"
},
"$:/language/Docs/PaletteColours/untagged-background": {
"title": "$:/language/Docs/PaletteColours/untagged-background",
"text": "Untagged pill background"
},
"$:/language/Docs/PaletteColours/very-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/very-muted-foreground",
"text": "Very muted foreground"
},
"$:/language/EditTemplate/Body/External/Hint": {
"title": "$:/language/EditTemplate/Body/External/Hint",
"text": "This is an external tiddler stored outside of the main TiddlyWiki file. You can edit the tags and fields but cannot directly edit the content itself"
},
"$:/language/EditTemplate/Body/Hint": {
"title": "$:/language/EditTemplate/Body/Hint",
"text": "Use [[wiki text|http://tiddlywiki.com/static/WikiText.html]] to add formatting, images, and dynamic features"
},
"$:/language/EditTemplate/Body/Placeholder": {
"title": "$:/language/EditTemplate/Body/Placeholder",
"text": "Type the text for this tiddler"
},
"$:/language/EditTemplate/Body/Preview/Button/Hide": {
"title": "$:/language/EditTemplate/Body/Preview/Button/Hide",
"text": "hide preview"
},
"$:/language/EditTemplate/Body/Preview/Button/Show": {
"title": "$:/language/EditTemplate/Body/Preview/Button/Show",
"text": "show preview"
},
"$:/language/EditTemplate/Field/Remove/Caption": {
"title": "$:/language/EditTemplate/Field/Remove/Caption",
"text": "remove field"
},
"$:/language/EditTemplate/Field/Remove/Hint": {
"title": "$:/language/EditTemplate/Field/Remove/Hint",
"text": "Remove field"
},
"$:/language/EditTemplate/Fields/Add/Button": {
"title": "$:/language/EditTemplate/Fields/Add/Button",
"text": "add"
},
"$:/language/EditTemplate/Fields/Add/Name/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Name/Placeholder",
"text": "field name"
},
"$:/language/EditTemplate/Fields/Add/Prompt": {
"title": "$:/language/EditTemplate/Fields/Add/Prompt",
"text": "Add a new field:"
},
"$:/language/EditTemplate/Fields/Add/Value/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Value/Placeholder",
"text": "field value"
},
"$:/language/EditTemplate/Shadow/Warning": {
"title": "$:/language/EditTemplate/Shadow/Warning",
"text": "This is a shadow tiddler. Any changes will override the default version"
},
"$:/language/EditTemplate/Shadow/OverriddenWarning": {
"title": "$:/language/EditTemplate/Shadow/OverriddenWarning",
"text": "This is a modified shadow tiddler. You can revert to the default version by deleting this tiddler"
},
"$:/language/EditTemplate/Tags/Add/Button": {
"title": "$:/language/EditTemplate/Tags/Add/Button",
"text": "add"
},
"$:/language/EditTemplate/Tags/Add/Placeholder": {
"title": "$:/language/EditTemplate/Tags/Add/Placeholder",
"text": "tag name"
},
"$:/language/EditTemplate/Tags/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Tags/Dropdown/Caption",
"text": "tag list"
},
"$:/language/EditTemplate/Tags/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Tags/Dropdown/Hint",
"text": "Show tag list"
},
"$:/language/EditTemplate/Type/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Type/Dropdown/Caption",
"text": "content type list"
},
"$:/language/EditTemplate/Type/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Type/Dropdown/Hint",
"text": "Show content type list"
},
"$:/language/EditTemplate/Type/Delete/Caption": {
"title": "$:/language/EditTemplate/Type/Delete/Caption",
"text": "delete content type"
},
"$:/language/EditTemplate/Type/Delete/Hint": {
"title": "$:/language/EditTemplate/Type/Delete/Hint",
"text": "Delete content type"
},
"$:/language/EditTemplate/Type/Placeholder": {
"title": "$:/language/EditTemplate/Type/Placeholder",
"text": "content type"
},
"$:/language/EditTemplate/Type/Prompt": {
"title": "$:/language/EditTemplate/Type/Prompt",
"text": "Type:"
},
"$:/language/Exporters/StaticRiver": {
"title": "$:/language/Exporters/StaticRiver",
"text": "River of tiddlers as static HTML file"
},
"$:/language/Exporters/JsonFile": {
"title": "$:/language/Exporters/JsonFile",
"text": "JSON tiddlers file"
},
"$:/language/Exporters/CsvFile": {
"title": "$:/language/Exporters/CsvFile",
"text": "CSV tiddlers file"
},
"$:/language/Exporters/TidFile": {
"title": "$:/language/Exporters/TidFile",
"text": "Single tiddler \".tid\" file"
},
"$:/language/Docs/Fields/_canonical_uri": {
"title": "$:/language/Docs/Fields/_canonical_uri",
"text": "The full URI of an external image tiddler"
},
"$:/language/Docs/Fields/bag": {
"title": "$:/language/Docs/Fields/bag",
"text": "The name of the bag from which a tiddler came"
},
"$:/language/Docs/Fields/caption": {
"title": "$:/language/Docs/Fields/caption",
"text": "The text to be displayed on a tab or button"
},
"$:/language/Docs/Fields/color": {
"title": "$:/language/Docs/Fields/color",
"text": "The CSS color value associated with a tiddler"
},
"$:/language/Docs/Fields/component": {
"title": "$:/language/Docs/Fields/component",
"text": "The name of the component responsible for an [[alert tiddler|AlertMechanism]]"
},
"$:/language/Docs/Fields/current-tiddler": {
"title": "$:/language/Docs/Fields/current-tiddler",
"text": "Used to cache the top tiddler in a [[history list|HistoryMechanism]]"
},
"$:/language/Docs/Fields/created": {
"title": "$:/language/Docs/Fields/created",
"text": "The date a tiddler was created"
},
"$:/language/Docs/Fields/creator": {
"title": "$:/language/Docs/Fields/creator",
"text": "The name of the person who created a tiddler"
},
"$:/language/Docs/Fields/dependents": {
"title": "$:/language/Docs/Fields/dependents",
"text": "For a plugin, lists the dependent plugin titles"
},
"$:/language/Docs/Fields/description": {
"title": "$:/language/Docs/Fields/description",
"text": "The descriptive text for a plugin, or a modal dialogue"
},
"$:/language/Docs/Fields/draft.of": {
"title": "$:/language/Docs/Fields/draft.of",
"text": "For draft tiddlers, contains the title of the tiddler of which this is a draft"
},
"$:/language/Docs/Fields/draft.title": {
"title": "$:/language/Docs/Fields/draft.title",
"text": "For draft tiddlers, contains the proposed new title of the tiddler"
},
"$:/language/Docs/Fields/footer": {
"title": "$:/language/Docs/Fields/footer",
"text": "The footer text for a wizard"
},
"$:/language/Docs/Fields/hack-to-give-us-something-to-compare-against": {
"title": "$:/language/Docs/Fields/hack-to-give-us-something-to-compare-against",
"text": "A temporary storage field used in [[$:/core/templates/static.content]]"
},
"$:/language/Docs/Fields/icon": {
"title": "$:/language/Docs/Fields/icon",
"text": "The title of the tiddler containing the icon associated with a tiddler"
},
"$:/language/Docs/Fields/library": {
"title": "$:/language/Docs/Fields/library",
"text": "If set to \"yes\" indicates that a tiddler should be saved as a JavaScript library"
},
"$:/language/Docs/Fields/list": {
"title": "$:/language/Docs/Fields/list",
"text": "An ordered list of tiddler titles associated with a tiddler"
},
"$:/language/Docs/Fields/list-before": {
"title": "$:/language/Docs/Fields/list-before",
"text": "If set, the title of a tiddler before which this tiddler should be added to the ordered list of tiddler titles, or at the start of the list if this field is present but empty"
},
"$:/language/Docs/Fields/list-after": {
"title": "$:/language/Docs/Fields/list-after",
"text": "If set, the title of the tiddler after which this tiddler should be added to the ordered list of tiddler titles"
},
"$:/language/Docs/Fields/modified": {
"title": "$:/language/Docs/Fields/modified",
"text": "The date and time at which a tiddler was last modified"
},
"$:/language/Docs/Fields/modifier": {
"title": "$:/language/Docs/Fields/modifier",
"text": "The tiddler title associated with the person who last modified a tiddler"
},
"$:/language/Docs/Fields/name": {
"title": "$:/language/Docs/Fields/name",
"text": "The human readable name associated with a plugin tiddler"
},
"$:/language/Docs/Fields/plugin-priority": {
"title": "$:/language/Docs/Fields/plugin-priority",
"text": "A numerical value indicating the priority of a plugin tiddler"
},
"$:/language/Docs/Fields/plugin-type": {
"title": "$:/language/Docs/Fields/plugin-type",
"text": "The type of plugin in a plugin tiddler"
},
"$:/language/Docs/Fields/revision": {
"title": "$:/language/Docs/Fields/revision",
"text": "The revision of the tiddler held at the server"
},
"$:/language/Docs/Fields/released": {
"title": "$:/language/Docs/Fields/released",
"text": "Date of a TiddlyWiki release"
},
"$:/language/Docs/Fields/source": {
"title": "$:/language/Docs/Fields/source",
"text": "The source URL associated with a tiddler"
},
"$:/language/Docs/Fields/subtitle": {
"title": "$:/language/Docs/Fields/subtitle",
"text": "The subtitle text for a wizard"
},
"$:/language/Docs/Fields/tags": {
"title": "$:/language/Docs/Fields/tags",
"text": "A list of tags associated with a tiddler"
},
"$:/language/Docs/Fields/text": {
"title": "$:/language/Docs/Fields/text",
"text": "The body text of a tiddler"
},
"$:/language/Docs/Fields/title": {
"title": "$:/language/Docs/Fields/title",
"text": "The unique name of a tiddler"
},
"$:/language/Docs/Fields/type": {
"title": "$:/language/Docs/Fields/type",
"text": "The content type of a tiddler"
},
"$:/language/Docs/Fields/version": {
"title": "$:/language/Docs/Fields/version",
"text": "Version information for a plugin"
},
"$:/language/Filters/AllTiddlers": {
"title": "$:/language/Filters/AllTiddlers",
"text": "All tiddlers except system tiddlers"
},
"$:/language/Filters/RecentSystemTiddlers": {
"title": "$:/language/Filters/RecentSystemTiddlers",
"text": "Recently modified tiddlers, including system tiddlers"
},
"$:/language/Filters/RecentTiddlers": {
"title": "$:/language/Filters/RecentTiddlers",
"text": "Recently modified tiddlers"
},
"$:/language/Filters/AllTags": {
"title": "$:/language/Filters/AllTags",
"text": "All tags except system tags"
},
"$:/language/Filters/Missing": {
"title": "$:/language/Filters/Missing",
"text": "Missing tiddlers"
},
"$:/language/Filters/Drafts": {
"title": "$:/language/Filters/Drafts",
"text": "Draft tiddlers"
},
"$:/language/Filters/Orphans": {
"title": "$:/language/Filters/Orphans",
"text": "Orphan tiddlers"
},
"$:/language/Filters/SystemTiddlers": {
"title": "$:/language/Filters/SystemTiddlers",
"text": "System tiddlers"
},
"$:/language/Filters/ShadowTiddlers": {
"title": "$:/language/Filters/ShadowTiddlers",
"text": "Shadow tiddlers"
},
"$:/language/Filters/OverriddenShadowTiddlers": {
"title": "$:/language/Filters/OverriddenShadowTiddlers",
"text": "Overridden shadow tiddlers"
},
"$:/language/Filters/SystemTags": {
"title": "$:/language/Filters/SystemTags",
"text": "System tags"
},
"GettingStarted": {
"title": "GettingStarted",
"text": "\\define lingo-base() $:/language/ControlPanel/Basics/\nWelcome to ~TiddlyWiki and the ~TiddlyWiki community\n\nBefore you start storing important information in ~TiddlyWiki it is important to make sure that you can reliably save changes. See http://tiddlywiki.com/#GettingStarted for details\n\n!! Set up this ~TiddlyWiki\n\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit-text tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n\nSee the [[control panel|$:/ControlPanel]] for more options.\n"
},
"$:/language/Help/build": {
"title": "$:/language/Help/build",
"description": "Automatically run configured commands",
"text": "Build the specified build targets for the current wiki. If no build targets are specified then all available targets will be built.\n\n```\n--build <target> [<target> ...]\n```\n\nBuild targets are defined in the `tiddlywiki.info` file of a wiki folder.\n\n"
},
"$:/language/Help/clearpassword": {
"title": "$:/language/Help/clearpassword",
"description": "Clear a password for subsequent crypto operations",
"text": "Clear the password for subsequent crypto operations\n\n```\n--clearpassword\n```\n"
},
"$:/language/Help/default": {
"title": "$:/language/Help/default",
"text": "\\define commandTitle()\n$:/language/Help/$(command)$\n\\end\n```\nusage: tiddlywiki [<wikifolder>] [--<command> [<args>...]...]\n```\n\nAvailable commands:\n\n<ul>\n<$list filter=\"[commands[]sort[title]]\" variable=\"command\">\n<li><$link to=<<commandTitle>>><$macrocall $name=\"command\" $type=\"text/plain\" $output=\"text/plain\"/></$link>: <$transclude tiddler=<<commandTitle>> field=\"description\"/></li>\n</$list>\n</ul>\n\nTo get detailed help on a command:\n\n```\ntiddlywiki --help <command>\n```\n"
},
"$:/language/Help/editions": {
"title": "$:/language/Help/editions",
"description": "Lists the available editions of TiddlyWiki",
"text": "Lists the names and descriptions of the available editions. You can create a new wiki of a specified edition with the `--init` command.\n\n```\n--editions\n```\n"
},
"$:/language/Help/help": {
"title": "$:/language/Help/help",
"description": "Display help for TiddlyWiki commands",
"text": "Displays help text for a command:\n\n```\n--help [<command>]\n```\n\nIf the command name is omitted then a list of available commands is displayed.\n"
},
"$:/language/Help/init": {
"title": "$:/language/Help/init",
"description": "Initialise a new wiki folder",
"text": "Initialise an empty [[WikiFolder|WikiFolders]] with a copy of the specified edition.\n\n```\n--init <edition> [<edition> ...]\n```\n\nFor example:\n\n```\ntiddlywiki ./MyWikiFolder --init empty\n```\n\nNote:\n\n* The wiki folder directory will be created if necessary\n* The \"edition\" defaults to ''empty''\n* The init command will fail if the wiki folder is not empty\n* The init command removes any `includeWikis` definitions in the edition's `tiddlywiki.info` file\n* When multiple editions are specified, editions initialised later will overwrite any files shared with earlier editions (so, the final `tiddlywiki.info` file will be copied from the last edition)\n* `--editions` returns a list of available editions\n"
},
"$:/language/Help/load": {
"title": "$:/language/Help/load",
"description": "Load tiddlers from a file",
"text": "Load tiddlers from 2.x.x TiddlyWiki files (`.html`), `.tiddler`, `.tid`, `.json` or other files \n\n```\n--load <filepath>\n```\n\nTo load tiddlers from an encrypted TiddlyWiki file you should first specify the password with the PasswordCommand. For example:\n\n```\ntiddlywiki ./MyWiki --password pa55w0rd --load my_encrypted_wiki.html\n```\n\nNote that TiddlyWiki will not load an older version of an already loaded plugin.\n"
},
"$:/language/Help/makelibrary": {
"title": "$:/language/Help/makelibrary",
"description": "Construct library plugin required by upgrade process",
"text": "Constructs the `$:/UpgradeLibrary` tiddler for the upgrade process.\n\nThe upgrade library is formatted as an ordinary plugin tiddler with the plugin type `library`. It contains a copy of each of the plugins, themes and language packs available within the TiddlyWiki5 repository.\n\nThis command is intended for internal use; it is only relevant to users constructing a custom upgrade procedure.\n\n```\n--makelibrary <title>\n```\n\nThe title argument defaults to `$:/UpgradeLibrary`.\n"
},
"$:/language/Help/notfound": {
"title": "$:/language/Help/notfound",
"text": "No such help item"
},
"$:/language/Help/output": {
"title": "$:/language/Help/output",
"description": "Set the base output directory for subsequent commands",
"text": "Sets the base output directory for subsequent commands. The default output directory is the `output` subdirectory of the edition directory.\n\n```\n--output <pathname>\n```\n\nIf the specified pathname is relative then it is resolved relative to the current working directory. For example `--output .` sets the output directory to the current working directory.\n\n"
},
"$:/language/Help/password": {
"title": "$:/language/Help/password",
"description": "Set a password for subsequent crypto operations",
"text": "Set a password for subsequent crypto operations\n\n```\n--password <password>\n```\n\n"
},
"$:/language/Help/rendertiddler": {
"title": "$:/language/Help/rendertiddler",
"description": "Render an individual tiddler as a specified ContentType",
"text": "Render an individual tiddler as a specified ContentType, defaults to `text/html` and save it to the specified filename:\n\n```\n--rendertiddler <title> <filename> [<type>]\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n"
},
"$:/language/Help/rendertiddlers": {
"title": "$:/language/Help/rendertiddlers",
"description": "Render tiddlers matching a filter to a specified ContentType",
"text": "Render a set of tiddlers matching a filter to separate files of a specified ContentType (defaults to `text/html`) and extension (defaults to `.html`).\n\n```\n--rendertiddlers <filter> <template> <pathname> [<type>] [<extension>]\n```\n\nFor example:\n\n```\n--rendertiddlers [!is[system]] $:/core/templates/static.tiddler.html ./static text/plain\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny files in the target directory are deleted. The target directory is recursively created if it is missing.\n"
},
"$:/language/Help/savetiddler": {
"title": "$:/language/Help/savetiddler",
"description": "Saves a raw tiddler to a file",
"text": "Saves an individual tiddler in its raw text or binary format to the specified filename. \n\n```\n--savetiddler <title> <filename>\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n"
},
"$:/language/Help/savetiddlers": {
"title": "$:/language/Help/savetiddlers",
"description": "Saves a group of raw tiddlers to a directory",
"text": "Saves a group of tiddlers in their raw text or binary format to the specified directory. \n\n```\n--savetiddlers <filter> <pathname>\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the pathname are automatically created.\n"
},
"$:/language/Help/server": {
"title": "$:/language/Help/server",
"description": "Provides an HTTP server interface to TiddlyWiki",
"text": "The server built in to TiddlyWiki5 is very simple. Although compatible with TiddlyWeb it doesn't support many of the features needed for robust Internet-facing usage.\n\nAt the root, it serves a rendering of a specified tiddler. Away from the root, it serves individual tiddlers encoded in JSON, and supports the basic HTTP operations for `GET`, `PUT` and `DELETE`.\n\n```\n--server <port> <roottiddler> <rendertype> <servetype> <username> <password> <host> <pathprefix>\n```\n\nThe parameters are:\n\n* ''port'' - port number to serve from (defaults to \"8080\")\n* ''roottiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\") \n* ''rendertype'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''servetype'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''username'' - the default username for signing edits\n* ''password'' - optional password for basic authentication\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''pathprefix'' - optional prefix for paths\n\nIf the password parameter is specified then the browser will prompt the user for the username and password. Note that the password is transmitted in plain text so this implementation isn't suitable for general use.\n\nFor example:\n\n```\n--server 8080 $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n\nThe username and password can be specified as empty strings if you need to set the hostname or pathprefix and don't want to require a password:\n\n```\n--server 8080 $:/core/save/all text/plain text/html \"\" \"\" 192.168.0.245\n```\n\nTo run multiple TiddlyWiki servers at the same time you'll need to put each one on a different port.\n"
},
"$:/language/Help/setfield": {
"title": "$:/language/Help/setfield",
"description": "Prepares external tiddlers for use",
"text": "//Note that this command is experimental and may change or be replaced before being finalised//\n\nSets the specified field of a group of tiddlers to the result of wikifying a template tiddler with the `currentTiddler` variable set to the tiddler.\n\n```\n--setfield <filter> <fieldname> <templatetitle> <rendertype>\n```\n\nThe parameters are:\n\n* ''filter'' - filter identifying the tiddlers to be affected\n* ''fieldname'' - the field to modify (defaults to \"text\")\n* ''templatetitle'' - the tiddler to wikify into the specified field. If blank or missing then the specified field is deleted\n* ''type'' - the text type to render (defaults to \"text/plain\"; \"text/html\" can be used to include HTML tags)\n\n"
},
"$:/language/Help/unpackplugin": {
"title": "$:/language/Help/unpackplugin",
"description": "Unpack the payload tiddlers from a plugin",
"text": "Extract the payload tiddlers from a plugin, creating them as ordinary tiddlers:\n\n```\n--unpackplugin <title>\n```\n"
},
"$:/language/Help/verbose": {
"title": "$:/language/Help/verbose",
"description": "Triggers verbose output mode",
"text": "Triggers verbose output, useful for debugging \n\n```\n--verbose\n```\n"
},
"$:/language/Help/version": {
"title": "$:/language/Help/version",
"description": "Displays the version number of TiddlyWiki",
"text": "Displays the version number of TiddlyWiki.\n\n```\n--version\n```\n"
},
"$:/language/Import/Listing/Cancel/Caption": {
"title": "$:/language/Import/Listing/Cancel/Caption",
"text": "Cancel"
},
"$:/language/Import/Listing/Hint": {
"title": "$:/language/Import/Listing/Hint",
"text": "These tiddlers are ready to import:"
},
"$:/language/Import/Listing/Import/Caption": {
"title": "$:/language/Import/Listing/Import/Caption",
"text": "Import"
},
"$:/language/Import/Listing/Select/Caption": {
"title": "$:/language/Import/Listing/Select/Caption",
"text": "Select"
},
"$:/language/Import/Listing/Status/Caption": {
"title": "$:/language/Import/Listing/Status/Caption",
"text": "Status"
},
"$:/language/Import/Listing/Title/Caption": {
"title": "$:/language/Import/Listing/Title/Caption",
"text": "Title"
},
"$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible": {
"title": "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible",
"text": "Blocked incompatible or obsolete plugin "
},
"$:/language/Import/Upgrader/Plugins/Suppressed/Version": {
"title": "$:/language/Import/Upgrader/Plugins/Suppressed/Version",
"text": "Blocked plugin (due to incoming <<incoming>> being older than existing <<existing>>)"
},
"$:/language/Import/Upgrader/Plugins/Upgraded": {
"title": "$:/language/Import/Upgrader/Plugins/Upgraded",
"text": "Upgraded plugin from <<incoming>> to <<upgraded>>"
},
"$:/language/Import/Upgrader/State/Suppressed": {
"title": "$:/language/Import/Upgrader/State/Suppressed",
"text": "Blocked temporary state tiddler"
},
"$:/language/Import/Upgrader/System/Suppressed": {
"title": "$:/language/Import/Upgrader/System/Suppressed",
"text": "Blocked system tiddler"
},
"$:/language/Import/Upgrader/ThemeTweaks/Created": {
"title": "$:/language/Import/Upgrader/ThemeTweaks/Created",
"text": "Migrated theme tweak from <$text text=<<from>>/>"
},
"$:/language/BinaryWarning/Prompt": {
"title": "$:/language/BinaryWarning/Prompt",
"text": "This tiddler contains binary data"
},
"$:/language/ClassicWarning/Hint": {
"title": "$:/language/ClassicWarning/Hint",
"text": "This tiddler is written in TiddlyWiki Classic wiki text format, which is not fully compatible with TiddlyWiki version 5. See http://tiddlywiki.com/static/Upgrading.html for more details. "
},
"$:/language/ClassicWarning/Upgrade/Caption": {
"title": "$:/language/ClassicWarning/Upgrade/Caption",
"text": "upgrade"
},
"$:/language/CloseAll/Button": {
"title": "$:/language/CloseAll/Button",
"text": "close all"
},
"$:/language/ConfirmCancelTiddler": {
"title": "$:/language/ConfirmCancelTiddler",
"text": "Do you wish to discard changes to the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmDeleteTiddler": {
"title": "$:/language/ConfirmDeleteTiddler",
"text": "Do you wish to delete the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmOverwriteTiddler": {
"title": "$:/language/ConfirmOverwriteTiddler",
"text": "Do you wish to overwrite the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmEditShadowTiddler": {
"title": "$:/language/ConfirmEditShadowTiddler",
"text": "You are about to edit a ShadowTiddler. Any changes will override the default system making future upgrades non-trivial. Are you sure you want to edit \"<$text text=<<title>>/>\"?"
},
"$:/language/DefaultNewTiddlerTitle": {
"title": "$:/language/DefaultNewTiddlerTitle",
"text": "New Tiddler"
},
"$:/language/DropMessage": {
"title": "$:/language/DropMessage",
"text": "Drop here (or click escape to cancel)"
},
"$:/language/Encryption/ConfirmClearPassword": {
"title": "$:/language/Encryption/ConfirmClearPassword",
"text": "Do you wish to clear the password? This will remove the encryption applied when saving this wiki"
},
"$:/language/Encryption/PromptSetPassword": {
"title": "$:/language/Encryption/PromptSetPassword",
"text": "Set a new password for this TiddlyWiki"
},
"$:/language/InvalidFieldName": {
"title": "$:/language/InvalidFieldName",
"text": "Illegal characters in field name \"<$text text=<<fieldName>>/>\". Fields can only contain lowercase letters, digits and the characters underscore (`_`), hyphen (`-`) and period (`.`)"
},
"$:/language/MissingTiddler/Hint": {
"title": "$:/language/MissingTiddler/Hint",
"text": "Missing tiddler \"<$text text=<<currentTiddler>>/>\" - click {{$:/core/images/edit-button}} to create"
},
"$:/language/RecentChanges/DateFormat": {
"title": "$:/language/RecentChanges/DateFormat",
"text": "DDth MMM YYYY"
},
"$:/language/SystemTiddler/Tooltip": {
"title": "$:/language/SystemTiddler/Tooltip",
"text": "This is a system tiddler"
},
"$:/language/TagManager/Colour/Heading": {
"title": "$:/language/TagManager/Colour/Heading",
"text": "Colour"
},
"$:/language/TagManager/Icon/Heading": {
"title": "$:/language/TagManager/Icon/Heading",
"text": "Icon"
},
"$:/language/TagManager/Info/Heading": {
"title": "$:/language/TagManager/Info/Heading",
"text": "Info"
},
"$:/language/TagManager/Tag/Heading": {
"title": "$:/language/TagManager/Tag/Heading",
"text": "Tag"
},
"$:/language/UnsavedChangesWarning": {
"title": "$:/language/UnsavedChangesWarning",
"text": "You have unsaved changes in TiddlyWiki"
},
"$:/language/Modals/Download": {
"title": "$:/language/Modals/Download",
"type": "text/vnd.tiddlywiki",
"subtitle": "Download changes",
"footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
"help": "http://tiddlywiki.com/static/DownloadingChanges.html",
"text": "Your browser only supports manual saving.\n\nTo save your modified wiki, right click on the download link below and select \"Download file\" or \"Save file\", and then choose the folder and filename.\n\n//You can marginally speed things up by clicking the link with the control key (Windows) or the options/alt key (Mac OS X). You will not be prompted for the folder or filename, but your browser is likely to give it an unrecognisable name -- you may need to rename the file to include an `.html` extension before you can do anything useful with it.//\n\nOn smartphones that do not allow files to be downloaded you can instead bookmark the link, and then sync your bookmarks to a desktop computer from where the wiki can be saved normally.\n"
},
"$:/language/Modals/SaveInstructions": {
"title": "$:/language/Modals/SaveInstructions",
"type": "text/vnd.tiddlywiki",
"subtitle": "Save your work",
"footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
"help": "http://tiddlywiki.com/static/SavingChanges.html",
"text": "Your changes to this wiki need to be saved as a ~TiddlyWiki HTML file.\n\n!!! Desktop browsers\n\n# Select ''Save As'' from the ''File'' menu\n# Choose a filename and location\n#* Some browsers also require you to explicitly specify the file saving format as ''Webpage, HTML only'' or similar\n# Close this tab\n\n!!! Smartphone browsers\n\n# Create a bookmark to this page\n#* If you've got iCloud or Google Sync set up then the bookmark will automatically sync to your desktop where you can open it and save it as above\n# Close this tab\n\n//If you open the bookmark again in Mobile Safari you will see this message again. If you want to go ahead and use the file, just click the ''close'' button below//\n"
},
"$:/config/NewJournal/Title": {
"title": "$:/config/NewJournal/Title",
"text": "DDth MMM YYYY"
},
"$:/config/NewJournal/Tags": {
"title": "$:/config/NewJournal/Tags",
"text": "Journal"
},
"$:/language/Notifications/Save/Done": {
"title": "$:/language/Notifications/Save/Done",
"text": "Saved wiki"
},
"$:/language/Notifications/Save/Starting": {
"title": "$:/language/Notifications/Save/Starting",
"text": "Starting to save wiki"
},
"$:/language/Search/DefaultResults/Caption": {
"title": "$:/language/Search/DefaultResults/Caption",
"text": "List"
},
"$:/language/Search/Filter/Caption": {
"title": "$:/language/Search/Filter/Caption",
"text": "Filter"
},
"$:/language/Search/Filter/Hint": {
"title": "$:/language/Search/Filter/Hint",
"text": "Search via a [[filter expression|http://tiddlywiki.com/static/Filters.html]]"
},
"$:/language/Search/Filter/Matches": {
"title": "$:/language/Search/Filter/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/Matches": {
"title": "$:/language/Search/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/Shadows/Caption": {
"title": "$:/language/Search/Shadows/Caption",
"text": "Shadows"
},
"$:/language/Search/Shadows/Hint": {
"title": "$:/language/Search/Shadows/Hint",
"text": "Search for shadow tiddlers"
},
"$:/language/Search/Shadows/Matches": {
"title": "$:/language/Search/Shadows/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/Standard/Caption": {
"title": "$:/language/Search/Standard/Caption",
"text": "Standard"
},
"$:/language/Search/Standard/Hint": {
"title": "$:/language/Search/Standard/Hint",
"text": "Search for standard tiddlers"
},
"$:/language/Search/Standard/Matches": {
"title": "$:/language/Search/Standard/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/System/Caption": {
"title": "$:/language/Search/System/Caption",
"text": "System"
},
"$:/language/Search/System/Hint": {
"title": "$:/language/Search/System/Hint",
"text": "Search for system tiddlers"
},
"$:/language/Search/System/Matches": {
"title": "$:/language/Search/System/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/SideBar/All/Caption": {
"title": "$:/language/SideBar/All/Caption",
"text": "All"
},
"$:/language/SideBar/Contents/Caption": {
"title": "$:/language/SideBar/Contents/Caption",
"text": "Contents"
},
"$:/language/SideBar/Drafts/Caption": {
"title": "$:/language/SideBar/Drafts/Caption",
"text": "Drafts"
},
"$:/language/SideBar/Missing/Caption": {
"title": "$:/language/SideBar/Missing/Caption",
"text": "Missing"
},
"$:/language/SideBar/More/Caption": {
"title": "$:/language/SideBar/More/Caption",
"text": "More"
},
"$:/language/SideBar/Open/Caption": {
"title": "$:/language/SideBar/Open/Caption",
"text": "Open"
},
"$:/language/SideBar/Orphans/Caption": {
"title": "$:/language/SideBar/Orphans/Caption",
"text": "Orphans"
},
"$:/language/SideBar/Recent/Caption": {
"title": "$:/language/SideBar/Recent/Caption",
"text": "Recent"
},
"$:/language/SideBar/Shadows/Caption": {
"title": "$:/language/SideBar/Shadows/Caption",
"text": "Shadows"
},
"$:/language/SideBar/System/Caption": {
"title": "$:/language/SideBar/System/Caption",
"text": "System"
},
"$:/language/SideBar/Tags/Caption": {
"title": "$:/language/SideBar/Tags/Caption",
"text": "Tags"
},
"$:/language/SideBar/Tags/Untagged/Caption": {
"title": "$:/language/SideBar/Tags/Untagged/Caption",
"text": "untagged"
},
"$:/language/SideBar/Tools/Caption": {
"title": "$:/language/SideBar/Tools/Caption",
"text": "Tools"
},
"$:/language/SideBar/Types/Caption": {
"title": "$:/language/SideBar/Types/Caption",
"text": "Types"
},
"$:/SiteSubtitle": {
"title": "$:/SiteSubtitle",
"text": "a non-linear personal web notebook"
},
"$:/SiteTitle": {
"title": "$:/SiteTitle",
"text": "My ~TiddlyWiki"
},
"$:/language/TiddlerInfo/Advanced/Caption": {
"title": "$:/language/TiddlerInfo/Advanced/Caption",
"text": "Advanced"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint",
"text": "none"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Heading": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading",
"text": "Plugin Details"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint",
"text": "This plugin contains the following shadow tiddlers:"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading",
"text": "Shadow Status"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint",
"text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is not a shadow tiddler"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint",
"text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is a shadow tiddler"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source",
"text": "It is defined in the plugin <$link to=<<pluginTiddler>>><$text text=<<pluginTiddler>>/></$link>"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint",
"text": "It is overridden by an ordinary tiddler"
},
"$:/language/TiddlerInfo/Fields/Caption": {
"title": "$:/language/TiddlerInfo/Fields/Caption",
"text": "Fields"
},
"$:/language/TiddlerInfo/List/Caption": {
"title": "$:/language/TiddlerInfo/List/Caption",
"text": "List"
},
"$:/language/TiddlerInfo/List/Empty": {
"title": "$:/language/TiddlerInfo/List/Empty",
"text": "This tiddler does not have a list"
},
"$:/language/TiddlerInfo/Listed/Caption": {
"title": "$:/language/TiddlerInfo/Listed/Caption",
"text": "Listed"
},
"$:/language/TiddlerInfo/Listed/Empty": {
"title": "$:/language/TiddlerInfo/Listed/Empty",
"text": "This tiddler is not listed by any others"
},
"$:/language/TiddlerInfo/References/Caption": {
"title": "$:/language/TiddlerInfo/References/Caption",
"text": "References"
},
"$:/language/TiddlerInfo/References/Empty": {
"title": "$:/language/TiddlerInfo/References/Empty",
"text": "No tiddlers link to this one"
},
"$:/language/TiddlerInfo/Tagging/Caption": {
"title": "$:/language/TiddlerInfo/Tagging/Caption",
"text": "Tagging"
},
"$:/language/TiddlerInfo/Tagging/Empty": {
"title": "$:/language/TiddlerInfo/Tagging/Empty",
"text": "No tiddlers are tagged with this one"
},
"$:/language/TiddlerInfo/Tools/Caption": {
"title": "$:/language/TiddlerInfo/Tools/Caption",
"text": "Tools"
},
"$:/language/Docs/Types/application/javascript": {
"title": "$:/language/Docs/Types/application/javascript",
"description": "JavaScript code",
"name": "application/javascript",
"group": "Developer"
},
"$:/language/Docs/Types/application/json": {
"title": "$:/language/Docs/Types/application/json",
"description": "JSON data",
"name": "application/json",
"group": "Developer"
},
"$:/language/Docs/Types/application/x-tiddler-dictionary": {
"title": "$:/language/Docs/Types/application/x-tiddler-dictionary",
"description": "Data dictionary",
"name": "application/x-tiddler-dictionary",
"group": "Developer"
},
"$:/language/Docs/Types/image/gif": {
"title": "$:/language/Docs/Types/image/gif",
"description": "GIF image",
"name": "image/gif",
"group": "Image"
},
"$:/language/Docs/Types/image/jpeg": {
"title": "$:/language/Docs/Types/image/jpeg",
"description": "JPEG image",
"name": "image/jpeg",
"group": "Image"
},
"$:/language/Docs/Types/image/png": {
"title": "$:/language/Docs/Types/image/png",
"description": "PNG image",
"name": "image/png",
"group": "Image"
},
"$:/language/Docs/Types/image/svg+xml": {
"title": "$:/language/Docs/Types/image/svg+xml",
"description": "Structured Vector Graphics image",
"name": "image/svg+xml",
"group": "Image"
},
"$:/language/Docs/Types/image/x-icon": {
"title": "$:/language/Docs/Types/image/x-icon",
"description": "ICO format icon file",
"name": "image/x-icon",
"group": "Image"
},
"$:/language/Docs/Types/text/css": {
"title": "$:/language/Docs/Types/text/css",
"description": "Static stylesheet",
"name": "text/css",
"group": "Developer"
},
"$:/language/Docs/Types/text/html": {
"title": "$:/language/Docs/Types/text/html",
"description": "HTML markup",
"name": "text/html",
"group": "Text"
},
"$:/language/Docs/Types/text/plain": {
"title": "$:/language/Docs/Types/text/plain",
"description": "Plain text",
"name": "text/plain",
"group": "Text"
},
"$:/language/Docs/Types/text/vnd.tiddlywiki": {
"title": "$:/language/Docs/Types/text/vnd.tiddlywiki",
"description": "TiddlyWiki 5",
"name": "text/vnd.tiddlywiki",
"group": "Text"
},
"$:/language/Docs/Types/text/x-tiddlywiki": {
"title": "$:/language/Docs/Types/text/x-tiddlywiki",
"description": "TiddlyWiki Classic",
"name": "text/x-tiddlywiki",
"group": "Text"
},
"$:/languages/en-GB/icon": {
"title": "$:/languages/en-GB/icon",
"type": "image/svg+xml",
"text": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 60 30\" width=\"1200\" height=\"600\">\n<clipPath id=\"t\">\n\t<path d=\"M30,15 h30 v15 z v15 h-30 z h-30 v-15 z v-15 h30 z\"/>\n</clipPath>\n<path d=\"M0,0 v30 h60 v-30 z\" fill=\"#00247d\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" stroke=\"#fff\" stroke-width=\"6\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" clip-path=\"url(#t)\" stroke=\"#cf142b\" stroke-width=\"4\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#fff\" stroke-width=\"10\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#cf142b\" stroke-width=\"6\"/>\n</svg>\n"
},
"$:/languages/en-GB": {
"title": "$:/languages/en-GB",
"name": "en-GB",
"description": "English (British)",
"author": "JeremyRuston",
"core-version": ">=5.0.0\"",
"text": "Stub pseudo-plugin for the default language"
},
"$:/core/modules/commander.js": {
"text": "/*\\\ntitle: $:/core/modules/commander.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Commander class is a command interpreter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a sequence of commands\n\tcommandTokens: an array of command string tokens\n\twiki: reference to the wiki store object\n\tstreams: {output:, error:}, each of which has a write(string) method\n\tcallback: a callback invoked as callback(err) where err is null if there was no error\n*/\nvar Commander = function(commandTokens,callback,wiki,streams) {\n\tvar path = require(\"path\");\n\tthis.commandTokens = commandTokens;\n\tthis.nextToken = 0;\n\tthis.callback = callback;\n\tthis.wiki = wiki;\n\tthis.streams = streams;\n\tthis.outputPath = path.resolve($tw.boot.wikiPath,$tw.config.wikiOutputSubDir);\n};\n\n/*\nAdd a string of tokens to the command queue\n*/\nCommander.prototype.addCommandTokens = function(commandTokens) {\n\tvar params = commandTokens.slice(0);\n\tparams.unshift(0);\n\tparams.unshift(this.nextToken);\n\tArray.prototype.splice.apply(this.commandTokens,params);\n};\n\n/*\nExecute the sequence of commands and invoke a callback on completion\n*/\nCommander.prototype.execute = function() {\n\tthis.executeNextCommand();\n};\n\n/*\nExecute the next command in the sequence\n*/\nCommander.prototype.executeNextCommand = function() {\n\tvar self = this;\n\t// Invoke the callback if there are no more commands\n\tif(this.nextToken >= this.commandTokens.length) {\n\t\tthis.callback(null);\n\t} else {\n\t\t// Get and check the command token\n\t\tvar commandName = this.commandTokens[this.nextToken++];\n\t\tif(commandName.substr(0,2) !== \"--\") {\n\t\t\tthis.callback(\"Missing command: \" + commandName);\n\t\t} else {\n\t\t\tcommandName = commandName.substr(2); // Trim off the --\n\t\t\t// Accumulate the parameters to the command\n\t\t\tvar params = [];\n\t\t\twhile(this.nextToken < this.commandTokens.length && \n\t\t\t\tthis.commandTokens[this.nextToken].substr(0,2) !== \"--\") {\n\t\t\t\tparams.push(this.commandTokens[this.nextToken++]);\n\t\t\t}\n\t\t\t// Get the command info\n\t\t\tvar command = $tw.commands[commandName],\n\t\t\t\tc,err;\n\t\t\tif(!command) {\n\t\t\t\tthis.callback(\"Unknown command: \" + commandName);\n\t\t\t} else {\n\t\t\t\tif(this.verbose) {\n\t\t\t\t\tthis.streams.output.write(\"Executing command: \" + commandName + \" \" + params.join(\" \") + \"\\n\");\n\t\t\t\t}\n\t\t\t\tif(command.info.synchronous) {\n\t\t\t\t\t// Synchronous command\n\t\t\t\t\tc = new command.Command(params,this);\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.executeNextCommand();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Asynchronous command\n\t\t\t\t\tc = new command.Command(params,this,function(err) {\n\t\t\t\t\t\tif(err) {\n\t\t\t\t\t\t\tself.callback(err);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.executeNextCommand();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nCommander.initCommands = function(moduleType) {\n\tmoduleType = moduleType || \"command\";\n\t$tw.commands = {};\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tvar c = $tw.commands[module.info.name] = {};\n\t\t// Add the methods defined by the module\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\tc[f] = module[f];\n\t\t\t}\n\t\t}\n\t});\n};\n\nexports.Commander = Commander;\n\n})();\n",
"title": "$:/core/modules/commander.js",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/commands/build.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/build.js\ntype: application/javascript\nmodule-type: command\n\nCommand to build a build target\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"build\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\t// Get the build targets defined in the wiki\n\tvar buildTargets = $tw.boot.wikiInfo.build;\n\tif(!buildTargets) {\n\t\treturn \"No build targets defined\";\n\t}\n\t// Loop through each of the specified targets\n\tvar targets;\n\tif(this.params.length > 0) {\n\t\ttargets = this.params;\n\t} else {\n\t\ttargets = Object.keys(buildTargets);\n\t}\n\tfor(var targetIndex=0; targetIndex<targets.length; targetIndex++) {\n\t\tvar target = targets[targetIndex],\n\t\t\tcommands = buildTargets[target];\n\t\tif(!commands) {\n\t\t\treturn \"Build target '\" + target + \"' not found\";\n\t\t}\n\t\t// Add the commands to the queue\n\t\tthis.commander.addCommandTokens(commands);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/build.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/clearpassword.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/clearpassword.js\ntype: application/javascript\nmodule-type: command\n\nClear password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"clearpassword\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\t$tw.crypto.setPassword(null);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/clearpassword.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/editions.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/editions.js\ntype: application/javascript\nmodule-type: command\n\nCommand to list the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"editions\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tself = this;\n\t// Enumerate the edition paths\n\tvar editionPaths = $tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar),\n\t\teditions = {};\n\tfor(var editionIndex=0; editionIndex<editionPaths.length; editionIndex++) {\n\t\tvar editionPath = editionPaths[editionIndex];\n\t\t// Enumerate the folders\n\t\tvar entries = fs.readdirSync(editionPath);\n\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\tvar entry = entries[entryIndex];\n\t\t\t// Check if directories have a valid tiddlywiki.info\n\t\t\tif(!editions[entry] && $tw.utils.isDirectory(path.resolve(editionPath,entry))) {\n\t\t\t\tvar info;\n\t\t\t\ttry {\n\t\t\t\t\tinfo = JSON.parse(fs.readFileSync(path.resolve(editionPath,entry,\"tiddlywiki.info\"),\"utf8\"));\n\t\t\t\t} catch(ex) {\n\t\t\t\t}\n\t\t\t\tif(info) {\n\t\t\t\t\teditions[entry] = info.description || \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Output the list\n\tthis.commander.streams.output.write(\"Available editions:\\n\\n\");\n\t$tw.utils.each(editions,function(description,name) {\n\t\tself.commander.streams.output.write(\" \" + name + \": \" + description + \"\\n\");\n\t});\n\tthis.commander.streams.output.write(\"\\n\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/editions.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/help.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/help.js\ntype: application/javascript\nmodule-type: command\n\nHelp command\n\n\\*/\n(function(){\n\n/*jshint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"help\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar subhelp = this.params[0] || \"default\",\n\t\thelpBase = \"$:/language/Help/\",\n\t\ttext;\n\tif(!this.commander.wiki.getTiddler(helpBase + subhelp)) {\n\t\tsubhelp = \"notfound\";\n\t}\n\t// Wikify the help as formatted text (ie block elements generate newlines)\n\ttext = this.commander.wiki.renderTiddler(\"text/plain-formatted\",helpBase + subhelp);\n\t// Remove any leading linebreaks\n\ttext = text.replace(/^(\\r?\\n)*/g,\"\");\n\tthis.commander.streams.output.write(text);\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/help.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/init.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/init.js\ntype: application/javascript\nmodule-type: command\n\nCommand to initialise an empty wiki folder\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"init\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\t// Check that we don't already have a valid wiki folder\n\tif($tw.boot.wikiTiddlersPath || ($tw.utils.isDirectory($tw.boot.wikiPath) && !$tw.utils.isDirectoryEmpty($tw.boot.wikiPath))) {\n\t\treturn \"Wiki folder is not empty\";\n\t}\n\t// Loop through each of the specified editions\n\tvar editions = this.params.length > 0 ? this.params : [\"empty\"];\n\tfor(var editionIndex=0; editionIndex<editions.length; editionIndex++) {\n\t\tvar editionName = editions[editionIndex];\n\t\t// Check the edition exists\n\t\tvar editionPath = $tw.findLibraryItem(editionName,$tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar));\n\t\tif(!$tw.utils.isDirectory(editionPath)) {\n\t\t\treturn \"Edition '\" + editionName + \"' not found\";\n\t\t}\n\t\t// Copy the edition content\n\t\tvar err = $tw.utils.copyDirectory(editionPath,$tw.boot.wikiPath);\n\t\tif(!err) {\n\t\t\tthis.commander.streams.output.write(\"Copied edition '\" + editionName + \"' to \" + $tw.boot.wikiPath + \"\\n\");\n\t\t} else {\n\t\t\treturn err;\n\t\t}\n\t}\n\t// Tweak the tiddlywiki.info to remove any included wikis\n\tvar packagePath = $tw.boot.wikiPath + \"/tiddlywiki.info\",\n\t\tpackageJson = JSON.parse(fs.readFileSync(packagePath));\n\tdelete packageJson.includeWikis;\n\tfs.writeFileSync(packagePath,JSON.stringify(packageJson,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/init.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/load.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/load.js\ntype: application/javascript\nmodule-type: command\n\nCommand to load tiddlers from a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"load\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar ext = path.extname(self.params[0]);\n\tfs.readFile(this.params[0],$tw.utils.getTypeEncoding(ext),function(err,data) {\n\t\tif (err) {\n\t\t\tself.callback(err);\n\t\t} else {\n\t\t\tvar fields = {title: self.params[0]},\n\t\t\t\ttype = path.extname(self.params[0]);\n\t\t\tvar tiddlers = self.commander.wiki.deserializeTiddlers(type,data,fields);\n\t\t\tif(!tiddlers) {\n\t\t\t\tself.callback(\"No tiddlers found in file \\\"\" + self.params[0] + \"\\\"\");\n\t\t\t} else {\n\t\t\t\tfor(var t=0; t<tiddlers.length; t++) {\n\t\t\t\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddlers[t]));\n\t\t\t\t}\n\t\t\t\tself.callback(null);\t\n\t\t\t}\n\t\t}\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/load.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/makelibrary.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/makelibrary.js\ntype: application/javascript\nmodule-type: command\n\nCommand to pack all of the plugins in the library into a plugin tiddler of type \"library\"\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"makelibrary\",\n\tsynchronous: true\n};\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar wiki = this.commander.wiki,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tupgradeLibraryTitle = this.params[0] || UPGRADE_LIBRARY_TITLE,\n\t\ttiddlers = {};\n\t// Collect up the library plugins\n\tvar collectPlugins = function(folder) {\n\t\t\tvar pluginFolders = fs.readdirSync(folder);\n\t\t\tfor(var p=0; p<pluginFolders.length; p++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(pluginFolders[p])) {\n\t\t\t\t\tpluginFields = $tw.loadPluginFolder(path.resolve(folder,\"./\" + pluginFolders[p]));\n\t\t\t\t\tif(pluginFields && pluginFields.title) {\n\t\t\t\t\t\ttiddlers[pluginFields.title] = pluginFields;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcollectPublisherPlugins = function(folder) {\n\t\t\tvar publisherFolders = fs.readdirSync(folder);\n\t\t\tfor(var t=0; t<publisherFolders.length; t++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(publisherFolders[t])) {\n\t\t\t\t\tcollectPlugins(path.resolve(folder,\"./\" + publisherFolders[t]));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\tcollectPublisherPlugins(path.resolve($tw.boot.corePath,$tw.config.pluginsPath));\n\tcollectPublisherPlugins(path.resolve($tw.boot.corePath,$tw.config.themesPath));\n\tcollectPlugins(path.resolve($tw.boot.corePath,$tw.config.languagesPath));\n\t// Save the upgrade library tiddler\n\tvar pluginFields = {\n\t\ttitle: upgradeLibraryTitle,\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"library\",\n\t\t\"text\": JSON.stringify({tiddlers: tiddlers},null,$tw.config.preferences.jsonSpaces)\n\t};\n\twiki.addTiddler(new $tw.Tiddler(pluginFields));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/makelibrary.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/output.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/output.js\ntype: application/javascript\nmodule-type: command\n\nCommand to set the default output location (defaults to current working directory)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"output\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing output path\";\n\t}\n\tthis.commander.outputPath = path.resolve(process.cwd(),this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/output.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/password.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/password.js\ntype: application/javascript\nmodule-type: command\n\nSave password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"password\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing password\";\n\t}\n\t$tw.crypto.setPassword(this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/password.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/rendertiddler.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/rendertiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render a tiddler and save it to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"rendertiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttype = this.params[2] || \"text/html\";\n\t$tw.utils.createFileDirectories(filename);\n\tfs.writeFile(filename,this.commander.wiki.renderTiddler(type,title),\"utf8\",function(err) {\n\t\tself.callback(err);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/rendertiddler.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/rendertiddlers.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/rendertiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"rendertiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttemplate = this.params[1],\n\t\tpathname = path.resolve(this.commander.outputPath,this.params[2]),\n\t\ttype = this.params[3] || \"text/html\",\n\t\textension = this.params[4] || \".html\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.deleteDirectory(pathname);\n\t$tw.utils.createDirectory(pathname);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template),\n\t\t\twidgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}});\n\t\tvar container = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent;\n\t\tfs.writeFileSync(path.resolve(pathname,encodeURIComponent(title) + extension),text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/rendertiddlers.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savetiddler.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/savetiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the content of a tiddler to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savetiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttiddler = this.commander.wiki.getTiddler(title),\n\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"};\n\t$tw.utils.createFileDirectories(filename);\n\tfs.writeFile(filename,tiddler.fields.text,contentTypeInfo.encoding,function(err) {\n\t\tself.callback(err);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/savetiddler.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savetiddlers.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/savetiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"savetiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tpathname = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.deleteDirectory(pathname);\n\t$tw.utils.createDirectory(pathname);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilename = path.resolve(pathname,encodeURIComponent(title));\n\t\tfs.writeFileSync(filename,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/savetiddlers.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/server.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/server.js\ntype: application/javascript\nmodule-type: command\n\nServe tiddlers over http\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif(!$tw.browser) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\"),\n\t\thttp = require(\"http\");\n}\n\nexports.info = {\n\tname: \"server\",\n\tsynchronous: true\n};\n\n/*\nA simple HTTP server with regexp-based routes\n*/\nfunction SimpleServer(options) {\n\tthis.routes = options.routes || [];\n\tthis.wiki = options.wiki;\n\tthis.variables = options.variables || {};\n}\n\nSimpleServer.prototype.set = function(obj) {\n\tvar self = this;\n\t$tw.utils.each(obj,function(value,name) {\n\t\tself.variables[name] = value;\n\t});\n};\n\nSimpleServer.prototype.get = function(name) {\n\treturn this.variables[name];\n};\n\nSimpleServer.prototype.addRoute = function(route) {\n\tthis.routes.push(route);\n};\n\nSimpleServer.prototype.findMatchingRoute = function(request,state) {\n\tvar pathprefix = this.get(\"pathprefix\") || \"\";\n\tfor(var t=0; t<this.routes.length; t++) {\n\t\tvar potentialRoute = this.routes[t],\n\t\t\tpathRegExp = potentialRoute.path,\n\t\t\tpathname = state.urlInfo.pathname,\n\t\t\tmatch;\n\t\tif(pathprefix) {\n\t\t\tif(pathname.substr(0,pathprefix.length) === pathprefix) {\n\t\t\t\tpathname = pathname.substr(pathprefix.length);\n\t\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t\t} else {\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t} else {\n\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t}\n\t\tif(match && request.method === potentialRoute.method) {\n\t\t\tstate.params = [];\n\t\t\tfor(var p=1; p<match.length; p++) {\n\t\t\t\tstate.params.push(match[p]);\n\t\t\t}\n\t\t\treturn potentialRoute;\n\t\t}\n\t}\n\treturn null;\n};\n\nSimpleServer.prototype.checkCredentials = function(request,incomingUsername,incomingPassword) {\n\tvar header = request.headers.authorization || \"\",\n\t\ttoken = header.split(/\\s+/).pop() || \"\",\n\t\tauth = $tw.utils.base64Decode(token),\n\t\tparts = auth.split(/:/),\n\t\tusername = parts[0],\n\t\tpassword = parts[1];\n\tif(incomingUsername === username && incomingPassword === password) {\n\t\treturn \"ALLOWED\";\n\t} else {\n\t\treturn \"DENIED\";\n\t}\n};\n\nSimpleServer.prototype.listen = function(port,host) {\n\tvar self = this;\n\thttp.createServer(function(request,response) {\n\t\t// Compose the state object\n\t\tvar state = {};\n\t\tstate.wiki = self.wiki;\n\t\tstate.server = self;\n\t\tstate.urlInfo = url.parse(request.url);\n\t\t// Find the route that matches this path\n\t\tvar route = self.findMatchingRoute(request,state);\n\t\t// Check for the username and password if we've got one\n\t\tvar username = self.get(\"username\"),\n\t\t\tpassword = self.get(\"password\");\n\t\tif(username && password) {\n\t\t\t// Check they match\n\t\t\tif(self.checkCredentials(request,username,password) !== \"ALLOWED\") {\n\t\t\t\tvar servername = state.wiki.getTiddlerText(\"$:/SiteTitle\") || \"TiddlyWiki5\";\n\t\t\t\tresponse.writeHead(401,\"Authentication required\",{\n\t\t\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to ' + servername + '\"'\n\t\t\t\t});\n\t\t\t\tresponse.end();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t// Return a 404 if we didn't find a route\n\t\tif(!route) {\n\t\t\tresponse.writeHead(404);\n\t\t\tresponse.end();\n\t\t\treturn;\n\t\t}\n\t\t// Set the encoding for the incoming request\n\t\t// TODO: Presumably this would need tweaking if we supported PUTting binary tiddlers\n\t\trequest.setEncoding(\"utf8\");\n\t\t// Dispatch the appropriate method\n\t\tswitch(request.method) {\n\t\t\tcase \"GET\": // Intentional fall-through\n\t\t\tcase \"DELETE\":\n\t\t\t\troute.handler(request,response,state);\n\t\t\t\tbreak;\n\t\t\tcase \"PUT\":\n\t\t\t\tvar data = \"\";\n\t\t\t\trequest.on(\"data\",function(chunk) {\n\t\t\t\t\tdata += chunk.toString();\n\t\t\t\t});\n\t\t\t\trequest.on(\"end\",function() {\n\t\t\t\t\tstate.data = data;\n\t\t\t\t\troute.handler(request,response,state);\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t}\n\t}).listen(port,host);\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n\t// Set up server\n\tthis.server = new SimpleServer({\n\t\twiki: this.commander.wiki\n\t});\n\t// Add route handlers\n\tthis.server.addRoute({\n\t\tmethod: \"PUT\",\n\t\tpath: /^\\/recipes\\/default\\/tiddlers\\/(.+)$/,\n\t\thandler: function(request,response,state) {\n\t\t\tvar title = decodeURIComponent(state.params[0]),\n\t\t\t\tfields = JSON.parse(state.data);\n\t\t\t// Pull up any subfields in the `fields` object\n\t\t\tif(fields.fields) {\n\t\t\t\t$tw.utils.each(fields.fields,function(field,name) {\n\t\t\t\t\tfields[name] = field;\n\t\t\t\t});\n\t\t\t\tdelete fields.fields;\n\t\t\t}\n\t\t\t// Remove any revision field\n\t\t\tif(fields.revision) {\n\t\t\t\tdelete fields.revision;\n\t\t\t}\n\t\t\tstate.wiki.addTiddler(new $tw.Tiddler(state.wiki.getCreationFields(),fields,{title: title}));\n\t\t\tvar changeCount = state.wiki.getChangeCount(title).toString();\n\t\t\tresponse.writeHead(204, \"OK\",{\n\t\t\t\tEtag: \"\\\"default/\" + encodeURIComponent(title) + \"/\" + changeCount + \":\\\"\",\n\t\t\t\t\"Content-Type\": \"text/plain\"\n\t\t\t});\n\t\t\tresponse.end();\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"DELETE\",\n\t\tpath: /^\\/bags\\/default\\/tiddlers\\/(.+)$/,\n\t\thandler: function(request,response,state) {\n\t\t\tvar title = decodeURIComponent(state.params[0]);\n\t\t\tstate.wiki.deleteTiddler(title);\n\t\t\tresponse.writeHead(204, \"OK\", {\n\t\t\t\t\"Content-Type\": \"text/plain\"\n\t\t\t});\n\t\t\tresponse.end();\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": state.server.get(\"serveType\")});\n\t\t\tvar text = state.wiki.renderTiddler(state.server.get(\"renderType\"),state.server.get(\"rootTiddler\"));\n\t\t\tresponse.end(text,\"utf8\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/status$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\t\tvar text = JSON.stringify({\n\t\t\t\tusername: state.server.get(\"username\"),\n\t\t\t\tspace: {\n\t\t\t\t\trecipe: \"default\"\n\t\t\t\t},\n\t\t\t\ttiddlywiki_version: $tw.version\n\t\t\t});\n\t\t\tresponse.end(text,\"utf8\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/favicon.ico$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": \"image/x-icon\"});\n\t\t\tvar buffer = state.wiki.getTiddlerText(\"$:/favicon.ico\",\"\");\n\t\t\tresponse.end(buffer,\"base64\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/recipes\\/default\\/tiddlers.json$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\t\tvar tiddlers = [];\n\t\t\tstate.wiki.forEachTiddler({sortField: \"title\"},function(title,tiddler) {\n\t\t\t\tvar tiddlerFields = {};\n\t\t\t\t$tw.utils.each(tiddler.fields,function(field,name) {\n\t\t\t\t\tif(name !== \"text\") {\n\t\t\t\t\t\ttiddlerFields[name] = tiddler.getFieldString(name);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\t\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\ttiddlers.push(tiddlerFields);\n\t\t\t});\n\t\t\tvar text = JSON.stringify(tiddlers);\n\t\t\tresponse.end(text,\"utf8\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/recipes\\/default\\/tiddlers\\/(.+)$/,\n\t\thandler: function(request,response,state) {\n\t\t\tvar title = decodeURIComponent(state.params[0]),\n\t\t\t\ttiddler = state.wiki.getTiddler(title),\n\t\t\t\ttiddlerFields = {},\n\t\t\t\tknownFields = [\n\t\t\t\t\t\"bag\", \"created\", \"creator\", \"modified\", \"modifier\", \"permissions\", \"recipe\", \"revision\", \"tags\", \"text\", \"title\", \"type\", \"uri\"\n\t\t\t\t];\n\t\t\tif(tiddler) {\n\t\t\t\t$tw.utils.each(tiddler.fields,function(field,name) {\n\t\t\t\t\tvar value = tiddler.getFieldString(name);\n\t\t\t\t\tif(knownFields.indexOf(name) !== -1) {\n\t\t\t\t\t\ttiddlerFields[name] = value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttiddlerFields.fields = tiddlerFields.fields || {};\n\t\t\t\t\t\ttiddlerFields.fields[name] = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\t\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\t\t\tresponse.end(JSON.stringify(tiddlerFields),\"utf8\");\n\t\t\t} else {\n\t\t\t\tresponse.writeHead(404);\n\t\t\t\tresponse.end();\n\t\t\t}\n\t\t}\n\t});\n};\n\nCommand.prototype.execute = function() {\n\tif(!$tw.boot.wikiTiddlersPath) {\n\t\t$tw.utils.warning(\"Warning: Wiki folder '\" + $tw.boot.wikiPath + \"' does not exist or is missing a tiddlywiki.info file\");\n\t}\n\tvar port = this.params[0] || \"8080\",\n\t\trootTiddler = this.params[1] || \"$:/core/save/all\",\n\t\trenderType = this.params[2] || \"text/plain\",\n\t\tserveType = this.params[3] || \"text/html\",\n\t\tusername = this.params[4],\n\t\tpassword = this.params[5],\n\t\thost = this.params[6] || \"127.0.0.1\",\n\t\tpathprefix = this.params[7];\n\tthis.server.set({\n\t\trootTiddler: rootTiddler,\n\t\trenderType: renderType,\n\t\tserveType: serveType,\n\t\tusername: username,\n\t\tpassword: password,\n\t\tpathprefix: pathprefix\n\t});\n\tthis.server.listen(port,host);\n\tconsole.log(\"Serving on \" + host + \":\" + port);\n\tconsole.log(\"(press ctrl-C to exit)\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/server.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/setfield.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/setfield.js\ntype: application/javascript\nmodule-type: command\n\nCommand to modify selected tiddlers to set a field to the text of a template tiddler that has been wikified with the selected tiddler as the current tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"setfield\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 4) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar self = this,\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tfieldname = this.params[1] || \"text\",\n\t\ttemplatetitle = this.params[2],\n\t\trendertype = this.params[3] || \"text/plain\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(templatetitle),\n\t\t\tnewFields = {},\n\t\t\ttiddler = wiki.getTiddler(title);\n\t\tif(parser) {\n\t\t\tvar widgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}});\n\t\t\tvar container = $tw.fakeDocument.createElement(\"div\");\n\t\t\twidgetNode.render(container,null);\n\t\t\tnewFields[fieldname] = rendertype === \"text/html\" ? container.innerHTML : container.textContent;\n\t\t} else {\n\t\t\tnewFields[fieldname] = undefined;\n\t\t}\n\t\twiki.addTiddler(new $tw.Tiddler(tiddler,newFields));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/setfield.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/unpackplugin.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/unpackplugin.js\ntype: application/javascript\nmodule-type: command\n\nCommand to extract the shadow tiddlers from within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"unpackplugin\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing plugin name\";\n\t}\n\tvar self = this,\n\t\ttitle = this.params[0],\n\t\tpluginData = this.commander.wiki.getTiddlerData(title);\n\tif(!pluginData) {\n\t\treturn \"Plugin '\" + title + \"' not found\";\n\t}\n\t$tw.utils.each(pluginData.tiddlers,function(tiddler) {\n\t\tself.commander.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/unpackplugin.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/verbose.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/verbose.js\ntype: application/javascript\nmodule-type: command\n\nVerbose command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"verbose\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.verbose = true;\n\t// Output the boot message log\n\tthis.commander.streams.output.write(\"Boot log:\\n \" + $tw.boot.logMessages.join(\"\\n \") + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/verbose.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/version.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/version.js\ntype: application/javascript\nmodule-type: command\n\nVersion command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"version\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.streams.output.write($tw.version + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/version.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/config.js": {
"text": "/*\\\ntitle: $:/core/modules/config.js\ntype: application/javascript\nmodule-type: config\n\nCore configuration constants\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.preferences = {};\n\nexports.preferences.notificationDuration = 3 * 1000;\nexports.preferences.jsonSpaces = 4;\n\nexports.textPrimitives = {\n\tupperLetter: \"[A-Z\\u00c0-\\u00d6\\u00d8-\\u00de\\u0150\\u0170]\",\n\tlowerLetter: \"[a-z\\u00df-\\u00f6\\u00f8-\\u00ff\\u0151\\u0171]\",\n\tanyLetter: \"[A-Za-z0-9\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\",\n\tblockPrefixLetters:\t\"[A-Za-z0-9-_\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\"\n};\n\nexports.textPrimitives.unWikiLink = \"~\";\nexports.textPrimitives.wikiLink = exports.textPrimitives.upperLetter + \"+\" +\n\texports.textPrimitives.lowerLetter + \"+\" +\n\texports.textPrimitives.upperLetter +\n\texports.textPrimitives.anyLetter + \"*\";\n\nexports.htmlEntities = {quot:34, amp:38, apos:39, lt:60, gt:62, nbsp:160, iexcl:161, cent:162, pound:163, curren:164, yen:165, brvbar:166, sect:167, uml:168, copy:169, ordf:170, laquo:171, not:172, shy:173, reg:174, macr:175, deg:176, plusmn:177, sup2:178, sup3:179, acute:180, micro:181, para:182, middot:183, cedil:184, sup1:185, ordm:186, raquo:187, frac14:188, frac12:189, frac34:190, iquest:191, Agrave:192, Aacute:193, Acirc:194, Atilde:195, Auml:196, Aring:197, AElig:198, Ccedil:199, Egrave:200, Eacute:201, Ecirc:202, Euml:203, Igrave:204, Iacute:205, Icirc:206, Iuml:207, ETH:208, Ntilde:209, Ograve:210, Oacute:211, Ocirc:212, Otilde:213, Ouml:214, times:215, Oslash:216, Ugrave:217, Uacute:218, Ucirc:219, Uuml:220, Yacute:221, THORN:222, szlig:223, agrave:224, aacute:225, acirc:226, atilde:227, auml:228, aring:229, aelig:230, ccedil:231, egrave:232, eacute:233, ecirc:234, euml:235, igrave:236, iacute:237, icirc:238, iuml:239, eth:240, ntilde:241, ograve:242, oacute:243, ocirc:244, otilde:245, ouml:246, divide:247, oslash:248, ugrave:249, uacute:250, ucirc:251, uuml:252, yacute:253, thorn:254, yuml:255, OElig:338, oelig:339, Scaron:352, scaron:353, Yuml:376, fnof:402, circ:710, tilde:732, Alpha:913, Beta:914, Gamma:915, Delta:916, Epsilon:917, Zeta:918, Eta:919, Theta:920, Iota:921, Kappa:922, Lambda:923, Mu:924, Nu:925, Xi:926, Omicron:927, Pi:928, Rho:929, Sigma:931, Tau:932, Upsilon:933, Phi:934, Chi:935, Psi:936, Omega:937, alpha:945, beta:946, gamma:947, delta:948, epsilon:949, zeta:950, eta:951, theta:952, iota:953, kappa:954, lambda:955, mu:956, nu:957, xi:958, omicron:959, pi:960, rho:961, sigmaf:962, sigma:963, tau:964, upsilon:965, phi:966, chi:967, psi:968, omega:969, thetasym:977, upsih:978, piv:982, ensp:8194, emsp:8195, thinsp:8201, zwnj:8204, zwj:8205, lrm:8206, rlm:8207, ndash:8211, mdash:8212, lsquo:8216, rsquo:8217, sbquo:8218, ldquo:8220, rdquo:8221, bdquo:8222, dagger:8224, Dagger:8225, bull:8226, hellip:8230, permil:8240, prime:8242, Prime:8243, lsaquo:8249, rsaquo:8250, oline:8254, frasl:8260, euro:8364, image:8465, weierp:8472, real:8476, trade:8482, alefsym:8501, larr:8592, uarr:8593, rarr:8594, darr:8595, harr:8596, crarr:8629, lArr:8656, uArr:8657, rArr:8658, dArr:8659, hArr:8660, forall:8704, part:8706, exist:8707, empty:8709, nabla:8711, isin:8712, notin:8713, ni:8715, prod:8719, sum:8721, minus:8722, lowast:8727, radic:8730, prop:8733, infin:8734, ang:8736, and:8743, or:8744, cap:8745, cup:8746, int:8747, there4:8756, sim:8764, cong:8773, asymp:8776, ne:8800, equiv:8801, le:8804, ge:8805, sub:8834, sup:8835, nsub:8836, sube:8838, supe:8839, oplus:8853, otimes:8855, perp:8869, sdot:8901, lceil:8968, rceil:8969, lfloor:8970, rfloor:8971, lang:9001, rang:9002, loz:9674, spades:9824, clubs:9827, hearts:9829, diams:9830 };\n\nexports.htmlVoidElements = \"area,base,br,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr\".split(\",\");\n\nexports.htmlBlockElements = \"address,article,aside,audio,blockquote,canvas,dd,div,dl,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,li,noscript,ol,output,p,pre,section,table,tfoot,ul,video\".split(\",\");\n\nexports.htmlUnsafeElements = \"script\".split(\",\");\n\n})();\n",
"title": "$:/core/modules/config.js",
"type": "application/javascript",
"module-type": "config"
},
"$:/core/modules/deserializers.js": {
"text": "/*\\\ntitle: $:/core/modules/deserializers.js\ntype: application/javascript\nmodule-type: tiddlerdeserializer\n\nFunctions to deserialise tiddlers from a block of text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nUtility function to parse an old-style tiddler DIV in a *.tid file. It looks like this:\n\n<div title=\"Title\" creator=\"JoeBloggs\" modifier=\"JoeBloggs\" created=\"201102111106\" modified=\"201102111310\" tags=\"myTag [[my long tag]]\">\n<pre>The text of the tiddler (without the expected HTML encoding).\n</pre>\n</div>\n\nNote that the field attributes are HTML encoded, but that the body of the <PRE> tag is not encoded.\n\nWhen these tiddler DIVs are encountered within a TiddlyWiki HTML file then the body is encoded in the usual way.\n*/\nvar parseTiddlerDiv = function(text /* [,fields] */) {\n\t// Slot together the default results\n\tvar result = {};\n\tif(arguments.length > 1) {\n\t\tfor(var f=1; f<arguments.length; f++) {\n\t\t\tvar fields = arguments[f];\n\t\t\tfor(var t in fields) {\n\t\t\t\tresult[t] = fields[t];\t\t\n\t\t\t}\n\t\t}\n\t}\n\t// Parse the DIV body\n\tvar startRegExp = /^\\s*<div\\s+([^>]*)>(\\s*<pre>)?/gi,\n\t\tendRegExp,\n\t\tmatch = startRegExp.exec(text);\n\tif(match) {\n\t\t// Old-style DIVs don't have the <pre> tag\n\t\tif(match[2]) {\n\t\t\tendRegExp = /<\\/pre>\\s*<\\/div>\\s*$/gi;\n\t\t} else {\n\t\t\tendRegExp = /<\\/div>\\s*$/gi;\n\t\t}\n\t\tvar endMatch = endRegExp.exec(text);\n\t\tif(endMatch) {\n\t\t\t// Extract the text\n\t\t\tresult.text = text.substring(match.index + match[0].length,endMatch.index);\n\t\t\t// Process the attributes\n\t\t\tvar attrRegExp = /\\s*([^=\\s]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/gi,\n\t\t\t\tattrMatch;\n\t\t\tdo {\n\t\t\t\tattrMatch = attrRegExp.exec(match[1]);\n\t\t\t\tif(attrMatch) {\n\t\t\t\t\tvar name = attrMatch[1];\n\t\t\t\t\tvar value = attrMatch[2] !== undefined ? attrMatch[2] : attrMatch[3];\n\t\t\t\t\tresult[name] = value;\n\t\t\t\t}\n\t\t\t} while(attrMatch);\n\t\t\treturn result;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports[\"application/x-tiddler-html-div\"] = function(text,fields) {\n\treturn [parseTiddlerDiv(text,fields)];\n};\n\nexports[\"application/json\"] = function(text,fields) {\n\tvar incoming = JSON.parse(text),\n\t\tresults = [];\n\tif($tw.utils.isArray(incoming)) {\n\t\tfor(var t=0; t<incoming.length; t++) {\n\t\t\tvar incomingFields = incoming[t],\n\t\t\t\tfields = {};\n\t\t\tfor(var f in incomingFields) {\n\t\t\t\tif(typeof incomingFields[f] === \"string\") {\n\t\t\t\t\tfields[f] = incomingFields[f];\n\t\t\t\t}\n\t\t\t}\n\t\t\tresults.push(fields);\n\t\t}\n\t}\n\treturn results;\n};\n\n/*\nParse an HTML file into tiddlers. There are three possibilities:\n# A TiddlyWiki classic HTML file containing `text/x-tiddlywiki` tiddlers\n# A TiddlyWiki5 HTML file containing `text/vnd.tiddlywiki` tiddlers\n# An ordinary HTML file\n*/\nexports[\"text/html\"] = function(text,fields) {\n\t// Check if we've got a store area\n\tvar storeAreaMarkerRegExp = /<div id=[\"']?storeArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\tmatch = storeAreaMarkerRegExp.exec(text);\n\tif(match) {\n\t\t// If so, it's either a classic TiddlyWiki file or an unencrypted TW5 file\n\t\t// First read the normal tiddlers\n\t\tvar results = deserializeTiddlyWikiFile(text,storeAreaMarkerRegExp.lastIndex,!!match[1],fields);\n\t\t// Then any system tiddlers\n\t\tvar systemAreaMarkerRegExp = /<div id=[\"']?systemArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\t\tsysMatch = systemAreaMarkerRegExp.exec(text);\n\t\tif(sysMatch) {\n\t\t\tresults.push.apply(results,deserializeTiddlyWikiFile(text,systemAreaMarkerRegExp.lastIndex,!!sysMatch[1],fields));\n\t\t}\n\t\treturn results;\n\t} else {\n\t\t// Check whether we've got an encrypted file\n\t\tvar encryptedStoreArea = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedStoreArea) {\n\t\t\t// If so, attempt to decrypt it using the current password\n\t\t\treturn $tw.utils.decryptStoreArea(encryptedStoreArea);\n\t\t} else {\n\t\t\t// It's not a TiddlyWiki so we'll return the entire HTML file as a tiddler\n\t\t\treturn deserializeHtmlFile(text,fields);\n\t\t}\n\t}\n};\n\nfunction deserializeHtmlFile(text,fields) {\n\tvar result = {};\n\t$tw.utils.each(fields,function(value,name) {\n\t\tresult[name] = value;\n\t});\n\tresult.text = text;\n\tresult.type = \"text/html\";\n\treturn [result];\n}\n\nfunction deserializeTiddlyWikiFile(text,storeAreaEnd,isTiddlyWiki5,fields) {\n\tvar results = [],\n\t\tendOfDivRegExp = /(<\\/div>\\s*)/gi,\n\t\tstartPos = storeAreaEnd,\n\t\tdefaultType = isTiddlyWiki5 ? undefined : \"text/x-tiddlywiki\";\n\tendOfDivRegExp.lastIndex = startPos;\n\tvar match = endOfDivRegExp.exec(text);\n\twhile(match) {\n\t\tvar endPos = endOfDivRegExp.lastIndex,\n\t\t\ttiddlerFields = parseTiddlerDiv(text.substring(startPos,endPos),fields,{type: defaultType});\n\t\tif(!tiddlerFields) {\n\t\t\tbreak;\n\t\t}\n\t\t$tw.utils.each(tiddlerFields,function(value,name) {\n\t\t\tif(typeof value === \"string\") {\n\t\t\t\ttiddlerFields[name] = $tw.utils.htmlDecode(value);\n\t\t\t}\n\t\t});\n\t\tif(tiddlerFields.text !== null) {\n\t\t\tresults.push(tiddlerFields);\n\t\t}\n\t\tstartPos = endPos;\n\t\tmatch = endOfDivRegExp.exec(text);\n\t}\n\treturn results;\n}\n\n})();\n",
"title": "$:/core/modules/deserializers.js",
"type": "application/javascript",
"module-type": "tiddlerdeserializer"
},
"$:/core/modules/filters/addprefix.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/addprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a prefix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(operator.operand + title);\n\t});\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/addprefix.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/addsuffix.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/addsuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a suffix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addsuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title + operator.operand);\n\t});\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/addsuffix.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/after.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/after.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is after the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.after = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index === -1 || index > (results.length - 2)) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index + 1]];\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/filters/after.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/all/current.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/all/current.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar currTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(currTiddlerTitle) {\n\t\treturn [currTiddlerTitle];\n\t} else {\n\t\treturn [];\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/filters/all/current.js",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/missing.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/all/missing.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\treturn options.wiki.getMissingTitles();\n};\n\n})();\n",
"title": "$:/core/modules/filters/all/missing.js",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/orphans.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/all/orphans.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[orphans]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphans = function(source,prefix,options) {\n\treturn options.wiki.getOrphanTitles();\n};\n\n})();\n",
"title": "$:/core/modules/filters/all/orphans.js",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/shadows.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/all/shadows.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[shadows]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadows = function(source,prefix,options) {\n\treturn options.wiki.allShadowTitles();\n};\n\n})();\n",
"title": "$:/core/modules/filters/all/shadows.js",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/tiddlers.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/all/tiddlers.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddlers = function(source,prefix,options) {\n\treturn options.wiki.allTitles();\n};\n\n})();\n",
"title": "$:/core/modules/filters/all/tiddlers.js",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/all.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for selecting tiddlers\n\n[all[shadows+tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar allFilterOperators;\n\nfunction getAllFilterOperators() {\n\tif(!allFilterOperators) {\n\t\tallFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"allfilteroperator\",allFilterOperators);\n\t}\n\treturn allFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.all = function(source,operator,options) {\n\t// Get our suboperators\n\tvar allFilterOperators = getAllFilterOperators();\n\t// Cycle through the suboperators accumulating their results\n\tvar results = [],\n\t\tsubops = operator.operand.split(\"+\");\n\t// Check for common optimisations\n\tif(subops.length === 1 && subops[0] === \"\") {\n\t\treturn source;\n\t} else if(subops.length === 1 && subops[0] === \"tiddlers\") {\n\t\treturn options.wiki.each;\n\t} else if(subops.length === 1 && subops[0] === \"shadows\") {\n\t\treturn options.wiki.eachShadow;\n\t} else if(subops.length === 2 && subops[0] === \"tiddlers\" && subops[1] === \"shadows\") {\n\t\treturn options.wiki.eachTiddlerPlusShadows;\n\t} else if(subops.length === 2 && subops[0] === \"shadows\" && subops[1] === \"tiddlers\") {\n\t\treturn options.wiki.eachShadowPlusTiddlers;\n\t}\n\t// Do it the hard way\n\tfor(var t=0; t<subops.length; t++) {\n\t\tvar subop = allFilterOperators[subops[t]];\n\t\tif(subop) {\n\t\t\t$tw.utils.pushTop(results,subop(source,operator.prefix,options));\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/all.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/backlinks.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/backlinks.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the backlinks from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.backlinks = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerBacklinks(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/backlinks.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/before.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/before.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is before the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.before = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index <= 0) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index - 1]];\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/filters/before.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/commands.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/commands.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the commands available in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.commands = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.commands,function(commandInfo,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/commands.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/each.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/each.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique value of the specified field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.each = function(source,operator,options) {\n\tvar results = [],\n\t\tvalues = {};\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tvar value;\n\t\t\tif((operator.operand === \"\") || (operator.operand === \"title\")) {\n\t\t\t\tvalue = title;\n\t\t\t} else {\n\t\t\t\tvalue = tiddler.getFieldString(operator.operand);\n\t\t\t}\n\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\tvalues[value] = true;\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/each.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/eachday.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/eachday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique day covered by the specified date field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.eachday = function(source,operator,options) {\n\tvar results = [],\n\t\tvalues = [];\n\t// Function to convert a date/time to a date integer\n\tvar toDate = function(value) {\n\t\tvalue = (new Date(value)).setHours(0,0,0,0);\n\t\treturn value+0;\n\t};\n\tsource(function(tiddler,title) {\n\t\tif(tiddler && tiddler.fields[operator.operand]) {\n\t\t\tvar value = toDate(tiddler.fields[operator.operand]);\n\t\t\tif(values.indexOf(value) === -1) {\n\t\t\t\tvalues.push(value);\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/eachday.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/field.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/field.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.field = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || operator.operator || \"title\").toLowerCase();\n\tif(operator.prefix === \"!\") {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text !== operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !!operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text === operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/field.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/fields.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/fields.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the fields on the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.fields = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tfor(var fieldName in tiddler.fields) {\n\t\t\t\t$tw.utils.pushTop(results,fieldName);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/fields.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/get.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/get.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing tiddler titles by the value of the field specified in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.get = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tvar value = tiddler.getFieldString(operator.operand);\n\t\t\tif(value) {\n\t\t\t\tresults.push(value);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/get.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/has.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/has.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a tiddler has the specified field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.has = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!tiddler || (tiddler && (!$tw.utils.hop(tiddler.fields,operator.operand) || tiddler.fields[operator.operand] === \"\"))) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand) && tiddler.fields[operator.operand] !== \"\") {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/has.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/indexes.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/indexes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the indexes of a data tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.indexes = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar data = options.wiki.getTiddlerData(title);\n\t\tif(data) {\n\t\t\t$tw.utils.pushTop(results,Object.keys(data));\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/indexes.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/is/current.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/is/current.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar results = [],\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title !== currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title === currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/is/current.js",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/image.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/is/image.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[image]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.image = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/is/image.js",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/missing.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/is/missing.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/is/missing.js",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/orphan.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/is/orphan.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[orphan]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphan = function(source,prefix,options) {\n\tvar results = [],\n\t\torphanTitles = options.wiki.getOrphanTitles();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) !== -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/is/orphan.js",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/shadow.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/is/shadow.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[shadow]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadow = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/is/shadow.js",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/system.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/is/system.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[system]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.system = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/is/system.js",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/tag.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/is/tag.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tag]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,prefix,options) {\n\tvar results = [],\n\t\ttagMap = options.wiki.getTagMap();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!$tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif($tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/is/tag.js",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/tiddler.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/is/tiddler.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tiddler]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddler = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/is/tiddler.js",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/is.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking tiddler properties\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar isFilterOperators;\n\nfunction getIsFilterOperators() {\n\tif(!isFilterOperators) {\n\t\tisFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"isfilteroperator\",isFilterOperators);\n\t}\n\treturn isFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.is = function(source,operator,options) {\n\t// Dispatch to the correct isfilteroperator\n\tvar isFilterOperators = getIsFilterOperators();\n\tvar isFilterOperator = isFilterOperators[operator.operand];\n\tif(isFilterOperator) {\n\t\treturn isFilterOperator(source,operator.prefix,options);\n\t} else {\n\t\treturn [\"Filter Error: Unknown operand for the 'is' filter operator\"];\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/filters/is.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/limit.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/limit.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for chopping the results to a specified maximum number of entries\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.limit = function(source,operator,options) {\n\tvar results = [];\n\t// Convert to an array\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\t// Slice the array if necessary\n\tvar limit = Math.min(results.length,parseInt(operator.operand,10));\n\tif(operator.prefix === \"!\") {\n\t\tresults = results.slice(-limit);\n\t} else {\n\t\tresults = results.slice(0,limit);\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/limit.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/links.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/links.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the links from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.links = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerLinks(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/links.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/list.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/list.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddlers whose title is listed in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.list = function(source,operator,options) {\n\tvar results = [],\n\t\ttr = $tw.utils.parseTextReference(operator.operand),\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\"),\n\t\tlist = options.wiki.getTiddlerList(tr.title || currTiddlerTitle,tr.field,tr.index);\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults = list;\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/list.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/listed.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/listed.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that have the selected tiddlers in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.listed = function(source,operator,options) {\n\tvar field = operator.operand || \"list\",\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.findListingsOfTiddler(title,field));\n\t});\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/listed.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/listops.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for manipulating the current selection list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nReverse list\n*/\nexports.reverse = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.unshift(title);\n\t});\n\treturn results;\n};\n\n/*\nFirst entry/entries in list\n*/\nexports.first = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1,\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,count);\n};\n\n/*\nLast entry/entries in list\n*/\nexports.last = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1,\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(-count);\n};\n\n/*\nAll but the first entry/entries of the list\n*/\nexports.rest = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1,\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count);\n};\nexports.butfirst = exports.rest;\nexports.bf = exports.rest;\n\n/*\nAll but the last entry/entries of the list\n*/\nexports.butlast = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1,\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,-count);\n};\nexports.bl = exports.butlast;\n\n/*\nThe nth member of the list\n*/\nexports.nth = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1,\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count - 1,count);\n};\n\n})();\n",
"title": "$:/core/modules/filters/listops.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/modules.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/modules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the modules of a given type in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.modules = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.each($tw.modules.types[title],function(moduleInfo,moduleName) {\n\t\t\tresults.push(moduleName);\n\t\t});\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/modules.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/moduletypes.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/moduletypes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the module types in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.moduletypes = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.modules.types,function(moduleInfo,type) {\n\t\tresults.push(type);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/moduletypes.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/next.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/next.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs next in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.next = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch++;\n\t\tif(match > 0 && match < list.length) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/next.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/plugintiddlers.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/plugintiddlers.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the shadow tiddlers within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.plugintiddlers = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar pluginInfo = options.wiki.getPluginInfo(title) || options.wiki.getTiddlerData(title,{tiddlers:[]});\n\t\tif(pluginInfo && pluginInfo.tiddlers) {\n\t\t\t$tw.utils.each(pluginInfo.tiddlers,function(fields,title) {\n\t\t\t\tresults.push(title);\n\t\t\t});\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/plugintiddlers.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/prefix.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/prefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title starts with a prefix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.prefix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/prefix.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/previous.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/previous.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs immediately prior in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.previous = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch--;\n\t\tif(match >= 0) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/previous.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/regexp.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/regexp.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for regexp matching\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.regexp = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"title\").toLowerCase(),\n\t\tregexpString, regexp, flags = \"\", match,\n\t\tgetFieldString = function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\treturn tiddler.getFieldString(fieldname);\n\t\t\t} else if(fieldname === \"title\") {\n\t\t\t\treturn title;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\t// Process flags and construct regexp\n\tregexpString = operator.operand;\n\tmatch = /^\\(\\?([gim]+)\\)/.exec(regexpString);\n\tif(match) {\n\t\tflags = match[1];\n\t\tregexpString = regexpString.substr(match[0].length);\n\t} else {\n\t\tmatch = /\\(\\?([gim]+)\\)$/.exec(regexpString);\n\t\tif(match) {\n\t\t\tflags = match[1];\n\t\t\tregexpString = regexpString.substr(0,regexpString.length - match[0].length);\n\t\t}\n\t}\n\tregexp = new RegExp(regexpString,flags);\n\t// Process the incoming tiddlers\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/regexp.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/removeprefix.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/removeprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a prefix from each title in the list. Titles that do not start with the prefix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removeprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/removeprefix.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/removesuffix.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/removesuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a suffix from each title in the list. Titles that do not end with the suffix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removesuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title.substr(-operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(0,title.length - operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/removesuffix.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/sameday.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/sameday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a modified date field on the same day as the provided value.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sameday = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\ttargetDate = (new Date($tw.utils.parseDate(operator.operand))).setHours(0,0,0,0);\n\t// Function to convert a date/time to a date integer\n\tvar isSameDay = function(dateField) {\n\t\t\treturn (new Date(dateField)).setHours(0,0,0,0) === targetDate;\n\t\t};\n\tsource(function(tiddler,title) {\n\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\tif(isSameDay(tiddler.fields[fieldName])) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/sameday.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/search.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/search.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for searching for the text in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.search = function(source,operator,options) {\n\tvar invert = operator.prefix === \"!\";\n\tif(operator.suffix) {\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert,\n\t\t\tfield: operator.suffix\n\t\t});\n\t} else {\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert\n\t\t});\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/filters/search.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/shadowsource.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/shadowsource.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the source plugins for shadow tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadowsource = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar source = options.wiki.getShadowSource(title);\n\t\tif(source) {\n\t\t\t$tw.utils.pushTop(results,source);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/shadowsource.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/sort.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/sort.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for sorting\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,false);\n\treturn results;\n};\n\nexports.nsort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,true);\n\treturn results;\n};\n\nexports.sortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,false);\n\treturn results;\n};\n\nexports.nsortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,true);\n\treturn results;\n};\n\nvar prepare_results = function (source) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/sort.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/splitbefore.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/splitbefore.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that splits each result on the first occurance of the specified separator and returns the unique values.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.splitbefore = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar parts = title.split(operator.operand);\n\t\tif(parts.length === 1) {\n\t\t\t$tw.utils.pushTop(results,parts[0]);\n\t\t} else {\n\t\t\t$tw.utils.pushTop(results,parts[0] + operator.operand);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/splitbefore.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/storyviews.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/storyviews.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the story views in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.storyviews = function(source,operator,options) {\n\tvar results = [],\n\t\tstoryviews = {};\n\t$tw.modules.applyMethods(\"storyview\",storyviews);\n\t$tw.utils.each(storyviews,function(info,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/storyviews.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/suffix.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/suffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title ends with a suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.suffix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/suffix.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tag.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/tag.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking for the presence of a tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && !tiddler.hasTag(operator.operand)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.hasTag(operator.operand)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t\tresults = options.wiki.sortByList(results,operator.operand);\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/tag.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tagging.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/tagging.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that are tagged with the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tagging = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlersWithTag(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/tagging.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tags.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/tags.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the tags of the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(tiddler && tiddler.fields.tags) {\n\t\t\t$tw.utils.pushTop(results,tiddler.fields.tags);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/tags.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/title.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/title.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing title fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.title = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields.title !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults.push(operator.operand);\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/title.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/untagged.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/untagged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the selected tiddlers that are untagged\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.untagged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && $tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length > 0) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!tiddler || !tiddler.hasField(\"tags\") || ($tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length === 0)) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/untagged.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters.js": {
"text": "/*\\\ntitle: $:/core/modules/filters.js\ntype: application/javascript\nmodule-type: wikimethod\n\nAdds tiddler filtering methods to the $tw.Wiki object.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParses an operation within a filter string\n\tresults: Array of array of operator nodes into which results should be inserted\n\tfilterString: filter string\n\tp: start position within the string\nReturns the new start position, after the parsed operation\n*/\nfunction parseFilterOperation(operators,filterString,p) {\n\tvar operator, operand, bracketPos, curlyBracketPos;\n\t// Skip the starting square bracket\n\tif(filterString.charAt(p++) !== \"[\") {\n\t\tthrow \"Missing [ in filter expression\";\n\t}\n\t// Process each operator in turn\n\tdo {\n\t\toperator = {};\n\t\t// Check for an operator prefix\n\t\tif(filterString.charAt(p) === \"!\") {\n\t\t\toperator.prefix = filterString.charAt(p++);\n\t\t}\n\t\t// Get the operator name\n\t\tvar nextBracketPos = filterString.substring(p).search(/[\\[\\{<\\/]/);\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing [ in filter expression\";\n\t\t}\n\t\tnextBracketPos += p;\n\t\tvar bracket = filterString.charAt(nextBracketPos);\n\t\toperator.operator = filterString.substring(p,nextBracketPos);\n\t\t\n\t\t// Any suffix?\n\t\tvar colon = operator.operator.indexOf(':');\n\t\tif(colon > -1) {\n\t\t\toperator.suffix = operator.operator.substring(colon + 1);\n\t\t\toperator.operator = operator.operator.substring(0,colon) || \"field\";\n\t\t}\n\t\t// Empty operator means: title\n\t\telse if(operator.operator === \"\") {\n\t\t\toperator.operator = \"title\";\n\t\t}\n\n\t\tp = nextBracketPos + 1;\n\t\tswitch (bracket) {\n\t\t\tcase \"{\": // Curly brackets\n\t\t\t\toperator.indirect = true;\n\t\t\t\tnextBracketPos = filterString.indexOf(\"}\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"[\": // Square brackets\n\t\t\t\tnextBracketPos = filterString.indexOf(\"]\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"<\": // Angle brackets\n\t\t\t\toperator.variable = true;\n\t\t\t\tnextBracketPos = filterString.indexOf(\">\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"/\": // regexp brackets\n\t\t\t\tvar rex = /^((?:[^\\\\\\/]*|\\\\.)*)\\/(?:\\(([mygi]+)\\))?/g,\n\t\t\t\t\trexMatch = rex.exec(filterString.substring(p));\n\t\t\t\tif(rexMatch) {\n\t\t\t\t\toperator.regexp = new RegExp(rexMatch[1], rexMatch[2]);\n// DEPRECATION WARNING\nconsole.log(\"WARNING: Filter\",operator.operator,\"has a deprecated regexp operand\",operator.regexp);\n\t\t\t\t\tnextBracketPos = p + rex.lastIndex - 1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow \"Unterminated regular expression in filter expression\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing closing bracket in filter expression\";\n\t\t}\n\t\tif(!operator.regexp) {\n\t\t\toperator.operand = filterString.substring(p,nextBracketPos);\n\t\t}\n\t\tp = nextBracketPos + 1;\n\t\t\t\n\t\t// Push this operator\n\t\toperators.push(operator);\n\t} while(filterString.charAt(p) !== \"]\");\n\t// Skip the ending square bracket\n\tif(filterString.charAt(p++) !== \"]\") {\n\t\tthrow \"Missing ] in filter expression\";\n\t}\n\t// Return the parsing position\n\treturn p;\n}\n\n/*\nParse a filter string\n*/\nexports.parseFilter = function(filterString) {\n\tfilterString = filterString || \"\";\n\tvar results = [], // Array of arrays of operator nodes {operator:,operand:}\n\t\tp = 0, // Current position in the filter string\n\t\tmatch;\n\tvar whitespaceRegExp = /(\\s+)/mg,\n\t\toperandRegExp = /((?:\\+|\\-)?)(?:(\\[)|(\"(?:[^\"])*\")|('(?:[^'])*')|([^\\s\\[\\]]+))/mg;\n\twhile(p < filterString.length) {\n\t\t// Skip any whitespace\n\t\twhitespaceRegExp.lastIndex = p;\n\t\tmatch = whitespaceRegExp.exec(filterString);\n\t\tif(match && match.index === p) {\n\t\t\tp = p + match[0].length;\n\t\t}\n\t\t// Match the start of the operation\n\t\tif(p < filterString.length) {\n\t\t\toperandRegExp.lastIndex = p;\n\t\t\tmatch = operandRegExp.exec(filterString);\n\t\t\tif(!match || match.index !== p) {\n\t\t\t\tthrow \"Syntax error in filter expression\";\n\t\t\t}\n\t\t\tvar operation = {\n\t\t\t\tprefix: \"\",\n\t\t\t\toperators: []\n\t\t\t};\n\t\t\tif(match[1]) {\n\t\t\t\toperation.prefix = match[1];\n\t\t\t\tp++;\n\t\t\t}\n\t\t\tif(match[2]) { // Opening square bracket\n\t\t\t\tp = parseFilterOperation(operation.operators,filterString,p);\n\t\t\t} else {\n\t\t\t\tp = match.index + match[0].length;\n\t\t\t}\n\t\t\tif(match[3] || match[4] || match[5]) { // Double quoted string, single quoted string or unquoted title\n\t\t\t\toperation.operators.push(\n\t\t\t\t\t{operator: \"title\", operand: match[3] || match[4] || match[5]}\n\t\t\t\t);\n\t\t\t}\n\t\t\tresults.push(operation);\n\t\t}\n\t}\n\treturn results;\n};\n\nexports.getFilterOperators = function() {\n\tif(!this.filterOperators) {\n\t\t$tw.Wiki.prototype.filterOperators = {};\n\t\t$tw.modules.applyMethods(\"filteroperator\",this.filterOperators);\n\t}\n\treturn this.filterOperators;\n};\n\nexports.filterTiddlers = function(filterString,widget,source) {\n\tvar fn = this.compileFilter(filterString);\n\treturn fn.call(this,source,widget);\n};\n\n/*\nCompile a filter into a function with the signature fn(source,widget) where:\nsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\nwidget: an optional widget node for retrieving the current tiddler etc.\n*/\nexports.compileFilter = function(filterString) {\n\tvar filterParseTree;\n\ttry {\n\t\tfilterParseTree = this.parseFilter(filterString);\n\t} catch(e) {\n\t\treturn function(source,widget) {\n\t\t\treturn [\"Filter error: \" + e];\n\t\t};\n\t}\n\t// Get the hashmap of filter operator functions\n\tvar filterOperators = this.getFilterOperators();\n\t// Assemble array of functions, one for each operation\n\tvar operationFunctions = [];\n\t// Step through the operations\n\tvar self = this;\n\t$tw.utils.each(filterParseTree,function(operation) {\n\t\t// Create a function for the chain of operators in the operation\n\t\tvar operationSubFunction = function(source,widget) {\n\t\t\tvar accumulator = source,\n\t\t\t\tresults = [],\n\t\t\t\tcurrTiddlerTitle = widget && widget.getVariable(\"currentTiddler\");\n\t\t\t$tw.utils.each(operation.operators,function(operator) {\n\t\t\t\tvar operand = operator.operand,\n\t\t\t\t\toperatorFunction;\n\t\t\t\tif(!operator.operator) {\n\t\t\t\t\toperatorFunction = filterOperators.title;\n\t\t\t\t} else if(!filterOperators[operator.operator]) {\n\t\t\t\t\toperatorFunction = filterOperators.field;\n\t\t\t\t} else {\n\t\t\t\t\toperatorFunction = filterOperators[operator.operator];\n\t\t\t\t}\n\t\t\t\tif(operator.indirect) {\n\t\t\t\t\toperand = self.getTextReference(operator.operand,\"\",currTiddlerTitle);\n\t\t\t\t}\n\t\t\t\tif(operator.variable) {\n\t\t\t\t\toperand = widget.getVariable(operator.operand,{defaultValue: \"\"});\n\t\t\t\t}\n\t\t\t\tresults = operatorFunction(accumulator,{\n\t\t\t\t\t\t\toperator: operator.operator,\n\t\t\t\t\t\t\toperand: operand,\n\t\t\t\t\t\t\tprefix: operator.prefix,\n\t\t\t\t\t\t\tsuffix: operator.suffix,\n\t\t\t\t\t\t\tregexp: operator.regexp\n\t\t\t\t\t\t},{\n\t\t\t\t\t\t\twiki: self,\n\t\t\t\t\t\t\twidget: widget\n\t\t\t\t\t\t});\n\t\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\t\taccumulator = self.makeTiddlerIterator(results);\n\t\t\t\t} else {\n\t\t\t\t\taccumulator = results;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\treturn results;\n\t\t\t} else {\n\t\t\t\tvar resultArray = [];\n\t\t\t\tresults(function(tiddler,title) {\n\t\t\t\t\tresultArray.push(title);\n\t\t\t\t});\n\t\t\t\treturn resultArray;\n\t\t\t}\n\t\t};\n\t\t// Wrap the operator functions in a wrapper function that depends on the prefix\n\t\toperationFunctions.push((function() {\n\t\t\tswitch(operation.prefix || \"\") {\n\t\t\t\tcase \"\": // No prefix means that the operation is unioned into the result\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"-\": // The results of this operation are removed from the main result\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t$tw.utils.removeArrayEntries(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"+\": // This operation is applied to the main results so far\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t// This replaces all the elements of the array, but keeps the actual array so that references to it are preserved\n\t\t\t\t\t\tsource = self.makeTiddlerIterator(results);\n\t\t\t\t\t\tresults.splice(0,results.length);\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t}\n\t\t})());\n\t});\n\t// Return a function that applies the operations to a source iterator of tiddler titles\n\treturn $tw.perf.measure(\"filter\",function filterFunction(source,widget) {\n\t\tif(!source) {\n\t\t\tsource = self.each;\n\t\t} else if(typeof source === \"object\") { // Array or hashmap\n\t\t\tsource = self.makeTiddlerIterator(source);\n\t\t}\n\t\tvar results = [];\n\t\t$tw.utils.each(operationFunctions,function(operationFunction) {\n\t\t\toperationFunction(results,source,widget);\n\t\t});\n\t\treturn results;\n\t});\n};\n\n})();\n",
"title": "$:/core/modules/filters.js",
"type": "application/javascript",
"module-type": "wikimethod"
},
"$:/core/modules/info/platform.js": {
"text": "/*\\\ntitle: $:/core/modules/info/platform.js\ntype: application/javascript\nmodule-type: info\n\nInitialise basic platform $:/info/ tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.getInfoTiddlerFields = function() {\n\tvar mapBoolean = function(value) {return value ? \"yes\" : \"no\";},\n\t\tinfoTiddlerFields = [];\n\t// Basics\n\tinfoTiddlerFields.push({title: \"$:/info/browser\", text: mapBoolean(!!$tw.browser)});\n\tinfoTiddlerFields.push({title: \"$:/info/node\", text: mapBoolean(!!$tw.node)});\n\treturn infoTiddlerFields;\n};\n\n})();\n",
"title": "$:/core/modules/info/platform.js",
"type": "application/javascript",
"module-type": "info"
},
"$:/core/modules/language.js": {
"text": "/*\\\ntitle: $:/core/modules/language.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Language() manages translateable strings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate an instance of the language manager. Options include:\nwiki: wiki from which to retrieve translation tiddlers\n*/\nfunction Language(options) {\n\toptions = options || \"\";\n\tthis.wiki = options.wiki || $tw.wiki;\n}\n\n/*\nReturn a single translateable string. The title is automatically prefixed with \"$:/language/\"\nOptions include:\nvariables: optional hashmap of variables to supply to the language wikification\n*/\nLanguage.prototype.getString = function(title,options) {\n\toptions = options || {};\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.renderTiddler(\"text/plain\",title,{variables: options.variables});\n};\n\nexports.Language = Language;\n\n})();\n",
"title": "$:/core/modules/language.js",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/macros/changecount.js": {
"text": "/*\\\ntitle: $:/core/modules/macros/changecount.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the changecount for the current tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"changecount\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn this.wiki.getChangeCount(this.getVariable(\"currentTiddler\")) + \"\";\n};\n\n})();\n",
"title": "$:/core/modules/macros/changecount.js",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/contrastcolour.js": {
"text": "/*\\\ntitle: $:/core/modules/macros/contrastcolour.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to choose which of two colours has the highest contrast with a base colour\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"contrastcolour\";\n\nexports.params = [\n\t{name: \"target\"},\n\t{name: \"fallbackTarget\"},\n\t{name: \"colourA\"},\n\t{name: \"colourB\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(target,fallbackTarget,colourA,colourB) {\n\tvar rgbTarget = $tw.utils.parseCSSColor(target) || $tw.utils.parseCSSColor(fallbackTarget);\n\tif(!rgbTarget) {\n\t\treturn colourA;\n\t}\n\t// Colour brightness formula derived from http://www.w3.org/WAI/ER/WD-AERT/#color-contrast\n\tvar rgbColourA = $tw.utils.parseCSSColor(colourA),\n\t\trgbColourB = $tw.utils.parseCSSColor(colourB),\n\t\tbrightnessTarget = rgbTarget[0] * 0.299 + rgbTarget[1] * 0.587 + rgbTarget[2] * 0.114,\n\t\tbrightnessA = rgbColourA[0] * 0.299 + rgbColourA[1] * 0.587 + rgbColourA[2] * 0.114,\n\t\tbrightnessB = rgbColourB[0] * 0.299 + rgbColourB[1] * 0.587 + rgbColourB[2] * 0.114;\n\treturn Math.abs(brightnessTarget - brightnessA) > Math.abs(brightnessTarget - brightnessB) ? colourA : colourB;\n};\n\n})();\n",
"title": "$:/core/modules/macros/contrastcolour.js",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/csvtiddlers.js": {
"text": "/*\\\ntitle: $:/core/modules/macros/csvtiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to CSV\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"csvtiddlers\";\n\nexports.params = [\n\t{name: \"filter\"},\n\t{name: \"format\"},\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter,format) {\n\tvar self = this,\n\t\ttiddlers = this.wiki.filterTiddlers(filter),\n\t\ttiddler,\n\t\tfields = [],\n\t\tt,f;\n\t// Collect all the fields\n\tfor(t=0;t<tiddlers.length; t++) {\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\tfor(f in tiddler.fields) {\n\t\t\tif(fields.indexOf(f) === -1) {\n\t\t\t\tfields.push(f);\n\t\t\t}\n\t\t}\n\t}\n\t// Sort the fields and bring the standard ones to the front\n\tfields.sort();\n\t\"title text modified modifier created creator\".split(\" \").reverse().forEach(function(value,index) {\n\t\tvar p = fields.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tfields.splice(p,1);\n\t\t\tfields.unshift(value)\n\t\t}\n\t});\n\t// Output the column headings\n\tvar output = [], row = [];\n\tfields.forEach(function(value) {\n\t\trow.push(quoteAndEscape(value))\n\t});\n\toutput.push(row.join(\",\"));\n\t// Output each tiddler\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\trow = [];\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\t\tfor(f=0; f<fields.length; f++) {\n\t\t\t\trow.push(quoteAndEscape(tiddler ? tiddler.getFieldString(fields[f]) || \"\" : \"\"));\n\t\t\t}\n\t\toutput.push(row.join(\",\"));\n\t}\n\treturn output.join(\"\\n\");\n};\n\nfunction quoteAndEscape(value) {\n\treturn \"\\\"\" + value.replace(/\"/mg,\"\\\"\\\"\") + \"\\\"\";\n}\n\n})();\n",
"title": "$:/core/modules/macros/csvtiddlers.js",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/dumpvariables.js": {
"text": "/*\\\ntitle: $:/core/modules/macros/dumpvariables.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to dump all active variable values\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"dumpvariables\";\n\nexports.params = [\n];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\tvar output = [\"|!Variable |!Value |\"],\n\t\tvariables = [], variable;\n\tfor(variable in this.variables) {\n\t\tvariables.push(variable);\n\t}\n\tvariables.sort();\n\tfor(var index=0; index<variables.length; index++) {\n\t\tvar variable = variables[index];\n\t\toutput.push(\"|\" + variable + \" |<input size=50 value=<<\" + variable + \">>/> |\")\n\t}\n\treturn output.join(\"\\n\");\n};\n\n})();\n",
"title": "$:/core/modules/macros/dumpvariables.js",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/jsontiddlers.js": {
"text": "/*\\\ntitle: $:/core/modules/macros/jsontiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to JSON\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"jsontiddlers\";\n\nexports.params = [\n\t{name: \"filter\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter) {\n\tvar tiddlers = this.wiki.filterTiddlers(filter),\n\t\tdata = [];\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\tvar tiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\tif(tiddler) {\n\t\t\tvar fields = new Object();\n\t\t\tfor(var field in tiddler.fields) {\n\t\t\t\tfields[field] = tiddler.getFieldString(field);\n\t\t\t}\n\t\t\tdata.push(fields);\n\t\t}\n\t}\n\treturn JSON.stringify(data,null,$tw.config.preferences.jsonSpaces);\n};\n\n})();\n",
"title": "$:/core/modules/macros/jsontiddlers.js",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/makedatauri.js": {
"text": "/*\\\ntitle: $:/core/modules/macros/makedatauri.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to convert the content of a tiddler to a data URI\n\n<<makedatauri text:\"Text to be converted\" type:\"text/vnd.tiddlywiki\">>\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"makedatauri\";\n\nexports.params = [\n\t{name: \"text\"},\n\t{name: \"type\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(text,type) {\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar typeInfo = $tw.config.contentTypeInfo[type] || $tw.config.contentTypeInfo[\"text/plain\"],\n\t\tisBase64 = typeInfo.encoding === \"base64\",\n\t\tparts = [];\n\tparts.push(\"data:\");\n\tparts.push(type);\n\tparts.push(isBase64 ? \";base64\" : \"\");\n\tparts.push(\",\");\n\tparts.push(isBase64 ? text : encodeURIComponent(text));\n\treturn parts.join(\"\");\n};\n\n})();\n",
"title": "$:/core/modules/macros/makedatauri.js",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/now.js": {
"text": "/*\\\ntitle: $:/core/modules/macros/now.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return a formatted version of the current time\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"now\";\n\nexports.params = [\n\t{name: \"format\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(format) {\n\treturn $tw.utils.formatDateString(new Date(),format || \"0hh:0mm, DDth MMM YYYY\");\n};\n\n})();\n",
"title": "$:/core/modules/macros/now.js",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/qualify.js": {
"text": "/*\\\ntitle: $:/core/modules/macros/qualify.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to qualify a state tiddler title according\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"qualify\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\treturn title + \"-\" + this.getStateQualifier();\n};\n\n})();\n",
"title": "$:/core/modules/macros/qualify.js",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/version.js": {
"text": "/*\\\ntitle: $:/core/modules/macros/version.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the TiddlyWiki core version number\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"version\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn $tw.version;\n};\n\n})();\n",
"title": "$:/core/modules/macros/version.js",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/parsers/audioparser.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/audioparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe audio parser parses an audio tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar AudioParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"audio\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"audio/ogg\"] = AudioParser;\nexports[\"audio/mpeg\"] = AudioParser;\nexports[\"audio/mp3\"] = AudioParser;\nexports[\"audio/mp4\"] = AudioParser;\n\n})();\n\n",
"title": "$:/core/modules/parsers/audioparser.js",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/csvparser.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/csvparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe CSV text parser processes CSV files into a table wrapped in a scrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar CsvParser = function(type,text,options) {\n\t// Table framework\n\tthis.tree = [{\n\t\t\"type\": \"scrollable\", \"children\": [{\n\t\t\t\"type\": \"element\", \"tag\": \"table\", \"children\": [{\n\t\t\t\t\"type\": \"element\", \"tag\": \"tbody\", \"children\": []\n\t\t\t}], \"attributes\": {\n\t\t\t\t\"class\": {\"type\": \"string\", \"value\": \"tc-csv-table\"}\n\t\t\t}\n\t\t}]\n\t}];\n\t// Split the text into lines\n\tvar lines = text.split(/\\r?\\n/mg),\n\t\ttag = \"th\";\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar lineText = lines[line];\n\t\tif(lineText) {\n\t\t\tvar row = {\n\t\t\t\t\t\"type\": \"element\", \"tag\": \"tr\", \"children\": []\n\t\t\t\t};\n\t\t\tvar columns = lineText.split(\",\");\n\t\t\tfor(var column=0; column<columns.length; column++) {\n\t\t\t\trow.children.push({\n\t\t\t\t\t\t\"type\": \"element\", \"tag\": tag, \"children\": [{\n\t\t\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\t\t\"text\": columns[column]\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t}\n\t\t\ttag = \"td\";\n\t\t\tthis.tree[0].children[0].children[0].children.push(row);\n\t\t}\n\t}\n};\n\nexports[\"text/csv\"] = CsvParser;\n\n})();\n\n",
"title": "$:/core/modules/parsers/csvparser.js",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/htmlparser.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/htmlparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe HTML parser displays text as raw HTML\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HtmlParser = function(type,text,options) {\n\tvar src;\n\tif(options._canonical_uri) {\n\t\tsrc = options._canonical_uri;\n\t} else if(text) {\n\t\tsrc = \"data:text/html;charset=utf-8,\" + encodeURIComponent(text);\n\t}\n\tthis.tree = [{\n\t\ttype: \"element\",\n\t\ttag: \"iframe\",\n\t\tattributes: {\n\t\t\tsrc: {type: \"string\", value: src}\n\t\t}\n\t}];\n};\n\nexports[\"text/html\"] = HtmlParser;\n\n})();\n\n",
"title": "$:/core/modules/parsers/htmlparser.js",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/imageparser.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/imageparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe image parser parses an image into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"img\",\n\t\t\tattributes: {}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t\tif(type === \"application/pdf\" || type === \".pdf\") {\n\t\t\telement.tag = \"embed\";\n\t\t}\n\t} else if(text) {\n\t\tif(type === \"application/pdf\" || type === \".pdf\") {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:application/pdf;base64,\" + text};\n\t\t\telement.tag = \"embed\";\n\t\t} else if(type === \"image/svg+xml\" || type === \".svg\") {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:image/svg+xml,\" + encodeURIComponent(text)};\n\t\t} else {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t\t}\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"image/svg+xml\"] = ImageParser;\nexports[\"image/jpg\"] = ImageParser;\nexports[\"image/jpeg\"] = ImageParser;\nexports[\"image/png\"] = ImageParser;\nexports[\"image/gif\"] = ImageParser;\nexports[\"application/pdf\"] = ImageParser;\nexports[\"image/x-icon\"] = ImageParser;\n\n})();\n\n",
"title": "$:/core/modules/parsers/imageparser.js",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/utils/parseutils.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/parseutils.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions concerned with parsing text into tokens.\n\nMost functions have the following pattern:\n\n* The parameters are:\n** `source`: the source string being parsed\n** `pos`: the current parse position within the string\n** Any further parameters are used to identify the token that is being parsed\n* The return value is:\n** null if the token was not found at the specified position\n** an object representing the token with the following standard fields:\n*** `type`: string indicating the type of the token\n*** `start`: start position of the token in the source string\n*** `end`: end position of the token in the source string\n*** Any further fields required to describe the token\n\nThe exception is `skipWhiteSpace`, which just returns the position after the whitespace.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for a whitespace token. Returns null if not found, otherwise returns {type: \"whitespace\", start:, end:,}\n*/\nexports.parseWhiteSpace = function(source,pos) {\n\tvar node = {\n\t\ttype: \"whitespace\",\n\t\tstart: pos\n\t};\n\tvar re = /(\\s)+/g;\n\tre.lastIndex = pos;\n\tvar match = re.exec(source);\n\tif(match && match.index === pos) {\n\t\tnode.end = pos + match[0].length;\n\t\treturn node;\n\t}\n\treturn null;\n};\n\n/*\nConvenience wrapper for parseWhiteSpace. Returns the position after the whitespace\n*/\nexports.skipWhiteSpace = function(source,pos) {\n\tvar whitespace = $tw.utils.parseWhiteSpace(source,pos);\n\tif(whitespace) {\n\t\treturn whitespace.end;\n\t}\n\treturn pos;\n};\n\n/*\nLook for a given string token. Returns null if not found, otherwise returns {type: \"token\", value:, start:, end:,}\n*/\nexports.parseTokenString = function(source,pos,token) {\n\tvar match = source.indexOf(token,pos) === pos;\n\tif(match) {\n\t\treturn {\n\t\t\ttype: \"token\",\n\t\t\tvalue: token,\n\t\t\tstart: pos,\n\t\t\tend: pos + token.length\n\t\t};\n\t}\n\treturn null;\n};\n\n/*\nLook for a token matching a regex. Returns null if not found, otherwise returns {type: \"regexp\", match:, start:, end:,}\n*/\nexports.parseTokenRegExp = function(source,pos,reToken) {\n\tvar node = {\n\t\ttype: \"regexp\",\n\t\tstart: pos\n\t};\n\treToken.lastIndex = pos;\n\tnode.match = reToken.exec(source);\n\tif(node.match && node.match.index === pos) {\n\t\tnode.end = pos + node.match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a string literal. Returns null if not found, otherwise returns {type: \"string\", value:, start:, end:,}\n*/\nexports.parseStringLiteral = function(source,pos) {\n\tvar node = {\n\t\ttype: \"string\",\n\t\tstart: pos\n\t};\n\tvar reString = /(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\")|(?:'([^']*)')/g;\n\treString.lastIndex = pos;\n\tvar match = reString.exec(source);\n\tif(match && match.index === pos) {\n\t\tnode.value = match[1] !== undefined ? match[1] :(\n\t\t\tmatch[2] !== undefined ? match[2] : match[3] \n\t\t\t\t\t);\n\t\tnode.end = pos + match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a macro invocation parameter. Returns null if not found, or {type: \"macro-parameter\", name:, value:, start:, end:}\n*/\nexports.parseMacroParameter = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macro-parameter\",\n\t\tstart: pos\n\t};\n\t// Define our regexp\n\tvar reMacroParameter = /(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\\s>\"'=]+)))/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the parameter\n\tvar token = $tw.utils.parseTokenRegExp(source,pos,reMacroParameter);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the parameter details\n\tnode.value = token.match[2] !== undefined ? token.match[2] : (\n\t\t\t\t\ttoken.match[3] !== undefined ? token.match[3] : (\n\t\t\t\t\t\ttoken.match[4] !== undefined ? token.match[4] : (\n\t\t\t\t\t\t\ttoken.match[5] !== undefined ? token.match[5] : (\n\t\t\t\t\t\t\t\ttoken.match[6] !== undefined ? token.match[6] : (\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\tif(token.match[1]) {\n\t\tnode.name = token.match[1];\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for a macro invocation. Returns null if not found, or {type: \"macrocall\", name:, parameters:, start:, end:}\n*/\nexports.parseMacroInvocation = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macrocall\",\n\t\tstart: pos,\n\t\tparams: []\n\t};\n\t// Define our regexps\n\tvar reMacroName = /([^\\s>\"'=]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double less than sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"<<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the macro name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reMacroName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Process parameters\n\tvar parameter = $tw.utils.parseMacroParameter(source,pos);\n\twhile(parameter) {\n\t\tnode.params.push(parameter);\n\t\tpos = parameter.end;\n\t\t// Get the next parameter\n\t\tparameter = $tw.utils.parseMacroParameter(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">>\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for an HTML attribute definition. Returns null if not found, otherwise returns {type: \"attribute\", name:, valueType: \"string|indirect|macro\", value:, start:, end:,}\n*/\nexports.parseAttribute = function(source,pos) {\n\tvar node = {\n\t\tstart: pos\n\t};\n\t// Define our regexps\n\tvar reAttributeName = /([^\\/\\s>\"'=]+)/g,\n\t\treUnquotedAttribute = /([^\\/\\s<>\"'=]+)/g,\n\t\treIndirectValue = /\\{\\{([^\\}]+)\\}\\}/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the attribute name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reAttributeName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for an equals sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"=\");\n\tif(token) {\n\t\tpos = token.end;\n\t\t// Skip whitespace\n\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t// Look for a string literal\n\t\tvar stringLiteral = $tw.utils.parseStringLiteral(source,pos);\n\t\tif(stringLiteral) {\n\t\t\tpos = stringLiteral.end;\n\t\t\tnode.type = \"string\";\n\t\t\tnode.value = stringLiteral.value;\n\t\t} else {\n\t\t\t// Look for an indirect value\n\t\t\tvar indirectValue = $tw.utils.parseTokenRegExp(source,pos,reIndirectValue);\n\t\t\tif(indirectValue) {\n\t\t\t\tpos = indirectValue.end;\n\t\t\t\tnode.type = \"indirect\";\n\t\t\t\tnode.textReference = indirectValue.match[1];\n\t\t\t} else {\n\t\t\t\t// Look for a unquoted value\n\t\t\t\tvar unquotedValue = $tw.utils.parseTokenRegExp(source,pos,reUnquotedAttribute);\n\t\t\t\tif(unquotedValue) {\n\t\t\t\t\tpos = unquotedValue.end;\n\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\tnode.value = unquotedValue.match[1];\n\t\t\t\t} else {\n\t\t\t\t\t// Look for a macro invocation value\n\t\t\t\t\tvar macroInvocation = $tw.utils.parseMacroInvocation(source,pos);\n\t\t\t\t\tif(macroInvocation) {\n\t\t\t\t\t\tpos = macroInvocation.end;\n\t\t\t\t\t\tnode.type = \"macro\";\n\t\t\t\t\t\tnode.value = macroInvocation;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\tnode.value = \"true\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tnode.type = \"string\";\n\t\tnode.value = \"true\";\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
"title": "$:/core/modules/utils/parseutils.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/parsers/textparser.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/textparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe plain text parser processes blocks of source text into a degenerate parse tree consisting of a single text node\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar TextParser = function(type,text,options) {\n\tthis.tree = [{\n\t\ttype: \"codeblock\",\n\t\tattributes: {\n\t\t\tcode: {type: \"string\", value: text},\n\t\t\tlanguage: {type: \"string\", value: type}\n\t\t}\n\t}];\n};\n\nexports[\"text/plain\"] = TextParser;\nexports[\"text/x-tiddlywiki\"] = TextParser;\nexports[\"application/javascript\"] = TextParser;\nexports[\"application/json\"] = TextParser;\nexports[\"text/css\"] = TextParser;\nexports[\"application/x-tiddler-dictionary\"] = TextParser;\n\n})();\n\n",
"title": "$:/core/modules/parsers/textparser.js",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/wikiparser/rules/codeblock.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for code blocks. For example:\n\n```\n\t```\n\tThis text will not be //wikified//\n\t```\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match and get language if defined\n\tthis.matchRegExp = /```([\\w-]*)\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\\r?\\n```$)/mg;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Return the $codeblock widget\n\treturn [{\n\t\t\ttype: \"codeblock\",\n\t\t\tattributes: {\n\t\t\t\t\tcode: {type: \"string\", value: text},\n\t\t\t\t\tlanguage: {type: \"string\", value: this.match[1]}\n\t\t\t}\n\t}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/codeblock.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/codeinline.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for code runs. For example:\n\n```\n\tThis is a `code run`.\n\tThis is another ``code run``\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(``?)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar reEnd = new RegExp(this.match[1], \"mg\");\n\t// Look for the end marker\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the text\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"code\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: text\n\t\t}]\n\t}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/codeinline.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/commentblock.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/commentblock.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/commentinline.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/commentinline.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/dash.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/dash.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for dashes. For example:\n\n```\nThis is an en-dash: --\n\nThis is an em-dash: ---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"dash\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{2,3}(?!-)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar dash = this.match[0].length === 2 ? \"–\" : \"—\";\n\treturn [{\n\t\ttype: \"entity\",\n\t\tentity: dash\n\t}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/dash.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/bold.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - bold. For example:\n\n```\n\tThis is ''bold'' text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except bold \n\\rules only bold \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"bold\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /''/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/''/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strong\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/italic.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - italic. For example:\n\n```\n\tThis is //italic// text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except italic\n\\rules only italic\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"italic\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\/\\//mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\/\\//mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"em\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - strikethrough. For example:\n\n```\n\tThis is ~~strikethrough~~ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except strikethrough \n\\rules only strikethrough \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"strikethrough\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~~/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/~~/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strike\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - subscript. For example:\n\n```\n\tThis is ,,subscript,, text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except subscript \n\\rules only subscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"subscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /,,/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/,,/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sub\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - superscript. For example:\n\n```\n\tThis is ^^superscript^^ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except superscript \n\\rules only superscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"superscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\^\\^/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\^\\^/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sup\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - underscore. For example:\n\n```\n\tThis is __underscore__ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except underscore \n\\rules only underscore\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"underscore\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /__/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/__/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"u\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/entity.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/entity.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML entities. For example:\n\n```\n\tThis is a copyright symbol: ©\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"entity\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(&#?[a-zA-Z0-9]{2,8};)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar entityString = this.match[1];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Return the entity\n\treturn [{type: \"entity\", entity: this.match[0]}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/entity.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/extlink.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/extlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\nAn external link: http://www.tiddlywiki.com/\n\nA suppressed external link: ~http://www.tiddlyspace.com/\n```\n\nExternal links can be suppressed by preceding them with `~`.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"extlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~?(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|'\"\\\\^~]+(?:\\/|\\b)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(this.match[0].substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: this.match[0].substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: this.match[0]},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: this.match[0]\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/extlink.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t},\n\t\tisBlock: true\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t}\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for marking areas with hard line breaks. For example:\n\n```\n\"\"\"\nThis is some text\nThat is set like\nIt is a Poem\nWhen it is\nClearly\nNot\n\"\"\"\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"hardlinebreaks\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\"\"\"(?:\\r?\\n)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\"\"\")|(\\r?\\n)/mg,\n\t\ttree = [],\n\t\tmatch;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tdo {\n\t\t// Parse the run up to the terminator\n\t\ttree.push.apply(tree,this.parser.parseInlineRun(reEnd,{eatTerminator: false}));\n\t\t// Redo the terminator match\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tmatch = reEnd.exec(this.parser.source);\n\t\tif(match) {\n\t\t\tthis.parser.pos = reEnd.lastIndex;\n\t\t\t// Add a line break if the terminator was a line break\n\t\t\tif(match[2]) {\n\t\t\t\ttree.push({type: \"element\", tag: \"br\"});\n\t\t\t}\n\t\t}\n\t} while(match && !match[1]);\n\t// Return the nodes\n\treturn tree;\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/heading.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/heading.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for headings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"heading\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(!{1,6})/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar headingLevel = this.match[1].length;\n\t// Move past the !s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse any classes, whitespace and then the heading itself\n\tvar classes = this.parser.parseClasses();\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// Return the heading\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"h\" + headingLevel, \n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: classes.join(\" \")}\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/heading.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/horizrule.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/horizrule.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for rules. For example:\n\n```\n---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"horizrule\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{3,}\\r?(?:\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\treturn [{type: \"element\", tag: \"hr\"}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/horizrule.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/html.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/html.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for HTML elements and widgets. For example:\n\n{{{\n<aside>\nThis is an HTML5 aside element\n</aside>\n\n<$slider target=\"MyTiddler\">\nThis is a widget invocation\n</$slider>\n\n}}}\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"html\";\nexports.types = {inline: true, block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextTag = this.findNextTag(this.parser.source,startPos,{\n\t\trequireLineBreak: this.is.block\n\t});\n\treturn this.nextTag ? this.nextTag.start : undefined;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Retrieve the most recent match so that recursive calls don't overwrite it\n\tvar tag = this.nextTag;\n\tthis.nextTag = null;\n\t// Advance the parser position to past the tag\n\tthis.parser.pos = tag.end;\n\t// Check for an immediately following double linebreak\n\tvar hasLineBreak = !tag.isSelfClosing && !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t// Set whether we're in block mode\n\ttag.isBlock = this.is.block || hasLineBreak;\n\t// Parse the body if we need to\n\tif(!tag.isSelfClosing && $tw.config.htmlVoidElements.indexOf(tag.tag) === -1) {\n\t\t\tvar reEndString = \"</\" + $tw.utils.escapeRegExp(tag.tag) + \">\",\n\t\t\t\treEnd = new RegExp(\"(\" + reEndString + \")\",\"mg\");\n\t\tif(hasLineBreak) {\n\t\t\ttag.children = this.parser.parseBlocks(reEndString);\n\t\t} else {\n\t\t\ttag.children = this.parser.parseInlineRun(reEnd);\n\t\t}\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tvar endMatch = reEnd.exec(this.parser.source);\n\t\tif(endMatch && endMatch.index === this.parser.pos) {\n\t\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t\t}\n\t}\n\t// Return the tag\n\treturn [tag];\n};\n\n/*\nLook for an HTML tag. Returns null if not found, otherwise returns {type: \"element\", name:, attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseTag = function(source,pos,options) {\n\toptions = options || {};\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Define our regexps\n\tvar reTagName = /([a-zA-Z0-9\\-\\$]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a less than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\"<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the tag name\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,reTagName);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tnode.tag = token.match[1];\n\tif(node.tag.charAt(0) === \"$\") {\n\t\tnode.type = node.tag.substr(1);\n\t}\n\tpos = token.end;\n\t// Process attributes\n\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\twhile(attribute) {\n\t\tnode.attributes[attribute.name] = attribute;\n\t\tpos = attribute.end;\n\t\t// Get the next attribute\n\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a closing slash\n\ttoken = $tw.utils.parseTokenString(source,pos,\"/\");\n\tif(token) {\n\t\tpos = token.end;\n\t\tnode.isSelfClosing = true;\n\t}\n\t// Look for a greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Check for a required line break\n\tif(options.requireLineBreak) {\n\t\ttoken = $tw.utils.parseTokenRegExp(source,pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t\tif(!token) {\n\t\t\treturn null;\n\t\t}\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\nexports.findNextTag = function(source,pos,options) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /<([a-zA-Z\\-\\$]+)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseTag(source,match.index,options);\n\t\t// Return success\n\t\tif(tag && this.isLegalTag(tag)) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\nexports.isLegalTag = function(tag) {\n\t// Widgets are always OK\n\tif(tag.type !== \"element\") {\n\t\treturn true;\n\t// If it's an HTML tag that starts with a dash then it's not legal\n\t} else if(tag.tag.charAt(0) === \"-\") {\n\t\treturn false;\n\t} else {\n\t\t// Otherwise it's OK\n\t\treturn true;\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/html.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/image.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/image.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for embedding images. For example:\n\n```\n[img[http://tiddlywiki.com/fractalveg.jpg]]\n[img width=23 height=24 [http://tiddlywiki.com/fractalveg.jpg]]\n[img width={{!!width}} height={{!!height}} [http://tiddlywiki.com/fractalveg.jpg]]\n[img[Description of image|http://tiddlywiki.com/fractalveg.jpg]]\n[img[TiddlerTitle]]\n[img[Description of image|TiddlerTitle]]\n```\n\nGenerates the `<$image>` widget.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"image\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextImage = this.findNextImage(this.parser.source,startPos);\n\treturn this.nextImage ? this.nextImage.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextImage.end;\n\tvar node = {\n\t\ttype: \"image\",\n\t\tattributes: this.nextImage.attributes\n\t};\n\treturn [node];\n};\n\n/*\nFind the next image from the current position\n*/\nexports.findNextImage = function(source,pos) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /(\\[img)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseImage(source,match.index);\n\t\t// Return success\n\t\tif(tag) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an image at the specified position. Returns null if not found, otherwise returns {type: \"image\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseImage = function(source,pos) {\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"image\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[img`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[img\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Process attributes\n\tif(source.charAt(pos) !== \"[\") {\n\t\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\t\twhile(attribute) {\n\t\t\tnode.attributes[attribute.name] = attribute;\n\t\t\tpos = attribute.end;\n\t\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t\tif(source.charAt(pos) !== \"[\") {\n\t\t\t\t// Get the next attribute\n\t\t\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t\t\t} else {\n\t\t\t\tattribute = null;\n\t\t\t}\n\t\t}\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[` after the attributes\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the source up to the terminating `]]`\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,/(?:([^|\\]]*?)\\|)?([^\\]]+?)\\]\\]/g);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\tif(token.match[1]) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: token.match[1].trim()};\n\t}\n\tnode.attributes.source = {type: \"string\", value: (token.match[2] || \"\").trim()};\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/image.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/list.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/list.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for lists. For example:\n\n```\n* This is an unordered list\n* It has two items\n\n# This is a numbered list\n## With a subitem\n# And a third item\n\n; This is a term that is being defined\n: This is the definition of that term\n```\n\nNote that lists can be nested arbitrarily:\n\n```\n#** One\n#* Two\n#** Three\n#**** Four\n#**# Five\n#**## Six\n## Seven\n### Eight\n## Nine\n```\n\nA CSS class can be applied to a list item as follows:\n\n```\n* List item one\n*.active List item two has the class `active`\n* List item three\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"list\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /([\\*#;:>]+)/mg;\n};\n\nvar listTypes = {\n\t\"*\": {listTag: \"ul\", itemTag: \"li\"},\n\t\"#\": {listTag: \"ol\", itemTag: \"li\"},\n\t\";\": {listTag: \"dl\", itemTag: \"dt\"},\n\t\":\": {listTag: \"dl\", itemTag: \"dd\"},\n\t\">\": {listTag: \"blockquote\", itemTag: \"p\"}\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Array of parse tree nodes for the previous row of the list\n\tvar listStack = [];\n\t// Cycle through the items in the list\n\twhile(true) {\n\t\t// Match the list marker\n\t\tvar reMatch = /([\\*#;:>]+)/mg;\n\t\treMatch.lastIndex = this.parser.pos;\n\t\tvar match = reMatch.exec(this.parser.source);\n\t\tif(!match || match.index !== this.parser.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check whether the list type of the top level matches\n\t\tvar listInfo = listTypes[match[0].charAt(0)];\n\t\tif(listStack.length > 0 && listStack[0].tag !== listInfo.listTag) {\n\t\t\tbreak;\n\t\t}\n\t\t// Move past the list marker\n\t\tthis.parser.pos = match.index + match[0].length;\n\t\t// Walk through the list markers for the current row\n\t\tfor(var t=0; t<match[0].length; t++) {\n\t\t\tlistInfo = listTypes[match[0].charAt(t)];\n\t\t\t// Remove any stacked up element if we can't re-use it because the list type doesn't match\n\t\t\tif(listStack.length > t && listStack[t].tag !== listInfo.listTag) {\n\t\t\t\tlistStack.splice(t,listStack.length - t);\n\t\t\t}\n\t\t\t// Construct the list element or reuse the previous one at this level\n\t\t\tif(listStack.length <= t) {\n\t\t\t\tvar listElement = {type: \"element\", tag: listInfo.listTag, children: [\n\t\t\t\t\t{type: \"element\", tag: listInfo.itemTag, children: []}\n\t\t\t\t]};\n\t\t\t\t// Link this list element into the last child item of the parent list item\n\t\t\t\tif(t) {\n\t\t\t\t\tvar prevListItem = listStack[t-1].children[listStack[t-1].children.length-1];\n\t\t\t\t\tprevListItem.children.push(listElement);\n\t\t\t\t}\n\t\t\t\t// Save this element in the stack\n\t\t\t\tlistStack[t] = listElement;\n\t\t\t} else if(t === (match[0].length - 1)) {\n\t\t\t\tlistStack[t].children.push({type: \"element\", tag: listInfo.itemTag, children: []});\n\t\t\t}\n\t\t}\n\t\tif(listStack.length > match[0].length) {\n\t\t\tlistStack.splice(match[0].length,listStack.length - match[0].length);\n\t\t}\n\t\t// Process the body of the list item into the last list item\n\t\tvar lastListChildren = listStack[listStack.length-1].children,\n\t\t\tlastListItem = lastListChildren[lastListChildren.length-1],\n\t\t\tclasses = this.parser.parseClasses();\n\t\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\t\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t\tlastListItem.children.push.apply(lastListItem.children,tree);\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(lastListItem,classes.join(\" \"));\n\t\t}\n\t\t// Consume any whitespace following the list item\n\t\tthis.parser.skipWhitespace();\n\t}\n\t// Return the root element of the list\n\treturn [listStack[0]];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/list.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrocallblock.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for block macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^>\\s]+)(?:\\s*)((?:[^>]|(?:>(?!>)))*?)>>(?:\\r?\\n|$)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params,\n\t\tisBlock: true\n\t}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/macrocallblock.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrocallinline.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^\\s>]+)\\s*([\\s\\S]*?)>>/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5]|| paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params\n\t}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/macrocallinline.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrodef.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrodef.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for macro definitions\n\n```\n\\define name(param:defaultvalue,param2:defaultvalue)\ndefinition text, including $param$ markers\n\\end\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrodef\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\define\\s+([^(\\s]+)\\(\\s*([^)]*)\\)(\\s*\\r?\\n)?/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the macro name and parameters\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the parameters\n\tvar paramString = this.match[2],\n\t\tparams = [];\n\tif(paramString !== \"\") {\n\t\tvar reParam = /\\s*([A-Za-z0-9\\-_]+)(?:\\s*:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))?/mg,\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\twhile(paramMatch) {\n\t\t\t// Save the parameter details\n\t\t\tvar paramInfo = {name: paramMatch[1]},\n\t\t\t\tdefaultValue = paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6];\n\t\t\tif(defaultValue) {\n\t\t\t\tparamInfo[\"default\"] = defaultValue;\n\t\t\t}\n\t\t\tparams.push(paramInfo);\n\t\t\t// Look for the next parameter\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\t}\n\t}\n\t// Is this a multiline definition?\n\tvar reEnd;\n\tif(this.match[3]) {\n\t\t// If so, the end of the body is marked with \\end\n\t\treEnd = /(\\r?\\n\\\\end[^\\S\\n\\r]*(?:$|\\r?\\n))/mg;\n\t} else {\n\t\t// Otherwise, the end of the definition is marked by the end of the line\n\t\treEnd = /(\\r?\\n)/mg;\n\t\t// Move past any whitespace\n\t\tthis.parser.pos = $tw.utils.skipWhiteSpace(this.parser.source,this.parser.pos);\n\t}\n\t// Find the end of the definition\n\treEnd.lastIndex = this.parser.pos;\n\tvar text,\n\t\tendMatch = reEnd.exec(this.parser.source);\n\tif(endMatch) {\n\t\ttext = this.parser.source.substring(this.parser.pos,endMatch.index);\n\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t} else {\n\t\t// We didn't find the end of the definition, so we'll make it blank\n\t\ttext = \"\";\n\t}\n\t// Save the macro definition\n\treturn [{\n\t\ttype: \"macrodef\",\n\t\tname: this.match[1],\n\t\tparams: params,\n\t\ttext: text\n\t}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/macrodef.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/prettyextlink.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettyextlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\n[ext[http://tiddlywiki.com/fractalveg.jpg]]\n[ext[Tooltip|http://tiddlywiki.com/fractalveg.jpg]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettyextlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextLink = this.findNextLink(this.parser.source,startPos);\n\treturn this.nextLink ? this.nextLink.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextLink.end;\n\treturn [this.nextLink];\n};\n\n/*\nFind the next link from the current position\n*/\nexports.findNextLink = function(source,pos) {\n\t// A regexp for finding candidate links\n\tvar reLookahead = /(\\[ext\\[)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a link\n\t\tvar link = this.parseLink(source,match.index);\n\t\t// Return success\n\t\tif(link) {\n\t\t\treturn link;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an link at the specified position. Returns null if not found, otherwise returns {type: \"element\", tag: \"a\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseLink = function(source,pos) {\n\tvar token,\n\t\ttextNode = {\n\t\t\ttype: \"text\"\n\t\t},\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tstart: pos,\n\t\t\tattributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t},\n\t\t\tchildren: [textNode]\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[ext[`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[ext[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Look ahead for the terminating `]]`\n\tvar closePos = source.indexOf(\"]]\",pos);\n\tif(closePos === -1) {\n\t\treturn null;\n\t}\n\t// Look for a `|` separating the tooltip\n\tvar splitPos = source.indexOf(\"|\",pos);\n\tif(splitPos === -1 || splitPos > closePos) {\n\t\tsplitPos = null;\n\t}\n\t// Pull out the tooltip and URL\n\tvar tooltip, URL;\n\tif(splitPos) {\n\t\tURL = source.substring(splitPos + 1,closePos).trim();\n\t\ttextNode.text = source.substring(pos,splitPos).trim();\n\t} else {\n\t\tURL = source.substring(pos,closePos).trim();\n\t\ttextNode.text = URL;\n\t}\n\tnode.attributes.href = {type: \"string\", value: URL};\n\tnode.attributes.target = {type: \"string\", value: \"_blank\"};\n\t// Update the end position\n\tnode.end = closePos + 2;\n\treturn node;\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/prettyextlink.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/prettylink.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettylink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for pretty links. For example:\n\n```\n[[Introduction]]\n\n[[Link description|TiddlerTitle]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettylink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\[\\[(.*?)(?:\\|(.*?))?\\]\\]/mg;\n};\n\nvar isLinkExternal = function(to) {\n\tvar externalRegExp = /(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|'\"\\\\^~]+(?:\\/|\\b)/i;\n\treturn externalRegExp.test(to);\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Process the link\n\tvar text = this.match[1],\n\t\tlink = this.match[2] || text;\n\tif(isLinkExternal(link)) {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: link},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: link}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/prettylink.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/quoteblock.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/quoteblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for quote blocks. For example:\n\n```\n\t<<<.optionalClass(es) optional cited from\n\ta quote\n\t<<<\n\t\n\t<<<.optionalClass(es)\n\ta quote\n\t<<< optional cited from\n```\n\nQuotes can be quoted by putting more <s\n\n```\n\t<<<\n\tQuote Level 1\n\t\n\t<<<<\n\tQuoteLevel 2\n\t<<<<\n\t\n\t<<<\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"quoteblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(<<<+)/mg;\n};\n\nexports.parse = function() {\n\tvar classes = [\"tc-quote\"];\n\t// Get all the details of the match\n\tvar reEndString = \"^\" + this.match[1] + \"(?!<)\";\n\t// Move past the <s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\n\t// Parse any classes, whitespace and then the optional cite itself\n\tclasses.push.apply(classes, this.parser.parseClasses());\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar cite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// before handling the cite, parse the body of the quote\n\tvar tree= this.parser.parseBlocks(reEndString);\n\t// If we got a cite, put it before the text\n\tif(cite.length > 0) {\n\t\ttree.unshift({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Parse any optional cite\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tcite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// If we got a cite, push it\n\tif(cite.length > 0) {\n\t\ttree.push({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Return the blockquote element\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"blockquote\",\n\t\tattributes: {\n\t\t\tclass: { type: \"string\", value: classes.join(\" \") },\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/quoteblock.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/rules.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/rules.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for rules specifications\n\n```\n\\rules except ruleone ruletwo rulethree\n\\rules only ruleone ruletwo rulethree\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"rules\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\rules[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\tif(tokens.length > 0) {\n\t\tthis.parser.amendRules(tokens[0],tokens.slice(1));\n\t}\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/rules.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/styleblock.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for assigning styles and classes to paragraphs and other blocks. For example:\n\n```\n@@.myClass\n@@background-color:red;\nThis paragraph will have the CSS class `myClass`.\n\n* The `<ul>` around this list will also have the class `myClass`\n* List item 2\n\n@@\n```\n\nNote that classes and styles can be mixed subject to the rule that styles must precede classes. For example\n\n```\n@@.myFirstClass.mySecondClass\n@@width:100px;.myThirdClass\nThis is a paragraph\n@@\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(?:\\.([^\\r\\n\\s]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEndString = \"^@@(?:\\\\r?\\\\n)?\";\n\tvar classes = [], styles = [];\n\tdo {\n\t\t// Get the class and style\n\t\tif(this.match[1]) {\n\t\t\tstyles.push(this.match[1]);\n\t\t}\n\t\tif(this.match[2]) {\n\t\t\tclasses.push(this.match[2].split(\".\").join(\" \"));\n\t\t}\n\t\t// Move past the match\n\t\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\t// Look for another line of classes and styles\n\t\tthis.match = this.matchRegExp.exec(this.parser.source);\n\t} while(this.match && this.match.index === this.parser.pos);\n\t// Parse the body\n\tvar tree = this.parser.parseBlocks(reEndString);\n\tfor(var t=0; t<tree.length; t++) {\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(tree[t],classes.join(\" \"));\n\t\t}\n\t\tif(styles.length > 0) {\n\t\t\t$tw.utils.addAttributeToParseTreeNode(tree[t],\"style\",styles.join(\"\"));\n\t\t}\n\t}\n\treturn tree;\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/styleblock.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/styleinline.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for assigning styles and classes to inline runs. For example:\n\n```\n@@.myClass This is some text with a class@@\n@@background-color:red;This is some text with a background colour@@\n@@width:100px;.myClass This is some text with a class and a width@@\n```\n\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(\\.(?:[^\\r\\n\\s]+)\\s+)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /@@/g;\n\t// Get the styles and class\n\tvar stylesString = this.match[1],\n\t\tclassString = this.match[2] ? this.match[2].split(\".\").join(\" \") : undefined;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the run up to the terminator\n\tvar tree = this.parser.parseInlineRun(reEnd,{eatTerminator: true});\n\t// Return the classed span\n\tvar node = {\n\t\ttype: \"element\",\n\t\ttag: \"span\",\n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: \"tc-inline-style\"}\n\t\t},\n\t\tchildren: tree\n\t};\n\tif(classString) {\n\t\t$tw.utils.addClassToParseTreeNode(node,classString);\n\t}\n\tif(stylesString) {\n\t\t$tw.utils.addAttributeToParseTreeNode(node,\"style\",stylesString);\n\t}\n\treturn [node];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/styleinline.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/table.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/table.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for tables.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"table\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\|(?:[^\\n]*)\\|(?:[fhck]?)\\r?(?:\\n|$)/mg;\n};\n\nvar processRow = function(prevColumns) {\n\tvar cellRegExp = /(?:\\|([^\\n\\|]*)\\|)|(\\|[fhck]?\\r?(?:\\n|$))/mg,\n\t\tcellTermRegExp = /((?:\\x20*)\\|)/mg,\n\t\ttree = [],\n\t\tcol = 0,\n\t\tcolSpanCount = 1,\n\t\tprevCell,\n\t\tvAlign;\n\t// Match a single cell\n\tcellRegExp.lastIndex = this.parser.pos;\n\tvar cellMatch = cellRegExp.exec(this.parser.source);\n\twhile(cellMatch && cellMatch.index === this.parser.pos) {\n\t\tif(cellMatch[1] === \"~\") {\n\t\t\t// Rowspan\n\t\t\tvar last = prevColumns[col];\n\t\t\tif(last) {\n\t\t\t\tlast.rowSpanCount++;\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"rowspan\",last.rowSpanCount);\n\t\t\t\tvAlign = $tw.utils.getAttributeValueFromParseTreeNode(last.element,\"valign\",\"center\");\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"valign\",vAlign);\n\t\t\t\tif(colSpanCount > 1) {\n\t\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"colspan\",colSpanCount);\n\t\t\t\t\tcolSpanCount = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \">\") {\n\t\t\t// Colspan\n\t\t\tcolSpanCount++;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \"<\" && prevCell) {\n\t\t\tcolSpanCount = 1 + $tw.utils.getAttributeValueFromParseTreeNode(prevCell,\"colspan\",1);\n\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\tcolSpanCount = 1;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[2]) {\n\t\t\t// End of row\n\t\t\tif(prevCell && colSpanCount > 1) {\n\t\t\t\tif(prevCell.attributes && prevCell.attributes && prevCell.attributes.colspan) {\n\t\t\t\t\t\tcolSpanCount += prevCell.attributes.colspan.value;\n\t\t\t\t} else {\n\t\t\t\t\tcolSpanCount -= 1;\n\t\t\t\t}\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\t}\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t\tbreak;\n\t\t} else {\n\t\t\t// For ordinary cells, step beyond the opening `|`\n\t\t\tthis.parser.pos++;\n\t\t\t// Look for a space at the start of the cell\n\t\t\tvar spaceLeft = false;\n\t\t\tvAlign = null;\n\t\t\tif(this.parser.source.substr(this.parser.pos).search(/^\\^([^\\^]|\\^\\^)/) === 0) {\n\t\t\t\tvAlign = \"top\";\n\t\t\t} else if(this.parser.source.substr(this.parser.pos).search(/^,([^,]|,,)/) === 0) {\n\t\t\t\tvAlign = \"bottom\";\n\t\t\t}\n\t\t\tif(vAlign) {\n\t\t\t\tthis.parser.pos++;\n\t\t\t}\n\t\t\tvar chr = this.parser.source.substr(this.parser.pos,1);\n\t\t\twhile(chr === \" \") {\n\t\t\t\tspaceLeft = true;\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tchr = this.parser.source.substr(this.parser.pos,1);\n\t\t\t}\n\t\t\t// Check whether this is a heading cell\n\t\t\tvar cell;\n\t\t\tif(chr === \"!\") {\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tcell = {type: \"element\", tag: \"th\", children: []};\n\t\t\t} else {\n\t\t\t\tcell = {type: \"element\", tag: \"td\", children: []};\n\t\t\t}\n\t\t\ttree.push(cell);\n\t\t\t// Record information about this cell\n\t\t\tprevCell = cell;\n\t\t\tprevColumns[col] = {rowSpanCount:1,element:cell};\n\t\t\t// Check for a colspan\n\t\t\tif(colSpanCount > 1) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"colspan\",colSpanCount);\n\t\t\t\tcolSpanCount = 1;\n\t\t\t}\n\t\t\t// Parse the cell\n\t\t\tcell.children = this.parser.parseInlineRun(cellTermRegExp,{eatTerminator: true});\n\t\t\t// Set the alignment for the cell\n\t\t\tif(vAlign) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"valign\",vAlign);\n\t\t\t}\n\t\t\tif(this.parser.source.substr(this.parser.pos - 2,1) === \" \") { // spaceRight\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",spaceLeft ? \"center\" : \"left\");\n\t\t\t} else if(spaceLeft) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",\"right\");\n\t\t\t}\n\t\t\t// Move back to the closing `|`\n\t\t\tthis.parser.pos--;\n\t\t}\n\t\tcol++;\n\t\tcellRegExp.lastIndex = this.parser.pos;\n\t\tcellMatch = cellRegExp.exec(this.parser.source);\n\t}\n\treturn tree;\n};\n\nexports.parse = function() {\n\tvar rowContainerTypes = {\"c\":\"caption\", \"h\":\"thead\", \"\":\"tbody\", \"f\":\"tfoot\"},\n\t\ttable = {type: \"element\", tag: \"table\", children: []},\n\t\trowRegExp = /^\\|([^\\n]*)\\|([fhck]?)\\r?(?:\\n|$)/mg,\n\t\trowTermRegExp = /(\\|(?:[fhck]?)\\r?(?:\\n|$))/mg,\n\t\tprevColumns = [],\n\t\tcurrRowType,\n\t\trowContainer,\n\t\trowCount = 0;\n\t// Match the row\n\trowRegExp.lastIndex = this.parser.pos;\n\tvar rowMatch = rowRegExp.exec(this.parser.source);\n\twhile(rowMatch && rowMatch.index === this.parser.pos) {\n\t\tvar rowType = rowMatch[2];\n\t\t// Check if it is a class assignment\n\t\tif(rowType === \"k\") {\n\t\t\t$tw.utils.addClassToParseTreeNode(table,rowMatch[1]);\n\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t} else {\n\t\t\t// Otherwise, create a new row if this one is of a different type\n\t\t\tif(rowType !== currRowType) {\n\t\t\t\trowContainer = {type: \"element\", tag: rowContainerTypes[rowType], children: []};\n\t\t\t\ttable.children.push(rowContainer);\n\t\t\t\tcurrRowType = rowType;\n\t\t\t}\n\t\t\t// Is this a caption row?\n\t\t\tif(currRowType === \"c\") {\n\t\t\t\t// If so, move past the opening `|` of the row\n\t\t\t\tthis.parser.pos++;\n\t\t\t\t// Move the caption to the first row if it isn't already\n\t\t\t\tif(table.children.length !== 1) {\n\t\t\t\t\ttable.children.pop(); // Take rowContainer out of the children array\n\t\t\t\t\ttable.children.splice(0,0,rowContainer); // Insert it at the bottom\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t// Set the alignment - TODO: figure out why TW did this\n//\t\t\t\trowContainer.attributes.align = rowCount === 0 ? \"top\" : \"bottom\";\n\t\t\t\t// Parse the caption\n\t\t\t\trowContainer.children = this.parser.parseInlineRun(rowTermRegExp,{eatTerminator: true});\n\t\t\t} else {\n\t\t\t\t// Create the row\n\t\t\t\tvar theRow = {type: \"element\", tag: \"tr\", children: []};\n\t\t\t\t$tw.utils.addClassToParseTreeNode(theRow,rowCount%2 ? \"oddRow\" : \"evenRow\");\n\t\t\t\trowContainer.children.push(theRow);\n\t\t\t\t// Process the row\n\t\t\t\ttheRow.children = processRow.call(this,prevColumns);\n\t\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t\t\t// Increment the row count\n\t\t\t\trowCount++;\n\t\t\t}\n\t\t}\n\t\trowMatch = rowRegExp.exec(this.parser.source);\n\t}\n\treturn [table];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/table.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/transcludeblock.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {},\n\t\t\tisBlock: true\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tisBlock: true,\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/transcludeblock.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/transcludeinline.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {}\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/transcludeinline.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/typedblock.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/typedblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for typed blocks. For example:\n\n```\n$$$.js\nThis will be rendered as JavaScript\n$$$\n\n$$$.svg\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"150\" height=\"100\">\n <circle cx=\"100\" cy=\"50\" r=\"40\" stroke=\"black\" stroke-width=\"2\" fill=\"red\" />\n</svg>\n$$$\n\n$$$text/vnd.tiddlywiki>text/html\nThis will be rendered as an //HTML representation// of WikiText\n$$$\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.name = \"typedblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\$\\$\\$([^ >\\r\\n]*)(?: *> *([^ \\r\\n]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /\\r?\\n\\$\\$\\$\\r?(?:\\n|$)/mg;\n\t// Save the type\n\tvar parseType = this.match[1],\n\t\trenderType = this.match[2];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Parse the block according to the specified type\n\tvar parser = this.parser.wiki.parseText(parseType,text,{defaultType: \"text/plain\"});\n\t// If there's no render type, just return the parse tree\n\tif(!renderType) {\n\t\treturn parser.tree;\n\t} else {\n\t\t// Otherwise, render to the rendertype and return in a <PRE> tag\n\t\tvar widgetNode = this.parser.wiki.makeWidget(parser),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\ttext = renderType === \"text/html\" ? container.innerHTML : container.textContent;\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"pre\",\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/typedblock.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/wikilink.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikilink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for wiki links. For example:\n\n```\nAWikiLink\nAnotherLink\n~SuppressedLink\n```\n\nPrecede a camel case word with `~` to prevent it from being recognised as a link.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"wikilink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp($tw.config.textPrimitives.unWikiLink + \"?\" + $tw.config.textPrimitives.wikiLink,\"mg\");\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get the details of the match\n\tvar linkText = this.match[0];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// If the link starts with the unwikilink character then just output it as plain text\n\tif(linkText.substr(0,1) === $tw.config.textPrimitives.unWikiLink) {\n\t\treturn [{type: \"text\", text: linkText.substr(1)}];\n\t}\n\t// If the link has been preceded with a blocked letter then don't treat it as a link\n\tif(this.match.index > 0) {\n\t\tvar preRegExp = new RegExp($tw.config.textPrimitives.blockPrefixLetters,\"mg\");\n\t\tpreRegExp.lastIndex = this.match.index-1;\n\t\tvar preMatch = preRegExp.exec(this.parser.source);\n\t\tif(preMatch && preMatch.index === this.match.index-1) {\n\t\t\treturn [{type: \"text\", text: linkText}];\n\t\t}\n\t}\n\treturn [{\n\t\ttype: \"link\",\n\t\tattributes: {\n\t\t\tto: {type: \"string\", value: linkText}\n\t\t},\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: linkText\n\t\t}]\n\t}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/wikilink.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/wikiparser.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/wikiparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe wiki text parser processes blocks of source text into a parse tree.\n\nThe parse tree is made up of nested arrays of these JavaScript objects:\n\n\t{type: \"element\", tag: <string>, attributes: {}, children: []} - an HTML element\n\t{type: \"text\", text: <string>} - a text node\n\t{type: \"entity\", value: <string>} - an entity\n\t{type: \"raw\", html: <string>} - raw HTML\n\nAttributes are stored as hashmaps of the following objects:\n\n\t{type: \"string\", value: <string>} - literal string\n\t{type: \"indirect\", textReference: <textReference>} - indirect through a text reference\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar WikiParser = function(type,text,options) {\n\tthis.wiki = options.wiki;\n\t// Initialise the classes if we don't have them already\n\tif(!this.pragmaRuleClasses) {\n\t\tWikiParser.prototype.pragmaRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"pragma\",$tw.WikiRuleBase);\n\t}\n\tif(!this.blockRuleClasses) {\n\t\tWikiParser.prototype.blockRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"block\",$tw.WikiRuleBase);\n\t}\n\tif(!this.inlineRuleClasses) {\n\t\tWikiParser.prototype.inlineRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"inline\",$tw.WikiRuleBase);\n\t}\n\t// Save the parse text\n\tthis.type = type || \"text/vnd.tiddlywiki\";\n\tthis.source = text || \"\";\n\tthis.sourceLength = this.source.length;\n\t// Set current parse position\n\tthis.pos = 0;\n\t// Instantiate the pragma parse rules\n\tthis.pragmaRules = this.instantiateRules(this.pragmaRuleClasses,\"pragma\",0);\n\t// Instantiate the parser block and inline rules\n\tthis.blockRules = this.instantiateRules(this.blockRuleClasses,\"block\",0);\n\tthis.inlineRules = this.instantiateRules(this.inlineRuleClasses,\"inline\",0);\n\t// Parse any pragmas\n\tthis.tree = this.parsePragmas();\n\t// Parse the text into inline runs or blocks\n\tif(options.parseAsInline) {\n\t\tthis.tree.push.apply(this.tree,this.parseInlineRun());\n\t} else {\n\t\tthis.tree.push.apply(this.tree,this.parseBlocks());\n\t}\n\t// Return the parse tree\n};\n\n/*\nInstantiate an array of parse rules\n*/\nWikiParser.prototype.instantiateRules = function(classes,type,startPos) {\n\tvar rulesInfo = [],\n\t\tself = this;\n\t$tw.utils.each(classes,function(RuleClass) {\n\t\t// Instantiate the rule\n\t\tvar rule = new RuleClass(self);\n\t\trule.is = {};\n\t\trule.is[type] = true;\n\t\trule.init(self);\n\t\tvar matchIndex = rule.findNextMatch(startPos);\n\t\tif(matchIndex !== undefined) {\n\t\t\trulesInfo.push({\n\t\t\t\trule: rule,\n\t\t\t\tmatchIndex: matchIndex\n\t\t\t});\n\t\t}\n\t});\n\treturn rulesInfo;\n};\n\n/*\nSkip any whitespace at the current position. Options are:\n\ttreatNewlinesAsNonWhitespace: true if newlines are NOT to be treated as whitespace\n*/\nWikiParser.prototype.skipWhitespace = function(options) {\n\toptions = options || {};\n\tvar whitespaceRegExp = options.treatNewlinesAsNonWhitespace ? /([^\\S\\n]+)/mg : /(\\s+)/mg;\n\twhitespaceRegExp.lastIndex = this.pos;\n\tvar whitespaceMatch = whitespaceRegExp.exec(this.source);\n\tif(whitespaceMatch && whitespaceMatch.index === this.pos) {\n\t\tthis.pos = whitespaceRegExp.lastIndex;\n\t}\n};\n\n/*\nGet the next match out of an array of parse rule instances\n*/\nWikiParser.prototype.findNextMatch = function(rules,startPos) {\n\t// Find the best matching rule by finding the closest match position\n\tvar matchingRule,\n\t\tmatchingRulePos = this.sourceLength;\n\t// Step through each rule\n\tfor(var t=0; t<rules.length; t++) {\n\t\tvar ruleInfo = rules[t];\n\t\t// Ask the rule to get the next match if we've moved past the current one\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex < startPos) {\n\t\t\truleInfo.matchIndex = ruleInfo.rule.findNextMatch(startPos);\n\t\t}\n\t\t// Adopt this match if it's closer than the current best match\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex <= matchingRulePos) {\n\t\t\tmatchingRule = ruleInfo;\n\t\t\tmatchingRulePos = ruleInfo.matchIndex;\n\t\t}\n\t}\n\treturn matchingRule;\n};\n\n/*\nParse any pragmas at the beginning of a block of parse text\n*/\nWikiParser.prototype.parsePragmas = function() {\n\tvar tree = [];\n\twhile(true) {\n\t\t// Skip whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check for the end of the text\n\t\tif(this.pos >= this.sourceLength) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check if we've arrived at a pragma rule match\n\t\tvar nextMatch = this.findNextMatch(this.pragmaRules,this.pos);\n\t\t// If not, just exit\n\t\tif(!nextMatch || nextMatch.matchIndex !== this.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the pragma rule\n\t\ttree.push.apply(tree,nextMatch.rule.parse());\n\t}\n\treturn tree;\n};\n\n/*\nParse a block from the current position\n\tterminatorRegExpString: optional regular expression string that identifies the end of plain paragraphs. Must not include capturing parenthesis\n*/\nWikiParser.prototype.parseBlock = function(terminatorRegExpString) {\n\tvar terminatorRegExp = terminatorRegExpString ? new RegExp(\"(\" + terminatorRegExpString + \"|\\\\r?\\\\n\\\\r?\\\\n)\",\"mg\") : /(\\r?\\n\\r?\\n)/mg;\n\tthis.skipWhitespace();\n\tif(this.pos >= this.sourceLength) {\n\t\treturn [];\n\t}\n\t// Look for a block rule that applies at the current position\n\tvar nextMatch = this.findNextMatch(this.blockRules,this.pos);\n\tif(nextMatch && nextMatch.matchIndex === this.pos) {\n\t\treturn nextMatch.rule.parse();\n\t}\n\t// Treat it as a paragraph if we didn't find a block rule\n\treturn [{type: \"element\", tag: \"p\", children: this.parseInlineRun(terminatorRegExp)}];\n};\n\n/*\nParse a series of blocks of text until a terminating regexp is encountered or the end of the text\n\tterminatorRegExpString: terminating regular expression\n*/\nWikiParser.prototype.parseBlocks = function(terminatorRegExpString) {\n\tif(terminatorRegExpString) {\n\t\treturn this.parseBlocksTerminated(terminatorRegExpString);\n\t} else {\n\t\treturn this.parseBlocksUnterminated();\n\t}\n};\n\n/*\nParse a block from the current position to the end of the text\n*/\nWikiParser.prototype.parseBlocksUnterminated = function() {\n\tvar tree = [];\n\twhile(this.pos < this.sourceLength) {\n\t\ttree.push.apply(tree,this.parseBlock());\n\t}\n\treturn tree;\n};\n\n/*\nParse blocks of text until a terminating regexp is encountered\n*/\nWikiParser.prototype.parseBlocksTerminated = function(terminatorRegExpString) {\n\tvar terminatorRegExp = new RegExp(\"(\" + terminatorRegExpString + \")\",\"mg\"),\n\t\ttree = [];\n\t// Skip any whitespace\n\tthis.skipWhitespace();\n\t// Check if we've got the end marker\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar match = terminatorRegExp.exec(this.source);\n\t// Parse the text into blocks\n\twhile(this.pos < this.sourceLength && !(match && match.index === this.pos)) {\n\t\tvar blocks = this.parseBlock(terminatorRegExpString);\n\t\ttree.push.apply(tree,blocks);\n\t\t// Skip any whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check if we've got the end marker\n\t\tterminatorRegExp.lastIndex = this.pos;\n\t\tmatch = terminatorRegExp.exec(this.source);\n\t}\n\tif(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t}\n\treturn tree;\n};\n\n/*\nParse a run of text at the current position\n\tterminatorRegExp: a regexp at which to stop the run\n\toptions: see below\nOptions available:\n\teatTerminator: move the parse position past any encountered terminator (default false)\n*/\nWikiParser.prototype.parseInlineRun = function(terminatorRegExp,options) {\n\tif(terminatorRegExp) {\n\t\treturn this.parseInlineRunTerminated(terminatorRegExp,options);\n\t} else {\n\t\treturn this.parseInlineRunUnterminated(options);\n\t}\n};\n\nWikiParser.prototype.parseInlineRunUnterminated = function(options) {\n\tvar tree = [];\n\t// Find the next occurrence of an inline rule\n\tvar nextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around the matches until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && nextMatch) {\n\t\t// Process the text preceding the run rule\n\t\tif(nextMatch.matchIndex > this.pos) {\n\t\t\ttree.push({type: \"text\", text: this.source.substring(this.pos,nextMatch.matchIndex)});\n\t\t\tthis.pos = nextMatch.matchIndex;\n\t\t}\n\t\t// Process the run rule\n\t\ttree.push.apply(tree,nextMatch.rule.parse());\n\t\t// Look for the next run rule\n\t\tnextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\ttree.push({type: \"text\", text: this.source.substr(this.pos)});\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\nWikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,options) {\n\toptions = options || {};\n\tvar tree = [];\n\t// Find the next occurrence of the terminator\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar terminatorMatch = terminatorRegExp.exec(this.source);\n\t// Find the next occurrence of a inlinerule\n\tvar inlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && (terminatorMatch || inlineRuleMatch)) {\n\t\t// Return if we've found the terminator, and it precedes any inline rule match\n\t\tif(terminatorMatch) {\n\t\t\tif(!inlineRuleMatch || inlineRuleMatch.matchIndex >= terminatorMatch.index) {\n\t\t\t\tif(terminatorMatch.index > this.pos) {\n\t\t\t\t\ttree.push({type: \"text\", text: this.source.substring(this.pos,terminatorMatch.index)});\n\t\t\t\t}\n\t\t\t\tthis.pos = terminatorMatch.index;\n\t\t\t\tif(options.eatTerminator) {\n\t\t\t\t\tthis.pos += terminatorMatch[0].length;\n\t\t\t\t}\n\t\t\t\treturn tree;\n\t\t\t}\n\t\t}\n\t\t// Process any inline rule, along with the text preceding it\n\t\tif(inlineRuleMatch) {\n\t\t\t// Preceding text\n\t\t\tif(inlineRuleMatch.matchIndex > this.pos) {\n\t\t\t\ttree.push({type: \"text\", text: this.source.substring(this.pos,inlineRuleMatch.matchIndex)});\n\t\t\t\tthis.pos = inlineRuleMatch.matchIndex;\n\t\t\t}\n\t\t\t// Process the inline rule\n\t\t\ttree.push.apply(tree,inlineRuleMatch.rule.parse());\n\t\t\t// Look for the next inline rule\n\t\t\tinlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t\t\t// Look for the next terminator match\n\t\t\tterminatorRegExp.lastIndex = this.pos;\n\t\t\tterminatorMatch = terminatorRegExp.exec(this.source);\n\t\t}\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\ttree.push({type: \"text\", text: this.source.substr(this.pos)});\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\n/*\nParse zero or more class specifiers `.classname`\n*/\nWikiParser.prototype.parseClasses = function() {\n\tvar classRegExp = /\\.([^\\s\\.]+)/mg,\n\t\tclassNames = [];\n\tclassRegExp.lastIndex = this.pos;\n\tvar match = classRegExp.exec(this.source);\n\twhile(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t\tclassNames.push(match[1]);\n\t\tmatch = classRegExp.exec(this.source);\n\t}\n\treturn classNames;\n};\n\n/*\nAmend the rules used by this instance of the parser\n\ttype: `only` keeps just the named rules, `except` keeps all but the named rules\n\tnames: array of rule names\n*/\nWikiParser.prototype.amendRules = function(type,names) {\n\tnames = names || [];\n\t// Define the filter function\n\tvar keepFilter;\n\tif(type === \"only\") {\n\t\tkeepFilter = function(name) {\n\t\t\treturn names.indexOf(name) !== -1;\n\t\t};\n\t} else if(type === \"except\") {\n\t\tkeepFilter = function(name) {\n\t\t\treturn names.indexOf(name) === -1;\n\t\t};\n\t} else {\n\t\treturn;\n\t}\n\t// Define a function to process each of our rule arrays\n\tvar processRuleArray = function(ruleArray) {\n\t\tfor(var t=ruleArray.length-1; t>=0; t--) {\n\t\t\tif(!keepFilter(ruleArray[t].rule.name)) {\n\t\t\t\truleArray.splice(t,1);\n\t\t\t}\n\t\t}\n\t};\n\t// Process each rule array\n\tprocessRuleArray(this.pragmaRules);\n\tprocessRuleArray(this.blockRules);\n\tprocessRuleArray(this.inlineRules);\n};\n\nexports[\"text/vnd.tiddlywiki\"] = WikiParser;\n\n})();\n\n",
"title": "$:/core/modules/parsers/wikiparser/wikiparser.js",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/wikiparser/rules/wikirulebase.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikirulebase.js\ntype: application/javascript\nmodule-type: global\n\nBase class for wiki parser rules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nThis constructor is always overridden with a blank constructor, and so shouldn't be used\n*/\nvar WikiRuleBase = function() {\n};\n\n/*\nTo be overridden by individual rules\n*/\nWikiRuleBase.prototype.init = function(parser) {\n\tthis.parser = parser;\n};\n\n/*\nDefault implementation of findNextMatch uses RegExp matching\n*/\nWikiRuleBase.prototype.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\treturn this.match ? this.match.index : undefined;\n};\n\nexports.WikiRuleBase = WikiRuleBase;\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/wikirulebase.js",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/pluginswitcher.js": {
"text": "/*\\\ntitle: $:/core/modules/pluginswitcher.js\ntype: application/javascript\nmodule-type: global\n\nManages switching plugins for themes and languages.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\noptions:\nwiki: wiki store to be used\npluginType: type of plugin to be switched\ncontrollerTitle: title of tiddler used to control switching of this resource\ndefaultPlugins: array of default plugins to be used if nominated plugin isn't found\n*/\nfunction PluginSwitcher(options) {\n\tthis.wiki = options.wiki;\n\tthis.pluginType = options.pluginType;\n\tthis.controllerTitle = options.controllerTitle;\n\tthis.defaultPlugins = options.defaultPlugins || [];\n\t// Switch to the current plugin\n\tthis.switchPlugins();\n\t// Listen for changes to the selected plugin\n\tvar self = this;\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,self.controllerTitle)) {\n\t\t\tself.switchPlugins();\n\t\t}\n\t});\n}\n\nPluginSwitcher.prototype.switchPlugins = function() {\n\t// Get the name of the current theme\n\tvar selectedPluginTitle = this.wiki.getTiddlerText(this.controllerTitle);\n\t// If it doesn't exist, then fallback to one of the default themes\n\tvar index = 0;\n\twhile(!this.wiki.getTiddler(selectedPluginTitle) && index < this.defaultPlugins.length) {\n\t\tselectedPluginTitle = this.defaultPlugins[index++];\n\t}\n\t// Accumulate the titles of the plugins that we need to load\n\tvar plugins = [],\n\t\tself = this,\n\t\taccumulatePlugin = function(title) {\n\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\tif(tiddler && tiddler.isPlugin() && plugins.indexOf(title) === -1) {\n\t\t\t\tplugins.push(title);\n\t\t\t\tvar pluginInfo = JSON.parse(self.wiki.getTiddlerText(title)),\n\t\t\t\t\tdependents = $tw.utils.parseStringArray(tiddler.fields.dependents || \"\");\n\t\t\t\t$tw.utils.each(dependents,function(title) {\n\t\t\t\t\taccumulatePlugin(title);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\taccumulatePlugin(selectedPluginTitle);\n\t// Unregister any existing theme tiddlers\n\tvar unregisteredTiddlers = $tw.wiki.unregisterPluginTiddlers(this.pluginType);\n\t// Register any new theme tiddlers\n\tvar registeredTiddlers = $tw.wiki.registerPluginTiddlers(this.pluginType,plugins);\n\t// Unpack the current theme tiddlers\n\t$tw.wiki.unpackPluginTiddlers();\n};\n\nexports.PluginSwitcher = PluginSwitcher;\n\n})();\n",
"title": "$:/core/modules/pluginswitcher.js",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/saver-handler.js": {
"text": "/*\\\ntitle: $:/core/modules/saver-handler.js\ntype: application/javascript\nmodule-type: global\n\nThe saver handler tracks changes to the store and handles saving the entire wiki via saver modules.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInstantiate the saver handler with the following options:\nwiki: wiki to be synced\ndirtyTracking: true if dirty tracking should be performed\n*/\nfunction SaverHandler(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\tthis.dirtyTracking = options.dirtyTracking;\n\tthis.pendingAutoSave = false;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"saver-handler\");\n\t// Initialise our savers\n\tif($tw.browser) {\n\t\tthis.initSavers();\n\t}\n\t// Only do dirty tracking if required\n\tif($tw.browser && this.dirtyTracking) {\n\t\t// Compile the dirty tiddler filter\n\t\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t\t// Count of changes that have not yet been saved\n\t\tthis.numChanges = 0;\n\t\t// Listen out for changes to tiddlers\n\t\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\t\t// Filter the changes so that we only count changes to tiddlers that we care about\n\t\t\tvar filteredChanges = self.filterFn.call(self.wiki,function(callback) {\n\t\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\t\tcallback(tiddler,title);\n\t\t\t\t});\n\t\t\t});\n\t\t\t// Adjust the number of changes\n\t\t\tself.numChanges += filteredChanges.length;\n\t\t\tself.updateDirtyStatus();\n\t\t\t// Do any autosave if one is pending and there's no more change events\n\t\t\tif(self.pendingAutoSave && self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tself.pendingAutoSave = false;\n\t\t\t}\n\t\t});\n\t\t// Listen for the autosave event\n\t\t$tw.rootWidget.addEventListener(\"tm-auto-save-wiki\",function(event) {\n\t\t\t// Do the autosave unless there are outstanding tiddler change events\n\t\t\tif(self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise put ourselves in the \"pending autosave\" state and wait for the change event before we do the autosave\n\t\t\t\tself.pendingAutoSave = true;\n\t\t\t}\n\t\t});\n\t\t// Set up our beforeunload handler\n\t\twindow.addEventListener(\"beforeunload\",function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t}\n\t// Install the save action handlers\n\tif($tw.browser) {\n\t\t$tw.rootWidget.addEventListener(\"tm-save-wiki\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-download-file\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\tmethod: \"download\",\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t}\n}\n\nSaverHandler.prototype.titleSyncFilter = \"$:/config/SaverFilter\";\nSaverHandler.prototype.titleAutoSave = \"$:/config/AutoSave\";\nSaverHandler.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\n\n/*\nSelect the appropriate saver modules and set them up\n*/\nSaverHandler.prototype.initSavers = function(moduleType) {\n\tmoduleType = moduleType || \"saver\";\n\t// Instantiate the available savers\n\tthis.savers = [];\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tif(module.canSave(self)) {\n\t\t\tself.savers.push(module.create(self.wiki));\n\t\t}\n\t});\n\t// Sort the savers into priority order\n\tthis.savers.sort(function(a,b) {\n\t\tif(a.info.priority < b.info.priority) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(a.info.priority > b.info.priority) {\n\t\t\t\treturn +1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nSave the wiki contents. Options are:\n\tmethod: \"save\", \"autosave\" or \"download\"\n\ttemplate: the tiddler containing the template to save\n\tdownloadType: the content type for the saved file\n*/\nSaverHandler.prototype.saveWiki = function(options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tmethod = options.method || \"save\",\n\t\tvariables = options.variables || {},\n\t\ttemplate = options.template || \"$:/core/save/all\",\n\t\tdownloadType = options.downloadType || \"text/plain\",\n\t\ttext = this.wiki.renderTiddler(downloadType,template,options),\n\t\tcallback = function(err) {\n\t\t\tif(err) {\n\t\t\t\talert(\"Error while saving:\\n\\n\" + err);\n\t\t\t} else {\n\t\t\t\t// Clear the task queue if we're saving (rather than downloading)\n\t\t\t\tif(method !== \"download\") {\n\t\t\t\t\tself.numChanges = 0;\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t}\n\t\t\t\t$tw.notifier.display(self.titleSavedNotification);\n\t\t\t\tif(options.callback) {\n\t\t\t\t\toptions.callback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t// Ignore autosave if disabled\n\tif(method === \"autosave\" && this.wiki.getTiddlerText(this.titleAutoSave,\"yes\") !== \"yes\") {\n\t\treturn false;\n\t}\n\t// Call the highest priority saver that supports this method\n\tfor(var t=this.savers.length-1; t>=0; t--) {\n\t\tvar saver = this.savers[t];\n\t\tif(saver.info.capabilities.indexOf(method) !== -1 && saver.save(text,method,callback,{variables: {filename: variables.filename}})) {\n\t\t\tthis.logger.log(\"Saving wiki with method\",method,\"through saver\",saver.info.name);\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSaverHandler.prototype.isDirty = function() {\n\treturn this.numChanges > 0;\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSaverHandler.prototype.updateDirtyStatus = function() {\n\tif($tw.browser) {\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",this.isDirty());\n\t}\n};\n\nexports.SaverHandler = SaverHandler;\n\n})();\n",
"title": "$:/core/modules/saver-handler.js",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/savers/andtidwiki.js": {
"text": "/*\\\ntitle: $:/core/modules/savers/andtidwiki.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the AndTidWiki Android app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar AndTidWiki = function(wiki) {\n};\n\nAndTidWiki.prototype.save = function(text,method,callback) {\n\t// Get the pathname of this document\n\tvar pathname = decodeURIComponent(document.location.toString().split(\"#\")[0]);\n\t// Strip the file://\n\tif(pathname.indexOf(\"file://\") === 0) {\n\t\tpathname = pathname.substr(7);\n\t}\n\t// Strip any query or location part\n\tvar p = pathname.indexOf(\"?\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\tp = pathname.indexOf(\"#\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\t// Save the file\n\twindow.twi.saveFile(pathname,text);\n\t// Call the callback\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nAndTidWiki.prototype.info = {\n\tname: \"andtidwiki\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.twi && !!window.twi.saveFile;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new AndTidWiki(wiki);\n};\n\n})();\n",
"title": "$:/core/modules/savers/andtidwiki.js",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/download.js": {
"text": "/*\\\ntitle: $:/core/modules/savers/download.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar DownloadSaver = function(wiki) {\n};\n\nDownloadSaver.prototype.save = function(text,method,callback,options) {\n\toptions = options || {};\n\t// Get the current filename\n\tvar filename = options.variables.filename;\n\tif(!filename) {\n\t\tvar p = document.location.pathname.lastIndexOf(\"/\");\n\t\tif(p !== -1) {\n\t\t\tfilename = document.location.pathname.substr(p+1);\n\t\t}\n\t}\n\tif(!filename) {\n\t\tfilename = \"tiddlywiki.html\";\n\t}\n\t// Set up the link\n\tvar link = document.createElement(\"a\");\n\tlink.setAttribute(\"target\",\"_blank\");\n\tif(Blob !== undefined) {\n\t\tvar blob = new Blob([text], {type: \"text/html\"});\n\t\tlink.setAttribute(\"href\", URL.createObjectURL(blob));\n\t} else {\n\t\tlink.setAttribute(\"href\",\"data:text/html,\" + encodeURIComponent(text));\n\t}\n\tlink.setAttribute(\"download\",filename);\n\tdocument.body.appendChild(link);\n\tlink.click();\n\tdocument.body.removeChild(link);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nDownloadSaver.prototype.info = {\n\tname: \"download\",\n\tpriority: 100,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn document.createElement(\"a\").download !== undefined;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new DownloadSaver(wiki);\n};\n\n})();\n",
"title": "$:/core/modules/savers/download.js",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/fsosaver.js": {
"text": "/*\\\ntitle: $:/core/modules/savers/fsosaver.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via MS FileSystemObject ActiveXObject\n\nNote: Since TiddlyWiki's markup contains the MOTW, the FileSystemObject normally won't be available. \nHowever, if the wiki is loaded as an .HTA file (Windows HTML Applications) then the FSO can be used.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar FSOSaver = function(wiki) {\n};\n\nFSOSaver.prototype.save = function(text,method,callback) {\n\t// Get the pathname of this document\n\tvar pathname = unescape(document.location.pathname);\n\t// Test for a Windows path of the form /x:\\blah...\n\tif(/^\\/[A-Z]\\:\\\\[^\\\\]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t} else if(document.location.hostname !== \"\" && /^\\/\\\\[^\\\\]+\\\\[^\\\\]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t\t// reconstruct UNC path\n\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t} else {\n\t\treturn false;\n\t}\n\t// Save the file (as UTF-16)\n\tvar fso = new ActiveXObject(\"Scripting.FileSystemObject\");\n\tvar file = fso.OpenTextFile(pathname,2,-1,-1);\n\tfile.Write(text);\n\tfile.Close();\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nFSOSaver.prototype.info = {\n\tname: \"FSOSaver\",\n\tpriority: 120,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\ttry {\n\t\treturn (window.location.protocol === \"file:\") && !!(new ActiveXObject(\"Scripting.FileSystemObject\"));\n\t} catch(e) { return false; }\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new FSOSaver(wiki);\n};\n\n})();\n",
"title": "$:/core/modules/savers/fsosaver.js",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/manualdownload.js": {
"text": "/*\\\ntitle: $:/core/modules/savers/manualdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Title of the tiddler containing the download message\nvar downloadInstructionsTitle = \"$:/language/Modals/Download\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar ManualDownloadSaver = function(wiki) {\n};\n\nManualDownloadSaver.prototype.save = function(text,method,callback) {\n\t$tw.modal.display(downloadInstructionsTitle,{\n\t\tdownloadLink: \"data:text/html,\" + encodeURIComponent(text)\n\t});\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nManualDownloadSaver.prototype.info = {\n\tname: \"manualdownload\",\n\tpriority: 0,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new ManualDownloadSaver(wiki);\n};\n\n})();\n",
"title": "$:/core/modules/savers/manualdownload.js",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/msdownload.js": {
"text": "/*\\\ntitle: $:/core/modules/savers/msdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via window.navigator.msSaveBlob()\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar MsDownloadSaver = function(wiki) {\n};\n\nMsDownloadSaver.prototype.save = function(text,method,callback) {\n\t// Get the current filename\n\tvar filename = \"tiddlywiki.html\",\n\t\tp = document.location.pathname.lastIndexOf(\"/\");\n\tif(p !== -1) {\n\t\tfilename = document.location.pathname.substr(p+1);\n\t}\n\t// Set up the link\n\tvar blob = new Blob([text], {type: \"text/html\"});\n\twindow.navigator.msSaveBlob(blob,filename);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nMsDownloadSaver.prototype.info = {\n\tname: \"msdownload\",\n\tpriority: 110,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.navigator.msSaveBlob;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new MsDownloadSaver(wiki);\n};\n\n})();\n",
"title": "$:/core/modules/savers/msdownload.js",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/tiddlyfox.js": {
"text": "/*\\\ntitle: $:/core/modules/savers/tiddlyfox.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TiddlyFox file extension\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TiddlyFoxSaver = function(wiki) {\n};\n\nTiddlyFoxSaver.prototype.save = function(text,method,callback) {\n\tvar messageBox = document.getElementById(\"tiddlyfox-message-box\");\n\tif(messageBox) {\n\t\t// Get the pathname of this document\n\t\tvar pathname = document.location.toString().split(\"#\")[0];\n\t\t// Replace file://localhost/ with file:///\n\t\tif(pathname.indexOf(\"file://localhost/\") === 0) {\n\t\t\tpathname = \"file://\" + pathname.substr(16);\n\t\t}\n\t\t// Windows path file:///x:/blah/blah --> x:\\blah\\blah\n\t\tif(/^file\\:\\/\\/\\/[A-Z]\\:\\//i.test(pathname)) {\n\t\t\t// Remove the leading slash and convert slashes to backslashes\n\t\t\tpathname = pathname.substr(8).replace(/\\//g,\"\\\\\");\n\t\t// Firefox Windows network path file://///server/share/blah/blah --> //server/share/blah/blah\n\t\t} else if(pathname.indexOf(\"file://///\") === 0) {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(10)).replace(/\\//g,\"\\\\\");\n\t\t// Mac/Unix local path file:///path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:///\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(7));\n\t\t// Mac/Unix local path file:/path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:/\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(5));\n\t\t// Otherwise Windows networth path file://server/share/path/path --> \\\\server\\share\\path\\path\n\t\t} else {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(7)).replace(new RegExp(\"/\",\"g\"),\"\\\\\");\n\t\t}\n\t\t// Create the message element and put it in the message box\n\t\tvar message = document.createElement(\"div\");\n\t\tmessage.setAttribute(\"data-tiddlyfox-path\",decodeURIComponent(pathname));\n\t\tmessage.setAttribute(\"data-tiddlyfox-content\",text);\n\t\tmessageBox.appendChild(message);\n\t\t// Add an event handler for when the file has been saved\n\t\tmessage.addEventListener(\"tiddlyfox-have-saved-file\",function(event) {\n\t\t\tcallback(null);\n\t\t}, false);\n\t\t// Create and dispatch the custom event to the extension\n\t\tvar event = document.createEvent(\"Events\");\n\t\tevent.initEvent(\"tiddlyfox-save-file\",true,false);\n\t\tmessage.dispatchEvent(event);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyFoxSaver.prototype.info = {\n\tname: \"tiddlyfox\",\n\tpriority: 1500,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn (window.location.protocol === \"file:\");\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyFoxSaver(wiki);\n};\n\n})();\n",
"title": "$:/core/modules/savers/tiddlyfox.js",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/tiddlyie.js": {
"text": "/*\\\ntitle: $:/core/modules/savers/tiddlyie.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via Internet Explorer BHO extenion (TiddlyIE)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar TiddlyIESaver = function(wiki) {\n};\n\nTiddlyIESaver.prototype.save = function(text,method,callback) {\n\t// Check existence of TiddlyIE BHO extension (note: only works after document is complete)\n\tif(typeof(window.TiddlyIE) != \"undefined\") {\n\t\t// Get the pathname of this document\n\t\tvar pathname = unescape(document.location.pathname);\n\t\t// Test for a Windows path of the form /x:/blah...\n\t\tif(/^\\/[A-Z]\\:\\/[^\\/]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+ (is this better?: ^/[a-z]:/[^/]+(/[^/]+)*\\.[^/]+ )\n\t\t\t// Remove the leading slash\n\t\t\tpathname = pathname.substr(1);\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t} else if(document.hostname !== \"\" && /^\\/[^\\/]+\\/[^\\/]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t\t// reconstruct UNC path\n\t\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t\t} else return false;\n\t\t// Prompt the user to save the file\n\t\twindow.TiddlyIE.save(pathname, text);\n\t\t// Callback that we succeeded\n\t\tcallback(null);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyIESaver.prototype.info = {\n\tname: \"tiddlyiesaver\",\n\tpriority: 1500,\n\tcapabilities: [\"save\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn (window.location.protocol === \"file:\");\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyIESaver(wiki);\n};\n\n})();\n",
"title": "$:/core/modules/savers/tiddlyie.js",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/twedit.js": {
"text": "/*\\\ntitle: $:/core/modules/savers/twedit.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TWEdit iOS app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TWEditSaver = function(wiki) {\n};\n\nTWEditSaver.prototype.save = function(text,method,callback) {\n\t// Bail if we're not running under TWEdit\n\tif(typeof DeviceInfo !== \"object\") {\n\t\treturn false;\n\t}\n\t// Get the pathname of this document\n\tvar pathname = decodeURIComponent(document.location.pathname);\n\t// Strip any query or location part\n\tvar p = pathname.indexOf(\"?\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\tp = pathname.indexOf(\"#\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\t// Remove the leading \"/Documents\" from path\n\tvar prefix = \"/Documents\";\n\tif(pathname.indexOf(prefix) === 0) {\n\t\tpathname = pathname.substr(prefix.length);\n\t}\n\t// Error handler\n\tvar errorHandler = function(event) {\n\t\t// Error\n\t\tcallback(\"Error saving to TWEdit: \" + event.target.error.code);\n\t};\n\t// Get the file system\n\twindow.requestFileSystem(LocalFileSystem.PERSISTENT,0,function(fileSystem) {\n\t\t// Now we've got the filesystem, get the fileEntry\n\t\tfileSystem.root.getFile(pathname, {create: true}, function(fileEntry) {\n\t\t\t// Now we've got the fileEntry, create the writer\n\t\t\tfileEntry.createWriter(function(writer) {\n\t\t\t\twriter.onerror = errorHandler;\n\t\t\t\twriter.onwrite = function() {\n\t\t\t\t\tcallback(null);\n\t\t\t\t};\n\t\t\t\twriter.position = 0;\n\t\t\t\twriter.write(text);\n\t\t\t},errorHandler);\n\t\t}, errorHandler);\n\t}, errorHandler);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nTWEditSaver.prototype.info = {\n\tname: \"twedit\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TWEditSaver(wiki);\n};\n\n/////////////////////////// Hack\n// HACK: This ensures that TWEdit recognises us as a TiddlyWiki document\nif($tw.browser) {\n\twindow.version = {title: \"TiddlyWiki\"};\n}\n\n})();\n",
"title": "$:/core/modules/savers/twedit.js",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/upload.js": {
"text": "/*\\\ntitle: $:/core/modules/savers/upload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via upload to a server.\n\nDesigned to be compatible with BidiX's UploadPlugin at http://tiddlywiki.bidix.info/#UploadPlugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar UploadSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nUploadSaver.prototype.save = function(text,method,callback) {\n\t// Get the various parameters we need\n\tvar backupDir = this.wiki.getTextReference(\"$:/UploadBackupDir\") || \".\",\n\t\tusername = this.wiki.getTextReference(\"$:/UploadName\"),\n\t\tpassword = $tw.utils.getPassword(\"upload\"),\n\t\tuploadDir = this.wiki.getTextReference(\"$:/UploadDir\") || \".\",\n\t\tuploadFilename = this.wiki.getTextReference(\"$:/UploadFilename\") || \"index.html\",\n\t\turl = this.wiki.getTextReference(\"$:/UploadURL\");\n\t// Bail out if we don't have the bits we need\n\tif(!username || username.toString().trim() === \"\" || !password || password.toString().trim() === \"\") {\n\t\treturn false;\n\t}\n\t// Construct the url if not provided\n\tif(!url) {\n\t\turl = \"http://\" + username + \".tiddlyspot.com/store.cgi\";\n\t}\n\t// Assemble the header\n\tvar boundary = \"---------------------------\" + \"AaB03x\";\t\n\tvar uploadFormName = \"UploadPlugin\";\n\tvar head = [];\n\thead.push(\"--\" + boundary + \"\\r\\nContent-disposition: form-data; name=\\\"UploadPlugin\\\"\\r\\n\");\n\thead.push(\"backupDir=\" + backupDir + \";user=\" + username + \";password=\" + password + \";uploaddir=\" + uploadDir + \";;\"); \n\thead.push(\"\\r\\n\" + \"--\" + boundary);\n\thead.push(\"Content-disposition: form-data; name=\\\"userfile\\\"; filename=\\\"\" + uploadFilename + \"\\\"\");\n\thead.push(\"Content-Type: text/html;charset=UTF-8\");\n\thead.push(\"Content-Length: \" + text.length + \"\\r\\n\");\n\thead.push(\"\");\n\t// Assemble the tail and the data itself\n\tvar tail = \"\\r\\n--\" + boundary + \"--\\r\\n\",\n\t\tdata = head.join(\"\\r\\n\") + text + tail;\n\t// Do the HTTP post\n\tvar http = new XMLHttpRequest();\n\thttp.open(\"POST\",url,true,username,password);\n\thttp.setRequestHeader(\"Content-Type\",\"multipart/form-data; ;charset=UTF-8; boundary=\" + boundary);\n\thttp.onreadystatechange = function() {\n\t\tif(http.readyState == 4 && http.status == 200) {\n\t\t\tif(http.responseText.substr(0,4) === \"0 - \") {\n\t\t\t\tcallback(null);\n\t\t\t} else {\n\t\t\t\tcallback(http.responseText);\n\t\t\t}\n\t\t}\n\t};\n\ttry {\n\t\thttp.send(data);\n\t} catch(ex) {\n\t\treturn callback(\"Error:\" + ex);\n\t}\n\t$tw.notifier.display(\"$:/language/Notifications/Save/Starting\");\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nUploadSaver.prototype.info = {\n\tname: \"upload\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new UploadSaver(wiki);\n};\n\n})();\n",
"title": "$:/core/modules/savers/upload.js",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/startup/commands.js": {
"text": "/*\\\ntitle: $:/core/modules/startup/commands.js\ntype: application/javascript\nmodule-type: startup\n\nCommand processing\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"commands\";\nexports.platforms = [\"node\"];\nexports.after = [\"story\"];\nexports.synchronous = false;\n\nexports.startup = function(callback) {\n\t// On the server, start a commander with the command line arguments\n\tvar commander = new $tw.Commander(\n\t\t$tw.boot.argv,\n\t\tfunction(err) {\n\t\t\tif(err) {\n\t\t\t\treturn $tw.utils.error(\"Error: \" + err);\n\t\t\t}\n\t\t\tcallback();\n\t\t},\n\t\t$tw.wiki,\n\t\t{output: process.stdout, error: process.stderr}\n\t);\n\tcommander.execute();\n};\n\n})();\n",
"title": "$:/core/modules/startup/commands.js",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/favicon.js": {
"text": "/*\\\ntitle: $:/core/modules/startup/favicon.js\ntype: application/javascript\nmodule-type: startup\n\nFavicon handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"favicon\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\t\t\n// Favicon tiddler\nvar FAVICON_TITLE = \"$:/favicon.ico\";\n\nexports.startup = function() {\n\t// Set up the favicon\n\tsetFavicon();\n\t// Reset the favicon when the tiddler changes\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,FAVICON_TITLE)) {\n\t\t\tsetFavicon();\n\t\t}\n\t});\n};\n\nfunction setFavicon() {\n\tvar tiddler = $tw.wiki.getTiddler(FAVICON_TITLE);\n\tif(tiddler) {\n\t\tvar faviconLink = document.getElementById(\"faviconLink\");\n\t\tfaviconLink.setAttribute(\"href\",\"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text);\n\t}\n}\n\n})();\n",
"title": "$:/core/modules/startup/favicon.js",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/info.js": {
"text": "/*\\\ntitle: $:/core/modules/startup/info.js\ntype: application/javascript\nmodule-type: startup\n\nInitialise $:/info tiddlers via $:/temp/info-plugin pseudo-plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"info\";\nexports.before = [\"startup\"];\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Collect up the info tiddlers\n\tvar infoTiddlerFields = {};\n\t// Give each info module a chance to fill in as many info tiddlers as they want\n\t$tw.modules.forEachModuleOfType(\"info\",function(title,moduleExports) {\n\t\tif(moduleExports && moduleExports.getInfoTiddlerFields) {\n\t\t\tvar tiddlerFieldsArray = moduleExports.getInfoTiddlerFields(infoTiddlerFields);\n\t\t\t$tw.utils.each(tiddlerFieldsArray,function(fields) {\n\t\t\t\tif(fields) {\n\t\t\t\t\tinfoTiddlerFields[fields.title] = fields;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Bake the info tiddlers into a plugin\n\tvar fields = {\n\t\ttitle: \"$:/temp/info-plugin\",\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"info\",\n\t\ttext: JSON.stringify({tiddlers: infoTiddlerFields},null,$tw.config.preferences.jsonSpaces)\n\t};\n\t$tw.wiki.addTiddler(new $tw.Tiddler(fields));\n\t$tw.wiki.readPluginInfo();\n\t$tw.wiki.registerPluginTiddlers(\"info\");\n\t$tw.wiki.unpackPluginTiddlers();\n};\n\n})();\n",
"title": "$:/core/modules/startup/info.js",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/load-modules.js": {
"text": "/*\\\ntitle: $:/core/modules/startup/load-modules.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"load-modules\";\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Load modules\n\t$tw.modules.applyMethods(\"utils\",$tw.utils);\n\tif($tw.node) {\n\t\t$tw.modules.applyMethods(\"utils-node\",$tw.utils);\n\t}\n\t$tw.modules.applyMethods(\"global\",$tw);\n\t$tw.modules.applyMethods(\"config\",$tw.config);\n\t$tw.Tiddler.fieldModules = $tw.modules.getModulesByTypeAsHashmap(\"tiddlerfield\");\n\t$tw.modules.applyMethods(\"tiddlermethod\",$tw.Tiddler.prototype);\n\t$tw.modules.applyMethods(\"wikimethod\",$tw.Wiki.prototype);\n\t$tw.modules.applyMethods(\"tiddlerdeserializer\",$tw.Wiki.tiddlerDeserializerModules);\n\t$tw.macros = $tw.modules.getModulesByTypeAsHashmap(\"macro\");\n\t$tw.wiki.initParsers();\n\t$tw.Commander.initCommands();\n};\n\n})();\n",
"title": "$:/core/modules/startup/load-modules.js",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/password.js": {
"text": "/*\\\ntitle: $:/core/modules/startup/password.js\ntype: application/javascript\nmodule-type: startup\n\nPassword handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"password\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t$tw.rootWidget.addEventListener(\"tm-set-password\",function(event) {\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: $tw.language.getString(\"Encryption/PromptSetPassword\"),\n\t\t\tnoUserName: true,\n\t\t\tsubmitText: \"Set password\",\n\t\t\tcanCancel: true,\n\t\t\trepeatPassword: true,\n\t\t\tcallback: function(data) {\n\t\t\t\tif(data) {\n\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t}\n\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t}\n\t\t});\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-clear-password\",function(event) {\n\t\tif($tw.browser) {\n\t\t\tif(!confirm($tw.language.getString(\"Encryption/ConfirmClearPassword\"))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t$tw.crypto.setPassword(null);\n\t});\n\t// Ensure that $:/isEncrypted is maintained properly\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,\"$:/isEncrypted\")) {\n\t\t\t$tw.crypto.updateCryptoStateTiddler();\n\t\t}\n\t});\n};\n\n})();\n",
"title": "$:/core/modules/startup/password.js",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/render.js": {
"text": "/*\\\ntitle: $:/core/modules/startup/render.js\ntype: application/javascript\nmodule-type: startup\n\nTitle, stylesheet and page rendering\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"render\";\nexports.platforms = [\"browser\"];\nexports.after = [\"story\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar PAGE_TITLE_TITLE = \"$:/core/wiki/title\";\nvar PAGE_STYLESHEET_TITLE = \"$:/core/ui/PageStylesheet\";\nvar PAGE_TEMPLATE_TITLE = \"$:/core/ui/PageTemplate\";\n\n// Time (in ms) that we defer refreshing changes to draft tiddlers\nvar DRAFT_TIDDLER_TIMEOUT = 400;\n\nexports.startup = function() {\n\t// Set up the title\n\t$tw.titleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TITLE_TITLE,{document: $tw.fakeDocument, parseAsInline: true});\n\t$tw.titleContainer = $tw.fakeDocument.createElement(\"div\");\n\t$tw.titleWidgetNode.render($tw.titleContainer,null);\n\tdocument.title = $tw.titleContainer.textContent;\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.titleWidgetNode.refresh(changes,$tw.titleContainer,null)) {\n\t\t\tdocument.title = $tw.titleContainer.textContent;\n\t\t}\n\t});\n\t// Set up the styles\n\t$tw.styleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_STYLESHEET_TITLE,{document: $tw.fakeDocument});\n\t$tw.styleContainer = $tw.fakeDocument.createElement(\"style\");\n\t$tw.styleWidgetNode.render($tw.styleContainer,null);\n\t$tw.styleElement = document.createElement(\"style\");\n\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\tdocument.head.insertBefore($tw.styleElement,document.head.firstChild);\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"styleRefresh\",function(changes) {\n\t\tif($tw.styleWidgetNode.refresh(changes,$tw.styleContainer,null)) {\n\t\t\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\t\t}\n\t}));\n\t// Display the $:/core/ui/PageTemplate tiddler to kick off the display\n\t$tw.perf.report(\"mainRender\",function() {\n\t\t$tw.pageWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TEMPLATE_TITLE,{document: document, parentWidget: $tw.rootWidget});\n\t\t$tw.pageContainer = document.createElement(\"div\");\n\t\t$tw.utils.addClass($tw.pageContainer,\"tc-page-container-wrapper\");\n\t\tdocument.body.insertBefore($tw.pageContainer,document.body.firstChild);\n\t\t$tw.pageWidgetNode.render($tw.pageContainer,null);\n\t})();\n\t// Prepare refresh mechanism\n\tvar deferredChanges = Object.create(null),\n\t\ttimerId;\n\tfunction refresh() {\n\t\t// Process the refresh\n\t\t$tw.pageWidgetNode.refresh(deferredChanges,$tw.pageContainer,null);\n\t\tdeferredChanges = Object.create(null);\n\t}\n\t// Add the change event handler\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"mainRefresh\",function(changes) {\n\t\t// Check if only drafts have changed\n\t\tvar onlyDraftsHaveChanged = true;\n\t\tfor(var title in changes) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\tif(!tiddler || !tiddler.hasField(\"draft.of\")) {\n\t\t\t\tonlyDraftsHaveChanged = false;\n\t\t\t}\n\t\t}\n\t\t// Defer the change if only drafts have changed\n\t\tif(timerId) {\n\t\t\tclearTimeout(timerId);\n\t\t}\n\t\ttimerId = null;\n\t\tif(onlyDraftsHaveChanged) {\n\t\t\ttimerId = setTimeout(refresh,DRAFT_TIDDLER_TIMEOUT);\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t} else {\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t\trefresh();\n\t\t}\n\t}));\n\t// Fix up the link between the root widget and the page container\n\t$tw.rootWidget.domNodes = [$tw.pageContainer];\n\t$tw.rootWidget.children = [$tw.pageWidgetNode];\n};\n\n})();\n",
"title": "$:/core/modules/startup/render.js",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/rootwidget.js": {
"text": "/*\\\ntitle: $:/core/modules/startup/rootwidget.js\ntype: application/javascript\nmodule-type: startup\n\nSetup the root widget and the core root widget handlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"rootwidget\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.before = [\"story\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Install the modal message mechanism\n\t$tw.modal = new $tw.utils.Modal($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-modal\",function(event) {\n\t\t$tw.modal.display(event.param,{variables: event.paramObject});\n\t});\n\t// Install the notification mechanism\n\t$tw.notifier = new $tw.utils.Notifier($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-notify\",function(event) {\n\t\t$tw.notifier.display(event.param);\n\t});\n\t// Install the scroller\n\t$tw.pageScroller = new $tw.utils.PageScroller();\n\t$tw.rootWidget.addEventListener(\"tm-scroll\",function(event) {\n\t\t$tw.pageScroller.handleEvent(event);\n\t});\n\tvar fullscreen = $tw.utils.getFullScreenApis();\n\tif(fullscreen) {\n\t\t$tw.rootWidget.addEventListener(\"tm-full-screen\",function(event) {\n\t\t\tif(document[fullscreen._fullscreenElement]) {\n\t\t\t\tdocument[fullscreen._exitFullscreen]();\n\t\t\t} else {\n\t\t\t\tdocument.documentElement[fullscreen._requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t\t\t}\n\t\t});\n\t}\n\t// If we're being viewed on a data: URI then give instructions for how to save\n\tif(document.location.protocol === \"data:\") {\n\t\t$tw.rootWidget.dispatchEvent({\n\t\t\ttype: \"tm-modal\",\n\t\t\tparam: \"$:/language/Modals/SaveInstructions\"\n\t\t});\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/startup/rootwidget.js",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup.js": {
"text": "/*\\\ntitle: $:/core/modules/startup.js\ntype: application/javascript\nmodule-type: startup\n\nMiscellaneous startup logic for both the client and server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"startup\";\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\n// Set to `true` to enable performance instrumentation\nvar PERFORMANCE_INSTRUMENTATION = false;\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.startup = function() {\n\tvar modules,n,m,f;\n\tif($tw.browser) {\n\t\t$tw.browser.isIE = (/msie|trident/i.test(navigator.userAgent));\n\t}\n\t$tw.version = $tw.utils.extractVersionInfo();\n\t// Set up the performance framework\n\t$tw.perf = new $tw.Performance(PERFORMANCE_INSTRUMENTATION);\n\t// Kick off the language manager and switcher\n\t$tw.language = new $tw.Language();\n\t$tw.languageSwitcher = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"language\",\n\t\tcontrollerTitle: \"$:/language\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/languages/en-US\"\n\t\t]\n\t});\n\t// Kick off the theme manager\n\t$tw.themeManager = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"theme\",\n\t\tcontrollerTitle: \"$:/theme\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/themes/tiddlywiki/snowwhite\",\n\t\t\t\"$:/themes/tiddlywiki/vanilla\"\n\t\t]\n\t});\n\t// Clear outstanding tiddler store change events to avoid an unnecessary refresh cycle at startup\n\t$tw.wiki.clearTiddlerEventQueue();\n\t// Create a root widget for attaching event handlers. By using it as the parentWidget for another widget tree, one can reuse the event handlers\n\tif($tw.browser) {\n\t\t$tw.rootWidget = new widget.widget({\n\t\t\ttype: \"widget\",\n\t\t\tchildren: []\n\t\t},{\n\t\t\twiki: $tw.wiki,\n\t\t\tdocument: document\n\t\t});\n\t}\n\t// Find a working syncadaptor\n\t$tw.syncadaptor = undefined;\n\t$tw.modules.forEachModuleOfType(\"syncadaptor\",function(title,module) {\n\t\tif(!$tw.syncadaptor && module.adaptorClass) {\n\t\t\t$tw.syncadaptor = new module.adaptorClass({wiki: $tw.wiki});\n\t\t}\n\t});\n\t// Set up the syncer object if we've got a syncadaptor\n\tif($tw.syncadaptor) {\n\t\t$tw.syncer = new $tw.Syncer({wiki: $tw.wiki, syncadaptor: $tw.syncadaptor});\n\t} \n\t// Setup the saver handler\n\t$tw.saverHandler = new $tw.SaverHandler({wiki: $tw.wiki, dirtyTracking: !$tw.syncadaptor});\n\t// Host-specific startup\n\tif($tw.browser) {\n\t\t// Install the popup manager\n\t\t$tw.popup = new $tw.utils.Popup();\n\t\t// Install the animator\n\t\t$tw.anim = new $tw.utils.Animator();\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/startup.js",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/story.js": {
"text": "/*\\\ntitle: $:/core/modules/startup/story.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"story\";\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar DEFAULT_STORY_TITLE = \"$:/StoryList\";\nvar DEFAULT_HISTORY_TITLE = \"$:/HistoryList\";\n\n// Default tiddlers\nvar DEFAULT_TIDDLERS_TITLE = \"$:/DefaultTiddlers\";\n\n// Config\nvar CONFIG_UPDATE_ADDRESS_BAR = \"$:/config/Navigation/UpdateAddressBar\"; // Can be \"no\", \"permalink\", \"permaview\"\nvar CONFIG_UPDATE_HISTORY = \"$:/config/Navigation/UpdateHistory\"; // Can be \"yes\" or \"no\"\n\nexports.startup = function() {\n\t// Open startup tiddlers\n\topenStartupTiddlers();\n\tif($tw.browser) {\n\t\t// Set up location hash update\n\t\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t\tif($tw.utils.hop(changes,DEFAULT_STORY_TITLE) || $tw.utils.hop(changes,DEFAULT_HISTORY_TITLE)) {\n\t\t\t\tupdateLocationHash({\n\t\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_UPDATE_ADDRESS_BAR,\"permaview\").trim(),\n\t\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim()\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t// Listen for changes to the browser location hash\n\t\twindow.addEventListener(\"hashchange\",function() {\n\t\t\tvar hash = $tw.utils.getLocationHash();\n\t\t\tif(hash !== $tw.locationHash) {\n\t\t\t\t$tw.locationHash = hash;\n\t\t\t\topenStartupTiddlers({defaultToCurrentStory: true});\n\t\t\t}\n\t\t},false);\n\t\t// Listen for the tm-browser-refresh message\n\t\t$tw.rootWidget.addEventListener(\"tm-browser-refresh\",function(event) {\n\t\t\twindow.location.reload(true);\n\t\t});\n\t\t// Listen for the tm-home message\n\t\t$tw.rootWidget.addEventListener(\"tm-home\",function(event) {\n\t\t\twindow.location.hash = \"\";\n\t\t\tvar storyFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE),\n\t\t\t\tstoryList = $tw.wiki.filterTiddlers(storyFilter);\n\t\t\t//invoke any hooks that might change the default story list\n\t\t\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t\t\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t\t\tif(storyList[0]) {\n\t\t\t\t$tw.wiki.addToHistory(storyList[0]);\t\t\t\t\n\t\t\t}\n\t\t});\n\t\t// Listen for the tm-permalink message\n\t\t$tw.rootWidget.addEventListener(\"tm-permalink\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: \"permalink\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle\n\t\t\t});\n\t\t});\n\t\t// Listen for the tm-permaview message\n\t\t$tw.rootWidget.addEventListener(\"tm-permaview\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: \"permaview\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle\n\t\t\t});\n\t\t});\n\t}\n};\n\n/*\nProcess the location hash to open the specified tiddlers. Options:\ndefaultToCurrentStory: If true, the current story is retained as the default, instead of opening the default tiddlers\n*/\nfunction openStartupTiddlers(options) {\n\toptions = options || {};\n\t// Work out the target tiddler and the story filter. \"null\" means \"unspecified\"\n\tvar target = null,\n\t\tstoryFilter = null;\n\tif($tw.locationHash.length > 1) {\n\t\tvar hash = $tw.locationHash.substr(1),\n\t\t\tsplit = hash.indexOf(\":\");\n\t\tif(split === -1) {\n\t\t\ttarget = decodeURIComponent(hash.trim());\n\t\t} else {\n\t\t\ttarget = decodeURIComponent(hash.substr(0,split).trim());\n\t\t\tstoryFilter = decodeURIComponent(hash.substr(split + 1).trim());\n\t\t}\n\t}\n\t// If the story wasn't specified use the current tiddlers or a blank story\n\tif(storyFilter === null) {\n\t\tif(options.defaultToCurrentStory) {\n\t\t\tvar currStoryList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE);\n\t\t\tstoryFilter = $tw.utils.stringifyList(currStoryList);\n\t\t} else {\n\t\t\tif(target && target !== \"\") {\n\t\t\t\tstoryFilter = \"\";\n\t\t\t} else {\n\t\t\t\tstoryFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE);\n\t\t\t}\n\t\t}\n\t}\n\t// Process the story filter to get the story list\n\tvar storyList = $tw.wiki.filterTiddlers(storyFilter);\n\t//invoke any hooks that might change the default story list\n\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t// If the target tiddler isn't included then splice it in at the top\n\tif(target && storyList.indexOf(target) === -1) {\n\t\tstoryList.unshift(target);\n\t}\n\t// Save the story list\n\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t// If a target tiddler was specified add it to the history stack\n\tif(target && target !== \"\") {\n\t\t// The target tiddler doesn't need double square brackets, but we'll silently remove them if they're present\n\t\tif(target.indexOf(\"[[\") === 0 && target.substr(-2) === \"]]\") {\n\t\t\ttarget = target.substr(2,target.length - 4);\n\t\t}\n\t\t$tw.wiki.addToHistory(target);\n\t} else if(storyList.length > 0) {\n\t\t$tw.wiki.addToHistory(storyList[0]);\n\t}\n}\n\n/*\noptions: See below\noptions.updateAddressBar: \"permalink\", \"permaview\" or \"no\" (defaults to \"permaview\")\noptions.updateHistory: \"yes\" or \"no\" (defaults to \"no\")\noptions.targetTiddler: optional title of target tiddler for permalink\n*/\nfunction updateLocationHash(options) {\n\tif(options.updateAddressBar !== \"no\") {\n\t\t// Get the story and the history stack\n\t\tvar storyList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE),\n\t\t\thistoryList = $tw.wiki.getTiddlerData(DEFAULT_HISTORY_TITLE,[]),\n\t\t\ttargetTiddler = \"\";\n\t\tif(options.targetTiddler) {\n\t\t\ttargetTiddler = options.targetTiddler;\n\t\t} else {\n\t\t\t// The target tiddler is the one at the top of the stack\n\t\t\tif(historyList.length > 0) {\n\t\t\t\ttargetTiddler = historyList[historyList.length-1].title;\n\t\t\t}\n\t\t\t// Blank the target tiddler if it isn't present in the story\n\t\t\tif(storyList.indexOf(targetTiddler) === -1) {\n\t\t\t\ttargetTiddler = \"\";\n\t\t\t}\n\t\t}\n\t\t// Assemble the location hash\n\t\tif(options.updateAddressBar === \"permalink\") {\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler);\n\t\t} else {\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler) + \":\" + encodeURIComponent($tw.utils.stringifyList(storyList));\n\t\t}\n\t\t// Only change the location hash if we must, thus avoiding unnecessary onhashchange events\n\t\tif($tw.utils.getLocationHash() !== $tw.locationHash) {\n\t\t\tif(options.updateHistory === \"yes\") {\n\t\t\t\t// Assign the location hash so that history is updated\n\t\t\t\twindow.location.hash = $tw.locationHash;\n\t\t\t} else {\n\t\t\t\t// We use replace so that browser history isn't affected\n\t\t\t\twindow.location.replace(window.location.toString().split(\"#\")[0] + $tw.locationHash);\n\t\t\t}\n\t\t}\n\t}\n}\n\n})();\n",
"title": "$:/core/modules/startup/story.js",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/storyviews/classic.js": {
"text": "/*\\\ntitle: $:/core/modules/storyviews/classic.js\ntype: application/javascript\nmodule-type: storyview\n\nViews the story as a linear sequence\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ClassicStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nClassicStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Scroll the node into view\n\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\n};\n\nClassicStoryView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Get the current height of the tiddler\n\tvar computedStyle = window.getComputedStyle(targetElement),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t// Reset the margin once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"}\n\t\t]);\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t// Transition to the final position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n};\n\nClassicStoryView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\twidget.removeChildDomNodes();\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Get the current height of the tiddler\n\tvar currWidth = targetElement.offsetWidth,\n\t\tcomputedStyle = window.getComputedStyle(targetElement),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t// Remove the dom nodes of the widget at the end of the transition\n\tsetTimeout(removeElement,duration);\n\t// Animate the closure\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"translateX(0px)\"},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t{transform: \"translateX(-\" + currWidth + \"px)\"},\n\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n};\n\nexports.classic = ClassicStoryView;\n\n})();",
"title": "$:/core/modules/storyviews/classic.js",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/storyviews/pop.js": {
"text": "/*\\\ntitle: $:/core/modules/storyviews/pop.js\ntype: application/javascript\nmodule-type: storyview\n\nAnimates list insertions and removals\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar PopStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nPopStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Scroll the node into view\n\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\n};\n\nPopStoryView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Reset once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{transform: \"none\"}\n\t\t]);\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(2)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t// Transition to the final position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n};\n\nPopStoryView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\tif(targetElement.parentNode) {\n\t\t\t\twidget.removeChildDomNodes();\n\t\t\t}\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Remove the element at the end of the transition\n\tsetTimeout(removeElement,duration);\n\t// Animate the closure\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(0.1)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n};\n\nexports.pop = PopStoryView;\n\n})();\n",
"title": "$:/core/modules/storyviews/pop.js",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/storyviews/zoomin.js": {
"text": "/*\\\ntitle: $:/core/modules/storyviews/zoomin.js\ntype: application/javascript\nmodule-type: storyview\n\nZooms between individual tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ZoominListView = function(listWidget) {\n\tvar self = this;\n\tthis.listWidget = listWidget;\n\t// Get the index of the tiddler that is at the top of the history\n\tvar history = this.listWidget.wiki.getTiddlerData(this.listWidget.historyTitle,[]),\n\t\ttargetTiddler;\n\tif(history.length > 0) {\n\t\ttargetTiddler = history[history.length-1].title;\n\t}\n\t// Make all the tiddlers position absolute, and hide all but the top (or first) one\n\t$tw.utils.each(this.listWidget.children,function(itemWidget,index) {\n\t\tvar domNode = itemWidget.findFirstDomNode();\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(domNode instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\t\tif(targetTiddler !== itemWidget.parseTreeNode.itemTitle || (!targetTiddler && index)) {\n\t\t\tdomNode.style.display = \"none\";\n\t\t} else {\n\t\t\tself.currentTiddlerDomNode = domNode;\n\t\t}\n\t\t$tw.utils.addClass(domNode,\"tc-storyview-zoomin-tiddler\");\n\t});\n};\n\nZoominListView.prototype.navigateTo = function(historyInfo) {\n\tvar duration = $tw.utils.getAnimationDuration(),\n\t\tlistElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the new tiddler be position absolute and visible so that we can measure it\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"0 0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t// Get the position of the source node, or use the centre of the window as the source position\n\tvar sourceBounds = historyInfo.fromPageRect || {\n\t\t\tleft: window.innerWidth/2 - 2,\n\t\t\ttop: window.innerHeight/2 - 2,\n\t\t\twidth: window.innerWidth/8,\n\t\t\theight: window.innerHeight/8\n\t\t};\n\t// Try to find the title node in the target tiddler\n\tvar titleDomNode = findTitleDomNode(listItemWidget) || listItemWidget.findFirstDomNode(),\n\t\tzoomBounds = titleDomNode.getBoundingClientRect();\n\t// Compute the transform for the target tiddler to make the title lie over the source rectange\n\tvar targetBounds = targetElement.getBoundingClientRect(),\n\t\tscale = sourceBounds.width / zoomBounds.width,\n\t\tx = sourceBounds.left - targetBounds.left - (zoomBounds.left - targetBounds.left) * scale,\n\t\ty = sourceBounds.top - targetBounds.top - (zoomBounds.top - targetBounds.top) * scale;\n\t// Transform the target tiddler to its starting position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(targetElement);\n\t// Apply the ending transitions with a timeout to ensure that the previously applied transformations are applied first\n\tvar self = this,\n\t\tprevCurrentTiddler = this.currentTiddlerDomNode;\n\tthis.currentTiddlerDomNode = targetElement;\n\t// Transform the target tiddler to its natural size\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{zIndex: \"500\"},\n\t]);\n\t// Transform the previous tiddler out of the way and then hide it\n\tif(prevCurrentTiddler && prevCurrentTiddler !== targetElement) {\n\t\tscale = zoomBounds.width / sourceBounds.width;\n\t\tx = zoomBounds.left - targetBounds.left - (sourceBounds.left - targetBounds.left) * scale;\n\t\ty = zoomBounds.top - targetBounds.top - (sourceBounds.top - targetBounds.top) * scale;\n\t\t$tw.utils.setStyle(prevCurrentTiddler,[\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transformOrigin: \"0 0\"},\n\t\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"},\n\t\t\t{zIndex: \"0\"}\n\t\t]);\n\t\t// Hide the tiddler when the transition has finished\n\t\tsetTimeout(function() {\n\t\t\tif(self.currentTiddlerDomNode !== prevCurrentTiddler) {\n\t\t\t\tprevCurrentTiddler.style.display = \"none\";\n\t\t\t}\n\t\t},duration);\n\t}\n\t// Scroll the target into view\n//\t$tw.pageScroller.scrollIntoView(targetElement);\n};\n\n/*\nFind the first child DOM node of a widget that has the class \"tc-title\"\n*/\nfunction findTitleDomNode(widget,targetClass) {\n\ttargetClass = targetClass || \"tc-title\";\n\tvar domNode = widget.findFirstDomNode();\n\tif(domNode && domNode.querySelector) {\n\t\treturn domNode.querySelector(\".\" + targetClass);\n\t}\n\treturn null;\n}\n\nZoominListView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the newly inserted node position absolute and hidden\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"none\"}\n\t]);\n};\n\nZoominListView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\twidget.removeChildDomNodes();\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Set up the tiddler that is being closed\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\t// We'll move back to the previous or next element in the story\n\tvar toWidget = widget.previousSibling();\n\tif(!toWidget) {\n\t\ttoWidget = widget.nextSibling();\n\t}\n\tvar toWidgetDomNode = toWidget && toWidget.findFirstDomNode();\n\t// Set up the tiddler we're moving back in\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.addClass(toWidgetDomNode,\"tc-storyview-zoomin-tiddler\");\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{display: \"block\"},\n\t\t\t{transformOrigin: \"50% 50%\"},\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(10)\"},\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0\"},\n\t\t\t{zIndex: \"500\"}\n\t\t]);\n\t\tthis.currentTiddlerDomNode = toWidgetDomNode;\n\t}\n\t// Animate them both\n\t// Force layout\n\t$tw.utils.forceLayout(this.listWidget.parentDomNode);\n\t// First, the tiddler we're closing\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(0.1)\"},\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"0\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\tsetTimeout(removeElement,duration);\n\t// Now the tiddler we're going back to\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t\t{opacity: \"1\"}\n\t\t]);\n\t}\n\treturn true; // Indicate that we'll delete the DOM node\n};\n\nexports.zoomin = ZoominListView;\n\n})();",
"title": "$:/core/modules/storyviews/zoomin.js",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/syncer.js": {
"text": "/*\\\ntitle: $:/core/modules/syncer.js\ntype: application/javascript\nmodule-type: global\n\nThe syncer tracks changes to the store. If a syncadaptor is used then individual tiddlers are synchronised through it. If there is no syncadaptor then the entire wiki is saved via saver modules.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInstantiate the syncer with the following options:\nsyncadaptor: reference to syncadaptor to be used\nwiki: wiki to be synced\n*/\nfunction Syncer(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\tthis.syncadaptor = options.syncadaptor;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"syncer\" + ($tw.browser ? \"-browser\" : \"\") + ($tw.node ? \"-server\" : \"\"));\n\t// Compile the dirty tiddler filter\n\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t// Record information for known tiddlers\n\tthis.readTiddlerInfo();\n\t// Tasks are {type: \"load\"/\"save\"/\"delete\", title:, queueTime:, lastModificationTime:}\n\tthis.taskQueue = {}; // Hashmap of tasks yet to be performed\n\tthis.taskInProgress = {}; // Hash of tasks in progress\n\tthis.taskTimerId = null; // Timer for task dispatch\n\tthis.pollTimerId = null; // Timer for polling server\n\t// Listen out for changes to tiddlers\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tself.syncToServer(changes);\n\t});\n\t// Browser event handlers\n\tif($tw.browser) {\n\t\t// Set up our beforeunload handler\n\t\twindow.addEventListener(\"beforeunload\",function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t\t// Listen out for login/logout/refresh events in the browser\n\t\t$tw.rootWidget.addEventListener(\"tm-login\",function() {\n\t\t\tself.handleLoginEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-logout\",function() {\n\t\t\tself.handleLogoutEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-server-refresh\",function() {\n\t\t\tself.handleRefreshEvent();\n\t\t});\n\t}\n\t// Listen out for lazyLoad events\n\tthis.wiki.addEventListener(\"lazyLoad\",function(title) {\n\t\tself.handleLazyLoadEvent(title);\n\t});\n\t// Get the login status\n\tthis.getStatus(function(err,isLoggedIn) {\n\t\t// Do a sync from the server\n\t\tself.syncFromServer();\n\t});\n}\n\n/*\nConstants\n*/\nSyncer.prototype.titleIsLoggedIn = \"$:/status/IsLoggedIn\";\nSyncer.prototype.titleUserName = \"$:/status/UserName\";\nSyncer.prototype.titleSyncFilter = \"$:/config/SyncFilter\";\nSyncer.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\nSyncer.prototype.taskTimerInterval = 1 * 1000; // Interval for sync timer\nSyncer.prototype.throttleInterval = 1 * 1000; // Defer saving tiddlers if they've changed in the last 1s...\nSyncer.prototype.fallbackInterval = 10 * 1000; // Unless the task is older than 10s\nSyncer.prototype.pollTimerInterval = 60 * 1000; // Interval for polling for changes from the adaptor\n\n\n/*\nRead (or re-read) the latest tiddler info from the store\n*/\nSyncer.prototype.readTiddlerInfo = function() {\n\t// Hashmap by title of {revision:,changeCount:,adaptorInfo:}\n\tthis.tiddlerInfo = {};\n\t// Record information for known tiddlers\n\tvar self = this,\n\t\ttiddlers = this.filterFn.call(this.wiki);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\tself.tiddlerInfo[title] = {\n\t\t\trevision: tiddler.fields.revision,\n\t\t\tadaptorInfo: self.syncadaptor && self.syncadaptor.getTiddlerInfo(tiddler),\n\t\t\tchangeCount: self.wiki.getChangeCount(title)\n\t\t};\n\t});\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSyncer.prototype.isDirty = function() {\n\treturn (this.numTasksInQueue() > 0) || (this.numTasksInProgress() > 0);\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSyncer.prototype.updateDirtyStatus = function() {\n\tif($tw.browser) {\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",this.isDirty());\n\t}\n};\n\n/*\nSave an incoming tiddler in the store, and updates the associated tiddlerInfo\n*/\nSyncer.prototype.storeTiddler = function(tiddlerFields) {\n\t// Save the tiddler\n\tvar tiddler = new $tw.Tiddler(this.wiki.getTiddler(tiddlerFields.title),tiddlerFields);\n\tthis.wiki.addTiddler(tiddler);\n\t// Save the tiddler revision and changeCount details\n\tthis.tiddlerInfo[tiddlerFields.title] = {\n\t\trevision: tiddlerFields.revision,\n\t\tadaptorInfo: this.syncadaptor.getTiddlerInfo(tiddler),\n\t\tchangeCount: this.wiki.getChangeCount(tiddlerFields.title)\n\t};\n};\n\nSyncer.prototype.getStatus = function(callback) {\n\tvar self = this;\n\t// Check if the adaptor supports getStatus()\n\tif(this.syncadaptor && this.syncadaptor.getStatus) {\n\t\t// Mark us as not logged in\n\t\tthis.wiki.addTiddler({title: this.titleIsLoggedIn,text: \"no\"});\n\t\t// Get login status\n\t\tthis.syncadaptor.getStatus(function(err,isLoggedIn,username) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Set the various status tiddlers\n\t\t\tself.wiki.addTiddler({title: self.titleIsLoggedIn,text: isLoggedIn ? \"yes\" : \"no\"});\n\t\t\tif(isLoggedIn) {\n\t\t\t\tself.wiki.addTiddler({title: self.titleUserName,text: username || \"\"});\n\t\t\t} else {\n\t\t\t\tself.wiki.deleteTiddler(self.titleUserName);\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tif(callback) {\n\t\t\t\tcallback(err,isLoggedIn,username);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tcallback(null,true,\"UNAUTHENTICATED\");\n\t}\n};\n\n/*\nSynchronise from the server by reading the skinny tiddler list and queuing up loads for any tiddlers that we don't already have up to date\n*/\nSyncer.prototype.syncFromServer = function() {\n\tif(this.syncadaptor && this.syncadaptor.getSkinnyTiddlers) {\n\t\tthis.logger.log(\"Retrieving skinny tiddler list\");\n\t\tvar self = this;\n\t\tif(this.pollTimerId) {\n\t\t\tclearTimeout(this.pollTimerId);\n\t\t\tthis.pollTimerId = null;\n\t\t}\n\t\tthis.syncadaptor.getSkinnyTiddlers(function(err,tiddlers) {\n\t\t\t// Trigger the next sync\n\t\t\tself.pollTimerId = setTimeout(function() {\n\t\t\t\tself.pollTimerId = null;\n\t\t\t\tself.syncFromServer.call(self);\n\t\t\t},self.pollTimerInterval);\n\t\t\t// Check for errors\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(\"Error retrieving skinny tiddler list:\",err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Process each incoming tiddler\n\t\t\tfor(var t=0; t<tiddlers.length; t++) {\n\t\t\t\t// Get the incoming tiddler fields, and the existing tiddler\n\t\t\t\tvar tiddlerFields = tiddlers[t],\n\t\t\t\t\tincomingRevision = tiddlerFields.revision + \"\",\n\t\t\t\t\ttiddler = self.wiki.getTiddler(tiddlerFields.title),\n\t\t\t\t\ttiddlerInfo = self.tiddlerInfo[tiddlerFields.title],\n\t\t\t\t\tcurrRevision = tiddlerInfo ? tiddlerInfo.revision : null;\n\t\t\t\t// Ignore the incoming tiddler if it's the same as the revision we've already got\n\t\t\t\tif(currRevision !== incomingRevision) {\n\t\t\t\t\t// Do a full load if we've already got a fat version of the tiddler\n\t\t\t\t\tif(tiddler && tiddler.fields.text !== undefined) {\n\t\t\t\t\t\t// Do a full load of this tiddler\n\t\t\t\t\t\tself.enqueueSyncTask({\n\t\t\t\t\t\t\ttype: \"load\",\n\t\t\t\t\t\t\ttitle: tiddlerFields.title\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Load the skinny version of the tiddler\n\t\t\t\t\t\tself.storeTiddler(tiddlerFields);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nSynchronise a set of changes to the server\n*/\nSyncer.prototype.syncToServer = function(changes) {\n\tvar self = this,\n\t\tnow = Date.now(),\n\t\tfilteredChanges = this.filterFn.call(this.wiki,function(callback) {\n\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\tcallback(tiddler,title);\n\t\t\t});\n\t\t});\n\t$tw.utils.each(changes,function(change,title,object) {\n\t\t// Process the change if it is a deletion of a tiddler we're already syncing, or is on the filtered change list\n\t\tif((change.deleted && $tw.utils.hop(self.tiddlerInfo,title)) || filteredChanges.indexOf(title) !== -1) {\n\t\t\t// Queue a task to sync this tiddler\n\t\t\tself.enqueueSyncTask({\n\t\t\t\ttype: change.deleted ? \"delete\" : \"save\",\n\t\t\t\ttitle: title\n\t\t\t});\n\t\t}\n\t});\n};\n\n/*\nLazily load a skinny tiddler if we can\n*/\nSyncer.prototype.handleLazyLoadEvent = function(title) {\n\t// Queue up a sync task to load this tiddler\n\tthis.enqueueSyncTask({\n\t\ttype: \"load\",\n\t\ttitle: title\n\t});\n};\n\n/*\nDispay a password prompt and allow the user to login\n*/\nSyncer.prototype.handleLoginEvent = function() {\n\tvar self = this;\n\tthis.getStatus(function(err,isLoggedIn,username) {\n\t\tif(!isLoggedIn) {\n\t\t\t$tw.passwordPrompt.createPrompt({\n\t\t\t\tserviceName: \"Login to TiddlySpace\",\n\t\t\t\tcallback: function(data) {\n\t\t\t\t\tself.login(data.username,data.password,function(err,isLoggedIn) {\n\t\t\t\t\t\tself.syncFromServer();\n\t\t\t\t\t});\n\t\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n};\n\n/*\nAttempt to login to TiddlyWeb.\n\tusername: username\n\tpassword: password\n\tcallback: invoked with arguments (err,isLoggedIn)\n*/\nSyncer.prototype.login = function(username,password,callback) {\n\tthis.logger.log(\"Attempting to login as\",username);\n\tvar self = this;\n\tif(this.syncadaptor.login) {\n\t\tthis.syncadaptor.login(username,password,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.getStatus(function(err,isLoggedIn,username) {\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback(null,isLoggedIn);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t} else {\n\t\tcallback(null,true);\n\t}\n};\n\n/*\nAttempt to log out of TiddlyWeb\n*/\nSyncer.prototype.handleLogoutEvent = function() {\n\tthis.logger.log(\"Attempting to logout\");\n\tvar self = this;\n\tif(this.syncadaptor.logout) {\n\t\tthis.syncadaptor.logout(function(err) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t} else {\n\t\t\t\tself.getStatus();\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nImmediately refresh from the server\n*/\nSyncer.prototype.handleRefreshEvent = function() {\n\tthis.syncFromServer();\n};\n\n/*\nQueue up a sync task. If there is already a pending task for the tiddler, just update the last modification time\n*/\nSyncer.prototype.enqueueSyncTask = function(task) {\n\tvar self = this,\n\t\tnow = Date.now();\n\t// Set the timestamps on this task\n\ttask.queueTime = now;\n\ttask.lastModificationTime = now;\n\t// Fill in some tiddlerInfo if the tiddler is one we haven't seen before\n\tif(!$tw.utils.hop(this.tiddlerInfo,task.title)) {\n\t\tthis.tiddlerInfo[task.title] = {\n\t\t\trevision: null,\n\t\t\tadaptorInfo: {},\n\t\t\tchangeCount: -1\n\t\t};\n\t}\n\t// Bail if this is a save and the tiddler is already at the changeCount that the server has\n\tif(task.type === \"save\" && this.wiki.getChangeCount(task.title) <= this.tiddlerInfo[task.title].changeCount) {\n\t\treturn;\n\t}\n\t// Check if this tiddler is already in the queue\n\tif($tw.utils.hop(this.taskQueue,task.title)) {\n\t\t// this.logger.log(\"Re-queueing up sync task with type:\",task.type,\"title:\",task.title);\n\t\tvar existingTask = this.taskQueue[task.title];\n\t\t// If so, just update the last modification time\n\t\texistingTask.lastModificationTime = task.lastModificationTime;\n\t\t// If the new task is a save then we upgrade the existing task to a save. Thus a pending load is turned into a save if the tiddler changes locally in the meantime. But a pending save is not modified to become a load\n\t\tif(task.type === \"save\" || task.type === \"delete\") {\n\t\t\texistingTask.type = task.type;\n\t\t}\n\t} else {\n\t\t// this.logger.log(\"Queuing up sync task with type:\",task.type,\"title:\",task.title);\n\t\t// If it is not in the queue, insert it\n\t\tthis.taskQueue[task.title] = task;\n\t\tthis.updateDirtyStatus();\n\t}\n\t// Process the queue\n\t$tw.utils.nextTick(function() {self.processTaskQueue.call(self);});\n};\n\n/*\nReturn the number of tasks in progress\n*/\nSyncer.prototype.numTasksInProgress = function() {\n\treturn $tw.utils.count(this.taskInProgress);\n};\n\n/*\nReturn the number of tasks in the queue\n*/\nSyncer.prototype.numTasksInQueue = function() {\n\treturn $tw.utils.count(this.taskQueue);\n};\n\n/*\nTrigger a timeout if one isn't already outstanding\n*/\nSyncer.prototype.triggerTimeout = function() {\n\tvar self = this;\n\tif(!this.taskTimerId) {\n\t\tthis.taskTimerId = setTimeout(function() {\n\t\t\tself.taskTimerId = null;\n\t\t\tself.processTaskQueue.call(self);\n\t\t},self.taskTimerInterval);\n\t}\n};\n\n/*\nProcess the task queue, performing the next task if appropriate\n*/\nSyncer.prototype.processTaskQueue = function() {\n\tvar self = this;\n\t// Only process a task if we're not already performing a task. If we are already performing a task then we'll dispatch the next one when it completes\n\tif(this.numTasksInProgress() === 0) {\n\t\t// Choose the next task to perform\n\t\tvar task = this.chooseNextTask();\n\t\t// Perform the task if we had one\n\t\tif(task) {\n\t\t\t// Remove the task from the queue and add it to the in progress list\n\t\t\tdelete this.taskQueue[task.title];\n\t\t\tthis.taskInProgress[task.title] = task;\n\t\t\tthis.updateDirtyStatus();\n\t\t\t// Dispatch the task\n\t\t\tthis.dispatchTask(task,function(err) {\n\t\t\t\tif(err) {\n\t\t\t\t\tself.logger.alert(\"Sync error while processing '\" + task.title + \"':\\n\" + err);\n\t\t\t\t}\n\t\t\t\t// Mark that this task is no longer in progress\n\t\t\t\tdelete self.taskInProgress[task.title];\n\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t// Process the next task\n\t\t\t\tself.processTaskQueue.call(self);\n\t\t\t});\n\t\t} else {\n\t\t\t// Make sure we've set a time if there wasn't a task to perform, but we've still got tasks in the queue\n\t\t\tif(this.numTasksInQueue() > 0) {\n\t\t\t\tthis.triggerTimeout();\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nChoose the next applicable task\n*/\nSyncer.prototype.chooseNextTask = function() {\n\tvar self = this,\n\t\tcandidateTask = null,\n\t\tnow = Date.now();\n\t// Select the best candidate task\n\t$tw.utils.each(this.taskQueue,function(task,title) {\n\t\t// Exclude the task if there's one of the same name in progress\n\t\tif($tw.utils.hop(self.taskInProgress,title)) {\n\t\t\treturn;\n\t\t}\n\t\t// Exclude the task if it is a save and the tiddler has been modified recently, but not hit the fallback time\n\t\tif(task.type === \"save\" && (now - task.lastModificationTime) < self.throttleInterval &&\n\t\t\t(now - task.queueTime) < self.fallbackInterval) {\n\t\t\treturn;\n\t\t}\n\t\t// Exclude the task if it is newer than the current best candidate\n\t\tif(candidateTask && candidateTask.queueTime < task.queueTime) {\n\t\t\treturn;\n\t\t}\n\t\t// Now this is our best candidate\n\t\tcandidateTask = task;\n\t});\n\treturn candidateTask;\n};\n\n/*\nDispatch a task and invoke the callback\n*/\nSyncer.prototype.dispatchTask = function(task,callback) {\n\tvar self = this;\n\tif(task.type === \"save\") {\n\t\tvar changeCount = this.wiki.getChangeCount(task.title),\n\t\t\ttiddler = this.wiki.getTiddler(task.title);\n\t\tthis.logger.log(\"Dispatching 'save' task:\",task.title);\n\t\tif(tiddler) {\n\t\t\tthis.syncadaptor.saveTiddler(tiddler,function(err,adaptorInfo,revision) {\n\t\t\t\tif(err) {\n\t\t\t\t\treturn callback(err);\n\t\t\t\t}\n\t\t\t\t// Adjust the info stored about this tiddler\n\t\t\t\tself.tiddlerInfo[task.title] = {\n\t\t\t\t\tchangeCount: changeCount,\n\t\t\t\t\tadaptorInfo: adaptorInfo,\n\t\t\t\t\trevision: revision\n\t\t\t\t};\n\t\t\t\t// Invoke the callback\n\t\t\t\tcallback(null);\n\t\t\t},{\n\t\t\t\ttiddlerInfo: self.tiddlerInfo[task.title]\n\t\t\t});\n\t\t} else {\n\t\t\tthis.logger.log(\" Not Dispatching 'save' task:\",task.title,\"tiddler does not exist\");\n\t\t\treturn callback(null);\n\t\t}\n\t} else if(task.type === \"load\") {\n\t\t// Load the tiddler\n\t\tthis.logger.log(\"Dispatching 'load' task:\",task.title);\n\t\tthis.syncadaptor.loadTiddler(task.title,function(err,tiddlerFields) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\t// Store the tiddler\n\t\t\tif(tiddlerFields) {\n\t\t\t\tself.storeTiddler(tiddlerFields);\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t});\n\t} else if(task.type === \"delete\") {\n\t\t// Delete the tiddler\n\t\tthis.logger.log(\"Dispatching 'delete' task:\",task.title);\n\t\tthis.syncadaptor.deleteTiddler(task.title,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tdelete self.tiddlerInfo[task.title];\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t},{\n\t\t\ttiddlerInfo: self.tiddlerInfo[task.title]\n\t\t});\n\t}\n};\n\nexports.Syncer = Syncer;\n\n})();\n",
"title": "$:/core/modules/syncer.js",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/tiddler.js": {
"text": "/*\\\ntitle: $:/core/modules/tiddler.js\ntype: application/javascript\nmodule-type: tiddlermethod\n\nExtension methods for the $tw.Tiddler object (constructor and methods required at boot time are in boot/boot.js)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.hasTag = function(tag) {\n\treturn this.fields.tags && this.fields.tags.indexOf(tag) !== -1;\n};\n\nexports.isPlugin = function() {\n\treturn this.fields.type === \"application/json\" && this.hasField(\"plugin-type\");\n};\n\nexports.isDraft = function() {\n\treturn this.hasField(\"draft.of\");\n};\n\nexports.getFieldString = function(field) {\n\tvar value = this.fields[field];\n\t// Check for a missing field\n\tif(value === undefined || value === null) {\n\t\treturn \"\";\n\t}\n\t// Parse the field with the associated module (if any)\n\tvar fieldModule = $tw.Tiddler.fieldModules[field];\n\tif(fieldModule && fieldModule.stringify) {\n\t\treturn fieldModule.stringify.call(this,value);\n\t} else {\n\t\treturn value.toString();\n\t}\n};\n\n/*\nGet all the fields as a name:value block. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStringBlock = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [];\n\tvar fields = [];\n\tfor(var field in this.fields) {\n\t\tif($tw.utils.hop(this.fields,field)) {\n\t\t\tif(exclude.indexOf(field) === -1) {\n\t\t\t\tfields.push(field + \": \" + this.getFieldString(field));\n\t\t\t}\n\t\t}\n\t}\n\treturn fields.join(\"\\n\");\n};\n\n/*\nCompare two tiddlers for equality\ntiddler: the tiddler to compare\nexcludeFields: array of field names to exclude from the comparison\n*/\nexports.isEqual = function(tiddler,excludeFields) {\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\treturn false;\n\t}\n\texcludeFields = excludeFields || [];\n\tvar self = this,\n\t\tdifferences = []; // Fields that have differences\n\t// Add to the differences array\n\tfunction addDifference(fieldName) {\n\t\t// Check for this field being excluded\n\t\tif(excludeFields.indexOf(fieldName) === -1) {\n\t\t\t// Save the field as a difference\n\t\t\t$tw.utils.pushTop(differences,fieldName);\n\t\t}\n\t}\n\t// Returns true if the two values of this field are equal\n\tfunction isFieldValueEqual(fieldName) {\n\t\tvar valueA = self.fields[fieldName],\n\t\t\tvalueB = tiddler.fields[fieldName];\n\t\t// Check for identical string values\n\t\tif(typeof(valueA) === \"string\" && typeof(valueB) === \"string\" && valueA === valueB) {\n\t\t\treturn true;\n\t\t}\n\t\t// Check for identical array values\n\t\tif($tw.utils.isArray(valueA) && $tw.utils.isArray(valueB) && $tw.utils.isArrayEqual(valueA,valueB)) {\n\t\t\treturn true;\n\t\t}\n\t\t// Otherwise the fields must be different\n\t\treturn false;\n\t}\n\t// Compare our fields\n\tfor(var fieldName in this.fields) {\n\t\tif(!isFieldValueEqual(fieldName)) {\n\t\t\taddDifference(fieldName);\n\t\t}\n\t}\n\t// There's a difference for every field in the other tiddler that we don't have\n\tfor(fieldName in tiddler.fields) {\n\t\tif(!(fieldName in this.fields)) {\n\t\t\taddDifference(fieldName);\n\t\t}\n\t}\n\t// Return whether there were any differences\n\treturn differences.length === 0;\n};\n\n})();\n",
"title": "$:/core/modules/tiddler.js",
"type": "application/javascript",
"module-type": "tiddlermethod"
},
"$:/core/modules/upgraders/plugins.js": {
"text": "/*\\\ntitle: $:/core/modules/upgraders/plugins.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that checks that plugins are newer than any already installed version\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar BLOCKED_PLUGINS = {\n\t\"$:/plugins/tiddlywiki/fullscreen\": {\n\t\tversions: [\"*\"]\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {},\n\t\tupgradeLibrary,\n\t\tgetLibraryTiddler = function(title) {\n\t\t\tif(!upgradeLibrary) {\n\t\t\t\tupgradeLibrary = wiki.getTiddlerData(UPGRADE_LIBRARY_TITLE,{});\n\t\t\t\tupgradeLibrary.tiddlers = upgradeLibrary.tiddlers || {};\n\t\t\t}\n\t\t\treturn upgradeLibrary.tiddlers[title];\n\t\t};\n\n\t// Go through all the incoming tiddlers\n\t$tw.utils.each(titles,function(title) {\n\t\tvar incomingTiddler = tiddlers[title];\n\t\t// Check if we're dealing with a plugin\n\t\tif(incomingTiddler && incomingTiddler[\"plugin-type\"] && incomingTiddler.version) {\n\t\t\t// Upgrade the incoming plugin if we've got a newer version in the upgrade library\n\t\t\tvar libraryTiddler = getLibraryTiddler(title);\n\t\t\tif(libraryTiddler && libraryTiddler[\"plugin-type\"] && libraryTiddler.version) {\n\t\t\t\tif($tw.utils.checkVersions(libraryTiddler.version,incomingTiddler.version)) {\n\t\t\t\t\ttiddlers[title] = libraryTiddler;\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Upgraded\",{variables: {incoming: incomingTiddler.version, upgraded: libraryTiddler.version}});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Suppress the incoming plugin if it is older than the currently installed one\n\t\t\tvar existingTiddler = wiki.getTiddler(title);\n\t\t\tif(existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t\t\t// Reject the incoming plugin by blanking all its fields\n\t\t\t\tif($tw.utils.checkVersions(existingTiddler.fields.version,incomingTiddler.version)) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Version\",{variables: {incoming: incomingTiddler.version, existing: existingTiddler.fields.version}});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(incomingTiddler && incomingTiddler[\"plugin-type\"]) {\n\t\t\t// Check whether the plugin is on the blocked list\n\t\t\tvar blockInfo = BLOCKED_PLUGINS[title];\n\t\t\tif(blockInfo) {\n\t\t\t\tif(blockInfo.versions.indexOf(\"*\") !== -1 || (incomingTiddler.version && blockInfo.versions.indexOf(incomingTiddler.version) !== -1)) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Incompatible\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
"title": "$:/core/modules/upgraders/plugins.js",
"type": "application/javascript",
"module-type": "upgrader"
},
"$:/core/modules/upgraders/system.js": {
"text": "/*\\\ntitle: $:/core/modules/upgraders/system.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that suppresses certain system tiddlers that shouldn't be imported\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DONT_IMPORT_LIST = [\"$:/StoryList\",\"$:/HistoryList\"],\n\tDONT_IMPORT_PREFIX_LIST = [\"$:/temp/\",\"$:/state/\"];\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {};\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tif(DONT_IMPORT_LIST.indexOf(title) !== -1) {\n\t\t\ttiddlers[title] = Object.create(null);\n\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/System/Suppressed\");\n\t\t} else {\n\t\t\tfor(var t=0; t<DONT_IMPORT_PREFIX_LIST.length; t++) {\n\t\t\t\tvar prefix = DONT_IMPORT_PREFIX_LIST[t];\n\t\t\t\tif(title.substr(0,prefix.length) === prefix) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/State/Suppressed\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
"title": "$:/core/modules/upgraders/system.js",
"type": "application/javascript",
"module-type": "upgrader"
},
"$:/core/modules/upgraders/themetweaks.js": {
"text": "/*\\\ntitle: $:/core/modules/upgraders/themetweaks.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that handles the change in theme tweak storage introduced in 5.0.14-beta.\n\nPreviously, theme tweaks were stored in two data tiddlers:\n\n* $:/themes/tiddlywiki/vanilla/metrics\n* $:/themes/tiddlywiki/vanilla/settings\n\nNow, each tweak is stored in its own separate tiddler.\n\nThis upgrader copies any values from the old format to the new. The old data tiddlers are not deleted in case they have been used to store additional indexes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar MAPPINGS = {\n\t\"$:/themes/tiddlywiki/vanilla/metrics\": {\n\t\t\"fontsize\": \"$:/themes/tiddlywiki/vanilla/metrics/fontsize\",\n\t\t\"lineheight\": \"$:/themes/tiddlywiki/vanilla/metrics/lineheight\",\n\t\t\"storyleft\": \"$:/themes/tiddlywiki/vanilla/metrics/storyleft\",\n\t\t\"storytop\": \"$:/themes/tiddlywiki/vanilla/metrics/storytop\",\n\t\t\"storyright\": \"$:/themes/tiddlywiki/vanilla/metrics/storyright\",\n\t\t\"storywidth\": \"$:/themes/tiddlywiki/vanilla/metrics/storywidth\",\n\t\t\"tiddlerwidth\": \"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"\n\t},\n\t\"$:/themes/tiddlywiki/vanilla/settings\": {\n\t\t\"fontfamily\": \"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {};\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tvar mapping = MAPPINGS[title];\n\t\tif(mapping) {\n\t\t\tvar tiddler = new $tw.Tiddler(tiddlers[title]),\n\t\t\t\ttiddlerData = wiki.getTiddlerData(tiddler,{});\n\t\t\tfor(var index in mapping) {\n\t\t\t\tvar mappedTitle = mapping[index];\n\t\t\t\tif(!tiddlers[mappedTitle] || tiddlers[mappedTitle].title !== mappedTitle) {\n\t\t\t\t\ttiddlers[mappedTitle] = {\n\t\t\t\t\t\ttitle: mappedTitle,\n\t\t\t\t\t\ttext: tiddlerData[index]\n\t\t\t\t\t};\n\t\t\t\t\tmessages[mappedTitle] = $tw.language.getString(\"Import/Upgrader/ThemeTweaks/Created\",{variables: {\n\t\t\t\t\t\tfrom: title + \"##\" + index\n\t\t\t\t\t}});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
"title": "$:/core/modules/upgraders/themetweaks.js",
"type": "application/javascript",
"module-type": "upgrader"
},
"$:/core/modules/utils/crypto.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/crypto.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions related to crypto.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for an encrypted store area in the text of a TiddlyWiki file\n*/\nexports.extractEncryptedStoreArea = function(text) {\n\tvar encryptedStoreAreaStartMarker = \"<pre id=\\\"encryptedStoreArea\\\" type=\\\"text/plain\\\" style=\\\"display:none;\\\">\",\n\t\tencryptedStoreAreaStart = text.indexOf(encryptedStoreAreaStartMarker);\n\tif(encryptedStoreAreaStart !== -1) {\n\t\tvar encryptedStoreAreaEnd = text.indexOf(\"</pre>\",encryptedStoreAreaStart);\n\t\tif(encryptedStoreAreaEnd !== -1) {\n\t\t\treturn $tw.utils.htmlDecode(text.substring(encryptedStoreAreaStart + encryptedStoreAreaStartMarker.length,encryptedStoreAreaEnd-1));\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If the password is not provided then the password in the password store will be used\n*/\nexports.decryptStoreArea = function(encryptedStoreArea,password) {\n\tvar decryptedText = $tw.crypto.decrypt(encryptedStoreArea,password);\n\tif(decryptedText) {\n\t\tvar json = JSON.parse(decryptedText),\n\t\t\ttiddlers = [];\n\t\tfor(var title in json) {\n\t\t\tif(title !== \"$:/isEncrypted\") {\n\t\t\t\ttiddlers.push(json[title]);\n\t\t\t}\n\t\t}\n\t\treturn tiddlers;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If that fails, the user is prompted for a password.\nencryptedStoreArea: text of the TiddlyWiki encrypted store area\ncallback: function(tiddlers) called with the array of decrypted tiddlers\n\nThe following configuration settings are supported:\n\n$tw.config.usePasswordVault: causes any password entered by the user to also be put into the system password vault\n*/\nexports.decryptStoreAreaInteractive = function(encryptedStoreArea,callback,options) {\n\t// Try to decrypt with the current password\n\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea);\n\tif(tiddlers) {\n\t\tcallback(tiddlers);\n\t} else {\n\t\t// Prompt for a new password and keep trying\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: \"Enter a password to decrypt the imported TiddlyWiki\",\n\t\t\tnoUserName: true,\n\t\t\tcanCancel: true,\n\t\t\tsubmitText: \"Decrypt\",\n\t\t\tcallback: function(data) {\n\t\t\t\t// Exit if the user cancelled\n\t\t\t\tif(!data) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// Attempt to decrypt the tiddlers\n\t\t\t\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea,data.password);\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tif($tw.config.usePasswordVault) {\n\t\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t\t}\n\t\t\t\t\tcallback(tiddlers);\n\t\t\t\t\t// Exit and remove the password prompt\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\t// We didn't decrypt everything, so continue to prompt for password\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/utils/crypto.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/animations/slide.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom/animations/slide.js\ntype: application/javascript\nmodule-type: animation\n\nA simple slide animation that varies the height of the element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction slideOpen(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration();\n\t// Get the current height of the domNode\n\tvar computedStyle = window.getComputedStyle(domNode),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrPaddingBottom = parseInt(computedStyle.paddingBottom,10),\n\t\tcurrPaddingTop = parseInt(computedStyle.paddingTop,10),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Reset the margin once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"none\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{marginTop: currMarginTop + \"px\"},\n\t\t{paddingBottom: currPaddingBottom + \"px\"},\n\t\t{paddingTop: currPaddingTop + \"px\"},\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n}\n\nfunction slideClosed(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration(),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Clear the properties we've set when the animation is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n}\n\nexports.slide = {\n\topen: slideOpen,\n\tclose: slideClosed\n};\n\n})();\n",
"title": "$:/core/modules/utils/dom/animations/slide.js",
"type": "application/javascript",
"module-type": "animation"
},
"$:/core/modules/utils/dom/animator.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom/animator.js\ntype: application/javascript\nmodule-type: utils\n\nOrchestrates animations and transitions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Animator() {\n\t// Get the registered animation modules\n\tthis.animations = {};\n\t$tw.modules.applyMethods(\"animation\",this.animations);\n}\n\nAnimator.prototype.perform = function(type,domNode,options) {\n\toptions = options || {};\n\t// Find an animation that can handle this type\n\tvar chosenAnimation;\n\t$tw.utils.each(this.animations,function(animation,name) {\n\t\tif($tw.utils.hop(animation,type)) {\n\t\t\tchosenAnimation = animation[type];\n\t\t}\n\t});\n\tif(!chosenAnimation) {\n\t\tchosenAnimation = function(domNode,options) {\n\t\t\tif(options.callback) {\n\t\t\t\toptions.callback();\n\t\t\t}\n\t\t};\n\t}\n\t// Call the animation\n\tchosenAnimation(domNode,options);\n};\n\nexports.Animator = Animator;\n\n})();\n",
"title": "$:/core/modules/utils/dom/animator.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/browser.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom/browser.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser feature detection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet style properties of an element\n\telement: dom node\n\tstyles: ordered array of {name: value} pairs\n*/\nexports.setStyle = function(element,styles) {\n\tif(element.nodeType === 1) { // Element.ELEMENT_NODE\n\t\tfor(var t=0; t<styles.length; t++) {\n\t\t\tfor(var styleName in styles[t]) {\n\t\t\t\telement.style[$tw.utils.convertStyleNameToPropertyName(styleName)] = styles[t][styleName];\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nConverts a standard CSS property name into the local browser-specific equivalent. For example:\n\t\"background-color\" --> \"backgroundColor\"\n\t\"transition\" --> \"webkitTransition\"\n*/\n\nvar styleNameCache = {}; // We'll cache the style name conversions\n\nexports.convertStyleNameToPropertyName = function(styleName) {\n\t// Return from the cache if we can\n\tif(styleNameCache[styleName]) {\n\t\treturn styleNameCache[styleName];\n\t}\n\t// Convert it by first removing any hyphens\n\tvar propertyName = $tw.utils.unHyphenateCss(styleName);\n\t// Then check if it needs a prefix\n\tif(document.body.style[propertyName] === undefined) {\n\t\tvar prefixes = [\"O\",\"MS\",\"Moz\",\"webkit\"];\n\t\tfor(var t=0; t<prefixes.length; t++) {\n\t\t\tvar prefixedName = prefixes[t] + propertyName.substr(0,1).toUpperCase() + propertyName.substr(1);\n\t\t\tif(document.body.style[prefixedName] !== undefined) {\n\t\t\t\tpropertyName = prefixedName;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t// Put it in the cache too\n\tstyleNameCache[styleName] = propertyName;\n\treturn propertyName;\n};\n\n/*\nConverts a JS format CSS property name back into the dashed form used in CSS declarations. For example:\n\t\"backgroundColor\" --> \"background-color\"\n\t\"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.convertPropertyNameToStyleName = function(propertyName) {\n\t// Rehyphenate the name\n\tvar styleName = $tw.utils.hyphenateCss(propertyName);\n\t// If there's a webkit prefix, add a dash (other browsers have uppercase prefixes, and so get the dash automatically)\n\tif(styleName.indexOf(\"webkit\") === 0) {\n\t\tstyleName = \"-\" + styleName;\n\t} else if(styleName.indexOf(\"-m-s\") === 0) {\n\t\tstyleName = \"-ms\" + styleName.substr(4);\n\t}\n\treturn styleName;\n};\n\n/*\nRound trip a stylename to a property name and back again. For example:\n\t\"transform\" --> \"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.roundTripPropertyName = function(propertyName) {\n\treturn $tw.utils.convertPropertyNameToStyleName($tw.utils.convertStyleNameToPropertyName(propertyName));\n};\n\n/*\nConverts a standard event name into the local browser specific equivalent. For example:\n\t\"animationEnd\" --> \"webkitAnimationEnd\"\n*/\n\nvar eventNameCache = {}; // We'll cache the conversions\n\nvar eventNameMappings = {\n\t\"transitionEnd\": {\n\t\tcorrespondingCssProperty: \"transition\",\n\t\tmappings: {\n\t\t\ttransition: \"transitionend\",\n\t\t\tOTransition: \"oTransitionEnd\",\n\t\t\tMSTransition: \"msTransitionEnd\",\n\t\t\tMozTransition: \"transitionend\",\n\t\t\twebkitTransition: \"webkitTransitionEnd\"\n\t\t}\n\t},\n\t\"animationEnd\": {\n\t\tcorrespondingCssProperty: \"animation\",\n\t\tmappings: {\n\t\t\tanimation: \"animationend\",\n\t\t\tOAnimation: \"oAnimationEnd\",\n\t\t\tMSAnimation: \"msAnimationEnd\",\n\t\t\tMozAnimation: \"animationend\",\n\t\t\twebkitAnimation: \"webkitAnimationEnd\"\n\t\t}\n\t}\n};\n\nexports.convertEventName = function(eventName) {\n\tif(eventNameCache[eventName]) {\n\t\treturn eventNameCache[eventName];\n\t}\n\tvar newEventName = eventName,\n\t\tmappings = eventNameMappings[eventName];\n\tif(mappings) {\n\t\tvar convertedProperty = $tw.utils.convertStyleNameToPropertyName(mappings.correspondingCssProperty);\n\t\tif(mappings.mappings[convertedProperty]) {\n\t\t\tnewEventName = mappings.mappings[convertedProperty];\n\t\t}\n\t}\n\t// Put it in the cache too\n\teventNameCache[eventName] = newEventName;\n\treturn newEventName;\n};\n\n/*\nReturn the names of the fullscreen APIs\n*/\nexports.getFullScreenApis = function() {\n\tvar d = document,\n\t\tdb = d.body,\n\t\tresult = {\n\t\t\"_requestFullscreen\": db.webkitRequestFullscreen !== undefined ? \"webkitRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.mozRequestFullScreen !== undefined ? \"mozRequestFullScreen\" :\n\t\t\t\t\t\t\tdb.msRequestFullscreen !== undefined ? \"msRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.requestFullscreen !== undefined ? \"requestFullscreen\" : \"\",\n\t\t\"_exitFullscreen\": d.webkitExitFullscreen !== undefined ? \"webkitExitFullscreen\" :\n\t\t\t\t\t\t\td.mozCancelFullScreen !== undefined ? \"mozCancelFullScreen\" :\n\t\t\t\t\t\t\td.msExitFullscreen !== undefined ? \"msExitFullscreen\" :\n\t\t\t\t\t\t\td.exitFullscreen !== undefined ? \"exitFullscreen\" : \"\",\n\t\t\"_fullscreenElement\": d.webkitFullscreenElement !== undefined ? \"webkitFullscreenElement\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozFullScreenElement\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"msFullscreenElement\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenElement\" : \"\"\n\t};\n\tif(!result._requestFullscreen || !result._exitFullscreen || !result._fullscreenElement) {\n\t\treturn null;\n\t} else {\n\t\treturn result;\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/utils/dom/browser.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/csscolorparser.js": {
"text": "// (c) Dean McNamee <[email protected]>, 2012.\n//\n// https://github.com/deanm/css-color-parser-js\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n// http://www.w3.org/TR/css3-color/\nvar kCSSColorTable = {\n \"transparent\": [0,0,0,0], \"aliceblue\": [240,248,255,1],\n \"antiquewhite\": [250,235,215,1], \"aqua\": [0,255,255,1],\n \"aquamarine\": [127,255,212,1], \"azure\": [240,255,255,1],\n \"beige\": [245,245,220,1], \"bisque\": [255,228,196,1],\n \"black\": [0,0,0,1], \"blanchedalmond\": [255,235,205,1],\n \"blue\": [0,0,255,1], \"blueviolet\": [138,43,226,1],\n \"brown\": [165,42,42,1], \"burlywood\": [222,184,135,1],\n \"cadetblue\": [95,158,160,1], \"chartreuse\": [127,255,0,1],\n \"chocolate\": [210,105,30,1], \"coral\": [255,127,80,1],\n \"cornflowerblue\": [100,149,237,1], \"cornsilk\": [255,248,220,1],\n \"crimson\": [220,20,60,1], \"cyan\": [0,255,255,1],\n \"darkblue\": [0,0,139,1], \"darkcyan\": [0,139,139,1],\n \"darkgoldenrod\": [184,134,11,1], \"darkgray\": [169,169,169,1],\n \"darkgreen\": [0,100,0,1], \"darkgrey\": [169,169,169,1],\n \"darkkhaki\": [189,183,107,1], \"darkmagenta\": [139,0,139,1],\n \"darkolivegreen\": [85,107,47,1], \"darkorange\": [255,140,0,1],\n \"darkorchid\": [153,50,204,1], \"darkred\": [139,0,0,1],\n \"darksalmon\": [233,150,122,1], \"darkseagreen\": [143,188,143,1],\n \"darkslateblue\": [72,61,139,1], \"darkslategray\": [47,79,79,1],\n \"darkslategrey\": [47,79,79,1], \"darkturquoise\": [0,206,209,1],\n \"darkviolet\": [148,0,211,1], \"deeppink\": [255,20,147,1],\n \"deepskyblue\": [0,191,255,1], \"dimgray\": [105,105,105,1],\n \"dimgrey\": [105,105,105,1], \"dodgerblue\": [30,144,255,1],\n \"firebrick\": [178,34,34,1], \"floralwhite\": [255,250,240,1],\n \"forestgreen\": [34,139,34,1], \"fuchsia\": [255,0,255,1],\n \"gainsboro\": [220,220,220,1], \"ghostwhite\": [248,248,255,1],\n \"gold\": [255,215,0,1], \"goldenrod\": [218,165,32,1],\n \"gray\": [128,128,128,1], \"green\": [0,128,0,1],\n \"greenyellow\": [173,255,47,1], \"grey\": [128,128,128,1],\n \"honeydew\": [240,255,240,1], \"hotpink\": [255,105,180,1],\n \"indianred\": [205,92,92,1], \"indigo\": [75,0,130,1],\n \"ivory\": [255,255,240,1], \"khaki\": [240,230,140,1],\n \"lavender\": [230,230,250,1], \"lavenderblush\": [255,240,245,1],\n \"lawngreen\": [124,252,0,1], \"lemonchiffon\": [255,250,205,1],\n \"lightblue\": [173,216,230,1], \"lightcoral\": [240,128,128,1],\n \"lightcyan\": [224,255,255,1], \"lightgoldenrodyellow\": [250,250,210,1],\n \"lightgray\": [211,211,211,1], \"lightgreen\": [144,238,144,1],\n \"lightgrey\": [211,211,211,1], \"lightpink\": [255,182,193,1],\n \"lightsalmon\": [255,160,122,1], \"lightseagreen\": [32,178,170,1],\n \"lightskyblue\": [135,206,250,1], \"lightslategray\": [119,136,153,1],\n \"lightslategrey\": [119,136,153,1], \"lightsteelblue\": [176,196,222,1],\n \"lightyellow\": [255,255,224,1], \"lime\": [0,255,0,1],\n \"limegreen\": [50,205,50,1], \"linen\": [250,240,230,1],\n \"magenta\": [255,0,255,1], \"maroon\": [128,0,0,1],\n \"mediumaquamarine\": [102,205,170,1], \"mediumblue\": [0,0,205,1],\n \"mediumorchid\": [186,85,211,1], \"mediumpurple\": [147,112,219,1],\n \"mediumseagreen\": [60,179,113,1], \"mediumslateblue\": [123,104,238,1],\n \"mediumspringgreen\": [0,250,154,1], \"mediumturquoise\": [72,209,204,1],\n \"mediumvioletred\": [199,21,133,1], \"midnightblue\": [25,25,112,1],\n \"mintcream\": [245,255,250,1], \"mistyrose\": [255,228,225,1],\n \"moccasin\": [255,228,181,1], \"navajowhite\": [255,222,173,1],\n \"navy\": [0,0,128,1], \"oldlace\": [253,245,230,1],\n \"olive\": [128,128,0,1], \"olivedrab\": [107,142,35,1],\n \"orange\": [255,165,0,1], \"orangered\": [255,69,0,1],\n \"orchid\": [218,112,214,1], \"palegoldenrod\": [238,232,170,1],\n \"palegreen\": [152,251,152,1], \"paleturquoise\": [175,238,238,1],\n \"palevioletred\": [219,112,147,1], \"papayawhip\": [255,239,213,1],\n \"peachpuff\": [255,218,185,1], \"peru\": [205,133,63,1],\n \"pink\": [255,192,203,1], \"plum\": [221,160,221,1],\n \"powderblue\": [176,224,230,1], \"purple\": [128,0,128,1],\n \"red\": [255,0,0,1], \"rosybrown\": [188,143,143,1],\n \"royalblue\": [65,105,225,1], \"saddlebrown\": [139,69,19,1],\n \"salmon\": [250,128,114,1], \"sandybrown\": [244,164,96,1],\n \"seagreen\": [46,139,87,1], \"seashell\": [255,245,238,1],\n \"sienna\": [160,82,45,1], \"silver\": [192,192,192,1],\n \"skyblue\": [135,206,235,1], \"slateblue\": [106,90,205,1],\n \"slategray\": [112,128,144,1], \"slategrey\": [112,128,144,1],\n \"snow\": [255,250,250,1], \"springgreen\": [0,255,127,1],\n \"steelblue\": [70,130,180,1], \"tan\": [210,180,140,1],\n \"teal\": [0,128,128,1], \"thistle\": [216,191,216,1],\n \"tomato\": [255,99,71,1], \"turquoise\": [64,224,208,1],\n \"violet\": [238,130,238,1], \"wheat\": [245,222,179,1],\n \"white\": [255,255,255,1], \"whitesmoke\": [245,245,245,1],\n \"yellow\": [255,255,0,1], \"yellowgreen\": [154,205,50,1]}\n\nfunction clamp_css_byte(i) { // Clamp to integer 0 .. 255.\n i = Math.round(i); // Seems to be what Chrome does (vs truncation).\n return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clamp_css_float(f) { // Clamp to float 0.0 .. 1.0.\n return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parse_css_int(str) { // int or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_byte(parseFloat(str) / 100 * 255);\n return clamp_css_byte(parseInt(str));\n}\n\nfunction parse_css_float(str) { // float or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_float(parseFloat(str) / 100);\n return clamp_css_float(parseFloat(str));\n}\n\nfunction css_hue_to_rgb(m1, m2, h) {\n if (h < 0) h += 1;\n else if (h > 1) h -= 1;\n\n if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;\n if (h * 2 < 1) return m2;\n if (h * 3 < 2) return m1 + (m2 - m1) * (2/3 - h) * 6;\n return m1;\n}\n\nfunction parseCSSColor(css_str) {\n // Remove all whitespace, not compliant, but should just be more accepting.\n var str = css_str.replace(/ /g, '').toLowerCase();\n\n // Color keywords (and transparent) lookup.\n if (str in kCSSColorTable) return kCSSColorTable[str].slice(); // dup.\n\n // #abc and #abc123 syntax.\n if (str[0] === '#') {\n if (str.length === 4) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xfff)) return null; // Covers NaN.\n return [((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n (iv & 0xf0) | ((iv & 0xf0) >> 4),\n (iv & 0xf) | ((iv & 0xf) << 4),\n 1];\n } else if (str.length === 7) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xffffff)) return null; // Covers NaN.\n return [(iv & 0xff0000) >> 16,\n (iv & 0xff00) >> 8,\n iv & 0xff,\n 1];\n }\n\n return null;\n }\n\n var op = str.indexOf('('), ep = str.indexOf(')');\n if (op !== -1 && ep + 1 === str.length) {\n var fname = str.substr(0, op);\n var params = str.substr(op+1, ep-(op+1)).split(',');\n var alpha = 1; // To allow case fallthrough.\n switch (fname) {\n case 'rgba':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'rgb':\n if (params.length !== 3) return null;\n return [parse_css_int(params[0]),\n parse_css_int(params[1]),\n parse_css_int(params[2]),\n alpha];\n case 'hsla':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'hsl':\n if (params.length !== 3) return null;\n var h = (((parseFloat(params[0]) % 360) + 360) % 360) / 360; // 0 .. 1\n // NOTE(deanm): According to the CSS spec s/l should only be\n // percentages, but we don't bother and let float or percentage.\n var s = parse_css_float(params[1]);\n var l = parse_css_float(params[2]);\n var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n var m1 = l * 2 - m2;\n return [clamp_css_byte(css_hue_to_rgb(m1, m2, h+1/3) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h-1/3) * 255),\n alpha];\n default:\n return null;\n }\n }\n\n return null;\n}\n\ntry { exports.parseCSSColor = parseCSSColor } catch(e) { }\n",
"title": "$:/core/modules/utils/dom/csscolorparser.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static DOM-related utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDetermines whether element 'a' contains element 'b'\nCode thanks to John Resig, http://ejohn.org/blog/comparing-document-position/\n*/\nexports.domContains = function(a,b) {\n\treturn a.contains ?\n\t\ta !== b && a.contains(b) :\n\t\t!!(a.compareDocumentPosition(b) & 16);\n};\n\nexports.removeChildren = function(node) {\n\twhile(node.hasChildNodes()) {\n\t\tnode.removeChild(node.firstChild);\n\t}\n};\n\nexports.hasClass = function(el,className) {\n\treturn el && el.className && el.className.toString().split(\" \").indexOf(className) !== -1;\n};\n\nexports.addClass = function(el,className) {\n\tvar c = el.className.split(\" \");\n\tif(c.indexOf(className) === -1) {\n\t\tc.push(className);\n\t}\n\tel.className = c.join(\" \");\n};\n\nexports.removeClass = function(el,className) {\n\tvar c = el.className.split(\" \"),\n\t\tp = c.indexOf(className);\n\tif(p !== -1) {\n\t\tc.splice(p,1);\n\t\tel.className = c.join(\" \");\n\t}\n};\n\nexports.toggleClass = function(el,className,status) {\n\tif(status === undefined) {\n\t\tstatus = !exports.hasClass(el,className);\n\t}\n\tif(status) {\n\t\texports.addClass(el,className);\n\t} else {\n\t\texports.removeClass(el,className);\n\t}\n};\n\n/*\nGet the scroll position of the viewport\nReturns:\n\t{\n\t\tx: horizontal scroll position in pixels,\n\t\ty: vertical scroll position in pixels\n\t}\n*/\nexports.getScrollPosition = function() {\n\tif(\"scrollX\" in window) {\n\t\treturn {x: window.scrollX, y: window.scrollY};\n\t} else {\n\t\treturn {x: document.documentElement.scrollLeft, y: document.documentElement.scrollTop};\n\t}\n};\n\n/*\nGets the bounding rectangle of an element in absolute page coordinates\n*/\nexports.getBoundingPageRect = function(element) {\n\tvar scrollPos = $tw.utils.getScrollPosition(),\n\t\tclientRect = element.getBoundingClientRect();\n\treturn {\n\t\tleft: clientRect.left + scrollPos.x,\n\t\twidth: clientRect.width,\n\t\tright: clientRect.right + scrollPos.x,\n\t\ttop: clientRect.top + scrollPos.y,\n\t\theight: clientRect.height,\n\t\tbottom: clientRect.bottom + scrollPos.y\n\t};\n};\n\n/*\nSaves a named password in the browser\n*/\nexports.savePassword = function(name,password) {\n\ttry {\n\t\tif(window.localStorage) {\n\t\t\tlocalStorage.setItem(\"tw5-password-\" + name,password);\n\t\t}\n\t} catch(e) {\n\t}\n};\n\n/*\nRetrieve a named password from the browser\n*/\nexports.getPassword = function(name) {\n\ttry {\n\t\treturn window.localStorage ? localStorage.getItem(\"tw5-password-\" + name) : \"\";\n\t} catch(e) {\n\t\treturn \"\";\n\t}\n};\n\n/*\nForce layout of a dom node and its descendents\n*/\nexports.forceLayout = function(element) {\n\tvar dummy = element.offsetWidth;\n};\n\n/*\nPulse an element for debugging purposes\n*/\nexports.pulseElement = function(element) {\n\t// Event handler to remove the class at the end\n\telement.addEventListener($tw.browser.animationEnd,function handler(event) {\n\t\telement.removeEventListener($tw.browser.animationEnd,handler,false);\n\t\t$tw.utils.removeClass(element,\"pulse\");\n\t},false);\n\t// Apply the pulse class\n\t$tw.utils.removeClass(element,\"pulse\");\n\t$tw.utils.forceLayout(element);\n\t$tw.utils.addClass(element,\"pulse\");\n};\n\n/*\nAttach specified event handlers to a DOM node\ndomNode: where to attach the event handlers\nevents: array of event handlers to be added (see below)\nEach entry in the events array is an object with these properties:\nhandlerFunction: optional event handler function\nhandlerObject: optional event handler object\nhandlerMethod: optionally specifies object handler method name (defaults to `handleEvent`)\n*/\nexports.addEventListeners = function(domNode,events) {\n\t$tw.utils.each(events,function(eventInfo) {\n\t\tvar handler;\n\t\tif(eventInfo.handlerFunction) {\n\t\t\thandler = eventInfo.handlerFunction;\n\t\t} else if(eventInfo.handlerObject) {\n\t\t\tif(eventInfo.handlerMethod) {\n\t\t\t\thandler = function(event) {\n\t\t\t\t\teventInfo.handlerObject[eventInfo.handlerMethod].call(eventInfo.handlerObject,event);\n\t\t\t\t};\t\n\t\t\t} else {\n\t\t\t\thandler = eventInfo.handlerObject;\n\t\t\t}\n\t\t}\n\t\tdomNode.addEventListener(eventInfo.name,handler,false);\n\t});\n};\n\n\n})();\n",
"title": "$:/core/modules/utils/dom.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/http.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom/http.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser HTTP support\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nA quick and dirty HTTP function; to be refactored later. Options are:\n\turl: URL to retrieve\n\ttype: GET, PUT, POST etc\n\tcallback: function invoked with (err,data)\n*/\nexports.httpRequest = function(options) {\n\tvar type = options.type || \"GET\",\n\t\theaders = options.headers || {accept: \"application/json\"},\n\t\trequest = new XMLHttpRequest(),\n\t\tdata = \"\",\n\t\tf,results;\n\t// Massage the data hashmap into a string\n\tif(options.data) {\n\t\tif(typeof options.data === \"string\") { // Already a string\n\t\t\tdata = options.data;\n\t\t} else { // A hashmap of strings\n\t\t\tresults = [];\n\t\t\t$tw.utils.each(options.data,function(dataItem,dataItemTitle) {\n\t\t\t\tresults.push(dataItemTitle + \"=\" + encodeURIComponent(dataItem));\n\t\t\t});\n\t\t\tdata = results.join(\"&\");\n\t\t}\n\t}\n\t// Set up the state change handler\n\trequest.onreadystatechange = function() {\n\t\tif(this.readyState === 4) {\n\t\t\tif(this.status === 200 || this.status === 201 || this.status === 204) {\n\t\t\t\t// Success!\n\t\t\t\toptions.callback(null,this.responseText,this);\n\t\t\t\treturn;\n\t\t\t}\n\t\t// Something went wrong\n\t\toptions.callback(\"XMLHttpRequest error code: \" + this.status);\n\t\t}\n\t};\n\t// Make the request\n\trequest.open(type,options.url,true);\n\tif(headers) {\n\t\t$tw.utils.each(headers,function(header,headerTitle,object) {\n\t\t\trequest.setRequestHeader(headerTitle,header);\n\t\t});\n\t}\n\tif(data && !$tw.utils.hop(headers,\"Content-type\")) {\n\t\trequest.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded; charset=UTF-8\");\n\t}\n\trequest.send(data);\n\treturn request;\n};\n\n})();\n",
"title": "$:/core/modules/utils/dom/http.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/keyboard.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom/keyboard.js\ntype: application/javascript\nmodule-type: utils\n\nKeyboard utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar namedKeys = {\n\t\"backspace\": 8,\n\t\"tab\": 9,\n\t\"enter\": 13,\n\t\"escape\": 27\n};\n\n/*\nParses a key descriptor into the structure:\n{\n\tkeyCode: numeric keycode\n\tshiftKey: boolean\n\taltKey: boolean\n\tctrlKey: boolean\n}\nKey descriptors have the following format:\n\tctrl+enter\n\tctrl+shift+alt+A\n*/\nexports.parseKeyDescriptor = function(keyDescriptor) {\n\tvar components = keyDescriptor.split(\"+\"),\n\t\tinfo = {\n\t\t\tkeyCode: 0,\n\t\t\tshiftKey: false,\n\t\t\taltKey: false,\n\t\t\tctrlKey: false\n\t\t};\n\tfor(var t=0; t<components.length; t++) {\n\t\tvar s = components[t].toLowerCase();\n\t\t// Look for modifier keys\n\t\tif(s === \"ctrl\") {\n\t\t\tinfo.ctrlKey = true;\n\t\t} else if(s === \"shift\") {\n\t\t\tinfo.shiftKey = true;\n\t\t} else if(s === \"alt\") {\n\t\t\tinfo.altKey = true;\n\t\t} else if(s === \"meta\") {\n\t\t\tinfo.metaKey = true;\n\t\t}\n\t\t// Replace named keys with their code\n\t\tif(namedKeys[s]) {\n\t\t\tinfo.keyCode = namedKeys[s];\n\t\t}\n\t}\n\treturn info;\n};\n\nexports.checkKeyDescriptor = function(event,keyInfo) {\n\tvar metaKeyStatus = !!keyInfo.metaKey; // Using a temporary variable to keep JSHint happy\n\treturn event.keyCode === keyInfo.keyCode && \n\t\t\tevent.shiftKey === keyInfo.shiftKey && \n\t\t\tevent.altKey === keyInfo.altKey && \n\t\t\tevent.ctrlKey === keyInfo.ctrlKey && \n\t\t\tevent.metaKey === metaKeyStatus;\t\n};\n\n})();\n",
"title": "$:/core/modules/utils/dom/keyboard.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/modal.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom/modal.js\ntype: application/javascript\nmodule-type: utils\n\nModal message mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Modal = function(wiki) {\n\tthis.wiki = wiki;\n\tthis.modalCount = 0;\n};\n\n/*\nDisplay a modal dialogue\n\ttitle: Title of tiddler to display\n\toptions: see below\nOptions include:\n\tdownloadLink: Text of a big download link to include\n*/\nModal.prototype.display = function(title,options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\ttiddler = this.wiki.getTiddler(title);\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Create the variables\n\tvar variables = $tw.utils.extend({currentTiddler: title},options.variables);\n\t// Create the wrapper divs\n\tvar wrapper = document.createElement(\"div\"),\n\t\tmodalBackdrop = document.createElement(\"div\"),\n\t\tmodalWrapper = document.createElement(\"div\"),\n\t\tmodalHeader = document.createElement(\"div\"),\n\t\theaderTitle = document.createElement(\"h3\"),\n\t\tmodalBody = document.createElement(\"div\"),\n\t\tmodalLink = document.createElement(\"a\"),\n\t\tmodalFooter = document.createElement(\"div\"),\n\t\tmodalFooterHelp = document.createElement(\"span\"),\n\t\tmodalFooterButtons = document.createElement(\"span\");\n\t// Up the modal count and adjust the body class\n\tthis.modalCount++;\n\tthis.adjustPageClass();\n\t// Add classes\n\t$tw.utils.addClass(wrapper,\"tc-modal-wrapper\");\n\t$tw.utils.addClass(modalBackdrop,\"tc-modal-backdrop\");\n\t$tw.utils.addClass(modalWrapper,\"tc-modal\");\n\t$tw.utils.addClass(modalHeader,\"tc-modal-header\");\n\t$tw.utils.addClass(modalBody,\"tc-modal-body\");\n\t$tw.utils.addClass(modalFooter,\"tc-modal-footer\");\n\t// Join them together\n\twrapper.appendChild(modalBackdrop);\n\twrapper.appendChild(modalWrapper);\n\tmodalHeader.appendChild(headerTitle);\n\tmodalWrapper.appendChild(modalHeader);\n\tmodalWrapper.appendChild(modalBody);\n\tmodalFooter.appendChild(modalFooterHelp);\n\tmodalFooter.appendChild(modalFooterButtons);\n\tmodalWrapper.appendChild(modalFooter);\n\t// Render the title of the message\n\tvar headerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"subtitle\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\tattributes: {\n\t\t\t\ttext: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: title\n\t\t}}}],\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables\n\t});\n\theaderWidgetNode.render(headerTitle,null);\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\theaderWidgetNode.refresh(changes,modalHeader,null);\n\t});\n\t// Render the body of the message\n\tvar bodyWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables\n\t});\n\tbodyWidgetNode.render(modalBody,null);\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tbodyWidgetNode.refresh(changes,modalBody,null);\n\t});\n\t// Setup the link if present\n\tif(options.downloadLink) {\n\t\tmodalLink.href = options.downloadLink;\n\t\tmodalLink.appendChild(document.createTextNode(\"Right-click to save changes\"));\n\t\tmodalBody.appendChild(modalLink);\n\t}\n\t// Render the footer of the message\n\tif(tiddler && tiddler.fields && tiddler.fields.help) {\n\t\tvar link = document.createElement(\"a\");\n\t\tlink.setAttribute(\"href\",tiddler.fields.help);\n\t\tlink.setAttribute(\"target\",\"_blank\");\n\t\tlink.appendChild(document.createTextNode(\"Help\"));\n\t\tmodalFooterHelp.appendChild(link);\n\t\tmodalFooterHelp.style.float = \"left\";\n\t}\n\tvar footerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"footer\",\n\t\tchildren: [{\n\t\t\ttype: \"button\",\n\t\t\tattributes: {\n\t\t\t\tmessage: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: \"tm-close-tiddler\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\tattributes: {\n\t\t\t\t\ttext: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tvalue: \"Close\"\n\t\t\t}}}\n\t\t]}],\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables\n\t});\n\tfooterWidgetNode.render(modalFooterButtons,null);\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tfooterWidgetNode.refresh(changes,modalFooterButtons,null);\n\t});\n\t// Add the close event handler\n\tvar closeHandler = function(event) {\n\t\t// Decrease the modal count and adjust the body class\n\t\tself.modalCount--;\n\t\tself.adjustPageClass();\n\t\t// Force layout and animate the modal message away\n\t\t$tw.utils.forceLayout(modalBackdrop);\n\t\t$tw.utils.forceLayout(modalWrapper);\n\t\t$tw.utils.setStyle(modalBackdrop,[\n\t\t\t{opacity: \"0\"}\n\t\t]);\n\t\t$tw.utils.setStyle(modalWrapper,[\n\t\t\t{transform: \"translateY(\" + window.innerHeight + \"px)\"}\n\t\t]);\n\t\t// Set up an event for the transition end\n\t\twindow.setTimeout(function() {\n\t\t\tif(wrapper.parentNode) {\n\t\t\t\t// Remove the modal message from the DOM\n\t\t\t\tdocument.body.removeChild(wrapper);\n\t\t\t}\n\t\t},duration);\n\t\t// Don't let anyone else handle the tm-close-tiddler message\n\t\treturn false;\n\t};\n\theaderWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tbodyWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tfooterWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\t// Set the initial styles for the message\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-window.innerHeight) + \"px)\"}\n\t]);\n\t// Put the message into the document\n\tdocument.body.appendChild(wrapper);\n\t// Set up animation for the styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{transition: \"opacity \" + duration + \"ms ease-out\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(modalBackdrop);\n\t$tw.utils.forceLayout(modalWrapper);\n\t// Set final animated styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0.7\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n};\n\nModal.prototype.adjustPageClass = function() {\n\tif($tw.pageContainer) {\n\t\t$tw.utils.toggleClass($tw.pageContainer,\"tc-modal-displayed\",this.modalCount > 0);\n\t}\n};\n\nexports.Modal = Modal;\n\n})();\n",
"title": "$:/core/modules/utils/dom/modal.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/notifier.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom/notifier.js\ntype: application/javascript\nmodule-type: utils\n\nNotifier mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Notifier = function(wiki) {\n\tthis.wiki = wiki;\n};\n\n/*\nDisplay a notification\n\ttitle: Title of tiddler containing the notification text\n\toptions: see below\nOptions include:\n*/\nNotifier.prototype.display = function(title,options) {\n\toptions = options || {};\n\t// Create the wrapper divs\n\tvar notification = document.createElement(\"div\"),\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Add classes\n\t$tw.utils.addClass(notification,\"tc-notification\");\n\t// Render the body of the notification\n\tvar widgetNode = this.wiki.makeTranscludeWidget(title,{parentWidget: $tw.rootWidget, document: document});\n\twidgetNode.render(notification,null);\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\twidgetNode.refresh(changes,notification,null);\n\t});\n\t// Set the initial styles for the notification\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"0\"},\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-window.innerHeight) + \"px)\"},\n\t\t{transition: \"opacity \" + duration + \"ms ease-out, \" + $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Add the notification to the DOM\n\tdocument.body.appendChild(notification);\n\t// Force layout\n\t$tw.utils.forceLayout(notification);\n\t// Set final animated styles\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n\t// Set a timer to remove the notification\n\twindow.setTimeout(function() {\n\t\t// Force layout and animate the notification away\n\t\t$tw.utils.forceLayout(notification);\n\t\t$tw.utils.setStyle(notification,[\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transform: \"translateX(\" + (notification.offsetWidth) + \"px)\"}\n\t\t]);\n\t\t// Remove the modal message from the DOM once the transition ends\n\t\tsetTimeout(function() {\n\t\t\tif(notification.parentNode) {\n\t\t\t\tdocument.body.removeChild(notification);\n\t\t\t}\n\t\t},duration);\n\t},$tw.config.preferences.notificationDuration);\n};\n\nexports.Notifier = Notifier;\n\n})();\n",
"title": "$:/core/modules/utils/dom/notifier.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/popup.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom/popup.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Popup object prototype that manages popups in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreates a Popup object with these options:\n\trootElement: the DOM element to which the popup zapper should be attached\n*/\nvar Popup = function(options) {\n\toptions = options || {};\n\tthis.rootElement = options.rootElement || document.documentElement;\n\tthis.popups = []; // Array of {title:,wiki:,domNode:} objects\n};\n\n/*\nTrigger a popup open or closed. Parameters are in a hashmap:\n\ttitle: title of the tiddler where the popup details are stored\n\tdomNode: dom node to which the popup will be positioned\n\twiki: wiki\n\tforce: if specified, forces the popup state to true or false (instead of toggling it)\n*/\nPopup.prototype.triggerPopup = function(options) {\n\t// Check if this popup is already active\n\tvar index = -1;\n\tfor(var t=0; t<this.popups.length; t++) {\n\t\tif(this.popups[t].title === options.title) {\n\t\t\tindex = t;\n\t\t}\n\t}\n\t// Compute the new state\n\tvar state = index === -1;\n\tif(options.force !== undefined) {\n\t\tstate = options.force;\n\t}\n\t// Show or cancel the popup according to the new state\n\tif(state) {\n\t\tthis.show(options);\n\t} else {\n\t\tthis.cancel(index);\n\t}\n};\n\nPopup.prototype.handleEvent = function(event) {\n\tif(event.type === \"click\") {\n\t\t// Find out what was clicked on\n\t\tvar info = this.popupInfo(event.target),\n\t\t\tcancelLevel = info.popupLevel - 1;\n\t\t// Don't remove the level that was clicked on if we clicked on a handle\n\t\tif(info.isHandle) {\n\t\t\tcancelLevel++;\n\t\t}\n\t\t// Cancel\n\t\tthis.cancel(cancelLevel);\n\t}\n};\n\n/*\nFind the popup level containing a DOM node. Returns:\npopupLevel: count of the number of nested popups containing the specified element\nisHandle: true if the specified element is within a popup handle\n*/\nPopup.prototype.popupInfo = function(domNode) {\n\tvar isHandle = false,\n\t\tpopupCount = 0,\n\t\tnode = domNode;\n\t// First check ancestors to see if we're within a popup handle\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup-handle\")) {\n\t\t\tisHandle = true;\n\t\t\tpopupCount++;\n\t\t}\n\t\tif($tw.utils.hasClass(node,\"tc-popup-keep\")) {\n\t\t\tisHandle = true;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\t// Then count the number of ancestor popups\n\tnode = domNode;\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup\")) {\n\t\t\tpopupCount++;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\tvar info = {\n\t\tpopupLevel: popupCount,\n\t\tisHandle: isHandle\n\t};\n\treturn info;\n};\n\n/*\nDisplay a popup by adding it to the stack\n*/\nPopup.prototype.show = function(options) {\n\t// Find out what was clicked on\n\tvar info = this.popupInfo(options.domNode);\n\t// Cancel any higher level popups\n\tthis.cancel(info.popupLevel);\n\t// Store the popup details\n\tthis.popups.push({\n\t\ttitle: options.title,\n\t\twiki: options.wiki,\n\t\tdomNode: options.domNode\n\t});\n\t// Set the state tiddler\n\toptions.wiki.setTextReference(options.title,\n\t\t\t\"(\" + options.domNode.offsetLeft + \",\" + options.domNode.offsetTop + \",\" + \n\t\t\t\toptions.domNode.offsetWidth + \",\" + options.domNode.offsetHeight + \")\");\n\t// Add the click handler if we have any popups\n\tif(this.popups.length > 0) {\n\t\tthis.rootElement.addEventListener(\"click\",this,true);\t\t\n\t}\n};\n\n/*\nCancel all popups at or above a specified level or DOM node\nlevel: popup level to cancel (0 cancels all popups)\n*/\nPopup.prototype.cancel = function(level) {\n\tvar numPopups = this.popups.length;\n\tlevel = Math.max(0,Math.min(level,numPopups));\n\tfor(var t=level; t<numPopups; t++) {\n\t\tvar popup = this.popups.pop();\n\t\tif(popup.title) {\n\t\t\tpopup.wiki.deleteTiddler(popup.title);\n\t\t}\n\t}\n\tif(this.popups.length === 0) {\n\t\tthis.rootElement.removeEventListener(\"click\",this,false);\n\t}\n};\n\n/*\nReturns true if the specified title and text identifies an active popup\n*/\nPopup.prototype.readPopupState = function(text) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/;\n\treturn popupLocationRegExp.test(text);\n};\n\nexports.Popup = Popup;\n\n})();\n",
"title": "$:/core/modules/utils/dom/popup.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/scroller.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom/scroller.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Scroller object prototype that manages scrolling in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nEvent handler for when the `tm-scroll` event hits the document body\n*/\nvar PageScroller = function() {\n\tthis.idRequestFrame = null;\n\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\twindow.webkitRequestAnimationFrame ||\n\t\twindow.mozRequestAnimationFrame ||\n\t\tfunction(callback) {\n\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t};\n\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\twindow.webkitCancelAnimationFrame ||\n\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\twindow.mozCancelAnimationFrame ||\n\t\twindow.mozCancelRequestAnimationFrame ||\n\t\tfunction(id) {\n\t\t\twindow.clearTimeout(id);\n\t\t};\n};\n\nPageScroller.prototype.cancelScroll = function() {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(window,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle an event\n*/\nPageScroller.prototype.handleEvent = function(event) {\n\tif(event.type === \"tm-scroll\") {\n\t\treturn this.scrollIntoView(event.target);\n\t}\n\treturn true;\n};\n\n/*\nHandle a scroll event hitting the page document\n*/\nPageScroller.prototype.scrollIntoView = function(element) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\t// Now get ready to scroll the body\n\tthis.cancelScroll();\n\tthis.startTime = Date.now();\n\tvar scrollPosition = $tw.utils.getScrollPosition();\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar clientBounds = element.getBoundingClientRect(),\n\t\tbounds = {\n\t\t\tleft: clientBounds.left + scrollPosition.x,\n\t\t\ttop: clientBounds.top + scrollPosition.y,\n\t\t\twidth: clientBounds.width,\n\t\t\theight: clientBounds.height\n\t\t};\n\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\tvar getEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\t// If the target is above/left of the current view, then scroll to it's top/left\n\t\t\tif(targetPos <= currentPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// If the target is smaller than the window and the scroll position is too far up, then scroll till the target is at the bottom of the window\n\t\t\t} else if(targetSize < currentSize && currentPos < (targetPos + targetSize - currentSize)) {\n\t\t\t\treturn targetPos + targetSize - currentSize;\n\t\t\t// If the target is big, then just scroll to the top\n\t\t\t} else if(currentPos < targetPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// Otherwise, stay where we are\n\t\t\t} else {\n\t\t\t\treturn currentPos;\n\t\t\t}\n\t\t},\n\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,window.innerWidth),\n\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,window.innerHeight);\n\t// Only scroll if necessary\n\tif(endX !== scrollPosition.x || endY !== scrollPosition.y) {\n\t\tvar self = this,\n\t\t\tdrawFrame;\n\t\tdrawFrame = function () {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll();\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\twindow.scrollTo(scrollPosition.x + (endX - scrollPosition.x) * t,scrollPosition.y + (endY - scrollPosition.y) * t);\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(window,drawFrame);\n\t\t\t}\n\t\t};\n\t\tdrawFrame();\n\t}\n};\n\nexports.PageScroller = PageScroller;\n\n})();\n",
"title": "$:/core/modules/utils/dom/scroller.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/fakedom.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/fakedom.js\ntype: application/javascript\nmodule-type: global\n\nA barebones implementation of DOM interfaces needed by the rendering mechanism.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Sequence number used to enable us to track objects for testing\nvar sequenceNumber = null;\n\nvar bumpSequenceNumber = function(object) {\n\tif(sequenceNumber !== null) {\n\t\tobject.sequenceNumber = sequenceNumber++;\n\t}\n};\n\nvar TW_TextNode = function(text) {\n\tbumpSequenceNumber(this);\n\tthis.textContent = text;\n};\n\nObject.defineProperty(TW_TextNode.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\treturn this.textContent.replace(/(\\r?\\n)/g,\"\");\n\t}\n});\n\nvar TW_Element = function(tag,namespace) {\n\tbumpSequenceNumber(this);\n\tthis.isTiddlyWikiFakeDom = true;\n\tthis.tag = tag;\n\tthis.attributes = {};\n\tthis.isRaw = false;\n\tthis.children = [];\n\tthis.style = {};\n\tthis.namespaceURI = namespace || \"http://www.w3.org/1999/xhtml\";\n};\n\nTW_Element.prototype.setAttribute = function(name,value) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot setAttribute on a raw TW_Element\";\n\t}\n\tthis.attributes[name] = value;\n};\n\nTW_Element.prototype.setAttributeNS = function(namespace,name,value) {\n\tthis.setAttribute(name,value);\n};\n\nTW_Element.prototype.removeAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot removeAttribute on a raw TW_Element\";\n\t}\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\tdelete this.attributes[name];\n\t}\n};\n\nTW_Element.prototype.appendChild = function(node) {\n\tthis.children.push(node);\n\tnode.parentNode = this;\n};\n\nTW_Element.prototype.insertBefore = function(node,nextSibling) {\n\tif(nextSibling) {\n\t\tvar p = this.children.indexOf(nextSibling);\n\t\tif(p !== -1) {\n\t\t\tthis.children.splice(p,0,node);\n\t\t\tnode.parentNode = this;\n\t\t} else {\n\t\t\tthis.appendChild(node);\n\t\t}\n\t} else {\n\t\tthis.appendChild(node);\n\t}\n};\n\nTW_Element.prototype.removeChild = function(node) {\n\tvar p = this.children.indexOf(node);\n\tif(p !== -1) {\n\t\tthis.children.splice(p,1);\n\t}\n};\n\nTW_Element.prototype.hasChildNodes = function() {\n\treturn !!this.children.length;\n};\n\nObject.defineProperty(TW_Element.prototype, \"firstChild\", {\n\tget: function() {\n\t\treturn this.children[0];\n\t}\n});\n\nTW_Element.prototype.addEventListener = function(type,listener,useCapture) {\n\t// Do nothing\n};\n\nObject.defineProperty(TW_Element.prototype, \"className\", {\n\tget: function() {\n\t\treturn this.attributes[\"class\"] || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes[\"class\"] = value;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"value\", {\n\tget: function() {\n\t\treturn this.attributes.value || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes.value = value;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"outerHTML\", {\n\tget: function() {\n\t\tvar output = [],attr,a,v;\n\t\toutput.push(\"<\",this.tag);\n\t\tif(this.attributes) {\n\t\t\tattr = [];\n\t\t\tfor(a in this.attributes) {\n\t\t\t\tattr.push(a);\n\t\t\t}\n\t\t\tattr.sort();\n\t\t\tfor(a=0; a<attr.length; a++) {\n\t\t\t\tv = this.attributes[attr[a]];\n\t\t\t\tif(v !== undefined) {\n\t\t\t\t\toutput.push(\" \",attr[a],\"='\",$tw.utils.htmlEncode(v),\"'\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(this.style) {\n\t\t\tvar style = [];\n\t\t\tfor(var s in this.style) {\n\t\t\t\tstyle.push(s + \":\" + this.style[s] + \";\");\n\t\t\t}\n\t\t\tif(style.length > 0) {\n\t\t\t\toutput.push(\" style='\",style.join(\"\"),\"'\")\n\t\t\t}\n\t\t}\n\t\toutput.push(\">\");\n\t\tif($tw.config.htmlVoidElements.indexOf(this.tag) === -1) {\n\t\t\toutput.push(this.innerHTML);\n\t\t\toutput.push(\"</\",this.tag,\">\");\n\t\t}\n\t\treturn output.join(\"\");\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"innerHTML\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn this.rawHTML;\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tif(node instanceof TW_Element) {\n\t\t\t\t\tb.push(node.outerHTML);\n\t\t\t\t} else if(node instanceof TW_TextNode) {\n\t\t\t\t\tb.push($tw.utils.htmlEncode(node.textContent));\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.isRaw = true;\n\t\tthis.rawHTML = value;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\tthrow \"Cannot get textContent on a raw TW_Element\";\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.textContent);\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.children = [new TW_TextNode(value)];\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\tthrow \"Cannot get formattedTextContent on a raw TW_Element\";\n\t\t} else {\n\t\t\tvar b = [],\n\t\t\t\tisBlock = $tw.config.htmlBlockElements.indexOf(this.tag) !== -1;\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\tif(this.tag === \"li\") {\n\t\t\t\tb.push(\"* \");\n\t\t\t}\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.formattedTextContent);\n\t\t\t});\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\treturn b.join(\"\");\n\t\t}\n\t}\n});\n\nvar document = {\n\tsetSequenceNumber: function(value) {\n\t\tsequenceNumber = value;\n\t},\n\tcreateElementNS: function(namespace,tag) {\n\t\treturn new TW_Element(tag,namespace);\n\t},\n\tcreateElement: function(tag) {\n\t\treturn new TW_Element(tag);\n\t},\n\tcreateTextNode: function(text) {\n\t\treturn new TW_TextNode(text);\n\t},\n\tcompatMode: \"CSS1Compat\", // For KaTeX to know that we're not a browser in quirks mode\n\tisTiddlyWikiFakeDom: true\n};\n\nexports.fakeDocument = document;\n\n})();\n",
"title": "$:/core/modules/utils/fakedom.js",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/utils/filesystem.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/filesystem.js\ntype: application/javascript\nmodule-type: utils-node\n\nFile system utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\n/*\nRecursively (and synchronously) copy a directory and all its content\n*/\nexports.copyDirectory = function(srcPath,dstPath) {\n\t// Remove any trailing path separators\n\tsrcPath = $tw.utils.removeTrailingSeparator(srcPath);\n\tdstPath = $tw.utils.removeTrailingSeparator(dstPath);\n\t// Create the destination directory\n\tvar err = $tw.utils.createDirectory(dstPath);\n\tif(err) {\n\t\treturn err;\n\t}\n\t// Function to copy a folder full of files\n\tvar copy = function(srcPath,dstPath) {\n\t\tvar srcStats = fs.lstatSync(srcPath),\n\t\t\tdstExists = fs.existsSync(dstPath);\n\t\tif(srcStats.isFile()) {\n\t\t\t$tw.utils.copyFile(srcPath,dstPath);\n\t\t} else if(srcStats.isDirectory()) {\n\t\t\tvar items = fs.readdirSync(srcPath);\n\t\t\tfor(var t=0; t<items.length; t++) {\n\t\t\t\tvar item = items[t],\n\t\t\t\t\terr = copy(srcPath + path.sep + item,dstPath + path.sep + item);\n\t\t\t\tif(err) {\n\t\t\t\t\treturn err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tcopy(srcPath,dstPath);\n\treturn null;\n};\n\n/*\nCopy a file\n*/\nvar FILE_BUFFER_LENGTH = 64 * 1024,\n\tfileBuffer;\n\nexports.copyFile = function(srcPath,dstPath) {\n\t// Create buffer if required\n\tif(!fileBuffer) {\n\t\tfileBuffer = new Buffer(FILE_BUFFER_LENGTH);\n\t}\n\t// Create any directories in the destination\n\t$tw.utils.createDirectory(path.dirname(dstPath));\n\t// Copy the file\n\tvar srcFile = fs.openSync(srcPath,\"r\"),\n\t\tdstFile = fs.openSync(dstPath,\"w\"),\n\t\tbytesRead = 1,\n\t\tpos = 0;\n\twhile (bytesRead > 0) {\n\t\tbytesRead = fs.readSync(srcFile,fileBuffer,0,FILE_BUFFER_LENGTH,pos);\n\t\tfs.writeSync(dstFile,fileBuffer,0,bytesRead);\n\t\tpos += bytesRead;\n\t}\n\tfs.closeSync(srcFile);\n\tfs.closeSync(dstFile);\n\treturn null;\n};\n\n/*\nRemove trailing path separator\n*/\nexports.removeTrailingSeparator = function(dirPath) {\n\tvar len = dirPath.length;\n\tif(dirPath.charAt(len-1) === path.sep) {\n\t\tdirPath = dirPath.substr(0,len-1);\n\t}\n\treturn dirPath;\n};\n\n/*\nRecursively create a directory\n*/\nexports.createDirectory = function(dirPath) {\n\tif(dirPath.substr(dirPath.length-1,1) !== path.sep) {\n\t\tdirPath = dirPath + path.sep;\n\t}\n\tvar pos = 1;\n\tpos = dirPath.indexOf(path.sep,pos);\n\twhile(pos !== -1) {\n\t\tvar subDirPath = dirPath.substr(0,pos);\n\t\tif(!$tw.utils.isDirectory(subDirPath)) {\n\t\t\ttry {\n\t\t\t\tfs.mkdirSync(subDirPath);\n\t\t\t} catch(e) {\n\t\t\t\treturn \"Error creating directory '\" + subDirPath + \"'\";\n\t\t\t}\n\t\t}\n\t\tpos = dirPath.indexOf(path.sep,pos + 1);\n\t}\n\treturn null;\n};\n\n/*\nRecursively create directories needed to contain a specified file\n*/\nexports.createFileDirectories = function(filePath) {\n\treturn $tw.utils.createDirectory(path.dirname(filePath));\n};\n\n/*\nRecursively delete a directory\n*/\nexports.deleteDirectory = function(dirPath) {\n\tif(fs.existsSync(dirPath)) {\n\t\tvar entries = fs.readdirSync(dirPath);\n\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\tvar currPath = dirPath + path.sep + entries[entryIndex];\n\t\t\tif(fs.lstatSync(currPath).isDirectory()) {\n\t\t\t\t$tw.utils.deleteDirectory(currPath);\n\t\t\t} else {\n\t\t\t\tfs.unlinkSync(currPath);\n\t\t\t}\n\t\t}\n\tfs.rmdirSync(dirPath);\n\t}\n\treturn null;\n};\n\n/*\nCheck if a path identifies a directory\n*/\nexports.isDirectory = function(dirPath) {\n\treturn fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();\n};\n\n/*\nCheck if a path identifies a directory that is empty\n*/\nexports.isDirectoryEmpty = function(dirPath) {\n\tif(!$tw.utils.isDirectory(dirPath)) {\n\t\treturn false;\n\t}\n\tvar files = fs.readdirSync(dirPath),\n\t\tempty = true;\n\t$tw.utils.each(files,function(file,index) {\n\t\tif(file.charAt(0) !== \".\") {\n\t\t\tempty = false;\n\t\t}\n\t});\n\treturn empty;\n};\n\n})();\n",
"title": "$:/core/modules/utils/filesystem.js",
"type": "application/javascript",
"module-type": "utils-node"
},
"$:/core/modules/utils/logger.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/logger.js\ntype: application/javascript\nmodule-type: utils\n\nA basic logging implementation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ALERT_TAG = \"$:/tags/Alert\";\n\n/*\nMake a new logger\n*/\nfunction Logger(componentName) {\n\tthis.componentName = componentName || \"\";\n}\n\n/*\nLog a message\n*/\nLogger.prototype.log = function(/* args */) {\n\tif(console !== undefined && console.log !== undefined) {\n\t\treturn Function.apply.call(console.log, console, [this.componentName + \":\"].concat(Array.prototype.slice.call(arguments,0)));\n\t}\n};\n\n/*\nAlert a message\n*/\nLogger.prototype.alert = function(/* args */) {\n\t// Prepare the text of the alert\n\tvar text = Array.prototype.join.call(arguments,\" \");\n\t// Check if there is an existing alert with the same text and the same component\n\tvar existingAlerts = $tw.wiki.getTiddlersWithTag(ALERT_TAG),\n\t\talertFields,\n\t\texistingCount,\n\t\tself = this;\n\t$tw.utils.each(existingAlerts,function(title) {\n\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\tif(tiddler.fields.text === text && tiddler.fields.component === self.componentName && tiddler.fields.modified && (!alertFields || tiddler.fields.modified < alertFields.modified)) {\n\t\t\t\talertFields = $tw.utils.extend({},tiddler.fields);\n\t\t}\n\t});\n\tif(alertFields) {\n\t\texistingCount = alertFields.count || 1;\n\t} else {\n\t\talertFields = {\n\t\t\ttitle: $tw.wiki.generateNewTitle(\"$:/temp/alerts/alert\",{prefix: \"\"}),\n\t\t\ttext: text,\n\t\t\ttags: [ALERT_TAG],\n\t\t\tcomponent: this.componentName\n\t\t};\n\t\texistingCount = 0;\n\t}\n\talertFields.modified = new Date();\n\tif(++existingCount > 1) {\n\t\talertFields.count = existingCount;\n\t} else {\n\t\talertFields.count = undefined;\n\t}\n\t$tw.wiki.addTiddler(new $tw.Tiddler(alertFields));\n\t// Log it too\n\tthis.log.apply(this,Array.prototype.slice.call(arguments,0));\n};\n\nexports.Logger = Logger;\n\n})();\n",
"title": "$:/core/modules/utils/logger.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/parsetree.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/parsetree.js\ntype: application/javascript\nmodule-type: utils\n\nParse tree utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.addAttributeToParseTreeNode = function(node,name,value) {\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[name] = {type: \"string\", value: value};\n};\n\nexports.getAttributeValueFromParseTreeNode = function(node,name,defaultValue) {\n\tif(node.attributes && node.attributes[name] && node.attributes[name].value !== undefined) {\n\t\treturn node.attributes[name].value;\n\t}\n\treturn defaultValue;\n};\n\nexports.addClassToParseTreeNode = function(node,classString) {\n\tvar classes = [];\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[\"class\"] = node.attributes[\"class\"] || {type: \"string\", value: \"\"};\n\tif(node.attributes[\"class\"].type === \"string\") {\n\t\tif(node.attributes[\"class\"].value !== \"\") {\n\t\t\tclasses = node.attributes[\"class\"].value.split(\" \");\n\t\t}\n\t\tif(classString !== \"\") {\n\t\t\t$tw.utils.pushTop(classes,classString.split(\" \"));\n\t\t}\n\t\tnode.attributes[\"class\"].value = classes.join(\" \");\n\t}\n};\n\nexports.addStyleToParseTreeNode = function(node,name,value) {\n\t\tnode.attributes = node.attributes || {};\n\t\tnode.attributes.style = node.attributes.style || {type: \"string\", value: \"\"};\n\t\tif(node.attributes.style.type === \"string\") {\n\t\t\tnode.attributes.style.value += name + \":\" + value + \";\";\n\t\t}\n};\n\nexports.findParseTreeNode = function(nodeArray,search) {\n\tfor(var t=0; t<nodeArray.length; t++) {\n\t\tif(nodeArray[t].type === search.type && nodeArray[t].tag === search.tag) {\n\t\t\treturn nodeArray[t];\n\t\t}\n\t}\n\treturn undefined;\n};\n\n})();\n",
"title": "$:/core/modules/utils/parsetree.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/performance.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/performance.js\ntype: application/javascript\nmodule-type: global\n\nPerformance measurement.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Performance(enabled) {\n\tthis.enabled = !!enabled;\n\tthis.measures = {}; // Hashmap of current values of measurements\n\tthis.logger = new $tw.utils.Logger(\"performance\");\n}\n\n/*\nWrap performance reporting around a top level function\n*/\nPerformance.prototype.report = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tself.measures = {};\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments);\n\t\t\tself.logger.log(name + \": \" + $tw.utils.timer(startTime) + \"ms\");\n\t\t\tfor(var m in self.measures) {\n\t\t\t\tself.logger.log(\"+\" + m + \": \" + self.measures[m] + \"ms\");\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\n/*\nWrap performance measurements around a subfunction\n*/\nPerformance.prototype.measure = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments),\n\t\t\t\tvalue = self.measures[name] || 0;\n\t\t\tself.measures[name] = value + $tw.utils.timer(startTime);\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\nexports.Performance = Performance;\n\n})();\n",
"title": "$:/core/modules/utils/performance.js",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/utils/pluginmaker.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/pluginmaker.js\ntype: application/javascript\nmodule-type: utils\n\nA quick and dirty way to pack up plugins within the browser.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRepack a plugin, and then delete any non-shadow payload tiddlers\n*/\nexports.repackPlugin = function(title,additionalTiddlers,excludeTiddlers) {\n\tadditionalTiddlers = additionalTiddlers || [];\n\texcludeTiddlers = excludeTiddlers || [];\n\t// Get the plugin tiddler\n\tvar pluginTiddler = $tw.wiki.getTiddler(title);\n\tif(!pluginTiddler) {\n\t\tthrow \"No such tiddler as \" + title;\n\t}\n\t// Extract the JSON\n\tvar jsonPluginTiddler;\n\ttry {\n\t\tjsonPluginTiddler = JSON.parse(pluginTiddler.fields.text);\n\t} catch(e) {\n\t\tthrow \"Cannot parse plugin tiddler \" + title + \"\\nError: \" + e;\n\t}\n\t// Get the list of tiddlers\n\tvar tiddlers = Object.keys(jsonPluginTiddler.tiddlers);\n\t// Add the additional tiddlers\n\t$tw.utils.pushTop(tiddlers,additionalTiddlers);\n\t// Remove any excluded tiddlers\n\tfor(var t=tiddlers.length-1; t>=0; t--) {\n\t\tif(excludeTiddlers.indexOf(tiddlers[t]) !== -1) {\n\t\t\ttiddlers.splice(t,1);\n\t\t}\n\t}\n\t// Pack up the tiddlers into a block of JSON\n\tvar plugins = {};\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = $tw.wiki.getTiddler(title),\n\t\t\tfields = {};\n\t\t$tw.utils.each(tiddler.fields,function (value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\tplugins[title] = fields;\n\t});\n\t// Retrieve and bump the version number\n\tvar pluginVersion = $tw.utils.parseVersion(pluginTiddler.getFieldString(\"version\") || \"0.0.0\") || {\n\t\t\tmajor: \"0\",\n\t\t\tminor: \"0\",\n\t\t\tpatch: \"0\"\n\t\t};\n\tpluginVersion.patch++;\n\tvar version = pluginVersion.major + \".\" + pluginVersion.minor + \".\" + pluginVersion.patch;\n\tif(pluginVersion.prerelease) {\n\t\tversion += \"-\" + pluginVersion.prerelease;\n\t}\n\tif(pluginVersion.build) {\n\t\tversion += \"+\" + pluginVersion.build;\n\t}\n\t// Save the tiddler\n\t$tw.wiki.addTiddler(new $tw.Tiddler(pluginTiddler,{text: JSON.stringify({tiddlers: plugins},null,4), version: version}));\n\t// Delete any non-shadow constituent tiddlers\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tif($tw.wiki.tiddlerExists(title)) {\n\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t}\n\t});\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t// Return a heartwarming confirmation\n\treturn \"Plugin \" + title + \" successfully saved\";\n};\n\n})();\n",
"title": "$:/core/modules/utils/pluginmaker.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/utils.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/utils.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDisplay a warning, in colour if we're on a terminal\n*/\nexports.warning = function(text) {\n\tconsole.log($tw.node ? \"\\x1b[1;33m\" + text + \"\\x1b[0m\" : text);\n}\n\n/*\nTrim whitespace from the start and end of a string\nThanks to Steven Levithan, http://blog.stevenlevithan.com/archives/faster-trim-javascript\n*/\nexports.trim = function(str) {\n\tif(typeof str === \"string\") {\n\t\treturn str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\t} else {\n\t\treturn str;\n\t}\n};\n\n/*\nReturn the number of keys in an object\n*/\nexports.count = function(object) {\n\tvar s = 0;\n\t$tw.utils.each(object,function() {s++;});\n\treturn s;\n};\n\n/*\nCheck if an array is equal by value and by reference.\n*/\nexports.isArrayEqual = function(array1,array2) {\n\tif(array1 === array2) {\n\t\treturn true;\n\t}\n\tarray1 = array1 || [];\n\tarray2 = array2 || [];\n\tif(array1.length !== array2.length) {\n\t\treturn false;\n\t}\n\treturn array1.every(function(value,index) {\n\t\treturn value === array2[index];\n\t});\n};\n\n/*\nPush entries onto an array, removing them first if they already exist in the array\n\tarray: array to modify (assumed to be free of duplicates)\n\tvalue: a single value to push or an array of values to push\n*/\nexports.pushTop = function(array,value) {\n\tvar t,p;\n\tif($tw.utils.isArray(value)) {\n\t\t// Remove any array entries that are duplicated in the new values\n\t\tif(value.length !== 0) {\n\t\t\tif(array.length !== 0) {\n\t\t\t\tif(value.length < array.length) {\n\t\t\t\t\tfor(t=0; t<value.length; t++) {\n\t\t\t\t\t\tp = array.indexOf(value[t]);\n\t\t\t\t\t\tif(p !== -1) {\n\t\t\t\t\t\t\tarray.splice(p,1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor(t=array.length-1; t>=0; t--) {\n\t\t\t\t\t\tp = value.indexOf(array[t]);\n\t\t\t\t\t\tif(p !== -1) {\n\t\t\t\t\t\t\tarray.splice(t,1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Push the values on top of the main array\n\t\t\tarray.push.apply(array,value);\n\t\t}\n\t} else {\n\t\tp = array.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tarray.splice(p,1);\n\t\t}\n\t\tarray.push(value);\n\t}\n\treturn array;\n};\n\n/*\nRemove entries from an array\n\tarray: array to modify\n\tvalue: a single value to remove, or an array of values to remove\n*/\nexports.removeArrayEntries = function(array,value) {\n\tvar t,p;\n\tif($tw.utils.isArray(value)) {\n\t\tfor(t=0; t<value.length; t++) {\n\t\t\tp = array.indexOf(value[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tarray.splice(p,1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tp = array.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tarray.splice(p,1);\n\t\t}\n\t}\n};\n\n/*\nCheck whether any members of a hashmap are present in another hashmap\n*/\nexports.checkDependencies = function(dependencies,changes) {\n\tvar hit = false;\n\t$tw.utils.each(changes,function(change,title) {\n\t\tif($tw.utils.hop(dependencies,title)) {\n\t\t\thit = true;\n\t\t}\n\t});\n\treturn hit;\n};\n\nexports.extend = function(object /* [, src] */) {\n\t$tw.utils.each(Array.prototype.slice.call(arguments, 1), function(source) {\n\t\tif(source) {\n\t\t\tfor(var property in source) {\n\t\t\t\tobject[property] = source[property];\n\t\t\t}\n\t\t}\n\t});\n\treturn object;\n};\n\nexports.deepCopy = function(object) {\n\tvar result,t;\n\tif($tw.utils.isArray(object)) {\n\t\t// Copy arrays\n\t\tresult = object.slice(0);\n\t} else if(typeof object === \"object\") {\n\t\tresult = {};\n\t\tfor(t in object) {\n\t\t\tif(object[t] !== undefined) {\n\t\t\t\tresult[t] = $tw.utils.deepCopy(object[t]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = object;\n\t}\n\treturn result;\n};\n\nexports.extendDeepCopy = function(object,extendedProperties) {\n\tvar result = $tw.utils.deepCopy(object),t;\n\tfor(t in extendedProperties) {\n\t\tif(extendedProperties[t] !== undefined) {\n\t\t\tresult[t] = $tw.utils.deepCopy(extendedProperties[t]);\n\t\t}\n\t}\n\treturn result;\n};\n\nexports.slowInSlowOut = function(t) {\n\treturn (1 - ((Math.cos(t * Math.PI) + 1) / 2));\n};\n\nexports.formatDateString = function(date,template) {\n\tvar result = \"\",\n\t\tt = template,\n\t\tmatches = [\n\t\t\t[/^0hh12/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getHours12(date));\n\t\t\t}],\n\t\t\t[/^wYYYY/, function() {\n\t\t\t\treturn $tw.utils.getYearForWeekNo(date);\n\t\t\t}],\n\t\t\t[/^hh12/, function() {\n\t\t\t\treturn $tw.utils.getHours12(date);\n\t\t\t}],\n\t\t\t[/^DDth/, function() {\n\t\t\t\treturn date.getDate() + $tw.utils.getDaySuffix(date);\n\t\t\t}],\n\t\t\t[/^YYYY/, function() {\n\t\t\t\treturn date.getFullYear();\n\t\t\t}],\n\t\t\t[/^0hh/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getHours());\n\t\t\t}],\n\t\t\t[/^0mm/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMinutes());\n\t\t\t}],\n\t\t\t[/^0ss/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getSeconds());\n\t\t\t}],\n\t\t\t[/^0DD/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getDate());\n\t\t\t}],\n\t\t\t[/^0MM/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMonth()+1);\n\t\t\t}],\n\t\t\t[/^0WW/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getWeek(date));\n\t\t\t}],\n\t\t\t[/^ddd/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^mmm/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^DDD/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^MMM/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^TZD/, function() {\n\t\t\t\tvar tz = date.getTimezoneOffset(),\n\t\t\t\tatz = Math.abs(tz);\n\t\t\t\treturn (tz < 0 ? '+' : '-') + $tw.utils.pad(Math.floor(atz / 60)) + ':' + $tw.utils.pad(atz % 60);\n\t\t\t}],\n\t\t\t[/^wYY/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getYearForWeekNo(date) - 2000);\n\t\t\t}],\n\t\t\t[/^[ap]m/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toLowerCase();\n\t\t\t}],\n\t\t\t[/^hh/, function() {\n\t\t\t\treturn date.getHours();\n\t\t\t}],\n\t\t\t[/^mm/, function() {\n\t\t\t\treturn date.getMinutes();\n\t\t\t}],\n\t\t\t[/^ss/, function() {\n\t\t\t\treturn date.getSeconds();\n\t\t\t}],\n\t\t\t[/^[AP]M/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toUpperCase();\n\t\t\t}],\n\t\t\t[/^DD/, function() {\n\t\t\t\treturn date.getDate();\n\t\t\t}],\n\t\t\t[/^MM/, function() {\n\t\t\t\treturn date.getMonth() + 1;\n\t\t\t}],\n\t\t\t[/^WW/, function() {\n\t\t\t\treturn $tw.utils.getWeek(date);\n\t\t\t}],\n\t\t\t[/^YY/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getFullYear() - 2000);\n\t\t\t}]\n\t\t];\n\twhile(t.length){\n\t\tvar matchString = \"\";\n\t\t$tw.utils.each(matches, function(m) {\n\t\t\tvar match = m[0].exec(t);\n\t\t\tif(match) {\n\t\t\t\tmatchString = m[1].call();\n\t\t\t\tt = t.substr(match[0].length);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\tif(matchString) {\n\t\t\tresult += matchString;\n\t\t} else {\n\t\t\tresult += t.charAt(0);\n\t\t\tt = t.substr(1);\n\t\t}\n\t}\n\tresult = result.replace(/\\\\(.)/g,\"$1\");\n\treturn result;\n};\n\nexports.getAmPm = function(date) {\n\treturn $tw.language.getString(\"Date/Period/\" + (date.getHours() >= 12 ? \"pm\" : \"am\"));\n};\n\nexports.getDaySuffix = function(date) {\n\treturn $tw.language.getString(\"Date/DaySuffix/\" + date.getDate());\n};\n\nexports.getWeek = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week to calculate weekNo\n\tvar n = Math.floor((dt.getTime()-new Date(dt.getFullYear(),0,1) + 3600000) / 86400000);\n\treturn Math.floor(n / 7) + 1;\n};\n\nexports.getYearForWeekNo = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week\n\treturn dt.getFullYear();\n};\n\nexports.getHours12 = function(date) {\n\tvar h = date.getHours();\n\treturn h > 12 ? h-12 : ( h > 0 ? h : 12 );\n};\n\n/*\nConvert a date delta in milliseconds into a string representation of \"23 seconds ago\", \"27 minutes ago\" etc.\n\tdelta: delta in milliseconds\nReturns an object with these members:\n\tdescription: string describing the delta period\n\tupdatePeriod: time in millisecond until the string will be inaccurate\n*/\nexports.getRelativeDate = function(delta) {\n\tvar futurep = false;\n\tif(delta < 0) {\n\t\tdelta = -1 * delta;\n\t\tfuturep = true;\n\t}\n\tvar units = [\n\t\t{name: \"Years\", duration: 365 * 24 * 60 * 60 * 1000},\n\t\t{name: \"Months\", duration: (365/12) * 24 * 60 * 60 * 1000},\n\t\t{name: \"Days\", duration: 24 * 60 * 60 * 1000},\n\t\t{name: \"Hours\", duration: 60 * 60 * 1000},\n\t\t{name: \"Minutes\", duration: 60 * 1000},\n\t\t{name: \"Seconds\", duration: 1000}\n\t];\n\tfor(var t=0; t<units.length; t++) {\n\t\tvar result = Math.floor(delta / units[t].duration);\n\t\tif(result >= 2) {\n\t\t\treturn {\n\t\t\t\tdelta: delta,\n\t\t\t\tdescription: $tw.language.getString(\n\t\t\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/\" + units[t].name,\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{period: result.toString()}\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t\tupdatePeriod: units[t].duration\n\t\t\t};\n\t\t}\n\t}\n\treturn {\n\t\tdelta: delta,\n\t\tdescription: $tw.language.getString(\n\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/Second\",\n\t\t\t{variables:\n\t\t\t\t{period: \"1\"}\n\t\t\t}\n\t\t),\n\t\tupdatePeriod: 1000\n\t};\n};\n\n// Convert & to \"&\", < to \"<\", > to \">\" and \" to \""\"\nexports.htmlEncode = function(s) {\n\tif(s) {\n\t\treturn s.toString().replace(/&/mg,\"&\").replace(/</mg,\"<\").replace(/>/mg,\">\").replace(/\\\"/mg,\""\");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n// Converts all HTML entities to their character equivalents\nexports.entityDecode = function(s) {\n\tvar e = s.substr(1,s.length-2); // Strip the & and the ;\n\tif(e.charAt(0) === \"#\") {\n\t\tif(e.charAt(1) === \"x\" || e.charAt(1) === \"X\") {\n\t\t\treturn String.fromCharCode(parseInt(e.substr(2),16));\t\n\t\t} else {\n\t\t\treturn String.fromCharCode(parseInt(e.substr(1),10));\n\t\t}\n\t} else {\n\t\tvar c = $tw.config.htmlEntities[e];\n\t\tif(c) {\n\t\t\treturn String.fromCharCode(c);\n\t\t} else {\n\t\t\treturn s; // Couldn't convert it as an entity, just return it raw\n\t\t}\n\t}\n};\n\nexports.unescapeLineBreaks = function(s) {\n\treturn s.replace(/\\\\n/mg,\"\\n\").replace(/\\\\b/mg,\" \").replace(/\\\\s/mg,\"\\\\\").replace(/\\r/mg,\"\");\n};\n\n/*\n * Returns an escape sequence for given character. Uses \\x for characters <=\n * 0xFF to save space, \\u for the rest.\n *\n * The code needs to be in sync with th code template in the compilation\n * function for \"action\" nodes.\n */\n// Copied from peg.js, thanks to David Majda\nexports.escape = function(ch) {\n\tvar charCode = ch.charCodeAt(0);\n\tif(charCode <= 0xFF) {\n\t\treturn '\\\\x' + $tw.utils.pad(charCode.toString(16).toUpperCase());\n\t} else {\n\t\treturn '\\\\u' + $tw.utils.pad(charCode.toString(16).toUpperCase(),4);\n\t}\n};\n\n// Turns a string into a legal JavaScript string\n// Copied from peg.js, thanks to David Majda\nexports.stringify = function(s) {\n\t/*\n\t* ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a string\n\t* literal except for the closing quote character, backslash, carriage return,\n\t* line separator, paragraph separator, and line feed. Any character may\n\t* appear in the form of an escape sequence.\n\t*\n\t* For portability, we also escape escape all non-ASCII characters.\n\t*/\n\treturn s\n\t\t.replace(/\\\\/g, '\\\\\\\\') // backslash\n\t\t.replace(/\"/g, '\\\\\"') // double quote character\n\t\t.replace(/'/g, \"\\\\'\") // single quote character\n\t\t.replace(/\\r/g, '\\\\r') // carriage return\n\t\t.replace(/\\n/g, '\\\\n') // line feed\n\t\t.replace(/[\\x80-\\uFFFF]/g, exports.escape); // non-ASCII characters\n};\n\n/*\nEscape the RegExp special characters with a preceding backslash\n*/\nexports.escapeRegExp = function(s) {\n return s.replace(/[\\-\\/\\\\\\^\\$\\*\\+\\?\\.\\(\\)\\|\\[\\]\\{\\}]/g, '\\\\$&');\n};\n\nexports.nextTick = function(fn) {\n/*global window: false */\n\tif(typeof window !== \"undefined\") {\n\t\t// Apparently it would be faster to use postMessage - http://dbaron.org/log/20100309-faster-timeouts\n\t\twindow.setTimeout(fn,4);\n\t} else {\n\t\tprocess.nextTick(fn);\n\t}\n};\n\n/*\nConvert a hyphenated CSS property name into a camel case one\n*/\nexports.unHyphenateCss = function(propName) {\n\treturn propName.replace(/-([a-z])/gi, function(match0,match1) {\n\t\treturn match1.toUpperCase();\n\t});\n};\n\n/*\nConvert a camelcase CSS property name into a dashed one (\"backgroundColor\" --> \"background-color\")\n*/\nexports.hyphenateCss = function(propName) {\n\treturn propName.replace(/([A-Z])/g, function(match0,match1) {\n\t\treturn \"-\" + match1.toLowerCase();\n\t});\n};\n\n/*\nParse a text reference of one of these forms:\n* title\n* !!field\n* title!!field\n* title##index\n* etc\nReturns an object with the following fields, all optional:\n* title: tiddler title\n* field: tiddler field name\n* index: JSON property index\n*/\nexports.parseTextReference = function(textRef) {\n\t// Separate out the title, field name and/or JSON indices\n\tvar reTextRef = /(?:(.*?)!!(.+))|(?:(.*?)##(.+))|(.*)/mg,\n\t\tmatch = reTextRef.exec(textRef),\n\t\tresult = {};\n\tif(match && reTextRef.lastIndex === textRef.length) {\n\t\t// Return the parts\n\t\tif(match[1]) {\n\t\t\tresult.title = match[1];\n\t\t}\n\t\tif(match[2]) {\n\t\t\tresult.field = match[2];\n\t\t}\n\t\tif(match[3]) {\n\t\t\tresult.title = match[3];\n\t\t}\n\t\tif(match[4]) {\n\t\t\tresult.index = match[4];\n\t\t}\n\t\tif(match[5]) {\n\t\t\tresult.title = match[5];\n\t\t}\n\t} else {\n\t\t// If we couldn't parse it\n\t\tresult.title = textRef\n\t}\n\treturn result;\n};\n\n/*\nChecks whether a string is a valid fieldname\n*/\nexports.isValidFieldName = function(name) {\n\tif(!name || typeof name !== \"string\") {\n\t\treturn false;\n\t}\n\tname = name.toLowerCase().trim();\n\tvar fieldValidatorRegEx = /^[a-z0-9\\-\\._]+$/mg;\n\treturn fieldValidatorRegEx.test(name);\n};\n\n/*\nExtract the version number from the meta tag or from the boot file\n*/\n\n// Browser version\nexports.extractVersionInfo = function() {\n\tif($tw.packageInfo) {\n\t\treturn $tw.packageInfo.version;\n\t} else {\n\t\tvar metatags = document.getElementsByTagName(\"meta\");\n\t\tfor(var t=0; t<metatags.length; t++) {\n\t\t\tvar m = metatags[t];\n\t\t\tif(m.name === \"tiddlywiki-version\") {\n\t\t\t\treturn m.content;\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the animation duration in ms\n*/\nexports.getAnimationDuration = function() {\n\treturn parseInt($tw.wiki.getTiddlerText(\"$:/config/AnimationDuration\",\"400\"),10);\n};\n\n/*\nHash a string to a number\nDerived from http://stackoverflow.com/a/15710692\n*/\nexports.hashString = function(str) {\n\treturn str.split(\"\").reduce(function(a,b) {\n\t\ta = ((a << 5) - a) + b.charCodeAt(0);\n\t\treturn a & a;\n\t},0);\n};\n\n/*\nDecode a base64 string\n*/\nexports.base64Decode = function(string64) {\n\tif($tw.browser) {\n\t\t// TODO\n\t\tthrow \"$tw.utils.base64Decode() doesn't work in the browser\";\n\t} else {\n\t\treturn (new Buffer(string64,\"base64\")).toString();\n\t}\n};\n\n/*\nConvert a hashmap into a tiddler dictionary format sequence of name:value pairs\n*/\nexports.makeTiddlerDictionary = function(data) {\n\tvar output = [];\n\tfor(var name in data) {\n\t\toutput.push(name + \": \" + data[name]);\n\t}\n\treturn output.join(\"\\n\");\n};\n\n/*\nHigh resolution microsecond timer for profiling\n*/\nexports.timer = function(base) {\n\tvar m;\n\tif($tw.node) {\n\t\tvar r = process.hrtime();\t\t\n\t\tm = r[0] * 1e3 + (r[1] / 1e6);\n\t} else if(window.performance) {\n\t\tm = performance.now();\n\t} else {\n\t\tm = Date.now();\n\t}\n\tif(typeof base !== \"undefined\") {\n\t\tm = m - base;\n\t}\n\treturn m;\n};\n\n})();",
"title": "$:/core/modules/utils/utils.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/widgets/action-deletefield.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/action-deletefield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete fields of a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\ttiddler = this.wiki.getTiddler(self.actionTiddler),\n\t\tremoveFields = {};\n\tif(this.actionField) {\n\t\tremoveFields[this.actionField] = undefined;\n\t}\n\tif(tiddler) {\n\t\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\t\tif(name.charAt(0) !== \"$\" && name !== \"title\") {\n\t\t\t\tremoveFields[name] = undefined;\n\t\t\t}\n\t\t});\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,removeFields));\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletefield\"] = DeleteFieldWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/action-deletefield.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-deletetiddler.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/action-deletetiddler.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteTiddlerWidget.prototype.execute = function() {\n\tthis.actionFilter = this.getAttribute(\"$filter\");\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$filter\"] || changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar tiddlers = [];\n\tif(this.actionFilter) {\n\t\ttiddlers = this.wiki.filterTiddlers(this.actionFilter,this);\n\t}\n\tif(this.actionTiddler) {\n\t\ttiddlers.push(this.actionTiddler);\n\t}\n\tfor(var t=0; t<tiddlers.length; t++) {\n\t\tthis.wiki.deleteTiddler(tiddlers[t]);\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletetiddler\"] = DeleteTiddlerWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/action-deletetiddler.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-navigate.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/action-navigate.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to navigate to a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigateWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigateWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigateWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigateWidget.prototype.execute = function() {\n\tthis.actionTo = this.getAttribute(\"$to\");\n\tthis.actionScroll = this.getAttribute(\"$scroll\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nNavigateWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$to\"] || changedAttributes[\"$scroll\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nNavigateWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar bounds = triggeringWidget && triggeringWidget.getBoundingClientRect && triggeringWidget.getBoundingClientRect(),\n\t\tsuppressNavigation = event.metaKey || event.ctrlKey || (event.button === 1);\n\tif(this.actionScroll === \"yes\") {\n\t\tsuppressNavigation = false;\n\t} else if(this.actionScroll === \"no\") {\n\t\tsuppressNavigation = true;\n\t}\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.actionTo === undefined ? this.getVariable(\"currentTiddler\") : this.actionTo,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: triggeringWidget,\n\t\tnavigateFromClientRect: bounds && { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: suppressNavigation\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-navigate\"] = NavigateWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/action-navigate.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-sendmessage.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/action-sendmessage.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to send a message\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SendMessageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSendMessageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSendMessageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSendMessageWidget.prototype.execute = function() {\n\tthis.actionMessage = this.getAttribute(\"$message\");\n\tthis.actionParam = this.getAttribute(\"$param\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSendMessageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$message\"] || changedAttributes[\"$param\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSendMessageWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\t// Get the string parameter\n\tvar param = this.actionParam;\n\t// Assemble the attributes as a hashmap\n\tvar paramObject = Object.create(null);\n\tvar count = 0;\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparamObject[name] = attribute;\n\t\t\tcount++;\n\t\t}\n\t});\n\t// Dispatch the message\n\tthis.dispatchEvent({type: this.actionMessage, param: param, paramObject: paramObject, tiddlerTitle: this.getVariable(\"currentTiddler\")});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-sendmessage\"] = SendMessageWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/action-sendmessage.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-setfield.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/action-setfield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to set a single field or index on a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n\tthis.actionIndex = this.getAttribute(\"$index\");\n\tthis.actionValue = this.getAttribute(\"$value\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSetFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"] || changedAttributes[\"$field\"] || changedAttributes[\"$index\"] || changedAttributes[\"$value\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSetFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this;\n\tif(typeof this.actionValue === \"string\") {\n\t\tthis.wiki.setText(this.actionTiddler,this.actionField,this.actionIndex,this.actionValue);\t\t\n\t}\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tself.wiki.setText(self.actionTiddler,name,undefined,attribute);\n\t\t}\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-setfield\"] = SetFieldWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/action-setfield.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/browse.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/browse.js\ntype: application/javascript\nmodule-type: widget\n\nBrowse widget for browsing for files to import\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar BrowseWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nBrowseWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nBrowseWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"file\");\n\tif(this.browseMultiple) {\n\t\tdomNode.setAttribute(\"multiple\",\"multiple\");\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"change\",function (event) {\n\t\tif(self.message) {\n\t\t\tself.dispatchEvent({type: self.message, param: event.target.files});\n\t\t} else {\n\t\t\tself.wiki.readFiles(event.target.files,function(tiddlerFieldsArray) {\n\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t\t});\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nBrowseWidget.prototype.execute = function() {\n\tthis.browseMultiple = this.getAttribute(\"multiple\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nBrowseWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.browse = BrowseWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/browse.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/button.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/button.js\ntype: application/javascript\nmodule-type: widget\n\nButton widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ButtonWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nButtonWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nButtonWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"button\");\n\t// Assign classes\n\tvar classes = this[\"class\"].split(\" \") || [],\n\t\tisPoppedUp = this.popup && this.isPoppedUp();\n\tif(this.selectedClass) {\n\t\tif(this.set && this.setTo && this.isSelected()) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t\tif(isPoppedUp) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t}\n\tif(isPoppedUp) {\n\t\t$tw.utils.pushTop(classes,\"tc-popup-handle\");\n\t}\n\tdomNode.className = classes.join(\" \");\n\t// Assign other attributes\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"click\",function (event) {\n\t\tvar handled = false;\n\t\tif(self.invokeActions(event)) {\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.to) {\n\t\t\tself.navigateTo(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.message) {\n\t\t\tself.dispatchMessage(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.popup) {\n\t\t\tself.triggerPopup(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.set) {\n\t\t\tself.setTiddler();\n\t\t\thandled = true;\n\t\t}\n\t\tif(handled) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\treturn handled;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nButtonWidget.prototype.getBoundingClientRect = function() {\n\treturn this.domNodes[0].getBoundingClientRect();\n}\n\nButtonWidget.prototype.isSelected = function() {\n\tvar tiddler = this.wiki.getTiddler(this.set);\n\treturn tiddler ? tiddler.fields.text === this.setTo : this.defaultSetValue === this.setTo;\n};\n\nButtonWidget.prototype.isPoppedUp = function() {\n\tvar tiddler = this.wiki.getTiddler(this.popup);\n\tvar result = tiddler && tiddler.fields.text ? $tw.popup.readPopupState(tiddler.fields.text) : false;\n\treturn result;\n};\n\nButtonWidget.prototype.navigateTo = function(event) {\n\tvar bounds = this.getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1)\n\t});\n};\n\nButtonWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\")});\n};\n\nButtonWidget.prototype.triggerPopup = function(event) {\n\t$tw.popup.triggerPopup({\n\t\tdomNode: this.domNodes[0],\n\t\ttitle: this.popup,\n\t\twiki: this.wiki\n\t});\n};\n\nButtonWidget.prototype.setTiddler = function() {\n\tthis.wiki.setTextReference(this.set,this.setTo,this.getVariable(\"currentTiddler\"));\n};\n\n/*\nCompute the internal state of the widget\n*/\nButtonWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.to = this.getAttribute(\"to\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.set = this.getAttribute(\"set\");\n\tthis.setTo = this.getAttribute(\"setTo\");\n\tthis.popup = this.getAttribute(\"popup\");\n\tthis.hover = this.getAttribute(\"hover\");\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.style = this.getAttribute(\"style\");\n\tthis.selectedClass = this.getAttribute(\"selectedClass\");\n\tthis.defaultSetValue = this.getAttribute(\"default\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nButtonWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedAttributes.message || changedAttributes.param || changedAttributes.set || changedAttributes.setTo || changedAttributes.popup || changedAttributes.hover || changedAttributes[\"class\"] || changedAttributes.selectedClass || changedAttributes.style || (this.set && changedTiddlers[this.set]) || (this.popup && changedTiddlers[this.popup])) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.button = ButtonWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/button.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/checkbox.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/checkbox.js\ntype: application/javascript\nmodule-type: widget\n\nCheckbox widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CheckboxWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCheckboxWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCheckboxWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"checkbox\");\n\tif(this.getValue()) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nCheckboxWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.checkboxTitle);\n\tif(tiddler) {\n\t\tif(this.checkboxTag) {\n\t\t\treturn tiddler.hasTag(this.checkboxTag);\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tvar value = tiddler.fields[this.checkboxField] || this.checkboxDefault || \"\";\n\t\t\tif(value === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(value === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif(this.checkboxTag) {\n\t\t\treturn false;\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tif(this.checkboxDefault === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(this.checkboxDefault === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\nCheckboxWidget.prototype.handleChangeEvent = function(event) {\n\tvar checked = this.inputDomNode.checked,\n\t\ttiddler = this.wiki.getTiddler(this.checkboxTitle),\n\t\tfallbackFields = {text: \"\"},\n\t\tnewFields = {title: this.checkboxTitle},\n\t\thasChanged = false;\n\t// Set the tag if specified\n\tif(this.checkboxTag && (!tiddler || tiddler.hasTag(this.checkboxTag) !== checked)) {\n\t\tnewFields.tags = tiddler ? (tiddler.fields.tags || []).slice(0) : [];\n\t\tvar pos = newFields.tags.indexOf(this.checkboxTag);\n\t\tif(pos !== -1) {\n\t\t\tnewFields.tags.splice(pos,1);\n\t\t}\n\t\tif(checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t}\n\t\thasChanged = true;\n\t}\n\t// Set the field if specified\n\tif(this.checkboxField) {\n\t\tvar value = checked ? this.checkboxChecked : this.checkboxUnchecked;\n\t\tif(!tiddler || tiddler.fields[this.checkboxField] !== value) {\n\t\t\tnewFields[this.checkboxField] = value;\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\tif(hasChanged) {\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(fallbackFields,tiddler,newFields,this.wiki.getModificationFields()));\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCheckboxWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.checkboxTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.checkboxTag = this.getAttribute(\"tag\");\n\tthis.checkboxField = this.getAttribute(\"field\");\n\tthis.checkboxChecked = this.getAttribute(\"checked\");\n\tthis.checkboxUnchecked = this.getAttribute(\"unchecked\");\n\tthis.checkboxDefault = this.getAttribute(\"default\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCheckboxWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.tag || changedAttributes.field || changedAttributes.checked || changedAttributes.unchecked || changedAttributes[\"default\"] || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.checkboxTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue();\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.checkbox = CheckboxWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/checkbox.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/codeblock.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/codeblock.js\ntype: application/javascript\nmodule-type: widget\n\nCode block node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CodeBlockWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCodeBlockWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCodeBlockWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar codeNode = this.document.createElement(\"code\"),\n\t\tdomNode = this.document.createElement(\"pre\");\n\tcodeNode.appendChild(this.document.createTextNode(this.getAttribute(\"code\")));\n\tdomNode.appendChild(codeNode);\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n\tif(this.postRender) {\n\t\tthis.postRender();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCodeBlockWidget.prototype.execute = function() {\n\tthis.language = this.getAttribute(\"language\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCodeBlockWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.codeblock = CodeBlockWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/codeblock.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/count.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/count.js\ntype: application/javascript\nmodule-type: widget\n\nCount widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CountWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCountWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCountWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.currentCount);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nCountWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Execute the filter\n\tif(this.filter) {\n\t\tthis.currentCount = this.wiki.filterTiddlers(this.filter,this).length;\n\t} else {\n\t\tthis.currentCount = undefined;\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCountWidget.prototype.refresh = function(changedTiddlers) {\n\t// Re-execute the filter to get the count\n\tthis.computeAttributes();\n\tvar oldCount = this.currentCount;\n\tthis.execute();\n\tif(this.currentCount !== oldCount) {\n\t\t// Regenerate and rerender the widget and replace the existing DOM node\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n\n};\n\nexports.count = CountWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/count.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/dropzone.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/dropzone.js\ntype: application/javascript\nmodule-type: widget\n\nDropzone widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DropZoneWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDropZoneWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDropZoneWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"div\");\n\tdomNode.className = \"tc-dropzone\";\n\t// Add event handlers\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"},\n\t\t{name: \"paste\", handlerObject: this, handlerMethod: \"handlePasteEvent\"}\n\t]);\n\tdomNode.addEventListener(\"click\",function (event) {\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nDropZoneWidget.prototype.enterDrag = function() {\n\t// We count enter/leave events\n\tthis.dragEnterCount = (this.dragEnterCount || 0) + 1;\n\t// If we're entering for the first time we need to apply highlighting\n\tif(this.dragEnterCount === 1) {\n\t\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n\t}\n};\n\nDropZoneWidget.prototype.leaveDrag = function() {\n\t// Reduce the enter count\n\tthis.dragEnterCount = (this.dragEnterCount || 0) - 1;\n\t// Remove highlighting if we're leaving externally\n\tif(this.dragEnterCount <= 0) {\n\t\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t}\n};\n\nDropZoneWidget.prototype.handleDragEnterEvent = function(event) {\n\tthis.enterDrag();\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handleDragOverEvent = function(event) {\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\tevent.dataTransfer.dropEffect = \"copy\"; // Explicitly show this is a copy\n};\n\nDropZoneWidget.prototype.handleDragLeaveEvent = function(event) {\n\tthis.leaveDrag();\n};\n\nDropZoneWidget.prototype.handleDropEvent = function(event) {\n\tthis.leaveDrag();\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\tvar self = this,\n\t\tdataTransfer = event.dataTransfer;\n\t// Reset the enter count\n\tthis.dragEnterCount = 0;\n\t// Remove highlighting\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t// Import any files in the drop\n\tvar numFiles = this.wiki.readFiles(dataTransfer.files,function(tiddlerFieldsArray) {\n\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t});\n\t// Try to import the various data types we understand\n\tif(numFiles === 0) {\n\t\tthis.importData(dataTransfer);\n\t}\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.importData = function(dataTransfer) {\n\t// Try each provided data type in turn\n\tfor(var t=0; t<this.importDataTypes.length; t++) {\n\t\tif(!$tw.browser.isIE || this.importDataTypes[t].IECompatible) {\n\t\t\t// Get the data\n\t\t\tvar dataType = this.importDataTypes[t];\n\t\t\t\tvar data = dataTransfer.getData(dataType.type);\n\t\t\t// Import the tiddlers in the data\n\t\t\tif(data !== \"\" && data !== null) {\n\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\tconsole.log(\"Importing data type '\" + dataType.type + \"', data: '\" + data + \"'\")\n\t\t\t\t}\n\t\t\t\tvar tiddlerFields = dataType.convertToFields(data);\n\t\t\t\tif(!tiddlerFields.title) {\n\t\t\t\t\ttiddlerFields.title = this.wiki.generateNewTitle(\"Untitled\");\n\t\t\t\t}\n\t\t\t\tthis.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify([tiddlerFields])});\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n};\n\nDropZoneWidget.prototype.importDataTypes = [\n\t{type: \"text/vnd.tiddler\", IECompatible: false, convertToFields: function(data) {\n\t\treturn JSON.parse(data);\n\t}},\n\t{type: \"URL\", IECompatible: true, convertToFields: function(data) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURI(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn JSON.parse(match[1]);\n\t\t} else {\n\t\t\treturn { // As URL string\n\t\t\t\ttext: data\n\t\t\t};\n\t\t}\n\t}},\n\t{type: \"text/x-moz-url\", IECompatible: false, convertToFields: function(data) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURI(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn JSON.parse(match[1]);\n\t\t} else {\n\t\t\treturn { // As URL string\n\t\t\t\ttext: data\n\t\t\t};\n\t\t}\n\t}},\n\t{type: \"text/html\", IECompatible: false, convertToFields: function(data) {\n\t\treturn {\n\t\t\ttext: data\n\t\t};\n\t}},\n\t{type: \"text/plain\", IECompatible: false, convertToFields: function(data) {\n\t\treturn {\n\t\t\ttext: data\n\t\t};\n\t}},\n\t{type: \"Text\", IECompatible: true, convertToFields: function(data) {\n\t\treturn {\n\t\t\ttext: data\n\t\t};\n\t}},\n\t{type: \"text/uri-list\", IECompatible: false, convertToFields: function(data) {\n\t\treturn {\n\t\t\ttext: data\n\t\t};\n\t}}\n];\n\nDropZoneWidget.prototype.handlePasteEvent = function(event) {\n\t// Let the browser handle it if we're in a textarea or input box\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) == -1) {\n\t\tvar self = this,\n\t\t\titems = event.clipboardData.items;\n\t\t// Enumerate the clipboard items\n\t\tfor(var t = 0; t<items.length; t++) {\n\t\t\tvar item = items[t];\n\t\t\tif(item.kind === \"file\") {\n\t\t\t\t// Import any files\n\t\t\t\tthis.wiki.readFile(item.getAsFile(),function(tiddlerFieldsArray) {\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t\t\t});\n\t\t\t} else if(item.kind === \"string\") {\n\t\t\t\t// Create tiddlers from string items\n\t\t\t\tvar type = item.type;\n\t\t\t\titem.getAsString(function(str) {\n\t\t\t\t\tvar tiddlerFields = {\n\t\t\t\t\t\ttitle: self.wiki.generateNewTitle(\"Untitled\"),\n\t\t\t\t\t\ttext: str,\n\t\t\t\t\t\ttype: type\n\t\t\t\t\t};\n\t\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\t\tconsole.log(\"Importing string '\" + str + \"', type: '\" + type + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify([tiddlerFields])});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t// Tell the browser that we've handled the paste\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDropZoneWidget.prototype.execute = function() {\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDropZoneWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.dropzone = DropZoneWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/dropzone.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-binary.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-binary.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-binary widget; placeholder for editing binary tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar BINARY_WARNING_MESSAGE = \"$:/core/ui/BinaryWarning\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBinaryWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBinaryWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBinaryWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBinaryWidget.prototype.execute = function() {\n\t// Construct the child widgets\n\tthis.makeChildWidgets([{\n\t\ttype: \"transclude\",\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: BINARY_WARNING_MESSAGE}\n\t\t}\n\t}]);\n};\n\n/*\nRefresh by refreshing our child widget\n*/\nEditBinaryWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"edit-binary\"] = EditBinaryWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/edit-binary.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-bitmap.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-bitmap.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-bitmap widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Default image sizes\nvar DEFAULT_IMAGE_WIDTH = 300,\n\tDEFAULT_IMAGE_HEIGHT = 185;\n\n// Configuration tiddlers\nvar LINE_WIDTH_TITLE = \"$:/config/BitmapEditor/LineWidth\",\n\tLINE_COLOUR_TITLE = \"$:/config/BitmapEditor/Colour\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBitmapWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBitmapWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBitmapWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our element\n\tthis.canvasDomNode = $tw.utils.domMaker(\"canvas\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tc-edit-bitmapeditor\",\n\t\teventListeners: [{\n\t\t\tname: \"touchstart\", handlerObject: this, handlerMethod: \"handleTouchStartEvent\"\n\t\t},{\n\t\t\tname: \"touchmove\", handlerObject: this, handlerMethod: \"handleTouchMoveEvent\"\n\t\t},{\n\t\t\tname: \"touchend\", handlerObject: this, handlerMethod: \"handleTouchEndEvent\"\n\t\t},{\n\t\t\tname: \"mousedown\", handlerObject: this, handlerMethod: \"handleMouseDownEvent\"\n\t\t},{\n\t\t\tname: \"mousemove\", handlerObject: this, handlerMethod: \"handleMouseMoveEvent\"\n\t\t},{\n\t\t\tname: \"mouseup\", handlerObject: this, handlerMethod: \"handleMouseUpEvent\"\n\t\t}]\n\t});\n\tthis.widthDomNode = $tw.utils.domMaker(\"input\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tc-edit-bitmapeditor-width\",\n\t\teventListeners: [{\n\t\t\tname: \"change\", handlerObject: this, handlerMethod: \"handleWidthChangeEvent\"\n\t\t}]\n\t});\n\tthis.heightDomNode = $tw.utils.domMaker(\"input\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tc-edit-bitmapeditor-height\",\n\t\teventListeners: [{\n\t\t\tname: \"change\", handlerObject: this, handlerMethod: \"handleHeightChangeEvent\"\n\t\t}]\n\t});\n\t// Insert the elements into the DOM\n\tparent.insertBefore(this.canvasDomNode,nextSibling);\n\tparent.insertBefore(this.widthDomNode,nextSibling);\n\tparent.insertBefore(this.heightDomNode,nextSibling);\n\tthis.domNodes.push(this.canvasDomNode,this.widthDomNode,this.heightDomNode);\n\t// Load the image into the canvas\n\tif($tw.browser) {\n\t\tthis.loadCanvas();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBitmapWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n};\n\n/*\nNote that the bitmap editor intentionally doesn't try to refresh itself because it would be confusing to have the image changing spontaneously while editting it\n*/\nEditBitmapWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nEditBitmapWidget.prototype.loadCanvas = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle),\n\t\tcurrImage = new Image();\n\t// Set up event handlers for loading the image\n\tvar self = this;\n\tcurrImage.onload = function() {\n\t\t// Copy the image to the on-screen canvas\n\t\tself.initCanvas(self.canvasDomNode,currImage.width,currImage.height,currImage);\n\t\t// And also copy the current bitmap to the off-screen canvas\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,currImage.width,currImage.height,currImage);\n\t\t// Set the width and height input boxes\n\t\tself.updateSize();\n\t};\n\tcurrImage.onerror = function() {\n\t\t// Set the on-screen canvas size and clear it\n\t\tself.initCanvas(self.canvasDomNode,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the off-screen canvas size and clear it\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the width and height input boxes\n\t\tself.updateSize();\n\t};\n\t// Get the current bitmap into an image object\n\tcurrImage.src = \"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text;\n};\n\nEditBitmapWidget.prototype.initCanvas = function(canvas,width,height,image) {\n\tcanvas.width = width;\n\tcanvas.height = height;\n\tvar ctx = canvas.getContext(\"2d\");\n\tif(image) {\n\t\tctx.drawImage(image,0,0);\n\t} else {\n\t\tctx.fillStyle = \"#fff\";\n\t\tctx.fillRect(0,0,canvas.width,canvas.height);\n\t}\n};\n\n/*\n** Update the input boxes with the actual size of the canvas\n*/\nEditBitmapWidget.prototype.updateSize = function() {\n\tthis.widthDomNode.value = this.currCanvas.width;\n\tthis.heightDomNode.value = this.currCanvas.height;\n};\n\n/*\n** Change the size of the canvas, preserving the current image\n*/\nEditBitmapWidget.prototype.changeCanvasSize = function(newWidth,newHeight) {\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\");\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\nEditBitmapWidget.prototype.handleWidthChangeEvent = function(event) {\n\t// Get the new width\n\tvar newWidth = parseInt(this.widthDomNode.value,10);\n\t// Update if necessary\n\tif(newWidth > 0 && newWidth !== this.currCanvas.width) {\n\t\tthis.changeCanvasSize(newWidth,this.currCanvas.height);\n\t}\n\t// Update the input controls\n\tthis.updateSize();\n};\n\nEditBitmapWidget.prototype.handleHeightChangeEvent = function(event) {\n\t// Get the new width\n\tvar newHeight = parseInt(this.heightDomNode.value,10);\n\t// Update if necessary\n\tif(newHeight > 0 && newHeight !== this.currCanvas.height) {\n\t\tthis.changeCanvasSize(this.currCanvas.width,newHeight);\n\t}\n\t// Update the input controls\n\tthis.updateSize();\n};\n\nEditBitmapWidget.prototype.handleTouchStartEvent = function(event) {\n\tthis.brushDown = true;\n\tthis.strokeStart(event.touches[0].clientX,event.touches[0].clientY);\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.touches[0].clientX,event.touches[0].clientY);\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchEndEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseDownEvent = function(event) {\n\tthis.strokeStart(event.clientX,event.clientY);\n\tthis.brushDown = true;\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.clientX,event.clientY);\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.handleMouseUpEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.adjustCoordinates = function(x,y) {\n\tvar canvasRect = this.canvasDomNode.getBoundingClientRect(),\n\t\tscale = this.canvasDomNode.width/canvasRect.width;\n\treturn {x: (x - canvasRect.left) * scale, y: (y - canvasRect.top) * scale};\n};\n\nEditBitmapWidget.prototype.strokeStart = function(x,y) {\n\t// Start off a new stroke\n\tthis.stroke = [this.adjustCoordinates(x,y)];\n};\n\nEditBitmapWidget.prototype.strokeMove = function(x,y) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\"),\n\t\tt;\n\t// Add the new position to the end of the stroke\n\tthis.stroke.push(this.adjustCoordinates(x,y));\n\t// Redraw the previous image\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Render the stroke\n\tctx.strokeStyle = this.wiki.getTiddlerText(LINE_COLOUR_TITLE,\"#ff0\");\n\tctx.lineWidth = parseInt(this.wiki.getTiddlerText(LINE_WIDTH_TITLE,\"3\"),10);\n\tctx.lineCap = \"round\";\n\tctx.lineJoin = \"round\";\n\tctx.beginPath();\n\tctx.moveTo(this.stroke[0].x,this.stroke[0].y);\n\tfor(t=1; t<this.stroke.length-1; t++) {\n\t\tvar s1 = this.stroke[t],\n\t\t\ts2 = this.stroke[t-1],\n\t\t\ttx = (s1.x + s2.x)/2,\n\t\t\tty = (s1.y + s2.y)/2;\n\t\tctx.quadraticCurveTo(s2.x,s2.y,tx,ty);\n\t}\n\tctx.stroke();\n};\n\nEditBitmapWidget.prototype.strokeEnd = function() {\n\t// Copy the bitmap to the off-screen canvas\n\tvar ctx = this.currCanvas.getContext(\"2d\");\n\tctx.drawImage(this.canvasDomNode,0,0);\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\nEditBitmapWidget.prototype.saveChanges = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\tif(tiddler) {\n\t\t// data URIs look like \"data:<type>;base64,<text>\"\n\t\tvar dataURL = this.canvasDomNode.toDataURL(tiddler.fields.type,1.0),\n\t\t\tposColon = dataURL.indexOf(\":\"),\n\t\t\tposSemiColon = dataURL.indexOf(\";\"),\n\t\t\tposComma = dataURL.indexOf(\",\"),\n\t\t\ttype = dataURL.substring(posColon+1,posSemiColon),\n\t\t\ttext = dataURL.substring(posComma+1);\n\t\tvar update = {type: type, text: text};\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,update));\n\t}\n};\n\nexports[\"edit-bitmap\"] = EditBitmapWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/edit-bitmap.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-text.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-text.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-text widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DEFAULT_MIN_TEXT_AREA_HEIGHT = \"100px\"; // Minimum height of textareas in pixels\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditTextWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditTextWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditTextWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our element\n\tvar editInfo = this.getEditInfo();\n\tvar domNode = this.document.createElement(this.editTag);\n\tif(this.editType) {\n\t\tdomNode.setAttribute(\"type\",this.editType);\n\t}\n\tif(editInfo.value === \"\" && this.editPlaceholder) {\n\t\tdomNode.setAttribute(\"placeholder\",this.editPlaceholder);\n\t}\n\tif(this.editSize) {\n\t\tdomNode.setAttribute(\"size\",this.editSize);\n\t}\n\t// Assign classes\n\tif(this.editClass) {\n\t\tdomNode.className = this.editClass;\n\t}\n\t// Set the text\n\tif(this.editTag === \"textarea\") {\n\t\tdomNode.appendChild(this.document.createTextNode(editInfo.value));\n\t} else {\n\t\tdomNode.value = editInfo.value;\n\t}\n\t// Add an input event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"focus\", handlerObject: this, handlerMethod: \"handleFocusEvent\"},\n\t\t{name: \"input\", handlerObject: this, handlerMethod: \"handleInputEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n\tif(this.postRender) {\n\t\tthis.postRender();\n\t}\n\t// Fix height\n\tthis.fixHeight();\n\t// Focus field\n\tif(this.editFocus === \"true\") {\n\t\tdomNode.focus();\n\t\tdomNode.select();\n\t}\n};\n\n/*\nGet the tiddler being edited and current value\n*/\nEditTextWidget.prototype.getEditInfo = function() {\n\t// Get the edit value\n\tvar self = this,\n\t\tvalue,\n\t\tupdate;\n\tif(this.editIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.editTitle,this.editIndex,this.editDefault);\n\t\tupdate = function(value) {\n\t\t\tvar data = self.wiki.getTiddlerData(self.editTitle,{});\n\t\t\tif(data[self.editIndex] !== value) {\n\t\t\t\tdata[self.editIndex] = value;\n\t\t\t\tself.wiki.setTiddlerData(self.editTitle,data);\n\t\t\t}\n\t\t};\n\t} else {\n\t\t// Get the current tiddler and the field name\n\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\tif(tiddler) {\n\t\t\t// If we've got a tiddler, the value to display is the field string value\n\t\t\tvalue = tiddler.getFieldString(this.editField);\n\t\t} else {\n\t\t\t// Otherwise, we need to construct a default value for the editor\n\t\t\tswitch(this.editField) {\n\t\t\t\tcase \"text\":\n\t\t\t\t\tvalue = \"Type the text for the tiddler '\" + this.editTitle + \"'\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"title\":\n\t\t\t\t\tvalue = this.editTitle;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tvalue = \"\";\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(this.editDefault !== undefined) {\n\t\t\t\tvalue = this.editDefault;\n\t\t\t}\n\t\t}\n\t\tupdate = function(value) {\n\t\t\tvar tiddler = self.wiki.getTiddler(self.editTitle),\n\t\t\t\tupdateFields = {\n\t\t\t\t\ttitle: self.editTitle\n\t\t\t\t};\n\t\t\tupdateFields[self.editField] = value;\n\t\t\tself.wiki.addTiddler(new $tw.Tiddler(self.wiki.getCreationFields(),tiddler,updateFields,self.wiki.getModificationFields()));\n\t\t};\n\t}\n\treturn {value: value, update: update};\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditTextWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.editField = this.getAttribute(\"field\",\"text\");\n\tthis.editIndex = this.getAttribute(\"index\");\n\tthis.editDefault = this.getAttribute(\"default\");\n\tthis.editClass = this.getAttribute(\"class\");\n\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.editSize = this.getAttribute(\"size\");\n\tthis.editAutoHeight = this.getAttribute(\"autoHeight\",\"yes\") === \"yes\";\n\tthis.editMinHeight = this.getAttribute(\"minHeight\",DEFAULT_MIN_TEXT_AREA_HEIGHT);\n\tthis.editFocusPopup = this.getAttribute(\"focusPopup\");\n\tthis.editFocus = this.getAttribute(\"focus\");\n\t// Get the editor element tag and type\n\tvar tag,type;\n\tif(this.editField === \"text\") {\n\t\ttag = \"textarea\";\n\t} else {\n\t\ttag = \"input\";\n\t\tvar fieldModule = $tw.Tiddler.fieldModules[this.editField];\n\t\tif(fieldModule && fieldModule.editTag) {\n\t\t\ttag = fieldModule.editTag;\n\t\t}\n\t\tif(fieldModule && fieldModule.editType) {\n\t\t\ttype = fieldModule.editType;\n\t\t}\n\t\ttype = type || \"text\";\n\t}\n\t// Get the rest of our parameters\n\tthis.editTag = this.getAttribute(\"tag\",tag);\n\tthis.editType = this.getAttribute(\"type\",type);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEditTextWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Completely rerender if any of our attributes have changed\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.placeholder || changedAttributes.size || changedAttributes.autoHeight || changedAttributes.minHeight || changedAttributes.focusPopup) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedTiddlers[this.editTitle]) {\n\t\tthis.updateEditor(this.getEditInfo().value);\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n/*\nUpdate the editor with new text. This method is separate from updateEditorDomNode()\nso that subclasses can override updateEditor() and still use updateEditorDomNode()\n*/\nEditTextWidget.prototype.updateEditor = function(text) {\n\tthis.updateEditorDomNode(text);\n};\n\n/*\nUpdate the editor dom node with new text\n*/\nEditTextWidget.prototype.updateEditorDomNode = function(text) {\n\t// Replace the edit value if the tiddler we're editing has changed\n\tvar domNode = this.domNodes[0];\n\tif(!domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.document.activeElement !== domNode) {\n\t\t\tdomNode.value = text;\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nFix the height of textareas to fit their content\n*/\nEditTextWidget.prototype.fixHeight = function() {\n\tvar self = this,\n\t\tdomNode = this.domNodes[0];\n\tif(this.editAutoHeight && domNode && !domNode.isTiddlyWikiFakeDom && this.editTag === \"textarea\") {\n\t\t// Resize the textarea to fit its content, preserving scroll position\n\t\tvar scrollPosition = $tw.utils.getScrollPosition(),\n\t\t\tscrollTop = scrollPosition.y;\n\t\t// Measure the specified minimum height\n\t\tdomNode.style.height = self.editMinHeight;\n\t\tvar minHeight = domNode.offsetHeight;\n\t\t// Set its height to auto so that it snaps to the correct height\n\t\tdomNode.style.height = \"auto\";\n\t\t// Calculate the revised height\n\t\tvar newHeight = Math.max(domNode.scrollHeight + domNode.offsetHeight - domNode.clientHeight,minHeight);\n\t\t// Only try to change the height if it has changed\n\t\tif(newHeight !== domNode.offsetHeight) {\n\t\t\tdomNode.style.height = newHeight + \"px\";\n\t\t\t// Make sure that the dimensions of the textarea are recalculated\n\t\t\t$tw.utils.forceLayout(domNode);\n\t\t\t// Check that the scroll position is still visible before trying to scroll back to it\n\t\t\tscrollTop = Math.min(scrollTop,self.document.body.scrollHeight - window.innerHeight);\n\t\t\twindow.scrollTo(scrollPosition.x,scrollTop);\n\t\t}\n\t}\n};\n\n/*\nHandle a dom \"input\" event\n*/\nEditTextWidget.prototype.handleInputEvent = function(event) {\n\tthis.saveChanges(this.domNodes[0].value);\n\tthis.fixHeight();\n\treturn true;\n};\n\nEditTextWidget.prototype.handleFocusEvent = function(event) {\n\tif(this.editFocusPopup) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNodes[0],\n\t\t\ttitle: this.editFocusPopup,\n\t\t\twiki: this.wiki,\n\t\t\tforce: true\n\t\t});\n\t}\n\treturn true;\n};\n\nEditTextWidget.prototype.saveChanges = function(text) {\n\tvar editInfo = this.getEditInfo();\n\tif(text !== editInfo.value) {\n\t\teditInfo.update(text);\n\t}\n};\n\nexports[\"edit-text\"] = EditTextWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/edit-text.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/edit.js\ntype: application/javascript\nmodule-type: widget\n\nEdit widget is a meta-widget chooses the appropriate actual editting widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n// Mappings from content type to editor type are stored in tiddlers with this prefix\nvar EDITOR_MAPPING_PREFIX = \"$:/config/EditorTypeMappings/\";\n\n/*\nCompute the internal state of the widget\n*/\nEditWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.editField = this.getAttribute(\"field\",\"text\");\n\tthis.editIndex = this.getAttribute(\"index\");\n\tthis.editClass = this.getAttribute(\"class\");\n\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\t// Choose the appropriate edit widget\n\tthis.editorType = this.getEditorType();\n\t// Make the child widgets\n\tthis.makeChildWidgets([{\n\t\ttype: \"edit-\" + this.editorType,\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: this.editTitle},\n\t\t\tfield: {type: \"string\", value: this.editField},\n\t\t\tindex: {type: \"string\", value: this.editIndex},\n\t\t\t\"class\": {type: \"string\", value: this.editClass},\n\t\t\t\"placeholder\": {type: \"string\", value: this.editPlaceholder}\n\t\t}\n\t}]);\n};\n\nEditWidget.prototype.getEditorType = function() {\n\t// Get the content type of the thing we're editing\n\tvar type;\n\tif(this.editField === \"text\") {\n\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\tif(tiddler) {\n\t\t\ttype = tiddler.fields.type;\n\t\t}\n\t}\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar editorType = this.wiki.getTiddlerText(EDITOR_MAPPING_PREFIX + type);\n\tif(!editorType) {\n\t\tvar typeInfo = $tw.config.contentTypeInfo[type];\n\t\tif(typeInfo && typeInfo.encoding === \"base64\") {\n\t\t\teditorType = \"binary\";\n\t\t} else {\n\t\t\teditorType = \"text\";\n\t\t}\n\t}\n\treturn editorType;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEditWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh if an attribute has changed, or the type associated with the target tiddler has changed\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || (changedTiddlers[this.editTitle] && this.getEditorType() !== this.editorType)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.edit = EditWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/edit.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/element.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/element.js\ntype: application/javascript\nmodule-type: widget\n\nElement widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ElementWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nElementWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nElementWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Neuter blacklisted elements\n\tvar tag = this.parseTreeNode.tag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"safe-\" + tag;\n\t}\n\tvar domNode = this.document.createElementNS(this.namespace,tag);\n\tthis.assignAttributes(domNode,{excludeEventAttributes: true});\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nElementWidget.prototype.execute = function() {\n\t// Select the namespace for the tag\n\tvar tagNamespaces = {\n\t\t\tsvg: \"http://www.w3.org/2000/svg\",\n\t\t\tmath: \"http://www.w3.org/1998/Math/MathML\",\n\t\t\tbody: \"http://www.w3.org/1999/xhtml\"\n\t\t};\n\tthis.namespace = tagNamespaces[this.parseTreeNode.tag];\n\tif(this.namespace) {\n\t\tthis.setVariable(\"namespace\",this.namespace);\n\t} else {\n\t\tthis.namespace = this.getVariable(\"namespace\",{defaultValue: \"http://www.w3.org/1999/xhtml\"});\n\t}\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nElementWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\thasChangedAttributes = $tw.utils.count(changedAttributes) > 0;\n\tif(hasChangedAttributes) {\n\t\t// Update our attributes\n\t\tthis.assignAttributes(this.domNodes[0],{excludeEventAttributes: true});\n\t}\n\treturn this.refreshChildren(changedTiddlers) || hasChangedAttributes;\n};\n\nexports.element = ElementWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/element.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/encrypt.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/encrypt.js\ntype: application/javascript\nmodule-type: widget\n\nEncrypt widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EncryptWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEncryptWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEncryptWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.encryptedText);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEncryptWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\",\"[!is[system]]\");\n\t// Encrypt the filtered tiddlers\n\tvar tiddlers = this.wiki.filterTiddlers(this.filter),\n\t\tjson = {},\n\t\tself = this;\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title),\n\t\t\tjsonTiddler = {};\n\t\tfor(var f in tiddler.fields) {\n\t\t\tjsonTiddler[f] = tiddler.getFieldString(f);\n\t\t}\n\t\tjson[title] = jsonTiddler;\n\t});\n\tthis.encryptedText = $tw.utils.htmlEncode($tw.crypto.encrypt(JSON.stringify(json)));\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEncryptWidget.prototype.refresh = function(changedTiddlers) {\n\t// We don't need to worry about refreshing because the encrypt widget isn't for interactive use\n\treturn false;\n};\n\nexports.encrypt = EncryptWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/encrypt.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/entity.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/entity.js\ntype: application/javascript\nmodule-type: widget\n\nHTML entity widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EntityWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEntityWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEntityWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar textNode = this.document.createTextNode($tw.utils.entityDecode(this.parseTreeNode.entity));\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEntityWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEntityWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.entity = EntityWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/entity.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/fieldmangler.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/fieldmangler.js\ntype: application/javascript\nmodule-type: widget\n\nField mangler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldManglerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-remove-field\", handler: \"handleRemoveFieldEvent\"},\n\t\t{type: \"tm-add-field\", handler: \"handleAddFieldEvent\"},\n\t\t{type: \"tm-remove-tag\", handler: \"handleRemoveTagEvent\"},\n\t\t{type: \"tm-add-tag\", handler: \"handleAddTagEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldManglerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldManglerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldManglerWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.mangleTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldManglerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nFieldManglerWidget.prototype.handleRemoveFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tdeletion = {};\n\tdeletion[event.param] = undefined;\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,deletion));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\taddition = this.wiki.getModificationFields(),\n\t\thadInvalidFieldName = false,\n\t\taddField = function(name,value) {\n\t\t\tvar trimmedName = name.toLowerCase().trim();\n\t\t\tif(!$tw.utils.isValidFieldName(trimmedName)) {\n\t\t\t\tif(!hadInvalidFieldName) {\n\t\t\t\t\talert($tw.language.getString(\n\t\t\t\t\t\t\"InvalidFieldName\",\n\t\t\t\t\t\t{variables:\n\t\t\t\t\t\t\t{fieldName: trimmedName}\n\t\t\t\t\t\t}\n\t\t\t\t\t));\n\t\t\t\t\thadInvalidFieldName = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif(!value && tiddler) {\n\t\t\t\t\tvalue = tiddler.fields[trimmedName];\n\t\t\t\t}\n\t\t\t\taddition[trimmedName] = value || \"\";\n\t\t\t}\n\t\t\treturn;\n\t\t};\n\taddition.title = this.mangleTitle;\n\tif(typeof event.param === \"string\") {\n\t\taddField(event.param,\"\");\n\t}\n\tif(typeof event.paramObject === \"object\") {\n\t\tfor(var name in event.paramObject) {\n\t\t\taddField(name,event.paramObject[name]);\n\t\t}\n\t}\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,addition));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleRemoveTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle);\n\tif(tiddler && tiddler.fields.tags) {\n\t\tvar p = tiddler.fields.tags.indexOf(event.param);\n\t\tif(p !== -1) {\n\t\t\tvar modification = this.wiki.getModificationFields();\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\tmodification.tags.splice(p,1);\n\t\t\tif(modification.tags.length === 0) {\n\t\t\t\tmodification.tags = undefined;\n\t\t\t}\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\n\t\t}\n\t}\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle);\n\tif(tiddler && typeof event.param === \"string\") {\n\t\tvar tag = event.param.trim();\n\t\tif(tag !== \"\") {\n\t\t\tvar modification = this.wiki.getModificationFields();\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\t$tw.utils.pushTop(modification.tags,tag);\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\t\t\t\n\t\t}\n\t}\n\treturn true;\n};\n\nexports.fieldmangler = FieldManglerWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/fieldmangler.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/fields.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/fields.js\ntype: application/javascript\nmodule-type: widget\n\nFields widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldsWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldsWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldsWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.template = this.getAttribute(\"template\");\n\tthis.exclude = this.getAttribute(\"exclude\");\n\tthis.stripTitlePrefix = this.getAttribute(\"stripTitlePrefix\",\"no\") === \"yes\";\n\t// Get the value to display\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\t// Get the exclusion list\n\tvar exclude;\n\tif(this.exclude) {\n\t\texclude = this.exclude.split(\" \");\n\t} else {\n\t\texclude = [\"text\"]; \n\t}\n\t// Compose the template\n\tvar text = [];\n\tif(this.template && tiddler) {\n\t\tvar fields = [];\n\t\tfor(var fieldName in tiddler.fields) {\n\t\t\tif(exclude.indexOf(fieldName) === -1) {\n\t\t\t\tfields.push(fieldName);\n\t\t\t}\n\t\t}\n\t\tfields.sort();\n\t\tfor(var f=0; f<fields.length; f++) {\n\t\t\tfieldName = fields[f];\n\t\t\tif(exclude.indexOf(fieldName) === -1) {\n\t\t\t\tvar row = this.template,\n\t\t\t\t\tvalue = tiddler.getFieldString(fieldName);\n\t\t\t\tif(this.stripTitlePrefix && fieldName === \"title\") {\n\t\t\t\t\tvar reStrip = /^\\{[^\\}]+\\}(.+)/mg,\n\t\t\t\t\t\treMatch = reStrip.exec(value);\n\t\t\t\t\tif(reMatch) {\n\t\t\t\t\t\tvalue = reMatch[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\trow = row.replace(\"$name$\",fieldName);\n\t\t\t\trow = row.replace(\"$value$\",value);\n\t\t\t\trow = row.replace(\"$encoded_value$\",$tw.utils.htmlEncode(value));\n\t\t\t\ttext.push(row);\n\t\t\t}\n\t\t}\n\t}\n\tthis.text = text.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.template || changedAttributes.exclude || changedAttributes.stripTitlePrefix || changedTiddlers[this.tiddlerTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.fields = FieldsWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/fields.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/image.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/image.js\ntype: application/javascript\nmodule-type: widget\n\nThe image widget displays an image referenced with an external URI or with a local tiddler title.\n\n```\n<$image src=\"TiddlerTitle\" width=\"320\" height=\"400\" class=\"classnames\">\n```\n\nThe image source can be the title of an existing tiddler or the URL of an external image.\n\nExternal images always generate an HTML `<img>` tag.\n\nTiddlers that have a _canonical_uri field generate an HTML `<img>` tag with the src attribute containing the URI.\n\nTiddlers that contain image data generate an HTML `<img>` tag with the src attribute containing a base64 representation of the image.\n\nTiddlers that contain wikitext could be rendered to a DIV of the usual size of a tiddler, and then transformed to the size requested.\n\nThe width and height attributes are interpreted as a number of pixels, and do not need to include the \"px\" suffix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\t// Determine what type of image it is\n\tvar tag = \"img\", src = \"\",\n\t\ttiddler = this.wiki.getTiddler(this.imageSource);\n\tif(!tiddler) {\n\t\t// The source isn't the title of a tiddler, so we'll assume it's a URL\n\t\tsrc = this.imageSource;\n\t} else {\n\t\t// Check if it is an image tiddler\n\t\tif(this.wiki.isImageTiddler(this.imageSource)) {\n\t\t\tvar type = tiddler.fields.type,\n\t\t\t\ttext = tiddler.fields.text,\n\t\t\t\t_canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t// If the tiddler has body text then it doesn't need to be lazily loaded\n\t\t\tif(text) {\n\t\t\t\t// Render the appropriate element for the image type\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = \"data:application/pdf;base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = \"data:image/svg+xml,\" + encodeURIComponent(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = \"data:\" + type + \";base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if(_canonical_uri) {\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\t\n\t\t\t}\n\t\t}\n\t}\n\t// Create the element and assign the attributes\n\tvar domNode = this.document.createElement(tag);\n\tdomNode.setAttribute(\"src\",src);\n\tif(this.imageClass) {\n\t\tdomNode.setAttribute(\"class\",this.imageClass);\t\t\n\t}\n\tif(this.imageWidth) {\n\t\tdomNode.setAttribute(\"width\",this.imageWidth);\n\t}\n\tif(this.imageHeight) {\n\t\tdomNode.setAttribute(\"height\",this.imageHeight);\n\t}\n\tif(this.imageTooltip) {\n\t\tdomNode.setAttribute(\"title\",this.imageTooltip);\t\t\n\t}\n\tif(this.imageAlt) {\n\t\tdomNode.setAttribute(\"alt\",this.imageAlt);\t\t\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImageWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.imageSource = this.getAttribute(\"source\");\n\tthis.imageWidth = this.getAttribute(\"width\");\n\tthis.imageHeight = this.getAttribute(\"height\");\n\tthis.imageClass = this.getAttribute(\"class\");\n\tthis.imageTooltip = this.getAttribute(\"tooltip\");\n\tthis.imageAlt = this.getAttribute(\"alt\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.source || changedAttributes.width || changedAttributes.height || changedAttributes[\"class\"] || changedAttributes.tooltip || changedTiddlers[this.imageSource]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\t\n\t}\n};\n\nexports.image = ImageWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/image.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/importvariables.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/importvariables.js\ntype: application/javascript\nmodule-type: widget\n\nImport variable definitions from other tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImportVariablesWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImportVariablesWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImportVariablesWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImportVariablesWidget.prototype.execute = function(tiddlerList) {\n\tvar self = this;\n\t// Get our parameters\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Compute the filter\n\tthis.tiddlerList = tiddlerList || this.wiki.filterTiddlers(this.filter,this);\n\t// Accumulate the <$set> widgets from each tiddler\n\tvar widgetStackStart,widgetStackEnd;\n\tfunction addWidgetNode(widgetNode) {\n\t\tif(widgetNode) {\n\t\t\tif(!widgetStackStart && !widgetStackEnd) {\n\t\t\t\twidgetStackStart = widgetNode;\n\t\t\t\twidgetStackEnd = widgetNode;\n\t\t\t} else {\n\t\t\t\twidgetStackEnd.children = [widgetNode];\n\t\t\t\twidgetStackEnd = widgetNode;\n\t\t\t}\n\t\t}\n\t}\n\t$tw.utils.each(this.tiddlerList,function(title) {\n\t\tvar parser = self.wiki.parseTiddler(title);\n\t\tif(parser) {\n\t\t\tvar parseTreeNode = parser.tree[0];\n\t\t\twhile(parseTreeNode && parseTreeNode.type === \"set\") {\n\t\t\t\taddWidgetNode({\n\t\t\t\t\ttype: \"set\",\n\t\t\t\t\tattributes: parseTreeNode.attributes,\n\t\t\t\t\tparams: parseTreeNode.params\n\t\t\t\t});\n\t\t\t\tparseTreeNode = parseTreeNode.children[0];\n\t\t\t}\n\t\t} \n\t});\n\t// Add our own children to the end of the pile\n\tvar parseTreeNodes;\n\tif(widgetStackStart && widgetStackEnd) {\n\t\tparseTreeNodes = [widgetStackStart];\n\t\twidgetStackEnd.children = this.parseTreeNode.children;\n\t} else {\n\t\tparseTreeNodes = this.parseTreeNode.children;\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImportVariablesWidget.prototype.refresh = function(changedTiddlers) {\n\t// Recompute our attributes and the filter list\n\tvar changedAttributes = this.computeAttributes(),\n\t\ttiddlerList = this.wiki.filterTiddlers(this.getAttribute(\"filter\"),this);\n\t// Refresh if the filter has changed, or the list of tiddlers has changed, or any of the tiddlers in the list has changed\n\tfunction haveListedTiddlersChanged() {\n\t\tvar changed = false;\n\t\ttiddlerList.forEach(function(title) {\n\t\t\tif(changedTiddlers[title]) {\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t});\n\t\treturn changed;\n\t}\n\tif(changedAttributes.filter || !$tw.utils.isArrayEqual(this.tiddlerList,tiddlerList) || haveListedTiddlersChanged()) {\n\t\t// Compute the filter\n\t\tthis.removeChildDomNodes();\n\t\tthis.execute(tiddlerList);\n\t\tthis.renderChildren(this.parentDomNode,this.findNextSiblingDomNode());\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.importvariables = ImportVariablesWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/importvariables.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/keyboard.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/keyboard.js\ntype: application/javascript\nmodule-type: widget\n\nKeyboard shortcut widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar KeyboardWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nKeyboardWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nKeyboardWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"div\");\n\t// Assign classes\n\tvar classes = (this[\"class\"] || \"\").split(\" \");\n\tclasses.push(\"tc-keyboard\");\n\tdomNode.className = classes.join(\" \");\n\t// Add a keyboard event handler\n\tdomNode.addEventListener(\"keydown\",function (event) {\n\t\tif($tw.utils.checkKeyDescriptor(event,self.keyInfo)) {\n\t\t\tself.dispatchMessage(event);\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nKeyboardWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\")});\n};\n\n/*\nCompute the internal state of the widget\n*/\nKeyboardWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.key = this.getAttribute(\"key\");\n\tthis.keyInfo = $tw.utils.parseKeyDescriptor(this.key);\n\tthis[\"class\"] = this.getAttribute(\"class\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nKeyboardWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.message || changedAttributes.param || changedAttributes.key || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.keyboard = KeyboardWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/keyboard.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/link.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/link.js\ntype: application/javascript\nmodule-type: widget\n\nLink widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the value of the tv-wikilinks configuration macro\n\tvar wikiLinksMacro = this.getVariable(\"tv-wikilinks\"),\n\t\tuseWikiLinks = wikiLinksMacro ? (wikiLinksMacro.trim() !== \"no\") : true;\n\t// Render the link if required\n\tif(useWikiLinks) {\n\t\tthis.renderLink(parent,nextSibling);\n\t} else {\n\t\t// Just insert the link text\n\t\tvar domNode = this.document.createElement(\"span\");\n\t\tparent.insertBefore(domNode,nextSibling);\n\t\tthis.renderChildren(domNode,null);\n\t\tthis.domNodes.push(domNode);\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.renderLink = function(parent,nextSibling) {\n\tvar self = this;\n\t// Create our element\n\tvar domNode = this.document.createElement(\"a\");\n\t// Assign classes\n\tvar classes = [];\n\tif(this.linkClasses) {\n\t\tclasses.push(this.linkClasses);\n\t}\n\tclasses.push(\"tc-tiddlylink\");\n\tif(this.isShadow) {\n\t\tclasses.push(\"tc-tiddlylink-shadow\");\n\t}\n\tif(this.isMissing && !this.isShadow) {\n\t\tclasses.push(\"tc-tiddlylink-missing\");\n\t} else {\n\t\tif(!this.isMissing) {\n\t\t\tclasses.push(\"tc-tiddlylink-resolves\");\n\t\t}\n\t}\n\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t// Set an href\n\tvar wikiLinkTemplateMacro = this.getVariable(\"tv-wikilink-template\"),\n\t\twikiLinkTemplate = wikiLinkTemplateMacro ? wikiLinkTemplateMacro.trim() : \"#$uri_encoded$\",\n\t\twikiLinkText = wikiLinkTemplate.replace(\"$uri_encoded$\",encodeURIComponent(this.to));\n\twikiLinkText = wikiLinkText.replace(\"$uri_doubleencoded$\",encodeURIComponent(encodeURIComponent(this.to)));\n\tdomNode.setAttribute(\"href\",wikiLinkText);\n\t// Set the tooltip\n\t// HACK: Performance issues with re-parsing the tooltip prevent us defaulting the tooltip to \"<$transclude field='tooltip'><$transclude field='title'/></$transclude>\"\n\tvar tooltipWikiText = this.tooltip || this.getVariable(\"tv-wikilink-tooltip\");\n\tif(tooltipWikiText) {\n\t\tvar tooltipText = this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",tooltipWikiText,{\n\t\t\t\tparseAsInline: true,\n\t\t\t\tvariables: {\n\t\t\t\t\tcurrentTiddler: this.to\n\t\t\t\t},\n\t\t\t\tparentWidget: this\n\t\t\t});\n\t\tdomNode.setAttribute(\"title\",tooltipText);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"click\", handlerObject: this, handlerMethod: \"handleClickEvent\"},\n\t\t{name: \"dragstart\", handlerObject: this, handlerMethod: \"handleDragStartEvent\"},\n\t\t{name: \"dragend\", handlerObject: this, handlerMethod: \"handleDragEndEvent\"}\n\t]);\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nLinkWidget.prototype.handleClickEvent = function (event) {\n\t// Send the click on it's way as a navigate event\n\tvar bounds = this.domNodes[0].getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1)\n\t});\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nLinkWidget.prototype.handleDragStartEvent = function(event) {\n\tif(event.target === this.domNodes[0]) {\n\t\tif(this.to) {\n\t\t\t// Set the dragging class on the element being dragged\n\t\t\t$tw.utils.addClass(event.target,\"tc-tiddlylink-dragging\");\n\t\t\t// Create the drag image elements\n\t\t\tthis.dragImage = this.document.createElement(\"div\");\n\t\t\tthis.dragImage.className = \"tc-tiddler-dragger\";\n\t\t\tvar inner = this.document.createElement(\"div\");\n\t\t\tinner.className = \"tc-tiddler-dragger-inner\";\n\t\t\tinner.appendChild(this.document.createTextNode(this.to));\n\t\t\tthis.dragImage.appendChild(inner);\n\t\t\tthis.document.body.appendChild(this.dragImage);\n\t\t\t// Astoundingly, we need to cover the dragger up: http://www.kryogenix.org/code/browser/custom-drag-image.html\n\t\t\tvar cover = this.document.createElement(\"div\");\n\t\t\tcover.className = \"tc-tiddler-dragger-cover\";\n\t\t\tcover.style.left = (inner.offsetLeft - 16) + \"px\";\n\t\t\tcover.style.top = (inner.offsetTop - 16) + \"px\";\n\t\t\tcover.style.width = (inner.offsetWidth + 32) + \"px\";\n\t\t\tcover.style.height = (inner.offsetHeight + 32) + \"px\";\n\t\t\tthis.dragImage.appendChild(cover);\n\t\t\t// Set the data transfer properties\n\t\t\tvar dataTransfer = event.dataTransfer;\n\t\t\t// First the image\n\t\t\tdataTransfer.effectAllowed = \"copy\";\n\t\t\tif(dataTransfer.setDragImage) {\n\t\t\t\tdataTransfer.setDragImage(this.dragImage.firstChild,-16,-16);\n\t\t\t}\n\t\t\t// Then the data\n\t\t\tdataTransfer.clearData();\n\t\t\tvar jsonData = this.wiki.getTiddlerAsJson(this.to),\n\t\t\t\ttextData = this.wiki.getTiddlerText(this.to,\"\"),\n\t\t\t\ttitle = (new RegExp(\"^\" + $tw.config.textPrimitives.wikiLink + \"$\",\"mg\")).exec(this.to) ? this.to : \"[[\" + this.to + \"]]\";\n\t\t\t// IE doesn't like these content types\n\t\t\tif(!$tw.browser.isIE) {\n\t\t\t\tdataTransfer.setData(\"text/vnd.tiddler\",jsonData);\n\t\t\t\tdataTransfer.setData(\"text/plain\",title);\n\t\t\t\tdataTransfer.setData(\"text/x-moz-url\",\"data:text/vnd.tiddler,\" + encodeURI(jsonData));\n\t\t\t}\n\t\t\tdataTransfer.setData(\"URL\",\"data:text/vnd.tiddler,\" + encodeURI(jsonData));\n\t\t\tdataTransfer.setData(\"Text\",title);\n\t\t\tevent.stopPropagation();\n\t\t} else {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\nLinkWidget.prototype.handleDragEndEvent = function(event) {\n\tif(event.target === this.domNodes[0]) {\n\t\t// Remove the dragging class on the element being dragged\n\t\t$tw.utils.removeClass(event.target,\"tc-tiddlylink-dragging\");\n\t\t// Delete the drag image element\n\t\tif(this.dragImage) {\n\t\t\tthis.dragImage.parentNode.removeChild(this.dragImage);\n\t\t}\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkWidget.prototype.execute = function() {\n\t// Get the target tiddler title\n\tthis.to = this.getAttribute(\"to\",this.getVariable(\"currentTiddler\"));\n\t// Get the link title and aria label\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\t// Get the link classes\n\tthis.linkClasses = this.getAttribute(\"class\");\n\t// Determine the link characteristics\n\tthis.isMissing = !this.wiki.tiddlerExists(this.to);\n\tthis.isShadow = this.wiki.isShadowTiddler(this.to);\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedTiddlers[this.to] || changedAttributes[\"aria-label\"] || changedAttributes.tooltip) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.link = LinkWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/link.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/linkcatcher.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/linkcatcher.js\ntype: application/javascript\nmodule-type: widget\n\nLinkcatcher widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkCatcherWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkCatcherWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkCatcherWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkCatcherWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.catchTo = this.getAttribute(\"to\");\n\tthis.catchMessage = this.getAttribute(\"message\");\n\tthis.catchSet = this.getAttribute(\"set\");\n\tthis.catchSetTo = this.getAttribute(\"setTo\");\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkCatcherWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedAttributes.message || changedAttributes.set || changedAttributes.setTo) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\n/*\nHandle a tm-navigate event\n*/\nLinkCatcherWidget.prototype.handleNavigateEvent = function(event) {\n\tif(this.catchTo) {\n\t\tthis.wiki.setTextReference(this.catchTo,event.navigateTo,this.getVariable(\"currentTiddler\"));\n\t}\n\tif(this.catchMessage && this.parentWidget) {\n\t\tthis.parentWidget.dispatchEvent({\n\t\t\ttype: this.catchMessage,\n\t\t\tparam: event.navigateTo,\n\t\t\tnavigateTo: event.navigateTo\n\t\t});\n\t}\n\tif(this.catchSet) {\n\t\tvar tiddler = this.wiki.getTiddler(this.catchSet);\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: this.catchSet, text: this.catchSetTo}));\n\t}\n\treturn false;\n};\n\nexports.linkcatcher = LinkCatcherWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/linkcatcher.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/list.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/list.js\ntype: application/javascript\nmodule-type: widget\n\nList and list item widgets\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\n/*\nThe list widget creates list element sub-widgets that reach back into the list widget for their configuration\n*/\n\nvar ListWidget = function(parseTreeNode,options) {\n\t// Initialise the storyviews if they've not been done already\n\tif(!this.storyViews) {\n\t\tListWidget.prototype.storyViews = {};\n\t\t$tw.modules.applyMethods(\"storyview\",this.storyViews);\n\t}\n\t// Main initialisation inherited from widget.js\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\t// Construct the storyview\n\tvar StoryView = this.storyViews[this.storyViewName];\n\tif(StoryView && !this.document.isTiddlyWikiFakeDom) {\n\t\tthis.storyview = new StoryView(this);\n\t} else {\n\t\tthis.storyview = null;\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nListWidget.prototype.execute = function() {\n\t// Get our attributes\n\tthis.template = this.getAttribute(\"template\");\n\tthis.editTemplate = this.getAttribute(\"editTemplate\");\n\tthis.variableName = this.getAttribute(\"variable\",\"currentTiddler\");\n\tthis.storyViewName = this.getAttribute(\"storyview\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\t// Compose the list elements\n\tthis.list = this.getTiddlerList();\n\tvar members = [],\n\t\tself = this;\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\tmembers = this.getEmptyMessage();\n\t} else {\n\t\t$tw.utils.each(this.list,function(title,index) {\n\t\t\tmembers.push(self.makeItemTemplate(title));\n\t\t});\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(members);\n\t// Clear the last history\n\tthis.history = [];\n};\n\nListWidget.prototype.getTiddlerList = function() {\n\tvar defaultFilter = \"[!is[system]sort[title]]\";\n\treturn this.wiki.filterTiddlers(this.getAttribute(\"filter\",defaultFilter),this);\n};\n\nListWidget.prototype.getEmptyMessage = function() {\n\tvar emptyMessage = this.getAttribute(\"emptyMessage\",\"\"),\n\t\tparser = this.wiki.parseText(\"text/vnd.tiddlywiki\",emptyMessage,{parseAsInline: true});\n\tif(parser) {\n\t\treturn parser.tree;\n\t} else {\n\t\treturn [];\n\t}\n};\n\n/*\nCompose the template for a list item\n*/\nListWidget.prototype.makeItemTemplate = function(title) {\n\t// Check if the tiddler is a draft\n\tvar tiddler = this.wiki.getTiddler(title),\n\t\tisDraft = tiddler && tiddler.hasField(\"draft.of\"),\n\t\ttemplate = this.template,\n\t\ttemplateTree;\n\tif(isDraft && this.editTemplate) {\n\t\ttemplate = this.editTemplate;\n\t}\n\t// Compose the transclusion of the template\n\tif(template) {\n\t\ttemplateTree = [{type: \"transclude\", attributes: {tiddler: {type: \"string\", value: template}}}];\n\t} else {\n\t\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\t\ttemplateTree = this.parseTreeNode.children;\n\t\t} else {\n\t\t\t// Default template is a link to the title\n\t\t\ttemplateTree = [{type: \"element\", tag: this.parseTreeNode.isBlock ? \"div\" : \"span\", children: [{type: \"link\", attributes: {to: {type: \"string\", value: title}}, children: [\n\t\t\t\t\t{type: \"text\", text: title}\n\t\t\t]}]}];\n\t\t}\n\t}\n\t// Return the list item\n\treturn {type: \"listitem\", itemTitle: title, variableName: this.variableName, children: templateTree};\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Completely refresh if any of our attributes have changed\n\tif(changedAttributes.filter || changedAttributes.template || changedAttributes.editTemplate || changedAttributes.emptyMessage || changedAttributes.storyview || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\t// Handle any changes to the list\n\t\tvar hasChanged = this.handleListChanges(changedTiddlers);\n\t\t// Handle any changes to the history stack\n\t\tif(this.historyTitle && changedTiddlers[this.historyTitle]) {\n\t\t\tthis.handleHistoryChanges();\n\t\t}\n\t\treturn hasChanged;\n\t}\n};\n\n/*\nHandle any changes to the history list\n*/\nListWidget.prototype.handleHistoryChanges = function() {\n\t// Get the history data\n\tvar newHistory = this.wiki.getTiddlerData(this.historyTitle,[]);\n\t// Ignore any entries of the history that match the previous history\n\tvar entry = 0;\n\twhile(entry < newHistory.length && entry < this.history.length && newHistory[entry].title === this.history[entry].title) {\n\t\tentry++;\n\t}\n\t// Navigate forwards to each of the new tiddlers\n\twhile(entry < newHistory.length) {\n\t\tif(this.storyview && this.storyview.navigateTo) {\n\t\t\tthis.storyview.navigateTo(newHistory[entry]);\n\t\t}\n\t\tentry++;\n\t}\n\t// Update the history\n\tthis.history = newHistory;\n};\n\n/*\nProcess any changes to the list\n*/\nListWidget.prototype.handleListChanges = function(changedTiddlers) {\n\t// Get the new list\n\tvar prevList = this.list;\n\tthis.list = this.getTiddlerList();\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\t// Check if it was empty before\n\t\tif(prevList.length === 0) {\n\t\t\t// If so, just refresh the empty message\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\t// Replace the previous content with the empty message\n\t\t\tfor(t=this.children.length-1; t>=0; t--) {\n\t\t\t\tthis.removeListItem(t);\n\t\t\t}\n\t\t\tvar nextSibling = this.findNextSiblingDomNode();\n\t\t\tthis.makeChildWidgets(this.getEmptyMessage());\n\t\t\tthis.renderChildren(this.parentDomNode,nextSibling);\n\t\t\treturn true;\n\t\t}\n\t} else {\n\t\t// If the list was empty then we need to remove the empty message\n\t\tif(prevList.length === 0) {\n\t\t\tthis.removeChildDomNodes();\n\t\t\tthis.children = [];\n\t\t}\n\t\t// Cycle through the list, inserting and removing list items as needed\n\t\tvar hasRefreshed = false;\n\t\tfor(var t=0; t<this.list.length; t++) {\n\t\t\tvar index = this.findListItem(t,this.list[t]);\n\t\t\tif(index === undefined) {\n\t\t\t\t// The list item must be inserted\n\t\t\t\tthis.insertListItem(t,this.list[t]);\n\t\t\t\thasRefreshed = true;\n\t\t\t} else {\n\t\t\t\t// There are intervening list items that must be removed\n\t\t\t\tfor(var n=index-1; n>=t; n--) {\n\t\t\t\t\tthis.removeListItem(n);\n\t\t\t\t\thasRefreshed = true;\n\t\t\t\t}\n\t\t\t\t// Refresh the item we're reusing\n\t\t\t\tvar refreshed = this.children[t].refresh(changedTiddlers);\n\t\t\t\thasRefreshed = hasRefreshed || refreshed;\n\t\t\t}\n\t\t}\n\t\t// Remove any left over items\n\t\tfor(t=this.children.length-1; t>=this.list.length; t--) {\n\t\t\tthis.removeListItem(t);\n\t\t\thasRefreshed = true;\n\t\t}\n\t\treturn hasRefreshed;\n\t}\n};\n\n/*\nFind the list item with a given title, starting from a specified position\n*/\nListWidget.prototype.findListItem = function(startIndex,title) {\n\twhile(startIndex < this.children.length) {\n\t\tif(this.children[startIndex].parseTreeNode.itemTitle === title) {\n\t\t\treturn startIndex;\n\t\t}\n\t\tstartIndex++;\n\t}\n\treturn undefined;\n};\n\n/*\nInsert a new list item at the specified index\n*/\nListWidget.prototype.insertListItem = function(index,title) {\n\t// Create, insert and render the new child widgets\n\tvar widget = this.makeChildWidget(this.makeItemTemplate(title));\n\twidget.parentDomNode = this.parentDomNode; // Hack to enable findNextSiblingDomNode() to work\n\tthis.children.splice(index,0,widget);\n\tvar nextSibling = widget.findNextSiblingDomNode();\n\twidget.render(this.parentDomNode,nextSibling);\n\t// Animate the insertion if required\n\tif(this.storyview && this.storyview.insert) {\n\t\tthis.storyview.insert(widget);\n\t}\n\treturn true;\n};\n\n/*\nRemove the specified list item\n*/\nListWidget.prototype.removeListItem = function(index) {\n\tvar widget = this.children[index];\n\t// Animate the removal if required\n\tif(this.storyview && this.storyview.remove) {\n\t\tthis.storyview.remove(widget);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n\t// Remove the child widget\n\tthis.children.splice(index,1);\n};\n\nexports.list = ListWidget;\n\nvar ListItemWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListItemWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListItemWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nListItemWidget.prototype.execute = function() {\n\t// Set the current list item title\n\tthis.setVariable(this.parseTreeNode.variableName,this.parseTreeNode.itemTitle);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListItemWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.listitem = ListItemWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/list.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/macrocall.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/macrocall.js\ntype: application/javascript\nmodule-type: widget\n\nMacrocall widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar MacroCallWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nMacroCallWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nMacroCallWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nMacroCallWidget.prototype.execute = function() {\n\t// Get the parse type if specified\n\tthis.parseType = this.getAttribute(\"$type\",\"text/vnd.tiddlywiki\");\n\tthis.renderOutput = this.getAttribute(\"$output\",\"text/html\");\n\t// Merge together the parameters specified in the parse tree with the specified attributes\n\tvar params = this.parseTreeNode.params ? this.parseTreeNode.params.slice(0) : [];\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparams.push({name: name, value: attribute});\t\t\t\n\t\t}\n\t});\n\t// Get the macro value\n\tvar text = this.getVariable(this.parseTreeNode.name || this.getAttribute(\"$name\"),{params: params}),\n\t\tparseTreeNodes;\n\t// Are we rendering to HTML?\n\tif(this.renderOutput === \"text/html\") {\n\t\t// If so we'll return the parsed macro\n\t\tvar parser = this.wiki.parseText(this.parseType,text,\n\t\t\t\t\t\t\t{parseAsInline: !this.parseTreeNode.isBlock});\n\t\tparseTreeNodes = parser ? parser.tree : [];\n\t} else {\n\t\t// Otherwise, we'll render the text\n\t\tvar plainText = this.wiki.renderText(\"text/plain\",this.parseType,text,{parentWidget: this});\n\t\tparseTreeNodes = [{type: \"text\", text: plainText}];\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nMacroCallWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\t// Rerender ourselves\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.macrocall = MacroCallWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/macrocall.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/navigator.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/navigator.js\ntype: application/javascript\nmodule-type: widget\n\nNavigator widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar IMPORT_TITLE = \"$:/Import\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigatorWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"},\n\t\t{type: \"tm-edit-tiddler\", handler: \"handleEditTiddlerEvent\"},\n\t\t{type: \"tm-delete-tiddler\", handler: \"handleDeleteTiddlerEvent\"},\n\t\t{type: \"tm-save-tiddler\", handler: \"handleSaveTiddlerEvent\"},\n\t\t{type: \"tm-cancel-tiddler\", handler: \"handleCancelTiddlerEvent\"},\n\t\t{type: \"tm-close-tiddler\", handler: \"handleCloseTiddlerEvent\"},\n\t\t{type: \"tm-close-all-tiddlers\", handler: \"handleCloseAllTiddlersEvent\"},\n\t\t{type: \"tm-close-other-tiddlers\", handler: \"handleCloseOtherTiddlersEvent\"},\n\t\t{type: \"tm-new-tiddler\", handler: \"handleNewTiddlerEvent\"},\n\t\t{type: \"tm-import-tiddlers\", handler: \"handleImportTiddlersEvent\"},\n\t\t{type: \"tm-perform-import\", handler: \"handlePerformImportEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigatorWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigatorWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigatorWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.storyTitle = this.getAttribute(\"story\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nNavigatorWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.story || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nNavigatorWidget.prototype.getStoryList = function() {\n\treturn this.storyTitle ? this.wiki.getTiddlerList(this.storyTitle) : null;\n};\n\nNavigatorWidget.prototype.saveStoryList = function(storyList) {\n\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\t{title: this.storyTitle},\n\t\tstoryTiddler,\n\t\t{list: storyList}\n\t));\n};\n\nNavigatorWidget.prototype.findTitleInStory = function(storyList,title,defaultIndex) {\n\tvar p = storyList.indexOf(title);\n\treturn p === -1 ? defaultIndex : p;\n};\n\nNavigatorWidget.prototype.removeTitleFromStory = function(storyList,title) {\n\tvar p = storyList.indexOf(title);\n\twhile(p !== -1) {\n\t\tstoryList.splice(p,1);\n\t\tp = storyList.indexOf(title);\n\t}\n};\n\nNavigatorWidget.prototype.replaceFirstTitleInStory = function(storyList,oldTitle,newTitle) {\n\tvar pos = storyList.indexOf(oldTitle);\n\tif(pos !== -1) {\n\t\tstoryList[pos] = newTitle;\n\t\tdo {\n\t\t\tpos = storyList.indexOf(oldTitle,pos + 1);\n\t\t\tif(pos !== -1) {\n\t\t\t\tstoryList.splice(pos,1);\n\t\t\t}\n\t\t} while(pos !== -1);\n\t} else {\n\t\tstoryList.splice(0,0,newTitle);\n\t}\n};\n\nNavigatorWidget.prototype.addToStory = function(title,fromTitle) {\n\tvar storyList = this.getStoryList();\n\tif(storyList) {\n\t\t// See if the tiddler is already there\n\t\tvar slot = this.findTitleInStory(storyList,title,-1);\n\t\t// If not we need to add it\n\t\tif(slot === -1) {\n\t\t\t// First we try to find the position of the story element we navigated from\n\t\t\tslot = this.findTitleInStory(storyList,fromTitle,-1) + 1;\n\t\t\t// Add the tiddler\n\t\t\tstoryList.splice(slot,0,title);\n\t\t\t// Save the story\n\t\t\tthis.saveStoryList(storyList);\n\t\t}\n\t}\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\n*/\nNavigatorWidget.prototype.addToHistory = function(title,fromPageRect) {\n\tthis.wiki.addToHistory(title,fromPageRect,this.historyTitle);\n};\n\n/*\nHandle a tm-navigate event\n*/\nNavigatorWidget.prototype.handleNavigateEvent = function(event) {\n\tthis.addToStory(event.navigateTo,event.navigateFromTitle);\n\tif(!event.navigateSuppressNavigation) {\n\t\tthis.addToHistory(event.navigateTo,event.navigateFromClientRect);\n\t}\n\treturn false;\n};\n\n// Close a specified tiddler\nNavigatorWidget.prototype.handleCloseTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\tstoryList = this.getStoryList();\n\t// Look for tiddlers with this title to close\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\treturn false;\n};\n\n// Close all tiddlers\nNavigatorWidget.prototype.handleCloseAllTiddlersEvent = function(event) {\n\tthis.saveStoryList([]);\n\treturn false;\n};\n\n// Close other tiddlers\nNavigatorWidget.prototype.handleCloseOtherTiddlersEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle;\n\tthis.saveStoryList([title]);\n\treturn false;\n};\n\n// Place a tiddler in edit mode\nNavigatorWidget.prototype.handleEditTiddlerEvent = function(event) {\n\tvar self = this;\n\tfunction isUnmodifiedShadow(title) {\n\t\treturn self.wiki.isShadowTiddler(title) && !self.wiki.tiddlerExists(title);\n\t}\n\tfunction confirmEditShadow(title) {\n\t\treturn confirm($tw.language.getString(\n\t\t\t\"ConfirmEditShadowTiddler\",\n\t\t\t{variables:\n\t\t\t\t{title: title}\n\t\t\t}\n\t\t));\n\t}\n\tvar title = event.param || event.tiddlerTitle;\n\tif(isUnmodifiedShadow(title) && !confirmEditShadow(title)) {\n\t\treturn false;\n\t}\n\t// Replace the specified tiddler with a draft in edit mode\n\tvar draftTiddler = this.makeDraftTiddler(title),\n\t\tdraftTitle = draftTiddler.fields.title,\n\t\tstoryList = this.getStoryList();\n\tthis.removeTitleFromStory(storyList,draftTitle);\n\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\tthis.saveStoryList(storyList);\n\treturn false;\n};\n\n// Delete a tiddler\nNavigatorWidget.prototype.handleDeleteTiddlerEvent = function(event) {\n\t// Get the tiddler we're deleting\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList(),\n\t\toriginalTitle = tiddler.fields[\"draft.of\"],\n\t\tconfirmationTitle;\n\t// Check if the tiddler we're deleting is in draft mode\n\tif(originalTitle) {\n\t\t// If so, we'll prompt for confirmation referencing the original tiddler\n\t\tconfirmationTitle = originalTitle;\n\t} else {\n\t\t// If not a draft, then prompt for confirmation referencing the specified tiddler\n\t\tconfirmationTitle = title;\n\t}\n\t// Seek confirmation\n\tif((this.wiki.getTiddler(originalTitle) || (tiddler.fields.text || \"\") !== \"\") && !confirm($tw.language.getString(\n\t\t\t\t\"ConfirmDeleteTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: confirmationTitle}\n\t\t\t\t}\n\t\t\t))) {\n\t\treturn false;\n\t}\n\t// Delete the original tiddler\n\tif(originalTitle) {\n\t\tthis.wiki.deleteTiddler(originalTitle);\n\t\tthis.removeTitleFromStory(storyList,originalTitle);\n\t}\n\t// Delete this tiddler\n\tthis.wiki.deleteTiddler(title);\n\t// Remove the closed tiddler from the story\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\treturn false;\n};\n\n/*\nCreate/reuse the draft tiddler for a given title\n*/\nNavigatorWidget.prototype.makeDraftTiddler = function(targetTitle) {\n\t// See if there is already a draft tiddler for this tiddler\n\tvar draftTitle = this.wiki.findDraft(targetTitle);\n\tif(draftTitle) {\n\t\treturn this.wiki.getTiddler(draftTitle);\n\t}\n\t// Get the current value of the tiddler we're editing\n\tvar tiddler = this.wiki.getTiddler(targetTitle);\n\t// Save the initial value of the draft tiddler\n\tdraftTitle = this.generateDraftTitle(targetTitle);\n\tvar draftTiddler = new $tw.Tiddler(\n\t\t\ttiddler,\n\t\t\t{\n\t\t\t\ttitle: draftTitle,\n\t\t\t\t\"draft.title\": targetTitle,\n\t\t\t\t\"draft.of\": targetTitle\n\t\t\t},\n\t\t\tthis.wiki.getModificationFields()\n\t\t);\n\tthis.wiki.addTiddler(draftTiddler);\n\treturn draftTiddler;\n};\n\n/*\nGenerate a title for the draft of a given tiddler\n*/\nNavigatorWidget.prototype.generateDraftTitle = function(title) {\n\tvar c = 0,\n\t\tdraftTitle;\n\tdo {\n\t\tdraftTitle = \"Draft \" + (c ? (c + 1) + \" \" : \"\") + \"of '\" + title + \"'\";\n\t\tc++;\n\t} while(this.wiki.tiddlerExists(draftTitle));\n\treturn draftTitle;\n};\n\n// Take a tiddler out of edit mode, saving the changes\nNavigatorWidget.prototype.handleSaveTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList();\n\t// Replace the original tiddler with the draft\n\tif(tiddler) {\n\t\tvar draftTitle = (tiddler.fields[\"draft.title\"] || \"\").trim(),\n\t\t\tdraftOf = (tiddler.fields[\"draft.of\"] || \"\").trim();\n\t\tif(draftTitle) {\n\t\t\tvar isRename = draftOf !== draftTitle,\n\t\t\t\tisConfirmed = true;\n\t\t\tif(isRename && this.wiki.tiddlerExists(draftTitle)) {\n\t\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\t\"ConfirmOverwriteTiddler\",\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{title: draftTitle}\n\t\t\t\t\t}\n\t\t\t\t));\n\t\t\t}\n\t\t\tif(isConfirmed) {\n\t\t\t\t// Save the draft tiddler as the real tiddler\n\t\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\ttitle: draftTitle,\n\t\t\t\t\t\"draft.title\": undefined,\n\t\t\t\t\t\"draft.of\": undefined\n\t\t\t\t},this.wiki.getModificationFields()));\n\t\t\t\t// Remove the draft tiddler\n\t\t\t\tthis.wiki.deleteTiddler(title);\n\t\t\t\t// Remove the original tiddler if we're renaming it\n\t\t\t\tif(isRename) {\n\t\t\t\t\tthis.wiki.deleteTiddler(draftOf);\n\t\t\t\t}\n\t\t\t\t// Replace the draft in the story with the original\n\t\t\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\t\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\t\t\tif(draftTitle !== this.storyTitle) {\n\t\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t\t}\n\t\t\t\t// Trigger an autosave\n\t\t\t\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Take a tiddler out of edit mode without saving the changes\nNavigatorWidget.prototype.handleCancelTiddlerEvent = function(event) {\n\t// Flip the specified tiddler from draft back to the original\n\tvar draftTitle = event.param || event.tiddlerTitle,\n\t\tdraftTiddler = this.wiki.getTiddler(draftTitle),\n\t\toriginalTitle = draftTiddler.fields[\"draft.of\"],\n\t\toriginalTiddler = this.wiki.getTiddler(originalTitle),\n\t\tstoryList = this.getStoryList();\n\tif(draftTiddler && originalTitle) {\n\t\t// Ask for confirmation if the tiddler text has changed\n\t\tvar isConfirmed = true;\n\t\tif(this.wiki.isDraftModified(draftTitle)) {\n\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\"ConfirmCancelTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: draftTitle}\n\t\t\t\t}\n\t\t\t));\n\t\t}\n\t\t// Remove the draft tiddler\n\t\tif(isConfirmed) {\n\t\t\tthis.wiki.deleteTiddler(draftTitle);\n\t\t\tif(originalTiddler) {\n\t\t\t\tthis.replaceFirstTitleInStory(storyList,draftTitle,originalTitle);\n\t\t\t\tthis.addToHistory(originalTitle,event.navigateFromClientRect);\n\t\t\t} else {\n\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t}\n\t\t\tthis.saveStoryList(storyList);\n\t\t\t// Trigger an autosave\n\t\t\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\t\t\t\n\t\t}\n\t}\n\treturn false;\n};\n\n// Create a new draft tiddler\n// event.param can either be the title of a template tiddler, or a hashmap of fields.\n//\n// The title of the newly created tiddler follows these rules:\n// * If a hashmap was used and a title field was specified, use that title\n// * If a hashmap was used without a title field, use a default title, if necessary making it unique with a numeric suffix\n// * If a template tiddler was used, use the title of the template, if necessary making it unique with a numeric suffix\n//\n// If a draft of the target tiddler already exists then it is reused\nNavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {\n\t// Get the story details\n\tvar storyList = this.getStoryList(),\n\t\ttemplateTiddler, additionalFields, title, draftTitle, existingTiddler;\n\t// Get the template tiddler (if any)\n\tif(typeof event.param === \"string\") {\n\t\t// Get the template tiddler\n\t\ttemplateTiddler = this.wiki.getTiddler(event.param);\n\t\t// Generate a new title\n\t\ttitle = this.wiki.generateNewTitle(event.param || $tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t}\n\t// Get the specified additional fields\n\tif(typeof event.paramObject === \"object\") {\n\t\tadditionalFields = event.paramObject;\n\t}\n\tif(typeof event.param === \"object\") { // Backwards compatibility with 5.1.3\n\t\tadditionalFields = event.param;\n\t}\n\tif(additionalFields && additionalFields.title) {\n\t\ttitle = additionalFields.title;\n\t}\n\t// Generate a title if we don't have one\n\ttitle = title || this.wiki.generateNewTitle($tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t// Find any existing draft for this tiddler\n\tdraftTitle = this.wiki.findDraft(title);\n\t// Pull in any existing tiddler\n\tif(draftTitle) {\n\t\texistingTiddler = this.wiki.getTiddler(draftTitle);\n\t} else {\n\t\tdraftTitle = this.generateDraftTitle(title);\n\t\texistingTiddler = this.wiki.getTiddler(title);\n\t}\n\t// Merge the tags\n\tvar mergedTags = [];\n\tif(existingTiddler && existingTiddler.fields.tags) {\n\t\t$tw.utils.pushTop(mergedTags,existingTiddler.fields.tags)\n\t}\n\tif(additionalFields && additionalFields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,$tw.utils.parseStringArray(additionalFields.tags));\n\t}\n\tif(templateTiddler && templateTiddler.fields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,templateTiddler.fields.tags);\n\t}\n\t// Save the draft tiddler\n\tvar draftTiddler = new $tw.Tiddler({\n\t\t\ttext: \"\",\n\t\t\t\"draft.title\": title\n\t\t},\n\t\ttemplateTiddler,\n\t\texistingTiddler,\n\t\tadditionalFields,\n\t\tthis.wiki.getCreationFields(),\n\t\t{\n\t\t\ttitle: draftTitle,\n\t\t\t\"draft.of\": title,\n\t\t\ttags: mergedTags\n\t\t},this.wiki.getModificationFields());\n\tthis.wiki.addTiddler(draftTiddler);\n\t// Update the story to insert the new draft at the top and remove any existing tiddler\n\tif(storyList.indexOf(draftTitle) === -1) {\n\t\tvar slot = storyList.indexOf(event.navigateFromTitle);\n\t\tstoryList.splice(slot + 1,0,draftTitle);\n\t}\n\tif(storyList.indexOf(title) !== -1) {\n\t\tstoryList.splice(storyList.indexOf(title),1);\t\t\n\t}\n\tthis.saveStoryList(storyList);\n\t// Add a new record to the top of the history stack\n\tthis.addToHistory(draftTitle);\n\treturn false;\n};\n\n// Import JSON tiddlers into a pending import tiddler\nNavigatorWidget.prototype.handleImportTiddlersEvent = function(event) {\n\tvar self = this;\n\t// Get the tiddlers\n\tvar tiddlers = [];\n\ttry {\n\t\ttiddlers = JSON.parse(event.param);\t\n\t} catch(e) {\n\t}\n\t// Get the current $:/Import tiddler\n\tvar importTiddler = this.wiki.getTiddler(IMPORT_TITLE),\n\t\timportData = this.wiki.getTiddlerData(IMPORT_TITLE,{}),\n\t\tnewFields = new Object({\n\t\t\ttitle: IMPORT_TITLE,\n\t\t\ttype: \"application/json\",\n\t\t\t\"plugin-type\": \"import\",\n\t\t\t\"status\": \"pending\"\n\t\t}),\n\t\tincomingTiddlers = [];\n\t// Process each tiddler\n\timportData.tiddlers = importData.tiddlers || {};\n\t$tw.utils.each(tiddlers,function(tiddlerFields) {\n\t\tvar title = tiddlerFields.title;\n\t\tif(title) {\n\t\t\tincomingTiddlers.push(title);\n\t\t\timportData.tiddlers[title] = tiddlerFields;\n\t\t}\n\t});\n\t// Give the active upgrader modules a chance to process the incoming tiddlers\n\tvar messages = this.wiki.invokeUpgraders(incomingTiddlers,importData.tiddlers);\n\t$tw.utils.each(messages,function(message,title) {\n\t\tnewFields[\"message-\" + title] = message;\n\t});\n\t// Deselect any suppressed tiddlers\n\t$tw.utils.each(importData.tiddlers,function(tiddler,title) {\n\t\tif($tw.utils.count(tiddler) === 0) {\n\t\t\tnewFields[\"selection-\" + title] = \"unchecked\";\n\t\t}\n\t});\n\t// Save the $:/Import tiddler\n\tnewFields.text = JSON.stringify(importData,null,$tw.config.preferences.jsonSpaces);\n\tthis.wiki.addTiddler(new $tw.Tiddler(importTiddler,newFields));\n\t// Update the story and history details\n\tif(this.getVariable(\"tv-auto-open-on-import\") !== \"no\") {\n\t\tvar storyList = this.getStoryList(),\n\t\t\thistory = [];\n\t\t// Add it to the story\n\t\tif(storyList.indexOf(IMPORT_TITLE) === -1) {\n\t\t\tstoryList.unshift(IMPORT_TITLE);\n\t\t}\n\t\t// And to history\n\t\thistory.push(IMPORT_TITLE);\n\t\t// Save the updated story and history\n\t\tthis.saveStoryList(storyList);\n\t\tthis.addToHistory(history);\t\t\n\t}\n\treturn false;\n};\n\n// \nNavigatorWidget.prototype.handlePerformImportEvent = function(event) {\n\tvar self = this,\n\t\timportTiddler = this.wiki.getTiddler(event.param),\n\t\timportData = this.wiki.getTiddlerData(event.param,{tiddlers: {}}),\n\t\timportReport = [];\n\t// Add the tiddlers to the store\n\timportReport.push(\"The following tiddlers were imported:\\n\");\n\t$tw.utils.each(importData.tiddlers,function(tiddlerFields) {\n\t\tvar title = tiddlerFields.title;\n\t\tif(title && importTiddler && importTiddler.fields[\"selection-\" + title] !== \"unchecked\") {\n\t\t\tself.wiki.addTiddler(new $tw.Tiddler(tiddlerFields));\n\t\t\timportReport.push(\"# [[\" + tiddlerFields.title + \"]]\");\n\t\t}\n\t});\n\t// Replace the $:/Import tiddler with an import report\n\tthis.wiki.addTiddler(new $tw.Tiddler({\n\t\ttitle: IMPORT_TITLE,\n\t\ttext: importReport.join(\"\\n\"),\n\t\t\"status\": \"complete\"\n\t}));\n\t// Navigate to the $:/Import tiddler\n\tthis.addToHistory([IMPORT_TITLE]);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n};\n\nexports.navigator = NavigatorWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/navigator.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/password.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/password.js\ntype: application/javascript\nmodule-type: widget\n\nPassword widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar PasswordWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nPasswordWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nPasswordWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the current password\n\tvar password = $tw.browser ? $tw.utils.getPassword(this.passwordName) || \"\" : \"\";\n\t// Create our element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"password\");\n\tdomNode.setAttribute(\"value\",password);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nPasswordWidget.prototype.handleChangeEvent = function(event) {\n\tvar password = this.domNodes[0].value;\n\treturn $tw.utils.savePassword(this.passwordName,password);\n};\n\n/*\nCompute the internal state of the widget\n*/\nPasswordWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.passwordName = this.getAttribute(\"name\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nPasswordWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.password = PasswordWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/password.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/radio.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/radio.js\ntype: application/javascript\nmodule-type: widget\n\nRadio widget\n\nWill set a field to the selected value:\n\n```\n\t<$radio field=\"myfield\" value=\"check 1\">one</$radio>\n\t<$radio field=\"myfield\" value=\"check 2\">two</$radio>\n\t<$radio field=\"myfield\" value=\"check 3\">three</$radio>\n```\n\n|Parameter |Description |h\n|tiddler |Name of the tiddler in which the field should be set. Defaults to current tiddler |\n|field |The name of the field to be set |\n|value |The value to set |\n|class |Optional class name(s) |\n\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RadioWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRadioWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRadioWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",this.radioClass);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"radio\");\n\tif(this.getValue() == this.radioValue) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nRadioWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.radioTitle);\n\treturn tiddler && tiddler.getFieldString(this.radioField);\n};\n\nRadioWidget.prototype.setValue = function() {\n\tif(this.radioField) {\n\t\tvar tiddler = this.wiki.getTiddler(this.radioTitle),\n\t\t\taddition = {};\n\t\taddition[this.radioField] = this.radioValue;\n\t\tthis.wiki.addTiddler(new $tw.Tiddler({title: this.radioTitle},tiddler,addition,this.wiki.getModificationFields()));\n\t}\n};\n\nRadioWidget.prototype.handleChangeEvent = function(event) {\n\tif(this.inputDomNode.checked) {\n\t\tthis.setValue();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRadioWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.radioTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.radioField = this.getAttribute(\"field\",\"text\");\n\tthis.radioValue = this.getAttribute(\"value\");\n\tthis.radioClass = this.getAttribute(\"class\",\"\");\n\tif(this.radioClass !== \"\") {\n\t\tthis.radioClass += \" \";\n\t}\n\tthis.radioClass += \"tc-radio\";\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRadioWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.value || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.radioTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue() === this.radioValue;\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.radio = RadioWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/radio.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/raw.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/raw.js\ntype: application/javascript\nmodule-type: widget\n\nRaw widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RawWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRawWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRawWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar div = this.document.createElement(\"div\");\n\tdiv.innerHTML=this.parseTreeNode.html;\n\tparent.insertBefore(div,nextSibling);\n\tthis.domNodes.push(div);\t\n};\n\n/*\nCompute the internal state of the widget\n*/\nRawWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRawWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.raw = RawWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/raw.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/reveal.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/reveal.js\ntype: application/javascript\nmodule-type: widget\n\nReveal widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RevealWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRevealWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRevealWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar domNode = this.document.createElement(this.parseTreeNode.isBlock ? \"div\" : \"span\");\n\tvar classes = this[\"class\"].split(\" \") || [];\n\tclasses.push(\"tc-reveal\");\n\tdomNode.className = classes.join(\" \");\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\t}\n\tif(!this.isOpen) {\n\t\tdomNode.setAttribute(\"hidden\",\"true\");\n\t}\n\tthis.domNodes.push(domNode);\n};\n\nRevealWidget.prototype.positionPopup = function(domNode) {\n\tdomNode.style.position = \"absolute\";\n\tdomNode.style.zIndex = \"1000\";\n\tswitch(this.position) {\n\t\tcase \"left\":\n\t\t\tdomNode.style.left = (this.popup.left - domNode.offsetWidth) + \"px\";\n\t\t\tdomNode.style.top = this.popup.top + \"px\";\n\t\t\tbreak;\n\t\tcase \"above\":\n\t\t\tdomNode.style.left = this.popup.left + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top - domNode.offsetHeight) + \"px\";\n\t\t\tbreak;\n\t\tcase \"aboveright\":\n\t\t\tdomNode.style.left = (this.popup.left + this.popup.width) + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top + this.popup.height - domNode.offsetHeight) + \"px\";\n\t\t\tbreak;\n\t\tcase \"right\":\n\t\t\tdomNode.style.left = (this.popup.left + this.popup.width) + \"px\";\n\t\t\tdomNode.style.top = this.popup.top + \"px\";\n\t\t\tbreak;\n\t\tcase \"belowleft\":\n\t\t\tdomNode.style.left = (this.popup.left + this.popup.width - domNode.offsetWidth) + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top + this.popup.height) + \"px\";\n\t\t\tbreak;\n\t\tdefault: // Below\n\t\t\tdomNode.style.left = this.popup.left + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top + this.popup.height) + \"px\";\n\t\t\tbreak;\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRevealWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.state = this.getAttribute(\"state\");\n\tthis.type = this.getAttribute(\"type\");\n\tthis.text = this.getAttribute(\"text\");\n\tthis.position = this.getAttribute(\"position\");\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis[\"default\"] = this.getAttribute(\"default\",\"\");\n\tthis.animate = this.getAttribute(\"animate\",\"no\");\n\tthis.retain = this.getAttribute(\"retain\",\"no\");\n\tthis.openAnimation = this.animate === \"no\" ? undefined : \"open\";\n\tthis.closeAnimation = this.animate === \"no\" ? undefined : \"close\";\n\t// Compute the title of the state tiddler and read it\n\tthis.stateTitle = this.state;\n\tthis.readState();\n\t// Construct the child widgets\n\tvar childNodes = this.isOpen ? this.parseTreeNode.children : [];\n\tthis.hasChildNodes = this.isOpen;\n\tthis.makeChildWidgets(childNodes);\n};\n\n/*\nRead the state tiddler\n*/\nRevealWidget.prototype.readState = function() {\n\t// Read the information from the state tiddler\n\tvar state = this.stateTitle ? this.wiki.getTextReference(this.stateTitle,this[\"default\"],this.getVariable(\"currentTiddler\")) : this[\"default\"];\n\tswitch(this.type) {\n\t\tcase \"popup\":\n\t\t\tthis.readPopupState(state);\n\t\t\tbreak;\n\t\tcase \"match\":\n\t\t\tthis.readMatchState(state);\n\t\t\tbreak;\n\t\tcase \"nomatch\":\n\t\t\tthis.readMatchState(state);\n\t\t\tthis.isOpen = !this.isOpen;\n\t\t\tbreak;\n\t}\n};\n\nRevealWidget.prototype.readMatchState = function(state) {\n\tthis.isOpen = state === this.text;\n};\n\nRevealWidget.prototype.readPopupState = function(state) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/,\n\t\tmatch = popupLocationRegExp.exec(state);\n\t// Check if the state matches the location regexp\n\tif(match) {\n\t\t// If so, we're open\n\t\tthis.isOpen = true;\n\t\t// Get the location\n\t\tthis.popup = {\n\t\t\tleft: parseFloat(match[1]),\n\t\t\ttop: parseFloat(match[2]),\n\t\t\twidth: parseFloat(match[3]),\n\t\t\theight: parseFloat(match[4])\n\t\t};\n\t} else {\n\t\t// If not, we're closed\n\t\tthis.isOpen = false;\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRevealWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.state || changedAttributes.type || changedAttributes.text || changedAttributes.position || changedAttributes[\"default\"] || changedAttributes.animate) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false,\n\t\t\tcurrentlyOpen = this.isOpen;\n\t\tthis.readState();\n\t\tif(this.isOpen !== currentlyOpen) {\n\t\t\tif(this.retain === \"yes\") {\n\t\t\t\tthis.updateState();\n\t\t\t} else {\n\t\t\t\tthis.refreshSelf();\n\t\t\t\trefreshed = true;\n\t\t\t}\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\n/*\nCalled by refresh() to dynamically show or hide the content\n*/\nRevealWidget.prototype.updateState = function() {\n\t// Read the current state\n\tthis.readState();\n\t// Construct the child nodes if needed\n\tvar domNode = this.domNodes[0];\n\tif(this.isOpen && !this.hasChildNodes) {\n\t\tthis.hasChildNodes = true;\n\t\tthis.makeChildWidgets(this.parseTreeNode.children);\n\t\tthis.renderChildren(domNode,null);\n\t}\n\t// Animate our DOM node\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\n\t}\n\tif(this.isOpen) {\n\t\tdomNode.removeAttribute(\"hidden\");\n $tw.anim.perform(this.openAnimation,domNode);\n\t} else {\n\t\t$tw.anim.perform(this.closeAnimation,domNode,{callback: function() {\n\t\t\tdomNode.setAttribute(\"hidden\",\"true\");\n }});\n\t}\n};\n\nexports.reveal = RevealWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/reveal.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/scrollable.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/scrollable.js\ntype: application/javascript\nmodule-type: widget\n\nScrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ScrollableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.scaleFactor = 1;\n\tthis.addEventListeners([\n\t\t{type: \"tm-scroll\", handler: \"handleScrollEvent\"}\n\t]);\n\tif($tw.browser) {\n\t\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\tfunction(callback) {\n\t\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t\t};\n\t\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\t\twindow.webkitCancelAnimationFrame ||\n\t\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\t\twindow.mozCancelAnimationFrame ||\n\t\t\twindow.mozCancelRequestAnimationFrame ||\n\t\t\tfunction(id) {\n\t\t\t\twindow.clearTimeout(id);\n\t\t\t};\n\t}\n};\n\n/*\nInherit from the base widget class\n*/\nScrollableWidget.prototype = new Widget();\n\nScrollableWidget.prototype.cancelScroll = function() {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(window,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle a scroll event\n*/\nScrollableWidget.prototype.handleScrollEvent = function(event) {\n\t// Pass the scroll event through if our offsetsize is larger than our scrollsize\n\tif(this.outerDomNode.scrollWidth <= this.outerDomNode.offsetWidth && this.outerDomNode.scrollHeight <= this.outerDomNode.offsetHeight && this.fallthrough === \"yes\") {\n\t\treturn true;\n\t}\n\tthis.scrollIntoView(event.target);\n\treturn false; // Handled event\n};\n\n/*\nScroll an element into view\n*/\nScrollableWidget.prototype.scrollIntoView = function(element) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tthis.cancelScroll();\n\tthis.startTime = Date.now();\n\tvar scrollPosition = {\n\t\tx: this.outerDomNode.scrollLeft,\n\t\ty: this.outerDomNode.scrollTop\n\t};\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar scrollableBounds = this.outerDomNode.getBoundingClientRect(),\n\t\tclientTargetBounds = element.getBoundingClientRect(),\n\t\tbounds = {\n\t\t\tleft: clientTargetBounds.left + scrollPosition.x - scrollableBounds.left,\n\t\t\ttop: clientTargetBounds.top + scrollPosition.y - scrollableBounds.top,\n\t\t\twidth: clientTargetBounds.width,\n\t\t\theight: clientTargetBounds.height\n\t\t};\n\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\tvar getEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\t// If the target is already visible then stay where we are\n\t\t\tif(targetPos >= currentPos && (targetPos + targetSize) <= (currentPos + currentSize)) {\n\t\t\t\treturn currentPos;\n\t\t\t// If the target is above/left of the current view, then scroll to its top/left\n\t\t\t} else if(targetPos <= currentPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// If the target is smaller than the window and the scroll position is too far up, then scroll till the target is at the bottom of the window\n\t\t\t} else if(targetSize < currentSize && currentPos < (targetPos + targetSize - currentSize)) {\n\t\t\t\treturn targetPos + targetSize - currentSize;\n\t\t\t// If the target is big, then just scroll to the top\n\t\t\t} else if(currentPos < targetPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// Otherwise, stay where we are\n\t\t\t} else {\n\t\t\t\treturn currentPos;\n\t\t\t}\n\t\t},\n\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,this.outerDomNode.offsetWidth),\n\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,this.outerDomNode.offsetHeight);\n\t// Only scroll if necessary\n\tif(endX !== scrollPosition.x || endY !== scrollPosition.y) {\n\t\tvar self = this,\n\t\t\tdrawFrame;\n\t\tdrawFrame = function () {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll();\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\tself.outerDomNode.scrollLeft = scrollPosition.x + (endX - scrollPosition.x) * t;\n\t\t\tself.outerDomNode.scrollTop = scrollPosition.y + (endY - scrollPosition.y) * t;\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(window,drawFrame);\n\t\t\t}\n\t\t};\n\t\tdrawFrame();\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nScrollableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create elements\n\tthis.outerDomNode = this.document.createElement(\"div\");\n\t$tw.utils.setStyle(this.outerDomNode,[\n\t\t{overflowY: \"auto\"},\n\t\t{overflowX: \"auto\"},\n\t\t{webkitOverflowScrolling: \"touch\"}\n\t]);\n\tthis.innerDomNode = this.document.createElement(\"div\");\n\tthis.outerDomNode.appendChild(this.innerDomNode);\n\t// Assign classes\n\tthis.outerDomNode.className = this[\"class\"] || \"\";\n\t// Insert element\n\tparent.insertBefore(this.outerDomNode,nextSibling);\n\tthis.renderChildren(this.innerDomNode,null);\n\tthis.domNodes.push(this.outerDomNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nScrollableWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.fallthrough = this.getAttribute(\"fallthrough\",\"yes\");\n\tthis[\"class\"] = this.getAttribute(\"class\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nScrollableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.scrollable = ScrollableWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/scrollable.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/select.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/select.js\ntype: application/javascript\nmodule-type: widget\n\nSelect widget:\n\n```\n<$select tiddler=\"MyTiddler\" field=\"text\">\n<$list filter=\"[tag[chapter]]\">\n<option value=<<currentTiddler>>>\n<$view field=\"description\"/>\n</option>\n</$list>\n</$select>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SelectWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSelectWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSelectWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\tthis.setSelectValue();\n\t$tw.utils.addEventListeners(this.getSelectDomNode(),[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n};\n\n/*\nHandle a change event\n*/\nSelectWidget.prototype.handleChangeEvent = function(event) {\n\tvar value = this.getSelectDomNode().value;\n\tthis.wiki.setText(this.selectTitle,this.selectField,this.selectIndex,value);\n};\n\n/*\nIf necessary, set the value of the select element to the current value\n*/\nSelectWidget.prototype.setSelectValue = function() {\n\tvar value = this.selectDefault;\n\t// Get the value\n\tif(this.selectIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.selectTitle,this.selectIndex);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.selectTitle);\n\t\tif(tiddler) {\n\t\t\tif(this.selectField === \"text\") {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.selectTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.selectField)) {\n\t\t\t\t\tvalue = tiddler.getFieldString(this.selectField);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.selectField === \"title\") {\n\t\t\t\tvalue = this.selectTitle;\n\t\t\t}\n\t\t}\n\t}\n\t// Assign it to the select element if it's different than the current value\n\tvar domNode = this.getSelectDomNode();\n\tif(domNode.value !== value) {\n\t\tdomNode.value = value;\n\t}\n};\n\n/*\nGet the DOM node of the select element\n*/\nSelectWidget.prototype.getSelectDomNode = function() {\n\treturn this.children[0].domNodes[0];\n};\n\n/*\nCompute the internal state of the widget\n*/\nSelectWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.selectTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.selectField = this.getAttribute(\"field\",\"text\");\n\tthis.selectIndex = this.getAttribute(\"index\");\n\tthis.selectClass = this.getAttribute(\"class\");\n\tthis.selectDefault = this.getAttribute(\"default\");\n\t// Make the child widgets\n\tvar selectNode = {\n\t\ttype: \"element\",\n\t\ttag: \"select\",\n\t\tchildren: this.parseTreeNode.children\n\t};\n\tif(this.selectClass) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"class\",this.selectClass);\n\t}\n\tthis.makeChildWidgets([selectNode]);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSelectWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// If we're using a different tiddler/field/index then completely refresh ourselves\n\tif(changedAttributes.selectTitle || changedAttributes.selectField || changedAttributes.selectIndex) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t// If the target tiddler value has changed, just update setting and refresh the children\n\t} else {\n\t\tif(changedTiddlers[this.selectTitle]) {\n\t\t\tthis.setSelectValue();\n\t\t} \n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.select = SelectWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/select.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/set.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/set.js\ntype: application/javascript\nmodule-type: widget\n\nSet variable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.setName = this.getAttribute(\"name\",\"currentTiddler\");\n\tthis.setFilter = this.getAttribute(\"filter\");\n\tthis.setValue = this.getAttribute(\"value\");\n\tthis.setEmptyValue = this.getAttribute(\"emptyValue\");\n\t// Set context variable\n\tvar value = this.setValue;\n\tif(this.setFilter) {\n\t\tvar results = this.wiki.filterTiddlers(this.setFilter,this);\n\t\tif(!this.setValue) {\n\t\t\tvalue = $tw.utils.stringifyList(results);\n\t\t}\n\t\tif(results.length === 0 && this.setEmptyValue !== undefined) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t}\n\t}\n\tthis.setVariable(this.setName,value,this.parseTreeNode.params);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSetWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.filter || changedAttributes.value || changedAttributes.emptyValue) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.setvariable = SetWidget;\nexports.set = SetWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/set.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/text.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/text.js\ntype: application/javascript\nmodule-type: widget\n\nText node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TextNodeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTextNodeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTextNodeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar text = this.getAttribute(\"text\",this.parseTreeNode.text || \"\");\n\ttext = text.replace(/\\r/mg,\"\");\n\tvar textNode = this.document.createTextNode(text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTextNodeWidget.prototype.execute = function() {\n\t// Nothing to do for a text node\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTextNodeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.text) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.text = TextNodeWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/text.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/tiddler.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/tiddler.js\ntype: application/javascript\nmodule-type: widget\n\nTiddler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTiddlerWidget.prototype.execute = function() {\n\tthis.tiddlerState = this.computeTiddlerState();\n\tthis.setVariable(\"currentTiddler\",this.tiddlerState.currentTiddler);\n\tthis.setVariable(\"missingTiddlerClass\",this.tiddlerState.missingTiddlerClass);\n\tthis.setVariable(\"shadowTiddlerClass\",this.tiddlerState.shadowTiddlerClass);\n\tthis.setVariable(\"systemTiddlerClass\",this.tiddlerState.systemTiddlerClass);\n\tthis.setVariable(\"tiddlerTagClasses\",this.tiddlerState.tiddlerTagClasses);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nCompute the tiddler state flags\n*/\nTiddlerWidget.prototype.computeTiddlerState = function() {\n\t// Get our parameters\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Compute the state\n\tvar state = {\n\t\tcurrentTiddler: this.tiddlerTitle || \"\",\n\t\tmissingTiddlerClass: (this.wiki.tiddlerExists(this.tiddlerTitle) || this.wiki.isShadowTiddler(this.tiddlerTitle)) ? \"tc-tiddler-exists\" : \"tc-tiddler-missing\",\n\t\tshadowTiddlerClass: this.wiki.isShadowTiddler(this.tiddlerTitle) ? \"tc-tiddler-shadow\" : \"\",\n\t\tsystemTiddlerClass: this.wiki.isSystemTiddler(this.tiddlerTitle) ? \"tc-tiddler-system\" : \"\",\n\t\ttiddlerTagClasses: this.getTagClasses()\n\t};\n\t// Compute a simple hash to make it easier to detect changes\n\tstate.hash = state.currentTiddler + state.missingTiddlerClass + state.shadowTiddlerClass + state.systemTiddlerClass + state.tiddlerTagClasses;\n\treturn state;\n};\n\n/*\nCreate a string of CSS classes derived from the tags of the current tiddler\n*/\nTiddlerWidget.prototype.getTagClasses = function() {\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\tif(tiddler) {\n\t\tvar tags = [];\n\t\t$tw.utils.each(tiddler.fields.tags,function(tag) {\n\t\t\ttags.push(\"tc-tagged-\" + encodeURIComponent(tag));\n\t\t});\n\t\treturn tags.join(\" \");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tnewTiddlerState = this.computeTiddlerState();\n\tif(changedAttributes.tiddler || newTiddlerState.hash !== this.tiddlerState.hash) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.tiddler = TiddlerWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/tiddler.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/transclude.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/transclude.js\ntype: application/javascript\nmodule-type: widget\n\nTransclude widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TranscludeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTranscludeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTranscludeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTranscludeWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.transcludeTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.transcludeSubTiddler = this.getAttribute(\"subtiddler\");\n\tthis.transcludeField = this.getAttribute(\"field\");\n\tthis.transcludeIndex = this.getAttribute(\"index\");\n\tthis.transcludeMode = this.getAttribute(\"mode\");\n\t// Parse the text reference\n\tvar parseAsInline = !this.parseTreeNode.isBlock;\n\tif(this.transcludeMode === \"inline\") {\n\t\tparseAsInline = true;\n\t} else if(this.transcludeMode === \"block\") {\n\t\tparseAsInline = false;\n\t}\n\tvar parser = this.wiki.parseTextReference(\n\t\t\t\t\t\tthis.transcludeTitle,\n\t\t\t\t\t\tthis.transcludeField,\n\t\t\t\t\t\tthis.transcludeIndex,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tparseAsInline: parseAsInline,\n\t\t\t\t\t\t\tsubTiddler: this.transcludeSubTiddler\n\t\t\t\t\t\t}),\n\t\tparseTreeNodes = parser ? parser.tree : this.parseTreeNode.children;\n\t// Set context variables for recursion detection\n\tvar recursionMarker = this.makeRecursionMarker();\n\tthis.setVariable(\"transclusion\",recursionMarker);\n\t// Check for recursion\n\tif(parser) {\n\t\tif(this.parentWidget && this.parentWidget.hasVariable(\"transclusion\",recursionMarker)) {\n\t\t\tparseTreeNodes = [{type: \"element\", tag: \"span\", attributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-error\"}\n\t\t\t}, children: [\n\t\t\t\t{type: \"text\", text: \"Recursive transclusion error in transclude widget\"}\n\t\t\t]}];\n\t\t}\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nCompose a string comprising the title, field and/or index to identify this transclusion for recursion detection\n*/\nTranscludeWidget.prototype.makeRecursionMarker = function() {\n\tvar output = [];\n\toutput.push(\"{\");\n\toutput.push(this.getVariable(\"currentTiddler\",{defaultValue: \"\"}));\n\toutput.push(\"|\");\n\toutput.push(this.transcludeTitle || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeField || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeIndex || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeSubTiddler || \"\");\n\toutput.push(\"}\");\n\treturn output.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTranscludeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedTiddlers[this.transcludeTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.transclude = TranscludeWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/transclude.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/view.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/view.js\ntype: application/javascript\nmodule-type: widget\n\nView widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ViewWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nViewWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nViewWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tif(this.text) {\n\t\tvar textNode = this.document.createTextNode(this.text);\n\t\tparent.insertBefore(textNode,nextSibling);\n\t\tthis.domNodes.push(textNode);\n\t} else {\n\t\tthis.makeChildWidgets();\n\t\tthis.renderChildren(parent,nextSibling);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nViewWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.viewTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.viewSubtiddler = this.getAttribute(\"subtiddler\");\n\tthis.viewField = this.getAttribute(\"field\",\"text\");\n\tthis.viewIndex = this.getAttribute(\"index\");\n\tthis.viewFormat = this.getAttribute(\"format\",\"text\");\n\tthis.viewTemplate = this.getAttribute(\"template\",\"\");\n\tswitch(this.viewFormat) {\n\t\tcase \"htmlwikified\":\n\t\t\tthis.text = this.getValueAsHtmlWikified();\n\t\t\tbreak;\n\t\tcase \"htmlencoded\":\n\t\t\tthis.text = this.getValueAsHtmlEncoded();\n\t\t\tbreak;\n\t\tcase \"urlencoded\":\n\t\t\tthis.text = this.getValueAsUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"doubleurlencoded\":\n\t\t\tthis.text = this.getValueAsDoubleUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"date\":\n\t\t\tthis.text = this.getValueAsDate(this.viewTemplate);\n\t\t\tbreak;\n\t\tcase \"relativedate\":\n\t\t\tthis.text = this.getValueAsRelativeDate();\n\t\t\tbreak;\n\t\tcase \"stripcomments\":\n\t\t\tthis.text = this.getValueAsStrippedComments();\n\t\t\tbreak;\n\t\tcase \"jsencoded\":\n\t\t\tthis.text = this.getValueAsJsEncoded();\n\t\t\tbreak;\n\t\tdefault: // \"text\"\n\t\t\tthis.text = this.getValueAsText();\n\t\t\tbreak;\n\t}\n};\n\n/*\nThe various formatter functions are baked into this widget for the moment. Eventually they will be replaced by macro functions\n*/\n\n/*\nRetrieve the value of the widget. Options are:\nasString: Optionally return the value as a string\n*/\nViewWidget.prototype.getValue = function(options) {\n\toptions = options || {};\n\tvar value = options.asString ? \"\" : undefined;\n\tif(this.viewIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.viewTitle,this.viewIndex);\n\t} else {\n\t\tvar tiddler;\n\t\tif(this.viewSubtiddler) {\n\t\t\ttiddler = this.wiki.getSubTiddler(this.viewTitle,this.viewSubtiddler);\t\n\t\t} else {\n\t\t\ttiddler = this.wiki.getTiddler(this.viewTitle);\n\t\t}\n\t\tif(tiddler) {\n\t\t\tif(this.viewField === \"text\" && !this.viewSubtiddler) {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.viewTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.viewField)) {\n\t\t\t\t\tif(options.asString) {\n\t\t\t\t\t\tvalue = tiddler.getFieldString(this.viewField);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue = tiddler.fields[this.viewField];\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.viewField === \"title\") {\n\t\t\t\tvalue = this.viewTitle;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\nViewWidget.prototype.getValueAsText = function() {\n\treturn this.getValue({asString: true});\n};\n\nViewWidget.prototype.getValueAsHtmlWikified = function() {\n\treturn this.wiki.renderText(\"text/html\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{parentWidget: this});\n};\n\nViewWidget.prototype.getValueAsHtmlEncoded = function() {\n\treturn $tw.utils.htmlEncode(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsUrlEncoded = function() {\n\treturn encodeURIComponent(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsDoubleUrlEncoded = function() {\n\treturn encodeURIComponent(encodeURIComponent(this.getValueAsText()));\n};\n\nViewWidget.prototype.getValueAsDate = function(format) {\n\tformat = format || \"YYYY MM DD 0hh:0mm\";\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.formatDateString(value,format);\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsRelativeDate = function(format) {\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.getRelativeDate((new Date()) - (new Date(value))).description;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsStrippedComments = function() {\n\tvar lines = this.getValueAsText().split(\"\\n\"),\n\t\tout = [];\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar text = lines[line];\n\t\tif(!/^\\s*\\/\\/#/.test(text)) {\n\t\t\tout.push(text);\n\t\t}\n\t}\n\treturn out.join(\"\\n\");\n};\n\nViewWidget.prototype.getValueAsJsEncoded = function() {\n\treturn $tw.utils.stringify(this.getValueAsText());\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nViewWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.template || changedAttributes.format || changedTiddlers[this.viewTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.view = ViewWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/view.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/widget.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/widget.js\ntype: application/javascript\nmodule-type: widget\n\nWidget base class\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate a widget object for a parse tree node\n\tparseTreeNode: reference to the parse tree node to be rendered\n\toptions: see below\nOptions include:\n\twiki: mandatory reference to wiki associated with this render tree\n\tparentWidget: optional reference to a parent renderer node for the context chain\n\tdocument: optional document object to use instead of global document\n*/\nvar Widget = function(parseTreeNode,options) {\n\tif(arguments.length > 0) {\n\t\tthis.initialise(parseTreeNode,options);\n\t}\n};\n\n/*\nInitialise widget properties. These steps are pulled out of the constructor so that we can reuse them in subclasses\n*/\nWidget.prototype.initialise = function(parseTreeNode,options) {\n\toptions = options || {};\n\t// Save widget info\n\tthis.parseTreeNode = parseTreeNode;\n\tthis.wiki = options.wiki;\n\tthis.parentWidget = options.parentWidget;\n\tthis.variablesConstructor = function() {};\n\tthis.variablesConstructor.prototype = this.parentWidget ? this.parentWidget.variables : {};\n\tthis.variables = new this.variablesConstructor();\n\tthis.document = options.document;\n\tthis.attributes = {};\n\tthis.children = [];\n\tthis.domNodes = [];\n\tthis.eventListeners = {};\n\t// Hashmap of the widget classes\n\tif(!this.widgetClasses) {\n\t\tWidget.prototype.widgetClasses = $tw.modules.applyMethods(\"widget\");\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWidget.prototype.execute = function() {\n\tthis.makeChildWidgets();\n};\n\n/*\nSet the value of a context variable\nname: name of the variable\nvalue: value of the variable\nparams: array of {name:, default:} for each parameter\n*/\nWidget.prototype.setVariable = function(name,value,params) {\n\tthis.variables[name] = {value: value, params: params};\n};\n\n/*\nGet the prevailing value of a context variable\nname: name of variable\noptions: see below\nOptions include\nparams: array of {name:, value:} for each parameter\ndefaultValue: default value if the variable is not defined\n*/\nWidget.prototype.getVariable = function(name,options) {\n\toptions = options || {};\n\tvar actualParams = options.params || [],\n\t\tparentWidget = this.parentWidget;\n\t// Check for the variable defined in the parent widget (or an ancestor in the prototype chain)\n\tif(parentWidget && name in parentWidget.variables) {\n\t\tvar variable = parentWidget.variables[name],\n\t\t\tvalue = variable.value;\n\t\t// Substitute any parameters specified in the definition\n\t\tvalue = this.substituteVariableParameters(value,variable.params,actualParams);\n\t\tvalue = this.substituteVariableReferences(value);\n\t\treturn value;\n\t}\n\t// If the variable doesn't exist in the parent widget then look for a macro module\n\treturn this.evaluateMacroModule(name,actualParams,options.defaultValue);\n};\n\nWidget.prototype.substituteVariableParameters = function(text,formalParams,actualParams) {\n\tif(formalParams) {\n\t\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\t\tparamInfo, paramValue;\n\t\t// Step through each of the parameters in the macro definition\n\t\tfor(var p=0; p<formalParams.length; p++) {\n\t\t\t// Check if we've got a macro call parameter with the same name\n\t\t\tparamInfo = formalParams[p];\n\t\t\tparamValue = undefined;\n\t\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If not, use the next available anonymous macro call parameter\n\t\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\t\tnextAnonParameter++;\n\t\t\t}\n\t\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t\t}\n\t\t\t// If we've still not got a value, use the default, if any\n\t\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t\t// Replace any instances of this parameter\n\t\t\ttext = text.replace(new RegExp(\"\\\\$\" + $tw.utils.escapeRegExp(paramInfo.name) + \"\\\\$\",\"mg\"),paramValue);\n\t\t}\n\t}\n\treturn text;\n};\n\nWidget.prototype.substituteVariableReferences = function(text) {\n\tvar self = this;\n\treturn (text || \"\").replace(/\\$\\(([^\\)\\$]+)\\)\\$/g,function(match,p1,offset,string) {\n\t\treturn self.getVariable(p1,{defaultValue: \"\"});\n\t});\n};\n\nWidget.prototype.evaluateMacroModule = function(name,actualParams,defaultValue) {\n\tif($tw.utils.hop($tw.macros,name)) {\n\t\tvar macro = $tw.macros[name],\n\t\t\targs = [];\n\t\tif(macro.params.length > 0) {\n\t\t\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\t\t\tparamInfo, paramValue;\n\t\t\t// Step through each of the parameters in the macro definition\n\t\t\tfor(var p=0; p<macro.params.length; p++) {\n\t\t\t\t// Check if we've got a macro call parameter with the same name\n\t\t\t\tparamInfo = macro.params[p];\n\t\t\t\tparamValue = undefined;\n\t\t\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If not, use the next available anonymous macro call parameter\n\t\t\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\t\t\tnextAnonParameter++;\n\t\t\t\t}\n\t\t\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t\t\t}\n\t\t\t\t// If we've still not got a value, use the default, if any\n\t\t\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t\t\t// Save the parameter\n\t\t\t\targs.push(paramValue);\n\t\t\t}\n\t\t}\n\t\telse for(var i=0; i<actualParams.length; ++i) {\n\t\t\targs.push(actualParams[i].value);\n\t\t}\n\t\treturn macro.run.apply(this,args).toString();\n\t} else {\n\t\treturn defaultValue;\n\t}\n};\n\n/*\nCheck whether a given context variable value exists in the parent chain\n*/\nWidget.prototype.hasVariable = function(name,value) {\n\tvar node = this;\n\twhile(node) {\n\t\tif($tw.utils.hop(node.variables,name) && node.variables[name].value === value) {\n\t\t\treturn true;\n\t\t}\n\t\tnode = node.parentWidget;\n\t}\n\treturn false;\n};\n\n/*\nConstruct a qualifying string based on a hash of concatenating the values of a given variable in the parent chain\n*/\nWidget.prototype.getStateQualifier = function(name) {\n\tname = name || \"transclusion\";\n\tvar output = [],\n\t\tnode = this;\n\twhile(node && node.parentWidget) {\n\t\tif($tw.utils.hop(node.parentWidget.variables,name)) {\n\t\t\toutput.push(node.getVariable(name));\n\t\t}\n\t\tnode = node.parentWidget;\n\t}\n\treturn $tw.utils.hashString(output.join(\"\"));\n};\n\n/*\nCompute the current values of the attributes of the widget. Returns a hashmap of the names of the attributes that have changed\n*/\nWidget.prototype.computeAttributes = function() {\n\tvar changedAttributes = {},\n\t\tself = this,\n\t\tvalue;\n\t$tw.utils.each(this.parseTreeNode.attributes,function(attribute,name) {\n\t\tif(attribute.type === \"indirect\") {\n\t\t\tvalue = self.wiki.getTextReference(attribute.textReference,\"\",self.getVariable(\"currentTiddler\"));\n\t\t} else if(attribute.type === \"macro\") {\n\t\t\tvalue = self.getVariable(attribute.value.name,{params: attribute.value.params});\n\t\t} else { // String attribute\n\t\t\tvalue = attribute.value;\n\t\t}\n\t\t// Check whether the attribute has changed\n\t\tif(self.attributes[name] !== value) {\n\t\t\tself.attributes[name] = value;\n\t\t\tchangedAttributes[name] = true;\n\t\t}\n\t});\n\treturn changedAttributes;\n};\n\n/*\nCheck for the presence of an attribute\n*/\nWidget.prototype.hasAttribute = function(name) {\n\treturn $tw.utils.hop(this.attributes,name);\n};\n\n/*\nGet the value of an attribute\n*/\nWidget.prototype.getAttribute = function(name,defaultText) {\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\treturn this.attributes[name];\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nAssign the computed attributes of the widget to a domNode\noptions include:\nexcludeEventAttributes: ignores attributes whose name begins with \"on\"\n*/\nWidget.prototype.assignAttributes = function(domNode,options) {\n\toptions = options || {};\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(v,a) {\n\t\t// Check exclusions\n\t\tif(options.excludeEventAttributes && a.substr(0,2) === \"on\") {\n\t\t\tv = undefined;\n\t\t}\n\t\tif(v !== undefined) {\n\t\t\tvar b = a.split(\":\");\n\t\t\t// Setting certain attributes can cause a DOM error (eg xmlns on the svg element)\n\t\t\ttry {\n\t\t\t\tif (b.length == 2 && b[0] == \"xlink\"){\n\t\t\t\t\tdomNode.setAttributeNS(\"http://www.w3.org/1999/xlink\",b[1],v);\n\t\t\t\t} else {\n\t\t\t\t\tdomNode.setAttributeNS(null,a,v);\n\t\t\t\t}\n\t\t\t} catch(e) {\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nMake child widgets correspondng to specified parseTreeNodes\n*/\nWidget.prototype.makeChildWidgets = function(parseTreeNodes) {\n\tthis.children = [];\n\tvar self = this;\n\t$tw.utils.each(parseTreeNodes || (this.parseTreeNode && this.parseTreeNode.children),function(childNode) {\n\t\tself.children.push(self.makeChildWidget(childNode));\n\t});\n};\n\n/*\nConstruct the widget object for a parse tree node\n*/\nWidget.prototype.makeChildWidget = function(parseTreeNode) {\n\tvar WidgetClass = this.widgetClasses[parseTreeNode.type];\n\tif(!WidgetClass) {\n\t\tWidgetClass = this.widgetClasses.text;\n\t\tparseTreeNode = {type: \"text\", text: \"Undefined widget '\" + parseTreeNode.type + \"'\"};\n\t}\n\treturn new WidgetClass(parseTreeNode,{\n\t\twiki: this.wiki,\n\t\tvariables: {},\n\t\tparentWidget: this,\n\t\tdocument: this.document\n\t});\n};\n\n/*\nGet the next sibling of this widget\n*/\nWidget.prototype.nextSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index < this.parentWidget.children.length-1) {\n\t\t\treturn this.parentWidget.children[index+1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the previous sibling of this widget\n*/\nWidget.prototype.previousSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index > 0) {\n\t\t\treturn this.parentWidget.children[index-1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRender the children of this widget into the DOM\n*/\nWidget.prototype.renderChildren = function(parent,nextSibling) {\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\tchildWidget.render(parent,nextSibling);\n\t});\n};\n\n/*\nAdd a list of event listeners from an array [{type:,handler:},...]\n*/\nWidget.prototype.addEventListeners = function(listeners) {\n\tvar self = this;\n\t$tw.utils.each(listeners,function(listenerInfo) {\n\t\tself.addEventListener(listenerInfo.type,listenerInfo.handler);\n\t});\n};\n\n/*\nAdd an event listener\n*/\nWidget.prototype.addEventListener = function(type,handler) {\n\tvar self = this;\n\tif(typeof handler === \"string\") { // The handler is a method name on this widget\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn self[handler].call(self,event);\n\t\t};\n\t} else { // The handler is a function\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn handler.call(self,event);\n\t\t};\n\t}\n};\n\n/*\nDispatch an event to a widget. If the widget doesn't handle the event then it is also dispatched to the parent widget\n*/\nWidget.prototype.dispatchEvent = function(event) {\n\t// Dispatch the event if this widget handles it\n\tvar listener = this.eventListeners[event.type];\n\tif(listener) {\n\t\t// Don't propagate the event if the listener returned false\n\t\tif(!listener(event)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Dispatch the event to the parent widget\n\tif(this.parentWidget) {\n\t\treturn this.parentWidget.dispatchEvent(event);\n\t}\n\treturn true;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nRebuild a previously rendered widget\n*/\nWidget.prototype.refreshSelf = function() {\n\tvar nextSibling = this.findNextSiblingDomNode();\n\tthis.removeChildDomNodes();\n\tthis.render(this.parentDomNode,nextSibling);\n};\n\n/*\nRefresh all the children of a widget\n*/\nWidget.prototype.refreshChildren = function(changedTiddlers) {\n\tvar self = this,\n\t\trefreshed = false;\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\trefreshed = childWidget.refresh(changedTiddlers) || refreshed;\n\t});\n\treturn refreshed;\n};\n\n/*\nFind the next sibling in the DOM to this widget. This is done by scanning the widget tree through all next siblings and their descendents that share the same parent DOM node\n*/\nWidget.prototype.findNextSiblingDomNode = function(startIndex) {\n\t// Refer to this widget by its index within its parents children\n\tvar parent = this.parentWidget,\n\t\tindex = startIndex !== undefined ? startIndex : parent.children.indexOf(this);\nif(index === -1) {\n\tthrow \"node not found in parents children\";\n}\n\t// Look for a DOM node in the later siblings\n\twhile(++index < parent.children.length) {\n\t\tvar domNode = parent.children[index].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\t// Go back and look for later siblings of our parent if it has the same parent dom node\n\tvar grandParent = parent.parentWidget;\n\tif(grandParent && parent.parentDomNode === this.parentDomNode) {\n\t\tindex = grandParent.children.indexOf(parent);\n\t\treturn parent.findNextSiblingDomNode(index);\n\t}\n\treturn null;\n};\n\n/*\nFind the first DOM node generated by a widget or its children\n*/\nWidget.prototype.findFirstDomNode = function() {\n\t// Return the first dom node of this widget, if we've got one\n\tif(this.domNodes.length > 0) {\n\t\treturn this.domNodes[0];\n\t}\n\t// Otherwise, recursively call our children\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar domNode = this.children[t].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRemove any DOM nodes created by this widget or its children\n*/\nWidget.prototype.removeChildDomNodes = function() {\n\t// If this widget has directly created DOM nodes, delete them and exit. This assumes that any child widgets are contained within the created DOM nodes, which would normally be the case\n\tif(this.domNodes.length > 0) {\n\t\t$tw.utils.each(this.domNodes,function(domNode) {\n\t\t\tdomNode.parentNode.removeChild(domNode);\n\t\t});\n\t\tthis.domNodes = [];\n\t} else {\n\t\t// Otherwise, ask the child widgets to delete their DOM nodes\n\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\tchildWidget.removeChildDomNodes();\n\t\t});\n\t}\n};\n\n/*\nInvoke any action widgets that are immediate children of this widget\n*/\nWidget.prototype.invokeActions = function(event) {\n\tvar handled = false;\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar child = this.children[t];\n\t\tif(child.invokeAction && child.invokeAction(this,event)) {\n\t\t\thandled = true;\n\t\t}\n\t}\n\treturn handled;\n};\n\nexports.widget = Widget;\n\n})();\n",
"title": "$:/core/modules/widgets/widget.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/wiki.js": {
"text": "/*\\\ntitle: $:/core/modules/wiki.js\ntype: application/javascript\nmodule-type: wikimethod\n\nExtension methods for the $tw.Wiki object\n\nAdds the following properties to the wiki object:\n\n* `eventListeners` is a hashmap by type of arrays of listener functions\n* `changedTiddlers` is a hashmap describing changes to named tiddlers since wiki change events were last dispatched. Each entry is a hashmap containing two fields:\n\tmodified: true/false\n\tdeleted: true/false\n* `changeCount` is a hashmap by tiddler title containing a numerical index that starts at zero and is incremented each time a tiddler is created changed or deleted\n* `caches` is a hashmap by tiddler title containing a further hashmap of named cache objects. Caches are automatically cleared when a tiddler is modified or deleted\n* `globalCache` is a hashmap by cache name of cache objects that are cleared whenever any tiddler change occurs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar USER_NAME_TITLE = \"$:/status/UserName\";\n\n/*\nGet the value of a text reference. Text references can have any of these forms:\n\t<tiddlertitle>\n\t<tiddlertitle>!!<fieldname>\n\t!!<fieldname> - specifies a field of the current tiddlers\n\t<tiddlertitle>##<index>\n*/\nexports.getTextReference = function(textRef,defaultText,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tif(tr.field) {\n\t\tvar tiddler = this.getTiddler(title);\n\t\tif(tr.field === \"title\") { // Special case so we can return the title of a non-existent tiddler\n\t\t\treturn title;\n\t\t} else if(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\treturn tiddler.getFieldString(tr.field);\n\t\t} else {\n\t\t\treturn defaultText;\n\t\t}\n\t} else if(tr.index) {\n\t\treturn this.extractTiddlerDataItem(title,tr.index,defaultText);\n\t} else {\n\t\treturn this.getTiddlerText(title,defaultText);\n\t}\n};\n\nexports.setTextReference = function(textRef,value,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tthis.setText(title,tr.field,tr.index,value);\n};\n\nexports.setText = function(title,field,index,value) {\n\t// Check if it is a reference to a tiddler field\n\tif(index) {\n\t\tvar data = this.getTiddlerData(title,Object.create(null));\n\t\tdata[index] = value;\n\t\tthis.setTiddlerData(title,data,this.getModificationFields());\n\t} else {\n\t\tvar tiddler = this.getTiddler(title),\n\t\t\tfields = {title: title};\n\t\tfields[field || \"text\"] = value;\n\t\tthis.addTiddler(new $tw.Tiddler(tiddler,fields,this.getModificationFields()));\n\t}\n};\n\nexports.deleteTextReference = function(textRef,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle,tiddler,fields;\n\t// Check if it is a reference to a tiddler\n\tif(tr.title && !tr.field) {\n\t\tthis.deleteTiddler(tr.title);\n\t// Else check for a field reference\n\t} else if(tr.field) {\n\t\ttitle = tr.title || currTiddlerTitle;\n\t\ttiddler = this.getTiddler(title);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\tfields = Object.create(null);\n\t\t\tfields[tr.field] = undefined;\n\t\t\tthis.addTiddler(new $tw.Tiddler(tiddler,fields,this.getModificationFields()));\n\t\t}\n\t}\n};\n\nexports.addEventListener = function(type,listener) {\n\tthis.eventListeners = this.eventListeners || {};\n\tthis.eventListeners[type] = this.eventListeners[type] || [];\n\tthis.eventListeners[type].push(listener);\t\n};\n\nexports.removeEventListener = function(type,listener) {\n\tvar listeners = this.eventListeners[type];\n\tif(listeners) {\n\t\tvar p = listeners.indexOf(listener);\n\t\tif(p !== -1) {\n\t\t\tlisteners.splice(p,1);\n\t\t}\n\t}\n};\n\nexports.dispatchEvent = function(type /*, args */) {\n\tvar args = Array.prototype.slice.call(arguments,1),\n\t\tlisteners = this.eventListeners[type];\n\tif(listeners) {\n\t\tfor(var p=0; p<listeners.length; p++) {\n\t\t\tvar listener = listeners[p];\n\t\t\tlistener.apply(listener,args);\n\t\t}\n\t}\n};\n\n/*\nCauses a tiddler to be marked as changed, incrementing the change count, and triggers event handlers.\nThis method should be called after the changes it describes have been made to the wiki.tiddlers[] array.\n\ttitle: Title of tiddler\n\tisDeleted: defaults to false (meaning the tiddler has been created or modified),\n\t\ttrue if the tiddler has been deleted\n*/\nexports.enqueueTiddlerEvent = function(title,isDeleted) {\n\t// Record the touch in the list of changed tiddlers\n\tthis.changedTiddlers = this.changedTiddlers || Object.create(null);\n\tthis.changedTiddlers[title] = this.changedTiddlers[title] || Object.create(null);\n\tthis.changedTiddlers[title][isDeleted ? \"deleted\" : \"modified\"] = true;\n\t// Increment the change count\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\tthis.changeCount[title]++;\n\t} else {\n\t\tthis.changeCount[title] = 1;\n\t}\n\t// Trigger events\n\tthis.eventListeners = this.eventListeners || [];\n\tif(!this.eventsTriggered) {\n\t\tvar self = this;\n\t\t$tw.utils.nextTick(function() {\n\t\t\tvar changes = self.changedTiddlers;\n\t\t\tself.changedTiddlers = Object.create(null);\n\t\t\tself.eventsTriggered = false;\n\t\t\tif($tw.utils.count(changes) > 0) {\n\t\t\t\tself.dispatchEvent(\"change\",changes);\n\t\t\t}\n\t\t});\n\t\tthis.eventsTriggered = true;\n\t}\n};\n\nexports.getSizeOfTiddlerEventQueue = function() {\n\treturn $tw.utils.count(this.changedTiddlers);\n};\n\nexports.clearTiddlerEventQueue = function() {\n\tthis.changedTiddlers = Object.create(null);\n\tthis.changeCount = Object.create(null);\n};\n\nexports.getChangeCount = function(title) {\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\treturn this.changeCount[title];\n\t} else {\n\t\treturn 0;\n\t}\n};\n\n/*\nGenerate an unused title from the specified base\n*/\nexports.generateNewTitle = function(baseTitle,options) {\n\toptions = options || {};\n\tvar c = 0,\n\t\ttitle = baseTitle;\n\twhile(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) {\n\t\ttitle = baseTitle + \n\t\t\t(options.prefix || \" \") + \n\t\t\t(++c);\n\t}\n\treturn title;\n};\n\nexports.isSystemTiddler = function(title) {\n\treturn title.indexOf(\"$:/\") === 0;\n};\n\nexports.isTemporaryTiddler = function(title) {\n\treturn title.indexOf(\"$:/temp/\") === 0;\n};\n\nexports.isImageTiddler = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\t\t\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/vnd.tiddlywiki\"];\n\t\treturn !!contentTypeInfo && contentTypeInfo.flags.indexOf(\"image\") !== -1;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLike addTiddler() except it will silently reject any plugin tiddlers that are older than the currently loaded version. Returns true if the tiddler was imported\n*/\nexports.importTiddler = function(tiddler) {\n\tvar existingTiddler = this.getTiddler(tiddler.fields.title);\n\t// Check if we're dealing with a plugin\n\tif(tiddler && tiddler.hasField(\"plugin-type\") && tiddler.hasField(\"version\") && existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t// Reject the incoming plugin if it is older\n\t\tif($tw.utils.checkVersions(existingTiddler.fields.version,tiddler.fields.version)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Fall through to adding the tiddler\n\tthis.addTiddler(tiddler);\n\treturn true;\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is created\n*/\nexports.getCreationFields = function() {\n\tvar fields = {\n\t\t\tcreated: new Date()\n\t\t},\n\t\tcreator = this.getTiddlerText(USER_NAME_TITLE);\n\tif(creator) {\n\t\tfields.creator = creator;\n\t}\n\treturn fields;\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is modified\n*/\nexports.getModificationFields = function() {\n\tvar fields = Object.create(null),\n\t\tmodifier = this.getTiddlerText(USER_NAME_TITLE);\n\tfields.modified = new Date();\n\tif(modifier) {\n\t\tfields.modifier = modifier;\n\t}\n\treturn fields;\n};\n\n/*\nReturn a sorted array of tiddler titles. Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.getTiddlers = function(options) {\n\toptions = options || Object.create(null);\n\tvar self = this,\n\t\tsortField = options.sortField || \"title\",\n\t\ttiddlers = [], t, titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tif(options.includeSystem || !self.isSystemTiddler(title)) {\n\t\t\tif(!options.excludeTag || !tiddler.hasTag(options.excludeTag)) {\n\t\t\t\ttiddlers.push(tiddler);\n\t\t\t}\n\t\t}\n\t});\n\ttiddlers.sort(function(a,b) {\n\t\tvar aa = a.fields[sortField].toLowerCase() || \"\",\n\t\t\tbb = b.fields[sortField].toLowerCase() || \"\";\n\t\tif(aa < bb) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(aa > bb) {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n\tfor(t=0; t<tiddlers.length; t++) {\n\t\ttitles.push(tiddlers[t].fields.title);\n\t}\n\treturn titles;\n};\n\nexports.countTiddlers = function(excludeTag) {\n\tvar tiddlers = this.getTiddlers({excludeTag: excludeTag});\n\treturn $tw.utils.count(tiddlers);\n};\n\n/*\nReturns a function iterator(callback) that iterates through the specified titles, and invokes the callback with callback(tiddler,title)\n*/\nexports.makeTiddlerIterator = function(titles) {\n\tvar self = this;\n\tif(!$tw.utils.isArray(titles)) {\n\t\ttitles = Object.keys(titles);\n\t} else {\n\t\ttitles = titles.slice(0);\n\t}\n\treturn function(callback) {\n\t\ttitles.forEach(function(title) {\n\t\t\tcallback(self.getTiddler(title),title);\n\t\t});\n\t};\n};\n\n/*\nSort an array of tiddler titles by a specified field\n\ttitles: array of titles (sorted in place)\n\tsortField: name of field to sort by\n\tisDescending: true if the sort should be descending\n\tisCaseSensitive: true if the sort should consider upper and lower case letters to be different\n*/\nexports.sortTiddlers = function(titles,sortField,isDescending,isCaseSensitive,isNumeric) {\n\tvar self = this;\n\ttitles.sort(function(a,b) {\n\t\tif(sortField !== \"title\") {\n\t\t\tvar tiddlerA = self.getTiddler(a),\n\t\t\t\ttiddlerB = self.getTiddler(b);\n\t\t\tif(tiddlerA) {\n\t\t\t\ta = tiddlerA.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\ta = \"\";\n\t\t\t}\n\t\t\tif(tiddlerB) {\n\t\t\t\tb = tiddlerB.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\tb = \"\";\n\t\t\t}\n\t\t}\n\t\tif(isNumeric) {\n\t\t\ta = Number(a);\n\t\t\tb = Number(b);\n\t\t\treturn isDescending ? b - a : a - b;\n\t\t} else if($tw.utils.isDate(a) && $tw.utils.isDate(b)) {\n\t\t\treturn isDescending ? b - a : a - b;\n\t\t} else {\n\t\t\ta = String(a);\n\t\t\tb = String(b);\n\t\t\tif(!isCaseSensitive) {\n\t\t\t\ta = a.toLowerCase();\n\t\t\t\tb = b.toLowerCase();\n\t\t\t}\n\t\t\treturn isDescending ? b.localeCompare(a) : a.localeCompare(b);\n\t\t}\n\t});\n};\n\n/*\nFor every tiddler invoke a callback(title,tiddler) with `this` set to the wiki object. Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.forEachTiddler = function(/* [options,]callback */) {\n\tvar arg = 0,\n\t\toptions = arguments.length >= 2 ? arguments[arg++] : {},\n\t\tcallback = arguments[arg++],\n\t\ttitles = this.getTiddlers(options),\n\t\tt, tiddler;\n\tfor(t=0; t<titles.length; t++) {\n\t\ttiddler = this.getTiddler(titles[t]);\n\t\tif(tiddler) {\n\t\t\tcallback.call(this,tiddler.fields.title,tiddler);\n\t\t}\n\t}\n};\n\n/*\nReturn an array of tiddler titles that are directly linked from the specified tiddler\n*/\nexports.getTiddlerLinks = function(title) {\n\tvar self = this;\n\t// We'll cache the links so they only get computed if the tiddler changes\n\treturn this.getCacheForTiddler(title,\"links\",function() {\n\t\t// Parse the tiddler\n\t\tvar parser = self.parseTiddler(title);\n\t\t// Count up the links\n\t\tvar links = [],\n\t\t\tcheckParseTree = function(parseTree) {\n\t\t\t\tfor(var t=0; t<parseTree.length; t++) {\n\t\t\t\t\tvar parseTreeNode = parseTree[t];\n\t\t\t\t\tif(parseTreeNode.type === \"link\" && parseTreeNode.attributes.to && parseTreeNode.attributes.to.type === \"string\") {\n\t\t\t\t\t\tvar value = parseTreeNode.attributes.to.value;\n\t\t\t\t\t\tif(links.indexOf(value) === -1) {\n\t\t\t\t\t\t\tlinks.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(parseTreeNode.children) {\n\t\t\t\t\t\tcheckParseTree(parseTreeNode.children);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\tif(parser) {\n\t\t\tcheckParseTree(parser.tree);\n\t\t}\n\t\treturn links;\n\t});\n};\n\n/*\nReturn an array of tiddler titles that link to the specified tiddler\n*/\nexports.getTiddlerBacklinks = function(targetTitle) {\n\tvar self = this,\n\t\tbacklinks = [];\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\tif(links.indexOf(targetTitle) !== -1) {\n\t\t\tbacklinks.push(title);\n\t\t}\n\t});\n\treturn backlinks;\n};\n\n/*\nReturn a hashmap of tiddler titles that are referenced but not defined. Each value is the number of times the missing tiddler is referenced\n*/\nexports.getMissingTitles = function() {\n\tvar self = this,\n\t\tmissing = [];\n// We should cache the missing tiddler list, even if we recreate it every time any tiddler is modified\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tif((!self.tiddlerExists(link) && !self.isShadowTiddler(link)) && missing.indexOf(link) === -1) {\n\t\t\t\tmissing.push(link);\n\t\t\t}\n\t\t});\n\t});\n\treturn missing;\n};\n\nexports.getOrphanTitles = function() {\n\tvar self = this,\n\t\torphans = this.getTiddlers();\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tvar p = orphans.indexOf(link);\n\t\t\tif(p !== -1) {\n\t\t\t\torphans.splice(p,1);\n\t\t\t}\n\t\t});\n\t});\n\treturn orphans; // Todo\n};\n\n/*\nRetrieves a list of the tiddler titles that are tagged with a given tag\n*/\nexports.getTiddlersWithTag = function(tag) {\n\tvar self = this;\n\treturn this.getGlobalCache(\"taglist-\" + tag,function() {\n\t\tvar tagmap = self.getTagMap();\n\t\treturn self.sortByList(tagmap[tag],tag);\n\t});\n};\n\n/*\nGet a hashmap by tag of arrays of tiddler titles\n*/\nexports.getTagMap = function() {\n\tvar self = this;\n\treturn this.getGlobalCache(\"tagmap\",function() {\n\t\tvar tags = Object.create(null),\n\t\t\tstoreTags = function(tagArray,title) {\n\t\t\t\tif(tagArray) {\n\t\t\t\t\tfor(var index=0; index<tagArray.length; index++) {\n\t\t\t\t\t\tvar tag = tagArray[index];\n\t\t\t\t\t\tif($tw.utils.hop(tags,tag)) {\n\t\t\t\t\t\t\ttags[tag].push(title);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttags[tag] = [title];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\ttitle, tiddler;\n\t\t// Collect up all the tags\n\t\tself.eachShadow(function(tiddler,title) {\n\t\t\tif(!self.tiddlerExists(title)) {\n\t\t\t\ttiddler = self.getTiddler(title);\n\t\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t\t}\n\t\t});\n\t\tself.each(function(tiddler,title) {\n\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t});\n\t\treturn tags;\n\t});\n};\n\n/*\nLookup a given tiddler and return a list of all the tiddlers that include it in the specified list field\n*/\nexports.findListingsOfTiddler = function(targetTitle,fieldName) {\n\tfieldName = fieldName || \"list\";\n\tvar titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tvar list = $tw.utils.parseStringArray(tiddler.fields[fieldName]);\n\t\tif(list && list.indexOf(targetTitle) !== -1) {\n\t\t\ttitles.push(title);\n\t\t}\n\t});\n\treturn titles;\n};\n\n/*\nSorts an array of tiddler titles according to an ordered list\n*/\nexports.sortByList = function(array,listTitle) {\n\tvar list = this.getTiddlerList(listTitle);\n\tif(!array || array.length === 0) {\n\t\treturn [];\n\t} else {\n\t\tvar titles = [], t, title;\n\t\t// First place any entries that are present in the list\n\t\tfor(t=0; t<list.length; t++) {\n\t\t\ttitle = list[t];\n\t\t\tif(array.indexOf(title) !== -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Then place any remaining entries\n\t\tfor(t=0; t<array.length; t++) {\n\t\t\ttitle = array[t];\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Finally obey the list-before and list-after fields of each tiddler in turn\n\t\tvar sortedTitles = titles.slice(0);\n\t\tfor(t=0; t<sortedTitles.length; t++) {\n\t\t\ttitle = sortedTitles[t];\n\t\t\tvar currPos = titles.indexOf(title),\n\t\t\t\tnewPos = -1,\n\t\t\t\ttiddler = this.getTiddler(title);\n\t\t\tif(tiddler) {\n\t\t\t\tvar beforeTitle = tiddler.fields[\"list-before\"],\n\t\t\t\t\tafterTitle = tiddler.fields[\"list-after\"];\n\t\t\t\tif(beforeTitle === \"\") {\n\t\t\t\t\tnewPos = 0;\n\t\t\t\t} else if(beforeTitle) {\n\t\t\t\t\tnewPos = titles.indexOf(beforeTitle);\n\t\t\t\t} else if(afterTitle) {\n\t\t\t\t\tnewPos = titles.indexOf(afterTitle);\n\t\t\t\t\tif(newPos >= 0) {\n\t\t\t\t\t\t++newPos;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(newPos === -1) {\n\t\t\t\t\tnewPos = currPos;\n\t\t\t\t}\n\t\t\t\tif(newPos !== currPos) {\n\t\t\t\t\ttitles.splice(currPos,1);\n\t\t\t\t\tif(newPos >= currPos) {\n\t\t\t\t\t\tnewPos--;\n\t\t\t\t\t}\n\t\t\t\t\ttitles.splice(newPos,0,title);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\treturn titles;\n\t}\n};\n\nexports.getSubTiddler = function(title,subTiddlerTitle) {\n\tvar bundleInfo = this.getPluginInfo(title) || this.getTiddlerData(title);\n\tif(bundleInfo && bundleInfo.tiddlers) {\n\t\tvar subTiddler = bundleInfo.tiddlers[subTiddlerTitle];\n\t\tif(subTiddler) {\n\t\t\treturn new $tw.Tiddler(subTiddler);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRetrieve a tiddler as a JSON string of the fields\n*/\nexports.getTiddlerAsJson = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\tvar fields = Object.create(null);\n\t\t$tw.utils.each(tiddler.fields,function(value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\treturn JSON.stringify(fields);\n\t} else {\n\t\treturn JSON.stringify({title: title});\n\t}\n};\n\n/*\nGet the content of a tiddler as a JavaScript object. How this is done depends on the type of the tiddler:\n\napplication/json: the tiddler JSON is parsed into an object\napplication/x-tiddler-dictionary: the tiddler is parsed as sequence of name:value pairs\n\nOther types currently just return null.\n\ntitleOrTiddler: string tiddler title or a tiddler object\ndefaultData: default data to be returned if the tiddler is missing or doesn't contain data\n*/\nexports.getTiddlerData = function(titleOrTiddler,defaultData) {\n\tvar tiddler = titleOrTiddler,\n\t\tdata;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler && tiddler.fields.text) {\n\t\tswitch(tiddler.fields.type) {\n\t\t\tcase \"application/json\":\n\t\t\t\t// JSON tiddler\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse(tiddler.fields.text);\n\t\t\t\t} catch(ex) {\n\t\t\t\t\treturn defaultData;\n\t\t\t\t}\n\t\t\t\treturn data;\n\t\t\tcase \"application/x-tiddler-dictionary\":\n\t\t\t\treturn $tw.utils.parseFields(tiddler.fields.text);\n\t\t}\n\t}\n\treturn defaultData;\n};\n\n/*\nExtract an indexed field from within a data tiddler\n*/\nexports.extractTiddlerDataItem = function(titleOrTiddler,index,defaultText) {\n\tvar data = this.getTiddlerData(titleOrTiddler,Object.create(null)),\n\t\ttext;\n\tif(data && $tw.utils.hop(data,index)) {\n\t\ttext = data[index];\n\t}\n\tif(typeof text === \"string\" || typeof text === \"number\") {\n\t\treturn text.toString();\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nSet a tiddlers content to a JavaScript object. Currently this is done by setting the tiddler's type to \"application/json\" and setting the text to the JSON text of the data.\ntitle: title of tiddler\ndata: object that can be serialised to JSON\nfields: optional hashmap of additional tiddler fields to be set\n*/\nexports.setTiddlerData = function(title,data,fields) {\n\tvar existingTiddler = this.getTiddler(title),\n\t\tnewFields = {\n\t\t\ttitle: title\n\t};\n\tif(existingTiddler && existingTiddler.fields.type === \"application/x-tiddler-dictionary\") {\n\t\tnewFields.text = $tw.utils.makeTiddlerDictionary(data);\n\t} else {\n\t\tnewFields.type = \"application/json\";\n\t\tnewFields.text = JSON.stringify(data,null,$tw.config.preferences.jsonSpaces);\n\t}\n\tthis.addTiddler(new $tw.Tiddler(existingTiddler,fields,newFields,this.getModificationFields()));\n};\n\n/*\nReturn the content of a tiddler as an array containing each line\n*/\nexports.getTiddlerList = function(title,field,index) {\n\tif(index) {\n\t\treturn $tw.utils.parseStringArray(this.extractTiddlerDataItem(title,index,\"\"));\n\t}\n\tfield = field || \"list\";\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\treturn ($tw.utils.parseStringArray(tiddler.fields[field]) || []).slice(0);\n\t}\n\treturn [];\n};\n\n// Return a named global cache object. Global cache objects are cleared whenever a tiddler change occurs\nexports.getGlobalCache = function(cacheName,initializer) {\n\tthis.globalCache = this.globalCache || Object.create(null);\n\tif($tw.utils.hop(this.globalCache,cacheName)) {\n\t\treturn this.globalCache[cacheName];\n\t} else {\n\t\tthis.globalCache[cacheName] = initializer();\n\t\treturn this.globalCache[cacheName];\n\t}\n};\n\nexports.clearGlobalCache = function() {\n\tthis.globalCache = Object.create(null);\n};\n\n// Return the named cache object for a tiddler. If the cache doesn't exist then the initializer function is invoked to create it\nexports.getCacheForTiddler = function(title,cacheName,initializer) {\n\n// Temporarily disable caching so that tweakParseTreeNode() works\nreturn initializer();\n\n//\tthis.caches = this.caches || Object.create(null);\n//\tvar caches = this.caches[title];\n//\tif(caches && caches[cacheName]) {\n//\t\treturn caches[cacheName];\n//\t} else {\n//\t\tif(!caches) {\n//\t\t\tcaches = Object.create(null);\n//\t\t\tthis.caches[title] = caches;\n//\t\t}\n//\t\tcaches[cacheName] = initializer();\n//\t\treturn caches[cacheName];\n//\t}\n};\n\n// Clear all caches associated with a particular tiddler\nexports.clearCache = function(title) {\n\tthis.caches = this.caches || Object.create(null);\n\tif($tw.utils.hop(this.caches,title)) {\n\t\tdelete this.caches[title];\n\t}\n};\n\nexports.initParsers = function(moduleType) {\n\t// Install the parser modules\n\t$tw.Wiki.parsers = {};\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(\"parser\",function(title,module) {\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\t$tw.Wiki.parsers[f] = module[f]; // Store the parser class\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nParse a block of text of a specified MIME type\n\ttype: content type of text to be parsed\n\ttext: text\n\toptions: see below\nOptions include:\n\tparseAsInline: if true, the text of the tiddler will be parsed as an inline run\n\t_canonical_uri: optional string of the canonical URI of this content\n*/\nexports.old_parseText = function(type,text,options) {\n\toptions = options || {};\n\t// Select a parser\n\tvar Parser = $tw.Wiki.parsers[type];\n\tif(!Parser && $tw.config.fileExtensionInfo[type]) {\n\t\tParser = $tw.Wiki.parsers[$tw.config.fileExtensionInfo[type].type];\n\t}\n\tif(!Parser) {\n\t\tParser = $tw.Wiki.parsers[options.defaultType || \"text/vnd.tiddlywiki\"];\n\t}\n\tif(!Parser) {\n\t\treturn null;\n\t}\n\t// Return the parser instance\n\treturn new Parser(type,text,{\n\t\tparseAsInline: options.parseAsInline,\n\t\twiki: this,\n\t\t_canonical_uri: options._canonical_uri\n\t});\n};\n\n/*\nParse a tiddler according to its MIME type\n*/\nexports.old_parseTiddler = function(title,options) {\n\toptions = $tw.utils.extend({},options);\n\tvar cacheType = options.parseAsInline ? \"newInlineParseTree\" : \"newBlockParseTree\",\n\t\ttiddler = this.getTiddler(title),\n\t\tself = this;\n\treturn tiddler ? this.getCacheForTiddler(title,cacheType,function() {\n\t\t\tif(tiddler.hasField(\"_canonical_uri\")) {\n\t\t\t\toptions._canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t}\n\t\t\treturn self.old_parseText(tiddler.fields.type,tiddler.fields.text,options);\n\t\t}) : null;\n};\n\nvar tweakMacroDefinition = function(nodeList) {\n\tif(nodeList && nodeList[0] && nodeList[0].type === \"macrodef\") {\n\t\tnodeList[0].type = \"set\";\n\t\tnodeList[0].attributes = {\n\t\t\tname: {type: \"string\", value: nodeList[0].name},\n\t\t\tvalue: {type: \"string\", value: nodeList[0].text}\n\t\t};\n\t\tnodeList[0].children = nodeList.slice(1);\n\t\tnodeList.splice(1,nodeList.length-1);\n\t\ttweakMacroDefinition(nodeList[0].children);\n\t}\n};\n\nvar tweakParser = function(parser) {\n\t// Move any macro definitions to contain the body tree\n\ttweakMacroDefinition(parser.tree);\n};\n\nexports.parseText = function(type,text,options) {\n\tvar parser = this.old_parseText(type,text,options);\n\tif(parser) {\n\t\ttweakParser(parser);\n\t}\n\treturn parser;\n};\n\nexports.parseTiddler = function(title,options) {\n\tvar parser = this.old_parseTiddler(title,options);\n\tif(parser) {\n\t\ttweakParser(parser);\n\t}\n\treturn parser;\n};\n\nexports.parseTextReference = function(title,field,index,options) {\n\tvar tiddler,text;\n\tif(options.subTiddler) {\n\t\ttiddler = this.getSubTiddler(title,options.subTiddler);\n\t} else {\n\t\ttiddler = this.getTiddler(title);\n\t\tif(field === \"text\" || (!field && !index)) {\n\t\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\t\treturn this.parseTiddler(title,options);\n\t\t}\n\t}\n\tif(field === \"text\" || (!field && !index)) {\n\t\tif(tiddler && tiddler.fields) {\n\t\t\treturn this.parseText(tiddler.fields.type || \"text/vnd.tiddlywiki\",tiddler.fields.text,options);\t\t\t\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t} else if(field) {\n\t\tif(field === \"title\") {\n\t\t\ttext = title;\n\t\t} else {\n\t\t\tif(!tiddler || !tiddler.hasField(field)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\ttext = tiddler.fields[field];\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text.toString(),options);\n\t} else if(index) {\n\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\ttext = this.extractTiddlerDataItem(tiddler,index,undefined);\n\t\tif(text === undefined) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text,options);\n\t}\n};\n\n/*\nMake a widget tree for a parse tree\nparser: parser object\noptions: see below\nOptions include:\ndocument: optional document to use\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.makeWidget = function(parser,options) {\n\toptions = options || {};\n\tvar widgetNode = {\n\t\t\ttype: \"widget\",\n\t\t\tchildren: []\n\t\t},\n\t\tcurrWidgetNode = widgetNode;\n\t// Create set variable widgets for each variable\n\t$tw.utils.each(options.variables,function(value,name) {\n\t\tvar setVariableWidget = {\n\t\t\ttype: \"set\",\n\t\t\tattributes: {\n\t\t\t\tname: {type: \"string\", value: name},\n\t\t\t\tvalue: {type: \"string\", value: value}\n\t\t\t},\n\t\t\tchildren: []\n\t\t};\n\t\tcurrWidgetNode.children = [setVariableWidget];\n\t\tcurrWidgetNode = setVariableWidget;\n\t});\n\t// Add in the supplied parse tree nodes\n\tcurrWidgetNode.children = parser ? parser.tree : [];\n\t// Create the widget\n\treturn new widget.widget(widgetNode,{\n\t\twiki: this,\n\t\tdocument: options.document || $tw.fakeDocument,\n\t\tparentWidget: options.parentWidget\n\t});\n};\n\n/*\nMake a widget tree for transclusion\ntitle: target tiddler title\noptions: as for wiki.makeWidget() plus:\noptions.field: optional field to transclude (defaults to \"text\")\noptions.children: optional array of children for the transclude widget\n*/\nexports.makeTranscludeWidget = function(title,options) {\n\toptions = options || {};\n\tvar parseTree = {tree: [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"div\",\n\t\t\tchildren: [{\n\t\t\t\ttype: \"transclude\",\n\t\t\t\tattributes: {\n\t\t\t\t\ttiddler: {\n\t\t\t\t\t\tname: \"tiddler\",\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tvalue: title}},\n\t\t\t\tisBlock: !options.parseAsInline}]}\n\t]};\n\tif(options.field) {\n\t\tparseTree.tree[0].children[0].attributes.field = {type: \"string\", value: options.field};\n\t}\n\tif(options.children) {\n\t\tparseTree.tree[0].children[0].children = options.children;\n\t}\n\treturn $tw.wiki.makeWidget(parseTree,options);\n};\n\n/*\nParse text in a specified format and render it into another format\n\toutputType: content type for the output\n\ttextType: content type of the input text\n\ttext: input text\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderText = function(outputType,textType,text,options) {\n\toptions = options || {};\n\tvar parser = this.parseText(textType,text,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : container.textContent;\n};\n\n/*\nParse text from a tiddler and render it into another format\n\toutputType: content type for the output\n\ttitle: title of the tiddler to be rendered\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderTiddler = function(outputType,title,options) {\n\toptions = options || {};\n\tvar parser = this.parseTiddler(title,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : (outputType === \"text/plain-formatted\" ? container.formattedTextContent : container.textContent);\n};\n\n/*\nReturn an array of tiddler titles that match a search string\n\ttext: The text string to search for\n\toptions: see below\nOptions available:\n\tsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\n\texclude: An array of tiddler titles to exclude from the search\n\tinvert: If true returns tiddlers that do not contain the specified string\n\tcaseSensitive: If true forces a case sensitive search\n\tliteral: If true, searches for literal string, rather than separate search terms\n\tfield: If specified, restricts the search to the specified field\n*/\nexports.search = function(text,options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tt,\n\t\tinvert = !!options.invert;\n\t// Convert the search string into a regexp for each term\n\tvar terms, searchTermsRegExps,\n\t\tflags = options.caseSensitive ? \"\" : \"i\";\n\tif(options.literal) {\n\t\tif(text.length === 0) {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + $tw.utils.escapeRegExp(text) + \")\",flags)];\n\t\t}\n\t} else {\n\t\tterms = text.split(/ +/);\n\t\tif(terms.length === 1 && terms[0] === \"\") {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [];\n\t\t\tfor(t=0; t<terms.length; t++) {\n\t\t\t\tsearchTermsRegExps.push(new RegExp(\"(\" + $tw.utils.escapeRegExp(terms[t]) + \")\",flags));\n\t\t\t}\n\t\t}\n\t}\n\t// Function to check a given tiddler for the search term\n\tvar searchTiddler = function(title) {\n\t\tif(!searchTermsRegExps) {\n\t\t\treturn true;\n\t\t}\n\t\tvar tiddler = self.getTiddler(title);\n\t\tif(!tiddler) {\n\t\t\ttiddler = new $tw.Tiddler({title: title, text: \"\", type: \"text/vnd.tiddlywiki\"});\n\t\t}\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type] || $tw.config.contentTypeInfo[\"text/vnd.tiddlywiki\"],\n\t\t\tmatch;\n\t\tfor(var t=0; t<searchTermsRegExps.length; t++) {\n\t\t\tmatch = false;\n\t\t\tif(options.field) {\n\t\t\t\tmatch = searchTermsRegExps[t].test(tiddler.getFieldString(options.field));\n\t\t\t} else {\n\t\t\t\t// Search title, tags and body\n\t\t\t\tif(contentTypeInfo.encoding === \"utf8\") {\n\t\t\t\t\tmatch = match || searchTermsRegExps[t].test(tiddler.fields.text);\n\t\t\t\t}\n\t\t\t\tvar tags = tiddler.fields.tags ? tiddler.fields.tags.join(\"\\0\") : \"\";\n\t\t\t\tmatch = match || searchTermsRegExps[t].test(tags) || searchTermsRegExps[t].test(tiddler.fields.title);\n\t\t\t}\n\t\t\tif(!match) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t};\n\t// Loop through all the tiddlers doing the search\n\tvar results = [],\n\t\tsource = options.source || this.each;\n\tsource(function(tiddler,title) {\n\t\tif(searchTiddler(title) !== options.invert) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\t// Remove any of the results we have to exclude\n\tif(options.exclude) {\n\t\tfor(t=0; t<options.exclude.length; t++) {\n\t\t\tvar p = results.indexOf(options.exclude[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tresults.splice(p,1);\n\t\t\t}\n\t\t}\n\t}\n\treturn results;\n};\n\n/*\nTrigger a load for a tiddler if it is skinny. Returns the text, or undefined if the tiddler is missing, null if the tiddler is being lazily loaded.\n*/\nexports.getTiddlerText = function(title,defaultText) {\n\tvar tiddler = this.getTiddler(title);\n\t// Return undefined if the tiddler isn't found\n\tif(!tiddler) {\n\t\treturn defaultText;\n\t}\n\tif(tiddler.fields.text !== undefined) {\n\t\t// Just return the text if we've got it\n\t\treturn tiddler.fields.text;\n\t} else {\n\t\t// Tell any listeners about the need to lazily load this tiddler\n\t\tthis.dispatchEvent(\"lazyLoad\",title);\n\t\t// Indicate that the text is being loaded\n\t\treturn null;\n\t}\n};\n\n/*\nRead an array of browser File objects, invoking callback(tiddlerFieldsArray) once they're all read\n*/\nexports.readFiles = function(files,callback) {\n\tvar result = [],\n\t\toutstanding = files.length;\n\tfor(var f=0; f<files.length; f++) {\n\t\tthis.readFile(files[f],function(tiddlerFieldsArray) {\n\t\t\tresult.push.apply(result,tiddlerFieldsArray);\n\t\t\tif(--outstanding === 0) {\n\t\t\t\tcallback(result);\n\t\t\t}\n\t\t});\n\t}\n\treturn files.length;\n};\n\n/*\nRead a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFile = function(file,callback) {\n\t// Get the type, falling back to the filename extension\n\tvar self = this,\n\t\ttype = file.type;\n\tif(type === \"\" || !type) {\n\t\tvar dotPos = file.name.lastIndexOf(\".\");\n\t\tif(dotPos !== -1) {\n\t\t\tvar fileExtensionInfo = $tw.config.fileExtensionInfo[file.name.substr(dotPos)];\n\t\t\tif(fileExtensionInfo) {\n\t\t\t\ttype = fileExtensionInfo.type;\n\t\t\t}\n\t\t}\n\t}\n\t// Figure out if we're reading a binary file\n\tvar contentTypeInfo = $tw.config.contentTypeInfo[type],\n\t\tisBinary = contentTypeInfo ? contentTypeInfo.encoding === \"base64\" : false;\n\t// Log some debugging information\n\tif($tw.log.IMPORT) {\n\t\tconsole.log(\"Importing file '\" + file.name + \"', type: '\" + type + \"', isBinary: \" + isBinary);\n\t}\n\t// Create the FileReader\n\tvar reader = new FileReader();\n\t// Onload\n\treader.onload = function(event) {\n\t\t// Deserialise the file contents\n\t\tvar text = event.target.result,\n\t\t\ttiddlerFields = {title: file.name || \"Untitled\", type: type};\n\t\t// Are we binary?\n\t\tif(isBinary) {\n\t\t\t// The base64 section starts after the first comma in the data URI\n\t\t\tvar commaPos = text.indexOf(\",\");\n\t\t\tif(commaPos !== -1) {\n\t\t\t\ttiddlerFields.text = text.substr(commaPos+1);\n\t\t\t\tcallback([tiddlerFields]);\n\t\t\t}\n\t\t} else {\n\t\t\t// Check whether this is an encrypted TiddlyWiki file\n\t\t\tvar encryptedJson = $tw.utils.extractEncryptedStoreArea(text);\n\t\t\tif(encryptedJson) {\n\t\t\t\t// If so, attempt to decrypt it with the current password\n\t\t\t\t$tw.utils.decryptStoreAreaInteractive(encryptedJson,function(tiddlers) {\n\t\t\t\t\tcallback(tiddlers);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// Otherwise, just try to deserialise any tiddlers in the file\n\t\t\t\tcallback(self.deserializeTiddlers(type,text,tiddlerFields));\n\t\t\t}\n\t\t}\n\t};\n\t// Kick off the read\n\tif(isBinary) {\n\t\treader.readAsDataURL(file);\n\t} else {\n\t\treader.readAsText(file);\n\t}\n};\n\n/*\nFind any existing draft of a specified tiddler\n*/\nexports.findDraft = function(targetTitle) {\n\tvar draftTitle = undefined;\n\tthis.forEachTiddler({includeSystem: true},function(title,tiddler) {\n\t\tif(tiddler.fields[\"draft.title\"] && tiddler.fields[\"draft.of\"] === targetTitle) {\n\t\t\tdraftTitle = title;\n\t\t}\n\t});\n\treturn draftTitle;\n}\n\n/*\nCheck whether the specified draft tiddler has been modified\n*/\nexports.isDraftModified = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(!tiddler.isDraft()) {\n\t\treturn false;\n\t}\n\tvar ignoredFields = [\"created\", \"modified\", \"title\", \"draft.title\", \"draft.of\"],\n\t\torigTiddler = this.getTiddler(tiddler.fields[\"draft.of\"]);\n\tif(!origTiddler) {\n\t\treturn tiddler.fields.text !== \"\";\n\t}\n\treturn tiddler.fields[\"draft.title\"] !== tiddler.fields[\"draft.of\"] || !tiddler.isEqual(origTiddler,ignoredFields);\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\nhistoryTitle: title of history tiddler (defaults to $:/HistoryList)\n*/\nexports.addToHistory = function(title,fromPageRect,historyTitle) {\n\thistoryTitle = historyTitle || \"$:/HistoryList\";\n\tvar titles = $tw.utils.isArray(title) ? title : [title];\n\t// Add a new record to the top of the history stack\n\tvar historyList = this.getTiddlerData(historyTitle,[]);\n\t$tw.utils.each(titles,function(title) {\n\t\thistoryList.push({title: title, fromPageRect: fromPageRect});\n\t});\n\tthis.setTiddlerData(historyTitle,historyList,{\"current-tiddler\": titles[titles.length-1]});\n};\n\n/*\nInvoke the available upgrader modules\ntitles: array of tiddler titles to be processed\ntiddlers: hashmap by title of tiddler fields of pending import tiddlers. These can be modified by the upgraders. An entry with no fields indicates a tiddler that was pending import has been suppressed. When entries are added to the pending import the tiddlers hashmap may have entries that are not present in the titles array\nReturns a hashmap of messages keyed by tiddler title.\n*/\nexports.invokeUpgraders = function(titles,tiddlers) {\n\t// Collect up the available upgrader modules\n\tvar self = this;\n\tif(!this.upgraderModules) {\n\t\tthis.upgraderModules = [];\n\t\t$tw.modules.forEachModuleOfType(\"upgrader\",function(title,module) {\n\t\t\tif(module.upgrade) {\n\t\t\t\tself.upgraderModules.push(module);\n\t\t\t}\n\t\t});\n\t}\n\t// Invoke each upgrader in turn\n\tvar messages = {};\n\tfor(var t=0; t<this.upgraderModules.length; t++) {\n\t\tvar upgrader = this.upgraderModules[t],\n\t\t\tupgraderMessages = upgrader.upgrade(this,titles,tiddlers);\n\t\t$tw.utils.extend(messages,upgraderMessages);\n\t}\n\treturn messages;\n};\n\n})();\n",
"title": "$:/core/modules/wiki.js",
"type": "application/javascript",
"module-type": "wikimethod"
},
"$:/palettes/Blanca": {
"title": "$:/palettes/Blanca",
"name": "Blanca",
"description": "A clean white palette to let you focus",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #66cccc\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ffffff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #7897f3\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ccc\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #ffffff\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #7897f3\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #fffffffff\ntab-background: #eeeeee\ntab-border-selected: #cccccc\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffeedd\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: #eee\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #ff9900\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/Blue": {
"title": "$:/palettes/Blue",
"name": "Blue",
"description": "A blue theme",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333353\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ddddff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #5959c0\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: #ccccdd\ntab-border-selected: #ccccdd\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #eeeeff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #666666\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #ffffff\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #ffffff\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #5959c0\ntoolbar-new-button: #5eb95e\ntoolbar-options-button: rgb(128, 88, 165)\ntoolbar-save-button: #0e90d2\ntoolbar-info-button: #0e90d2\ntoolbar-edit-button: rgb(243, 123, 29)\ntoolbar-close-button: #dd514c\ntoolbar-delete-button: #dd514c\ntoolbar-cancel-button: rgb(243, 123, 29)\ntoolbar-done-button: #5eb95e\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/Muted": {
"title": "$:/palettes/Muted",
"name": "Muted",
"description": "Bright tiddlers on a muted background",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #6f6f70\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #29a6ee\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #c2c1c2\nsidebar-foreground-shadow: rgba(255,255,255,0)\nsidebar-foreground: #d3d2d4\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #6f6f70\nsidebar-tab-background: #666667\nsidebar-tab-border-selected: #999\nsidebar-tab-border: #515151\nsidebar-tab-divider: #999\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: #999\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #d1d0d2\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #d5ad34\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/Contrast": {
"title": "$:/palettes/Contrast",
"name": "Contrast",
"description": "High contrast and unambiguous",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #000000\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,0,0, 0.5)\nsidebar-foreground: #ffffff\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #ececec\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #999999\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #d5ad34\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/Rocker": {
"title": "$:/palettes/Rocker",
"name": "Rocker",
"description": "A dark theme",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #000\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #cc0000\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.0)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #000\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #ffbb99\nsidebar-tiddler-link-foreground: #cc0000\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffbb99\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #cc0000\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/Vanilla": {
"title": "$:/palettes/Vanilla",
"name": "Vanilla",
"description": "Pale and unobtrusive",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ececec\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #aaaaaa\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #ececec\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: #e4e4e4\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #999999\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/core/readme": {
"title": "$:/core/readme",
"text": "This plugin contains TiddlyWiki's core components, comprising:\n\n* JavaScript code modules\n* Icons\n* Templates needed to create TiddlyWiki's user interface\n* British English (''en-GB'') translations of the localisable strings used by the core\n"
},
"$:/core/templates/MOTW.html": {
"title": "$:/core/templates/MOTW.html",
"text": "\\rules only filteredtranscludeinline transcludeinline entity\n<!-- The following comment is called a MOTW comment and is necessary for the TiddlyIE Internet Explorer extension -->\n<!-- saved from url=(0021)http://tiddlywiki.com --> "
},
"$:/core/templates/alltiddlers.template.html": {
"title": "$:/core/templates/alltiddlers.template.html",
"type": "text/vnd.tiddlywiki-html",
"text": "<!-- This template is provided for backwards compatibility with older versions of TiddlyWiki -->\n\n<$set name=\"exportFilter\" value=\"[!is[system]sort[title]]\">\n\n{{$:/core/templates/exporters/StaticRiver}}\n\n</$set>\n"
},
"$:/core/templates/canonical-uri-external-image": {
"title": "$:/core/templates/canonical-uri-external-image",
"text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external images.\n\nChange the `./images/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./images/<$view field=\"title\" format=\"doubleurlencoded\"/>"
},
"$:/core/templates/css-tiddler": {
"title": "$:/core/templates/css-tiddler",
"text": "<!--\n\nThis template is used for saving CSS tiddlers as a style tag with data attributes representing the tiddler fields.\n\n-->`<style`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/css\">`<$view field=\"text\" format=\"text\" />`</style>`"
},
"$:/core/templates/exporters/CsvFile": {
"title": "$:/core/templates/exporters/CsvFile",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/CsvFile}}",
"extension": ".csv",
"text": "\\define renderContent()\n<$text text=<<csvtiddlers filter:\"\"\"$(exportFilter)$\"\"\" format:\"quoted-comma-sep\">>/>\n\\end\n<<renderContent>>\n"
},
"$:/core/templates/exporters/JsonFile": {
"title": "$:/core/templates/exporters/JsonFile",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/JsonFile}}",
"extension": ".json",
"text": "\\define renderContent()\n<$text text=<<jsontiddlers filter:\"\"\"$(exportFilter)$\"\"\">>/>\n\\end\n<<renderContent>>\n"
},
"$:/core/templates/exporters/StaticRiver": {
"title": "$:/core/templates/exporters/StaticRiver",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/StaticRiver}}",
"extension": ".html",
"text": "\\define tv-wikilink-template() #$uri_encoded$\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n<section class=\"tc-story-river\">\n{{$:/core/templates/exporters/StaticRiver/Content||$:/core/templates/html-tiddler}}\n</section>\n</body>\n</html>\n"
},
"$:/core/templates/exporters/StaticRiver/Content": {
"title": "$:/core/templates/exporters/StaticRiver/Content",
"text": "\\define renderContent()\n{{{ $(exportFilter)$ ||$:/core/templates/static-tiddler}}}\n\\end\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n<<renderContent>>\n</$importvariables>\n"
},
"$:/core/templates/exporters/TidFile": {
"title": "$:/core/templates/exporters/TidFile",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/TidFile}}",
"extension": ".tid",
"text": "\\define renderContent()\n{{{ $(exportFilter)$ +[limit[1]] ||$:/core/templates/tid-tiddler}}}\n\\end\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\"><<renderContent>></$importvariables>"
},
"$:/core/templates/html-div-tiddler": {
"title": "$:/core/templates/html-div-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as an HTML DIV tag with attributes representing the tiddler fields.\n\n-->`<div`<$fields template=' $name$=\"$encoded_value$\"'></$fields>`>\n<pre>`<$view field=\"text\" format=\"htmlencoded\" />`</pre>\n</div>`\n"
},
"$:/core/templates/html-tiddler": {
"title": "$:/core/templates/html-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as raw HTML\n\n--><$view field=\"text\" format=\"htmlwikified\" />"
},
"$:/core/templates/javascript-tiddler": {
"title": "$:/core/templates/javascript-tiddler",
"text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields.\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\">`<$view field=\"text\" format=\"text\" />`</script>`"
},
"$:/core/templates/module-tiddler": {
"title": "$:/core/templates/module-tiddler",
"text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields. The body of the tiddler is wrapped in a call to the `$tw.modules.define` function in order to define the body of the tiddler as a module\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\" data-module=\"yes\">$tw.modules.define(\"`<$view field=\"title\" format=\"jsencoded\" />`\",\"`<$view field=\"module-type\" format=\"jsencoded\" />`\",function(module,exports,require) {`<$view field=\"text\" format=\"text\" />`});\n</script>`"
},
"$:/core/templates/plain-text-tiddler": {
"title": "$:/core/templates/plain-text-tiddler",
"text": "<$view field=\"text\" format=\"text\" />"
},
"$:/core/save/all": {
"title": "$:/core/save/all",
"text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/empty": {
"title": "$:/core/save/empty",
"text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/lazy-images": {
"title": "$:/core/save/lazy-images",
"text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[!is[system]is[image]] +[sort[title]] \n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/templates/split-recipe": {
"title": "$:/core/templates/split-recipe",
"text": "<$list filter=\"[!is[system]]\">\ntiddler: <$view field=\"title\" format=\"urlencoded\"/>.tid\n</$list>\n"
},
"$:/core/templates/static-tiddler": {
"title": "$:/core/templates/static-tiddler",
"text": "<a name=<<currentTiddler>>>\n<$transclude tiddler=\"$:/core/ui/ViewTemplate\"/>\n</a>"
},
"$:/core/templates/static.area": {
"title": "$:/core/templates/static.area",
"text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n{{$:/core/templates/static.content||$:/core/templates/html-tiddler}}\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\nThis file contains an encrypted ~TiddlyWiki. Enable ~JavaScript and enter the decryption password when prompted.\n</$reveal>\n"
},
"$:/core/templates/static.content": {
"title": "$:/core/templates/static.content",
"type": "text/vnd.tiddlywiki",
"text": "<!-- For Google, and people without JavaScript-->\nThis [[TiddlyWiki|http://tiddlywiki.com]] contains the following tiddlers:\n\n<ul>\n<$list filter=<<saveTiddlerFilter>>>\n<li><$view field=\"title\" format=\"text\"></$view></li>\n</$list>\n</ul>\n"
},
"$:/core/templates/static.template.css": {
"title": "$:/core/templates/static.template.css",
"text": "{{$:/boot/boot.css||$:/core/templates/plain-text-tiddler}}\n\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n"
},
"$:/core/templates/static.template.html": {
"title": "$:/core/templates/static.template.html",
"type": "text/vnd.tiddlywiki-html",
"text": "\\define tv-wikilink-template() static/$uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n{{$:/core/ui/PageTemplate||$:/core/templates/html-tiddler}}\n</body>\n</html>\n"
},
"$:/core/templates/static.tiddler.html": {
"title": "$:/core/templates/static.tiddler.html",
"text": "\\define tv-wikilink-template() $uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n`<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"`{{$:/core/templates/version}}`\" />\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<link rel=\"stylesheet\" href=\"static.css\">\n<title>`{{$:/core/wiki/title}}`</title>\n</head>\n<body class=\"tc-body\">\n`{{$:/StaticBanner||$:/core/templates/html-tiddler}}`\n<section class=\"tc-story-river\">\n`<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n<$view tiddler=\"$:/core/ui/ViewTemplate\" format=\"htmlwikified\"/>\n</$importvariables>`\n</section>\n</body>\n</html>\n`"
},
"$:/core/templates/store.area.template.html": {
"title": "$:/core/templates/store.area.template.html",
"text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n`<div id=\"storeArea\" style=\"display:none;\">`\n<$list filter=<<saveTiddlerFilter>> template=\"$:/core/templates/html-div-tiddler\"/>\n`</div>`\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n`<!--~~ Encrypted tiddlers ~~-->`\n`<pre id=\"encryptedStoreArea\" type=\"text/plain\" style=\"display:none;\">`\n<$encrypt filter=<<saveTiddlerFilter>>/>\n`</pre>`\n</$reveal>"
},
"$:/core/templates/tid-tiddler": {
"title": "$:/core/templates/tid-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers in TiddlyWeb *.tid format\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>`\n`<$view field=\"text\" format=\"text\" />"
},
"$:/core/templates/tiddler-metadata": {
"title": "$:/core/templates/tiddler-metadata",
"text": "<!--\n\nThis template is used for saving tiddler metadata *.meta files\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>"
},
"$:/core/templates/tiddlywiki5.html": {
"title": "$:/core/templates/tiddlywiki5.html",
"text": "\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n{{$:/core/templates/MOTW.html}}<html>\n<head>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\t\t<!-- Force IE standards mode for Intranet and HTA - should be the first meta -->\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"application-name\" content=\"TiddlyWiki\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"copyright\" content=\"{{$:/core/copyright.txt}}\" />\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\n\n<!--~~ Raw markup ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/core/wiki/rawmarkup]] [all[shadows+tiddlers]tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}\n</head>\n<body class=\"tc-body\">\n<!--~~ Static styles ~~-->\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<!--~~ Static content for Google and browsers without JavaScript ~~-->\n<noscript>\n<div id=\"splashArea\">\n{{$:/core/templates/static.area}}\n</div>\n</noscript>\n<!--~~ Ordinary tiddlers ~~-->\n{{$:/core/templates/store.area.template.html}}\n<!--~~ Library modules ~~-->\n<div id=\"libraryModules\" style=\"display:none;\">\n{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/javascript-tiddler}}}\n</div>\n<!--~~ Boot kernel prologue ~~-->\n<div id=\"bootKernelPrefix\" style=\"display:none;\">\n{{ $:/boot/bootprefix.js ||$:/core/templates/javascript-tiddler}}\n</div>\n<!--~~ Boot kernel ~~-->\n<div id=\"bootKernel\" style=\"display:none;\">\n{{ $:/boot/boot.js ||$:/core/templates/javascript-tiddler}}\n</div>\n</body>\n</html>\n"
},
"$:/core/templates/version": {
"title": "$:/core/templates/version",
"text": "<<version>>"
},
"$:/core/templates/wikified-tiddler": {
"title": "$:/core/templates/wikified-tiddler",
"text": "<$transclude />"
},
"$:/core/ui/AdvancedSearch/Filter": {
"title": "$:/core/ui/AdvancedSearch/Filter",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Filter/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Filter/Hint>>\n\n<div class=\"tc-search tc-advanced-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/>\n<$button popup=<<qualify \"$:/state/filterDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n<$macrocall $name=\"exportButton\" exportFilter={{$:/temp/advancedsearch}} lingoBase=\"$:/language/Buttons/ExportTiddlers/\"/>\n</$reveal>\n</div>\n\n<div class=\"tc-block-dropdown-wrapper\">\n<$reveal state=<<qualify \"$:/state/filterDropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Filter]]\"><$link to={{!!filter}}><$transclude field=\"description\"/></$link>\n</$list>\n</div>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\n<div class=\"tc-search-results\">\n<<lingo Filter/Matches>>\n<$list filter={{$:/temp/advancedsearch}} template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$set>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Shadows": {
"title": "$:/core/ui/AdvancedSearch/Shadows",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Shadows/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Shadows/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[all[shadows]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo Shadows/Matches>>\n\n<$list filter=\"[all[shadows]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$set>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Standard": {
"title": "$:/core/ui/AdvancedSearch/Standard",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Standard/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Standard/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$set name=\"searchTiddler\" value=\"$:/temp/advancedsearch\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude/>\n</$list>\n\"\"\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}}/>\n</$list>\n</$set>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/System": {
"title": "$:/core/ui/AdvancedSearch/System",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/System/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo System/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[is[system]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo System/Matches>>\n\n<$list filter=\"[is[system]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$set>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
},
"$:/AdvancedSearch": {
"title": "$:/AdvancedSearch",
"text": "<div class=\"tc-advanced-search\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch]!has[draft.of]]\" \"$:/core/ui/AdvancedSearch/System\">>\n</div>\n"
},
"$:/core/ui/AlertTemplate": {
"title": "$:/core/ui/AlertTemplate",
"text": "<div class=\"tc-alert\">\n<div class=\"tc-alert-toolbar\">\n<$button message=\"tm-delete-tiddler\" class=\"tc-btn-invisible\">\n{{$:/core/images/delete-button}}</$button>\n</div>\n<div class=\"tc-alert-subtitle\">\n<$view field=\"component\"/> - <$view field=\"modified\" format=\"date\" template=\"0hh:0mm:0ss DD MM YYYY\"/> <$reveal type=\"nomatch\" state=\"!!count\" text=\"\"><span class=\"tc-alert-highlight\">(count: <$view field=\"count\"/>)</span></$reveal>\n</div>\n<div class=\"tc-alert-body\">\n\n<$transclude/>\n\n</div>\n</div>\n"
},
"$:/core/ui/BinaryWarning": {
"title": "$:/core/ui/BinaryWarning",
"text": "\\define lingo-base() $:/language/BinaryWarning/\n<div class=\"tc-binary-warning\">\n\n<<lingo Prompt>>\n\n</div>\n"
},
"$:/core/ui/ControlPanel/Advanced": {
"title": "$:/core/ui/ControlPanel/Advanced",
"tags": "$:/tags/ControlPanel/Info",
"caption": "{{$:/language/ControlPanel/Advanced/Caption}}",
"text": "{{$:/language/ControlPanel/Advanced/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Advanced]!has[draft.of]]\" \"$:/core/ui/ControlPanel/TiddlerFields\">>\n</div>\n"
},
"$:/core/ui/ControlPanel/Appearance": {
"title": "$:/core/ui/ControlPanel/Appearance",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Appearance/Caption}}",
"text": "{{$:/language/ControlPanel/Appearance/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Appearance]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Theme\">>\n</div>\n"
},
"$:/core/ui/ControlPanel/Basics": {
"title": "$:/core/ui/ControlPanel/Basics",
"tags": "$:/tags/ControlPanel/Info",
"caption": "{{$:/language/ControlPanel/Basics/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Basics/\n\n\\define show-filter-count(filter)\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $value=\"\"\"$filter$\"\"\"/>\n<$action-setfield $tiddler=\"$:/state/tab--1498284803\" $value=\"$:/core/ui/AdvancedSearch/Filter\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n''<$count filter=\"\"\"$filter$\"\"\"/>''\n{{$:/core/images/advanced-search-button}}\n</$button>\n\\end\n\n|<<lingo Version/Prompt>> |''<<version>>'' |\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/status/UserName\"><<lingo Username/Prompt>></$link> |<$edit-text tiddler=\"$:/status/UserName\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/AnimationDuration\"><<lingo AnimDuration/Prompt>></$link> |<$edit-text tiddler=\"$:/config/AnimationDuration\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit-text tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n|<$link to=\"$:/config/NewJournal/Title\"><<lingo NewJournal/Title/Prompt>></$link> |<$edit-text tiddler=\"$:/config/NewJournal/Title\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/NewJournal/Tags\"><<lingo NewJournal/Tags/Prompt>></$link> |<$edit-text tiddler=\"$:/config/NewJournal/Tags\" default=\"\" tag=\"input\"/> |\n|<<lingo Language/Prompt>> |{{$:/snippets/minilanguageswitcher}} |\n|<<lingo Tiddlers/Prompt>> |<<show-filter-count \"[!is[system]sort[title]]\">> |\n|<<lingo Tags/Prompt>> |<<show-filter-count \"[tags[]sort[title]]\">> |\n|<<lingo SystemTiddlers/Prompt>> |<<show-filter-count \"[is[system]sort[title]]\">> |\n|<<lingo ShadowTiddlers/Prompt>> |<<show-filter-count \"[all[shadows]sort[title]]\">> |\n|<<lingo OverriddenShadowTiddlers/Prompt>> |<<show-filter-count \"[is[tiddler]is[shadow]sort[title]]\">> |\n"
},
"$:/core/ui/ControlPanel/EditorTypes": {
"title": "$:/core/ui/ControlPanel/EditorTypes",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/EditorTypes/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/EditorTypes/\n\n<<lingo Hint>>\n\n<table>\n<tbody>\n<tr>\n<th><<lingo Type/Caption>></th>\n<th><<lingo Editor/Caption>></th>\n</tr>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/config/EditorTypeMappings/]sort[title]]\">\n<tr>\n<td>\n<$link>\n<$list filter=\"[all[current]removeprefix[$:/config/EditorTypeMappings/]]\">\n<$text text={{!!title}}/>\n</$list>\n</$link>\n</td>\n<td>\n<$view field=\"text\"/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ControlPanel/Info": {
"title": "$:/core/ui/ControlPanel/Info",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Info/Caption}}",
"text": "{{$:/language/ControlPanel/Info/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Info]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Basics\">>\n</div>\n"
},
"$:/core/ui/ControlPanel/LoadedModules": {
"title": "$:/core/ui/ControlPanel/LoadedModules",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/LoadedModules/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n<<lingo LoadedModules/Hint>>\n\n{{$:/snippets/modules}}\n"
},
"$:/core/ui/ControlPanel/Palette": {
"title": "$:/core/ui/ControlPanel/Palette",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Palette/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Palette/\n\n{{$:/snippets/paletteswitcher}}\n\n<$reveal type=\"nomatch\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"yes\"><<lingo ShowEditor/Caption>></$button>\n\n</$reveal>\n\n<$reveal type=\"match\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"no\"><<lingo HideEditor/Caption>></$button>\n{{$:/snippets/paletteeditor}}\n\n</$reveal>\n\n"
},
"$:/core/ui/ControlPanel/Plugins": {
"title": "$:/core/ui/ControlPanel/Plugins",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Plugins/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\\define popup-state-macro()\n$(qualified-state)$-$(currentTiddler)$\n\\end\n\\define tabs-state-macro()\n$(popup-state)$-$(pluginInfoType)$\n\\end\n\\define plugin-icon-title()\n$(currentTiddler)$/icon\n\\end\n\\define plugin-disable-title()\n$:/config/Plugins/Disabled/$(currentTiddler)$\n\\end\n\\define plugin-table-body(type,disabledMessage)\n<div class=\"tc-plugin-info-chunk\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<plugin-icon-title>>>\n<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\n</$transclude>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<div>\n''<$view field=\"description\"><$view field=\"title\"/></$view>'' $disabledMessage$\n</div>\n<div>\n<$view field=\"title\"/>\n</div>\n<div>\n<$view field=\"version\"/>\n</div>\n</div>\n\\end\n\\define plugin-table(type)\n<$set name=\"qualified-state\" value=<<qualify \"$:/state/plugin-info\">>>\n<$list filter=\"[!has[draft.of]plugin-type[$type$]sort[description]]\" emptyMessage=<<lingo \"Empty/Hint\">>>\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info\">\n<<plugin-table-body type:\"$type$\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info tc-plugin-info-disabled\">\n<<plugin-table-body type:\"$type$\" disabledMessage:\"<$macrocall $name='lingo' title='Disabled/Status'/>\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>>>\n<div class=\"tc-plugin-info-dropdown\">\n<$list filter=\"[all[current]] -[[$:/core]]\">\n<div style=\"float:right;\">\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"yes\" tooltip={{$:/language/ControlPanel/Plugins/Disable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Disable/Caption}}>\n<<lingo Disable/Caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"no\" tooltip={{$:/language/ControlPanel/Plugins/Enable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Enable/Caption}}>\n<<lingo Enable/Caption>>\n</$button>\n</$reveal>\n</div>\n</$list>\n<$reveal type=\"nomatch\" text=\"\" state=\"!!list\">\n<$macrocall $name=\"tabs\" state=<<tabs-state-macro>> tabsList={{!!list}} default=\"readme\" template=\"$:/core/ui/PluginInfo\"/>\n</$reveal>\n<$reveal type=\"match\" text=\"\" state=\"!!list\">\nNo information provided\n</$reveal>\n</div>\n</$reveal>\n</$set>\n</$list>\n</$set>\n\\end\n\n! <<lingo Plugin/Prompt>>\n\n<<plugin-table plugin>>\n\n! <<lingo Theme/Prompt>>\n\n<<plugin-table theme>>\n\n! <<lingo Language/Prompt>>\n\n<<plugin-table language>>\n"
},
"$:/core/ui/ControlPanel/Saving": {
"title": "$:/core/ui/ControlPanel/Saving",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Saving/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/\n\\define backupURL()\nhttp://$(userName)$.tiddlyspot.com/backup/\n\\end\n\\define backupLink()\n<$reveal type=\"nomatch\" state=\"$:/UploadName\" text=\"\">\n<$set name=\"userName\" value={{$:/UploadName}}>\n<a href=<<backupURL>>><$macrocall $name=\"backupURL\" $type=\"text/plain\" $output=\"text/plain\"/></a>\n</$set>\n</$reveal>\n\\end\n! <<lingo TiddlySpot/Heading>>\n\n<<lingo TiddlySpot/Description>>\n\n|<<lingo TiddlySpot/UserName>> |<$edit-text tiddler=\"$:/UploadName\" default=\"\" tag=\"input\"/> |\n|<<lingo TiddlySpot/Password>> |<$password name=\"upload\"/> |\n|<<lingo TiddlySpot/Backups>> |<<backupLink>> |\n\n''<<lingo TiddlySpot/Advanced/Heading>>''\n\n|<<lingo TiddlySpot/ServerURL>> |<$edit-text tiddler=\"$:/UploadURL\" default=\"\" tag=\"input\"/> |\n|<<lingo TiddlySpot/Filename>> |<$edit-text tiddler=\"$:/UploadFilename\" default=\"index.html\" tag=\"input\"/> |\n|<<lingo TiddlySpot/UploadDir>> |<$edit-text tiddler=\"$:/UploadDir\" default=\".\" tag=\"input\"/> |\n|<<lingo TiddlySpot/BackupDir>> |<$edit-text tiddler=\"$:/UploadBackupDir\" default=\".\" tag=\"input\"/> |\n\n<<lingo TiddlySpot/Hint>>\n\n"
},
"$:/core/ui/ControlPanel/Settings/AutoSave": {
"title": "$:/core/ui/ControlPanel/Settings/AutoSave",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/AutoSave/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/AutoSave/\n\n<$link to=\"$:/config/AutoSave\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"yes\"> <<lingo Enabled/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"no\"> <<lingo Disabled/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/NavigationAddressBar": {
"title": "$:/core/ui/ControlPanel/Settings/NavigationAddressBar",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/NavigationAddressBar/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationAddressBar/\n\n<$link to=\"$:/config/Navigation/UpdateAddressBar\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permaview\"> <<lingo Permaview/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permalink\"> <<lingo Permalink/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/NavigationHistory": {
"title": "$:/core/ui/ControlPanel/Settings/NavigationHistory",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/NavigationHistory/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationHistory/\n<$link to=\"$:/config/Navigation/UpdateHistory\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/ToolbarButtons": {
"title": "$:/core/ui/ControlPanel/Settings/ToolbarButtons",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtons/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtons/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Icons\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Toolbar/Icons\"><<lingo Icons/Description>></$link> </$checkbox>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Text\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Toolbar/Text\"><<lingo Text/Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings": {
"title": "$:/core/ui/ControlPanel/Settings",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Settings/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n<<lingo Hint>>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings]]\">\n\n<div style=\"border-top:1px solid #eee;\">\n\n!! <$link><$transclude field=\"caption\"/></$link>\n\n<$transclude/>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/ControlPanel/StoryView": {
"title": "$:/core/ui/ControlPanel/StoryView",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/StoryView/Caption}}",
"text": "{{$:/snippets/viewswitcher}}\n"
},
"$:/core/ui/ControlPanel/Theme": {
"title": "$:/core/ui/ControlPanel/Theme",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Theme/Caption}}",
"text": "{{$:/snippets/themeswitcher}}\n"
},
"$:/core/ui/ControlPanel/TiddlerFields": {
"title": "$:/core/ui/ControlPanel/TiddlerFields",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/TiddlerFields/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n\n<<lingo TiddlerFields/Hint>>\n\n{{$:/snippets/allfields}}"
},
"$:/core/ui/ControlPanel/Toolbars/EditToolbar": {
"title": "$:/core/ui/ControlPanel/Toolbars/EditToolbar",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/EditToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\\define config-title()\n$:/config/EditToolbarButtons/Visibility/$(listItem)$\n\\end\n\n{{$:/language/ControlPanel/Toolbars/EditToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditToolbar]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>> field=\"caption\"/> <i class=\"tc-muted\">-- <$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/ControlPanel/Toolbars/PageControls": {
"title": "$:/core/ui/ControlPanel/Toolbars/PageControls",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/PageControls/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n\n{{$:/language/ControlPanel/Toolbars/PageControls/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>> field=\"caption\"/> <i class=\"tc-muted\">-- <$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/ControlPanel/Toolbars/ViewToolbar": {
"title": "$:/core/ui/ControlPanel/Toolbars/ViewToolbar",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/ViewToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n\n{{$:/language/ControlPanel/Toolbars/ViewToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>> field=\"caption\"/> <i class=\"tc-muted\">-- <$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/ControlPanel/Toolbars": {
"title": "$:/core/ui/ControlPanel/Toolbars",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Toolbars/Caption}}",
"text": "{{$:/language/ControlPanel/Toolbars/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Toolbars]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Toolbars/ViewToolbar\" \"$:/state/tabs/controlpanel/toolbars\" \"tc-vertical\">>\n</div>\n"
},
"$:/ControlPanel": {
"title": "$:/ControlPanel",
"text": "<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Info\">>\n</div>\n"
},
"$:/core/ui/DefaultSearchResultList": {
"title": "$:/core/ui/DefaultSearchResultList",
"tags": "$:/tags/SearchResults",
"caption": "{{$:/language/Search/DefaultResults/Caption}}",
"text": "\\define searchResultList()\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[!is[system]search{$(searchTiddler)$}]\"/>\"\"\">\n\n{{$:/language/Search/Matches}}\n\n</$set>\n\n//<small>Title matches:</small>//\n\n<$list filter=\"[!is[system]search:title{$(searchTiddler)$}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n//<small>All matches:</small>//\n\n<$list filter=\"[!is[system]search{$(searchTiddler)$}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\\end\n<<searchResultList>>\n"
},
"$:/core/ui/EditTemplate/body": {
"title": "$:/core/ui/EditTemplate/body",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/Body/\n<$list filter=\"[is[current]has[_canonical_uri]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo External/Hint>>\n\n<a href={{!!_canonical_uri}}><$text text={{!!_canonical_uri}}/></a>\n\n<$edit-text field=\"_canonical_uri\" class=\"tc-edit-fields\"></$edit-text>\n\n</div>\n\n</$list>\n\n<$list filter=\"[is[current]!has[_canonical_uri]]\">\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\">\n\n<em class=\"tc-edit\"><<lingo Hint>></em> <$button type=\"set\" set=\"$:/state/showeditpreview\" setTo=\"no\"><<lingo Preview/Button/Hide>></$button>\n\n<div class=\"tc-tiddler-preview\">\n<div class=\"tc-tiddler-preview-preview\">\n\n<$transclude />\n\n</div>\n\n<div class=\"tc-tiddler-preview-edit\">\n<$edit field=\"text\" class=\"tc-edit-texteditor\" placeholder={{$:/language/EditTemplate/Body/Placeholder}}/>\n\n</div>\n\n</div>\n\n</$reveal>\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\">\n\n<em class=\"tc-edit\"><<lingo Hint>></em> <$button type=\"set\" set=\"$:/state/showeditpreview\" setTo=\"yes\"><<lingo Preview/Button/Show>></$button>\n<$edit field=\"text\" class=\"tc-edit-texteditor\" placeholder={{$:/language/EditTemplate/Body/Placeholder}}/>\n\n</$reveal>\n\n</$list>\n"
},
"$:/core/ui/EditTemplate/controls": {
"title": "$:/core/ui/EditTemplate/controls",
"tags": "$:/tags/EditTemplate",
"text": "\\define config-title()\n$:/config/EditToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title tc-tiddler-edit-title\">\n<$view field=\"title\"/>\n<span class=\"tc-tiddler-controls tc-titlebar\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$transclude tiddler=<<listItem>>/></$reveal></$list></span>\n<div style=\"clear: both;\"></div>\n</div>\n"
},
"$:/core/ui/EditTemplate/fields": {
"title": "$:/core/ui/EditTemplate/fields",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n\\define config-title()\n$:/config/EditTemplateFields/Visibility/$(currentField)$\n\\end\n\n\\define config-filter()\n[[hide]] -[title{$(config-title)$}]\n\\end\n\n\\define new-field(name,value)\n<$reveal type=\"nomatch\" text=\"\" default=\"\"\"$name$\"\"\">\n<$button>\n<$action-sendmessage $message=\"tm-add-field\" $name$=\"\"\"$value$\"\"\"/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldname\"/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldvalue\"/>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" text=\"\" default=\"\"\"$name$\"\"\">\n<$button>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n\\end\n\n<div class=\"tc-edit-fields\">\n<table class=\"tc-edit-fields\">\n<tbody>\n<$list filter=\"[all[current]fields[]] +[sort[title]]\" variable=\"currentField\">\n<$list filter=<<config-filter>> variable=\"temp\">\n<tr class=\"tc-edit-field\">\n<td class=\"tc-edit-field-name\">\n<$text text=<<currentField>>/>:</td>\n<td class=\"tc-edit-field-value\">\n<$edit-text tiddler=<<currentTiddler>> field=<<currentField>> placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}}/>\n</td>\n<td class=\"tc-edit-field-remove\">\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/EditTemplate/Field/Remove/Hint}} aria-label={{$:/language/EditTemplate/Field/Remove/Caption}}>\n<$action-deletefield $field=<<currentField>>/>\n{{$:/core/images/delete-button}}\n</$button>\n</td>\n</tr>\n</$list>\n</$list>\n</tbody>\n</table>\n</div>\n\n<$fieldmangler>\n<div class=\"tc-edit-field-add\">\n<em class=\"tc-edit\">\n<<lingo Fields/Add/Prompt>>\n</em>\n<span class=\"tc-edit-field-add-name\">\n<$edit-text tiddler=\"$:/temp/newfieldname\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Name/Placeholder}} class=\"tc-edit-texteditor\"/>\n</span>\n<span class=\"tc-edit-field-add-value\">\n<$edit-text tiddler=\"$:/temp/newfieldvalue\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} class=\"tc-edit-texteditor\"/>\n</span>\n<span class=\"tc-edit-field-add-button\">\n<$macrocall $name=\"new-field\" name={{$:/temp/newfieldname}} value={{$:/temp/newfieldvalue}}/>\n</span>\n</div>\n</$fieldmangler>\n\n"
},
"$:/core/ui/EditTemplate/shadow": {
"title": "$:/core/ui/EditTemplate/shadow",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/Shadow/\n<$list filter=\"[all[current]get[draft.of]is[shadow]!is[tiddler]]\">\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n</div>\n</$list>\n\n<$list filter=\"[all[current]get[draft.of]is[shadow]is[tiddler]]\">\n<div class=\"tc-message-box\">\n\n<<lingo OverriddenWarning>>\n\n</div>\n</$list>\n"
},
"$:/core/ui/EditTemplate/tags": {
"title": "$:/core/ui/EditTemplate/tags",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n\\define tag-styles()\nbackground-color:$(backgroundColor)$;\n\\end\n<div class=\"tc-edit-tags\">\n<$fieldmangler>\n<$list filter=\"[all[current]tags[]sort[title]]\" storyview=\"pop\"><$set name=\"backgroundColor\" value={{!!color}}><span style=<<tag-styles>> class=\"tc-tag-label\">\n<$view field=\"title\" format=\"text\" />\n<$button message=\"tm-remove-tag\" param={{!!title}} class=\"tc-btn-invisible tc-remove-tag-button\">×</$button></span>\n</$set>\n</$list>\n\n<div class=\"tc-edit-add-tag\">\n<span class=\"tc-add-tag-name\">\n<$edit-text tiddler=\"$:/temp/NewTagName\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Tags/Add/Placeholder}} focusPopup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-edit-texteditor tc-popup-handle\"/>\n</span> <$button popup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Tags/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Tags/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button> <span class=\"tc-add-tag-button\">\n<$button message=\"tm-add-tag\" param={{$:/temp/NewTagName}} set=\"$:/temp/NewTagName\" setTo=\"\" class=\"\">\n<<lingo Tags/Add/Button>>\n</$button>\n</span>\n</div>\n\n<div class=\"tc-block-dropdown-wrapper\">\n<$reveal state=<<qualify \"$:/state/popup/tags-auto-complete\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown\">\n<$linkcatcher set=\"$:/temp/NewTagName\" setTo=\"\" message=\"tm-add-tag\">\n<$list filter=\"[!is[shadow]tags[]search{$:/temp/NewTagName}sort[title]]\">\n<$link>\n<$set name=\"backgroundColor\" value={{!!color}}>\n<span style=<<tag-styles>> class=\"tc-tag-label\">\n<$view field=\"title\" format=\"text\"/>\n</span>\n</$set>\n</$link>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>\n</$fieldmangler>\n</div>"
},
"$:/core/ui/EditTemplate/title": {
"title": "$:/core/ui/EditTemplate/title",
"tags": "$:/tags/EditTemplate",
"text": "<$edit-text field=\"draft.title\" class=\"tc-titlebar tc-edit-texteditor\" focus=\"true\"/>"
},
"$:/core/ui/EditTemplate/type": {
"title": "$:/core/ui/EditTemplate/type",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n<div class=\"tc-type-selector\"><$fieldmangler>\n<em class=\"tc-edit\"><<lingo Type/Prompt>></em> <$edit-text field=\"type\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Type/Placeholder}} focusPopup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-edit-typeeditor tc-popup-handle\"/> <$button popup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Type/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Type/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button> <$button message=\"tm-remove-field\" param=\"type\" class=\"tc-btn-invisible tc-btn-icon\" tooltip={{$:/language/EditTemplate/Type/Delete/Hint}} aria-label={{$:/language/EditTemplate/Type/Delete/Caption}}>{{$:/core/images/delete-button}}</$button>\n</$fieldmangler></div>\n\n<div class=\"tc-block-dropdown-wrapper\">\n<$reveal state=<<qualify \"$:/state/popup/type-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$linkcatcher to=\"!!type\">\n<$list filter='[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]each[group]sort[group]]'>\n<div class=\"tc-dropdown-item\">\n<$text text={{!!group}}/>\n</div>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]group{!!group}] +[sort[description]]\"><$link to={{!!name}}><$view field=\"description\"/> (<$view field=\"name\"/>)</$link>\n</$list>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>"
},
"$:/core/ui/EditTemplate": {
"title": "$:/core/ui/EditTemplate",
"text": "\\define frame-classes()\ntc-tiddler-frame tc-tiddler-edit-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$\n\\end\n<div class=<<frame-classes>>>\n<$set name=\"storyTiddler\" value=<<currentTiddler>>>\n<$keyboard key=\"escape\" message=\"tm-cancel-tiddler\">\n<$keyboard key=\"ctrl+enter\" message=\"tm-save-tiddler\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditTemplate]!has[draft.of]]\" variable=\"listItem\">\n<$transclude tiddler=<<listItem>>/>\n</$list>\n</$keyboard>\n</$keyboard>\n</$set>\n</div>\n"
},
"$:/core/ui/Buttons/cancel": {
"title": "$:/core/ui/Buttons/cancel",
"tags": "$:/tags/EditToolbar",
"caption": "{{$:/core/images/cancel-button}} {{$:/language/Buttons/Cancel/Caption}}",
"description": "{{$:/language/Buttons/Cancel/Hint}}",
"text": "<$button message=\"tm-cancel-tiddler\" tooltip={{$:/language/Buttons/Cancel/Hint}} aria-label={{$:/language/Buttons/Cancel/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/cancel-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Cancel/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/delete": {
"title": "$:/core/ui/Buttons/delete",
"tags": "$:/tags/EditToolbar",
"caption": "{{$:/core/images/delete-button}} {{$:/language/Buttons/Delete/Caption}}",
"description": "{{$:/language/Buttons/Delete/Hint}}",
"text": "<$button message=\"tm-delete-tiddler\" tooltip={{$:/language/Buttons/Delete/Hint}} aria-label={{$:/language/Buttons/Delete/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/delete-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Delete/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/save": {
"title": "$:/core/ui/Buttons/save",
"tags": "$:/tags/EditToolbar",
"caption": "{{$:/core/images/done-button}} {{$:/language/Buttons/Save/Caption}}",
"description": "{{$:/language/Buttons/Save/Hint}}",
"text": "<$button message=\"tm-save-tiddler\" tooltip={{$:/language/Buttons/Save/Hint}} aria-label={{$:/language/Buttons/Save/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/done-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Save/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/Filters/AllTags": {
"title": "$:/core/Filters/AllTags",
"tags": "$:/tags/Filter",
"filter": "[tags[]!is[system]sort[title]]",
"description": "{{$:/language/Filters/AllTags}}",
"text": ""
},
"$:/core/Filters/AllTiddlers": {
"title": "$:/core/Filters/AllTiddlers",
"tags": "$:/tags/Filter",
"filter": "[!is[system]sort[title]]",
"description": "{{$:/language/Filters/AllTiddlers}}",
"text": ""
},
"$:/core/Filters/Drafts": {
"title": "$:/core/Filters/Drafts",
"tags": "$:/tags/Filter",
"filter": "[has[draft.of]sort[title]]",
"description": "{{$:/language/Filters/Drafts}}",
"text": ""
},
"$:/core/Filters/Missing": {
"title": "$:/core/Filters/Missing",
"tags": "$:/tags/Filter",
"filter": "[all[missing]sort[title]]",
"description": "{{$:/language/Filters/Missing}}",
"text": ""
},
"$:/core/Filters/Orphans": {
"title": "$:/core/Filters/Orphans",
"tags": "$:/tags/Filter",
"filter": "[all[orphans]sort[title]]",
"description": "{{$:/language/Filters/Orphans}}",
"text": ""
},
"$:/core/Filters/OverriddenShadowTiddlers": {
"title": "$:/core/Filters/OverriddenShadowTiddlers",
"tags": "$:/tags/Filter",
"filter": "[is[shadow]]",
"description": "{{$:/language/Filters/OverriddenShadowTiddlers}}",
"text": ""
},
"$:/core/Filters/RecentSystemTiddlers": {
"title": "$:/core/Filters/RecentSystemTiddlers",
"tags": "$:/tags/Filter",
"filter": "[has[modified]!sort[modified]limit[50]]",
"description": "{{$:/language/Filters/RecentSystemTiddlers}}",
"text": ""
},
"$:/core/Filters/RecentTiddlers": {
"title": "$:/core/Filters/RecentTiddlers",
"tags": "$:/tags/Filter",
"filter": "[!is[system]has[modified]!sort[modified]limit[50]]",
"description": "{{$:/language/Filters/RecentTiddlers}}",
"text": ""
},
"$:/core/Filters/ShadowTiddlers": {
"title": "$:/core/Filters/ShadowTiddlers",
"tags": "$:/tags/Filter",
"filter": "[all[shadows]sort[title]]",
"description": "{{$:/language/Filters/ShadowTiddlers}}",
"text": ""
},
"$:/core/Filters/SystemTags": {
"title": "$:/core/Filters/SystemTags",
"tags": "$:/tags/Filter",
"filter": "[all[shadows+tiddlers]tags[]is[system]sort[title]]",
"description": "{{$:/language/Filters/SystemTags}}",
"text": ""
},
"$:/core/Filters/SystemTiddlers": {
"title": "$:/core/Filters/SystemTiddlers",
"tags": "$:/tags/Filter",
"filter": "[is[system]sort[title]]",
"description": "{{$:/language/Filters/SystemTiddlers}}",
"text": ""
},
"$:/core/ui/ImportListing": {
"title": "$:/core/ui/ImportListing",
"text": "\\define lingo-base() $:/language/Import/\n\\define messageField()\nmessage-$(payloadTiddler)$\n\\end\n\\define selectionField()\nselection-$(payloadTiddler)$\n\\end\n\\define previewPopupState()\n$(currentTiddler)$!!popup-$(payloadTiddler)$\n\\end\n<table>\n<tbody>\n<tr>\n<th>\n<<lingo Listing/Select/Caption>>\n</th>\n<th>\n<<lingo Listing/Title/Caption>>\n</th>\n<th>\n<<lingo Listing/Status/Caption>>\n</th>\n</tr>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" variable=\"payloadTiddler\">\n<tr>\n<td>\n<$checkbox field=<<selectionField>> checked=\"checked\" unchecked=\"unchecked\" default=\"checked\"/>\n</td>\n<td>\n<$reveal type=\"nomatch\" state=<<previewPopupState>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<previewPopupState>> setTo=\"yes\">\n{{$:/core/images/right-arrow}} <$text text=<<payloadTiddler>>/>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<previewPopupState>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<previewPopupState>> setTo=\"no\">\n{{$:/core/images/down-arrow}} <$text text=<<payloadTiddler>>/>\n</$button>\n</$reveal>\n</td>\n<td>\n<$view field=<<messageField>>/>\n</td>\n</tr>\n<tr>\n<td colspan=\"3\">\n<$reveal type=\"match\" text=\"yes\" state=<<previewPopupState>>>\n<$transclude subtiddler=<<payloadTiddler>> mode=\"block\"/>\n</$reveal>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ListItemTemplate": {
"title": "$:/core/ui/ListItemTemplate",
"text": "<div class=\"tc-menu-list-item\">\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</div>"
},
"$:/core/ui/MissingTemplate": {
"title": "$:/core/ui/MissingTemplate",
"text": "<div class=\"tc-tiddler-missing\">\n<$button popup=<<qualify \"$:/state/popup/missing\">> class=\"tc-btn-invisible tc-missing-tiddler-label\">\n<$view field=\"title\" format=\"text\" />\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/missing\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n<hr>\n<$list filter=\"[all[current]backlinks[]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n</div>\n"
},
"$:/core/ui/MoreSideBar/All": {
"title": "$:/core/ui/MoreSideBar/All",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/All/Caption}}",
"text": "<$list filter=\"[!is[system]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Drafts": {
"title": "$:/core/ui/MoreSideBar/Drafts",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Drafts/Caption}}",
"text": "<$list filter=\"[has[draft.of]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Missing": {
"title": "$:/core/ui/MoreSideBar/Missing",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Missing/Caption}}",
"text": "<$list filter=\"[all[missing]sort[title]]\" template=\"$:/core/ui/MissingTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Orphans": {
"title": "$:/core/ui/MoreSideBar/Orphans",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Orphans/Caption}}",
"text": "<$list filter=\"[all[orphans]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Recent": {
"title": "$:/core/ui/MoreSideBar/Recent",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Recent/Caption}}",
"text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
},
"$:/core/ui/MoreSideBar/Shadows": {
"title": "$:/core/ui/MoreSideBar/Shadows",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Shadows/Caption}}",
"text": "<$list filter=\"[all[shadows]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/System": {
"title": "$:/core/ui/MoreSideBar/System",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/System/Caption}}",
"text": "<$list filter=\"[is[system]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Tags": {
"title": "$:/core/ui/MoreSideBar/Tags",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Tags/Caption}}",
"text": "<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n{{$:/core/ui/Buttons/tag-manager}}\n\n</$set>\n\n</$set>\n\n</$set>\n\n<$list filter=\"[tags[]!is[system]sort[title]]\">\n\n<$transclude tiddler=\"$:/core/ui/TagTemplate\"/> <small class=\"tc-menu-list-count\"><$count filter=\"[all[current]tagging[]]\"/></small>\n\n</$list>\n\n<hr class=\"tc-untagged-separator\">\n\n{{$:/core/ui/UntaggedTemplate}} <small class=\"tc-menu-list-count\"><$count filter=\"[untagged[]!is[system]] -[tags[]]\"/></small>\n"
},
"$:/core/ui/MoreSideBar/Types": {
"title": "$:/core/ui/MoreSideBar/Types",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Types/Caption}}",
"text": "<$list filter=\"[!is[system]has[type]each[type]sort[type]] -[type[text/vnd.tiddlywiki]]\">\n<div class=\"tc-menu-list-item\">\n<$view field=\"type\"/>\n<$list filter=\"[type{!!type}!is[system]sort[title]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}><$view field=\"title\"/></$link>\n</div>\n</$list>\n</div>\n</$list>\n"
},
"$:/core/ui/Buttons/advanced-search": {
"title": "$:/core/ui/Buttons/advanced-search",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/advanced-search-button}} {{$:/language/Buttons/AdvancedSearch/Caption}}",
"description": "{{$:/language/Buttons/AdvancedSearch/Hint}}",
"text": "<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/advanced-search-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/AdvancedSearch/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/close-all": {
"title": "$:/core/ui/Buttons/close-all",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/close-all-button}} {{$:/language/Buttons/CloseAll/Caption}}",
"description": "{{$:/language/Buttons/CloseAll/Hint}}",
"text": "<$button message=\"tm-close-all-tiddlers\" tooltip={{$:/language/Buttons/CloseAll/Hint}} aria-label={{$:/language/Buttons/CloseAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/close-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/CloseAll/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/control-panel": {
"title": "$:/core/ui/Buttons/control-panel",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/options-button}} {{$:/language/Buttons/ControlPanel/Caption}}",
"description": "{{$:/language/Buttons/ControlPanel/Hint}}",
"text": "<$button to=\"$:/ControlPanel\" tooltip={{$:/language/Buttons/ControlPanel/Hint}} aria-label={{$:/language/Buttons/ControlPanel/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/options-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/ControlPanel/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/encryption": {
"title": "$:/core/ui/Buttons/encryption",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/locked-padlock}} {{$:/language/Buttons/Encryption/Caption}}",
"description": "{{$:/language/Buttons/Encryption/Hint}}",
"text": "<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-clear-password\" tooltip={{$:/language/Buttons/Encryption/ClearPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/ClearPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/locked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Encryption/ClearPassword/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-set-password\" tooltip={{$:/language/Buttons/Encryption/SetPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/SetPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/unlocked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Encryption/SetPassword/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>"
},
"$:/core/ui/Buttons/export-page": {
"title": "$:/core/ui/Buttons/export-page",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportPage/Caption}}",
"description": "{{$:/language/Buttons/ExportPage/Hint}}",
"text": "<$macrocall $name=\"exportButton\" exportFilter=\"[!is[system]sort[title]]\" lingoBase=\"$:/language/Buttons/ExportPage/\"/>"
},
"$:/core/ui/Buttons/full-screen": {
"title": "$:/core/ui/Buttons/full-screen",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/full-screen-button}} {{$:/language/Buttons/FullScreen/Caption}}",
"description": "{{$:/language/Buttons/FullScreen/Hint}}",
"text": "<$button message=\"tm-full-screen\" tooltip={{$:/language/Buttons/FullScreen/Hint}} aria-label={{$:/language/Buttons/FullScreen/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/full-screen-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FullScreen/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/home": {
"title": "$:/core/ui/Buttons/home",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/home-button}} {{$:/language/Buttons/Home/Caption}}",
"description": "{{$:/language/Buttons/Home/Hint}}",
"text": "<$button message=\"tm-home\" tooltip={{$:/language/Buttons/Home/Hint}} aria-label={{$:/language/Buttons/Home/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/home-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Home/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/import": {
"title": "$:/core/ui/Buttons/import",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/import-button}} {{$:/language/Buttons/Import/Caption}}",
"description": "{{$:/language/Buttons/Import/Hint}}",
"text": "<div class=\"tc-file-input-wrapper\">\n<$button tooltip={{$:/language/Buttons/Import/Hint}} aria-label={{$:/language/Buttons/Import/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/import-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Import/Caption}}/></span>\n</$list>\n</$button>\n<$browse tooltip={{$:/language/Buttons/Import/Hint}}/>\n</div>"
},
"$:/core/ui/Buttons/language": {
"title": "$:/core/ui/Buttons/language",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/globe}} {{$:/language/Buttons/Language/Caption}}",
"description": "{{$:/language/Buttons/Language/Hint}}",
"text": "\\define flag-title()\n$(languagePluginTitle)$/icon\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/language\">> tooltip={{$:/language/Buttons/Language/Hint}} aria-label={{$:/language/Buttons/Language/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value={{$:/language}}>\n<$image source=<<flag-title>>/>\n</$set>\n</span>\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Language/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/language\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down tc-drop-down-language-chooser\">\n<$linkcatcher to=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[description]]\">\n<$link>\n<span class=\"tc-drop-down-bullet\">\n<$reveal type=\"match\" state=\"$:/language\" text=<<currentTiddler>>>\n•\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/language\" text=<<currentTiddler>>>\n \n</$reveal>\n</span>\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value=<<currentTiddler>>>\n<$transclude subtiddler=<<flag-title>>>\n<$list filter=\"[all[current]field:title[$:/languages/en-GB]]\">\n<$transclude tiddler=\"$:/languages/en-GB/icon\"/>\n</$list>\n</$transclude>\n</$set>\n</span>\n<$view field=\"description\">\n<$view field=\"name\">\n<$view field=\"title\"/>\n</$view>\n</$view>\n</$link>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>"
},
"$:/core/ui/Buttons/more-page-actions": {
"title": "$:/core/ui/Buttons/more-page-actions",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
"description": "{{$:/language/Buttons/More/Hint}}",
"text": "\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/More/Caption}}/></span>\n</$list>\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"below\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]] -[[$:/core/ui/Buttons/more-page-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$reveal>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>"
},
"$:/core/ui/Buttons/new-journal": {
"title": "$:/core/ui/Buttons/new-journal",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournal/Caption}}",
"description": "{{$:/language/Buttons/NewJournal/Hint}}",
"text": "\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournal/Hint}} aria-label={{$:/language/Buttons/NewJournal/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<now \"$(journalTitleTemplate)$\">> tags=\"$(journalTags)$\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewJournal/Caption}}/></span>\n</$list>\n</$button>\n\\end\n<$set name=\"journalTitleTemplate\" value={{$:/config/NewJournal/Title}}>\n<$set name=\"journalTags\" value={{$:/config/NewJournal/Tags}}>\n<<journalButton>>\n</$set></$set>"
},
"$:/core/ui/Buttons/new-tiddler": {
"title": "$:/core/ui/Buttons/new-tiddler",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/new-button}} {{$:/language/Buttons/NewTiddler/Caption}}",
"description": "{{$:/language/Buttons/NewTiddler/Hint}}",
"text": "<$button message=\"tm-new-tiddler\" tooltip={{$:/language/Buttons/NewTiddler/Hint}} aria-label={{$:/language/Buttons/NewTiddler/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/new-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewTiddler/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/refresh": {
"title": "$:/core/ui/Buttons/refresh",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/refresh-button}} {{$:/language/Buttons/Refresh/Caption}}",
"description": "{{$:/language/Buttons/Refresh/Hint}}",
"text": "<$button message=\"tm-browser-refresh\" tooltip={{$:/language/Buttons/Refresh/Hint}} aria-label={{$:/language/Buttons/Refresh/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/refresh-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Refresh/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/save-wiki": {
"title": "$:/core/ui/Buttons/save-wiki",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/save-button}} {{$:/language/Buttons/SaveWiki/Caption}}",
"description": "{{$:/language/Buttons/SaveWiki/Hint}}",
"text": "<$button message=\"tm-save-wiki\" param={{$:/config/SaveWikiButton/Template}} tooltip={{$:/language/Buttons/SaveWiki/Hint}} aria-label={{$:/language/Buttons/SaveWiki/Caption}} class=<<tv-config-toolbar-class>>>\n<span class=\"tc-dirty-indicator\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/save-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/SaveWiki/Caption}}/></span>\n</$list>\n</span>\n</$button>"
},
"$:/core/ui/Buttons/storyview": {
"title": "$:/core/ui/Buttons/storyview",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/storyview-classic}} {{$:/language/Buttons/StoryView/Caption}}",
"description": "{{$:/language/Buttons/StoryView/Hint}}",
"text": "\\define icon()\n$:/core/images/storyview-$(storyview)$\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/storyview\">> tooltip={{$:/language/Buttons/StoryView/Hint}} aria-label={{$:/language/Buttons/StoryView/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n<$set name=\"storyview\" value={{$:/view}}>\n<$transclude tiddler=<<icon>>/>\n</$set>\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/StoryView/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/storyview\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$linkcatcher to=\"$:/view\">\n<$list filter=\"[storyviews[]]\" variable=\"storyview\">\n<$link to=<<storyview>>>\n<span class=\"tc-drop-down-bullet\">\n<$reveal type=\"match\" state=\"$:/view\" text=<<storyview>>>\n•\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/view\" text=<<storyview>>>\n \n</$reveal>\n</span>\n<$transclude tiddler=<<icon>>/>\n<$text text=<<storyview>>/></$link>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>"
},
"$:/core/ui/Buttons/tag-manager": {
"title": "$:/core/ui/Buttons/tag-manager",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/tag-button}} {{$:/language/Buttons/TagManager/Caption}}",
"description": "{{$:/language/Buttons/TagManager/Hint}}",
"text": "<$button to=\"$:/TagManager\" tooltip={{$:/language/Buttons/TagManager/Hint}} aria-label={{$:/language/Buttons/TagManager/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/tag-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/TagManager/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/theme": {
"title": "$:/core/ui/Buttons/theme",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/theme-button}} {{$:/language/Buttons/Theme/Caption}}",
"description": "{{$:/language/Buttons/Theme/Hint}}",
"text": "<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/theme\">> tooltip={{$:/language/Buttons/Theme/Hint}} aria-label={{$:/language/Buttons/Theme/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/theme-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Theme/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/theme\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$linkcatcher to=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\" variable=\"themeTitle\">\n<$link to=<<themeTitle>>>\n<span class=\"tc-drop-down-bullet\">\n<$reveal type=\"match\" state=\"$:/theme\" text=<<themeTitle>>>\n•\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/theme\" text=<<themeTitle>>>\n \n</$reveal>\n</span>\n<$view tiddler=<<themeTitle>> field=\"name\"/>\n</$link>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>"
},
"$:/core/ui/PageTemplate/pagecontrols": {
"title": "$:/core/ui/PageTemplate/pagecontrols",
"text": "\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-page-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n<$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\">\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n</$reveal>\n</$list>\n</div>\n\n"
},
"$:/core/ui/PageStylesheet": {
"title": "$:/core/ui/PageStylesheet",
"text": "<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\n</$importvariables>\n"
},
"$:/core/ui/PageTemplate/alerts": {
"title": "$:/core/ui/PageTemplate/alerts",
"tags": "$:/tags/PageTemplate",
"text": "<div class=\"tc-alerts\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Alert]!has[draft.of]]\" template=\"$:/core/ui/AlertTemplate\" storyview=\"pop\"/>\n\n</div>\n"
},
"$:/core/ui/PageTemplate/sidebar": {
"title": "$:/core/ui/PageTemplate/sidebar",
"tags": "$:/tags/PageTemplate",
"text": "<$scrollable fallthrough=\"no\" class=\"tc-sidebar-scrollable\">\n\n<div class=\"tc-sidebar-header\">\n\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\" retain=\"yes\">\n\n<h1 class=\"tc-site-title\">\n\n<$transclude tiddler=\"$:/SiteTitle\" mode=\"inline\"/>\n\n</h1>\n\n<div class=\"tc-site-subtitle\">\n\n<$transclude tiddler=\"$:/SiteSubtitle\" mode=\"inline\"/>\n\n</div>\n\n{{||$:/core/ui/PageTemplate/pagecontrols}}\n\n<$transclude tiddler=\"$:/core/ui/SideBarLists\" mode=\"inline\"/>\n\n</$reveal>\n\n</div>\n\n</$scrollable>"
},
"$:/core/ui/PageTemplate/story": {
"title": "$:/core/ui/PageTemplate/story",
"tags": "$:/tags/PageTemplate",
"text": "<section class=\"tc-story-river\">\n\n<section class=\"story-backdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AboveStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n<$list filter=\"[list[$:/StoryList]]\" history=\"$:/HistoryList\" template=\"$:/core/ui/ViewTemplate\" editTemplate=\"$:/core/ui/EditTemplate\" storyview={{$:/view}} />\n\n<section class=\"story-frontdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/BelowStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n</section>\n"
},
"$:/core/ui/PageTemplate/topleftbar": {
"title": "$:/core/ui/PageTemplate/topleftbar",
"tags": "$:/tags/PageTemplate",
"text": "<span class=\"tc-topbar tc-topbar-left\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopLeftBar]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
},
"$:/core/ui/PageTemplate/toprightbar": {
"title": "$:/core/ui/PageTemplate/toprightbar",
"tags": "$:/tags/PageTemplate",
"text": "<span class=\"tc-topbar tc-topbar-right\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopRightBar]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
},
"$:/core/ui/PageTemplate": {
"title": "$:/core/ui/PageTemplate",
"text": "\\define containerClasses()\ntc-page-container tc-page-view-$(themeTitle)$ tc-language-$(languageTitle)$\n\\end\n\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n\n<$set name=\"tv-config-toolbar-icons\" value={{$:/config/Toolbar/Icons}}>\n\n<$set name=\"tv-config-toolbar-text\" value={{$:/config/Toolbar/Text}}>\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$set name=\"themeTitle\" value={{$:/view}}>\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$set name=\"currentTiddler\" value=\"\">\n\n<div class=<<containerClasses>>>\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n\n<$dropzone>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageTemplate]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>>/>\n\n</$list>\n\n</$dropzone>\n\n</$navigator>\n\n</div>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$importvariables>\n"
},
"$:/core/ui/PluginInfo": {
"title": "$:/core/ui/PluginInfo",
"text": "\\define localised-info-tiddler-title()\n$(currentTiddler)$/$(languageTitle)$/$(currentTab)$\n\\end\n\\define info-tiddler-title()\n$(currentTiddler)$/$(currentTab)$\n\\end\n<$transclude tiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<info-tiddler-title>> mode=\"block\">\nNo ''\"<$text text=<<currentTab>>/>\"'' found\n</$transclude>\n</$transclude>\n</$transclude>\n"
},
"$:/core/ui/SearchResults": {
"title": "$:/core/ui/SearchResults",
"text": "<div class=\"tc-search-results\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\"\"\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}}/>\n</$list>\n\n</div>\n"
},
"$:/core/ui/SideBar/More": {
"title": "$:/core/ui/SideBar/More",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/More/Caption}}",
"text": "<div class=\"tc-more-sidebar\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]\" \"$:/core/ui/MoreSideBar/Tags\" \"$:/state/tab/moresidebar\" \"tc-vertical\">>\n</div>\n"
},
"$:/core/ui/SideBar/Open": {
"title": "$:/core/ui/SideBar/Open",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Open/Caption}}",
"text": "\\define lingo-base() $:/language/CloseAll/\n<$list filter=\"[list[$:/StoryList]]\" history=\"$:/HistoryList\" storyview=\"pop\">\n\n<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=\"tc-btn-invisible tc-btn-mini\">×</$button> <$link to={{!!title}}><$view field=\"title\"/></$link>\n\n</$list>\n\n<$button message=\"tm-close-all-tiddlers\" class=\"tc-btn-invisible tc-btn-mini\"><<lingo Button>></$button>\n"
},
"$:/core/ui/SideBar/Recent": {
"title": "$:/core/ui/SideBar/Recent",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Recent/Caption}}",
"text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
},
"$:/core/ui/SideBar/Tools": {
"title": "$:/core/ui/SideBar/Tools",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Tools/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n\n<<lingo Basics/Version/Prompt>> <<version>>\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n\n<div style=\"position:relative;\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</div>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/SideBarLists": {
"title": "$:/core/ui/SideBarLists",
"text": "<div class=\"tc-sidebar-lists\">\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/search\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n<$button tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" text={{$:/temp/search}}/>\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n{{$:/core/images/advanced-search-button}}\n</$button>\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\" />\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n<$reveal state=\"$:/temp/search\" type=\"match\" text=\"\">\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n{{$:/core/images/advanced-search-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n\n<$set name=\"searchTiddler\" value=\"$:/temp/search\">\n{{$:/core/ui/SearchResults}}\n</$set>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/search\" type=\"match\" text=\"\">\n\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\" \"$:/core/ui/SideBar/Open\" \"$:/state/tab/sidebar\">>\n\n</$reveal>\n\n</div>\n"
},
"$:/TagManager": {
"title": "$:/TagManager",
"text": "\\define lingo-base() $:/language/TagManager/\n\\define iconEditorTab(type)\n<$list filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[sort[title]] +[$type$is[system]]\">\n<$link to={{!!title}}>\n<$transclude/> <$view field=\"title\"/>\n</$link>\n</$list>\n\\end\n\\define iconEditor(title)\n<div class=\"tc-drop-down-wrapper\">\n<$button popup=<<qualify \"$:/state/popup/icon/$title$\">> class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal state=<<qualify \"$:/state/popup/icon/$title$\">> type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$linkcatcher to=\"$title$!!icon\">\n<<iconEditorTab type:\"!\">>\n<hr/>\n<<iconEditorTab type:\"\">>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>\n\\end\n\\define qualifyTitle(title)\n$title$$(currentTiddler)$\n\\end\n\\define toggleButton(state)\n<$reveal state=\"$state$\" type=\"match\" text=\"closed\" default=\"closed\">\n<$button set=\"$state$\" setTo=\"open\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n<$reveal state=\"$state$\" type=\"match\" text=\"open\" default=\"closed\">\n<$button set=\"$state$\" setTo=\"closed\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n\\end\n<table class=\"tc-tag-manager-table\">\n<tbody>\n<tr>\n<th><<lingo Colour/Heading>></th>\n<th class=\"tc-tag-manager-tag\"><<lingo Tag/Heading>></th>\n<th><<lingo Icon/Heading>></th>\n<th><<lingo Info/Heading>></th>\n</tr>\n<$list filter=\"[tags[]!is[system]sort[title]]\">\n<tr>\n<td><$edit-text field=\"color\" tag=\"input\" type=\"color\"/></td>\n<td><$transclude tiddler=\"$:/core/ui/TagTemplate\"/></td>\n<td>\n<$macrocall $name=\"iconEditor\" title={{!!title}}/>\n</td>\n<td>\n<$macrocall $name=\"toggleButton\" state=<<qualifyTitle \"$:/state/tag-manager/\">> /> \n</td>\n</tr>\n<tr>\n<td></td>\n<td>\n<$reveal state=<<qualifyTitle \"$:/state/tag-manager/\">> type=\"match\" text=\"open\" default=\"\">\n<table>\n<tbody>\n<tr><td><<lingo Colour/Heading>></td><td><$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/></td></tr>\n<tr><td><<lingo Icon/Heading>></td><td><$edit-text field=\"icon\" tag=\"input\" size=\"45\"/></td></tr>\n</tbody>\n</table>\n</$reveal>\n</td>\n<td></td>\n<td></td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/TagTemplate": {
"title": "$:/core/ui/TagTemplate",
"text": "\\define tag-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-body-inner(colour,fallbackTarget,colourA,colourB)\n<$set name=\"foregroundColor\" value=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">>>\n<$set name=\"backgroundColor\" value=\"\"\"$colour$\"\"\">\n<$button popup=<<qualify \"$:/state/popup/tag\">> class=\"tc-btn-invisible tc-tag-label\" style=<<tag-styles>>>\n<$transclude tiddler={{!!icon}}/> <$view field=\"title\" format=\"text\" />\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\" animate=\"yes\"><div class=\"tc-drop-down\"><$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n<hr>\n<$list filter=\"[all[current]tagging[]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n</$set>\n</$set>\n\\end\n\n\\define tag-body(colour,palette)\n<span class=\"tc-tag-list-item\">\n<$macrocall $name=\"tag-body-inner\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}}/>\n</span>\n\\end\n\n<$macrocall $name=\"tag-body\" colour={{!!color}} palette={{$:/palette}}/>\n"
},
"$:/core/ui/TiddlerFieldTemplate": {
"title": "$:/core/ui/TiddlerFieldTemplate",
"text": "<tr class=\"tc-view-field\">\n<td class=\"tc-view-field-name\">\n<$text text=<<listItem>>/>\n</td>\n<td class=\"tc-view-field-value\">\n<$view field=<<listItem>>/>\n</td>\n</tr>"
},
"$:/core/ui/TiddlerFields": {
"title": "$:/core/ui/TiddlerFields",
"text": "<table class=\"tc-view-field-table\">\n<tbody>\n<$list filter=\"[all[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n</tbody>\n</table>\n"
},
"$:/core/ui/TiddlerInfo/Advanced/PluginInfo": {
"title": "$:/core/ui/TiddlerInfo/Advanced/PluginInfo",
"tags": "$:/tags/TiddlerInfo/Advanced",
"text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\n<$list filter=\"[all[current]has[plugin-type]]\">\n\n! <<lingo Heading>>\n\n<<lingo Hint>>\n<ul>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" emptyMessage=<<lingo Empty/Hint>>>\n<li>\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</li>\n</$list>\n</ul>\n\n</$list>\n"
},
"$:/core/ui/TiddlerInfo/Advanced/ShadowInfo": {
"title": "$:/core/ui/TiddlerInfo/Advanced/ShadowInfo",
"tags": "$:/tags/TiddlerInfo/Advanced",
"text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/ShadowInfo/\n<$set name=\"infoTiddler\" value=<<currentTiddler>>>\n\n''<<lingo Heading>>''\n\n<$list filter=\"[all[current]!is[shadow]]\">\n\n<<lingo NotShadow/Hint>>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]]\">\n\n<<lingo Shadow/Hint>>\n\n<$list filter=\"[all[current]shadowsource[]]\">\n\n<$set name=\"pluginTiddler\" value=<<currentTiddler>>>\n<<lingo Shadow/Source>>\n</$set>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\">\n\n<<lingo OverriddenShadow/Hint>>\n\n</$list>\n\n\n</$list>\n</$set>\n"
},
"$:/core/ui/TiddlerInfo/Advanced": {
"title": "$:/core/ui/TiddlerInfo/Advanced",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Advanced/Caption}}",
"text": "<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo/Advanced]!has[draft.of]]\" variable=\"listItem\">\n<$transclude tiddler=<<listItem>>/>\n\n</$list>\n"
},
"$:/core/ui/TiddlerInfo/Fields": {
"title": "$:/core/ui/TiddlerInfo/Fields",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Fields/Caption}}",
"text": "<$transclude tiddler=\"$:/core/ui/TiddlerFields\"/>\n"
},
"$:/core/ui/TiddlerInfo/List": {
"title": "$:/core/ui/TiddlerInfo/List",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/List/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[list{!!title}]\" emptyMessage=<<lingo List/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo/Listed": {
"title": "$:/core/ui/TiddlerInfo/Listed",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Listed/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]listed[]!is[system]]\" emptyMessage=<<lingo Listed/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo/References": {
"title": "$:/core/ui/TiddlerInfo/References",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/References/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]backlinks[]sort[title]]\" emptyMessage=<<lingo References/Empty>> template=\"$:/core/ui/ListItemTemplate\">\n</$list>\n"
},
"$:/core/ui/TiddlerInfo/Tagging": {
"title": "$:/core/ui/TiddlerInfo/Tagging",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Tagging/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]tagging[]]\" emptyMessage=<<lingo Tagging/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo/Tools": {
"title": "$:/core/ui/TiddlerInfo/Tools",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Tools/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/TiddlerInfo": {
"title": "$:/core/ui/TiddlerInfo",
"text": "<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo]!has[draft.of]]\" default={{$:/config/TiddlerInfo/Default}}/>"
},
"$:/core/ui/TopBar/menu": {
"title": "$:/core/ui/TopBar/menu",
"tags": "$:/tags/TopRightBar",
"text": "<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"no\">\n<$button set=\"$:/state/sidebar\" setTo=\"no\" tooltip={{$:/language/Buttons/HideSideBar/Hint}} aria-label={{$:/language/Buttons/HideSideBar/Caption}} class=\"tc-btn-invisible\">{{$:/core/images/chevron-right}}</$button>\n</$reveal>\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"no\">\n<$button set=\"$:/state/sidebar\" setTo=\"yes\" tooltip={{$:/language/Buttons/ShowSideBar/Hint}} aria-label={{$:/language/Buttons/ShowSideBar/Caption}} class=\"tc-btn-invisible\">{{$:/core/images/chevron-left}}</$button>\n</$reveal>\n"
},
"$:/core/ui/UntaggedTemplate": {
"title": "$:/core/ui/UntaggedTemplate",
"text": "\\define lingo-base() $:/language/SideBar/\n<$button popup=<<qualify \"$:/state/popup/tag\">> class=\"tc-btn-invisible tc-untagged-label tc-tag-label\">\n<<lingo Tags/Untagged/Caption>>\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[untagged[]!is[system]] -[tags[]] +[sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/body": {
"title": "$:/core/ui/ViewTemplate/body",
"tags": "$:/tags/ViewTemplate",
"text": "<div class=\"tc-tiddler-body\">\n\n<$list filter=\"[all[current]!has[plugin-type]!field:hide-body[yes]]\">\n\n<$transclude>\n\n<$transclude tiddler=\"$:/language/MissingTiddler/Hint\"/>\n\n</$transclude>\n\n</$list>\n\n</div>\n"
},
"$:/core/ui/ViewTemplate/classic": {
"title": "$:/core/ui/ViewTemplate/classic",
"tags": "$:/tags/ViewTemplate $:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/ClassicWarning/\n<$list filter=\"[all[current]type[text/x-tiddlywiki]]\">\n<div class=\"tc-message-box\">\n\n<<lingo Hint>>\n\n<$button set=\"!!type\" setTo=\"text/vnd.tiddlywiki\"><<lingo Upgrade/Caption>></$button>\n\n</div>\n</$list>\n"
},
"$:/core/ui/ViewTemplate/import": {
"title": "$:/core/ui/ViewTemplate/import",
"tags": "$:/tags/ViewTemplate",
"text": "\\define lingo-base() $:/language/Import/\n\n<$list filter=\"[all[current]field:plugin-type[import]]\">\n\n<div class=\"tc-import\">\n\n<<lingo Listing/Hint>>\n\n{{||$:/core/ui/ImportListing}}\n\n<$button message=\"tm-delete-tiddler\" param=<<currentTiddler>>><<lingo Listing/Cancel/Caption>></$button>\n<$button message=\"tm-perform-import\" param=<<currentTiddler>>><<lingo Listing/Import/Caption>></$button>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/ViewTemplate/plugin": {
"title": "$:/core/ui/ViewTemplate/plugin",
"tags": "$:/tags/ViewTemplate",
"text": "<$list filter=\"[all[current]has[plugin-type]] -[all[current]field:plugin-type[import]]\">\n\n{{||$:/core/ui/TiddlerInfo/Advanced/PluginInfo}}\n\n</$list>\n"
},
"$:/core/ui/ViewTemplate/subtitle": {
"title": "$:/core/ui/ViewTemplate/subtitle",
"tags": "$:/tags/ViewTemplate",
"text": "<div class=\"tc-subtitle\">\n<$link to={{!!modifier}}>\n<$view field=\"modifier\"/>\n</$link> <$view field=\"modified\" format=\"relativedate\"/>\n</div>\n"
},
"$:/core/ui/ViewTemplate/tags": {
"title": "$:/core/ui/ViewTemplate/tags",
"tags": "$:/tags/ViewTemplate",
"text": "<div class=\"tc-tags-wrapper\"><$list filter=\"[all[current]tags[]sort[title]]\" template=\"$:/core/ui/TagTemplate\" storyview=\"pop\"/></div>\n"
},
"$:/core/ui/ViewTemplate/title": {
"title": "$:/core/ui/ViewTemplate/title",
"tags": "$:/tags/ViewTemplate",
"text": "\\define title-styles()\nfill:$(foregroundColor)$;\n\\end\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title\">\n<div class=\"tc-titlebar\">\n<span class=\"tc-tiddler-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$transclude tiddler=<<listItem>>/></$reveal></$list>\n</span>\n<$set name=\"foregroundColor\" value={{!!color}}>\n<span class=\"tc-tiddler-title-icon\" style=<<title-styles>>>\n<$transclude tiddler={{!!icon}}/>\n</span>\n</$set>\n<$list filter=\"[all[current]removeprefix[$:/]]\">\n<h2 class=\"tc-title\" title={{$:/language/SystemTiddler/Tooltip}}>\n<span class=\"tc-system-title-prefix\">$:/</span><$text text=<<currentTiddler>>/>\n</h2>\n</$list>\n<$list filter=\"[all[current]!prefix[$:/]]\">\n<h2 class=\"tc-title\">\n<$view field=\"title\"/>\n</h2>\n</$list>\n</div>\n\n<$reveal type=\"nomatch\" text=\"\" default=\"\" state=<<tiddlerInfoState>> class=\"tc-tiddler-info tc-popup-handle\" animate=\"yes\" retain=\"yes\">\n\n<$transclude tiddler=\"$:/core/ui/TiddlerInfo\"/>\n\n</$reveal>\n</div>"
},
"$:/core/ui/ViewTemplate": {
"title": "$:/core/ui/ViewTemplate",
"text": "\\define frame-classes()\ntc-tiddler-frame tc-tiddler-view-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$ $(tiddlerTagClasses)$\n\\end\n<$set name=\"storyTiddler\" value=<<currentTiddler>>><$set name=\"tiddlerInfoState\" value=<<qualify \"$:/state/popup/tiddler-info\">>><$tiddler tiddler=<<currentTiddler>>><div class=<<frame-classes>>><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewTemplate]!has[draft.of]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>>/></$list>\n</div>\n</$tiddler></$set></$set>\n"
},
"$:/core/ui/Buttons/clone": {
"title": "$:/core/ui/Buttons/clone",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/clone-button}} {{$:/language/Buttons/Clone/Caption}}",
"description": "{{$:/language/Buttons/Clone/Hint}}",
"text": "<$button message=\"tm-new-tiddler\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Clone/Hint}} aria-label={{$:/language/Buttons/Clone/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/clone-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Clone/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/close-others": {
"title": "$:/core/ui/Buttons/close-others",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/close-others-button}} {{$:/language/Buttons/CloseOthers/Caption}}",
"description": "{{$:/language/Buttons/CloseOthers/Hint}}",
"text": "<$button message=\"tm-close-other-tiddlers\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/CloseOthers/Hint}} aria-label={{$:/language/Buttons/CloseOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/close-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/CloseOthers/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/close": {
"title": "$:/core/ui/Buttons/close",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/close-button}} {{$:/language/Buttons/Close/Caption}}",
"description": "{{$:/language/Buttons/Close/Hint}}",
"text": "<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/close-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Close/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/edit": {
"title": "$:/core/ui/Buttons/edit",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/edit-button}} {{$:/language/Buttons/Edit/Caption}}",
"description": "{{$:/language/Buttons/Edit/Hint}}",
"text": "<$button message=\"tm-edit-tiddler\" tooltip={{$:/language/Buttons/Edit/Hint}} aria-label={{$:/language/Buttons/Edit/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/edit-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Edit/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/export-tiddler": {
"title": "$:/core/ui/Buttons/export-tiddler",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportTiddler/Caption}}",
"description": "{{$:/language/Buttons/ExportTiddler/Hint}}",
"text": "\\define makeExportFilter()\n[[$(currentTiddler)$]]\n\\end\n<$macrocall $name=\"exportButton\" exportFilter=<<makeExportFilter>> lingoBase=\"$:/language/Buttons/ExportTiddler/\" baseFilename=<<currentTiddler>>/>"
},
"$:/core/ui/Buttons/info": {
"title": "$:/core/ui/Buttons/info",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/info-button}} {{$:/language/Buttons/Info/Caption}}",
"description": "{{$:/language/Buttons/Info/Hint}}",
"text": "<$button popup=<<tiddlerInfoState>> tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/info-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Info/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/more-tiddler-actions": {
"title": "$:/core/ui/Buttons/more-tiddler-actions",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
"description": "{{$:/language/Buttons/More/Hint}}",
"text": "\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/More/Caption}}/></span>\n</$list>\n</$button><$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]] -[[$:/core/ui/Buttons/more-tiddler-actions]]\" variable=\"listItem\">\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n<$transclude tiddler=<<listItem>>/>\n</$reveal>\n</$list>\n</$set>\n</$set>\n</div>\n</$reveal>"
},
"$:/core/ui/Buttons/new-here": {
"title": "$:/core/ui/Buttons/new-here",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/new-here-button}} {{$:/language/Buttons/NewHere/Caption}}",
"description": "{{$:/language/Buttons/NewHere/Hint}}",
"text": "\\define newHereButtonTags()\n[[$(currentTiddler)$]]\n\\end\n\\define newHereButton()\n<$button tooltip={{$:/language/Buttons/NewHere/Hint}} aria-label={{$:/language/Buttons/NewHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-new-tiddler\" tags=<<newHereButtonTags>>/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/new-here-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewHere/Caption}}/></span>\n</$list>\n</$button>\n\\end\n<<newHereButton>>"
},
"$:/core/ui/Buttons/new-journal-here": {
"title": "$:/core/ui/Buttons/new-journal-here",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournalHere/Caption}}",
"description": "{{$:/language/Buttons/NewJournalHere/Hint}}",
"text": "\\define journalButtonTags()\n[[$(currentTiddlerTag)$]] $(journalTags)$\n\\end\n\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournalHere/Hint}} aria-label={{$:/language/Buttons/NewJournalHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<now \"$(journalTitleTemplate)$\">> tags=<<journalButtonTags>>/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewJournalHere/Caption}}/></span>\n</$list>\n</$button>\n\\end\n<$set name=\"journalTitleTemplate\" value={{$:/config/NewJournal/Title}}>\n<$set name=\"journalTags\" value={{$:/config/NewJournal/Tags}}>\n<$set name=\"currentTiddlerTag\" value=<<currentTiddler>>>\n<<journalButton>>\n</$set></$set></$set>"
},
"$:/core/ui/Buttons/permalink": {
"title": "$:/core/ui/Buttons/permalink",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/permalink-button}} {{$:/language/Buttons/Permalink/Caption}}",
"description": "{{$:/language/Buttons/Permalink/Hint}}",
"text": "<$button message=\"tm-permalink\" tooltip={{$:/language/Buttons/Permalink/Hint}} aria-label={{$:/language/Buttons/Permalink/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/permalink-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Permalink/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/permaview": {
"title": "$:/core/ui/Buttons/permaview",
"tags": "$:/tags/ViewToolbar $:/tags/PageControls",
"caption": "{{$:/core/images/permaview-button}} {{$:/language/Buttons/Permaview/Caption}}",
"description": "{{$:/language/Buttons/Permaview/Hint}}",
"text": "<$button message=\"tm-permaview\" tooltip={{$:/language/Buttons/Permaview/Hint}} aria-label={{$:/language/Buttons/Permaview/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/permaview-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Permaview/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/DefaultTiddlers": {
"title": "$:/DefaultTiddlers",
"text": "GettingStarted\n"
},
"$:/temp/advancedsearch": {
"title": "$:/temp/advancedsearch",
"text": ""
},
"$:/snippets/allfields": {
"title": "$:/snippets/allfields",
"text": "\\define renderfield(title)\n<tr class=\"tc-view-field\"><td class=\"tc-view-field-name\">''$title$'':</td><td class=\"tc-view-field-value\">//{{$:/language/Docs/Fields/$title$}}//</td></tr>\n\\end\n<table class=\"tc-view-field-table\"><tbody><$list filter=\"[fields[]sort[title]]\" variable=\"listItem\"><$macrocall $name=\"renderfield\" title=<<listItem>>/></$list>\n</tbody></table>\n"
},
"$:/config/AnimationDuration": {
"title": "$:/config/AnimationDuration",
"text": "400"
},
"$:/config/AutoSave": {
"title": "$:/config/AutoSave",
"text": "yes"
},
"$:/config/BitmapEditor/Colour": {
"title": "$:/config/BitmapEditor/Colour",
"text": "#ff0"
},
"$:/config/BitmapEditor/LineWidth": {
"title": "$:/config/BitmapEditor/LineWidth",
"text": "3"
},
"$:/config/EditTemplateFields/Visibility/title": {
"title": "$:/config/EditTemplateFields/Visibility/title",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/tags": {
"title": "$:/config/EditTemplateFields/Visibility/tags",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/text": {
"title": "$:/config/EditTemplateFields/Visibility/text",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/creator": {
"title": "$:/config/EditTemplateFields/Visibility/creator",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/created": {
"title": "$:/config/EditTemplateFields/Visibility/created",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/modified": {
"title": "$:/config/EditTemplateFields/Visibility/modified",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/modifier": {
"title": "$:/config/EditTemplateFields/Visibility/modifier",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/type": {
"title": "$:/config/EditTemplateFields/Visibility/type",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/draft.title": {
"title": "$:/config/EditTemplateFields/Visibility/draft.title",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/draft.of": {
"title": "$:/config/EditTemplateFields/Visibility/draft.of",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/revision": {
"title": "$:/config/EditTemplateFields/Visibility/revision",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/bag": {
"title": "$:/config/EditTemplateFields/Visibility/bag",
"text": "hide"
},
"$:/config/EditorTypeMappings/image/gif": {
"title": "$:/config/EditorTypeMappings/image/gif",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/jpeg": {
"title": "$:/config/EditorTypeMappings/image/jpeg",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/jpg": {
"title": "$:/config/EditorTypeMappings/image/jpg",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/png": {
"title": "$:/config/EditorTypeMappings/image/png",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/x-icon": {
"title": "$:/config/EditorTypeMappings/image/x-icon",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/text/vnd.tiddlywiki": {
"title": "$:/config/EditorTypeMappings/text/vnd.tiddlywiki",
"text": "text"
},
"$:/config/Navigation/UpdateAddressBar": {
"title": "$:/config/Navigation/UpdateAddressBar",
"text": "no"
},
"$:/config/Navigation/UpdateHistory": {
"title": "$:/config/Navigation/UpdateHistory",
"text": "no"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme",
"text": "hide"
},
"$:/config/SaveWikiButton/Template": {
"title": "$:/config/SaveWikiButton/Template",
"text": "$:/core/save/all"
},
"$:/config/SaverFilter": {
"title": "$:/config/SaverFilter",
"text": "[all[]] -[[$:/HistoryList]] -[[$:/StoryList]] -[[$:/Import]] -[[$:/isEncrypted]] -[[$:/UploadName]] -[prefix[$:/state]] -[prefix[$:/temp]]"
},
"$:/config/SearchResults/Default": {
"title": "$:/config/SearchResults/Default",
"text": "$:/core/ui/DefaultSearchResultList"
},
"$:/config/SyncFilter": {
"title": "$:/config/SyncFilter",
"text": "[is[tiddler]] -[[$:/HistoryList]] -[[$:/StoryList]] -[[$:/Import]] -[[$:/isEncrypted]] -[prefix[$:/status]] -[prefix[$:/state]] -[prefix[$:/temp]]"
},
"$:/config/TiddlerInfo/Default": {
"title": "$:/config/TiddlerInfo/Default",
"text": "$:/core/ui/TiddlerInfo/Fields"
},
"$:/config/Toolbar/Icons": {
"title": "$:/config/Toolbar/Icons",
"text": "yes"
},
"$:/config/Toolbar/Text": {
"title": "$:/config/Toolbar/Text",
"text": "no"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions",
"text": "show"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview",
"text": "hide"
},
"$:/snippets/currpalettepreview": {
"title": "$:/snippets/currpalettepreview",
"text": "\\define swatchStyle()\nbackground-color: $(swatchColour)$;\n\\end\n\\define swatch(colour)\n<$set name=\"swatchColour\" value={{##$colour$}}>\n<div class=\"tc-swatch\" style=<<swatchStyle>>/>\n</$set>\n\\end\n<div class=\"tc-swatches-horiz\">\n<<swatch foreground>>\n<<swatch background>>\n<<swatch muted-foreground>>\n<<swatch primary>>\n<<swatch page-background>>\n<<swatch tab-background>>\n<<swatch tiddler-info-background>>\n</div>\n"
},
"$:/snippets/download-wiki-button": {
"title": "$:/snippets/download-wiki-button",
"text": "\\define lingo-base() $:/language/ControlPanel/Tools/Download/\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-download-file\" $param=\"$:/core/save/all\" filename=\"index.html\"/>\n<<lingo Full/Caption>> {{$:/core/images/save-button}}\n</$button>"
},
"$:/language": {
"title": "$:/language",
"text": "$:/languages/en-GB"
},
"$:/snippets/languageswitcher": {
"title": "$:/snippets/languageswitcher",
"text": "{{$:/language/ControlPanel/Basics/Language/Prompt}} <$select tiddler=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[description]]\">\n<option value=<<currentTiddler>>><$view field=\"description\"><$view field=\"name\"><$view field=\"title\"/></$view></$view></option>\n</$list>\n</$select>"
},
"$:/core/macros/CSS": {
"title": "$:/core/macros/CSS",
"tags": "$:/tags/Macro",
"text": "\\define colour(name)\n<$transclude tiddler={{$:/palette}} index=\"$name$\"><$transclude tiddler=\"$:/palettes/Vanilla\" index=\"$name$\"/></$transclude>\n\\end\n\n\\define color(name)\n<<colour $name$>>\n\\end\n\n\\define box-shadow(shadow)\n``\n -webkit-box-shadow: $shadow$;\n -moz-box-shadow: $shadow$;\n box-shadow: $shadow$;\n``\n\\end\n\n\\define filter(filter)\n``\n -webkit-filter: $filter$;\n -moz-filter: $filter$;\n filter: $filter$;\n``\n\\end\n\n\\define transition(transition)\n``\n -webkit-transition: $transition$;\n -moz-transition: $transition$;\n transition: $transition$;\n``\n\\end\n\n\\define transform-origin(origin)\n``\n -webkit-transform-origin: $origin$;\n -moz-transform-origin: $origin$;\n transform-origin: $origin$;\n``\n\\end\n\n\\define background-linear-gradient(gradient)\n``\nbackground-image: linear-gradient($gradient$);\nbackground-image: -o-linear-gradient($gradient$);\nbackground-image: -moz-linear-gradient($gradient$);\nbackground-image: -webkit-linear-gradient($gradient$);\nbackground-image: -ms-linear-gradient($gradient$);\n``\n\\end\n\n\\define datauri(title)\n<$macrocall $name=\"makedatauri\" type={{$title$!!type}} text={{$title$}}/>\n\\end\n\n\\define if-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n\n\\define if-no-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n"
},
"$:/core/macros/export": {
"title": "$:/core/macros/export",
"tags": "$:/tags/Macro",
"text": "\\define exportButtonFilename(baseFilename)\n$baseFilename$$(extension)$\n\\end\n\n\\define exportButton(exportFilter:\"[!is[system]sort[title]]\",lingoBase,baseFilename:\"tiddlers\")\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/export\">> tooltip={{$lingoBase$Hint}} aria-label={{$lingoBase$Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/export-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$lingoBase$Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/export\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Exporter]]\">\n<$set name=\"extension\" value={{!!extension}}>\n<$button class=\"tc-btn-invisible\">\n<$action-sendmessage $message=\"tm-download-file\" $param=<<currentTiddler>> exportFilter=\"\"\"$exportFilter$\"\"\" filename=<<exportButtonFilename \"\"\"$baseFilename$\"\"\">>/>\n<$action-deletetiddler $tiddler=<<qualify \"$:/state/popup/export\">>/>\n<$transclude field=\"description\"/>\n</$button>\n</$set>\n</$list>\n</div>\n</$reveal>\n\\end\n"
},
"$:/core/macros/lingo": {
"title": "$:/core/macros/lingo",
"tags": "$:/tags/Macro",
"text": "\\define lingo-base()\n$:/language/\n\\end\n\n\\define lingo(title)\n{{$(lingo-base)$$title$}}\n\\end\n"
},
"$:/core/macros/list": {
"title": "$:/core/macros/list",
"tags": "$:/tags/Macro",
"text": "\\define list-links(filter,type:\"ul\",subtype:\"li\",class:\"\")\n<$type$ class=\"$class$\">\n<$list filter=\"$filter$\">\n<$subtype$>\n<$link to={{!!title}}>\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$link>\n</$subtype$>\n</$list>\n</$type$>\n\\end\n"
},
"$:/core/macros/tabs": {
"title": "$:/core/macros/tabs",
"tags": "$:/tags/Macro",
"text": "\\define tabs(tabsList,default,state:\"$:/state/tab\",class,template)\n<div class=\"tc-tab-set $class$\">\n<div class=\"tc-tab-buttons $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\">\n<$button set=<<qualify \"$state$\">> setTo=<<currentTab>> default=\"$default$\" selectedClass=\"tc-tab-selected\">\n<$transclude tiddler=<<currentTab>> field=\"caption\">\n<$macrocall $name=\"currentTab\" $type=\"text/plain\" $output=\"text/plain\"/>\n</$transclude>\n</$button>\n</$list>\n</div><div class=\"tc-tab-divider $class$\"/><div class=\"tc-tab-content $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\">\n\n<$reveal type=\"match\" state=<<qualify \"$state$\">> text=<<currentTab>> default=\"$default$\">\n\n<$transclude tiddler=\"$template$\" mode=\"block\">\n\n<$transclude tiddler=<<currentTab>> mode=\"block\"/>\n\n</$transclude>\n\n</$reveal>\n\n</$list>\n</div>\n</div>\n\\end\n"
},
"$:/core/macros/tag": {
"title": "$:/core/macros/tag",
"tags": "$:/tags/Macro",
"text": "\\define tag(tag)\n{{$tag$||$:/core/ui/TagTemplate}}\n\\end\n"
},
"$:/core/macros/timeline": {
"created": "20141212105914482",
"modified": "20141212110330815",
"tags": "$:/tags/Macro",
"title": "$:/core/macros/timeline",
"type": "text/vnd.tiddlywiki",
"text": "\\define timeline-title()\n<!-- Override this macro with a global macro \n of the same name if you need to change \n how titles are displayed on the timeline \n -->\n<$view field=\"title\"/>\n\\end\n\\define timeline(limit:\"100\",format:\"DDth MMM YYYY\",subfilter:\"\",dateField:\"modified\")\n<div class=\"tc-timeline\">\n<$list filter=\"[!is[system]$subfilter$has[$dateField$]!sort[$dateField$]limit[$limit$]eachday[$dateField$]]\">\n<div class=\"tc-menu-list-item\">\n<$view field=\"$dateField$\" format=\"date\" template=\"$format$\"/>\n<$list filter=\"[sameday{!!$dateField$}!is[system]$subfilter$!sort[$dateField$]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}>\n<<timeline-title>>\n</$link>\n</div>\n</$list>\n</div>\n</$list>\n</div>\n\\end\n"
},
"$:/core/macros/toc": {
"title": "$:/core/macros/toc",
"tags": "$:/tags/Macro",
"text": "\\define toc-caption()\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$set>\n\\end\n\n\\define toc-body(rootTag,tag,sort:\"\",itemClassFilter)\n<ol class=\"tc-toc\">\n<$list filter=\"\"\"[all[shadows+tiddlers]tag[$tag$]!has[draft.of]$sort$]\"\"\">\n<$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" value=\"toc-item-selected\" emptyValue=\"toc-item\">\n<li class=<<toc-item-class>>>\n<$list filter=\"[all[current]toc-link[no]]\" emptyMessage=\"<$link><$view field='caption'><$view field='title'/></$view></$link>\">\n<<toc-caption>>\n</$list>\n<$list filter=\"\"\"[all[current]] -[[$rootTag$]]\"\"\">\n<$macrocall $name=\"toc-body\" rootTag=\"\"\"$rootTag$\"\"\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\"/>\n</$list>\n</li>\n</$set>\n</$list>\n</ol>\n\\end\n\n\\define toc(tag,sort:\"\",itemClassFilter)\n<<toc-body rootTag:\"\"\"$tag$\"\"\" tag:\"\"\"$tag$\"\"\" sort:\"\"\"$sort$\"\"\" itemClassFilter:\"\"\"itemClassFilter\"\"\">>\n\\end\n\n\\define toc-linked-expandable-body(tag,sort:\"\",itemClassFilter)\n<$set name=\"toc-state\" value=<<qualify \"$:/state/toc/$tag$-$(currentTiddler)$\">>>\n<$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" value=\"toc-item-selected\" emptyValue=\"toc-item\">\n<li class=<<toc-item-class>>>\n<$link>\n<$reveal type=\"nomatch\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n<<toc-caption>>\n</$link>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\"/>\n</$reveal>\n</li>\n</$set>\n</$set>\n\\end\n\n\\define toc-unlinked-expandable-body(tag,sort:\"\",itemClassFilter)\n<$set name=\"toc-state\" value=<<qualify \"$:/state/toc/$tag$-$(currentTiddler)$\">>>\n<$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" value=\"toc-item-selected\" emptyValue=\"toc-item\">\n<li class=<<toc-item-class>>>\n<$reveal type=\"nomatch\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n<<toc-caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n<<toc-caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\"/>\n</$reveal>\n</li>\n</$set>\n</$set>\n\\end\n\n\\define toc-expandable(tag,sort:\"\",itemClassFilter)\n<ol class=\"tc-toc toc-expandable\">\n<$list filter=\"[all[shadows+tiddlers]tag[$tag$]!has[draft.of]$sort$]\">\n<$list filter=\"[all[current]toc-link[no]]\" emptyMessage=\"<<toc-linked-expandable-body tag:'$tag$' sort:'$sort$' itemClassFilter:'$itemClassFilter$'>>\">\n<<toc-unlinked-expandable-body tag:\"\"\"$tag$\"\"\" sort:\"\"\"$sort$\"\"\" itemClassFilter:\"\"\"itemClassFilter\"\"\">>\n</$list>\n</$list>\n</ol>\n\\end\n\n\\define toc-linked-selective-expandable-body(tag,sort:\"\",itemClassFilter)\n<$set name=\"toc-state\" value=<<qualify \"$:/state/toc/$tag$-$(currentTiddler)$\">>>\n<$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" value=\"toc-item-selected\" emptyValue=\"toc-item\">\n<li class=<<toc-item-class>>>\n<$link>\n<$list filter=\"[all[current]tagging[]limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button>\">\n<$reveal type=\"nomatch\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n</$list>\n<<toc-caption>>\n</$link>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$macrocall $name=\"toc-selective-expandable\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\"/>\n</$reveal>\n</li>\n</$set>\n</$set>\n\\end\n\n\\define toc-unlinked-selective-expandable-body(tag,sort:\"\",itemClassFilter)\n<$set name=\"toc-state\" value=<<qualify \"$:/state/toc/$tag$-$(currentTiddler)$\">>>\n<$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" value=\"toc-item-selected\" emptyValue=\"toc-item\">\n<li class=<<toc-item-class>>>\n<$list filter=\"[all[current]tagging[]limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button> <$view field='caption'><$view field='title'/></$view>\">\n<$reveal type=\"nomatch\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n<<toc-caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n<<toc-caption>>\n</$button>\n</$reveal>\n</$list>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$macrocall $name=\"\"\"toc-selective-expandable\"\"\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\"/>\n</$reveal>\n</li>\n</$set>\n</$set>\n\\end\n\n\\define toc-selective-expandable(tag,sort:\"\",itemClassFilter)\n<ol class=\"tc-toc toc-selective-expandable\">\n<$list filter=\"[all[shadows+tiddlers]tag[$tag$]!has[draft.of]$sort$]\">\n<$list filter=\"[all[current]toc-link[no]]\" variable=\"ignore\" emptyMessage=\"<<toc-linked-selective-expandable-body tag:'$tag$' sort:'$sort$' itemClassFilter:'$itemClassFilter$'>>\">\n<<toc-unlinked-selective-expandable-body tag:\"\"\"$tag$\"\"\" sort:\"\"\"$sort$\"\"\" itemClassFilter:\"\"\"$itemClassFilter$\"\"\">>\n</$list>\n</$list>\n</ol>\n\\end\n\n\\define toc-tabbed-selected-item-filter(selectedTiddler)\n[all[current]field:title{$selectedTiddler$}]\n\\end\n\n\\define toc-tabbed-external-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$tiddler tiddler={{$selectedTiddler$}}>\n<div class=\"tc-tabbed-table-of-contents\">\n<$linkcatcher to=\"$selectedTiddler$\">\n<div class=\"tc-table-of-contents\">\n<$macrocall $name=\"toc-selective-expandable\" tag=\"\"\"$tag$\"\"\" sort=\"\"\"$sort$\"\"\" itemClassFilter=<<toc-tabbed-selected-item-filter selectedTiddler:\"\"\"$selectedTiddler$\"\"\">>/>\n</div>\n</$linkcatcher>\n<div class=\"tc-tabbed-table-of-contents-content\">\n<$reveal state=\"\"\"$selectedTiddler$\"\"\" type=\"nomatch\" text=\"\">\n<$transclude mode=\"block\" tiddler=\"$template$\">\n<h1><$transclude field=\"caption\"><$view field=\"title\"/></$transclude></h1>\n<$transclude mode=\"block\">$missingText$</$transclude>\n</$transclude>\n</$reveal>\n<$reveal state=\"\"\"$selectedTiddler$\"\"\" type=\"match\" text=\"\">\n$unselectedText$\n</$reveal>\n</div>\n</div>\n</$tiddler>\n\\end\n\n\\define toc-tabbed-internal-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$linkcatcher to=\"\"\"$selectedTiddler$\"\"\">\n<$macrocall $name=\"toc-tabbed-external-nav\" tag=\"\"\"$tag$\"\"\" sort=\"\"\"$sort$\"\"\" selectedTiddler=\"\"\"$selectedTiddler$\"\"\" unselectedText=\"\"\"$unselectedText$\"\"\" missingText=\"\"\"$missingText$\"\"\" template=\"\"\"$template$\"\"\"/>\n</$linkcatcher>\n\\end\n\n"
},
"$:/snippets/minilanguageswitcher": {
"title": "$:/snippets/minilanguageswitcher",
"text": "<$select tiddler=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"description\"><$view field=\"name\"><$view field=\"title\"/></$view></$view></option>\n</$list>\n</$select>"
},
"$:/snippets/minithemeswitcher": {
"title": "$:/snippets/minithemeswitcher",
"text": "\\define lingo-base() $:/language/ControlPanel/Theme/\n<<lingo Prompt>> <$select tiddler=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"name\"><$view field=\"title\"/></$view></option>\n</$list>\n</$select>"
},
"$:/snippets/modules": {
"title": "$:/snippets/modules",
"text": "\\define describeModuleType(type)\n{{$:/language/Docs/ModuleTypes/$type$}}\n\\end\n<$list filter=\"[moduletypes[]]\">\n\n!! <$macrocall $name=\"currentTiddler\" $type=\"text/plain\" $output=\"text/plain\"/>\n\n<$macrocall $name=\"describeModuleType\" type=<<currentTiddler>>/>\n\n<ul><$list filter=\"[all[current]modules[]]\"><li><$link><<currentTiddler>></$link>\n</li>\n</$list>\n</ul>\n</$list>\n"
},
"$:/palette": {
"title": "$:/palette",
"text": "$:/palettes/Vanilla"
},
"$:/snippets/paletteeditor": {
"title": "$:/snippets/paletteeditor",
"text": "\\define lingo-base() $:/language/ControlPanel/Palette/Editor/\n\\define describePaletteColour(colour)\n{{$:/language/Docs/PaletteColours/$colour$}}\n\\end\n<$set name=\"currentTiddler\" value={{$:/palette}}>\n\n<<lingo Prompt>> <$link to={{$:/palette}}><$macrocall $name=\"currentTiddler\" $output=\"text/plain\"/></$link>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\" variable=\"listItem\">\n<<lingo Prompt/Modified>>\n<$button message=\"tm-delete-tiddler\" param={{$:/palette}}><<lingo Reset/Caption>></$button>\n</$list>\n\n<$list filter=\"[all[current]is[shadow]!is[tiddler]]\" variable=\"listItem\">\n<<lingo Clone/Prompt>>\n</$list>\n\n<$button message=\"tm-new-tiddler\" param={{$:/palette}}><<lingo Clone/Caption>></$button>\n\n<table>\n<tbody>\n<$list filter=\"[all[current]indexes[]]\" variable=\"colourName\">\n<tr>\n<td>\n''<$macrocall $name=\"describePaletteColour\" colour=<<colourName>>/>''<br/>\n<$macrocall $name=\"colourName\" $output=\"text/plain\"/>\n</td>\n<td>\n<$edit-text index=<<colourName>> tag=\"input\"/>\n<br>\n<$edit-text index=<<colourName>> type=\"color\" tag=\"input\"/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n</$set>\n"
},
"$:/snippets/palettepreview": {
"title": "$:/snippets/palettepreview",
"text": "<$set name=\"currentTiddler\" value={{$:/palette}}>\n<$transclude tiddler=\"$:/snippets/currpalettepreview\"/>\n</$set>\n"
},
"$:/snippets/paletteswitcher": {
"title": "$:/snippets/paletteswitcher",
"text": "\\define lingo-base() $:/language/ControlPanel/Palette/\n<<lingo Prompt>> <$view tiddler={{$:/palette}} field=\"name\"/>\n\n<$linkcatcher to=\"$:/palette\">\n<div class=\"tc-chooser\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Palette]sort[description]]\"><div class=\"tc-chooser-item\"><$link to={{!!title}}><div><$reveal state=\"$:/palette\" type=\"match\" text={{!!title}}>•</$reveal><$reveal state=\"$:/palette\" type=\"nomatch\" text={{!!title}}> </$reveal> ''<$view field=\"name\" format=\"text\"/>'' - <$view field=\"description\" format=\"text\"/></div><$transclude tiddler=\"$:/snippets/currpalettepreview\"/></$link></div>\n</$list>\n</div>\n</$linkcatcher>"
},
"$:/temp/search": {
"title": "$:/temp/search",
"text": ""
},
"$:/tags/AdvancedSearch": {
"title": "$:/tags/AdvancedSearch",
"list": "[[$:/core/ui/AdvancedSearch/Standard]] [[$:/core/ui/AdvancedSearch/System]] [[$:/core/ui/AdvancedSearch/Shadows]] [[$:/core/ui/AdvancedSearch/Filter]]"
},
"$:/tags/ControlPanel": {
"title": "$:/tags/ControlPanel",
"list": "$:/core/ui/ControlPanel/Info $:/core/ui/ControlPanel/Appearance $:/core/ui/ControlPanel/Settings $:/core/ui/ControlPanel/Saving $:/core/ui/ControlPanel/Plugins $:/core/ui/ControlPanel/Tools $:/core/ui/ControlPanel/Internals"
},
"$:/tags/ControlPanel/Info": {
"title": "$:/tags/ControlPanel/Info",
"list": "$:/core/ui/ControlPanel/Basics $:/core/ui/ControlPanel/Advanced"
},
"$:/tags/EditTemplate": {
"title": "$:/tags/EditTemplate",
"list": "[[$:/core/ui/EditTemplate/controls]] [[$:/core/ui/EditTemplate/title]] [[$:/core/ui/EditTemplate/tags]] [[$:/core/ui/EditTemplate/shadow]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/EditTemplate/body]] [[$:/core/ui/EditTemplate/type]] [[$:/core/ui/EditTemplate/fields]]"
},
"$:/tags/EditToolbar": {
"title": "$:/tags/EditToolbar",
"list": "[[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/cancel]] [[$:/core/ui/Buttons/save]]"
},
"$:/tags/MoreSideBar": {
"title": "$:/tags/MoreSideBar",
"list": "[[$:/core/ui/MoreSideBar/All]] [[$:/core/ui/MoreSideBar/Recent]] [[$:/core/ui/MoreSideBar/Tags]] [[$:/core/ui/MoreSideBar/Missing]] [[$:/core/ui/MoreSideBar/Drafts]] [[$:/core/ui/MoreSideBar/Orphans]] [[$:/core/ui/MoreSideBar/Types]] [[$:/core/ui/MoreSideBar/System]] [[$:/core/ui/MoreSideBar/Shadows]]",
"text": ""
},
"$:/tags/PageControls": {
"title": "$:/tags/PageControls",
"list": "[[$:/core/ui/Buttons/home]] [[$:/core/ui/Buttons/close-all]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/new-tiddler]] [[$:/core/ui/Buttons/new-journal]] [[$:/core/ui/Buttons/import]] [[$:/core/ui/Buttons/export-page]] [[$:/core/ui/Buttons/control-panel]] [[$:/core/ui/Buttons/advanced-search]] [[$:/core/ui/Buttons/tag-manager]] [[$:/core/ui/Buttons/language]] [[$:/core/ui/Buttons/theme]] [[$:/core/ui/Buttons/storyview]] [[$:/core/ui/Buttons/encryption]] [[$:/core/ui/Buttons/full-screen]] [[$:/core/ui/Buttons/save-wiki]] [[$:/core/ui/Buttons/refresh]] [[$:/core/ui/Buttons/more-page-actions]]"
},
"$:/tags/PageTemplate": {
"title": "$:/tags/PageTemplate",
"list": "[[$:/core/ui/PageTemplate/sidebar]] [[$:/core/ui/PageTemplate/story]] [[$:/core/ui/PageTemplate/alerts]] [[$:/core/ui/PageTemplate/topleftbar]] [[$:/core/ui/PageTemplate/toprightbar]]",
"text": ""
},
"$:/tags/SideBar": {
"title": "$:/tags/SideBar",
"list": "[[$:/core/ui/SideBar/Open]] [[$:/core/ui/SideBar/Recent]] [[$:/core/ui/SideBar/Tools]] [[$:/core/ui/SideBar/More]]",
"text": ""
},
"$:/tags/TiddlerInfo": {
"title": "$:/tags/TiddlerInfo",
"list": "[[$:/core/ui/TiddlerInfo/Tools]] [[$:/core/ui/TiddlerInfo/References]] [[$:/core/ui/TiddlerInfo/Tagging]] [[$:/core/ui/TiddlerInfo/List]] [[$:/core/ui/TiddlerInfo/Listed]] [[$:/core/ui/TiddlerInfo/Fields]]",
"text": ""
},
"$:/tags/TiddlerInfo/Advanced": {
"title": "$:/tags/TiddlerInfo/Advanced",
"list": "[[$:/core/ui/TiddlerInfo/Advanced/ShadowInfo]] [[$:/core/ui/TiddlerInfo/Advanced/PluginInfo]]"
},
"$:/tags/ViewTemplate": {
"title": "$:/tags/ViewTemplate",
"list": "[[$:/core/ui/ViewTemplate/title]] [[$:/core/ui/ViewTemplate/subtitle]] [[$:/core/ui/ViewTemplate/tags]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/ViewTemplate/body]]"
},
"$:/tags/ViewToolbar": {
"title": "$:/tags/ViewToolbar",
"list": "[[$:/core/ui/Buttons/more-tiddler-actions]] [[$:/core/ui/Buttons/info]] [[$:/core/ui/Buttons/new-here]] [[$:/core/ui/Buttons/new-journal-here]] [[$:/core/ui/Buttons/clone]] [[$:/core/ui/Buttons/export-tiddler]] [[$:/core/ui/Buttons/edit]] [[$:/core/ui/Buttons/permalink]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/close-others]] [[$:/core/ui/Buttons/close]]"
},
"$:/snippets/themeswitcher": {
"title": "$:/snippets/themeswitcher",
"text": "\\define lingo-base() $:/language/ControlPanel/Theme/\n<<lingo Prompt>> <$view tiddler={{$:/theme}} field=\"name\"/>\n\n<$linkcatcher to=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\"><div><$reveal state=\"$:/theme\" type=\"match\" text={{!!title}}>•</$reveal><$reveal state=\"$:/theme\" type=\"nomatch\" text={{!!title}}> </$reveal> <$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' <$view field=\"description\" format=\"text\"/></$link></div>\n</$list>\n</$linkcatcher>"
},
"$:/core/wiki/title": {
"title": "$:/core/wiki/title",
"type": "text/vnd.tiddlywiki",
"text": "{{$:/SiteTitle}} --- {{$:/SiteSubtitle}}"
},
"$:/view": {
"title": "$:/view",
"text": "classic"
},
"$:/snippets/viewswitcher": {
"title": "$:/snippets/viewswitcher",
"text": "\\define lingo-base() $:/language/ControlPanel/StoryView/\n<<lingo Prompt>> <$select tiddler=\"$:/view\">\n<$list filter=\"[storyviews[]]\">\n<option><$view field=\"title\"/></option>\n</$list>\n</$select>"
}
}
}
[[The Tragedy of Hamlet, Prince of Denmark]]
table.dialogWithStageDirectionFisco {
border: 0px !important;
border-collapse: collapse !important;
margin: 0 !important;
padding: 0 !important;
width: 100% !important;
}
table.dialogWithStageDirectionFisco td {
border: 0px !important;
padding: 0 !important;
margin: 0 !important;
}
table.dialogWithStageDirectionFisco td:nth-child(2) {
text-align: right !important;
padding-left: 2em !important;
}
.stageDirectionFisco {
text-align: center;
}
.sceneHeaderFisco {
font-size: 1.08em !important;
margin-bottom: 0 !important;
}
.textAndFacsimiliesBlockFisco {
margin-top: 0 !important;
}
p.textAndFacsimiliesBlockFisco, ul.textAndFacsimiliesBlockFisco {
margin: 0 !important;
padding: 0 !important;
}
ul.textAndFacsimiliesBlockFisco li {
display: inline-block;
/* border-left: 2px solid;
padding-left: 0.3em; */
padding-right: 0.1em;
}
ul.textAndFacsimiliesBlockFisco li:before {
content: " | ";
}
ul.textAndFacsimiliesBlockFisco li:first-child {
padding-left: 0;
border-left: none;
}
ul.textAndFacsimiliesBlockFisco li:first-child:before {
content: "";
}
{
"tiddlers": {
"Act 3, Scene 4 (First Folio)": {
"text": "@@.stageDirectionFisco\n// Enter Queene and Polonius//.\n@@\n\n''//Pol//.'' He will come straight:\n\nLooke you lay home to him,\n\nTell him his prankes haue been too broad to beare with,\n\nAnd that your Grace hath scree'nd, and stoode betweene\n\nMuch heate, and him. Ile silence me e'ene heere:\n\nPray you be round with him.\n\n''//Ham//.'' //within//. Mother, mother, mother.\n\n''//Qu//.'' Ile warrant you, feare me not.\n\nWithdraw, I heare him comming.\n\n@@.stageDirectionFisco\n// Enter Hamlet//.\n@@\n\n''//Ham//.'' Now Mother, what's the matter?\n\n''//Qu//.'' //Hamlet//, thou hast thy Father much offended.\n\n''//Ham//.'' Mother, you haue my Father much offended.\n\n''//Qu//.'' Come, come, you answer with an idle tongue.\n\n''//Ham//.'' Go, go, you question with an idle tongue.\n\n''//Qu//.'' Why how now //Hamlet//?\n\n''//Ham//.'' Whats the matter now?\n\n''//Qu//.'' Haue you forgot me?\n\n''//Ham//.'' No by the Rood, not so:\n\nYou are the Queene, your Husbands Brothers wife,\n\nBut would you were not so. You are my Mother.\n\n''//Qu//.'' Nay, then Ile set those to you that can speake.\n\n''//Ham//.'' Come, come, and sit you downe, you shall not\n\nboudge:\n\nYou go not till I set you vp a glasse,\n\nWhere you may see the inmost part of you?\n\n''//Qu//.'' What wilt thou do? thou wilt not murther me?\n\nHelpe, helpe, hoa.\n\n''//Pol//.'' What hoa, helpe, helpe, helpe.\n\n''//Ham//.'' How now, a Rat? dead for a Ducate, dead.\n\n|dialogWithStageDirectionFisco|k\n|''//Pol//.'' Oh I am slaine.|//Killes Polonius//.|\n\n''//Qu//.'' Oh me, what hast thou done?\n\n''//Ham//.'' Nay I know not, is it the King?\n\n''//Qu//.'' Oh what a rash, and bloody deed is this?\n\n''//Ham//.'' A bloody deed, almost as bad good Mother,\n\nAs kill a King, and marrie with his Brother.\n\n''//Qu//.'' As kill a King?\n\n''//Ham//.'' I Lady, 'twas my word.\n\nThou wretched, rash, intruding foole farewell,\n\nI tooke thee for thy Betters, take thy Fortune,\n\nThou find'st to be too busie, is some danger.\n\nLeaue wringing of your hands, peace, sit you downe,\n\nAnd let me wring your heart, for so I shall\n\nIf it be made of penetrable stuffe;\n\nIf damned Custome haue not braz'd it so,\n\nThat it is proofe and bulwarke against Sense.\n\n''//Qu//.'' What haue I done, that thou dar'st wag thy tong,\n\nIn noise so rude against me?\n\n''//Ham//.'' Such an Act\n\nThat blurres the grace and blush of Modestie,\n\nCals Vertue Hypocrite, takes off the Rose\n\nFrom the faire forehead of an innocent loue,\n\nAnd makes a blister there. Makes marriage vowes\n\nAs false as Dicers Oathes. Oh such a deed,\n\nAs from the body of Contraction pluckes\n\nThe very soule, and sweete Religion makes\n\nA rapsidie of words. Heauens face doth glow,\n\nYea this solidity and compound masse,\n\nWith tristfull visage as against the doome,\n\nIs thought-sicke at the act.\n\n''//Qu//.'' Aye me; what act, that roares so lowd, & thun-\n\nders in the Index.\n\n''//Ham//.'' Looke heere vpon this Picture, and on this,\n\nThe counterfet presentment of two Brothers:\n\nSee what a grace was seated on his Brow,\n\n//Hyperions// curles, the front of Ioue himselfe,\n\nAn eye like Mars, to threaten or command\n\nA Station, like the Herald Mercurie\n\nNew lighted on a heauen-kissing hill:\n\nA Combination, and a forme indeed,\n\nWhere euery God did seeme to set his Seale,\n\nTo giue the world assurance of a man.\n\nThis was your Husband. Looke you now what followes.\n\nHeere is your Husband, like a Mildew'd eare\n\nBlasting his wholsom breath. Haue you eyes?\n\nCould you on this faire Mountaine leaue to feed,\n\nAnd batten on this Moore? Ha? Haue you eyes?\n\nYou cannot call it Loue: For at your age,\n\nThe hey-day in the blood is tame, it's humble,\n\nAnd waites vpon the Iudgement: and what Iudgement\n\nWould step from this, to this? What diuell was't,\n\nThat thus hath cousend you at hoodman-blinde?\n\nO Shame! where is thy Blush? Rebellious Hell,\n\nIf thou canst mutine in a Matrons bones,\n\nTo flaming youth, let Vertue be as waxe,\n\nAnd melt in her owne fire. Proclaime no shame,\n\nWhen the compulsiue Ardure giues the charge,\n\nSince Frost it selfe, as actiuely doth burne,\n\nAs Reason panders Will.\n\n''//Qu//.'' O //Hamlet//, speake no more.\n\nThou turn'st mine eyes into my very soule,\n\nAnd there I see such blacke and grained spots,\n\nAs will not leaue their Tinct.\n\n''//Ham//.'' Nay, but to liue\n\nIn the ranke sweat of an enseamed bed,\n\nStew'd in Corruption; honying and making loue\n\nOuer the nasty Stye.\n\n''//Qu//.'' Oh speake to me, no more,\n\nThese words like Daggers enter in mine eares.\n\nNo more sweet //Hamlet//.\n\n''//Ham//.'' A Murderer, and a Villaine:\n\nA Slaue, that is not twentieth patt the tythe\n\nOf your precedent Lord. A vice of Kings,\n\nA Cutpurse of the Empire and the Rule.\n\nThat from a shelfe, the precious Diadem stole,\n\nAnd put it in his Pocket.\n\n''//Qu//.'' No more.\n\n@@.stageDirectionFisco\n// Enter Ghost//.\n@@\n\n''//Ham//.'' A King of shreds and patches.\n\nSaue me; and houer o're me with your wings\n\nYou heauenly Guards. What would you gracious figure?\n\n''//Qu//.'' Alas he's mad.\n\n''//Ham//.'' Do you not come your tardy Sonne to chide,\n\nThat laps't in Time and Passion, lets go by\n\nTh'important acting of your dread command? Oh say.\n\n''//Ghost//.'' Do not forget: this Visitation\n\nIs but to whet thy almost blunted purpose.\n\nBut looke, Amazement on thy Mother sits;\n\nO step betweene her, and her fighting Soule,\n\nConceit in weakest bodies, strongest workes.\n\nSpeake to her //Hamlet//.\n\n''//Ham//.'' How is it with you Lady?\n\n''//Qu//.'' Alas, how is't with you?\n\nThat you bend your eye on vacancie,\n\nAnd with their corporall ayre do hold discourse.\n\nForth at your eyes, your spirits wildely peepe,\n\nAnd as the sleeping Soldiours in th'Alarme,\n\nYour bedded haire, like life in excrements,\n\nStart vp, and stand an end. Oh gentle Sonne,\n\nVpon the heate and flame of thy distemper\n\nSprinkle coole patience. Whereon do you looke?\n\n''//Ham//.'' On him, on him: look you how pale he glares,\n\nHis forme and cause conioyn'd, preaching to stones,\n\nWould make them capeable. Do not looke vpon me,\n\nLeast with this pitteous action you conuert\n\nMy sterne effects: then what I haue to do,\n\nWill want true colour; teares perchance for blood.\n\n''//Qu//.'' To who do you speake this?\n\n''//Ham//.'' Do you see nothing there?\n\n''//Qu//.'' Nothing at all, yet all that is I see.\n\n''//Ham//.'' Nor did you nothing heare?\n\n''//Qu//.'' No, nothing but our selues.\n\n''//Ham//.'' Why look you there: looke how it steals away:\n\nMy Father in his habite, as he liued,\n\n|dialogWithStageDirectionFisco|k\n|Looke where he goes euen now out at the Portall.|//Exit//.|\n\n''//Qu//.'' This is the very coynage of your Braine,\n\nThis bodilesse Creation extasie is very cunning in.\n\n''//Ham//.'' Extasie?\n\nMy Pulse as yours doth temperately keepe time,\n\nAnd makes as healthfull Musicke. It is not madnesse\n\nThat I haue vttered; bring me to the Test\n\nAnd I the matter will re-word: which madnesse\n\nWould gamboll from. Mother, for loue of Grace,\n\nLay not a flattering Vnction to your soule,\n\nThat not your trespasse, but my madnesse speakes:\n\nIt will but skin and filme the Vlcerous place,\n\nWhil'st ranke Corruption mining all within,\n\nInfects vnseene. Confesse your selfe to Heauen,\n\nRepent what's past, auoyd what is to come,\n\nAnd do not spred the Compost or the Weedes,\n\nTo make them ranke. Forgiue me this my Vertue,\n\nFor in the fatnesse of this pursie times,\n\nVertue it selfe, of Vice must pardon begge,\n\nYea courb, and woe, for leaue to do him good.\n\n''//Qu//.'' Oh //Hamlet//,\n\nThou hast cleft my heart in twaine.\n\n''//Ham//.'' O throw away the worser part of it,\n\nAnd liue the purer with the other halfe.\n\nGood night, but go not to mine Vnkles bed,\n\nAssume a Vertue, if you haue it not, refraine to night,\n\nAnd that shall lend a kinde of easinesse\n\nTo the next abstinence. Once more goodnight,\n\nAnd when you are desirous to be blest,\n\nIle blessing begge of you. For this same Lord,\n\nI do repent: but heauen hath pleas'd it so,\n\nTo punish me with this, and this with me,\n\nThat I must be their Scourge and Minister.\n\nI will bestow him, and will answer well\n\nThe death I gaue him: so againe, good night.\n\nI must be cruell, onely to be kinde;\n\nThus bad begins, and worse remaines behinde.\n\n''//Qu//.'' What shall I do?\n\n''//Ham//.'' Not this by no meanes that I bid you do:\n\nLet the blunt King tempt you againe to bed,\n\nPinch Wanton on your cheeke, call you his Mouse,\n\nAnd let him for a paire of reechie kisses,\n\n \n\nOr padling in your necke with his damn'd Fingers,\n\nMake you to rauell all this matter out,\n\nThat I essentially am not in madnesse,\n\nBut made in craft. 'Twere good you let him know,\n\nFor who that's but a Queene, faire, sober, wise,\n\nWould from a Paddocke, from a Bat, a Gibbe,\n\nSuch deere concernings hide, Who would do so,\n\nNo in despight of Sense and Secrecie,\n\nVnpegge the Basket on the houses top:\n\nLet the Birds flye, and like the famous Ape\n\nTo try Conclusions in the Basket, creepe\n\nAnd breake your owne necke downe.\n\n''//Qu//.'' Be thou assur'd, if words be made of breath,\n\nAnd breath of life: I haue no life to breath\n\nWhat thou hast saide to me.\n\n''//Ham//.'' I must to England, you know that?\n\n''//Qu//.'' Alacke I had forgot: 'Tis so concluded on.\n\n''//Ham//.'' This man shall set me packing:\n\nIle lugge the Guts into the Neighbor roome,\n\nMother goodnight. Indeede this Counsellor\n\nIs now most still, most secret, and most graue,\n\nWho was in life, a foolish prating Knaue.\n\nCome sir, to draw toward an end with you.\n\nGood night Mother.\n\n|dialogWithStageDirectionFisco|k\n||//Exit Hamlet tugging in Polonius//.|",
"title": "Act 3, Scene 4 (First Folio)",
"tags": "script [[First Folio]] [[Act 3]]",
"modifier": "D.F.",
"modified": "20150206234405365",
"creator": "D.F.",
"created": "20150122003217033"
},
"Act 3": {
"title": "Act 3"
}
}
}
David Fisco's Hamlet Study Wiki
$:/core/ui/AdvancedSearch/Filter
$:/themes/tiddlywiki/vanilla/themetweaks
$:/core/ui/ControlPanel/Basics
$:/core/ui/ControlPanel/Info
$:/core/ui/MoreSideBar/Shadows
{
"tiddlers": {
"$:/info/browser": {
"title": "$:/info/browser",
"text": "yes"
},
"$:/info/node": {
"title": "$:/info/node",
"text": "no"
}
}
}
{
"tiddlers": {
"$:/themes/tiddlywiki/snowwhite/base": {
"title": "$:/themes/tiddlywiki/snowwhite/base",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n.tc-sidebar-header {\n\ttext-shadow: 0 1px 0 <<colour sidebar-foreground-shadow>>;\n}\n\n.tc-tiddler-info {\n\t<<box-shadow \"inset 1px 2px 3px rgba(0,0,0,0.1)\">>\n}\n\n@media screen {\n\t.tc-tiddler-frame {\n\t\t<<box-shadow \"5px 5px 5px rgba(0, 0, 0, 0.1)\">>\n\t}\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\t<<box-shadow none>>\n\t}\n}\n\n.tc-page-controls button svg, .tc-tiddler-controls button svg, .tc-topbar button svg {\n\t<<transition \"fill 150ms ease-in-out\">>\n}\n\n.tc-tiddler-controls button.tc-selected svg {\n\t<<filter \"drop-shadow(0px -1px 2px rgba(0,0,0,0.25))\">>\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tc-edit-tags {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tc-tiddler-frame .tc-edit-tags input.tc-edit-texteditor {\n\t<<box-shadow \"none\">>\n\tborder: none;\n\toutline: none;\n}\n\ncanvas.tc-edit-bitmapeditor {\n\t<<box-shadow \"2px 2px 5px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-drop-down {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-block-dropdown {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-modal-displayed {\n\t-webkit-filter: blur(4px);\n}\n\n.tc-modal {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n}\n\n.tc-modal-footer {\n\tborder-radius: 0 0 6px 6px;\n\t<<box-shadow \"inset 0 1px 0 #fff\">>;\n}\n\n\n.tc-alert {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.6)\">>\n}\n\n.tc-notification {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n\ttext-shadow: 0 1px 0 rgba(255,255,255, 0.8);\n}\n\n.tc-sidebar-lists .tc-tab-divider {\n\t<<background-linear-gradient \"left, rgb(216,216,216) 0%, rgb(236,236,236) 250px\">>\n}\n\n.tc-more-sidebar .tc-tab-buttons button {\n\t<<background-linear-gradient \"left, rgb(236,236,236) 0%, rgb(224,224,224) 100%\">>\n}\n\n.tc-more-sidebar .tc-tab-buttons button.tc-tab-selected {\n\t<<background-linear-gradient \"left, rgb(236,236,236) 0%, rgb(248,248,248) 100%\">>\n}\n\n.tc-message-box img {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n\n.tc-plugin-info {\n\t<<box-shadow \"2px 2px 4px rgba(0,0,0,0.2)\">>\n}\n"
}
}
}
{
"tiddlers": {
"$:/themes/tiddlywiki/vanilla/themetweaks": {
"title": "$:/themes/tiddlywiki/vanilla/themetweaks",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "Theme Tweaks",
"text": "You can tweak certain aspects of the ''Vanilla'' theme.\n\n! Settings\n\n* [[Font family|$:/themes/tiddlywiki/vanilla/settings/fontfamily]]: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\" default=\"\" tag=\"input\"/>\n\n! Sizes\n\n* [[Font size|$:/themes/tiddlywiki/vanilla/metrics/fontsize]]: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\" default=\"\" tag=\"input\"/>\n* [[Line height|$:/themes/tiddlywiki/vanilla/metrics/lineheight]]: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\" default=\"\" tag=\"input\"/>\n* [[Font size for tiddler body|$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize]]: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\" default=\"\" tag=\"input\"/>\n* [[Line height for tiddler body|$:/themes/tiddlywiki/vanilla/metrics/bodylineheight]]: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\" default=\"\" tag=\"input\"/>\n* [[Story left position|$:/themes/tiddlywiki/vanilla/metrics/storyleft]] //(the distance between the left of the screen and the left margin of the story river or tiddler area)//: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\" default=\"\" tag=\"input\"/>\n* [[Story top position|$:/themes/tiddlywiki/vanilla/metrics/storytop]] //(the distance between the top of the screen and the top margin of the story river or tiddler area)//: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\" default=\"\" tag=\"input\"/>\n* [[Story right|$:/themes/tiddlywiki/vanilla/metrics/storyright]] //(the distance between the left side of the screen and the left margin of the sidebar area)//: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\" default=\"\" tag=\"input\"/>\n* [[Story width|$:/themes/tiddlywiki/vanilla/metrics/storywidth]] //(the width of the story river or tiddler area)//: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\" default=\"\" tag=\"input\"/>\n* [[Tiddler width|$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth]] //(the width of individual tiddlers -- used for zoomin storyview)//: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\" default=\"\" tag=\"input\"/>\n* [[Sidebar breakpoint|$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint]] //(the minimum width for the sidebar to be displayed alongside the story river)//: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\" default=\"\" tag=\"input\"/>\n"
},
"$:/themes/tiddlywiki/vanilla/base": {
"title": "$:/themes/tiddlywiki/vanilla/base",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n/*\n** Start with the normalize CSS reset, and then belay some of its effects\n*/\n\n{{$:/themes/tiddlywiki/vanilla/reset}}\n\n*, input[type=\"search\"] {\n\tbox-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n}\n\nhtml button {\n\tline-height: 1.2;\n}\n\n/*\n** Basic element styles\n*/\n\nhtml {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/fontfamily}};\n\ttext-rendering: optimizeLegibility; /* Enables kerning and ligatures etc. */\t\n}\n\nhtml:-webkit-full-screen {\n\tbackground-color: <<colour page-background>>;\n}\n\nbody.tc-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/fontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/lineheight}};\n\tcolor: <<colour foreground>>;\n\tbackground-color: <<colour page-background>>;\n\tword-wrap: break-word;\n}\n\nh1, h2, h3, h4, h5, h6 {\n\tline-height: 1.2;\n\tfont-weight: 300;\n}\n\npre {\n\tdisplay: block;\n\tpadding: 14px;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n\tword-break: normal;\n\tword-wrap: break-word;\n\twhite-space: pre;\n\twhite-space: pre-wrap;\n\tbackground-color: <<colour pre-background>>;\n\tborder: 1px solid <<colour pre-border>>;\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n}\n\ncode {\n\tcolor: <<colour code-foreground>>;\n\tbackground-color: <<colour code-background>>;\n\tborder: 1px solid <<colour code-border>>;\n white-space: pre-wrap;\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n}\n\nblockquote {\n\tborder-left: 5px solid <<colour blockquote-bar>>;\n\tmargin-left: 25px;\n\tpadding-left: 10px;\n}\n\ndl dt {\n\tfont-weight: bold;\n\tmargin-top: 6px;\n}\n\n.tc-muted {\n\tcolor: <<colour muted-foreground>>;\n}\n\n/*\nMarkdown likes putting code elements inside pre elements\n*/\npre > code {\n\tpadding: 0;\n\tborder: none;\n\tbackground-color: inherit;\n\tcolor: inherit;\n}\n\ntable {\n\tborder: 1px solid <<colour table-border>>;\n\twidth: auto;\n\tmax-width: 100%;\n\tcaption-side: bottom;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n}\n\ntable th, table td {\n\tpadding: 0 7px 0 7px;\n\tborder-top: 1px solid <<colour table-border>>;\n\tborder-left: 1px solid <<colour table-border>>;\n}\n\ntable thead tr td, table th {\n\tbackground-color: <<colour table-header-background>>;\n\tfont-weight: bold;\n}\n\ntable tfoot tr td {\n\tbackground-color: <<colour table-footer-background>>;\n}\n\n.tc-csv-table {\n\twhite-space: nowrap;\n}\n\n.tc-tiddler-frame img,\n.tc-tiddler-frame svg,\n.tc-tiddler-frame canvas,\n.tc-tiddler-frame embed,\n.tc-tiddler-frame iframe {\n\tmax-width: 100%;\n}\n\n.tc-tiddler-body > embed,\n.tc-tiddler-body > iframe {\n\twidth: 100%;\n\theight: 600px;\n}\n\n/*\n** Links\n*/\n\nbutton.tc-tiddlylink,\na.tc-tiddlylink {\n\ttext-decoration: none;\n\tfont-weight: normal;\n\tcolor: <<colour tiddler-link-foreground>>;\n\t-webkit-user-select: inherit; /* Otherwise the draggable attribute makes links impossible to select */\n}\n\n.tc-sidebar-lists a.tc-tiddlylink {\n\tcolor: <<colour sidebar-tiddler-link-foreground>>;\n}\n\n.tc-sidebar-lists a.tc-tiddlylink:hover {\n\tcolor: <<colour sidebar-tiddler-link-foreground-hover>>;\n}\n\nbutton.tc-tiddlylink:hover,\na.tc-tiddlylink:hover {\n\ttext-decoration: underline;\n}\n\na.tc-tiddlylink-resolves {\n}\n\na.tc-tiddlylink-shadow {\n\tfont-weight: bold;\n}\n\na.tc-tiddlylink-shadow.tc-tiddlylink-resolves {\n\tfont-weight: normal;\n}\n\na.tc-tiddlylink-missing {\n\tfont-style: italic;\n}\n\na.tc-tiddlylink-external {\n\ttext-decoration: underline;\n\tcolor: <<colour external-link-foreground>>;\n\tbackground-color: <<colour external-link-background>>;\n}\n\na.tc-tiddlylink-external:visited {\n\tcolor: <<colour external-link-foreground-visited>>;\n\tbackground-color: <<colour external-link-background-visited>>;\n}\n\na.tc-tiddlylink-external:hover {\n\tcolor: <<colour external-link-foreground-hover>>;\n\tbackground-color: <<colour external-link-background-hover>>;\n}\n\n/*\n** Drag and drop styles\n*/\n\n.tc-tiddler-dragger {\n\tposition: relative;\n\tz-index: -10000;\n}\n\n.tc-tiddler-dragger-inner {\n\tposition: absolute;\n\tdisplay: inline-block;\n\tpadding: 8px 20px;\n\tfont-size: 16.9px;\n\tfont-weight: bold;\n\tline-height: 20px;\n\tcolor: <<colour dragger-foreground>>;\n\ttext-shadow: 0 1px 0 rgba(0, 0, 0, 1);\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour dragger-background>>;\n\tborder-radius: 20px;\n}\n\n.tc-tiddler-dragger-cover {\n\tposition: absolute;\n\tbackground-color: <<colour page-background>>;\n}\n\n.tc-dropzone {\n\tposition: relative;\n}\n\n.tc-dropzone.tc-dragover:before {\n\tz-index: 10000;\n\tdisplay: block;\n\tposition: absolute;\n\tposition: -webkit-sticky;\n\tposition: -moz-sticky;\n\tposition: -o-sticky;\n\tposition: -ms-sticky;\n\tposition: sticky;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <<colour dropzone-background>>;\n\ttext-align: center;\n\tcontent: \"<<lingo DropMessage>>\";\n}\n\n/*\n** Buttons\n*/\n\nbutton svg, button img {\n\tvertical-align: middle;\n}\n\n.tc-btn-invisible {\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n}\n\n.tc-btn-icon svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-btn-text {\n\tpadding: 0;\n\tmargin: 0;\n}\n\n.tc-btn-big-green {\n\tpadding: 8px;\n\tmargin: 4px 8px 4px 8px;\n\tbackground: <<colour download-background>>;\n\tcolor: <<colour download-foreground>>;\n\tfill: <<colour download-foreground>>;\n\tborder: none;\n\tfont-size: 1.2em;\n\tline-height: 1.4em;\n}\n\n.tc-sidebar-lists input {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-sidebar-lists button {\n\tcolor: <<colour sidebar-button-foreground>>;\n\tfill: <<colour sidebar-button-foreground>>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini {\n\tcolor: <<colour sidebar-muted-foreground>>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini:hover {\n\tcolor: <<colour sidebar-muted-foreground-hover>>;\n}\n\nbutton svg.tc-image-button, button .tc-image-button img {\n\theight: 1em;\n\twidth: 1em;\n}\n\n/*\n** Tags and missing tiddlers\n*/\n\n.tc-tag-list-item {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin-right: 7px;\n}\n\n.tc-tags-wrapper {\n\tmargin: 4px 0 14px 0;\n}\n\n.tc-missing-tiddler-label {\n\tfont-style: italic;\n\tfont-weight: normal;\n\tdisplay: inline-block;\n\tfont-size: 11.844px;\n\tline-height: 14px;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n}\n\nbutton.tc-tag-label, span.tc-tag-label {\n\tdisplay: inline-block;\n\tpadding: 0.16em 0.7em;\n\tfont-size: 0.9em;\n\tfont-weight: 300;\n\tline-height: 1.2em;\n\tcolor: <<colour tag-foreground>>;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour tag-background>>;\n\tborder-radius: 1em;\n}\n\n.tc-untagged-separator {\n\twidth: 10em;\n\tleft: 0;\n\tmargin-left: 0;\n\tborder: 0;\n\theight: 1px;\n\tbackground: <<colour tab-divider>>;\n}\n\nbutton.tc-untagged-label {\n\tbackground-color: <<colour untagged-background>>;\n}\n\n.tc-tag-label svg, .tc-tag-label img {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour tag-foreground>>;\n}\n\n.tc-tag-manager-table .tc-tag-label {\n\twhite-space: normal;\n}\n\n.tc-tag-manager-tag {\n\twidth: 100%;\n}\n\n/*\n** Page layout\n*/\n\n.tc-topbar {\n\tposition: fixed;\n\tz-index: 1200;\n}\n\n.tc-topbar-left {\n\tleft: 29px;\n\ttop: 5px;\n}\n\n.tc-topbar-right {\n\ttop: 5px;\n\tright: 29px;\n}\n\n.tc-topbar button {\n\tpadding: 8px;\n}\n\n.tc-topbar svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-topbar button:hover svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-sidebar-header {\n\tcolor: <<colour sidebar-foreground>>;\n\tfill: <<colour sidebar-foreground>>;\n}\n\n.tc-sidebar-header .tc-title a.tc-tiddlylink-resolves {\n\tfont-weight: 300;\n}\n\n.tc-sidebar-header .tc-sidebar-lists p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-sidebar-header .tc-missing-tiddler-label {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tc-advanced-search input {\n\twidth: 60%;\n}\n\n.tc-search a svg {\n\twidth: 1.2em;\n\theight: 1.2em;\n\tvertical-align: middle;\n}\n\n.tc-search-results {\n\tpadding-top: 14px;\n}\n\n.tc-page-controls {\n\tmargin-top: 14px;\n\tfont-size: 1.5em;\n}\n\n.tc-page-controls button {\n\tmargin-right: 0.5em;\n}\n\n.tc-page-controls a.tc-tiddlylink:hover {\n\ttext-decoration: none;\n}\n\n.tc-page-controls img {\n\twidth: 1em;\n}\n\n.tc-page-controls svg,\n.tc-search svg {\n\tfill: <<colour sidebar-controls-foreground>>;\n}\n\n.tc-page-controls button:hover svg, .tc-page-controls a:hover svg,\n.tc-search button:hover svg, .tc-search a:hover svg {\n\tfill: <<colour sidebar-controls-foreground-hover>>;\n}\n\n.tc-menu-list-item {\n\twhite-space: nowrap;\n}\n\n.tc-menu-list-count {\n\tfont-weight: bold;\n}\n\n.tc-menu-list-subitem {\n\tpadding-left: 7px;\n}\n\n.tc-story-river {\n\tposition: relative;\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-sidebar-header {\n\t\tpadding: 14px;\n\t\tmin-height: 32px;\n\t\tmargin-top: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t}\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tpadding: 0;\n\t}\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-message-box {\n\t\tmargin: 21px -21px 21px -21px;\n\t}\n\n\t.tc-sidebar-scrollable {\n\t\tposition: fixed;\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\n\t\tbottom: 0;\n\t\tright: 0;\n\t\toverflow-y: auto;\n\t\toverflow-x: auto;\n\t\t-webkit-overflow-scrolling: touch;\n\t\tmargin: 0 0 0 -42px;\n\t\tpadding: 71px 0 28px 42px;\n\t}\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/storywidth}};\n\t\tpadding: 42px 42px 42px 42px;\n\t}\n\n<<if-no-sidebar \"\n\n\t.tc-story-river {\n\t\twidth: auto;\n\t}\n\n\">>\n\n}\n\n@media print {\n\n\tbody.tc-body {\n\t\tbackground-color: transparent;\n\t}\n\n\t.tc-sidebar-header, .tc-topbar {\n\t\tdisplay: none;\n\t}\n\n\t.tc-story-river {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\n\t.tc-story-river .tc-tiddler-frame {\n\t\tmargin: 0;\n\t\tborder: none;\n\t\tpadding: 28px;\n\t}\n}\n\n/*\n** Tiddler styles\n*/\n\n.tc-tiddler-frame {\n\tmargin-bottom: 28px;\n\tbackground-color: <<colour tiddler-background>>;\n\tborder: 1px solid <<colour tiddler-border>>;\n}\n\n.tc-tiddler-info {\n\tpadding: 14px 42px 14px 42px;\n\tbackground-color: <<colour tiddler-info-background>>;\n\tborder-top: 1px solid <<colour tiddler-info-border>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-border>>;\n}\n\n.tc-tiddler-info p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-tiddler-info .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour tiddler-info-tab-background>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-tab-background>>;\n}\n\n.tc-view-field-table {\n\twidth: 100%;\n}\n\n.tc-view-field-name {\n\twidth: 1%; /* Makes this column be as narrow as possible */\n\ttext-align: right;\n\tfont-style: italic;\n\tfont-weight: 200;\n}\n\n.tc-view-field-value {\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\tpadding: 14px 14px 14px 14px;\n\t}\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -14px 0 -14px;\n\t}\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\tpadding: 28px 42px 42px 42px;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth}};\n\t\tborder-radius: 2px;\n\t}\n\n<<if-no-sidebar \"\n\n\t.tc-tiddler-frame {\n\t\twidth: 100%;\n\t}\n\n\">>\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -42px 0 -42px;\n\t}\n}\n\n.tc-site-title,\n.tc-titlebar {\n\tfont-weight: 300;\n\tfont-size: 2.35em;\n\tline-height: 1.2em;\n\tcolor: <<colour tiddler-title-foreground>>;\n\tmargin: 0;\n}\n\n.tc-tiddler-title-icon {\n\tvertical-align: middle;\n}\n\n.tc-system-title-prefix {\n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-titlebar h2 {\n\tfont-size: 1em;\n\tdisplay: inline;\n}\n\n.tc-titlebar img {\n\theight: 1em;\n}\n\n.tc-subtitle {\n\tfont-size: 0.9em;\n\tcolor: <<colour tiddler-subtitle-foreground>>;\n\tfont-weight: 300;\n}\n\n.tc-tiddler-missing .tc-title {\n font-style: italic;\n font-weight: normal;\n}\n\n.tc-tiddler-frame .tc-tiddler-controls {\n\tfloat: right;\n}\n\n.tc-tiddler-controls .tc-drop-down {\n\tfont-size: 0.6em;\n}\n\n.tc-tiddler-controls .tc-drop-down .tc-drop-down {\n\tfont-size: 1em;\n}\n\n.tc-tiddler-controls > span > button {\n\tvertical-align: baseline;\n\tmargin-left:5px;\n}\n\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img {\n\theight: 0.75em;\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tc-tiddler-controls button.tc-selected svg {\n\tfill: <<colour tiddler-controls-foreground-selected>>;\n}\n\n.tc-tiddler-controls button.tc-btn-invisible:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n@media print {\n\t.tc-tiddler-controls {\n\t\tdisplay: none;\n\t}\n}\n\n.tc-tiddler-help { /* Help prompts within tiddler template */\n\tcolor: <<colour muted-foreground>>;\n\tmargin-top: 14px;\n}\n\n.tc-tiddler-help a.tc-tiddlylink {\n\tcolor: <<colour very-muted-foreground>>;\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor, .tc-tiddler-frame textarea.tc-edit-texteditor {\n\twidth: 100%;\n\tpadding: 3px 3px 3px 3px;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tline-height: 1.3em;\n\t-webkit-appearance: none;\n\tmargin: 4px 0 4px 0;\n}\n\n.tc-tiddler-frame .tc-binary-warning {\n\twidth: 100%;\n\theight: 5em;\n\ttext-align: center;\n\tpadding: 3em 3em 6em 3em;\n\tbackground: <<colour alert-background>>;\n\tborder: 1px solid <<colour alert-border>>;\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor {\n\tbackground-color: <<colour tiddler-editor-background>>;\n}\n\ncanvas.tc-edit-bitmapeditor {\n\tborder: 6px solid <<colour tiddler-editor-border-image>>;\n\tcursor: crosshair;\n\t-moz-user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n\tmargin-top: 6px;\n\tmargin-bottom: 6px;\n}\n\n.tc-edit-bitmapeditor-width {\n\tdisplay: block;\n}\n\n.tc-edit-bitmapeditor-height {\n\tdisplay: block;\n}\n\n.tc-tiddler-frame .tc-tiddler-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/bodylineheight}};\n}\n\n.tc-titlebar, .tc-tiddler-edit-title {\n\toverflow: hidden; /* https://github.com/Jermolene/TiddlyWiki5/issues/282 */\n}\n\n/*\n** Toolbar buttons\n*/\n\n.tc-page-controls svg.tc-image-new-button {\n fill: <<colour toolbar-new-button>>;\n}\n\n.tc-page-controls svg.tc-image-options-button {\n fill: <<colour toolbar-options-button>>;\n}\n\n.tc-page-controls svg.tc-image-save-button {\n fill: <<colour toolbar-save-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-info-button {\n fill: <<colour toolbar-info-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-edit-button {\n fill: <<colour toolbar-edit-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-close-button {\n fill: <<colour toolbar-close-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-delete-button {\n fill: <<colour toolbar-delete-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-cancel-button {\n fill: <<colour toolbar-cancel-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-done-button {\n fill: <<colour toolbar-done-button>>;\n}\n\n/*\n** Tiddler edit mode\n*/\n\n.tc-tiddler-edit-frame em.tc-edit {\n\tcolor: <<colour muted-foreground>>;\n\tfont-style: normal;\n}\n\n.tc-edit-type-dropdown a.tc-tiddlylink-missing {\n\tfont-style: normal;\n}\n\n.tc-edit-tags {\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tpadding: 4px 8px 4px 8px;\n}\n\n.tc-edit-add-tag {\n\tdisplay: inline-block;\n}\n\n.tc-edit-add-tag .tc-add-tag-name input {\n\twidth: 50%;\n}\n\n.tc-edit-tags .tc-tag-label {\n\tdisplay: inline-block;\n}\n\n.tc-edit-tags-list {\n\tmargin: 14px 0 14px 0;\n}\n\n.tc-remove-tag-button {\n\tpadding-left: 4px;\n}\n\n.tc-tiddler-preview {\n\toverflow: auto;\n}\n\n.tc-tiddler-preview-preview {\n\tfloat: right;\n\twidth: 48%;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tmargin: 4px 3px 3px 3px;\n\tpadding: 3px 3px 3px 3px;\n}\n\n.tc-tiddler-preview-edit {\n\twidth: 48%;\n}\n\n.tc-edit-fields {\n\twidth: 100%;\n}\n\n\n.tc-edit-fields table, .tc-edit-fields tr, .tc-edit-fields td {\n\tborder: none;\n\tpadding: 4px;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(odd) {\n\tbackground-color: <<colour tiddler-editor-fields-odd>>;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(even) {\n\tbackground-color: <<colour tiddler-editor-fields-even>>;\n}\n\n.tc-edit-field-name {\n\ttext-align: right;\n}\n\n.tc-edit-field-value input {\n\twidth: 100%;\n}\n\n.tc-edit-field-remove {\n}\n\n.tc-edit-field-remove svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n\tvertical-align: middle;\n}\n\n.tc-edit-field-add-name {\n\tdisplay: inline-block;\n\twidth: 15%;\n}\n\n.tc-edit-field-add-value {\n\tdisplay: inline-block;\n\twidth: 40%;\n}\n\n.tc-edit-field-add-button {\n\tdisplay: inline-block;\n\twidth: 10%;\n}\n\n/*\n** Storyview Classes\n*/\n\n.tc-storyview-zoomin-tiddler {\n\tposition: absolute;\n\tdisplay: block;\n\twidth: 100%;\n\twidth: calc(100% - 84px);\n}\n\n/*\n** Dropdowns\n*/\n\n.tc-btn-dropdown {\n\ttext-align: left;\n}\n\n.tc-btn-dropdown svg, .tc-btn-dropdown img {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-drop-down-wrapper {\n\tposition: relative;\n}\n\n.tc-drop-down {\n\tmin-width: 380px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\ttext-shadow: none;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-drop-down {\n\tmargin-left: 14px;\n}\n\n.tc-drop-down button svg, .tc-drop-down a svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-drop-down button.tc-btn-invisible:hover svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-drop-down p {\n\tpadding: 0 14px 0 14px;\n}\n\n.tc-drop-down svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-drop-down img {\n\twidth: 1em;\n}\n\n.tc-drop-down-language-chooser img {\n\twidth: 2em;\n\tvertical-align: baseline;\n}\n\n.tc-drop-down a, .tc-drop-down button {\n\tdisplay: block;\n\tpadding: 0 14px 0 14px;\n\twidth: 100%;\n\ttext-align: left;\n\tcolor: <<colour foreground>>;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-file-input-wrapper {\n\twidth: 100%;\n}\n\n.tc-drop-down .tc-file-input-wrapper button {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-drop-down a:hover, .tc-drop-down button:hover, .tc-drop-down .tc-file-input-wrapper:hover button {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tc-drop-down .tc-tab-buttons button {\n\tbackground-color: <<colour dropdown-tab-background>>;\n}\n\n.tc-drop-down .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour dropdown-tab-background-selected>>;\n\tborder-bottom: 1px solid <<colour dropdown-tab-background-selected>>;\n}\n\n.tc-drop-down-bullet {\n\tdisplay: inline-block;\n\twidth: 0.5em;\n}\n\n.tc-drop-down .tc-tab-contents a {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tc-block-dropdown-wrapper {\n\tposition: relative;\n}\n\n.tc-block-dropdown {\n\tposition: absolute;\n\tmin-width: 220px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\tz-index: 1000;\n}\n\n.tc-block-dropdown a {\n\tdisplay: block;\n\tpadding: 4px 14px 4px 14px;\n}\n\n.tc-drop-down .tc-dropdown-item,\n.tc-block-dropdown .tc-dropdown-item {\n\tpadding: 4px 14px 4px 7px;\n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-block-dropdown a:hover {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n/*\n** Modals\n*/\n\n.tc-modal-wrapper {\n\tposition: fixed;\n\toverflow: auto;\n\toverflow-y: scroll;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n}\n\n.tc-modal-backdrop {\n\tposition: fixed;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 1000;\n\tbackground-color: <<colour modal-backdrop>>;\n}\n\n.tc-modal {\n\tz-index: 1100;\n\tbackground-color: <<colour modal-background>>;\n\tborder: 1px solid <<colour modal-border>>;\n}\n\n@media (max-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 1em;\n\t\tleft: 1em;\n\t\tright: 1em;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t}\n}\n\n@media (min-width: 55em) {\n\t.tc-modal {\n\t\tposition: relative;\n\t\twidth: 50%;\n\t\tmargin: 30px auto;\n\t}\n}\n\n.tc-modal-header {\n\tpadding: 9px 15px;\n\tborder-bottom: 1px solid <<colour modal-header-border>>;\n}\n\n.tc-modal-header h3 {\n\tmargin: 0;\n\tline-height: 30px;\n}\n\n.tc-modal-body {\n\tpadding: 15px;\n}\n\n.tc-modal-footer {\n\tpadding: 14px 15px 15px;\n\tmargin-bottom: 0;\n\ttext-align: right;\n\tbackground-color: <<colour modal-footer-background>>;\n\tborder-top: 1px solid <<colour modal-footer-border>>;\n}\n\n/*\n** Notifications\n*/\n\n.tc-notification {\n\tposition: fixed;\n\ttop: 14px;\n\tright: 42px;\n\tz-index: 1300;\n\tmax-width: 280px;\n\tpadding: 0 14px 0 14px;\n\tbackground-color: <<colour notification-background>>;\n\tborder: 1px solid <<colour notification-border>>;\n}\n\n/*\n** Tabs\n*/\n\n.tc-tab-set.tc-vertical {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tab-buttons {\n\tfont-size: 0.85em;\n\tpadding-top: 1em;\n\tmargin-bottom: -2px;\n}\n\n.tc-tab-buttons.tc-vertical {\n\tz-index: 100;\n\tdisplay: block;\n\tpadding-top: 14px;\n\tvertical-align: top;\n\ttext-align: right;\n\tmargin-bottom: inherit;\n\tmargin-right: -1px;\n\tmax-width: 33%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n}\n\n.tc-tab-buttons button.tc-tab-selected {\n\tcolor: <<colour tab-foreground-selected>>;\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-left: 1px solid <<colour tab-border-selected>>;\n\tborder-top: 1px solid <<colour tab-border-selected>>;\n\tborder-right: 1px solid <<colour tab-border-selected>>;\n}\n\n.tc-tab-buttons button {\n\tcolor: <<colour tab-foreground>>;\n\tpadding: 3px 5px 3px 5px;\n\tfont-weight: 300;\n\tborder: none;\n\tbackground: inherit;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-right: 1px solid <<colour tab-border>>;\n\tborder-top-left-radius: 2px;\n\tborder-top-right-radius: 2px;\n}\n\n.tc-tab-buttons.tc-vertical button {\n\tdisplay: block;\n\twidth: 100%;\n\tmargin-top: 3px;\n\ttext-align: right;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tborder-right: none;\n\tborder-top-left-radius: 2px;\n\tborder-bottom-left-radius: 2px;\n}\n\n.tc-tab-buttons.tc-vertical button.tc-tab-selected {\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-right: 1px solid <<colour tab-background-selected>>;\n}\n\n.tc-tab-divider {\n\tborder-top: 1px solid <<colour tab-divider>>;\n}\n\n.tc-tab-divider.tc-vertical {\n\tdisplay: none;\n}\n\n.tc-tab-content {\n\tmargin-top: 14px;\n}\n\n.tc-tab-content.tc-vertical {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-top: 0;\n\tpadding-left: 14px;\n\tborder-left: 1px solid <<colour tab-border>>;\n\t-webkit-flex: 1 0 70%;\n\tflex: 1 0 70%;\n}\n\n.tc-sidebar-lists .tc-tab-buttons {\n\tmargin-bottom: -1px;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tcolor: <<colour sidebar-tab-foreground-selected>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border-selected>>;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button {\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tcolor: <<colour sidebar-tab-foreground>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border>>;\n}\n\n.tc-sidebar-lists .tc-tab-divider {\n\tborder-top: 1px solid <<colour sidebar-tab-divider>>;\n}\n\n.tc-more-sidebar .tc-tab-buttons button {\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tborder-top: none;\n\tborder-left: none;\n\tborder-bottom: none;\n\tborder-right: 1px solid #ccc;\n\tmargin-bottom: inherit;\n}\n\n.tc-more-sidebar .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tborder: none;\n}\n\n/*\n** Alerts\n*/\n\n.tc-alerts {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tmax-width: 500px;\n\tz-index: 20000;\n}\n\n.tc-alert {\n\tposition: relative;\n\tmargin: 28px;\n\tpadding: 14px 14px 14px 14px;\n\tborder: 2px solid <<colour alert-border>>;\n\tbackground-color: <<colour alert-background>>;\n}\n\n.tc-alert-toolbar {\n\tposition: absolute;\n\ttop: 14px;\n\tright: 14px;\n}\n\n.tc-alert-toolbar svg {\n\tfill: <<colour alert-muted-foreground>>;\n}\n\n.tc-alert-subtitle {\n\tcolor: <<colour alert-muted-foreground>>;\n\tfont-weight: bold;\n}\n\n.tc-alert-highlight {\n\tcolor: <<colour alert-highlight>>;\t\n}\n\n.tc-static-alert {\n\tposition: relative;\n}\n\n.tc-static-alert-inner {\n\tpadding: 0 2px 2px 42px;\n\tcolor: <<colour static-alert-foreground>>;\n\tposition: absolute;\n}\n\n/*\n** Control panel\n*/\n\n.tc-control-panel td {\n\tpadding: 4px;\n}\n\n.tc-control-panel table, .tc-control-panel table input, .tc-control-panel table textarea {\n\twidth: 100%;\n}\n\n.tc-plugin-info {\n\tdisplay: block;\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground-colour: <<colour background>>;\n\tmargin: 1em 0 1em 0;\n\tpadding: 8px;\n}\n\n.tc-plugin-info-disabled {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n\tbackground: repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n}\n\n.tc-plugin-info-disabled:hover {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n\tbackground: repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n}\n\na.tc-tiddlylink.tc-plugin-info:hover {\n\ttext-decoration: none;\n\tbackground-color: <<colour primary>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour foreground>>;\n}\n\na.tc-tiddlylink.tc-plugin-info:hover svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-plugin-info-chunk {\n\tdisplay: inline-block;\n\tvertical-align: middle;\t\n}\n\na.tc-plugin-info img, a.tc-plugin-info svg {\n\twidth: 2em;\n\theight: 2em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-plugin-info-dropdown {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tpadding: 1em 1em 1em 1em;\n\tmargin-top: -1em;\n}\n\n/*\n** Message boxes\n*/\n\n.tc-message-box {\n\tborder: 1px solid <<colour message-border>>;\n\tbackground: <<colour message-background>>;\n\tpadding: 0px 21px 0px 21px;\n\tfont-size: 12px;\n\tline-height: 18px;\n\tcolor: <<colour message-foreground>>;\n}\n\n/*\n** Pictures\n*/\n\n.tc-bordered-image {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tpadding: 5px;\n\tmargin: 5px;\n}\n\n/*\n** Floats\n*/\n\n.tc-float-right {\n\tfloat: right;\n}\n\n/*\n** Chooser\n*/\n\n.tc-chooser {\n\tborder: 1px solid <<colour table-border>>;\n}\n\n.tc-chooser-item {\n\tborder: 8px;\n}\n\n.tc-chooser-item a.tc-tiddlylink {\n\tdisplay: block;\n\ttext-decoration: none;\n\tcolor: <<colour tiddler-link-foreground>>;\n\tbackground-color: <<colour tiddler-link-background>>;\n\tmargin: 4px;\n}\n\n.tc-chooser-item a.tc-tiddlylink:hover {\n\ttext-decoration: none;\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n}\n\n/*\n** Palette swatches\n*/\n\n.tc-swatches-horiz {\n}\n\n.tc-swatches-horiz .tc-swatch {\n\tdisplay: inline-block;\n}\n\n.tc-swatch {\n\twidth: 2em;\n\theight: 2em;\n\tmargin: 4px;\n\tborder: 1px solid #000;\n}\n\n/*\n** Table of contents\n*/\n\n.tc-sidebar-lists .tc-table-of-contents {\n\twhite-space: nowrap;\n}\n\n.tc-table-of-contents button {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tc-table-of-contents svg {\n\twidth: 0.7em;\n\theight: 0.7em;\n\tvertical-align: middle;\n\tfill: <<colour sidebar-foreground>>;\n}\n\n.tc-table-of-contents ol {\n\tlist-style-type: none;\n\tpadding-left: 0;\n}\n\n.tc-table-of-contents ol ol {\n\tpadding-left: 1em;\n}\n\n.tc-table-of-contents li {\n\tfont-size: 1.0em;\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li a {\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li li {\n\tfont-size: 0.95em;\n\tfont-weight: normal;\n\tline-height: 1.4;\n}\n\n.tc-table-of-contents li li a {\n\tfont-weight: normal;\n}\n\n.tc-table-of-contents li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n\tline-height: 1.5;\n}\n\n.tc-table-of-contents li li li a {\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n}\n\n.tc-tabbed-table-of-contents {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents {\n\tz-index: 100;\n\tdisplay: inline-block;\n\tpadding-left: 1em;\n\tmax-width: 50%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n\tbackground: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a,\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tdisplay: block;\n\tpadding: 0.12em 1em 0.12em 0.25em;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a {\n\tborder-top: 1px solid <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-background>>;\n\tborder-bottom: 1px solid <<colour tab-background>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a:hover {\n\ttext-decoration: none;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tbackground: <<colour tab-border>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tbackground: <<colour background>>;\n\tmargin-right: -1px;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a:hover {\n\ttext-decoration: none;\n}\n\n.tc-tabbed-table-of-contents .tc-tabbed-table-of-contents-content {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-left: 1.5em;\n\tpadding-right: 1.5em;\n\tborder: 1px solid <<colour tab-border>>;\n\t-webkit-flex: 1 0 50%;\n\tflex: 1 0 50%;\n}\n\n/*\n** Dirty indicator\n*/\n\nbody.tc-dirty span.tc-dirty-indicator, body.tc-dirty span.tc-dirty-indicator svg {\n\tfill: <<colour dirty-indicator>>;\n\tcolor: <<colour dirty-indicator>>;\n}\n\n/*\n** File inputs\n*/\n\n.tc-file-input-wrapper {\n\tposition: relative;\n\toverflow: hidden;\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n\n.tc-file-input-wrapper input[type=file] {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tfont-size: 999px;\n\tmax-width: 100%;\n\tmax-height: 100%;\n\tfilter: alpha(opacity=0);\n\topacity: 0;\n\toutline: none;\n\tbackground: white;\n\tcursor: pointer;\n\tdisplay: inline-block;\n}\n\n/*\n** Errors\n*/\n\n.tc-error {\n\tbackground: #f00;\n\tcolor: #fff;\n}\n"
},
"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize",
"text": "15px"
},
"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/bodylineheight",
"text": "22px"
},
"$:/themes/tiddlywiki/vanilla/metrics/fontsize": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/fontsize",
"text": "14px"
},
"$:/themes/tiddlywiki/vanilla/metrics/lineheight": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/lineheight",
"text": "20px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storyleft": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storyleft",
"text": "0px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storytop": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storytop",
"text": "0px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storyright": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storyright",
"text": "770px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storywidth": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storywidth",
"text": "770px"
},
"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth",
"text": "686px"
},
"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint",
"text": "960px"
},
"$:/themes/tiddlywiki/vanilla/reset": {
"title": "$:/themes/tiddlywiki/vanilla/reset",
"type": "text/plain",
"text": "/*! normalize.css v3.0.0 | MIT License | git.io/normalize */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n * user zoom.\n */\n\nhtml {\n font-family: sans-serif; /* 1 */\n -ms-text-size-adjust: 100%; /* 2 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n margin: 0;\n}\n\n/* HTML5 display definitions\n ========================================================================== */\n\n/**\n * Correct `block` display not defined in IE 8/9.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; /* 1 */\n vertical-align: baseline; /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9.\n * Hide the `template` element in IE, Safari, and Firefox < 22.\n */\n\n[hidden],\ntemplate {\n display: none;\n}\n\n/* Links\n ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n background: transparent;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n outline: 0;\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9, Safari 5, and Chrome.\n */\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.\n */\n\nb,\nstrong {\n font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari 5 and Chrome.\n */\n\ndfn {\n font-style: italic;\n}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari 5, and Chrome.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9.\n */\n\nimg {\n border: 0;\n}\n\n/**\n * Correct overflow displayed oddly in IE 9.\n */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari 5.\n */\n\nfigure {\n margin: 1em 40px;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n * Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; /* 1 */\n font: inherit; /* 2 */\n margin: 0; /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10.\n */\n\nbutton {\n overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8+, and Opera\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n * and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n * `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; /* 2 */\n cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome\n * (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; /* 2 */\n box-sizing: content-box;\n}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n border: 0; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n\noptgroup {\n font-weight: bold;\n}\n\n/* Tables\n ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n"
},
"$:/themes/tiddlywiki/vanilla/settings/fontfamily": {
"title": "$:/themes/tiddlywiki/vanilla/settings/fontfamily",
"text": "\"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif"
}
}
}
@@.stageDirectionFisco
// Enter Barnardo and Francisco two Centinels//.
@@
''//Barnardo//.''
Who's there?
''//Fran//.'' Nay answer me: Stand & vnfold
your selfe.
''//Bar//.'' Long liue the King.
''//Fran//.'' //Barnardo//?
''//Bar//.'' He.
''//Fran//.'' You come most carefully vpon your houre.
''//Bar//.'' 'Tis now strook twelue, get thee to bed //Francisco//.
''//Fran//.'' For this releefe much thankes: 'Tis bitter cold,
And I am sicke at heart.
''//Barn//.'' Haue you had quiet Guard?
''//Fran//.'' Not a Mouse stirring.
''//Barn//.'' Well, goodnight. If you do meet //Horatio// and
//Marcellus//, the Riuals of my Watch, bid them make hast.
@@.stageDirectionFisco
// Enter Horatio and Marcellus//.
@@
''//Fran//.'' I thinke I heare them. Stand: who's there?
''//Hor//.'' Friends to this ground.
''//Mar//.'' And Leige-men to the Dane.
''//Fran//.'' Giue you good night.
''//Mar//.'' O farwel honest Soldier, who hath relieu'd you?
''//Fra//.'' //Barnardo// ha's my place: giue you goodnight.
|dialogWithStageDirectionFisco|k
| |//Exit Fran//.|
''//Mar//.'' Holla //Barnardo//.
''//Bar//.'' Say, what is //Horatio// there?
''//Hor//.'' A peece of him.
''//Bar//.'' Welcome //Horatio//, welcome good //Marcellus//.
''//Mar//.'' What, ha's this thing appear'd againe to night.
''//Bar//.'' I haue seene nothing.
''//Mar//.'' //Horatio// saies, 'tis but our Fantasie,
And will not let beleefe take hold of him
Touching this dreaded ight, twice seene of vs,
Therefore I haue intreated him along
With vs, to watch the minutes of this Night,
That if againe this Apparition come,
He may approue our eyes, and speake to it.
''//Hor//.'' Tush, tush, 'twill not appeare.
''//Bar//.'' Sit downe a-while,
And let vs once againe assaile your eares,
That are so fortified against our Story,
What we two Nights haue seene.
''//Hor//.'' Well, sit we downe,
And let vs heare //Barnardo// speake of this.
''//Barn//.'' Last night of all,
When yond same Starre that's Westward from the Pole
Had made his course t'illume that part of Heauen
Where now it burnes, //Marcellus// and my selfe,
The Bell then beating one.
|dialogWithStageDirectionFisco|k
|''//Mar//.'' Peace, breake thee of:|//Enter the Ghost//.|
Looke where it comes againe.
''//Barn//.'' In the same figure, like the King that's dead.
''//Mar//.'' Thou art a Scholler; speake to it //Horatio//.
''//Barn//.'' Lookes it not like the King? Marke it //Horatio//.
''//Hora//.'' Most like: It harrowes me with fear & wonder
''//Barn//.'' It would be spoke too.
''//Mar//.'' Question it //Horatio//.
''//Hor//.'' What art thou that vsurp'st this time of night,
Together with that Faire and Warlike forme
In which the Maiesty of buried Denmarke
Did sometimes march: By Heauen I charge thee speake.
''//Mar//.'' It is offended.
''//Barn//.'' See, it stalkes away.
''//Hor//.'' Stay: speake; speake: I Charge thee, speake.
|dialogWithStageDirectionFisco|k
| |//Exit the Ghost//.|
''//Mar//.'' 'Tis gone, and will not answer.
''//Barn//.'' How now //Horatio//? You tremble & look pale:
Is not this something more then Fantasie?
What thinke you on't?
''//Hor//.'' Before my God, I might not this beleeue
Without the sensible and true auouch
Of mine owne eyes.
''//Mar//.'' Is it not like the King?
''//Hor//.'' As thou art to thy selfe,
Such was the very Armour he had on,
When th'Ambitious Norwey combatted:
So frown'd he once, when in an angry parle
He smot the sledded Pollax on the Ice.
'Tis strange.
''//Mar//.'' Thus twice before, and iust at this dead houre,
With Martiall stalke, hath he gone by our Watch.
''//Hor//.'' In what particular thought to work, I know not:
But in the grosse and scope of my Opinion,
This boades some strange erruption to our State.
''//Mar//.'' Good now sit downe, & tell me he that knowes
Why this same strict and most obseruant Watch,
So nightly toyles the subiect of the Land,
And why such dayly Cast of Brazon Cannon
And Forraigne Mart for Implements of warre:
Why such impresse of Ship-wrights, whose sore Taske
Do's not diuide the Sunday from the weeke,
What might be toward, that this sweaty hast
Doth make the Night ioynt-Labourer with the day:
Who is't that can informe me?
''//Hor//.'' That can I,
At least the whisper goes so: Our last King,
Whose Image euen but now appear'd to vs,
Was (as you know) by //Fortinbras// of Norway,
(Thereto prick'd on by a most emulate Pride)
Dar'd to the Combate. In which, our Valiant //Hamlet//,
(For so this side of our knowne world esteem'd him)
Did slay this //Fortinbras:// who by a Seal'd Compact,
Well ratified by Law, and Heraldrie,
Did forfeite (with his life) all those his Lands
Which he stood seiz'd on, to the Conqueror:
Against the which, a Moity competent
Was gaged by our King: which had return'd
To the Inheritance of //Fortinbras//,
Had he bin Vanquisher, as by the same Cou'nant
And carriage of the Article designe,
His fell to //Hamlet//. Now sir, young //Fortinbras//,
Of vnimproued Mettle, hot and full,
Hath in the skirts of Norway, heere and there,
Shark'd vp a List of Landlesse Resolutes,
For Foode and Diet, to some Enterprize
That hath a stomacke in't: which is no other
(And it doth well appeare vnto our State)
But to recouer of vs by strong hand
And termes Compulsatiue, those foresaid Lands
So by his Father lost: and this (I take it)
Is the maine Motiue of our Preparations,
The Sourse of this our Watch, and the cheefe head
Of this post-hast, and Romage in the Land.
@@.stageDirectionFisco
// Enter Ghost againe//.
@@
But soft, behold: Loe, where it comes againe:
Ile crosse it, though it blast me. Stay Illusion:
If thou hast any sound, or vse of Voyce,
Speake to me. If there be any good thing to be done,
That may to thee do ease, and grace to me; speak to me.
If thou art priuy to thy Countries Fate
(Which happily foreknowing may auoyd) Oh speake.
Or, if thou hast vp-hoorded in thy life
Extorted Treasure in the wombe of Earth,
(For which, they say, you Spirits oft walke in death)
Speake of it. Stay, and speake. Stop it //Marcellus//.
''//Mar//.'' Shall I strike at it with my Partizan?
''//Hor//.'' Do, if it will not stand.
''//Barn//.'' 'Tis heere.
''//Hor//.'' 'Tis heere.
|dialogWithStageDirectionFisco|k
|''//Mar//.'' 'Tis gone.|//Exit Ghost//.|
We do it wrong, being so Maiesticall
To offer it the shew of Violence,
For it is as the Ayre, invulnerable,
And our vaine blowes, malicious Mockery.
''//Barn//.'' It was about to speake, when the Cocke crew.
''//Hor//.'' And then it started, like a guilty thing
Vpon a fearfull Summons. I haue heard,
The Cocke that is the Trumpet to the day,
Doth with his lofty and shrill-sounding Throate
Awake the God of Day: and at his warning,
Whether in Sea, or Fire, in Earth, or Ayre,
Th'extrauagant, and erring Spirit, hyes
To his Confine. And of the truth heerein,
This present Obiect made probation.
''//Mar//.'' It faded on the crowing of the Cocke.
Some sayes, that euer 'gainst that Season comes
Wherein our Sauiours Birth is celebrated,
The Bird of Dawning singeth all night long:
And then (they say) no Spirit can walke abroad,
The nights are wholsome, then no Planets strike,
No Faiery talkes, nor Witch hath power to Charme:
So hallow'd, and so gracious is the time.
''//Hor//.'' So haue I heard, and do in part beleeue it.
But looke, the Morne in Russet mantle clad,
Walkes o're the dew of yon high Easterne Hill,
Breake we our Watch vp, and by my aduice
Let vs impart what we haue seene to night
Vnto yong //Hamlet//. For vpon my life,
This Spirit dumbe to vs, will speake to him:
Do you consent we shall acquaint him with it,
As needfull in our Loues, fitting our Duty?
''//Mar//.'' Let do't I pray, and I this morning know
Where we shall finde him most conueniently.
|dialogWithStageDirectionFisco|k
| |//Exeunt//|
//FRANCISCO at his post. Enter to him BERNARDO//
''BERNARDO''
|1.1.1|Who's there?|
''FRANCISCO''
|1.1.2|Nay, answer me: stand, and unfold yourself.|
''BERNARDO''
|1.1.3|Long live the king!|
''FRANCISCO''
|1.1.4|Bernardo?|
''BERNARDO''
|1.1.5|He.|
''FRANCISCO''
|1.1.6|You come most carefully upon your hour.|
''BERNARDO''
|1.1.7|'Tis now struck twelve; get thee to bed, Francisco.|
''FRANCISCO''
|1.1.8|For this relief much thanks: 'tis bitter cold,|
|1.1.9|And I am sick at heart.|
''BERNARDO''
|1.1.10|Have you had quiet guard?|
''FRANCISCO''
|1.1.11|Not a mouse stirring.|
''BERNARDO''
|1.1.12|Well, good night.|
|1.1.13|If you do meet Horatio and Marcellus,|
|1.1.14|The rivals of my watch, bid them make haste.|
''FRANCISCO''
|1.1.15|I think I hear them. Stand, ho! Who's there?|
//Enter HORATIO and MARCELLUS//
''HORATIO''
|1.1.16|Friends to this ground.|
''MARCELLUS''
|1.1.17|And liegemen to the Dane.|
''FRANCISCO''
|1.1.18|Give you good night.|
''MARCELLUS''
|1.1.19|O, farewell, honest soldier:|
|1.1.20|Who hath relieved you?|
''FRANCISCO''
|1.1.21|Bernardo has my place.|
|1.1.22|Give you good night.|
//Exit//
''MARCELLUS''
|1.1.23|Holla! Bernardo!|
''BERNARDO''
|1.1.24|Say,|
|1.1.25|What, is Horatio there?|
''HORATIO''
|1.1.26|A piece of him.|
''BERNARDO''
|1.1.27|Welcome, Horatio: welcome, good Marcellus.|
''MARCELLUS''
|1.1.28|What, has this thing appear'd again to-night?|
''BERNARDO''
|1.1.29|I have seen nothing.|
''MARCELLUS''
|1.1.30|Horatio says 'tis but our fantasy,|
|1.1.31|And will not let belief take hold of him|
|1.1.32|Touching this dreaded sight, twice seen of us:|
|1.1.33|Therefore I have entreated him along|
|1.1.34|With us to watch the minutes of this night;|
|1.1.35|That if again this apparition come,|
|1.1.36|He may approve our eyes and speak to it.|
''HORATIO''
|1.1.37|Tush, tush, 'twill not appear.|
''BERNARDO''
|1.1.38|Sit down awhile;|
|1.1.39|And let us once again assail your ears,|
|1.1.40|That are so fortified against our story|
|1.1.41|What we have two nights seen.|
''HORATIO''
|1.1.42|Well, sit we down,|
|1.1.43|And let us hear Bernardo speak of this.|
''BERNARDO''
|1.1.44|Last night of all,|
|1.1.45|When yond same star that's westward from the pole|
|1.1.46|Had made his course to illume that part of heaven|
|1.1.47|Where now it burns, Marcellus and myself,|
|1.1.48|The bell then beating one,--|
//Enter Ghost//
''MARCELLUS''
|1.1.49|Peace, break thee off; look, where it comes again!|
''BERNARDO''
|1.1.50|In the same figure, like the king that's dead.|
''MARCELLUS''
|1.1.51|Thou art a scholar; speak to it, Horatio.|
''BERNARDO''
|1.1.52|Looks it not like the king? mark it, Horatio.|
''HORATIO''
|1.1.53|Most like: it harrows me with fear and wonder.|
''BERNARDO''
|1.1.54|It would be spoke to.|
''MARCELLUS''
|1.1.55|Question it, Horatio.|
''HORATIO''
|1.1.56|What art thou that usurp'st this time of night,|
|1.1.57|Together with that fair and warlike form|
|1.1.58|In which the majesty of buried Denmark|
|1.1.59|Did sometimes march? by heaven I charge thee, speak!|
''MARCELLUS''
|1.1.60|It is offended.|
''BERNARDO''
|1.1.61| See, it stalks away!|
''HORATIO''
|1.1.62|Stay! speak, speak! I charge thee, speak!|
//Exit Ghost//
''MARCELLUS''
|1.1.63|'Tis gone, and will not answer.|
''BERNARDO''
|1.1.64|How now, Horatio! you tremble and look pale:|
|1.1.65|Is not this something more than fantasy?|
|1.1.66|What think you on't?|
''HORATIO''
|1.1.67|Before my God, I might not this believe|
|1.1.68|Without the sensible and true avouch|
|1.1.69|Of mine own eyes.|
''MARCELLUS''
|1.1.70| Is it not like the king?|
''HORATIO''
|1.1.71|As thou art to thyself:|
|1.1.72|Such was the very armour he had on|
|1.1.73|When he the ambitious Norway combated;|
|1.1.74|So frown'd he once, when, in an angry parle,|
|1.1.75|He smote the sledded Polacks on the ice.|
|1.1.76|'Tis strange.|
''MARCELLUS''
|1.1.77|Thus twice before, and jump at this dead hour,|
|1.1.78|With martial stalk hath he gone by our watch.|
''HORATIO''
|1.1.79|In what particular thought to work I know not;|
|1.1.80|But in the gross and scope of my opinion,|
|1.1.81|This bodes some strange eruption to our state.|
''MARCELLUS''
|1.1.82|Good now, sit down, and tell me, he that knows,|
|1.1.83|Why this same strict and most observant watch|
|1.1.84|So nightly toils the subject of the land,|
|1.1.85|And why such daily cast of brazen cannon,|
|1.1.86|And foreign mart for implements of war;|
|1.1.87|Why such impress of shipwrights, whose sore task|
|1.1.88|Does not divide the Sunday from the week;|
|1.1.89|What might be toward, that this sweaty haste|
|1.1.90|Doth make the night joint-labourer with the day:|
|1.1.91|Who is't that can inform me?|
''HORATIO''
|1.1.92|That can I;|
|1.1.93|At least, the whisper goes so. Our last king,|
|1.1.94|Whose image even but now appear'd to us,|
|1.1.95|Was, as you know, by Fortinbras of Norway,|
|1.1.96|Thereto prick'd on by a most emulate pride,|
|1.1.97|Dared to the combat; in which our valiant Hamlet--|
|1.1.98|For so this side of our known world esteem'd him--|
|1.1.99|Did slay this Fortinbras; who by a seal'd compact,|
|1.1.100|Well ratified by law and heraldry,|
|1.1.101|Did forfeit, with his life, all those his lands|
|1.1.102|Which he stood seized of, to the conqueror:|
|1.1.103|Against the which, a moiety competent|
|1.1.104|Was gaged by our king; which had return'd|
|1.1.105|To the inheritance of Fortinbras,|
|1.1.106|Had he been vanquisher; as, by the same covenant,|
|1.1.107|And carriage of the article design'd,|
|1.1.108|His fell to Hamlet. Now, sir, young Fortinbras,|
|1.1.109|Of unimproved mettle hot and full,|
|1.1.110|Hath in the skirts of Norway here and there|
|1.1.111|Shark'd up a list of lawless resolutes,|
|1.1.112|For food and diet, to some enterprise|
|1.1.113|That hath a stomach in't; which is no other--|
|1.1.114|As it doth well appear unto our state--|
|1.1.115|But to recover of us, by strong hand|
|1.1.116|And terms compulsatory, those foresaid lands|
|1.1.117|So by his father lost: and this, I take it,|
|1.1.118|Is the main motive of our preparations,|
|1.1.119|The source of this our watch and the chief head|
|1.1.120|Of this post-haste and romage in the land.|
''BERNARDO''
|1.1.121|I think it be no other but e'en so:|
|1.1.122|Well may it sort that this portentous figure|
|1.1.123|Comes armed through our watch; so like the king|
|1.1.124|That was and is the question of these wars.|
''HORATIO''
|1.1.125|A mote it is to trouble the mind's eye.|
|1.1.126|In the most high and palmy state of Rome,|
|1.1.127|A little ere the mightiest Julius fell,|
|1.1.128|The graves stood tenantless and the sheeted dead|
|1.1.129|Did squeak and gibber in the Roman streets:|
|1.1.130|As stars with trains of fire and dews of blood,|
|1.1.131|Disasters in the sun; and the moist star|
|1.1.132|Upon whose influence Neptune's empire stands|
|1.1.133|Was sick almost to doomsday with eclipse:|
|1.1.134|And even the like precurse of fierce events,|
|1.1.135|As harbingers preceding still the fates|
|1.1.136|And prologue to the omen coming on,|
|1.1.137|Have heaven and earth together demonstrated|
|1.1.138|Unto our climatures and countrymen.--|
|1.1.139|But soft, behold! lo, where it comes again!|
//Re-enter Ghost//
|1.1.140|I'll cross it, though it blast me. Stay, illusion!|
|1.1.141|If thou hast any sound, or use of voice,|
|1.1.142|Speak to me:|
|1.1.143|If there be any good thing to be done,|
|1.1.144|That may to thee do ease and grace to me,|
|1.1.145|Speak to me:|
//Cock crows//
|1.1.146|If thou art privy to thy country's fate,|
|1.1.147|Which, happily, foreknowing may avoid, O, speak!|
|1.1.148|Or if thou hast uphoarded in thy life|
|1.1.149|Extorted treasure in the womb of earth,|
|1.1.150|For which, they say, you spirits oft walk in death,|
|1.1.151|Speak of it: stay, and speak! Stop it, Marcellus.|
''MARCELLUS''
|1.1.152|Shall I strike at it with my partisan?|
''HORATIO''
|1.1.153|Do, if it will not stand.|
''BERNARDO''
|1.1.154|'Tis here!|
''HORATIO''
|1.1.155|'Tis here!|
''MARCELLUS''
|1.1.156|'Tis gone!|
//Exit Ghost//
|1.1.157|We do it wrong, being so majestical,|
|1.1.158|To offer it the show of violence;|
|1.1.159|For it is, as the air, invulnerable,|
|1.1.160|And our vain blows malicious mockery.|
''BERNARDO''
|1.1.161|It was about to speak, when the cock crew.|
''HORATIO''
|1.1.162|And then it started like a guilty thing|
|1.1.163|Upon a fearful summons. I have heard,|
|1.1.164|The cock, that is the trumpet to the morn,|
|1.1.165|Doth with his lofty and shrill-sounding throat|
|1.1.166|Awake the god of day; and, at his warning,|
|1.1.167|Whether in sea or fire, in earth or air,|
|1.1.168|The extravagant and erring spirit hies|
|1.1.169|To his confine: and of the truth herein|
|1.1.170|This present object made probation.|
''MARCELLUS''
|1.1.171|It faded on the crowing of the cock.|
|1.1.172|Some say that ever 'gainst that season comes|
|1.1.173|Wherein our Saviour's birth is celebrated,|
|1.1.174|The bird of dawning singeth all night long:|
|1.1.175|And then, they say, no spirit dares stir abroad;|
|1.1.176|The nights are wholesome; then no planets strike,|
|1.1.177|No fairy takes, nor witch hath power to charm,|
|1.1.178|So hallow'd and so gracious is the time.|
''HORATIO''
|1.1.179|So have I heard and do in part believe it.|
|1.1.180|But, look, the morn, in russet mantle clad,|
|1.1.181|Walks o'er the dew of yon high eastward hill:|
|1.1.182|Break we our watch up; and by my advice,|
|1.1.183|Let us impart what we have seen to-night|
|1.1.184|Unto young Hamlet; for, upon my life,|
|1.1.185|This spirit, dumb to us, will speak to him.|
|1.1.186|Do you consent we shall acquaint him with it,|
|1.1.187|As needful in our loves, fitting our duty?|
''MARCELLUS''
|1.1.188|Let's do't, I pray; and I this morning know|
|1.1.189|Where we shall find him most conveniently.|
//Exeunt//
@@.stageDirectionFisco
//Enter Barnardo, and Francisco, two Centinels//.
@@
''//Bar//.'' VVHose there?
''//Fran//.'' Nay answere me. Stand and vnfolde your selfe.
''//Bar//.'' Long liue the King,
''//Fran//.'' //Barnardo//.
''//Bar//.'' Hee.
''//Fran//.'' You come most carefully vpon your houre,
''//Bar//.'' Tis now strooke twelfe, get thee to bed //Francisco//,
''//Fran//.'' For this reliefe much thanks, tis bitter cold,
And I am sick at hart.
''//Bar//.'' Haue you had quiet guard?
''//Fran//.'' Not a mouse stirring.
''//Bar//.'' Well, good night:
If you doe meete //Horatio// and //Marcellus//,
The riualls of my watch, bid them make hast.
@@.stageDirectionFisco
//Enter Horatio, and Marcellus//.
@@
''//Fran//.'' I thinke I heare them, stand ho, who is there?
''//Hora//.'' Friends to this ground.
''//Mar//.'' And Leedgemen to the Dane,
''//Fran//.'' Giue you good night.
''//Mar//.'' O, farwell honest souldiers, who hath relieu'd you?
|dialogWithStageDirectionFisco|k
|''//Fran//.'' //Barnardo// hath my place; giue you good night.|//Exit Fran//.|
''//Mar//.'' Holla, //Barnardo//.
''//Bar//.'' Say, what is //Horatio// there?
''//Hora//.'' A peece of him.
''//Bar//.'' Welcome //Horatio//, welcome good //Marcellus//,
''//Hora//.'' What, ha's this thing appeard againe to night?
''//Bar//.'' I haue seene nothing.
''//Mar//.'' //Horatio// saies tis but our fantasie,
And will not let beliefe take holde of him,
Touching this dreaded sight twice seene of vs,
Therefore I haue intreated him along,
With vs to watch the minuts of this night,
That if againe this apparision come,
He may approoue our eyes and speake to it.
''//Hora//.'' Tush, tush, twill not appeare.
''//Bar//.'' Sit downe a while,
And let vs once againe assaile your eares,
That are so fortified against our story,
What we haue two nights seene.
''//Hora//.'' Well, sit we downe,
And let vs heare //Barnardo// speake of this.
''//Bar//.'' Last night of all,
When yond same starre thats weastward from the pole,
Had made his course t'illume that part of heauen
Where now it burnes, //Marcellus// and my selfe
The bell then beating one.
@@.stageDirectionFisco
//Enter Ghost//.
@@
''//Mar//.'' Peace, breake thee of, looke where it comes againe.
''//Bar//.'' In the same figure like the King thats dead.
''//Mar//.'' Thou art a scholler, speake to it //Horatio//.
''//Bar//.'' Lookes a not like the King? marke it //Horatio//.
''//Hora//.'' Most like, it horrowes me with feare and wonder.
''//Bar//.'' It would be spoke to.
''//Mar//.'' Speake to it //Horatio//.
''//Hora//.'' What art thou that vsurpst this time of night,
Together with that faire and warlike forme,
In which the Maiestie of buried Denmarke
Did sometimes march, by heauen I charge thee speake.
''//Mar//.'' It is offended.
''//Bar//.'' See it staukes away.
|dialogWithStageDirectionFisco|k
|''//Hora//.'' Stay, speake, speake, I charge thee speake.|//Exit Ghost//.|
''//Mar//.'' Tis gone and will not answere.
''//Bar//.'' How now //Horatio//, you tremble and looke pale,
Is not this somthing more then phantasie?
What thinke you-ont?
''//Hora//.'' Before my God I might not this belieue,
Without the sencible and true auouch
Of mine owne eies.
''//Mar//.'' Is it not like the King?
''//Hora//.'' As thou art to thy selfe.
Such was the very Armor he had on,
When he the ambitious //Norway// combated,
So frownd he once, when in an angry parle
He smot the sleaded pollax on the ice.
Tis strange.
''//Mar//.'' Thus twice before, and iump at this dead houre,
With martiall stauke hath he gone by our watch.
''//Hora//.'' In what perticular thought, to worke I know not,
But in the grosse and scope of mine opinion,
This bodes some strange eruption to our state.
''//Mar//.'' Good now sit downe, and tell me he that knowes,
Why this same strikt and most obseruant watch
So nightly toiles the subiect of the land,
And with such dayly cost of brazon Cannon
And forraine marte, for implements of warre,
Why such impresse of ship-writes, whose sore taske
Does not deuide the Sunday from the weeke,
What might be toward that this sweaty hast
Doth make the night ioynt labourer with the day,
Who ist that can informe mee?
''//Hora//.'' That can I.
At least the whisper goes so; our last King,
Whose image euen but now appear'd to vs,
Was as you knowe by //Fortinbrasse// of //Norway//,
Thereto prickt on by a most emulate pride
Dar'd to the combat; in which our valiant //Hamlet//,
(For so this side of our knowne world esteemd him)
Did slay this //Fortinbrasse//, who by a seald compact
Well ratified by lawe and heraldy
Did forfait (with his life) all these his lands
Which he stood seaz'd of, to the conquerour.
Against the which a moitie competent
Was gaged by our King, which had returne
To the inheritance of //Fortinbrasse//,
Had he bin vanquisher; as by the same comart,
And carriage of the article desseigne,
His fell to Hamlet; now Sir, young //Fortinbrasse//
Of vnimprooued mettle, hot and full,
Hath in the skirts of //Norway// heere and there
Sharkt vp a list of lawelesse resolutes
For foode and diet to some enterprise
That hath a stomacke in't, which is no other
As it doth well appeare vnto our state
But to recouer of vs by strong hand
And tearmes compulsatory, those foresaid lands
So by his father lost; and this I take it,
Is the maine motiue of our preparations
The source of this our watch, and the chiefe head
Of this post hast and Romeage in the land.
''//Bar//.'' I thinke it be no other, but enso;
Well may it sort that this portentous figure
Comes armed through our watch so like the King
That was and is the question of these warres.
''//Hora//.'' A moth it is to trouble the mindes eye:
In the most high and palmy state of Rome,
A little ere the mightiest //Iulius// fell
The graues stood tennatlesse, and the sheeted dead
Did squeake and gibber in the Roman streets
As starres with traines of fier, and dewes of blood
Disasters in the sunne; and the moist starre,
Vpon whose influence //Neptunes// Empier stands,
Was sicke almost to doomesday with eclipse.
And euen the like precurse of feare euents
As harbindgers preceading still the fates
And prologue to the //Omen// comming on
Haue heauen and earth together demonstrated
Vnto our Climatures and countrymen.
@@.stageDirectionFisco
//Enter Ghost//.
@@
But soft, behold, loe where it comes againe
|dialogWithStageDirectionFisco|k
|Ile crosse it though it blast mee: stay illusion,|//It spreads his armes.//|
If thou hast any sound or vse of voyce,
Speake to me, if there be any good thing to be done
That may to thee doe ease, and grace to mee,
Speake to me.
If thou art priuie to thy countries fate
Which happily foreknowing may auoyd
O speake:
Or if thou hast vphoorded in thy life
Extorted treasure in the wombe of earth
|dialogWithStageDirectionFisco|k
|For which they say your spirits oft walke in death.|//The cocke crowes//.|
Speake of it, stay and speake, stop it //Marcellus//.
''//Mar//.'' Shall I strike it with my partizan?
''//Hor//.'' Doe if it will not stand.
''//Bar//.'' Tis heere.
''//Hor//.'' Tis heere.
''//Mar//.'' Tis gone.
We doe it wrong being so Maiesticall
To offer it the showe of violence,
For it is as the ayre, invulnerable,
And our vaine blowes malicious mockery.
''//Bar//.'' It was about to speake when the cock crewe.
''//Hor//.'' And then it started like a guilty thing,
Vpon a fearefull summons; I haue heard,
The Cock that is the trumpet to the morne,
Doth with his lofty and shrill sounding throat
Awake the God of day, and at his warning
Whether in sea or fire, in earth or ayre
Th'extrauagant and erring spirit hies
To his confine, and of the truth heerein
This present obiect made probation.
''//Mar//.'' It faded on the crowing of the Cock.
Some say that euer gainst that season comes
Wherein our Sauiours birth is celebrated
This bird of dawning singeth all night long,
And then they say no spirit dare sturre abraode
The nights are wholsome, then no plannets strike,
No fairy takes, nor witch hath power to charme
So hallowed, and so gratious is that time.
''//Hora//.'' So haue I heard and doe in part belieue it,
But looke the morne in russet mantle clad
Walkes ore the dewe of yon high Eastward hill
Breake we our watch vp and by my aduise
Let vs impart what we haue seene to night
Vnto young //Hamlet//, for vppon my life
This spirit dumb to vs, will speake to him:
Doe you consent we shall acquaint him with it
As needfull in our loues, fitting our duty.
''//Mar//.'' Lets doo't I pray, and I this morning knowe
|dialogWithStageDirectionFisco|k
|Where we shall find him most conuenient.|//Exeunt//.|
@@.stageDirectionFisco
// Enter Claudius King of Denmarke, Gertrude the Queene//,
@@
@@.stageDirectionFisco
//Hamlet, Polonius, Laertes, and his Sister O-//
@@
@@.stageDirectionFisco
//phelia//, //Lords Attendant//..
@@
''//King//.'' Though yet of //Hamlet// our deere Brothers death
The memory be greene: and that it vs befitted
To beare our hearts in greefe, and our whole Kingdome
To be contracted in one brow of woe:
Yet so farre hath Discretion fought with Nature,
That we with wisest sorrow thinke on him,
Together with remembrance of our selues.
Therefore our sometimes Sister, now our Queen,
Th'Imperiall Ioyntresse of this warlike State,
Haue we, as 'twere, with a defeated ioy,
With one Auspicious, and one Dropping eye,
With mirth in Funerall, and with Dirge in Marriage,
In equall Scale weighing Delight and Dole
Taken to Wife; nor haue we heerein barr'd
Your better Wisedomes, which haue freely gone
With this affaire along, for all our Thankes.
Now followes, that you know young //Fortinbras//,
Holding a weake supposall of our worth;
Or thinking by our late deere Brothers death,
Our State to be disioynt, and out of Frame,
Colleagued with the dreame of his Aduantage;
He hath not fayl'd to pester vs with Message,
Importing the surrender of those Lands
Lost by his Father: with all Bonds of Law
To our most valiant Brother. So much for him.
|dialogWithStageDirectionFisco|k
||// Enter Voltemand and Cornelius//.|
Now for our selfe, and for this time of meeting
Thus much the businesse is. We haue heere writ
To Norway, Vncle of young //Fortinbras//,
Who Impotent and Bedrid, scarsely heares
Of this his Nephewes purpose, to suppresse
His further gate heerein. In that the Leuies,
The Lists, and full proportions are all made
Out of his subiect: and we heere dispatch
You good //Cornelius//, and you //Voltemand//,
For bearing of this greeting to old Norway,
Giuing to you no further personall power
To businesse with the King, more then the scope
Of these dilated Articles allow:
Farewell, and let your hast commend your duty.
''//Volt//.'' In that, and all things, will we shew our duty.
''//King//.'' We doubt it nothing, heartily farewell.
@@.stageDirectionFisco
//Exit Voltemand and Cornelius//.
@@
And now //Laertes//, what's the newes with you?
You told vs of some suite. What is't //Laertes//?
You cannot speake of Reason to the Dane,
And loose your voyce. What would'st thou beg //Laertes//,
That shall not be my Offer, not thy Asking?
The Head is not more Natiue to the Heart,
The Hand more Instrumentall to the Mouth,
Then is the Throne of Denmarke to thy Father.
What would'st thou haue //Laertes//?
''//Laer//.'' Dread my Lord,
Your leaue and fauour to returne to France,
From whence, though willingly I came to Denmarke
To shew my duty in your Coronation,
Yet now I must confesse, that duty done,
My thoughts and wishes bend againe towards France,
And bow them to your gracious leaue and pardon.
''//King//.'' Haue you your Fathers leaue?
What sayes //Pollonius//?
''//Pol//.'' He hath my Lord:
I do beseech you giue him leaue to go.
''//King//.'' Take thy faire houre //Laertes//, time be thine,
And thy best graces spend it at thy will:
But now my Cosin //Hamlet//, and my Sonne?
''//Ham//.'' A little more then kin, and lesse then kinde.
''//King//.'' How is it that the Clouds still hang on you?
''//Ham//.'' Not so my Lord, I am too much i'th' Sun.
''//Queen//.'' Good //Hamlet// cast thy nightly colour off,
And let thine eye looke like a Friend on Denmarke.
Do not for euer with thy veyled lids
Seeke for thy Noble Father in the dust;
Thou know'st 'tis common, all that liues must dye,
Passing through Nature, to Eternity.
''//Ham//.'' I Madam, it is common.
''//Queen//.'' If it be;
Why seemes it so particular with thee.
''//Ham//.'' Seemes Madam? Nay, it is: I know not Seemes:
'Tis not alone my Inky Cloake (good Mother)
Nor Customary suites of solemne Blacke,
Nor windy suspiration of forc'd breath,
No, nor the fruitfull Riuer in the Eye,
Nor the deiected hauiour of the Visage,
Together with all Formes, Moods, shewes of Griefe,
That can denote me truly. These indeed Seeme,
For they are actions that a man might play:
But I haue that Within, which passeth show;
These, but the Trappings, and the Suites of woe.
''//King//.'' 'Tis sweet and commendable
In your Nature //Hamlet//,
To giue these mourning duties to your Father:
But you must know, your Father lost a Father,
That Father lost, lost his, and the Suruiuer bound
In filiall Obligation, for some terme
To do obsequious Sorrow. But to perseuer
In obstinate Condolement, is a course
Of impious stubbornnesse. 'Tis vnmanly greefe,
It shewes a will most incorrect to Heauen,
A Heart vnfortified, a Minde impatient,
An Vnderstanding simple, and vnschool'd:
For, what we know must be, and is as common
As any the most vulgar thing to sence,
Why should we in our peeuish Opposition
Take it to heart? Fye, 'tis a fault to Heauen,
A fault against the Dead, a fault to Nature,
To Reason most absurd, whose common Theame
Is death of Fathers, and who still hath cried,
From the first Coarse, till he that dyed to day,
This must be so. We pray you throw to earth
This vnpreuayling woe, and thinke of vs
As of a Father; For let the world take note,
You are the most immediate to our Throne,
And with no lesse Nobility of Loue,
Then that which deerest Father beares his Sonne,
Do I impart towards you. For your intent
In going backe to Schoole in Wittenberg,
It is most retrograde to our desire:
And we beseech you, bend you to remaine
Heere in the cheere and comfort of our eye,
Our cheefest Courtier Cosin, and our Sonne.
''//Qu//.'' Let not thy Mother lose her Prayers //Hamlet://
I prythee stay with vs, go not to Wittenberg.
''//Ham//.'' I shall in all my best
Obey you Madam.
''//King//.'' Why 'tis a louing, and a faire Reply,
Be as our selfe in Denmarke. Madam come,
This gentle and vnforc'd accord of //Hamlet//
Sits smiling to my heart; in grace whereof,
No iocond health that Denmarke drinkes to day,
But the great Cannon to the Clowds shall tell,
And the Kings Rouce, the Heauens shall bruite againe,
|dialogWithStageDirectionFisco|k
|Respeaking earthly Thunder. Come away.|//Exeunt//|
@@.stageDirectionFisco
// Manet Hamlet//.
@@
''//Ham//.'' Oh that this too too solid Flesh, would melt,
Thaw, and resolue it selfe into a Dew:
Or that the Euerlasting had not fixt
His Cannon 'gainst Selfe-slaughter. O God, O God!
How weary, stale, flat, and vnprofitable
Seemes to me all the vses of this world?
Fie on't? Oh fie, fie, 'tis an vnweeded Garden
That growes to Seed: Things rank, and grosse in Nature
Possesse it meerely. That it should come to this:
But two months dead: Nay, not so much; not two,
So excellent a King, that was to this
//Hiperion// to a Satyre: so louing to my Mother,
That he might not beteene the windes of heauen
Visit her face too roughly. Heauen and Earth
Must I remember: why she would hang on him,
As if encrease of Appetite had growne
By what it fed on; and yet within a month?
Let me not thinke on't: Frailty, thy name is woman.
A little Month, or ere those shooes were old,
With which she followed my poore Fathers body
Like //Niobe//, all teares. Why she, euen she.
(O Heauen! A beast that wants discourse of Reason
Would haue mourn'd longer) married with mine Vnkle,
My Fathers Brother: but no more like my Father,
Then I to //Hercules//. Within a Moneth?
Ere yet the salt of most vnrighteous Teares
Had left the flushing of her gauled eyes,
She married. O most wicked speed, to post
With such dexterity to Incestuous sheets:
It is not, nor it cannot come to good.
But breake my heart, for I must hold my tongue.
@@.stageDirectionFisco
// Enter Horatio, Barnard, and Marcellus//.
@@
''//Hor//.'' Haile to your Lordship.
''//Ham//.'' I am glad to see you well:
//Horatio//, or I do forget my selfe.
''//Hor//.'' The same my Lord,
And your poore Seruant euer.
''//Ham//.'' Sir my good friend,
Ile change that name with you:
And what make you from Wittenberg //Horatio//?
''//Marcellus//.''
''//Mar//.'' My good Lord.
''//Ham//.'' I am very glad to see you: good euen Sir.
But what in faith make you from //Wittemberge//?
''//Hor//.'' A truant disposition, good my Lord.
''//Ham//.'' I would not haue your Enemy say so;
Nor shall you doe mine eare that violence,
To make it truster of your owne report
Against your selfe. I know you are no Truant:
But what is your affaire in //Elsenour//?
Wee'l teach you to drinke deepe, ere you depart.
''//Hor//.'' My Lord, I came to see your Fathers Funerall.
''//Ham//.'' I pray thee doe not mock me (fellow Student)
I thinke it was to see my Mothers Wedding.
''//Hor//.'' Indeed my Lord, it followed hard vpon.
''//Ham//.'' Thrift, thrift //Horatio:// the Funerall Bakt-meats
Did coldly furnish forth the Marriage Tables;
Would I had met my dearest foe in heauen,
Ere I had euer seene that day //Horatio//.
My father, me thinkes I see my father.
''//Hor//.'' Oh where my Lord?
''//Ham//.'' In my minds eye (//Horatio//)
''//Hor//.'' I saw him once; he was a goodly King.
''//Ham//.'' He was a man, take him for all in all:
I shall not look vpon his like againe.
''//Hor//.'' My Lord, I thinke I saw him yesternight.
''//Ham//.'' Saw? Who?
''//Hor//.'' My Lord, the King your Father.
''//Ham//.'' The King my Father?
''//Hor//.'' Season your admiration for a while
With an attent eare; till I may deliuer
Vpon the witnesse of these Gentlemen,
This maruell to you.
''//Ham//.'' For Heauens loue let me heare.
''//Hor//.'' Two nights together, had these Gentlemen
(//Marcellus// and //Barnardo//) on their Watch
In the dead wast and middle of the night
Beene thus encountred. A figure like your Father,
Arm'd at all points exactly, //Cap a Pe//,
Appeares before them, and with sollemne march
Goes slow and stately: By them thrice he walkt,
By their opprest and feare-surprized eyes,
Within his Truncheons length; whilst they bestil'd
Almost to Ielly with the Act of feare,
Stand dumbe and speake not to him. This to me
In dreadfull secrecie impart they did,
And I with them the third Night kept the Watch,
Whereas they had deliuer'd both in time,
Forme of the thing; each word made true and good,
The Apparition comes. I knew your Father:
These hands are not more like.
''//Ham//.'' But where was this?
''//Mar//.'' My Lord, vpon the platforme where we watcht.
''//Ham//.'' Did you not speake to it?
''//Hor//.'' My Lord, I did;
But answere made it none: yet once me thought
It lifted vp it head, and did addresse
It selfe to motion, like as it would speake:
But euen then, the Morning Cocke crew lowd;
And at the sound it shrunke in hast away,
And vanisht from our sight.
''//Ham//.'' Tis very strange.
''//Hor//.'' As I doe liue my honourd Lord 'tis true;
And we did thinke it writ downe in our duty
To let you know of it.
''//Ham//.'' Indeed, indeed Sirs; but this troubles me.
Hold you the watch to Night?
''//Both//.'' We doe my Lord.
''//Ham//.'' Arm'd, say you?
''//Both//.'' Arm'd, my Lord.
''//Ham//.'' From top to toe?
''//Both//.'' My Lord, from head to foote.
''//Ham//.'' Then saw you not his face?
''//Hor//.'' O yes, my Lord, he wore his Beauer vp.
''//Ham//.'' What, lookt he frowningly?
''//Hor//.'' A countenance more in sorrow then in anger.
''//Ham//.'' Pale, or red?
''//Hor//.'' Nay very pale.
''//Ham//.'' And fixt his eyes vpon you?
''//Hor//.'' Most constantly.
''//Ham//.'' I would I had beene there.
''//Hor//.'' It would haue much amaz'd you.
''//Ham//.'' Very like, very like: staid it long?
''//Hor//.'' While one with moderate hast might tell a hun-(dred.
''//All//.'' Longer, longer.
''//Hor//.'' Not when I saw't.
''//Ham//.'' His Beard was grisly? no.
''//Hor//.'' It was, as I haue seene it in his life,
A Sable Siluer'd.
''//Ham//.'' Ile watch to Night; perchance 'twill wake a-(gaine.
''//Hor//.'' I warrant you it will.
''//Ham//.'' If it assume my noble Fathers person,
Ile speake to it, though Hell it selfe should gape
And bid me hold my peace. I pray you all,
If you haue hitherto conceald this sight;
Let it bee treble in your silence still:
And whatsoeuer els shall hap to night,
Giue it an vnderstanding but no tongue;
I will requite your loues; so, fare ye well:
Vpon the Platforme twixt eleuen and twelue,
Ile visit you.
|dialogWithStageDirectionFisco|k
|''//All//.'' Our duty to your Honour.|//Exeunt//.|
''//Ham//.'' Your loue, as mine to you: farewell.
My Fathers Spirit in Armes? All is not well:
I doubt some foule play: would the Night were come;
Till then sit still my soule; foule deeds will rise,
|dialogWithStageDirectionFisco|k
|Though all the earth orewhelm them to mens eies.|//Exit//.|
//Enter KING CLAUDIUS, QUEEN GERTRUDE, HAMLET, POLONIUS, LAERTES, VOLTIMAND, CORNELIUS, Lords, and Attendants//
''KING CLAUDIUS''
|1.2.1|Though yet of Hamlet our dear brother's death|
|1.2.2|The memory be green, and that it us befitted|
|1.2.3|To bear our hearts in grief and our whole kingdom|
|1.2.4|To be contracted in one brow of woe,|
|1.2.5|Yet so far hath discretion fought with nature|
|1.2.6|That we with wisest sorrow think on him,|
|1.2.7|Together with remembrance of ourselves.|
|1.2.8|Therefore our sometime sister, now our queen,|
|1.2.9|The imperial jointress to this warlike state,|
|1.2.10|Have we, as 'twere with a defeated joy,--|
|1.2.11|With an auspicious and a dropping eye,|
|1.2.12|With mirth in funeral and with dirge in marriage,|
|1.2.13|In equal scale weighing delight and dole,--|
|1.2.14|Taken to wife: nor have we herein barr'd|
|1.2.15|Your better wisdoms, which have freely gone|
|1.2.16|With this affair along. For all, our thanks.|
|1.2.17|Now follows, that you know, young Fortinbras,|
|1.2.18|Holding a weak supposal of our worth,|
|1.2.19|Or thinking by our late dear brother's death|
|1.2.20|Our state to be disjoint and out of frame,|
|1.2.21|Colleagued with the dream of his advantage,|
|1.2.22|He hath not fail'd to pester us with message,|
|1.2.23|Importing the surrender of those lands|
|1.2.24|Lost by his father, with all bonds of law,|
|1.2.25|To our most valiant brother. So much for him.|
|1.2.26|Now for ourself and for this time of meeting:|
|1.2.27|Thus much the business is: we have here writ|
|1.2.28|To Norway, uncle of young Fortinbras,--|
|1.2.29|Who, impotent and bed-rid, scarcely hears|
|1.2.30|Of this his nephew's purpose,--to suppress|
|1.2.31|His further gait herein; in that the levies,|
|1.2.32|The lists and full proportions, are all made|
|1.2.33|Out of his subject: and we here dispatch|
|1.2.34|You, good Cornelius, and you, Voltimand,|
|1.2.35|For bearers of this greeting to old Norway;|
|1.2.36|Giving to you no further personal power|
|1.2.37|To business with the king, more than the scope|
|1.2.38|Of these delated articles allow.|
|1.2.39|Farewell, and let your haste commend your duty.|
''CORNELIUS''
''VOLTIMAND''
|1.2.40|In that and all things will we show our duty.|
''KING CLAUDIUS''
|1.2.41|We doubt it nothing: heartily farewell.|
//Exeunt VOLTIMAND and CORNELIUS//
|1.2.42|And now, Laertes, what's the news with you?|
|1.2.43|You told us of some suit; what is't, Laertes?|
|1.2.44|You cannot speak of reason to the Dane,|
|1.2.45|And loose your voice: what wouldst thou beg, Laertes,|
|1.2.46|That shall not be my offer, not thy asking?|
|1.2.47|The head is not more native to the heart,|
|1.2.48|The hand more instrumental to the mouth,|
|1.2.49|Than is the throne of Denmark to thy father.|
|1.2.50|What wouldst thou have, Laertes?|
''LAERTES''
|1.2.51|My dread lord,|
|1.2.52|Your leave and favour to return to France;|
|1.2.53|From whence though willingly I came to Denmark,|
|1.2.54|To show my duty in your coronation,|
|1.2.55|Yet now, I must confess, that duty done,|
|1.2.56|My thoughts and wishes bend again toward France|
|1.2.57|And bow them to your gracious leave and pardon.|
''KING CLAUDIUS''
|1.2.58|Have you your father's leave? What says Polonius?|
''LORD POLONIUS''
|1.2.59|He hath, my lord, wrung from me my slow leave|
|1.2.60|By laboursome petition, and at last|
|1.2.61|Upon his will I seal'd my hard consent:|
|1.2.62|I do beseech you, give him leave to go.|
''KING CLAUDIUS''
|1.2.63|Take thy fair hour, Laertes; time be thine,|
|1.2.64|And thy best graces spend it at thy will!|
|1.2.65|But now, my cousin Hamlet, and my son,--|
''HAMLET''
|1.2.66|[Aside] A little more than kin, and less than kind.|
''KING CLAUDIUS''
|1.2.67|How is it that the clouds still hang on you?|
''HAMLET''
|1.2.68|Not so, my lord; I am too much i' the sun.|
''QUEEN GERTRUDE''
|1.2.69|Good Hamlet, cast thy nighted colour off,|
|1.2.70|And let thine eye look like a friend on Denmark.|
|1.2.71|Do not for ever with thy vailed lids|
|1.2.72|Seek for thy noble father in the dust:|
|1.2.73|Thou know'st 'tis common; all that lives must die,|
|1.2.74|Passing through nature to eternity.|
''HAMLET''
|1.2.75|Ay, madam, it is common.|
''QUEEN GERTRUDE''
|1.2.76|If it be,|
|1.2.77|Why seems it so particular with thee?|
''HAMLET''
|1.2.78|Seems, madam! nay it is; I know not 'seems.'|
|1.2.79|'Tis not alone my inky cloak, good mother,|
|1.2.80|Nor customary suits of solemn black,|
|1.2.81|Nor windy suspiration of forced breath,|
|1.2.82|No, nor the fruitful river in the eye,|
|1.2.83|Nor the dejected 'havior of the visage,|
|1.2.84|Together with all forms, moods, shapes of grief,|
|1.2.85|That can denote me truly: these indeed seem,|
|1.2.86|For they are actions that a man might play:|
|1.2.87|But I have that within which passeth show;|
|1.2.88|These but the trappings and the suits of woe.|
''KING CLAUDIUS''
|1.2.89|'Tis sweet and commendable in your nature, Hamlet,|
|1.2.90|To give these mourning duties to your father:|
|1.2.91|But, you must know, your father lost a father;|
|1.2.92|That father lost, lost his, and the survivor bound|
|1.2.93|In filial obligation for some term|
|1.2.94|To do obsequious sorrow: but to persever|
|1.2.95|In obstinate condolement is a course|
|1.2.96|Of impious stubbornness; 'tis unmanly grief;|
|1.2.97|It shows a will most incorrect to heaven,|
|1.2.98|A heart unfortified, a mind impatient,|
|1.2.99|An understanding simple and unschool'd:|
|1.2.100|For what we know must be and is as common|
|1.2.101|As any the most vulgar thing to sense,|
|1.2.102|Why should we in our peevish opposition|
|1.2.103|Take it to heart? Fie! 'tis a fault to heaven,|
|1.2.104|A fault against the dead, a fault to nature,|
|1.2.105|To reason most absurd: whose common theme|
|1.2.106|Is death of fathers, and who still hath cried,|
|1.2.107|From the first corse till he that died to-day,|
|1.2.108|'This must be so.' We pray you, throw to earth|
|1.2.109|This unprevailing woe, and think of us|
|1.2.110|As of a father: for let the world take note,|
|1.2.111|You are the most immediate to our throne;|
|1.2.112|And with no less nobility of love|
|1.2.113|Than that which dearest father bears his son,|
|1.2.114|Do I impart toward you. For your intent|
|1.2.115|In going back to school in Wittenberg,|
|1.2.116|It is most retrograde to our desire:|
|1.2.117|And we beseech you, bend you to remain|
|1.2.118|Here, in the cheer and comfort of our eye,|
|1.2.119|Our chiefest courtier, cousin, and our son.|
''QUEEN GERTRUDE''
|1.2.120|Let not thy mother lose her prayers, Hamlet:|
|1.2.121|I pray thee, stay with us; go not to Wittenberg.|
''HAMLET''
|1.2.122|I shall in all my best obey you, madam.|
''KING CLAUDIUS''
|1.2.123|Why, 'tis a loving and a fair reply:|
|1.2.124|Be as ourself in Denmark. Madam, come;|
|1.2.125|This gentle and unforced accord of Hamlet|
|1.2.126|Sits smiling to my heart: in grace whereof,|
|1.2.127|No jocund health that Denmark drinks to-day,|
|1.2.128|But the great cannon to the clouds shall tell,|
|1.2.129|And the king's rouse the heavens all bruit again,|
|1.2.130|Re-speaking earthly thunder. Come away.|
//Exeunt all but HAMLET//
''HAMLET''
|1.2.131|O, that this too too solid flesh would melt|
|1.2.132|Thaw and resolve itself into a dew!|
|1.2.133|Or that the Everlasting had not fix'd|
|1.2.134|His canon 'gainst self-slaughter! O God! God!|
|1.2.135|How weary, stale, flat and unprofitable,|
|1.2.136|Seem to me all the uses of this world!|
|1.2.137|Fie on't! ah fie! 'tis an unweeded garden,|
|1.2.138|That grows to seed; things rank and gross in nature|
|1.2.139|Possess it merely. That it should come to this!|
|1.2.140|But two months dead: nay, not so much, not two:|
|1.2.141|So excellent a king; that was, to this,|
|1.2.142|Hyperion to a satyr; so loving to my mother|
|1.2.143|That he might not beteem the winds of heaven|
|1.2.144|Visit her face too roughly. Heaven and earth!|
|1.2.145|Must I remember? why, she would hang on him,|
|1.2.146|As if increase of appetite had grown|
|1.2.147|By what it fed on: and yet, within a month--|
|1.2.148|Let me not think on't--Frailty, thy name is woman!--|
|1.2.149|A little month, or ere those shoes were old|
|1.2.150|With which she follow'd my poor father's body,|
|1.2.151|Like Niobe, all tears:--why she, even she--|
|1.2.152|O, God! a beast, that wants discourse of reason,|
|1.2.153|Would have mourn'd longer--married with my uncle,|
|1.2.154|My father's brother, but no more like my father|
|1.2.155|Than I to Hercules: within a month:|
|1.2.156|Ere yet the salt of most unrighteous tears|
|1.2.157|Had left the flushing in her galled eyes,|
|1.2.158|She married. O, most wicked speed, to post|
|1.2.159|With such dexterity to incestuous sheets!|
|1.2.160|It is not nor it cannot come to good:|
|1.2.161|But break, my heart; for I must hold my tongue.|
//Enter HORATIO, MARCELLUS, and BERNARDO//
''HORATIO''
|1.2.162|Hail to your lordship!|
''HAMLET''
|1.2.163|I am glad to see you well:|
|1.2.164|Horatio,--or I do forget myself.|
''HORATIO''
|1.2.165|The same, my lord, and your poor servant ever.|
''HAMLET''
|1.2.166|Sir, my good friend; I'll change that name with you:|
|1.2.167|And what make you from Wittenberg, Horatio? Marcellus?|
''MARCELLUS''
|1.2.168|My good lord--|
''HAMLET''
|1.2.169|I am very glad to see you. Good even, sir.|
|1.2.170|But what, in faith, make you from Wittenberg?|
''HORATIO''
|1.2.171|A truant disposition, good my lord.|
''HAMLET''
|1.2.172|I would not hear your enemy say so,|
|1.2.173|Nor shall you do mine ear that violence,|
|1.2.174|To make it truster of your own report|
|1.2.175|Against yourself: I know you are no truant.|
|1.2.176|But what is your affair in Elsinore?|
|1.2.177|We'll teach you to drink deep ere you depart.|
''HORATIO''
|1.2.178|My lord, I came to see your father's funeral.|
''HAMLET''
|1.2.179|I pray thee, do not mock me, fellow-student;|
|1.2.180|I think it was to see my mother's wedding.|
''HORATIO''
|1.2.181|Indeed, my lord, it follow'd hard upon.|
''HAMLET''
|1.2.182|Thrift, thrift, Horatio! the funeral baked meats|
|1.2.183|Did coldly furnish forth the marriage tables.|
|1.2.184|Would I had met my dearest foe in heaven|
|1.2.185|Or ever I had seen that day, Horatio!|
|1.2.186|My father!--methinks I see my father.|
''HORATIO''
|1.2.187|Where, my lord?|
''HAMLET''
|1.2.188| In my mind's eye, Horatio.|
''HORATIO''
|1.2.189|I saw him once; he was a goodly king.|
''HAMLET''
|1.2.190|He was a man, take him for all in all,|
|1.2.191|I shall not look upon his like again.|
''HORATIO''
|1.2.192|My lord, I think I saw him yesternight.|
''HAMLET''
|1.2.193|Saw? who?|
''HORATIO''
|1.2.194|My lord, the king your father.|
''HAMLET''
|1.2.195|The king my father!|
''HORATIO''
|1.2.196|Season your admiration for awhile|
|1.2.197|With an attent ear, till I may deliver,|
|1.2.198|Upon the witness of these gentlemen,|
|1.2.199|This marvel to you.|
''HAMLET''
|1.2.200|For God's love, let me hear.|
''HORATIO''
|1.2.201|Two nights together had these gentlemen,|
|1.2.202|Marcellus and Bernardo, on their watch,|
|1.2.203|In the dead vast and middle of the night,|
|1.2.204|Been thus encounter'd. A figure like your father,|
|1.2.205|Armed at point exactly, cap-a-pe,|
|1.2.206|Appears before them, and with solemn march|
|1.2.207|Goes slow and stately by them: thrice he walk'd|
|1.2.208|By their oppress'd and fear-surprised eyes,|
|1.2.209|Within his truncheon's length; whilst they, distilled|
|1.2.210|Almost to jelly with the act of fear,|
|1.2.211|Stand dumb and speak not to him. This to me|
|1.2.212|In dreadful secrecy impart they did;|
|1.2.213|And I with them the third night kept the watch;|
|1.2.214|Where, as they had deliver'd, both in time,|
|1.2.215|Form of the thing, each word made true and good,|
|1.2.216|The apparition comes: I knew your father;|
|1.2.217|These hands are not more like.|
''HAMLET''
|1.2.218|But where was this?|
''MARCELLUS''
|1.2.219|My lord, upon the platform where we watch'd.|
''HAMLET''
|1.2.220|Did you not speak to it?|
''HORATIO''
|1.2.221|My lord, I did;|
|1.2.222|But answer made it none: yet once methought|
|1.2.223|It lifted up its head and did address|
|1.2.224|Itself to motion, like as it would speak;|
|1.2.225|But even then the morning cock crew loud,|
|1.2.226|And at the sound it shrunk in haste away,|
|1.2.227|And vanish'd from our sight.|
''HAMLET''
|1.2.228|'Tis very strange.|
''HORATIO''
|1.2.229|As I do live, my honour'd lord, 'tis true;|
|1.2.230|And we did think it writ down in our duty|
|1.2.231|To let you know of it.|
''HAMLET''
|1.2.232|Indeed, indeed, sirs, but this troubles me.|
|1.2.233|Hold you the watch to-night?|
''MARCELLUS''
''BERNARDO''
|1.2.234|We do, my lord.|
''HAMLET''
|1.2.235|Arm'd, say you?|
''MARCELLUS''
''BERNARDO''
|1.2.236|Arm'd, my lord.|
''HAMLET''
|1.2.237|From top to toe?|
''MARCELLUS''
''BERNARDO''
|1.2.238|My lord, from head to foot.|
''HAMLET''
|1.2.239|Then saw you not his face?|
''HORATIO''
|1.2.240|O, yes, my lord; he wore his beaver up.|
''HAMLET''
|1.2.241|What, look'd he frowningly?|
''HORATIO''
|1.2.242|A countenance more in sorrow than in anger.|
''HAMLET''
|1.2.243|Pale or red?|
''HORATIO''
|1.2.244|Nay, very pale.|
''HAMLET''
|1.2.245| And fix'd his eyes upon you?|
''HORATIO''
|1.2.246|Most constantly.|
''HAMLET''
|1.2.247| I would I had been there.|
''HORATIO''
|1.2.248|It would have much amazed you.|
''HAMLET''
|1.2.249|Very like, very like. Stay'd it long?|
''HORATIO''
|1.2.250|While one with moderate haste might tell a hundred.|
''MARCELLUS''
''BERNARDO''
|1.2.251|Longer, longer.|
''HORATIO''
|1.2.252|Not when I saw't.|
''HAMLET''
|1.2.253| His beard was grizzled--no?|
''HORATIO''
|1.2.254|It was, as I have seen it in his life,|
|1.2.255|A sable silver'd.|
''HAMLET''
|1.2.256| I will watch to-night;|
|1.2.257|Perchance 'twill walk again.|
''HORATIO''
|1.2.258|I warrant it will.|
''HAMLET''
|1.2.259|If it assume my noble father's person,|
|1.2.260|I'll speak to it, though hell itself should gape|
|1.2.261|And bid me hold my peace. I pray you all,|
|1.2.262|If you have hitherto conceal'd this sight,|
|1.2.263|Let it be tenable in your silence still;|
|1.2.264|And whatsoever else shall hap to-night,|
|1.2.265|Give it an understanding, but no tongue:|
|1.2.266|I will requite your loves. So, fare you well:|
|1.2.267|Upon the platform, 'twixt eleven and twelve,|
|1.2.268|I'll visit you.|
''All''
|1.2.269| Our duty to your honour.|
''HAMLET''
|1.2.270|Your loves, as mine to you: farewell.|
//Exeunt all but HAMLET//
|1.2.271|My father's spirit in arms! all is not well;|
|1.2.272|I doubt some foul play: would the night were come!|
|1.2.273|Till then sit still, my soul: foul deeds will rise,|
|1.2.274|Though all the earth o'erwhelm them, to men's eyes.|
//Exit//
@@.stageDirectionFisco
//Florish. Enter Claudius, King of Denmarke, Gertrad the Queene//,
@@
@@.stageDirectionFisco
//Counsaile: as Polonius, and his Sonne Laertes, //
@@
@@.stageDirectionFisco
//Hamlet, Cum Alijs//.
@@
''//Claud//.'' Though yet of //Hamlet// our deare brothers death
The memorie be greene, and that it vs befitted
To beare our harts in griefe, and our whole Kingdome,
To be contracted in one browe of woe
Yet so farre hath discretion fought with nature,
That we with wisest sorrowe thinke on him
Together with remembrance of our selues:
Therefore our sometime Sister, now our Queene
Th'imperiall ioyntresse to this warlike state
Haue we as twere with a defeated ioy
With an auspitious, and a dropping eye,
With mirth in funerall, and with dirdge in marriage,
In equall scale waighing delight and dole
Taken to wife: nor haue we heerein bard
Your better wisdomes, which haue freely gone
With this affaire along (for all our thankes)
Now followes that you knowe young //Fortinbrasse//,
Holding a weake supposall of our worth
Or thinking by our late deare brothers death
Our state to be disioynt, and out of frame
Coleagued with this dreame of his aduantage
He hath not faild to pestur vs with message
Importing the surrender of those lands
Lost by his father, with all bands of lawe
To our most valiant brother, so much for him:
Now for our selfe, and for this time of meeting,
Thus much the busines is, we haue heere writ
To //Norway// Vncle of young //Fortenbrasse//
Who impotent and bedred scarcely heares
Of this his Nephewes purpose; to suppresse
His further gate heerein, in that the leuies,
The lists, and full proportions are all made
Out of his subiect, and we heere dispatch
You good //Cornelius//, and you //Valtemand//,
For bearers of this greeting to old //Norway//,
Giuing to you no further personall power
To busines with the King, more then the scope
Of these delated articles allowe:
Farwell, and let your hast commend your dutie.
''//Cor//.'' //Vo//. In that, and all things will we showe our dutie.
''//King//.'' We doubt it nothing, hartely farwell.
And now //Laertes// whats the newes with you?
You told vs of some sute, what ist //Laertes//?
You cannot speake of reason to the Dane
And lose your voyce; what wold'st thou begge //Laertes//,?
That shall not be my offer, not thy asking,
The head is not more natiue to the hart
The hand more instrumentall to the mouth
Then is the throne of Denmarke to thy father,
What would'st thou haue //Laertes//?
''//Laer//.'' My dread Lord,
Your leaue and fauour to returne to Fraunce,
From whence, though willingly I came to Denmarke,
To showe my dutie in your Coronation;
Yet now I must confesse, that duty done
My thoughts and wishes bend againe toward Fraunce
And bowe them to your gracious leaue and pardon.
''//King//.'' Haue you your fathers leaue, what saies //Polonius//?
''//Polo//.'' Hath my Lord wroung from me my slowe leaue
By laboursome petition, and at last
Vpon his will I seald my hard consent,
I doe beseech you giue him leaue to goe.
''//King//.'' Take thy faire houre //Laertes//, time be thine
And thy best graces spend it at thy will:
But now my Cosin //Hamlet//, and my sonne.
''//Ham//.'' A little more then kin, and lesse then kind.
''//King//.'' How is it that the clowdes still hang on you.
''//Ham//.'' Not so much my Lord, I am too much in the sonne.
''//Queene//.'' Good //Hamlet// cast thy nighted colour off
And let thine eye looke like a friend on //Denmarke//,
Doe not for euer with thy vailed lids
Seeke for thy noble Father in the dust,
Thou know'st tis common all that liues must die,
Passing through nature to eternitie.
''//Ham//.'' I Maddam, it is common.
''//Quee//.'' If it be
VVhy seemes it so perticuler with thee.
''//Ham//.'' Seemes Maddam, nay it is, I know not seemes,
Tis not alone my incky cloake coold mother
Nor customary suites of solembe blacke
Nor windie suspiration of forst breath
No, nor the fruitfull riuer in the eye,
Nor the deiected hauior of the visage
Together with all formes, moodes, chapes of griefe
That can deuote me truely, these indeede seeme,
For they are actions that a man might play
But I haue that within which passes showe
These but the trappings and the suites of woe.
''//King//.'' Tis sweete and commendable in your nature //Hamlet//,
To giue these mourning duties to your father
But you must knowe your father lost a father,
That father lost, lost his, and the suruiuer bound
In filliall obligation for some tearme
To doe obsequious sorrowe, but to perseuer
In obstinate condolement, is a course
Of impious stubbornes, tis vnmanly griefe,
It showes a will most incorrect to heauen
A hart vnfortified, or minde impatient
An vnderstanding simple and vnschoold
For what we knowe must be, and is as common
As any the most vulgar thing to sence,
Why should we in our peuish opposition
Take it to hart, fie, tis a fault to heauen,
A fault against the dead, a fault to nature,
To reason most absurd, whose common theame
Is death of fathers, and who still hath cryed
From the first course, till he that died to day
This must be so: we pray you throw to earth
This vnpreuailing woe, and thinke of vs
As of a father, for let the world take note
You are the most imediate to our throne,
And with no lesse nobilitie of loue
Then that which dearest father beares his sonne,
Doe I impart toward you for your intent
In going back to schoole in //Wittenberg//,
It is most retrogard to our desire,
And we beseech you bend you to remaine
Heere in the cheare and comfort of our eye,
Our chiefest courtier, cosin, and our sonne.
''//Quee//.'' Let not thy mother loose her prayers //Hamlet//,
I pray thee stay with vs, goe not to //Wittenberg//.
''//Ham//.'' I shall in all my best obay you Madam.
''//King//.'' Why tis a louing and a faire reply,
Be as our selfe in Denmarke, Madam come,
This gentle and vnforc'd accord of //Hamlet//
Sits smiling to my hart, in grace whereof,
No iocond health that Denmarke drinkes to day,
But the great Cannon to the cloudes shall tell.
And the Kings rowse the heauen shall brute againe,
|dialogWithStageDirectionFisco|k
|Respeaking earthly thunder; come away.|//Florish//. //Exeunt all//, //but Hamlet//|
''//Ham//.'' O that this too too sallied flesh would melt,
Thaw and resolue it selfe into a dewe,
Or that the euerlasting had not fixt
His cannon gainst seale slaughter, ô God, God,
How wary, stale, flat, and vnprofitable
Seeme to me all the vses of this world?
Fie on't, ah fie, tis an vnweeded garden
That growes to seede, things rancke and grose in nature,
Possesse it meerely that it should come thus
But two months dead, nay not so much, not two,
So excellent a King, that was to this
Hiperion to a satire, so louing to my mother,
That he might not beteeme the winds of heauen
Visite her face too roughly, heauen and earth
Must I remember, why she should hang on him
As if increase of appetite had growne
By what it fed on, and yet within a month,
Let me not thinke on't; frailty thy name is woman
A little month or ere those shooes were old
With which she followed my poore fathers bodie
Like //Niobe// all teares, why she
O God, a beast that wants discourse of reason
Would haue mourn'd longer, married with my Vncle,
My fathers brother, but no more like my father
Then I to //Hercules//, within a month,
Ere yet the salt of most vnrighteous teares,
Had left the flushing in her gauled eyes
She married, ô most wicked speede; to post
With such dexteritie to incestious sheets,
It is not, nor it cannot come to good,
But breake my hart, for I must hold my tongue.
@@.stageDirectionFisco
//Enter Horatio//,//Marcellus, and Bernardo//.
@@
''//Hora//.'' Haile to your Lordship.
''//Ham//.'' I am glad to see you well; //Horatio//, or I do forget my selfe.
''//Hora//.'' The same my Lord, and your poore seruant euer.
''//Ham//.'' Sir my good friend, Ile change that name with you,
And what make you from //Wittenberg////Horatio//?
//Marcellus//.
''//Mar//.'' My good Lord.
''//Ham//.'' I am very glad to see you, (good euen sir)
But what in faith make you from //Wittenberg//?
''//Hora//.'' A truant disposition good my Lord.
''//Ham//.'' I would not heare your enimie say so,
Nor shall you doe my eare that violence
To make it truster of your owne report
Against your selfe, I knowe you are no truant,
But what is your affaire in //Elsonoure//?
Weele teach you for to drinke ere you depart.
''//Hora//.'' My Lord, I came to see your fathers funerall.
''//Ham//.'' I pre thee doe not mocke me fellowe studient,
I thinke it was to my mothers wedding.
''//Hora//.'' Indeede my Lord it followed hard vppon.
''//Ham//.'' Thrift, thrift, //Horatio//, the funerall bak't meates
Did coldly furnish forth the marriage tables,
Would I had met my dearest foe in heauen
Or euer I had seene that day //Horatio//,
My father, me thinkes I see my father.
''//Hora//.'' Where my Lord?
''//Ham//.'' In my mindes eye //Horatio//.
''//Hora//.'' I saw him once, a was a goodly King.
''//Ham//.'' A was a man take him for all in all
I shall not looke vppon his like againe.
''//Hora//.'' My Lord I thinke I saw him yesternight.
''//Ham//.'' saw, who?
''//Hora//.'' My Lord the King your father.
''//Ham//.'' The King my father?
''//Hora//.'' Season your admiration for a while
With an attent eare till I may deliuer
Vppon the witnes of these gentlemen
This maruile to you.
''//Ham//.'' For Gods loue let me heare?
''//Hora//.'' Two nights together had these gentlemen
//Marcellus//, and //Barnardo//, on their watch
In the dead wast and middle of the night
Beene thus incountred, a figure like your father
Armed at poynt, exactly //Capapea//
Appeares before them, and with solemne march,
Goes slowe and stately by them; thrice he walkt
By their opprest and feare surprised eyes
Within his tronchions length, whil'st they distil'd
Almost to gelly, with the act of feare
Stand dumbe and speake not to him; this to me
In dreadfull secresie impart they did,
And I with them the third night kept the watch,
Whereas they had deliuered both in time
Forme of the thing, each word made true and good,
The Apparision comes: I knewe your father,
These hands are not more like.
''//Ham//.'' But where was this?
''//Mar//.'' My Lord vppon the platforme where we watch
''//Ham//.'' Did you not speake to it?
''//Hora//.'' My Lord I did,
But answere made it none, yet once me thought
It lifted vp it head, and did addresse
It selfe to motion like as it would speake:
But euen then the morning Cock crewe loude,
And at the sound it shrunk in hast away
And vanisht from our sight.
''//Ham//.'' Tis very strange.
''//Hora//.'' As I doe liue my honor'd Lord tis true
And we did thinke it writ downe in our dutie
To let you knowe of it.
''//Ham//.'' Indeede Sirs but this troubles me,
Hold you the watch to night?
''//All//.'' We doe my Lord.
''//Ham//.'' Arm'd say you?
''//All//.'' Arm'd my Lord.
''//Ham//.'' From top to toe?
''//All//.'' My Lord from head to foote.
''//Ham//.'' Then sawe you not his face.
''//Hora//.'' O yes my Lord, he wore his beauer vp.
''//Ham//.'' What look't he frowningly?
''//Hora//.'' A countenance more in sorrow then in anger.
''//Ham//.'' Pale, or red?
''//Hora//.'' Nay very pale.
''//Ham//.'' And fixt his eyes vpon you?
''//Hora//.'' Most constantly.
''//Ham//.'' I would I had beene there.
''//Hora//.'' It would haue much a maz'd you.
''//Ham//.'' Very like, stayd it long?
''//Hora//.'' While one with moderate hast might tell a hundreth.
''//Both//.'' Longer, longer.
''//Hora//.'' Not when I saw't.
''//Ham//.'' His beard was grissl'd, no.
''//Hora//.'' It was as I haue seene it in his life
A sable siluer'd.
''//Ham//.'' I will watch to nigh
Perchaunce twill walke againe.
''//Hora//.'' I warn't it will.
''//Ham//.'' If it assume my noble fathers person,
Ile speake to it though hell it selfe should gape
And bid me hold my peace; I pray you all
If you haue hetherto conceald this sight
Let it be tenable in your silence still,
And what someuer els shall hap to night,
Giue it an vnderstanding but no tongue,
I will requite your loues, so farre you well:
Vppon the platforme twixt a leauen and twelfe
Ile visite you.
|dialogWithStageDirectionFisco|k
|''//All//.'' Our dutie to your honor.|//Exeunt//.|
''//Ham//.'' Your loues, as mine to you, farwell.
My fathers spirit (in armes) all is not well,
I doubt some foule play, would the night were come,
Till then sit still my soule, fonde deedes will rise
|dialogWithStageDirectionFisco|k
|Though all the earth ore-whelme them to mens eyes.|//Exit//.|
@@.stageDirectionFisco
// Enter Laertes and Ophelia//.
@@
''//Laer//.'' My necessaries are imbark't; Farewell:
And Sister, as the Winds giue Benefit,
And Conuoy is assistant; doe not sleepe,
But let me heare from you.
''//Ophel//.'' Doe you doubt that?
''//Laer//.'' For //Hamlet//, and the trifling of his fauours,
Hold it a fashion and a toy in Bloud;
A Violet in the youth of Primy Nature;
Froward, not permanent; sweet not lasting
The suppliance of a minute? No more.
''//Ophel//.'' No more but so.
''//Laer//.'' Thinke it no more:
For nature cressant does not grow alone,
In thewes and Bulke: but as his Temple waxes,
The inward seruice of the Minde and Soule
Growes wide withall. Perhaps he loues you now,
And now no soyle nor cautell doth besmerch
The vertue of his feare: but you must feare
His greatnesse weigh'd, his will is not his owne;
For hee himselfe is subiect to his Birth:
Hee may not, as vnuallued persons doe,
Carue for himselfe; for, on his choyce depends
The sanctity and health of the weole State.
And therefore must his choyce be circumscrib'd
Vnto the voyce and yeelding of that Body,
Whereof he is the Head. Then if he sayes he loues you,
It fits your wisedome so farre to beleeue it;
As he in his peculiar Sect and force
May giue his saying deed: which is no further,
Then the maine voyce of //Denmarke// goes withall.
Then weigh what losse your Honour may sustaine,
If with too credent eare you list his Songs;
Or lose your Heart; or your chast Treasure open
To his vnmastred importunity.
Feare it //Ophelia//, feare it my deare Sister,
And keepe within the reare of your Affection;
Out of the shot and danger of Desire.
The chariest Maid is Prodigall enough,
If she vnmaske her beauty to the Moone:
Vertue it selfe scapes not calumnious stroakes,
The Canker Galls, the Infants of the Spring
Too oft before the buttons be disclos'd,
And in the Morne and liquid dew of Youth,
Contagious blastments are most imminent.
Be wary then, best safety lies in feare;
Youth to it selfe rebels, though none else neere.
''//Ophe//.'' I shall th'effect of this good Lesson keepe,
As watchmen to my heart: but good my Brother
Doe not as some vngracious Pastors doe,
Shew me the steepe and thorny way to Heauen;
Whilst like a puft and recklesse Libertine
Himselfe, the Primrose path of dalliance treads,
And reaks not his owne reade.
''//Laer//.'' Oh, feare me not.
@@.stageDirectionFisco
// Enter Polonius//.
@@
I stay too long; but here my Father comes:
A double blessing is a double grace;
Occasion smiles vpon a second leaue.
''//Polon//.'' Yet heere //Laertes//? Aboord, aboord for shame,
The winde sits in the shoulder of your saile,
And you are staid for there: my blessing with you;
And these few Precepts in thy memory,
See thou Character. Giue thy thoughts no tongue,
Nor any vnproportion'd thought his Act:
Be thou familiar; but by no meanes vulgar:
The friends thou hast, and their adoption tride,
Grapple them to thy Soule, with hoopes of Steele:
But doe not dull thy palme, with entertainment
Of each vnhatch't, vnfledg'd Comrade. Beware
Of entrance to a quarrell: but being in
Bear't that th'opposed may beware of thee.
Giue euery man thine eare; but few thy voyce:
Take each mans censure; but reserue thy iudgement:
Costly thy habit as thy purse can buy;
But not exprest in fancie; rich, not gawdie:
For the Apparell oft proclaimes the man.
And they in France of the best ranck and station,
Are of a most select and generous cheff in that.
Neither a borrower, nor a lender be;
For lone oft loses both it selfe and friend:
And borrowing duls the edge of Husbandry.
This aboue all; to thine owne selfe be true:
And it must follow, as the Night the Day,
Thou canst not then be false to any man.
Farewell: my Blessing season this in thee.
''//Laer//.'' Most humbly doe I take my leaue, my Lord.
''//Polon//.'' The time inuites you, goe, your seruants tend.
''//Laer//.'' Farewell //Ophelia//, and remember well
What I haue said to you.
''//Ophe//.'' Tis in my memory lockt,
And you your selfe shall keepe the key of it.
|dialogWithStageDirectionFisco|k
|''//Laer//.'' Farewell.|//Exit Laer//.|
''//Polon//.'' What ist //Ophelia// he hath said to you?
''//Ophe//.'' So please you, somthing touching the L. //Hamlet//.
''//Polon//.'' Marry, well bethought:
Tis told me he hath very oft of late
Giuen priuate time to you; and you your selfe
Haue of your audience beene most free and bounteous.
If it be so, as so tis put on me;
And that in way of caution: I must tell you,
You doe not vnderstand your selfe so cleerely,
As it behoues my Daughter, and your Honour.
What is betweene you, giue me vp the truth?
''//Ophe//.'' He hath my Lord of late, made many tenders
Of his affection to me.
''//Polon//.'' Affection, puh. You speake like a greene Girle,
Vnsifted in such perillous Circumstance.
Doe you beleeue his tenders, as you call them?
''//Ophe//.'' I do not know, my Lord, what I should thinke.
''//Polon//.'' Marry Ile teach you; thinke your selfe a Baby,
That you haue tane his tenders for true pay,
Which are not starling. Tender your selfe more dearly;
Or not to crack the winde of the poore Phrase,
Roaming it thus, you'l tender me a foole.
''//Ophe//.'' My Lord, he hath importun'd me with loue,
In honourable fashion.
''//Polon//.'' I, fashion you may call it, go too, go too.
''//Ophe//.'' And hath giuen countenance to his speech,
My Lord, with all the vowes of Heauen.
''//Polon//.'' I, Springes to catch Woodcocks. I doe know
When the Bloud burnes, how Prodigall the Soule
Giues the tongue vowes: these blazes, Daughter,
Giuing more light then heate; extinct in both,
Euen in their promise, as it is a making;
You must not take for fire. For this time Daughter,
Be somewhat scanter of your Maiden presence;
Set your entreatments at a higher rate,
Then a command to parley. For Lord //Hamlet//,
Beleeue so much in him, that he is young,
And with a larger tether may he walke,
Then may be giuen you. In few, //Ophelia//,
Doe not beleeue his vowes; for they are Broakers,
Not of the eye, which their Inuestments show:
But meere implorators of vnholy Sutes,
Breathing like sanctified and pious bonds,
The better to beguile. This is for all:
I would not, in plaine tearmes, from this time forth,
Haue you so slander any moment leisure,
As to giue words or talke with the Lord //Hamlet://
Looke too't, I charge you; come your wayes.
|dialogWithStageDirectionFisco|k
|''//Ophe//.'' I shall obey my Lord.|//Exeunt//.|
//Enter LAERTES and OPHELIA//
''LAERTES''
|1.3.1|My necessaries are embark'd: farewell:|
|1.3.2|And, sister, as the winds give benefit|
|1.3.3|And convoy is assistant, do not sleep,|
|1.3.4|But let me hear from you.|
''OPHELIA''
|1.3.5|Do you doubt that?|
''LAERTES''
|1.3.6|For Hamlet and the trifling of his favour,|
|1.3.7|Hold it a fashion and a toy in blood,|
|1.3.8|A violet in the youth of primy nature,|
|1.3.9|Forward, not permanent, sweet, not lasting,|
|1.3.10|The perfume and suppliance of a minute; No more.|
''OPHELIA''
|1.3.11| No more but so?|
''LAERTES''
|1.3.12|Think it no more;|
|1.3.13|For nature, crescent, does not grow alone|
|1.3.14|In thews and bulk, but, as this temple waxes,|
|1.3.15|The inward service of the mind and soul|
|1.3.16|Grows wide withal. Perhaps he loves you now,|
|1.3.17|And now no soil nor cautel doth besmirch|
|1.3.18|The virtue of his will: but you must fear,|
|1.3.19|His greatness weigh'd, his will is not his own;|
|1.3.20|For he himself is subject to his birth:|
|1.3.21|He may not, as unvalued persons do,|
|1.3.22|Carve for himself; for on his choice depends|
|1.3.23|The safety and health of this whole state;|
|1.3.24|And therefore must his choice be circumscribed|
|1.3.25|Unto the voice and yielding of that body|
|1.3.26|Whereof he is the head. Then if he says he loves you,|
|1.3.27|It fits your wisdom so far to believe it|
|1.3.28|As he in his particular act and place|
|1.3.29|May give his saying deed; which is no further|
|1.3.30|Than the main voice of Denmark goes withal.|
|1.3.31|Then weigh what loss your honour may sustain,|
|1.3.32|If with too credent ear you list his songs,|
|1.3.33|Or lose your heart, or your chaste treasure open|
|1.3.34|To his unmaster'd importunity.|
|1.3.35|Fear it, Ophelia, fear it, my dear sister,|
|1.3.36|And keep you in the rear of your affection,|
|1.3.37|Out of the shot and danger of desire.|
|1.3.38|The chariest maid is prodigal enough,|
|1.3.39|If she unmask her beauty to the moon:|
|1.3.40|Virtue itself 'scapes not calumnious strokes:|
|1.3.41|The canker galls the infants of the spring,|
|1.3.42|Too oft before their buttons be disclosed,|
|1.3.43|And in the morn and liquid dew of youth|
|1.3.44|Contagious blastments are most imminent.|
|1.3.45|Be wary then; best safety lies in fear:|
|1.3.46|Youth to itself rebels, though none else near.|
''OPHELIA''
|1.3.47|I shall the effect of this good lesson keep,|
|1.3.48|As watchman to my heart. But, good my brother,|
|1.3.49|Do not, as some ungracious pastors do,|
|1.3.50|Show me the steep and thorny way to heaven;|
|1.3.51|Whiles, like a puff'd and reckless libertine,|
|1.3.52|Himself the primrose path of dalliance treads,|
|1.3.53|And recks not his own rede.|
''LAERTES''
|1.3.54|O, fear me not.|
|1.3.55|I stay too long: but here my father comes.|
//Enter POLONIUS//
|1.3.56|A double blessing is a double grace,|
|1.3.57|Occasion smiles upon a second leave.|
''LORD POLONIUS''
|1.3.58|Yet here, Laertes! aboard, aboard, for shame!|
|1.3.59|The wind sits in the shoulder of your sail,|
|1.3.60|And you are stay'd for. There; my blessing with thee!|
|1.3.61|And these few precepts in thy memory|
|1.3.62|See thou character. Give thy thoughts no tongue,|
|1.3.63|Nor any unproportioned thought his act.|
|1.3.64|Be thou familiar, but by no means vulgar.|
|1.3.65|Those friends thou hast, and their adoption tried,|
|1.3.66|Grapple them to thy soul with hoops of steel;|
|1.3.67|But do not dull thy palm with entertainment|
|1.3.68|Of each new-hatch'd, unfledged comrade. Beware|
|1.3.69|Of entrance to a quarrel, but being in,|
|1.3.70|Bear't that the opposed may beware of thee.|
|1.3.71|Give every man thy ear, but few thy voice;|
|1.3.72|Take each man's censure, but reserve thy judgment.|
|1.3.73|Costly thy habit as thy purse can buy,|
|1.3.74|But not express'd in fancy; rich, not gaudy;|
|1.3.75|For the apparel oft proclaims the man,|
|1.3.76|And they in France of the best rank and station|
|1.3.77|Are of a most select and generous chief in that.|
|1.3.78|Neither a borrower nor a lender be;|
|1.3.79|For loan oft loses both itself and friend,|
|1.3.80|And borrowing dulls the edge of husbandry.|
|1.3.81|This above all: to thine ownself be true,|
|1.3.82|And it must follow, as the night the day,|
|1.3.83|Thou canst not then be false to any man.|
|1.3.84|Farewell: my blessing season this in thee!|
''LAERTES''
|1.3.85|Most humbly do I take my leave, my lord.|
''LORD POLONIUS''
|1.3.86|The time invites you; go; your servants tend.|
''LAERTES''
|1.3.87|Farewell, Ophelia; and remember well|
|1.3.88|What I have said to you.|
''OPHELIA''
|1.3.89|'Tis in my memory lock'd,|
|1.3.90|And you yourself shall keep the key of it.|
''LAERTES''
|1.3.91|Farewell.|
//Exit//
''LORD POLONIUS''
|1.3.92|What is't, Ophelia, be hath said to you?|
''OPHELIA''
|1.3.93|So please you, something touching the Lord Hamlet.|
''LORD POLONIUS''
|1.3.94|Marry, well bethought:|
|1.3.95|'Tis told me, he hath very oft of late|
|1.3.96|Given private time to you; and you yourself|
|1.3.97|Have of your audience been most free and bounteous:|
|1.3.98|If it be so, as so 'tis put on me,|
|1.3.99|And that in way of caution, I must tell you,|
|1.3.100|You do not understand yourself so clearly|
|1.3.101|As it behoves my daughter and your honour.|
|1.3.102|What is between you? give me up the truth.|
''OPHELIA''
|1.3.103|He hath, my lord, of late made many tenders|
|1.3.104|Of his affection to me.|
''LORD POLONIUS''
|1.3.105|Affection! pooh! you speak like a green girl,|
|1.3.106|Unsifted in such perilous circumstance.|
|1.3.107|Do you believe his tenders, as you call them?|
''OPHELIA''
|1.3.108|I do not know, my lord, what I should think.|
''LORD POLONIUS''
|1.3.109|Marry, I'll teach you: think yourself a baby;|
|1.3.110|That you have ta'en these tenders for true pay,|
|1.3.111|Which are not sterling. Tender yourself more dearly;|
|1.3.112|Or--not to crack the wind of the poor phrase,|
|1.3.113|Running it thus--you'll tender me a fool.|
''OPHELIA''
|1.3.114|My lord, he hath importuned me with love|
|1.3.115|In honourable fashion.|
''LORD POLONIUS''
|1.3.116|Ay, fashion you may call it; go to, go to.|
''OPHELIA''
|1.3.117|And hath given countenance to his speech, my lord,|
|1.3.118|With almost all the holy vows of heaven.|
''LORD POLONIUS''
|1.3.119|Ay, springes to catch woodcocks. I do know,|
|1.3.120|When the blood burns, how prodigal the soul|
|1.3.121|Lends the tongue vows: these blazes, daughter,|
|1.3.122|Giving more light than heat, extinct in both,|
|1.3.123|Even in their promise, as it is a-making,|
|1.3.124|You must not take for fire. From this time|
|1.3.125|Be somewhat scanter of your maiden presence;|
|1.3.126|Set your entreatments at a higher rate|
|1.3.127|Than a command to parley. For Lord Hamlet,|
|1.3.128|Believe so much in him, that he is young|
|1.3.129|And with a larger tether may he walk|
|1.3.130|Than may be given you: in few, Ophelia,|
|1.3.131|Do not believe his vows; for they are brokers,|
|1.3.132|Not of that dye which their investments show,|
|1.3.133|But mere implorators of unholy suits,|
|1.3.134|Breathing like sanctified and pious bawds,|
|1.3.135|The better to beguile. This is for all:|
|1.3.136|I would not, in plain terms, from this time forth,|
|1.3.137|Have you so slander any moment leisure,|
|1.3.138|As to give words or talk with the Lord Hamlet.|
|1.3.139|Look to't, I charge you: come your ways.|
''OPHELIA''
|1.3.140|I shall obey, my lord.|
//Exeunt//
@@.stageDirectionFisco
//Enter Laertes, and Ophelia his Sister//.
@@
''//Laer//.'' My necessaries are inbarckt, farwell,
And sister, as the winds giue benefit
And conuay, in assistant doe not sleepe
But let me heere from you.
''//Ophe//.'' Doe you doubt that?
''//Laer//.'' For //Hamlet//, and the trifling of his fauour,
Hold it a fashion, and a toy in blood
A Violet in the youth of primy nature,
Forward, not permanent, sweete, not lasting,
The perfume and suppliance of a minute
No more.
''//Ophe//.'' No more but so.
''//Laer//.'' Thinke it no more.
For nature cressant does not growe alone
In thewes and bulkes, but as this temple waxes
The inward seruice of the minde and soule
Growes wide withall, perhapes he loues you now,
And now no soyle nor cautell doth besmirch
The vertue of his will, but you must feare,
His greatnes wayd, his will is not his owne,
He may not as vnualewed persons doe,
Carue for himselfe, for on his choise depends
The safty and health of this whole state,
And therefore must his choise be circumscribd
Vnto the voyce and yeelding of that body
Whereof he is the head, then if he saies he loues you,
It fits your wisdome so farre to belieue it
As he in his particuler act and place
May giue his saying deede, which is no further
Then the maine voyce of Denmarke goes withall.
Then way what losse your honor may sustaine
If with too credent eare you list his songs
Or loose your hart, or your chast treasure open
To his vnmastred importunity.
Feare it //Ophelia//, feare it my deare sister,
And keepe you in the reare of your affection
Out of the shot and danger of desire,
"The chariest maide is prodigall inough
If she vnmaske her butie to the Moone
"Vertue it selfe scapes not calumnious strokes
"The canker gaules the infants of the spring
Too oft before their buttons be disclos'd,
And in the morne and liquid dewe of youth
Contagious blastments are most iminent,
Be wary then, best safety lies in feare,
Youth to it selfe rebels, though non els neare.
''//Ophe//.'' I shall the effect of this good lesson keepe
As watchman to my hart, but good my brother
Doe not as some vngracious pastors doe,
Showe me the stepe and thorny way to heauen
Whiles a puft, and reckles libertine
Himselfe the primrose path of dalience treads.
|dialogWithStageDirectionFisco|k
|And reakes not his owne reed.|//Enter Polonius//.|
''//Laer//.'' O feare me not,
I stay too long, but heere my father comes
A double blessing, is a double grace,
Occasion smiles vpon a second leaue.
''//Pol//.'' Yet heere //Laertes//? a bord, a bord for shame,
The wind sits in the shoulder of your saile,
And you are stayed for, there my blessing with thee,
And these fewe precepts in thy memory
Looke thou character, giue thy thoughts no tongue,
Nor any vnproportion'd thought his act,
Be thou familier, but by no meanes vulgar,
Those friends thou hast, and their a doption tried,
Grapple them vnto thy soule with hoopes of steele,
But doe not dull thy palme with entertainment
Of each new hatcht vnfledgd courage, beware
Of entrance to a quarrell, but being in,
Bear't that th'opposed may beware of thee,
Giue euery man thy eare, but fewe thy voyce,
Take each mans censure, but reserue thy iudgement,
Costly thy habite as thy purse can by,
But not exprest in fancy; rich not gaudy,
For the apparrell oft proclaimes the man
And they in Fraunce of the best ranck and station,
Or of a most select and generous, chiefe in that:
Neither a borrower nor a lender boy,
For loue oft looses both it selfe, and friend,
And borrowing dulleth edge of husbandry;
This aboue all, to thine owne selfe be true
And it must followe as the night the day
Thou canst not then be false to any man:
Farwell, my blessing season this in thee.
''//Laer//.'' Most humbly doe I take my leaue my Lord.
''//Pol//.'' The time inuests you goe, your seruants tend.
''//Laer//.'' Farwell //Ophelia//, and remember well
What I haue sayd to you.
''//Ophe//.'' Tis in my memory lockt
And you your selfe shall keepe the key of it.
|dialogWithStageDirectionFisco|k
|''//Laer//.'' Farwell.|//Exit Laertes//.|
''//Pol//.'' What ist //Ophelia// he hath sayd to you?
''//Ophe//.'' So please you, something touching the Lord //Hamlet//.
''//Pol//.'' Marry well bethought
Tis tolde me he hath very oft of late
Giuen priuate time to you, and you your selfe
Haue of your audience beene most free and bountious,
If it be so, as so tis put on me,
And that in way of caution, I must tell you,
You doe not vnderstand your selfe so cleerely
As it behooues my daughter, and your honor,
What is betweene you giue me vp the truth,
''//Ophe//.'' He hath my Lord of late made many tenders
Of his affection to me.
''//Pol//.'' Affection, puh, you speake like a greene girle
Vnsifted in such perrilous circumstance,
Doe you belieue his tenders as you call them?
''//Ophe//.'' I doe not knowe my Lord what I should thinke.
''//Pol//.'' Marry I will teach you, thinke your selfe a babie
That you haue tane these tenders for true pay
Which are not sterling, tender your selfe more dearely
Or (not to crack the winde of the poore phrase
Wrong it thus) you'l tender me a foole.
''//Ophe//.'' My Lord he hath importun'd me with loue
In honorable fashion.
''//Pol//.'' I, fashion you may call it, go to, go to.
''//Ophe//.'' And hath giuen countenance to his speech
My Lord, with almost all the holy vowes of heauen.
''//Pol//.'' I, springs to catch wood-cockes, I doe knowe
When the blood burnes, how prodigall the soule
Lends the tongue vowes, these blazes daughter
Giuing more light then heate, extinct in both
Euen in their promise, as it is a making
You must not take for fire, from this time
Be something scanter of your maiden presence
Set your intreatments at a higher rate
Then a commaund to parle; for Lord //Hamlet//,
Belieue so much in him that he is young,
And with a larger tider may he walke
Then may be giuen you: in fewe //Ophelia//,
Doe not belieue his vowes, for they are brokers
Not of that die which their inuestments showe
But meere imploratotors of vnholy suites
Breathing like sanctified and pious bonds
The better to beguide: this is for all,
I would not in plaine tearmes from this time foorth
Haue you so slaunder any moment leasure
As to giue words or talke with the Lord //Hamlet//,
Looke too't I charge you, come your wayes.
|dialogWithStageDirectionFisco|k
|''//Ophe//.'' I shall obey my Lord.|//Exeunt//.|
@@.stageDirectionFisco
// Enter Hamlet, Horatio, Marcellus//.
@@
''//Ham//.'' The Ayre bites shrewdly: is it very cold?
''//Hor//.'' It is a nipping and an eager ayre.
''//Ham//.'' What hower now?
''//Hor//.'' I thinke it lacks of twelue.
''//Mar//.'' No, it is strooke.
''//Hor//.'' Indeed I heard it not: then it drawes neere the season,
Wherein the Spirit held his wont to walke.
What does this meane my Lord?
''//Ham//.'' The King doth wake to night, and takes his rouse,
Keepes wassels and the swaggering vpspring reeles,
And as he dreines his draughts of Renish downe,
The kettle Drum and Trumpet thus bray out
The triumph of his Pledge.
''//Horat//.'' Is it a custome?
''//Ham//.'' I marry ist;
And to my mind, though I am natiue heere,
And to the manner borne: It is a Custome
More honour'd in the breach, then the obseruance.
@@.stageDirectionFisco
// Enter Ghost//.
@@
''//Hor//.'' Looke my Lord, it comes.
''//Ham//.'' Angels and Ministers of Grace defend vs:
Be thou a Spirit of health, or Goblin damn'd,
Bring with thee ayres from Heauen, or blasts from Hell,
Be thy euents wicked or charitable,
Thou com'st in such a questionable shape
That I will speake to thee. Ile call thee //Hamlet//,
King, Father, Royall Dane: Oh, oh, answer me,
Let me not burst in Ignorance; but tell
Why thy Canoniz'd bones Hearsed in death,
Haue burst their cerments, why the Sepulcher
Wherein we saw thee quietly enurn'd,
Hath op'd his ponderous and Marble iawes,
To cast thee vp againe? What may this meane?
That thou dead Coarse againe in compleat steele,
Reuisits thus the glimpses of the Moone,
Making Night hidious? And we fooles of Nature,
So horridly to shake our disposition,
With thoughts beyond thee; reaches of our Soules,
Say, why is this? wherefore? what should we doe?
@@.stageDirectionFisco
//Ghost beckens Hamlet//.
@@
''//Hor//.'' It beckons you to goe away with it,
As if it some impartment did desire
To you alone.
''//Mar//.'' Looke with what courteous action
It wafts you to a more remoued ground:
But doe not goe with it.
''//Hor//.'' No, by no meanes.
''//Ham//.'' It will not speake: then will I follow it.
''//Hor//.'' Doe not my Lord.
''//Ham//.'' Why, what should be the feare?
I doe not set my life at a pins fee;
And for my Soule, what can it doe to that?
Being a thing immortall as it selfe:
It waues me forth againe; Ile follow it.
''//Hor//.'' What if it tempt you toward the Floud my Lord?
Or to the dreadfull Sonnet of the Cliffe,
That beetles o're his base into the Sea,
And there assumes some other horrible forme,
Which might depriue your Soueraignty of Reason,
And draw you into madnesse thinke of it?
''//Ham//.'' It wafts me still: goe on, Ile follow thee.
''//Mar//.'' You shall not goe my Lord.
''//Ham//.'' Hold off your hand.
''//Hor//.'' Be rul'd, you shall not goe.
''//Ham//.'' My fate cries out,
And makes each petty Artire in this body,
As hardy as the Nemian Lions nerue:
Still am I cal'd? Vnhand me Gentlemen:
By Heau'n, Ile make a Ghost of him that lets me:
I say away, goe on, Ile follow thee.
|dialogWithStageDirectionFisco|k
||//Exeunt Ghost & Hamlet//.|
''//Hor//.'' He waxes desperate with imagination.
''//Mar//.'' Let's follow; 'tis not fit thus to obey him.
''//Hor//.'' Haue after, to what issue will this come?
''//Mar//.'' Something is rotten in the State of Denmarke.
''//Hor//.'' Heauen will direct it.
|dialogWithStageDirectionFisco|k
|''//Mar//.'' Nay, let's follow him.|//Exeunt//.|
//Enter HAMLET, HORATIO, and MARCELLUS//
''HAMLET''
|1.4.1|The air bites shrewdly; it is very cold.|
''HORATIO''
|1.4.2|It is a nipping and an eager air.|
''HAMLET''
|1.4.3|What hour now?|
''HORATIO''
|1.4.4| I think it lacks of twelve.|
''HAMLET''
|1.4.5|No, it is struck.|
''HORATIO''
|1.4.6|Indeed? I heard it not: then it draws near the season|
|1.4.7|Wherein the spirit held his wont to walk.|
//A flourish of trumpets, and ordnance shot off, within//
|1.4.8|What does this mean, my lord?|
''HAMLET''
|1.4.9|The king doth wake to-night and takes his rouse,|
|1.4.10|Keeps wassail, and the swaggering up-spring reels;|
|1.4.11|And, as he drains his draughts of Rhenish down,|
|1.4.12|The kettle-drum and trumpet thus bray out|
|1.4.13|The triumph of his pledge.|
''HORATIO''
|1.4.14|Is it a custom?|
''HAMLET''
|1.4.15|Ay, marry, is't:|
|1.4.16|But to my mind, though I am native here|
|1.4.17|And to the manner born, it is a custom|
|1.4.18|More honour'd in the breach than the observance.|
|1.4.19|This heavy-headed revel east and west|
|1.4.20|Makes us traduced and tax'd of other nations:|
|1.4.21|They clepe us drunkards, and with swinish phrase|
|1.4.22|Soil our addition; and indeed it takes|
|1.4.23|From our achievements, though perform'd at height,|
|1.4.24|The pith and marrow of our attribute.|
|1.4.25|So, oft it chances in particular men,|
|1.4.26|That for some vicious mole of nature in them,|
|1.4.27|As, in their birth--wherein they are not guilty,|
|1.4.28|Since nature cannot choose his origin--|
|1.4.29|By the o'ergrowth of some complexion,|
|1.4.30|Oft breaking down the pales and forts of reason,|
|1.4.31|Or by some habit that too much o'er-leavens|
|1.4.32|The form of plausive manners, that these men,|
|1.4.33|Carrying, I say, the stamp of one defect,|
|1.4.34|Being nature's livery, or fortune's star,--|
|1.4.35|Their virtues else--be they as pure as grace,|
|1.4.36|As infinite as man may undergo--|
|1.4.37|Shall in the general censure take corruption|
|1.4.38|From that particular fault: the dram of eale|
|1.4.39|Doth all the noble substance of a doubt|
|1.4.40|To his own scandal.|
''HORATIO''
|1.4.41|Look, my lord, it comes!|
//Enter Ghost//
''HAMLET''
|1.4.42|Angels and ministers of grace defend us!|
|1.4.43|Be thou a spirit of health or goblin damn'd,|
|1.4.44|Bring with thee airs from heaven or blasts from hell,|
|1.4.45|Be thy intents wicked or charitable,|
|1.4.46|Thou comest in such a questionable shape|
|1.4.47|That I will speak to thee: I'll call thee Hamlet,|
|1.4.48|King, father, royal Dane: O, answer me!|
|1.4.49|Let me not burst in ignorance; but tell|
|1.4.50|Why thy canonized bones, hearsed in death,|
|1.4.51|Have burst their cerements; why the sepulchre,|
|1.4.52|Wherein we saw thee quietly inurn'd,|
|1.4.53|Hath oped his ponderous and marble jaws,|
|1.4.54|To cast thee up again. What may this mean,|
|1.4.55|That thou, dead corse, again in complete steel|
|1.4.56|Revisit'st thus the glimpses of the moon,|
|1.4.57|Making night hideous; and we fools of nature|
|1.4.58|So horridly to shake our disposition|
|1.4.59|With thoughts beyond the reaches of our souls?|
|1.4.60|Say, why is this? wherefore? what should we do?|
//Ghost beckons HAMLET//
''HORATIO''
|1.4.61|It beckons you to go away with it,|
|1.4.62|As if it some impartment did desire|
|1.4.63|To you alone.|
''MARCELLUS''
|1.4.64| Look, with what courteous action|
|1.4.65|It waves you to a more removed ground:|
|1.4.66|But do not go with it.|
''HORATIO''
|1.4.67|No, by no means.|
''HAMLET''
|1.4.68|It will not speak; then I will follow it.|
''HORATIO''
|1.4.69|Do not, my lord.|
''HAMLET''
|1.4.70| Why, what should be the fear?|
|1.4.71|I do not set my life in a pin's fee;|
|1.4.72|And for my soul, what can it do to that,|
|1.4.73|Being a thing immortal as itself?|
|1.4.74|It waves me forth again: I'll follow it.|
''HORATIO''
|1.4.75|What if it tempt you toward the flood, my lord,|
|1.4.76|Or to the dreadful summit of the cliff|
|1.4.77|That beetles o'er his base into the sea,|
|1.4.78|And there assume some other horrible form,|
|1.4.79|Which might deprive your sovereignty of reason|
|1.4.80|And draw you into madness? think of it:|
|1.4.81|The very place puts toys of desperation,|
|1.4.82|Without more motive, into every brain|
|1.4.83|That looks so many fathoms to the sea|
|1.4.84|And hears it roar beneath.|
''HAMLET''
|1.4.85|It waves me still.|
|1.4.86|Go on; I'll follow thee.|
''MARCELLUS''
|1.4.87|You shall not go, my lord.|
''HAMLET''
|1.4.88|Hold off your hands.|
''HORATIO''
|1.4.89|Be ruled; you shall not go.|
''HAMLET''
|1.4.90|My fate cries out,|
|1.4.91|And makes each petty artery in this body|
|1.4.92|As hardy as the Nemean lion's nerve.|
|1.4.93|Still am I call'd. Unhand me, gentlemen.|
|1.4.94|By heaven, I'll make a ghost of him that lets me!|
|1.4.95|I say, away! Go on; I'll follow thee.|
//Exeunt Ghost and HAMLET//
''HORATIO''
|1.4.96|He waxes desperate with imagination.|
''MARCELLUS''
|1.4.97|Let's follow; 'tis not fit thus to obey him.|
''HORATIO''
|1.4.98|Have after. To what issue will this come?|
''MARCELLUS''
|1.4.99|Something is rotten in the state of Denmark.|
''HORATIO''
|1.4.100|Heaven will direct it.|
''MARCELLUS''
|1.4.101|Nay, let's follow him.|
//Exeunt//
@@.stageDirectionFisco
//Enter Hamlet, Horatio and Marcellus//.
@@
''//Ham//.'' The ayre bites shroudly, it is very colde.
''//Hora//.'' It is nipping, and an eager ayre.
''//Ham//.'' What houre now?
''//Hora//.'' I thinke it lackes of twelfe.
''//Mar//.'' No, it is strooke.
''//Hora//.'' Indeede; I heard it not, it then drawes neere the season,
|dialogWithStageDirectionFisco|k
|Wherein the spirit held his wont to walke|//A florish of trumpets and 2. peeces goes of//.|
What does this meane my Lord?
''//Ham//.'' The King doth wake to night and takes his rowse.
Keepes wassell and the swaggring vp-spring reeles:
And as he draines his drafts of Rennish downe,
The kettle drumme, and trumpet, thus bray out
The triumph of his pledge.
''//Hora//.'' Is it a custome?
''//Ham//.'' I marry ist,
But to my minde, though I am natiue heere
And to the manner borne, it is a custome
More honourd in the breach, then the obseruance.
This heauy headed reueale east and west
Makes vs tradust, and taxed of other nations,
They clip vs drunkards, and with Swinish phrase
Soyle our addition, and indeede it takes
From our atchieuements, though perform'd at height
The pith and marrow of our attribute,
So oft it chaunces in particuler men,
That for some vicious mole of nature in them
As in their birth wherein they are not guilty,
(Since nature cannot choose his origin)
By their ore-grow'th of some complextion
Oft breaking downe the pales and forts of reason,
Or by some habit, that too much ore-leauens
The forme of plausiue manners, that these men
Carrying I say the stamp of one defect
Being Natures liuery, or Fortunes starre,
His vertues els be they as pure as grace,
As infinite as man may vndergoe,
Shall in the generall censure take corruption
From that particuler fault: the dram of eale
Doth all the noble substance of a doubt
To his owne scandle.
@@.stageDirectionFisco
//Enter Ghost//.
@@
''//Hora//.'' Looke my Lord it comes.
''//Ham//.'' Angels and Ministers of grace defend vs:
Be thou a spirit of health, or gobl
in damn'd,
Bring with thee ayres from heauen, or blasts from hell,
Be thy intents wicked, or charitable,
Thou com'st in such a questionable shape,
That I will speake to thee, Ile call thee //Hamlet//,
King, father, royall Dane, ô answere mee,
Let me not burst in ignorance, but tell
Why thy canoniz'd bones hearsed in death
Haue burst their cerements? why the Sepulcher,
Wherein we saw thee quietly interr'd
Hath op't his ponderous and marble iawes,
To cast thee vp againe? what may this meane
That thou dead corse, againe in compleat steele
Reuisites thus the glimses of the Moone,
Making night hideous, and we fooles of nature
So horridly to shake our disposition
With thoughts beyond the reaches of our soules,
|dialogWithStageDirectionFisco|k
|Say why is this, wherefore, what should we doe?|//Beckins//.|
''//Hora//.'' It beckins you to goe away with it
As if it some impartment did desire
To you alone.
''//Mar//.'' Looke with what curteous action
It waues you to a more remooued ground,
But doe not goe with it.
''//Hora//.'' No, by no meanes.
''//Ham//.'' It will not speake, then I will followe it.
''//Hora//.'' Doe not my Lord.
''//Ham//.'' Why what should be the feare,
I doe not set my life at a pinnes fee,
And for my soule, what can it doe to that
Being a thing immortall as it selfe;
It waues me forth againe, Ile followe it.
''//Hora//.'' What if it tempt you toward the flood my Lord,
Or to the dreadfull somnet of the cleefe
That bettles ore his base into the sea,
And there assume some other horrable forme
Which might depriue your soueraigntie of reason,
And draw you into madnes, thinke of it,
The very place puts toyes of desperation
Without more motiue, into euery braine
That lookes so many fadoms to the sea
And heares it rore beneath.
''//Ham//.'' It waues me still,
Goe on, Ile followe thee.
''//Mar//.'' You shall not goe my Lord.
''//Ham//.'' Hold of your hands.
''//Hora//.'' Be rul'd, you shall not goe.
''//Ham//.'' My fate cries out
And makes each petty arture in this body
As hardy as the Nemeon Lyons nerue;
Still am I cald, vnhand me Gentlemen
By heauen Ile make a ghost of him that lets me,
|dialogWithStageDirectionFisco|k
|I say away, goe on, Ile followe thee.|//Exit Ghost and Hamlet//.|
''//Hora//.'' He waxes desperate with imagion.
''//Mar//.'' Lets followe, tis not fit thus to obey him.
''//Hora//.'' Haue after, to what issue will this come?
''//Mar//.'' Something is rotten in the state of Denmarke.
''//Hora//.'' Heauen will direct it.
|dialogWithStageDirectionFisco|k
|''//Mar//.'' Nay lets follow him.|//Exeunt//.|
@@.stageDirectionFisco
// Enter Ghost and Hamlet//.
@@
''//Ham//.'' Where wilt thou lead me? speak; Ile go no further.
''//Gho//.'' Marke me.
''//Ham//.'' I will.
''//Gho//.'' My hower is almost come,
When I to sulphurous and tormenting Flames
Must render vp my selfe.
''//Ham//.'' Alas poore Ghost.
''//Gho//.'' Pitty me not, but lend thy serious hearing
To what I shall vnfold.
''//Ham//.'' Speake, I am bound to heare.
''//Gho//.'' So art thou to reuenge, when thou shalt heare.
''//Ham//.'' What?
''//Gho//.'' I am thy Fathers Spirit,
Doom'd for a certaine terme to walke the night;
And for the day confin'd to fast in Fiers,
Till the foule crimes done in my dayes of Nature
Are burnt and purg'd away? But that I am forbid
To tell the secrets of my Prison-House;
I could a Tale vnfold, whose lightest word
Would harrow vp thy soule, freeze thy young blood,
Make thy two eyes like Starres, start from their Spheres,
Thy knotty and combined locks to part,
And each particular haire to stand an end,
Like Quilles vpon the fretfull Porpentine:
But this eternall blason must not be
To eares of flesh and bloud; list //Hamlet//, oh list,
If thou didst euer thy deare Father loue.
''//Ham//.'' Oh Heauen!
''//Gho//.'' Reuenge his foule and most vnnaturall Murther.
''//Ham//.'' Murther?
''//Ghost//.'' Murther most foule, as in the best it is;
But this most foule, strange, and vnnaturall.
''//Ham//.'' Hast, hast me to know it,
That with wings as swift
As meditation, or the thoughts of Loue,
May sweepe to my Reuenge.
''//Ghost//.'' I finde thee apt,
And duller should'st thou be then the fat weede
That rots it selfe in ease, on Lethe Wharfe,
Would'st thou not stirre in this. Now //Hamlet// heare:
It's giuen out, that sleeping in mine Orchard,
A Serpent stung me: so the whole eare of Denmarke,
Is by a forged processe of my death
Rankly abus'd: But know thou Noble youth,
The Serpent that did sting thy Fathers life,
Now weares his Crowne.
''//Ham//.'' O my Propheticke soule: mine Vncle?
''//Ghost//.'' I that incestuous, that adulterate Beast
With witchcraft of his wits, hath Traitorous guifts.
Oh wicked Wit, and Gifts, that haue the power
So to seduce? Won to to this shamefull Lust
The will of my most seeming vertuous Queene:
Oh //Hamlet//, what a falling off was there,
From me, whose loue was of that dignity,
That it went hand in hand, euen with the Vow
I made to her in Marriage; and to decline
Vpon a wretch, whose Naturall gifts were poore
To those of mine. But Vertue, as it neuer wil be moued,
Though Lewdnesse court it in a shape of Heauen:
So Lust, though to a radiant Angell link'd,
Will sate it selfe in a Celestiallbed, & prey on Garbage.
But soft, me thinkes I sent the Mornings Ayre;
Briefe let me be: Sleeping within mine Orchard,
My custome alwayes in the afternoone;
Vpon my secure hower thy Vncle stole
With iuyce of cursed Hebenon in a Violl,
And in the Porches of mine eares did poure
The leaperous Distilment; whose effect
Holds such an enmity with bloud of Man,
That swift as Quick-siluer, it courses through
The naturall Gates and Allies of the Body;
And with a sodaine vigour it doth posset
And curd, like Aygre droppings into Milke,
The thin and wholsome blood: so did it mine;
And a most instant Tetter bak'd about,
Most Lazar-like, with vile and loathsome crust,
All my smooth Body.
Thus was I, sleeping, by a Brothers hand,
Of Life, of Crowne, and Queene at once dispatcht;
Cut off euen in the Blossomes of my Sinne,
Vnhouzzled, disappointed, vnnaneld,
No reckoning made, but sent to my account
With all my imperfections on my head;
Oh horrible, Oh horrible, most horrible:
If thou hast nature in thee beare it not;
Let not the Royall Bed of Denmarke be
A Couch for Luxury and damned Incest.
But howsoeuer thou pursuest this Act,
Taint not thy mind; nor let thy Soule contriue
Against thy Mother ought; leaue her to heauen,
And to those Thornes that in her bosome lodge,
To pricke and sting her. Fare thee well at once;
The Glow-worme showes the Matine to be neere,
And gins to pale his vneffectuall Fire:
|dialogWithStageDirectionFisco|k
|Adue, adue, //Hamlet:// remember me.|//Exit//.|
''//Ham//.'' Oh all you host of Heauen! Oh Earth; what els?
And shall I couple Hell? Oh fie: hold my heart;
And you my sinnewes, grow not instant Old;
But beare me stiffely vp: Remember thee?
I, thou poore Ghost, while memory holds a seate
In this distracted Globe: Remember thee?
Yea, from the Table of my Memory,
Ile wipe away all triuiall fond Records,
All sawes of Bookes, all formes, all presures past,
That youth and obseruation coppied there;
And thy Commandment all alone shall liue
Within the Booke and Volume of my Braine,
Vnmixt with baser matter; yes, yes, by Heauen:
Oh most pernicious woman!
Oh Villaine, Villaine, smiling damned Villaine!
My Tables, my Tables; meet it is I set it downe,
That one may smile, and smile and be a Villaine;
At least I'm sure it may be so in Denmarke;
So Vnckle there you are: now to my word;
It is; Adue, Adue, Remember me: I haue sworn't.
''//Hor//.'' //&// //Mar//. //within//. My Lord, my Lord.
@@.stageDirectionFisco
// Enter Horatio and Marcellus//.
@@
''//Mar//.'' Lord //Hamlet//.
''//Hor//.'' Heauen secure him.
''//Mar//.'' So be it.
''//Hor//.'' Illo, ho, ho, my Lord.
''//Ham//.'' Hillo, ho, ho, boy; come bird, come.
''//Mar//.'' How ist't my Noble Lord?
''//Hor//.'' What newes, my Lord?
''//Ham//.'' Oh wonderfull!
''//Hor//.'' Good my Lord tell it.
''//Ham//.'' No you'l reueale it.
''//Hor//.'' Not I, my Lord, by Heauen.
''//Mar//.'' Nor I, my Lord.
''//Ham//.'' How say you then, would heart of man once think it?
But you'l be secret?
''//Both//.'' I, by Heau'n, my Lord.
''//Ham//.'' There's nere a villaine dwelling in all Denmarke
But hee's an arrant knaue.
''//Hor//.'' There needs no Ghost my Lord, come from the
Graue, to tell vs this.
''//Ham//.'' Why right, you are i'th' right;
And so, without more circumstance at all,
I hold it fit that we shake hands, and part:
You, as your busines and desires shall point you:
For euery man ha's businesse and desire,
Such as it is: and for mine owne poore part,
Looke you, Ile goe pray.
''//Hor//.'' These are but wild and hurling words, my Lord.
''//Ham//.'' I'm sorry they offend you heartily:
Yes faith, heartily.
''//Hor//.'' There's no offence my Lord.
''//Ham//.'' Yes, by Saint //Patricke//, but there is my Lord,
And much offence too, touching this Vision heere:
It is an honest Ghost, that let me tell you:
For your desire to know what is betweene vs,
O'remaster't as you may. And now good friends,
As you are Friends, Schollers and Soldiers,
Giue me one poore request.
''//Hor//.'' What is't my Lord? we will.
''//Ham//.'' Neuer make known what you haue seen to night.
''//Both//.'' My Lord, we will not.
''//Ham//.'' Nay, but swear't.
''//Hor//.'' Infaith my Lord, not I.
''//Mar//.'' Nor I my Lord: in faith.
''//Ham//.'' Vpon my sword.
''//Marcell//.'' We haue sworne my Lord already.
''//Ham//.'' Indeed, vpon my sword, Indeed.
|dialogWithStageDirectionFisco|k
|''//Gho//.'' Sweare.|//Ghost cries vnder the Stage//.|
''//Ham//.'' Ah ha boy, sayest thou so. Art thou there true-
penny? Come one you here this fellow in the selleredge
Consent to sweare.
''//Hor//.'' Propose the Oath my Lord.
''//Ham//.'' Neuer to speake of this that you haue seene.
Sweare by my sword.
''//Gho//.'' Sweare.
''//Ham//.'' //Hic & vbique//? Then wee'l shift for grownd,
Come hither Gentlemen,
And lay your hands againe vpon my sword,
Neuer to speake of this that you haue heard:
Sweare by my Sword.
''//Gho//.'' Sweare.
''//Ham//.'' Well said old Mole, can'st worke i'th' ground so fast?
A worthy Pioner, once more remoue good friends.
''//Hor//.'' Oh day and night: but this is wondrous strange.
''//Ham//.'' And therefore as a stranger giue it welcome.
There are more things in Heauen and Earth, //Horatio//,
Then are dream't of in our Philosophy. But come,
Here as before, neuer so helpe you mercy,
How strange or odde so ere I beare my selfe;
(As I perchance heereafter shall thinke meet
To put an Anticke disposition on:)
That you at such time seeing me, neuer shall
With Armes encombred thus, or thus, head shake;
Or by pronouncing of some doubtfull Phrase;
As well, we know, or we could and if we would,
Or if we list to speake; or there be and if there might,
Or such ambiguous giuing out to note,
That you know ought of me; this not to doe:
So grace and mercy at your most neede helpe you:
Sweare.
''//Ghost//.'' Sweare.
''//Ham//.'' Rest, rest perturbed Spirit: so Gentlemen,
With all my loue I doe commend me to you;
And what so poore a man as //Hamlet// is,
May doe t' expresse his loue and friending to you,
God willing shall not lacke: let vs goe in together,
And still your fingers on your lippes I pray,
The time is out of ioynt: Oh cursed spight,
That euer I was borne to set it right.
|dialogWithStageDirectionFisco|k
|Nay, come let's goe together.|//Exeunt//.|
//Enter GHOST and HAMLET//
''HAMLET''
|1.5.1|Where wilt thou lead me? speak; I'll go no further.|
''Ghost''
|1.5.2|Mark me.|
''HAMLET''
|1.5.3| I will.|
''Ghost''
|1.5.4| My hour is almost come,|
|1.5.5|When I to sulphurous and tormenting flames|
|1.5.6|Must render up myself.|
''HAMLET''
|1.5.7|Alas, poor ghost!|
''Ghost''
|1.5.8|Pity me not, but lend thy serious hearing|
|1.5.9|To what I shall unfold.|
''HAMLET''
|1.5.10|Speak; I am bound to hear.|
''Ghost''
|1.5.11| So art thou to revenge, when thou shalt hear.|
''HAMLET''
|1.5.12|What?|
''Ghost''
|1.5.13|I am thy father's spirit,|
|1.5.14|Doom'd for a certain term to walk the night,|
|1.5.15|And for the day confined to fast in fires,|
|1.5.16|Till the foul crimes done in my days of nature|
|1.5.17|Are burnt and purged away. But that I am forbid|
|1.5.18|To tell the secrets of my prison-house,|
|1.5.19|I could a tale unfold whose lightest word|
|1.5.20|Would harrow up thy soul, freeze thy young blood,|
|1.5.21|Make thy two eyes, like stars, start from their spheres,|
|1.5.22|Thy knotted and combined locks to part|
|1.5.23|And each particular hair to stand on end,|
|1.5.24|Like quills upon the fretful porpentine:|
|1.5.25|But this eternal blazon must not be|
|1.5.26|To ears of flesh and blood. List, list, O, list!|
|1.5.27|If thou didst ever thy dear father love--|
''HAMLET''
|1.5.28|O God!|
''Ghost''
|1.5.29|Revenge his foul and most unnatural murder.|
''HAMLET''
|1.5.30|Murder!|
''Ghost''
|1.5.31|Murder most foul, as in the best it is;|
|1.5.32|But this most foul, strange and unnatural.|
''HAMLET''
|1.5.33|Haste me to know't, that I, with wings as swift|
|1.5.34|As meditation or the thoughts of love,|
|1.5.35|May sweep to my revenge.|
''Ghost''
|1.5.36|I find thee apt;|
|1.5.37|And duller shouldst thou be than the fat weed|
|1.5.38|That roots itself in ease on Lethe wharf,|
|1.5.39|Wouldst thou not stir in this. Now, Hamlet, hear:|
|1.5.40|'Tis given out that, sleeping in my orchard,|
|1.5.41|A serpent stung me; so the whole ear of Denmark|
|1.5.42|Is by a forged process of my death|
|1.5.43|Rankly abused: but know, thou noble youth,|
|1.5.44|The serpent that did sting thy father's life|
|1.5.45|Now wears his crown.|
''HAMLET''
|1.5.46|O my prophetic soul! My uncle!|
''Ghost''
|1.5.47|Ay, that incestuous, that adulterate beast,|
|1.5.48|With witchcraft of his wit, with traitorous gifts,--|
|1.5.49|O wicked wit and gifts, that have the power|
|1.5.50|So to seduce!--won to his shameful lust|
|1.5.51|The will of my most seeming-virtuous queen:|
|1.5.52|O Hamlet, what a falling-off was there!|
|1.5.53|From me, whose love was of that dignity|
|1.5.54|That it went hand in hand even with the vow|
|1.5.55|I made to her in marriage, and to decline|
|1.5.56|Upon a wretch whose natural gifts were poor|
|1.5.57|To those of mine!|
|1.5.58|But virtue, as it never will be moved,|
|1.5.59|Though lewdness court it in a shape of heaven,|
|1.5.60|So lust, though to a radiant angel link'd,|
|1.5.61|Will sate itself in a celestial bed,|
|1.5.62|And prey on garbage.|
|1.5.63|But, soft! methinks I scent the morning air;|
|1.5.64|Brief let me be. Sleeping within my orchard,|
|1.5.65|My custom always of the afternoon,|
|1.5.66|Upon my secure hour thy uncle stole,|
|1.5.67|With juice of cursed hebenon in a vial,|
|1.5.68|And in the porches of my ears did pour|
|1.5.69|The leperous distilment; whose effect|
|1.5.70|Holds such an enmity with blood of man|
|1.5.71|That swift as quicksilver it courses through|
|1.5.72|The natural gates and alleys of the body,|
|1.5.73|And with a sudden vigour doth posset|
|1.5.74|And curd, like eager droppings into milk,|
|1.5.75|The thin and wholesome blood: so did it mine;|
|1.5.76|And a most instant tetter bark'd about,|
|1.5.77|Most lazar-like, with vile and loathsome crust,|
|1.5.78|All my smooth body.|
|1.5.79|Thus was I, sleeping, by a brother's hand|
|1.5.80|Of life, of crown, of queen, at once dispatch'd:|
|1.5.81|Cut off even in the blossoms of my sin,|
|1.5.82|Unhousel'd, disappointed, unanel'd,|
|1.5.83|No reckoning made, but sent to my account|
|1.5.84|With all my imperfections on my head:|
|1.5.85|O, horrible! O, horrible! most horrible!|
|1.5.86|If thou hast nature in thee, bear it not;|
|1.5.87|Let not the royal bed of Denmark be|
|1.5.88|A couch for luxury and damned incest.|
|1.5.89|But, howsoever thou pursuest this act,|
|1.5.90|Taint not thy mind, nor let thy soul contrive|
|1.5.91|Against thy mother aught: leave her to heaven|
|1.5.92|And to those thorns that in her bosom lodge,|
|1.5.93|To prick and sting her. Fare thee well at once!|
|1.5.94|The glow-worm shows the matin to be near,|
|1.5.95|And 'gins to pale his uneffectual fire:|
|1.5.96|Adieu, adieu! Hamlet, remember me.|
//Exit//
''HAMLET''
|1.5.97|O all you host of heaven! O earth! what else?|
|1.5.98|And shall I couple hell? O, fie! Hold, hold, my heart;|
|1.5.99|And you, my sinews, grow not instant old,|
|1.5.100|But bear me stiffly up. Remember thee!|
|1.5.101|Ay, thou poor ghost, while memory holds a seat|
|1.5.102|In this distracted globe. Remember thee!|
|1.5.103|Yea, from the table of my memory|
|1.5.104|I'll wipe away all trivial fond records,|
|1.5.105|All saws of books, all forms, all pressures past,|
|1.5.106|That youth and observation copied there;|
|1.5.107|And thy commandment all alone shall live|
|1.5.108|Within the book and volume of my brain,|
|1.5.109|Unmix'd with baser matter: yes, by heaven!|
|1.5.110|O most pernicious woman!|
|1.5.111|O villain, villain, smiling, damned villain!|
|1.5.112|My tables,--meet it is I set it down,|
|1.5.113|That one may smile, and smile, and be a villain;|
|1.5.114|At least I'm sure it may be so in Denmark:|
//Writing//
|1.5.115|So, uncle, there you are. Now to my word;|
|1.5.116|It is 'Adieu, adieu! remember me.'|
|1.5.117|I have sworn 't.|
''MARCELLUS''
''HORATIO''
|1.5.118|[Within] My lord, my lord,--|
''MARCELLUS''
|1.5.119|[Within] Lord Hamlet,--|
''HORATIO''
|1.5.120|[Within] Heaven secure him!|
''HAMLET''
|1.5.121|So be it!|
''HORATIO''
|1.5.122|[Within] Hillo, ho, ho, my lord!|
''HAMLET''
|1.5.123|Hillo, ho, ho, boy! come, bird, come.|
//Enter HORATIO and MARCELLUS//
''MARCELLUS''
|1.5.124|How is't, my noble lord?|
''HORATIO''
|1.5.125|What news, my lord?|
''HAMLET''
|1.5.126|O, wonderful!|
''HORATIO''
|1.5.127| Good my lord, tell it.|
''HAMLET''
|1.5.128|No; you'll reveal it.|
''HORATIO''
|1.5.129|Not I, my lord, by heaven.|
''MARCELLUS''
|1.5.130|Nor I, my lord.|
''HAMLET''
|1.5.131|How say you, then; would heart of man once think it?|
|1.5.132|But you'll be secret?|
''HORATIO''
''MARCELLUS''
|1.5.133|Ay, by heaven, my lord.|
''HAMLET''
|1.5.134|There's ne'er a villain dwelling in all Denmark|
|1.5.135|But he's an arrant knave.|
''HORATIO''
|1.5.136|There needs no ghost, my lord, come from the grave|
|1.5.137|To tell us this.|
''HAMLET''
|1.5.138| Why, right; you are i' the right;|
|1.5.139|And so, without more circumstance at all,|
|1.5.140|I hold it fit that we shake hands and part:|
|1.5.141|You, as your business and desire shall point you;|
|1.5.142|For every man has business and desire,|
|1.5.143|Such as it is; and for mine own poor part,|
|1.5.144|Look you, I'll go pray.|
''HORATIO''
|1.5.145|These are but wild and whirling words, my lord.|
''HAMLET''
|1.5.146|I'm sorry they offend you, heartily;|
|1.5.147|Yes, 'faith heartily.|
''HORATIO''
|1.5.148|There's no offence, my lord.|
''HAMLET''
|1.5.149|Yes, by Saint Patrick, but there is, Horatio,|
|1.5.150|And much offence too. Touching this vision here,|
|1.5.151|It is an honest ghost, that let me tell you:|
|1.5.152|For your desire to know what is between us,|
|1.5.153|O'ermaster 't as you may. And now, good friends,|
|1.5.154|As you are friends, scholars and soldiers,|
|1.5.155|Give me one poor request.|
''HORATIO''
|1.5.156|What is't, my lord? we will.|
''HAMLET''
|1.5.157|Never make known what you have seen to-night.|
''HORATIO''
''MARCELLUS''
|1.5.158|My lord, we will not.|
''HAMLET''
|1.5.159|Nay, but swear't.|
''HORATIO''
|1.5.160|In faith,|
|1.5.161|My lord, not I.|
''MARCELLUS''
|1.5.162| Nor I, my lord, in faith.|
''HAMLET''
|1.5.163|Upon my sword.|
''MARCELLUS''
|1.5.164| We have sworn, my lord, already.|
''HAMLET''
|1.5.165|Indeed, upon my sword, indeed.|
''Ghost''
|1.5.166|[Beneath] Swear.|
''HAMLET''
|1.5.167|Ah, ha, boy! say'st thou so? art thou there,|
|1.5.168|truepenny?|
|1.5.169|Come on--you hear this fellow in the cellarage--|
|1.5.170|Consent to swear.|
''HORATIO''
|1.5.171| Propose the oath, my lord.|
''HAMLET''
|1.5.172|Never to speak of this that you have seen,|
|1.5.173|Swear by my sword.|
''Ghost''
|1.5.174|[Beneath] Swear.|
''HAMLET''
|1.5.175|Hic et ubique? then we'll shift our ground.|
|1.5.176|Come hither, gentlemen,|
|1.5.177|And lay your hands again upon my sword:|
|1.5.178|Never to speak of this that you have heard,|
|1.5.179|Swear by my sword.|
''Ghost''
|1.5.180|[Beneath] Swear.|
''HAMLET''
|1.5.181|Well said, old mole! canst work i' the earth so fast?|
|1.5.182|A worthy pioner! Once more remove, good friends.|
''HORATIO''
|1.5.183|O day and night, but this is wondrous strange!|
''HAMLET''
|1.5.184|And therefore as a stranger give it welcome.|
|1.5.185|There are more things in heaven and earth, Horatio,|
|1.5.186|Than are dreamt of in your philosophy. But come;|
|1.5.187|Here, as before, never, so help you mercy,|
|1.5.188|How strange or odd soe'er I bear myself,|
|1.5.189|As I perchance hereafter shall think meet|
|1.5.190|To put an antic disposition on,|
|1.5.191|That you, at such times seeing me, never shall,|
|1.5.192|With arms encumber'd thus, or this headshake,|
|1.5.193|Or by pronouncing of some doubtful phrase,|
|1.5.194|As 'Well, well, we know,' or 'We could, an if we would,'|
|1.5.195|Or 'If we list to speak,' or 'There be, an if they might,'|
|1.5.196|Or such ambiguous giving out, to note|
|1.5.197|That you know aught of me: this not to do,|
|1.5.198|So grace and mercy at your most need help you, Swear.|
''Ghost''
|1.5.199|[Beneath] Swear.|
''HAMLET''
|1.5.200|Rest, rest, perturbed spirit!|
//They swear//
|1.5.201|So, gentlemen,|
|1.5.202|With all my love I do commend me to you:|
|1.5.203|And what so poor a man as Hamlet is|
|1.5.204|May do, to express his love and friending to you,|
|1.5.205|God willing, shall not lack. Let us go in together;|
|1.5.206|And still your fingers on your lips, I pray.|
|1.5.207|The time is out of joint: O cursed spite,|
|1.5.208|That ever I was born to set it right!|
|1.5.209|Nay, come, let's go together.|
//Exeunt//
@@.stageDirectionFisco
//Enter Ghost, and Hamlet//.
@@
''//Ham//.'' Whether wilt thou leade me, speake, Ile goe no further.
''//Ghost//.'' Marke me.
''//Ham//.'' I will.
''//Ghost//.'' My houre is almost come
When I to sulphrus and tormenting flames
Must render vp my selfe.
''//Ham//.'' Alas poore Ghost.
''//Ghost//.'' Pitty me not, but lend thy serious hearing
To what I shall vnfold.
''//Ham//.'' Speake, I am bound to heare.
''//Ghost//.'' So art thou to reuenge, when thou shalt heare.
''//Ham//.'' What?
''//Ghost//.'' I am thy fathers spirit,
Doomd for a certaine tearme to walke the night,
And for the day confind to fast in fires,
Till the foule crimes done in my dayes of nature
Are burnt and purg'd away//:// but that I am forbid
To tell the secrets of my prison house,
I could a tale vnfolde whose lightest word
Would harrow vp thy soule, freeze thy young blood,
Make thy two eyes like stars start from their spheres,
Thy knotted and combined locks to part,
And each particuler haire to stand an end,
Like quils vpon the fearefull Porpentine,
But this eternall blazon must not be
To eares of flesh and blood, list, list, ô list:
If thou did'st euer thy deare father loue.
''//Ham//.'' O God.
''//Ghost//.'' Reuenge his foule, and most vnnaturall murther.
''//Ham//.'' Murther.
''//Ghost//.'' Murther most foule, as in the best it is,
But this most foule, strange and vnnaturall.
''//Ham//.'' Hast me to know't, that I with wings as swift
As meditation, or the thoughts of loue
May sweepe to my reuenge.
''//Ghost//.'' I find thee apt,
And duller shouldst thou be then the fat weede
That rootes it selfe in ease on //Lethe// wharffe,
Would'st thou not sturre in this; now //Hamlet// heare,
Tis giuen out, that sleeping in my Orchard,
A Serpent stung me, so the whole eare of Denmarke
Is by a forged processe of my death
Ranckely abusde: but knowe thou noble Youth,
The Serpent that did sting thy fathers life
Now weares his Crowne.
''//Ham//.'' O my propheticke soule! my Vncle?
''//Ghost//.'' I that incestuous, that adulterate beast,
With witchcraft of his wits, with trayterous gifts,
O wicked wit, and giftes that haue the power
So to seduce; wonne to his shamefull lust
The will of my most seeming vertuous Queene;
O //Hamlet//, what falling off was there
From me whose loue was of that dignitie
That it went hand in hand, euen with the vowe
I made to her in marriage, and to decline
Vppon a wretch whose naturall gifts were poore,
To those of mine; but vertue as it neuer will be mooued,
Though lewdnesse court it in a shape of heauen
So but though to a radiant Angle linckt,
Will sort it selfe in a celestiall bed
And pray on garbage.
But soft, me thinkes I sent the morning ayre,
Briefe let me be; sleeping within my Orchard,
My custome alwayes of the afternoone,
Vpon my secure houre, thy Vncle stole
With iuyce of cursed Hebona in a viall,
And in the porches of my eares did poure
The leaprous distilment, whose effect
Holds such an enmitie with blood of man,
That swift as quicksiluer it courses through
The naturall gates and allies of the body,
And with a sodaine vigour it doth possesse
And curde like eager droppings into milke,
The thin and wholsome blood; so did it mine,
And a most instant tetter barckt about
Most Lazerlike with vile and lothsome crust
All my smooth body.
Thus was I sleeping by a brothers hand,
Of life, of Crowne, of Queene at once dispatcht,
Cut off euen in the blossomes of my sinne,
Vnhuzled, disappointed, vnanueld,
No reckning made, but sent to my account
Withall my imperfections on my head,
O horrible, ô horrible, most horrible.
If thou hast nature in thee beare it not,
Let not the royall bed of Denmarke be
A couch for luxury and damned incest.
But howsomeuer thou pursues this act,
Tain't not thy minde, nor let thy soule contriue
Against thy mother ought, leaue her to heauen,
And to those thornes that in her bosome lodge
To prick and sting her, fare thee well at once,
The Gloworme shewes the matine to be neere
And gins to pale his vneffectuall fire,
Adiew, adiew, adiew, remember me.
''//Ham//.'' O all you host of heauen, ô earth, what els,
And shall I coupple hell, ô fie, hold, hold my hart,
And you my sinnowes, growe not instant old,
But beare me swiftly vp; remember thee,
I thou poore Ghost whiles memory holds a seate
In this distracted globe, remember thee,
Yea, from the table of my memory
Ile wipe away all triuiall fond records,
All sawes of bookes, all formes, all pressures past
That youth and obseruation coppied there,
And thy commandement all alone shall liue,
Within the booke and volume of my braine
Vnmixt with baser matter, yes by heauen,
O most pernicious woman.
O villaine, villaine, smiling damned villaine,
My tables, meet it is I set it downe
That one may smile, and smile, and be a villaine,
At least I am sure it may be so in Denmarke.
So Vncle, there you are, now to my word,
It is adew, adew, remember me.
I haue sworn't.
@@.stageDirectionFisco
//Enter Horatio, and Marcellus//.
@@
''//Hora//.'' My Lord, my Lord.
''//Mar//.'' Lord //Hamlet//.
''//Hora//.'' Heauens secure him.
''//Ham//.'' So be it.
''//Mar//.'' Illo, ho, ho, my Lord.
''//Ham//.'' Hillo, ho, ho, boy come, and come.
''//Mar//.'' How i'st my noble Lord?
''//Hora//.'' What newes my Lord?
''//Ham//.'' O, wonderfull.
''//Hora//.'' Good my Lord tell it.
''//Ham//.'' No, you will reueale it.
''//Hora//.'' Not I my Lord by heauen.
''//Mar//.'' Nor I my Lord.
''//Ham//.'' How say you then, would hart of man once thinke it,
But you'le be secret.
''//Booth//.'' I by heauen.
''//Ham//.'' There's neuer a villaine,
Dwelling in all Denmarke
But hee's an arrant knaue.
''//Hora//.'' There needes no Ghost my Lord, come from the graue
To tell vs this.
''//Ham//.'' Why right, you are in the right,
And so without more circumstance at all
I hold it fit that we shake hands and part,
You, as your busines and desire shall poynt you,
For euery man hath busines and desire
Such as it is, and for my owne poore part
I will goe pray.
''//Hora//.'' These are but wilde and whurling words my Lord.
''//Ham//.'' I am sorry they offend you hartily,
Yes faith hartily.
''//Hora//.'' There's no offence my Lord.
''//Ham//.'' Yes by Saint //Patrick// but there is //Horatio//,
And much offence to, touching this vision heere,
It is an honest Ghost that let me tell you,
For your desire to knowe what is betweene vs
Oremastret as you may, and now good friends,
As you are friends, schollers, and souldiers,
Giue me one poore request.
''//Hora//.'' What i'st my Lord, we will.
''//Ham//.'' Neuer make knowne what you haue seene to night.
''//Booth//.'' My Lord we will not.
''//Ham//.'' Nay but swear't.
''//Hora//.'' In faith my Lord not I.
''//Mar//.'' Nor I my Lord in faith.
''//Ham//.'' Vppon my sword.
''//Mar//.'' We haue sworne my Lord already.
''//Ham//.'' Indeede vppon my sword, indeed.
@@.stageDirectionFisco
//Ghost cries vnder the Stage//.
@@
''//Ghost//.'' Sweare.
''//Ham//.'' Ha, ha, boy, say'st thou so, art thou there trupenny?
Come on, you heare this fellowe in the Sellerige,
Consent to sweare.
''//Hora//.'' Propose the oath my Lord.
''//Ham//.'' Neuer to speake of this that you haue seene
Sweare by my sword.
''//Ghost//.'' Sweare.
''//Ham//.'' //Hic, & vbique//, then weele shift our ground:
Come hether Gentlemen
And lay your hands againe vpon my sword,
Sweare by my sword
Neuer to speake of this that you haue heard.
''//Ghost//.'' Sweare by his sword.
''//Ham//.'' Well sayd olde Mole, can'st worke it'h earth so fast,
A worthy Pioner, once more remooue good friends.
''//Hora//.'' O day and night, but this is wondrous strange.
''//Ham//.'' And therefore as a stranger giue it welcome,
There are more things in heauen and earth //Horatio//
Then are dream't of in your philosophie, but come
Heere as before, neuer so helpe you mercy,
(How strange or odde so mere I beare my selfe,
As I perchance heereafter shall thinke meet,
To put an Anticke disposition on
That you at such times seeing me, neuer shall
With armes incombred thus, or this head shake,
Or by pronouncing of some doubtfull phrase,
As well, well, we knowe, or we could and if we would,
Or if we list to speake, or there be and if they might,
Or such ambiguous giuing out, to note)
That you knowe ought of me, this doe sweare,
So grace and mercy at your most neede helpe you.
''//Ghost//.'' Sweare.
''//Ham//.'' Rest, rest, perturbed spirit: so Gentlemen,
Withall my loue I doe commend me to you,
And what so poore a man as //Hamlet// is,
May doe t'expresse his loue and frending to you
God willing shall not lack, let vs goe in together,
And still your fingers on your lips I pray,
The time is out of ioynt, ô cursed spight
That euer I was borne to set it right.
|dialogWithStageDirectionFisco|k
|Nay come, lets goe together.|//Exeunt//.|
@@.stageDirectionFisco
// Enter Polonius, and Reynoldo//.
@@
''//Polon//.'' Giue him his money, and these notes //Reynoldo//.
''//Reynol//.'' I will my Lord.
''//Polon//.'' You shall doe maruels wisely: good //Reynoldo//,
Before you visite him you make inquiry
Of his behauiour.
''//Reynol//.'' My Lord, I did intend it.
''//Polon//.'' Marry, well said;
Very well said. Looke you Sir,
Enquire me first what Danskers are in Paris;
And how, and who; what meanes; and where they keepe:
What company, at what expence: and finding
By this encompassement and drift of question,
That they doe know my sonne: Come you more neerer
Then your particular demands will touch it,
Take you as 'twere some distant knowledge of him,
And thus I know his father and his friends,
And in part him. Doe you marke this //Reynoldo//?
''//Reynol//.'' I, very well my Lord.
''//Polon//.'' And in part him, but you may say not well;
But if't be hee I meane, hees very wilde;
Addicted so and so; and there put on him
What forgeries you please: marry, none so ranke,
As may dishonour him; take heed of that:
But Sir, such wanton, wild, and vsuall slips,
As are Companions noted and most knowne
To youth and liberty.
''//Reynol//.'' As gaming my Lord.
''//Polon//.'' I, or drinking, fencing, swearing,
Quarelling, drabbiug. You may goe so farre.
''//Reynol//.'' My Lord that would dishonour him.
''//Polon//.'' Faith no, as you may season it in the charge;
You must not put another scandall on him,
That hee is open to Incontinencie;
That's not my meaning: but breath his faults so quaintly,
That they may seeme the taints of liberty;
The flash and out-breake of a fiery minde,
A sauagenes in vnreclaim'd bloud of generall assault.
''//Reynol//.'' But my good Lord.
''//Polon//.'' Wherefore should you doe this?
''//Reynol//.'' I my Lord, I would know that.
''//Polon//.'' Marry Sir, heere's my drift,
And I belieue it is a fetch of warrant:
You laying these slight sulleyes on my Sonne,
As 'twere a thing a little soil'd i'th' working:
Marke you your party in conuerse; him you would sound,
Hauing euer seene. In the prenominate crimes,
The youth you breath of guilty, be assur'd
He closes with you in this consequence:
Good sir, or so, or friend, or Gentleman.
According to the Phrase and the Addition,
Of man and Country.
''//Reynol//.'' Very good my Lord.
''//Polon//.'' And then Sir does he this?
He does: what was I about to say?
I was about to say somthing: where did I leaue?
''//Reynol//.'' At closes in the consequence:
At friend, or so, and Gentleman.
''//Polon//.'' At closes in the consequence, I marry,
He closes with you thus. I know the Gentleman,
I saw him yesterday, or tother day;
Or then or then, with such and such; and as you say,
There was he gaming, there o'retooke in's Rouse,
There falling out at Tennis; or perchance,
I saw him enter such a house of saile;
''//Videlicet//, a Brothell, or so forth.'' See you now;
Your bait of falshood, takes this Cape of truth;
And thus doe we of wisedome and of reach
With windlesses, and with assaies of Bias,
By indirections finde directions out:
So by my former Lecture and aduice
Shall you my Sonne; you haue me, haue you not?
''//Reynol//.'' My Lord I haue.
''//Polon//.'' God buy you; fare you well.
''//Reynol//.'' Good my Lord.
''//Polon//.'' Obserue his inclination in your selfe.
''//Reynol//.'' I shall my Lord.
''//Polon//.'' And let him plye his Musicke.
|dialogWithStageDirectionFisco|k
|''//Reynol//.'' Well, my Lord.|//Exit//.|
@@.stageDirectionFisco
// Enter Ophelia//.
@@
''//Polon//.'' Farewell:
How now //Ophelia//, what's the matter?
''//Ophe//.'' Alas my Lord, I haue beene so affrighted.
''//Polon//.'' With what, in the name of Heauen?
''//Ophe//.'' My Lord, as I was sowing in my Chamber,
Lord //Hamlet// with his doublet all vnbrac'd,
No hat vpon his head, his stockings foul'd,
Vngartred, and downe giued to his Anckle,
Pale as his shirt, his knees knocking each other,
And with a looke so pitious in purport,
As if he had been loosed out of hell,
To speake of horrors: he comes before me.
''//Polon//.'' Mad for thy Loue?
''//Ophe//.'' My Lord, I doe not know: but truly I do feare it.
''//Polon//.'' What said he?
''//Ophe//.'' He tooke me by the wrist, and held me hard;
Then goes he to the length of all his arme;
And with his other hand thus o're his brow,
He fals to such perusall of my face,
As he would draw it. Long staid he so,
At last, a little shaking of mine Arme:
And thrice his head thus wauing vp and downe;
He rais'd a sigh, so pittious and profound,
That it did seeme to shatter all his bulke,
And end his being. That done, he lets me goe,
And with his head ouer his shoulders turn'd,
He seem'd to finde his way without his eyes,
For out adores he went without their helpe;
And to the last, bended their light on me.
''//Polon//.'' Goe with me, I will goe seeke the King,
This is the very extasie of Loue,
Whose violent property foredoes it selfe,
And leads the will to desperate Vndertakings,
As oft as any passion vnder Heauen,
That does afflict our Natures. I am sorrie,
What haue you giuen him any hard words of late?
''//Ophe//.'' No my good Lord: but as you did command,
I did repell his Letters, and deny'de
His accesse to me.
''//Pol//.'' That hath made him mad.
I am sorrie that with better speed and iudgement
I had not quoted him. I feare he did but trifle,
And meant to wracke thee: but beshrew my iealousie:
It seemes it is as proper to our Age,
To cast beyond our selues in our Opinions,
As it is common for the yonger sort
To lacke discretion. Come, go we to the King,
This must be knowne, wc being kept close might moue
|dialogWithStageDirectionFisco|k
|More greefe to hide, then hate to vtter loue.|//Exeunt//.|
//Enter POLONIUS and REYNALDO//
''LORD POLONIUS''
|2.1.1|Give him this money and these notes, Reynaldo.|
''REYNALDO''
|2.1.2|I will, my lord.|
''LORD POLONIUS''
|2.1.3|You shall do marvellous wisely, good Reynaldo,|
|2.1.4|Before you visit him, to make inquire|
|2.1.5|Of his behavior.|
''REYNALDO''
|2.1.6| My lord, I did intend it.|
''LORD POLONIUS''
|2.1.7|Marry, well said; very well said. Look you, sir,|
|2.1.8|Inquire me first what Danskers are in Paris;|
|2.1.9|And how, and who, what means, and where they keep,|
|2.1.10|What company, at what expense; and finding|
|2.1.11|By this encompassment and drift of question|
|2.1.12|That they do know my son, come you more nearer|
|2.1.13|Than your particular demands will touch it:|
|2.1.14|Take you, as 'twere, some distant knowledge of him;|
|2.1.15|As thus, 'I know his father and his friends,|
|2.1.16|And in part him: ' do you mark this, Reynaldo?|
''REYNALDO''
|2.1.17|Ay, very well, my lord.|
''LORD POLONIUS''
|2.1.18|'And in part him; but' you may say 'not well:|
|2.1.19|But, if't be he I mean, he's very wild;|
|2.1.20|Addicted so and so:' and there put on him|
|2.1.21|What forgeries you please; marry, none so rank|
|2.1.22|As may dishonour him; take heed of that;|
|2.1.23|But, sir, such wanton, wild and usual slips|
|2.1.24|As are companions noted and most known|
|2.1.25|To youth and liberty.|
''REYNALDO''
|2.1.26|As gaming, my lord.|
''LORD POLONIUS''
|2.1.27|Ay, or drinking, fencing, swearing, quarrelling,|
|2.1.28|Drabbing: you may go so far.|
''REYNALDO''
|2.1.29|My lord, that would dishonour him.|
''LORD POLONIUS''
|2.1.30|'Faith, no; as you may season it in the charge|
|2.1.31|You must not put another scandal on him,|
|2.1.32|That he is open to incontinency;|
|2.1.33|That's not my meaning: but breathe his faults so quaintly|
|2.1.34|That they may seem the taints of liberty,|
|2.1.35|The flash and outbreak of a fiery mind,|
|2.1.36|A savageness in unreclaimed blood,|
|2.1.37|Of general assault.|
''REYNALDO''
|2.1.38|But, my good lord,--|
''LORD POLONIUS''
|2.1.39|Wherefore should you do this?|
''REYNALDO''
|2.1.40|Ay, my lord,|
|2.1.41|I would know that.|
''LORD POLONIUS''
|2.1.42| Marry, sir, here's my drift;|
|2.1.43|And I believe, it is a fetch of wit:|
|2.1.44|You laying these slight sullies on my son,|
|2.1.45|As 'twere a thing a little soil'd i' the working, Mark you,|
|2.1.46|Your party in converse, him you would sound,|
|2.1.47|Having ever seen in the prenominate crimes|
|2.1.48|The youth you breathe of guilty, be assured|
|2.1.49|He closes with you in this consequence;|
|2.1.50|'Good sir,' or so, or 'friend,' or 'gentleman,'|
|2.1.51|According to the phrase or the addition|
|2.1.52|Of man and country.|
''REYNALDO''
|2.1.53|Very good, my lord.|
''LORD POLONIUS''
|2.1.54|And then, sir, does he this--he does--what was I|
|2.1.55|about to say? By the mass, I was about to say|
|2.1.56|something: where did I leave?|
''REYNALDO''
|2.1.57|At 'closes in the consequence,' at 'friend or so,'|
|2.1.58|and 'gentleman.'|
''LORD POLONIUS''
|2.1.59|At 'closes in the consequence,' ay, marry;|
|2.1.60|He closes thus: 'I know the gentleman;|
|2.1.61|I saw him yesterday, or t' other day,|
|2.1.62|Or then, or then; with such, or such; and, as you say,|
|2.1.63|There was a' gaming; there o'ertook in's rouse;|
|2.1.64|There falling out at tennis:' or perchance,|
|2.1.65|'I saw him enter such a house of sale,'|
|2.1.66|Videlicet, a brothel, or so forth.|
|2.1.67|See you now;|
|2.1.68|Your bait of falsehood takes this carp of truth:|
|2.1.69|And thus do we of wisdom and of reach,|
|2.1.70|With windlasses and with assays of bias,|
|2.1.71|By indirections find directions out:|
|2.1.72|So by my former lecture and advice,|
|2.1.73|Shall you my son. You have me, have you not?|
''REYNALDO''
|2.1.74|My lord, I have.|
''LORD POLONIUS''
|2.1.75| God be wi' you; fare you well.|
''REYNALDO''
|2.1.76|Good my lord!|
''LORD POLONIUS''
|2.1.77|Observe his inclination in yourself.|
''REYNALDO''
|2.1.78|I shall, my lord.|
''LORD POLONIUS''
|2.1.79|And let him ply his music.|
''REYNALDO''
|2.1.80|Well, my lord.|
''LORD POLONIUS''
|2.1.81|Farewell!|
//Exit REYNALDO//
//Enter OPHELIA//
|2.1.82|How now, Ophelia! what's the matter?|
''OPHELIA''
|2.1.83|O, my lord, my lord, I have been so affrighted!|
''LORD POLONIUS''
|2.1.84|With what, i' the name of God?|
''OPHELIA''
|2.1.85|My lord, as I was sewing in my closet,|
|2.1.86|Lord Hamlet, with his doublet all unbraced;|
|2.1.87|No hat upon his head; his stockings foul'd,|
|2.1.88|Ungarter'd, and down-gyved to his ancle;|
|2.1.89|Pale as his shirt; his knees knocking each other;|
|2.1.90|And with a look so piteous in purport|
|2.1.91|As if he had been loosed out of hell|
|2.1.92|To speak of horrors,--he comes before me.|
''LORD POLONIUS''
|2.1.93|Mad for thy love?|
''OPHELIA''
|2.1.94| My lord, I do not know;|
|2.1.95|But truly, I do fear it.|
''LORD POLONIUS''
|2.1.96|What said he?|
''OPHELIA''
|2.1.97|He took me by the wrist and held me hard;|
|2.1.98|Then goes he to the length of all his arm;|
|2.1.99|And, with his other hand thus o'er his brow,|
|2.1.100|He falls to such perusal of my face|
|2.1.101|As he would draw it. Long stay'd he so;|
|2.1.102|At last, a little shaking of mine arm|
|2.1.103|And thrice his head thus waving up and down,|
|2.1.104|He raised a sigh so piteous and profound|
|2.1.105|As it did seem to shatter all his bulk|
|2.1.106|And end his being: that done, he lets me go:|
|2.1.107|And, with his head over his shoulder turn'd,|
|2.1.108|He seem'd to find his way without his eyes;|
|2.1.109|For out o' doors he went without their helps,|
|2.1.110|And, to the last, bended their light on me.|
''LORD POLONIUS''
|2.1.111|Come, go with me: I will go seek the king.|
|2.1.112|This is the very ecstasy of love,|
|2.1.113|Whose violent property fordoes itself|
|2.1.114|And leads the will to desperate undertakings|
|2.1.115|As oft as any passion under heaven|
|2.1.116|That does afflict our natures. I am sorry.|
|2.1.117|What, have you given him any hard words of late?|
''OPHELIA''
|2.1.118|No, my good lord, but, as you did command,|
|2.1.119|I did repel his fetters and denied|
|2.1.120|His access to me.|
''LORD POLONIUS''
|2.1.121| That hath made him mad.|
|2.1.122|I am sorry that with better heed and judgment|
|2.1.123|I had not quoted him: I fear'd he did but trifle,|
|2.1.124|And meant to wreck thee; but, beshrew my jealousy!|
|2.1.125|By heaven, it is as proper to our age|
|2.1.126|To cast beyond ourselves in our opinions|
|2.1.127|As it is common for the younger sort|
|2.1.128|To lack discretion. Come, go we to the king:|
|2.1.129|This must be known; which, being kept close, might|
|2.1.130|move|
|2.1.131|More grief to hide than hate to utter love.|
//Exeunt//
@@.stageDirectionFisco
//Enter old Polonius, with his man or two//.
@@
''//Pol//.'' Giue him this money, and these notes //Reynaldo//.
''//Rey//.'' I will my Lord.
''//Pol//.'' You shall doe meruiles wisely good //Reynaldo//,
Before you visite him, to make inquire
Of his behauiour.
''//Rey//.'' My Lord, I did intend it.
''//Pol//.'' Mary well said, very well said; looke you sir,
Enquire me first what Danskers are in Parris,
And how, and who, what meanes, and where they keepe,
What companie, at what expence, and finding
By this encompasment, and drift of question
That they doe know my sonne, come you more neerer
Then your perticuler demaunds will tuch it,
Take you as t'were some distant knowledge of him,
As thus, I know his father, and his friends,
And in part him, doe you marke this //Reynaldo//?
''//Rey//.'' I, very well my Lord.
''//Pol//.'' And in part him, but you may say, not well,
But y'ft be he I meane, hee's very wilde,
Adicted so and so, and there put on him
What forgeries you please, marry none so ranck
As may dishonour him, take heede of that,
But sir, such wanton, wild, and vsuall slips,
As are companions noted and most knowne
To youth and libertie.
''//Rey//.'' As gaming my Lord.
''//Pol//.'' I, or drinking, fencing, swearing,
Quarrelling, drabbing, you may goe so far.
''//Rey//.'' My Lord, that would dishonour him.
''//Pol//.'' Fayth as you may season it in the charge.
You must not put another scandell on him,
That he is open to incontinencie,
That's not my meaning, but breath his faults so quently
That they may seeme the taints of libertie,
The flash and out-breake of a fierie mind,
A sauagenes in vnreclamed blood,
Of generall assault.
''//Rey//.'' But my good Lord.
''//Pol//.'' Wherefore should you doe this?
''//Rey//.'' I my Lord, I would know that.
''//Pol//.'' Marry sir, heer's my drift,
And I belieue it is a fetch of wit,
You laying these slight sallies on my sonne
As t'were a thing a little soyld with working,
Marke you, your partie in conuerse, him you would sound
Hauing euer seene in the prenominat crimes
The youth you breath of guiltie, be assur'd
He closes with you in this consequence,
Good sir, (or so,) or friend, or gentleman,
According to the phrase, or the addistion
Of man and country.
''//Rey//.'' Very good my Lord.
''//Pol//.'' And then sir doos a this, a doos, what was I about to say?
By the masse I was about to say something,
Where did I leaue?
''//Rey//.'' At closes in the consequence.
''//Pol//.'' At closes in the consequence, I marry,
He closes thus, I know the gentleman,
I saw him yesterday, or th'other day,
Or then, or then, with such or such, and as you say,
There was a gaming there, or tooke in's rowse,
There falling out at Tennis, or perchance
I saw him enter such a house of sale,
Videlizet, a brothell, or so foorth, see you now,
Your bait of falshood take this carpe of truth,
And thus doe we of wisedome, and of reach,
With windlesses, and with assaies of bias,
By indirections find directions out,
So by my former lecture and aduise
Shall you my sonne; you haue me, haue you not?
''//Rey//.'' My Lord, I haue.
''//Pol//.'' God buy ye, far ye well.
''//Rey//.'' Good my Lord.
''//Pol//.'' Obserue his inclination in your selfe.
''//Rey//.'' I shall my Lord.
''//Pol//.'' And let him ply his musique.
|dialogWithStageDirectionFisco|k
|''//Rey//.'' Well my Lord.|//Exit Rey//.|
@@.stageDirectionFisco
//Enter Ophelia//.
@@
''//Pol//.'' Farewell. How now //Ophelia//, whats the matter?
''//Oph//.'' O my Lord, my Lord, I haue beene so affrighted,
''//Pol//.'' With what i'th name of God?
''//Ophe//.'' My Lord, as I was sowing in my closset,
Lord //Hamlet// with his doublet all vnbrac'd,
No hat vpon his head, his stockins fouled,
Vngartred, and downe gyued to his ancle,
Pale as his shirt, his knees knocking each other,
And with a looke so pittious in purport
As if he had been loosed out of hell
To speake of horrors, he comes before me.
''//Pol//.'' Mad for thy loue?
''//Oph//.'' My lord I doe not know,
But truly I doe feare it.
''//Pol//.'' What said he?
''//Oph//.'' He tooke me by the wrist, and held me hard,
Then goes he to the length of all his arme,
And with his other hand thus ore his brow,
He falls to such perusall of my face
As a would draw it, long stayd he so,
At last, a little shaking of mine arme,
And thrice his head thus wauing vp and downe,
He raisd a sigh so pittious and profound
As it did seeme to shatter all his bulke,
And end his beeing; that done, he lets me goe,
And with his head ouer his shoulder turn'd
Hee seem'd to find his way without his eyes,
For out adoores he went without theyr helps,
And to the last bended their light on me.
''//Pol//.'' Come, goe with mee, I will goe seeke the King,
This is the very extacie of loue,
Whose violent propertie fordoos it selfe,
And leades the will to desperat vndertakings
As oft as any passions vnder heauen
That dooes afflict our natures: I am sorry,
What, haue you giuen him any hard words of late?
''//Oph//.'' No my good Lord, but as you did commaund
I did repell his letters, and denied
His accesse to me.
''//Pol//.'' That hath made him mad.
I am sorry, that with better heede and iudgement
I had not coted him, I fear'd he did but trifle
And meant to wrack thee, but beshrow my Ielousie:
By heauen it is as proper to our age
To cast beyond our selues in our opinions,
As it is common for the younger sort
To lack discretion; come, goe we to the King,
This must be knowne, which beeing kept close, might moue
More griefe to hide, then hate to vtter loue,
|dialogWithStageDirectionFisco|k
|Come.|//Exeunt//.|
@@.stageDirectionFisco
// Enter King, Queene, Rosincrane, and Guilden-//
@@
@@.stageDirectionFisco
//sterne// //Cumaliys//
@@
''//King//.'' Welcome deere //Rosincrance// and //Guildensterne//.
Moreouer, that we much did long to see you,
The neede we haue to vse you, did prouoke
Our hastie sending. Something haue you heard
Of //Hamlets// transformation: so I call it,
Since not th'exterior, nor the inward man
Resembles that it was. What it should bee
More then his Fathers death, that thus hath put him
So much from th'vnderstanding of himselfe,
I cannot deeme of. I intreat you both,
That being of so young dayes brought vp with him:
And since so Neighbour'd to his youth, and humour,
That you vouchsafe your rest heere in our Court
Some little time: so by your Companies
To draw him on to pleasures, and to gather
So much as from Occasions you may gleane,
That open'd lies within our remedie.
''//Qu//.'' Good Gentlemen, he hath much talk'd of you,
And sure I am, two men there are not liuing,
To whom he more adheres. If it will please you
To shew vs so much Gentrie, and good will,
As to expend your time with vs a-while,
For the supply and profit of our Hope,
Your Visitation shall receiue such thankes
As fits a Kings remembrance.
''//Rosin//.'' Both your Maiesties
Might by the Soueraigne power you haue of vs,
Put your dread pleasures, more into Command
Then to Entreatie.
''//Guil//.'' We both obey,
And here giue vp our selues, in the full bent,
To lay our Seruices freely at your feete,
To be commanded.
''//King//.'' Thankes //Rosincrance//, and gentle //Guildensterne//.
''//Qu//.'' Thankes //Guildensterne// and gentle //Rosincrance//.
And I beseech you instantly to visit
My too much changed Sonne.
Go some of ye,
And bring the Gentlemen where //Hamlet// is.
''//Guil//.'' Heauens make our presence and our practises
|dialogWithStageDirectionFisco|k
|Pleasant and helpfull to him.|//Exit//.|
''//Queene//.'' Amen.
@@.stageDirectionFisco
// Enter Polonius//.
@@
''//Pol//.'' Th'Ambassadors from Norwey, my good Lord,
Are ioyfully return'd.
''//King//.'' Thou still hast bin the Father of good Newes.
''//Pol//.'' Haue I, my Lord? Assure you, my good Liege,
I hold my dutie, as I hold my Soule,
Both to my God, one to my gracious King:
And I do thinke, or else this braine of mine
Hunts not the traile of Policie, so sure
As I haue vs'd to do: that I haue found
The very cause of //Hamlets// Lunacie.
''//King//.'' Oh speake of that, that I do long to heare.
''//Pol//.'' Giue first admittance to th'Ambassadors,
My Newes shall be the Newes to that great Feast.
''//King//.'' Thy selfe do grace to them, and bring them in.
He tels me my sweet Queene, that he hath found
The head and sourse of all your Sonnes distemper.
''//Qu//.'' I doubt it is no other, but the maine,
His Fathers death, and our o're-hasty Marriage.
@@.stageDirectionFisco
// Enter Polonius, Voltumand, and Cornelius//.
@@
''//King//.'' Well, we shall sift him. Welcome good Frends:
Say //Voltumand//, what from our Brother Norwey?
''//Volt//.'' Most faire returne of Greetings, and Desires.
Vpon our first, he sent out to suppresse
His Nephewes Leuies, which to him appear'd
To be a preparation 'gainst the Poleak:
But better look'd into, he truly found
It was against your Highnesse, whereat greeued,
That so his Sicknesse, Age, and Impotence
Was falsely borne in hand, sends out Arrests
On //Fortinbras//, which he (in breefe) obeyes,
Receiues rebuke from Norwey: and in fine,
Makes Vow before his Vnkle, neuer more
To giue th'assay of Armes against your Maiestie.
Whereon old Norwey, ouercome with ioy,
Giues him three thousand Crownes in Annuall Fee,
And his Commission to imploy those Soldiers
So leuied as before, against the Poleak:
With an intreaty heerein further shewne,
That it might please you to giue quiet passe
Through your Dominions, for his Enterprize,
On such regards of safety and allowance,
As therein are set downe.
''//King//.'' It likes vs well:
And at our more consider'd time wee'l read,
Answer, and thinke vpon this Businesse.
Meane time we thanke you, for your well-tooke Labour.
Go to your rest, at night wee'l Feast together.
|dialogWithStageDirectionFisco|k
|Most welcome home.|//Exit Ambass//.|
''//Pol//.'' This businesse is very well ended.
My Liege, and Madam, to expostulate
What Maiestie should be, what Dutie is,
Why day is day; night, night; and time is time,
Were nothing but to waste Night, Day, and Time.
Therefore, since Breuitie is the Soule of Wit,
And tediousnesse, the limbes and outward flourishes,
I will be breefe. Your Noble Sonne is mad:
Mad call I it; for to define true Madnesse,
What is't, but to be nothing else but mad.
But let that go.
''//Qu//.'' More matter, with lesse Art.
''//Pol//.'' Madam, I sweare I vse no Art at all:
That he is mad, 'tis true: 'Tis true 'tis pittie,
And pittie it is true: A foolish figure,
But farewell it: for I will vse no Art.
Mad let vs grant him then: and now remaines
That we finde out the cause of this effect,
Or rather say, the cause of this defect;
For this effect defectiue, comes by cause,
Thus it remaines, and the remainder thus. Perpend,
I haue a daughter: haue, whil'st she is mine,
Who in her Dutie and Obedience, marke,
Hath giuen me this: now gather, and surmise.
@@.stageDirectionFisco
// The Letter//.
@@
// To the Celestiall, and my Soules Idoll, the most beautifed O//-
//phelia//.
That's an ill Phrase, a vilde Phrase, beautified is a vilde
Phrase: but you shall heare these in her excellent white
bosome, these.
''//Qu//.'' Came this from //Hamlet// to her.
''//Pol//.'' Good Madam stay awhile, I will be faithfull.
// Doubt thou, the Starres are fire//,
//Doubt, that the Sunne doth moue://
//Doubt Truth to be a Lier//,
//But neuer Doubt, I loue//.
// O deere Ophelia, I am ill at these Numbers: I haue not Art to//
//reckon my grones; but that I loue thee best, oh most Best be-//
//leeue// //it. Adieu//.
|dialogWithStageDirectionFisco|k
||//Thine euermore most deere Lady, whilst this//|
|dialogWithStageDirectionFisco|k
| ||
|dialogWithStageDirectionFisco|k
||//Machine is to him//, Hamlet.|
This in Obedience hath my daughter shew'd me:
And more aboue hath his soliciting,
As they fell out by Time, by Meanes, and Place,
All giuen to mine eare.
''//King//.'' But how hath she receiu'd his Loue?
''//Pol//.'' What do you thinke of me?
''//King//.'' As of a man, faithfull and Honourable.
''//Pol//.'' I wold faine proue so. But what might you think?
When I had seene this hot loue on the wing,
As I perceiued it, I must tell you that
Before my Daughter told me what might you
Or my deere Maiestie your Queene heere, think,
If I had playd the Deske or Table-booke,
Or giuen my heart a winking, mute and dumbe,
Or look'd vpon this Loue, with idle sight,
What might you thinke? No, I went round to worke,
And (my yong Mistris) thus I did bespeake
Lord //Hamlet// is a Prince out of thy Starre,
This must not be: and then, I Precepts gaue her,
That she should locke her selfe from his Resort,
Admit no Messengers, receiue no Tokens:
Which done, she tooke the Fruites of my Aduice,
And he repulsed. A short Tale to make,
Fell into a Sadnesse, then into a Fast,
Thence to a Watch, thence into a Weaknesse,
Thence to a Lightnesse, and by this declension
Into the Madnesse whereon now he raues,
And all we waile for.
''//King//.'' Do you thinke 'tis this?
''//Qu//.'' It may be very likely.
''//Pol//.'' Hath there bene such a time, I'de fain know that,
That I haue possitiuely said, 'tis so,
When it prou'd otherwise?
''//King//.'' Not that I know.
''//Pol//.'' Take this from this; if this be otherwise,
If Circumstances leade me, I will finde
Where truth is hid, though it were hid indeede
Within the Center.
''//King//.'' How may we try it further?
''//Pol//.'' You know sometimes
He walkes foure houres together, heere
In the Lobby.
''//Qu//.'' So he ha's indeed.
''//Pol//.'' At such a time Ile loose my Daughter to him,
Be you and I behinde an Arras then,
Marke the encounter: If he loue her not,
And be not from his reason falne thereon;
Let me be no Assistant for a State,
And keepe a Farme and Carters.
''//King//.'' We will try it.
@@.stageDirectionFisco
// Enter Hamlet reading on a Booke//.
@@
''//Qu//.'' But looke where sadly the poore wretch
Comes reading.
''//Pol//.'' Away I do beseech you, both away,
|dialogWithStageDirectionFisco|k
|Ile boord him presently.|//Exit King & Queen//.|
Oh giue me leaue. How does my good Lord //Hamlet//?
''//Ham//.'' Well, God-a-mercy.
''//Pol//.'' Do you know me, my Lord?
''//Ham//.'' Excellent, excellent well: y'are a Fishmonger.
''//Pol//.'' Not I my Lord.
''//Ham//.'' Then I would you were so honest a man.
''//Pol//.'' Honest, my Lord?
''//Ham//.'' I sir, to be honest as this world goes, is to bee
one man pick'd out of two thousand.
''//Pol//.'' That's very true, my Lord.
''//Ham//.'' For if the Sun breed Magots in a dead dogge,
being a good kissing Carrion-----
Haue you a daughter?
''//Pol//.'' I haue my Lord.
''//Ham//.'' Let her not walke i'th'Sunne: Conception is a
blessing, but not as your daughter may conceiue. Friend
looke too't.
''//Pol//.'' How say you by that? Still harping on my daugh-
ter: yet he knew me not at first; he said I was a Fishmon-
ger: he is farre gone, farre gone: and truly in my youth,
I suffred much extreamity for loue: very neere this. Ile
speake to him againe. What do you read my Lord?
''//Ham//.'' Words, words, words.
''//Pol//.'' What is the matter, my Lord?
''//Ham//.'' Betweene who?
''//Pol//.'' I meane the matter you meane, my Lord.
''//Ham//.'' Slanders Sir: for the Satyricall slaue saies here,
that old men haue gray Beards; that their faces are wrin-
kled; their eyes purging thicke Amber, or Plum-Tree
Gumme: and that they haue a plentifull locke of Wit,
together with weake Hammes. All which Sir, though I
most powerfully, and potently beleeue; yet I holde it
not Honestie to haue it thus set downe: For you your
selfe Sir, should be old as I am, if like a Crab you could
go backward.
''//Pol//.'' Though this be madnesse,
Yet there is Method in't: will you walke
Out of the ayre my Lord?
''//Ham//.'' Into my Graue?
''//Pol//.'' Indeed that is out o'th' Ayre:
How pregnant (sometimes) his Replies are?
A happinesse,
That often Madnesse hits on,
Which Reason and Sanitie could not
So prosperously be deliuer'd of.
I will leaue him,
And sodainely contriue the meanes of meeting
Betweene him, and my daughter.
My Honourable Lord, I will most humbly
Take my leaue of you.
''//Ham//.'' You cannot Sir take from me any thing, that I
will more willingly part withall, except my life, my
life.
''//Polon//.'' Fare you well my Lord.
''//Ham//.'' These tedious old fooles.
''//Polon//.'' You goe to seeke my Lord //Hamlet//; there
hee is.
@@.stageDirectionFisco
// Enter Rosincran and Guildensterne//.
@@
''//Rosin//.'' God saue you Sir.
''//Guild//.'' Mine honour'd Lord?
''//Rosin//.'' My most deare Lord?
''//Ham//.'' My excellent good friends? How do'st thou
//Guildensterne//? Oh, //Rosincrane//; good Lads: How doe ye
both?
''//Rosin//.'' As the indifferent Children of the earth.
''//Guild//.'' Happy, in that we are not ouer-happy: on For-
tunes Cap, we are not the very Button.
''//Ham//.'' Nor the Soales of her Shoo?
''//Rosin//.'' Neither my Lord.
''//Ham//.'' Then you liue about her waste, or in the mid-
dle of her fauour?
''//Guil//.'' Faith, her priuates, we.
''//Ham//.'' In the secret parts of Fortune? Oh, most true:
she is a Strumpet. What's the newes?
''//Rosin//.'' None my Lord; but that the World's growne
honest.
''//Ham//.'' Then is Doomesday neere: But your newes is
not true. Let me question more in particular: what haue
you my good friends, deserued at the hands of Fortune,
that she sends you to Prison hither?
''//Guil//.'' Prison, my Lord?
''//Ham//.'' Denmark's a Prison.
''//Rosin//.'' Then is the World one.
''//Ham//.'' A goodly one, in which there are many Con-
fines, Wards, and Dungeons; //Denmarke// being one o'th'
worst.
''//Rosin//.'' We thinke not so my Lord.
''//Ham//.'' Why then 'tis none to you; for there is nothing
either good or bad, but thinking makes it so: to me it is
a prison.
''//Rosin//.'' Why then your Ambition makes it one: 'tis
too narrow for your minde.
''//Ham//.'' O God, I could be bounded in a nutshell, and
count my selfe a King of infinite space; were it not that
I haue bad dreames.
''//Guil//.'' Which dreames indeed are Ambition: for the
very substance of the Ambitious, is meerely the shadow
of a Dreame.
''//Ham//.'' A dreame it selfe is but a shadow.
''//Rosin//.'' Truely, and I hold Ambition of so ayry and
light a quality, that it is but a shadowes shadow.
''//Ham//.'' Then are our Beggers bodies; and our Mo-
narchs and out-stretcht Heroes the Beggers Shadowes:
shall wee to th' Court: for, by my fey I cannot rea-
son?
''//Both//.'' Wee'l wait vpon you.
''//Ham//.'' No such matter. I will not sort you with the
rest of my seruants: for to speake to you like an honest
man: I am most dreadfully attended; but in the beaten
way of friendship, What make you at //Elsonower//?
''//Rosin//.'' To visit you my Lord, no other occasion.
''//Ham//.'' Begger that I am, I am euen poore in thankes;
but I thanke you: and sure deare friends my thanks
are too deare a halfepeny; were you not sent for? Is it
your owne inclining? Is it a free visitation? Come,
deale iustly with me: come, come; nay speake.
''//Guil//.'' What should we say my Lord?
''//Ham//.'' Why any thing. But to the purpose; you were
sent for; and there is a kinde confession in your lookes;
which your modesties haue not craft enough to co-
lor, I know the good King & Queene haue sent for you.
''//Rosin//.'' To what end my Lord?
''//Ham//.'' That you must teach me: but let mee coniure
you by the rights of our fellowship, by the consonancy of
our youth, by the Obligation of our euer-preserued loue,
and by what more deare, a better proposer could charge
you withall; be euen and direct with me, whether you
were sent for or no.
''//Rosin//.'' What say you?
''//Ham//.'' Nay then I haue an eye of you: if you loue me
hold not off.
''//Guil//.'' My Lord, we were sent for.
''//Ham//.'' I will tell you why; so shall my anticipation
preuent your discouery of your secricie to the King and
Queene: moult no feather, I haue of late, but wherefore
I know not, lost all my mirth, forgone all custome of ex-
ercise; and indeed, it goes so heauenly with my dispositi-
on; that this goodly frame the Earth, seemes to me a ster-
rill Promontory; this most excellent Canopy the Ayre,
look you, this braue ore-hanging, this Maiesticall Roofe,
fretted with golden fire: why, it appeares no other thing
to mee, then a foule and pestilent congregation of va-
pours. What a piece of worke is a man! how Noble in
Reason? how infinite in faculty? in forme and mouing
how expresse and admirable? in Action, how like an An-
gel? in apprehension, how like a God? the beauty of the
world, the Parragon of Animals; and yet to me, what is
this Quintessence of Dust? Man delights not me; no,
nor Woman neither; though by your smiling you seeme
to say so.
''//Rosin//.'' My Lord, there was no such stuffe in my
thoughts.
''//Ham//.'' Why did you laugh, when I said, Man delights
not me?
''//Rosin//.'' To thinke, my Lord, if you delight not in Man,
what Lenton entertainment the Players shall receiue
from you: wee coated them on the way, and hither are
they comming to offer you Seruice.
''//Ham//.'' He that playes the King shall be welcome; his
Maiesty shall haue Tribute of mee: the aduenturous
Knight shal vse his Foyle and Target: the Louer shall
not sigh //gratis//, the humorous man shall end his part in
peace: the Clowne shall make those laugh whose lungs
are tickled a'th' sere: and the Lady shall say her minde
freely; or the blanke Verse shall halt for't: what Players
are they?
''//Rosin//.'' Euen those you were wont to take delight in
the Tragedians of the City.
''//Ham//.'' How chances it they trauaile? their resi-
dence both in reputation and profit was better both
wayes.
''//Rosin//.'' I thinke their Inhibition comes by the meanes
of the late Innouation?
''//Ham//.'' Doe they hold the same estimation they did
when I was in the City? Are they so follow'd?
''//Rosin//.'' No indeed, they are not.
''//Ham//.'' How comes it? doe they grow rusty?
''//Rosin//.'' Nay, their indeauour keepes in the wonted
pace; But there is Sir an ayrie of Children, little
Yases, that crye out on the top of question; and
are most tyrannically clap't for't: these are now the
fashion, and so be-ratled the common Stages (so they
call them) that many wearing Rapiers, are affraide of
Goose-quils, and dare scarse come thither.
''//Ham//.'' What are they Children? Who maintains 'em?
How are they escoted? Will they pursue the Quality no
longer then they can sing? Will they not say afterwards
if they should grow themselues to common Players (as
it is like most if their meanes are not better) their Wri-
ters do them wrong, to make them exclaim against their
owne Succession.
''//Rosin//.'' Faith there ha's bene much to do on both sides:
and the Nation holds it no sinne, to tarre them to Con-
trouersie. There was for a while, no mony bid for argu-
ment, vnlesse the Poet and the Player went to Cuffes in
the Question.
''//Ham//.'' Is't possible?
''//Guild//.'' Oh there ha's beene much throwing about of
Braines.
''//Ham//.'' Do the Boyes carry it away?
''//Rosin//.'' I that they do my Lord. //Hercules// & his load too.
''//Ham//.'' It is not strange: for mine Vnckle is King of
Denmarke, and those that would make mowes at him
while my Father liued; giue twenty, forty, an hundred
Ducates a peece, for his picture in Little. There is some-
thing in this more then Naturall, if Philosophie could
finde it out.
|dialogWithStageDirectionFisco|k
||//Flourish for the Players//.|
''//Guil//.'' There are the Players.
''//Ham//.'' Gentlemen, you are welcom to //Elsonower:// your
hands, come: The appurtenance of Welcome, is Fashion
and Ceremony. Let me comply with you in the Garbe,
lest my extent to the Players (which I tell you must shew
fairely outward) should more appeare like entertainment
then yours. You are welcome: but my Vnckle Father,
and Aunt Mother are deceiu'd.
''//Guil//.'' In what my deere Lord?
''//Ham//.'' I am but mad North, North-West: when the
Winde is Southerly, I know a Hawke from a Handsaw.
@@.stageDirectionFisco
// Enter Polonius//.
@@
''//Pol//.'' Well be with you Gentlemen.
''//Ham//.'' Hearke you //Guildensterne//, and you too: at each
eare a hearer: that great Baby you see there, is not yet
out of his swathing clouts.
''//Rosin//.'' Happily he's the second time come to them: for
they say, an old man is twice a childe.
''//Ham//.'' I will Prophesie. Hee comes to tell me of the
Players. Mark it, you say right Sir: for a Monday mor-
ning 'twas so indeed.
''//Pol//.'' My Lord, I haue Newes to tell you.
''//Ham//.'' My Lord, I haue Newes to tell you.
When //Rossius// an Actor in Rome---
''//Pol//.'' The Actors are come hither my Lord.
''//Ham//.'' Buzze, buzze.
''//Pol//.'' Vpon mine Honor.
''//Ham//.'' Then can each Actor on his Asse---
''//Polon//.'' The best Actors in the world, either for Trage-
die, Comedie, Historie, Pastorall: Pastoricall-Comicall-
Historicall-Pastorall: Tragicall-Historicall: Tragicall-
Comicall-Historicall-Pastorall: Scene indiuidible: or Po-
em vnlimited. //Seneca// cannot be too heauy, nor //Plautus//
too light, for the law of Writ, and the Liberty. These are
the onely men.
''//Ham//.'' O //Iephta// Iudge of Israel, what a Treasure had'st
thou?
''//Pol//.'' What a Treasure had he, my Lord?
''//Ham//.'' Why one faire Daughter, and no more,
The which he loued passing well.
''//Pol//.'' Still on my Daughter.
''//Ham//.'' Am I not i'th'right old //Iephta//?
''//Polon//.'' If you call me //Iephta// my Lord, I haue a daugh-
ter that I loue passing well.
''//Ham//.'' Nay that followes not.
''//Polon//.'' What followes then, my Lord?
''//Ha//.'' Why, As by lot, God wot: and then you know, It
came to passe, as most like it was: The first rowe of the
//Pons Chanson// will shew you more. For looke where my
Abridgements come.
@@.stageDirectionFisco
// Enter foure or fiue Players//.
@@
Y'are welcome Masters, welcome all. I am glad to see
thee well: Welcome good Friends. O my olde Friend?
Thy face is valiant since I saw thee last: Com'st thou to
beard me in Denmarke? What, my yong Lady and Mi-
stris? Byrlady your Ladiship is neerer Heauen then when
I saw you last, by the altitude of a Choppine. Pray God
your voice like a peece of vncurrant Gold be not crack'd
within the ring. Masters, you are all welcome: wee'l e'ne
to't like French Faulconers, flie at any thing we see: wee'l
haue a Speech straight. Come giue vs a tast of your qua-
lity: come, a passionate speech.
''//1. Play//.'' What speech, my Lord?
''//Ham//.'' I heard thee speak me a speech once, but it was
neuer Acted: or if it was, not aboue once, for the Play I
remember pleas'd not the Million, 'twas //Cauiarie// to the
Generall: but it was (as I receiu'd it, and others, whose
iudgement in such matters, cried in the top of mine) an
excellent Play; well digested in the Scoenes, set downe
with as much modestie, as cunning. I remember one said,
there was no Sallets in the lines, to make the matter sa-
uouty; nor no matter in the phrase, that might indite the
Author of affectation, but cal'd it an honest method. One
cheefe Speech in it, I cheefely lou'd, 'twas //Aeneas// Tale
to //Dido//, and thereabout of it especially, where he speaks
of //Priams// slaughter. If it liue in your memory, begin at
this Line, let me see, let me see: The rugged //Pyrrhus// like
th'// Hyrcanian// Beast. It is not so: it begins with //Pyrrhus//
The rugged //Pyrrhus//, he whose Sable Armes
Blacke as his purpose, did the night resemble
When he lay couched in the Ominous Horse,
Hath now this dread and blacke Complexion smear'd
With Heraldry more dismall: Head to foote
Now is he to take Geulles, horridly Trick'd
With blood of Fathers, Mothers, Daughters, Sonnes,
Bak'd and impasted with the parching streets,
That lend a tyrannous, and damned light
To their vilde Murthers, roasted in wrath and fire,
And thus o're-sized with coagulate gore,
VVith eyes like Carbuncles, the hellish //Pyrrhus//
Olde Grandsire //Priam// seekes.
''//Pol//.'' Fore God, my Lord, well spoken, with good ac-
cent, and good discretion.
''//1. Player//.'' Anon he findes him,
Striking too short at Greekes. His anticke Sword,
Rebellious to his Arme, lyes where it falles
Repugnant to command: vnequall match,
//Pyrrhus// at //Priam// driues, in Rage strikes wide:
But with the whiffe and winde of his fell Sword,
Th'vnnerued Father fals. Then senselesse Illium,
Seeming to feele his blow, with flaming top
Stoopes to his Bace, and with a hideous crash
Takes Prisoner //Pyrrhus// eare. For loe, his Sword
Which was declining on the Milkie head
Of Reuerend //Priam//, seem'd i'th' Ayre to sticke:
So as a painted Tyrant //Pyrrhus// stood,
And like a Newtrall to his will and matter, did nothing.
But as we often see against some storme,
A silence in the Heauens, the Racke stand still,
The bold windes speechlesse, and the Orbe below
As hush as death: Anon the dreadfull Thunder
Doth rend the Region. So after //Pyrrhus// pause,
A rowsed Vengeance sets him new a-worke,
And neuer did the Cyclops hammers fall
On Mars his Armours, forg'd for proofe Eterne,
With lesse remorse then //Pyrrhus// bleeding sword
Now falles on //Priam//.
Out, out, thou Strumpet-Fortune, all you Gods,
In generall Synod take away her power:
Breake all the Spokes and Fallies from her wheele,
And boule the round Naue downe the hill of Heauen,
As low as to the Fiends.
''//Pol//.'' This is too long.
''//Ham//.'' It shall to'th Barbars, with your beard. Pry-
thee say on: He's for a Iigge, or a tale of Baudry, or hee
sleepes. Say on; come to //Hecuba//.
''//1. Play//.'' But who, O who, had seen the inobled Queen.
''//Ham//.'' The inobled Queene?
''//Pol//.'' That's good: Inobled Queene is good.
''//1. Play//.'' Run bare-foot vp and downe,
Threatning the flame
With Bisson Rheume: A clout about that head,
Where late the Diadem stood, and for a Robe
About her lanke and all ore-teamed Loines,
A blanket in th' Alarum of feare caught vp.
Who this had seene, with tongue in Venome steep'd,
'Gainst Fortunes State, would Treason haue pronounc'd?
But if the Gods themselues did see her then,
When she saw //Pyrrhus// make malicious sport
In mincing with his Sword her Husbands limbes,
The instant Burst of Clamour that she made
(Vnlesse things mortall moue them not at all)
Would haue made milche the Burning eyes of Heauen,
And passion in the Gods.
''//Pol//.'' Looke where he ha's not turn'd his colour, and
ha's teares in's eyes. Pray you no more.
''//Ham//.'' 'Tis well, Ile haue thee speake out the rest,
soone. Good my Lord, will you see the Players wel be-
stow'd. Do ye heare, let them be well vs'd: for they are
the Abstracts and breefe Chronicles of the time. After
your death, you were better haue a bad Epitaph, then
their ill report while you liued.
''//Pol//.'' My Lord, I will vse them according to their de-
sart.
''//Ham//.'' Gods bodykins man, better. Vse euerie man
after his desart, and who should scape whipping: vse
them after your own Honor and Dignity. The lesse they
deserue, the more merit is in your bountie. Take them
in.
|dialogWithStageDirectionFisco|k
|''//Pol//.'' Come sirs.|//Exit Polon//.|
''//Ham//.'' Follow him Friends: wee'l heare a play to mor-
row. Dost thou heare me old Friend, can you play the
murther of //Gonzago//?
''//Play//.'' I my Lord.
''//Ham//.'' Wee'l ha't to morrow night. You could for a
need study a speech of some dosen or sixteene lines, which
I would set downe, and insert in't? Could ye not?
''//Play//.'' I my Lord.
''//Ham//.'' Very well. Follow that Lord, and looke you
mock him not. My good Friends, Ile leaue you til night
you are welcome to //Elsonower//?
|dialogWithStageDirectionFisco|k
|''//Rosin//.'' Good my Lord.|//Exeunt//.|
@@.stageDirectionFisco
// Manet Hamlet//.
@@
''//Ham//.'' I so, God buy'ye: Now I am alone.
Oh what a Rogue and Pesant slaue am I?
Is it not monstrous that this Player heere,
But in a Fixion, in a dreame of Passion,
Could force his soule so to his whole conceit,
That from her working, all his visage warm'd;
Teares in his eyes, distraction in's Aspect,
A broken voyce, and his whole Function suiting
With Formes, to his Conceit? And all for nothing?
For //Hecuba//?
What's //Hecuba// to him, or he to //Hecuba//,
That he should weepe for her? What would he doe,
Had he the Motiue and the Cue for passion
That I haue? He would drowne the Stage with teares,
And cleaue the generall eare with horrid speech:
Make mad the guilty, and apale the free,
Confound the ignorant, and amaze indeed,
The very faculty of Eyes and Eares. Yet I,
A dull and muddy-metled Rascall, peake
Like Iohn a-dreames, vnpregnant of my cause,
And can say nothing: No, not for a King,
Vpon whose property, and most deere life,
A damn'd defeate was made. Am I a Coward?
Who calles me Villaine? breakes my pate a-crosse?
Pluckes off my Beard, and blowes it in my face?
Tweakes me by'th'Nose? giues me the Lye i'th'Throate,
As deepe as to the Lungs? Who does me this?
Ha? Why I should take it: for it cannot be,
But I am Pigeon-Liuer'd, and lacke Gall
To make Oppression bitter, or ere this,
I should haue fatted all the Region Kites
With this Slaues Offall, bloudy: a Bawdy villaine,
Remorselesse, Treacherous, Letcherous, kindles villaine!
Oh Vengeance!
Who? What an Asse am I? I sure, this is most braue,
That I, the Sonne of the Deere murthered,
Prompted to my Reuenge by Heauen, and Hell,
Must (like a Whore) vnpacke my heart with words,
And fall a Cursing like a very Drab,
A Scullion? Fye vpon't: Foh. About my Braine.
I haue heard, that guilty Creatures sitting at a Play,
Haue by the very cunning of the Scoene,
Bene strooke so to the soule, that presently
They haue proclaim'd their Malefactions.
For Murther, though it haue no tongue, will speake
With most myraculous Organ. Ile haue these Players,
Play something like the murder of my Father,
Before mine Vnkle. Ile obserue his lookes,
Ile tent him to the quicke: If he but blench
I know my course. The Spirit that I haue seene
May be the Diuell, and the Diuel hath power
T'assume a pleasing shape, yea and perhaps
Out of my Weaknesse, and my Melancholly,
As he is very potent with such Spirits,
Abuses me to damne me. Ile haue grounds
More Relatiue then this: The Play's the thing,
|dialogWithStageDirectionFisco|k
|Wherein Ile catch the Conscience of the King.|//Exit//|
//Enter KING CLAUDIUS, QUEEN GERTRUDE, ROSENCRANTZ, GUILDENSTERN, and Attendants//
''KING CLAUDIUS''
|2.2.1|Welcome, dear Rosencrantz and Guildenstern!|
|2.2.2|Moreover that we much did long to see you,|
|2.2.3|The need we have to use you did provoke|
|2.2.4|Our hasty sending. Something have you heard|
|2.2.5|Of Hamlet's transformation; so call it,|
|2.2.6|Sith nor the exterior nor the inward man|
|2.2.7|Resembles that it was. What it should be,|
|2.2.8|More than his father's death, that thus hath put him|
|2.2.9|So much from the understanding of himself,|
|2.2.10|I cannot dream of: I entreat you both,|
|2.2.11|That, being of so young days brought up with him,|
|2.2.12|And sith so neighbour'd to his youth and havior,|
|2.2.13|That you vouchsafe your rest here in our court|
|2.2.14|Some little time: so by your companies|
|2.2.15|To draw him on to pleasures, and to gather,|
|2.2.16|So much as from occasion you may glean,|
|2.2.17|Whether aught, to us unknown, afflicts him thus,|
|2.2.18|That, open'd, lies within our remedy.|
''QUEEN GERTRUDE''
|2.2.19|Good gentlemen, he hath much talk'd of you;|
|2.2.20|And sure I am two men there are not living|
|2.2.21|To whom he more adheres. If it will please you|
|2.2.22|To show us so much gentry and good will|
|2.2.23|As to expend your time with us awhile,|
|2.2.24|For the supply and profit of our hope,|
|2.2.25|Your visitation shall receive such thanks|
|2.2.26|As fits a king's remembrance.|
''ROSENCRANTZ''
|2.2.27|Both your majesties|
|2.2.28|Might, by the sovereign power you have of us,|
|2.2.29|Put your dread pleasures more into command|
|2.2.30|Than to entreaty.|
''GUILDENSTERN''
|2.2.31| But we both obey,|
|2.2.32|And here give up ourselves, in the full bent|
|2.2.33|To lay our service freely at your feet,|
|2.2.34|To be commanded.|
''KING CLAUDIUS''
|2.2.35|Thanks, Rosencrantz and gentle Guildenstern.|
''QUEEN GERTRUDE''
|2.2.36|Thanks, Guildenstern and gentle Rosencrantz:|
|2.2.37|And I beseech you instantly to visit|
|2.2.38|My too much changed son. Go, some of you,|
|2.2.39|And bring these gentlemen where Hamlet is.|
''GUILDENSTERN''
|2.2.40|Heavens make our presence and our practises|
|2.2.41|Pleasant and helpful to him!|
''QUEEN GERTRUDE''
|2.2.42|Ay, amen!|
//Exeunt ROSENCRANTZ, GUILDENSTERN, and some Attendants//
//Enter POLONIUS//
''LORD POLONIUS''
|2.2.43|The ambassadors from Norway, my good lord,|
|2.2.44|Are joyfully return'd.|
''KING CLAUDIUS''
|2.2.45|Thou still hast been the father of good news.|
''LORD POLONIUS''
|2.2.46|Have I, my lord? I assure my good liege,|
|2.2.47|I hold my duty, as I hold my soul,|
|2.2.48|Both to my God and to my gracious king:|
|2.2.49|And I do think, or else this brain of mine|
|2.2.50|Hunts not the trail of policy so sure|
|2.2.51|As it hath used to do, that I have found|
|2.2.52|The very cause of Hamlet's lunacy.|
''KING CLAUDIUS''
|2.2.53|O, speak of that; that do I long to hear.|
''LORD POLONIUS''
|2.2.54|Give first admittance to the ambassadors;|
|2.2.55|My news shall be the fruit to that great feast.|
''KING CLAUDIUS''
|2.2.56|Thyself do grace to them, and bring them in.|
//Exit POLONIUS//
|2.2.57|He tells me, my dear Gertrude, he hath found|
|2.2.58|The head and source of all your son's distemper.|
''QUEEN GERTRUDE''
|2.2.59|I doubt it is no other but the main;|
|2.2.60|His father's death, and our o'erhasty marriage.|
''KING CLAUDIUS''
|2.2.61|Well, we shall sift him.|
//Re-enter POLONIUS, with VOLTIMAND and CORNELIUS//
|2.2.62|Welcome, my good friends!|
|2.2.63|Say, Voltimand, what from our brother Norway?|
''VOLTIMAND''
|2.2.64|Most fair return of greetings and desires.|
|2.2.65|Upon our first, he sent out to suppress|
|2.2.66|His nephew's levies; which to him appear'd|
|2.2.67|To be a preparation 'gainst the Polack;|
|2.2.68|But, better look'd into, he truly found|
|2.2.69|It was against your highness: whereat grieved,|
|2.2.70|That so his sickness, age and impotence|
|2.2.71|Was falsely borne in hand, sends out arrests|
|2.2.72|On Fortinbras; which he, in brief, obeys;|
|2.2.73|Receives rebuke from Norway, and in fine|
|2.2.74|Makes vow before his uncle never more|
|2.2.75|To give the assay of arms against your majesty.|
|2.2.76|Whereon old Norway, overcome with joy,|
|2.2.77|Gives him three thousand crowns in annual fee,|
|2.2.78|And his commission to employ those soldiers,|
|2.2.79|So levied as before, against the Polack:|
|2.2.80|With an entreaty, herein further shown,|
//Giving a paper//
|2.2.81|That it might please you to give quiet pass|
|2.2.82|Through your dominions for this enterprise,|
|2.2.83|On such regards of safety and allowance|
|2.2.84|As therein are set down.|
''KING CLAUDIUS''
|2.2.85|It likes us well;|
|2.2.86|And at our more consider'd time well read,|
|2.2.87|Answer, and think upon this business.|
|2.2.88|Meantime we thank you for your well-took labour:|
|2.2.89|Go to your rest; at night we'll feast together:|
|2.2.90|Most welcome home!|
//Exeunt VOLTIMAND and CORNELIUS//
''LORD POLONIUS''
|2.2.91| This business is well ended.|
|2.2.92|My liege, and madam, to expostulate|
|2.2.93|What majesty should be, what duty is,|
|2.2.94|Why day is day, night night, and time is time,|
|2.2.95|Were nothing but to waste night, day and time.|
|2.2.96|Therefore, since brevity is the soul of wit,|
|2.2.97|And tediousness the limbs and outward flourishes,|
|2.2.98|I will be brief: your noble son is mad:|
|2.2.99|Mad call I it; for, to define true madness,|
|2.2.100|What is't but to be nothing else but mad?|
|2.2.101|But let that go.|
''QUEEN GERTRUDE''
|2.2.102| More matter, with less art.|
''LORD POLONIUS''
|2.2.103|Madam, I swear I use no art at all.|
|2.2.104|That he is mad, 'tis true: 'tis true 'tis pity;|
|2.2.105|And pity 'tis 'tis true: a foolish figure;|
|2.2.106|But farewell it, for I will use no art.|
|2.2.107|Mad let us grant him, then: and now remains|
|2.2.108|That we find out the cause of this effect,|
|2.2.109|Or rather say, the cause of this defect,|
|2.2.110|For this effect defective comes by cause:|
|2.2.111|Thus it remains, and the remainder thus. Perpend.|
|2.2.112|I have a daughter--have while she is mine--|
|2.2.113|Who, in her duty and obedience, mark,|
|2.2.114|Hath given me this: now gather, and surmise.|
//Reads//
|2.2.115|'To the celestial and my soul's idol, the most|
|2.2.116|beautified Ophelia,'--|
|2.2.117|That's an ill phrase, a vile phrase; 'beautified' is|
|2.2.118|a vile phrase: but you shall hear. Thus:|
//Reads//
|2.2.119|'In her excellent white bosom, these, & c.'|
''QUEEN GERTRUDE''
|2.2.120|Came this from Hamlet to her?|
''LORD POLONIUS''
|2.2.121|Good madam, stay awhile; I will be faithful.|
//Reads//
|2.2.122|'Doubt thou the stars are fire;|
|2.2.123|Doubt that the sun doth move;|
|2.2.124|Doubt truth to be a liar;|
|2.2.125|But never doubt I love.|
|2.2.126|'O dear Ophelia, I am ill at these numbers;|
|2.2.127|I have not art to reckon my groans: but that|
|2.2.128|I love thee best, O most best, believe it. Adieu.|
|2.2.129|'Thine evermore most dear lady, whilst|
|2.2.130|this machine is to him, HAMLET.'|
|2.2.131|This, in obedience, hath my daughter shown me,|
|2.2.132|And more above, hath his solicitings,|
|2.2.133|As they fell out by time, by means and place,|
|2.2.134|All given to mine ear.|
''KING CLAUDIUS''
|2.2.135|But how hath she|
|2.2.136|Received his love?|
''LORD POLONIUS''
|2.2.137| What do you think of me?|
''KING CLAUDIUS''
|2.2.138|As of a man faithful and honourable.|
''LORD POLONIUS''
|2.2.139|I would fain prove so. But what might you think,|
|2.2.140|When I had seen this hot love on the wing--|
|2.2.141|As I perceived it, I must tell you that,|
|2.2.142|Before my daughter told me--what might you,|
|2.2.143|Or my dear majesty your queen here, think,|
|2.2.144|If I had play'd the desk or table-book,|
|2.2.145|Or given my heart a winking, mute and dumb,|
|2.2.146|Or look'd upon this love with idle sight;|
|2.2.147|What might you think? No, I went round to work,|
|2.2.148|And my young mistress thus I did bespeak:|
|2.2.149|'Lord Hamlet is a prince, out of thy star;|
|2.2.150|This must not be:' and then I precepts gave her,|
|2.2.151|That she should lock herself from his resort,|
|2.2.152|Admit no messengers, receive no tokens.|
|2.2.153|Which done, she took the fruits of my advice;|
|2.2.154|And he, repulsed--a short tale to make--|
|2.2.155|Fell into a sadness, then into a fast,|
|2.2.156|Thence to a watch, thence into a weakness,|
|2.2.157|Thence to a lightness, and, by this declension,|
|2.2.158|Into the madness wherein now he raves,|
|2.2.159|And all we mourn for.|
''KING CLAUDIUS''
|2.2.160|Do you think 'tis this?|
''QUEEN GERTRUDE''
|2.2.161|It may be, very likely.|
''LORD POLONIUS''
|2.2.162|Hath there been such a time--I'd fain know that--|
|2.2.163|That I have positively said 'Tis so,'|
|2.2.164|When it proved otherwise?|
''KING CLAUDIUS''
|2.2.165|Not that I know.|
''LORD POLONIUS''
|2.2.166|[Pointing to his head and shoulder]|
|2.2.167|Take this from this, if this be otherwise:|
|2.2.168|If circumstances lead me, I will find|
|2.2.169|Where truth is hid, though it were hid indeed|
|2.2.170|Within the centre.|
''KING CLAUDIUS''
|2.2.171| How may we try it further?|
''LORD POLONIUS''
|2.2.172|You know, sometimes he walks four hours together|
|2.2.173|Here in the lobby.|
''QUEEN GERTRUDE''
|2.2.174| So he does indeed.|
''LORD POLONIUS''
|2.2.175|At such a time I'll loose my daughter to him:|
|2.2.176|Be you and I behind an arras then;|
|2.2.177|Mark the encounter: if he love her not|
|2.2.178|And be not from his reason fall'n thereon,|
|2.2.179|Let me be no assistant for a state,|
|2.2.180|But keep a farm and carters.|
''KING CLAUDIUS''
|2.2.181|We will try it.|
''QUEEN GERTRUDE''
|2.2.182|But, look, where sadly the poor wretch comes reading.|
''LORD POLONIUS''
|2.2.183|Away, I do beseech you, both away:|
|2.2.184|I'll board him presently.|
//Exeunt KING CLAUDIUS, QUEEN GERTRUDE, and Attendants//
//Enter HAMLET, reading//
|2.2.185|O, give me leave:|
|2.2.186|How does my good Lord Hamlet?|
''HAMLET''
|2.2.187|Well, God-a-mercy.|
''LORD POLONIUS''
|2.2.188|Do you know me, my lord?|
''HAMLET''
|2.2.189|Excellent well; you are a fishmonger.|
''LORD POLONIUS''
|2.2.190|Not I, my lord.|
''HAMLET''
|2.2.191|Then I would you were so honest a man.|
''LORD POLONIUS''
|2.2.192|Honest, my lord!|
''HAMLET''
|2.2.193|Ay, sir; to be honest, as this world goes, is to be|
|2.2.194|one man picked out of ten thousand.|
''LORD POLONIUS''
|2.2.195|That's very true, my lord.|
''HAMLET''
|2.2.196|For if the sun breed maggots in a dead dog, being a|
|2.2.197|god kissing carrion,--Have you a daughter?|
''LORD POLONIUS''
|2.2.198|I have, my lord.|
''HAMLET''
|2.2.199|Let her not walk i' the sun: conception is a|
|2.2.200|blessing: but not as your daughter may conceive.|
|2.2.201|Friend, look to 't.|
''LORD POLONIUS''
|2.2.202|[Aside] How say you by that? Still harping on my|
|2.2.203|daughter: yet he knew me not at first; he said I|
|2.2.204|was a fishmonger: he is far gone, far gone: and|
|2.2.205|truly in my youth I suffered much extremity for|
|2.2.206|love; very near this. I'll speak to him again.|
|2.2.207|What do you read, my lord?|
''HAMLET''
|2.2.208|Words, words, words.|
''LORD POLONIUS''
|2.2.209|What is the matter, my lord?|
''HAMLET''
|2.2.210|Between who?|
''LORD POLONIUS''
|2.2.211|I mean, the matter that you read, my lord.|
''HAMLET''
|2.2.212|Slanders, sir: for the satirical rogue says here|
|2.2.213|that old men have grey beards, that their faces are|
|2.2.214|wrinkled, their eyes purging thick amber and|
|2.2.215|plum-tree gum and that they have a plentiful lack of|
|2.2.216|wit, together with most weak hams: all which, sir,|
|2.2.217|though I most powerfully and potently believe, yet|
|2.2.218|I hold it not honesty to have it thus set down, for|
|2.2.219|yourself, sir, should be old as I am, if like a crab|
|2.2.220|you could go backward.|
''LORD POLONIUS''
|2.2.221|[Aside] Though this be madness, yet there is method|
|2.2.222|in 't. Will you walk out of the air, my lord?|
''HAMLET''
|2.2.223|Into my grave.|
''LORD POLONIUS''
|2.2.224|Indeed, that is out o' the air.|
//Aside//
|2.2.225|How pregnant sometimes his replies are! a happiness|
|2.2.226|that often madness hits on, which reason and sanity|
|2.2.227|could not so prosperously be delivered of. I will|
|2.2.228|leave him, and suddenly contrive the means of|
|2.2.229|meeting between him and my daughter.--My honourable|
|2.2.230|lord, I will most humbly take my leave of you.|
''HAMLET''
|2.2.231|You cannot, sir, take from me any thing that I will|
|2.2.232|more willingly part withal: except my life, except|
|2.2.233|my life, except my life.|
''LORD POLONIUS''
|2.2.234|Fare you well, my lord.|
''HAMLET''
|2.2.235|These tedious old fools!|
//Enter ROSENCRANTZ and GUILDENSTERN//
''LORD POLONIUS''
|2.2.236|You go to seek the Lord Hamlet; there he is.|
''ROSENCRANTZ''
|2.2.237|[To POLONIUS] God save you, sir!|
//Exit POLONIUS//
''GUILDENSTERN''
|2.2.238|My honoured lord!|
''ROSENCRANTZ''
|2.2.239|My most dear lord!|
''HAMLET''
|2.2.240|My excellent good friends! How dost thou,|
|2.2.241|Guildenstern? Ah, Rosencrantz! Good lads, how do ye both?|
''ROSENCRANTZ''
|2.2.242|As the indifferent children of the earth.|
''GUILDENSTERN''
|2.2.243|Happy, in that we are not over-happy;|
|2.2.244|On fortune's cap we are not the very button.|
''HAMLET''
|2.2.245|Nor the soles of her shoe?|
''ROSENCRANTZ''
|2.2.246|Neither, my lord.|
''HAMLET''
|2.2.247|Then you live about her waist, or in the middle of|
|2.2.248|her favours?|
''GUILDENSTERN''
|2.2.249|'Faith, her privates we.|
''HAMLET''
|2.2.250|In the secret parts of fortune? O, most true; she|
|2.2.251|is a strumpet. What's the news?|
''ROSENCRANTZ''
|2.2.252|None, my lord, but that the world's grown honest.|
''HAMLET''
|2.2.253|Then is doomsday near: but your news is not true.|
|2.2.254|Let me question more in particular: what have you,|
|2.2.255|my good friends, deserved at the hands of fortune,|
|2.2.256|that she sends you to prison hither?|
''GUILDENSTERN''
|2.2.257|Prison, my lord!|
''HAMLET''
|2.2.258|Denmark's a prison.|
''ROSENCRANTZ''
|2.2.259|Then is the world one.|
''HAMLET''
|2.2.260|A goodly one; in which there are many confines,|
|2.2.261|wards and dungeons, Denmark being one o' the worst.|
''ROSENCRANTZ''
|2.2.262|We think not so, my lord.|
''HAMLET''
|2.2.263|Why, then, 'tis none to you; for there is nothing|
|2.2.264|either good or bad, but thinking makes it so: to me|
|2.2.265|it is a prison.|
''ROSENCRANTZ''
|2.2.266|Why then, your ambition makes it one; 'tis too|
|2.2.267|narrow for your mind.|
''HAMLET''
|2.2.268|O God, I could be bounded in a nut shell and count|
|2.2.269|myself a king of infinite space, were it not that I|
|2.2.270|have bad dreams.|
''GUILDENSTERN''
|2.2.271|Which dreams indeed are ambition, for the very|
|2.2.272|substance of the ambitious is merely the shadow of a dream.|
''HAMLET''
|2.2.273|A dream itself is but a shadow.|
''ROSENCRANTZ''
|2.2.274|Truly, and I hold ambition of so airy and light a|
|2.2.275|quality that it is but a shadow's shadow.|
''HAMLET''
|2.2.276|Then are our beggars bodies, and our monarchs and|
|2.2.277|outstretched heroes the beggars' shadows. Shall we|
|2.2.278|to the court? for, by my fay, I cannot reason.|
''ROSENCRANTZ''
''GUILDENSTERN''
|2.2.279|We'll wait upon you.|
''HAMLET''
|2.2.280|No such matter: I will not sort you with the rest|
|2.2.281|of my servants, for, to speak to you like an honest|
|2.2.282|man, I am most dreadfully attended. But, in the|
|2.2.283|beaten way of friendship, what make you at Elsinore?|
''ROSENCRANTZ''
|2.2.284|To visit you, my lord; no other occasion.|
''HAMLET''
|2.2.285|Beggar that I am, I am even poor in thanks; but I|
|2.2.286|thank you: and sure, dear friends, my thanks are|
|2.2.287|too dear a halfpenny. Were you not sent for? Is it|
|2.2.288|your own inclining? Is it a free visitation? Come,|
|2.2.289|deal justly with me: come, come; nay, speak.|
''GUILDENSTERN''
|2.2.290|What should we say, my lord?|
''HAMLET''
|2.2.291|Why, any thing, but to the purpose. You were sent|
|2.2.292|for; and there is a kind of confession in your looks|
|2.2.293|which your modesties have not craft enough to colour:|
|2.2.294|I know the good king and queen have sent for you.|
''ROSENCRANTZ''
|2.2.295|To what end, my lord?|
''HAMLET''
|2.2.296|That you must teach me. But let me conjure you, by|
|2.2.297|the rights of our fellowship, by the consonancy of|
|2.2.298|our youth, by the obligation of our ever-preserved|
|2.2.299|love, and by what more dear a better proposer could|
|2.2.300|charge you withal, be even and direct with me,|
|2.2.301|whether you were sent for, or no?|
''ROSENCRANTZ''
|2.2.302|[Aside to GUILDENSTERN] What say you?|
''HAMLET''
|2.2.303|[Aside] Nay, then, I have an eye of you.--If you|
|2.2.304|love me, hold not off.|
''GUILDENSTERN''
|2.2.305|My lord, we were sent for.|
''HAMLET''
|2.2.306|I will tell you why; so shall my anticipation|
|2.2.307|prevent your discovery, and your secrecy to the king|
|2.2.308|and queen moult no feather. I have of late--but|
|2.2.309|wherefore I know not--lost all my mirth, forgone all|
|2.2.310|custom of exercises; and indeed it goes so heavily|
|2.2.311|with my disposition that this goodly frame, the|
|2.2.312|earth, seems to me a sterile promontory, this most|
|2.2.313|excellent canopy, the air, look you, this brave|
|2.2.314|o'erhanging firmament, this majestical roof fretted|
|2.2.315|with golden fire, why, it appears no other thing to|
|2.2.316|me than a foul and pestilent congregation of vapours.|
|2.2.317|What a piece of work is a man! how noble in reason!|
|2.2.318|how infinite in faculty! in form and moving how|
|2.2.319|express and admirable! in action how like an angel!|
|2.2.320|in apprehension how like a god! the beauty of the|
|2.2.321|world! the paragon of animals! And yet, to me,|
|2.2.322|what is this quintessence of dust? man delights not|
|2.2.323|me: no, nor woman neither, though by your smiling|
|2.2.324|you seem to say so.|
''ROSENCRANTZ''
|2.2.325|My lord, there was no such stuff in my thoughts.|
''HAMLET''
|2.2.326|Why did you laugh then, when I said 'man delights not me'?|
''ROSENCRANTZ''
|2.2.327|To think, my lord, if you delight not in man, what|
|2.2.328|lenten entertainment the players shall receive from|
|2.2.329|you: we coted them on the way; and hither are they|
|2.2.330|coming, to offer you service.|
''HAMLET''
|2.2.331|He that plays the king shall be welcome; his majesty|
|2.2.332|shall have tribute of me; the adventurous knight|
|2.2.333|shall use his foil and target; the lover shall not|
|2.2.334|sigh gratis; the humourous man shall end his part|
|2.2.335|in peace; the clown shall make those laugh whose|
|2.2.336|lungs are tickled o' the sere; and the lady shall|
|2.2.337|say her mind freely, or the blank verse shall halt|
|2.2.338|for't. What players are they?|
''ROSENCRANTZ''
|2.2.339|Even those you were wont to take delight in, the|
|2.2.340|tragedians of the city.|
''HAMLET''
|2.2.341|How chances it they travel? their residence, both|
|2.2.342|in reputation and profit, was better both ways.|
''ROSENCRANTZ''
|2.2.343|I think their inhibition comes by the means of the|
|2.2.344|late innovation.|
''HAMLET''
|2.2.345|Do they hold the same estimation they did when I was|
|2.2.346|in the city? are they so followed?|
''ROSENCRANTZ''
|2.2.347|No, indeed, are they not.|
''HAMLET''
|2.2.348|How comes it? do they grow rusty?|
''ROSENCRANTZ''
|2.2.349|Nay, their endeavour keeps in the wonted pace: but|
|2.2.350|there is, sir, an aery of children, little eyases,|
|2.2.351|that cry out on the top of question, and are most|
|2.2.352|tyrannically clapped for't: these are now the|
|2.2.353|fashion, and so berattle the common stages--so they|
|2.2.354|call them--that many wearing rapiers are afraid of|
|2.2.355|goose-quills and dare scarce come thither.|
''HAMLET''
|2.2.356|What, are they children? who maintains 'em? how are|
|2.2.357|they escoted? Will they pursue the quality no|
|2.2.358|longer than they can sing? will they not say|
|2.2.359|afterwards, if they should grow themselves to common|
|2.2.360|players--as it is most like, if their means are no|
|2.2.361|better--their writers do them wrong, to make them|
|2.2.362|exclaim against their own succession?|
''ROSENCRANTZ''
|2.2.363|'Faith, there has been much to do on both sides; and|
|2.2.364|the nation holds it no sin to tarre them to|
|2.2.365|controversy: there was, for a while, no money bid|
|2.2.366|for argument, unless the poet and the player went to|
|2.2.367|cuffs in the question.|
''HAMLET''
|2.2.368|Is't possible?|
''GUILDENSTERN''
|2.2.369|O, there has been much throwing about of brains.|
''HAMLET''
|2.2.370|Do the boys carry it away?|
''ROSENCRANTZ''
|2.2.371|Ay, that they do, my lord; Hercules and his load too.|
''HAMLET''
|2.2.372|It is not very strange; for mine uncle is king of|
|2.2.373|Denmark, and those that would make mows at him while|
|2.2.374|my father lived, give twenty, forty, fifty, an|
|2.2.375|hundred ducats a-piece for his picture in little.|
|2.2.376|'Sblood, there is something in this more than|
|2.2.377|natural, if philosophy could find it out.|
//Flourish of trumpets within//
''GUILDENSTERN''
|2.2.378|There are the players.|
''HAMLET''
|2.2.379|Gentlemen, you are welcome to Elsinore. Your hands,|
|2.2.380|come then: the appurtenance of welcome is fashion|
|2.2.381|and ceremony: let me comply with you in this garb,|
|2.2.382|lest my extent to the players, which, I tell you,|
|2.2.383|must show fairly outward, should more appear like|
|2.2.384|entertainment than yours. You are welcome: but my|
|2.2.385|uncle-father and aunt-mother are deceived.|
''GUILDENSTERN''
|2.2.386|In what, my dear lord?|
''HAMLET''
|2.2.387|I am but mad north-north-west: when the wind is|
|2.2.388|southerly I know a hawk from a handsaw.|
//Enter POLONIUS//
''LORD POLONIUS''
|2.2.389|Well be with you, gentlemen!|
''HAMLET''
|2.2.390|Hark you, Guildenstern; and you too: at each ear a|
|2.2.391|hearer: that great baby you see there is not yet|
|2.2.392|out of his swaddling-clouts.|
''ROSENCRANTZ''
|2.2.393|Happily he's the second time come to them; for they|
|2.2.394|say an old man is twice a child.|
''HAMLET''
|2.2.395|I will prophesy he comes to tell me of the players;|
|2.2.396|mark it. You say right, sir: o' Monday morning;|
|2.2.397|'twas so indeed.|
''LORD POLONIUS''
|2.2.398|My lord, I have news to tell you.|
''HAMLET''
|2.2.399|My lord, I have news to tell you.|
|2.2.400|When Roscius was an actor in Rome,--|
''LORD POLONIUS''
|2.2.401|The actors are come hither, my lord.|
''HAMLET''
|2.2.402|Buz, buz!|
''LORD POLONIUS''
|2.2.403|Upon mine honour,--|
''HAMLET''
|2.2.404|Then came each actor on his ass,--|
''LORD POLONIUS''
|2.2.405|The best actors in the world, either for tragedy,|
|2.2.406|comedy, history, pastoral, pastoral-comical,|
|2.2.407|historical-pastoral, tragical-historical, tragical-|
|2.2.408|comical-historical-pastoral, scene individable, or|
|2.2.409|poem unlimited: Seneca cannot be too heavy, nor|
|2.2.410|Plautus too light. For the law of writ and the|
|2.2.411|liberty, these are the only men.|
''HAMLET''
|2.2.412|O Jephthah, judge of Israel, what a treasure hadst thou!|
''LORD POLONIUS''
|2.2.413|What a treasure had he, my lord?|
''HAMLET''
|2.2.414|Why,|
|2.2.415|'One fair daughter and no more,|
|2.2.416|The which he loved passing well.'|
''LORD POLONIUS''
|2.2.417|[Aside] Still on my daughter.|
''HAMLET''
|2.2.418|Am I not i' the right, old Jephthah?|
''LORD POLONIUS''
|2.2.419|If you call me Jephthah, my lord, I have a daughter|
|2.2.420|that I love passing well.|
''HAMLET''
|2.2.421|Nay, that follows not.|
''LORD POLONIUS''
|2.2.422|What follows, then, my lord?|
''HAMLET''
|2.2.423|Why,|
|2.2.424|'As by lot, God wot,'|
|2.2.425|and then, you know,|
|2.2.426|'It came to pass, as most like it was,'--|
|2.2.427|the first row of the pious chanson will show you|
|2.2.428|more; for look, where my abridgement comes.|
//Enter four or five Players//
|2.2.429|You are welcome, masters; welcome, all. I am glad|
|2.2.430|to see thee well. Welcome, good friends. O, my old|
|2.2.431|friend! thy face is valenced since I saw thee last:|
|2.2.432|comest thou to beard me in Denmark? What, my young|
|2.2.433|lady and mistress! By'r lady, your ladyship is|
|2.2.434|nearer to heaven than when I saw you last, by the|
|2.2.435|altitude of a chopine. Pray God, your voice, like|
|2.2.436|apiece of uncurrent gold, be not cracked within the|
|2.2.437|ring. Masters, you are all welcome. We'll e'en|
|2.2.438|to't like French falconers, fly at any thing we see:|
|2.2.439|we'll have a speech straight: come, give us a taste|
|2.2.440|of your quality; come, a passionate speech.|
''First Player''
|2.2.441|What speech, my lord?|
''HAMLET''
|2.2.442|I heard thee speak me a speech once, but it was|
|2.2.443|never acted; or, if it was, not above once; for the|
|2.2.444|play, I remember, pleased not the million; 'twas|
|2.2.445|caviare to the general: but it was--as I received|
|2.2.446|it, and others, whose judgments in such matters|
|2.2.447|cried in the top of mine--an excellent play, well|
|2.2.448|digested in the scenes, set down with as much|
|2.2.449|modesty as cunning. I remember, one said there|
|2.2.450|were no sallets in the lines to make the matter|
|2.2.451|savoury, nor no matter in the phrase that might|
|2.2.452|indict the author of affectation; but called it an|
|2.2.453|honest method, as wholesome as sweet, and by very|
|2.2.454|much more handsome than fine. One speech in it I|
|2.2.455|chiefly loved: 'twas Aeneas' tale to Dido; and|
|2.2.456|thereabout of it especially, where he speaks of|
|2.2.457|Priam's slaughter: if it live in your memory, begin|
|2.2.458|at this line: let me see, let me see--|
|2.2.459|'The rugged Pyrrhus, like the Hyrcanian beast,'--|
|2.2.460|it is not so:--it begins with Pyrrhus:--|
|2.2.461|'The rugged Pyrrhus, he whose sable arms,|
|2.2.462|Black as his purpose, did the night resemble|
|2.2.463|When he lay couched in the ominous horse,|
|2.2.464|Hath now this dread and black complexion smear'd|
|2.2.465|With heraldry more dismal; head to foot|
|2.2.466|Now is he total gules; horridly trick'd|
|2.2.467|With blood of fathers, mothers, daughters, sons,|
|2.2.468|Baked and impasted with the parching streets,|
|2.2.469|That lend a tyrannous and damned light|
|2.2.470|To their lord's murder: roasted in wrath and fire,|
|2.2.471|And thus o'er-sized with coagulate gore,|
|2.2.472|With eyes like carbuncles, the hellish Pyrrhus|
|2.2.473|Old grandsire Priam seeks.'|
|2.2.474|So, proceed you.|
''LORD POLONIUS''
|2.2.475|'Fore God, my lord, well spoken, with good accent and|
|2.2.476|good discretion.|
''First Player''
|2.2.477|'Anon he finds him|
|2.2.478|Striking too short at Greeks; his antique sword,|
|2.2.479|Rebellious to his arm, lies where it falls,|
|2.2.480|Repugnant to command: unequal match'd,|
|2.2.481|Pyrrhus at Priam drives; in rage strikes wide;|
|2.2.482|But with the whiff and wind of his fell sword|
|2.2.483|The unnerved father falls. Then senseless Ilium,|
|2.2.484|Seeming to feel this blow, with flaming top|
|2.2.485|Stoops to his base, and with a hideous crash|
|2.2.486|Takes prisoner Pyrrhus' ear: for, lo! his sword,|
|2.2.487|Which was declining on the milky head|
|2.2.488|Of reverend Priam, seem'd i' the air to stick:|
|2.2.489|So, as a painted tyrant, Pyrrhus stood,|
|2.2.490|And like a neutral to his will and matter,|
|2.2.491|Did nothing.|
|2.2.492|But, as we often see, against some storm,|
|2.2.493|A silence in the heavens, the rack stand still,|
|2.2.494|The bold winds speechless and the orb below|
|2.2.495|As hush as death, anon the dreadful thunder|
|2.2.496|Doth rend the region, so, after Pyrrhus' pause,|
|2.2.497|Aroused vengeance sets him new a-work;|
|2.2.498|And never did the Cyclops' hammers fall|
|2.2.499|On Mars's armour forged for proof eterne|
|2.2.500|With less remorse than Pyrrhus' bleeding sword|
|2.2.501|Now falls on Priam.|
|2.2.502|Out, out, thou strumpet, Fortune! All you gods,|
|2.2.503|In general synod 'take away her power;|
|2.2.504|Break all the spokes and fellies from her wheel,|
|2.2.505|And bowl the round nave down the hill of heaven,|
|2.2.506|As low as to the fiends!'|
''LORD POLONIUS''
|2.2.507|This is too long.|
''HAMLET''
|2.2.508|It shall to the barber's, with your beard. Prithee,|
|2.2.509|say on: he's for a jig or a tale of bawdry, or he|
|2.2.510|sleeps: say on: come to Hecuba.|
''First Player''
|2.2.511|'But who, O, who had seen the mobled queen--'|
''HAMLET''
|2.2.512|'The mobled queen?'|
''LORD POLONIUS''
|2.2.513|That's good; 'mobled queen' is good.|
''First Player''
|2.2.514|'Run barefoot up and down, threatening the flames|
|2.2.515|With bisson rheum; a clout upon that head|
|2.2.516|Where late the diadem stood, and for a robe,|
|2.2.517|About her lank and all o'er-teemed loins,|
|2.2.518|A blanket, in the alarm of fear caught up;|
|2.2.519|Who this had seen, with tongue in venom steep'd,|
|2.2.520|'Gainst Fortune's state would treason have|
|2.2.521|pronounced:|
|2.2.522|But if the gods themselves did see her then|
|2.2.523|When she saw Pyrrhus make malicious sport|
|2.2.524|In mincing with his sword her husband's limbs,|
|2.2.525|The instant burst of clamour that she made,|
|2.2.526|Unless things mortal move them not at all,|
|2.2.527|Would have made milch the burning eyes of heaven,|
|2.2.528|And passion in the gods.'|
''LORD POLONIUS''
|2.2.529|Look, whether he has not turned his colour and has|
|2.2.530|tears in's eyes. Pray you, no more.|
''HAMLET''
|2.2.531|'Tis well: I'll have thee speak out the rest soon.|
|2.2.532|Good my lord, will you see the players well|
|2.2.533|bestowed? Do you hear, let them be well used; for|
|2.2.534|they are the abstract and brief chronicles of the|
|2.2.535|time: after your death you were better have a bad|
|2.2.536|epitaph than their ill report while you live.|
''LORD POLONIUS''
|2.2.537|My lord, I will use them according to their desert.|
''HAMLET''
|2.2.538|God's bodykins, man, much better: use every man|
|2.2.539|after his desert, and who should 'scape whipping?|
|2.2.540|Use them after your own honour and dignity: the less|
|2.2.541|they deserve, the more merit is in your bounty.|
|2.2.542|Take them in.|
''LORD POLONIUS''
|2.2.543|Come, sirs.|
''HAMLET''
|2.2.544|Follow him, friends: we'll hear a play to-morrow.|
//Exit POLONIUS with all the Players but the First//
|2.2.545|Dost thou hear me, old friend; can you play the|
|2.2.546|Murder of Gonzago?|
''First Player''
|2.2.547|Ay, my lord.|
''HAMLET''
|2.2.548|We'll ha't to-morrow night. You could, for a need,|
|2.2.549|study a speech of some dozen or sixteen lines, which|
|2.2.550|I would set down and insert in't, could you not?|
''First Player''
|2.2.551|Ay, my lord.|
''HAMLET''
|2.2.552|Very well. Follow that lord; and look you mock him|
|2.2.553|not.|
//Exit First Player//
|2.2.554|My good friends, I'll leave you till night: you are|
|2.2.555|welcome to Elsinore.|
''ROSENCRANTZ''
|2.2.556|Good my lord!|
''HAMLET''
|2.2.557|Ay, so, God be wi' ye;|
//Exeunt ROSENCRANTZ and GUILDENSTERN//
|2.2.558|Now I am alone.|
|2.2.559|O, what a rogue and peasant slave am I!|
|2.2.560|Is it not monstrous that this player here,|
|2.2.561|But in a fiction, in a dream of passion,|
|2.2.562|Could force his soul so to his own conceit|
|2.2.563|That from her working all his visage wann'd,|
|2.2.564|Tears in his eyes, distraction in's aspect,|
|2.2.565|A broken voice, and his whole function suiting|
|2.2.566|With forms to his conceit? and all for nothing!|
|2.2.567|For Hecuba!|
|2.2.568|What's Hecuba to him, or he to Hecuba,|
|2.2.569|That he should weep for her? What would he do,|
|2.2.570|Had he the motive and the cue for passion|
|2.2.571|That I have? He would drown the stage with tears|
|2.2.572|And cleave the general ear with horrid speech,|
|2.2.573|Make mad the guilty and appal the free,|
|2.2.574|Confound the ignorant, and amaze indeed|
|2.2.575|The very faculties of eyes and ears. Yet I,|
|2.2.576|A dull and muddy-mettled rascal, peak,|
|2.2.577|Like John-a-dreams, unpregnant of my cause,|
|2.2.578|And can say nothing; no, not for a king,|
|2.2.579|Upon whose property and most dear life|
|2.2.580|A damn'd defeat was made. Am I a coward?|
|2.2.581|Who calls me villain? breaks my pate across?|
|2.2.582|Plucks off my beard, and blows it in my face?|
|2.2.583|Tweaks me by the nose? gives me the lie i' the throat,|
|2.2.584|As deep as to the lungs? who does me this?|
|2.2.585|Ha!|
|2.2.586|'Swounds, I should take it: for it cannot be|
|2.2.587|But I am pigeon-liver'd and lack gall|
|2.2.588|To make oppression bitter, or ere this|
|2.2.589|I should have fatted all the region kites|
|2.2.590|With this slave's offal: bloody, bawdy villain!|
|2.2.591|Remorseless, treacherous, lecherous, kindless villain!|
|2.2.592|O, vengeance!|
|2.2.593|Why, what an ass am I! This is most brave,|
|2.2.594|That I, the son of a dear father murder'd,|
|2.2.595|Prompted to my revenge by heaven and hell,|
|2.2.596|Must, like a whore, unpack my heart with words,|
|2.2.597|And fall a-cursing, like a very drab,|
|2.2.598|A scullion!|
|2.2.599|Fie upon't! foh! About, my brain! I have heard|
|2.2.600|That guilty creatures sitting at a play|
|2.2.601|Have by the very cunning of the scene|
|2.2.602|Been struck so to the soul that presently|
|2.2.603|They have proclaim'd their malefactions;|
|2.2.604|For murder, though it have no tongue, will speak|
|2.2.605|With most miraculous organ. I'll have these players|
|2.2.606|Play something like the murder of my father|
|2.2.607|Before mine uncle: I'll observe his looks;|
|2.2.608|I'll tent him to the quick: if he but blench,|
|2.2.609|I know my course. The spirit that I have seen|
|2.2.610|May be the devil: and the devil hath power|
|2.2.611|To assume a pleasing shape; yea, and perhaps|
|2.2.612|Out of my weakness and my melancholy,|
|2.2.613|As he is very potent with such spirits,|
|2.2.614|Abuses me to damn me: I'll have grounds|
|2.2.615|More relative than this: the play 's the thing|
|2.2.616|Wherein I'll catch the conscience of the king.|
//Exit//
@@.stageDirectionFisco
//Florish. Enter King and Queene, Rosencraus and//
@@
@@.stageDirectionFisco
//Guyldensterne//.
@@
''//King//.'' Welcome deere //Rosencraus//, and //Guyldensterne//,
Moreouer, that we much did long to see you,
The need we haue to vse you did prouoke
Our hastie sending, something haue you heard
Of //Hamlets// transformation, so call it,
Sith nor th'exterior, nor the inward man
Resembles that it was, what it should be,
More then his fathers death, that thus hath put him
So much from th'vnderstanding of himselfe
I cannot dreame of: I entreate you both
That beeing of so young dayes brought vp with him,
And sith so nabored to his youth and hauior,
That you voutsafe your rest heere in our Court
Some little time, so by your companies
To draw him on to pleasures, and to gather
So much as from occasion you may gleane,
Whether ought to vs vnknowne afflicts him thus,
That opend lyes within our remedie.
''//Quee//.'' Good gentlemen, he hath much talkt of you,
And sure I am, two men there is not liuing
To whom he more adheres, if it will please you
To shew vs so much gentry and good will,
As to expend your time with vs a while,
For the supply and profit of our hope,
Your visitation shall receiue such thanks
As fits a Kings remembrance.
''//Ros//.'' Both your Maiesties
Might by the soueraigne power you haue of vs,
Put your dread pleasures more into commaund
Then to entreatie.
''//Guyl//.'' But we both obey.
And heere giue vp our selues in the full bent,
To lay our seruice freely at your feete
To be commaunded.
''//King//.'' Thanks //Rosencraus//, and gentle //Guyldensterne//.
''//Quee//.'' Thanks //Guyldensterne//, and gentle //Rosencraus//.
And I beseech you instantly to visite
My too much changed sonne, goe some of you
And bring these gentlemen where //Hamlet// is.
''//Guyl//.'' Heauens make our presence and our practices
Pleasant and helpfull to him.
|dialogWithStageDirectionFisco|k
|''//Quee//.'' I Amen.|//Exeunt Ros. and Guyld//.|
@@.stageDirectionFisco
//Enter Polonius//.
@@
''//Pol//.'' Th'embassadors from //Norway// my good Lord,
Are ioyfully re
turnd.
''//King//.'' Thou still hast been the father of good newes.
''//Pol//.'' Haue I my Lord? I assure my good Liege
I hold my dutie as I hold my soule,
Both to my God, and to my gracious King;
And I doe thinke, or els this braine of mine
Hunts not the trayle of policie so sure
As it hath vsd to doe, that I haue found
The very cause of //Hamlets// lunacie.
''//King//.'' O speake of that, that doe I long to heare.
''//Pol//.'' Giue first admittance to th'embassadors,
My newes shall be the fruite to that great feast.
''//King//.'' Thy selfe doe grace to them, and bring them in.
He tells me my deere //Gertrard// he hath found
The head and source of all your sonnes distemper.
''//Quee//.'' I doubt it is no other but the maine
His fathers death, and our hastie marriage.
@@.stageDirectionFisco
//Enter Embassadors//.
@@
''//King//.'' Well, we shall sift him, welcome my good friends,
Say //Voltemand//, what from our brother //Norway?//
''//Vol//.'' Most faire returne of greetings and desires;
Vpon our first, he sent out to suppresse
His Nephews leuies, which to him appeard
To be a preparation gainst the //Pollacke//,
But better lookt into, he truly found
It was against your highnes, whereat greeu'd
That so his sicknes, age, and impotence
Was falsly borne in hand, sends out arrests
On //Fortenbrasse//, which he in breefe obeyes,
Receiues rebuke from //Norway//, and in fine,
Makes vow before his Vncle neuer more
To giue th'assay of Armes against your Maiestie:
Whereon old //Norway// ouercome with ioy,
Giues him threescore thousand crownes in anuall fee,
And his commission to imploy those souldiers
So leuied (as before) against the //Pollacke//,
With an entreatie heerein further shone,
That it might please you to giue quiet passe
Through your dominions for this enterprise
On such regards of safety and allowance
As therein are set downe.
''//King//.'' It likes vs well,
And at our more considered time, wee'le read,
Answer, and thinke vpon this busines:
Meane time, we thanke you for your well tooke labour,
Goe to your rest, at night weele feast together,
|dialogWithStageDirectionFisco|k
|Most welcome home.|//Exeunt Embassadors//.|
''//Pol//.'' This busines is well ended.
My Liege and Maddam, to expostulate
What maiestie should be, what dutie is,
Why day is day, night, night, and time is time,
Were nothing but to wast night, day, and time,
Therefore breuitie is the soule of wit,
And tediousnes the lymmes and outward florishes,
I will be briefe, your noble sonne is mad:
Mad call I it, for to define true madnes,
What ist but to be nothing els but mad,
But let that goe.
''//Quee//.'' More matter with lesse art.
''//Pol//.'' Maddam, I sweare I vse no art at all,
That hee's mad tis true, tis true, tis pitty,
And pitty tis tis true, a foolish figure,
But farewell it, for I will vse no art.
Mad let vs graunt him then, and now remaines
That we find out the cause of this effect,
Or rather say, the cause of this defect,
For this effect defectiue comes by cause:
Thus it remaines, and the remainder thus
Perpend,
I haue a daughter, haue while she is mine,
Who in her dutie and obedience, marke,
Hath giuen me this, now gather and surmise,
//To the Celestiall and my soules Idoll, the most beau//-
//tified// Ophelia, //that's an ill phrase, a vile phrase,//
//beautified is a vile phrase, but you shall heare: thus in//
//her excellent white bosome, these &c//.
''//Quee//.'' Came this from //Hamlet// to her?
''//Pol//.'' Good Maddam stay awhile, I will be faithfull,
|dialogWithStageDirectionFisco|k
|//Doubt thou the starres are fire//,|[//Letter//.]|
//Doubt that the Sunne doth moue//,
//Doubt truth to be a lyer//,
//But neuer doubt I loue//.
O deere //Ophelia//, I am ill at these numbers, I haue not art to recken
my grones, but that I loue thee best, ô most best belieue it, adew.
|dialogWithStageDirectionFisco|k
|Thine euermore most deere Lady, whilst this machine is to him.| //Hamlet//.|
''//Pol//.'' This in obedience hath my daughter showne me,
And more about hath his solicitings
As they fell out by time, by meanes, and place,
All giuen to mine eare.
''//King//.'' But how hath she receiu'd his loue?
''//Pol//.'' What doe you thinke of me?
''//King//.'' As of a man faithfull and honorable.
''//Pol//.'' I would faine proue so, but what might you thinke
When I had seene this hote loue on the wing,
As I perceiu'd it (I must tell you that)
Before my daughter told me, what might you,
Or my deere Maiestie your Queene heere thinke,
If I had playd the Deske, or Table booke,
Or giuen my hart a working mute and dumbe,
Or lookt vppon this loue with idle sight,
What might you thinke? no, I went round to worke,
And my young Mistris thus I did bespeake,
Lord //Hamlet// is a Prince out of thy star,
This must not be: and then I prescripts gaue her
That she should locke her selfe from her resort,
Admit no messengers, receiue no tokens,
Which done, she tooke the fruites of my aduise:
And he repell'd, a short tale to make,
Fell into a sadnes, then into a fast,
Thence to a wath, thence into a weakenes,
Thence to lightnes, and by this declension,
Into the madnes wherein now he raues,
And all we mourne for.
''//King//.'' Doe you thinke this?
''//Quee//.'' It may be very like.
''//Pol//.'' Hath there been such a time, I would faine know that,
That I haue positiuely said, tis so,
When it proou'd otherwise?
''//King//.'' Not that I know.
''//Pol//.'' Take this, from this, if this be otherwise;
If circumstances leade me, I will finde
Where truth is hid, though it were hid indeede
Within the Center.
''//King//.'' How may we try it further?
''//Pol//.'' You know sometimes he walkes foure houres together
Heere in the Lobby.
''//Quee//.'' So he dooes indeede.
''//Pol//.'' At such a time, Ile loose my daughter to him,
Be you and I behind an Arras then,
Marke the encounter, if he loue her not,
And be not from his reason falne thereon
Let me be no assistant for a state
But keepe a farme and carters.
''//King//.'' We will try it.
@@.stageDirectionFisco
//Enter Hamlet//.
@@
''//Quee//.'' But looke where sadly the poore wretch comes reading.
|dialogWithStageDirectionFisco|k
|''//Pol//.'' Away, I doe beseech you both away,|//Exit King and Queene//.|
Ile bord him presently, oh giue me leaue,
How dooes my good Lord //Hamlet//?
''//Ham//.'' Well, God a mercy.
''//Pol//.'' Doe you knowe me my Lord?
''//Ham//.'' Excellent well, you are a Fishmonger.
''//Pol//.'' Not I my Lord.
''//Ham//.'' Then I would you were so honest a man.
''//Pol//.'' Honest my Lord.
''//Ham//.'' I sir to be honest as this world goes,
Is to be one man pickt out of tenne thousand.
''//Pol//.'' That's very true my Lord.
''//Ham//.'' For if the sunne breede maggots in a dead dogge, being a
good kissing carrion. Haue you a daughter?
''//Pol//.'' I haue my Lord.
''//Ham//.'' Let her not walke i'th Sunne, conception is a blessing,
But as your daughter may conceaue, friend looke to't.
''//Pol//.'' How say you by that, still harping on my daughter, yet hee
knewe me not at first, a sayd I was a Fishmonger, a is farre gone,
and truly in my youth, I suffred much extremity for loue, very
neere this. Ile speake to him againe. What doe you reade my
Lord.
''//Ham//.'' Words, words, words.
''//Pol//.'' What is the matter my Lord.
''//Ham//.'' Betweene who.
''//Pol//.'' I meane the matter that you reade my Lord.
''//Ham//.'' Slaunders sir; for the satericall rogue sayes heere, that old
men haue gray beards, that their faces are wrinckled, their eyes
purging thick Amber, & plumtree gum, & that they haue a plen-
tifull lacke of wit, together with most weake hams, all which sir
though I most powerfully and potentlie belieue, yet I hold it not
honesty to haue it thus set downe, for your selfe sir shall growe old
as I am: if like a Crab you could goe backward.
''//Pol//.'' Though this be madnesse, yet there is method in't, will you
walke out of the ayre my Lord?
''//Ham//.'' Into my graue.
''//Pol//.'' Indeede that's out of the ayre; how pregnant sometimes
his replies are, a happines that often madnesse hits on, which reason
and sanctity could not so prosperously be deliuered of. I will leaue
him and my daughter. My Lord, I will take my leaue of you.
''//Ham//.'' You cannot take from mee any thing that I will not more
willingly part withall: except my life, except my life, except my
|dialogWithStageDirectionFisco|k
|life.|//Enter Guyldersterne, and Rosencraus//.|
''//Pol//.'' Fare you well my Lord.
''//Ham//.'' These tedious old fooles.
''//Pol//.'' You goe to seeke the Lord //Hamlet//, there he is.
''//Ros//.'' God saue you sir.
''//Guyl//.'' My honor'd Lord.
''//Ros//.'' My most deere Lord.
''//Ham//.'' My extent good friends, how doost thou //Guyldersterne//?
A //Rosencraus//, good lads how doe you both?
''//Ros//.'' As the indifferent children of the earth.
''//Guyl//.'' Happy, in that we are not euer happy on Fortunes lap,
We are not the very button.
''//Ham//.'' Nor the soles of her shooe.
''//Ros//.'' Neither my Lord.
''//Ham//.'' Then you liue about her wast, or in the middle of her fauors.
''//Guyl//.'' Faith her priuates we.
''//Ham//.'' In the secret parts of Fortune, oh most true, she is a strumpet,
What newes?
''//Ros//.'' None my Lord, but the worlds growne honest.
''//Ham//.'' Then is Doomes day neere, but your newes is not true;
But in the beaten way of friendship, what make you at //Elsonoure//?
''//Ros//.'' To visit you my Lord, no other occasion.
''//Ham//.'' Begger that I am, I am euer poore in thankes, but I thanke
you, and sure deare friends, my thankes are too deare a halfpeny:
were you not sent for? is it your owne inclining? is it a free visitati-
on? come, come, deale iustly with me, come, come, nay speake.
''//Guy//.'' What should we say my Lord?
''//Ham//.'' Any thing but to'th purpose: you were sent for, and there is
a kind of confession in your lookes, which your modesties haue not
craft enough to cullour, I know the good King and Queene haue
sent for you.
''//Ros//.'' To what end my Lord?
''//Ham//.'' That you must teach me: but let me coniure you, by the
rights of our fellowship, by the consonancie of our youth, by the
obligation of our euer preserued loue; and by what more deare a
better proposer can charge you withall, bee euen and direct with
me whether you were sent for or no.
''//Ros//.'' What say you.
''//Ham//.'' Nay then I haue an eye of you? if you loue me hold not of.
''//Guyl//.'' My Lord we were sent for.
''//Ham//.'' I will tell you why, so shall my anticipation preuent your
discouery, and your secrecie to the King & Queene moult no fea-
ther, I haue of late, but wherefore I knowe not, lost all my mirth,
forgon all custome of exercises: and indeede it goes so heauily with
my disposition, that this goodly frame the earth, seemes to mee a
sterill promontorie, this most excellent Canopie the ayre, looke
you, this braue orehanging firmament, this maiesticall roofe fret-
ted with golden fire, why it appeareth nothing to me but a foule
and pestilent congregation of vapoures. What peece of worke is a
man, how noble in reason, how infinit in faculties, in forme and
moouing, how expresse and admirable in action, how like an An-
gell in apprehension, how like a God: the beautie of the world; the
paragon of Annimales; and yet to me, what is this Quintessence of
dust: man delights not me, nor women neither, though by your
smilling, you seeme to say so.
''//Ros//.'' My Lord, there was no such stuffe in my thoughts.
''//Ham//.'' Why did yee laugh then, when I sayd man delights not me.
''//Ros//.'' To thinke my Lord if you delight not in man, what Lenton
entertainment the players shall receaue from you, we coted them
on the way, and hether are they comming to offer you seruice.
''//Ham//.'' He that playes the King shal be welcome, his Maiestie shal
haue tribute on me, the aduenterous Knight shall vse his foyle and
target, the Louer shall not sigh gratis, the humorus Man shall end
his part in peace, and the Lady shall say her minde freely: or the
black verse shall hault for't. What players are they?
''//Ros//.'' Euen those you were wont to take such delight in, the Trage-
dians of the Citty.
''//Ham//.'' How chances it they trauaile? their residence both in repu-
tation, and profit was better both wayes.
''//Ros//.'' I thinke their inhibition, comes by the meanes of the late
innouasion.
''//Ham//.'' Doe they hold the same estimation they did when I was in
the Citty; are they so followed.
''//Ros//.'' No indeede are they not.
''//Ham//.'' It is not very strange, for my Vncle is King of Denmarke, and
those that would make mouths at him while my father liued, giue
twenty, fortie, fifty, a hundred duckets a peece, for his Picture
in little, s'bloud there is somthing in this more then naturall, if
|dialogWithStageDirectionFisco|k
|Philosophie could find it out.|//A Florish//.|
''//Guyl//.'' There are the players.
''//Ham//.'' Gentlemen you are welcome to //Elsonoure//, your hands come
then, th'appurtenance of welcome is fashion and ceremonie; let
mee comply with you in this garb: let me extent to the players,
which I tell you must showe fairely outwards, should more ap-
peare like entertainment then yours? you are welcome: but my
Vncle-father, and Aunt-mother, are deceaued.
''//Guyl//.'' In what my deare Lord.
''//Ham//.'' I am but mad North North west; when the wind is Sou-
therly, I knowe a Hauke, from a hand saw.
@@.stageDirectionFisco
//Enter Polonius//.
@@
''//Pol//.'' Well be with you Gentlemen.
''//Ham//.'' Harke you //Guyldensterne//, and you to, at each eare a hearer,
that great baby you see there is not yet out of his swadling clouts.
''//Ros//.'' Happily he is the second time come to them, for they say an
old man is twice a child.
''//Ham//.'' I will prophecy, he comes to tell me of the players, mark it,
You say right sir, a Monday morning, t'was then indeede.
''//Pol//.'' My Lord I haue newes to tell you.
''//Ham//.'' My Lord I haue newes to tel you: when //Rossius// was an Actor
in Rome.
''//Pol//.'' The Actors are come hether my Lord.
''//Ham//.'' Buz, buz.
''//Pol//.'' Vppon my honor.
''//Ham//.'' Then came each Actor on his Asse.
''//Pol//.'' The best actors in the world, either for Tragedie, Comedy,
History, Pastorall, Pastorall Comicall, Historicall Pastorall, scene
indeuidible, or Poem vnlimited. //Sceneca// cannot be too heauy, nor
//Plautus// too light for the lawe of writ, and the liberty: these are the
only men.
''//Ham//.'' O //Ieptha// Iudge of Israell, what a treasure had'st thou?
''//Pol//.'' What a treasure had he my Lord?
''//Ham//.'' Why one faire daughter and no more, the which he loued
passing well.
''//Pol//.'' Still on my daughter.
''//Ham//.'' Am I not i'th right old //Ieptha//?
''//Pol//.'' If you call me //Ieptha// my Lord, I haue a daughter that I loue passing well.
''//Ham//.'' Nay that followes not.
''//Pol//.'' What followes then my Lord?
''//Ham//.'' Why as by lot God wot, and then you knowe it came to
passe, as most like it was; the first rowe of the pious chanson will
showe you more, for looke where my abridgment comes.
@@.stageDirectionFisco
//Enter the////Players//.
@@
''//Ham//.'' You are welcome maisters, welcome all, I am glad to see thee
well, welcome good friends, oh old friend, why thy face is va-
lanct since I saw thee last, com'st thou to beard me in Denmark?
what my young Lady and mistris, by lady your Ladishippe is
nerer to heauen, then when I saw you last by the altitude of a
chopine, pray God your voyce like a peece of vncurrant gold,
bee not crackt within the ring: maisters you are all welcome,
weele ento't like friendly Fankners, fly at any thing we see,
weele haue a speech straite, come giue vs a tast of your quality,
come a passionate speech.
''//Player//.'' What speech my good Lord?
''//Ham//.'' I heard thee speake me a speech once, but it was neuer acted,
or if it was, not aboue once, for the play I remember pleasd not
the million, t'was cauiary to the generall, but it was as I receaued
it & others, whose iudgements in such matters cried in the top
of mine, an excellent play, well digested in the scenes, set downe
with as much modestie as cunning. I remember one sayd there
were no sallets in the lines, to make the matter sauory, nor no
matter in the phrase that might indite the author of affection,
but cald it an honest method, as wholesome as sweete, & by very
much, more handsome then fine: one speech in't I chiefely loued,
t'was //Aeneas// talke to //Dido//, & there about of it especially when he
speakes of //Priams// slaughter, if it liue in your memory begin at
this line, let me see, let me see, the rugged //Pirbus// like Th'ircanian
beast, tis not so, it beginnes with //Pirrhus//, the rugged //Pirrhus//, he whose
sable Armes,
Black as his purpose did the night resemble,
When he lay couched in th'omynous horse,
Hath now this dread and black complection smeard,
With heraldy more dismall head to foote,
Now is he totall Gules horridly trickt
With blood of fathers, mothers, daughters, sonnes,
Bak'd and empasted with the parching streetes
That lend a tirranus and a damned light
To their Lords murther, rosted in wrath and fire,
And thus ore-cised with coagulate gore,
With eyes like Carbunkles, the hellish //Phirrhus//
Old grandsire //Priam// seekes; so proceede you.
''//Pol//.'' Foregod my Lord well spoken, with good accent and good discretion.
''//Play//.'' Anon he finds him,
Striking too short at Greekes, his anticke sword
Rebellious to his arme, lies where it fals,
Repugnant to commaund; vnequall matcht,
//Pirrhus// at //Priam// driues, in rage strikes wide,
But with the whiffe and winde of his fell sword,
Th'vnnerued father fals:
Seeming to feele this blowe, with flaming top
Stoopes to his base; and with a hiddious crash
Takes prisoner //Pirrhus// eare, for loe his sword
Which was declining on the milkie head
Of reuerent //Priam//, seem'd i'th ayre to stick,
So as a painted tirant //Pirrhus// stood
Like a newtrall to his will and matter,
Did nothing:
But as we often see against some storme,
A silence in the heauens, the racke stand still,
The bold winds speechlesse, and the orbe belowe
As hush as death, anon the dreadfull thunder
Doth rend the region, so after //Pirrhus// pause,
A rowsed vengeance sets him new a worke,
And neuer did the Cyclops hammers fall,
On //Marses// Armor forg'd for proofe eterne,
With lesse remorse then //Pirrhus// bleeding sword
Now falls on //Priam//.
Out, out, thou strumpet Fortune, all you gods,
In generall sinod take away her power,
Breake all the spokes, and follies from her wheele,
And boule the round naue downe the hill of heauen
As lowe as to the fiends.
''//Pol//.'' This is too long.
''//Ham//.'' It shall to the barbers with your beard; prethee say on, he's
for a Iigge, or a tale of bawdry, or he sleepes, say on, come to //Hecuba//.
''//Play//.'' But who, a woe, had seene the mobled Queene,
''//Ham//.'' The mobled Queene.
''//Pol//.'' That's good.
''//Play//'' Runne barefoote vp and downe, threatning the flames
With //Bison// rehume, a clout vppon that head
Where late the Diadem stood, and for a robe,
About her lanck and all ore-teamed loynes,
A blancket in the alarme of feare caught vp,
Who this had seene, with tongue in venom steept,
Gainst fortunes state would treason haue pronounst;
But
if the gods themselues did see her then,
When she saw //Pirrhus// make malicious sport
In mincing with his sword her husband limmes,
The instant burst of clamor that she made,
Vnlesse things mortall mooue them not at all,
Would haue made milch the burning eyes of heauen
And passion in the gods.
''//Pol//.'' Looke where he has not turnd his cullour, and has teares in's
eyes, prethee no more.
''//Ham//.'' Tis well, Ile haue thee speake out the rest of this soone,
Good my Lord will you see the players well bestowed; doe you
heare, let them be well vsed, for they are the abstract and breefe
Chronicles of the time; after your death you were better haue a
bad Epitaph then their ill report while you liue.
''//Pol//.'' My Lord, I will vse them according to their desert.
''//Ham//.'' Gods bodkin man, much better, vse euery man after his de-
sert, & who shall scape whipping, vse them after your owne honor
and dignity, the lesse they deserue the more merrit is in your boun-
ty. Take them in.
''//Pol//.'' Come sirs.
''//Ham//.'' Follow him friends, weele heare a play to morrowe; dost thou
heare me old friend, can you play the murther of //Gonzago//?
''//Play//.'' I my Lord.
''//Ham//.'' Weele hate to morrowe night, you could for neede study
a speech of some dosen lines, or sixteene lines, which I would set
downe and insert in't, could you not?
''//Play//.'' I my Lord.
''//Ham//.'' Very well, followe that Lord, & looke you mock him not.
My good friends, Ile leaue you tell night, you are welcome to //Elson//-
|dialogWithStageDirectionFisco|k
|//oure//.|//Exeunt Pol. and Players//.|
|dialogWithStageDirectionFisco|k
| ||
|dialogWithStageDirectionFisco|k
|''//Ros//.'' Good my Lord.|//Exeunt//.|
''//Ham//.'' I so God buy to you, now I am alone,
O what a rogue and pesant slaue am I.
Is it not monstrous that this player heere
But in a fixion, in a dreame of passion
Could force his soule so to his owne conceit
That from her working all the visage wand,
Teares in his eyes, distraction in his aspect,
A broken voyce, an his whole function suting
With formes to his conceit; and all for nothing,
For //Hecuba//.
What's //Hecuba// to him, or he to her,
That he should weepe for her? what would he doe
Had he the motiue, and that for passion
That I haue? he would drowne the stage with teares,
And cleaue the generall eare with horrid speech,
Make mad the guilty, and appale the free,
Confound the ignorant, and amaze indeede
The very faculties of eyes and eares; yet I,
A dull and muddy metteld raskall peake,
Like Iohn-a-dreames, vnpregnant of my cause,
And can say nothing; no not for a King,
Vpon whose property and most deare life,
A damn'd defeate was made: am I a coward,
Who cals me villaine, breakes my pate a crosse,
Pluckes off my beard, and blowes it in my face,
Twekes me by the nose, giues me the lie i'th thraote
As deepe as to the lunges, who does me this,
Hah, s'wounds I should take it//:// for it cannot be
But I am pidgion liuerd, and lack gall
To make oppression bitter, or ere this
I should a fatted all the region kytes
With this slaues offall, bloody, baudy villaine,
Remorslesse, trecherous, lecherous, kindlesse villaine.
Why what an Asse am I, this is most braue,
That I the sonne of a deere murthered,
Prompted to my reuenge by heauen and hell,
Must like a whore vnpacke my hart with words,
And fall a cursing like a very drabbe; a stallyon, fie vppont, foh.
About my braines; hum, I haue heard,
That guilty creatures sitting at a play,
Haue by the very cunning of the scene,
Beene strooke so to the soule, that presently
They haue proclaim'd their malefactions:
For murther, though it haue no tongue will speake
With most miraculous organ: Ile haue these Players
Play something like the murther of my father
Before mine Vncle, Ile obserue his lookes,
Ile tent him to the quicke, if a doe blench
I know my course. The spirit that I haue seene
May be a deale, and the deale hath power
T'assume a pleasing shape, yea, and perhaps,
Out of my weakenes, and my melancholy,
As he is very potent with such spirits,
Abuses me to damne me; Ile haue grounds
More relatiue then this, the play's the thing
|dialogWithStageDirectionFisco|k
|Wherein Ile catch the conscience of the King.|//Exit//.|
@@.stageDirectionFisco
// Enter King, Queene, Polonius, Ophelia, Ro-//
@@
@@.stageDirectionFisco
//sincrance//, //Guildenstern, and Lords//.
@@
''//King//.'' And can you by no drift of circumstance
Get from him why he puts on this Confusion:
Grating so harshly all his dayes of quiet
With turbulent and dangerous Lunacy.
''//Rosin//.'' He does confesse he feeles himselfe distracted,
But from what cause he will by no meanes speake.
''//Guil//.'' Nor do we finde him forward to be sounded,
But with a crafty Madnesse keepes aloofe:
When we would bring him on to some Confession
Of his true state.
''//Qu//.'' Did he receiue you well?
''//Rosin//.'' Most like a Gentleman.
''//Guild//.'' But with much forcing of his disposition.
''//Rosin//.'' Niggard of question, but of our demands
Most free in his reply.
''//Qu//.'' Did you assay him to any pastime?
''//Rosin//.'' Madam, it so fell out, that certaine Players
We ore-wrought on the way: of these we told him,
And there did seeme in him a kinde of ioy
To heare of it: They are about the Court,
And (as I thinke) they haue already order
This night to play before him.
''//Pol//.'' 'Tis most true:
And he beseech'd me to intreate your Maiesties
To heare, and see the matter.
''//King//.'' With all my heart, and it doth much content me
To heare him so inclin'd. Good Gentlemen,
Giue him a further edge, and driue his purpose on
To these delights.
|dialogWithStageDirectionFisco|k
|''//Rosin//.'' We shall my Lord.|//Exeunt//.|
''//King//.'' Sweet //Gertrude// leaue vs too,
For we haue closely sent for //Hamlet// hither,
That he, as 'twere by accident, may there
Affront //Ophelia//. Her Father, and my selfe (lawful espials)
Will so bestow our selues, that seeing vnseene
We may of their encounter frankely iudge,
And gather by him, as he is behaued,
If't be th'affliction of his loue, or no.
That thus he suffers for.
''//Qu//.'' I shall obey you,
And for your part //Ophelia//, I do wish
That your good Beauties be the happy cause
Of //Hamlets// wildenesse: so shall I hope your Vertues
Will bring him to his wonted way againe,
To both your Honors.
''//Ophe//.'' Madam, I wish it may.
''//Pol//.'' //Ophelia//, walke you heere. Gracious so please ye
We will bestow our selues: Reade on this booke,
That shew of such an exercise may colour
Your lonelinesse. We are oft too blame in this,
'Tis too much prou'd, that with Deuotions visage,
And pious Action, we do surge o're
The diuell himselfe.
''//King//.'' Oh 'tis true:
How smart a lash that speech doth giue my Conscience?
The Harlots Cheeke beautied with plaist'ring Art
Is not more vgly to the thing that helpes it,
Then is my deede, to my most painted word.
Oh heauie burthen!
''//Pol//.'' I heare him comming, let's withdraw my Lord.
|dialogWithStageDirectionFisco|k
||//Exeunt//.|
@@.stageDirectionFisco
// Enter Hamlet//.
@@
''//Ham//.'' To be, or not to be, that is the Question:
Whether 'tis Nobler in the minde to suffer
The Slings and Arrowes of outragious Fortune,
Or to take Armes against a Sea of troubles,
And by opposing end them: to dye, to sleepe
No more; and by a sleepe, to say we end
The Heart-ake, and the thousand Naturall shockes
That Flesh is heyre too? 'Tis a consummation
Deuoutly to be wish'd. To dye to sleepe,
To sleepe, perchance to Dreame; I, there's the rub,
For in that sleepe of death, what dreames may come,
When we haue shufflel'd off this mortall coile,
Must giue vs pawse. There's the respect
That makes Calamity of so long life:
For who would beare the Whips and Scornes of time,
The Oppressors wrong, the poore mans Contumely,
The pangs of dispriz'd Loue, the Lawes delay,
The insolence of Office, and the Spurnes
That patient merit of the vnworthy takes,
When he himselfe might his //Quietus// make
With a bare Bodkin? Who would these Fardles beare
To grunt and sweat vnder a weary life,
But that the dread of something after death,
The vndiscouered Countrey, from whose Borne
No Traueller returnes, Puzels the will,
And makes vs rather beare those illes we haue,
Then flye to others that we know not of.
Thus Conscience does make Cowards of vs all,
And thus the Natiue hew of Resolution
Is sicklied o're, with the pale cast of Thought,
And enterprizes of great pith and moment,
With this regard their Currants turne away,
And loose the name of Action. Soft you now,
The faire //Ophelia//? Nimph, in thy Orizons
Be all my sinnes remembred.
''//Ophe//.'' Good my Lord,
How does your Honor for this many a day?
''//Ham//.'' I humbly thanke you: well, well, well.
''//Ophe//.'' My Lord, I haue Remembrances of yours,
That I haue longed long to re-deliuer.
I pray you now, receiue them.
''//Ham//.'' No, no, I neuer gaue you ought.
''//Ophe//.'' My honor'd Lord, I know right well you did,
And with them words of so sweet breath compos'd,
As made the things more rich, then perfume left:
Take these againe, for to the Noble minde
Rich gifts wax poore, when giuers proue vnkinde.
There my Lord.
''//Ham//.'' Ha, ha: Are you honest?
''//Ophe//.'' My Lord.
''//Ham//.'' Are you faire?
''//Ophe//.'' What meanes your Lordship?
''//Ham//.'' That if you be honest and faire, your Honesty
should admit no discourse to your Beautie.
''//Ophe//.'' Could Beautie my Lord, haue better Comerce
then your Honestie?
''//Ham//.'' I trulie: for the power of Beautie, will sooner
transforme Honestie from what it is, to a Bawd, then the
force of Honestie can translate Beautie into his likenesse.
This was sometime a Paradox, but now the time giues it
proofe. I did loue you once.
''//Ophe//.'' Indeed my Lord, you made me beleeue so.
''//Ham//.'' You should not haue beleeued me. For vertue
cannot so innocculate our old stocke, but we shall rellish
of it. I loued you not.
''//Ophe//.'' I was the more deceiued.
''//Ham//.'' Get thee to a Nunnerie. Why would'st thou
be a breeder of Sinners? I am my selfe indifferent honest,
but yet I could accuse me of such things, that it were bet-
ter my Mother had not borne me. I am very prowd, re-
uengefull, Ambitious, with more offences at my becke,
then I haue thoughts to put them in imagination, to giue
them shape, or time to acte them in. What should such
Fellowes as I do, crawling betweene Heauen and Earth.
We are arrant Knaues all, beleeue none of vs. Goe thy
wayes to a Nunnery. Where's your Father?
''//Ophe//.'' At home, my Lord.
''//Ham//.'' Let the doores be shut vpon him, that he may
play the Foole no way, but in's owne house. Farewell.
''//Ophe//.'' O helpe him, you sweet Heauens.
''//Ham//.'' If thou doest Marry, Ile giue thee this Plague
for thy Dowrie. Be thou as chast as Ice, as pure as Snow,
thou shalt not escape Calumny. Get thee to a Nunnery.
Go, Farewell. Or if thou wilt needs Marry, marry a fool:
for Wise men know well enough, what monsters you
make of them. To a Nunnery go, and quickly too. Far-
well.
''//Ophe//.'' O heauenly Powers, restore him.
''//Ham//.'' I haue heard of your pratlings too wel enough.
God has giuen you one pace, and you make your selfe an-
other: you gidge, you amble, and you lispe, and nickname
Gods creatures, and make your Wantonnesse, your Ig-
norance. Go too, Ile no more on't, it hath made me mad.
I say, we will haue no more Marriages. Those that are
married already, all but one shall liue, the rest shall keep
|dialogWithStageDirectionFisco|k
|as they are. To a Nunnery, go.|//Exit Hamlet//.|
''//Ophe//.'' O what a Noble minde is heere o're-throwne?
The Courtiers, Soldiers, Schollers: Eye, tongue, sword,
Th'expectansie and Rose of the faire State,
The glasse of Fashion, and the mould of Forme,
Th'obseru'd of all Obseruers, quite, quite downe.
Haue I of Ladies most deiect and wretched,
That suck'd the Honie of his Musicke Vowes:
Now see that Noble, and most Soueraigne Reason,
Like sweet Bels iangled out of tune, and harsh,
That vnmatch'd Forme and Feature of blowne youth,
Blasted with extasie. Oh woe is me,
T'haue seene what I haue seene: see what I see.
@@.stageDirectionFisco
// Enter King, and Polonius//.
@@
''//King//.'' Loue? His affections do not that way tend,
Nor what he spake, though it lack'd Forme a little,
Was not like Madnesse. There's something in his soule?
O're which his Melancholly sits on brood,
And I do doubt the hatch, and the disclose
Will be some danger, which to preuent
I haue in quicke determination
Thus set it downe. He shall with speed to England
For the demand of our neglected Tribute:
Haply the Seas and Countries different
With variable Obiects, shall expell
This something setled matter in his heart:
Whereon his Braines still beating, puts him thus
From fashion of himselfe. What thinke you on't?
''//Pol//.'' It shall do well. But yet do I beleeue
The Origin and Commencement of this greefe
Sprung from neglected loue. How now //Ophelia//?
You neede not tell vs, what Lord //Hamlet// saide,
We heard it all. My Lord, do as you please,
But if you hold it fit after the Play,
Let his Queene Mother all alone intreat him
To shew his Greefes: let her be round with him,
And Ile be plac'd so, please you in the eare
Of all their Conference. If she finde him not,
To England send him: Or confine him where
Your wisedome best shall thinke.
''//King//.'' It shall be so:
Madnesse in great Ones, must not vnwatch'd go.
|dialogWithStageDirectionFisco|k
||//Exeunt//.|
//Enter KING CLAUDIUS, QUEEN GERTRUDE, POLONIUS, OPHELIA, ROSENCRANTZ, and GUILDENSTERN//
''KING CLAUDIUS''
|3.1.1|And can you, by no drift of circumstance,|
|3.1.2|Get from him why he puts on this confusion,|
|3.1.3|Grating so harshly all his days of quiet|
|3.1.4|With turbulent and dangerous lunacy?|
''ROSENCRANTZ''
|3.1.5|He does confess he feels himself distracted;|
|3.1.6|But from what cause he will by no means speak.|
''GUILDENSTERN''
|3.1.7|Nor do we find him forward to be sounded,|
|3.1.8|But, with a crafty madness, keeps aloof,|
|3.1.9|When we would bring him on to some confession|
|3.1.10|Of his true state.|
''QUEEN GERTRUDE''
|3.1.11| Did he receive you well?|
''ROSENCRANTZ''
|3.1.12|Most like a gentleman.|
''GUILDENSTERN''
|3.1.13|But with much forcing of his disposition.|
''ROSENCRANTZ''
|3.1.14|Niggard of question; but, of our demands,|
|3.1.15|Most free in his reply.|
''QUEEN GERTRUDE''
|3.1.16|Did you assay him?|
|3.1.17|To any pastime?|
''ROSENCRANTZ''
|3.1.18|Madam, it so fell out, that certain players|
|3.1.19|We o'er-raught on the way: of these we told him;|
|3.1.20|And there did seem in him a kind of joy|
|3.1.21|To hear of it: they are about the court,|
|3.1.22|And, as I think, they have already order|
|3.1.23|This night to play before him.|
''LORD POLONIUS''
|3.1.24|'Tis most true:|
|3.1.25|And he beseech'd me to entreat your majesties|
|3.1.26|To hear and see the matter.|
''KING CLAUDIUS''
|3.1.27|With all my heart; and it doth much content me|
|3.1.28|To hear him so inclined.|
|3.1.29|Good gentlemen, give him a further edge,|
|3.1.30|And drive his purpose on to these delights.|
''ROSENCRANTZ''
|3.1.31|We shall, my lord.|
//Exeunt ROSENCRANTZ and GUILDENSTERN//
''KING CLAUDIUS''
|3.1.32| Sweet Gertrude, leave us too;|
|3.1.33|For we have closely sent for Hamlet hither,|
|3.1.34|That he, as 'twere by accident, may here|
|3.1.35|Affront Ophelia:|
|3.1.36|Her father and myself, lawful espials,|
|3.1.37|Will so bestow ourselves that, seeing, unseen,|
|3.1.38|We may of their encounter frankly judge,|
|3.1.39|And gather by him, as he is behaved,|
|3.1.40|If 't be the affliction of his love or no|
|3.1.41|That thus he suffers for.|
''QUEEN GERTRUDE''
|3.1.42|I shall obey you.|
|3.1.43|And for your part, Ophelia, I do wish|
|3.1.44|That your good beauties be the happy cause|
|3.1.45|Of Hamlet's wildness: so shall I hope your virtues|
|3.1.46|Will bring him to his wonted way again,|
|3.1.47|To both your honours.|
''OPHELIA''
|3.1.48|Madam, I wish it may.|
//Exit QUEEN GERTRUDE//
''LORD POLONIUS''
|3.1.49|Ophelia, walk you here. Gracious, so please you,|
|3.1.50|We will bestow ourselves.|
//To OPHELIA//
|3.1.51|Read on this book;|
|3.1.52|That show of such an exercise may colour|
|3.1.53|Your loneliness. We are oft to blame in this,--|
|3.1.54|'Tis too much proved--that with devotion's visage|
|3.1.55|And pious action we do sugar o'er|
|3.1.56|The devil himself.|
''KING CLAUDIUS''
|3.1.57|[Aside] O, 'tis too true!|
|3.1.58|How smart a lash that speech doth give my conscience!|
|3.1.59|The harlot's cheek, beautied with plastering art,|
|3.1.60|Is not more ugly to the thing that helps it|
|3.1.61|Than is my deed to my most painted word:|
|3.1.62|O heavy burthen!|
''LORD POLONIUS''
|3.1.63|I hear him coming: let's withdraw, my lord.|
//Exeunt KING CLAUDIUS and POLONIUS//
//Enter HAMLET//
''HAMLET''
|3.1.64|To be, or not to be: that is the question:|
|3.1.65|Whether 'tis nobler in the mind to suffer|
|3.1.66|The slings and arrows of outrageous fortune,|
|3.1.67|Or to take arms against a sea of troubles,|
|3.1.68|And by opposing end them? To die: to sleep;|
|3.1.69|No more; and by a sleep to say we end|
|3.1.70|The heart-ache and the thousand natural shocks|
|3.1.71|That flesh is heir to, 'tis a consummation|
|3.1.72|Devoutly to be wish'd. To die, to sleep;|
|3.1.73|To sleep: perchance to dream: ay, there's the rub;|
|3.1.74|For in that sleep of death what dreams may come|
|3.1.75|When we have shuffled off this mortal coil,|
|3.1.76|Must give us pause: there's the respect|
|3.1.77|That makes calamity of so long life;|
|3.1.78|For who would bear the whips and scorns of time,|
|3.1.79|The oppressor's wrong, the proud man's contumely,|
|3.1.80|The pangs of despised love, the law's delay,|
|3.1.81|The insolence of office and the spurns|
|3.1.82|That patient merit of the unworthy takes,|
|3.1.83|When he himself might his quietus make|
|3.1.84|With a bare bodkin? who would fardels bear,|
|3.1.85|To grunt and sweat under a weary life,|
|3.1.86|But that the dread of something after death,|
|3.1.87|The undiscover'd country from whose bourn|
|3.1.88|No traveller returns, puzzles the will|
|3.1.89|And makes us rather bear those ills we have|
|3.1.90|Than fly to others that we know not of?|
|3.1.91|Thus conscience does make cowards of us all;|
|3.1.92|And thus the native hue of resolution|
|3.1.93|Is sicklied o'er with the pale cast of thought,|
|3.1.94|And enterprises of great pith and moment|
|3.1.95|With this regard their currents turn awry,|
|3.1.96|And lose the name of action.--Soft you now!|
|3.1.97|The fair Ophelia! Nymph, in thy orisons|
|3.1.98|Be all my sins remember'd.|
''OPHELIA''
|3.1.99|Good my lord,|
|3.1.100|How does your honour for this many a day?|
''HAMLET''
|3.1.101|I humbly thank you; well, well, well.|
''OPHELIA''
|3.1.102|My lord, I have remembrances of yours,|
|3.1.103|That I have longed long to re-deliver;|
|3.1.104|I pray you, now receive them.|
''HAMLET''
|3.1.105|No, not I;|
|3.1.106|I never gave you aught.|
''OPHELIA''
|3.1.107|My honour'd lord, you know right well you did;|
|3.1.108|And, with them, words of so sweet breath composed|
|3.1.109|As made the things more rich: their perfume lost,|
|3.1.110|Take these again; for to the noble mind|
|3.1.111|Rich gifts wax poor when givers prove unkind.|
|3.1.112|There, my lord.|
''HAMLET''
|3.1.113|Ha, ha! are you honest?|
''OPHELIA''
|3.1.114|My lord?|
''HAMLET''
|3.1.115|Are you fair?|
''OPHELIA''
|3.1.116|What means your lordship?|
''HAMLET''
|3.1.117|That if you be honest and fair, your honesty should|
|3.1.118|admit no discourse to your beauty.|
''OPHELIA''
|3.1.119|Could beauty, my lord, have better commerce than|
|3.1.120|with honesty?|
''HAMLET''
|3.1.121|Ay, truly; for the power of beauty will sooner|
|3.1.122|transform honesty from what it is to a bawd than the|
|3.1.123|force of honesty can translate beauty into his|
|3.1.124|likeness: this was sometime a paradox, but now the|
|3.1.125|time gives it proof. I did love you once.|
''OPHELIA''
|3.1.126|Indeed, my lord, you made me believe so.|
''HAMLET''
|3.1.127|You should not have believed me; for virtue cannot|
|3.1.128|so inoculate our old stock but we shall relish of|
|3.1.129|it: I loved you not.|
''OPHELIA''
|3.1.130|I was the more deceived.|
''HAMLET''
|3.1.131|Get thee to a nunnery: why wouldst thou be a|
|3.1.132|breeder of sinners? I am myself indifferent honest;|
|3.1.133|but yet I could accuse me of such things that it|
|3.1.134|were better my mother had not borne me: I am very|
|3.1.135|proud, revengeful, ambitious, with more offences at|
|3.1.136|my beck than I have thoughts to put them in,|
|3.1.137|imagination to give them shape, or time to act them|
|3.1.138|in. What should such fellows as I do crawling|
|3.1.139|between earth and heaven? We are arrant knaves,|
|3.1.140|all; believe none of us. Go thy ways to a nunnery.|
|3.1.141|Where's your father?|
''OPHELIA''
|3.1.142|At home, my lord.|
''HAMLET''
|3.1.143|Let the doors be shut upon him, that he may play the|
|3.1.144|fool no where but in's own house. Farewell.|
''OPHELIA''
|3.1.145|O, help him, you sweet heavens!|
''HAMLET''
|3.1.146|If thou dost marry, I'll give thee this plague for|
|3.1.147|thy dowry: be thou as chaste as ice, as pure as|
|3.1.148|snow, thou shalt not escape calumny. Get thee to a|
|3.1.149|nunnery, go: farewell. Or, if thou wilt needs|
|3.1.150|marry, marry a fool; for wise men know well enough|
|3.1.151|what monsters you make of them. To a nunnery, go,|
|3.1.152|and quickly too. Farewell.|
''OPHELIA''
|3.1.153|O heavenly powers, restore him!|
''HAMLET''
|3.1.154|I have heard of your paintings too, well enough; God|
|3.1.155|has given you one face, and you make yourselves|
|3.1.156|another: you jig, you amble, and you lisp, and|
|3.1.157|nick-name God's creatures, and make your wantonness|
|3.1.158|your ignorance. Go to, I'll no more on't; it hath|
|3.1.159|made me mad. I say, we will have no more marriages:|
|3.1.160|those that are married already, all but one, shall|
|3.1.161|live; the rest shall keep as they are. To a|
|3.1.162|nunnery, go.|
//Exit//
''OPHELIA''
|3.1.163|O, what a noble mind is here o'erthrown!|
|3.1.164|The courtier's, soldier's, scholar's, eye, tongue, sword;|
|3.1.165|The expectancy and rose of the fair state,|
|3.1.166|The glass of fashion and the mould of form,|
|3.1.167|The observed of all observers, quite, quite down!|
|3.1.168|And I, of ladies most deject and wretched,|
|3.1.169|That suck'd the honey of his music vows,|
|3.1.170|Now see that noble and most sovereign reason,|
|3.1.171|Like sweet bells jangled, out of tune and harsh;|
|3.1.172|That unmatch'd form and feature of blown youth|
|3.1.173|Blasted with ecstasy: O, woe is me,|
|3.1.174|To have seen what I have seen, see what I see!|
//Re-enter KING CLAUDIUS and POLONIUS//
''KING CLAUDIUS''
|3.1.175|Love! his affections do not that way tend;|
|3.1.176|Nor what he spake, though it lack'd form a little,|
|3.1.177|Was not like madness. There's something in his soul,|
|3.1.178|O'er which his melancholy sits on brood;|
|3.1.179|And I do doubt the hatch and the disclose|
|3.1.180|Will be some danger: which for to prevent,|
|3.1.181|I have in quick determination|
|3.1.182|Thus set it down: he shall with speed to England,|
|3.1.183|For the demand of our neglected tribute|
|3.1.184|Haply the seas and countries different|
|3.1.185|With variable objects shall expel|
|3.1.186|This something-settled matter in his heart,|
|3.1.187|Whereon his brains still beating puts him thus|
|3.1.188|From fashion of himself. What think you on't?|
''LORD POLONIUS''
|3.1.189|It shall do well: but yet do I believe|
|3.1.190|The origin and commencement of his grief|
|3.1.191|Sprung from neglected love. How now, Ophelia!|
|3.1.192|You need not tell us what Lord Hamlet said;|
|3.1.193|We heard it all. My lord, do as you please;|
|3.1.194|But, if you hold it fit, after the play|
|3.1.195|Let his queen mother all alone entreat him|
|3.1.196|To show his grief: let her be round with him;|
|3.1.197|And I'll be placed, so please you, in the ear|
|3.1.198|Of all their conference. If she find him not,|
|3.1.199|To England send him, or confine him where|
|3.1.200|Your wisdom best shall think.|
''KING CLAUDIUS''
|3.1.201|It shall be so:|
|3.1.202|Madness in great ones must not unwatch'd go.|
//Exeunt//
@@.stageDirectionFisco
//Enter King, Queene, Polonius, Ophelia, Rosencraus, Guyl//-
@@
@@.stageDirectionFisco
//densterne, Lords//.
@@
''//King//.'' An can you by no drift of conference
Get from him why he puts on this confusion,
Grating so harshly all his dayes of quiet
With turbulent and dangerous lunacie?
''//Ros//.'' He dooes confesse he feeles himselfe distracted,
But from what cause, a will by no meanes speake.
''//Guyl//.'' Nor doe we find him forward to be sounded,
But with a craftie madnes keepes aloofe
When we would bring him on to some confession
Of his true state.
''//Quee//.'' Did he receiue you well?
''//Ros//.'' Most like a gentleman.
''//Guyl//.'' But with much forcing of his disposition.
''//Ros//.'' Niggard of question, but of our demaunds
Most free in his reply.
''//Quee//.'' Did you assay him to any pastime?
''//Ros//.'' Maddam, it so fell out that certaine Players
We ore-raught on the way, of these we told him,
And there did seeme in him a kind of ioy
To heare of it: they are heere about the Court,
And as I thinke, they haue already order
This night to play before him.
''//Pol//.'' Tis most true,
And he beseecht me to intreat your Maiesties
To heare and see the matter.
''//King//.'' With all my hart,
And it doth much content me
To heare him so inclin'd.
Good gentlemen giue him a further edge,
And driue his purpose into these delights.
|dialogWithStageDirectionFisco|k
|''//Ros//.'' We shall my Lord.|//Exeunt. Ros. & Guyl//.|
''//King//.'' Sweet //Gertrard//, leaue vs two,
For we haue closely sent for //Hamlet// hether,
That he as t'were by accedent, may heere
Affront //Ophelia//; her father and my selfe,
Wee'le so bestow our selues, that seeing vnseene,
We may of their encounter franckly iudge,
And gather by him as he is behau'd,
Ift be th'affliction of his loue or no
That thus he suffers for.
''//Quee//.'' I shall obey you.
And for your part //Ophelia//, I doe wish
That your good beauties be the happy cause
Of //Hamlets// wildnes, so shall I hope your vertues,
Will bring him to his wonted way againe,
To both your honours.
''//Oph//.'' Maddam, I wish it may.
''//Pol//.'' //Ophelia// walke you heere, gracious so please you,
We will bestow our selues; reade on this booke,
That show of such an exercise may cullour
Your lowlines; we are oft too blame in this,
Tis too much proou'd, that with deuotions visage
And pious action, we doe sugar ore
The deuill himselfe.
''//King//.'' O tis too true,
How smart a lash that speech doth giue my conscience.
The harlots cheeke beautied with plastring art,
Is not more ougly to the thing that helps it,
Then is my deede to my most painted word:
O heauy burthen.
@@.stageDirectionFisco
//Enter Hamlet//.
@@
''//Pol//.'' I heare him comming, with-draw my Lord.
''//Ham//.'' To be, or not to be, that is the question,
Whether tis nobler in the minde to suffer
The slings and arrowes of outragious fortune,
Or to take Armes against a sea of troubles,
And by opposing, end them, to die to sleepe
No more, and by a sleepe, to say we end
The hart-ake, and the thousand naturall shocks
That flesh is heire to; tis a consumation
Deuoutly to be wisht to die to sleepe,
To sleepe, perchance to dreame, I there's the rub,
For in that sleepe of death what dreames may come
When we haue shuffled off this mortall coyle
Must giue vs pause, there's the respect
That makes calamitie of so long life:
For who would beare the whips and scornes of time,
Th'oppressors wrong, the proude mans contumely,
The pangs of despiz'd loue, the lawes delay,
The insolence of office, and the spurnes
That patient merrit of th'vnworthy takes,
When he himselfe might his quietas make
With a bare bodkin; who would fardels beare,
To grunt and sweat vnder a wearie life,
But that the dread of something after death,
The vndiscouer'd country, from whose borne
No trauiler returnes, puzzels the will,
And makes vs rather beare those ills we haue,
Then flie to others that we know not of.
Thus conscience dooes make cowards,
And thus the natiue hiew of resolution
Is sickled ore with the pale cast of thought,
And enterprises of great pitch and moment,
With this regard theyr currents turne awry,
And loose the name of action. Soft you now,
The faire //Ophelia//, Nimph in thy orizons
Be all my sinnes remembred.
''//Oph//.'' Good my Lord,
How dooes your honour for this many a day?
''//Ham//.'' I humbly thanke you well.
''//Oph//.'' My Lord, I haue remembrances of yours
That I haue longed long to redeliuer,
I pray you now receiue them.
''//Ham//.'' No, not I, I neuer gaue you ought.
''//Oph//.'' My honor'd Lord, you know right well you did,
And with them words of so sweet breath composd
As made these things more rich, their perfume lost,
Take these againe, for to the noble mind
Rich gifts wax poore when giuers prooue vnkind,
There my Lord.
''//Ham//.'' Ha, ha, are you honest.
''//Oph//.'' My Lord.
''//Ham//.'' Are you faire?
''//Oph//.'' What meanes your Lordship?
''//Ham//.'' That if you be honest & faire, you should admit
no discourse to your beautie.
''//Oph//.'' Could beauty my Lord haue better comerse
Then with honestie?
''//Ham//.'' I truly, for the power of beautie will sooner transforme ho-
nestie from what it is to a bawde, then the force of honestie can trans-
late beautie into his likenes, this was sometime a paradox, but now the
time giues it proofe, I did loue you once.
''//Oph//.'' Indeed my Lord you made me belieue so.
''//Ham//.'' You should not haue beleeu'd me, for vertue cannot so
euocutat our old stock, but we shall relish of it, I loued you not.
''//Oph//.'' I was the more deceiued.
''//Ham//.'' Get thee a Nunry, why would'st thou be a breeder of sin-
ners, I am my selfe indifferent honest, but yet I could accuse mee of
such things, that it were better my Mother had not borne mee: I am
very proude, reuengefull, ambitious, with more offences at my beck,
then I haue thoughts to put them in, imagination to giue them shape,
or time to act them in: what should such fellowes as I do crauling be-
tweene earth and heauen, wee are arrant knaues, beleeue none of vs,
goe thy waies to a Nunry. Where's your father?
''//Oph//.'' At home my Lord.
''//Ham//.'' Let the doores be shut vpon him,
That he may play the foole no where but in's owne house,
Farewell.
''//Oph//.'' O helpe him you sweet heauens.
''//Ham//.'' If thou doost marry, Ile giue thee this plague for thy dow-
rie, be thou as chast as yce, as pure as snow, thou shalt not escape ca-
lumny; get thee to a Nunry, farewell. Or if thou wilt needes marry,
marry a foole, for wise men knowe well enough what monsters you
make of them: to a Nunry goe, and quickly to, farewell.
''//Oph//.'' Heauenly powers restore him.
''//Ham//.'' I haue heard of your paintings well enough, God hath gi-
uen you one face, and you make your selfes another, you gig & am-
ble, and you list you nickname Gods creatures, and make your wan-
tonnes ignorance; goe to, Ile no more on't, it hath made me madde,
I say we will haue no mo marriage, those that are married alreadie, all
|dialogWithStageDirectionFisco|k
|but one shall liue, the rest shall keep as they are: to a Nunry go.|//Exit//.|
''//Oph//.'' O what a noble mind is heere orethrowne!
The Courtiers, souldiers, schollers, eye, tongue, sword,
Th'expectation, and Rose of the faire state,
The glasse of fashion, and the mould of forme,
Th'obseru'd of all obseruers, quite quite downe,
And I of Ladies most deiect and wretched,
That suckt the honny of his musickt vowes;
Now see what noble and most soueraigne reason
Like sweet bells iangled out of time, and harsh,
That vnmatcht forme, and stature of blowne youth
Blasted with extacie, ô woe is mee
|dialogWithStageDirectionFisco|k
|T'haue seene what I haue seene, see what I see.|//Exit//.|
@@.stageDirectionFisco
//Enter King and Polonius//.
@@
''//King//.'' Loue, his affections doe not that way tend,
Nor what he spake, though it lackt forme a little,
Was not like madnes, there's something in his soule
Ore which his melancholy sits on brood,
And I doe doubt, the hatch and the disclose
VVill be some danger; which for to preuent,
I haue in quick determination
Thus set it downe//:// he shall with speede to //England//,
For the demaund of our neglected tribute,
Haply the seas, and countries different,
With variable obiects, shall expell
This something setled matter in his hart,
Whereon his braines still beating
Puts him thus from fashion of himselfe.
What thinke you on't?
''//Pol//.'' It shall doe well.
But yet doe I belieue the origin and comencement of his greefe,
Sprung from neglected loue: How now //Ophelia?//
You neede not tell vs what Lord //Hamlet// said,
We heard it all: my Lord, doe as you please,
But if you hold it fit, after the play,
Let his Queene-mother all alone intreate him
To show his griefe, let her be round with him,
And Ile be plac'd (so please you) in the eare
Of all their conference, if she find him not,
To //England// send him: or confine him where
Your wisedome best shall thinke.
''//King//.'' It shall be so,
|dialogWithStageDirectionFisco|k
|Madnes in great ones must not vnmatcht goe.|//Exeunt//.|
@@.stageDirectionFisco
// Enter Hamlet, and two or three of the Players//.
@@
''//Ham//.'' Speake the Speech I pray you, as I pronounc'd
it to you trippingly on the Tongue: But if you mouth it,
as many of your Players do, I had as liue the Town-Cryer
had spoke my Lines: Nor do not saw the Ayre too much
your hand thus, but vse all gently; for in the verie Tor-
rent, Tempest, and (as I may say) the Whirle-winde of
Passion, you must acquire and beget a Temperance that
may giue it Smoothnesse. O it offends mee to the Soule,
to see a robustious Pery-wig-pated Fellow, teare a Passi-
on to tatters, to verie ragges, to split the eares of the
Groundlings: who (for the most part) are capeable of
nothing, but inexplicable dumbe shewes, & noise: I could
haue such a Fellow whipt for o're-doing Termagant: it
out-// Herod's// //Herod//. Pray you auoid it.
''//Player//.'' I warrant your Honor.
''//Ham//.'' Be not too tame neyther: but let your owne
Discretion be your Tutor. Sute the Action to the Word,
the Word to the Action, with this speciall obseruance:
That you ore-stop not the modestie of Nature; for any
thing so ouer-done, is frõ the purpose of Playing, whose
end both at the first and now, was and is, to hold as 'twer
the Mirrour vp to Nature; to shew Vertue her owne
Feature, Scorne her owne Image, and the verie Age and
Bodie of the Time, his forme and pressure. Now, this
ouer-done, or come tardie off, though it make the vnskil-
full laugh, cannot but make the Iudicious greeue; The
censure of the which One, must in your allowance o're-
way a whole Theater of Others. Oh, there bee Players
that I haue seene Play, and heard others praise, and that
highly (not to speake it prophanely) that neyther hauing
the accent of Christians, nor the gate of Christian, Pagan,
or Norman, haue so strutted and bellowed, that I haue
thought some of Natures Iouerney-men had made men,
and not made them well, they imitated Humanity so ab-
hominably.
''//Play//.'' I hope we haue reform'd that indifferently with
vs, Sir.
''//Ham//.'' O reforme it altogether. And let those that
play your Clownes, speake no more then is set downe for
them. For there be of them, that will themselues laugh,
to set on some quantitie of barren Spectators to laugh
too, though in the meane time, some necessary Question
of the Play be then to be considered: that's Villanous, &
shewes a most pittifull Ambition in the Foole that vses
|dialogWithStageDirectionFisco|k
|it. Go make you readie.|//Exit Players//.|
|dialogWithStageDirectionFisco|k
||//Enter Polonius, Rosincrance, and Guildensterne//.|
How now my Lord,
Will the King heare this peece of Worke?
''//Pol//.'' And the Queene too, and that presently.
|dialogWithStageDirectionFisco|k
|''//Ham//.'' Bid the Players make hast.|//Exit Polonius//.|
Will you two helpe to hasten them?
|dialogWithStageDirectionFisco|k
|''//Both//.'' We will my Lord.|//Exeunt//.|
@@.stageDirectionFisco
// Enter Horatio//.
@@
''//Ham//.'' What hoa, //Horatio//?
''//Hora//.'' Heere sweet Lord, at your Seruice.
''//Ham//.'' //Horatio//, thou art eene as iust a man
As ere my Conuersation coap'd withall.
''//Hora//.'' O my deere Lord.
''//Ham//.'' Nay, do not thinke I flatter:
For what aduancement may I hope from thee,
That no Reuennew hast, but thy good spirits
To feed & cloath thee. Why shold the poor be flatter'd?
No, let the Candied tongue, like absurd pompe,
And crooke the pregnant Hindges of the knee,
Where thrift may follow faining? Dost thou heare,
Since my deere Soule was Mistris of my choyse,
And could of men distinguish, her election
Hath seal'd thee for her selfe. For thou hast bene
As one in suffering all, that suffers nothing.
A man that Fortunes buffets, and Rewards
Hath 'tane with equall Thankes. And blest are those,
Whose Blood and Iudgement are so well co-mingled,
That they are not a Pipe for Fortunes finger,
To sound what stop she please. Giue me that man,
That is not Passions Slaue, and I will weare him
In my hearts Core: I, in my Heart of heart,
As I do thee. Something too much of this.
There is a Play to night before the King,
One Scoene of it comes neere the Circumstance
Which I haue told thee, of my Fathers death.
I prythee, when thou see'st that Acte a-foot,
Euen with the verie Comment of my Soule
Obserue mine Vnkle: If his occulted guilt,
Do not it selfe vnkennell in one speech,
It is a damned Ghost that we haue seene:
And my Imaginations are as foule
As Vulcans Stythe. Giue him needfull note,
For I mine eyes will riuet to his Face:
And after we will both our iudgements ioyne,
To censure of his seeming.
''//Hora//.'' Well my Lord.
If he steale ought the whil'st this Play is Playing,
And scape detecting, I will pay the Theft.
@@.stageDirectionFisco
// Enter King, Queene, Polonius, Ophelia, Rosincrance//,
@@
@@.stageDirectionFisco
//Guildensterne, and other Lords attendant with//
@@
@@.stageDirectionFisco
//his Guard carrying Torches. Danish//
@@
@@.stageDirectionFisco
//March. Sound a Flourish//.
@@
''//Ham//.'' They are comming to the Play: I must be idle.
Get you a place.
''//King//.'' How fares our Cosin //Hamlet//?
''//Ham//.'' Excellent Ifaith, of the Camelions dish: I eate
the Ayre promise-cramm'd, you cannot feed Capons so.
''//King//.'' I haue nothing with this answer //Hamlet//, these
words are not mine.
''//Ham//.'' No, nor mine. Now my Lord, you plaid once
i'th'Vniuersity, you say?
''//Polon//.'' That I did my Lord, and was accounted a good
Actor.
''//Ham//.'' And what did you enact?
''//Pol//.'' I did enact //Iulius Cæsar//, I was kill'd i'th'Capitol:
//Brutus// kill'd me.
''//Ham//.'' It was a bruite part of him, to kill so Capitall a
Calfe there. Be the Players ready?
''//Rosin//.'' I my Lord, they stay vpon your patience.
''//Qu//.'' Come hither my good //Hamlet//, sit by me.
''//Ha//.'' No good Mother, here's Mettle more attractiue.
''//Pol//.'' Oh ho, do you marke that?
''//Ham//.'' Ladie, shall I lye in your Lap?
''//Ophe//.'' No my Lord.
''//Ham//.'' I meane, my Head vpon your Lap?
''//Ophe//.'' I my Lord.
''//Ham//.'' Do you thinke I meant Country matters?
''//Ophe//.'' I thinke nothing, my Lord.
''//Ham//.'' That's a faire thought to ly between Maids legs
''//Ophe//.'' What is my Lord?
''//Ham//.'' Nothing.
''//Ophe//.'' You are merrie, my Lord?
''//Ham//.'' Who I?
''//Ophe//.'' I my Lord.
''//Ham//.'' Oh God, your onely Iigge-maker: what should
a man do, but be merrie. For looke you how cheereful-
ly my Mother lookes, and my Father dyed within's two
Houres.
''//Ophe//.'' Nay, 'tis twice two moneths, my Lord.
''//Ham//.'' So long? Nay then let the Diuel weare blacke,
for Ile haue a suite of Sables. Oh Heauens! dye two mo-
neths ago, and not forgotten yet? Then there's hope, a
great mans Memorie, may out-liue his life halfe a yeare:
But byrlady he must builde Churches then: or else shall
he suffer not thinking on, with the Hoby-horsse, whose
Epitaph is, For o, For o, the Hoby-horse is forgot.
@@.stageDirectionFisco
// Hoboyes play. The dumbe shew enters//.
@@
@@.stageDirectionFisco
//Enter a King and Queene, very louingly; the Queene embra//-
@@
@@.stageDirectionFisco
//cing// //him. She kneeles, and makes shew of Protestation vnto//
@@
@@.stageDirectionFisco
//him. He takes her vp, and dcclines his head vpon her neck//.
@@
@@.stageDirectionFisco
//Layes him downe vpon a Banke of Flowers. She seeing him//
@@
@@.stageDirectionFisco
//a-sleepe, leaues him. Anon comes in a Fellow, takes off his//
@@
@@.stageDirectionFisco
//Crowne, kisses it, and powres poyson in the Kings eares, and//
@@
@@.stageDirectionFisco
//Exits. The Queene returnes, findes the King dead, and//
@@
@@.stageDirectionFisco
//makes passionate Action. The Poysoner, with some two or//
@@
@@.stageDirectionFisco
//three Mutes comes in againe, seeming to lament with her//.
@@
@@.stageDirectionFisco
//The dead body is carried away: The Poysoner Wooes the//
@@
@@.stageDirectionFisco
//Queene with Gifts, she seemes loath and vnwilling awhile//,
@@
@@.stageDirectionFisco
//but in the end, accepts his loue//. //Exeunt//
@@
''//Ophe//.'' What meanes this, my Lord?
''//Ham//.'' Marry this is Miching //Malicho//, that meanes
Mischeefe.
''//Ophe//.'' Belike this shew imports the Argument of the
Play?
''//Ham//.'' We shall know by these Fellowes: the Players
cannot keepe counsell, they'l tell all.
''//Ophe//.'' Will they tell vs what this shew meant?
''//Ham//.'' I, or any shew that you'l shew him. Bee not
you asham'd to shew, hee'l not shame to tell you what it
meanes.
''//Ophe//.'' You are naught, you are naught, Ile marke the
Play.
@@.stageDirectionFisco
//Enter Prologue//.
@@
// For vs, and for our Tragedie//,
//Heere stooping to your Clemencie://
//We begge your hearing Patientlie//.
''//Ham//.'' Is this a Prologue, or the Poesie of a Ring?
''//Ophe//.'' 'Tis briefe my Lord.
''//Ham//.'' As Womans loue.
@@.stageDirectionFisco
// Enter King and his Queene//.
@@
''//King//.'' Full thirtie times hath Phoebus Cart gon round,
Neptunes salt Wash, and //Tellus// Orbed ground:
And thirtie dozen Moones with borrowed sheene,
About the World haue times twelue thirties beene,
Since loue our hearts, and //Hymen// did our hands
Vnite comutuall, in most sacred Bands.
''//Bap//.'' So many iournies may the Sunne and Moone
Make vs againe count o're, ere loue be done.
But woe is me, you are so sicke of late,
So farre from cheere, and from your forme state,
That I distrust you: yet though I distrust,
Discomfort you (my Lord) it nothing must:
For womens Feare and Loue, holds quantitie,
In neither ought, or in extremity:
Now what my loue is, proofe hath made you know,
And as my Loue is siz'd, my Feare is so.
''//King//.'' Faith I must leaue thee Loue, and shortly too:
My operant Powers my Functions leaue to do:
And thou shalt liue in this faire world behinde,
Honour'd, belou'd, and haply, one as kinde.
For Husband shalt thou-----
''//Bap//.'' Oh confound the rest:
Such Loue, must needs be Treason in my brest:
In second Husband, let me be accurst,
None wed the second, but who kill'd the first.
''//Ham//.'' Wormwood, Wormwood.
''//Bapt//.'' The instances that second Marriage moue,
Are base respects of Thrift, but none of Loue.
A second time, I kill my Husband dead,
When second Husband kisses me in Bed.
''//King//.'' I do beleeue you. Think what now you speak:
But what we do determine, oft we breake:
Purpose is but the slaue to Memorie,
Of violent Birth, but poore validitie:
Which now like Fruite vnripe stickes on the Tree,
But fall vnshaken, when they mellow bee.
Most necessary 'tis, that we forget
To pay our selues, what to our selues is debt:
What to our selues in passion we propose,
The passion ending, doth the purpose lose.
The violence of other Greefe or Ioy,
Their owne ennactors with themselues destroy:
Where Ioy most Reuels, Greefe doth most lament;
Greefe ioyes, Ioy greeues on slender accident.
This world is not for aye, nor 'tis not strange
That euen our Loues should with our Fortunes change.
For 'tis a question left vs yet to proue,
Whether Loue lead Fortune, or else Fortune Loue.
The great man downe, you marke his fauourites flies,
The poore aduanc'd, makes Friends of Enemies:
And hitherto doth Loue on Fortune tend,
For who not needs, shall neuer lacke a Frend:
And who in want a hollow Friend doth try,
Directly seasons him his Enemie.
But orderly to end, where I begun,
Our Willes and Fates do so contrary run,
That our Deuices still are ouerthrowne,
Our thoughts are ours, their ends none of our owne.
So thinke thou wilt no second Husband wed.
But die thy thoughts, when thy first Lord is dead.
''//Bap//.'' Nor Earth to giue me food, nor Heauen light,
Sport and repose locke from me day and night:
Each opposite that blankes the face of ioy,
Meet what I would haue well, and it destroy:
Both heere, and hence, pursue me lasting strife,
If once a Widdow, euer I be Wife.
''//Ham//.'' If she should breake it now.
''//King//.'' 'Tis deepely sworne:
Sweet, leaue me heere a while,
My spirits grow dull, and faine I would beguile
The tedious day with sleepe.
|dialogWithStageDirectionFisco|k
|''//Qu//.'' Sleepe rocke thy Braine,|//Sleepes//|
|dialogWithStageDirectionFisco|k
| ||
|dialogWithStageDirectionFisco|k
|And neuer come mischance betweene vs twaine.|//Exit//|
''//Ham//.'' Madam, how like you this Play?
''//Qu//.'' The Lady protests to much me thinkes.
''//Ham//.'' Oh but shee'l keepe her word.
''//King//.'' Haue you heard the Argument, is there no Of-
fence in't?
''//Ham//.'' No, no, they do but iest, poyson in iest, no Of-
fence i'th'world.
''//King//.'' What do you call the Play?
''//Ham//.'' The Mouse-trap: Marry how? Tropically:
This Play is the Image of a murder done in //Vienna:// //Gon-//
//zago// is the Dukes name, his wife //Baptista:// you shall see
anon: 'tis a knauish peece of worke: But what o'that?
Your Maiestie, and wee that haue free soules, it touches
vs not: let the gall'd iade winch: our withers are vnrung.
@@.stageDirectionFisco
// Enter Lucianus//.
@@
This is one //Lucianus// nephew to the King.
''//Ophe//.'' You are a good Chorus, my Lord.
''//Ham//.'' I could interpret betweene you and your loue:
if I could see the Puppets dallying.
''//Ophe//.'' You are keene my Lord, you are keene.
''//Ham//.'' It would cost you a groaning, to take off my
edge.
''//Ophe//.'' Still better and worse.
''//Ham//.'' So you mistake Husbands.
Begin Murderer. Pox, leaue thy damnable Faces, and
begin. Come, the croaking Rauen doth bellow for Re-
uenge.
''//Lucian//.'' Thoughts blacke, hands apt,
Drugges fit, and Time agreeing:
Confederate season, else, no Creature seeing:
Thou mixture ranke, of Midnight Weeds collected,
With Hecats Ban, thrice blasted, thrice infected,
Thy naturall Magicke, and dire propertie,
On wholsome life, vsurpe immediately.
|dialogWithStageDirectionFisco|k
||//Powres the poyson in his eares//.|
''//Ham//.'' He poysons him i'th'Garden for's estate: His
name's //Gonzago:// the Story is extant and writ in choyce
Italian. You shall see anon how the Murtherer gets the
loue of //Gonzago's// wife.
''//Ophe//.'' The King rises.
''//Ham//.'' What, frighted with false fire.
''//Qu//.'' How fares my Lord?
''//Pol//.'' Giue o're the Play.
''//King//.'' Giue me some Light. Away.
|dialogWithStageDirectionFisco|k
|''//All//.'' Lights, Lights, Lights.|//Exeunt//|
@@.stageDirectionFisco
// Manet Hamlet & Horatio//.
@@
''//Ham//.'' Why let the strucken Deere go weepe,
The Hart vngalled play:
For some must watch, while some must sleepe;
So runnes the world away.
Would not this Sir, and a Forrest of Feathers, if the rest of
my Fortunes tutne Turke with me; with two Prouinciall
Roses on my rac'd Shooes, get me a Fellowship in a crie
of Players sir.
''//Hor//.'' Halfe a share.
''//Ham//.'' A whole one I,
For thou dost know: Oh //Damon// deere,
This Realme dismantled was of Ioue himselfe,
And now reignes heere.
A verie verie Paiocke.
''//Hora//.'' You might haue Rim'd.
''//Ham//.'' Oh good //Horatio//, Ile take the Ghosts word for
a thousand pound. Did'st perceiue?
''//Hora//.'' Verie well my Lord.
''//Ham//.'' Vpon the talke of the poysoning?
''//Hora//.'' I did verie well note him.
@@.stageDirectionFisco
// Enter Rosincrance and Guildensterne//.
@@
''//Ham//.'' Oh, ha? Come some Musick. Come ye Recorders:
For if the King like not the Comedie,
Why then belike he likes it not perdie.
Come some Musicke.
''//Guild//.'' Good my Lord, vouchsafe me a word with you.
''//Ham//.'' Sir, a whole History.
''//Guild//.'' The King, sir.
''//Ham//.'' I sir, what of him?
''//Guild//.'' Is in his retyrement, maruellous distemper'd.
''//Ham//.'' With drinke Sir?
''//Guild//.'' No my Lord, rather with choller.
''//Ham//.'' Your wisedome should shew it selfe more ri-
cher, to signifie this to his Doctor: for for me to put him
to his Purgation, would perhaps plundge him into farre
more Choller.
''//Guild//.'' Good my Lord put your discourse into some
frame, and start not so wildely from my affayre.
''//Ham//.'' I am tame Sir, pronounce.
''//Guild//.'' The Queene your Mother, in most great affli-
ction of spirit, hath sent me to you.
''//Ham//.'' You are welcome.
''//Guild//.'' Nay, good my Lord, this courtesie is not of
the right breed. If it shall please you to make me a whol-
some answer, I will doe your Mothers command'ment:
if not, your pardon, and my returne shall bee the end of
my Businesse.
''//Ham//.'' Sir, I cannot.
''//Guild//.'' What, my Lord?
''//Ham//.'' Make you a wholsome answere: my wits dis-
eas'd. But sir, such answers as I can make, you shal com-
mand: or rather you say, my Mother: therfore no more
but to the matter. My Mother you say.
''//Rosin//.'' Then thus she sayes: your behauior hath stroke
her into amazement, and admiration.
''//Ham//.'' Oh wonderfull Sonne, that can so astonish a
Mother. But is there no sequell at the heeles of this Mo-
thers admiration?
''//Rosin//.'' She desires to speake with you in her Closset,
ere you go to bed.
''//Ham//.'' We shall obey, were she ten times our Mother.
Haue you any further Trade with vs?
''//Rosin//.'' My Lord, you once did loue me.
''//Ham//.'' So I do still, by these pickers and stealers.
''//Rosin//.'' Good my Lord, what is your cause of distem-
per? You do freely barre the doore of your owne Liber-
tie, if you deny your greefes to your Friend.
''//Ham//.'' Sir I lacke Aduancement.
''//Rosin//.'' How can that be, when you haue the voyce of
the King himselfe, for your Succession in Denmarke?
''//Ham//.'' I, but while the grasse growes, the Prouerbe is
something musty.
@@.stageDirectionFisco
// Enter one with a Recorder//.
@@
O the Recorder. Let me see, to withdraw with you, why
do you go about to recouer the winde of mee, as if you
would driue me into a toyle?
''//Guild//.'' O my Lord, if my Dutie be too bold, my loue
is too vnmannerly.
''//Ham//.'' I do not well vnderstand that. Will you play
vpon this Pipe?
''//Guild//.'' My Lord, I cannot.
''//Ham//.'' I pray you.
''//Guild//.'' Beleeue me, I cannot.
''//Ham//.'' I do beseech you.
''//Guild//.'' I know no touch of it, my Lord.
''//Ham//.'' 'Tis as easie as lying: gouerne these Ventiges
with your finger and thumbe, giue it breath with your
mouth, and it will discourse most excellent Musicke.
Looke you, these are the stoppes.
''//Guild//.'' But these cannot I command to any vtterance
of hermony, I haue not the skill.
''//Ham//.'' Why looke you now, how vnworthy a thing
you make of me: you would play vpon mee; you would
seeme to know my stops: you would pluck out the heart
of my Mysterie; you would sound mee from my lowest
Note, to the top of my Compasse: and there is much Mu-
sicke, excellent Voice, in this little Organe, yet cannot
you make it. Why do you thinke, that I am easier to bee
plaid on, then a Pipe? Call me what Instrument you will,
though you can fret me, you cannot play vpon me. God
blesse you Sir.
@@.stageDirectionFisco
// Enter Polonius//.
@@
''//Polon//.'' My Lord; the Queene would speak with you,
and presently.
''//Ham//.'' Do you see that Clowd? that's almost in shape
like a Camell.
''//Polon//.'' By'th'Misse, and it's like a Camell indeed.
''//Ham//.'' Me thinkes it is like a Weazell.
''//Polon//.'' It is back'd like a Weazell.
''//Ham//.'' Or like a Whale?
''//Polon//.'' Verie like a Whale.
''//Ham//.'' Then will I come to my Mother, by and by:
They foole me to the top of my bent.
I will come by and by.
|dialogWithStageDirectionFisco|k
|''//Polon//.'' I will say so.|//Exit//.|
''//Ham//.'' By and by, is easily said. Leaue me Friends:
'Tis now the verie witching time of night,
When Churchyards yawne, and Hell it selfe breaths out
Contagion to this world. Now could I drink hot blood,
And do such bitter businesse as the day
Would quake to looke on. Soft now, to my Mother:
Oh Heart, loose not thy Nature; let not euer
The Soule of //Nero//, enter this firme bosome:
Let me be cruell, not vnnaturall,
I will speake Daggers to her, but vse none:
My Tongue and Soule in this be Hypocrites.
How in my words someuer she be shent,
To giue them Seales, neuer my Soule consent.
//Enter HAMLET and Players//
''HAMLET''
|3.2.1|Speak the speech, I pray you, as I pronounced it to|
|3.2.2|you, trippingly on the tongue: but if you mouth it,|
|3.2.3|as many of your players do, I had as lief the|
|3.2.4|town-crier spoke my lines. Nor do not saw the air|
|3.2.5|too much with your hand, thus, but use all gently;|
|3.2.6|for in the very torrent, tempest, and, as I may say,|
|3.2.7|the whirlwind of passion, you must acquire and beget|
|3.2.8|a temperance that may give it smoothness. O, it|
|3.2.9|offends me to the soul to hear a robustious|
|3.2.10|periwig-pated fellow tear a passion to tatters, to|
|3.2.11|very rags, to split the ears of the groundlings, who|
|3.2.12|for the most part are capable of nothing but|
|3.2.13|inexplicable dumbshows and noise: I would have such|
|3.2.14|a fellow whipped for o'erdoing Termagant; it|
|3.2.15|out-herods Herod: pray you, avoid it.|
''First Player''
|3.2.16|I warrant your honour.|
''HAMLET''
|3.2.17|Be not too tame neither, but let your own discretion|
|3.2.18|be your tutor: suit the action to the word, the|
|3.2.19|word to the action; with this special o'erstep not|
|3.2.20|the modesty of nature: for any thing so overdone is|
|3.2.21|from the purpose of playing, whose end, both at the|
|3.2.22|first and now, was and is, to hold, as 'twere, the|
|3.2.23|mirror up to nature; to show virtue her own feature,|
|3.2.24|scorn her own image, and the very age and body of|
|3.2.25|the time his form and pressure. Now this overdone,|
|3.2.26|or come tardy off, though it make the unskilful|
|3.2.27|laugh, cannot but make the judicious grieve; the|
|3.2.28|censure of the which one must in your allowance|
|3.2.29|o'erweigh a whole theatre of others. O, there be|
|3.2.30|players that I have seen play, and heard others|
|3.2.31|praise, and that highly, not to speak it profanely,|
|3.2.32|that, neither having the accent of Christians nor|
|3.2.33|the gait of Christian, pagan, nor man, have so|
|3.2.34|strutted and bellowed that I have thought some of|
|3.2.35|nature's journeymen had made men and not made them|
|3.2.36|well, they imitated humanity so abominably.|
''First Player''
|3.2.37|I hope we have reformed that indifferently with us,|
|3.2.38|sir.|
''HAMLET''
|3.2.39|O, reform it altogether. And let those that play|
|3.2.40|your clowns speak no more than is set down for them;|
|3.2.41|for there be of them that will themselves laugh, to|
|3.2.42|set on some quantity of barren spectators to laugh|
|3.2.43|too; though, in the mean time, some necessary|
|3.2.44|question of the play be then to be considered:|
|3.2.45|that's villanous, and shows a most pitiful ambition|
|3.2.46|in the fool that uses it. Go, make you ready.|
//Exeunt Players//
//Enter POLONIUS, ROSENCRANTZ, and GUILDENSTERN//
|3.2.47|How now, my lord! I will the king hear this piece of work?|
''LORD POLONIUS''
|3.2.48|And the queen too, and that presently.|
''HAMLET''
|3.2.49|Bid the players make haste.|
//Exit POLONIUS//
|3.2.50|Will you two help to hasten them?|
''ROSENCRANTZ''
''GUILDENSTERN''
|3.2.51|We will, my lord.|
//Exeunt ROSENCRANTZ and GUILDENSTERN//
''HAMLET''
|3.2.52|What ho! Horatio!|
//Enter HORATIO//
''HORATIO''
|3.2.53|Here, sweet lord, at your service.|
''HAMLET''
|3.2.54|Horatio, thou art e'en as just a man|
|3.2.55|As e'er my conversation coped withal.|
''HORATIO''
|3.2.56|O, my dear lord,--|
''HAMLET''
|3.2.57| Nay, do not think I flatter;|
|3.2.58|For what advancement may I hope from thee|
|3.2.59|That no revenue hast but thy good spirits,|
|3.2.60|To feed and clothe thee? Why should the poor be flatter'd?|
|3.2.61|No, let the candied tongue lick absurd pomp,|
|3.2.62|And crook the pregnant hinges of the knee|
|3.2.63|Where thrift may follow fawning. Dost thou hear?|
|3.2.64|Since my dear soul was mistress of her choice|
|3.2.65|And could of men distinguish, her election|
|3.2.66|Hath seal'd thee for herself; for thou hast been|
|3.2.67|As one, in suffering all, that suffers nothing,|
|3.2.68|A man that fortune's buffets and rewards|
|3.2.69|Hast ta'en with equal thanks: and blest are those|
|3.2.70|Whose blood and judgment are so well commingled,|
|3.2.71|That they are not a pipe for fortune's finger|
|3.2.72|To sound what stop she please. Give me that man|
|3.2.73|That is not passion's slave, and I will wear him|
|3.2.74|In my heart's core, ay, in my heart of heart,|
|3.2.75|As I do thee.--Something too much of this.--|
|3.2.76|There is a play to-night before the king;|
|3.2.77|One scene of it comes near the circumstance|
|3.2.78|Which I have told thee of my father's death:|
|3.2.79|I prithee, when thou seest that act afoot,|
|3.2.80|Even with the very comment of thy soul|
|3.2.81|Observe mine uncle: if his occulted guilt|
|3.2.82|Do not itself unkennel in one speech,|
|3.2.83|It is a damned ghost that we have seen,|
|3.2.84|And my imaginations are as foul|
|3.2.85|As Vulcan's stithy. Give him heedful note;|
|3.2.86|For I mine eyes will rivet to his face,|
|3.2.87|And after we will both our judgments join|
|3.2.88|In censure of his seeming.|
''HORATIO''
|3.2.89|Well, my lord:|
|3.2.90|If he steal aught the whilst this play is playing,|
|3.2.91|And 'scape detecting, I will pay the theft.|
''HAMLET''
|3.2.92|They are coming to the play; I must be idle:|
|3.2.93|Get you a place.|
//Danish march. A flourish. Enter KING CLAUDIUS, QUEEN GERTRUDE, POLONIUS, OPHELIA, ROSENCRANTZ, GUILDENSTERN, and others//
''KING CLAUDIUS''
|3.2.94|How fares our cousin Hamlet?|
''HAMLET''
|3.2.95|Excellent, i' faith; of the chameleon's dish: I eat|
|3.2.96|the air, promise-crammed: you cannot feed capons so.|
''KING CLAUDIUS''
|3.2.97|I have nothing with this answer, Hamlet; these words|
|3.2.98|are not mine.|
''HAMLET''
|3.2.99|No, nor mine now.|
//To POLONIUS//
|3.2.100|My lord, you played once i' the university, you say?|
''LORD POLONIUS''
|3.2.101|That did I, my lord; and was accounted a good actor.|
''HAMLET''
|3.2.102|What did you enact?|
''LORD POLONIUS''
|3.2.103|I did enact Julius Caesar: I was killed i' the|
|3.2.104|Capitol; Brutus killed me.|
''HAMLET''
|3.2.105|It was a brute part of him to kill so capital a calf|
|3.2.106|there. Be the players ready?|
''ROSENCRANTZ''
|3.2.107|Ay, my lord; they stay upon your patience.|
''QUEEN GERTRUDE''
|3.2.108|Come hither, my dear Hamlet, sit by me.|
''HAMLET''
|3.2.109|No, good mother, here's metal more attractive.|
''LORD POLONIUS''
|3.2.110|[To KING CLAUDIUS] O, ho! do you mark that?|
''HAMLET''
|3.2.111|Lady, shall I lie in your lap?|
//Lying down at OPHELIA's feet//
''OPHELIA''
|3.2.112|No, my lord.|
''HAMLET''
|3.2.113|I mean, my head upon your lap?|
''OPHELIA''
|3.2.114|Ay, my lord.|
''HAMLET''
|3.2.115|Do you think I meant country matters?|
''OPHELIA''
|3.2.116|I think nothing, my lord.|
''HAMLET''
|3.2.117|That's a fair thought to lie between maids' legs.|
''OPHELIA''
|3.2.118|What is, my lord?|
''HAMLET''
|3.2.119|Nothing.|
''OPHELIA''
|3.2.120|You are merry, my lord.|
''HAMLET''
|3.2.121|Who, I?|
''OPHELIA''
|3.2.122|Ay, my lord.|
''HAMLET''
|3.2.123|O God, your only jig-maker. What should a man do|
|3.2.124|but be merry? for, look you, how cheerfully my|
|3.2.125|mother looks, and my father died within these two hours.|
''OPHELIA''
|3.2.126|Nay, 'tis twice two months, my lord.|
''HAMLET''
|3.2.127|So long? Nay then, let the devil wear black, for|
|3.2.128|I'll have a suit of sables. O heavens! die two|
|3.2.129|months ago, and not forgotten yet? Then there's|
|3.2.130|hope a great man's memory may outlive his life half|
|3.2.131|a year: but, by'r lady, he must build churches,|
|3.2.132|then; or else shall he suffer not thinking on, with|
|3.2.133|the hobby-horse, whose epitaph is 'For, O, for, O,|
|3.2.134|the hobby-horse is forgot.'|
//Hautboys play. The dumb-show enters//
//Enter a King and a Queen very lovingly; the Queen embracing him, and he her. She kneels, and makes show of protestation unto him. He takes her up, and declines his head upon her neck: lays him down upon a bank of flowers: she, seeing him asleep, leaves him. Anon comes in a fellow, takes off his crown, kisses it, and pours poison in the King's ears, and exit. The Queen returns; finds the King dead, and makes passionate action. The Poisoner, with some two or three Mutes, comes in again, seeming to lament with her. The dead body is carried away. The Poisoner wooes the Queen with gifts: she seems loath and unwilling awhile, but in the end accepts his love//
//Exeunt//
''OPHELIA''
|3.2.135|What means this, my lord?|
''HAMLET''
|3.2.136|Marry, this is miching mallecho; it means mischief.|
''OPHELIA''
|3.2.137|Belike this show imports the argument of the play.|
//Enter Prologue//
''HAMLET''
|3.2.138|We shall know by this fellow: the players cannot|
|3.2.139|keep counsel; they'll tell all.|
''OPHELIA''
|3.2.140|Will he tell us what this show meant?|
''HAMLET''
|3.2.141|Ay, or any show that you'll show him: be not you|
|3.2.142|ashamed to show, he'll not shame to tell you what it means.|
''OPHELIA''
|3.2.143|You are naught, you are naught: I'll mark the play.|
''Prologue''
|3.2.144| For us, and for our tragedy,|
|3.2.145|Here stooping to your clemency,|
|3.2.146|We beg your hearing patiently.|
//Exit//
''HAMLET''
|3.2.147|Is this a prologue, or the posy of a ring?|
''OPHELIA''
|3.2.148|'Tis brief, my lord.|
''HAMLET''
|3.2.149|As woman's love.|
//Enter two Players, King and Queen//
''Player King''
|3.2.150| Full thirty times hath Phoebus' cart gone round|
|3.2.151|Neptune's salt wash and Tellus' orbed ground,|
|3.2.152|And thirty dozen moons with borrow'd sheen|
|3.2.153|About the world have times twelve thirties been,|
|3.2.154|Since love our hearts and Hymen did our hands|
|3.2.155|Unite commutual in most sacred bands.|
''Player Queen''
|3.2.156| So many journeys may the sun and moon|
|3.2.157|Make us again count o'er ere love be done!|
|3.2.158|But, woe is me, you are so sick of late,|
|3.2.159|So far from cheer and from your former state,|
|3.2.160|That I distrust you. Yet, though I distrust,|
|3.2.161|Discomfort you, my lord, it nothing must:|
|3.2.162|For women's fear and love holds quantity;|
|3.2.163|In neither aught, or in extremity.|
|3.2.164|Now, what my love is, proof hath made you know;|
|3.2.165|And as my love is sized, my fear is so:|
|3.2.166|Where love is great, the littlest doubts are fear;|
|3.2.167|Where little fears grow great, great love grows there.|
''Player King''
|3.2.168|'Faith, I must leave thee, love, and shortly too;|
|3.2.169|My operant powers their functions leave to do:|
|3.2.170|And thou shalt live in this fair world behind,|
|3.2.171|Honour'd, beloved; and haply one as kind|
|3.2.172|For husband shalt thou--|
''Player Queen''
|3.2.173|O, confound the rest!|
|3.2.174|Such love must needs be treason in my breast:|
|3.2.175|In second husband let me be accurst!|
|3.2.176|None wed the second but who kill'd the first.|
''HAMLET''
|3.2.177|[Aside] Wormwood, wormwood.|
''Player Queen''
|3.2.178| The instances that second marriage move|
|3.2.179|Are base respects of thrift, but none of love:|
|3.2.180|A second time I kill my husband dead,|
|3.2.181|When second husband kisses me in bed.|
''Player King''
|3.2.182| I do believe you think what now you speak;|
|3.2.183|But what we do determine oft we break.|
|3.2.184|Purpose is but the slave to memory,|
|3.2.185|Of violent birth, but poor validity;|
|3.2.186|Which now, like fruit unripe, sticks on the tree;|
|3.2.187|But fall, unshaken, when they mellow be.|
|3.2.188|Most necessary 'tis that we forget|
|3.2.189|To pay ourselves what to ourselves is debt:|
|3.2.190|What to ourselves in passion we propose,|
|3.2.191|The passion ending, doth the purpose lose.|
|3.2.192|The violence of either grief or joy|
|3.2.193|Their own enactures with themselves destroy:|
|3.2.194|Where joy most revels, grief doth most lament;|
|3.2.195|Grief joys, joy grieves, on slender accident.|
|3.2.196|This world is not for aye, nor 'tis not strange|
|3.2.197|That even our loves should with our fortunes change;|
|3.2.198|For 'tis a question left us yet to prove,|
|3.2.199|Whether love lead fortune, or else fortune love.|
|3.2.200|The great man down, you mark his favourite flies;|
|3.2.201|The poor advanced makes friends of enemies.|
|3.2.202|And hitherto doth love on fortune tend;|
|3.2.203|For who not needs shall never lack a friend,|
|3.2.204|And who in want a hollow friend doth try,|
|3.2.205|Directly seasons him his enemy.|
|3.2.206|But, orderly to end where I begun,|
|3.2.207|Our wills and fates do so contrary run|
|3.2.208|That our devices still are overthrown;|
|3.2.209|Our thoughts are ours, their ends none of our own:|
|3.2.210|So think thou wilt no second husband wed;|
|3.2.211|But die thy thoughts when thy first lord is dead.|
''Player Queen''
|3.2.212| Nor earth to me give food, nor heaven light!|
|3.2.213|Sport and repose lock from me day and night!|
|3.2.214|To desperation turn my trust and hope!|
|3.2.215|An anchor's cheer in prison be my scope!|
|3.2.216|Each opposite that blanks the face of joy|
|3.2.217|Meet what I would have well and it destroy!|
|3.2.218|Both here and hence pursue me lasting strife,|
|3.2.219|If, once a widow, ever I be wife!|
''HAMLET''
|3.2.220|If she should break it now!|
''Player King''
|3.2.221|'Tis deeply sworn. Sweet, leave me here awhile;|
|3.2.222|My spirits grow dull, and fain I would beguile|
|3.2.223|The tedious day with sleep.|
//Sleeps//
''Player Queen''
|3.2.224|Sleep rock thy brain,|
|3.2.225|And never come mischance between us twain!|
//Exit//
''HAMLET''
|3.2.226|Madam, how like you this play?|
''QUEEN GERTRUDE''
|3.2.227|The lady protests too much, methinks.|
''HAMLET''
|3.2.228|O, but she'll keep her word.|
''KING CLAUDIUS''
|3.2.229|Have you heard the argument? Is there no offence in 't?|
''HAMLET''
|3.2.230|No, no, they do but jest, poison in jest; no offence|
|3.2.231|i' the world.|
''KING CLAUDIUS''
|3.2.232|What do you call the play?|
''HAMLET''
|3.2.233|The Mouse-trap. Marry, how? Tropically. This play|
|3.2.234|is the image of a murder done in Vienna: Gonzago is|
|3.2.235|the duke's name; his wife, Baptista: you shall see|
|3.2.236|anon; 'tis a knavish piece of work: but what o'|
|3.2.237|that? your majesty and we that have free souls, it|
|3.2.238|touches us not: let the galled jade wince, our|
|3.2.239|withers are unwrung.|
//Enter LUCIANUS//
|3.2.240|This is one Lucianus, nephew to the king.|
''OPHELIA''
|3.2.241|You are as good as a chorus, my lord.|
''HAMLET''
|3.2.242|I could interpret between you and your love, if I|
|3.2.243|could see the puppets dallying.|
''OPHELIA''
|3.2.244|You are keen, my lord, you are keen.|
''HAMLET''
|3.2.245|It would cost you a groaning to take off my edge.|
''OPHELIA''
|3.2.246|Still better, and worse.|
''HAMLET''
|3.2.247|So you must take your husbands. Begin, murderer;|
|3.2.248|pox, leave thy damnable faces, and begin. Come:|
|3.2.249|'the croaking raven doth bellow for revenge.'|
''LUCIANUS''
|3.2.250| Thoughts black, hands apt, drugs fit, and time agreeing;|
|3.2.251|Confederate season, else no creature seeing;|
|3.2.252|Thou mixture rank, of midnight weeds collected,|
|3.2.253|With Hecate's ban thrice blasted, thrice infected,|
|3.2.254|Thy natural magic and dire property,|
|3.2.255|On wholesome life usurp immediately.|
//Pours the poison into the sleeper's ears//
''HAMLET''
|3.2.256|He poisons him i' the garden for's estate. His|
|3.2.257|name's Gonzago: the story is extant, and writ in|
|3.2.258|choice Italian: you shall see anon how the murderer|
|3.2.259|gets the love of Gonzago's wife.|
''OPHELIA''
|3.2.260|The king rises.|
''HAMLET''
|3.2.261|What, frighted with false fire!|
''QUEEN GERTRUDE''
|3.2.262|How fares my lord?|
''LORD POLONIUS''
|3.2.263|Give o'er the play.|
''KING CLAUDIUS''
|3.2.264|Give me some light: away!|
''All''
|3.2.265|Lights, lights, lights!|
//Exeunt all but HAMLET and HORATIO//
''HAMLET''
|3.2.266| Why, let the stricken deer go weep,|
|3.2.267|The hart ungalled play;|
|3.2.268|For some must watch, while some must sleep:|
|3.2.269|So runs the world away.|
|3.2.270|Would not this, sir, and a forest of feathers-- if|
|3.2.271|the rest of my fortunes turn Turk with me--with two|
|3.2.272|Provincial roses on my razed shoes, get me a|
|3.2.273|fellowship in a cry of players, sir?|
''HORATIO''
|3.2.274|Half a share.|
''HAMLET''
|3.2.275|A whole one, I.|
|3.2.276|For thou dost know, O Damon dear,|
|3.2.277|This realm dismantled was|
|3.2.278|Of Jove himself; and now reigns here|
|3.2.279|A very, very--pajock.|
''HORATIO''
|3.2.280|You might have rhymed.|
''HAMLET''
|3.2.281|O good Horatio, I'll take the ghost's word for a|
|3.2.282|thousand pound. Didst perceive?|
''HORATIO''
|3.2.283|Very well, my lord.|
''HAMLET''
|3.2.284|Upon the talk of the poisoning?|
''HORATIO''
|3.2.285|I did very well note him.|
''HAMLET''
|3.2.286|Ah, ha! Come, some music! come, the recorders!|
|3.2.287|For if the king like not the comedy,|
|3.2.288|Why then, belike, he likes it not, perdy.|
|3.2.289|Come, some music!|
//Re-enter ROSENCRANTZ and GUILDENSTERN//
''GUILDENSTERN''
|3.2.290|Good my lord, vouchsafe me a word with you.|
''HAMLET''
|3.2.291|Sir, a whole history.|
''GUILDENSTERN''
|3.2.292|The king, sir,--|
''HAMLET''
|3.2.293|Ay, sir, what of him?|
''GUILDENSTERN''
|3.2.294|Is in his retirement marvellous distempered.|
''HAMLET''
|3.2.295|With drink, sir?|
''GUILDENSTERN''
|3.2.296|No, my lord, rather with choler.|
''HAMLET''
|3.2.297|Your wisdom should show itself more richer to|
|3.2.298|signify this to his doctor; for, for me to put him|
|3.2.299|to his purgation would perhaps plunge him into far|
|3.2.300|more choler.|
''GUILDENSTERN''
|3.2.301|Good my lord, put your discourse into some frame and|
|3.2.302|start not so wildly from my affair.|
''HAMLET''
|3.2.303|I am tame, sir: pronounce.|
''GUILDENSTERN''
|3.2.304|The queen, your mother, in most great affliction of|
|3.2.305|spirit, hath sent me to you.|
''HAMLET''
|3.2.306|You are welcome.|
''GUILDENSTERN''
|3.2.307|Nay, good my lord, this courtesy is not of the right|
|3.2.308|breed. If it shall please you to make me a|
|3.2.309|wholesome answer, I will do your mother's|
|3.2.310|commandment: if not, your pardon and my return|
|3.2.311|shall be the end of my business.|
''HAMLET''
|3.2.312|Sir, I cannot.|
''GUILDENSTERN''
|3.2.313|What, my lord?|
''HAMLET''
|3.2.314|Make you a wholesome answer; my wit's diseased: but,|
|3.2.315|sir, such answer as I can make, you shall command;|
|3.2.316|or, rather, as you say, my mother: therefore no|
|3.2.317|more, but to the matter: my mother, you say,--|
''ROSENCRANTZ''
|3.2.318|Then thus she says; your behavior hath struck her|
|3.2.319|into amazement and admiration.|
''HAMLET''
|3.2.320|O wonderful son, that can so astonish a mother! But|
|3.2.321|is there no sequel at the heels of this mother's|
|3.2.322|admiration? Impart.|
''ROSENCRANTZ''
|3.2.323|She desires to speak with you in her closet, ere you|
|3.2.324|go to bed.|
''HAMLET''
|3.2.325|We shall obey, were she ten times our mother. Have|
|3.2.326|you any further trade with us?|
''ROSENCRANTZ''
|3.2.327|My lord, you once did love me.|
''HAMLET''
|3.2.328|So I do still, by these pickers and stealers.|
''ROSENCRANTZ''
|3.2.329|Good my lord, what is your cause of distemper? you|
|3.2.330|do, surely, bar the door upon your own liberty, if|
|3.2.331|you deny your griefs to your friend.|
''HAMLET''
|3.2.332|Sir, I lack advancement.|
''ROSENCRANTZ''
|3.2.333|How can that be, when you have the voice of the king|
|3.2.334|himself for your succession in Denmark?|
''HAMLET''
|3.2.335|Ay, but sir, 'While the grass grows,'--the proverb|
|3.2.336|is something musty.|
//Re-enter Players with recorders//
|3.2.337|O, the recorders! let me see one. To withdraw with|
|3.2.338|you:--why do you go about to recover the wind of me,|
|3.2.339|as if you would drive me into a toil?|
''GUILDENSTERN''
|3.2.340|O, my lord, if my duty be too bold, my love is too|
|3.2.341|unmannerly.|
''HAMLET''
|3.2.342|I do not well understand that. Will you play upon|
|3.2.343|this pipe?|
''GUILDENSTERN''
|3.2.344|My lord, I cannot.|
''HAMLET''
|3.2.345|I pray you.|
''GUILDENSTERN''
|3.2.346|Believe me, I cannot.|
''HAMLET''
|3.2.347|I do beseech you.|
''GUILDENSTERN''
|3.2.348|I know no touch of it, my lord.|
''HAMLET''
|3.2.349|'Tis as easy as lying: govern these ventages with|
|3.2.350|your lingers and thumb, give it breath with your|
|3.2.351|mouth, and it will discourse most eloquent music.|
|3.2.352|Look you, these are the stops.|
''GUILDENSTERN''
|3.2.353|But these cannot I command to any utterance of|
|3.2.354|harmony; I have not the skill.|
''HAMLET''
|3.2.355|Why, look you now, how unworthy a thing you make of|
|3.2.356|me! You would play upon me; you would seem to know|
|3.2.357|my stops; you would pluck out the heart of my|
|3.2.358|mystery; you would sound me from my lowest note to|
|3.2.359|the top of my compass: and there is much music,|
|3.2.360|excellent voice, in this little organ; yet cannot|
|3.2.361|you make it speak. 'Sblood, do you think I am|
|3.2.362|easier to be played on than a pipe? Call me what|
|3.2.363|instrument you will, though you can fret me, yet you|
|3.2.364|cannot play upon me.|
//Enter POLONIUS//
|3.2.365|God bless you, sir!|
''LORD POLONIUS''
|3.2.366|My lord, the queen would speak with you, and|
|3.2.367|presently.|
''HAMLET''
|3.2.368|Do you see yonder cloud that's almost in shape of a camel?|
''LORD POLONIUS''
|3.2.369|By the mass, and 'tis like a camel, indeed.|
''HAMLET''
|3.2.370|Methinks it is like a weasel.|
''LORD POLONIUS''
|3.2.371|It is backed like a weasel.|
''HAMLET''
|3.2.372|Or like a whale?|
''LORD POLONIUS''
|3.2.373|Very like a whale.|
''HAMLET''
|3.2.374|Then I will come to my mother by and by. They fool|
|3.2.375|me to the top of my bent. I will come by and by.|
''LORD POLONIUS''
|3.2.376|I will say so.|
''HAMLET''
|3.2.377|By and by is easily said.|
//Exit POLONIUS//
|3.2.378|Leave me, friends.|
//Exeunt all but HAMLET//
|3.2.379|Tis now the very witching time of night,|
|3.2.380|When churchyards yawn and hell itself breathes out|
|3.2.381|Contagion to this world: now could I drink hot blood,|
|3.2.382|And do such bitter business as the day|
|3.2.383|Would quake to look on. Soft! now to my mother.|
|3.2.384|O heart, lose not thy nature; let not ever|
|3.2.385|The soul of Nero enter this firm bosom:|
|3.2.386|Let me be cruel, not unnatural:|
|3.2.387|I will speak daggers to her, but use none;|
|3.2.388|My tongue and soul in this be hypocrites;|
|3.2.389|How in my words soever she be shent,|
|3.2.390|To give them seals never, my soul, consent!|
//Exit//
@@.stageDirectionFisco
//Enter Hamlet, and three of the Players//.
@@
''//Ham//.'' Speake the speech I pray you as I pronoun'd it to you, trip-
pingly on the tongue, but if you mouth it as many of our Players do,
I had as liue the towne cryer spoke my lines, nor doe not saw the ayre
too much with your hand thus, but vse all gently, for in the very tor-
rent tempest, and as I may say, whirlwind of your passion, you must
acquire and beget a temperance, that may giue it smoothnesse, o it
offends mee to the soule, to heare a robustious perwig-pated fellowe
tere a passion to totters, to very rags, to spleet the eares of the ground-
lings, vvho for the most part are capable of nothing but inexplica-
ble dumbe showes, and noyse: I would haue such a fellow whipt for
ore-dooing Termagant, it out Herods Herod, pray you auoyde it.
''//Player//.'' I warrant your honour.
''//Hamlet//.'' Be not too tame neither, but let your owne discretion be
your tutor, sute the action to the word, the word to the action, with
this speciall obseruance, that you ore-steppe not the modestie of na-
ture: For any thing so ore-doone, is from the purpose of playing,
whose end both at the first, and novve, was and is, to holde as twere
the Mirrour vp to nature, to shew vertue her feature; scorne her own
Image, and the very age and body of the time his forme and pressure:
Now this ouer-done, or come tardie off, though it makes the vnskil-
full laugh, cannot but make the iudicious greeue, the censure of
which one, must in your allowance ore-weigh a whole Theater of o-
thers. O there be Players that I haue seene play, and heard others
praysd, and that highly, not to speake it prophanely, that neither ha-
uing th'accent of Christians, nor the gate of Christian, Pagan, nor
man, haue so strutted & bellowed, that I haue thought some of Na-
tures Iornimen had made men, and not made them well, they imita-
ted humanitie so abhominably.
''//Player//.'' I hope we haue reform'd that indifferently with vs.
''//Ham//.'' O reforme it altogether, and let those that play your clownes
speake no more then is set downe for them, for there be of them that
wil themselues laugh, to set on some quantitie of barraine spectators
to laugh to, though in the meane time, some necessary question of
the play be then to be considered, that's villanous, and shewes a most
pittifull ambition in the foole that vses it //:// goe make you readie. How
now my Lord, will the King heare this peece of worke?
@@.stageDirectionFisco
//Enter Polonius, Guyldensterne, & Rosencraus//.
@@
''//Pol//.'' And the Queene to, and that presently.
''//Ham//.'' Bid the Players make hast. Will you two help to hasten thē.
|dialogWithStageDirectionFisco|k
|''//Ros//.'' I my Lord.|//Exeunt they two//.|
|dialogWithStageDirectionFisco|k
| ||
|dialogWithStageDirectionFisco|k
|''//Ham//.'' What howe, //Horatio//.|//Enter Horatio//.|
''//Hora//.'' Heere sweet Lord, at your seruice.
''//Ham//.'' //Horatio//, thou art een as iust a man
As ere my conuersation copt withall.
''//Hor//.'' O my deere Lord.
Nay, doe not thinke I flatter,
For what aduancement may I hope from thee
That no reuenew hast but thy good spirits
To feede and clothe thee, why should the poore be flatterd?
No, let the candied tongue licke absurd pompe,
And crooke the pregnant hindges of the knee
Where thrift may follow fauning; doost thou heare,
Since my deare soule was mistris of her choice,
And could of men distinguish her election,
S'hath seald thee for herselfe, for thou hast been
As one in suffring all that suffers nothing,
A man that Fortunes buffets and rewards
Hast tane with equall thanks; and blest are those
Whose blood and iudgement are so well comedled,
That they are not a pype for Fortunes finger
To sound what stop she please: giue me that man
That is not passions slaue, and I will weare him
In my harts core, I in my hart of hart
As I doe thee. Something too much of this,
There is a play to night before the King,
One scene of it comes neere the circumstance
Which I haue told thee of my fathers death,
I prethee when thou seest that act a foote,
Euen with the very comment of thy soule
Obserue my Vncle, if his occulted guilt
Doe not it selfe vnkennill in one speech,
It is a damned ghost that we haue seene,
And my imaginations are as foule
As //Vulcans //stithy; giue him heedfull note,
For I mine eyes will riuet to his face,
And after we will both our iudgements ioyne
In censure of his seeming.
''//Hor//.'' Well my lord,
If a steale ought the whilst this play is playing
And scape detected, I will pay the theft.
@@.stageDirectionFisco
//Enter Trumpets and Kettle Drummes//,//King, Queene//,
@@
@@.stageDirectionFisco
//Polonius, Ophelia//
@@
''//Ham//.'' They are comming to the play. I must be idle,
Get you a place.
''//King//.'' How fares our cosin //Hamlet?//
''//Ham//.'' Excellent yfaith,
Of the Camelions dish, I eate the ayre,
Promiscram'd, you cannot feede Capons so.
''//King//.'' I haue nothing with this aunswer //Hamlet//,
These words are not mine.
''//Ham//.'' No, nor mine now my Lord.
You playd once i'th Vniuersitie you say,
''//Pol//.'' That did I my Lord, and was accounted a good Actor,
''//Ham//.'' What did you enact?
''//Pol//.'' I did enact //Iulius Cæsar//, I was kild i'th Capitall,
//Brutus// kild mee.
''//Ham//.'' It was a brute part of him to kill so capitall a calfe there,
Be the Players readie?
''//Ros//.'' I my Lord, they stay vpon your patience.
''//Ger//.'' Come hether my deere //Hamlet//, sit by me.
''//Ham//.'' No good mother, heere's mettle more attractiue.
''//Pol//.'' O ho, doe you marke that.
''//Ham//.'' Lady shall I lie in your lap?
''//Ophe//.'' No my Lord.
''//Ham//.'' Doe you thinke I meant country matters?
''//Oph//.'' I thinke nothing my Lord.
''//Ham//.'' That's a fayre thought to lye betweene maydes legs.
''//Oph//.'' What is my Lord?
''//Ham//.'' Nothing.
''//Oph//.'' You are merry my Lord.
''//Ham//.'' Who I?
''//Oph//.'' I my Lord.
''//Ham//.'' O God your onely Iigge-maker, what should a man do but
be merry, for looke you how cheerefully my mother lookes, and my
father died within's two howres.
''//Oph//.'' Nay, tis twice two months my Lord.
''//Ham//.'' So long, nay then let the deule weare blacke, for Ile haue a
sute of sables; o heauens, die two months agoe, and not forgotten yet,
then there's hope a great mans memorie may out-liue his life halfe a
yeere, but ber Lady a must build Churches then, or els shall a suffer
not thinking on, with the Hobby-horse, whose Epitaph is, for ô, for
ô, the hobby-horse is forgot.
@@.stageDirectionFisco
//The Trumpets sounds. Dumbe show followes//.
@@
@@.stageDirectionFisco
//Enter a King and a Queene, the Queene embracing him//, //and he her//, //he//
@@
@@.stageDirectionFisco
//takes her vp, and declines his head vpon her necke//,//he lyes him downe vp//-
@@
@@.stageDirectionFisco
//pon a bancke of flowers, she seeing him asleepe, leaues him: anon come in an//
@@
@@.stageDirectionFisco
//other man, takes off his crowne, kisses it, pours poyson in the sleepers eares//,
@@
@@.stageDirectionFisco
//and leaues him: the Queene returnes, finds the King dead, makes passionate//
@@
@@.stageDirectionFisco
//action, the poysner with some three or foure come in againe, seeme to con//-
@@
@@.stageDirectionFisco
//dole with her, the dead body is carried away, the poysner wooes the Queene//
@@
@@.stageDirectionFisco
//with gifts, shee seemes harsh awhile, but in the end accepts loue//.
@@
''//Oph//.'' VVhat meanes this my Lord?
''//Ham//.'' Marry this munching //Mallico//, it meanes mischiefe.
''//Oph//.'' Belike this show imports the argument of the play.
|dialogWithStageDirectionFisco|k
|''//Ham//.'' We shall know by this fellow,|//Enter Prologue//.|
The Players cannot keepe, they'le tell all.
''//Oph//.'' Will a tell vs what this show meant?
''//Ham//.'' I, or any show that you will show him, be not you asham'd
to show, heele not shame to tell you what it meanes.
''//Oph//.'' You are naught, you are naught, Ile mark the play.
''//Prologue//.'' For vs and for our Tragedie,
Heere stooping to your clemencie,
We begge your hearing patiently.
''//Ham//.'' Is this a Prologue, or the posie of a ring?
''//Oph//.'' Tis breefe my Lord.
''//Ham//.'' As womans loue.
@@.stageDirectionFisco
//Enter King and Queene//.
@@
''//King//.'' Full thirtie times hath //Phebus// cart gone round
//Neptunes// salt wash, and //Tellus// orb'd the ground,
And thirtie dosen Moones with borrowed sheene
About the world haue times twelue thirties beene
Since loue our harts, and //Hymen// did our hands
Vnite comutuall in most sacred bands.
''//Quee//.'' So many iourneyes may the Sunne and Moone
Make vs againe count ore ere loue be doone,
But woe is me, you are so sicke of late,
So farre from cheere, and from our former state,
That I distrust you, yet though I distrust,
Discomfort you my Lord it nothing must.
For women feare too much, euen as they loue,
And womens feare and loue hold quantitie,
Eyther none, in neither ought, or in extremitie,
Now what my Lord is proofe hath made you know,
And as my loue is ciz'd, my feare is so,
Where loue is great, the litlest doubts are feare,
Where little feares grow great, great loue growes there.
''//King//.'' Faith I must leaue thee loue, and shortly to,
My operant powers their functions leaue to do,
And thou shalt liue in this faire world behind,
Honord, belou'd, and haply one as kind,
For husband shalt thou.
Quee. O confound the rest,
Such loue must needes be treason in my brest,
In second husband let me be accurst,
|dialogWithStageDirectionFisco|k
|None wed the second, but who kild the first.|//Ham//. That's wormwood|
The instances that second marriage moue
Are base respects of thrift, but none of loue,
A second time I kill my husband dead,
When second husband kisses me in bed.
''//King//.'' I doe belieue you thinke what now you speake,
But what we doe determine, oft we breake,
Purpose is but the slaue to memorie,
Of violent birth, but poore validitie,
Which now the fruite vnripe sticks on the tree,
But fall vnshaken when they mellow bee.
Most necessary tis that we forget
To pay our selues what to our selues is debt,
What to our selues in passion we propose,
The passion ending, doth the purpose lose,
The violence of eyther, griefe, or ioy,
Their owne ennactures with themselues destroy,
Where ioy most reuels, griefe doth most lament,
Greefe ioy, ioy griefes, on slender accedent,
This world is not for aye, nor tis not strange,
That euen our loues should with our fortunes change:
For tis a question left vs yet to proue,
Whether loue lead fortune, or els fortune loue.
The great man downe, you marke his fauourite flyes,
The poore aduaunc'd, makes friends of enemies,
And hetherto doth loue on fortune tend,
For who not needes, shall neuer lacke a friend,
And who in want a hollow friend doth try,
Directly seasons him his enemy.
But orderly to end where I begunne,
Our wills and fates doe so contrary runne,
That our deuises still are ouerthrowne,
Our thoughts are ours, their ends none of our owne,
So thinke thou wilt no second husband wed,
But die thy thoughts when thy first Lord is dead.
''//Quee//.'' Nor earth to me giue foode, nor heauen light,
Sport and repose lock from me day and night,
To desperation turne my trust and hope,
And Anchors cheere in prison be my scope,
Each opposite that blancks the face of ioy,
Meete what I would haue well, and it destroy,
|dialogWithStageDirectionFisco|k
|Both heere and hence pursue me lasting strife,|//Ham//. If she should breake it now.|
If once I be a widdow, euer I be a wife.
''//King//.'' Tis deeply sworne, sweet leaue me heere a while,
My spirits grow dull, and faine I would beguile
The tedious day with sleepe.
''//Quee//.'' Sleepe rock thy braine,
|dialogWithStageDirectionFisco|k
|And neuer come mischance betweene vs twaine.|//Exeunt//.|
''//Ham//.'' Madam, how like you this play?
''//Quee//.'' The Lady doth protest too much mee thinks.
''//Ham//.'' O but shee'le keepe her word.
''//King//.'' Haue you heard the argument? is there no offence in't?
''//Ham//.'' No, no, they do but iest, poyson in iest, no offence i'th world.
''//King//.'' What doe you call the play?
''//Ham//.'' The Mousetrap, mary how tropically, this play is the Image
of a murther doone in //Vienna, Gonzago// is the Dukes name, his wife
//Baptista//, you shall see anon, tis a knauish peece of worke, but what of
that? your Maiestie, and wee that haue free soules, it touches vs not,
let the gauled Iade winch, our withers are vnwrong. This is one //Lu//-
//cianus//, Nephew to the King.
@@.stageDirectionFisco
//Enter Lucianus//.
@@
''//Oph//.'' You are as good as a Chorus my Lord.
''//Ham//.'' I could interpret betweene you and your loue
If I could see the puppets dallying.
''//Oph//.'' You are keene my lord, you are keene.
''//Ham//.'' It would cost you a groning to take off mine edge.
''//Oph//.'' Still better and worse.
''//Ham//.'' So you mistake your husbands. Beginne murtherer, leaue
thy damnable faces and begin, come, the croking Rauen doth bellow
for reuenge.
''//Luc//.'' Thoughts black, hands apt, drugges fit, and time agreeing,
Considerat season els no creature seeing,
Thou mixture ranck, of midnight weedes collected,
VVith //Hecats// ban thrice blasted, thrice inuected,
Thy naturall magicke, and dire property,
On wholsome life vsurps immediatly.
''//Ham//.'' A poysons him i'th Garden for his estate, his names //Gonza//-
//go//, the story is extant, and written in very choice Italian, you shall see
anon how the murtherer gets the loue of //Gonzagoes// wife.
''//Oph//.'' The King rises.
''//Quee//.'' How fares my Lord?
''//Pol//.'' Giue ore the play.
''//King//.'' Giue me some light, away.
|dialogWithStageDirectionFisco|k
|''//Pol//.'' Lights, lights, lights.|//Exeunt all but Ham. & Horatio//.|
''//Ham//.'' Why let the strooken Deere goe weepe,
The Hart vngauled play,
For some must watch while some must sleepe,
Thus runnes the world away. Would not this sir & a forrest of fea-
thers, if the rest of my fortunes turne Turk with me, with prouinciall
Roses on my raz'd shooes, get me a fellowship in a cry of players?
''//Hora//.'' Halfe a share.
''//Ham//.'' A whole one I.
For thou doost know oh //Damon// deere
This Realme dismantled was
Of //Ioue// himselfe, and now raignes heere
A very very paiock.
''//Hora//.'' You might haue rym'd.
''//Ham//.'' O good //Horatio//, Ile take the Ghosts word for a thousand
pound. Did'st perceiue?
''//Hora//.'' Very well my Lord.
''//Ham//.'' Vpon the talke of the poysning.
''//Hor//.'' I did very well note him.
''//Ham//.'' Ah ha, come some musique, come the Recorders,
For if the King like not the Comedie,
Why then belike he likes it not perdy.
Come, some musique.
@@.stageDirectionFisco
//Enter Rosencraus and Guyldensterne//.
@@
''//Guyl//.'' Good my Lord, voutsafe me a word with you.
''//Ham//.'' Sir a whole historie.
''//Guyl//.'' The King sir.
''//Ham//.'' I sir, what of him?
''//Guyl//.'' Is in his retirement meruilous distempred.
''//Ham//.'' With drinke sir?
''//Guyl//.'' No my Lord, with choller,
''//Ham//.'' Your wisedome should shewe it selfe more richer to signifie
this to the Doctor, for, for mee to put him to his purgation, would
perhaps plunge him into more choller.
''//Guyl//.'' Good my Lord put your discourse into some frame,
And stare not so wildly from my affaire.
''//Ham//.'' I am tame sir, pronounce.
''//Guyl//.'' The Queene your mother in most great affliction of spirit,
hath sent me to you.
''//Ham//.'' You are welcome.
''//Guyl//.'' Nay good my Lord, this curtesie is not of the right breede, if
it shall please you to make me a wholsome aunswere, I will doe your
mothers commaundement, if not, your pardon and my returne, shall
be the end of busines.
''//Ham//.'' Sir I cannot.
''//Ros//.'' What my Lord.
''//Ham//.'' Make you a wholsome answer, my wits diseasd, but sir, such
answere as I can make, you shall commaund, or rather as you say, my
mother, therefore no more, but to the matter, my mother you say.
''//Ros//.'' Then thus she sayes, your behauiour hath strooke her into a-
mazement and admiration.
''//Ham//.'' O wonderful sonne that can so stonish a mother, but is there
no sequell at the heeles of this mothers admiration, impart.
''//Ros//.'' She desires to speak with you in her closet ere you go to bed.
''//Ham//.'' We shall obey, were she ten times our mother, haue you any
further trade with vs?
''//Ros//.'' My Lord, you once did loue me.
''//Ham//.'' And doe still by these pickers and stealers.
''//Ros//.'' Good my Lord, what is your cause of distemper, you do sure-
ly barre the doore vpon your owne liberty if you deny your griefes to
your friend.
''//Ham//.'' Sir I lacke aduauncement.
''//Ros//.'' How can that be, when you haue the voyce of the King him-
selfe for your succession in Denmarke.
@@.stageDirectionFisco
//Enter the Players with Recorders//.
@@
''//Ham//.'' I sir, but while the grasse growes, the prouerbe is something
musty, ô the Recorders, let mee see one, to withdraw with you, why
doe you goe about to recouer the wind of mee, as if you would driue
me into a toyle?
''//Guyl//.'' O my lord, if my duty be too bold, my loue is too vnmanerly.
''//Ham//.'' I do not wel vnderstand that, wil you play vpon this pipe?
''//Guyl//.'' My lord I cannot.
''//Ham//.'' I pray you.
''//Guyl//.'' Beleeue me I cannot.
''//Ham//.'' I doe beseech you.
''//Guyl//.'' I know no touch of it my Lord.
''//Ham//.'' It is as easie as lying; gouerne these ventages with your fin-
gers, & the vmber, giue it breath with your mouth, & it wil discourse
most eloquent musique, looke you, these are the stops.
''//Guil//.'' But these cannot I commaund to any vttrance of harmonie, I
haue not the skill.
''//Ham//.'' Why looke you now how vnwoorthy a thing you make of
me, you would play vpon mee, you would seeme to know my stops,
you would plucke out the hart of my mistery, you would sound mee
from my lowest note to my compasse, and there is much musique ex-
cellent voyce in this little organ, yet cannot you make it speak, s'bloud
do you think I am easier to be plaid on then a pipe, call mee what in-
strument you wil, though you fret me not, you cannot play vpon me.
God blesse you sir.
@@.stageDirectionFisco
//Enter Polonius//.
@@
''//Pol//.'' My Lord, the Queene would speake with you, & presently.
''//Ham//.'' Do you see yonder clowd that's almost in shape of a Camel?
''//Pol//.'' By'th masse and tis, like a Camell indeed.
''//Ham//.'' Mee thinks it is like a Wezell.
''//Pol//.'' It is backt like a Wezell.
''//Ham//.'' Or like a Whale.
''//Pol//.'' Very like a Whale.
Then I will come to my mother by and by,
They foole me to the top of my bent, I will come by & by,
Leaue me friends.
I will, say so. By and by is easily said,
Tis now the very witching time of night,
When Churchyards yawne, and hell it selfe breakes out
Contagion to this world: now could I drinke hote blood,
And doe such busines as the bitter day
Would quake to looke on: soft, now to my mother,
O hart loose not thy nature, let not euer
The soule of //Nero// enter this firme bosome,
Let me be cruell, not vnnaturall,
I will speake dagger to her, but vse none,
My tongue and soule in this be hypocrites,
How in my words someuer she be shent,
|dialogWithStageDirectionFisco|k
|To giue them seales neuer my soule consent.|//Exit//.|
@@.stageDirectionFisco
// Enter King, Rosincrance, and Guildensterne//.
@@
''//King//.'' I like him not, nor stands it safe with vs,
To let his madnesse range. Therefore prepare you,
I your Commission will forthwith dispatch,
And he to England shall along with you:
The termes of our estate, may not endure
Hazard so dangerous as doth hourely grow
Out of his Lunacies.
''//Guild//.'' We will our selues prouide:
Most holie and Religious feare it is
To keepe those many many bodies safe
That liue and feede vpon your Maiestie.
''//Rosin//.'' The single
And peculiar life is bound
With all the strength and Armour of the minde,
To keepe it selfe from noyance: but much more,
That Spirit, vpon whose spirit depends and rests
The liues of many, the cease of Maiestie
Dies not alone; but like a Gulfe doth draw
What's neere it, with it. It is a massie wheele
Fixt on the Somnet of the highest Mount,
To whose huge Spoakes, ten thousand lesser things
Are mortiz'd and adioyn'd: which when it falles,
Each small annexment, pettie consequence
Attends the boystrous Ruine. Neuer alone
Did the King sighe, but with a generall grone.
''//King//.'' Arme you, I pray you to this speedie Voyage;
For we will Fetters put vpon this feare,
Which now goes too free-footed.
|dialogWithStageDirectionFisco|k
|''//Both//.'' We will haste vs.|//Exeunt Gent//.|
@@.stageDirectionFisco
// Enter Polonius//.
@@
''//Pol//.'' My Lord, he's going to his Mothers Closset:
Behinde the Arras Ile conuey my selfe
To heare the Processe. Ile warrant shee'l tax him home,
And as you said, and wisely was it said,
'Tis meete that some more audience then a Mother,
Since Nature makes them partiall, should o're-heare
The speech of vantage. Fare you well my Liege,
Ile call vpon you ere you go to bed,
And tell you what I know.
''//King//.'' Thankes deere my Lord.
Oh my offence is ranke, it smels to heauen,
It hath the primall eldest curse vpon't,
A Brothers murther. Pray can I not,
Though inclination be as sharpe as will:
My stronger guilt, defeats my strong intent,
And like a man to double businesse bound,
I stand in pause where I shall first begin,
And both neglect; what if this cursed hand
Were thicker then it selfe with Brothers blood,
Is there not Raine enough in the sweet Heauens
To wash it white as Snow? Whereto serues mercy,
But to confront the visage of Offence?
And what's in Prayer, but this two-fold force,
To be fore-stalled ere we come to fall,
Or pardon'd being downe? Then Ile looke vp,
My fault is past. But oh, what forme of Prayer
Can serue my turne? Forgiue me my foule Murther:
That cannot be, since I am still possest
Of those effects for which I did the Murther.
My Crowne, mine owne Ambition, and my Queene:
May one be pardon'd, and retaine th'offence?
In the corrupted currants of this world,
Offences gilded hand may shoue by Iustice,
And oft 'tis seene, the wicked prize it selfe
Buyes out the Law; but 'tis not so aboue,
There is no shuffling, there the Action lyes
In his true Nature, and we our selues compell'd
Euen to the teeth and forehead of our faults,
To giue in euidence. What then? What rests?
Try what Repentance can. What can it not?
Yet what can it, when one cannot repent?
Oh wretched state! Oh bosome, blacke as death!
Oh limed soule, that strugling to be free,
Art more ingag'd: Helpe Angels, make assay:
Bow stubborne knees, and heart with strings of Steele,
Be soft as sinewes of the new-borne Babe,
All may be well.
@@.stageDirectionFisco
// Enter Hamlet//.
@@
''//Ham//.'' Now might I do it pat, now he is praying,
And now Ile doo't, and so he goes to Heauen,
And so am I reueng'd: that would be scann'd,
A Villaine killes my Father, and for that
I his foule Sonne, do this same Villaine send
To heauen. Oh this is hyre and Sallery, not Reuenge.
He tooke my Father grossely, full of bread,
With all his Crimes broad blowne, as fresh as May,
And how his Audit stands, who knowes, saue Heauen:
But in our circumstance and course of thought
'Tis heauie with him: and am I then reueng'd,
To take him in the purging of his Soule,
When he is fit and season'd for his passage? No.
Vp Sword, and know thou a more horrid hent
When he is drunke asleepe: or in his Rage,
Or in th'incestuous pleasure of his bed,
At gaming, swearing, or about some acte
That ha's no rellish of Saluation in't,
Then trip him, that his heeles may kicke at Heauen,
And that his Soule may be as damn'd aud blacke
As Hell, whereto it goes. My Mother stayes,
|dialogWithStageDirectionFisco|k
|This Physicke but prolongs thy sickly dayes.|//Exit//.|
''//King//.'' My words flye vp, my thoughts remain below,
|dialogWithStageDirectionFisco|k
|Words without thoughts, neuer to Heauen go.|//Exit//.|
//Enter KING CLAUDIUS, ROSENCRANTZ, and GUILDENSTERN//
''KING CLAUDIUS''
|3.3.1|I like him not, nor stands it safe with us|
|3.3.2|To let his madness range. Therefore prepare you;|
|3.3.3|I your commission will forthwith dispatch,|
|3.3.4|And he to England shall along with you:|
|3.3.5|The terms of our estate may not endure|
|3.3.6|Hazard so dangerous as doth hourly grow|
|3.3.7|Out of his lunacies.|
''GUILDENSTERN''
|3.3.8|We will ourselves provide:|
|3.3.9|Most holy and religious fear it is|
|3.3.10|To keep those many many bodies safe|
|3.3.11|That live and feed upon your majesty.|
''ROSENCRANTZ''
|3.3.12|The single and peculiar life is bound,|
|3.3.13|With all the strength and armour of the mind,|
|3.3.14|To keep itself from noyance; but much more|
|3.3.15|That spirit upon whose weal depend and rest|
|3.3.16|The lives of many. The cease of majesty|
|3.3.17|Dies not alone; but, like a gulf, doth draw|
|3.3.18|What's near it with it: it is a massy wheel,|
|3.3.19|Fix'd on the summit of the highest mount,|
|3.3.20|To whose huge spokes ten thousand lesser things|
|3.3.21|Are mortised and adjoin'd; which, when it falls,|
|3.3.22|Each small annexment, petty consequence,|
|3.3.23|Attends the boisterous ruin. Never alone|
|3.3.24|Did the king sigh, but with a general groan.|
''KING CLAUDIUS''
|3.3.25|Arm you, I pray you, to this speedy voyage;|
|3.3.26|For we will fetters put upon this fear,|
|3.3.27|Which now goes too free-footed.|
''ROSENCRANTZ''
''GUILDENSTERN''
|3.3.28|We will haste us.|
//Exeunt ROSENCRANTZ and GUILDENSTERN//
//Enter POLONIUS//
''LORD POLONIUS''
|3.3.29|My lord, he's going to his mother's closet:|
|3.3.30|Behind the arras I'll convey myself,|
|3.3.31|To hear the process; and warrant she'll tax him home:|
|3.3.32|And, as you said, and wisely was it said,|
|3.3.33|'Tis meet that some more audience than a mother,|
|3.3.34|Since nature makes them partial, should o'erhear|
|3.3.35|The speech, of vantage. Fare you well, my liege:|
|3.3.36|I'll call upon you ere you go to bed,|
|3.3.37|And tell you what I know.|
''KING CLAUDIUS''
|3.3.38|Thanks, dear my lord.|
//Exit POLONIUS//
|3.3.39|O, my offence is rank it smells to heaven;|
|3.3.40|It hath the primal eldest curse upon't,|
|3.3.41|A brother's murder. Pray can I not,|
|3.3.42|Though inclination be as sharp as will:|
|3.3.43|My stronger guilt defeats my strong intent;|
|3.3.44|And, like a man to double business bound,|
|3.3.45|I stand in pause where I shall first begin,|
|3.3.46|And both neglect. What if this cursed hand|
|3.3.47|Were thicker than itself with brother's blood,|
|3.3.48|Is there not rain enough in the sweet heavens|
|3.3.49|To wash it white as snow? Whereto serves mercy|
|3.3.50|But to confront the visage of offence?|
|3.3.51|And what's in prayer but this two-fold force,|
|3.3.52|To be forestalled ere we come to fall,|
|3.3.53|Or pardon'd being down? Then I'll look up;|
|3.3.54|My fault is past. But, O, what form of prayer|
|3.3.55|Can serve my turn? 'Forgive me my foul murder'?|
|3.3.56|That cannot be; since I am still possess'd|
|3.3.57|Of those effects for which I did the murder,|
|3.3.58|My crown, mine own ambition and my queen.|
|3.3.59|May one be pardon'd and retain the offence?|
|3.3.60|In the corrupted currents of this world|
|3.3.61|Offence's gilded hand may shove by justice,|
|3.3.62|And oft 'tis seen the wicked prize itself|
|3.3.63|Buys out the law: but 'tis not so above;|
|3.3.64|There is no shuffling, there the action lies|
|3.3.65|In his true nature; and we ourselves compell'd,|
|3.3.66|Even to the teeth and forehead of our faults,|
|3.3.67|To give in evidence. What then? what rests?|
|3.3.68|Try what repentance can: what can it not?|
|3.3.69|Yet what can it when one can not repent?|
|3.3.70|O wretched state! O bosom black as death!|
|3.3.71|O limed soul, that, struggling to be free,|
|3.3.72|Art more engaged! Help, angels! Make assay!|
|3.3.73|Bow, stubborn knees; and, heart with strings of steel,|
|3.3.74|Be soft as sinews of the newborn babe!|
|3.3.75|All may be well.|
//Retires and kneels//
//Enter HAMLET//
''HAMLET''
|3.3.76|Now might I do it pat, now he is praying;|
|3.3.77|And now I'll do't. And so he goes to heaven;|
|3.3.78|And so am I revenged. That would be scann'd:|
|3.3.79|A villain kills my father; and for that,|
|3.3.80|I, his sole son, do this same villain send|
|3.3.81|To heaven.|
|3.3.82|O, this is hire and salary, not revenge.|
|3.3.83|He took my father grossly, full of bread;|
|3.3.84|With all his crimes broad blown, as flush as May;|
|3.3.85|And how his audit stands who knows save heaven?|
|3.3.86|But in our circumstance and course of thought,|
|3.3.87|'Tis heavy with him: and am I then revenged,|
|3.3.88|To take him in the purging of his soul,|
|3.3.89|When he is fit and season'd for his passage?|
|3.3.90|No!|
|3.3.91|Up, sword; and know thou a more horrid hent:|
|3.3.92|When he is drunk asleep, or in his rage,|
|3.3.93|Or in the incestuous pleasure of his bed;|
|3.3.94|At gaming, swearing, or about some act|
|3.3.95|That has no relish of salvation in't;|
|3.3.96|Then trip him, that his heels may kick at heaven,|
|3.3.97|And that his soul may be as damn'd and black|
|3.3.98|As hell, whereto it goes. My mother stays:|
|3.3.99|This physic but prolongs thy sickly days.|
//Exit//
''KING CLAUDIUS''
|3.3.100|[Rising] My words fly up, my thoughts remain below:|
|3.3.101|Words without thoughts never to heaven go.|
//Exit//
@@.stageDirectionFisco
//Enter King, Rosencraus, and Guyldensterne//.
@@
''//King//.'' I like him not, nor stands it safe with vs
To let his madnes range, therefore prepare you,
I your commission will forth-with dispatch,
And he to //England// shall along with you,
The termes of our estate may not endure
Hazerd so neer's as doth hourely grow
Out of his browes.
''//Guyl//.'' We will our selues prouide,
Most holy and religious feare it is
To keepe those many many bodies safe
That liue and feede vpon your Maiestie.
''//Ros//.'' The single and peculier life is bound
With all the strength and armour of the mind
To keepe it selfe from noyance, but much more
That spirit, vpon whose weale depends and rests
The liues of many, the cesse of Maiestie
Dies not alone; but like a gulfe doth draw
What's neere it, with it, or it is a massie wheele
Fixt on the somnet of the highest mount,
To whose hough spokes, tenne thousand lesser things
Are morteist and adioynd, which when it falls,
Each small annexment petty consequence
Attends the boystrous raine, neuer alone
Did the King sigh, but a generall grone.
''//King//.'' Arme you I pray you to this speedy viage,
For we will fetters put about this feare
Which now goes too free-footed.
|dialogWithStageDirectionFisco|k
|''//Ros//.'' We will hast vs.|//Exeunt Gent//.|
@@.stageDirectionFisco
//Enter Polonius//.
@@
''//Pol//.'' My Lord, hee's going to his mothers closet,
Behind the Arras I'le conuay my selfe
To heare the processe, I'le warrant shee'letax him home,
And as you sayd, and wisely was it sayd,
Tis meete that some more audience then a mother,
Since nature makes them parciall, should ore-heare
The speech of vantage; farre you well my Leige,
I'le call vpon you ere you goe to bed.
|dialogWithStageDirectionFisco|k
|And tell you what I knowe.|//Exit//.|
''//King//.'' Thankes deere my Lord.
O my offence is ranck, it smels to heauen,
It hath the primall eldest curse vppont,
A brothers murther, pray can I not,
Though inclination be as sharp as will,
My stronger guilt defeats my strong entent,
And like a man to double bussines bound,
I stand in pause where I shall first beginne,
And both neglect, what if this cursed hand
Were thicker then it selfe with brothers blood,
Is there not raine enough in the sweete Heauens
To wash it white as snowe, whereto serues mercy
But to confront the visage of offence?
And what's in prayer but this two fold force,
To be forestalled ere we come to fall,
Or pardon being downe, then I'le looke vp.
My fault is past, but oh what forme of prayer
Can serue my turne, forgiue me my foule murther,
That cannot be since I am still possest
Of those effects for which I did the murther;
My Crowne, mine owne ambition, and my Queene;
May one be pardond and retaine th'offence?
In the corrupted currents of this world,
Offences guilded hand may showe by iustice,
And oft tis seene the wicked prize it selfe
Buyes out the lawe, but tis not so aboue,
There is no shufling, there the action lies
In his true nature, and we our selues compeld
Euen to the teeth and forhead of our faults
To giue in euidence, what then, what rests,
Try what repentance can, what can it not,
Yet what can it, when one cannot repent?
O wretched state, ô bosome blacke as death,
O limed soule, that struggling to be free,
Art more ingaged; helpe Angels make assay,
Bowe stubborne knees, and hart with strings of steale,
Be soft as sinnewes of the new borne babe,
All may be well.
@@.stageDirectionFisco
//Enter Hamlet//.
@@
''//Ham//.'' Now might I doe it, but now a is a praying,
And now Ile doo't, and so a goes to heauen,
And so am I reuendge, that would be scand
A villaine kills my father, and for that,
I his sole sonne, doe this same villaine send
To heauen.
Why, this is base and silly, not reuendge,
A tooke my father grosly full of bread,
Withall his crimes braod blowne, as flush as May,
And how his audit stands who knowes saue heauen,
But in our circumstance and course of thought,
Tis heauy with him: and am I then reuendged
To take him in the purging of his soule,
When he is fit and seasond for his passage?
No.
Vp sword, and knowe thou a more horrid hent,
When he is drunke, a sleepe, or in his rage,
Or in th'incestious pleasure of his bed,
At game a swearing, or about some act
That has no relish of saluation in't,
Then trip him that his heels may kick at heauen,
And that his soule may be as damnd and black
As hell whereto it goes; my mother staies,
|dialogWithStageDirectionFisco|k
|This phisick but prolongs thy sickly daies.|//Exit//.|
''//King//.'' My words fly vp, my thoughts remaine belowe
|dialogWithStageDirectionFisco|k
|Words without thoughts neuer to heauen goe.|//Exit//.|
@@.stageDirectionFisco
// Enter Queene and Polonius//.
@@
''//Pol//.'' He will come straight:
Looke you lay home to him,
Tell him his prankes haue been too broad to beare with,
And that your Grace hath scree'nd, and stoode betweene
Much heate, and him. Ile silence me e'ene heere:
Pray you be round with him.
''//Ham//.'' //within//. Mother, mother, mother.
''//Qu//.'' Ile warrant you, feare me not.
Withdraw, I heare him comming.
@@.stageDirectionFisco
// Enter Hamlet//.
@@
''//Ham//.'' Now Mother, what's the matter?
''//Qu//.'' //Hamlet//, thou hast thy Father much offended.
''//Ham//.'' Mother, you haue my Father much offended.
''//Qu//.'' Come, come, you answer with an idle tongue.
''//Ham//.'' Go, go, you question with an idle tongue.
''//Qu//.'' Why how now //Hamlet//?
''//Ham//.'' Whats the matter now?
''//Qu//.'' Haue you forgot me?
''//Ham//.'' No by the Rood, not so:
You are the Queene, your Husbands Brothers wife,
But would you were not so. You are my Mother.
''//Qu//.'' Nay, then Ile set those to you that can speake.
''//Ham//.'' Come, come, and sit you downe, you shall not
boudge:
You go not till I set you vp a glasse,
Where you may see the inmost part of you?
''//Qu//.'' What wilt thou do? thou wilt not murther me?
Helpe, helpe, hoa.
''//Pol//.'' What hoa, helpe, helpe, helpe.
''//Ham//.'' How now, a Rat? dead for a Ducate, dead.
|dialogWithStageDirectionFisco|k
|''//Pol//.'' Oh I am slaine.|//Killes Polonius//.|
''//Qu//.'' Oh me, what hast thou done?
''//Ham//.'' Nay I know not, is it the King?
''//Qu//.'' Oh what a rash, and bloody deed is this?
''//Ham//.'' A bloody deed, almost as bad good Mother,
As kill a King, and marrie with his Brother.
''//Qu//.'' As kill a King?
''//Ham//.'' I Lady, 'twas my word.
Thou wretched, rash, intruding foole farewell,
I tooke thee for thy Betters, take thy Fortune,
Thou find'st to be too busie, is some danger.
Leaue wringing of your hands, peace, sit you downe,
And let me wring your heart, for so I shall
If it be made of penetrable stuffe;
If damned Custome haue not braz'd it so,
That it is proofe and bulwarke against Sense.
''//Qu//.'' What haue I done, that thou dar'st wag thy tong,
In noise so rude against me?
''//Ham//.'' Such an Act
That blurres the grace and blush of Modestie,
Cals Vertue Hypocrite, takes off the Rose
From the faire forehead of an innocent loue,
And makes a blister there. Makes marriage vowes
As false as Dicers Oathes. Oh such a deed,
As from the body of Contraction pluckes
The very soule, and sweete Religion makes
A rapsidie of words. Heauens face doth glow,
Yea this solidity and compound masse,
With tristfull visage as against the doome,
Is thought-sicke at the act.
''//Qu//.'' Aye me; what act, that roares so lowd, & thun-
ders in the Index.
''//Ham//.'' Looke heere vpon this Picture, and on this,
The counterfet presentment of two Brothers:
See what a grace was seated on his Brow,
//Hyperions// curles, the front of Ioue himselfe,
An eye like Mars, to threaten or command
A Station, like the Herald Mercurie
New lighted on a heauen-kissing hill:
A Combination, and a forme indeed,
Where euery God did seeme to set his Seale,
To giue the world assurance of a man.
This was your Husband. Looke you now what followes.
Heere is your Husband, like a Mildew'd eare
Blasting his wholsom breath. Haue you eyes?
Could you on this faire Mountaine leaue to feed,
And batten on this Moore? Ha? Haue you eyes?
You cannot call it Loue: For at your age,
The hey-day in the blood is tame, it's humble,
And waites vpon the Iudgement: and what Iudgement
Would step from this, to this? What diuell was't,
That thus hath cousend you at hoodman-blinde?
O Shame! where is thy Blush? Rebellious Hell,
If thou canst mutine in a Matrons bones,
To flaming youth, let Vertue be as waxe,
And melt in her owne fire. Proclaime no shame,
When the compulsiue Ardure giues the charge,
Since Frost it selfe, as actiuely doth burne,
As Reason panders Will.
''//Qu//.'' O //Hamlet//, speake no more.
Thou turn'st mine eyes into my very soule,
And there I see such blacke and grained spots,
As will not leaue their Tinct.
''//Ham//.'' Nay, but to liue
In the ranke sweat of an enseamed bed,
Stew'd in Corruption; honying and making loue
Ouer the nasty Stye.
''//Qu//.'' Oh speake to me, no more,
These words like Daggers enter in mine eares.
No more sweet //Hamlet//.
''//Ham//.'' A Murderer, and a Villaine:
A Slaue, that is not twentieth patt the tythe
Of your precedent Lord. A vice of Kings,
A Cutpurse of the Empire and the Rule.
That from a shelfe, the precious Diadem stole,
And put it in his Pocket.
''//Qu//.'' No more.
@@.stageDirectionFisco
// Enter Ghost//.
@@
''//Ham//.'' A King of shreds and patches.
Saue me; and houer o're me with your wings
You heauenly Guards. What would you gracious figure?
''//Qu//.'' Alas he's mad.
''//Ham//.'' Do you not come your tardy Sonne to chide,
That laps't in Time and Passion, lets go by
Th'important acting of your dread command? Oh say.
''//Ghost//.'' Do not forget: this Visitation
Is but to whet thy almost blunted purpose.
But looke, Amazement on thy Mother sits;
O step betweene her, and her fighting Soule,
Conceit in weakest bodies, strongest workes.
Speake to her //Hamlet//.
''//Ham//.'' How is it with you Lady?
''//Qu//.'' Alas, how is't with you?
That you bend your eye on vacancie,
And with their corporall ayre do hold discourse.
Forth at your eyes, your spirits wildely peepe,
And as the sleeping Soldiours in th'Alarme,
Your bedded haire, like life in excrements,
Start vp, and stand an end. Oh gentle Sonne,
Vpon the heate and flame of thy distemper
Sprinkle coole patience. Whereon do you looke?
''//Ham//.'' On him, on him: look you how pale he glares,
His forme and cause conioyn'd, preaching to stones,
Would make them capeable. Do not looke vpon me,
Least with this pitteous action you conuert
My sterne effects: then what I haue to do,
Will want true colour; teares perchance for blood.
''//Qu//.'' To who do you speake this?
''//Ham//.'' Do you see nothing there?
''//Qu//.'' Nothing at all, yet all that is I see.
''//Ham//.'' Nor did you nothing heare?
''//Qu//.'' No, nothing but our selues.
''//Ham//.'' Why look you there: looke how it steals away:
My Father in his habite, as he liued,
|dialogWithStageDirectionFisco|k
|Looke where he goes euen now out at the Portall.|//Exit//.|
''//Qu//.'' This is the very coynage of your Braine,
This bodilesse Creation extasie is very cunning in.
''//Ham//.'' Extasie?
My Pulse as yours doth temperately keepe time,
And makes as healthfull Musicke. It is not madnesse
That I haue vttered; bring me to the Test
And I the matter will re-word: which madnesse
Would gamboll from. Mother, for loue of Grace,
Lay not a flattering Vnction to your soule,
That not your trespasse, but my madnesse speakes:
It will but skin and filme the Vlcerous place,
Whil'st ranke Corruption mining all within,
Infects vnseene. Confesse your selfe to Heauen,
Repent what's past, auoyd what is to come,
And do not spred the Compost or the Weedes,
To make them ranke. Forgiue me this my Vertue,
For in the fatnesse of this pursie times,
Vertue it selfe, of Vice must pardon begge,
Yea courb, and woe, for leaue to do him good.
''//Qu//.'' Oh //Hamlet//,
Thou hast cleft my heart in twaine.
''//Ham//.'' O throw away the worser part of it,
And liue the purer with the other halfe.
Good night, but go not to mine Vnkles bed,
Assume a Vertue, if you haue it not, refraine to night,
And that shall lend a kinde of easinesse
To the next abstinence. Once more goodnight,
And when you are desirous to be blest,
Ile blessing begge of you. For this same Lord,
I do repent: but heauen hath pleas'd it so,
To punish me with this, and this with me,
That I must be their Scourge and Minister.
I will bestow him, and will answer well
The death I gaue him: so againe, good night.
I must be cruell, onely to be kinde;
Thus bad begins, and worse remaines behinde.
''//Qu//.'' What shall I do?
''//Ham//.'' Not this by no meanes that I bid you do:
Let the blunt King tempt you againe to bed,
Pinch Wanton on your cheeke, call you his Mouse,
And let him for a paire of reechie kisses,
Or padling in your necke with his damn'd Fingers,
Make you to rauell all this matter out,
That I essentially am not in madnesse,
But made in craft. 'Twere good you let him know,
For who that's but a Queene, faire, sober, wise,
Would from a Paddocke, from a Bat, a Gibbe,
Such deere concernings hide, Who would do so,
No in despight of Sense and Secrecie,
Vnpegge the Basket on the houses top:
Let the Birds flye, and like the famous Ape
To try Conclusions in the Basket, creepe
And breake your owne necke downe.
''//Qu//.'' Be thou assur'd, if words be made of breath,
And breath of life: I haue no life to breath
What thou hast saide to me.
''//Ham//.'' I must to England, you know that?
''//Qu//.'' Alacke I had forgot: 'Tis so concluded on.
''//Ham//.'' This man shall set me packing:
Ile lugge the Guts into the Neighbor roome,
Mother goodnight. Indeede this Counsellor
Is now most still, most secret, and most graue,
Who was in life, a foolish prating Knaue.
Come sir, to draw toward an end with you.
Good night Mother.
|dialogWithStageDirectionFisco|k
||//Exit Hamlet tugging in Polonius//.|
//Enter QUEEN GERTRUDE and POLONIUS//
''LORD POLONIUS''
|3.4.1|He will come straight. Look you lay home to him:|
|3.4.2|Tell him his pranks have been too broad to bear with,|
|3.4.3|And that your grace hath screen'd and stood between|
|3.4.4|Much heat and him. I'll sconce me even here.|
|3.4.5|Pray you, be round with him.|
''HAMLET''
|3.4.6|[Within] Mother, mother, mother!|
''QUEEN GERTRUDE''
|3.4.7|I'll warrant you,|
|3.4.8|Fear me not: withdraw, I hear him coming.|
//POLONIUS hides behind the arras//
//Enter HAMLET//
''HAMLET''
|3.4.9|Now, mother, what's the matter?|
''QUEEN GERTRUDE''
|3.4.10|Hamlet, thou hast thy father much offended.|
''HAMLET''
|3.4.11|Mother, you have my father much offended.|
''QUEEN GERTRUDE''
|3.4.12|Come, come, you answer with an idle tongue.|
''HAMLET''
|3.4.13|Go, go, you question with a wicked tongue.|
''QUEEN GERTRUDE''
|3.4.14|Why, how now, Hamlet!|
''HAMLET''
|3.4.15|What's the matter now?|
''QUEEN GERTRUDE''
|3.4.16|Have you forgot me?|
''HAMLET''
|3.4.17|No, by the rood, not so:|
|3.4.18|You are the queen, your husband's brother's wife;|
|3.4.19|And--would it were not so!--you are my mother.|
''QUEEN GERTRUDE''
|3.4.20|Nay, then, I'll set those to you that can speak.|
''HAMLET''
|3.4.21|Come, come, and sit you down; you shall not budge;|
|3.4.22|You go not till I set you up a glass|
|3.4.23|Where you may see the inmost part of you.|
''QUEEN GERTRUDE''
|3.4.24|What wilt thou do? thou wilt not murder me?|
|3.4.25|Help, help, ho!|
''LORD POLONIUS''
|3.4.26|[Behind] What, ho! help, help, help!|
''HAMLET''
|3.4.27|[Drawing] How now! a rat? Dead, for a ducat, dead!|
//Makes a pass through the arras//
''LORD POLONIUS''
|3.4.28|[Behind] O, I am slain!|
//Falls and dies//
''QUEEN GERTRUDE''
|3.4.29|O me, what hast thou done?|
''HAMLET''
|3.4.30|Nay, I know not:|
|3.4.31|Is it the king?|
''QUEEN GERTRUDE''
|3.4.32|O, what a rash and bloody deed is this!|
''HAMLET''
|3.4.33|A bloody deed! almost as bad, good mother,|
|3.4.34|As kill a king, and marry with his brother.|
''QUEEN GERTRUDE''
|3.4.35|As kill a king!|
''HAMLET''
|3.4.36| Ay, lady, 'twas my word.|
//Lifts up the array and discovers POLONIUS//
|3.4.37|Thou wretched, rash, intruding fool, farewell!|
|3.4.38|I took thee for thy better: take thy fortune;|
|3.4.39|Thou find'st to be too busy is some danger.|
|3.4.40|Leave wringing of your hands: peace! sit you down,|
|3.4.41|And let me wring your heart; for so I shall,|
|3.4.42|If it be made of penetrable stuff,|
|3.4.43|If damned custom have not brass'd it so|
|3.4.44|That it is proof and bulwark against sense.|
''QUEEN GERTRUDE''
|3.4.45|What have I done, that thou darest wag thy tongue|
|3.4.46|In noise so rude against me?|
''HAMLET''
|3.4.47|Such an act|
|3.4.48|That blurs the grace and blush of modesty,|
|3.4.49|Calls virtue hypocrite, takes off the rose|
|3.4.50|From the fair forehead of an innocent love|
|3.4.51|And sets a blister there, makes marriage-vows|
|3.4.52|As false as dicers' oaths: O, such a deed|
|3.4.53|As from the body of contraction plucks|
|3.4.54|The very soul, and sweet religion makes|
|3.4.55|A rhapsody of words: heaven's face doth glow:|
|3.4.56|Yea, this solidity and compound mass,|
|3.4.57|With tristful visage, as against the doom,|
|3.4.58|Is thought-sick at the act.|
''QUEEN GERTRUDE''
|3.4.59|Ay me, what act,|
|3.4.60|That roars so loud, and thunders in the index?|
''HAMLET''
|3.4.61|Look here, upon this picture, and on this,|
|3.4.62|The counterfeit presentment of two brothers.|
|3.4.63|See, what a grace was seated on this brow;|
|3.4.64|Hyperion's curls; the front of Jove himself;|
|3.4.65|An eye like Mars, to threaten and command;|
|3.4.66|A station like the herald Mercury|
|3.4.67|New-lighted on a heaven-kissing hill;|
|3.4.68|A combination and a form indeed,|
|3.4.69|Where every god did seem to set his seal,|
|3.4.70|To give the world assurance of a man:|
|3.4.71|This was your husband. Look you now, what follows:|
|3.4.72|Here is your husband; like a mildew'd ear,|
|3.4.73|Blasting his wholesome brother. Have you eyes?|
|3.4.74|Could you on this fair mountain leave to feed,|
|3.4.75|And batten on this moor? Ha! have you eyes?|
|3.4.76|You cannot call it love; for at your age|
|3.4.77|The hey-day in the blood is tame, it's humble,|
|3.4.78|And waits upon the judgment: and what judgment|
|3.4.79|Would step from this to this? Sense, sure, you have,|
|3.4.80|Else could you not have motion; but sure, that sense|
|3.4.81|Is apoplex'd; for madness would not err,|
|3.4.82|Nor sense to ecstasy was ne'er so thrall'd|
|3.4.83|But it reserved some quantity of choice,|
|3.4.84|To serve in such a difference. What devil was't|
|3.4.85|That thus hath cozen'd you at hoodman-blind?|
|3.4.86|Eyes without feeling, feeling without sight,|
|3.4.87|Ears without hands or eyes, smelling sans all,|
|3.4.88|Or but a sickly part of one true sense|
|3.4.89|Could not so mope.|
|3.4.90|O shame! where is thy blush? Rebellious hell,|
|3.4.91|If thou canst mutine in a matron's bones,|
|3.4.92|To flaming youth let virtue be as wax,|
|3.4.93|And melt in her own fire: proclaim no shame|
|3.4.94|When the compulsive ardour gives the charge,|
|3.4.95|Since frost itself as actively doth burn|
|3.4.96|And reason panders will.|
''QUEEN GERTRUDE''
|3.4.97|O Hamlet, speak no more:|
|3.4.98|Thou turn'st mine eyes into my very soul;|
|3.4.99|And there I see such black and grained spots|
|3.4.100|As will not leave their tinct.|
''HAMLET''
|3.4.101|Nay, but to live|
|3.4.102|In the rank sweat of an enseamed bed,|
|3.4.103|Stew'd in corruption, honeying and making love|
|3.4.104|Over the nasty sty,--|
''QUEEN GERTRUDE''
|3.4.105|O, speak to me no more;|
|3.4.106|These words, like daggers, enter in mine ears;|
|3.4.107|No more, sweet Hamlet!|
''HAMLET''
|3.4.108|A murderer and a villain;|
|3.4.109|A slave that is not twentieth part the tithe|
|3.4.110|Of your precedent lord; a vice of kings;|
|3.4.111|A cutpurse of the empire and the rule,|
|3.4.112|That from a shelf the precious diadem stole,|
|3.4.113|And put it in his pocket!|
''QUEEN GERTRUDE''
|3.4.114|No more!|
''HAMLET''
|3.4.115|A king of shreds and patches,--|
//Enter Ghost//
|3.4.116|Save me, and hover o'er me with your wings,|
|3.4.117|You heavenly guards! What would your gracious figure?|
''QUEEN GERTRUDE''
|3.4.118|Alas, he's mad!|
''HAMLET''
|3.4.119|Do you not come your tardy son to chide,|
|3.4.120|That, lapsed in time and passion, lets go by|
|3.4.121|The important acting of your dread command? O, say!|
''Ghost''
|3.4.122|Do not forget: this visitation|
|3.4.123|Is but to whet thy almost blunted purpose.|
|3.4.124|But, look, amazement on thy mother sits:|
|3.4.125|O, step between her and her fighting soul:|
|3.4.126|Conceit in weakest bodies strongest works:|
|3.4.127|Speak to her, Hamlet.|
''HAMLET''
|3.4.128|How is it with you, lady?|
''QUEEN GERTRUDE''
|3.4.129|Alas, how is't with you,|
|3.4.130|That you do bend your eye on vacancy|
|3.4.131|And with the incorporal air do hold discourse?|
|3.4.132|Forth at your eyes your spirits wildly peep;|
|3.4.133|And, as the sleeping soldiers in the alarm,|
|3.4.134|Your bedded hair, like life in excrements,|
|3.4.135|Starts up, and stands on end. O gentle son,|
|3.4.136|Upon the heat and flame of thy distemper|
|3.4.137|Sprinkle cool patience. Whereon do you look?|
''HAMLET''
|3.4.138|On him, on him! Look you, how pale he glares!|
|3.4.139|His form and cause conjoin'd, preaching to stones,|
|3.4.140|Would make them capable. Do not look upon me;|
|3.4.141|Lest with this piteous action you convert|
|3.4.142|My stern effects: then what I have to do|
|3.4.143|Will want true colour; tears perchance for blood.|
''QUEEN GERTRUDE''
|3.4.144|To whom do you speak this?|
''HAMLET''
|3.4.145|Do you see nothing there?|
''QUEEN GERTRUDE''
|3.4.146|Nothing at all; yet all that is I see.|
''HAMLET''
|3.4.147|Nor did you nothing hear?|
''QUEEN GERTRUDE''
|3.4.148|No, nothing but ourselves.|
''HAMLET''
|3.4.149|Why, look you there! look, how it steals away!|
|3.4.150|My father, in his habit as he lived!|
|3.4.151|Look, where he goes, even now, out at the portal!|
//Exit Ghost//
''QUEEN GERTRUDE''
|3.4.152|This the very coinage of your brain:|
|3.4.153|This bodiless creation ecstasy|
|3.4.154|Is very cunning in.|
''HAMLET''
|3.4.155|Ecstasy!|
|3.4.156|My pulse, as yours, doth temperately keep time,|
|3.4.157|And makes as healthful music: it is not madness|
|3.4.158|That I have utter'd: bring me to the test,|
|3.4.159|And I the matter will re-word; which madness|
|3.4.160|Would gambol from. Mother, for love of grace,|
|3.4.161|Lay not that mattering unction to your soul,|
|3.4.162|That not your trespass, but my madness speaks:|
|3.4.163|It will but skin and film the ulcerous place,|
|3.4.164|Whilst rank corruption, mining all within,|
|3.4.165|Infects unseen. Confess yourself to heaven;|
|3.4.166|Repent what's past; avoid what is to come;|
|3.4.167|And do not spread the compost on the weeds,|
|3.4.168|To make them ranker. Forgive me this my virtue;|
|3.4.169|For in the fatness of these pursy times|
|3.4.170|Virtue itself of vice must pardon beg,|
|3.4.171|Yea, curb and woo for leave to do him good.|
''QUEEN GERTRUDE''
|3.4.172|O Hamlet, thou hast cleft my heart in twain.|
''HAMLET''
|3.4.173|O, throw away the worser part of it,|
|3.4.174|And live the purer with the other half.|
|3.4.175|Good night: but go not to mine uncle's bed;|
|3.4.176|Assume a virtue, if you have it not.|
|3.4.177|That monster, custom, who all sense doth eat,|
|3.4.178|Of habits devil, is angel yet in this,|
|3.4.179|That to the use of actions fair and good|
|3.4.180|He likewise gives a frock or livery,|
|3.4.181|That aptly is put on. Refrain to-night,|
|3.4.182|And that shall lend a kind of easiness|
|3.4.183|To the next abstinence: the next more easy;|
|3.4.184|For use almost can change the stamp of nature,|
|3.4.185|And either [ ] the devil, or throw him out|
|3.4.186|With wondrous potency. Once more, good night:|
|3.4.187|And when you are desirous to be bless'd,|
|3.4.188|I'll blessing beg of you. For this same lord,|
//Pointing to POLONIUS//
|3.4.189|I do repent: but heaven hath pleased it so,|
|3.4.190|To punish me with this and this with me,|
|3.4.191|That I must be their scourge and minister.|
|3.4.192|I will bestow him, and will answer well|
|3.4.193|The death I gave him. So, again, good night.|
|3.4.194|I must be cruel, only to be kind:|
|3.4.195|Thus bad begins and worse remains behind.|
|3.4.196|One word more, good lady.|
''QUEEN GERTRUDE''
|3.4.197|What shall I do?|
''HAMLET''
|3.4.198|Not this, by no means, that I bid you do:|
|3.4.199|Let the bloat king tempt you again to bed;|
|3.4.200|Pinch wanton on your cheek; call you his mouse;|
|3.4.201|And let him, for a pair of reechy kisses,|
|3.4.202|Or paddling in your neck with his damn'd fingers,|
|3.4.203|Make you to ravel all this matter out,|
|3.4.204|That I essentially am not in madness,|
|3.4.205|But mad in craft. 'Twere good you let him know;|
|3.4.206|For who, that's but a queen, fair, sober, wise,|
|3.4.207|Would from a paddock, from a bat, a gib,|
|3.4.208|Such dear concernings hide? who would do so?|
|3.4.209|No, in despite of sense and secrecy,|
|3.4.210|Unpeg the basket on the house's top.|
|3.4.211|Let the birds fly, and, like the famous ape,|
|3.4.212|To try conclusions, in the basket creep,|
|3.4.213|And break your own neck down.|
''QUEEN GERTRUDE''
|3.4.214|Be thou assured, if words be made of breath,|
|3.4.215|And breath of life, I have no life to breathe|
|3.4.216|What thou hast said to me.|
''HAMLET''
|3.4.217|I must to England; you know that?|
''QUEEN GERTRUDE''
|3.4.218|Alack,|
|3.4.219|I had forgot: 'tis so concluded on.|
''HAMLET''
|3.4.220|There's letters seal'd: and my two schoolfellows,|
|3.4.221|Whom I will trust as I will adders fang'd,|
|3.4.222|They bear the mandate; they must sweep my way,|
|3.4.223|And marshal me to knavery. Let it work;|
|3.4.224|For 'tis the sport to have the engineer|
|3.4.225|Hoist with his own petard: and 't shall go hard|
|3.4.226|But I will delve one yard below their mines,|
|3.4.227|And blow them at the moon: O, 'tis most sweet,|
|3.4.228|When in one line two crafts directly meet.|
|3.4.229|This man shall set me packing:|
|3.4.230|I'll lug the guts into the neighbour room.|
|3.4.231|Mother, good night. Indeed this counsellor|
|3.4.232|Is now most still, most secret and most grave,|
|3.4.233|Who was in life a foolish prating knave.|
|3.4.234|Come, sir, to draw toward an end with you.|
|3.4.235|Good night, mother.|
//Exeunt severally; HAMLET dragging in POLONIUS//
@@.stageDirectionFisco
//Enter Gertrard and Polonius//.
@@
''//Pol//.'' A will come strait, looke you lay home to him,
Tell him his prancks haue beene too braod to beare with,
And that your grace hath screend and stood betweene
Much heate and him, Ile silence me euen heere,
Pray you be round.
@@.stageDirectionFisco
//Enter Hamlet//.
@@
''//Ger//.'' Ile wait you, feare me not,
With-drawe, I heare him comming.
''//Ham//.'' Now mother, what's the matter?
''//Ger//.'' //Hamlet//, thou hast thy father much offended.
''//Ham//.'' Mother, you haue my father much offended.
''//Ger//.'' Come, come, you answere with an idle tongue.
''//Ham//.'' Goe, goe, you question with a wicked tongue.
''//Ger//.'' Why how now //Hamlet?//
''//Ham//.'' What's the matter now?
''//Ger//.'' Haue you forgot me?
''//Ham//.'' No by the rood not so,
You are the Queene, your husbands brothers wife,
And would it were not so, you are my mother.
''//Ger//.'' Nay, then Ile set those to you that can speake.
''//Ham//.'' Come, come, and sit you downe, you shall not boudge,
You goe not till I set you vp a glasse
Where you may see the most part of you.
''//Ger//.'' What wilt thou doe, thou wilt not murther me,
Helpe how.
''//Pol//.'' What how helpe.
''//Ham//.'' How now, a Rat, dead for a Duckat, dead.
''//Pol//.'' O I am slaine.
''//Ger//.'' O me, what hast thou done?
''//Ham//,'' Nay I knowe not, is it the King?
''//Ger//.'' O what a rash and bloody deede is this.
''//Ham//.'' A bloody deede, almost as bad, good mother
As kill a King, and marry with his brother.
''//Ger//.'' As kill a King.
''//Ham//.'' I Lady, it was my word.
Thou wretched, rash, intruding foole farwell,
I tooke thee for thy better, take thy fortune,
Thou find'st to be too busie is some danger,
Leaue wringing of your hands, peace sit you downe,
And let me wring your hart, for so I shall
If it be made of penitrable stu{
ff}e,
If damned custome haue not brasd it so,
That it be proofe and bulwark against sence.
''//Ger//.'' What haue I done, that thou dar'st wagge thy tongue
In noise so rude against me?
''//Ham//.'' Such an act
That blurres the grace and blush of modesty,
Cals vertue hippocrit, takes of the Rose
From the faire forhead of an innocent loue,
And sets a blister there, makes marriage vowes
As false as dicers oathes, ô such a deede,
As from the body of contraction plucks
The very soule, and sweet religion makes
A rapsedy of words; heauens face dooes glowe
Ore this solidity and compound masse
With heated visage, as against the doome
Is thought sick at the act
''//Quee//.'' Ay me, what act?
''//Ham//.'' That roares so low'd, and thunders in the Index,
Looke heere vpon this Picture, and on this,
The counterfeit presentment of two brothers,
See what a grace was seated on this browe,
//Hiperions// curles, the front of //Ioue// himselfe,
An eye like //Mars//, to threaten and command,
A station like the herald //Mercury//,
New lighted on a heaue, a kissing hill,
A combination, and a forme indeede,
Where euery God did seeme to set his seale
To giue the world assurance of a man,
This was your husband, looke you now what followes,
Heere is your husband like a mildewed eare,
Blasting his wholsome brother, haue you eyes,
Could you on this faire mountaine leaue to feede,
And batten on this Moore; ha, haue you eyes?
You cannot call it loue, for at your age
The heyday in the blood is tame, it's humble,
And waits vppon the iudgement, and what iudgement
Would step from this to this, sence sure youe haue
Els could you not haue motion, but sure that sence
Is appoplext, for madnesse would not erre
Nor sence to extacie was nere so thral'd
But it reseru'd some quantity of choise
To serue in such a difference, what deuill wast
That thus hath cosund you at hodman blind;
Eyes without feeling, feeling without sight,
Eares without hands, or eyes, smelling sance all,
Or but a sickly part of one true sence
Could not so mope: ô shame where is thy blush?
Rebellious hell,
If thou canst mutine in a Matrons bones,
To flaming youth let vertue be as wax
And melt in her owne fire, proclaime no shame
When the compulsiue ardure giues the charge,
Since frost it selfe as actiuely doth burne,
And reason pardons will.
''//Ger//.'' O //Hamlet //speake no more,
Thou turnst my very eyes into my soule,
And there I see such blacke and greeued spots
As will leaue there their tin'ct.
''//Ham//.'' Nay but to liue
In the ranck sweat of an inseemed bed
Stewed in corruption, honying, and making loue
Ouer the nasty stie.
''//Ger//.'' O speake to me no more,
These words like daggers enter in my eares,
No more sweete //Hamlet//.
''//Ham//.'' A murtherer and a villaine,
A slaue that is not twentith part the kyth
Of your precedent Lord, a vice of Kings,
A cut-purse of the Empire and the rule,
That from a shelfe the precious Diadem stole
And put it in his pocket.
''//Ger//.'' No more.
@@.stageDirectionFisco
//Enter Ghost//.
@@
''//Ham//.'' A King of shreds and patches,
Saue me and houer ore me with your wings
You heauenly gards: what would your gracious figure?
''//Ger//.'' Alas hee's mad.
''//Ham//.'' Doe you not come your tardy sonne to chide,
That lap'st in time and passion lets goe by
Th'important acting of your dread command, ô say.
''//Ghost//.'' Doe not forget, this visitation
Is but to whet thy almost blunted purpose,
But looke, amazement on thy mother sits,
O step betweene her, and her fighting soule,
Conceit in weakest bodies strongest workes,
Speake to her //Hamlet//.
''//Ham//.'' How is it with you Lady?
''//Ger//.'' Alas how i'st with you?
That you doe bend your eye on vacancie,
And with th'incorporall ayre doe hold discourse,
Foorth at your eyes your spirits wildly peep,
And as the sleeping souldiers in th'alarme,
Your bedded haire like life in excrements
Start vp and stand an end, ô gentle sonne
Vpon the heat and flame of thy distemper
Sprinckle coole patience, whereon doe you looke?
''//Ham//.'' On him, on him, looke you how pale he glares,
His forme and cause conioynd, preaching to stones
Would make them capable, doe not looke vpon me,
Least with this pittious action you conuert
My stearne effects, then what I haue to doe
Will want true cullour, teares perchance for blood.
''//Ger//.'' To whom doe you speake this?
''//Ham//.'' Doe you see nothing there?
''//Ger//.'' Nothing at all, yet all that is I see.
''//Ham//.'' Nor did you nothing heare?
''//Ger//.'' No nothing but our selues.
''//Ham//.'' Why looke you there, looke how it steales away,
My father in his habit as he liued,
|dialogWithStageDirectionFisco|k
|Looke where he goes, euen now out at the portall.|//Exit Ghost//.|
''//Ger//.'' This is the very coynage of your braine,
This bodilesse creation extacie is very cunning in.
''//Ham//.'' My pulse as yours doth temperatly keepe time,
And makes as healthfull musicke, it is not madnesse
That I haue vttred, bring me to the test,
And the matter will reword, which madnesse
Would gambole from, mother for loue of grace,
Lay not that flattering vnction to your soule
That not your trespasse but my madnesse speakes,
It will but skin and filme the vlcerous place
Whiles ranck corruption mining all within
Infects vnseene, confesse your selfe to heauen,
Repent what's past, auoyd what is to come,
And doe not spread the compost on the weedes
To make them rancker, forgiue me this my vertue,
For in the fatnesse of these pursie times
Vertue it selfe of vice must pardon beg,
Yea curbe and wooe for leaue to doe him good.
''//Ger//.'' O //Hamlet// thou hast cleft my hart in twaine.
''//Ham//.'' O throwe away the worser part of it,
And leaue the purer with the other halfe,
Good night, but goe not to my Vncles bed,
Assune a vertue if you haue it not,
That monster custome, who all sence doth eate
Of habits deuill, is angell yet in this
That to the vse of actions faire and good,
He likewise giues a frock or Liuery
That aptly is put on to refraine night,
And that shall lend a kind of easines
To the next abstinence, the next more easie:
For vse almost can change the stamp of nature,
And either the deuill, or throwe him out
With wonderous potency: once more good night,
And when you are desirous to be blest,
Ile blessing beg of you, for this same Lord
I doe repent; but heauen hath pleasd it so
To punish me with this, and this with me,
That I must be their scourge and minister,
I will bestowe him and will answere well
The death I gaue him; so againe good night
I must be cruell only to be kinde,
This bad beginnes, and worse remaines behind.
One word more good Lady.
''//Ger//.'' What shall I doe?
''//Ham//.'' Not this by no meanes that I bid you doe,
Let the blowt King temp't you againe to bed,
Pinch wanton on your cheeke, call you his Mouse,
And let him for a paire of reechie kisses,
Or padling in your necke with his damn'd fingers.
Make you to rouell all this matter out
That I essentially am not in madnesse,
But mad in craft, t'were good you let him knowe,
For who that's but a Queene, faire, sober, wise,
Would from a paddack, from a bat, a gib,
Such deare concernings hide, who would doe so,
No, in dispight of sence and secrecy,
Vnpeg the basket on the houses top,
Let the birds fly, and like the famous Ape,
To try conclusions in the basket creepe,
And breake your owne necke downe.
''//Ger//.'' Be thou assur'd, if words be made of breath
And breath of life, I haue no life to breath
What thou hast sayd to me.
''//Ham//.'' I must to //England//, you knowe that.
''//Ger//.'' Alack I had forgot.
Tis so concluded on.
''//Ham//.'' Ther's letters seald, and my two Schoolefellowes,
Whom I will trust as I will Adders fang'd,
They beare the mandat, they must sweep my way
And marshall me to knauery: let it worke,
For tis the sport to haue the enginer
Hoist with his owne petar, an't shall goe hard
But I will delue one yard belowe their mines,
And blowe them at the Moone: ô tis most sweete
When in one line two crafts directly meete,
This man shall set me packing,
Ile lugge the guts into the neighbour roome;
Mother good night indeed, this Counsayler
Is now most still, most secret, and most graue,
Who was in life a most foolish prating knaue.
Come sir, to draw toward an end with you.
|dialogWithStageDirectionFisco|k
|Good night mother.|//Exit//.|
@@.stageDirectionFisco
// Enter King//.
@@
''//King//.'' There's matters in these sighes.
These profound heaues
You must translate; Tis fit we vnderstand them.
Where is your Sonne?
''//Qu//.'' Ah my good Lord, what haue I seene to night?
''//King//.'' What //Gertrude//? How do's //Hamlet//?
''//Qu//.'' Mad as the Seas, and winde, when both contend
Which is the Mightier, in his lawlesse fit
Behinde the Arras, hearing something stirre,
He whips his Rapier out, and cries a Rat, a Rat,
And in his brainish apprehension killes
The vnseene good old man.
''//King//.'' On heauy deed:
It had bin so with vs had we beene there:
His Liberty is full of threats to all,
To you your selfe, to vs, to euery one.
Alas, how shall this bloody deede be answered?
It will be laide to vs, whose prouidence
Should haue kept short, restrain'd, and out of haunt,
This mad yong man. But so much was our loue,
We would not vnderstand what was most fit,
But like the Owner of a foule disease,
To keepe it from divulging, let's it feede
Euen on the pith of life. Where is he gone?
''//Qu//.'' To draw apart the body he hath kild,
O're whom his very madnesse like some Oare
Among a Minerall of Mettels base
Shewes it selfe pure. He weepes for what is done.
''//King//.'' Oh //Gertrude//, come away:
The Sun no sooner shall the Mountaines touch,
But we will ship him hence, and this vilde deed,
We must with all our Maiesty and Skill
|dialogWithStageDirectionFisco|k
|Both countenance, and excuse.|//Enter Ros. & Guild//.|
Ho //Guildenstern://
Friends both go ioyne you with some further ayde:
//Hamlet// in madnesse hath //Polonius// slaine,
And from his Mother Clossets hath he drag'd him.
Go seeke him out, speake faire, and bring the body
|dialogWithStageDirectionFisco|k
|Into the Chappell. I pray you hast in this.|//Exit Gent//.|
Come //Gertrude//, wee'l call vp our wisest friends,
To let them know both what we meane to do,
And what's vntimely done. Oh come away,
|dialogWithStageDirectionFisco|k
|My soule is full of discord and dismay.|//Exeunt//.|
//Enter KING CLAUDIUS, QUEEN GERTRUDE, ROSENCRANTZ, and GUILDENSTERN//
''KING CLAUDIUS''
|4.1.1|There's matter in these sighs, these profound heaves:|
|4.1.2|You must translate: 'tis fit we understand them.|
|4.1.3|Where is your son?|
''QUEEN GERTRUDE''
|4.1.4|Bestow this place on us a little while.|
//Exeunt ROSENCRANTZ and GUILDENSTERN//
|4.1.5|Ah, my good lord, what have I seen to-night!|
''KING CLAUDIUS''
|4.1.6|What, Gertrude? How does Hamlet?|
''QUEEN GERTRUDE''
|4.1.7|Mad as the sea and wind, when both contend|
|4.1.8|Which is the mightier: in his lawless fit,|
|4.1.9|Behind the arras hearing something stir,|
|4.1.10|Whips out his rapier, cries, 'A rat, a rat!'|
|4.1.11|And, in this brainish apprehension, kills|
|4.1.12|The unseen good old man.|
''KING CLAUDIUS''
|4.1.13|O heavy deed!|
|4.1.14|It had been so with us, had we been there:|
|4.1.15|His liberty is full of threats to all;|
|4.1.16|To you yourself, to us, to every one.|
|4.1.17|Alas, how shall this bloody deed be answer'd?|
|4.1.18|It will be laid to us, whose providence|
|4.1.19|Should have kept short, restrain'd and out of haunt,|
|4.1.20|This mad young man: but so much was our love,|
|4.1.21|We would not understand what was most fit;|
|4.1.22|But, like the owner of a foul disease,|
|4.1.23|To keep it from divulging, let it feed|
|4.1.24|Even on the pith of Life. Where is he gone?|
''QUEEN GERTRUDE''
|4.1.25|To draw apart the body he hath kill'd:|
|4.1.26|O'er whom his very madness, like some ore|
|4.1.27|Among a mineral of metals base,|
|4.1.28|Shows itself pure; he weeps for what is done.|
''KING CLAUDIUS''
|4.1.29|O Gertrude, come away!|
|4.1.30|The sun no sooner shall the mountains touch,|
|4.1.31|But we will ship him hence: and this vile deed|
|4.1.32|We must, with all our majesty and skill,|
|4.1.33|Both countenance and excuse. Ho, Guildenstern!|
//Re-enter ROSENCRANTZ and GUILDENSTERN//
|4.1.34|Friends both, go join you with some further aid:|
|4.1.35|Hamlet in madness hath Polonius slain,|
|4.1.36|And from his mother's closet hath he dragg'd him:|
|4.1.37|Go seek him out; speak fair, and bring the body|
|4.1.38|Into the chapel. I pray you, haste in this.|
//Exeunt ROSENCRANTZ and GUILDENSTERN//
|4.1.39|Come, Gertrude, we'll call up our wisest friends;|
|4.1.40|And let them know, both what we mean to do,|
|4.1.41|And what's untimely done. O, come away!|
|4.1.42|My soul is full of discord and dismay.|
//Exeunt//
@@.stageDirectionFisco
//Eenter King//,//and Queene, with Rosencraus//
@@
@@.stageDirectionFisco
//and Guyldensterne//.
@@
''//King//.'' There's matter in these sighes, these profound heaues,
You must translate, tis fit we vnderstand them,
Where is your sonne?
''//Ger//.'' Bestow this place on vs a little while.
Ah mine owne Lord, what haue I seene to night?
''//King//.'' What //Gertrard//, how dooes //Hamlet//?
''//Ger//.'' Mad as the sea and wind when both contend
Which is the mightier, in his lawlesse fit,
Behind the Arras hearing some thing stirre,
Whyps out his Rapier, cryes a Rat, a Rat,
And in this brainish apprehension kills
The vnseene good old man.
''//King//.'' O heauy deede!
It had beene so with vs had wee been there,
His libertie is full of threates to all,
To you your selfe, to vs, to euery one,
Alas, how shall this bloody deede be answer'd?
It will be layd to vs, whose prouidence
Should haue kept short, restraind, and out of haunt
This mad young man; but so much was our loue,
We would not vnderstand what was most fit,
But like the owner of a foule disease
To keepe it from divulging, let it feede
Euen on the pith of life: where is he gone?
''//Ger//.'' To draw apart the body he hath kild,
Ore whom, his very madnes like some ore
Among a minerall of mettals base,
Showes it selfe pure, a weepes for what is done.
''//King//.'' O //Gertrard//, come away,
The sunne no sooner shall the mountaines touch,
But we will ship him hence, and this vile deede
|dialogWithStageDirectionFisco|k
|We must with all our Maiestie and skill|//Enter Ros. & Guild//.|
Both countenaunce and excuse. Ho //Guyldensterne//,
Friends both, goe ioyne you with some further ayde,
//Hamlet// in madnes hath //Polonius// slaine,
And from his mothers closet hath he dreg'd him,
Goe seeke him out, speake fayre, and bring the body
Into the Chappell; I pray you hast in this,
Come //Gertrard//, wee'le call vp our wisest friends,
And let them know both what we meane to doe
And whats vntimely doone,
Whose whisper ore the worlds dyameter,
As leuell as the Cannon to his blanck,
Transports his poysned shot, may misse our Name,
And hit the woundlesse ayre, ô come away,
|dialogWithStageDirectionFisco|k
|My soule is full of discord and dismay.|//Exeunt//.|
@@.stageDirectionFisco
// Enter Hamlet//.
@@
''//Ham//.'' Safely stowed.
''//Gentlemen// //within//.'' //Hamlet//, Lord //Hamlet//.
''//Ham//.'' What noise? Who cals on //Hamlet//?
|dialogWithStageDirectionFisco|k
|Oh heere they come.|//Enter Ros. and Guildensterne//.|
''//Ro//.'' What haue you done my Lord with the dead body?
''//Ham//.'' Compounded it with dust, whereto 'tis Kinne.
''//Rosin//.'' Tell vs where 'tis, that we may take it thence,
And beare it to the Chappell.
''//Ham//.'' Do not beleeue it.
''//Rosin//.'' Beleeue what?
''//Ham//.'' That I can keepe your counsell, and not mine
owne. Besides, to be demanded of a Spundge, what re-
plication should be made by the Sonne of a King.
''//Rosin//.'' Take you me for a Spundge, my Lord?
''//Ham//.'' I sir, that sokes vp the Kings Countenance, his
Rewards, his Authorities but such Officers do the King
best seruice in the end. He keepes them like an Ape in
the corner of his iaw, first mouth'd to be last swallowed,
when he needes what you haue glean'd, it is but squee-
zing you, and Spundge you shall be dry againe.
''//Rosin//.'' I vnderstand you not my Lord.
''//Ham//.'' I am glad of it: a knauish speech sleepes in a
foolish eare.
''//Rosin//.'' My Lord, you must tell vs where the body is,
and go with vs to the King.
''//Ham//.'' The body is with the King, but the King is not
with the body. The King, is a thing---
''//Guild//.'' A thing my Lord?
''//Ham//.'' Of nothing: bring me to him, hide Fox, and all
|dialogWithStageDirectionFisco|k
|after.|//Exeunt//|
//Enter HAMLET//
''HAMLET''
|4.2.1|Safely stowed.|
''ROSENCRANTZ:''
''GUILDENSTERN:''
|4.2.2|[Within] Hamlet! Lord Hamlet!|
''HAMLET''
|4.2.3|What noise? who calls on Hamlet?|
|4.2.4|O, here they come.|
//Enter ROSENCRANTZ and GUILDENSTERN//
''ROSENCRANTZ''
|4.2.5|What have you done, my lord, with the dead body?|
''HAMLET''
|4.2.6|Compounded it with dust, whereto 'tis kin.|
''ROSENCRANTZ''
|4.2.7|Tell us where 'tis, that we may take it thence|
|4.2.8|And bear it to the chapel.|
''HAMLET''
|4.2.9|Do not believe it.|
''ROSENCRANTZ''
|4.2.10|Believe what?|
''HAMLET''
|4.2.11|That I can keep your counsel and not mine own.|
|4.2.12|Besides, to be demanded of a sponge! what|
|4.2.13|replication should be made by the son of a king?|
''ROSENCRANTZ''
|4.2.14|Take you me for a sponge, my lord?|
''HAMLET''
|4.2.15|Ay, sir, that soaks up the king's countenance, his|
|4.2.16|rewards, his authorities. But such officers do the|
|4.2.17|king best service in the end: he keeps them, like|
|4.2.18|an ape, in the corner of his jaw; first mouthed, to|
|4.2.19|be last swallowed: when he needs what you have|
|4.2.20|gleaned, it is but squeezing you, and, sponge, you|
|4.2.21|shall be dry again.|
''ROSENCRANTZ''
|4.2.22|I understand you not, my lord.|
''HAMLET''
|4.2.23|I am glad of it: a knavish speech sleeps in a|
|4.2.24|foolish ear.|
''ROSENCRANTZ''
|4.2.25|My lord, you must tell us where the body is, and go|
|4.2.26|with us to the king.|
''HAMLET''
|4.2.27|The body is with the king, but the king is not with|
|4.2.28|the body. The king is a thing--|
''GUILDENSTERN''
|4.2.29|A thing, my lord!|
''HAMLET''
|4.2.30|Of nothing: bring me to him. Hide fox, and all after.|
//Exeunt//
@@.stageDirectionFisco
//Enter Hamlet,Rosencraus, and others.//
@@
''//Ham//.'' Safely stowd, but soft, what noyse, who calls on //Hamlet//?
O heere they come.
''//Ros//.'' What haue you doone my Lord with the dead body?
''//Ham//.'' Compound it with dust whereto tis kin.
''//Ros//.'' Tell vs where tis that we may take it thence,
And beare it to the Chappell.
''//Ham//.'' Doe not beleeue it.
''//Ros//.'' Beleeue what.
''//Ham//.'' That I can keepe your counsaile & not mine owne, besides
to be demaunded of a spunge, what replycation should be made by
the sonne of a King.
''//Ros//.'' Take you me for a spunge my Lord?
''//Ham//.'' I sir, that sokes vp the Kings countenaunce, his rewards, his
authorities, but such Officers doe the King best seruice in the end, he
keepes them like an apple in the corner of his iaw, first mouth'd to be
last swallowed, when hee needs what you haue gleand, it is but squee-
sing you, and spunge you shall be dry againe.
''//Ros//.'' I vnderstand you not my Lord.
''//Ham//.'' I am glad of it, a knauish speech sleepes in a foolish eare.
''//Ros//.'' My Lord, you must tell vs where the body is, and goe with vs
to the King.
''//Ham//.'' The body is with the King, but the King is not with the
body. The King is a thing.
''//Guyl//.'' A thing my Lord.
|dialogWithStageDirectionFisco|k
|''//Ham//.'' Of nothing, bring me to him.|//Exeunt//.|
@@.stageDirectionFisco
// Enter King//.
@@
''//King//.'' I haue sent to seeke him, and to find the bodie:
How dangerous is it that this man goes loose:
Yet must not we put the strong Law on him:
Hee's loued of the distracted multitude,
Who like not in their iudgement, but their eyes:
And where 'tis so, th'Offenders scourge is weigh'd
But neerer the offence: to beare all smooth, and euen,
This sodaine sending him away, must seeme
Deliberate pause, diseases desperate growne,
By desperate appliance are releeued,
|dialogWithStageDirectionFisco|k
|Or not at all.|//Enter Rosincrane//.|
How now? What hath befalne?
''//Rosin//.'' Where the dead body is bestow'd my Lord,
We cannot get from him.
''//King//.'' But where is he?
''//Rosin//.'' Without my Lord, guarded to know your
pleasure.
''//King//.'' Bring him before vs.
''//Rosin//.'' Hoa, //Guildensterne//? Bring in my Lord.
@@.stageDirectionFisco
// Enter Hamlet and Guildensterne//.
@@
''//King//.'' Now //Hamlet//, where's //Polonius//?
''//Ham//.'' At Supper.
''//King//.'' At Supper? Where?
''//Ham//.'' Not where he eats, but where he is eaten, a cer-
taine conuocation of wormes are e'ne at him. Your worm
is your onely Emperor for diet. We fat all creatures else
to fat vs, and we fat our selfe for Magots. Your fat King,
and your leane Begger is but variable seruice to dishes,
but to one Table that's the end.
''//King//.'' What dost thou meane by this?
''//Ham//.'' Nothing but to shew you how a King may go
a Progresse through the guts of a Begger.
''//King//.'' Where is //Polonius//.
''//Ham//.'' In heauen, send thither to see. If your Messen-
ger finde him not there, seeke him i'th other place your
selfe: but indeed, if you finde him not this moneth, you
shall nose him as you go vp the staires into the Lobby.
''//King//.'' Go seeke him there.
''//Ham//.'' He will stay till ye come.
''//K//.'' //Hamlet//, this deed of thine, for thine especial safety
Which we do tender, as we deerely greeue
For that which thou hast done, must send thee hence
With fierie Quicknesse. Therefore prepare thy selfe,
The Barke is readie, and the winde at helpe,
Th'Associates tend, and euery thing at bent
For England.
''//Ham//.'' For England?
''//King//.'' I //Hamlet//.
''//Ham//.'' Good.
''//King//.'' So is it, if thou knew'st our purposes.
''//Ham//.'' I see a Cherube that see's him: but come, for
England. Farewell deere Mother.
''//King//.'' Thy louing Father //Hamlet//.
''//Hamlet//.'' My Mother: Father and Mother is man and
wife: man & wife is one flesh, and so my mother. Come,
|dialogWithStageDirectionFisco|k
|for England.|//Exit//|
''//King//.'' Follow him at foote,
Tempt him with speed aboord:
Delay it not, Ile haue him hence to night.
Away, for euery thing is Seal'd and done
That else leanes on th'Affaire, pray you make hast.
And England, if my loue thou holdst at ought,
As my great power thereof may giue thee sense,
Since yet thy Cicatrice lookes raw and red
After the Danish Sword, and thy free awe
Payes homage to vs; thou maist not coldly set
Our Soueraigne Processe, which imports at full
By Letters coniuring to that effect
The present death of //Hamlet//. Do it England,
For like the Hecticke in my blood he rages,
And thou must cure me: Till I know 'tis done,
|dialogWithStageDirectionFisco|k
|How ere my happes, my ioyes were ne're begun.|//Exit//|
//Enter KING CLAUDIUS, attended//
''KING CLAUDIUS''
|4.3.1|I have sent to seek him, and to find the body.|
|4.3.2|How dangerous is it that this man goes loose!|
|4.3.3|Yet must not we put the strong law on him:|
|4.3.4|He's loved of the distracted multitude,|
|4.3.5|Who like not in their judgment, but their eyes;|
|4.3.6|And where tis so, the offender's scourge is weigh'd,|
|4.3.7|But never the offence. To bear all smooth and even,|
|4.3.8|This sudden sending him away must seem|
|4.3.9|Deliberate pause: diseases desperate grown|
|4.3.10|By desperate appliance are relieved,|
|4.3.11|Or not at all.|
//Enter ROSENCRANTZ//
|4.3.12|How now! what hath befall'n?|
''ROSENCRANTZ''
|4.3.13|Where the dead body is bestow'd, my lord,|
|4.3.14|We cannot get from him.|
''KING CLAUDIUS''
|4.3.15|But where is he?|
''ROSENCRANTZ''
|4.3.16|Without, my lord; guarded, to know your pleasure.|
''KING CLAUDIUS''
|4.3.17|Bring him before us.|
''ROSENCRANTZ''
|4.3.18|Ho, Guildenstern! bring in my lord.|
//Enter HAMLET and GUILDENSTERN//
''KING CLAUDIUS''
|4.3.19|Now, Hamlet, where's Polonius?|
''HAMLET''
|4.3.20|At supper.|
''KING CLAUDIUS''
|4.3.21|At supper! where?|
''HAMLET''
|4.3.22|Not where he eats, but where he is eaten: a certain|
|4.3.23|convocation of politic worms are e'en at him. Your|
|4.3.24|worm is your only emperor for diet: we fat all|
|4.3.25|creatures else to fat us, and we fat ourselves for|
|4.3.26|maggots: your fat king and your lean beggar is but|
|4.3.27|variable service, two dishes, but to one table:|
|4.3.28|that's the end.|
''KING CLAUDIUS''
|4.3.29|Alas, alas!|
''HAMLET''
|4.3.30|A man may fish with the worm that hath eat of a|
|4.3.31|king, and cat of the fish that hath fed of that worm.|
''KING CLAUDIUS''
|4.3.32|What dost you mean by this?|
''HAMLET''
|4.3.33|Nothing but to show you how a king may go a|
|4.3.34|progress through the guts of a beggar.|
''KING CLAUDIUS''
|4.3.35|Where is Polonius?|
''HAMLET''
|4.3.36|In heaven; send hither to see: if your messenger|
|4.3.37|find him not there, seek him i' the other place|
|4.3.38|yourself. But indeed, if you find him not within|
|4.3.39|this month, you shall nose him as you go up the|
|4.3.40|stairs into the lobby.|
''KING CLAUDIUS''
|4.3.41|Go seek him there.|
//To some Attendants//
''HAMLET''
|4.3.42|He will stay till ye come.|
//Exeunt Attendants//
''KING CLAUDIUS''
|4.3.43|Hamlet, this deed, for thine especial safety,--|
|4.3.44|Which we do tender, as we dearly grieve|
|4.3.45|For that which thou hast done,--must send thee hence|
|4.3.46|With fiery quickness: therefore prepare thyself;|
|4.3.47|The bark is ready, and the wind at help,|
|4.3.48|The associates tend, and every thing is bent|
|4.3.49|For England.|
''HAMLET''
|4.3.50| For England!|
''KING CLAUDIUS''
|4.3.51|Ay, Hamlet.|
''HAMLET''
|4.3.52|Good.|
''KING CLAUDIUS''
|4.3.53|So is it, if thou knew'st our purposes.|
''HAMLET''
|4.3.54|I see a cherub that sees them. But, come; for|
|4.3.55|England! Farewell, dear mother.|
''KING CLAUDIUS''
|4.3.56|Thy loving father, Hamlet.|
''HAMLET''
|4.3.57|My mother: father and mother is man and wife; man|
|4.3.58|and wife is one flesh; and so, my mother. Come, for England!|
//Exit//
''KING CLAUDIUS''
|4.3.59|Follow him at foot; tempt him with speed aboard;|
|4.3.60|Delay it not; I'll have him hence to-night:|
|4.3.61|Away! for every thing is seal'd and done|
|4.3.62|That else leans on the affair: pray you, make haste.|
//Exeunt ROSENCRANTZ and GUILDENSTERN//
|4.3.63|And, England, if my love thou hold'st at aught--|
|4.3.64|As my great power thereof may give thee sense,|
|4.3.65|Since yet thy cicatrice looks raw and red|
|4.3.66|After the Danish sword, and thy free awe|
|4.3.67|Pays homage to us--thou mayst not coldly set|
|4.3.68|Our sovereign process; which imports at full,|
|4.3.69|By letters congruing to that effect,|
|4.3.70|The present death of Hamlet. Do it, England;|
|4.3.71|For like the hectic in my blood he rages,|
|4.3.72|And thou must cure me: till I know 'tis done,|
|4.3.73|Howe'er my haps, my joys were ne'er begun.|
//Exit//
@@.stageDirectionFisco
//Enter King, and two or three//.
@@
''//King//.'' I haue sent to seeke him, and to find the body,
How dangerous is it that this man goes loose,
Yet must not we put the strong Law on him,
Hee's lou'd of the distracted multitude,
VVho like not in their iudgement, but theyr eyes,
And where tis so, th'offenders scourge is wayed
But neuer the offence: to beare all smooth and euen,
This suddaine sending him away must seeme
Deliberate pause, diseases desperat growne,
By desperat applyance are relieu'd
Or not at all.
@@.stageDirectionFisco
//Enter Rosencraus and all the rest//.
@@
''//King//.'' How now, what hath befalne?
''//Ros//.'' Where the dead body is bestowd my Lord
VVe cannot get from him.
''//King//.'' But where is hee?
''//Ros//.'' Without my lord, guarded to know your pleasure.
''//King//.'' Bring him before vs.
|dialogWithStageDirectionFisco|k
|''//Ros//.'' How, bring in the Lord.|//They enter//.|
''//King//.'' Now //Hamlet//, where's //Polonius//?
''//Ham//.'' At supper.
''//King//.'' At supper, where.
''//Ham//.'' Not where he eates, but where a is eaten, a certaine conua-
cation of politique wormes are een at him: your worme is your onely
Emperour for dyet, we fat all creatures els to fat vs, and wee fat our
selues for maggots, your fat King and your leane begger is but varia-
ble seruice, two dishes but to one table, that's the end.
''//King//.'' Alas, alas.
''//Ham//.'' A man may fish with the worme that hath eate of a King, &
eate of the fish that hath fedde of that worme.
''//King//.//King//.'' VVhat doost thou meane by this?
''//Ham//.'' Nothing but to shew you how a King may goe a progresse
through the guts of a begger.
''//King//.'' Where is //Polonius//?
''//Ham//.'' In heauen, send thether to see, if your messenger finde him
not thrre, seeke him i'th other place your selfe, but if indeed you find
him not within this month, you shall nose him as you goe vp the
stayres into the Lobby.
''//King//.'' Goe seeke him there.
''//Ham//.'' A will stay till you come.
''//King//.'' //Hamlet// this deede for thine especiall safety
Which we do tender, as we deerely grieue
For that which thou hast done, must send thee hence.
Therefore prepare thy selfe,
The Barck is ready, and the wind at helpe,
Th'associats tend, and euery thing is bent
For //England//.
''//Ham//.'' For //England//.
''//King//.'' I //Hamlet//.
''//Ham//.'' Good.
''//King//.'' So is it if thou knew'st our purposes.
''//Ham//.'' I see a Cherub that sees thē, but come for //England//,
Farewell deere Mother.
''//King//.'' Thy louing Father //Hamlet//.
''//Ham//.'' My mother, Father and Mother is man and wife,
Man and wife is one flesh, so my mother:
|dialogWithStageDirectionFisco|k
|Come for //England//.|//Exit//.|
''//King//.'' Follow him at foote,
Tempt him with speede abord,
Delay it not, Ile haue him hence to night.
Away, for euery thing is seald and done
That els leanes on th'affayre, pray you make hast,
And //England//, if my loue thou hold'st at ought,
As my great power thereof may giue thee sence,
Since yet thy Cicatrice lookes raw and red,
After the Danish sword, and thy free awe
Payes homage to vs, thou mayst not coldly set
Our soueraigne processe, which imports at full
By Letters congruing to that effect
The present death of //Hamlet//, doe it //England//,
For like the Hectique in my blood he rages,
And thou must cure me; till I know tis done,
|dialogWithStageDirectionFisco|k
|How ere my haps, my ioyes will nere begin.|//Exit//.|
@@.stageDirectionFisco
// Enter Fortinbras with an Armie//.
@@
''//For//.'' Go Captaine, from me greet the Danish King,
Tell him that by his license, //Fortinbras//
Claimes the conueyance of a promis'd March
Ouer his Kingdome. You know the Rendeuous:
If that his Maiesty would ought with vs,
We shall expresse our dutie in his eye,
And let him know so.
''//Cap//.'' I will doo't, my Lord.
|dialogWithStageDirectionFisco|k
|''//For//.'' Go safely on.|//Exit//.|
//Enter FORTINBRAS, a Captain, and Soldiers, marching//
''PRINCE FORTINBRAS''
|4.4.1|Go, captain, from me greet the Danish king;|
|4.4.2|Tell him that, by his licence, Fortinbras|
|4.4.3|Craves the conveyance of a promised march|
|4.4.4|Over his kingdom. You know the rendezvous.|
|4.4.5|If that his majesty would aught with us,|
|4.4.6|We shall express our duty in his eye;|
|4.4.7|And let him know so.|
''Captain''
|4.4.8|I will do't, my lord.|
''PRINCE FORTINBRAS''
|4.4.9|Go softly on.|
//Exeunt FORTINBRAS and Soldiers//
//Enter HAMLET, ROSENCRANTZ, GUILDENSTERN, and others//
''HAMLET''
|4.4.10|Good sir, whose powers are these?|
''Captain''
|4.4.11|They are of Norway, sir.|
''HAMLET''
|4.4.12|How purposed, sir, I pray you?|
''Captain''
|4.4.13|Against some part of Poland.|
''HAMLET''
|4.4.14|Who commands them, sir?|
''Captain''
|4.4.15|The nephews to old Norway, Fortinbras.|
''HAMLET''
|4.4.16|Goes it against the main of Poland, sir,|
|4.4.17|Or for some frontier?|
''Captain''
|4.4.18|Truly to speak, and with no addition,|
|4.4.19|We go to gain a little patch of ground|
|4.4.20|That hath in it no profit but the name.|
|4.4.21|To pay five ducats, five, I would not farm it;|
|4.4.22|Nor will it yield to Norway or the Pole|
|4.4.23|A ranker rate, should it be sold in fee.|
''HAMLET''
|4.4.24|Why, then the Polack never will defend it.|
''Captain''
|4.4.25|Yes, it is already garrison'd.|
''HAMLET''
|4.4.26|Two thousand souls and twenty thousand ducats|
|4.4.27|Will not debate the question of this straw:|
|4.4.28|This is the imposthume of much wealth and peace,|
|4.4.29|That inward breaks, and shows no cause without|
|4.4.30|Why the man dies. I humbly thank you, sir.|
''Captain''
|4.4.31|God be wi' you, sir.|
//Exit//
''ROSENCRANTZ''
|4.4.32|Wilt please you go, my lord?|
''HAMLET''
|4.4.33|I'll be with you straight go a little before.|
//Exeunt all except HAMLET//
|4.4.34|How all occasions do inform against me,|
|4.4.35|And spur my dull revenge! What is a man,|
|4.4.36|If his chief good and market of his time|
|4.4.37|Be but to sleep and feed? a beast, no more.|
|4.4.38|Sure, he that made us with such large discourse,|
|4.4.39|Looking before and after, gave us not|
|4.4.40|That capability and god-like reason|
|4.4.41|To fust in us unused. Now, whether it be|
|4.4.42|Bestial oblivion, or some craven scruple|
|4.4.43|Of thinking too precisely on the event,|
|4.4.44|A thought which, quarter'd, hath but one part wisdom|
|4.4.45|And ever three parts coward, I do not know|
|4.4.46|Why yet I live to say 'This thing's to do;'|
|4.4.47|Sith I have cause and will and strength and means|
|4.4.48|To do't. Examples gross as earth exhort me:|
|4.4.49|Witness this army of such mass and charge|
|4.4.50|Led by a delicate and tender prince,|
|4.4.51|Whose spirit with divine ambition puff'd|
|4.4.52|Makes mouths at the invisible event,|
|4.4.53|Exposing what is mortal and unsure|
|4.4.54|To all that fortune, death and danger dare,|
|4.4.55|Even for an egg-shell. Rightly to be great|
|4.4.56|Is not to stir without great argument,|
|4.4.57|But greatly to find quarrel in a straw|
|4.4.58|When honour's at the stake. How stand I then,|
|4.4.59|That have a father kill'd, a mother stain'd,|
|4.4.60|Excitements of my reason and my blood,|
|4.4.61|And let all sleep? while, to my shame, I see|
|4.4.62|The imminent death of twenty thousand men,|
|4.4.63|That, for a fantasy and trick of fame,|
|4.4.64|Go to their graves like beds, fight for a plot|
|4.4.65|Whereon the numbers cannot try the cause,|
|4.4.66|Which is not tomb enough and continent|
|4.4.67|To hide the slain? O, from this time forth,|
|4.4.68|My thoughts be bloody, or be nothing worth!|
//Exit//
@@.stageDirectionFisco
//Enter Fortinbrasse with his Army ouer the stage//.
@@
''//Fortin//.'' Goe Captaine, from me greet the Danish King,
Tell him, that by his lycence //Fortinbrasse//
Craues the conueyance of a promisd march
Ouer his kingdome, you know the randeuous,
If that his Maiestie would ought with vs,
We shall expresse our dutie in his eye,
And let him know so.
''//Cap//.'' I will doo't my Lord.
''//For//.'' Goe softly on.
@@.stageDirectionFisco
//Enter Hamlet, Rosencraus, &c//.
@@
''//Ham//.'' Good sir whose powers are these?
''//Cap//.'' They are of //Norway //sir.
''//Ham//.'' How purposd sir I pray you?
''//Cap//.'' Against some part of //Poland//.
''//Ham//.'' Who commaunds them sir?
''//Cap//.'' The Nephew to old //Norway, Fortenbrasse//.
''//Ham//.'' Goes it against the maine of //Poland// sir,
Or for some frontire?
''//Cap//.'' Truly to speake, and with no addition,
We goe to gaine a little patch of ground
That hath in it no profit but the name
To pay fiue duckets, fiue I would not farme it;
Nor will it yeeld to //Norway// or the //Pole//
A rancker rate, should it be sold in fee.
''//Ham//.'' Why then the //Pollacke// neuer will defend it.
''//Cap//.'' Yes, it is already garisond.
''//Ham//.'' Two thousand soules, & twenty thousand duckets
VVill not debate the question of this straw,
This is th'Impostume of much wealth and peace,
That inward breakes, and showes no cause without
Why the man dies. I humbly thanke you sir.
''//Cap//.'' God buy you sir.
''//Ros//.'' Wil't please you goe my Lord?
''//Ham//.'' Ile be with you straight, goe a little before.
How all occasions doe informe against me,
And spur my dull reuenge. What is a man
If his chiefe good and market of his time
Be but to sleepe and feede, a beast, no more:
Sure he that made vs with such large discourse
Looking before and after, gaue vs not
That capabilitie and god-like reason
To fust in vs vnvsd, now whether it be
Bestiall obliuion, or some crauen scruple
Of thinking too precisely on th'euent,
A thought which quarterd hath but one part wisedom,
And euer three parts coward, I doe not know
Why yet I liue to say this thing's to doe,
Sith I haue cause, and will, and strength, and meanes
To doo't; examples grosse as earth exhort me,
Witnes this Army of such masse and charge,
Led by a delicate and tender Prince,
Whose spirit with diuine ambition puft,
Makes mouthes at the invisible euent,
Exposing what is mortall, and vnsure,
To all that fortune, death, and danger dare,
Euen for an Egge-shell. Rightly to be great,
Is not to stirre without great argument,
But greatly to find quarrell in a straw
When honour's at the stake, how stand I then
That haue a father kild, a mother staind,
Excytements of my reason, and my blood,
And let all sleepe, while to my shame I see
The iminent death of twenty thousand men,
That for a fantasie and tricke of fame
Goe to their graues like beds, fight for a plot
Whereon the numbers cannot try the cause,
Which is not tombe enough and continent
To hide the slaine, ô from this time forth,
|dialogWithStageDirectionFisco|k
|My thoughts be bloody, or be nothing worth.|//Exit//.|
@@.stageDirectionFisco
// Enter Queene and Horatio//.
@@
''//Qu//.'' I will not speake with her.
''//Hor//.'' She is importunate, indeed distract, her moode
will needs be pittied.
''//Qu//.'' What would she haue?
''//Hor//.'' She speakes much of her Father; saies she heares
There's trickes i'th'world, and hems, and beats her heart,
Spurnes enuiously at Strawes, speakes things in doubt,
That carry but halfe sense: Her speech is nothing,
Yet the vnshaped vse of it doth moue
The hearers to Collection; they ayme at it,
And botch the words vp fit to their owne thoughts,
Which as her winkes, and nods, and gestures yeeld them,
Indeed would make one thinke there would be thought,
Though nothing sure, yet much vnhappily.
''//Qu//.'' 'Twere good she were spoken with,
For she may strew dangerous coniectures
In ill breeding minds. Let her come in.
To my sicke soule (as sinnes true Nature is)
Each toy seemes Prologue, to some great amisse,
So full of Artlesse iealousie is guilt,
It spill's it selfe, in fearing to be spilt.
@@.stageDirectionFisco
// Enter Ophelia distracted//.
@@
''//Ophe//,'' Where is the beauteous Maiesty of Denmark.
''//Qu//.'' How now //Ophelia//?
''//Ophe//.'' // How should I your true loue know from another one//?
//By his Cockle hat and staffe, and his Sandal shoone//.
''//Qu//.'' Alas sweet Lady: what imports this Song?
''//Ophe//.'' Say you? Nay pray you marke.
// He is dead and gone Lady, he is dead and gone//,
//At his head a grasse-greene Turfe, at his heeles a stone//.
@@.stageDirectionFisco
// Enter King//.
@@
''//Qu//.'' Nay but //Ophelia//.
''//Ophe//.'' Pray you marke.
// White his Shrow'd as the Mountaine Snow//.
''//Qu//.'' Alas, looke heere my Lord.
''//Ophe//.'' //Larded with sweet flowers://
// Which bewept to the graue did not go//,
//With true-loue showres//.
''//King//.'' How do ye, pretty Lady?
''//Ophe//.'' Well, God dil'd you. They say the Owle was
a Bakers daughter. Lord, wee know what we are, but
know not what we may be. God be at your Table.
''//King//.'' Conceit vpon her Father.
''//Ophe//.'' Pray you let's haue no words of this: but when
they aske you what it meanes, say you this:
// To morrow is S. Valentines day, all in the morning betime//,
//And I a Maid at your Window, to be your Valentine//.
// Then vp he rose, & don'd his clothes, & dupt the chamber dore//,
//Let in the Maid, that out a Maid, neuer departed more//.
''//King//.'' Pretty //Ophelia//.
''//Ophe//.'' Indeed la? without an oath Ile make an end ont.
// By gis, and by S. Charity//,
//Alacke, and fie for shame://
//Yong men wil doo't, if they come too't//,
//By Cocke they are too blame//.
//Quoth she before you tumbled me//,
//You promis'd me to Wed://
//So would I ha done by yonder Sunne//,
//And thou hadst not come to my bed//.
''//King//.'' How long hath she bin this?
''//Ophe//.'' I hope all will be well. We must bee patient,
but I cannot choose but weepe, to thinke they should
lay him i'th'cold ground: My brother shall knowe of it,
and so I thanke you for your good counsell. Come, my
Coach: Goodnight Ladies: Goodnight sweet Ladies:
|dialogWithStageDirectionFisco|k
|Goodnight, goodnight.|//Exit//.|
''//King//.'' Follow her close,
Giue her good watch I pray you:
Oh this is the poyson of deepe greefe, it springs
All from her Fathers death. Oh //Gertrude//, //Gertrude//,
When sorrowes comes, they come not single spies,
But in Battaliaes. First, her Father slaine,
Next your Sonne gone, and he most violent Author
Of his owne iust remoue: the people muddied,
Thicke and vnwholsome in their thoughts, and whispers
For good //Polonius// death; and we haue done but greenly
In hugger mugger to interre him. Poore //Ophelia//
Diuided from her selfe, and her faire Iudgement,
Without the which we are Pictures, or meere Beasts.
Last, and as much containing as all these,
Her Brother is in secret come from France,
Keepes on his wonder, keepes himselfe in clouds,
And wants not Buzzers to infect his eare
With pestilent Speeches of his Fathers death,
Where in necessitie of matter Beggard,
Will nothing sticke our persons to Arraigne
In eare and eare. O my deere //Gertrude//, this,
Like to a murdering Peece in many places,
|dialogWithStageDirectionFisco|k
|Giues me superfluous death.|//A Noise within//.|
@@.stageDirectionFisco
// Enter a Messenger//.
@@
''//Qu//.'' Alacke, what noyse is this?
''//King//.'' Where are my //Switzers//?
Let them guard the doore. What is the matter?
''//Mes//.'' Saue your selfe, my Lord.
The Ocean (ouer-peering of his List)
Eates not the Flats with more impittious haste
Then young //Laertes//, in a Riotous head,
Ore-beares your Officers, the rabble call him Lord,
And as the world were now but to begin,
Antiquity forgot, Custome not knowne,
The Ratifiers and props of euery word,
They cry choose we? //Laertes// shall be King,
Caps, hands, and tongues, applaud it to the clouds,
//Laertes// shall be King, //Laertes// King.
''//Qu//.'' How cheerefully on the false Traile they cry,
Oh this is Counter you false Danish Dogges.
@@.stageDirectionFisco
//Noise within//. //Enter Laertes//.
@@
''//King//.'' The doores are broke.
''//Laer//.'' Where is the King, sirs? Stand you all without.
''//All//.'' No, let's come in.
''//Laer//.'' I pray you giue me leaue.
''//Al//.'' We will, we will.
''//Laer//.'' I thanke you: Keepe the doore.
Oh thou vilde King, giue me my Father.
''//Qu//.'' Calmely good //Laertes//.
''//Laer//.'' That drop of blood, that calmes
Proclaimes me Bastard:
Cries Cuckold to my Father, brands the Harlot
Euen heere betweene the chaste vnsmirched brow
Of my true Mother.
''//King//.'' What is the cause //Laertes//,
That thy Rebellion lookes so Gyant-like?
Let him go //Gertrude:// Do not feare our person:
There's such Diuinity doth hedge a King,
That Treason can but peepe to what it would,
Acts little of his will. Tell me //Laertes//,
Why thou art thus Incenst? Let him go //Gertrude//.
Speake man.
''//Laer//.'' Where's my Father?
''//King//.'' Dead.
''//Qu//.'' But not by him.
''//King//.'' Let him demand his fill.
''//Laer//.'' How came he dead? Ile not be Iuggel'd with.
To hell Allegeance: Vowes, to the blackest diuell.
Conscience and Grace, to the profoundest Pit.
I dare Damnation: to this point I stand,
That both the worlds I giue to negligence,
Let come what comes: onely Ile be reueng'd
Most throughly for my Father.
''//King//.'' Who shall stay you?
''//Laer//.'' My Will, not all the world,
And for my meanes, Ile husband them so well,
They shall go farre with little.
''//King//.'' Good //Laertes://
If you desire to know the certaintie
Of your deere Fathers death, if writ in your reuenge,
That Soop-stake you will draw both Friend and Foe,
Winner and Looser.
''//Laer//.'' None but his Enemies.
''//King//.'' Will you know them then.
''//La//.'' To his good Friends, thus wide Ile ope my Armes:
And like the kinde Life-rend'ring Politician,
Repast them with my blood.
''//King//.'' Why now you speake
Like a good Childe, and a true Gentleman.
That I am guiltlesse of your Fathers death,
And am most sensible in greefe for it,
It shall as leuell to your Iudgement pierce
As day do's to your eye.
|dialogWithStageDirectionFisco|k
| |//A noise within. Let her come in//.|
@@.stageDirectionFisco
// Enter Ophelia//.
@@
''//Laer//.'' How now? what noise is that?
Oh heate drie vp my Braines, teares seuen times salt,
Burne out the Sence and Vertue of mine eye.
By Heauen, thy madnesse shall be payed by waight,
Till our Scale turnes the beame. Oh Rose of May,
Deere Maid, kinde Sister, sweet //Ophelia://
Oh Heauens, is't possible, a yong Maids wits,
Should be as mortall as an old mans life?
Nature is fine in Loue, and where 'tis fine,
It sends some precious instance of it selfe
After the thing it loues.
''//Ophe//.''
// They bore him bare fac'd on the Beer//,
//Hey non nony, nony, hey nony://
//And on his graue raines many a teare//,
//Fare you well my Doue//.
''//Laer//.'' Had'st thou thy wits, and did'st perswade Re-
uenge, it could not moue thus.
''//Ophe//.'' You must sing downe a-downe, and you call
him a-downe-a. Oh, how the wheele becomes it? It is
the false Steward that stole his masters daughter.
''//Laer//.'' This nothings more then matter.
''//Ophe//.'' There's Rosemary, that's for Remembraunce.
Pray loue remember: and there is Paconcies, that's for
Thoughts.
''//Laer//.'' A document in madnesse, thoughts & remem-
brance fitted.
''//Ophe//.'' There's Fennell for you, and Columbines: ther's
Rew for you, and heere's some for me. Wee may call it
Herbe-Grace a Sundaies: Oh you must weare your Rew
with a difference. There's a Daysie, I would giue you
some Violets, but they wither'd all when my Father dy-
ed: They say, he made a good end;
// For bonny sweet Robin is all my ioy//.
''//Laer//.'' Thought, and Affliction, Passion, Hell it selfe:
She turnes to Fauour, and to prettinesse.
''//Ophe//.''
// And will he not come againe//,
//And will he not come againe://
//No, no, he is dead, go to thy Death-bed//,
//He neuer wil come againe//.
//His Beard as white as Snow//,
//All Flaxen was his Pole://
//He is gone, he is gone, and we cast away mone//,
//Gramercy on his Soule//.
And of all Christian Soules, I pray God.
|dialogWithStageDirectionFisco|k
|God buy ye.|//Exeunt Ophelia//|
''//Laer//.'' Do you see this, you Gods?
''//King//.'' //Laertes//, I must common with your greefe,
Or you deny me right: go but apart,
Make choice of whom your wisest Friends you will,
And they shall heare and iudge 'twixt you and me;
If by direct or by Colaterall hand
They finde vs touch'd, we will our Kingdome giue,
Our Crowne, our Life, and all that we call Ours
To you in satisfaction. But if not,
Be you content to lend your patience to vs,
And we shall ioyntly labour with your soule
To giue it due content.
''//Laer//.'' Let this be so:
His meanes of death, his obscure buriall;
No Trophee, Sword, nor Hatchment o're his bones,
No Noble rite, nor formall ostentation,
Cry to be heard, as 'twere from Heauen to Earth,
That I must call in question.
''//King//.'' So you shall:
And where th'offence is, let the great Axe fall.
|dialogWithStageDirectionFisco|k
|I pray you go with me.|//Exeunt//|
//Enter QUEEN GERTRUDE, HORATIO, and a Gentleman//
''QUEEN GERTRUDE''
|4.5.1|I will not speak with her.|
''Gentleman''
|4.5.2|She is importunate, indeed distract:|
|4.5.3|Her mood will needs be pitied.|
''QUEEN GERTRUDE''
|4.5.4|What would she have?|
''Gentleman''
|4.5.5|She speaks much of her father; says she hears|
|4.5.6|There's tricks i' the world; and hems, and beats her heart;|
|4.5.7|Spurns enviously at straws; speaks things in doubt,|
|4.5.8|That carry but half sense: her speech is nothing,|
|4.5.9|Yet the unshaped use of it doth move|
|4.5.10|The hearers to collection; they aim at it,|
|4.5.11|And botch the words up fit to their own thoughts;|
|4.5.12|Which, as her winks, and nods, and gestures|
|4.5.13|yield them,|
|4.5.14|Indeed would make one think there might be thought,|
|4.5.15|Though nothing sure, yet much unhappily.|
''HORATIO''
|4.5.16|'Twere good she were spoken with; for she may strew|
|4.5.17|Dangerous conjectures in ill-breeding minds.|
''QUEEN GERTRUDE''
|4.5.18|Let her come in.|
//Exit HORATIO//
|4.5.19|To my sick soul, as sin's true nature is,|
|4.5.20|Each toy seems prologue to some great amiss:|
|4.5.21|So full of artless jealousy is guilt,|
|4.5.22|It spills itself in fearing to be spilt.|
//Re-enter HORATIO, with OPHELIA//
''OPHELIA''
|4.5.23|Where is the beauteous majesty of Denmark?|
''QUEEN GERTRUDE''
|4.5.24|How now, Ophelia!|
''OPHELIA''
|4.5.25|[Sings]|
|4.5.26|How should I your true love know|
|4.5.27|From another one?|
|4.5.28|By his cockle hat and staff,|
|4.5.29|And his sandal shoon.|
''QUEEN GERTRUDE''
|4.5.30|Alas, sweet lady, what imports this song?|
''OPHELIA''
|4.5.31|Say you? nay, pray you, mark.|
//Sings//
|4.5.32|He is dead and gone, lady,|
|4.5.33|He is dead and gone;|
|4.5.34|At his head a grass-green turf,|
|4.5.35|At his heels a stone.|
''QUEEN GERTRUDE''
|4.5.36|Nay, but, Ophelia,--|
''OPHELIA''
|4.5.37|Pray you, mark.|
//Sings//
|4.5.38|White his shroud as the mountain snow,--|
//Enter KING CLAUDIUS//
''QUEEN GERTRUDE''
|4.5.39|Alas, look here, my lord.|
''OPHELIA''
|4.5.40|[Sings]|
|4.5.41|Larded with sweet flowers|
|4.5.42|Which bewept to the grave did go|
|4.5.43|With true-love showers.|
''KING CLAUDIUS''
|4.5.44|How do you, pretty lady?|
''OPHELIA''
|4.5.45|Well, God 'ild you! They say the owl was a baker's|
|4.5.46|daughter. Lord, we know what we are, but know not|
|4.5.47|what we may be. God be at your table!|
''KING CLAUDIUS''
|4.5.48|Conceit upon her father.|
''OPHELIA''
|4.5.49|Pray you, let's have no words of this; but when they|
|4.5.50|ask you what it means, say you this:|
//Sings//
|4.5.51|To-morrow is Saint Valentine's day,|
|4.5.52|All in the morning betime,|
|4.5.53|And I a maid at your window,|
|4.5.54|To be your Valentine.|
|4.5.55|Then up he rose, and donn'd his clothes,|
|4.5.56|And dupp'd the chamber-door;|
|4.5.57|Let in the maid, that out a maid|
|4.5.58|Never departed more.|
''KING CLAUDIUS''
|4.5.59|Pretty Ophelia!|
''OPHELIA''
|4.5.60|Indeed, la, without an oath, I'll make an end on't:|
//Sings//
|4.5.61|By Gis and by Saint Charity,|
|4.5.62|Alack, and fie for shame!|
|4.5.63|Young men will do't, if they come to't;|
|4.5.64|By cock, they are to blame.|
|4.5.65|Quoth she, before you tumbled me,|
|4.5.66|You promised me to wed.|
|4.5.67|So would I ha' done, by yonder sun,|
|4.5.68|An thou hadst not come to my bed.|
''KING CLAUDIUS''
|4.5.69|How long hath she been thus?|
''OPHELIA''
|4.5.70|I hope all will be well. We must be patient: but I|
|4.5.71|cannot choose but weep, to think they should lay him|
|4.5.72|i' the cold ground. My brother shall know of it:|
|4.5.73|and so I thank you for your good counsel. Come, my|
|4.5.74|coach! Good night, ladies; good night, sweet ladies;|
|4.5.75|good night, good night.|
//Exit//
''KING CLAUDIUS''
|4.5.76|Follow her close; give her good watch,|
|4.5.77|I pray you.|
//Exit HORATIO//
|4.5.78|O, this is the poison of deep grief; it springs|
|4.5.79|All from her father's death. O Gertrude, Gertrude,|
|4.5.80|When sorrows come, they come not single spies|
|4.5.81|But in battalions. First, her father slain:|
|4.5.82|Next, your son gone; and he most violent author|
|4.5.83|Of his own just remove: the people muddied,|
|4.5.84|Thick and unwholesome in their thoughts and whispers,|
|4.5.85|For good Polonius' death; and we have done but greenly,|
|4.5.86|In hugger-mugger to inter him: poor Ophelia|
|4.5.87|Divided from herself and her fair judgment,|
|4.5.88|Without the which we are pictures, or mere beasts:|
|4.5.89|Last, and as much containing as all these,|
|4.5.90|Her brother is in secret come from France;|
|4.5.91|Feeds on his wonder, keeps himself in clouds,|
|4.5.92|And wants not buzzers to infect his ear|
|4.5.93|With pestilent speeches of his father's death;|
|4.5.94|Wherein necessity, of matter beggar'd,|
|4.5.95|Will nothing stick our person to arraign|
|4.5.96|In ear and ear. O my dear Gertrude, this,|
|4.5.97|Like to a murdering-piece, in many places|
|4.5.98|Gives me superfluous death.|
//A noise within//
''QUEEN GERTRUDE''
|4.5.99|Alack, what noise is this?|
''KING CLAUDIUS''
|4.5.100|Where are my Switzers? Let them guard the door.|
//Enter another Gentleman//
|4.5.101|What is the matter?|
''Gentleman''
|4.5.102|Save yourself, my lord:|
|4.5.103|The ocean, overpeering of his list,|
|4.5.104|Eats not the flats with more impetuous haste|
|4.5.105|Than young Laertes, in a riotous head,|
|4.5.106|O'erbears your officers. The rabble call him lord;|
|4.5.107|And, as the world were now but to begin,|
|4.5.108|Antiquity forgot, custom not known,|
|4.5.109|The ratifiers and props of every word,|
|4.5.110|They cry 'Choose we: Laertes shall be king:'|
|4.5.111|Caps, hands, and tongues, applaud it to the clouds:|
|4.5.112|'Laertes shall be king, Laertes king!'|
''QUEEN GERTRUDE''
|4.5.113|How cheerfully on the false trail they cry!|
|4.5.114|O, this is counter, you false Danish dogs!|
''KING CLAUDIUS''
|4.5.115|The doors are broke.|
//Noise within//
//Enter LAERTES, armed; Danes following//
''LAERTES''
|4.5.116|Where is this king? Sirs, stand you all without.|
''Danes''
|4.5.117|No, let's come in.|
''LAERTES''
|4.5.118| I pray you, give me leave.|
''Danes''
|4.5.119|We will, we will.|
//They retire without the door//
''LAERTES''
|4.5.120|I thank you: keep the door. O thou vile king,|
|4.5.121|Give me my father!|
''QUEEN GERTRUDE''
|4.5.122| Calmly, good Laertes.|
''LAERTES''
|4.5.123|That drop of blood that's calm proclaims me bastard,|
|4.5.124|Cries cuckold to my father, brands the harlot|
|4.5.125|Even here, between the chaste unsmirched brow|
|4.5.126|Of my true mother.|
''KING CLAUDIUS''
|4.5.127| What is the cause, Laertes,|
|4.5.128|That thy rebellion looks so giant-like?|
|4.5.129|Let him go, Gertrude; do not fear our person:|
|4.5.130|There's such divinity doth hedge a king,|
|4.5.131|That treason can but peep to what it would,|
|4.5.132|Acts little of his will. Tell me, Laertes,|
|4.5.133|Why thou art thus incensed. Let him go, Gertrude.|
|4.5.134|Speak, man.|
''LAERTES''
|4.5.135|Where is my father?|
''KING CLAUDIUS''
|4.5.136|Dead.|
''QUEEN GERTRUDE''
|4.5.137|But not by him.|
''KING CLAUDIUS''
|4.5.138|Let him demand his fill.|
''LAERTES''
|4.5.139|How came he dead? I'll not be juggled with:|
|4.5.140|To hell, allegiance! vows, to the blackest devil!|
|4.5.141|Conscience and grace, to the profoundest pit!|
|4.5.142|I dare damnation. To this point I stand,|
|4.5.143|That both the worlds I give to negligence,|
|4.5.144|Let come what comes; only I'll be revenged|
|4.5.145|Most thoroughly for my father.|
''KING CLAUDIUS''
|4.5.146|Who shall stay you?|
''LAERTES''
|4.5.147|My will, not all the world:|
|4.5.148|And for my means, I'll husband them so well,|
|4.5.149|They shall go far with little.|
''KING CLAUDIUS''
|4.5.150|Good Laertes,|
|4.5.151|If you desire to know the certainty|
|4.5.152|Of your dear father's death, is't writ in your revenge,|
|4.5.153|That, swoopstake, you will draw both friend and foe,|
|4.5.154|Winner and loser?|
''LAERTES''
|4.5.155|None but his enemies.|
''KING CLAUDIUS''
|4.5.156|Will you know them then?|
''LAERTES''
|4.5.157|To his good friends thus wide I'll ope my arms;|
|4.5.158|And like the kind life-rendering pelican,|
|4.5.159|Repast them with my blood.|
''KING CLAUDIUS''
|4.5.160|Why, now you speak|
|4.5.161|Like a good child and a true gentleman.|
|4.5.162|That I am guiltless of your father's death,|
|4.5.163|And am most sensible in grief for it,|
|4.5.164|It shall as level to your judgment pierce|
|4.5.165|As day does to your eye.|
''Danes''
|4.5.166|[Within] Let her come in.|
''LAERTES''
|4.5.167|How now! what noise is that?|
//Re-enter OPHELIA//
|4.5.168|O heat, dry up my brains! tears seven times salt,|
|4.5.169|Burn out the sense and virtue of mine eye!|
|4.5.170|By heaven, thy madness shall be paid by weight,|
|4.5.171|Till our scale turn the beam. O rose of May!|
|4.5.172|Dear maid, kind sister, sweet Ophelia!|
|4.5.173|O heavens! is't possible, a young maid's wits|
|4.5.174|Should be as moral as an old man's life?|
|4.5.175|Nature is fine in love, and where 'tis fine,|
|4.5.176|It sends some precious instance of itself|
|4.5.177|After the thing it loves.|
''OPHELIA''
|4.5.178|[Sings]|
|4.5.179|They bore him barefaced on the bier;|
|4.5.180|Hey non nonny, nonny, hey nonny;|
|4.5.181|And in his grave rain'd many a tear:--|
|4.5.182|Fare you well, my dove!|
''LAERTES''
|4.5.183|Hadst thou thy wits, and didst persuade revenge,|
|4.5.184|It could not move thus.|
''OPHELIA''
|4.5.185|[Sings]|
|4.5.186|You must sing a-down a-down,|
|4.5.187|An you call him a-down-a.|
|4.5.188|O, how the wheel becomes it! It is the false|
|4.5.189|steward, that stole his master's daughter.|
''LAERTES''
|4.5.190|This nothing's more than matter.|
''OPHELIA''
|4.5.191|There's rosemary, that's for remembrance; pray,|
|4.5.192|love, remember: and there is pansies. that's for thoughts.|
''LAERTES''
|4.5.193|A document in madness, thoughts and remembrance fitted.|
''OPHELIA''
|4.5.194|There's fennel for you, and columbines: there's rue|
|4.5.195|for you; and here's some for me: we may call it|
|4.5.196|herb-grace o' Sundays: O you must wear your rue with|
|4.5.197|a difference. There's a daisy: I would give you|
|4.5.198|some violets, but they withered all when my father|
|4.5.199|died: they say he made a good end,--|
//Sings//
|4.5.200|For bonny sweet Robin is all my joy.|
''LAERTES''
|4.5.201|Thought and affliction, passion, hell itself,|
|4.5.202|She turns to favour and to prettiness.|
''OPHELIA''
|4.5.203|[Sings]|
|4.5.204|And will he not come again?|
|4.5.205|And will he not come again?|
|4.5.206|No, no, he is dead:|
|4.5.207|Go to thy death-bed:|
|4.5.208|He never will come again.|
|4.5.209|His beard was as white as snow,|
|4.5.210|All flaxen was his poll:|
|4.5.211|He is gone, he is gone,|
|4.5.212|And we cast away moan:|
|4.5.213|God ha' mercy on his soul!|
|4.5.214|And of all Christian souls, I pray God. God be wi' ye.|
//Exit//
''LAERTES''
|4.5.215|Do you see this, O God?|
''KING CLAUDIUS''
|4.5.216|Laertes, I must commune with your grief,|
|4.5.217|Or you deny me right. Go but apart,|
|4.5.218|Make choice of whom your wisest friends you will.|
|4.5.219|And they shall hear and judge 'twixt you and me:|
|4.5.220|If by direct or by collateral hand|
|4.5.221|They find us touch'd, we will our kingdom give,|
|4.5.222|Our crown, our life, and all that we can ours,|
|4.5.223|To you in satisfaction; but if not,|
|4.5.224|Be you content to lend your patience to us,|
|4.5.225|And we shall jointly labour with your soul|
|4.5.226|To give it due content.|
''LAERTES''
|4.5.227|Let this be so;|
|4.5.228|His means of death, his obscure funeral--|
|4.5.229|No trophy, sword, nor hatchment o'er his bones,|
|4.5.230|No noble rite nor formal ostentation--|
|4.5.231|Cry to be heard, as 'twere from heaven to earth,|
|4.5.232|That I must call't in question.|
''KING CLAUDIUS''
|4.5.233|So you shall;|
|4.5.234|And where the offence is let the great axe fall.|
|4.5.235|I pray you, go with me.|
//Exeunt//
@@.stageDirectionFisco
//Enter Horatio, Gertrard//,//and a Gentleman//.
@@
''//Quee//.'' I will not speake with her.
''//Gent//.'' Shee is importunat,
Indeede distract, her moode will needes be pittied.
''//Quee//.'' What would she haue?
''//Gent//.'' She speakes much of her father, sayes she heares
There's tricks i'th world, and hems, and beates her hart,
Spurnes enuiously at strawes, speakes things in doubt
That carry but halfe sence, her speech is noth
ing,
Yet the vnshaped vse of it doth moue
The hearers to collection, they yawne at it,
And botch the words vp fit to theyr owne thoughts,
Which as her wincks, and nods, and gestures yeeld them,
Indeede would make one thinke there might be thought
Though nothing sure, yet much vnhappily.
''//Hora//.'' Twere good she were spoken with, for shee may strew
Dangerous coniectures in ill breeding mindes,
Let her come in.
@@.stageDirectionFisco
//Enter Ophelia//.
@@
''//Quee//.'' fTo my sicke soule, as sinnes true nature is,
fEach toy seemes prologue to some great amisse,
fSo full of artlesse iealousie is guilt,
fIt spills it selfe, in fearing to be spylt.
''//Oph//.'' Where is the beautious Maiestie of Denmarke?
|dialogWithStageDirectionFisco|k
|''//Quee//.'' How now //Ophelia?//|//shee sings//.|
''//Oph//.'' How should I your true loue know from another one,
By his cockle hat and staffe, and his Sendall shoone.
''//Quee//.'' Alas sweet Lady, what imports this song?
''//Oph//.'' Say you, nay pray you marke,
|dialogWithStageDirectionFisco|k
|He is dead & gone Lady, he is dead and gone,|//Song//.|
At his head a grasgreene turph, at his heeles a stone.
O ho.
''//Quee//.'' Nay but //Ophelia//.
''//Oph//.'' Pray you marke. White his shrowd as the mountaine snow.
@@.stageDirectionFisco
//Enter King//.
@@
''//Quee//.'' Alas looke heere my Lord.
''//Oph//.'' Larded all with sweet flowers,
|dialogWithStageDirectionFisco|k
|Which beweept to the ground did not go|//Song//.|
With true loue showers.
''//King//.'' How doe you pretty Lady?
''//Oph//.'' Well good dild you, they say the Owle was a Bakers daugh-
ter, Lord we know what we are, but know not what we may be.
God be at your table.
''//King//.'' Conceit vpon her Father.
''//Oph//.'' Pray lets haue no words of this, but when they aske you
what it meanes, say you this.
|dialogWithStageDirectionFisco|k
|To morrow is S. Valentines day,|//Song//.|
All in the morning betime,
And I a mayde at your window
To be your Valentine.
Then vp he rose, and dond his close, and dupt the chamber doore,
Let in the maide, that out a maide, neuer departed more.
''//King//.'' Pretty //Ophelia//.
''//Oph//.'' Indeede without an oath Ile make an end on't,
By gis and by Saint Charitie,
alack and fie for shame,
Young men will doo't if they come too't,
by Cock they are too blame.
Quoth she, Before you tumbled me, you promisd me to wed,
(He answers.) So would I a done by yonder sunne
And thou hadst not come to my bed.
''//King//.'' How long hath she beene thus?
''//Oph//.'' I hope all will be well, we must be patient, but I cannot chuse
but weepe to thinke they would lay him i'th cold ground, my brother
shall know of it, and so I thanke you for your good counsaile. Come
my Coach, God night Ladies, god night.
Sweet Ladyes god night, god night.
''//King//.'' Follow her close, giue her good watch I pray you.
O this is the poyson of deepe griefe, it springs all from her Fathers
death, and now behold, ô //Gertrard, Gertrard//,
When sorrowes come, they come not single spyes,
But in battalians//:// first her Father slaine,
Next, your sonne gone, and he most violent Author
Of his owne iust remoue, the people muddied
Thick and vnwholsome in thoughts, and whispers
For good //Polonius// death//:// and we haue done but greenly
In hugger mugger to inter him: poore //Ophelia//
Deuided from herselfe, and her faire iudgement,
VVithout the which we are pictures, or meere beasts,
Last, and as much contayning as all these,
Her brother is in secret come from Fraunce,
Feeds on this wonder, keepes himselfe in clowdes,
And wants not buzzers to infect his eare
With pestilent speeches of his fathers death,
Wherein necessity of matter beggerd,
Will nothing stick our person to arraigne
In eare and eare: ô my deare //Gertrard//, this
Like to a murdring peece in many places
|dialogWithStageDirectionFisco|k
|Giues me superfluous death.|//A noise within//.|
@@.stageDirectionFisco
//Enter a Messenger//.
@@
''//King//.'' Attend, where is my Swissers, let them guard the doore,
What is the matter?
''//Messen//.'' Saue your selfe my Lord.
The Ocean ouer-peering of his list
Eates not the flats with more impitious hast
Then young //Laertes// in a riotous head
Ore-beares your Officers: the rabble call him Lord,
And as the world were now but to beginne,
Antiquity forgot, custome not knowne,
The ratifiers and props of euery word,
The cry choose we, //Laertes// shall be King,
Caps, hands, and tongues applau'd it to the clouds,
//Laertes// shall be King, //Laertes// King.
|dialogWithStageDirectionFisco|k
|''//Quee//.'' How cheerefully on the false traile they cry.|//A noise within//.|
O this is counter you false Danish dogges.
@@.stageDirectionFisco
//Enter Laertes with others//.
@@
''//King//.'' The doores are broke.
''//Laer//.'' Where is this King? sirs stand you all without.
''//All//.'' No lets come in.
''//Laer//.'' I pray you giue me leaue.
''//All//.'' VVe will, we will.
''//Laer//.'' I thanke you, keepe the doore, ô thou vile King,
Giue me my father.
''//Quee//.'' Calmely good //Laertes//.
''//Laer//.'' That drop of blood thats calme proclames me Bastard,
Cries cuckold to my father, brands the Harlot
Euen heere betweene the chast vnsmirched browe
Of my true mother.
''//King//.'' VVhat is the cause //Laertes//
That thy rebellion lookes so gyant like?
Let him goe //Gertrard//, doe not feare our person,
There's such diuinitie doth hedge a King,
That treason can but peepe to what it would,
Act's little of his will, tell me Laertes
Why thou art thus incenst, let him goe //Gertrard//.
Speake man.
''//Laer//.'' Where is my father?
''//King//.'' Dead.
''//Quee//.'' But not by him.
''//King//.'' Let him demaund his fill.
''//Laer//.'' How came he dead, I'le not be iugled with,
To hell allegiance, vowes to the blackest deuill,
Conscience and grace, to the profoundest pit
I dare damnation, to this poynt I stand,
That both the worlds I giue to negligence,
Let come what comes, onely I'le be reueng'd
Most throughly for my father.
''//King//.'' Who shall stay you?
''//Laer//.'' My will, not all the worlds:
And for my meanes I'le husband them so well,
They shall goe farre with little.
''//King//.'' Good //Laertes//, if you desire to know the certainty
Of your deere Father, i'st writ in your reuenge,
That soopstake, you will draw both friend and foe
Winner and looser.
''//Laer//.'' None but his enemies,
''//King//.'' Will you know them then?
''//Laer//.'' To his good friends thus wide I'le ope my armes,
And like the kind life-rendring Pelican,
Repast them with my blood.
''//King//.'' Why now you speake
Like a good child, and a true Gentleman.
That I am guiltlesse of your fathers death,
And am most sencibly in griefe for it,
It shall as leuell to your iudgement peare
|dialogWithStageDirectionFisco|k
|As day dooes to your eye.|//A noyse within//.|
@@.stageDirectionFisco
//Enter Ophelia//
@@
''//Laer//.'' Let her come in.
How now, what noyse is that?
O heate, dry vp my braines, teares seauen times salt
Burne out the sence and vertue of mine eye,
By heauen thy madnes shall be payd with weight
Tell our scale turne the beame. O Rose of May,
Deere mayd, kind sister, sweet //Ophelia//,
O heauens, ist possible a young maids wits
Should be as mortall as a poore mans life.
|dialogWithStageDirectionFisco|k
|''//Oph//.'' They bore him bare-faste on the Beere,|//Song//.|
And in his graue rain'd many a teare,
Fare you well my Doue.
''//Laer//.'' Hadst thou thy wits, and did'st perswade reuenge
It could not mooue thus.
''//Oph//.'' You must sing a downe a downe,
And you call him a downe a. O how the wheele becomes it,
It is the false Steward that stole his Maisters daughter.
''//Laer//.'' This nothing's more then matter.
''//Oph//.'' There's Rosemary, thats for remembrance, pray you loue re-
member, and there is Pancies, thats for thoughts.
''//Laer//.'' A document in madnes, thoughts and remembrance fitted.
''//Ophe//.'' There's Fennill for you, and Colembines, there's Rewe for
you, & heere's some for me, we may call it herbe of Grace a Sondaies,
you may weare your Rewe with a difference, there's a Dasie, I would
giue you some Violets, but they witherd all when my Father dyed,
they say a made a good end.
For bonny sweet Robin is all my ioy.
''//Laer//.'' Thought and afflictions, passion, hell it selfe
She turnes to fauour and to prettines.
|dialogWithStageDirectionFisco|k
|''//Oph//.'' And wil a not come againe,|//Song//.|
And wil a not come againe,
No, no, he is dead, goe to thy death bed,
He neuer will come againe.
His beard was as white as snow,
Flaxen was his pole,
He is gone, he is gone, and we cast away mone,
God a mercy on his soule, and of all Christians soules,
God buy you.
''//Laer//.'' Doe you this ô God.
''//King//.'' //Laertes//, I must commune with your griefe,
Or you deny me right, goe but apart,
Make choice of whom your wisest friends you will,
And they shall heare and iudge twixt you and me,
If by direct, or by colaturall hand
They find vs toucht, we will our kingdome giue,
Our crowne, our life, and all that we call ours
To you in satisfaction; but if not,
Be you content to lend your patience to vs,
And we shall ioyntly labour with your soule
To giue it due content.
''//Laer//.'' Let this be so.
His meanes of death, his obscure funerall,
No trophe sword, nor hatchment ore his bones,
No noble right, nor formall ostentation,
Cry to be heard as twere from heauen to earth,
That I must call't in question.
''//King//.'' So you shall,
And where th'offence is, let the great axe fall.
|dialogWithStageDirectionFisco|k
|I pray you goe with me.|//Exeunt//.|
@@.stageDirectionFisco
// Enter Horatio, with an Attendant//.
@@
''//Hora//.'' What are they that would speake with me?
''//Ser//.'' Saylors sir, they say they haue Letters for you.
''//Hor//.'' Let them come in,
I do not know from what part of the world
I should be greeted, if not from Lord //Hamlet//.
@@.stageDirectionFisco
// Enter Saylor//.
@@
''//Say//.'' God blesse you Sir.
''//Hor//.'' Let him blesse thee too.
''//Say//.'' Hee shall Sir, and't please him. There's a Letter
for you Sir: It comes from th' Ambassadours that was
bound for England, if your name be //Horatio//, as I am let
to know it is.
@@.stageDirectionFisco
//Reads the Letter//.
@@
Horatio,// When thou shalt haue ouerlook'd this, giue these//
//Fellowes some meanes to the King: They haue Letters//
//for him. Ere we were two dayes old at Sea, a Pyrate of very//
//Warlicke appointment gaue vs Chace. Finding our selues too//
//slow of Saile, we put on a compelled Valour. In the Grapple, I//
//boorded them: On the instant they got cleare of our Shippe, so//
//I alone became their Prisoner. They haue dealt with mee, like//
//Theeues of Mercy, but they knew what they did. I am to doe//
//a good turne for them. Let the King haue the Letters I haue//
//sent, and repaire thou to me with as much hast as thou wouldest//
//flye death. I haue words to speake in your eare, will make thee//
//dumbe, yet are they much too light for the bore of the Matter//.
//These good Fellowes will bring thee where I am//. Rosincrance
//and// Guildensterne, //hold their course for England. Of them//
//I haue much to tell thee, Farewell//.
//He that thou knowest thine//,
Hamlet.
Come, I will giue you way for these your Letters,
And do't the speedier, that you may direct me
|dialogWithStageDirectionFisco|k
|To him from whom you brought them.|//Exit//.|
//Enter HORATIO and a Servant//
''HORATIO''
|4.6.1|What are they that would speak with me?|
''Servant''
|4.6.2|Sailors, sir: they say they have letters for you.|
''HORATIO''
|4.6.3|Let them come in.|
//Exit Servant//
|4.6.4|I do not know from what part of the world|
|4.6.5|I should be greeted, if not from Lord Hamlet.|
//Enter Sailors//
''First Sailor''
|4.6.6|God bless you, sir.|
''HORATIO''
|4.6.7|Let him bless thee too.|
''First Sailor''
|4.6.8|He shall, sir, an't please him. There's a letter for|
|4.6.9|you, sir; it comes from the ambassador that was|
|4.6.10|bound for England; if your name be Horatio, as I am|
|4.6.11|let to know it is.|
''HORATIO''
|4.6.12|[Reads] 'Horatio, when thou shalt have overlooked|
|4.6.13|this, give these fellows some means to the king:|
|4.6.14|they have letters for him. Ere we were two days old|
|4.6.15|at sea, a pirate of very warlike appointment gave us|
|4.6.16|chase. Finding ourselves too slow of sail, we put on|
|4.6.17|a compelled valour, and in the grapple I boarded|
|4.6.18|them: on the instant they got clear of our ship; so|
|4.6.19|I alone became their prisoner. They have dealt with|
|4.6.20|me like thieves of mercy: but they knew what they|
|4.6.21|did; I am to do a good turn for them. Let the king|
|4.6.22|have the letters I have sent; and repair thou to me|
|4.6.23|with as much speed as thou wouldst fly death. I|
|4.6.24|have words to speak in thine ear will make thee|
|4.6.25|dumb; yet are they much too light for the bore of|
|4.6.26|the matter. These good fellows will bring thee|
|4.6.27|where I am. Rosencrantz and Guildenstern hold their|
|4.6.28|course for England: of them I have much to tell|
|4.6.29|thee. Farewell.|
|4.6.30|'He that thou knowest thine, HAMLET.'|
|4.6.31|Come, I will make you way for these your letters;|
|4.6.32|And do't the speedier, that you may direct me|
|4.6.33|To him from whom you brought them.|
//Exeunt//
@@.stageDirectionFisco
//Enter Horatio and others//.
@@
''//Hora//.'' VVhat are they that would speake with me?
''//Gent//.'' Sea-faring men sir, they say they haue Letters for you.
''//Hor//.'' Let them come in.
I doe not know from what part of the world
|dialogWithStageDirectionFisco|k
|I should be greeted. If not from Lord //Hamlet//.|//Enter Saylers//.|
''//Say//.'' God blesse you sir.
''//Hora//.'' Let him blesse thee to.
''//Say//.'' A shall sir and please him, there's a Letter for you sir, it came
frō th'Embassador that was bound for //England//, if your name be //Ho//-
//ratio//, as I am let to know it is.
''//Hor//.'' //Horatio//, when thou shalt haue ouer-lookt this, giue these fel-
lowes some meanes to the King, they haue Letters for him: Ere wee
were two daies old at Sea, a Pyrat of very warlike appointment gaue
vs chase, finding our selues too slow of saile, wee put on a compelled
valour, and in the grapple I boorded them, on the instant they got
cleere of our shyp, so I alone became theyr prisoner, they haue dealt
with me like thieues of mercie, but they knew what they did, I am to
doe a turne for them, let the King haue the Letters I haue sent, and
repayre thou to me with as much speede as thou wouldest flie death,
I haue wordes to speake in thine eare will make thee dumbe, yet are
they much too light for the bord of the matter, these good fellowes
will bring thee where I am, //Rosencraus// and //Guyldensterne// hold theyr
course for //England//, of them I haue much to tell thee, farewell.
//So that thou knowest thine Hamlet//.
''//Hor//.'' Come I will you way for these your letters,
And doo't the speedier that you may direct me
|dialogWithStageDirectionFisco|k
|To him from whom you brought them.|//Exeunt//.|
@@.stageDirectionFisco
// Enter King and Laertes//.
@@
''//King//.'' Now must your conscience my acquittance seal,
And you must put me in your heart for Friend,
Sith you haue heard, and with a knowing eare,
That he which hath your Noble Father slaine,
Pursued my life.
''//Laer//.'' It well appeares. But tell me,
Why you proceeded not against these feates,
So crimefull, and so Capitall in Nature,
As by your Safety, Wisedome, all things else,
You mainly were stirr'd vp?
''//King//.'' O for two speciall Reasons,
Which may to you (perhaps) seeme much vnsinnowed,
And yet to me they are strong. The Queen his Mother,
Liues almost by his lookes: and for my selfe,
My Vertue or my Plague, be it either which,
She's so coniunctiue to my life and soule;
That as the Starre moues not but in his Sphere,
I could not but by her. The other Motiue,
Why to a publike count I might not go,
Is the great loue the generall gender beare him,
Who dipping all his Faults in their affection,
Would like the Spring that turneth Wood to Stone,
Conuert his Gyues to Graces. So that my Arrowes
Too slightly timbred for so loud a Winde,
Would haue reuerted to my Bow againe,
And not where I had arm'd them.
''//Laer//.'' And so haue I a Noble Father lost,
A Sister driuen into desperate tearmes,
Who was (if praises may go backe againe)
Stood Challenger on mount of all the Age
For her perfections. But my reuenge will come.
''//King//.'' Breake not your sleepes for that,
You must not thinke
That we are made of stuffe, so flat, and dull,
That we can let our Beard be shooke with danger,
And thinke it pastime. You shortly shall heare more,
I lou'd your Father, and we loue our Selfe,
And that I hope will teach you to imagine---
@@.stageDirectionFisco
// Enter a Messenger//.
@@
How now? What Newes?
''//Mes//.'' Letters my Lord from //Hamlet//. This to your
Maiesty: this to the Queene.
''//King//.'' From //Hamlet//? Who brought them?
''//Mes//.'' Saylors my Lord they say, I saw them not:
They were giuen me by //Claudio//, he receiu'd them.
''//King//.'' //Laertes// you shall heare them:
|dialogWithStageDirectionFisco|k
|Leaue vs.|//Exit Messenger//|
// High and Mighty, you shall know I am set naked on your//
//Kingdome. To morrow shall I begge leaue to see your Kingly//
//Eyes. When I shall (first asking your Pardon thereunto) re-//
//count// //th'Occasions of my sodaine, and more strange returne//.
Hamlet.
What should this meane? Are all the rest come backe?
Or is it some abuse? Or no such thing?
''//Laer//.'' Know you the hand?
''//Kin//.'' 'Tis //Hamlets// Character, naked and in a Post-
script here he sayes alone: Can you aduise me?
''//Laer//.'' I'm lost in it my Lord; but let him come,
It warmes the very sicknesse in my heart,
That I shall liue and tell him to his teeth;
Thus diddest thou.
''//Kin//.'' If it be so //Laertes//, as how should it be so:
How otherwise will you be rul'd by me?
''//Laer//.'' If so you'l not o'rerule me to a peace.
''//Kin//.'' To thine owne peace: if he be now return'd,
As checking at his Voyage, and that he meanes
No more to vndertake it; I will worke him
To an exployt now ripe in my Deuice,
Vnder the which he shall not choose but fall;
And for his death no winde of blame shall breath,
But euen his Mother shall vncharge the practice,
And call it accident: Some two Monthes hence
Here was a Gentleman of //Normandy//,
I'ue seene my selfe, and seru'd against the French,
And they ran well on Horsebacke; but this Gallant
Had witchcraft in't; he grew into his Seat,
And to such wondrous doing brought his Horse,
As had he beene encorps't and demy-Natur'd
With the braue Beast, so farre he past my thought,
That I in forgery of shapes and trickes,
Come short of what he did.
''//Laer//.'' A Norman was't?
''//Kin//.'' A Norman.
''//Laer//.'' Vpon my life //Lamound//.
''//Kin//.'' The very same.
''//Laer//.'' I know him well, he is the Brooch indeed,
And Iemme of all our Nation.
''//Kin//.'' Hee mad confession of you,
And gaue you such a Masterly report,
For Art and exercise in your defence;
And for your Rapier most especially,
That he cryed out, t'would be a sight indeed,
If one could match you Sir. This report of his
Did //Hamlet// so envenom with his Enuy,
That he could nothing doe but wish and begge,
Your sodaine comming ore to play with him;
Now out of this.
''//Laer//.'' Why out of this, my Lord?
''//Kin//.'' //Laertes// was your Father deare to you?
Or are you like the painting of a sorrow,
A face without a heart?
''//Laer//.'' Why aske you this?
''//Kin//.'' Not that I thinke you did not loue your Father,
But that I know Loue is begun by Time:
And that I see in passages of proofe,
Time qualifies the sparke and fire of it:
//Hamlet// comes backe: what would you vndertake,
To show your selfe your Fathers sonne indeed,
More then in words?
''//Laer//.'' To cut his throat i'th' Church.
''//Kin//.'' No place indeed should murder Sancturize;
Reuenge should haue no bounds: but good //Laertes//
Will you doe this, keepe close within your Chamber,
//Hamlet// return'd, shall know you are come home:
Wee'l put on those shall praise your excellence,
And set a double varnish on the fame
The Frenchman gaue you, bring you in fine together,
And wager on your heads, he being remisse,
Most generous, and free from all contriuing,
Will not peruse the Foiles? So that with ease,
Or with a little shuffling, you may choose
A Sword vnbaited, and in a passe of practice,
Requit him for your Father.
''//Laer//.'' I will doo't,
And for that purpose Ile annoint my Sword:
I bought an Vnction of a Mountebanke
So mortall, I but dipt a knife in it,
Where it drawes blood, no Cataplasme so rare,
Collected from all Simples that haue Vertue
Vnder the Moone, can saue the thing from death,
That is but scratcht withall: Ile touch my point,
With this contagion, that if I gall him slightly,
It may be death.
''//Kin//.'' Let's further thinke of this,
Weigh what conuenience both of time and meanes
May fit vs to our shape, if this should faile;
And that our drift looke through our bad performance,
'Twere better not assaid; therefore this Proiect
Should haue a backe or second, that might hold,
If this should blast in proofe: Soft, let me see
Wee'l make a solemne wager on your commings,
I ha't: when in your motion you are hot and dry,
As make your bowts more violent to the end,
And that he cals for drinke; Ile haue prepar'd him
A Challice for the nonce; whereon but sipping,
If he by chance escape your venom'd stuck,
Our purpose may hold there; how sweet Queene.
@@.stageDirectionFisco
// Enter Queene//.
@@
''//Queen//.'' One woe doth tread vpon anothers heele,
So fast they'l follow: your Sister's drown'd //Laertes//.
''//Laer//.'' Drown'd! O where?
''//Queen//.'' There is a Willow growes aslant a Brooke,
That shewes his hore leaues in the glassie streame:
There with fantasticke Garlands did she come,
Of Crow-flowers, Nettles, Daysies, and long Purples,
That liberall Shepheards giue a grosser name;
But our cold Maids doe Dead Mens Fingers call them:
There on the pendant boughes, her Coronet weeds
Clambring to hang; an enuious sliuer broke,
When downe the weedy Trophies, and her selfe,
Fell in the weeping Brooke, her cloathes spred wide,
And Mermaid-like, a while they bore her vp,
Which time she chaunted snatches of old tunes,
As one incapable of her owne distresse,
Or like a creature Natiue, and indued
Vnto that Element: but long it could not be,
Till that her garments, heauy with her drinke,
Pul'd the poore wretch from her melodious buy,
To muddy death.
''//Laer//.'' Alas then, is she drown'd?
''//Queen//.'' Drown'd, drown'd.
''//Laer//.'' Too much of water hast thou poore //Ophelia//,
And therefore I forbid my teares: but yet
It is our tricke, Nature her custome holds,
Let shame say what it will; when these are gone
The woman will be out: Adue my Lord,
I haue a speech of fire, that faine would blaze,
|dialogWithStageDirectionFisco|k
|But that this folly doubts it.|//Exit//.|
''//Kin//.'' Let's follow, //Gertrude://
How much I had to doe to calme his rage?
Now feare I this will giue it start againe;
|dialogWithStageDirectionFisco|k
|Therefore let's follow.|//Exeunt//.|
//Enter KING CLAUDIUS and LAERTES//
''KING CLAUDIUS''
|4.7.1|Now must your conscience my acquaintance seal,|
|4.7.2|And you must put me in your heart for friend,|
|4.7.3|Sith you have heard, and with a knowing ear,|
|4.7.4|That he which hath your noble father slain|
|4.7.5|Pursued my life.|
''LAERTES''
|4.7.6| It well appears: but tell me|
|4.7.7|Why you proceeded not against these feats,|
|4.7.8|So crimeful and so capital in nature,|
|4.7.9|As by your safety, wisdom, all things else,|
|4.7.10|You mainly were stirr'd up.|
''KING CLAUDIUS''
|4.7.11|O, for two special reasons;|
|4.7.12|Which may to you, perhaps, seem much unsinew'd,|
|4.7.13|But yet to me they are strong. The queen his mother|
|4.7.14|Lives almost by his looks; and for myself--|
|4.7.15|My virtue or my plague, be it either which--|
|4.7.16|She's so conjunctive to my life and soul,|
|4.7.17|That, as the star moves not but in his sphere,|
|4.7.18|I could not but by her. The other motive,|
|4.7.19|Why to a public count I might not go,|
|4.7.20|Is the great love the general gender bear him;|
|4.7.21|Who, dipping all his faults in their affection,|
|4.7.22|Would, like the spring that turneth wood to stone,|
|4.7.23|Convert his gyves to graces; so that my arrows,|
|4.7.24|Too slightly timber'd for so loud a wind,|
|4.7.25|Would have reverted to my bow again,|
|4.7.26|And not where I had aim'd them.|
''LAERTES''
|4.7.27|And so have I a noble father lost;|
|4.7.28|A sister driven into desperate terms,|
|4.7.29|Whose worth, if praises may go back again,|
|4.7.30|Stood challenger on mount of all the age|
|4.7.31|For her perfections: but my revenge will come.|
''KING CLAUDIUS''
|4.7.32|Break not your sleeps for that: you must not think|
|4.7.33|That we are made of stuff so flat and dull|
|4.7.34|That we can let our beard be shook with danger|
|4.7.35|And think it pastime. You shortly shall hear more:|
|4.7.36|I loved your father, and we love ourself;|
|4.7.37|And that, I hope, will teach you to imagine--|
//Enter a Messenger//
|4.7.38|How now! what news?|
''Messenger''
|4.7.39|Letters, my lord, from Hamlet:|
|4.7.40|This to your majesty; this to the queen.|
''KING CLAUDIUS''
|4.7.41|From Hamlet! who brought them?|
''Messenger''
|4.7.42|Sailors, my lord, they say; I saw them not:|
|4.7.43|They were given me by Claudio; he received them|
|4.7.44|Of him that brought them.|
''KING CLAUDIUS''
|4.7.45|Laertes, you shall hear them. Leave us.|
//Exit Messenger//
//Reads//
|4.7.46|'High and mighty, You shall know I am set naked on|
|4.7.47|your kingdom. To-morrow shall I beg leave to see|
|4.7.48|your kingly eyes: when I shall, first asking your|
|4.7.49|pardon thereunto, recount the occasion of my sudden|
|4.7.50|and more strange return. 'HAMLET.'|
|4.7.51|What should this mean? Are all the rest come back?|
|4.7.52|Or is it some abuse, and no such thing?|
''LAERTES''
|4.7.53|Know you the hand?|
''KING CLAUDIUS''
|4.7.54|'Tis Hamlets character. 'Naked!|
|4.7.55|And in a postscript here, he says 'alone.'|
|4.7.56|Can you advise me?|
''LAERTES''
|4.7.57|I'm lost in it, my lord. But let him come;|
|4.7.58|It warms the very sickness in my heart,|
|4.7.59|That I shall live and tell him to his teeth,|
|4.7.60|'Thus didest thou.'|
''KING CLAUDIUS''
|4.7.61|If it be so, Laertes--|
|4.7.62|As how should it be so? how otherwise?--|
|4.7.63|Will you be ruled by me?|
''LAERTES''
|4.7.64|Ay, my lord;|
|4.7.65|So you will not o'errule me to a peace.|
''KING CLAUDIUS''
|4.7.66|To thine own peace. If he be now return'd,|
|4.7.67|As checking at his voyage, and that he means|
|4.7.68|No more to undertake it, I will work him|
|4.7.69|To an exploit, now ripe in my device,|
|4.7.70|Under the which he shall not choose but fall:|
|4.7.71|And for his death no wind of blame shall breathe,|
|4.7.72|But even his mother shall uncharge the practise|
|4.7.73|And call it accident.|
''LAERTES''
|4.7.74|My lord, I will be ruled;|
|4.7.75|The rather, if you could devise it so|
|4.7.76|That I might be the organ.|
''KING CLAUDIUS''
|4.7.77|It falls right.|
|4.7.78|You have been talk'd of since your travel much,|
|4.7.79|And that in Hamlet's hearing, for a quality|
|4.7.80|Wherein, they say, you shine: your sum of parts|
|4.7.81|Did not together pluck such envy from him|
|4.7.82|As did that one, and that, in my regard,|
|4.7.83|Of the unworthiest siege.|
''LAERTES''
|4.7.84|What part is that, my lord?|
''KING CLAUDIUS''
|4.7.85|A very riband in the cap of youth,|
|4.7.86|Yet needful too; for youth no less becomes|
|4.7.87|The light and careless livery that it wears|
|4.7.88|Than settled age his sables and his weeds,|
|4.7.89|Importing health and graveness. Two months since,|
|4.7.90|Here was a gentleman of Normandy:--|
|4.7.91|I've seen myself, and served against, the French,|
|4.7.92|And they can well on horseback: but this gallant|
|4.7.93|Had witchcraft in't; he grew unto his seat;|
|4.7.94|And to such wondrous doing brought his horse,|
|4.7.95|As he had been incorpsed and demi-natured|
|4.7.96|With the brave beast: so far he topp'd my thought,|
|4.7.97|That I, in forgery of shapes and tricks,|
|4.7.98|Come short of what he did.|
''LAERTES''
|4.7.99|A Norman was't?|
''KING CLAUDIUS''
|4.7.100|A Norman.|
''LAERTES''
|4.7.101|Upon my life, Lamond.|
''KING CLAUDIUS''
|4.7.102|The very same.|
''LAERTES''
|4.7.103|I know him well: he is the brooch indeed|
|4.7.104|And gem of all the nation.|
''KING CLAUDIUS''
|4.7.105|He made confession of you,|
|4.7.106|And gave you such a masterly report|
|4.7.107|For art and exercise in your defence|
|4.7.108|And for your rapier most especially,|
|4.7.109|That he cried out, 'twould be a sight indeed,|
|4.7.110|If one could match you: the scrimers of their nation,|
|4.7.111|He swore, had had neither motion, guard, nor eye,|
|4.7.112|If you opposed them. Sir, this report of his|
|4.7.113|Did Hamlet so envenom with his envy|
|4.7.114|That he could nothing do but wish and beg|
|4.7.115|Your sudden coming o'er, to play with him.|
|4.7.116|Now, out of this,--|
''LAERTES''
|4.7.117|What out of this, my lord?|
''KING CLAUDIUS''
|4.7.118|Laertes, was your father dear to you?|
|4.7.119|Or are you like the painting of a sorrow,|
|4.7.120|A face without a heart?|
''LAERTES''
|4.7.121|Why ask you this?|
''KING CLAUDIUS''
|4.7.122|Not that I think you did not love your father;|
|4.7.123|But that I know love is begun by time;|
|4.7.124|And that I see, in passages of proof,|
|4.7.125|Time qualifies the spark and fire of it.|
|4.7.126|There lives within the very flame of love|
|4.7.127|A kind of wick or snuff that will abate it;|
|4.7.128|And nothing is at a like goodness still;|
|4.7.129|For goodness, growing to a plurisy,|
|4.7.130|Dies in his own too much: that we would do|
|4.7.131|We should do when we would; for this 'would' changes|
|4.7.132|And hath abatements and delays as many|
|4.7.133|As there are tongues, are hands, are accidents;|
|4.7.134|And then this 'should' is like a spendthrift sigh,|
|4.7.135|That hurts by easing. But, to the quick o' the ulcer:--|
|4.7.136|Hamlet comes back: what would you undertake,|
|4.7.137|To show yourself your father's son in deed|
|4.7.138|More than in words?|
''LAERTES''
|4.7.139|To cut his throat i' the church.|
''KING CLAUDIUS''
|4.7.140|No place, indeed, should murder sanctuarize;|
|4.7.141|Revenge should have no bounds. But, good Laertes,|
|4.7.142|Will you do this, keep close within your chamber.|
|4.7.143|Hamlet return'd shall know you are come home:|
|4.7.144|We'll put on those shall praise your excellence|
|4.7.145|And set a double varnish on the fame|
|4.7.146|The Frenchman gave you, bring you in fine together|
|4.7.147|And wager on your heads: he, being remiss,|
|4.7.148|Most generous and free from all contriving,|
|4.7.149|Will not peruse the foils; so that, with ease,|
|4.7.150|Or with a little shuffling, you may choose|
|4.7.151|A sword unbated, and in a pass of practise|
|4.7.152|Requite him for your father.|
''LAERTES''
|4.7.153|I will do't:|
|4.7.154|And, for that purpose, I'll anoint my sword.|
|4.7.155|I bought an unction of a mountebank,|
|4.7.156|So mortal that, but dip a knife in it,|
|4.7.157|Where it draws blood no cataplasm so rare,|
|4.7.158|Collected from all simples that have virtue|
|4.7.159|Under the moon, can save the thing from death|
|4.7.160|That is but scratch'd withal: I'll touch my point|
|4.7.161|With this contagion, that, if I gall him slightly,|
|4.7.162|It may be death.|
''KING CLAUDIUS''
|4.7.163| Let's further think of this;|
|4.7.164|Weigh what convenience both of time and means|
|4.7.165|May fit us to our shape: if this should fail,|
|4.7.166|And that our drift look through our bad performance,|
|4.7.167|'Twere better not assay'd: therefore this project|
|4.7.168|Should have a back or second, that might hold,|
|4.7.169|If this should blast in proof. Soft! let me see:|
|4.7.170|We'll make a solemn wager on your cunnings: I ha't.|
|4.7.171|When in your motion you are hot and dry--|
|4.7.172|As make your bouts more violent to that end--|
|4.7.173|And that he calls for drink, I'll have prepared him|
|4.7.174|A chalice for the nonce, whereon but sipping,|
|4.7.175|If he by chance escape your venom'd stuck,|
|4.7.176|Our purpose may hold there.|
//Enter QUEEN GERTRUDE//
|4.7.177|How now, sweet queen!|
''QUEEN GERTRUDE''
|4.7.178|One woe doth tread upon another's heel,|
|4.7.179|So fast they follow; your sister's drown'd, Laertes.|
''LAERTES''
|4.7.180|Drown'd! O, where?|
''QUEEN GERTRUDE''
|4.7.181|There is a willow grows aslant a brook,|
|4.7.182|That shows his hoar leaves in the glassy stream;|
|4.7.183|There with fantastic garlands did she come|
|4.7.184|Of crow-flowers, nettles, daisies, and long purples|
|4.7.185|That liberal shepherds give a grosser name,|
|4.7.186|But our cold maids do dead men's fingers call them:|
|4.7.187|There, on the pendent boughs her coronet weeds|
|4.7.188|Clambering to hang, an envious sliver broke;|
|4.7.189|When down her weedy trophies and herself|
|4.7.190|Fell in the weeping brook. Her clothes spread wide;|
|4.7.191|And, mermaid-like, awhile they bore her up:|
|4.7.192|Which time she chanted snatches of old tunes;|
|4.7.193|As one incapable of her own distress,|
|4.7.194|Or like a creature native and indued|
|4.7.195|Unto that element: but long it could not be|
|4.7.196|Till that her garments, heavy with their drink,|
|4.7.197|Pull'd the poor wretch from her melodious lay|
|4.7.198|To muddy death.|
''LAERTES''
|4.7.199| Alas, then, she is drown'd?|
''QUEEN GERTRUDE''
|4.7.200|Drown'd, drown'd.|
''LAERTES''
|4.7.201|Too much of water hast thou, poor Ophelia,|
|4.7.202|And therefore I forbid my tears: but yet|
|4.7.203|It is our trick; nature her custom holds,|
|4.7.204|Let shame say what it will: when these are gone,|
|4.7.205|The woman will be out. Adieu, my lord:|
|4.7.206|I have a speech of fire, that fain would blaze,|
|4.7.207|But that this folly douts it.|
//Exit//
''KING CLAUDIUS''
|4.7.208|Let's follow, Gertrude:|
|4.7.209|How much I had to do to calm his rage!|
|4.7.210|Now fear I this will give it start again;|
|4.7.211|Therefore let's follow.|
//Exeunt//
@@.stageDirectionFisco
//Enter King and Laertes//.
@@
''//King//.'' Now must your conscience my acquittance seale,
And you must put me in your hart for friend,
Sith you haue heard and with a knowing eare,
That he which hath your noble father slaine
Pursued my life.
''//Laer//.'' It well appeares: but tell mee
Why you proceede not against these feates
So criminall and so capitall in nature,
As by your safetie, greatnes, wisdome, all things els
You mainely were stirr'd vp.
''//King//.'' O for two speciall reasons
Which may to you perhaps seeme much vnsinnow'd,
But yet to mee tha'r strong, the Queene his mother
Liues almost by his lookes, and for my selfe,
My vertue or my plague, be it eyther which,
She is so concliue to my life and soule,
That as the starre mooues not but in his sphere
I could not but by her, the other motiue,
Why to a publique count I might not goe,
Is the great loue the generall gender beare him,
Who dipping all his faults in theyr affection,
Worke like the spring that turneth wood to stone,
Conuert his Giues to graces, so that my arrowes
Too slightly tymberd for so loued Arm'd,
Would haue reuerted to my bowe againe,
But not where I haue aym'd them.
''//Laer//.'' And so haue I a noble father lost,
A sister driuen into desprat termes,
Whose worth, if prayses may goe backe againe
Stood challenger on mount of all the age
For her perfections, but my reuenge will come.
''//King//.'' Breake not your sleepes for that, you must not thinke
That we are made of stuffe so flat and dull,
That we can let our beard be shooke with danger,
And thinke it pastime, you shortly shall heare more,
I loued your father, and we loue our selfe,
And that I hope will teach you to imagine.
@@.stageDirectionFisco
//Enter a Messenger with Letters//.
@@
''//Messen//.'' These to your Maiestie, this to the Queene.
''//King//.'' From //Hamlet//, who brought them?
''//Mess//.'' Saylers my Lord they say, I saw them not,
They were giuen me by //Claudio//, he receiued them
Of him that brought them.
''//King//.'' //Laertes// you shall heare them: leaue vs.
High and mighty, you shall know I am set naked on your kingdom,
to morrow shall I begge leaue to see your kingly eyes, when I shal first
asking you pardon, there-vnto recount the occasion of my suddaine
returne.
''//King//.'' What should this meane, are all the rest come backe,
Or is it some abuse, and no such thing?
''//Laer//.'' Know you the hand?
''//King//.'' Tis //Hamlets// caracter. Naked,
And in a postscript heere he sayes alone,
Can you deuise me?
''//Laer//.'' I am lost in it my Lord, but let him come,
It warmes the very sicknes in my hart
That I liue and tell him to his teeth
Thus didst thou.
''//King//.'' If it be so //Laertes//,
As how should it be so, how otherwise,
Will you be rul'd by me?
''//Laer//.'' I my Lord, so you will not ore-rule me to a peace.
''//King//.'' To thine owne peace, if he be now returned
As the King at his voyage, and that he meanes
No more to vndertake it, I will worke him
To an exployt, now ripe in my deuise,
Vnder the which he shall not choose but fall:
And for his death no wind of blame shall breathe,
But euen his Mother shall vncharge the practise,
And call it accedent.
''//Laer//.'' My Lord I will be rul'd,
The rather if you could deuise it so
That I might be the organ.
''//King//.'' It falls right,
You haue beene talkt of since your trauaile much,
And that in //Hamlets// hearing, for a qualitie
Wherein they say you shine, your summe of parts
Did not together plucke such enuie from him
As did that one, and that in my regard
Of the vnworthiest siedge.
''//Laer//.'' What part is that my Lord?
''//King//.'' A very ribaud in the cap of youth,
Yet needfull to, for youth no lesse becomes
The light and carelesse liuery that it weares
Then setled age, his sables, and his weedes
Importing health and grauenes; two months since
Heere was a gentleman of //Normandy//,
I haue seene my selfe, and seru'd against the French,
And they can well on horsebacke, but this gallant
Had witch-craft in't, he grew vnto his seate,
And to such wondrous dooing brought his horse,
As had he beene incorp'st, and demy natur'd
With the braue beast, so farre he topt me thought,
That I in forgerie of shapes and tricks
Come short of what he did.
''//Laer//.'' A Norman wast?
''//King//.'' A Norman.
''//Laer//.'' Vppon my life //Lamord//.
''//King//.'' The very same.
''//Laer//.'' I know him well, he is the brooch indeed
And Iem of all the Nation.
''//King//.'' He made confession of you,
And gaue you such a masterly report
For art and exercise in your defence,
And for your Rapier most especiall,
That he cride out t'would be a sight indeed
If one could match you; the Scrimures of their nation
He swore had neither motion, guard, nor eye,
If you opposd them; sir this report of his
Did //Hamlet// so enuenom with his enuy,
That he could nothing doe but wish and beg
Your sodaine comming ore to play with you.
Now out of this.
''//Laer//.'' What out of this my Lord?
''//King//.'' //Laertes// was your father deare to you?
Or are you like the painting of a sorrowe,
A face without a hart?
''//Laer//.'' Why aske you this?
''//King//.'' Not that I thinke you did not loue your father,
But that I knowe, loue is begunne by time,
And that I see in passages of proofe,
Time qualifies the sparke and fire of it,
There liues within the very flame of loue
A kind of weeke or snufe that will abate it,
And nothing is at a like goodnes still,
For goodnes growing to a plurisie,
Dies in his owne too much, that we would doe
We should doe when we would: for this would changes,
And hath abatements and delayes as many,
As there are tongues, are hands, are accedents,
And then this should is like a spend thirfts sigh,
That hurts by easing; but to the quick of th'vlcer,
//Hamlet// comes back, what would you vndertake
To showe your selfe indeede your fathers sonne
More then in words?
''//Laer//.'' To cut his thraot i'th Church.
''//King//.'' No place indeede should murther sanctuarise,
Reuendge should haue no bounds: but good //Laertes//
Will you doe this, keepe close within your chamber,
//Hamlet// return'd, shall knowe you are come home,
Weele put on those shall praise your excellence,
And set a double varnish on the fame
The french man gaue you, bring you in fine together
And wager ore your heads; he being remisse,
Most generous, and free from all contriuing,
Will not peruse the foyles, so that with ease,
Or with a little shuffling, you may choose
A sword vnbated, and in a pace of practise
Requite him for your Father.
''//Laer//.'' I will doo't,
And for purpose, Ile annoynt my sword.
I bought an vnction of a Mountibanck
So mortall, that but dippe a knife in it,
Where it drawes blood, no Cataplasme so rare,
Collected from all simples that haue vertue
Vnder the Moone, can saue the thing from death
That is but scratcht withall, Ile tutch my point
With this contagion, that if I gall him slightly, it may be death.
''//King//.'' Lets further thinke of this.
Wey what conuenience both of time and meanes
May fit vs to our shape if this should fayle,
And that our drift looke through our bad performance,
Twere better not assayd, therefore this proiect,
Should haue a back or second that might hold
If this did blast in proofe; soft let me see,
Wee'le make a solemne wager on your cunnings,
I hate, when in your motion you are hote and dry,
As make your bouts more violent to that end,
And that he calls for drinke, Ile haue prefard him
A Challice for the nonce, whereon but sipping,
If he by chaunce escape your venom'd stuck,
Our purpose may hold there; but stay, what noyse?
@@.stageDirectionFisco
//Enter Queene//.
@@
''//Quee//.'' One woe doth tread vpon anothers heele,
So fast they follow; your Sisters drownd //Laertes//.
''//Laer//.'' Drown'd, ô where?
''//Quee//.'' There is a Willow growes ascaunt the Brooke
That showes his horry leaues in the glassy streame,
Therewith fantastique garlands did she make
Of Crowflowers, Nettles, Daises, and long Purples
That liberall Shepheards giue a grosser name,
But our cull-cold maydes doe dead mens fingers call them.
There on the pendant boughes her cronet weedes
Clambring to hang, an enuious sliuer broke,
When downe her weedy trophies and her selfe
Fell in the weeping Brooke, her clothes spred wide,
And Marmaide like awhile they bore her vp,
Which time she chaunted snatches of old laudes,
As one incapable of her owne distresse,
Or like a creature natiue and indewed
Vnto that elament, but long it could not be
Till that her garments heauy with theyr drinke,
Puld the poore wretch from her melodious lay
To muddy death.
''//Laer//.'' Alas, then she is drownd.
''//Quee//.'' Drownd, drownd.
''//Laer//.'' Too much of water hast thou poore //Ophelia//,
And therefore I forbid my teares; but yet
It is our tricke, nature her custome holds,
Let shame say what it will, when these are gone,
The woman will be out. Adiew my Lord,
I haue a speech a fire that faine would blase,
|dialogWithStageDirectionFisco|k
|But that this folly drownes it.|//Exit//.|
''//King//.'' Let's follow //Gertrard//,
How much I had to doe to calme his rage,
Now feare I this will giue it start againe,
|dialogWithStageDirectionFisco|k
|Therefore lets follow.|//Exeunt//.|
@@.stageDirectionFisco
// Enter two Clownes//.
@@
''//Clown//.'' Is she to bee buried in Christian buriall, that
wilfully seekes her owne saluation?
''//Other//.'' I tell thee she is, and therefore make her Graue
straight, the Crowner hath sate on her, and finds it Chri-
stian buriall.
''//Clo//.'' How can that be, vnlesse she drowned her selfe in
her owne defence?
''//Other//.'' Why 'tis found so.
''//Clo//.'' It must be //Se offendendo//, it cannot bee else: for
heere lies the point; If I drowne my selfe wittingly, it ar-
gues an Act: and an Act hath three branches. It is an
Act to doe and to performe; argall she drown'd her selfe
wittingly.
''//Other//.'' Nay but heare you Goodman Deluer.
''//Clown//.'' Giue me leaue; heere lies the water; good:
heere stands the man; good: If the man goe to this wa-
ter and drowne himsele; it is will he nill he, he goes;
marke you that? But if the water come to him & drowne
him; hee drownes not himselfe. Argall, hee that is not
guilty of his owne death, shortens not his owne life.
''//Other//.'' But is this law?
''//Clo//.'' I marry is't, Crowners Quest Law.
''//Other//.'' Will you ha the truth on't: if this had not
beene a Gentlewoman, shee should haue beene buried
out of Christian Buriall.
''//Clo//.'' Why there thou say'st. And the more pitty that
great folke should haue countenance in this world to
drowne or hang themselues, more then their euen Christi-
an. Come, my Spade; there is no ancient Gentlemen,
but Gardiners, Ditchers and Graue-makers; they hold vp
//Adams// Profession.
''//Other//.'' Was he a Gentleman?
''//Clo//.'' He was the first that euer bore Armes.
''//Other//.'' Why he had none.
''//Clo//.'' What, ar't a Heathen? how dost thou vnder-
stand the Scripture? the Scripture sayes //Adam// dig'd;
could hee digge without Armes? Ile put another que-
stion to thee; if thou answerest me not to the purpose, con-
fesse thy selfe---
''//Other//.'' Go too.
''//Clo//.'' What is he that builds stronger then either the
Mason, the Shipwright, or the Carpenter?
''//Other//.'' The Gallowes maker; for that Frame outliues a
thousand Tenants.
''//Clo//.'' I like thy wit well in good faith, the Gallowes
does well; but how does it well? it does well to those
that doe ill: now, thou dost ill to say the Gallowes is
built stronger then the Church: Argall, the Gallowes
may doe well to thee. Too't againe, Come.
''//Other//.'' Who builds stronger then a Mason, a Ship-
wright, or a Carpenter?
''//Clo//.'' I, tell me that, and vnyoake.
''//Other//.'' Marry, now I can tell.
''//Clo//.'' Too't.
''//Other//.'' Masse, I cannot tell.
@@.stageDirectionFisco
// Enter Hamlet and Horatio a farre off//.
@@
''//Clo//.'' Cudgell thy braines no more about it; for your
dull Asse will not mend his pace with beating; and when
you are ask't this question next, say a Graue-maker: the
Houses that he makes, lasts till Doomesday: go, get thee
to //Yaughan//, fetch me a stoupe of Liquor.
@@.stageDirectionFisco
// Sings//.
@@
// In youth when I did loue, did loue//,
//me thought it was very sweete://
//To contract O the time for a my behoue//,
//O me thought there was nothing meete//.
''//Ham//.'' Ha's this fellow no feeling of his businesse, that
he sings at Graue-making?
''//Hor//.'' Custome hath made it in him a property of ea-
sinesse.
''//Ham//.'' 'Tis ee'n so; the hand of little Imployment hath
the daintier sense.
@@.stageDirectionFisco
//Clowne sings//.
@@
// But Age with his stealing steps//
//hath caught me in his clutch://
//And hath shipped me intill the Land//,
//as if I had neuer beene such//.
''//Ham//.'' That Scull had a tongue in it, and could sing
once: how the knaue iowles it to th' grownd, as if it
were //Caines// Iaw-bone, that did the first murther: It
might be the Pate of a Polititian which this Asse o're Of-
fices: one that could circumuent God, might it not?
''//Hor//.'' It might, my Lord.
''//Ham//.'' Or of a Courtier, which could say, Good Mor-
row sweet Lord: how dost thou, good Lord? this
might be my Lord such a one, that prais'd my Lord such
a ones Horse, when he meant to begge it; might it not?
''//Hor//.'' I, my Lord.
''//Ham//.'' Why ee'n so: and now my Lady Wormes,
Chaplesse, and knockt about the Mazard with a Sextons
Spade; heere's fine Reuolution, if wee had the tricke to
see't. Did these bones cost no more the breeding, but
to play at Loggets with 'em? mine ake to thinke
on't.
@@.stageDirectionFisco
// Clowne sings//.
@@
// A Pickhaxe and a Spade, a Spade//,
//for and a shrowding-Sheete://
//O a Pit of Clay for to be made//,
//for such a Guest is meete//.
''//Ham//.'' There's another: why might not that bee the
Scull of a Lawyer? where be his Quiddits now? his
Quillets? his Cases? his Tenures, and his Tricks? why
doe's he suffer this rude knaue now to knocke him about
the Sconce with a dirty Shouell, and will not tell him of
his Action of Battery? hum. This fellow might be in's
time a great buyer of Land, with his Statutes, his Recog-
nizances, his Fines, his double Vouchers, his Recoueries:
Is this the fine of his Fines, and the recouery of his Reco-
ueries, to haue his fine Pate full of fine Dirt? will his
Vouchers vouch him no more of his Purchases, and dou-
ble ones too, then the length and breadth of a paire of
Indentures? the very Conueyances of his Lands will
hardly lye in this Boxe; and must the Inheritor himselfe
haue no more? ha?
''//Hor//.'' Not a iot more, my Lord.
''//Ham//.'' Is not Parchment made of Sheep-skinnes?
''//Hor//.'' I my Lord, and of Calue-skinnes too.
''//Ham//.'' They are Sheepe and Calues that seek out assu-
rance in that. I will speake to this fellow: whose Graue's
this Sir?
''//Clo//.'' Mine Sir:
// O a Pit of Clay for to be made//,
//for such a Guest is meete//.
''//Ham//.'' I thinke it be thine indeed: for thou liest in't.
''//Clo//.'' You lye out on't Sir, and therefore it is not yours:
for my part, I doe not lye in't; and yet it is mine.
''//Ham//.'' Thou dost lye in't, to be in't and say 'tis thine:
'tis for the dead, not for the quicke, therefore thou
lyest.
''//Clo//.'' 'Tis a quicke lye Sir, 'twill away againe from me
to you.
''//Ham//.'' What man dost thou digge it for?
''//Clo//.'' For no man Sir.
''//Ham//.'' What woman then?
''//Clo//.'' For none neither.
''//Ham//.'' Who is to be buried in't?
''//Clo//.'' One that was a woman Sir; but rest her Soule,
shee's dead.
''//Ham//.'' How absolute the knaue is? wee must speake
by the Carde, or equiuocation will vndoe vs: by the
Lord //Horatio//, these three yeares I haue taken note of it,
the Age is growne so picked, that the toe of the Pesant
comes so neere the heeles of our Courtier, hee galls his
Kibe. How long hast thou been a Graue-maker?
''//Clo//.'' Of all the dayes i'th' yeare, I came too't that day
that our last King //Hamlet// o'recame //Fortinbras//.
''//Ham//.'' How long is that since?
''//Clo//.'' Cannot you tell that? euery foole can tell that:
It was the very day, that young //Hamlet// was borne, hee
that was mad, and sent into England.
''//Ham//.'' I marry, why was he sent into England?
''//Clo//.'' Why, because he was mad; hee shall recouer his
wits there; or if he do not, it's no great matter there.
''//Ham//.'' Why?
''//Clo//.'' 'Twill not be seene in him, there the men are as
mad as he.
''//Ham//.'' How came he mad?
''//Clo//.'' Very strangely they say.
''//Ham//.'' How strangely?
''//Clo//.'' Faith e'ene with loosing his wits.
''//Ham//.'' Vpon what ground?
''//Clo//.'' Why heere in Denmarke: I haue bin sixeteene
heere, man and Boy thirty yeares.
''//Ham//.'' How long will a man lie 'ith' earth ere he rot?
''//Clo//.'' Ifaith, if he be not rotten before he die (as we haue
many pocky Coarses now adaies, that will scarce hold
the laying in) he will last you some eight yeare, or nine
yeare. A Tanner will last you nine yeare.
''//Ham//.'' Why he, more then another?
''//Clo//.'' Why sir, his hide is so tan'd with his Trade, that
he will keepe out water a great while. And your water,
is a sore Decayer of your horson dead body. Heres a Scull
now: this Scul, has laine in the earth three & twenty years.
''//Ham//.'' Whose was it?
''//Clo//.'' A whoreson mad Fellowes it was;
Whose doe you thinke it was?
''//Ham//.'' Nay, I know not.
''//Clo//.'' A pestlence on him for a mad Rogue, a pou'rd a
Flaggon of Renish on my head once. This same Scull
Sir, this same Scull sir, was //Yoricks// Scull, the Kings Iester.
''//Ham//.'' This?
''//Clo//.'' E'ene that.
''//Ham//.'' Let me see. Alas poore //Yorick//, I knew him //Ho//-
//ratio//, a fellow of infinite Iest; of most excellent fancy, he
hath borne me on his backe a thousand times: And how
abhorred my Imagination is, my gorge rises at it. Heere
hung those lipps, that I haue kist I know not how oft.
VVhere be your Iibes now? Your Gambals? Your
Songs? Your flashes of Merriment that were wont to
set the Table on a Rore? No one now to mock your own
Ieering? Quite chopfalne? Now get you to my Ladies
Chamber, and tell her, let her paint an inch thicke, to this
fauour she must come. Make her laugh at that: pry-
thee //Horatio// tell me one thing.
''//Hor//.'' What's that my Lord?
''//Ham//.'' Dost thou thinke //Alexander// lookt o'this fa-
shion i'th' earth?
''//Hor//.'' E'ene so.
''//Ham//.'' And smelt so? Puh.
''//Hor//.'' E'ene so, my Lord.
''//Ham//.'' To what base vses we may returne //Horatio//.
Why may not Imagination trace the Noble dust of //A-//
//lexander//, till he find it stopping a bunghole.
''//Hor//.'' 'Twere to consider: to curiously to consider so.
''//Ham//.'' No faith, not a iot. But to follow him thether
with modestie enough, & likeliehood to lead it; as thus.
//Alexander// died: //Alexander// was buried: //Alexander// re-
turneth into dust; the dust is earth; of earth we make
Lome, and why of that Lome (whereto he was conuer-
ted) might they not stopp a Beere-barrell?
Imperiall //Cæsar//, dead and turn'd to clay,
Might stop a hole to keepe the winde away.
Oh, that that earth, which kept the world in awe,
Should patch a Wall, t'expell the winters flaw.
But soft, but soft, aside; heere comes the King.
@@.stageDirectionFisco
// Enter King, Queene, Laertes, and a Coffin//,
@@
@@.stageDirectionFisco
//with Lords attendant//.
@@
The Queene, the Courtiers. Who is that they follow,
And with such maimed rites? This doth betoken,
The Coarse they follow, did with disperate hand,
Fore do it owne life; 'twas some Estate.
Couch we a while, and mark.
''//Laer//.'' What Cerimony else?
''//Ham//.'' That is //Laertes//, a very Noble youth: Marke.
''//Laer//.'' What Cerimony else?
''//Priest//.'' Her Obsequies haue bin as farre inlarg'd.
As we haue warrantis, her death was doubtfull,
And but that great Command, o're-swaies the order,
She should in ground vnsanctified haue lodg'd,
Till the last Trumpet. For charitable praier,
Shardes, Flints, and Peebles, should be throwne on her:
Yet heere she is allowed her Virgin Rites,
Her Maiden strewments, and the bringing home
Of Bell and Buriall.
''//Laer//.'' Must there no more be done?
''//Priest//.'' No more be done:
We should prophane the seruice of the dead,
To sing sage //Requiem//, and such rest to her
As to peace-parted Soules.
''//Laer//.'' Lay her i'th' earth,
And from her faire and vnpolluted flesh,
May Violets spring. I tell thee (churlish Priest)
A Ministring Angell shall my Sister be,
When thou liest howling?
''//Ham//.'' What, the faire //Ophelia//?
''//Queene//.'' Sweets, to the sweet farewell.
I hop'd thou should'st haue bin my //Hamlets// wife:
I thought thy Bride-bed to haue deckt (sweet Maid)
And not t'haue strew'd thy Graue.
''//Laer//.'' Oh terrible woer,
Fall ten times trebble, on that cursed head
Whose wicked deed, thy most Ingenious sence
Depriu'd thee of. Hold off the earth a while,
Till I haue caught her once more in mine armes:
|dialogWithStageDirectionFisco|k
| |//Leaps in the graue//.|
Now pile your dust, vpon the quicke, and dead,
Till of this flat a Mountaine you haue made,
To o're top old //Pelion//, or the skyish head
Of blew //Olympus//.
''//Ham//.'' What is he, whose griefes
Beares such an Emphasis? whose phrase of Sorrow
Coniure the wandring Starres, and makes them stand
Like wonder-wounded hearers? This is I,
//Hamlet// the Dane.
''//Laer//.'' The deuill take thy soule.
''//Ham//.'' Thou prai'st not well,
I prythee take thy fingers from my throat;
Sir though I am not Spleenatiue, and rash,
Yet haue I something in me dangerous,
Which let thy wisenesse feare. Away thy hand.
''//King//.'' Pluck them asunder.
''//Qu//.'' //Hamlet//, //Hamlet//.
''//Gen//.'' Good my Lord be quiet.
''//Ham//.'' Why I will fight with him vppon this Theme.
Vntill my eielids will no longer wag.
''//Qu//.'' Oh my Sonne, what Theame?
''//Ham//.'' I lou'd //Ophelia//; fortie thousand Brothers
Could not (with all there quantitie of Loue)
Make vp my summe. What wilt thou do for her?
''//King//.'' Oh he is mad //Laertes//,
''//Qu//.'' For loue of God forbeare him.
''//Ham//.'' Come show me what thou'lt doe.
Woo't weepe? Woo't fight? Woo't teare thy selfe?
Woo't drinke vp //Esile//, eate a Crocodile?
Ile doo't. Dost thou come heere to whine;
To outface me with leaping in her Graue?
Be buried quicke with her, and so will I.
And if thou prate of Mountaines; let them throw
Millions of Akers on vs; till our ground
Sindging his pate against the burning Zone,
Make //Ossa// like a wart. Nay, and thoul't mouth,
Ile rant as well as thou.
''//Kin//.'' This is meere Madnesse:
And thus awhile the fit will worke on him:
Anon as patient as the female Doue,
When that her golden Cuplet are disclos'd;
His silence will sit drooping.
''//Ham//.'' Heare you Sir:
What is the reason that you vse me thus?
I loud' you euer; but it is no matter:
Let //Hercules// himselfe doe what he may,
|dialogWithStageDirectionFisco|k
|The Cat will Mew, and Dogge will haue his day.|//Exit//.|
''//Kin//.'' I pray you good //Horatio// wait vpon him,
Strengthen you patience in our last nights speech,
Wee'l put the matter to the present push:
Good //Gertrude// set some watch ouer your Sonne,
This Graue shall haue a liuing Monument:
An houre of quiet shortly shall we see;
|dialogWithStageDirectionFisco|k
|Till then, in patience our proceeding be.|//Exeunt//.|
//Enter two Clowns, with spades, & c//
''First Clown''
|5.1.1|Is she to be buried in Christian burial that|
|5.1.2|wilfully seeks her own salvation?|
''Second Clown''
|5.1.3|I tell thee she is: and therefore make her grave|
|5.1.4|straight: the crowner hath sat on her, and finds it|
|5.1.5|Christian burial.|
''First Clown''
|5.1.6|How can that be, unless she drowned herself in her|
|5.1.7|own defence?|
''Second Clown''
|5.1.8|Why, 'tis found so.|
''First Clown''
|5.1.9|It must be 'se offendendo;' it cannot be else. For|
|5.1.10|here lies the point: if I drown myself wittingly,|
|5.1.11|it argues an act: and an act hath three branches: it|
|5.1.12|is, to act, to do, to perform: argal, she drowned|
|5.1.13|herself wittingly.|
''Second Clown''
|5.1.14|Nay, but hear you, goodman delver,--|
''First Clown''
|5.1.15|Give me leave. Here lies the water; good: here|
|5.1.16|stands the man; good; if the man go to this water,|
|5.1.17|and drown himself, it is, will he, nill he, he|
|5.1.18|goes,--mark you that; but if the water come to him|
|5.1.19|and drown him, he drowns not himself: argal, he|
|5.1.20|that is not guilty of his own death shortens not his own life.|
''Second Clown''
|5.1.21|But is this law?|
''First Clown''
|5.1.22|Ay, marry, is't; crowner's quest law.|
''Second Clown''
|5.1.23|Will you ha' the truth on't? If this had not been|
|5.1.24|a gentlewoman, she should have been buried out o'|
|5.1.25|Christian burial.|
''First Clown''
|5.1.26|Why, there thou say'st: and the more pity that|
|5.1.27|great folk should have countenance in this world to|
|5.1.28|drown or hang themselves, more than their even|
|5.1.29|Christian. Come, my spade. There is no ancient|
|5.1.30|gentleman but gardeners, ditchers, and grave-makers:|
|5.1.31|they hold up Adam's profession.|
''Second Clown''
|5.1.32|Was he a gentleman?|
''First Clown''
|5.1.33|He was the first that ever bore arms.|
''Second Clown''
|5.1.34|Why, he had none.|
''First Clown''
|5.1.35|What, art a heathen? How dost thou understand the|
|5.1.36|Scripture? The Scripture says 'Adam digged:'|
|5.1.37|could he dig without arms? I'll put another|
|5.1.38|question to thee: if thou answerest me not to the|
|5.1.39|purpose, confess thyself--|
''Second Clown''
|5.1.40|Go to.|
''First Clown''
|5.1.41|What is he that builds stronger than either the|
|5.1.42|mason, the shipwright, or the carpenter?|
''Second Clown''
|5.1.43|The gallows-maker; for that frame outlives a|
|5.1.44|thousand tenants.|
''First Clown''
|5.1.45|I like thy wit well, in good faith: the gallows|
|5.1.46|does well; but how does it well? it does well to|
|5.1.47|those that do in: now thou dost ill to say the|
|5.1.48|gallows is built stronger than the church: argal,|
|5.1.49|the gallows may do well to thee. To't again, come.|
''Second Clown''
|5.1.50|'Who builds stronger than a mason, a shipwright, or|
|5.1.51|a carpenter?'|
''First Clown''
|5.1.52|Ay, tell me that, and unyoke.|
''Second Clown''
|5.1.53|Marry, now I can tell.|
''First Clown''
|5.1.54|To't.|
''Second Clown''
|5.1.55|Mass, I cannot tell.|
//Enter HAMLET and HORATIO, at a distance//
''First Clown''
|5.1.56|Cudgel thy brains no more about it, for your dull|
|5.1.57|ass will not mend his pace with beating; and, when|
|5.1.58|you are asked this question next, say 'a|
|5.1.59|grave-maker: 'the houses that he makes last till|
|5.1.60|doomsday. Go, get thee to Yaughan: fetch me a|
|5.1.61|stoup of liquor.|
//Exit Second Clown//
//He digs and sings//
|5.1.62|In youth, when I did love, did love,|
|5.1.63|Methought it was very sweet,|
|5.1.64|To contract, O, the time, for, ah, my behove,|
|5.1.65|O, methought, there was nothing meet.|
''HAMLET''
|5.1.66|Has this fellow no feeling of his business, that he|
|5.1.67|sings at grave-making?|
''HORATIO''
|5.1.68|Custom hath made it in him a property of easiness.|
''HAMLET''
|5.1.69|'Tis e'en so: the hand of little employment hath|
|5.1.70|the daintier sense.|
''First Clown''
|5.1.71|[Sings]|
|5.1.72|But age, with his stealing steps,|
|5.1.73|Hath claw'd me in his clutch,|
|5.1.74|And hath shipped me intil the land,|
|5.1.75|As if I had never been such.|
//Throws up a skull//
''HAMLET''
|5.1.76|That skull had a tongue in it, and could sing once:|
|5.1.77|how the knave jowls it to the ground, as if it were|
|5.1.78|Cain's jaw-bone, that did the first murder! It|
|5.1.79|might be the pate of a politician, which this ass|
|5.1.80|now o'er-reaches; one that would circumvent God,|
|5.1.81|might it not?|
''HORATIO''
|5.1.82|It might, my lord.|
''HAMLET''
|5.1.83|Or of a courtier; which could say 'Good morrow,|
|5.1.84|sweet lord! How dost thou, good lord?' This might|
|5.1.85|be my lord such-a-one, that praised my lord|
|5.1.86|such-a-one's horse, when he meant to beg it; might it not?|
''HORATIO''
|5.1.87|Ay, my lord.|
''HAMLET''
|5.1.88|Why, e'en so: and now my Lady Worm's; chapless, and|
|5.1.89|knocked about the mazzard with a sexton's spade:|
|5.1.90|here's fine revolution, an we had the trick to|
|5.1.91|see't. Did these bones cost no more the breeding,|
|5.1.92|but to play at loggats with 'em? mine ache to think on't.|
''First Clown''
|5.1.93|[Sings]|
|5.1.94|A pick-axe, and a spade, a spade,|
|5.1.95|For and a shrouding sheet:|
|5.1.96|O, a pit of clay for to be made|
|5.1.97|For such a guest is meet.|
//Throws up another skull//
''HAMLET''
|5.1.98|There's another: why may not that be the skull of a|
|5.1.99|lawyer? Where be his quiddities now, his quillets,|
|5.1.100|his cases, his tenures, and his tricks? why does he|
|5.1.101|suffer this rude knave now to knock him about the|
|5.1.102|sconce with a dirty shovel, and will not tell him of|
|5.1.103|his action of battery? Hum! This fellow might be|
|5.1.104|in's time a great buyer of land, with his statutes,|
|5.1.105|his recognizances, his fines, his double vouchers,|
|5.1.106|his recoveries: is this the fine of his fines, and|
|5.1.107|the recovery of his recoveries, to have his fine|
|5.1.108|pate full of fine dirt? will his vouchers vouch him|
|5.1.109|no more of his purchases, and double ones too, than|
|5.1.110|the length and breadth of a pair of indentures? The|
|5.1.111|very conveyances of his lands will hardly lie in|
|5.1.112|this box; and must the inheritor himself have no more, ha?|
''HORATIO''
|5.1.113|Not a jot more, my lord.|
''HAMLET''
|5.1.114|Is not parchment made of sheepskins?|
''HORATIO''
|5.1.115|Ay, my lord, and of calf-skins too.|
''HAMLET''
|5.1.116|They are sheep and calves which seek out assurance|
|5.1.117|in that. I will speak to this fellow. Whose|
|5.1.118|grave's this, sirrah?|
''First Clown''
|5.1.119|Mine, sir.|
//Sings//
|5.1.120|O, a pit of clay for to be made|
|5.1.121|For such a guest is meet.|
''HAMLET''
|5.1.122|I think it be thine, indeed; for thou liest in't.|
''First Clown''
|5.1.123|You lie out on't, sir, and therefore it is not|
|5.1.124|yours: for my part, I do not lie in't, and yet it is mine.|
''HAMLET''
|5.1.125|'Thou dost lie in't, to be in't and say it is thine:|
|5.1.126|'tis for the dead, not for the quick; therefore thou liest.|
''First Clown''
|5.1.127|'Tis a quick lie, sir; 'twill away gain, from me to|
|5.1.128|you.|
''HAMLET''
|5.1.129|What man dost thou dig it for?|
''First Clown''
|5.1.130|For no man, sir.|
''HAMLET''
|5.1.131|What woman, then?|
''First Clown''
|5.1.132|For none, neither.|
''HAMLET''
|5.1.133|Who is to be buried in't?|
''First Clown''
|5.1.134|One that was a woman, sir; but, rest her soul, she's dead.|
''HAMLET''
|5.1.135|How absolute the knave is! we must speak by the|
|5.1.136|card, or equivocation will undo us. By the Lord,|
|5.1.137|Horatio, these three years I have taken a note of|
|5.1.138|it; the age is grown so picked that the toe of the|
|5.1.139|peasant comes so near the heel of the courtier, he|
|5.1.140|gaffs his kibe. How long hast thou been a|
|5.1.141|grave-maker?|
''First Clown''
|5.1.142|Of all the days i' the year, I came to't that day|
|5.1.143|that our last king Hamlet overcame Fortinbras.|
''HAMLET''
|5.1.144|How long is that since?|
''First Clown''
|5.1.145|Cannot you tell that? every fool can tell that: it|
|5.1.146|was the very day that young Hamlet was born; he that|
|5.1.147|is mad, and sent into England.|
''HAMLET''
|5.1.148|Ay, marry, why was he sent into England?|
''First Clown''
|5.1.149|Why, because he was mad: he shall recover his wits|
|5.1.150|there; or, if he do not, it's no great matter there.|
''HAMLET''
|5.1.151|Why?|
''First Clown''
|5.1.152|'Twill, a not be seen in him there; there the men|
|5.1.153|are as mad as he.|
''HAMLET''
|5.1.154|How came he mad?|
''First Clown''
|5.1.155|Very strangely, they say.|
''HAMLET''
|5.1.156|How strangely?|
''First Clown''
|5.1.157|Faith, e'en with losing his wits.|
''HAMLET''
|5.1.158|Upon what ground?|
''First Clown''
|5.1.159|Why, here in Denmark: I have been sexton here, man|
|5.1.160|and boy, thirty years.|
''HAMLET''
|5.1.161|How long will a man lie i' the earth ere he rot?|
''First Clown''
|5.1.162|I' faith, if he be not rotten before he die--as we|
|5.1.163|have many pocky corses now-a-days, that will scarce|
|5.1.164|hold the laying in--he will last you some eight year|
|5.1.165|or nine year: a tanner will last you nine year.|
''HAMLET''
|5.1.166|Why he more than another?|
''First Clown''
|5.1.167|Why, sir, his hide is so tanned with his trade, that|
|5.1.168|he will keep out water a great while; and your water|
|5.1.169|is a sore decayer of your whoreson dead body.|
|5.1.170|Here's a skull now; this skull has lain in the earth|
|5.1.171|three and twenty years.|
''HAMLET''
|5.1.172|Whose was it?|
''First Clown''
|5.1.173|A whoreson mad fellow's it was: whose do you think it was?|
''HAMLET''
|5.1.174|Nay, I know not.|
''First Clown''
|5.1.175|A pestilence on him for a mad rogue! a' poured a|
|5.1.176|flagon of Rhenish on my head once. This same skull,|
|5.1.177|sir, was Yorick's skull, the king's jester.|
''HAMLET''
|5.1.178|This?|
''First Clown''
|5.1.179|E'en that.|
''HAMLET''
|5.1.180|Let me see.|
//Takes the skull//
|5.1.181|Alas, poor Yorick! I knew him, Horatio: a fellow|
|5.1.182|of infinite jest, of most excellent fancy: he hath|
|5.1.183|borne me on his back a thousand times; and now, how|
|5.1.184|abhorred in my imagination it is! my gorge rims at|
|5.1.185|it. Here hung those lips that I have kissed I know|
|5.1.186|not how oft. Where be your gibes now? your|
|5.1.187|gambols? your songs? your flashes of merriment,|
|5.1.188|that were wont to set the table on a roar? Not one|
|5.1.189|now, to mock your own grinning? quite chap-fallen?|
|5.1.190|Now get you to my lady's chamber, and tell her, let|
|5.1.191|her paint an inch thick, to this favour she must|
|5.1.192|come; make her laugh at that. Prithee, Horatio, tell|
|5.1.193|me one thing.|
''HORATIO''
|5.1.194|What's that, my lord?|
''HAMLET''
|5.1.195|Dost thou think Alexander looked o' this fashion i'|
|5.1.196|the earth?|
''HORATIO''
|5.1.197|E'en so.|
''HAMLET''
|5.1.198|And smelt so? pah!|
//Puts down the skull//
''HORATIO''
|5.1.199|E'en so, my lord.|
''HAMLET''
|5.1.200|To what base uses we may return, Horatio! Why may|
|5.1.201|not imagination trace the noble dust of Alexander,|
|5.1.202|till he find it stopping a bung-hole?|
''HORATIO''
|5.1.203|'Twere to consider too curiously, to consider so.|
''HAMLET''
|5.1.204|No, faith, not a jot; but to follow him thither with|
|5.1.205|modesty enough, and likelihood to lead it: as|
|5.1.206|thus: Alexander died, Alexander was buried,|
|5.1.207|Alexander returneth into dust; the dust is earth; of|
|5.1.208|earth we make loam; and why of that loam, whereto he|
|5.1.209|was converted, might they not stop a beer-barrel?|
|5.1.210|Imperious Caesar, dead and turn'd to clay,|
|5.1.211|Might stop a hole to keep the wind away:|
|5.1.212|O, that that earth, which kept the world in awe,|
|5.1.213|Should patch a wall to expel the winter flaw!|
|5.1.214|But soft! but soft! aside: here comes the king.|
//Enter Priest, & c. in procession; the Corpse of OPHELIA, LAERTES and Mourners following; KING CLAUDIUS, QUEEN GERTRUDE, their trains, & c//
|5.1.215|The queen, the courtiers: who is this they follow?|
|5.1.216|And with such maimed rites? This doth betoken|
|5.1.217|The corse they follow did with desperate hand|
|5.1.218|Fordo its own life: 'twas of some estate.|
|5.1.219|Couch we awhile, and mark.|
//Retiring with HORATIO//
''LAERTES''
|5.1.220|What ceremony else?|
''HAMLET''
|5.1.221|That is Laertes,|
|5.1.222|A very noble youth: mark.|
''LAERTES''
|5.1.223|What ceremony else?|
''First Priest''
|5.1.224|Her obsequies have been as far enlarged|
|5.1.225|As we have warrantise: her death was doubtful;|
|5.1.226|And, but that great command o'ersways the order,|
|5.1.227|She should in ground unsanctified have lodged|
|5.1.228|Till the last trumpet: for charitable prayers,|
|5.1.229|Shards, flints and pebbles should be thrown on her;|
|5.1.230|Yet here she is allow'd her virgin crants,|
|5.1.231|Her maiden strewments and the bringing home|
|5.1.232|Of bell and burial.|
''LAERTES''
|5.1.233|Must there no more be done?|
''First Priest''
|5.1.234|No more be done:|
|5.1.235|We should profane the service of the dead|
|5.1.236|To sing a requiem and such rest to her|
|5.1.237|As to peace-parted souls.|
''LAERTES''
|5.1.238|Lay her i' the earth:|
|5.1.239|And from her fair and unpolluted flesh|
|5.1.240|May violets spring! I tell thee, churlish priest,|
|5.1.241|A ministering angel shall my sister be,|
|5.1.242|When thou liest howling.|
''HAMLET''
|5.1.243|What, the fair Ophelia!|
''QUEEN GERTRUDE''
|5.1.244|Sweets to the sweet: farewell!|
//Scattering flowers//
|5.1.245|I hoped thou shouldst have been my Hamlet's wife;|
|5.1.246|I thought thy bride-bed to have deck'd, sweet maid,|
|5.1.247|And not have strew'd thy grave.|
''LAERTES''
|5.1.248|O, treble woe|
|5.1.249|Fall ten times treble on that cursed head,|
|5.1.250|Whose wicked deed thy most ingenious sense|
|5.1.251|Deprived thee of! Hold off the earth awhile,|
|5.1.252|Till I have caught her once more in mine arms:|
//Leaps into the grave//
|5.1.253|Now pile your dust upon the quick and dead,|
|5.1.254|Till of this flat a mountain you have made,|
|5.1.255|To o'ertop old Pelion, or the skyish head|
|5.1.256|Of blue Olympus.|
''HAMLET''
|5.1.257|[Advancing] What is he whose grief|
|5.1.258|Bears such an emphasis? whose phrase of sorrow|
|5.1.259|Conjures the wandering stars, and makes them stand|
|5.1.260|Like wonder-wounded hearers? This is I,|
|5.1.261|Hamlet the Dane.|
//Leaps into the grave//
''LAERTES''
|5.1.262| The devil take thy soul!|
//Grappling with him//
''HAMLET''
|5.1.263|Thou pray'st not well.|
|5.1.264|I prithee, take thy fingers from my throat;|
|5.1.265|For, though I am not splenitive and rash,|
|5.1.266|Yet have I something in me dangerous,|
|5.1.267|Which let thy wiseness fear: hold off thy hand.|
''KING CLAUDIUS''
|5.1.268|Pluck them asunder.|
''QUEEN GERTRUDE''
|5.1.269|Hamlet, Hamlet!|
''All''
|5.1.270|Gentlemen,--|
''HORATIO''
|5.1.271| Good my lord, be quiet.|
//The Attendants part them, and they come out of the grave//
''HAMLET''
|5.1.272|Why I will fight with him upon this theme|
|5.1.273|Until my eyelids will no longer wag.|
''QUEEN GERTRUDE''
|5.1.274|O my son, what theme?|
''HAMLET''
|5.1.275|I loved Ophelia: forty thousand brothers|
|5.1.276|Could not, with all their quantity of love,|
|5.1.277|Make up my sum. What wilt thou do for her?|
''KING CLAUDIUS''
|5.1.278|O, he is mad, Laertes.|
''QUEEN GERTRUDE''
|5.1.279|For love of God, forbear him.|
''HAMLET''
|5.1.280|'Swounds, show me what thou'lt do:|
|5.1.281|Woo't weep? woo't fight? woo't fast? woo't tear thyself?|
|5.1.282|Woo't drink up eisel? eat a crocodile?|
|5.1.283|I'll do't. Dost thou come here to whine?|
|5.1.284|To outface me with leaping in her grave?|
|5.1.285|Be buried quick with her, and so will I:|
|5.1.286|And, if thou prate of mountains, let them throw|
|5.1.287|Millions of acres on us, till our ground,|
|5.1.288|Singeing his pate against the burning zone,|
|5.1.289|Make Ossa like a wart! Nay, an thou'lt mouth,|
|5.1.290|I'll rant as well as thou.|
''QUEEN GERTRUDE''
|5.1.291|This is mere madness:|
|5.1.292|And thus awhile the fit will work on him;|
|5.1.293|Anon, as patient as the female dove,|
|5.1.294|When that her golden couplets are disclosed,|
|5.1.295|His silence will sit drooping.|
''HAMLET''
|5.1.296|Hear you, sir;|
|5.1.297|What is the reason that you use me thus?|
|5.1.298|I loved you ever: but it is no matter;|
|5.1.299|Let Hercules himself do what he may,|
|5.1.300|The cat will mew and dog will have his day.|
//Exit//
''KING CLAUDIUS''
|5.1.301|I pray you, good Horatio, wait upon him.|
//Exit HORATIO//
//To LAERTES//
|5.1.302|Strengthen your patience in our last night's speech;|
|5.1.303|We'll put the matter to the present push.|
|5.1.304|Good Gertrude, set some watch over your son.|
|5.1.305|This grave shall have a living monument:|
|5.1.306|An hour of quiet shortly shall we see;|
|5.1.307|Till then, in patience our proceeding be.|
//Exeunt//
@@.stageDirectionFisco
//Enter two Clownes//.
@@
''//Clowne//.'' Is shee to be buried in Christian buriall, when she wilfully
seekes her owne saluation?
''//Other//.'' I tell thee she is, therfore make her graue straight, the crow-
ner hath sate on her, and finds it Christian buriall.
''//Clowne//.'' How can that be, vnlesse she drown'd herselfe in her owne
defence.
''//Other//.'' Why tis found so.
''//Clowne//.'' It must be so offended, it cannot be els, for heere lyes the
poynt, if I drowne my selfe wittingly, it argues an act, & an act hath
three branches, it is to act, to doe, to performe, or all; she drownd her
selfe wittingly.
''//Other//.'' Nay, but heare you good man deluer.
''//Clowne//.'' Giue mee leaue, here lyes the water, good, here stands the
man, good, if the man goe to this water & drowne himselfe, it is will
he, nill he, he goes, marke you that, but if the water come to him, &
drowne him, he drownes not himselfe, argall, he that is not guilty of
his owne death, shortens not his owne life.
''//Other//.'' But is this law?
''//Clowne//.'' I marry i'st, Crowners quest law.
''//Other//.'' Will you ha the truth an't, if this had not beene a gentlewo-
man, she should haue been buried out a christian buriall.
''//Clowne//.'' Why there thou sayst, and the more pitty that great folke
should haue countnaunce in this world to drowne or hang thēselues,
more then theyr euen Christen: Come my spade, there is no aunci-
ent gentlemen but Gardners, Ditchers, and Grauemakers, they hold
vp Adams profession.
''//Other//.'' Was he a gentleman?
''//Clowne//.'' A was the first that euer bore Armes.
Ile put another question to thee, if thou answerest me not to the pur-
pose, confesse thy selfe.
''//Other//.'' Goe to.
''//Clow//.'' What is he that builds stronger then eyther the Mason, the
Shypwright, or the Carpenter.
''//Other//.'' The gallowes maker, for that out-liues a thousand tenants.
''//Clowne//.'' I like thy wit well in good fayth, the gallowes dooes well,
but howe dooes it well? It dooes well to those that do ill, nowe thou
doost ill to say the gallowes is built stronger then the Church, argall,
the gallowes may doo well to thee. Too't againe, come.
''//Other//.'' VVho buildes stronger then a Mason, a Shipwright, or a
Carpenter.
''//Clowne//.'' I, tell me that and vnyoke.
''//Other//.'' Marry now I can tell.
''//Clowne//.'' Too't.
''//Other//.'' Masse I cannot tell.
''//Clow//.'' Cudgell thy braines no more about it, for your dull asse wil
not mend his pace with beating, and when you are askt this question
next, say a graue-maker, the houses hee makes lasts till Doomesday.
Goe get thee in, and fetch mee a soope of liquer.
|dialogWithStageDirectionFisco|k
| |//Song//.|
In youth when I did loue did loue,
Me thought it was very sweet
To contract ô the time for a my behoue,
O me thought there a was nothing a meet.
@@.stageDirectionFisco
//Enter Hamlet and Horatio//.
@@
''//Ham//.'' Has this fellowe no feeling of his busines? a sings in graue-
making.
''//Hora//.'' Custome hath made it in him a propertie of easines.
''//Ham//.'' Tis een so, the hand of little imploiment hath the dintier sence
''//Clow//.''
|dialogWithStageDirectionFisco|k
| |//Song//.|
But age with his stealing steppes
hath clawed me in his clutch,
And hath shipped me into the land,
as if I had neuer been such.
''//Ham//.'' That skull had a tongue in it, and could sing once, how the
knaue iowles it to the ground, as if twere Caines iawbone, that did the
first murder, this might be the pate of a pollitician, which this asse now
ore-reaches; one that would circumuent God, might it not?
''//Hora//.'' It might my Lord.
''//Ham//.'' Or of a Courtier, which could say good morrow sweet lord,
how doost thou sweet lord? This might be my Lord such a one, that
praised my lord such a ones horse when a went to beg it, might it not?
''//Hor//.'' I my Lord.
''//Ham//.'' Why een so, & now my Lady wormes Choples, & knockt
about the massene with a Sextens spade; heere's fine reuolution and
we had the tricke to see't, did these bones cost no more the breeding,
but to play at loggits with them: mine ake to thinke on't.
''//Clow//.''
|dialogWithStageDirectionFisco|k
| |//Song//.|
A pickax and a spade a spade,
for and a shrowding sheet,
O a pit of Clay for to be made
for such a guest is meet.
''//Ham//.'' There's another, why may not that be the skull of a Lawyer,
where be his quiddities now, his quillites, his cases, his tenurs, and his
tricks? why dooes he suffer this madde knaue now to knocke him a-
bout the sconce with a durtie shouell, and will not tell him of his acti-
on of battery, hum, this fellowe might be in's time a great buyer of
Land, with his Statuts, his recognisances, his fines, his double vou-
chers, his recoueries, to haue his fine pate full of fine durt, will vou-
chers vouch him no more of his purchases & doubles then the length
and breadth of a payre of Indentures? The very conueyances of his
Lands will scarcely lye in this box, & must th'inheritor himselfe haue
no more, ha.
''//Hora//.'' Not a iot more my Lord.
''//Ham//.'' Is not Parchment made of sheepe-skinnes?
''//Hora//.'' I my Lord, and of Calues-skinnes to.
''//Ham//.'' They are Sheepe and Calues which seeke out assurance in
that, I wil speak to this fellow. Whose graue's this sirra?
''//Clow//.'' Mine sir, or a pit of clay for to be made.
''//Ham//.'' I thinke it be thine indeede, for thou lyest in't.
''//Clow//.'' You lie out ont sir, and therefore tis not yours; for my part I
doe not lie in't, yet it is mine.
''//Ham//.'' Thou doost lie in't to be in't & say it is thine, tis for the dead,
not for the quicke, therefore thou lyest.
''//Clow//.'' Tis a quicke lye sir, twill away againe from me to you.
''//Ham//.'' What man doost thou digge it for?
''//Clow//.'' For no man sir.
''//Ham//.'' What woman then?
''//Clow//.'' For none neither.
''//Ham//.'' Who is to be buried in't?
''//Clow//.'' One that was a woman sir, but rest her soule shee's dead.
''//Ham//.'' How absolute the knaue is, we must speake by the card, or
equiuocation will vndoo vs. By the Lord //Horatio//, this three yeeres I
haue tooke note of it, the age is growne so picked, that the toe of the
pesant coms so neere the heele of the Courtier he galls his kybe. How
long hast thou been Graue-maker?
''//Clow//.'' Of the dayes i'th yere I came too't that day that our last king
//Hamlet// ouercame //Fortenbrasse//.
''//Ham//.'' How long is that since?
''//Clow//.'' Cannot you tell that? euery foole can tell that, it was that
very day that young //Hamlet// was borne: hee that is mad and sent into
//England//.
''//Ham//.'' I marry, why was he sent into //England//?
''//Clow//.'' Why because a was mad: a shall recouer his wits there, or if
a doo not, tis no great matter there.
''//Ham//.'' Why?
''//Clow//.'' Twill not be seene in him there, there the men are as mad as hee.
''//Ham//.'' How came he mad?
''//Clow//.'' Very strangely they say.
''//Ham//.'' How strangely?
''//Clow//.'' Fayth eene with loosing his wits.
''//Ham//.'' Vpon what ground?
''//Clow//.'' Why heere in Denmarke: I haue been Sexten heere man
and boy thirty yeeres.
''//Ham//.'' How long will a man lie i'th earth ere he rot?
''//Clow//.'' Fayth if a be not rotten before a die, as we haue many poc-
kie corses, that will scarce hold the laying in, a will last you som eyght
yeere, or nine yeere. A Tanner will last you nine yeere.
''//Ham//.'' Why he more then another?
''//Clow//.'' Why sir, his hide is so tand with his trade, that a will keepe
out water a great while; & your water is a sore decayer of your whor-
son dead body, heer's a scull now hath lyen you i'th earth 23. yeeres.
''//Ham//.'' Whose was it?
''//Clow//.'' A whorson mad fellowes it was, whose do you think it was?
''//Ham//.'' Nay I know not.
''//Clow//.'' A pestilence on him for a madde rogue, a pourd a flagon of
Renish on my head once; this same skull sir, was sir //Yoricks// skull, the
Kings Iester.
''//Ham//.'' This?
''//Clow//.'' Een that.
''//Ham//.'' Alas poore //Yoricke//, I knew him //Horatio//, a fellow of infinite
iest, of most excellent fancie, hee hath bore me on his backe a thou-
sand times, and now how abhorred in my imagination it is: my gorge
rises at it. Heere hung those lyppes that I haue kist I know not howe
oft, where be your gibes now? your gamboles, your songs, your fla-
shes of merriment, that were wont to set the ta
ble on a roare, not one
now to mocke your owne grinning, quite chopfalne. Now get you
to my Ladies table, & tell her, let her paint an inch thicke, to this fa-
uour she must come, make her laugh at that.
Prethee //Horatio// tell me one thing.
''//Hora//.'' What's that my Lord?
''//Ham//.'' Doost thou thinke //Alexander// lookt a this fashion i'th earth?
''//Hora//.'' Een so.
''//Ham//.'' And smelt so pah.
''//Hora//.'' Een so my Lord.
''//Ham//.'' To what base vses wee may returne //Horatio//? Why may not
imagination trace the noble dust of //Alexander//, till a find it stopping
a bunghole?
''//Hor//.'' Twere to consider too curiously to consider so.
''//Ham//.'' No faith, not a iot, but to follow him thether with modesty
enough, and likelyhood to leade it. //Alexander// dyed, //Alexander// was
buried, //Alexander// returneth to dust, the dust is earth, of earth vvee
make Lome, & why of that Lome whereto he was conuerted, might
they not stoppe a Beare-barrell?
Imperious //Cæsar// dead, and turn'd to Clay,
Might stoppe a hole, to keepe the wind away.
O that that earth which kept the world in awe,
Should patch a wall t'expell the waters flaw.
|dialogWithStageDirectionFisco|k
|But soft, but soft awhile, here comes the King,|//Enter K. Q//.|
|dialogWithStageDirectionFisco|k
| ||
|dialogWithStageDirectionFisco|k
|The Queene, the Courtiers, who is this they follow?|//Laertes and the corse//.|
And with such maimed rites? this doth betoken,
The corse they follow, did with desprat hand
Foredoo it owne life, twas of some estate,
Couch we a while and marke.
''//Laer//.'' What Ceremonie els?
''//Ham//.'' That is //Laertes// a very noble youth, marke.
''//Laer//.'' What Ceremonie els?
''//Doct//.'' Her obsequies haue been as farre inlarg'd
As we haue warrantie, her death was doubtfull,
And but that great commaund ore-swayes the order,
She should in ground vnsanctified been lodg'd
Till the last trumpet: for charitable prayers,
Flints and peebles should be throwne on her:
Yet heere she is allow'd her virgin Crants,
Her mayden strewments, and the bringing home
Of bell and buriall.
''//Laer//.'' Must there no more be doone?
''//Doct//.'' No more be doone.
We should prophane the seruice of the dead,
To sing a Requiem and such rest to her
As to peace-parted soules.
''//Laer//.'' Lay her i'th earth,
And from her faire and vnpolluted flesh
May Violets spring: I tell thee churlish Priest,
A ministring Angell shall my sister be
When thou lyest howling.
''//Ham//.'' What, the faire //Ophelia//.
''//Quee//.'' Sweets to the sweet, farewell,
I hop't thou should'st haue been my //Hamlets// wife,
I thought thy bride-bed to haue deckt sweet maide,
And not haue strew'd thy graue.
''//Laer//.'' O treble woe
Fall tenne times double on that cursed head,
Whose wicked deede thy most ingenious sence
Depriued thee of, hold off the earth a while,
Till I haue caught her once more in mine armes;
Now pile your dust vpon the quicke and dead,
Till of this flat a mountaine you haue made
To'retop old //Pelion//, or the skyesh head
Of blew //Olympus//.
''//Ham//.'' What is he whose griefe
Beares such an emphesis, whose phrase of sorrow
Coniures the wandring starres, and makes them stand
Like wonder wounded hearers: this is I
//Hamlet// the Dane.
''//Laer//.'' The deuill take thy soule.
''//Ham//.'' Thou pray'st not well, I prethee take thy fingers from my throat,
For though I am not spleenatiue rash,
Yet haue I in me something dangerous,
Which let thy wisedome feare; hold off thy hand,
''//King//.'' Pluck them a sunder.
''//Quee//.'' //Hamlet, Hamlet//.
''//All//.'' Gentlemen.
''//Hora//.'' Good my Lord be quiet.
''//Ham//.'' Why, I will fight with him vpon this theame
Vntill my eye-lids will no longer wagge.
''//Quee//.'' O my sonne, what theame?
''//Ham//.'' I loued //Ophelia//, forty thousand brothers
Could not with all theyr quantitie of loue
Make vp my summe. What wilt thou doo for her.
''//King//.'' O he is mad //Laertes//.
''//Quee//.'' For loue of God forbeare him.
''//Ham//.'' S'wounds shew me what th'owt doe:
Woo't weepe, woo't fight, woo't fast, woo't teare thy selfe,
Woo't drinke vp Esill, eate a Crocadile?
Ile doo't, doost come heere to whine?
To out-face me with leaping in her graue,
Be buried quicke with her, and so will I.
And if thou prate of mountaines, let them throw
Millions of Acres on vs, till our ground
Sindging his pate against the burning Zone
Make Ossa like a wart, nay and thou'lt mouthe,
Ile rant as well as thou.
''//Quee//.'' This is meere madnesse,
And this a while the fit will worke on him,
Anon as patient as the female Doue
When that her golden cuplets are disclosed
His silence will sit drooping.
''//Ham//.'' Heare you sir,
What is the reason that you vse me thus?
I lou'd you euer, but it is no matter,
Let //Hercules //himselfe doe what he may
|dialogWithStageDirectionFisco|k
|The Cat will mew, and Dogge will haue his day.|//Exit Hamlet and Horatio//.|
''//King//.'' I pray thee good //Horatio// waite vpon him.
Strengthen your patience in our last nights speech,
Weele put the matter to the present push:
Good //Gertrard// set some watch ouer your sonne,
This graue shall haue a liuing monument,
An houre of quiet thereby shall we see
|dialogWithStageDirectionFisco|k
|Tell then in patience our proceeding be.|//Exeunt//.|
@@.stageDirectionFisco
// Enter Hamlet and Horatio//.
@@
''//Ham//.'' So much for this Sir; now let me see the other,
You doe remember all the Circumstance.
''//Hor//.'' Remember it my Lord?
''//Ham//.'' Sir, in my heart there was a kinde of fighting,
That would not let me sleepe; me thought I lay
Worse then the mutines in the Bilboes, rashly,
(And praise be rashnesse for it) let vs know,
Our indiscretion sometimes serues vs well,
When our deare plots do paule, and that should teach vs,
There's a Diuinity that shapes our ends,
Rough-hew them how we will.
''//Hor//.'' That is most certaine.
''//Ham//.'' Vp from my Cabin
My sea-gowne scarft about me in the darke,
Grop'd I to finde out them; had my desire,
Finger'd their Packet, and in fine, withdrew
To mine owne roome againe, making so bold,
(My feares forgetting manners) to vnseale
Their grand Commission, where I found //Horatio//,
Oh royall knauery: An exact command,
Larded with many seuerall sorts of reason;
Importing Denmarks health, and Englands too,
With hoo, such Bugges and Goblins in my life,
That on the superuize no leasure bated,
No not to stay the grinding of the Axe,
My head shoud be struck off.
''//Hor//.'' Ist possible?
''//Ham//.'' Here's the Commission, read it at more leysure:
But wilt thou heare me how I did proceed?
''//Hor//.'' I beseech you.
''//Ham//.'' Being thus benetted round with Villaines,
Ere I could make a Prologue to my braines,
They had begun the Play. I sate me downe,
Deuis'd a new Commission, wrote it faire,
I once did hold it as our Statists doe,
A basenesse to write faire; and laboured much
How to forget that learning: but Sir now,
It did me Yeomans seruice: wilt thou know
The effects of what I wrote?
''//Hor//.'' I, good my Lord.
''//Ham//.'' An earnest Coniuration from the King,
As England was his faithfull Tributary,
As loue betweene them, as the Palme should flourish,
As Peace should still her wheaten Garland weare,
And stand a Comma 'tweene their amities,
And many such like Assis of great charge,
That on the view and know of these Contents,
Without debatement further, more or lesse,
He should the bearers put to sodaine death,
Not shriuing time allowed.
''//Hor//.'' How was this seal'd?
''//Ham//.'' Why, euen in that was Heauen ordinate;
I had my fathers Signet in my Purse,
Which was the Modell of that Danish Seale:
Folded the Writ vp in forme of the other,
Subscrib'd it, gau't th' impression, plac't it safely,
The changeling neuer knowne: Now, the next day
Was our Sea Fight, and what to this was sement,
Thou know'st already.
''//Hor//.'' So //Guildensterne// and //Rosincrance//, go too't.
''//Ham//.'' Why man, they did make loue to this imployment
They are not neere my Conscience; their debate
Doth by their owne insinuation grow:
'Tis dangerous, when the baser nature comes
Betweene the passe, and fell incensed points
Of mighty opposites.
''//Hor//.'' Why, what a King is this?
''//Ham//.'' Does it not, thinkst thee, stand me now vpon
He that bath kil'd my King, and whor'd my Mother,
Popt in betweene th'election and my hopes,
Throwne out his Angle for my proper life,
And with such coozenage; is't not perfect conscience,
To quit him with this arme? And is't not to be damn'd
To let this Canker of our nature come
In further euill.
''//Hor//.'' It must be shortly knowne to him from England
What is the issue of the businesse there.
''//Ham//.'' It will be short,
The //interim//'s mine, and a mans life's no more
Then to say one: but I am very sorry good //Horatio//,
That to //Laertes// I forgot my selfe;
For by the image of my Cause, I see
The Portraiture of his; Ile count his fauours:
But sure the brauery of his griefe did put me
Into a Towring passion.
''//Hor//.'' Peace, who comes heere?
@@.stageDirectionFisco
// Enter young Osricke//.
@@
''//Osr//.'' Your Lordship is right welcome back to Denmarke.
''//Ham//.'' I humbly thank you Sir, dost know this waterflie?
''//Hor//.'' No my good Lord.
''//Ham//.'' Thy state is the more gracious; for 'tis a vice to
know him: he hath much Land, and fertile; let a Beast
be Lord of Beasts, and his Crib shall stand at the Kings
Messe; 'tis a Chowgh; but as I saw spacious in the pos-
session of dirt.
''//Osr//.'' Sweet Lord, if your friendship were at leysure,
I should impart a thing to you from his Maiesty.
''//Ham//.'' I will receiue it with all diligence of spirit; put
your Bonet to his right vse, 'tis for the head.
''//Osr//.'' I thanke your Lordship, 'tis very hot.
''//Ham//.'' No, beleeue mee 'tis very cold, the winde is
Northerly.
''//Osr//.'' It is indifferent cold my Lord indeed.
''//Ham//.'' Mee thinkes it is very soultry, and hot for my
Complexion.
''//Osr//.'' Exceedingly, my Lord, it is very soultry, as 'twere
I cannot tell how: but my Lord, his Maiesty bad me sig-
nifie to you, that he ha's laid a great wager on your head:
Sir, this is the matter.
''//Ham//.'' I beseech you remember.
''//Osr//.'' Nay, in good faith, for mine ease in good faith:
Sir, you are not ignorant of what excellence //Laertes// is at
his weapon.
''//Ham//.'' What's his weapon?
''//Osr//.'' Rapier and dagger.
''//Ham//.'' That's two of his weapons; but well.
''//Osr//.'' The sir King ha's wag'd with him six Barbary Hor-
ses, against the which he impon'd as I take it, sixe French
Rapiers and Poniards, with their assignes, as Girdle,
Hangers or so: three of the Carriages infaith are very
deare to fancy, very responsiue to the hilts, most delicate
carriages, and of very liberall conceit.
''//Ham//.'' What call you the Carriages?
''//Osr//.'' The Carriages Sir, are the hangers.
''//Ham//.'' The phrase would bee more Germaine to the
matter: If we could carry Cannon by our sides; I would
it might be Hangers till then; but on sixe Barbary Hor-
ses against sixe French Swords: their Assignes, and three
liberall conceited Carriages, that's the French but a-
gainst the Danish; why is this impon'd as you call it?
''//Osr//.'' The King Sir, hath laid that in a dozen passes be-
tweene you and him, hee shall not exceed you three hits;
He hath one twelue for mine, and that would come to
imediate tryall, if your Lordship would vouchsafe the
Answere.
''//Ham//.'' How if I answere no?
''//Osr//.'' I meane my Lord, the opposition of your person
in tryall.
''//Ham//.'' Sir, I will walke heere in the Hall; if it please
his Maiestie, 'tis the breathing time of day with me; let
the Foyles bee brought, the Gentleman willing, and the
King hold his purpose; I will win for him if I can: if
not, Ile gaine nothing but my shame, and the odde hits.
''//Osr//.'' Shall I redeliuer you ee'n so?
''//Ham//.'' To this effect Sir, after what flourish your na-
ture will.
''//Osr//.'' I commend my duty to your Lordship.
''//Ham//.'' Yours, yours; hee does well to commend it
himselfe, there are no tongues else for's tongue.
''//Hor//.'' This Lapwing runs away with the shell on his
head.
''//Ham//.'' He did Complie with his Dugge before hee
suck't it: thus had he and mine more of the same Beauy
that I know the drossie age dotes on; only got the tune of
the time, and outward habite of encounter, a kinde of
yesty collection, which carries them through & through
the most fond and winnowed opinions; and doe but blow
them to their tryalls: the Bubbles are out.
''//Hor//.'' You will lose this wager, my Lord.
''//Ham//.'' I doe not thinke so, since he went into France,
I haue beene in continuall practice; I shall winne at the
oddes: but thou wouldest not thinke how all heere a-
bout my heart: but it is no matter.
''//Hor//.'' Nay, good my Lord.
''//Ham//.'' It is but foolery; but it is such a kinde of
gain-giuing as would perhaps trouble a woman.
''//Hor//.'' If your minde dislike any thing, obey. I will fore-
stall their repaire hither, and say you are not fit.
''//Ham//.'' Not a whit, we defie Augury; there's a speciall
Prouidence in the fall of a sparrow. If it be now, 'tis not
to come: if it bee not to come, it will bee now: if it
be not now; yet it will come; the readinesse is all, since no
man ha's ought of what he leaues. What is't to leaue be-
times?
@@.stageDirectionFisco
//Enter King, Queene, Laertes and Lords, with other Atten//-
@@
@@.stageDirectionFisco
// dants// //with Foyles, and Gauntlets, a Table and//
@@
@@.stageDirectionFisco
//Flagons of Wine on it//.
@@
''//Kin//.'' Come //Hamlet//, come, and take this hand from me.
''//Ham//.'' Giue me your pardon Sir, I'ue done you wrong,
But pardon't as you are a Gentleman.
This presence knowes,
And you must needs haue heard how I am punisht
With sore distraction? What I haue done
That might your nature honour, and exception
Roughly awake, I heere proclaime was madnesse:
Was't //Hamlet// wrong'd //Laertes//? Neuer //Hamlet//.
If //Hamlet// from himselfe be tane away:
And when he's not himselfe, do's wrong //Laertes//,
Then //Hamlet// does it not, //Hamlet// denies it:
Who does it then? His Madnesse? If't be so,
//Hamlet// is of the Faction that is wrong'd,
His madnesse is poore //Hamlets// Enemy.
Sir, in this Audience,
Let my disclaiming from a purpos'd euill,
Free me so farre in your most generous thoughts,
That I haue shot mine Arrow o're the house,
And hurt my Mother.
''//Laer//.'' I am satisfied in Nature,
Whose motiue in this case should stirre me most
To my Reuenge. But in my termes of Honor
I stand aloofe, and will no reconcilement,
Till by some elder Masters of knowne Honor,
I haue a voyce, and president of peace
To keepe my name vngorg'd. But till that time,
I do receiue your offer'd loue like loue,
And wil not wrong it.
''//Ham//.'' I do embrace it freely,
And will this Brothers wager frankely play.
Giue vs the Foyles: Come on.
''//Laer//.'' Come one for me.
''//Ham//.'' Ile be your foile //Laertes//, in mine ignorance,
Your Skill shall like a Starre i'th'darkest night,
Sticke fiery off indeede.
''//Laer//.'' You mocke me Sir.
''//Ham//.'' No by this hand.
''//King//.'' Giue them the Foyles yong //Osricke//,
Cousen //Hamlet//, you know the wager.
''//Ham//.'' Verie well my Lord,
Your Grace hath laide the oddes a'th'weaker side.
''//King//.'' I do not feare it,
I haue seene you both:
But since he is better'd, we haue therefore oddes.
''//Laer//.'' This is too heauy,
Let me see another.
''//Ham//.'' This likes me well,
|dialogWithStageDirectionFisco|k
|These Foyles haue all a length.|//Prepare to play//.|
''//Osricke//.'' I my good Lord.
''//King//.'' Set me the Stopes of wine vpon that Table:
If //Hamlet// giue the first, or second hit,
Or quit in answer of the third exchange,
Let all the Battlements their Ordinance fire,
The King shal drinke to //Hamlets// better breath,
And in the Cup an vnion shal he throw
Richer then that, which foure successiue Kings
In Denmarkes Crowne haue worne.
Giue me the Cups,
And let the Kettle to the Trumpets speake,
The Trumpet to the Cannoneer without,
The Cannons to the Heauens, the Heauen to Earth,
Now the King drinkes to //Hamlet//. Come, begin,
And you the Iudges beare a wary eye.
''//Ham//.'' Come on sir.
|dialogWithStageDirectionFisco|k
|''//Laer//.'' Come on sir.|//They play//.|
''//Ham//.'' One.
''//Laer//.'' No.
''//Ham//.'' Iudgement.
''//Osr//.'' A hit, a very palpable hit.
''//Laer//.'' Well: againe.
''//King//.'' Stay, giue me drinke.
//Hamlet//, this Pearle is thine,
Here's to thy health. Giue him the cup,
|dialogWithStageDirectionFisco|k
| |//Trumpets sound, and shot goes off//.|
''//Ham//.'' Ile play this bout first, set by a-while.
Come: Another hit; what say you?
''//Laer//.'' A touch, a touch, I do confesse.
''//King//.'' Our Sonne shall win.
''//Qu//.'' He's fat, and scant of breath.
Heere's a Napkin, rub thy browes,
The Queene Carowses to thy fortune, //Hamlet//.
''//Ham//.'' Good Madam.
''//King//.'' //Gertrude//, do not drinke.
''//Qu//.'' I will my Lord;
I pray you pardon me.
''//King//.'' It is the poyson'd Cup, it is too late.
''//Ham//.'' I dare not drinke yet Madam,
By and by.
''//Qu//.'' Come, let me wipe thy face.
''//Laer//.'' My Lord, Ile hit him now.
''//King//.'' I do not thinke't.
''//Laer//.'' And yet 'tis almost 'gainst my conscience.
''//Ham//.'' Come for the third.
//Laertes//, you but dally,
I pray you passe with your best violence,
I am affear'd you make a wanton of me.
|dialogWithStageDirectionFisco|k
|''//Laer//.'' Say you so? Come on.|//Play//.|
''//Osr//.'' Nothing neither way.
''//Laer//.'' Haue at you now.
@@.stageDirectionFisco
//In scuffling they change Rapiers//.
@@
''//King//.'' Part them, they are incens'd.
''//Ham//.'' Nay come, againe.
''//Osr//.'' Looke to the Queene there hoa.
''//Hor//.'' They bleed on both sides. How is't my Lord?
''//Osr//.'' How is't //Laertes//?
''//Laer//.'' Why as a Woodcocke
To mine Sprindge, //Osricke//,
I am iustly kill'd with mine owne Treacherie.
''//Ham//.'' How does the Queene?
''//King//.'' She sounds to see them bleede.
''//Qu//.'' No, no, the drinke, the drinke.
Oh my deere //Hamlet//, the drinke, the drinke,
I am poyson'd.
''//Ham//.'' Oh Villany! How? Let the doore be lock'd.
Treacherie, seeke it out.
''//Laer//.'' It is heere //Hamlet//.
//Hamlet//, thou art slaine,
No Medicine in the world can do thee good.
In thee, there is not halfe an houre of life;
The Treacherous Instrument is in thy hand,
Vnbated and envenom'd: the foule practise
Hath turn'd it selfe on me. Loe, heere I lye,
Neuer to rise againe: Thy Mothers poyson'd:
I can no more, the King, the King's too blame.
''//Ham//.'' The point envenom'd too,
Then venome to thy worke.
|dialogWithStageDirectionFisco|k
| |//Hurts the King//.|
''//All//.'' Treason, Treason.
''//King//.'' O yet defend me Friends, I am but hurt.
''//Ham//.'' Heere thou incestuous, murdrous,
Damned Dane,
Drinke off this Potion: Is thy Vnion heere?
|dialogWithStageDirectionFisco|k
|Follow my Mother.|//King Dyes//.|
''//Laer//.'' He is iustly seru'd.
It is a poyson temp'red by himselfe:
Exchange forgiuenesse with me, Noble //Hamlet//;
Mine and my Fathers death come not vpon thee,
|dialogWithStageDirectionFisco|k
|Nor thine on me.|//Dyes//.|
''//Ham//.'' Heauen make thee free of it, I follow thee.
I am dead //Horatio//, wretched Queene adiew,
You that looke pale, and tremble at this chance,
That are but Mutes or audience to this acte:
Had I but time (as this fell Sergeant death
Is strick'd in his Arrest) oh I could tell you.
But let it be: //Horatio//, I am dead,
Thou liu'st, report me and my causes right
To the vnsatisfied.
''//Hor//.'' Neuer beleeue it.
I am more an Antike Roman then a Dane:
Heere's yet some Liquor left.
''//Ham//.'' As th'art a man, giue me the Cup.
Let go, by Heauen Ile haue't.
Oh good //Horatio//, what a wounded name,
(Things standing thus vnknowne) shall liue behind me.
If thou did'st euer hold me in thy heart,
Absent thee from felicitie awhile,
And in this harsh world draw thy breath in paine,
To tell my Storie.
|dialogWithStageDirectionFisco|k
| |//March afarre off, and shout within//.|
What warlike noyse is this?
@@.stageDirectionFisco
// Enter Osricke//.
@@
''//Osr//.'' Yong //Fortinbras//, with conquest come frõ Poland
To th' Ambassadors of England giues rhis warlike volly.
''//Ham//.'' O I dye //Horatio://
The potent poyson quite ore-crowes my spirit,
I cannot liue to heare the Newes from England,
But I do prophesie th'election lights
On //Fortinbras//, he ha's my dying voyce,
So tell him with the occurrents more and lesse,
|dialogWithStageDirectionFisco|k
|Which haue solicited. The rest is silence. O, o, o, o.|//Dyes//|
''//Hora//.'' Now cracke a Noble heart:
Goodnight sweet Prince,
And flights of Angels sing thee to thy rest,
Why do's the Drumme come hither?
@@.stageDirectionFisco
// Enter Fortinbras and English Ambassador, with Drumme//,
@@
@@.stageDirectionFisco
//Colours, and Attendants//.
@@
''//Fortin//.'' Where is this sight?
''//Hor//.'' What is it ye would see;
If ought of woe, or wonder, cease your search.
''//For//.'' His quarry cries on hauocke. Oh proud death,
What feast is toward in thine eternall Cell.
That thou so many Princes, at a shoote,
So bloodily hast strooke.
''//Amb//.'' The sight is dismall,
And our affaires from England come too late,
The eares are senselesse that should giue vs hearing,
To tell him his command'ment is fulfill'd,
That //Rosincrance// and //Guildensterne// are dead:
Where should we haue our thankes?
''//Hor//.'' Not from his mouth,
Had it th'abilitie of life to thanke you:
He neuer gaue command'ment for their death.
But since so iumpe vpon this bloodie question,
You from the Polake warres, and you from England
Are heere arriued. Giue order that these bodies
High on a stage be placed to the view,
And let me speake to th'yet vnknowing world,
How these things came about. So shall you heare
Of carnall, bloudie, and vnnaturall acts,
Of accidentall iudgements, casuall slaughters
Of death's put on by cunning, and forc'd cause,
And in this vpshot, purposes mistooke,
Falne on the Inuentors heads. All this can I
Truly deliuer.
''//For//.'' Let vs hast to heare it,
And call the Noblest to the Audience.
For me, with sorrow, I embrace my Fortune,
I haue some Rites of memory in this Kingdome,
Which are ro claime, my vantage doth
Inuite me,
''//Hor//.'' Of that I shall haue alwayes cause to speake,
And from his mouth
Whose voyce will draw on more:
But let this same be presently perform'd,
Euen whiles mens mindes are wilde,
Lest more mischance
On plots, and errors happen.
''//For//.'' Let foure Captaines
Beare //Hamlet// like a Soldier to the Stage,
For he was likely, had he beene put on
To haue prou'd most royally:
And for his passage,
The Souldiours Musicke, and the rites of Warre
Speake lowdly for him.
Take vp the body; Such a sight as this
Becomes the Field, but heere shewes much amis.
Go, bid the Souldiers shoote.
|dialogWithStageDirectionFisco|k
| |//Exeunt Marching: after the which, a Peale of//|
|dialogWithStageDirectionFisco|k
| ||
|dialogWithStageDirectionFisco|k
| |// Ordenance are shot off//.|
//Enter HAMLET and HORATIO//
''HAMLET''
|5.2.1|So much for this, sir: now shall you see the other;|
|5.2.2|You do remember all the circumstance?|
''HORATIO''
|5.2.3|Remember it, my lord?|
''HAMLET''
|5.2.4|Sir, in my heart there was a kind of fighting,|
|5.2.5|That would not let me sleep: methought I lay|
|5.2.6|Worse than the mutines in the bilboes. Rashly,|
|5.2.7|And praised be rashness for it, let us know,|
|5.2.8|Our indiscretion sometimes serves us well,|
|5.2.9|When our deep plots do pall: and that should teach us|
|5.2.10|There's a divinity that shapes our ends,|
|5.2.11|Rough-hew them how we will,--|
''HORATIO''
|5.2.12|That is most certain.|
''HAMLET''
|5.2.13|Up from my cabin,|
|5.2.14|My sea-gown scarf'd about me, in the dark|
|5.2.15|Groped I to find out them; had my desire.|
|5.2.16|Finger'd their packet, and in fine withdrew|
|5.2.17|To mine own room again; making so bold,|
|5.2.18|My fears forgetting manners, to unseal|
|5.2.19|Their grand commission; where I found, Horatio,--|
|5.2.20|O royal knavery!--an exact command,|
|5.2.21|Larded with many several sorts of reasons|
|5.2.22|Importing Denmark's health and England's too,|
|5.2.23|With, ho! such bugs and goblins in my life,|
|5.2.24|That, on the supervise, no leisure bated,|
|5.2.25|No, not to stay the grinding of the axe,|
|5.2.26|My head should be struck off.|
''HORATIO''
|5.2.27|Is't possible?|
''HAMLET''
|5.2.28|Here's the commission: read it at more leisure.|
|5.2.29|But wilt thou hear me how I did proceed?|
''HORATIO''
|5.2.30|I beseech you.|
''HAMLET''
|5.2.31|Being thus be-netted round with villanies,--|
|5.2.32|Ere I could make a prologue to my brains,|
|5.2.33|They had begun the play--I sat me down,|
|5.2.34|Devised a new commission, wrote it fair:|
|5.2.35|I once did hold it, as our statists do,|
|5.2.36|A baseness to write fair and labour'd much|
|5.2.37|How to forget that learning, but, sir, now|
|5.2.38|It did me yeoman's service: wilt thou know|
|5.2.39|The effect of what I wrote?|
''HORATIO''
|5.2.40|Ay, good my lord.|
''HAMLET''
|5.2.41|An earnest conjuration from the king,|
|5.2.42|As England was his faithful tributary,|
|5.2.43|As love between them like the palm might flourish,|
|5.2.44|As peace should stiff her wheaten garland wear|
|5.2.45|And stand a comma 'tween their amities,|
|5.2.46|And many such-like 'As'es of great charge,|
|5.2.47|That, on the view and knowing of these contents,|
|5.2.48|Without debatement further, more or less,|
|5.2.49|He should the bearers put to sudden death,|
|5.2.50|Not shriving-time allow'd.|
''HORATIO''
|5.2.51|How was this seal'd?|
''HAMLET''
|5.2.52|Why, even in that was heaven ordinant.|
|5.2.53|I had my father's signet in my purse,|
|5.2.54|Which was the model of that Danish seal;|
|5.2.55|Folded the writ up in form of the other,|
|5.2.56|Subscribed it, gave't the impression, placed it safely,|
|5.2.57|The changeling never known. Now, the next day|
|5.2.58|Was our sea-fight; and what to this was sequent|
|5.2.59|Thou know'st already.|
''HORATIO''
|5.2.60|So Guildenstern and Rosencrantz go to't.|
''HAMLET''
|5.2.61|Why, man, they did make love to this employment;|
|5.2.62|They are not near my conscience; their defeat|
|5.2.63|Does by their own insinuation grow:|
|5.2.64|'Tis dangerous when the baser nature comes|
|5.2.65|Between the pass and fell incensed points|
|5.2.66|Of mighty opposites.|
''HORATIO''
|5.2.67|Why, what a king is this!|
''HAMLET''
|5.2.68|Does it not, think'st thee, stand me now upon--|
|5.2.69|He that hath kill'd my king and whored my mother,|
|5.2.70|Popp'd in between the election and my hopes,|
|5.2.71|Thrown out his angle for my proper life,|
|5.2.72|And with such cozenage--is't not perfect conscience,|
|5.2.73|To quit him with this arm? and is't not to be damn'd,|
|5.2.74|To let this canker of our nature come|
|5.2.75|In further evil?|
''HORATIO''
|5.2.76|It must be shortly known to him from England|
|5.2.77|What is the issue of the business there.|
''HAMLET''
|5.2.78|It will be short: the interim is mine;|
|5.2.79|And a man's life's no more than to say 'One.'|
|5.2.80|But I am very sorry, good Horatio,|
|5.2.81|That to Laertes I forgot myself;|
|5.2.82|For, by the image of my cause, I see|
|5.2.83|The portraiture of his: I'll court his favours.|
|5.2.84|But, sure, the bravery of his grief did put me|
|5.2.85|Into a towering passion.|
''HORATIO''
|5.2.86|Peace! who comes here?|
//Enter OSRIC//
''OSRIC''
|5.2.87|Your lordship is right welcome back to Denmark.|
''HAMLET''
|5.2.88|I humbly thank you, sir. Dost know this water-fly?|
''HORATIO''
|5.2.89|No, my good lord.|
''HAMLET''
|5.2.90|Thy state is the more gracious; for 'tis a vice to|
|5.2.91|know him. He hath much land, and fertile: let a|
|5.2.92|beast be lord of beasts, and his crib shall stand at|
|5.2.93|the king's mess: 'tis a chough; but, as I say,|
|5.2.94|spacious in the possession of dirt.|
''OSRIC''
|5.2.95|Sweet lord, if your lordship were at leisure, I|
|5.2.96|should impart a thing to you from his majesty.|
''HAMLET''
|5.2.97|I will receive it, sir, with all diligence of|
|5.2.98|spirit. Put your bonnet to his right use; 'tis for the head.|
''OSRIC''
|5.2.99|I thank your lordship, it is very hot.|
''HAMLET''
|5.2.100|No, believe me, 'tis very cold; the wind is|
|5.2.101|northerly.|
''OSRIC''
|5.2.102|It is indifferent cold, my lord, indeed.|
''HAMLET''
|5.2.103|But yet methinks it is very sultry and hot for my|
|5.2.104|complexion.|
''OSRIC''
|5.2.105|Exceedingly, my lord; it is very sultry,--as|
|5.2.106|'twere,--I cannot tell how. But, my lord, his|
|5.2.107|majesty bade me signify to you that he has laid a|
|5.2.108|great wager on your head: sir, this is the matter,--|
''HAMLET''
|5.2.109|I beseech you, remember--|
//HAMLET moves him to put on his hat//
''OSRIC''
|5.2.110|Nay, good my lord; for mine ease, in good faith.|
|5.2.111|Sir, here is newly come to court Laertes; believe|
|5.2.112|me, an absolute gentleman, full of most excellent|
|5.2.113|differences, of very soft society and great showing:|
|5.2.114|indeed, to speak feelingly of him, he is the card or|
|5.2.115|calendar of gentry, for you shall find in him the|
|5.2.116|continent of what part a gentleman would see.|
''HAMLET''
|5.2.117|Sir, his definement suffers no perdition in you;|
|5.2.118|though, I know, to divide him inventorially would|
|5.2.119|dizzy the arithmetic of memory, and yet but yaw|
|5.2.120|neither, in respect of his quick sail. But, in the|
|5.2.121|verity of extolment, I take him to be a soul of|
|5.2.122|great article; and his infusion of such dearth and|
|5.2.123|rareness, as, to make true diction of him, his|
|5.2.124|semblable is his mirror; and who else would trace|
|5.2.125|him, his umbrage, nothing more.|
''OSRIC''
|5.2.126|Your lordship speaks most infallibly of him.|
''HAMLET''
|5.2.127|The concernancy, sir? why do we wrap the gentleman|
|5.2.128|in our more rawer breath?|
''OSRIC''
|5.2.129|Sir?|
''HORATIO''
|5.2.130|Is't not possible to understand in another tongue?|
|5.2.131|You will do't, sir, really.|
''HAMLET''
|5.2.132|What imports the nomination of this gentleman?|
''OSRIC''
|5.2.133|Of Laertes?|
''HORATIO''
|5.2.134|His purse is empty already; all's golden words are spent.|
''HAMLET''
|5.2.135|Of him, sir.|
''OSRIC''
|5.2.136|I know you are not ignorant--|
''HAMLET''
|5.2.137|I would you did, sir; yet, in faith, if you did,|
|5.2.138|it would not much approve me. Well, sir?|
''OSRIC''
|5.2.139|You are not ignorant of what excellence Laertes is--|
''HAMLET''
|5.2.140|I dare not confess that, lest I should compare with|
|5.2.141|him in excellence; but, to know a man well, were to|
|5.2.142|know himself.|
''OSRIC''
|5.2.143|I mean, sir, for his weapon; but in the imputation|
|5.2.144|laid on him by them, in his meed he's unfellowed.|
''HAMLET''
|5.2.145|What's his weapon?|
''OSRIC''
|5.2.146|Rapier and dagger.|
''HAMLET''
|5.2.147|That's two of his weapons: but, well.|
''OSRIC''
|5.2.148|The king, sir, hath wagered with him six Barbary|
|5.2.149|horses: against the which he has imponed, as I take|
|5.2.150|it, six French rapiers and poniards, with their|
|5.2.151|assigns, as girdle, hangers, and so: three of the|
|5.2.152|carriages, in faith, are very dear to fancy, very|
|5.2.153|responsive to the hilts, most delicate carriages,|
|5.2.154|and of very liberal conceit.|
''HAMLET''
|5.2.155|What call you the carriages?|
''HORATIO''
|5.2.156|I knew you must be edified by the margent ere you had done.|
''OSRIC''
|5.2.157|The carriages, sir, are the hangers.|
''HAMLET''
|5.2.158|The phrase would be more german to the matter, if we|
|5.2.159|could carry cannon by our sides: I would it might|
|5.2.160|be hangers till then. But, on: six Barbary horses|
|5.2.161|against six French swords, their assigns, and three|
|5.2.162|liberal-conceited carriages; that's the French bet|
|5.2.163|against the Danish. Why is this 'imponed,' as you call it?|
''OSRIC''
|5.2.164|The king, sir, hath laid, that in a dozen passes|
|5.2.165|between yourself and him, he shall not exceed you|
|5.2.166|three hits: he hath laid on twelve for nine; and it|
|5.2.167|would come to immediate trial, if your lordship|
|5.2.168|would vouchsafe the answer.|
''HAMLET''
|5.2.169|How if I answer 'no'?|
''OSRIC''
|5.2.170|I mean, my lord, the opposition of your person in trial.|
''HAMLET''
|5.2.171|Sir, I will walk here in the hall: if it please his|
|5.2.172|majesty, 'tis the breathing time of day with me; let|
|5.2.173|the foils be brought, the gentleman willing, and the|
|5.2.174|king hold his purpose, I will win for him an I can;|
|5.2.175|if not, I will gain nothing but my shame and the odd hits.|
''OSRIC''
|5.2.176|Shall I re-deliver you e'en so?|
''HAMLET''
|5.2.177|To this effect, sir; after what flourish your nature will.|
''OSRIC''
|5.2.178|I commend my duty to your lordship.|
''HAMLET''
|5.2.179|Yours, yours.|
//Exit OSRIC//
|5.2.180|He does well to commend it himself; there are no|
|5.2.181|tongues else for's turn.|
''HORATIO''
|5.2.182|This lapwing runs away with the shell on his head.|
''HAMLET''
|5.2.183|He did comply with his dug, before he sucked it.|
|5.2.184|Thus has he--and many more of the same bevy that I|
|5.2.185|know the dressy age dotes on--only got the tune of|
|5.2.186|the time and outward habit of encounter; a kind of|
|5.2.187|yesty collection, which carries them through and|
|5.2.188|through the most fond and winnowed opinions; and do|
|5.2.189|but blow them to their trial, the bubbles are out.|
//Enter a Lord//
''Lord''
|5.2.190|My lord, his majesty commended him to you by young|
|5.2.191|Osric, who brings back to him that you attend him in|
|5.2.192|the hall: he sends to know if your pleasure hold to|
|5.2.193|play with Laertes, or that you will take longer time.|
''HAMLET''
|5.2.194|I am constant to my purpose; they follow the king's|
|5.2.195|pleasure: if his fitness speaks, mine is ready; now|
|5.2.196|or whensoever, provided I be so able as now.|
''Lord''
|5.2.197|The king and queen and all are coming down.|
''HAMLET''
|5.2.198|In happy time.|
''Lord''
|5.2.199|The queen desires you to use some gentle|
|5.2.200|entertainment to Laertes before you fall to play.|
''HAMLET''
|5.2.201|She well instructs me.|
//Exit Lord//
''HORATIO''
|5.2.202|You will lose this wager, my lord.|
''HAMLET''
|5.2.203|I do not think so: since he went into France, I|
|5.2.204|have been in continual practise: I shall win at the|
|5.2.205|odds. But thou wouldst not think how ill all's here|
|5.2.206|about my heart: but it is no matter.|
''HORATIO''
|5.2.207|Nay, good my lord,--|
''HAMLET''
|5.2.208|It is but foolery; but it is such a kind of|
|5.2.209|gain-giving, as would perhaps trouble a woman.|
''HORATIO''
|5.2.210|If your mind dislike any thing, obey it: I will|
|5.2.211|forestall their repair hither, and say you are not|
|5.2.212|fit.|
''HAMLET''
|5.2.213|Not a whit, we defy augury: there's a special|
|5.2.214|providence in the fall of a sparrow. If it be now,|
|5.2.215|'tis not to come; if it be not to come, it will be|
|5.2.216|now; if it be not now, yet it will come: the|
|5.2.217|readiness is all: since no man has aught of what he|
|5.2.218|leaves, what is't to leave betimes?|
//Enter KING CLAUDIUS, QUEEN GERTRUDE, LAERTES, Lords, OSRIC, and Attendants with foils, & c//
''KING CLAUDIUS''
|5.2.219|Come, Hamlet, come, and take this hand from me.|
//KING CLAUDIUS puts LAERTES' hand into HAMLET's//
''HAMLET''
|5.2.220|Give me your pardon, sir: I've done you wrong;|
|5.2.221|But pardon't, as you are a gentleman.|
|5.2.222|This presence knows,|
|5.2.223|And you must needs have heard, how I am punish'd|
|5.2.224|With sore distraction. What I have done,|
|5.2.225|That might your nature, honour and exception|
|5.2.226|Roughly awake, I here proclaim was madness.|
|5.2.227|Was't Hamlet wrong'd Laertes? Never Hamlet:|
|5.2.228|If Hamlet from himself be ta'en away,|
|5.2.229|And when he's not himself does wrong Laertes,|
|5.2.230|Then Hamlet does it not, Hamlet denies it.|
|5.2.231|Who does it, then? His madness: if't be so,|
|5.2.232|Hamlet is of the faction that is wrong'd;|
|5.2.233|His madness is poor Hamlet's enemy.|
|5.2.234|Sir, in this audience,|
|5.2.235|Let my disclaiming from a purposed evil|
|5.2.236|Free me so far in your most generous thoughts,|
|5.2.237|That I have shot mine arrow o'er the house,|
|5.2.238|And hurt my brother.|
''LAERTES''
|5.2.239|I am satisfied in nature,|
|5.2.240|Whose motive, in this case, should stir me most|
|5.2.241|To my revenge: but in my terms of honour|
|5.2.242|I stand aloof; and will no reconcilement,|
|5.2.243|Till by some elder masters, of known honour,|
|5.2.244|I have a voice and precedent of peace,|
|5.2.245|To keep my name ungored. But till that time,|
|5.2.246|I do receive your offer'd love like love,|
|5.2.247|And will not wrong it.|
''HAMLET''
|5.2.248|I embrace it freely;|
|5.2.249|And will this brother's wager frankly play.|
|5.2.250|Give us the foils. Come on.|
''LAERTES''
|5.2.251|Come, one for me.|
''HAMLET''
|5.2.252|I'll be your foil, Laertes: in mine ignorance|
|5.2.253|Your skill shall, like a star i' the darkest night,|
|5.2.254|Stick fiery off indeed.|
''LAERTES''
|5.2.255|You mock me, sir.|
''HAMLET''
|5.2.256|No, by this hand.|
''KING CLAUDIUS''
|5.2.257|Give them the foils, young Osric. Cousin Hamlet,|
|5.2.258|You know the wager?|
''HAMLET''
|5.2.259|Very well, my lord|
|5.2.260|Your grace hath laid the odds o' the weaker side.|
''KING CLAUDIUS''
|5.2.261|I do not fear it; I have seen you both:|
|5.2.262|But since he is better'd, we have therefore odds.|
''LAERTES''
|5.2.263|This is too heavy, let me see another.|
''HAMLET''
|5.2.264|This likes me well. These foils have all a length?|
//They prepare to play//
''OSRIC''
|5.2.265|Ay, my good lord.|
''KING CLAUDIUS''
|5.2.266|Set me the stoops of wine upon that table.|
|5.2.267|If Hamlet give the first or second hit,|
|5.2.268|Or quit in answer of the third exchange,|
|5.2.269|Let all the battlements their ordnance fire:|
|5.2.270|The king shall drink to Hamlet's better breath;|
|5.2.271|And in the cup an union shall he throw,|
|5.2.272|Richer than that which four successive kings|
|5.2.273|In Denmark's crown have worn. Give me the cups;|
|5.2.274|And let the kettle to the trumpet speak,|
|5.2.275|The trumpet to the cannoneer without,|
|5.2.276|The cannons to the heavens, the heavens to earth,|
|5.2.277|'Now the king dunks to Hamlet.' Come, begin:|
|5.2.278|And you, the judges, bear a wary eye.|
''HAMLET''
|5.2.279|Come on, sir.|
''LAERTES''
|5.2.280| Come, my lord.|
//They play//
''HAMLET''
|5.2.281|One.|
''LAERTES''
|5.2.282|No.|
''HAMLET''
|5.2.283|Judgment.|
''OSRIC''
|5.2.284|A hit, a very palpable hit.|
''LAERTES''
|5.2.285|Well; again.|
''KING CLAUDIUS''
|5.2.286|Stay; give me drink. Hamlet, this pearl is thine;|
|5.2.287|Here's to thy health.|
//Trumpets sound, and cannon shot off within//
|5.2.288|Give him the cup.|
''HAMLET''
|5.2.289|I'll play this bout first; set it by awhile. Come.|
//They play//
|5.2.290|Another hit; what say you?|
''LAERTES''
|5.2.291|A touch, a touch, I do confess.|
''KING CLAUDIUS''
|5.2.292|Our son shall win.|
''QUEEN GERTRUDE''
|5.2.293| He's fat, and scant of breath.|
|5.2.294|Here, Hamlet, take my napkin, rub thy brows;|
|5.2.295|The queen carouses to thy fortune, Hamlet.|
''HAMLET''
|5.2.296|Good madam!|
''KING CLAUDIUS''
|5.2.297| Gertrude, do not drink.|
''QUEEN GERTRUDE''
|5.2.298|I will, my lord; I pray you, pardon me.|
''KING CLAUDIUS''
|5.2.299|[Aside] It is the poison'd cup: it is too late.|
''HAMLET''
|5.2.300|I dare not drink yet, madam; by and by.|
''QUEEN GERTRUDE''
|5.2.301|Come, let me wipe thy face.|
''LAERTES''
|5.2.302|My lord, I'll hit him now.|
''KING CLAUDIUS''
|5.2.303|I do not think't.|
''LAERTES''
|5.2.304|[Aside] And yet 'tis almost 'gainst my conscience.|
''HAMLET''
|5.2.305|Come, for the third, Laertes: you but dally;|
|5.2.306|I pray you, pass with your best violence;|
|5.2.307|I am afeard you make a wanton of me.|
''LAERTES''
|5.2.308|Say you so? come on.|
//They play//
''OSRIC''
|5.2.309|Nothing, neither way.|
''LAERTES''
|5.2.310|Have at you now!|
//LAERTES wounds HAMLET; then in scuffling, they change rapiers, and HAMLET wounds LAERTES//
''KING CLAUDIUS''
|5.2.311|Part them; they are incensed.|
''HAMLET''
|5.2.312|Nay, come, again.|
//QUEEN GERTRUDE falls//
''OSRIC''
|5.2.313| Look to the queen there, ho!|
''HORATIO''
|5.2.314|They bleed on both sides. How is it, my lord?|
''OSRIC''
|5.2.315|How is't, Laertes?|
''LAERTES''
|5.2.316|Why, as a woodcock to mine own springe, Osric;|
|5.2.317|I am justly kill'd with mine own treachery.|
''HAMLET''
|5.2.318|How does the queen?|
''KING CLAUDIUS''
|5.2.319|She swounds to see them bleed.|
''QUEEN GERTRUDE''
|5.2.320|No, no, the drink, the drink,--O my dear Hamlet,--|
|5.2.321|The drink, the drink! I am poison'd.|
//Dies//
''HAMLET''
|5.2.322|O villany! Ho! let the door be lock'd:|
|5.2.323|Treachery! Seek it out.|
''LAERTES''
|5.2.324|It is here, Hamlet: Hamlet, thou art slain;|
|5.2.325|No medicine in the world can do thee good;|
|5.2.326|In thee there is not half an hour of life;|
|5.2.327|The treacherous instrument is in thy hand,|
|5.2.328|Unbated and envenom'd: the foul practise|
|5.2.329|Hath turn'd itself on me lo, here I lie,|
|5.2.330|Never to rise again: thy mother's poison'd:|
|5.2.331|I can no more: the king, the king's to blame.|
''HAMLET''
|5.2.332|The point!--envenom'd too!|
|5.2.333|Then, venom, to thy work.|
//Stabs KING CLAUDIUS//
''All''
|5.2.334|Treason! treason!|
''KING CLAUDIUS''
|5.2.335|O, yet defend me, friends; I am but hurt.|
''HAMLET''
|5.2.336|Here, thou incestuous, murderous, damned Dane,|
|5.2.337|Drink off this potion. Is thy union here?|
|5.2.338|Follow my mother.|
//KING CLAUDIUS dies//
''LAERTES''
|5.2.339| He is justly served;|
|5.2.340|It is a poison temper'd by himself.|
|5.2.341|Exchange forgiveness with me, noble Hamlet:|
|5.2.342|Mine and my father's death come not upon thee,|
|5.2.343|Nor thine on me.|
//Dies//
''HAMLET''
|5.2.344|Heaven make thee free of it! I follow thee.|
|5.2.345|I am dead, Horatio. Wretched queen, adieu!|
|5.2.346|You that look pale and tremble at this chance,|
|5.2.347|That are but mutes or audience to this act,|
|5.2.348|Had I but time--as this fell sergeant, death,|
|5.2.349|Is strict in his arrest--O, I could tell you--|
|5.2.350|But let it be. Horatio, I am dead;|
|5.2.351|Thou livest; report me and my cause aright|
|5.2.352|To the unsatisfied.|
''HORATIO''
|5.2.353|Never believe it:|
|5.2.354|I am more an antique Roman than a Dane:|
|5.2.355|Here's yet some liquor left.|
''HAMLET''
|5.2.356|As thou'rt a man,|
|5.2.357|Give me the cup: let go; by heaven, I'll have't.|
|5.2.358|O good Horatio, what a wounded name,|
|5.2.359|Things standing thus unknown, shall live behind me!|
|5.2.360|If thou didst ever hold me in thy heart|
|5.2.361|Absent thee from felicity awhile,|
|5.2.362|And in this harsh world draw thy breath in pain,|
|5.2.363|To tell my story.|
//March afar off, and shot within//
|5.2.364|What warlike noise is this?|
''OSRIC''
|5.2.365|Young Fortinbras, with conquest come from Poland,|
|5.2.366|To the ambassadors of England gives|
|5.2.367|This warlike volley.|
''HAMLET''
|5.2.368|O, I die, Horatio;|
|5.2.369|The potent poison quite o'er-crows my spirit:|
|5.2.370|I cannot live to hear the news from England;|
|5.2.371|But I do prophesy the election lights|
|5.2.372|On Fortinbras: he has my dying voice;|
|5.2.373|So tell him, with the occurrents, more and less,|
|5.2.374|Which have solicited. The rest is silence.|
//Dies//
''HORATIO''
|5.2.375|Now cracks a noble heart. Good night sweet prince:|
|5.2.376|And flights of angels sing thee to thy rest!|
|5.2.377|Why does the drum come hither?|
//March within//
//Enter FORTINBRAS, the English Ambassadors, and others//
''PRINCE FORTINBRAS''
|5.2.378|Where is this sight?|
''HORATIO''
|5.2.379|What is it ye would see?|
|5.2.380|If aught of woe or wonder, cease your search.|
''PRINCE FORTINBRAS''
|5.2.381|This quarry cries on havoc. O proud death,|
|5.2.382|What feast is toward in thine eternal cell,|
|5.2.383|That thou so many princes at a shot|
|5.2.384|So bloodily hast struck?|
''First Ambassador''
|5.2.385|The sight is dismal;|
|5.2.386|And our affairs from England come too late:|
|5.2.387|The ears are senseless that should give us hearing,|
|5.2.388|To tell him his commandment is fulfill'd,|
|5.2.389|That Rosencrantz and Guildenstern are dead:|
|5.2.390|Where should we have our thanks?|
''HORATIO''
|5.2.391|Not from his mouth,|
|5.2.392|Had it the ability of life to thank you:|
|5.2.393|He never gave commandment for their death.|
|5.2.394|But since, so jump upon this bloody question,|
|5.2.395|You from the Polack wars, and you from England,|
|5.2.396|Are here arrived give order that these bodies|
|5.2.397|High on a stage be placed to the view;|
|5.2.398|And let me speak to the yet unknowing world|
|5.2.399|How these things came about: so shall you hear|
|5.2.400|Of carnal, bloody, and unnatural acts,|
|5.2.401|Of accidental judgments, casual slaughters,|
|5.2.402|Of deaths put on by cunning and forced cause,|
|5.2.403|And, in this upshot, purposes mistook|
|5.2.404|Fall'n on the inventors' reads: all this can I|
|5.2.405|Truly deliver.|
''PRINCE FORTINBRAS''
|5.2.406| Let us haste to hear it,|
|5.2.407|And call the noblest to the audience.|
|5.2.408|For me, with sorrow I embrace my fortune:|
|5.2.409|I have some rights of memory in this kingdom,|
|5.2.410|Which now to claim my vantage doth invite me.|
''HORATIO''
|5.2.411|Of that I shall have also cause to speak,|
|5.2.412|And from his mouth whose voice will draw on more;|
|5.2.413|But let this same be presently perform'd,|
|5.2.414|Even while men's minds are wild; lest more mischance|
|5.2.415|On plots and errors, happen.|
''PRINCE FORTINBRAS''
|5.2.416|Let four captains|
|5.2.417|Bear Hamlet, like a soldier, to the stage;|
|5.2.418|For he was likely, had he been put on,|
|5.2.419|To have proved most royally: and, for his passage,|
|5.2.420|The soldiers' music and the rites of war|
|5.2.421|Speak loudly for him.|
|5.2.422|Take up the bodies: such a sight as this|
|5.2.423|Becomes the field, but here shows much amiss.|
|5.2.424|Go, bid the soldiers shoot.|
//A dead march. Exeunt, bearing off the dead bodies; after which a peal of ordnance is shot off//
@@.stageDirectionFisco
//Enter Hamlet and Horatio//.
@@
''//Ham//.'' So much for this sir, now shall you see the other,
You doe remember all the circumstance.
''//Hora//.'' Remember it my Lord.
''//Ham//.'' Sir in my hart there was a kind of fighting
That would not let me sleepe, my thought I lay
Worse then the mutines in the bilbo, rashly,
And praysd be rashnes for it: let vs knowe,
Our indiscretion sometime serues vs well
When our deepe plots doe fall, & that should learne vs
Ther's a diuinity that shapes our ends,
Rough hew them how we will.
''//Hora//.'' That is most certaine.
''//Ham//.'' Vp from my Cabin,
My sea-gowne scarft about me in the darke
Gropt I to find out them, had my desire,
Fingard their packet, and in fine with-drew
To mine owne roome againe, making so bold
My feares forgetting manners to vnfold
Their graund commission; where I found //Horatio//
A royall knauery, an exact command
Larded with many seuerall sorts of reasons,
Importing Denmarkes health, and //Englands //to,
With hoe such bugges and goblines in my life,
That on the superuise no leasure bated,
No not to stay the grinding of the Axe,
My head should be strooke off.
''//Hora//.'' I'st possible?
''//Ham//.'' Heeres the commission, read it at more leasure,
But wilt thou heare now how I did proceed.
''//Hora//.'' I beseech you.
''//Ham//.'' Being thus benetted round with villaines,
Or I could make a prologue to my braines,
They had begunne the play, I sat me downe,
Deuisd a new commission, wrote it faire,
I once did hold it as our statists doe,
A basenesse to write faire, and labourd much
How to forget that learning, but sir now
It did me yemans seruice, wilt thou know
Th'effect of what I wrote?
''//Hora//.'' I good my Lord.
''//Ham//.'' An earnest coniuration from the King,
As //England// was his faithfull tributary,
As loue betweene them like the palme might florish,
As peace should still her wheaten garland weare
And stand a Comma tweene their amities,
And many such like, as sir of great charge,
That on the view, and knowing of these contents,
Without debatement further more or lesse,
He should those bearers put to suddaine death,
Not shriuing time alow'd.
''//Hora//.'' How was this seald?
''//Ham//.'' Why euen in that was heauen ordinant,
I had my fathers signet in my purse
Which was the modill of that Danish seale,
Folded the writ vp in the forme of th'other,
Subcribe it, gau't th'impression, plac'd it safely,
The changling neuer knowne: now the next day
Was our Sea fight, and what to this was sequent
Thou knowest already.
''//Hora//.'' So //Guyldensterne// and //Rosencraus// goe too't.
''//Ham//.'' They are not neere my conscience, their defeat
Dooes by their owne insinnuation growe,
Tis dangerous when the baser nature comes
Betweene the passe and fell incenced points
Of mighty opposits.
''//Hora//.'' Why what a King is this!
''//Ham//.'' Dooes it not thinke thee stand me now vppon?
He that hath kild my King, and whor'd my mother,
Pop't in betweene th'election and my hopes,
Throwne out his Angle for my proper life,
And with such cusnage, i'st not perfect conscience?
@@.stageDirectionFisco
//Enter a Courtier//.
@@
''//Cour//.'' Your Lordship is right welcome backe to Denmarke.
''//Ham//.'' I humble thanke you sir.
Doost know this water fly?
''//Hora//.'' No my good Lord.
''//Ham//.'' Thy state is the more gracious, for tis a vice to know him,
He hath much land and fertill: let a beast be Lord of beasts, and his
crib shall stand at the Kings messe, tis a chough, but as I say, spaci-
ous in the possession of durt.
''//Cour//.'' Sweete Lord, if your Lordshippe were at leasure, I should
impart a thing to you from his Maiestie.
''//Ham//.'' I will receaue it sir withall dilligence of spirit, your bonnet
to his right vse, tis for the head.
''//Cour//.'' I thanke your Lordship, it is very hot.
''//Ham//.'' No belieue me, tis very cold, the wind is Northerly.
''//Cour//.'' It is indefferent cold my Lord indeed.
''//Ham//.'' But yet me thinkes it is very sully and hot, or my complec-
tion.
''//Cour//.'' Exceedingly my Lord, it is very soultery, as t'were I can-
not tell how: my Lord his Maiestie bad me signifie to you, that a
has layed a great wager on your head, sir this is the matter.
''//Ham//.'' I beseech you remember.
''//Cour//.'' Nay good my Lord for my ease in good faith, sir here is newly
com to Court //Laertes//, belieue me an absolute gentlemen, ful of most
excellent differences, of very soft society, and great showing //:// in-
deede to speake sellingly of him, hee is the card or kalender of gen-
try: for you shall find in him the continent of what part a Gentle-
man would see.
''//Ham//.'' Sir, his definement suffers no perdition in you, though I
know to deuide him inuentorially, would dazzie th'arithmaticke of
memory, and yet but raw neither, in respect of his quick saile, but
in the veritie of extolment, I take him to be a soule of great article,
& his infusion of such dearth and rarenesse, as to make true dixion
of him, his semblable is his mirrour, & who els would trace him, his
vmbrage, nothing more.
''//Cour//.'' Your Lordship speakes most infallibly of him.
''//Ham//.'' The concernancy sir, why doe we wrap the gentleman in
our more rawer breath?
''//Cour//.'' Sir.
''//Hora//.'' Ist not possible to vnderstand in another tongue, you will
doo't sir really.
''//Ham//.'' What imports the nomination of this gentleman.
''//Cour//.'' Of //Laertes//.
''//Hora//.'' His purse is empty already, all's golden words are spent.
''//Ham//.'' Of him sir.
''//Cour//.'' I know you are not ignorant.
''//Ham//.'' I would you did sir, yet in faith if you did, it would not
much approoue me, well sir.
''//Cour//.'' You are not ignorant of what excellence //Laertes //is.
''//Ham//.'' I dare not confesse that, least I should compare with
him in excellence, but to know a man wel, were to knowe himselfe.
''//Cour//.'' I meane sir for this weapon, but in the imputation laide on
him, by them in his meed, hee's vnfellowed.
''//Ham//.'' What's his weapon?
''//Cour//.'' Rapier and Dagger.
''//Ham//.'' That's two of his weapons, but well.
''//Cour//.'' The King sir hath wagerd with him six Barbary horses,
againgst the which hee has impaund as I take it six French Rapiers
and Poynards, with their assignes, as girdle, hanger and so. Three
of the carriages in faith, are very deare to fancy, very reponsiue to
the hilts, most delicate carriages, and of very liberall conceit.
''//Ham//.'' What call you the carriages?
''//Hora//.'' I knew you must be edified by the margent ere you had
done.
''//Cour//.'' The carriage sir are the hangers.
''//Ham//.'' The phrase would bee more Ierman to the matter if wee
could carry a cannon by our sides, I would it be might hangers till
then, but on, six Barbry horses against six French swords their as-
signes, and three liberall conceited carriages, that's the French
bet against the Danish, why is this all you call it?
''//Cour//.'' The King sir, hath layd sir, that in a dozen passes betweene
your selfe and him, hee shall not exceede you three hits, hee hath
layd on twelue for nine, and it would come to immediate triall, if
your Lordshippe would vouchsafe the answere.
''//Ham//.'' How if I answere no?
''//Cour//.'' I meane my Lord the opposition of your person in triall.
''//Ham//.'' Sir I will walke heere in the hall, if it please his Maiestie, it
is the breathing time of day with me, let the foiles be brought, the
Gentleman willing, and the King hold his purpose; I will winne
for him and I can, if not, I will gaine nothing but my shame, and
the odde hits.
''//Cour//.'' Shall I deliuer you so?
''//Ham//.'' To this effect sir, after what florish your nature will.
''//Cour//.'' I commend my duty to your Lordshippe.
''//Ham//.'' Yours doo's well to commend it himselfe, there are no
tongues els for's turne.
''//Hora//.'' This Lapwing runnes away with the shell on his head.
''//Ham//.'' A did so sir with his dugge before a suckt it, thus has he and
many more of the same breede that I know the drossy age dotes on,
only got the tune of the time, and out of an habit of incounter, a
kind of histy colection, which carries them through and through
the most prophane and trennowed opinions, and doe but blowe
them to their triall, the bubbles are out.
@@.stageDirectionFisco
//Enter a Lord//.
@@
''//Lord//.'' My Lord, his Maiestie commended him to you by young
//Ostricke//, who brings backe to him that you attend him in the hall,
he sends to know if your pleasure hold to play with //Laertes//, or that
you will take longer time?
''//Ham//.'' I am constant to my purposes, they followe the Kings plea-
sure, if his fitnes speakes, mine is ready: now or whensoeuer, pro-
uided I be so able as now.
''//Lord//.'' The King, and Queene, and all are comming downe.
''//Ham//.'' In happy time.
''//Lord//.'' The Queene desires you to vse some gentle entertainment
to //Laertes//, before you fall to play.
''//Ham//.'' Shee well instructs me.
''//Hora//.'' You will loose my Lord.
''//Ham//.'' I doe not thinke so, since he went into France, I haue bene
in continuall practise, I shall winne at the ods; thou would'st not
thinke how ill all's heere about my hart, but it is no matter.
''//Hora//.'' Nay good my Lord.
''//Ham//.'' It is but foolery, but it is such a kinde of gamgiuing, as
would perhapes trouble a woman.
''//Hora//.'' If your minde dislike any thing, obay it. I will forstal their
repaire hether, and say you are not fit.
''//Ham//.'' Not a whit, we defie augury, there is speciall prouidence,in
the fall of a Sparrowe, if it be, tis not to come, if it be not to come,
it will be now, if it be not now, yet it well come, the readines is all,
since no man of ought he leaues, knowes what ist to leaue betimes,
let be.
@@.stageDirectionFisco
//A table prepard, Trumpets, Drums and officers with Cushions//,
@@
@@.stageDirectionFisco
//King, Queene, and all the state, Foiles, daggers//,
@@
@@.stageDirectionFisco
//and Laertes//.
@@
''//King//.'' Come //Hamlet//, come and take this hand from me.
''//Ham//.'' Giue me your pardon sir, I haue done you wrong,
But pardon't as you are a gentleman, this presence knowes,
And you must needs haue heard, how I am punnisht
With a sore distraction, what I haue done
That might your nature, honor, and exception
Roughly awake, I heare proclame was madnesse,
Wast //Hamlet// wronged //Laertes//? neuer //Hamlet//.
If //Hamlet// from himselfe be tane away,
And when hee's not himselfe, dooes wrong //Laertes//,
Then //Hamlet// dooes it not, //Hamlet// denies it,
Who dooes it then? his madnesse. Ift be so,
//Hamlet //is of the faction that is wronged,
His madnesse is poore //Hamlets //enimie,
Let my disclaiming from a purpos'd euill,
Free me so farre in your most generous thoughts
That I haue shot my arrowe ore the house
And hurt my brother.
''//Laer//.'' I am satisfied in nature,
Whose motiue in this case should stirre me most
To my reuendge, but in my tearmes of honor
I stand a loofe, and will no reconcilement,
Till by some elder Maisters of knowne honor
I haue a voyce and president of peace
To my name vngord: but all that time
I doe receaue your offerd loue, like loue,
And will not wrong it.
''//Ham//.'' I embrace it freely, and will this brothers wager
franckly play.
Giue vs the foiles.
''//Laer//.'' Come, one for me.
''//Ham//.'' Ile be your foile //Laertes//, in mine ignorance
Your skill shall like a starre i'th darkest night
Stick fiery of indeed.
''//Laer//.'' You mocke me sir.
''//Ham//.'' No by this hand.
''//King//.'' Giue them the foiles young //Ostricke//, cosin //Hamlet//,
You knowe the wager.
''//Ham//.'' Very well my Lord.
Your grace has layed the ods a'th weeker side.
''//King//.'' I doe not feare it, I haue seene you both,
But since he is better, we haue therefore ods.
''//Laer//.'' This is to heauy: let me see another.
''//Ham//.'' This likes me well, these foiles haue all a length.
''//Ostr//.'' I my good Lord.
''//King//.'' Set me the stoopes of wine vpon that table,
If //Hamlet// giue the first or second hit,
Or quit in answere of the third exchange,
Let all the battlements their ordnance fire.
The King shall drinke to //Hamlets// better breath,
And in the cup an Onixe shall he throwe,
Richer then that which foure successiue Kings
In Denmarkes Crowne haue worne: giue me the cups,
And let the kettle to the trumpet speake,
The trumpet to the Cannoneere without,
The Cannons to the heauens, the heauen to earth,
Now the King drinkes to //Hamlet, //come beginne.
@@.stageDirectionFisco
//Trumpets the while//.
@@
And you the Iudges beare a wary eye.
''//Ham//.'' Come on sir.
''//Laer//.'' Come my Lord.
''//Ham//.'' One.
''//Laer//.'' No.
''//Ham//.'' Iudgement.
|dialogWithStageDirectionFisco|k
|''//Ostrick//.'' A hit, a very palpable hit.|//Drum, trumpets and shot//.|
|dialogWithStageDirectionFisco|k
| ||
|dialogWithStageDirectionFisco|k
|''//Laer//.'' Well, againe.|//Florish, a peece goes off//.|
''//King//.'' Stay, giue me drinke, //Hamlet// this pearle is thine.
Heeres to thy health: giue him the cup.
''//Ham//.'' Ile play this bout first, set it by a while
Come, another hit. What say you?
''//Laer//.'' I doe confest.
''//King//.'' Our sonne shall winne.
''//Quee//.'' Hee's fat and scant of breath.
Heere //Hamlet //take my napkin rub thy browes,
The Queene carowses to thy fortune //Hamlet//.
''//Ham//.'' Good Madam.
''//King//.'' //Gertrard //doe not drinke.
''//Quee//.'' I will my Lord, I pray you pardon me.
''//King//.'' It is the poysned cup, it is too late.
''//Ham//.'' I dare not drinke yet Madam, by and by.
''//Quee//.'' Come, let me wipe thy face.
''//Laer//.'' My Lord, Ile hit him now.
''//King//.'' I doe not think't.
''//Laer//.'' And yet it is almost against my conscience.
''//Ham//.'' Come for the third //Laertes//, you doe but dally.
I pray you passe with your best violence
I am sure you make a wanton of me.
''//Laer//.'' Say you so, come on.
''//Ostr//.'' Nothing neither way.
''//Laer//.'' Haue at you now.
''//King//.'' Part them, they are incenst.
''//Ham//.'' Nay come againe.
''//Ostr//.'' Looke to the Queene there howe.
''//Hora//.'' They bleed on both sides, how is it my Lord?
''//Ostr//.'' How ist //Laertes//?
''//Laer//.'' Why as a woodcock to mine owne sprindge //Ostrick//,
I am iustly kild with mine owne treachery.
''//Ham//.'' How dooes the Queene?
''//King//.'' Shee sounds to see them bleed.
''//Quee//.'' No, no, the drinke, the drinke, ô my deare //Hamlet//,
The drinke the drinke, I am poysned.
''//Ham//.'' O villanie, how let the doore be lock't,
Treachery, seeke it out.
''//Laer//.'' It is heere //Hamlet//, thou art slaine,
No medcin in the world can doe thee good,
In thee there is not halfe an houres life,
The treacherous instrument is in my hand
Vnbated and enuenom'd, the foule practise
Hath turn'd it selfe on me, loe heere I lie
Neuer to rise againe, thy mother's poysned,
I can no more, the King, the Kings too blame.
''//Ham//.'' The point inuenom'd to, then venome to thy worke.
''//All//.'' Treason, treason.
''//King//.'' O yet defend me friends, I am but hurt.
''//Ham//.'' Heare thou incestious damned Dane,
Drinke of this potion, is the Onixe heere?
Follow my mother.
''//Laer//.'' He is iustly serued, it is a poyson temperd by himselfe,
Exchange forgiuenesse with me noble //Hamlet//,
Mine and my fathers death come not vppon thee,
Nor thine on me.
''//Ham//.'' Heauen make thee free of it, I follow thee;
I am dead //Horatio//, wretched Queene adiew.
You that looke pale, and tremble at this chance,
That are but mutes, or audience to this act,
Had I but time, as this fell sergeant Death
Is strict in his arrest, ô I could tell you,
But let it be; //Horatio// I am dead,
Thou liuest, report me and my cause a right
To the vnsatisfied.
''//Hora//.'' Neuer belieue it;
I am more an anticke Romaine then a Dane,
Heere's yet some liquer left.
''//Ham//.'' As th'art a man
Giue me the cup, let goe, by heauen Ile hate,
O god //Horatio//, what a wounded name
Things standing thus vnknowne, shall I leaue behind me?
If thou did'st euer hold me in thy hart,
Absent thee from felicity a while,
And in this harsh world drawe thy breath in paine
@@.stageDirectionFisco
//A march a farre off//.
@@
To tell my story: what warlike noise is this?
@@.stageDirectionFisco
//Enter Osrick//.
@@
''//Osr//.'' Young //Fortenbrasse// with conquest come from Poland,
To th'embassadors of //England// giues this warlike volly.
''//Ham//.'' O I die //Horatio//,
The potent poyson quite ore-crowes my spirit,
I cannot liue to heare the newes from //England//,
But I doe prophecie th'ellection lights
On //Fortinbrasse//, he has my dying voyce,
So tell him, with th'occurrants more and lesse
Which haue solicited, the rest is silence.
''//Hora//.'' Now cracks a noble hart, good night sweete Prince,
And flights of Angels sing thee to thy rest.
Why dooes the drum come hether?
@@.stageDirectionFisco
//Enter Fortenbrasse, with the Embassadors//.
@@
''//For//.'' Where is this sight?
''//Hora//.'' What is it you would see?
If ought of woe, or wonder, cease your search.
''//For//.'' This quarry cries on hauock, ô prou'd death
What feast is toward in thine eternall cell,
That thou so many Princes at a shot
So bloudily hast strook?
''//Embas//.'' The sight is dismall
And our affaires from //England// come too late,
The eares are sencelesse that should giue vs hearing,
To tell him his commandment is fulfild,
That //Rosencraus //and //Guyldensterne// are dead,
Where should we haue our thankes?
''//Hora//.'' Not from his mouth
Had it th'ability of life to thanke you;
He neuer gaue commandement for their death;
But since so iump vpon this bloody question
You from the //Pollack //warres, and you from //England//
Are heere arriued, giue order that these bodies
High on a stage be placed to the view,
And let me speake, to yet vnknowing world
How these things came about; so shall you heare
Of carnall, bloody and vnnaturall acts,
Of accidentall iudgements, casuall slaughters,
Of deaths put on by cunning, and for no cause
And in this vpshot, purposes mistooke,
Falne on th'inuenters heads//:// all this can I
Truly deliuer.
''//For//.'' Let vs hast to heare it,
And call the noblest to the audience,
For me, with sorrowe I embrace my fortune,
I haue some rights, of memory in this kingdome,
Which now to clame my vantage doth inuite me.
''//Hora//.'' Of that I shall haue also cause to speake,
And from his mouth, whose voyce will drawe no more,
But let this same be presently perform'd
Euen while mens mindes are wilde, least more mischance
On plots and errores happen.
''//For//.'' Let foure Captaines
Beare //Hamlet //like a souldier to the stage,
For he was likely, had he beene put on,
To haue prooued most royall; and for his passage,
The souldiers musicke and the right of warre
Speake loudly for him:
Take vp the bodies, such a sight as this,
Becomes the field, but heere showes much amisse.
|dialogWithStageDirectionFisco|k
|Goe bid the souldiers shoote.|//Exeunt//.|
*[[Wikipedia|https://en.wikipedia.org/wiki/Kronborg]]
*[[Google Maps|https://www.google.co.uk/maps/@56.03983,12.621766,3a,90y,187.07h,98.97t/data=!3m5!1e1!3m3!1sieY_ae2o8DgP0mDVr76Wmg!2e0!3e5]]
Hamlet: Personal Wiki by [[David Fisco|http://www.davidfisco.com]]
* [[Hamlet Personal Wiki Homepage|http://personal-wikis.davidfisco.com/hamlet]]
* Feedback: [[Email David Fisco|mailto:[email protected]?subject=Hamlet+Personal+Wiki+Feedback]]
* [[TiddlyWiki Homepage|http://tiddlywiki.com/]]
* [[TiddlyWiki Markdown|http://tiddlywiki.com/#WikiText]]
@@.stageDirectionFisco
// Enter Two Centinels.//
@@
''1.'' STand: who is that?
''2.'' Tis I.
''1.'' O you come most carefully vpon your watch,
''2.'' And if you meete //Marcellus// and //Horatio,//
The partners of my watch, bid them make haste.
''1.'' I will: See who goes there.
@@.stageDirectionFisco
// Enter Horatio and Marcellus.//
@@
''//Hor.//'' Friends to this ground.
''//Mar.//'' And leegemen to the Dane,
O farewell honest souldier, who hath releeued you?
''1.'' //Barnardo// hath my place, giue you good night.
''//Mar.//'' Holla, //Barnardo.//
''2.'' Say, is //Horatio// there?
''//Hor.//'' A peece of him.
''2.'' Welcome //Horatio,// welcome good //Marcellus.//
''//Mar.//'' What hath this thing appear'd againe to night.
''2.'' I haue seene nothing.
''//Mar.//'' //Horatio// sayes tis but our fantasie,
And wil not let beliefe take hold of him,
Touching this dreaded sight twice seene by vs,
Therefore I haue intreated him a long with vs
To watch the minutes of this night,
That if againe this apparition come,
He may approoue our eyes, and speake to it.
''//Hor.//'' Tut, t'will not appeare.
''2.'' Sit downe I pray, and let vs once againe
Assaile your eares that are so fortified,
What we haue two nights seene.
''//Hor.//'' Wel, sit we downe, and let vs heare //Bernardo// speake
of this.
''2.'' Last night of al, when yonder starre that's west-
ward from the pole, had made his course to
Illumine that part of heauen. Where now it burnes,
The bell then towling one.
@@.stageDirectionFisco
// Enter Ghost.//
@@
''//Mar.//'' Breake off your talke, see where it comes againe.
''2.'' In the same figure like the King that's dead,
''//Mar.//'' Thou art a scholler, speake to it //Horatio.//
''2.'' Lookes it not like the king?
''//Hor.//'' Most like, it horrors mee with feare and wonder.
''2.'' It would be spoke to.
''//Mar.//'' Question it //Horatio.//
''//Hor.//'' What art thou that thus vsurps the state, in
Which the Maiestie of buried //Denmarke// did sometimes
Walke? By heauen I charge thee speake.
|dialogWithStageDirectionFisco|k
|''//Mar.//'' It is offended.|//exit Ghost.//|
''2.'' See, it stalkes away.
''//Hor.//'' Stay, speake, speake, by heauen I charge thee
speake.
''//Mar.//'' Tis gone and makes no answer.
''2.'' How now //Horatio,// you tremble and looke pale,
Is not this something more than fantasie?
What thinke you on't?
''//Hor.//'' Afore my God, I might not this beleeue, without
the sensible and true auouch of my owne eyes.
''//Mar.//'' Is it not like the King?
''//Hor.//'' As thou art to thy selfe,
Such was the very armor he had on,
When he the ambitious //Norway// combated.
So frownd he once, when in an angry parle
He smot the sleaded pollax on the yce,
Tis strange.
''//Mar.//'' Thus twice before, and iump at this dead hower,
With Marshall stalke he passed through our watch.
''//Hor.//'' In what particular to worke, I know not,
But in the thought and scope of my opinion,
This bodes some strange eruption to the state.
''//Mar.//'' Good, now sit downe, and tell me he that knowes
Why this same strikt and most obseruant watch,
So nightly toyles the subiect of the land,
And why such dayly cost of brazen Cannon
And forraine marte, for implements of warre,
Why such impresse of ship-writes, whose sore taske
Does not diuide the sunday from the weeke:
What might be toward that this sweaty march
Doth make the night ioynt labourer with the day,
Who is't that can informe me?
''//Hor.//'' Mary that can I, at least the whisper goes so,
Our late King, who as you know was by Forten-
Brasse of //Norway,//
Thereto prickt on by a most emulous cause, dared to
The combate, in which our valiant //Hamlet,//
For so this side of our knowne world esteemed him,
Did slay this Fortenbrasse,
Who by a seale compact well ratified, by law
And heraldrie, did forfeit with his life all those
His lands which he stoode seazed of by the conqueror,
Against the which a moity competent,
Was gaged by our King:
Now sir, yong Fortenbrasse,
Of inapproued mettle hot and full,
Hath in the skirts of //Norway// here and there,
Sharkt vp a sight of lawlesse Resolutes
For food and diet to some enterprise,
That hath a stomacke in't: and this (I take it) is the
Chiefe head and ground of this our watch.
@@.stageDirectionFisco
// Enter the Ghost.//
@@
But loe, behold, see where it comes againe,
Ile crosse it, though it blast me: stay illusion,
If there be any good thing to be done,
That may doe ease to thee, and grace to mee,
Speake to mee.
If thou art priuy to thy countries fate,
Which happly foreknowing may preuent, O speake to me,
Or if thou hast extorted in thy life,
Or hoorded treasure in the wombe of earth,
For which they say you Spirites oft walke in death, speake
to me, stay and speake, speake, stoppe it //Marcellus.//
|dialogWithStageDirectionFisco|k
|''2.'' Tis heere.|//exit Ghost.// |
''//Hor.//'' Tis heere.
''//Marc.//'' Tis gone, O we doe it wrong, being so maiesti-
call, to offer it the shew of violence,
For it is as the ayre invelmorable,
And our vaine blowes malitious mockery.
''2.'' It was about to speake when the Cocke crew.
''//Hor.//'' And then it faded like a guilty thing,
Vpon a fearefull summons: I haue heard
The Cocke, that is the trumpet to the morning,
Doth with his earely and shrill crowing throate,
Awake the god of day, and at his sound,
Whether in earth or ayre, in sea or fire,
The strauagant and erring spirite hies
To his confines, and of the trueth heereof
This present obiect made probation.
''//Marc.//'' It faded on the crowing of the Cocke,
Some say, that euer gainst that season comes,
Wherein our Sauiours birth is celebrated,
The bird of dawning singeth all night long,
And then they say, no spirite dare walke abroade,
The nights are wholesome, then no planet frikes,
No Fairie takes, nor Witch hath powre to charme,
So gratious, and so hallowed is that time.
''//Hor.//'' So haue I heard, and doe in parte beleeue it:
But see the Sunne in russet mantle clad,
Walkes ore the deaw of yon hie mountaine top,
Breake we our watch vp, and by my aduise,
Let vs impart what wee haue seene to night
Vnto yong H//amlet:// for vpon my life
This Spirite dumbe to vs will speake to him:
Do you consent, wee shall acquaint him with it,
As needefull in our loue, fitting our duetie?
''//Marc.//'' Lets doo't I pray, and I this morning know,
Where we shall finde him most conueniently.
@@.stageDirectionFisco
// Enter the King.//
@@
''//King//'' O that this wet that falles vpon my face
Would wash the crime cleere from my conscience!
When I looke vp to heauen, I see my trespasse,
The earth doth still crie out vpon my fact,
Pay me the murder of a brother and a king,
And the adulterous fault I haue committed:
O these are sinnes that are vnpardonable:
Why say thy sinnes were blacker then is ieat,
Yet may contrition make them as white as snowe:
I but still to perseuer in a sinne,
It is an act gainst the vniuersall power,
Most wretched man, stoope, bend thee to thy prayer,
Aske grace of heauen to keepe thee from despaire.
@@.stageDirectionFisco
// hee kneeles. enters Hamlet//
@@
''//Ham.//'' I so, come forth and worke thy last,
And thus hee dies: and so am I reuenged:
No, not so: he tooke my father sleeping, his sins brim full,
And how his soule stoode to the state of heauen
Who knowes, saue the immortall powres,
And shall I kill him now,
When he is purging of his soule?
Making his way for heauen, this is a benefit,
And not reuenge: no, get thee vp agen,
When hee's at game swaring, taking his carowse, drinking (drunke,
Or in the incestuous pleasure of his bed,
Or at some act that hath no relish
Of saluation in't, then trip him
That his heeles may kicke at heauen,
And fall as lowe as hel: my mother stayes,
|dialogWithStageDirectionFisco|k
|This phisicke but prolongs thy weary dayes.|//exit Ham.//|
''//King//'' My wordes fly vp, my sinnes remaine below.
|dialogWithStageDirectionFisco|k
|No King on earth is safe, if Gods his foe.|//exit King.// |
@@.stageDirectionFisco
// Enter Queene and Corambis.//
@@
''//Cor.//'' Madame, I heare yong Hamlet comming,
|dialogWithStageDirectionFisco|k
|I'le shrowde my selfe behinde the Arras.|//exit Cor.//|
''//Queene//'' Do so my Lord.
''//Ham.//'' Mother, mother, O are you here?
How i'st with you mother?
''//Queene//'' How i'st with you?
''//Ham,//'' I'le tell you, but first weele make all safe.
''//Queene//'' Hamlet, thou hast thy father much offended.
''//Ham.//'' Mother, you haue my father much offended.
''//Queene//'' How now boy?
''//Ham.//'' How now mother! come here, sit downe, for you
shall heare me speake.
''//Queene//'' What wilt thou doe? thou wilt not murder me:
Helpe hoe.
''//Cor.//'' Helpe for the Queene.
''//Ham.//'' I a Rat, dead for a Duckat.
Rash intruding foole, farewell,
I tooke thee for thy better.
''//Queene//'' Hamlet, what hast thou done?
''//Ham.//'' Not so much harme, good mother,
As to kill a king, and marry with his brother.
''//Queene//'' How! kill a king!
''//Ham.//'' I a King: nay sit you downe, and ere you part,
If you be made of penitrable stuffe,
I'le make your eyes looke downe into your heart,
And see how horride there and blacke it shews.
''//Queene//'' Hamlet, what mean'st thou by these killing (words?
''//Ham.//'' Why this I meane, see here, behold this picture,
It is the portraiture, of your deceased husband,
See here a face, to outface //Mars// himselfe,
An eye, at which his foes did tremble at,
A front wherin all vertues are set downe
For to adorne a king, and guild his crowne,
Whose heart went hand in hand euen with that vow,
He made to you in marriage, and he is dead.
Murdred, damnably murdred, this was your husband,
Looke you now, here is your husband,
With a face like //Vulcan.//
A looke fit for a murder and a rape,
A dull dead hanging looke, and a hell-bred eie,
To affright children and amaze the world:
And this same haue you left to change with this.
What Diuell thus hath cosoned you at hob-man blinde?
A! haue you eyes and can you looke on him
That slew my father, and your deere husband,
To liue in the incestuous pleasure of his bed?
''//Queene//'' O Hamlet, speake no more.
''//Ham.//'' To leaue him that bare a Monarkes minde,
For a king of clowts, of very shreads.
''//Queene//'' Sweete Hamlet cease.
''//Ham.//'' Nay but still to persist and dwell in sinne,
To sweate vnder the yoke of infamie,
To make increase of shame, to seale damnation.
''//Queene//'' Hamlet, no more.
''//Ham.//'' Why appetite with you is in the waine,
Your blood runnes backeward now from whence it came,
Who'le chide hote blood within a Virgins heart,
When lust shall dwell within a matrons breast?
''//Queene//'' Hamlet, thou cleaues my heart in twaine.
''//Ham.//'' O throw away the worser part of it, and keepe the
better.
@@.stageDirectionFisco
// Enter the ghost in his night gowne.//
@@
Saue me, saue me, you gratious
Powers aboue, and houer ouer mee,
With your celestiall wings.
Doe you not come your tardy sonne to chide,
That I thus long haue let reuenge slippe by?
O do not glare with lookes so pittifull!
Lest that my heart of stone yeelde to compassion,
And euery part that should assist reuenge,
Forgoe their proper powers, and fall to pitty.
''//Ghost//'' Hamlet, I once againe appeare to thee,
To put thee in remembrance of my death:
Doe not neglect, nor long time put it off.
But I perceiue by thy distracted lookes,
Thy mother's fearefull, and she stands amazde:
Speake to her Hamlet, for her sex is weake,
Comfort thy mother, Hamlet, thinke on me.
''//Ham.//'' How i'st with you Lady?
''//Queene//'' Nay, how i'st with you
That thus you bend your eyes on vacancie,
And holde discourse with nothing but with ayre?
''//Ham.//'' Why doe you nothing heare?
''//Queene//'' Not I.
''//Ham.//'' Nor doe you nothing see?
''//Queene//'' No neither.
''//Ham.//'' No, why see the king my father, my father, in the (habite
As he liued, looke you how pale he lookes,
See how he steales away out of the Portall,
|dialogWithStageDirectionFisco|k
|Looke, there he goes.|//exit ghost.// |
''//Queene//'' Alas, it is the weakenesse of thy braine,
Which makes thy tongue to blazon thy hearts griefe:
But as I haue a soule, I sweare by heauen,
I neuer knew of this most horride murder:
But Hamlet, this is onely fantasie,
And for my loue forget these idle fits.
''//Ham.//'' Idle, no mother, my pulse doth beate like yours,
It is not madnesse that possesseth Hamlet.
O mother, if euer you did my deare father loue,
Forbeare the adulterous bed to night,
And win your selfe by little as you may,
In time it may be you wil lothe him quite:
And mother, but assist mee in reuenge,
And in his death your infamy shall die.
''//Queene//'' //Hamlet,// I vow by that maiesty,
That knowes our thoughts, and lookes into our hearts,
I will conceale, consent, and doe my best,
What stratagem soe're thou shalt deuise.
''//Ham.//'' It is enough, mother good night:
Come sir, I'le prouide for you a graue,
Who was in life a foolish prating knaue.
@@.stageDirectionFisco
// Exit Hamlet with the dead body.//
@@
@@.stageDirectionFisco
// Enter the King and Lordes.//
@@
''//King//'' Now Gertred, what sayes our sonne, how doe you
finde him?
''//Queene//'' Alas my lord, as raging as the sea:
Whenas he came, I first bespake him faire,
But then he throwes and tosses me about,
As one forgetting that I was his mother:
At last I call'd for help: and as I cried, //Corambis//
Call'd, which Hamlet no sooner heard, but whips me
Out his rapier, and cries, a Rat, a Rat, and in his rage
The good olde man he killes.
''//King//'' Why this his madnesse will vndoe our state.
Lordes goe to him, inquire the body out.
|dialogWithStageDirectionFisco|k
|''//Gil//.'' We will my Lord.|// Exeunt Lordes.//|
''//King//'' Gertred, your sonne shall presently to England,
His shipping is already furnished,
And we haue sent by //Rossencraft// and //Gilderstone,//
Our letters to our deare brother of England,
For Hamlets welfare and his happinesse:
Happly the aire and climate of the Country
May please him better than his natiue home:
See where he comes.
@@.stageDirectionFisco
// Enter Hamlet and the Lordes.//
@@
''//Gil.//'' My lord, we can by no meanes
Know of him where the body is.
''//King//'' Now sonne Hamlet, where is this dead body?
''//Ham.//'' At supper, not where he is eating, but
Where he is eaten, a certaine company of politicke wormes
are euen now at him.
Father, your fatte King, and your leane Beggar
Are but variable seruices, two dishes to one messe:
Looke you, a man may fish with that worme
That hath eaten of a King,
And a Beggar eate that fish,
Which that worme hath caught.
''//King//'' What of this?
''//Ham.//'' Nothing father, but to tell you, how a King
May go a progresse through the guttes of a Beggar.
''//King//'' But sonne //Hamlet,// where is this body?
''//Ham.//'' In heau'n, if you chance to misse him there,
Father, you had best looke in the other partes below
For him, aud if you cannot finde him there,
You may chance to nose him as you go vp the lobby.
''//King//'' Make haste and finde him out.
''//Ham.//'' Nay doe you heare? do not make too much haste,
I'le warrant you hee'le stay till you come.
''//King//'' Well sonne //Hamlet,// we in care of you: but specially
in tender preseruation of your health,
The which we price euen as our proper selfe,
It is our minde you forthwith goe for //England,//
The winde sits faire, you shall aboorde to night,
Lord //Rossencraft// and //Gilderstone// shall goe along with you.
''//Ham.//'' O with all my heart: farewel mother.
''//King//'' Your louing father, //Hamlet.//
''//Ham.//'' My mother I say: you married my mother,
My mother is your wife, man and wife is one flesh,
And so (my mother) farewel: for England hoe.
@@.stageDirectionFisco
// exeunt all but the king.//
@@
''//king//'' Gertred, leaue me,
And take your leaue of //Hamlet,//
To England is he gone, ne're to returne:
Our Letters are vnto the King of England,
That on the sight of them, on his allegeance,
He presently without demaunding why,
That //Hamlet// loose his head, for he must die,
There's more in him than shallow eyes can see:
|dialogWithStageDirectionFisco|k
|He once being dead, why then our state is free.|//exit.// |
@@.stageDirectionFisco
// Enter Fortenbrasse, Drumme and Souldiers.//
@@
''//Fort.//'' Captaine, from vs goe greete
The king of Denmarke:
Tell him that //Fortenbrasse// nephew to old //Norway,//
Craues a free passe and conduct ouer his land,
According to the Articles agreed on:
You know our Randevous, goe march away.
@@.stageDirectionFisco
//exeunt all.//
@@
@@.stageDirectionFisco
//enter King and Queene.//
@@
''//King//'' //Hamlet// is ship't for England, fare him well,
I hope to heare good newes from thence ere long,
If euery thing fall out to our content,
As I doe make no doubt but so it shall.
''//Queene//'' God grant it may, heau'ns keep my //Hamlet// safe:
But this mischance of olde //Corambis// death,
Hath piersed so the yong //Ofeliaes// heart,
That she, poore maide, is quite bereft her wittes.
''//King//'' Alas deere heart! And on the other side,
We vnderstand her brother's come from //France,//
And he hath halfe the heart of all our Land,
And hardly hee'le forget his fathers death,
Vnlesse by some meanes he be pacified.
''//Qu.//'' O see where the yong //Ofelia// is!
@@.stageDirectionFisco
// Enter Ofelia playing on a Lute, and her haire//
@@
@@.stageDirectionFisco
//downe singing.//
@@
''//Ofelia//'' How should I your true loue know
From another man?
By his cockle hatte, and his staffe,
And his sandall shoone.
White his shrowde as mountaine snowe,
Larded with sweete flowers,
That bewept to the graue did not goe
With true louers showers:
He is dead and gone Lady, he is dead and gone,
At his head a grasse greene turffe,
At his heeles a stone.
''//king//'' How i'st with you sweete //Ofelia//?
''//Ofelia//'' Well God yeeld you,
It grieues me to see how they laid him in the cold ground,
I could not chuse but weepe:
And will he not come againe?
And will he not come againe?
No, no, hee's gone, and we cast away mone,
And he neuer will come againe.
His beard as white as snowe:
All flaxen was his pole,
He is dead, he is gone,
And we cast away moane:
God a mercy on his soule.
And of all christen soules I pray God.
God be with you Ladies, God be with you. //exit Ofelia.//
''//king//'' A pretty wretch! this is a change indeede:
O Time, how swiftly runnes our ioyes away?
Content on earth was neuer certaine bred,
To day we laugh and liue, to morrow dead.
How now, what noyse is that?
@@.stageDirectionFisco
// A noyse within. enter Leartes.//
@@
''//Lear.//'' Stay there vntill I come,
O thou vilde king, giue me my father:
Speake, say, where's my father?
''//king//'' Dead.
''//Lear.//'' Who hath murdred him? speake, i'le not
Be juggled with, for he is murdred.
''//Queene//'' True, but not by him.
''//Lear.//'' By whome, by heau'n I'le be resolued.
''//king//'' Let him goe //Gertred,// away, I feare him not,
There's such diuinitie doth wall a king,
That treason dares not looke on.
Let him goe //Gertred,// that your father is murdred,
T'is true, and we most sory for it,
Being the chiefest piller of our state:
Therefore will you like a most desperate gamster,
Swoop-stake-like, draw at friend, and foe, and all?
''//Lear.//'' To his good friends thus wide I'le ope mine arms,
And locke them in my hart, but to his foes,
I will no reconcilement but by bloud.
''//king//'' Why now you speake like a most louing sonne:
And that in soule we sorrow for for his death,
Your selfe ere long shall be a witnesse,
Meane while be patient, and content your selfe.
@@.stageDirectionFisco
// Enter Ofelia as before.//
@@
''//Lear.//'' Who's this, //Ofelia//? O my deere sister!
I'st possible a yong maides life,
Should be as mortall as an olde mans sawe?
O heau'ns themselues! how now //Ofelia//?
''//Ofel.//'' Wel God a mercy, I a bin gathering of floures:
Here, here is rew for you,
You may call it hearb a grace a Sundayes,
Heere's some for me too: you must weare your rew
With a difference, there's a dazie.
Here Loue, there's rosemary for you
For remembrance: I pray Loue remember,
And there's pansey for thoughts.
''//Lear.//'' A document in madnes, thoughts, remembrance:
O God, O God!
''//Ofelia//'' There is fennell for you, I would a giu'n you
Some violets, but they all withered, when
My father died: alas, they say the owle was
A Bakers daughter, we see what we are,
But can not tell what we shall be.
For bonny sweete Robin is all my ioy.
''//Lear.//'' Thoughts & afflictions, torments worse than hell.
''//Ofel.//'' Nay Loue, I pray you make no words of this now:
I pray now, you shall sing a downe,
And you a downe a, t'is a the Kings daughter
And the false steward, and if any body
Aske you of any thing, say you this.
To morrow is saint Valentines day,
All in the morning betime,
And a maide at your window,
To be your Valentine:
The yong man rose, and dan'd his clothes,
And dupt the chamber doore,
Let in the maide, that out a maide
Neuer departed more.
Nay I pray marke now,
By gisse, and by saint Charitie,
Away, and fie for shame:
Yong men will doo't when they come too't
By cocke they are too blame.
Quoth she, before you tumbled me,
You promised me to wed.
So would I a done, by yonder Sunne,
If thou hadst not come to my bed.
So God be with you all, God bwy Ladies.
|dialogWithStageDirectionFisco|k
|God bwy you Loue.|//exit Ofelia.//|
''//Lear.//'' Griefe vpon griefe, my father murdered,
My sister thus distracted:
Cursed be his soule that wrought this wicked act.
''//king//'' Content you good Leartes for a time,
Although I know your griefe is as a floud,
Brimme full of sorrow, but forbeare a while,
And thinke already the reuenge is done
On him that makes you such a haplesse sonne.
''//Lear.//'' You haue preuail'd my Lord, a while I'le striue,
To bury griefe within a tombe of wrath,
Which once vnhearsed, then the world shall heare
Leartes had a father he held deere.
''//king//'' No more of that, ere many dayes be done,
|dialogWithStageDirectionFisco|k
|You shall heare that you do not dreame vpon.|// exeunt om.//|
@@.stageDirectionFisco
// Enter Horatio and the Queene.//
@@
''//Hor.//'' Madame, your sonne is safe arriv'de in //Denmarke,//
This letter I euen now receiv'd of him,
Whereas he writes how he escap't the danger,
And subtle treason that the king had plotted,
Being crossed by the contention of the windes,
He found the Packet sent to the king of //England,//
Wherein he saw himselfe betray'd to death,
As at his next conuersion with your grace,
He will relate the circumstance at full.
''//Queene//'' Then I perceiue there's treason in his lookes
That seem'd to sugar o're his villanie:
But I will soothe and please him for a time,
For murderous mindes are alwayes jealous,
But know not you //Horatio// where he is?
''//Hor.//'' Yes Madame, and he hath appoynted me
To meete him on the east side of the Cittie
To morrow morning.
''//Queene//'' O faile not, good //Horatio,// and withall, commend me
A mothers care to him, bid him a while
Be wary of his presence, lest that he
Faile in that he goes about.
''//Hor.//'' Madam, neuer make doubt of that:
I thinke by this the news be come to court:
He is arriv'de, obserue the king, and you shall
Quickely finde, //Hamlet// being here,
Things fell not to his minde.
''//Queene//'' But what became of //Gilderstone// and //Rossencraft//?
''//Hor.//'' He being set ashore, they went for //England,//
And in the Packet there writ down that doome
To be perform'd on them poynted for him:
And by great chance he had his fathers Seale,
So all was done without discouerie.
''//Queene//'' Thankes be to heauen for blessing of the prince,
//Horatio// once againe I take my leaue,
With thowsand mothers blessings to my sonne.
''//Horat.//'' Madam adue.
// Enter King and Leartes.//
''//King.//'' Hamlet from //England//! is it possible?
What chance is this? they are gone, and he come home.
''//Lear.//'' O he is welcome, by my soule he is:
At it my iocund heart doth leape for ioy,
That I shall liue to tell him, thus he dies.
''//king//'' Leartes, content your selfe, be rulde by me,
And you shall haue no let for your reuenge.
''//Lear.//'' My will, not all the world.
''//King//'' Nay but Leartes, marke the plot I haue layde,
I haue heard him often with a greedy wish,
Vpon some praise that he hath heard of you
Touching your weapon, which with all his heart,
He might be once tasked for to try your cunning.
''//Lea.//'' And how for this?
''//King//'' Mary Leartes thus: I'le lay a wager,
Shalbe on //Hamlets// side, and you shall giue the oddes,
The which will draw him with a more desire,
To try the maistry, that in twelue venies
You gaine not three of him: now this being granted,
When you are hot in midst of all your play,
Among the foyles shall a keene rapier lie,
Steeped in a mixture of deadly poyson,
That if it drawes but the least dramme of blood,
In any part of him, he cannot liue:
This being done will free you from suspition,
And not the deerest friend that //Hamlet// lov'de
Will euer haue Leartes in suspect.
''//Lear.//'' My lord, I like it well:
But say lord //Hamlet// should refuse this match.
''//King//'' I'le warrant you, wee'le put on you
Such a report of singularitie,
Will bring him on, although against his will.
And lest that all should misse,
I'le haue a potion that shall ready stand,
In all his heate when that he calles for drinke,
Shall be his period and our happinesse.
''//Lear.//'' T'is excellent, O would the time were come!
|dialogWithStageDirectionFisco|k
|Here comes the Queene.|// enter the Queene.// |
''//king//'' How now Gertred, why looke you heauily?
''//Queene//'' O my Lord, the yong //Ofelia//
Hauing made a garland of sundry sortes of floures,
Sitting vpon a willow by a brooke,
The enuious sprig broke, into the brooke she fell,
And for a while her clothes spread wide abroade,
Bore the yong Lady vp: and there she sate smiling,
Euen Mermaide-like, twixt heauen and earth,
Chaunting olde sundry tunes vncapable
As it were of her distresse, but long it could not be,
Till that her clothes, being heauy with their drinke,
Dragg'd the sweete wretch to death.
''//Lear.//'' So, she is drownde:
Too much of water hast thou //Ofelia,//
Therefore I will not drowne thee in my teares,
Reuenge it is must yeeld this heart releefe,
|dialogWithStageDirectionFisco|k
|For woe begets woe, and griefe hangs on griefe.|// exeunt.//|
@@.stageDirectionFisco
//enter Clowne and an other.//
@@
''//Clowne//'' I say no, she ought not to be buried
In christian buriall.
''2.'' Why sir?
''//Clowne//'' Mary because shee's drownd.
''2.'' But she did not drowne her selfe.
''//Clowne//'' No, that's certaine, the water drown'd her.
''2.'' Yea but it was against her will.
''//Clowne//'' No, I deny that, for looke you sir, I stand here,
If the water come to me, I drowne not my selfe:
But if I goe to the water, and am there drown'd,
//Ergo// I am guiltie of my owne death:
Y'are gone, goe y'are gone sir.
''2.'' I but see, she hath christian buriall,
Because she is a great woman.
''//Clowne//'' Mary more's the pitty, that great folke
Should haue more authoritie to hang or drowne
Themselues, more than other people:
Goe fetch me a stope of drinke, but before thou
Goest, tell me one thing, who buildes strongest,
Of a Mason, a Shipwright, or a Carpenter?
''2.'' Why a Mason, for he buildes all of stone,
And will indure long.
''//Clowne//'' That's prety, too't agen, too't agen.
''2.'' Why then a Carpenter, for he buildes the gallowes,
And that brings many a one to his long home.
''//Clowne//'' Prety agen, the gallowes doth well, mary howe
dooes it well? the gallowes dooes well to them that doe ill,
goe get thee gone:
And if any one aske thee hereafter, say,
A Graue-maker, for the houses he buildes
Last till Doomes-day. Fetch me a stope of beere, goe.
@@.stageDirectionFisco
// Enter Hamlet and Horatio.//
@@
''//Clowne//'' A picke-axe and a spade,
A spade for and a winding sheete,
|dialogWithStageDirectionFisco|k
|Most fit it is, for t'will be made,|// he throwes vp a shouel.// |
For such a ghest most meete.
''//Ham.//'' Hath this fellow any feeling of himselfe,
That is thus merry in making of a graue?
See how the slaue joles their heads against the earth.
''//Hor.//'' My lord, Custome hath made it in him seeme nothing.
''//Clowne//'' A pick-axe and a spade, a spade,
For and a winding sheete,
Most fit it is for to be made,
For such a ghest most meet.
''//Ham.//'' Looke you, there's another //Horatio.//
Why mai't not be the scull of some Lawyer?
Me thinkes he should indite that fellow
Of an action of Batterie, for knocking
Him about the pate with's shouel: now where is your
Quirkes and quillets now, your vouchers and
Double vouchers, your leases and free-holde,
And tenements? why that same boxe there will scarse
Holde the conueiance of his land, and must
The honor lie there? O pittifull transformance!
I prethee tell me //Horatio,//
Is parchment made of sheep-skinnes?
''//Hor.//'' I my Lorde, and of calues-skinnes too.
''//Ham.//'' Ifaith they prooue themselues sheepe and calues
That deale with them, or put their trust in them.
There's another, why may not that be such a ones
Scull, that praised my Lord such a ones horse,
When he meant to beg him? //Horatio,// I prethee
Lets question yonder fellow.
Now my friend, whose graue is this?
''//Clowne//'' Mine sir.
''//Ham.//'' But who must lie in it?
''//Clowne//'' If I should say, I should, I should lie in my throat sir.
''//Ham.//'' What man must be buried here?
''//Clowne//'' No man sir.
''//Ham.//'' What woman?
''//Clowne.//'' No woman neither sir, but indeede
One that was a woman.
''//Ham.//'' An excellent fellow by the Lord //Horatio,//
This seauen yeares haue I noted it: the toe of the pesant,
Comes so neere the heele of the courtier,
That hee gawles his kibe, I prethee tell mee one thing,
How long will a man lie in the ground before hee rots?
''//Clowne//'' I faith sir, if hee be not rotten before
He be laide in, as we haue many pocky corses,
He will last you, eight yeares, a tanner
Will last you eight yeares full out, or nine.
''//Ham.//'' And why a tanner?
''//Clowne//'' Why his hide is so tanned with his trade,
That it will holde out water, that's a parlous
Deuourer of your dead body, a great soaker.
Looke you, heres
a scull hath bin here this dozen yeare,
Let me see, I euer since our last king //Hamlet//
Slew //Fortenbrasse// in combat, yong //Hamlets// father,
Hee that's mad.
''//Ham.//'' I mary, how came he madde?
''//Clowne//'' Ifaith very strangely, by loosing of his wittes.
''//Ham.//'' Vpon what ground?
''//Clowne//'' A this ground, in //Denmarke.//
''//Ham.//'' Where is he now?
''//Clowne//'' Why now they sent him to //England.//
''//Ham.//'' To //England//! wherefore?
''//Clowne//'' Why they say he shall haue his wittes there,
Or if he haue not, t'is no great matter there,
It will not be seene there.
''//Ham.//'' Why not there?
''//Clowne//'' Why there they say the men are as mad as he.
''//Ham.//'' Whose scull was this?
''//Clowne//'' This, a plague on him, a madde rogues it was,
He powred once a whole flagon of Rhenish of my head,
Why do not you know him? this was one //Yorickes// scull.
''//Ham.//'' Was this? I prethee let me see it, alas poore //Yoricke//
I knew him //Horatio,//
A fellow of infinite mirth, he hath caried mee twenty times
vpon his backe, here hung those lippes that I haue Kissed a
hundred times, and to see, now they abhorre me: Wheres
your iests now //Yoricke?// your flashes of meriment: now go
to my Ladies chamber, and bid her paint her selfe an inch
thicke, to this she must come //Yoricke.// //Horatio,// I prethee
tell me one thing, doost thou thinke that //Alexander// looked
thus?
''//Hor.//'' Euen so my Lord.
''//Ham.//'' And smelt thus?
''//Hor.//'' I my lord, no otherwise.
''//Ham.//'' No, why might not imagination worke, as thus of
//Alexander, Alexander// died, //Alexander// was buried, //Alexander//
became earth, of earth we make clay, and //Alexander// being
but clay, why might not time bring to passe, that he might
stoppe the boung hole of a beere barrell?
Imperious //Cæsar// dead and turnd to clay,
Might stoppe a hole, to keepe the winde away.
@@.stageDirectionFisco
// Enter King and Queene, Leartes, and other lordes,//
@@
@@.stageDirectionFisco
//with a Priest after the coffin.//
@@
''//Ham.//'' What funerall's this that all the Court laments?
It shews to be some noble parentage:
Stand by a while.
''//Lear.//'' What ceremony else? say, what ceremony else?
''//Priest//'' My Lord, we haue done all that lies in vs,
And more than well the church can tolerate,
She hath had a Dirge sung for her maiden soule:
And but for fauour of the king, and you,
She had beene buried in the open fieldes,
Where now she is allowed christian buriall.
''//Lear.//'' So, I tell thee churlish Priest, a ministring Angell
shall my sister be, when thou liest howling.
''//Ham.//'' The faire //Ofelia// dead!
''//Queene//'' Sweetes to the sweete, farewell:
I had thought to adorne thy bridale bed, faire maide,
And not to follow thee vnto thy graue.
''//Lear.//'' Forbeare the earth a while: sister farewell:
@@.stageDirectionFisco
// Leartes leapes into the graue.//
@@
Now powre your earth on, //Olympus// hie,
|dialogWithStageDirectionFisco|k
|And make a hill to o're top olde //Pellon://|// Hamlet leapes in after Leartes//|
Whats he that coniures so?
''//Ham.//'' Beholde tis I, //Hamlet// the Dane.
''//Lear.//'' The diuell take thy soule.
''//Ham.//'' O thou praiest not well,
I prethee take thy hand from off my throate,
For there is something in me dangerous,
Which let thy wisedome feare, holde off thy hand:
I lou'de //Ofelia// as deere as twenty brothers could:
Shew me what thou wilt doe for her:
Wilt fight, wilt fast, wilt pray,
Wilt drinke vp vessels, eate a crocadile? Ile doot:
Com'st thou here to whine?
And where thou talk'st of burying thee a liue,
Here let vs stand: and let them them throw on vs,
Whole hills of earth, till with the heighth therof,
Make Oosell as a Wart.
''//King.//'' Forbeare //Leartes,// now is hee mad, as is the sea,
Anone as milde and gentle as a Doue:
Therfore a while giue his wilde humour scope.
''//Ham.//'' What is the reason sir that you wrong mee thus?
I neuer gaue you cause: but stand away,
A Cat will meaw, a Dog will haue a day.
@@.stageDirectionFisco
// Exit Hamlet and Horatio.//
@@
''//Queene.//'' Alas, it is his madnes makes him thus,
And not his heart, //Leartes.//
''//King.//'' My lord, t'is so: but wee'le no longer trifle,
This very day shall //Hamlet// drinke his last,
For presently we meane to send to him,
Therfore //Leartes// be in readynes.
''//Lear.//'' My lord, till then my soule will not bee quiet.
''//King.//'' Come //Gertred,// wee'l haue //Leartes,// and our sonne,
Made friends and Louers, as befittes them both,
Euen as they tender vs, and loue their countrie.
|dialogWithStageDirectionFisco|k
|''//Queene//'' God grant they may.|// exeunt omnes.// |
@@.stageDirectionFisco
// Enter Hamlet and Horatio//
@@
''//Ham.//'' beleeue mee, it greeues mee much //Horatio,//
That to //Leartes// I forgot my selfe:
For by my selfe me thinkes I feele his griefe,
Though there's a difference in each others wrong.
@@.stageDirectionFisco
// Enter a Bragart Gentleman.//
@@
//Horatio,// but you marke yon water-flie,
The Court knowes him, but hee knowes not the Court.
''//Gent.//'' Now God saue thee, sweete prince //Hamlet.//
''//Ham.//'' And you sir: foh, how the muske-cod smels!
''//Gen.//'' I come with an embassage from his maiesty to you
''//Ham.//'' I shall sir giue you attention:
By my troth me thinkes t'is very colde.
''//Gent.//'' It is indeede very rawish colde.
''//Ham.//'' T'is hot me thinkes.
''//Gent.//'' Very swoltery hote:
The King, sweete Prince, hath layd a wager on your side,
Six Barbary horse, against six french rapiers,
With all their acoutrements too, a the carriages:
In good faith they are very curiously wrought.
''//Ham.//'' The cariages sir, I do not know what you meane.
''//Gent.//'' The girdles, and hangers sir, and such like.
''//Ham.//'' The worde had beene more cosin german to the
phrase, if he could haue carried the canon by his side,
And howe's the wager? I vnderstand you now.
''//Gent.//'' Mary sir, that yong Leartes in twelue venies
At Rapier and Dagger do not get three oddes of you,
And on your side the King hath laide,
And desires you to be in readinesse.
''//Ham.//'' Very well, if the King dare venture his wager,
I dare venture my skull: when must this be?
''//Gent.//'' My Lord, presently, the king, and her maiesty,
With the rest of the best iudgement in the Court,
Are comming downe into the outward pallace.
''//Ham.//'' Goe tell his maiestie, I wil attend him.
''//Gent.//'' I shall deliuer your most sweet answer. //exit.//
''//Ham.//'' You may sir, none better, for y'are spiced,
Else he had a bad nose could not smell a foole.
''//Hor.//'' He will disclose himselfe without inquirie.
''//Ham.//'' Beleeue me //Horatio,// my hart is on the sodaine
Very sore, all here about.
''//Hor.//'' My lord, forbeare the challenge then.
''//Ham.//'' No //Horatio,// not I, if danger be now,
Why then it is not to come, theres a predestiuate prouidence
in the fall of a sparrow: heere comes the King.
@@.stageDirectionFisco
// Enter King, Queene, Leartes, Lordes.//
@@
''//King//'' Now sonne //Hamlet,// we hane laid vpon your head,
And make no question but to haue the best.
''//Ham.//'' Your maiestie hath laide a the weaker side.
''//King//'' We doubt it not, deliuer them the foiles.
''//Ham.//'' First Leartes, heere's my hand and loue,
Protesting that I neuer wrongd //Leartes.//
If //Hamlet// in his madnesse did amisse,
That was not //Hamlet,// but his madnes did it,
And all the wrong I e're did to //Leartes,//
I here proclaime was madnes, therefore lets be at peace,
And thinke I haue shot mine arrow o're the house,
And hurt my brother.
''//Lear.//'' Sir I am satisfied in nature,
But in termes of honor I'le stand aloofe,
And will no reconcilement,
Till by some elder maisters of our time
I may be satisfied.
''//King//'' Giue them the foyles.
''//Ham.//'' I'le be your foyle //Leartes,// these foyles,
|dialogWithStageDirectionFisco|k
|Haue all a laught, come on sir:|// a hit.//|
| ||
|''//Lear.//'' No none.|// Heere they play:// |
''//Ham.//'' Iudgement.
''//Gent.//'' A hit, a most palpable hit.
|dialogWithStageDirectionFisco|k
|''//Lear.//'' Well, come againe.|// They play againe.//|
''//Ham.//'' Another. Iudgement.
''//Lear.//'' I, I grant, a tuch, a tuch.
''//King//'' Here //Hamlet,// the king doth drinke a health to thee
''//Queene//'' Here //Hamlet,// take my napkin, wipe thy face.
''//King//'' Giue him the wine.
''//Ham.//'' Set it by, I'le haue another bowt first,
I'le drinke anone.
''//Queene//'' Here //Hamlet,// thy mother drinkes to thee.
@@.stageDirectionFisco
// Shee drinkes.//
@@
''//King//'' Do not drinke //Gertred:// O t'is the poysned cup!
''//Ham.//'' //Leartes// come, you dally with me,
I pray you passe with your most cunningst play.
''//Lear.//'' I! say you so? haue at you,
Ile hit you now my Lord:
And yet it goes almost against my conscience.
''//Ham.//'' Come on sir.
@@.stageDirectionFisco
// They catch one anothers Rapiers, and both are wounded,//
@@
@@.stageDirectionFisco
//Leartes falles downe, the Queene falles downe and dies.//
@@
''//King//'' Looke to the Queene.
''//Queene//'' O the drinke, the drinke, //Hamlet,// the drinke.
''//Ham.//'' Treason, ho, keepe the gates.
''//Lords//'' How ist my Lord //Leartes//?
''//Lear.//'' Euen as a coxcombe should,
Foolishly slaine with my owne weapon:
//Hamlet//, thou hast not in thee halfe an houre of life,
The fatall Instrument is in thy hand.
Vnbated and invenomed: thy mother's poysned
That drinke was made for thee.
''//Ham.//'' The poysned Instrument within my hand?
Then venome to thy venome, die damn'd villaine:
|dialogWithStageDirectionFisco|k
|Come drinke, here lies thy vnion here.|// The king dies.//|
''//Lear.//'' O he is iustly serued:
//Hamlet,// before I die, here take my hand,
|dialogWithStageDirectionFisco|k
|And withall, my loue: I doe forgiue thee.|// Leartes dies.//|
''//Ham.//'' And I thee, O I am dead //Horatio,// fare thee well.
''//Hor.//'' No, I am more an antike Roman,
Then a Dane, here is some poison left.
''//Ham.//'' Vpon my loue I charge thee let it goe,
O fie //Horatio,// and if thou shouldst die,
What a scandale wouldst thou leaue behinde?
What tongue should tell the story of our deaths,
If not from thee? O my heart sinckes //Horatio,//
Mine eyes haue lost their sight, my tongue his vse:
|dialogWithStageDirectionFisco|k
|Farewel //Horatio,// heauen receiue my soule.|// Ham. dies.//|
@@.stageDirectionFisco
//Enter Voltemar and the Ambassadors from England.//
@@
@@.stageDirectionFisco
//enter Fortenbrasse with his traine.//
@@
''//Fort.//'' Where is this bloudy sight?
''//Hor.//'' If aught of woe or wonder you'ld behold,
Then looke vpon this tragicke spectacle.
''//Fort.//'' O imperious death! how many Princes
Hast thou at one draft bloudily shot to death?
''//Ambass.//'' Our ambassie that we haue brought from //England,//
Where be these Princes that should heare vs speake?
O most most vnlooked for time! vnhappy country.
''//Hor.//'' Content your selues, Ile shew to all, the ground,
The first beginning of this Tragedy:
Let there a scaffold be rearde vp in the market place,
And let the State of the world be there:
Where you shall heare such a sad story tolde,
That neuer mortall man could more vnfolde.
''//Fort.//'' I haue some rights of memory to this kingdome,
Which now to claime my leisure doth inuite mee:
Let foure of our chiefest Captaines
Beare //Hamlet// like a souldier to his graue:
For he was likely, had he liued,
To a prou'd most royall.
Take vp the bodie, such a sight as this
Becomes the fieldes, but here doth much amisse.
@@.stageDirectionFisco
// Enter King, Queene,// H//amlet, Leartes, Corambis,//
@@
@@.stageDirectionFisco
//and the two Ambassadors, with Attendants.//
@@
''//King//'' Lordes, we here haue writ to //Fortenbrasse,//
Nephew to olde //Norway,// who impudent
And bed-rid, scarcely heares of this his
Nephews purpose: and Wee heere dispatch
Yong good //Cornelia,// and you //Voltemar//
For bearers of these greetings to olde
//Norway,// giuing to you no further personall power
To businesse with the King,
Then those related articles do shew:
Farewell, and let your haste commend your dutie.
''//Gent.//'' In this and all things will wee shew our dutie.
''//King.//'' Wee doubt nothing, hartily farewel:
And now //Leartes,// what's the news with you?
You said you had a sute what i'st //Leartes//?
''//Lea.//'' My gratious Lord, your fauorable licence,
Now that the funerall rites are all performed,
I may haue leaue to go againe to //France,//
For though the fauour of your grace might stay mee,
Yet something is there whispers in my hart,
Which makes my minde and spirits bend all for //France.//
''//King://'' Haue you your fathers leaue, //Leartes?//
''//Cor.//'' He hath, my lord, wrung from me a forced graunt,
And I beseech you grant your Highnesse leaue.
''//King//'' With all our heart, //Leartes// fare thee well.
''//Lear.//'' I in all loue and dutie take my leaue.
|dialogWithStageDirectionFisco|k
|''//King.//'' And now princely Sonne //Hamlet,// |//Exit.//|
What meanes these sad and melancholy moodes?
For your intent going to //Wittenberg,//
Wee hold it most vnmeet and vnconuenient,
Being the Ioy and halfe heart of your mother.
Therefore let mee intreat you stay in Court,
All //Denmarkes// hope our coosin and dearest Sonne.
''//Ham.//'' My lord, ti's not the sable sute I weare:
No nor the teares that still stand in my eyes,
Nor the distracted hauiour in the visage,
Nor all together mixt with outward semblance,
Is equall to the sorrow of my heart,
Him haue I lost I must of force forgoe,
These but the ornaments and sutes of woe.
''//King//'' This shewes a louing care in you, Sonne //Hamlet,//
But you must thinke your father lost a father,
That father dead, lost his, and so shalbe vntill the
Generall ending. Therefore cease laments,
It is a fault gainst heauen, fault gainst the dead,
A fault gainst nature, and in reasons
Common course most certaine,
None liues on earth, but hee is borne to die.
''//Que.//'' Let not thy mother loose her praiers H// amlet,//
Stay here with vs, go not to //Wittenburg.//
''//Ham.//'' I shall in all my best obay you madam.
//King// Spoke like a kinde and a most louing Sonne,
And there's no health the King shall drinke to day,
But the great Canon to the clowdes shall tell
The rowse the King shall drinke vnto Prince H//amlet.//
@@.stageDirectionFisco
// Exeunt all but// H//amlet.//
@@
''//Ham.//'' O that this too much grieu'd and sallied flesh
Would melt to nothing, or that the vniuersall
Globe of heauen would turne al to a Chaos!
O God, within two months; no not two: married,
Mine vncle: O let me not thinke of it,
My fathers brother: but no more like
My father, then I to //Hercules.//
Within two months, ere yet the salt of most
Vnrighteous teares had left their flushing
In her galled eyes: she married, O God, a beast
Deuoyd of reason would not haue made
Such speede: Frailtie, thy name is Woman,
Why she would hang on him, as if increase
Of appetite had growne by what it looked on.
O wicked wicked speede, to make such
Dexteritie to incestuous sheetes,
Ere yet the shooes were olde,
The which she followed my dead fathers corse
Like //Nyobe,// all teares: married, well it is not,
Nor it cannot come to good:
But breake my heart, for I must holde my tongue.
@@.stageDirectionFisco
// Enter// Horatio// and// Marcellus.
@@
''//Hor.//'' Health to your Lordship.
''//Ham.//'' I am very glad to see
you, (Horatio) or I much
forget my selfe.
''//Hor.//'' The same my Lord, and your poore seruant euer.
''//Ham.//'' O my good friend, I change that name with you:
but what make you from //Wittenberg// H//oratio//?
''//Marcellus.//''
''//Marc.//'' My good Lord.
''//Ham.//'' I am very glad to see you, good euen sirs:
But what is your affaire in //Elsenoure//?
Weele teach you to drinke deepe ere you depart.
''//Hor.//'' A trowant disposition, my good Lord.
''//Ham.//'' Nor shall you make mee truster
Of your owne report against your selfe:
Sir, I know you are no trowant:
But what is your affaire in //Elsenoure//?
''//Hor.//'' My good Lord, I came to see your fathers funerall.
''//Ham.//'' O I pre thee do not mocke mee fellow studient,
I thinke it was to see my mothers wedding.
''//Hor.//'' Indeede my Lord, it followed hard vpon.
''// Ham.//'' Thrift, thrift, H//oratio,// the funerall bak't meates
Did coldly furnish forth the marriage tables,
Would I had met my deerest foe in heauen
Ere euer I had seene that day //Horatio//;
O my father, my father, me thinks I see my father.
''//Hor.//'' Where my Lord?
''//Ham.//'' Why, in my mindes eye H//oratio.//
''//Hor.//'' I saw him once, he was a gallant King.
''//Ham.//'' He was a man, take him for all in all,
I shall not looke vpon his like againe.
''//Hor.//'' My Lord, I thinke I saw him yesternight,
''//Ham.//'' Saw, who?
''//Hor.//'' My Lord, the King your father.
''//Ham.//'' Ha, ha, the King my father ke you.
''//Hor.//'' Ceasen your admiration for a while
With an attentiue eare, till I may deliuer,
Vpon the witnesse of these Gentlemen
This wonder to you.
''//Ham.//'' For Gods loue let me heare it.
''//Hor.//'' Two nights together had these Gentlemen,
//Marcellus// and //Bernardo,// on their watch,
In the dead vast and middle of the night.
Beene thus incountered by a figure like your father,
Armed to poynt, exactly //Capapea//
Appeeres before them thrise, he walkes
Before their weake and feare oppressed eies
Within his tronchions length,
While they distilled almost to gelly.
With the act of feare stands dumbe,
And speake not to him: this to mee
In dreadfull secresie impart they did.
And I with them the third night kept the watch,
Where as they had deliuered forme of the thing.
Each part made true and good,
The Apparition comes: I knew your father,
These handes are not more like.
''//Ham.//'' Tis very strange.
''//Hor.//'' As I do liue, my honord lord, tis true,
And wee did thinke it right done,
In our dutie to let you know it.
''//Ham.//'' Where was this?
''//Mar.//'' My Lord, vpon the platforme where we watched.
''//Ham.//'' Did you not speake to it?
''//Hor.//'' My Lord we did, but answere made it none,
Yet once me thought it was about to speake,
And lifted vp his head to motion,
Like as he would speake, but euen then
The morning cocke crew lowd, and in all haste,
It shruncke in haste away, and vanished
Our sight.
''//Ham.//'' Indeed, indeed sirs, but this troubles me:
Hold you the watch to night?
//All// We do my Lord.
''//Ham.//'' Armed say ye?
//All// Armed my good Lord.
''//Ham.//'' From top to toe?
''//All.//'' My good Lord, from head to foote.
''//Ham.//'' Why then saw you not his face?
''//Hor.//'' O yes my Lord, he wore his beuer vp.
''//Ham.//'' How look't he, frowningly?
''//Hor.//'' A countenance more in sorrow than in anger.
''//Ham.//'' Pale, or red?
''//Hor.//'' Nay, verie pal
''//Ham.//'' And fixt his eies vpon you.
''//Hor.//'' Most constantly.
''//Ham.//'' I would I had beene there.
''//Hor.//'' It would a much amazed you.
''//Ham.//'' Yea very like, very like, staid it long?
''//Hor.//'' While one with moderate pace
Might tell a hundred.
''//Mar.//'' O longer, longer.
''//Ham.//'' His beard was grisleld, no.
''//Hor.//'' It was as I haue seene it in his life,
A sable siluer.
''//Ham.//'' I wil watch to night, perchance t'wil walke againe.
''//Hor.//'' I warrant it will.
''//Ham.//'' If it assume my noble fathers person,
Ile speake to it, if hell it selfe should gape,
And bid me hold my peace, Gentlemen,
If you haue hither consealed this sight,
Let it be tenible in your silence still,
And whatsoeuer else shall chance to night,
Giue it an vnderstanding, but no tongue,
I will requit your loues, so fare you well,
Vpon the platforme, twixt eleuen and twelue,
Ile visit you.
|dialogWithStageDirectionFisco|k
|''//All.//'' Our duties to your honor.|// excunt.// |
''//Ham.//'' O your loues, your loues, as mine to you,
Farewell, my fathers spirit in Armes,
Well, all's not well. I doubt some foule play,
Would the night were come,
Till then, sit still my soule, foule deeds will rise
Though all the world orewhelme them to mens eies.
@@.stageDirectionFisco
//Exit.//
@@
@@.stageDirectionFisco
// Enter Leartes// and// Ofelia.//
@@
''//Leart.//'' My necessaries are inbarkt, I must aboord,
But ere I part, marke what I say to thee:
I see Prince //Hamlet// makes a shew of loue
Beware //Ofelia,// do not trust his vowes,
Perhaps he loues you now, and now his tongue,
Speakes from his heart, but yet take heed my sister,
The Chariest maide is prodigall enough,
If she vnmaske hir beautie to the Moone.
Vertue it selfe scapes not calumnious thoughts,
Belieu't //Ofelia,// therefore keepe a loofe
Lest that he trip thy honor and thy fame.
''//Ofel.//'' Brother, to this I haue lent attentiue eare,
And doubt not but to keepe my honour firme,
But my deere brother, do not you
Like to a cunning Sophister,
Teach me the path and ready way to heauen,
While you forgetting what is said to me,
Your selfe, like to a carelesse libertine
Doth giue his heart, his appetite at ful,
And little recks how that his honour dies.
''//Lear.//'' No, feare it not my deere //Ofelia,//
Here comes my father, occasion smiles vpon a second leaue.
@@.stageDirectionFisco
// Enter Corambis.//
@@
''//Cor.//'' Yet here //Leartes//? aboord, aboord, for shame,
The winde sits in the shoulder of your saile,
And you are staid for, there my blessing with thee
And these few precepts in thy memory.
"Be thou familiar, but by no meanes vulgare;
"Those friends thou hast, and their adoptions tried,
"Graple them to thee with a hoope of steele,
"But do not dull the palme with entertaine,
"Of euery new vnfleg'd courage,
"Beware of entrance into a quarrell; but being in,
"Beare it that the opposed may beware of thee,
"Costly thy apparrell, as thy purse can buy.
"But not exprest in fashion,
"For the apparrell oft proclaimes the man.
And they of //France// of the chiefe rancke and station
Are of a most select and generall chiefe in that:
"This aboue all, to thy owne selfe be true,
And it must follow as the night the day,
Thou canst not then be false to any one,
Farewel, my blessing with thee.
''//Lear.//'' I humbly take my leaue, farewell //Ofelia,//
|dialogWithStageDirectionFisco|k
|And remember well what I haue said to you.|//exit.// |
''//Ofel.//'' It is already lock't within my hart,
And you your selfe shall keepe the key of it.
''//Cor.//'' What i'st //Ofelia// he hath saide to you?
''//Ofel.//'' Somthing touching the prince// Hamlet.//
''//Cor.//'' Mary wel thought on, t'is giuen me to vnderstand,
That you haue bin too prodigall of your maiden presence
Vnto Prince Hamlet, if it be so,
As so tis giuen to mee, and that in waie of caution
I must tell you; you do not vnderstand your selfe
So well as befits my honor, and your credite.
''//Ofel.//'' My lord, he hath made many tenders of his loue
to me.
''//Cor.//'' Tenders, I, I, tenders you may call them.
''//Ofel.//'' And withall, such earnest vowes.
''//Cor.//'' Springes to catch woodcocks,
What, do not I know when the blood doth burne,
How prodigall the tongue lends the heart vowes,
In briefe, be more scanter of your maiden presence,
Or tendring thus you'l tender mee a foole.
''//Ofel.//'' I shall obay my lord in all I may.
''//Cor.//'' //Ofelia,// receiue none of his letters,
"For louers lines are snares to intrap the heart;
"Refuse his tokens, both of them are keyes
To vnlocke Chastitie vnto Desire;
Come in //Ofelia,// such men often proue,
"Great in their wordes, but little in their loue.
|dialogWithStageDirectionFisco|k
|''//Ofel.//'' I will my lord.|// exeunt.// |
@@.stageDirectionFisco
// Enter// Hamlet, Horatio, //and// Marcellus.
@@
''//Ham.//'' The ayre bites shrewd; it is an eager and
An nipping winde, what houre i'st?
|dialogWithStageDirectionFisco|k
|''//Hor.//'' I think it lacks of twelue,|// Sound Trumpets.//|
''//Mar.//'' No, t'is strucke.
''//Hor.//'' Indeed I heard it not, what doth this mean my lord?
''//Ham.//'' O the king doth wake to night, & takes his rowse,
Keepe wassel, and the swaggering vp-spring reeles,
And as he dreames, his draughts of renish downe,
The kettle, drumme, and trumpet, thus bray out,
The triumphes of his pledge.
''//Hor.//'' Is it a custome here?
''//Ham.//'' I mary i'st and though I am
Natiue here, and to the maner borne,
It is a custome, more honourd in the breach,
Then in the obseruance.
@@.stageDirectionFisco
// Enter the Ghost.//
@@
''//Hor.//'' Looke my Lord, it comes.
''//Ham.//'' Angels and Ministers of grace defend vs,
Be thou a spirite of health, or goblin damn'd,
Bring with thee ayres from heanen, or blasts from hell:
Be thy intents wicked or charitable,
Thou commest in such questionable shape,
That I will speake to thee,
Ile call thee //Hamlet,// King, Father, Royall Dane,
O answere mee, let mee not burst in ignorance,
But say why thy canonizd bones hearsed in death
Haue burst their ceremonies: why thy Sepulcher,
In which wee saw thee quietly interr'd,
Hath burst his ponderous and marble Iawes,
To cast thee vp againe: what may this meane,
That thou, dead corse, againe in compleate steele,
Reuissets thus the glimses of the Moone,
Making night hideous, and we fooles of nature,
So horridely to shake our disposition,
With thoughts beyond the reaches of our soules?
Say, speake, wherefore, what may this meane?
''//Hor.//'' It beckons you, as though it had something
To impart to you alone.
''//Mar.//'' Looke with what courteous action
It waues you to a more remoued ground,
But do not go with it.
''//Hor.//'' No, by no meanes my Lord.
''//Ham.//'' It will not speake, then will I follow it.
''//Hor.//'' What if it tempt you toward the flood my Lord.
That beckles ore his bace, into the sea,
And there assume some other horrible shape,
Which might depriue your soueraigntie of reason,
And driue you into madnesse: thinke of it.
''//Ham.//'' Still am I called, go on, ile follow thee.
''//Hor.//'' My Lord, you shall not go.
''//Ham.//'' Why what should be the feare?
I do not set my life at a pinnes fee,
And for my soule, what can it do to that?
Being a thing immortall, like it selfe,
Go on, ile follow thee.
''//Mar.//'' My Lord be rulde, you shall not goe.
''//Ham.//'' My fate cries out, and makes each pety Artiue
As hardy as the Nemeon Lyons nerue,
Still am I cald, vnhand me gentlemen;
By heauen ile make a ghost of him that lets me,
Away I say, go on, ile follow thee.
''//Hor.//'' He waxeth desperate with imagination.
''//Mar.//'' Something is rotten in the state of //Denmarke.//
''//Hor.//'' Haue after; to what issue will this sort?
''//Mar.//'' Lets follow, tis not fit thus to obey him.
@@.stageDirectionFisco
//exit.//
@@
@@.stageDirectionFisco
// Enter Ghost and Hamlet.//
@@
''//Ham.//'' Ile go no farther, whither wilt thou leade me?
''//Ghost//'' Marke me.
''//Ham.//'' I will.
''//Ghost//'' I am thy fathers spirit, doomd for a time
To walke the night, and all the day
Confinde in flaming fire,
Till the foule crimes done in my dayes of Nature
Are purged and burnt away.
''//Ham.//'' Alas poore Ghost.
''//Ghost//'' Nay pitty me not, but to my vnfolding
Lend thy listning eare, but that I am forbid
To tell the secrets of my prison house
I would a tale vnfold, whose lightest word
Would harrow vp thy soule, freeze thy yong blood,
Make thy two eyes like stars start from their spheres,
Thy knotted and combined locks to part,
And each particular haire to stand on end
Like quils vpon the fretfull Porpentine,
But this same blazon must not be, to eares of flesh and blood
Hamlet, if euer thou didst thy deere father loue.
''//Ham.//'' O God.
''//Gho.//'' Reuenge his foule, and most vnnaturall murder:
''//Ham.//'' Murder.
''//Ghost//'' Yea, murder in the highest degree,
As in the least tis bad,
But mine most foule, beastly, and vnnaturall.
''//Ham.//'' Haste me to knowe it, that with wings as swift as
meditation, or the thought of it, may sweepe to my reuenge.
''//Ghost//'' O I finde thee apt, and duller shouldst thou be
Then the fat weede which rootes it selfe in ease
On //Lethe// wharffe: briefe let me be.
Tis giuen out, that sleeping in my orchard,
A Serpent stung me; so the whole eare of //Denmarke//
Is with a forged Prosses of my death rankely abusde:
But know thou noble Youth: he that did sting
Thy fathers heart, now weares his Crowne.
''//Ham.//'' O my prophetike soule, my vncle! my vncle!
''//Ghost//'' Yea he, that incestuous wretch, wonne to his will with gifts,
O wicked will, and gifts! that haue the power
So to seduce my most seeming vertuous Queene,
But vertne, as it neuer will be moued,
Though Lewdnesse court it in a shape of heauen,
So Lust, thought to a radiant angle linckt,
Would fate it selfe from a celestiall bedde,
And prey on garbage: but soft, me thinkes
I sent the mornings ayre, briefe let me be,
Sleeping within my Orchard, my custome alwayes
In the after noone, vpon my secure houre
Thy vncle came, with iuyce of Hebona
In a viall, and through the porches of my eares
Did powre the leaprous distilment, whose effect
Hold such an enmitie with blood of man,
That swift as quickesilner, it posteth through
The naturall gates and allies of the body,
And turnes the thinne and wholesome blood
Like eager dropings into milke.
And all my smoothe body, barked, and tetterd ouer.
Thus was I sleeping by a brothers hand
Of Crowne, of Queene, of life, of dignitie
At once depriued, no reckoning made of,
But sent vnto my graue,
With all my accompts and sinnes vpon my head,
O horrible, most horrible!
''//Ham.//'' O God!
''//ghost//'' If thou hast nature in thee, beare it not,
But howsoeuer, let not thy heart
Conspire against thy mother aught,
Leaue her to heauen,
And to the burthen that her conscience beares.
I must be gone, the Glo-worme shewes the Martin
To be neere, and gin's to pale his vneffectuall fire:
|dialogWithStageDirectionFisco|k
|Hamlet adue, adue, adue: remember me.|//Exit//|
''//Ham.//'' O all you hoste of heauen! O earth, what else?
And shall I couple hell; remember thee?
Yes thou poore Ghost; from the tables
Of my memorie, ile wipe away all sawes of Bookes,
All triuiall fond conceites
That euer youth, or else obseruance noted,
And thy remembrance, all alone shall sit.
Yes, yes, by heauen, a damnd pernitious villaine,
Murderons, bawdy, smiling damned villaine,
(My tables) meet it is I set it downe,
That one may smile, and smile, and be a villayne;
At least I am sure, it may be so in //Denmarke.//
So vncle, there you are, there you are.
Now to the words; it is adue adue: remember me,
Soe t'is enough I haue sworne.
|dialogWithStageDirectionFisco|k
|''//Hor.//'' My lord, my lord.|// Enter. Horatio, and Marcellus.//|
''//Mar.//'' Lord Hamlet.
''//Hor.//'' Ill, lo, lo, ho, ho.
''//Mar.//'' Ill, lo, lo, so, ho, so, come boy, come.
''//Hor.//'' Heauens secure him.
''//Mar.//'' How i'st my noble lord?
''//Hor.//'' What news my lord?
''//Ham.//'' O wonderfull, wonderful.
''//Hor.//'' Good my lord tel it.
''//Ham.//'' No not I, you'l reueale it.
''//Hor.//'' Not I my Lord by heauen.
''//Mar.//'' Nor I my Lord.
''//Ham.//'' How say you then? would hart of man
Once thinke it? but you'l be secret.
''//Both.//'' I by heauen, my lord.
''//Ham.//'' There's neuer a villaine dwelling in all //Denmarke,//
But hee's an arrant knaue.
''//Hor.//'' There need no Ghost come from the graue to tell
you this.
''//Ham.//'' Right, you are in the right, and therefore
I holde it meet without more circumstance at all,
Wee shake hands and part; you as your busines
And desiers shall leade you: for looke you,
Euery man hath busines, and desires, such
As it is, and for my owne poore parte, ile go pray.
''//Hor.//'' These are but wild and wherling words, my Lord.
''//Ham.//'' I am sory they offend you; hartely, yes faith hartily.
''//Hor.//'' Ther's no offence my Lord.
''//Ham.//'' Yes by Saint //Patrike// but there is H//oratio,//
And much offence too, touching this vision,
It is an honest ghost, that let mee tell you,
For your desires to know what is betweene vs,
Or'emaister it as you may:
And now kind frends, as yon are frends,
Schollers and gentlmen,
Grant mee one poore request.
''//Both.//'' What i'st my Lord?
''//Ham.//'' Neuer make known what you haue seene to night
''//Both.//'' My lord, we will not.
''//Ham.//'' Nay but sweare.
''//Hor.//'' In faith my Lord not I.
''//Mar.//'' Nor I my Lord in faith.
''//Ham.//'' Nay vpon my sword, indeed vpon my sword.
''//Gho.//'' Sweare.
@@.stageDirectionFisco
// The Gost vnder the stage.//
@@
''//Ham.//'' Ha, ha, come you here, this fellow in the sellerige,
Here consent to sweare.
''//Hor.//'' Propose the oth my Lord.
''//Ham.//'' Neuer to speake what you haue seene to night,
Sweare by my sword.
''//Gost.//'' Sweare.
''//Ham.//'' //Hic & vbique;// nay then weele shift our ground:
Come hither Gentlemen, and lay your handes
Againe vpon this sword, neuer to speake
Of that which you haue seene, sweare by my sword.
''//Ghost//'' Sweare.
''//Ham.//'' Well said old Mole, can'st worke in the earth?
so fast, a worthy Pioner, once more remoue.
''//Hor.//'' Day and night but this is wondrous strange.
''//Ham.//'' And therefore as a stranger giue it welcome,
There are more things in heauen and earth //Horatio,//
Then are Dream't of, in your philosophie,
But come here, as before you neuer shall
How strange or odde soere I beare my selfe,
As I perchance hereafter shall thinke meet,
To put an Anticke disposition on,
That you at such times seeing me, neuer shall
With Armes, incombred thus, or this head shake,
Or by pronouncing some vndoubtfull phrase,
As well well, wee know, or wee could and if we would,
Or there be, and if they might, or such ambiguous:
Giuing out to note, that you know aught of mee,
This not to doe, so grace, and mercie
At your most need helpe you, sweare
''//Ghost.//'' sweare.
''//Ham.//'' Rest, rest, perturbed spirit: so gentlemen,
In all my loue I do commend mee to you,
And what so poore a man as //Hamlet// may,
To pleasure you, God willing shall not want,
Nay come lett's go together,
But stil your fingers on your lippes I pray,
The time is out of ioynt, O cursed spite,
That euer I was borne to set it right,
|dialogWithStageDirectionFisco|k
|Nay come lett's go together.|// Exeunt.// |
@@.stageDirectionFisco
// Enter Corambis, and Montano.//
@@
''//Cor.//'' //Montano,// here, these letters to my sonne,
And this same mony with my blessing to him,
And bid him ply his learning good //Montano.//
''//Mon.//'' I will my lord.
''//Cor.//'' You shall do very well //Montano,// to say thus,
I knew the gentleman, or know his father,
To inquire the manner of his life,
As thus; being amongst his acquaintance,
You may say, you saw him at such a time, marke you mee,
At game, or drincking, swearing, or drabbing,
You may go so farre.
''//Mon.//'' My lord, that will impeach his reputation.
''//Cor.//'' I faith not a whit, no not a whit,
Now happely hee closeth with you in the consequence,
As you may bridle it not disparage him a iote.
What was I a bout to say,
''//Mon.//'' He closeth with him in the consequence.
''//Cor.//'' I, you say right, he closeth with him thus,
This will hee say, let mee see what hee will say,
Mary this, I saw him yesterday, or tother day,
Or then, or at such a time, a dicing,
Or at Tennis, I or drincking drunke, or entring
Of a howse of lightnes viz. brothell,
Thus sir do wee that know the world, being men of reach,
By indirections, finde directions forth,
And so shall you my sonne; you ha me, ha you not?
''//Mon.//'' I haue my lord.
''//Cor.//'' Wel, fare you well, commend mee to him.
''//Mon.//'' I will my lord.
''//Cor.//'' And bid him ply his musicke
|dialogWithStageDirectionFisco|k
|''//Mon.//'' My lord I wil.|//exit.//|
@@.stageDirectionFisco
// Enter, Ofelia.//
@@
''//Cor.//'' Farewel, how now //Ofelia,// what's the news with you?
''//Ofe.//'' O my deare father, such a change in nature,
So great an alteration in a Prince,
So pitifull to him, fearefull to mee,
A maidens eye ne're looked on.
''//Cor.//'' Why what's the matter my //Ofelia//?
''//Of.//'' O yong Prince //Hamlet,// the only floure of //Denmark,//
Hee is bereft of all the wealth he had,
The Iewell that ador'nd his feature most
Is filcht and stolne away, his wit's bereft him,
Hee found mee walking in the gallery all alone,
There comes hee to mee, with a distracted looke,
His garters lagging downe, his shooes vntide,
And fixt his eyes so stedfast on my face,
As if they had vow'd, this is their latest obiect.
Small while he stoode, but gripes me by the wrist,
And there he holdes my pulse till with a sigh
He doth vnclaspe his holde, and parts away
Silent, as is the mid time of the night:
And as he went, his eie was still on mee,
For thus his head ouer his shoulder looked,
He seemed to finde the way without his eies:
For out of doores he went without their helpe,
And so did leaue me.
''//Cor.//'' Madde for thy loue,
What haue you giuen him any crosse wordes of late?
''//Ofelia//'' I did repell his letters, deny his gifts,
As you did charge me.
''//Cor.//'' Why that hath made him madde:
By heau'n t'is as proper for our age to cast
Beyond our selues, as t'is for the yonger sort
To leaue their wantonnesse. Well, I am sory
That I was so rash: but what remedy?
Lets to the King, this madnesse may prooue,
|dialogWithStageDirectionFisco|k
|Though wilde a while, yet more true to thy loue.|// exeunt.//|
@@.stageDirectionFisco
// Enter King and Queene, Rossencraft, and Gilderstone.//
@@
''//King//'' Right noble friends, that our deere cosin Hamlet
Hath lost the very heart of all his sence,
It is most right, and we most sory for him:
Therefore we doe desire, euen as you tender
Our care to him, and our great loue to you,
That you will labour but to wring from him
The cause and ground of his distemperancie.
Doe this, the king of //Denmarke// shal be thankefull.
''//Ros.//'' My Lord, whatsoeuer lies within our power
Your maiestie may more commaund in wordes
Then vse perswasions to your liege men, bound
By loue, by duetie, and obedience.
''//Guil.//'' What we may doe for both your Maiesties
To know the griefe troubles the Prince your sonne,
We will indeuour all the best we may,
So in all duetie doe we take our leaue.
''//King//'' Thankes Guilderstone, and gentle Rossencraft.
''//Que.//'' Thankes Rossencraft, and gentle Gilderstone.
@@.stageDirectionFisco
// Enter Corambis and Ofelia.//
@@
''//Cor.//'' My Lord, the Ambassadors are ioyfully
Return'd from //Norway.//
''//King//'' Thou still hast beene the father of good news.
''//Cor.//'' Haue I my Lord? I assure your grace,
I holde my duetie as I holde my life,
Both to my God, and to my soueraigne King:
And I beleeue, or else this braine of mine
Hunts not the traine of policie so well
As it had wont to doe, but I haue found
The very depth of Hamlets lunacie.
''//Queene//'' God graunt he hath.
@@.stageDirectionFisco
// Enter the Ambassadors.//
@@
''//King//'' Now //Voltemar,// what from our brother //Norway//?
''//Volt.//'' Most faire returnes of greetings and desires,
Vpon our first he sent forth to suppresse
His nephews leuies, which to him appear'd
To be a preparation gainst the Polacke:
But better look't into, he truely found
It was against your Highnesse, whereat grieued,
That so his sickenesse, age, and impotence,
Was falsely borne in hand, sends out arrests
On //Fortenbrasse,// which he in briefe obays,
Receiues rebuke from //Norway//: and in fine,
Makes vow before his vncle, neuer more
To giue the assay of Armes against your Maiestie,
Whereon olde //Norway// ouercome with ioy,
Giues him three thousand crownes in annuall fee,
And his Commission to employ those souldiers,
So leuied as before, against the Polacke,
With an intreaty heerein further shewne,
That it would please you to giue quiet passe
Through your dominions, for that enterprise
On such regardes of safety and allowances
As therein are set downe.
''//King//'' It likes vs well, and at fit time and leasure
Weele reade and answere these his Articles,
Meane time we thanke you for your well
Tooke labour: go to your rest, at night weele feast togither:
|dialogWithStageDirectionFisco|k
|Right welcome home.|// exeunt Ambassadors.// |
''//Cor.//'' This busines is very well dispatched.
Now my Lord, touching the yong Prince Hamlet,
Certaine it is that hee is madde: mad let vs grant him then:
Now to know the cause of this effect,
Or else to say the cause of this defect,
For this effect defectiue comes by cause.
''//Queene//'' Good my Lord be briefe.
''//Cor.//'' Madam I will: my Lord, I haue a daughter,
Haue while shee's mine: for that we thinke
Is surest, we often loose: now to the Prince.
My Lord, but note this letter,
The which my daughter in obedience
Deliuer'd to my handes.
''//King//'' Reade it my Lord.
''//Cor.//'' Marke my Lord.
Doubt that in earth is fire,
Doubt that the starres doe moue,
Doubt trueth to be a liar,
But doe not doubt I loue.
To the beautifull //Ofelia://
Thine euer the most vnhappy Prince //Hamlet.//
My Lord, what doe you thinke of me?
I, or what might you thinke when I sawe this?
''//King//'' As of a true friend and a most louing subiect.
''//Cor.//'' I would be glad to prooue so.
Now when I saw this letter, thus I bespake my maiden:
Lord //Hamlet// is a Prince out of your starre,
And one that is vnequall for your loue:
Therefore I did commaund her refuse his letters,
Deny his tokens, and to absent her selfe.
Shee as my childe obediently obey'd me.
Now since which time, seeing his loue thus cross'd,
Which I tooke to be idle, and but sport,
He straitway grew into a melancholy,
From that vnto a fast, then vnto distraction,
Then into a sadnesse, from that vnto a madnesse,
And so by continuance, and weakenesse of the braine
Into this frensie, which now possesseth him:
And if this be not true, take this from this.
''//King//'' Thinke you t'is so?
''//Cor.//'' How? so my Lord, I would very faine know
That thing that I haue saide t'is so, positiuely,
And it hath fallen out otherwise.
Nay, if circumstances leade me on,
Ile finde it out, if it were hid
As deepe as the centre of the earth.
''//King.//'' how should wee trie this same?
''//Cor.//'' Mary my good lord thus,
The Princes walke is here in the galery,
There let //Ofelia,// walke vntill hee comes:
Your selfe and I will stand close in the study,
There shall you heare the effect of all his hart,
And if it proue any otherwise then loue,
Then let my censure faile an other time.
''//King.//'' see where hee comes poring vppon a booke.
@@.stageDirectionFisco
// Enter Hamlet.//
@@
''//Cor.//'' Madame, will it please your grace
To leaue vs here?
|dialogWithStageDirectionFisco|k
|''//Que.//'' With all my hart.|//exit.// |
''//Cor.//'' And here //Ofelia,// reade you on this booke,
And walke aloofe, the King shal be vnseene.
''//Ham.//'' To be, or not to be, I there's the point,
To Die, to sleepe, is that all? I all:
No, to sleepe, to dreame, I mary there it goes,
For in that dreame of death, when wee awake,
And borne before an euerlasting Iudge,
From whence no passenger euer retur'nd,
The vndiscouered country, at whose sight
The happy smile, and the accursed damn'd.
But for this, the ioyfull hope of this,
Whol'd beare the scornes and flattery of the world,
Scorned by the right rich, the rich curssed of the poore?
The widow being oppressed, the orphan wrong'd,
The taste of hunger, or a tirants raigne,
And thousand more calamities besides,
To grunt and sweate vnder this weary life,
When that he may his full //Quietus// make,
With a bare bodkin, who would this indure,
But for a hope of something after death?
Which pusles the braine, and doth confound the sence,
Which makes vs rather beare those euilles we haue,
Than flie to others that we know not of.
I that, O this conscience makes cowardes of vs all,
Lady in thy orizons, be all my sinnes remembred.
''//Ofel.//'' My Lord, I haue sought opportunitie, which now
I haue, to redeliuer to your worthy handes, a small remem-
brance, such tokens which I haue receiued of you.
''//Ham.//'' Are you faire?
''//Ofel.//'' My Lord.
''//Ham.//'' Are you honest?
''//Ofel.//'' What meanes my Lord?
''//Ham.//'' That if you be faire and honest,
Your beauty should admit no discourse to your honesty.
''//Ofel.//'' My Lord, can beauty haue better priuiledge than
with honesty?
''//Ham.//'' Yea mary may it; for Beauty may transforme
Honesty, from what she was into a bawd:
Then Honesty can transforme Beauty:
This was sometimes a Paradox,
But now the time giues it scope.
I neuer gaue you nothing.
''//Ofel.//'' My Lord, you know right well you did,
And with them such earnest vowes of loue,
As would haue moou'd the stoniest breast aliue,
But now too true I finde,
Rich giftes waxe poore, when giuers grow vnkinde.
''//Ham.//'' I neuer loued you.
''//Ofel.//'' You made me beleeue you did.
''//Ham.//'' O thou shouldst not a beleeued me!
Go to a Nunnery goe, why shouldst thou
Be a breeder of sinners? I am my selfe indifferent honest,
But I could accuse my selfe of such crimes
It had beene better my mother had ne're borne me,
O I am very prowde, ambitious, disdainefull,
With more sinnes at my becke, then I haue thoughts
To put them in, what should such fellowes as I
Do, crawling between heauen and earth?
To a Nunnery goe, we are arrant knaues all,
Beleeue none of vs, to a Nunnery goe.
''//Ofel.//'' O heauens secure him!
''//Ham.//'' Wher's thy father?
''//Ofel.//'' At home my lord.
''//Ham.//'' For Gods sake let the doores be shut on him,
He may play the foole no where but in his
Owne house: to a Nunnery goe.
''//Ofel.//'' Help him good God.
''//Ham.//'' If thou dost marry, Ile giue thee
This plague to thy dowry:
Be thou as chaste as yce, as pure as snowe,
Thou shalt not scape calumny, to a Nunnery goe.
''//Ofel.//'' Alas, what change is this?
''//Ham.//'' But if thou wilt needes marry, marry a foole,
For wisemen know well enough,
What monsters you make of them, to a Nunnery goe.
''//Ofel.//'' Pray God restore him.
''//Ham.//'' Nay, I haue heard of your paintings too,
God hath giuen you one face,
And you make your selues another,
You fig, and you amble, and you nickname Gods creatures,
Making your wantonnesse, your ignorance,
A pox, t'is scuruy, Ile no more of it,
It hath made me madde: Ile no more marriages,
All that are married but one, shall liue,
The rest shall keepe as they are, to a Nunnery goe,
|dialogWithStageDirectionFisco|k
|To a Nunnery goe.|//exit.//|
''//Ofe.//'' Great God of heauen, what a quicke change is this?
The Courtier, Scholler, Souldier, all in him,
All dasht and splinterd thence, O woe is me,
|dialogWithStageDirectionFisco|k
|To a seene what I haue seene, see what I see.|//exit.//|
| | |
|dialogWithStageDirectionFisco|k
|''//King//'' Loue? No, no, that's not the cause,|// Enter King and Corambis.//|
Some deeper thing it is that troubles him.
''//Cor.//'' Wel, something it is: my Lord, content you a while,
I will my selfe goe feele him: let me worke,
Ile try him euery way: see where he comes,
Send you those Gentlemen, let me alone
|dialogWithStageDirectionFisco|k
|To finde the depth of this, away, be gone.|//exit King.//|
| | |
|dialogWithStageDirectionFisco|k
|Now my good Lord, do you know me?|// Enter Hamlet.//|
''//Ham.//'' Yea very well, y'are a fishmonger.
''//Cor.//'' Not I my Lord.
''//Ham.//'' Then sir, I would you were so honest a man,
For to be honest, as this age goes,
Is one man to be pickt out of tenne thousand.
''//Cor.//'' What doe you reade my Lord?
''//Ham.//'' Wordes, wordes.
''//Cor.//'' What's the matter my Lord?
''//Ham.//'' Betweene who?
''//Cor.//'' I meane the matter you reade my Lord.
''//Ham.//'' Mary most vile heresie:
For here the Satyricall Satyre writes,
That olde men haue hollow eyes, weake backes,
Grey beardes, pittifull weake hammes, gowty legges,
All which sir, I most potently beleeue not:
For sir, your selfe shalbe olde as I am,
If like a Crabbe, you could goe backeward.
''//Cor.//'' How pregnant his replies are, and full of wit:
Yet at first he tooke me for a fishmonger:
All this comes by loue, the vemencie of loue,
And when I was yong, I was very idle,
And suffered much extasie in loue, very neere this:
Will you walke out of the aire my Lord?
''//Ham.//'' Into my graue.
''//Cor.//'' By the masse that's out of the aire indeed,
Very shrewd answers,
My lord I will take my leaue of you.
@@.stageDirectionFisco
// Enter Gilderstone, and Rossencraft.//
@@
''//Ham.//'' You can take nothing from me sir,
I will more willingly part with all,
Olde doating foole.
|dialogWithStageDirectionFisco|k
|''//Cor,//'' You seeke Prince Hamlet, see, there he is.|//exit.// |
''//Gil.//'' Health to your Lordship.
''//Ham.//'' What, Gilderstone, and Rossencraft,
Welcome kinde Schoole-fellowes to //Elsanoure.//
''//Gil.//'' We thanke your Grace, and would be very glad
You were as when we were at //Wittenberg.//
''//Ham.//'' I thanke you, but is this visitation free of
Your selues, or were you not sent for?
Tell me true, come, I know the good King and Queene
Sent for you, there is a kinde of confession in your eye:
Come, I know you were sent for.
''//Gil.//'' What say you?
''//Ham.//'' Nay then I see how the winde sits,
Come, you were sent for.
''//Ross.//'' My lord, we were, and willingly if we might,
Know the cause and ground of your discontent.
''//Ham.//'' Why I want preferment.
''//Ross.//'' I thinke not so my lord.
''//Ham.//'' Yes faith, this great world you see contents me not,
No nor the spangled heauens, nor earth, nor sea,
No nor Man that is so glorious a creature,
Contents not me, no nor woman too, though you laugh.
''//Gil.//'' My lord, we laugh not at that.
''//Ham.//'' Why did you laugh then,
When I said, Man did not content mee?
''//Gil.//'' My Lord, we laughed, when you said, Man did not
content you.
What entertainement the Players shall haue,
We boorded them a the way: they are comming to you.
''//Ham.//'' Players, what Players be they?
''//Ross.//'' My Lord, the Tragedians of the Citty,
Those that you tooke delight to see so often.
''//Ham.//'' How comes it that they trauell? Do they grow re-(stie?
''//Gil.//'' No my Lord, their reputation holds as it was wont.
''//Ham.//'' How then?
''//Gil.//'' Yfaith my Lord, noueltie carries it away,
For the principall publike audience that
Came to them, are turned to priuate playes,
And to the humour of children.
''//Ham.//'' I doe not greatly wonder of it,
For those that would make mops and moes
At my vncle, when my father liued,
Now giue a hundred, two hundred pounds
For his picture: but they shall be welcome,
He that playes the King shall haue tribute of me,
The ventrous Knight shall vse his foyle and target,
The louer shall sigh gratis,
The clowne shall make them laugh
That are tickled in the lungs, or the blanke verse shall halt (for't,
And the Lady shall haue leaue to speake her minde freely.
@@.stageDirectionFisco
// The Trumpets sound, Enter Corambis.//
@@
Do you see yonder great baby?
He is not yet out of his swadling clowts.
''//Gil.//'' That may be, for they say an olde man
Is twice a childe.
''//Ham.//'' Ile prophecie to you, hee comes to tell mee a the (Players,
You say true, a monday last, t'was so indeede.
''//Cor.//'' My lord, I haue news to tell you.
''//Ham.//'' My Lord, I haue newes to tell you:
When //Rossios// was an Actor in //Rome.//
''//Cor.//'' The Actors are come hither, my lord.
''//Ham.//'' Buz, buz.
''//Cor.//'' The best Actors in Christendome,
Either for Comedy, Tragedy, Historie, Pastorall,
Pastorall, Historicall, Historicall, Comicall,
Comicall historicall, Pastorall, Tragedy historicall:
//Seneca// cannot be too heauy, nor //Plato// too light:
For the law hath writ those are the onely men.
''//Ha.//'' O //Iepha// Iudge of //Israel//! what a treasure hadst thou?
''//Cor.//'' Why what a treasure had he my lord?
''//Ham.//'' Why one faire daughter, and no more,
The which he loued passing well.
''//Cor.//'' A, stil harping a my daughter! well my Lord,
If you call me //Iepha,// I hane a daughter that
I loue passing well.
''//Ham.//'' Nay that followes not.
''//Cor.//'' What followes then my Lord?
''//Ham.//'' Why by lot, or God wot, or as it came to passe,
And so it was, the first verse of the godly Ballet
Wil tel you all: for look you where my abridgement comes:
|dialogWithStageDirectionFisco|k
|Welcome maisters, welcome all,|// Enter players.//|
What my olde friend, thy face is vallanced
Since I saw thee last, com'st thou to beard me in //Denmarke?//
My yong lady and mistris, burlady but your
Ladiship is growne by the altitude of a chopine higher than (you were:
Pray God sir your voyce, like a peece of vncurrant
Golde, be not crack't in the ring: come on maisters,
Weele euen too't, like French Falconers,
Flie at any thing we see, come, a taste of your
Quallitie, a speech, a passionate speech.
''//Players//'' What speech my good lord?
''//Ham.//'' I heard thee speake a speech once,
But it was neuer acted: or if it were,
Neuer aboue twice, for as I remember,
It pleased not the vulgar, it was cauiary
To the million: but to me
And others, that receiued it in the like kinde,
Cried in the toppe of their iudgements, an excellent play,
Set downe with as great modestie as cunning:
One said there was no sallets in the lines to make thē sauory,
But called it an honest methode, as wholesome as sweete.
Come, a speech in it I chiefly remember
Was //Æneas// tale to //Dido,//
And then especially where he talkes of Princes slaughter,
If it liue in thy memory beginne at this line,
Let me see.
The rugged //Pyrrus,// like th'arganian beast:
No t'is not so, it begins with //Pirrus://
O I haue it.
The rugged //Pirrus,// he whose sable armes,
Blacke as his purpose did the night resemble,
When he lay couched in the ominous horse,
Hath now his blacke and grimme complexion smeered
With Heraldry more dismall, head to foote,
Now is he totall guise, horridely tricked
With blood of fathers, mothers, daughters, sonnes,
Back't and imparched in calagulate gore,
Rifted in earth and fire, olde grandsire //Pryam// seekes:
So goe on.
''//Cor.//'' Afore God, my Lord, well spoke, and with good (accent.
''//Play.//'' Anone he finds him striking too short at Greeks,
His antike sword rebellious to his Arme,
Lies where it falles, vnable to resist.
//Pyrrus// at //Pryam// driues, but all in rage,
Strikes wide, but with the whiffe and winde
Of his fell sword, th'unnerued father falles.
''//Cor.//'' Enough my friend, t'is too long.
''//Ham.//'' It shall to the Barbers with your beard:
A pox, hee's for a Iigge, or a tale of bawdry,
Or else he sleepes, come on to //Hecuba,// come.
''//Play.//'' But who, O who had seene the mobled Queene?
''//Cor.//'' Mobled Queene is good, faith very good.
''//Play.//'' All in the alarum and feare of death rose vp,
And o're her weake and all ore-teeming loynes, a blancket
And a kercher on that head, where late the diademe stoode,
Who this had seene with tongue inuenom'd speech,
Would treason haue pronounced,
For if the gods themselues had seene her then,
When she saw //Pirrus// with malitious strokes,
Mincing her husbandes limbs,
It would haue made milch the burning eyes of heauen,
And passion in the gods.
''//Cor//'' Looke my lord if he hath not changde his colour,
And hath teares in his eyes: no more good heart, no more.
''//Ham.//'' T'is well, t'is very well, I pray my lord,
Will you see the Players well bestowed,
I tell you they are the Chronicles
And briefe abstracts of the time,
After your death I can tell you,
You were better haue a bad Epiteeth,
Then their ill report while you liue.
''//Cor.//'' My lord, I will vse them according to their deserts.
''//Ham.//'' O farre better man, vse euery man after his deserts,
Then who should scape whipping?
Vse them after your owne honor and dignitie,
The lesse they deserue, the greater credit's yours.
|dialogWithStageDirectionFisco|k
|''//Cor.//'' Welcome my good fellowes.|//exit.// |
''//Ham.//'' Come hither maisters, can you not play the mur-
der of //Gonsago?//
''//players//'' Yes my Lord.
''//Ham.//'' And could'st not thou for a neede study me
Some dozen or sixteene lines,
Which I would set downe and insert?
''//players//'' Yes very easily my good Lord.
''//Ham.//'' T'is well, I thanke you: follow that lord:
And doe you heare sirs? take heede you mocke him not.
Gentlemen, for your kindnes I thanke you,
And for a time I would desire you leaue me.
''//Gil.//'' Our loue and duetie is at your commaund.
@@.stageDirectionFisco
// Exeunt all but Hamlet.//
@@
''//Ham.//'' Why what a dunghill idiote slaue am I?
Why these Players here draw water from eyes:
For Hecuba, why what is Hecuba to him, or he to Hecuba?
What would he do and if he had my losse?
His father murdred, and a Crowne bereft him,
He would turne all his teares to droppes of blood,
Amaze the standers by with his laments,
Strike more then wonder in the iudiciall eares,
Confound the ignorant, and make mute the wise,
Indeede his passion would be generall.
Yet I like to an asse and Iohn a Dreames,
Hauing my father murdred by a villaine,
Stand still, and let it passe, why sure I am a coward:
Who pluckes me by the beard, or twites my nose,
Giue's me the lie i'th throate downe to the lungs,
Sure I should take it, or else I haue no gall,
Or by this I should a fatted all the region kites
With this slaues offell, this damned villaine,
Treacherous, bawdy, murderous villaine:
Why this is braue, that I the sonne of my deare father,
Should like a scalion, like a very drabbe
Thus raile in wordes. About my braine,
I haue heard that guilty creatures sitting at a play,
Hath, by the very cunning of the scene, confest a murder
Committed long before.
This spirit that I haue seene may be the Diuell,
And out of my weakenesse and my melancholy,
As he is very potent with such men,
Doth seeke to damne me, I will haue sounder proofes,
The play's the thing,
|dialogWithStageDirectionFisco|k
|Wherein I'le catch the conscience of the King.|//exit.// |
@@.stageDirectionFisco
// Enter the King, Queene, and Lordes.//
@@
''//King//'' Lordes, can you by no meanes finde
The cause of our sonne Hamlets lunacie?
You being so neere in loue, euen from his youth,
Me thinkes should gaine more than a stranger should.
''//Gil.//'' My lord, we haue done all the best we could,
To wring from him the cause of all his griefe,
But still he puts vs off, and by no meanes
Would make an answere to that we exposde.
''//Ross.//'' Yet was he something more inclin'd to mirth
Before we left him, and I take it,
He hath giuen order for a play to night,
At which he craues your highnesse company.
''//King//'' With all our heart, it likes vs very well:
Gentlemen, seeke still to increase his mirth,
Spare for no cost, our coffers shall be open,
And we vnto your selues will still be thankefull.
''//Both//'' In all wee can, be sure you shall commaund.
''//Queene//'' Thankes gentlemen, and what the Queene of //Denmarke//
May pleasure you, be sure you shall not want.
''//Gil.//'' Weele once againe vnto the noble Prince.
''//King//'' Thanks to you both: Gertred you'l see this play.
''//Queene//'' My lord I will, and it ioyes me at the soule
He is inclin'd to any kinde of mirth.
''//Cor.//'' Madame, I pray be ruled by me:
And my good Soueraigne, giue me leaue to speake,
We cannot yet finde out the very ground
Of his distemperance, therefore
I holde it meete, if so it please you,
Else they shall not meete, and thus it is.
''//King//'' What i'st //Corambis?//
''//Cor.//'' Mary my good lord this, soone when the sports are done,
Madam, send you in haste to speake with him,
And I my selfe will stand behind the Arras,
There question you the cause of all his griefe,
And then in loue and nature vnto you, hee'le tell you all:
My Lord, how thinke you on't?
''//King//'' It likes vs well, Gerterd, what say you?
''//Queene//'' With all my heart, soone will I send for him.
''//Cor.//'' My selfe will be that happy messenger,
|dialogWithStageDirectionFisco|k
|Who hopes his griefe will be reueal'd to her.|// exeunt omnes//|
@@.stageDirectionFisco
// Enter Hamlet and the Players.//
@@
''//Ham.//'' Pronounce me this speech trippingly a the tongue
as I taught thee,
Mary and you mouth it, as a many of your players do
I'de rather heare a towne bull bellow,
Then such a fellow speake my lines.
Nor do not saw the aire thus with your hands,
But giue euery thing his action with temperance.
O it offends mee to the soule, to heare a rebustious periwig fellow,
To teare a passion in totters, into very ragges,
To split the eares of the ignoraut, who for the
Most parte are capable of nothing but dumbe shewes and noises,
I would haue such a fellow whipt, for o're doing, tarmagant
It out, Herodes Herod.
''//players//'' My Lorde, wee haue indifferently reformed that
among vs.
''//Ham.//'' The better, the better, mend it all together:
There be fellowes that I haue seene play,
And heard others commend them, and that highly too,
That hauing neither the gate of Christian, Pagan,
Nor Turke, haue so strutted and bellowed,
That you would a thought, some of Natures journeymen
Had made men, and not made them well,
They imitated humanitie, so abhominable:
Take heede, auoyde it.
''//players//'' I warrant you my Lord.
''//Ham.//'' And doe you heare? let not your Clowne speake
More then is set downe, there be of them I can tell you
That will laugh themselues, to set on some
Quantitie of barren spectators to laugh with them,
Albeit there is some necessary point in the Play
Then to be obserued: O t'is vile, and shewes
A pittifull ambition in the foole the vseth it.
And then you haue some agen, that keepes one sute
Os ieasts, as a man is knowne by one sute of
Apparell, and Gentlemen quotes his ieasts downe
In their tables, before they come to the play, as thus:
Cannot you stay till I eate my porrige? and, you owe me
A quarters wages: and, my coate wants a cullison:
And your beere is sowre: and, blabbering with his lips,
And thus keeping in his cinkapase of ieasts,
When, God knows, the warme Clowne cannot make a iest
Vnlesse by chance, as the blinde man catcheth a hare:
Maisters tell him of it.
''//players//'' We will my Lord.
|dialogWithStageDirectionFisco|k
|''//Ham.//'' Well, goe make you ready.|// exeunt players.//|
''//Horatio.//'' Heere my Lord.
''//Ham.//'' //Horatio,// thou art euen as iust a man,
As e're my conuersation cop'd withall.
''//Hor.//'' O my lord!
''//Ham.//'' Nay why should I flatter thee?
Why should the poore be flattered?
What gaine should I receiue by flattering thee,
That nothing hath but thy good minde?
Let flattery sit on those time-pleasing tongs,
To glose with them that loues to heare their praise,
And not with such as thou //Horatio.//
There is a play to night, wherein one Sceane they haue
Comes very neere the murder of my father,
When thou shalt see that Act afoote,
Marke thou the King, doe but obserue his lookes,
For I mine eies will riuet to his face:
And if he doe not bleach, and change at that,
It is a damned ghost that we haue seene.
//Horatio,// haue a care, obserue him well.
''//Hor.//'' My lord, mine eies shall still be on his face,
And not the smallest alteration
That shall appeare in him, but I shall note it.
''//Ham.//'' Harke, they come.
@@.stageDirectionFisco
// Enter King, Queene, Corambis, and other Lords.//
@@
''//King//'' How now son //Hamlet,// how fare you, shall we haue a play?
''//Ham.//'' Yfaith the Camelions dish, not capon cramm'd,
feede a the ayre.
I father: My lord, you playd in the Vniuersitie.
''//Cor.//'' That I did my L: and I was counted a good actor.
''//Ham.//'' What did you enact there?
''//Cor.//'' My lord, I did act //Iulius Cæsar,// I was killed
in the Capitoll, //Brutus// killed me.
''//Ham.//'' It was a brute parte of him,
To kill so capitall a calfe.
Come, be these Players ready?
''//Queene//'' Hamlet come sit downe by me.
''//Ham.//'' No by my faith mother, heere's a mettle more at- (tractiue:
Lady will you giue me leaue, and so forth:
To lay my head in your lappe?
''//Ofel.//'' No my Lord.
''//Ham.//'' Vpon your lap, what do you thinke I meant contrary matters?
@@.stageDirectionFisco
// Enter in a Dumbe Shew, the King and the Queene, he sits//
@@
@@.stageDirectionFisco
//downe in an Arbor, she leaues him: Then enters Luci//-
@@
@@.stageDirectionFisco
//anus with poyson in a Viall, and powres it in his eares, and//
@@
@@.stageDirectionFisco
//goes away: Then the Queene commeth and findes him//
@@
@@.stageDirectionFisco
//dead: and goes away with the other.//
@@
|dialogWithStageDirectionFisco|k
|''//Ofel.//'' What meanes this my Lord?|// Enter the Prologue.//|
''//Ham.//'' This is myching Mallico, that meanes my chiefe.
''//Ofel.//'' What doth this meane my lord?
''//Ham.//'' you shall heare anone, this fellow will tell you all.
''//Ofel.//'' Will he tell vs what this shew meanes?
''//Ham.//'' I, or any shew you'le shew him,
Be not afeard to shew, hee'le not be afeard to tell:
O these Players cannot keepe counsell, thei'le tell all.
''//Prol.//'' For vs, and for our Tragedie,
Heere stowpiug to your clemencie,
We begge your hearing patiently.
''//Ham.//'' I'st a prologue, or a poesie for a ring?
''//Ofel.//'' T'is short my Lord.
''//Ham.//'' As womens loue.
@@.stageDirectionFisco
// Enter the Duke and Dutchesse.//
@@
''//Duke//'' Full fortie yeares are past, their date is gone,
Since happy time ioyn'd both our hearts as one:
And now the blood that fill'd my youthfull veines,
Runnes weakely in their pipes, and all the straines
Of musicke, which whilome pleasde mine eare,
Is now a burthen that Age cannot beare:
And therefore sweete Nature must pay his due,
To heauen must I, and leaue the earth with you.
''//Dutchesse//'' O say not so, lest that you kill my heart,
When death takes you, let life from me depart.
''//Duke//'' Content thy selfe, when ended is my date,
Thon maist (perchance) haue a more noble mate,
More wise, more youthfull, and one.
''//Dutchesse//'' O speake no more for then I am accurst,
None weds the second, but she kils the first:
A second time I kill my Lord that's dead,
When second husband kisses me in bed.
''//Ham.//'' O wormewood, wormewood!
''//Duke//'' I doe beleeue you sweete, what now you speake,
But what we doe determine oft we breake,
For our demises stil are ouerthrowne,
Our thoughts are ours, their end's none of our owne:
So thinke you will no second husband wed,
But die thy thoughts, when thy first Lord is dead.
''//Dutchesse//'' Both here and there pursue me lasting strife,
If once a widdow, euer I be wife.
''//Ham.//'' If she should breake now.
''//Duke//'' T'is deepely sworne, sweete leaue me here a while,
My spirites growe dull, and faine I would beguile the tedi-
ous time with sleepe.
''//Dutchesse//'' Sleepe rocke thy braine,
And neuer come mischance betweene vs twaine. //exit Lady//
''//Ham.//'' Madam, how do you like this play?
''//Queene//'' The Lady protests too much.
''//Ham.//'' O but shee'le keepe her word.
''//King//'' Haue you heard the argument, is there no offence
in it?
''//Ham.//'' No offence in the world, poyson in iest, poison in iest.
''//King//'' What do you call the name of the play?
''//Ham.//'' Mouse-trap: mary how trapically: this play is
The image of a murder done in //guyana, Albertus//
Was the Dukes name, his wife //Baptista,//
Father, it is a knauish peece a worke: but what
A that, it toucheth not vs, you and I that haue free
Soules, let the galld iade wince, this is one
//Lucianus// nephew to the King.
''//Ofel.//'' Ya're as good as a //Chorus// my lord.
''//Ham.//'' I could interpret the loue you beare, if I sawe the
poopies dallying.
''//Ofel.//'' Y'are very pleasant my lord.
''//Ham.//'' Who I, your onlie jig-maker, why what shoulde
a man do but be merry? for looke how cheerefully my mo-
ther lookes, my father died within these two houres.
''//Ofel.//'' Nay, t'is twice two months, my Lord.
''//Ham.//'' Two months, nay then let the diuell weare blacke,
For i'le haue a sute of Sables: Iesus, two months dead,
And not forgotten yet? nay then there's some
Likelyhood, a gentlemans death may outliue memorie,
But by my faith hee must build churches then,
Or els hee must follow the olde Epitithe,
With hoh, with ho, the hobi-horse is forgot.
''//Ofel.//'' Your iests are keene my Lord.
''//Ham.//'' It would cost you a groning to take them off.
''//Ofel.//'' Still better and worse.
''//Ham.//'' So you must take your husband, begin. Murdred
Begin, a poxe, leaue thy damnable faces and begin,
Come, the croking rauen doth bellow for reuenge.
''//Murd.//'' Thoughts blacke, hands apt, drugs fit, and time agreeing.
Confederate season, else no creature seeing:
Thou mixture rancke, of midnight weedes collected,
With //Hecates// bane thrise blasted, thrise infected,
Thy naturall magicke, and dire propertie,
|dialogWithStageDirectionFisco|k
|One wholesome life vsurps immediately.|//exit.// |
''//Ham.//'' He poysons him for his estate.
''//King//'' Lights, I will to bed.
''//Cor.//'' The king rises, lights hoe.
@@.stageDirectionFisco
// Exeunt King and Lordes.//
@@
''//Ham.//'' What, frighted with false fires?
Then let the stricken deere goe weepe,
The Hart vngalled play,
For some must laugh, while some must weepe,
Thus runnes the world away.
''//Hor.//'' The king is mooued my lord.
''//Hor.//'' I //Horatio,// i'le take the Ghosts word
For more then all the coyne in //Denmarke.//
@@.stageDirectionFisco
// Enter Rossencraft and Gilderstone.//
@@
''//Ross.//'' Now my lord, how i'st with you?
''//Ham.//'' And if the king like not the tragedy,
Why then belike he likes it not perdy.
''//Ross.//'' We are very glad to see your grace so pleasant,
My good lord, let vs againe intreate
To know of you the ground and cause of your distemperature
''//Gil.//'' My lord, your mother craues to speake with you.
''//Ham.//'' We shall obey, were she ten times our mother.
''//Ross.//'' But my good Lord, shall I intreate thus much?
''//Ham.//'' I pray will you play vpon this pipe?
''//Ross.//'' Alas my lord I cannot.
''//Ham.//'' Pray will you.
''//Gil.//'' I haue no skill my Lord.
''//Ham.//'' why looke, it is a thing of nothing,
T'is but stopping of these holes,
And with a little breath from your lips,
It will giue most delicate musick.
''//Gil.//'' But this cannot wee do my Lord.
''//Ham.//'' Pray now, pray hartily, I beseech you.
''//Ros.//'' My lord wee cannot.
''//Ham.//'' Why how vnworthy a thing would you make of me?
You would seeme to know my stops, you would play vpon mee,
You would search the very inward part of my hart,
And diue into the secrect of my soule.
Zownds do you thinke I am easier to be pla'yd
On, then a pipe? call mee what Instrument
You will, though you can frett mee, yet you can not
Play vpon mee, besides, to be demanded by a spunge.
''//Ros.//'' How a spunge my Lord?
''//Ham.//'' I sir, a spunge, that sokes vp the kings
Countenance, fauours, and rewardes, that makes
His liberalitie your store house: but such as you,
Do the king, in the end, best seruise;
For hee doth keep you as an Ape doth nuttes,
In the corner of his Iaw, first mouthes you,
Then swallowes you: so when hee hath need
Of you, t'is but squeesing of you,
And spunge, you shall be dry againe, you shall.
''//Ros.//'' Wel my Lord wee'le take our leaue.
''//Ham//'' Farewell, farewell, God blesse you.
@@.stageDirectionFisco
// Exit Rossencraft and Gilderstone.//
@@
@@.stageDirectionFisco
// Enter Corambis//
@@
''//Cor.//'' My lord, the Queene would speake with you.
''//Ham.//'' Do you see yonder clowd in the shape of a camell?
''//Cor.//'' T'is like a camell in deed.
''//Ham.//'' Now me thinkes it's like a weasel.
''//Cor.//'' T'is back't like a weasell.
''//Ham.//'' Or like a whale.
|dialogWithStageDirectionFisco|k
|''//Cor.//'' Very like a whale. |//exit Coram.// |
''//Ham.//'' Why then tell my mother i'le come by and by.
Good night Horatio.
|dialogWithStageDirectionFisco|k
|''//Hor.//'' Good night vnto your Lordship.|//exit Horatio.//|
''//Ham.//'' My mother she hath sent to speake with me:
O God, let ne're the heart of //Nero// enter
This soft bosome.
Let me be cruell, not vnnaturall.
I will speake daggers, those sharpe wordes being spent,
|dialogWithStageDirectionFisco|k
|To doe her wrong my soule shall ne're consent.|//exit.//|
!!''Act 1''
@@.sceneHeaderFisco
''Scene 1: [[Elsinore]]. A platform before the castle.''
@@
@@.textAndFacsimiliesBlockFisco
* [[First Folio|Act 1, Scene 1 (First Folio)]]
* [[MIT|Act 1, Scene 1 (MIT)]]
* [[Quarto 1|Part 1 (Quarto 1)]]
* [[Quarto 2|Act 1, Scene 1 (Quarto 2)]]
Facsimiles:
* [[First Folio|http://internetshakespeare.uvic.ca/Library/facsimile/book/SLNSW_F1/760/?zoom=850]]
* [[Quarto 1|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q1_Ham/1/?zoom=550]]
* [[Quarto 2|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q2_Ham/3/?zoom=500]]
@@
@@.sceneHeaderFisco
''Scene 2: A room of state in the castle.''
@@
@@.textAndFacsimiliesBlockFisco
* [[First Folio|Act 1, Scene 2 (First Folio)]]
* [[MIT|Act 1, Scene 2 (MIT)]]
* [[Quarto 1|Part 2 (Quarto 1)]]
* [[Quarto 2|Act 1, Scene 2 (Quarto 2)]]
Facsimiles:
* [[First Folio|http://internetshakespeare.uvic.ca/Library/facsimile/book/SLNSW_F1/761/?zoom=850]]
* [[Quarto 1|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q1_Ham/5/?zoom=550]]
* [[Quarto 2|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q2_Ham/8/?zoom=500]]
@@
@@.sceneHeaderFisco
''Scene 3: A room in Polonius' house.''
@@
@@.textAndFacsimiliesBlockFisco
* [[First Folio|Act 1, Scene 3 (First Folio)]]
* [[MIT|Act 1, Scene 3 (MIT)]]
* [[Quarto 1|Part 3 (Quarto 1)]]
* [[Quarto 2|Act 1, Scene 3 (Quarto 2)]]
Facsimiles:
* [[First Folio|http://internetshakespeare.uvic.ca/Library/facsimile/book/SLNSW_F1/763/?zoom=850]]
* [[Quarto 1|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q1_Ham/10/?zoom=550]]
* [[Quarto 2|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q2_Ham/15/?zoom=500]]
@@
@@.sceneHeaderFisco
''Scene 4: The platform.''
@@
@@.textAndFacsimiliesBlockFisco
* [[First Folio|Act 1, Scene 4 (First Folio)]]
* [[MIT|Act 1, Scene 4 (MIT)]]
* [[Quarto 1|Part 4 (Quarto 1)]]
* [[Quarto 2|Act 1, Scene 4 (Quarto 2)]]
Facsimiles:
* [[First Folio|http://internetshakespeare.uvic.ca/Library/facsimile/book/SLNSW_F1/764/?zoom=850]]
* [[Quarto 1|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q1_Ham/12/?zoom=550]]
* [[Quarto 2|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q2_Ham/19/?zoom=500]]
@@
@@.sceneHeaderFisco
''Scene 5: Another part of the platform.''
@@
@@.textAndFacsimiliesBlockFisco
* [[First Folio|Act 1, Scene 5 (First Folio)]]
* [[MIT|Act 1, Scene 5 (MIT)]]
* [[Quarto 1|Part 5 (Quarto 1)]]
* [[Quarto 2|Act 1, Scene 5 (Quarto 2)]]
Facsimiles:
* [[First Folio|http://internetshakespeare.uvic.ca/Library/facsimile/book/SLNSW_F1/765/?zoom=850]]
* [[Quarto 1|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q1_Ham/14/?zoom=550]]
* [[Quarto 2|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q2_Ham/21/?zoom=500]]
@@
-----
!!''Act 2''
@@.sceneHeaderFisco
''Scene 1: A room in Polonius' house.''
@@
@@.textAndFacsimiliesBlockFisco
* [[First Folio|Act 2, Scene 1 (First Folio)]]
* [[MIT|Act 2, Scene 1 (MIT)]]
* [[Quarto 1|Part 6 (Quarto 1)]]
* [[Quarto 2|Act 2, Scene 1 (Quarto 2)]]
Facsimiles:
* [[First Folio|http://internetshakespeare.uvic.ca/Library/facsimile/book/SLNSW_F1/767/?zoom=850]]
* [[Quarto 1|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q1_Ham/19/?zoom=550]]
* [[Quarto 2|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q2_Ham/27/?zoom=500]]
@@
@@.sceneHeaderFisco
''Scene 2: A room in the castle.''
@@
@@.textAndFacsimiliesBlockFisco
* [[First Folio|Act 2, Scene 2 (First Folio)]]
* [[MIT|Act 2, Scene 2 (MIT)]]
* [[Quarto 1|Part 7 (Quarto 1)]]
* [[Quarto 2|Act 2, Scene 2 (Quarto 2)]]
Facsimiles:
* [[First Folio|http://internetshakespeare.uvic.ca/Library/facsimile/book/SLNSW_F1/768/?zoom=850]]
* [[Quarto 1|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q1_Ham/21/?zoom=550]]
* [[Quarto 2|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q2_Ham/30/?zoom=500]]
@@
-----
!!''Act 3''
@@.sceneHeaderFisco
''Scene 1: A room in the castle.''
@@
@@.textAndFacsimiliesBlockFisco
* [[First Folio|Act 3, Scene 1 (First Folio)]]
* [[MIT|Act 3, Scene 1 (MIT)]]
* [[Quarto 1|Part 8 (Quarto 1)]]
* [[Quarto 2|Act 3, Scene 1 (Quarto 2)]]
Facsimiles:
* [[First Folio|http://internetshakespeare.uvic.ca/Library/facsimile/book/SLNSW_F1/772/?zoom=850]]
* [[Quarto 1|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q1_Ham/33/?zoom=550]]
* [[Quarto 2|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q2_Ham/43/?zoom=500]]
@@
@@.sceneHeaderFisco
''Scene 2: A hall in the castle.''
@@
@@.textAndFacsimiliesBlockFisco
* [[First Folio|Act 3, Scene 2 (First Folio)]]
* [[MIT|Act 3, Scene 2 (MIT)]]
* [[Quarto 1|Part 9 (Quarto 1)]]
* [[Quarto 2|Act 3, Scene 2 (Quarto 2)]]
Facsimiles:
* [[First Folio|http://internetshakespeare.uvic.ca/Library/facsimile/book/SLNSW_F1/774/?zoom=850]]
* [[Quarto 1|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q1_Ham/35/?zoom=550]]
* [[Quarto 2|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q2_Ham/48/?zoom=500]]
@@
@@.sceneHeaderFisco
''Scene 3: A room in the castle.''
@@
@@.textAndFacsimiliesBlockFisco
* [[First Folio|Act 3, Scene 3 (First Folio)]]
* [[MIT|Act 3, Scene 3 (MIT)]]
* [[Quarto 1|Part 10 (Quarto 1)]]
* [[Quarto 2|Act 3, Scene 3 (Quarto 2)]]
Facsimiles:
* [[First Folio|http://internetshakespeare.uvic.ca/Library/facsimile/book/SLNSW_F1/777/?zoom=850]]
* [[Quarto 1|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q1_Ham/42/?zoom=550]]
* [[Quarto 2|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q2_Ham/58/?zoom=500]]
@@
@@.sceneHeaderFisco
''Scene 4: The Queen's closet.''
@@
@@.textAndFacsimiliesBlockFisco
* [[First Folio|Act 3, Scene 4 (First Folio)]]
* [[MIT|Act 3, Scene 4 (MIT)]]
* [[Quarto 1|Part 11 (Quarto 1)]]
* [[Quarto 2|Act 3, Scene 4 (Quarto 2)]]
Facsimiles:
* [[First Folio|http://internetshakespeare.uvic.ca/Library/facsimile/book/SLNSW_F1/778/?zoom=850]]
* [[Quarto 1|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q1_Ham/43/?zoom=550]]
* [[Quarto 2|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q2_Ham/61/?zoom=500]]
@@
-----
!!''Act 4''
@@.sceneHeaderFisco
''Scene 1: A room in the castle.''
@@
@@.textAndFacsimiliesBlockFisco
* [[First Folio|Act 4, Scene 1 (First Folio)]]
* [[MIT|Act 4, Scene 1 (MIT)]]
* [[Quarto 2|Act 4, Scene 1 (Quarto 2)]]
Facsimiles:
* [[First Folio|http://internetshakespeare.uvic.ca/Library/facsimile/book/SLNSW_F1/780/?zoom=850]]
* [[Quarto 2|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q2_Ham/67/?zoom=500]]
@@
@@.sceneHeaderFisco
''Scene 2: Another room in the castle.''
@@
@@.textAndFacsimiliesBlockFisco
* [[First Folio|Act 4, Scene 2 (First Folio)]]
* [[MIT|Act 4, Scene 2 (MIT)]]
* [[Quarto 2|Act 4, Scene 2 (Quarto 2)]]
Facsimiles:
* [[First Folio|http://internetshakespeare.uvic.ca/Library/facsimile/book/SLNSW_F1/780/?zoom=850]]
* [[Quarto 2|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q2_Ham/68/?zoom=500]]
@@
@@.sceneHeaderFisco
''Scene 3: Another room in the castle.''
@@
@@.textAndFacsimiliesBlockFisco
* [[First Folio|Act 4, Scene 3 (First Folio)]]
* [[MIT|Act 4, Scene 3 (MIT)]]
* [[Quarto 2|Act 4, Scene 3 (Quarto 2)]]
Facsimiles:
* [[First Folio|http://internetshakespeare.uvic.ca/Library/facsimile/book/SLNSW_F1/780/?zoom=850]]
* [[Quarto 2|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q2_Ham/69/?zoom=500]]
@@
@@.sceneHeaderFisco
''Scene 4: A plain in Denmark.''
@@
@@.textAndFacsimiliesBlockFisco
* [[First Folio|Act 4, Scene 4 (First Folio)]]
* [[MIT|Act 4, Scene 4 (MIT)]]
* [[Quarto 1|Part 12 (Quarto 1)]]
* [[Quarto 2|Act 4, Scene 4 (Quarto 2)]]
Facsimiles:
* [[First Folio|http://internetshakespeare.uvic.ca/Library/facsimile/book/SLNSW_F1/781/?zoom=850]]
* [[Quarto 1|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q1_Ham/48/?zoom=550]]
* [[Quarto 2|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q2_Ham/71/?zoom=500]]
@@
@@.sceneHeaderFisco
''Scene 5: Elsinore. A room in the castle.''
@@
@@.textAndFacsimiliesBlockFisco
* [[First Folio|Act 4, Scene 5 (First Folio)]]
* [[MIT|Act 4, Scene 5 (MIT)]]
* [[Quarto 1|Part 13 (Quarto 1)]]
* [[Quarto 2|Act 4, Scene 5 (Quarto 2)]]
Facsimiles:
* [[First Folio|http://internetshakespeare.uvic.ca/Library/facsimile/book/SLNSW_F1/781/?zoom=850]]
* [[Quarto 1|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q1_Ham/48/?zoom=550]]
* [[Quarto 2|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q2_Ham/72/?zoom=500]]
@@
@@.sceneHeaderFisco
''Scene 6: Another room in the castle.''
@@
@@.textAndFacsimiliesBlockFisco
* [[First Folio|Act 4, Scene 6 (First Folio)]]
* [[MIT|Act 4, Scene 6 (MIT)]]
* [[Quarto 1|Part 14 (Quarto 1)]]
* [[Quarto 2|Act 4, Scene 6 (Quarto 2)]]
Facsimiles:
* [[First Folio|http://internetshakespeare.uvic.ca/Library/facsimile/book/SLNSW_F1/783/?zoom=850]]
* [[Quarto 1|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q1_Ham/52/?zoom=550]]
* [[Quarto 2|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q2_Ham/78/?zoom=500]]
@@
@@.sceneHeaderFisco
''Scene 7: Another room in the castle.''
@@
@@.textAndFacsimiliesBlockFisco
* [[First Folio|Act 4, Scene 7 (First Folio)]]
* [[MIT|Act 4, Scene 7 (MIT)]]
* [[Quarto 1|Part 15 (Quarto 1)]]
* [[Quarto 2|Act 4, Scene 7 (Quarto 2)]]
Facsimiles:
* [[First Folio|http://internetshakespeare.uvic.ca/Library/facsimile/book/SLNSW_F1/783/?zoom=850]]
* [[Quarto 1|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q1_Ham/53/?zoom=550]]
* [[Quarto 2|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q2_Ham/79/?zoom=500]]
@@
-----
!!''Act 5''
@@.sceneHeaderFisco
''Scene 1: A churchyard.''
@@
@@.textAndFacsimiliesBlockFisco
* [[First Folio|Act 5, Scene 1 (First Folio)]]
* [[MIT|Act 5, Scene 1 (MIT)]]
* [[Quarto 1|Part 16 (Quarto 1)]]
* [[Quarto 2|Act 5, Scene 1 (Quarto 2)]]
Facsimiles:
* [[First Folio|http://internetshakespeare.uvic.ca/Library/facsimile/book/SLNSW_F1/784/?zoom=850]]
* [[Quarto 1|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q1_Ham/54/?zoom=550]]
* [[Quarto 2|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q2_Ham/84/?zoom=500]]
@@
@@.sceneHeaderFisco
''Scene 2: A hall in the castle.''
@@
@@.textAndFacsimiliesBlockFisco
* [[First Folio|Act 5, Scene 2 (First Folio)]]
* [[MIT|Act 5, Scene 2 (MIT)]]
* [[Quarto 1|Part 17 (Quarto 1)]]
* [[Quarto 2|Act 5, Scene 2 (Quarto 2)]]
Facsimiles:
* [[First Folio|http://internetshakespeare.uvic.ca/Library/facsimile/book/SLNSW_F1/787/?zoom=850]]
* [[Quarto 1|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q1_Ham/59/?zoom=550]]
* [[Quarto 2|http://internetshakespeare.uvic.ca/Library/facsimile/book/BL_Q2_Ham/91/?zoom=500]]
@@
a play by William Shakespeare
[[Scene List]]
[[Synchronized texts of Quarto 1, Quarto 2 and First Folio|http://www.thewoostergroup.org/projects/hamlet/Q1Q2F.html]]