<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml'/>
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity:60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0em 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0em 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0em 0em 0em; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0em;}
.wizardFooter .status {padding:0em 0.4em 0em 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em 0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0em; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em 0.2em 0.2em 0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0em;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0em 0em 0.5em;}
.tab {margin:0em 0em 0em 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0em 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0em 1em;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0em 0.25em; padding:0em 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px 1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}
#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em 0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none ! important;}
#displayArea {margin: 1em 1em 0em 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
noscript {display:none;}
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>
<!--}}}-->
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:
* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* MainMenu: The menu (usually on the left)
* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These InterfaceOptions for customising TiddlyWiki are saved in your browser

Your username for signing your edits. Write it as a WikiWord (eg JoeBloggs)

<<option txtUserName>>
<<option chkSaveBackups>> SaveBackups
<<option chkAutoSave>> AutoSave
<<option chkRegExpSearch>> RegExpSearch
<<option chkCaseSensitiveSearch>> CaseSensitiveSearch
<<option chkAnimate>> EnableAnimations

----
Also see AdvancedOptions
<<importTiddlers>>
Este material foi baseado nas notas de aula dos Profs. Carlos Henrique C. Ribeiro e Celso Renna.
/***
|Name|AliasPlugin|
|Source|http://www.TiddlyTools.com/#AliasPlugin|
|Documentation|http://www.TiddlyTools.com/#AliasPluginInfo|
|Version|1.1.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|Create text-substitution macros|
Define macros for abbreviations and other "aliases", and then embed them in the rest of your tiddler content to quickly insert common terms, phrases and links without a lot of repetitive typing.
!!!!!Documentation
> see [[AliasPluginInfo]]
!!!!!Revisions
<<<
2008.03.11 [*.*.*] plugin size reduction - documentation moved to [[AliasPluginInfo]]
2007.03.21 [1.1.0] added support for parameter substitution into alias macros, using format() method and%0..%9 markers
| Please see [[AliasPluginInfo]] for previous revision details |
2005.08.12 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.alias= {major: 1, minor: 1, revision: 0, date: new Date(2007,3,21)};
config.macros.alias= { };
config.macros.alias.handler = function(place,macroName,params) {
	var alias=params.shift(); if (!alias) return; alias=alias.replace(/ /g,"_"); // don't allow spaces in alias
	if (config.macros[alias]==undefined) // create new macro (as needed)
		{	 
		config.macros[alias] = { };
		config.macros[alias].handler =
			function (place,macroName,params)
				{ wikify(config.macros[macroName].text.format(params),place,null,null); }
		}
	config.macros[alias].text = params[0]?params.join(' '):alias;	// set alias text
}
//}}}
/***
|Name|AliasPlugin|
|Source|http://www.TiddlyTools.com/#AliasPlugin|
|Documentation|http://www.TiddlyTools.com/#AliasPluginInfo|
|Version|1.1.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|documentation|
|Requires||
|Overrides||
|Description|documentation for AliasPlugin|
Define macros for abbreviations and other "aliases", and then embed them in the rest of your tiddler content to quickly insert common terms, phrases and links without a lot of repetitive typing.
!!!!!Usage
<<<
First, decide upon a suitable "alias" for the text to be substituted.  This is usually a short keyword or other abbreviated term that is easily input with just a few keystrokes.  You can use any alias you like, but don't include any spaces in the alias name, since it will be used as the name of the 'alias macro' that is created, and macro names cannot contain spaces.

//Note: If you use an alias name that ''does'' contain spaces, they will be automatically replaced with underscores ("_"), so that the resulting alias name will still be a valid macro name//

To create alias definitions, embed {{{<<alias newname "text to display"}}} >> macros in a tiddler.  These macros don't actually produce any visible output, but simply define the alias macros that you want to use in your document, and thus they can be safely added to practically any tiddler without producing a change in that tiddler's appearance.

//Note: In order to ensure that your aliases are defined and available for use throughout your document, you should add your definitions to a tiddler that you are certain will be displayed when your TW is first loaded, such as //[[MainMenu]]// or //[[SiteTitle]]// (or, any tiddler listed in //[[DefaultTiddlers]]//).//

Then, you can use the aliases you have defined like this: {{{<<newname>>}}}.  You can include additional parameters when you invoke the macro: {{{<<newname param param param...>>}}}.  These parameters are inserted into the macro's "text to display" by substituting for %0...%9 markers.  

For example, to define a quick alias for inserting a link to any given subject on www.wikipedia.com, you can write:
{{{
<<alias wikipedia "[[Wikipedia:%0|http://www.wikipedia.com/wiki/%0]]">>
}}}
which allows you to then write:
{{{
<<wikipedia TiddlyWiki>>
}}}
which is processed as if you wrote:
{{{
[[Wikipedia:TiddlyWiki|http://www.wikipedia.com/wiki/TiddlyWiki]]
}}}
and is displayed this way:
><<alias wikipedia "[[Wikipedia:%0|http://www.wikipedia.com/wiki/%0]]">><<wikipedia TiddlyWiki>>

Another interesting example uses the substitution markers to automatically display a reference to a TiddlerSlice value:
{{{
<<alias describe {{"\<\<tiddler [[%0::Description]]\>\>"}}>>
}}}
which allows you to then write:
{{{
<<describe AliasPlugin>>
}}}
which is processed as if you wrote:
{{{
<<tiddler [[AliasPlugin::Description]]>>
}}}
and is displayed this way:
><<alias describe {{"\<\<tiddler [[%0::Description]]\>\>"}}>><<describe AliasPlugin>>
<<<
!!!!!Examples
<<<
<<alias>> {{{<<alias>>}}}
missing alias name: fail safe, do nothing

<<alias alias1>> {{{<<alias alias1>>}}}
missing text params, default to text=name (e.g., "<<alias1>>")

<<alias alias2 simple multi-word text substitution>> {{{<<alias alias2 simple multi-word text substitution>>}}}
<<alias2>>

<<alias "alias3 with spaces" "spaces in aliasname converted to _">> {{{<<alias "alias3 with spaces" "spaces in aliasname converted to _ ">>}}}
<<alias3_with_spaces>>

<<alias alias4 "multi-line 
text
substitution">> {{{<<alias alias4 "multi-line
text
substitution">>}}}
<<alias4>>
<<<
!!!!!Revisions
<<<
2008.03.11 [*.*.*] plugin size reduction - documentation moved to [[AliasPluginInfo]]
2007.03.21 [1.1.0] added support for parameter substitution into alias macros, using format() method and%0..%9 markers
2005.10.09 [1.0.3] combined documentation and code into a single tiddler
2005.08.12 [1.0.0] initial release
<<<
* projeto de hardware (circuitos seqüenciais) e de software (máquinas de estado).
* processamento de texto (corretor ortográfico, reformatação, colorir sintaxe).
* compiladores (análise léxica, sintática, geração de código).
* análise de padrões (combinar modelos matemáticos na forma de linguagens com fenômenos naturais, recursão)


<<tiddler NextTiddler with: [[Problemas não computáveis]]>>
text/plain
.txt .text .js .vbs .asp .cgi .pl
----
text/html
.htm .html .hta .htx .mht
----
text/comma-separated-values
.csv
----
text/javascript
.js
----
text/css
.css
----
text/xml
.xml .xsl .xslt
----
image/gif
.gif
----
image/jpeg
.jpg .jpe .jpeg
----
image/png
.png
----
image/bmp
.bmp
----
image/tiff
.tif .tiff
----
audio/basic
.au .snd
----
audio/wav
.wav
----
audio/x-pn-realaudio
.ra .rm .ram
----
audio/x-midi
.mid .midi
----
audio/mp3
.mp3
----
audio/m3u
.m3u
----
video/x-ms-asf
.asf
----
video/avi
.avi
----
video/mpeg
.mpg .mpeg
----
video/quicktime
.qt .mov .qtvr
----
application/pdf
.pdf
----
application/rtf
.rtf
----
application/postscript
.ai .eps .ps
----
application/wordperfect
.wpd
----
application/mswrite
.wri
----
application/msexcel
.xls .xls3 .xls4 .xls5 .xlw
----
application/msword
.doc
----
application/mspowerpoint
.ppt .pps
----
application/x-director
.swa
----
application/x-shockwave-flash
.swf
----
application/x-zip-compressed
.zip
----
application/x-gzip
.gz
----
application/x-rar-compressed
.rar
----
application/octet-stream
.com .exe .dll .ocx
----
application/java-archive
.jar
[[AttachFilePlugin]] reads binary data from locally-stored files (e.g., images, PDFs, mp3's, etc.) and converts it to base64-encoded text that is stored in tiddlers tagged with<<tag attachment>>. [[AttachFilePluginFormatters]] allows you to use those tiddlers in place of the external path/file references that are normally part of the image and external links wiki syntax.

[[FileDropPlugin]] and [[FileDropPluginConfig]] allow you to quickly create attachment tiddlers simply by dragging files directly from your system's desktop folder display and dropping it onto an open TiddlyWiki document.  Text files are automatically created as simple tiddlers, while binary files are automatically encoded and attached.
/***
|Name|AttachFilePlugin|
|Source|http://www.TiddlyTools.com/#AttachFilePlugin|
|Documentation|http://www.TiddlyTools.com/#AttachFilePluginInfo|
|Version|3.8.1|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires|AttachFilePluginFormatters, AttachFileMIMETypes|
|Overrides||
|Description|Store binary files as base64-encoded tiddlers with fallback links for separate local and/or remote file storage|
Store or link binary files (such as jpg, gif, pdf or even mp3) within your TiddlyWiki document and then use them as images or links from within your tiddler content.
> Important note: As of version 3.6.0, in order to //render// images and other binary attachments created with this plugin, you must also install [[AttachFilePluginFormatters]], which extends the behavior of the TiddlyWiki core formatters for embedded images ({{{[img[tooltip|image]]}}}), linked embedded images ({{{[img[tooltip|image][link]]}}}), and external/"pretty" links ({{{[[label|link]]}}}), so that these formatter will process references to attachment tiddlers as if a normal file reference had been provided. |
!!!!!Documentation
>see [[AttachFilePluginInfo]]
!!!!!Inline interface (live)
>see [[AttachFile]] (shadow tiddler)
><<tiddler AttachFile>>
!!!!!Revisions
<<<
2008.05.12 [3.8.1] automatically add 'attach' task to backstage (moved from BackstageTweaks)
2008.04.09 [3.8.0] in onChangeSource(), if source matches current document folder, use relative reference for local link.  Also, disable 'embed' when using IE (which //still// doesn't support data: URI)
2008.04.07 [3.7.3] fixed typo in HTML for 'local file link' so that clicking in input field doesn't erase current path/file (if any)
2008.04.07 [3.7.2] auto-create AttachFile shadow tiddler for inline interface
2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info
2007.12.04 [*.*.*] update for TW2.3.0: replaced deprecated core functions, regexps, and macros
2007.12.03 [3.7.1] in createAttachmentTiddler(), added optional "noshow" flag to suppress display of newly created tiddlers.
|please see [[AttachFilePluginInfo]] for additional revision details|
2005.07.20 [1.0.0] Initial Release
<<<
!!!!!Code
***/
// // version
//{{{
version.extensions.attach = {major: 3, minor: 8, revision: 1, date: new Date(2008,5,12)};

// shadow tiddler
config.shadowTiddlers.AttachFile="<<attach inline>>";

// add 'attach' backstage task (insert before built-in 'importTask')
if (config.tasks) { // for TW2.2b or above
	config.tasks.attachTask = {
		text: "attach",
		tooltip: "Attach a binary file as a tiddler",
		content: "<<attach inline>>"
	}
	config.backstageTasks.splice(config.backstageTasks.indexOf("importTask"),0,"attachTask");
}

config.macros.attach = {
// // lingo
//{{{
	label: "attach file",
	tooltip: "Attach a file to this document",
	linkTooltip: "Attachment: ",

	typeList: "AttachFileMIMETypes",

	titlePrompt: " enter tiddler title...",
	MIMEPrompt: "<option value=''>select MIME type...</option><option value='editlist'>[edit list...]</option>",
	localPrompt: " enter local path/filename...",
	URLPrompt: " enter remote URL...",

	tiddlerErr: "Please enter a tiddler title",
	sourceErr: "Please enter a source path/filename",
	storageErr: "Please select a storage method: embedded, local or remote",
	MIMEErr: "Unrecognized file format.  Please select a MIME type",
	localErr: "Please enter a local path/filename",
	URLErr: "Please enter a remote URL",
	fileErr: "Invalid path/file or file not found",

	sourceReport: "| source file:|{{{%0}}}|\n",
	nosourceReport: "| source file:|//none//|\n",
	dateReport: "| attached on:|%0 by %1|\n",
	notesReport: "| description:|%0|\n",
	dataReport: "| embedded:|[[%0|%0]] - {{{type=%1, size=%2 bytes, encoded=%3 bytes}}}|\n",
	nodataReport: "| embedded:|//none//|\n",
	localReport: "| local file:|/%LOCAL_LINK%/[[%0|%1]]|\n",
	nolocalReport: "| local file:|//none//|\n",
	URLReport: "| remote link:|/%REMOTE_LINK%/[[%0|%0]]|\n",
	noURLReport: "| remote link:|//none//|\n",

	imageReport: "image\n<<<\nusage: {{{[img[tooltip|%0]] or [img[tooltip|%0][link]]}}}\n[img[tooltip|%0]]\n<<<\n",
	dataBlock: "\n/% DO NOT EDIT BELOW THIS POINT\n---BEGIN_DATA---\n%0;base64,\n%1\n---END_DATA---\n%/",
//}}}
// // macro definition
//{{{
	handler:
	function(place,macroName,params) {
		if (params && !params[0]) { createTiddlyButton(place,this.label,this.tooltip,this.toggleAttachPanel); return; }
		var id=params.shift();
		this.createAttachPanel(place,id+"_attachPanel",params);
		document.getElementById(id+"_attachPanel").style.position="static";
		document.getElementById(id+"_attachPanel").style.display="block";
	},
//}}}
//{{{
	createAttachPanel:
	function(place,panel_id,params) {
		if (!panel_id || !panel_id.length) var panel_id="_attachPanel";
		// remove existing panel (if any)
		var panel=document.getElementById(panel_id); if (panel) panel.parentNode.removeChild(panel);
		// set styles for this panel
		setStylesheet(this.css,"attachPanel");
		// create new panel
		var title=""; if (params && params[0]) title=params.shift();
		var types=this.MIMEPrompt+this.formatListOptions(store.getTiddlerText(this.typeList)); // get MIME types
		panel=createTiddlyElement(place,"span",panel_id,"attachPanel",null);
		var html=this.html.replace(/%id%/g,panel_id);
		html=html.replace(/%title%/g,title);
		html=html.replace(/%disabled%/g,title.length?"disabled":"");
		html=html.replace(/%IEdisabled%/g,config.browser.isIE?"disabled":"");
		html=html.replace(/%types%/g,types);
		panel.innerHTML=html;
		return panel;
	},
//}}}
//{{{
	toggleAttachPanel:
	function (e) {
		if (!e) var e = window.event;
		var parent=resolveTarget(e).parentNode;
		var panel = document.getElementById("_attachPanel");
		if (panel==undefined || panel.parentNode!=parent)
			panel=config.macros.attach.createAttachPanel(parent,"_attachPanel");
		var isOpen = panel.style.display=="block";
		if(config.options.chkAnimate)
			anim.startAnimating(new Slider(panel,!isOpen,e.shiftKey || e.altKey,"none"));
		else
			panel.style.display = isOpen ? "none" : "block" ;
		e.cancelBubble = true;
		if (e.stopPropagation) e.stopPropagation();
		return(false);
	},
//}}}
//{{{
	formatListOptions:
	function(text) {
		if (!text || !text.trim().length) return "";
		// get MIME list content from text
		var parts=text.split("\n----\n");
		var out="";
		for (var p=0; p<parts.length; p++) {
			var lines=parts[p].split("\n");
			var label=lines.shift(); // 1st line=display text
			var value=lines.shift(); // 2nd line=item value
			out +='<option value="%1">%0</option>'.format([label,value]);
		}
		return out;
	},
//}}}
// // interface definition
//{{{
	css:
	".attachPanel { display: none; position:absolute; z-index:10; width:35em; right:105%; top:0em;\
		background-color: #eee; color:#000; font-size: 8pt; line-height:110%;\
		border:1px solid black; border-bottom-width: 3px; border-right-width: 3px;\
		padding: 0.5em; margin:0em; -moz-border-radius:1em; text-align:left }\
	.attachPanel form { display:inline;border:0;padding:0;margin:0; }\
	.attachPanel select { width:99%;margin:0px;font-size:8pt;line-height:110%;}\
	.attachPanel input  { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%}\
	.attachPanel textarea { width:98%;margin:0px;height:2em;font-size:8pt;line-height:110%}\
	.attachPanel table { width:100%;border:0;margin:0;padding:0;color:inherit; }\
	.attachPanel tbody, .attachPanel tr, .attachPanel td { border:0;margin:0;padding:0;color:#000; }\
	.attachPanel .box { border:1px solid black; padding:.3em; margin:.3em 0px; background:#f8f8f8; -moz-border-radius:5px; }\
	.attachPanel .chk { width:auto;border:0; }\
	.attachPanel .btn { width:auto; }\
	.attachPanel .btn2 { width:49%; }\
	",
//}}}
//{{{
	html:
	'<form>\
		attach from source file <input type="file" name="source" size=56 onChange="config.macros.attach.onChangeSource(this)">\
		<div class="box">\
		<table style="border:0"><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
			embed data <input type=checkbox class=chk name="useData" %IEdisabled% \
				onclick="if (!this.form.MIMEType.value.length)\
					this.form.MIMEType.selectedIndex=this.checked?1:0; ">&nbsp;\
		</td><td style="border:0">\
			<select size=1 name="MIMEType" \
				onchange="this.title=this.value; if (this.value==\'editlist\')\
					{ this.selectedIndex=this.form.useData.checked?1:0; story.displayTiddler(null,config.macros.attach.typeList,2); return; }">\
				<option value=""></option>\
				%types%\
			</select>\
		</td></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
			local link <input type=checkbox class=chk name="useLocal"\
				onclick="this.form.local.value=this.form.local.defaultValue=this.checked?config.macros.attach.localPrompt:\'\';">&nbsp;\
		</td><td style="border:0">\
			<input type=text name="local" size=15 autocomplete=off value=""\
				onchange="this.form.useLocal.checked=this.value.length" \
				onkeyup="this.form.useLocal.checked=this.value.length" \
				onfocus="if (!this.value.length) this.value=config.macros.attach.localPrompt; this.select()">\
		</td></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
			remote link <input type=checkbox class=chk name="useURL"\
				onclick="this.form.URL.value=this.form.URL.defaultValue=this.checked?config.macros.attach.URLPrompt:\'\';\">&nbsp;\
		</td><td style="border:0">\
			<input type=text name="URL" size=15 autocomplete=off value=""\
				onfocus="if (!this.value.length) this.value=config.macros.attach.URLPrompt; this.select()"\
				onchange="this.form.useURL.checked=this.value.length;"\
				onkeyup="this.form.useURL.checked=this.value.length;">\
		</td></tr></table>\
		</div>\
		<table style="border:0"><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
			attach as&nbsp;\
		</td><td style="border:0" colspan=2>\
			<input type=text name="tiddlertitle" size=15 autocomplete=off value="%title%"\
				onkeyup="if (!this.value.length) { this.value=config.macros.attach.titlePrompt; this.select(); }"\
				onfocus="if (!this.value.length) this.value=config.macros.attach.titlePrompt; this.select()" %disabled%>\
		</td></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
			description&nbsp;\
		</td><td style="border:0" colspan=2>\
			<input type=text name="notes" size=15 autocomplete=off>\
		</td></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
			add tags&nbsp;\
		</td><td style="border:0">\
			<input type=text name="tags" size=15 autocomplete=off value="" onfocus="this.select()">\
		</td><td style="width:40%;text-align:right;border:0">\
			<input type=button class=btn2 value="attach"\
				onclick="config.macros.attach.onClickAttach(this)"><!--\
			--><input type=button class=btn2 value="close"\
				onclick="var panel=document.getElementById(\'%id%\'); if (panel) panel.parentNode.removeChild(panel);">\
		</td></tr></table>\
	</form>',
//}}}
// // control processing
//{{{
	onChangeSource:
	function(here) {
		var form=here.form;
		var list=form.MIMEType;
		var theFilename  = form.source.value;
		var theExtension = theFilename.substr(theFilename.lastIndexOf('.')).toLowerCase();
		// if theFilename is in current document folder, remove path prefix and use relative reference
		var h=document.location.href; folder=getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf("/")+1)));
		if (theFilename.substr(0,folder.length)==folder) theFilename='./'+theFilename.substr(folder.length);
		else theFilename='file:///'+theFilename; // otherwise, use absolute reference
		theFilename=theFilename.replace(/\\/g,"/"); // fixup: change \ to /
		form.useLocal.checked = true;
		form.local.value = theFilename;
		form.useData.checked = !form.useData.disabled;
		list.selectedIndex=1;
		for (var i=0; i<list.options.length; i++) // find matching MIME type
			if (list.options[i].value.indexOf(theExtension)!=-1) { list.selectedIndex = i; break; }
		if (!form.tiddlertitle.disabled)
			form.tiddlertitle.value=theFilename.substr(theFilename.lastIndexOf('/')+1); // get tiddlername from filename
	},
//}}}
//{{{
	onClickAttach:
	function (here) {
		clearMessage();
		// get input values
		var form=here.form;
		var theDate=(new Date()).formatString(config.macros.timeline.dateFormat);
		var theSource = form.source.value!=form.source.defaultValue?form.source.value:"";
		var theTitle=form.tiddlertitle.value;
		var theLocal = form.local.value!=form.local.defaultValue?form.local.value:"";
		var theURL = form.URL.value!=form.URL.defaultValue?form.URL.value:"";
		var theNotes = form.notes.value;
		var theTags = "attachment excludeMissing "+form.tags.value;
		var useData=form.useData.checked;
		var useLocal=form.useLocal.checked;
		var useURL=form.useURL.checked;
		var theMIMEType = form.MIMEType.value.length?form.MIMEType.options[form.MIMEType.selectedIndex].text:"";
		// validate checkboxes and get filename
		if (useData) {
			if (theSource.length) { if (!theLocation) var theLocation=theSource; }
			else { alert(this.sourceErr); form.source.focus(); return false; }
		}
		if (useLocal) {
			if (theLocal.length) { if (!theLocation) var theLocation = theLocal; }
			else { alert(this.localErr); form.local.focus(); return false; }
		}
		if (useURL) {
			if (theURL.length) { if (!theLocation) var theLocation = theURL; }
			else { alert(this.URLErr); form.URL.focus(); return false; }
		}
		if (!(useData||useLocal||useURL))
			{ form.useData.focus(); alert(this.storageErr); return false; }
		if (!theLocation)
			{ form.source.focus(); alert(this.sourceErr); return false; }
		if (!theTitle || !theTitle.trim().length || theTitle==this.titlePrompt)
			{ form.tiddlertitle.focus(); alert(this.tiddlerErr); return false; }
		// if not already selected, determine MIME type based on filename extension (if any)
		if (useData && !theMIMEType.length && theLocation.lastIndexOf('.')!=-1) {
			var theExt = theLocation.substr(theLocation.lastIndexOf('.')).toLowerCase();
			var theList=form.MIMEType;
			for (var i=0; i<theList.options.length; i++)
				if (theList.options[i].value.indexOf(theExt)!=-1)
					{ var theMIMEType=theList.options[i].text; theList.selectedIndex=i; break; }
		}
		// attach the file
		return this.createAttachmentTiddler(theSource, theDate, theNotes, theTags, theTitle,
			useData, useLocal, useURL, theLocal, theURL, theMIMEType);
	},
	getMIMEType:
	function(src,def) {
		var ext = src.substr(src.lastIndexOf('.')).toLowerCase();
		var list=store.getTiddlerText(this.typeList);
		if (!list || !list.trim().length) return def;
		// get MIME list content from tiddler
		var parts=list.split("\n----\n");
		for (var p=0; p<parts.length; p++) {
			var lines=parts[p].split("\n");
			var mime=lines.shift(); // 1st line=MIME type
			var match=lines.shift(); // 2nd line=matching extensions
			if (match.indexOf(ext)!=-1) return mime;
		}
		return def;
	},
	createAttachmentTiddler:
	function (theSource, theDate, theNotes, theTags, theTitle,
		useData, useLocal, useURL, theLocal, theURL, theMIMEType, noshow) {
		// encode the data
		if (useData) {
			if (!theMIMEType.length) {
				alert(this.MIMEErr);
				form.MIMEType.selectedIndex=1; form.MIMEType.focus();
				return false;
			}
			var theData = this.readFile(theSource); if (!theData) { return false; }
			displayMessage('encoding '+theSource);
			var theEncoded = this.encodeBase64(theData);
			displayMessage('file size='+theData.length+' bytes, encoded size='+theEncoded.length+' bytes');
		}
		// generate tiddler and refresh
		var theText = "";
		theText +=theSource.length?this.sourceReport.format([theSource]):this.nosourceReport;
		theText +=this.dateReport.format([theDate,config.options.txtUserName]);
		theText +=theNotes.length?this.notesReport.format([theNotes]):"";
		theText +=useData?this.dataReport.format([theTitle,theMIMEType,theData.length,theEncoded.length]):this.nodataReport;
		theText +=useLocal?this.localReport.format([theLocal,theLocal.replace(/\\/g,"/")]):this.nolocalReport;
		theText +=useURL?this.URLReport.format([theURL]):this.noURLReport;
		theText +=(theMIMEType.substr(0,5)=="image")?this.imageReport.format([theTitle]):"";
		theText +=useData?this.dataBlock.format([theMIMEType,theEncoded]):"";
		store.saveTiddler(theTitle,theTitle,theText,config.options.txtUserName,new Date(),theTags);
		var panel=document.getElementById("attachPanel"); if (panel) panel.style.display="none";
		if (!noshow) { story.displayTiddler(null,theTitle); story.refreshTiddler(theTitle,null,true); }
		displayMessage('attached "'+theTitle+'"');
		return true;
	},
//}}}
// // base64 conversion
//{{{
	encodeBase64:
	function (theData) {
		if (!theData) return null;
		// encode as base64
		var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
		var out = "";				//This is the output
		var chr1, chr2, chr3 = "";		//These are the 3 bytes to be encoded
		var enc1, enc2, enc3, enc4 = "";	//These are the 4 encoded bytes
		for (var count=0,i=0; i<theData.length; )
			{
			chr1 = theData.charCodeAt(i++); //Grab the first byte
			chr2 = theData.charCodeAt(i++); //Grab the second byte
			chr3 = theData.charCodeAt(i++); //Grab the third byte
			enc1 = chr1 >> 2;
			enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
			enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
			enc4 = chr3 & 63;
			if (isNaN(chr2))
				enc3 = enc4 = 64;
			else if (isNaN(chr3))
				enc4 = 64;
			out += keyStr.charAt(enc1)+keyStr.charAt(enc2)+keyStr.charAt(enc3)+keyStr.charAt(enc4);
			chr1 = chr2 = chr3 = "";
			enc1 = enc2 = enc3 = enc4 = "";
			count+=4; if (count>60) { out+='\n'; count=0; } // add line break every 60 chars for readability
			}
		return out;
	},
//}}}
// // I/O functions
//{{{
	readFile: // read local BINARY file data
	function(filePath) {
		if(!window.Components) { return null; }
		try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
		catch(e) { alert("access denied: "+filePath); return null; }
		var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
		try { file.initWithPath(filePath); } catch(e) { alert("cannot read file - invalid path: "+filePath); return null; }
		if (!file.exists()) { alert("cannot read file - not found: "+filePath); return null; }
		var inputStream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
		inputStream.init(file, 0x01, 00004, null);
		var bInputStream = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream);
		bInputStream.setInputStream(inputStream);
		return(bInputStream.readBytes(inputStream.available()));
	},
//}}}
//{{{
	writeFile:
	function(filepath,data) {
		// TBD: decode base64 and write BINARY data to specified local path/filename
		return(false);
	}
};
//}}}
/***
|Name|AttachFilePluginFormatters|
|Source|http://www.TiddlyTools.com/#AttachFilePluginFormatters|
|Version|3.7.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|'image' and 'prettyLink' formatters, TiddlyWiki.prototype.getRecursiveTiddlerText|
|Description|run-time library for displaying attachment tiddlers|

This plugin provides "stand-alone" processing for //rendering// attachment tiddlers created by [[AttachFilePlugin]].   Attachment tiddlers are tagged with<<tag attachment>>and contain binary file content (e.g., jpg, gif, pdf, mp3, etc.) that has been stored directly as base64 text-encoded data or can be loaded from external files stored on a local filesystem or remote web server.

NOTE: This plugin does not include the "control panel" and supporting functions needed to //create// new attachment tiddlers.  Those features are provided by [[AttachFilePlugin]], which can be installed while building your document, and then safely omitted to reduce the overall file size when you publish your finished document (assuming you don't intend to create any additional attachment tiddlers in that document)
!!!!!Formatters
<<<
This plugin extends the behavior of the following TiddlyWiki core "wikify()" formatters:
* embedded images: {{{[img[tooltip|image]]}}}
* linked embedded images: {{{[img[tooltip|image][link]]}}}
* external/"pretty" links: {{{[[label|link]]}}}

''Please refer to AttachFilePlugin (source: http://www.TiddlyTools.com/#AttachFilePlugin) for additional information.''
<<<
!!!!!Revisions
<<<
2007.12.04 [*.*.*] update for TW2.3.0: replaced deprecated core functions, regexps, and macros
2007.10.29 [3.7.0] more code reduction: removed upload handling from AttachFilePlugin (saves ~7K!)
2007.10.28 [3.6.0] removed duplicate formatter code from AttachFilePlugin (saves ~10K!) and updated documentation accordingly.  This plugin ([[AttachFilePluginFormatters]]) is now //''required''// in order to display attached images/binary files within tiddler content.
2006.05.20 [3.4.0] through 2007.03.01 [3.5.3] sync with AttachFilePlugin
2006.05.13 [3.2.0] created from AttachFilePlugin v3.2.0
<<<
!!!!!Code
***/
// // version
//{{{
version.extensions.attach = {major: 3, minor: 7, revision: 0, date: new Date(2007,10,28)};
//}}}

//{{{
if (config.macros.attach==undefined) config.macros.attach= { };
//}}}
//{{{
if (config.macros.attach.isAttachment==undefined) config.macros.attach.isAttachment=function (title) {
	var tiddler = store.getTiddler(title);
	if (tiddler==undefined || tiddler.tags==undefined) return false;
	return (tiddler.tags.indexOf("attachment")!=-1);
}
//}}}

//{{{
// test for local file existence
// Returns true/false without visible error display
// Uses Components for FF and ActiveX FSO object for MSIE
if (config.macros.attach.fileExists==undefined) config.macros.attach.fileExists=function(theFile) {
	var found=false;
	// DEBUG: alert('testing fileExists('+theFile+')...');
	if(window.Components) {
		try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
		catch(e) { return false; } // security access denied
		var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
		try { file.initWithPath(theFile); }
		catch(e) { return false; } // invalid directory
		found = file.exists();
	}
	else { // use ActiveX FSO object for MSIE 
		var fso = new ActiveXObject("Scripting.FileSystemObject");
		found = fso.FileExists(theFile)
	}
	// DEBUG: alert(theFile+" "+(found?"exists":"not found"));
	return found;
}
//}}}

//{{{
if (config.macros.attach.getAttachment==undefined) config.macros.attach.getAttachment=function(title) {

	// extract embedded data, local and remote links (if any)
	var startmarker="---BEGIN_DATA---\n";
	var endmarker="\n---END_DATA---";
	var pos=0; var endpos=0;
	var text = store.getTiddlerText(title);
	var embedded="";
	var locallink="";
	var remotelink="";

	// look for embedded data, convert to data: URI
	if ((pos=text.indexOf(startmarker))!=-1 && (endpos=text.indexOf(endmarker))!=-1)
		embedded="data:"+(text.substring(pos+startmarker.length,endpos)).replace(/\n/g,'');
	if (embedded.length && !config.browser.isIE)
		return embedded; // use embedded data if any... except for IE, which doesn't support data URI

	// no embedded data... fallback to local/remote reference links...

	// look for 'attachment link markers'
	if ((pos=text.indexOf("/%LOCAL_LINK%/"))!=-1)
		locallink=text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos));
	if ((pos=text.indexOf("/%REMOTE_LINK%/"))!=-1)
		remotelink=text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos));

	// document is being served remotely... use remote URL (if any)  (avoids security alert)
	if (remotelink.length && document.location.protocol!="file:")
		return remotelink;  

	// local link only... return link without checking file existence (avoids security alert)
	if (locallink.length && !remotelink.length) 
		return locallink; 

	// local link, check for file exist... use local link if found
	if (locallink.length) { 
		if (this.fileExists(getLocalPath(locallink))) return locallink;
		// maybe local link is relative... add path from current document and try again
		var pathPrefix=document.location.href;  // get current document path and trim off filename
		var slashpos=pathPrefix.lastIndexOf("/"); if (slashpos==-1) slashpos=pathPrefix.lastIndexOf("\\"); 
		if (slashpos!=-1 && slashpos!=pathPrefix.length-1) pathPrefix=pathPrefix.substr(0,slashpos+1);
		if (this.fileExists(getLocalPath(pathPrefix+locallink))) return locallink;
	}

	// no embedded data, no local (or not found), fallback to remote URL (if any)
	if (remotelink.length) 
		return remotelink;

	return ""; // attachment URL doesn't resolve
}
//}}}
//{{{
if (config.macros.attach.init_formatters==undefined) config.macros.attach.init_formatters=function() {
	if (this.initialized) return;
	// find the formatter for "image" and replace the handler
	for (var i=0; i<config.formatters.length && config.formatters[i].name!="image"; i++);
	if (i<config.formatters.length)	config.formatters[i].handler=function(w) {
		if (!this.lookaheadRegExp)  // fixup for TW2.0.x
			this.lookaheadRegExp = new RegExp(this.lookahead,"mg");
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) // Simple bracketted link
			{
			var e = w.output;
			if(lookaheadMatch[5])
				{
				var link = lookaheadMatch[5];
				// ELS -------------
				if (!config.formatterHelpers.isExternalLink) // fixup for TW2.0.x
					var external=!store.tiddlerExists(link)&&!store.isShadowTiddler(link);
				else
					var external=config.formatterHelpers.isExternalLink(link);
				if (external)
					{
					if (config.macros.attach.isAttachment(link))
						{
						e = createExternalLink(w.output,link);
						e.href=config.macros.attach.getAttachment(link);
						e.title = config.macros.attach.linkTooltip + link;
						}
					else
						e = createExternalLink(w.output,link);
					}
				else 
					e = createTiddlyLink(w.output,link,false,null,w.isStatic);
				// ELS -------------
				addClass(e,"imageLink");
				}
			var img = createTiddlyElement(e,"img");
			if(lookaheadMatch[1])
				img.align = "left";
			else if(lookaheadMatch[2])
				img.align = "right";
			if(lookaheadMatch[3])
				img.title = lookaheadMatch[3];
			img.src = lookaheadMatch[4];
			// ELS -------------
			if (config.macros.attach.isAttachment(lookaheadMatch[4]))
				img.src=config.macros.attach.getAttachment(lookaheadMatch[4]);
			// ELS -------------
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
//}}}
//{{{
	// find the formatter for "prettyLink" and replace the handler
	for (var i=0; i<config.formatters.length && config.formatters[i].name!="prettyLink"; i++);
	if (i<config.formatters.length)	{
		var v=version.major+.1*version.minor+.01*version.revision;
		if (v>=2.13) {
		config.formatters[i].handler=function(w) 
			{
			this.lookaheadRegExp.lastIndex = w.matchStart;
			var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
			if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
				{
				var e;
				var text = lookaheadMatch[1];
				if(lookaheadMatch[3])
					{
					// Pretty bracketted link
					var link = lookaheadMatch[3];
					if (config.macros.attach.isAttachment(link))
						{
						e = createExternalLink(w.output,link);
						e.href=config.macros.attach.getAttachment(link);
						e.title=config.macros.attach.linkTooltip+link;
						}
					else e = (!lookaheadMatch[2] && config.formatterHelpers.isExternalLink(link))
						? createExternalLink(w.output,link)
						: createTiddlyLink(w.output,link,false,null,w.isStatic);
					}
				else
					{
					e = createTiddlyLink(w.output,text,false,null,w.isStatic);
					}
				createTiddlyText(e,text);
				w.nextMatch = this.lookaheadRegExp.lastIndex;
				}
			}
		} else { // FALLBACK for TW2.1.2 and earlier
		config.formatters[i].handler=function(w)
			{
			if (!this.lookaheadRegExp)  // fixup for TW2.0.x
				this.lookaheadRegExp = new RegExp(this.lookahead,"mg");
			this.lookaheadRegExp.lastIndex = w.matchStart;
			var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
			if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
				{
				var e;
				var text = lookaheadMatch[1];
				if (lookaheadMatch[2]) // Simple bracketted link
					{
					e = createTiddlyLink(w.output,text,false,null,w.isStatic);
					}
				else if(lookaheadMatch[3]) // Pretty bracketted link
					{
					var link = lookaheadMatch[4];
					// ELS -------------
					if (!config.formatterHelpers.isExternalLink) // fixup for TW2.0.x
						var external=!store.tiddlerExists(link)&&!store.isShadowTiddler(link);
					else
						var external=config.formatterHelpers.isExternalLink(link);
					if (external)
						{
						if (config.macros.attach.isAttachment(link))
							{
							e = createExternalLink(w.output,link);
							e.href=config.macros.attach.getAttachment(link);
							e.title = config.macros.attach.linkTooltip + link;
							}
						else
							e = createExternalLink(w.output,link);
						}
					else 
						e = createTiddlyLink(w.output,link,false,null,w.isStatic);
					// ELS -------------
					}
				createTiddlyText(e,text);
				w.nextMatch = this.lookaheadRegExp.lastIndex;
				}
			}
		} // END FALLBACK
	} // if "prettyLink" formatter found
	this.initialized=true;
}
//}}}
//{{{
config.macros.attach.init_formatters(); // load time init
//}}}
//{{{
if (TiddlyWiki.prototype.coreGetRecursiveTiddlerText==undefined) {
	TiddlyWiki.prototype.coreGetRecursiveTiddlerText = TiddlyWiki.prototype.getRecursiveTiddlerText;
	TiddlyWiki.prototype.getRecursiveTiddlerText = function(title,defaultText,depth) {
		return config.macros.attach.isAttachment(title)?
			config.macros.attach.getAttachment(title):this.coreGetRecursiveTiddlerText.apply(this,arguments);
	}
}
//}}}
/***
|Name|AttachFilePluginInfo|
|Source|http://www.TiddlyTools.com/#AttachFilePlugin|
|Documentation|http://www.TiddlyTools.com/#AttachFilePluginInfo|
|Version|3.8.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|Documentation for AttachFilePlugin|
Store or link binary files (such as jpg, gif, pdf or even mp3) within your TiddlyWiki document and then use them as images or links from within your tiddler content.
!!!!!Inline interface (live)
>see [[AttachFile]] (shadow tiddler)
><<tiddler AttachFile>>
!!!!!Syntax
<<<
''To display the attach file control panel, simply view the [[AttachFile]] shadow tiddler that is automatically created by the plugin, and contains an instance of the inline control panel.''.  Or, you can write:
{{{
<<attach inline>>
}}}
in any tiddler to display the control panel embedded within that tiddler.  Note: you can actually use any unique identifier in place of the "inline" keyword.  Each unique id creates a separate instance of the controls.  If the same ID is used in more than one tiddler, then the control panel is automatically moved to the most recently rendered location.  Or, you can write:
{{{
<<attach>>
}}}
(with no ID parameter) in SidebarOptions.  This adds a command link that opens the controls as a floating panel, positioned directly to the left of the sidebar.
<<<
!!!!!Usage
<<<
Binary file content can be stored in three different locations:
#embedded in the attachment tiddler (encoded as base64)
#on your filesystem (a 'local link' path/filename)
#on a web server (a 'remote link' URL)
The plugin creates an "attachment tiddler" for each file you attach.  Regardless of where you store the binary content, your document can refer to the attachment tiddler rather than using a direct file or URL reference in your embedded image or external links, so that changing document locations will not require updating numerous tiddlers or copying files from one system to another.
> Important note: As of version 3.6.0, in order to //render// images and other binary attachments created with this plugin, you must also install [[AttachFilePluginFormatters]], which extends the behavior of the TiddlyWiki core formatters for embedded images ({{{[img[tooltip|image]]}}}), linked embedded images ({{{[img[tooltip|image][link]]}}}), and external/"pretty" links ({{{[[label|link]]}}}), so that these formatter will process references to attachment tiddlers as if a normal file reference had been provided. |
When you attach a file, a tiddler (tagged with<<tag attachment>>) is generated (using the source filename as the tiddler's title).  The tiddler contains //''base64 text-encoded binary data''//, surrounded by {{{/%...%/}}} comment markers (so they are not visible when viewing the tiddler).  The tiddler also includes summary details about the file: when it was attached, by whom, etc. and, if the attachment is an image file (jpg, gif, or png), the image is automatically displayed below the summary information.
>Note: although you can edit an attachment tiddler, ''don't change any of the encoded content below the attachment header'', as it has been prepared for use in the rest of your document, and even changing a single character can make the attachment unusable.  //If needed, you ''can'' edit the header information or even the MIME type declaration in the attachment data, but be very careful not to change any of the base64-encoded binary data.//
With embedded data, your TW document can be completely self-contained...unfortunately, embedding just a few moderately-sized binary files using base64 text-encoding can dramatically increase the size of your document.   To avoid this problem, you can create attachment tiddlers that define external local filesystem (file://) and/or remote web server (http://) 'reference' links, without embedding the binary data directly in the tiddler (i.e., uncheck "embed data" in the 'control panel').

These links provide an alternative source for the binary data: if embedded data is not found (or you are running on Internet Explorer, which does not currently support using embedded data), then the plugin tries the local filesystem reference.  If a local file is not found, then the remote reference (if any) is used.  This "fallback" approach also lets you 'virtualize' the external links in your document, so that you can access very large binary content such as PDFs, MP3's, and even *video* files, by using just a 'remote reference link' without embedding any data or downloading huge files to your hard disk.

Of course, when you //do// download an attached file, the local copy will be used instead of accessing a remote server each time, thereby saving bandwidth and allowing you to 'go mobile' without having to edit any tiddlers to alter the link locations...
<<<
!!!!!Syntax / Examples
<<<
To embed attached files as images or link to them from other tiddlers, use the standard ~TiddlyWiki image syntax ({{{[img[tooltip|filename]]}}}), linked image syntax ({{{[img[tooltip|filename][tiddlername]]}}}) , or "external link" syntax ({{{[[text|URL]]}}}), replacing the filename or URL that is normally entered with the title of an attachment tiddler.

embedded image data:
>{{{[img[Meow|AttachFileSample]]}}}
>[img[Meow|AttachFileSample]]
embedded image data with link to larger remote image:
>{{{[img[click for larger view|AttachFileSample][AttachFileSample2]]}}}
>[img[click for larger view|AttachFileSample][AttachFileSample2]]
'external' link to embedded image data:
>{{{[[click to view attachment|AttachFileSample]]}}}
>[[click to view attachment|AttachFileSample]]
'external' link to remote image:
>{{{[[click to view attachment|AttachFileSample2]]}}}
>[[click to view attachment|AttachFileSample2]]
regular ~TiddlyWiki links to attachment tiddlers:
>{{{[[AttachFileSample]]}}} [[AttachFileSample]]
>{{{[[AttachFileSample2]]}}} [[AttachFileSample2]]
<<<
!!!!!Defining MIME types
<<<
When you select a source file, a ''[[MIME|http://en.wikipedia.org/wiki/MIME]]'' file type is automatically suggested, based on filename extension.  The AttachFileMIMETypes tiddler defines the list of MIME types that will be recognized by the plugin.  Each MIME type definition consists of exactly two lines of text: the official MIME type designator (e.g., "text/plain", "image/gif", etc.), and a space-separated list of file extensions associated with that type.  List entries are separated by "----" (horizontal rules).
<<<
!!!!!Known Limitations
<<<
Internet Explorer does not support the data: URI scheme, and cannot use the //embedded// data to render images or links.  However, you can still use the local/remote link definitions to create file attachments that are stored externally.  In addition, while it is relatively easy to read local //text// files, reading binary files is not directly supported by IE's FileSystemObject (FSO) methods, and other file I/O techniques are subject to security barriers or require additional MS proprietary technologies (like ASP or VB) that make implementation more difficult.  As a result, you cannot //create// new attachment tiddlers using IE.
<<<
!!!!!Installation
<<<
Import (or copy/paste) the following tiddlers into your document:
* [[AttachFilePlugin]] (tagged with <<tag systemConfig>>)
* [[AttachFilePluginFormatters]] ("runtime distribution library") (tagged with <<tag systemConfig>>)
* [[AttachFileSample]] and [[AttachFileSample2]] //(tagged with <<tag attachment>>)//
* [[AttachFileMIMETypes //(defines binary file types)//
> Important note: As of version 3.6.0, in order to //render// images and other binary attachments created with this plugin, you must also install [[AttachFilePluginFormatters]], which extends the behavior of the TiddlyWiki core formatters for embedded images ({{{[img[tooltip|image]]}}}), linked embedded images ({{{[img[tooltip|image][link]]}}}), and external/"pretty" links ({{{[[label|link]]}}}), so that these formatter will process references to attachment tiddlers as if a normal file reference had been provided. |
<<<
!!!!!Revisions
<<<
2008.04.09 [3.8.0] in onChangeSource(), if source matches current document folder, use relative reference for local link.  Also, disable 'embed' when using IE (which //still// doesn't support data: URI)
2008.04.07 [3.7.3] fixed typo in HTML for 'local file link' so that clicking in input field doesn't erase current path/file (if any)
2008.04.07 [3.7.2] auto-create AttachFile shadow tiddler for inline interface
2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info
2007.12.04 [*.*.*] update for TW2.3.0: replaced deprecated core functions, regexps, and macros
2007.12.03 [3.7.1] in createAttachmentTiddler(), added optional "noshow" flag to suppress display of newly created tiddlers.
2007.10.29 [3.7.0] code reduction: removed support for built-in upload to server... on-line hosting of binary attachments is left to the document author, who can upload/host files using 3rd-party web-based services (e.g. www.flickr.com, ) or stand-alone applications (e.g., FTP).
2007.10.28 [3.6.0] code reduction: removed duplicate definition of image and prettyLink formatters.  Rendering of attachment tiddlers now //requires// installation of AttachFilePluginFormatters
2007.03.01 [3.5.3] use apply() to invoke hijacked function
2007.02.25 [3.5.2] in hijack of "prettyLink", fix version check for TW2.2 compatibility (prevent incorrect use of fallback handler)
2007.01.09 [3.5.1] onClickAttach() refactored to create separate createAttachmentTiddler() API for use with FileDropPluginHandlers
2006.11.30 [3.5.0] in getAttachment(), for local references, add check for file existence and fallback to remote URL if local file not found.  Added fileExists() to encapsulate FF vs. IE local file test function (IE FSO object code is TBD).
2006.11.29 [3.4.8] in hijack for PrettyLink, 'simple bracketed link' opens tiddler instead of external link to attachment
2006.11.29 [3.4.7] in readFile(), added try..catch around initWithPath() to handle invalid/non-existent paths better.
2006.11.09 [3.4.6] REAL FIX for TWv2.1.3: incorporate new TW2.1.3 core "prettyLink" formatter regexp handling logic and check for version < 2.1.3 with fallback to old plugin code.  Also, cleanup table layout in HTML (added "border:0" directly to table elements to override stylesheet)
2006.11.08 [3.4.5] TEMPORARY FIX for TWv2.1.3: disable hijack of wikiLink formatter due to changes in core wikiLink regexp definition.  //Links to attachments are broken, but you can still use {{{[img[TiddlerName]]}}} to render attachments as images, as well as {{{background:url('[[TiddlerName]]')}}} in CSS declarations for background images.//
2006.09.10 [3.4.4] update formatters for 2.1 compatibility (use this.lookaheadRegExp instead of temp variable)
2006.07.24 [3.4.3] in prettyLink formatter, added check for isShadowTiddler() to fix problem where shadow links became external links.
2006.07.13 [3.4.2] in getAttachment(), fixed stripping of newlines so data: used in CSS will work
2006.05.21 [3.4.1] in getAttachment(), fixed substring() to extract data: URI (was losing last character, which broken rendering of SOME images)
2006.05.20 [3.4.0] hijack core getRecursiveTiddlerText() to support rendering attachments in stylesheets (e.g. {{{url([[AttachFileSample]])}}})
2006.05.20 [3.3.6] add "description" feature to easily include notes in attachment tiddler (you can always edit to add them later... but...)
2006.05.19 [3.3.5] add "attach as" feature to change default name for attachment tiddlers.  Also, new optional param to specify tiddler name (disables editing)
2006.05.16 [3.3.0] completed XMLHttpRequest handling for GET or POST to configurable server scripts
2006.05.13 [3.2.0] added interface for upload feature.  Major rewrite of code for clean object definitions.  Major improvements in UI interaction and validation.
2006.05.09 [3.1.1] add wikifer support for using attachments in links from "linked image" syntax: {{{[img[tip|attachment1][attachment2]]}}}
2006.05.09 [3.1.0] lots of code changes: new options for attachments that use embedded data and/or links to external files (local or remote)
2006.05.03 [3.0.2] added {{{/%...%/}}} comments around attachment data to hide it when viewing attachment tiddler.
2006.02.05 [3.0.1] wrapped wikifier hijacks in initAttachmentFormatters() function to eliminate globals and avoid FireFox 1.5.0.1 crash bug when referencing globals
2005.12.27 [3.0.0] Update for TW2.0.  Automatically add 'excludeMissing' tag to attachments
2005.12.16 [2.2.0] Dynamically create/remove attachPanel as needed to ensure only one instance of interface elements exists, even if there are multiple instances of macro embedding.
2005.11.20 [2.1.0] added wikifier handler extensions for "image" and "prettyLink" to render tiddler attachments
2005.11.09 [2.0.0] begin port from old ELS Design plugin/adaptation hybrid based on ~TW1.2.33
2005.08.05 [1.1.0] moved CSS and HTML definitions into plugin code tiddler instead of using separate tiddlers
2005.07.27 [1.0.2] core update 1.2.29: custom overlayStyleSheet() replaced with new core setStylesheet()
2005.07.23 [1.0.1] added parameter checks and corrected addNotification() usage
2005.07.20 [1.0.0] Initial Release
<<<
* ''Introduction to Automata Theory, Languages and Computation'' - J.E. Hopcroft e J.D. Ullman. ~Addison-Wesley.
> Um clássico na área, razoavelmente completo e didático. Provas sumárias de teoremas. Apresenta soluções comentadas para alguns exercícios.
* ''Introdução à Teoria de Autômatos, Linguagens e Computação'' – J.E. Hopcroft, J.D. Ullman e R. Motwami. Campus.
> Tradução da 2a. edição americana de versão estendida do Hopcroft/Ullman. Vários erros de tradução. Bem completo.
* ''Elements of the Theory of Computation'' - H.R. Lewis e C.H. Papadimitriou. ~Prentice-Hall.
> Um pouco mais pesado e menos didático do que o anterior. Conciso e objetivo.
* ''Languages and Machines'' - T. Sudkamp. ~Addison-Wesley.
> Mais didático do que os anteriores. Ordenação não muito ortodoxa: primeiro discute linguagens e gramáticas e só então introduz a teoria de autômatos.
* ''Introduction to the Theory of Computation'' – M. Sipser. PWS.
> Conciso e didático.
* Notas de aula

<<tiddler NextTiddler with: [[Motivação]]>>
<<calendar thismonth>>
/***
|Name|CalendarPlugin|
|Source|http://www.TiddlyTools.com/#CalendarPlugin|
|Version|2008.06.17|
|Author|Eric Shulman|
|Original Author|SteveRumsby|
|License|unknown|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Options|##Configuration|
|Description|display monthly and yearly calendars|

NOTE: For enhanced date display (including popups), you must also install [[DatePlugin]]
!!!!!Usage:
<<<
|{{{<<calendar>>}}}|Produce a full-year calendar for the current year|
|{{{<<calendar year>>}}}|Produce a full-year calendar for the given year|
|{{{<<calendar year month>>}}}|Produce a one-month calendar for the given month and year|
|{{{<<calendar thismonth>>}}}|Produce a one-month calendar for the current month|
|{{{<<calendar lastmonth>>}}}|Produce a one-month calendar for last month|
|{{{<<calendar nextmonth>>}}}|Produce a one-month calendar for next month|
<<<
!!!!!Configuration:
<<<
|''First day of week:''<br>{{{config.options.txtCalFirstDay}}}|<<option txtCalFirstDay>>|(Monday = 0, Sunday = 6)|
|''First day of weekend:''<br>{{{config.options.txtCalStartOfWeekend}}}|<<option txtCalStartOfWeekend>>|(Monday = 0, Sunday = 6)|

<<option chkDisplayWeekNumbers>> Display week numbers //(note: Monday will be used as the start of the week)//
|''Week number display format:''<br>{{{config.options.txtWeekNumberDisplayFormat }}}|<<option txtWeekNumberDisplayFormat >>|
|''Week number link format:''<br>{{{config.options.txtWeekNumberLinkFormat }}}|<<option txtWeekNumberLinkFormat >>|
<<<
!!!!!Revisions
<<<
2008.06.17: added support for config.macros.calendar.todaybg
2008.02.27: in handler(), DON'T set hard-coded default date format, so that *customized* value (pre-defined in config.macros.calendar.journalDateFmt is used.
2008.02.17: in createCalendarYear(), fix next/previous year calculation (use parseInt() to convert to numeric value).  Also, use journalDateFmt for date linking when NOT using [[DatePlugin]].
2008.02.16: in createCalendarDay(), week numbers now created as TiddlyLinks, allowing quick creation/navigation to 'weekly' journals (based on request from Kashgarinn)
2008.01.08: in createCalendarMonthHeader(), "month year" heading is now created as TiddlyLink, allowing quick creation/navigation to 'month-at-a-time' journals
2007.11.30: added "return false" to onclick handlers (prevent IE from opening blank pages)
2006.08.23: added handling for weeknumbers (code supplied by Martin Budden (see "wn**" comment marks).  Also, incorporated updated by Jeremy Sheeley to add caching for reminders (see [[ReminderMacros]], if installed)
2005.10.30: in config.macros.calendar.handler(), use "tbody" element for IE compatibility.  Also, fix year calculation for IE's getYear() function (which returns '2005' instead of '105'). Also, in createCalendarDays(), use showDate() function (see [[DatePlugin]], if installed) to render autostyled date with linked popup.  Updated calendar stylesheet definition: use .calendar class-specific selectors, add text centering and margin settings
2006.05.29: added journalDateFmt handling
<<<
***/
/***
!!!!!Code section:
***/
//{{{
version.extensions.calendar = { major: 0, minor: 7, revision: 0, date: new Date(2008, 6, 17)};

if(config.options.txtCalFirstDay == undefined)
  config.options.txtCalFirstDay = 0;
if(config.options.txtCalStartOfWeekend == undefined)
  config.options.txtCalStartOfWeekend = 5;
if(config.options.chkDisplayWeekNumbers == undefined)//wn**
  config.options.chkDisplayWeekNumbers = false;
if(config.options.chkDisplayWeekNumbers)
  config.options.txtCalFirstDay = 0;
if(config.options.txtWeekNumberDisplayFormat == undefined)//wn**
  config.options.txtWeekNumberDisplayFormat = "w0WW";
if(config.options.txtWeekNumberLinkFormat == undefined)//wn**
  config.options.txtWeekNumberLinkFormat = "YYYY-w0WW";

config.macros.calendar = {};
config.macros.calendar.monthnames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
config.macros.calendar.daynames = ["M", "T", "W", "T", "F", "S", "S"];
config.macros.calendar.todaybg = "#ccccff";
config.macros.calendar.weekendbg = "#c0c0c0";
config.macros.calendar.monthbg = "#e0e0e0";
config.macros.calendar.holidaybg = "#ffc0c0";
config.macros.calendar.journalDateFmt = "DD MMM YYYY";
config.macros.calendar.monthdays = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
config.macros.calendar.holidays = [ ]; // Not sure this is required anymore - use reminders instead
//}}}
//{{{
function calendarIsHoliday(date) // Is the given date a holiday?
{
	var longHoliday = date.formatString("0DD/0MM/YYYY");
	var shortHoliday = date.formatString("0DD/0MM");
	for(var i = 0; i < config.macros.calendar.holidays.length; i++) {
		if(config.macros.calendar.holidays[i] == longHoliday || config.macros.calendar.holidays[i] == shortHoliday)
			return true;
	}
	return false;
}
//}}}
//{{{
config.macros.calendar.handler = function(place,macroName,params) {
	var calendar = createTiddlyElement(place, "table", null, "calendar", null);
	var tbody = createTiddlyElement(calendar, "tbody", null, null, null);
	var today = new Date();
	var year = today.getYear();
	if (year<1900) year+=1900;

 	// get format for journal link by reading from SideBarOptions (ELS 5/29/06 - based on suggestion by Martin Budden)
	var text = store.getTiddlerText("SideBarOptions");
	var re = new RegExp("<<(?:newJournal)([^>]*)>>","mg"); var fm = re.exec(text);
	if (fm && fm[1]!=null) { var pa=fm[1].readMacroParams(); if (pa[0]) this.journalDateFmt = pa[0]; }

	if (params[0] == "thismonth") {
		cacheReminders(new Date(year, today.getMonth(), 1, 0, 0), 31);
		createCalendarOneMonth(tbody, year, today.getMonth());
	} 
	else if (params[0] == "lastmonth") {
		var month = today.getMonth()-1; if (month==-1) { month=11; year--; }
		cacheReminders(new Date(year, month, 1, 0, 0), 31);
		createCalendarOneMonth(tbody, year, month);
	}
	else if (params[0] == "nextmonth") {
		var month = today.getMonth()+1; if (month>11) { month=0; year++; }
		cacheReminders(new Date(year, month, 1, 0, 0), 31);
		createCalendarOneMonth(tbody, year, month);
	} else {
		if (params[0]) year = params[0];
		if(params[1]) {
			cacheReminders(new Date(year, params[1]-1, 1, 0, 0), 31);
			createCalendarOneMonth(tbody, year, params[1]-1);
		} else {
			cacheReminders(new Date(year, 0, 1, 0, 0), 366);
			createCalendarYear(tbody, year);
		}
	}
	window.reminderCacheForCalendar = null;
}
//}}}
//{{{
//This global variable is used to store reminders that have been cached
//while the calendar is being rendered.  It will be renulled after the calendar is fully rendered.
window.reminderCacheForCalendar = null;
//}}}
//{{{
function cacheReminders(date, leadtime)
{
	if (window.findTiddlersWithReminders == null) return;
	window.reminderCacheForCalendar = {};
	var leadtimeHash = [];
	leadtimeHash [0] = 0;
	leadtimeHash [1] = leadtime;
	var t = findTiddlersWithReminders(date, leadtimeHash, null, 1);
	for(var i = 0; i < t.length; i++) {
		//just tag it in the cache, so that when we're drawing days, we can bold this one.
		window.reminderCacheForCalendar[t[i]["matchedDate"]] = "reminder:" + t[i]["params"]["title"]; 
	}
}
//}}}
//{{{
function createCalendarOneMonth(calendar, year, mon)
{
	var row = createTiddlyElement(calendar, "tr", null, null, null);
	createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon] + " " + year, true, year, mon);
	row = createTiddlyElement(calendar, "tr", null, null, null);
	createCalendarDayHeader(row, 1);
	createCalendarDayRowsSingle(calendar, year, mon);
}
//}}}
//{{{
function createCalendarMonth(calendar, year, mon)
{
	var row = createTiddlyElement(calendar, "tr", null, null, null);
	createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon] + " " + year, false, year, mon);
	row = createTiddlyElement(calendar, "tr", null, null, null);
	createCalendarDayHeader(row, 1);
	createCalendarDayRowsSingle(calendar, year, mon);
}
//}}}
//{{{
function createCalendarYear(calendar, year)
{
	var row;
	row = createTiddlyElement(calendar, "tr", null, null, null);
	var back = createTiddlyElement(row, "td", null, null, null);
	var backHandler = function() {
		removeChildren(calendar);
		createCalendarYear(calendar, parseInt(year)-1);
		return false; // consume click
	};
	createTiddlyButton(back, "<", "Previous year", backHandler);
	back.align = "center";
	var yearHeader = createTiddlyElement(row, "td", null, "calendarYear", year);
	yearHeader.align = "center";
	yearHeader.setAttribute("colSpan",config.options.chkDisplayWeekNumbers?22:19);//wn**
	var fwd = createTiddlyElement(row, "td", null, null, null);
	var fwdHandler = function() {
		removeChildren(calendar);
		createCalendarYear(calendar, parseInt(year)+1);
		return false; // consume click
	};
	createTiddlyButton(fwd, ">", "Next year", fwdHandler);
	fwd.align = "center";
	createCalendarMonthRow(calendar, year, 0);
	createCalendarMonthRow(calendar, year, 3);
	createCalendarMonthRow(calendar, year, 6);
	createCalendarMonthRow(calendar, year, 9);
}
//}}}
//{{{
function createCalendarMonthRow(cal, year, mon)
{
	var row = createTiddlyElement(cal, "tr", null, null, null);
	createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon], false, year, mon);
	createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+1], false, year, mon);
	createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+2], false, year, mon);
	row = createTiddlyElement(cal, "tr", null, null, null);
	createCalendarDayHeader(row, 3);
	createCalendarDayRows(cal, year, mon);
}
//}}}
//{{{
function createCalendarMonthHeader(cal, row, name, nav, year, mon)
{
	var month;
	if (nav) {
		var back = createTiddlyElement(row, "td", null, null, null);
		back.align = "center";
		back.style.background = config.macros.calendar.monthbg;

		var backMonHandler = function() {
			var newyear = year;
			var newmon = mon-1;
			if(newmon == -1) { newmon = 11; newyear = newyear-1;}
			removeChildren(cal);
			cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);
			createCalendarOneMonth(cal, newyear, newmon);
			return false; // consume click
		};
		createTiddlyButton(back, "<", "Previous month", backMonHandler);
		month = createTiddlyElement(row, "td", null, "calendarMonthname")
		createTiddlyLink(month,name,true);
		month.setAttribute("colSpan", config.options.chkDisplayWeekNumbers?6:5);//wn**
		var fwd = createTiddlyElement(row, "td", null, null, null);
		fwd.align = "center";
		fwd.style.background = config.macros.calendar.monthbg; 

		var fwdMonHandler = function() {
			var newyear = year;
			var newmon = mon+1;
			if(newmon == 12) { newmon = 0; newyear = newyear+1;}
			removeChildren(cal);
			cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);
			createCalendarOneMonth(cal, newyear, newmon);
			return false; // consume click
		};
		createTiddlyButton(fwd, ">", "Next month", fwdMonHandler);
	} else {
		month = createTiddlyElement(row, "td", null, "calendarMonthname", name)
		month.setAttribute("colSpan",config.options.chkDisplayWeekNumbers?8:7);//wn**
	}
	month.align = "center";
	month.style.background = config.macros.calendar.monthbg;
}
//}}}
//{{{
function createCalendarDayHeader(row, num)
{
	var cell;
	for(var i = 0; i < num; i++) {
		if (config.options.chkDisplayWeekNumbers) createTiddlyElement(row, "td");//wn**
		for(var j = 0; j < 7; j++) {
			var d = j + (config.options.txtCalFirstDay - 0);
			if(d > 6) d = d - 7;
			cell = createTiddlyElement(row, "td", null, null, config.macros.calendar.daynames[d]);
			if(d == (config.options.txtCalStartOfWeekend-0) || d == (config.options.txtCalStartOfWeekend-0+1))
				cell.style.background = config.macros.calendar.weekendbg;
		}
	}
}
//}}}
//{{{
function createCalendarDays(row, col, first, max, year, mon) {
	var i;
	if (config.options.chkDisplayWeekNumbers){
		if (first<=max) {
			var ww = new Date(year,mon,first);
			var td=createTiddlyElement(row, "td");//wn**
			var link=createTiddlyLink(td,ww.formatString(config.options.txtWeekNumberLinkFormat),false);
			link.appendChild(document.createTextNode(ww.formatString(config.options.txtWeekNumberDisplayFormat)));
		}
		else createTiddlyElement(row, "td", null, null, null);//wn**
	}
	for(i = 0; i < col; i++)
		createTiddlyElement(row, "td", null, null, null);
	var day = first;
	for(i = col; i < 7; i++) {
		var d = i + (config.options.txtCalFirstDay - 0);
		if(d > 6) d = d - 7;
		var daycell = createTiddlyElement(row, "td", null, null, null);
		var isaWeekend = ((d == (config.options.txtCalStartOfWeekend-0) || d == (config.options.txtCalStartOfWeekend-0+1))? true:false);
		if(day > 0 && day <= max) {
			var celldate = new Date(year, mon, day);
			// ELS 2005.10.30: use <<date>> macro's showDate() function to create popup
			// ELS 5/29/06 - use journalDateFmt 
			if (window.showDate)
				showDate(daycell,celldate,"popup","DD",config.macros.calendar.journalDateFmt,true, isaWeekend);
			else {
				if(isaWeekend) daycell.style.background = config.macros.calendar.weekendbg;
				var title = celldate.formatString(config.macros.calendar.journalDateFmt);
				if(calendarIsHoliday(celldate))
					daycell.style.background = config.macros.calendar.holidaybg;
				var now=new Date();
				if ((now-celldate>=0) && (now-celldate<86400000)) // is today?
					daycell.style.background = config.macros.calendar.todaybg;
				if(window.findTiddlersWithReminders == null) {
					var link = createTiddlyLink(daycell, title, false);
					link.appendChild(document.createTextNode(day));
				} else
					var button = createTiddlyButton(daycell, day, title, onClickCalendarDate);
			}
		}
		day++;
	}
}
//}}}
//{{{
// We've clicked on a day in a calendar - create a suitable pop-up of options.
// The pop-up should contain:
//  * a link to create a new entry for that date
//  * a link to create a new reminder for that date
//  * an <hr>
//  * the list of reminders for that date
// NOTE: The following code is only used when [[DatePlugin]] is not present
function onClickCalendarDate(e)
{
	var button = this;
	var date = button.getAttribute("title");
	var dat = new Date(date.substr(6,4), date.substr(3,2)-1, date.substr(0, 2));

	date = dat.formatString(config.macros.calendar.journalDateFmt);
	var popup = createTiddlerPopup(this);
	popup.appendChild(document.createTextNode(date));
	var newReminder = function() {
		var t = store.getTiddlers(date);
		displayTiddler(null, date, 2, null, null, false, false);
		if(t) {
			document.getElementById("editorBody" + date).value += "\n<<reminder day:" + dat.getDate() +
				" month:" + (dat.getMonth()+1) + " year:" + (dat.getYear()+1900) + " title: >>";
		} else {
			document.getElementById("editorBody" + date).value = "<<reminder day:" + dat.getDate() +
				" month:" + (dat.getMonth()+1) +" year:" + (dat.getYear()+1900) + " title: >>";
		}
		return false; // consume click
	};
	var link = createTiddlyButton(popup, "New reminder", null, newReminder); 
	popup.appendChild(document.createElement("hr"));
	var t = findTiddlersWithReminders(dat, [0,14], null, 1);
	for(var i = 0; i < t.length; i++) {
		link = createTiddlyLink(popup, t[i].tiddler, false);
		link.appendChild(document.createTextNode(t[i].tiddler));
	}
	return false; // consume click
}
//}}}
//{{{
function calendarMaxDays(year, mon)
{
	var max = config.macros.calendar.monthdays[mon];
	if(mon == 1 && (year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0)) max++;
	return max;
}
//}}}
//{{{
function createCalendarDayRows(cal, year, mon)
{
	var row = createTiddlyElement(cal, "tr", null, null, null);
	var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
	if(first1 < 0) first1 = first1 + 7;
	var day1 = -first1 + 1;
	var first2 = (new Date(year, mon+1, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
	if(first2 < 0) first2 = first2 + 7;
	var day2 = -first2 + 1;
	var first3 = (new Date(year, mon+2, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
	if(first3 < 0) first3 = first3 + 7;
	var day3 = -first3 + 1;

	var max1 = calendarMaxDays(year, mon);
	var max2 = calendarMaxDays(year, mon+1);
	var max3 = calendarMaxDays(year, mon+2);

	while(day1 <= max1 || day2 <= max2 || day3 <= max3) {
		row = createTiddlyElement(cal, "tr", null, null, null);
		createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;
		createCalendarDays(row, 0, day2, max2, year, mon+1); day2 += 7;
		createCalendarDays(row, 0, day3, max3, year, mon+2); day3 += 7;
	}
}
//}}}
//{{{
function createCalendarDayRowsSingle(cal, year, mon)
{
	var row = createTiddlyElement(cal, "tr", null, null, null);
	var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
	if(first1 < 0) first1 = first1+ 7;
	var day1 = -first1 + 1;
	var max1 = calendarMaxDays(year, mon);
	while(day1 <= max1) {
		row = createTiddlyElement(cal, "tr", null, null, null);
		createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;
	}
}
//}}}
//{{{
setStylesheet(".calendar, .calendar table, .calendar th, .calendar tr, .calendar td { text-align:center; } .calendar, .calendar a { margin:0px !important; padding:0px !important; }", "calendarStyles");
//}}}
// // override cookie settings for CalendarPlugin:
//{{{
config.options.txtCalFirstDay=6;
config.options.txtCalStartOfWeekend=5;
//}}}

// // override internal default settings for CalendarPlugin:
//{{{
config.macros.calendar.journalDateFmt="DDD MMM 0DD YYYY";
//}}}
/***
|Name:|CloseOnCancelPlugin|
|Description:|Closes the tiddler if you click new tiddler then cancel. Default behaviour is to leave it open|
|Version:|3.0.1 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#CloseOnCancelPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
merge(config.commands.cancelTiddler,{

	handler_mptw_orig_closeUnsaved: config.commands.cancelTiddler.handler,

	handler: function(event,src,title) {
		this.handler_mptw_orig_closeUnsaved(event,src,title);
		if (!store.tiddlerExists(title) && !store.isShadowTiddler(title))
			story.closeTiddler(title,true);
	 	return false;
	}

});

//}}}

[[Início]]
<<tabs txtTabDicas "Sintaxe" "Sintaxe do TiddlyWiki" [[Sintaxe do Wiki]] "Equações" "Sintaxe das equações" [[Sintaxe das Equações]] "Gráficos" "Sintaxe dos gráficos" [[Sintaxe dos Gráficos]]>>

[[Dicas]]
/%
|Name|DigitalClock|
|Source|http://www.TiddlyTools.com/#DigitalClock|
|Version|1.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|display current time with automatic LIVE update|

Usage: <<tiddler DigitalClock with: format tick>>

where 'format' is any TiddlyWiki date/time formatting string
and 'tick' is the time in seconds between display updates (default=1sec)

For example, use:
   << ... "0hh:0mm" 60>>
to show hours and minutes only, updated once per minute

%/<script>
	window.DigitalClock_tick=function(id){
		var e=document.getElementById(id); if (!e) return;
		e.title='click to '+(e.paused?'RESUME':'PAUSE')+' clock display';
		if (e.paused) return;
		e.innerHTML=new Date().formatString(e.fmt);
		setTimeout('window.DigitalClock_tick('+id+')',e.tick*1000);
	}
	var e=createTiddlyElement(place,'a',new Date().getTime()+Math.random());
	e.onclick=function(){this.paused=!this.paused;window.DigitalClock_tick(this.id);}
	e.style.cursor='pointer';
	e.fmt=('$1'=='$'+'1')?'hh12:0mm:0ss am':'$1';
	e.tick=('$2'=='$'+'2')?'1':'$2';
	window.DigitalClock_tick(e.id);
</script>
1 - O problema da parada:
| halting : `Todos . os . programas -> NN` |
| halting(p) = | 1 | se a execução de p vai parar |
| | 0 | caso contrário |

2 - Verificar se um programa é correto (isto é, se faz sempre o que é previsto para fazer).

<<tiddler NextTiddler with: [[Revisão de Teoria dos Conjuntos]]>>
!Álgebra de Boole

Valores: ''verdadeiro'' e ''falso''

Proposição: uma afirmação que pode assumir um desses valores.

!Conjunção

$p ww q$ é uma conjunção (operação E)

Tabela verdade:
| p | q | $p ww q$ |
| V | V | V |
| V | F | F |
| F | V | F |
| F | F | F |

!Exemplo

[img[tooltip|exemplo.jpg]]

$p=a in A$ falso

$q=a in B$ falso

$p ww q$ falso


!Disjunção

$p vv q$ é uma disjunção (operação OU)

Tabela verdade:
| p | q | $p vv q$ |
| V | V | V |
| V | F | V |
| F | V | V |
| F | F | F |

!Negação

$not p$ é uma negação, uma afirmação de que p é falsa.

Tabela Verdade:
| p | $not p$ |
| V | F |
| F | V |

!Implicação ou condicional

$p->q$, p implica q, é o mesmo que $q vv not p$

Se p for verdadeira, q necessariamente deve ser verdadeira.
Se p for falsa, não importa o valor de q.

> Exercício: 
>
>  Fazer a tabela verdade da implicação.
>
>  Fazer o diagrama de Venn para $a in A -> a in B$ e explicar a relação entre os conjuntos A e B.


!Bicondicional

$p harr q$, indica que a implicação é válida em ambos sentidos.

Se p for verdadeira, então q é verdadeira.
Se q for verdadeira, então p é verdadeira.


> Exercício: 
>
>  Fazer a tabela verdade da implicação.
>
>  Fazer o diagrama de Venn para `a in A harr a in B` e explicar a relação entre os conjuntos A e B.


!Leis de DeMorgan

$not (p vv q) = not p ww not q$

$not (p ww q) = not p vv not q$

$bar (A uu B)= bar A nn bar B$

$bar (A nn B)= bar A uu bar B$


> Exercício:
>
>  Verificar a validade das leis de De Morgan através de tabela-verdade e de diagrama de Venn
>

<<tiddler NextTiddler with: [[Quantificadores]]>>
/***
|Name:|ExtentTagButtonPlugin|
|Description:|Adds a New tiddler button in the tag drop down|
|Version:|3.2 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#ExtendTagButtonPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{

window.onClickTag_mptw_orig = window.onClickTag;
window.onClickTag = function(e) {
	window.onClickTag_mptw_orig.apply(this,arguments);
	var tag = this.getAttribute("tag");
	var title = this.getAttribute("tiddler");
	// Thanks Saq, you're a genius :)
	var popup = Popup.stack[Popup.stack.length-1].popup;
	createTiddlyElement(createTiddlyElement(popup,"li",null,"listBreak"),"div");
	wikify("<<newTiddler label:'New tiddler' tag:'"+tag+"'>>",createTiddlyElement(popup,"li"));
	return false;
}

//}}}

/***
|FileDropPlugin|h
|author : BradleyMeck|
|version : 0.1.1|
|date : Nov 13 2006|
|usage : drag a file onto the TW to have it be made into a tiddler|
|browser(s) supported : Mozilla|

Note: this version has been 'tweaked' by Eric Shulman (http://www.TiddlyTools.com) to add suspend/resume notification handling to improve performance when multiple files are dropped at once.

!Trouble Shooting
*If the plugin does not seem to work, open up the page "about:config" (just type it in the address bar) and make sure @@color(blue):signed.applets.codebase_principal_support@@ is set to @@color(blue):true@@

!Revisions
*Multiple File Dropping API updated, to end all capturing events after yours return a value that makes if(myFunctionsReturnValue) evaluate to true
*Added support for multiple file drop handlers
**Use the config.macros.fileDrop.addEventListener(@@color(green):String Flavor@@, @@color(green):Function handler(nsiFile){}@@, @@color(green):Boolean addToFront@@) function
***Standard Flavor is "application/x-moz-file"
***addToFront gives your handler priority over all others at time of add
*Old plugin would disallow drops of text vetween applications because it didn't check if the transfer was a file.

!Example Handler
*Adds simple file import control, add this to a tiddler tagged {{{systemConfig}}} to make file dropping work
{{{
config.macros.fileDrop.addEventListener("application/x-moz-file",function(nsiFile)
{
 if(
    confirm("You have dropped the file \""+nsiFile.path+"\" onto the page, it will be imported as a tiddler. Is that ok?")
    )
 {
 var newDate = new Date();
 var title = prompt("what would you like to name the tiddler?");
 store.saveTiddler(title,title,loadFile(nsiFile.path),config.options.txtUserName,newDate,[]);
 }
 return true;
})
}}}

!Example Handler without popups and opening the tiddler on load
*Adds simple file import control, add this to a tiddler tagged {{{systemConfig}}} to make file dropping work
{{{
config.macros.fileDrop.addEventListener("application/x-moz-file",function(nsiFile)
{
 var newDate = new Date();
 store.saveTiddler(nsiFile.path,nsiFile.path,loadFile(nsiFile.path),config.options.txtUserName,newDate,[]);
 story.displayTiddler(null,nsiFile.path)
 return true;
})
}}}
!Code
***/

//{{{
config.macros.fileDrop = {version : {major : 0, minor : 0, revision: 1}};
config.macros.fileDrop.customDropHandlers = [];

config.macros.fileDrop.dragDropHandler = function(evt) {

 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
 // Load in the native DragService manager from the browser.
 var dragService = Components.classes["@mozilla.org/widget/dragservice;1"].getService(Components.interfaces.nsIDragService);

 // Load in the currently-executing Drag/drop session.
 var dragSession = dragService.getCurrentSession();

 // Create an instance of an nsITransferable object using reflection.
 var transferObject = Components.classes["@mozilla.org/widget/transferable;1"].createInstance();

 // Bind the object explicitly to the nsITransferable interface. We need to do this to ensure that
 // methods and properties are present and work as expected later on.
 transferObject = transferObject.QueryInterface(Components.interfaces.nsITransferable);

 // I've chosen to add only the x-moz-file MIME type. Any type can be added, and the data for that format
 // will be retrieved from the Drag/drop service.
 transferObject.addDataFlavor("application/x-moz-file");

 // Get the number of items currently being dropped in this drag/drop operation.
 var numItems = dragSession.numDropItems;
// ELS 2007.12.03: performance improvement when dropping multiple files
if (numItems>1) {
	clearMessage();
	displayMessage("Reading "+numItems+" files...");
	store.suspendNotifications();
}
 for (var i = 0; i < numItems; i++)
 {
 // Get the data for the given drag item from the drag session into our prepared
 // Transfer object.
 dragSession.getData(transferObject, i);

 // We need to pass in Javascript 'Object's to any XPConnect method which
 // requires OUT parameters. The out value will then be saved as a new
 // property called Object.value.
 var dataObj = {};
 var dropSizeObj = {};

for(var ind = 0; ind < config.macros.fileDrop.customDropHandlers.length; ind++)
{
  var item = config.macros.fileDrop.customDropHandlers[ind];
  if(dragSession.isDataFlavorSupported(item.flavor))
  {
    transferObject.getTransferData(item.flavor, dataObj, dropSizeObj);
    var droppedFile = dataObj.value.QueryInterface(Components.interfaces.nsIFile);
    // Display all of the returned parameters with an Alert dialog.
    var result = item.handler.call(item,droppedFile);
 // Since the event is handled, prevent it from going to a higher-level event handler.
	 evt.stopPropagation();
	 evt.preventDefault();
    if(result){break;}
  }
}
 }
// ELS 2007.12.03: performance improvement and feedback after dropping multiple files
if (numItems>1) {
	store.resumeNotifications();
	store.notifyAll();
	displayMessage(numItems+" files have been processed");
}
}

if(!window.event)
{
 // Register the event handler, and set the 'capture' flag to true so we get this event
 // before it bubbles up through the browser.
 window.addEventListener("dragdrop", config.macros.fileDrop.dragDropHandler , true);
}

config.macros.fileDrop.addEventListener = function(paramflavor,func,inFront)
{
var obj = {};
obj.flavor = paramflavor;
obj.handler = func;
if(!inFront)
{config.macros.fileDrop.customDropHandlers.push(obj);}
else{config.macros.fileDrop.customDropHandlers.shift(obj);}
}
//}}}
/***
|Name|FileDropPluginConfig|
|Source|http://www.TiddlyTools.com/#FileDropPluginConfig|
|Version|1.5.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires|FileDropPlugin, AttachFilePlugin|
|Overrides||
|Options|##Configuration|
|Description|Adds drag-and-drop handlers for creating binary attachments or directory lists|

__TiddlyTools FileDrop+AttachFile extended handler:__
* use just filename instead of whole path as tiddler title
* check for existing tiddler and prompt for new name
* handle folder drops (drops each file or creates a file list in a tiddler)
* use AttachFilePlugin if MIME type is not text/plain
* autotag created tiddlers (e.g., "temporary", "dropped", etc.)
* option to suppress automatic display of newly created tiddlers
* suspend/resume notifications when handling multiple files (performance improvement)
!!!!!Configuration
<<<
<<option chkFileDropTrimFilename>> Omit file extensions from tiddler titles when creating new tiddlers
&nbsp;&nbsp;{{{usage: <<option chkFileDropTrimFilename>> }}}
<<option chkFileDropDisplay>> Automatically display newly created tiddlers
&nbsp;&nbsp;{{{usage: <<option chkFileDropDisplay>> }}}
Tag newly created tiddlers with: <<option txtFileDropTags>>
&nbsp;&nbsp;{{{usage: <<option txtFileDropTags>>}}}

__FileDrop+AttachFile configuration options:__
<<option chkFileDropAttachEncodeData>> Encode binary file data as embedded "base64" text
&nbsp;&nbsp;{{{usage: <<option chkFileDropAttachEncodeData>> }}}
...for binary files smaller than: <<option txtFileDropAttachDataLimit>> bytes
&nbsp;&nbsp;{{{usage: <<option txtFileDropAttachDataLimit>>}}}

See [[FileDropPlugin]] for more documentation on handler implementation specifics, including sample code for default drop handlers.
<<<
!!!!!Code
***/
//{{{
if (config.options.chkFileDropAttachEncodeData==undefined)
	config.options.chkFileDropAttachEncodeData=true;
if (config.options.txtFileDropAttachDataLimit==undefined)
	config.options.txtFileDropAttachDataLimit=32768;
if (config.options.txtFileDropTags==undefined)
	config.options.txtFileDropTags="";
if (config.options.chkFileDropDisplay==undefined)
	config.options.chkFileDropDisplay=true;
if (config.options.chkFileDropTrimFilename==undefined)
	config.options.chkFileDropTrimFilename=false;

config.macros.fileDrop.addEventListener("application/x-moz-file",function(nsiFile)
{
	var header="Index of %0\n^^(as of %1)^^\n|!filename| !size | !modified |\n";
	var item="|[[%0|%1]]| %2|%3|\n";
	var footer="Total of %0 bytes in %1 files\n";

	var now=new Date();
	var files=[nsiFile];
	if (nsiFile.isDirectory()) {
		var folder=nsiFile.directoryEntries;
		var files=[];
		while (folder.hasMoreElements()) {
			var f=folder.getNext().QueryInterface(Components.interfaces.nsILocalFile);
			if (f instanceof Components.interfaces.nsILocalFile && !f.isDirectory()) files.push(f);
		}
		var msg=nsiFile.path.replace(/\\/g,"/")+"\n\n";
		msg+="contains "+files.length+" files... ";
		msg+="select OK to attach all files or CANCEL to create a list...";
		if (!confirm(msg)) { // create a list in a tiddler
			var title=nsiFile.leafName; // tiddler name is last directory name in path
			while (title && title.length && store.tiddlerExists(title)) {
				if (confirm(config.messages.overwriteWarning.format([title]))) break; // use existing title
				title=prompt("Please enter a different tiddler title for this file",nsiFile.path.replace(/\\/g,"/"));
			}
			if (!title || !title.length) return true; // aborted by user... we're done!
			var text=header.format([nsiFile.path.replace(/\\/g,"/"),now.toLocaleString()]);
			var total=0;
			for (var i=0; i<files.length; i++) { var f=files[i];
				var name=f.leafName;
				if (config.options.chkFileDropTrimFilename)
					{ var p=name.split("."); if (p.length>1) p.pop(); name=p.join("."); }
				var path="file:///"+f.path.replace(/\\/g,"/");
				var size=f.fileSize; total+=size;
				var when=new Date(f.lastModifiedTime).formatString("YYYY.0MM.0DD 0hh:0mm:0ss");
				text+=item.format([name,path,size,when]);
			}
			text+=footer.format([total,files.length]);
			var newtags=config.options.txtFileDropTags?config.options.txtFileDropTags.readBracketedList():[];
			store.saveTiddler(null,title,text,config.options.txtUserName,now,newtags);
			if (config.options.chkFileDropDisplay) story.displayTiddler(null,title);
			return true;
		}
	}
	if (files.length>1) store.suspendNotifications();
	for (i=0; i<files.length; i++) {
		var file=files[i];
		if (file.isDirectory()) continue; // skip over nested directories
		var type="text/plain";
		var title=file.leafName; // tiddler name is file name
		if (config.options.chkFileDropTrimFilename)
			{ var p=title.split("."); if (p.length>1) p.pop(); title=p.join("."); }
		var path=file.path;
		var size=file.fileSize;
		while (title && title.length && store.tiddlerExists(title)) {
			if (confirm(config.messages.overwriteWarning.format([title]))) break; // use existing title
			title=prompt("Please enter a different tiddler title for this file",path.replace(/\\/g,"/"));
		}
		if (!title || !title.length) continue; // cancelled by user... skip this file
		if (config.macros.attach) {
			type=config.macros.attach.getMIMEType(file.leafName,"");
			if (!type.length)
				type=prompt("Unrecognized file type.  Please enter a MIME type for this file","text/plain");
			if (!type||!type.length) continue; // cancelled by user... skip this file
		}
		var newtags=config.options.txtFileDropTags?config.options.txtFileDropTags.readBracketedList():[];
		if (type=="text/plain")
			store.saveTiddler(null,title,loadFile(path),config.options.txtUserName,now,newtags);
		else {
			// only encode data if enabled and file is smaller than limit.  Default is 32768 (32K) bytes.
			var embed=config.options.chkFileDropAttachEncodeData
				&& file.fileSize<config.options.txtFileDropAttachDataLimit;
			newtags.push("attachment"); newtags.push("excludeMissing");
			// if file is in current document folder, remove path prefix and use relative reference
			var localfile=path;
			var h=document.location.href; folder=getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf("/")+1)));
			if (localfile.substr(0,folder.length)==folder) localfile='./'+localfile.substr(folder.length);
			config.macros.attach.createAttachmentTiddler(path,
				now.formatString(config.macros.timeline.dateFormat),
				"attached by FileDropPlugin", newtags,
				title, embed, true, false, localfile, "", type,!config.options.chkFileDropDisplay);
		}
		if (config.options.chkFileDropDisplay) story.displayTiddler(null,title);
	}
	if (files.length>1) { store.resumeNotifications(); store.notifyAll(); }
	if (window.FFDEBUG) console.log(new Date()-now);
	return true;
})
//}}}
/***
|Name|FoldHeadingsPlugin|
|Source|http://www.TiddlyTools.com/#FoldHeadingsPlugin|
|Version|1.0.2|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|automatically turn headings into slider-like panels that can be folded/unfolded with a single click|
This plugin defines a macro that automatically converts heading-formatted content into sliders that let you expand/collapse their content by clicking on individual headings.
!!!!!Usage
<<<
{{{
<<foldHeadings opened|closed tag tag tag...>>
}}}
where: ''opened'' or ''closed'' is a keyword indicating the initial state of the sections (default: opened), and ''tag tag tag...'' is an optional list of tags to match, so that the foldable effect is only applied to tiddlers that contain one (or more) of the indicated tags.  

When you place the macro in a tiddler, any heading-formatted content (i.e, "!" through "!!!!!") in that tiddler will automatically become //'fold-able'//, allowing you to expand/collapse the content that follows each heading simply by clicking on that heading.  Each content section begins with the first element following a heading, and continues until either another heading is found or the end of the tiddler is reached.  For example:
{{{
<<foldHeadings closed>>
}}}
is embedded in ''this'' tiddler in order to make all the headings it contains 'fold-able'.  Note that the macro has been placed at the //end// of the tiddler because it only operates on *rendered* content.  Thus, only headings that //precede// it in the same tiddler will become fold-able, as any headings that //follow// it are not actually rendered until //after// the macro has been processed.

You can further limit the effect of the macro within the tiddler by surrounding several headings in a "CSS class wrapper" ("""{{classname{...}}}""") or other containing DOM element (e.g., """@@display:inline;...@@""") and then embedding the {{{<<foldHeadings>>}}} macro inside that container (at the end)... only those headings that are also within that container will be made fold-able, instead of converting ''all'' the headings in that tiddler.

Conversely, if you want the fold-able ability to apply to the headings in //all// tiddlers, ''without having to alter //any// of those individual tiddlers'', you can add the macro to the end of your [[ViewTemplate]], so that it will be invoked after the content in each tiddler has been rendered, causing all headings they contain to automatically become fold-able.  For example:
{{{
<span macro="foldHeadings closed"></span>
}}}
You can also limit this effect to selected tiddlers by specifying one or more tags as additional macro parameters.  For example:
{{{
<span macro="foldHeadings closed systemConfig"></span>
}}}
is only applied to headings contained in //plugin tiddlers// (i.e., tiddlers tagged with <<tag systemConfig>>), while headings in other tiddlers remain unaffected by the macro, even though it is embedded in the common [[ViewTemplate]] definition.
<<<
!!!!!Revisions
<<<
2007.12.06 [1.0.2] fix handling for empty sections when checking for sliderPanel/floatingPanel
2007.12.02 [1.0.1] fix handling when content following a heading is already a sliderPanel/floatingPanel
2007.12.01 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.FoldHeadings= {major: 1, minor: 0, revision: 2, date: new Date(2007,12,6)};

config.macros.foldHeadings = {
	guideText: "opened|closed className",
	showtip: "click to show '%0'",
	hidetip: "click to hide '%0'",
	showlabel: "more...",
	hidelabel: "[x]",
	html: "<span style='float:right;text-weight:normal;font-size:80%;' class='TiddlyLinkExisting'>%0&nbsp;</span>",
	handler: function(place,macroName,params) {
		var show=params[0] && params.shift().toLowerCase()!="closed";
		if (params.length) { // if filtering by tag(s)
			var here=story.findContainingTiddler(place);
			if (here) var tid=store.getTiddler(here.getAttribute("tiddler"));
			if (!tid || !tid.tags.containsAny(params)) return; // in a tiddler and not tagged... do nothing...
		}
		var elems=place.parentNode.getElementsByTagName("*");
		var heads=[]; for (var i=0; i<elems.length; i++) { // get non-foldable heading elements
			var n=elems[i].nodeName; var foldable=hasClass(elems[i],"foldable");
			if ((n=="H1"||n=="H2"||n=="H3"||n=="H4"||n=="H5")&&!foldable)
				heads.push(elems[i]);
			}
		for (var i=0; i<heads.length; i++) { var h=heads[i]; // for each heading element...
			// find start/end of section content (up to next heading or end of content)
			var start=end=h.nextSibling; while (end && end.nextSibling) {
				var n=end.nextSibling.nodeName.toUpperCase();
				if (n=="H1"||n=="H2"||n=="H3"||n=="H4"||n=="H5") break;
				end=end.nextSibling;
			}
			if (start && hasClass(start,"sliderPanel")||hasClass(start,"floatingPanel")) continue; // heading is already a slider!
			var span=createTiddlyElement(null,"span",null,"sliderPanel"); // create container
			span.style.display=show?"inline":"none"; // set initial display state
			h.parentNode.insertBefore(span,start); // and insert it following the heading element
			// move section elements into container...
			var e=start; while (e) { var next=e.nextSibling; span.insertBefore(e,null); if (e==end) break; e=next; }
			// set heading label/tip/cursor...
			h.title=(show?this.hidetip:this.showtip).format([h.textContent])
			h.innerHTML=this.html.format([show?this.hidelabel:this.showlabel])+h.innerHTML;
			h.style.cursor='pointer';
			addClass(h,"foldable"); // so we know it been done (and to add extra styles)
			h.onclick=function() {
				var panel=this.nextSibling; var show=panel.style.display=="none";
				// update panel display state
				if (config.options.chkAnimate) anim.startAnimating(new Slider(panel,show));
				else panel.style.display = show?"inline":"none";
				// update heading label/tip
				this.removeChild(this.firstChild); // remove existing label
				var fh=config.macros.foldHeadings; // abbreviation for readability...
				this.title=(show?fh.hidetip:fh.showtip).format([this.textContent])
				this.innerHTML=fh.html.format([show?fh.hidelabel:fh.showlabel])+this.innerHTML;
			}
		}		
	}
}
//}}}
// //<<foldHeadings closed>>
/***
|Name|FontSizePlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#FontSizePlugin|
|Version|1.0|
|Requires|~TW2.x|
!Description:
Resize tiddler text on the fly. The text size is remembered between sessions by use of a cookie.
You can customize the maximum and minimum allowed sizes.
(only affects tiddler content text, not any other text)

Also, you can load a TW file with a font-size specified in the url.
Eg: http://tw.lewcid.org/#font:110

!Demo:
Try using the font-size buttons in the sidebar, or in the MainMenu above.

!Installation:
Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.
Then put {{{<<fontSize "font-size:">>}}} in your SideBarOptions tiddler, or anywhere else that you might like.

!Usage
{{{<<fontSize>>}}} results in <<fontSize>>
{{{<<fontSize font-size: >>}}} results in <<fontSize font-size:>>

!Customizing:
The buttons and prefix text are wrapped in a span with class fontResizer, for easy css styling.
To change the default font-size, and the maximum and minimum font-size allowed, edit the config.fontSize.settings section of the code below.

!Notes:
This plugin assumes that the initial font-size is 100% and then increases or decreases the size by 10%. This stepsize of 10% can also be customized.

!History:
*27-07-06, version 1.0 : prevented double clicks from triggering editing of containing tiddler.
*25-07-06,  version 0.9

!Code
***/

//{{{
config.fontSize={};

//configuration settings
config.fontSize.settings =
{
            defaultSize : 100,  // all sizes in %
            maxSize : 200,
            minSize : 40,
            stepSize : 10
};

//startup code
var fontSettings = config.fontSize.settings;

if (!config.options.txtFontSize)
            {config.options.txtFontSize = fontSettings.defaultSize;
            saveOptionCookie("txtFontSize");}
setStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\n","fontResizerStyles");
setStylesheet("#contentWrapper .fontResizer .button {display:inline;font-size:105%; font-weight:bold; margin:0 1px; padding: 0 3px; text-align:center !important;}\n .fontResizer {margin:0 0.5em;}","fontResizerButtonStyles");

//macro
config.macros.fontSize={};
config.macros.fontSize.handler = function (place,macroName,params,wikifier,paramString,tiddler)
{

               var sp = createTiddlyElement(place,"span",null,"fontResizer");
               sp.ondblclick=this.onDblClick;
               if (params[0])
                           createTiddlyText(sp,params[0]);
               createTiddlyButton(sp,"+","increase font-size",this.incFont);
               createTiddlyButton(sp,"=","reset font-size",this.resetFont);
               createTiddlyButton(sp,"–","decrease font-size",this.decFont);
}

config.macros.fontSize.onDblClick = function (e)
{
             if (!e) var e = window.event;
             e.cancelBubble = true;
             if (e.stopPropagation) e.stopPropagation();
             return false;
}

config.macros.fontSize.setFont = function ()
{
               saveOptionCookie("txtFontSize");
               setStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\n","fontResizerStyles");
}

config.macros.fontSize.incFont=function()
{
               if (config.options.txtFontSize < fontSettings.maxSize)
                  config.options.txtFontSize = (config.options.txtFontSize*1)+fontSettings.stepSize;
               config.macros.fontSize.setFont();
}

config.macros.fontSize.decFont=function()
{

               if (config.options.txtFontSize > fontSettings.minSize)
                  config.options.txtFontSize = (config.options.txtFontSize*1) - fontSettings.stepSize;
               config.macros.fontSize.setFont();
}

config.macros.fontSize.resetFont=function()
{

               config.options.txtFontSize=fontSettings.defaultSize;
               config.macros.fontSize.setFont();
}

config.paramifiers.font =
{
               onstart: function(v)
                  {
                   config.options.txtFontSize = v;
                   config.macros.fontSize.setFont();
                  }
};
//}}}
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:
* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* MainMenu: The menu (usually on the left)
* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>

See also [[MPTW]].
/***
|Name:|HideWhenPlugin|
|Description:|Allows conditional inclusion/exclusion in templates|
|Version:|3.1 ($Rev: 3919 $)|
|Date:|$Date: 2008-03-13 02:03:12 +1000 (Thu, 13 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#HideWhenPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
For use in ViewTemplate and EditTemplate. Example usage:
{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}
{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}
***/
//{{{

window.hideWhenLastTest = false;

window.removeElementWhen = function(test,place) {
	window.hideWhenLastTest = test;
	if (test) {
		removeChildren(place);
		place.parentNode.removeChild(place);
	}
};


merge(config.macros,{

	hideWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( eval(paramString), place);
	}},

	showWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !eval(paramString), place);
	}},

	hideWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAll(params), place);
	}},

	showWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAll(params), place);
	}},

	hideWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAny(params), place);
	}},

	showWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAny(params), place);
	}},

	hideWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAll(params), place);
	}},

	showWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAll(params), place);
	}},

	hideWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0]), place);
	}},

	showWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !(store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0])), place);
	}},

	hideWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.title == params[0], place);
	}},

	showWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.title != params[0], place);
	}},

	'else': { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !window.hideWhenLastTest, place);
	}}

});

//}}}

<<tidIDE>>
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.3|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|Insert Javascript executable code directly into your tiddler content.|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Documentation
>see [[InlineJavascriptPluginInfo]]
!!!!!Revisions
<<<
2008.06.11 [1.9.3] added $(...) function as 'shorthand' convenience syntax for document.getElementById()
2008.03.03 [1.9.2] corrected declaration of wikifyPlainText() for 'TW 2.1.x compatibility fallback' (fixes Safari "parse error")
2008.02.23 [1.9.1] in onclick function, use string instead of array for 'bufferedHTML' attribute on link element (fixes IE errors)
2008.02.21 [1.9.0] 'onclick' scripts now allow returned text (or document.write() calls) to be wikified into a span that immediately follows the onclick link.  Also, added default 'return false' handling if no return value provided (prevents HREF from being triggered -- return TRUE to allow HREF to be processed).  Thanks to Xavier Verges for suggestion and preliminary code.
|please see [[InlineJavascriptPluginInfo]] for additional revision details|
2005.11.08 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.inlineJavascript= {major: 1, minor: 9, revision: 3, date: new Date(2008,6,11)};

config.formatters.push( {
	name: "inlineJavascript",
	match: "\\<script",
	lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\n)*?)\\\")?(?: title=\\\"((?:.|\\n)*?)\\\")?(?: key=\\\"((?:.|\\n)*?)\\\")?( show)?\\>((?:.|\\n)*?)\\</script\\>",

	handler: function(w) {
		var lookaheadRegExp = new RegExp(this.lookahead,"mg");
		lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var src=lookaheadMatch[1];
			var label=lookaheadMatch[2];
			var tip=lookaheadMatch[3];
			var key=lookaheadMatch[4];
			var show=lookaheadMatch[5];
			var code=lookaheadMatch[6];
			if (src) { // load a script library
				// make script tag, set src, add to body to execute, then remove for cleanup
				var script = document.createElement("script"); script.src = src;
				document.body.appendChild(script); document.body.removeChild(script);
			}
			if (code) { // there is script code
				if (show) // show inline script code in tiddler output
					wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
				if (label) { // create a link to an 'onclick' script
					// add a link, define click handler, save code in link (pass 'place'), set link attributes
					var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",wikifyPlainText(label));
					var fixup=code.replace(/document.write\s*\(/gi,'place.bufferedHTML+=(');
					link.code="function _out(place){"+fixup+"\n};_out(this);"
					link.tiddler=w.tiddler;
					link.onclick=function(){
						this.bufferedHTML="";
						try{ var r=eval(this.code);
							if(this.bufferedHTML.length || (typeof(r)==="string")&&r.length)
								var s=this.parentNode.insertBefore(document.createElement("span"),this.nextSibling);
							if(this.bufferedHTML.length)
								s.innerHTML=this.bufferedHTML;
							if((typeof(r)==="string")&&r.length) {
								wikify(r,s,null,this.tiddler);
								return false;
							} else return r!==undefined?r:false;
						} catch(e){alert(e.description||e.toString());return false;}
					};
					link.setAttribute("title",tip||"");
					var URIcode='javascript:void(eval(decodeURIComponent(%22(function(){try{';
					URIcode+=encodeURIComponent(encodeURIComponent(code.replace(/\n/g,' ')));
					URIcode+='}catch(e){alert(e.description||e.toString())}})()%22)))';
					link.setAttribute("href",URIcode);
					link.style.cursor="pointer";
					if (key) link.accessKey=key.substr(0,1); // single character only
				}
				else { // run inline script code
					var fixup=code.replace(/document.write\s*\(/gi,'place.innerHTML+=(');
					var code="function _out(place){"+fixup+"\n};_out(w.output);"
					try { var out=eval(code); } catch(e) { out=e.description?e.description:e.toString(); }
					if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
				}
			}
			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
		}
	}
} )
//}}}

// // Backward-compatibility for TW2.1.x and earlier
//{{{
if (typeof(wikifyPlainText)=="undefined") window.wikifyPlainText=function(text,limit,tiddler) {
	if(limit > 0) text = text.substr(0,limit);
	var wikifier = new Wikifier(text,formatter,null,tiddler);
	return wikifier.wikifyPlain();
}
//}}}

// // $(...) function: 'shorthand' convenience syntax for document.getElementById()
//{{{
if (typeof($)=="undefined") { // avoid redefinition
function $() {
	var elements=new Array();
	for (var i=0; i<arguments.length; i++) {
		var element=arguments[i];
		if (typeof element=='string') element=document.getElementById(element);
		if (arguments.length==1) return element;
		elements.push(element);
	}
	return elements;
}
}
//}}}
/***
|Name|InlineJavascriptPluginInfo|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.3|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|documentation|
|Requires||
|Overrides||
|Description|Documentation for InlineJavascriptPlugin|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Usage
<<<
This plugin adds wiki syntax for surrounding tiddler content with {{{<script>}}} and {{{</script>}}} markers, so that it can be recognized as embedded javascript code.
<script show>
	/* javascript code goes here... */
</script>Every time the tiddler content is rendered, the javascript code is automatically evaluated, allowing you to invoke 'side-effect' processing and/or produce dynamically-generated content that is then inserted into the tiddler content, immediately following the script (see below).  By including the optional ''show'' keyword as the final parameter in a {{{<script>}}} marker, the plugin will also include the script source code in the output that it displays in the tiddler.  This is helpful when creating examples for documentation purposes (such as used in this tiddler!)

__''Deferred execution from an 'onClick' link''__
<script label="click here" title="mouseover tooltip text" key="X" show>
	/* javascript code goes here... */
	alert('you clicked on the link!');
</script>
By including a {{{label="..."}}} parameter in the initial {{{<script>}}} marker, the plugin will create a link to an 'onclick' script that will only be executed when that specific link is clicked, rather than running the script each time the tiddler is rendered.  You may also include a {{{title="..."}}} parameter to specify the 'tooltip' text that will appear whenever the mouse is moved over the onClick link text, and a {{{key="X"}}} parameter to specify an //access key// (which must be a //single// letter or numeric digit only).

__''Loading scripts from external source files''__
<script src="URL" show>
	/* optional javascript code goes here... */
</script>You can also load javascript directly from an external source URL, by including a src="..." parameter in the initial {{{<script>}}} marker (e.g., {{{<script src="demo.js"></script>}}}).  This is particularly useful when incorporating third-party javascript libraries for use in custom extensions and plugins.  The 'foreign' javascript code remains isolated in a separate file that can be easily replaced whenever an updated library file becomes available.

In addition to loading the javascript from the external file, you can also use this feature to invoke javascript code contained within the {{{<script>...</script>}}} markers.  This code is invoked //after// the external script file has been processed, and can make immediate use of the functions and/or global variables defined by the external script file.
>Note: To ensure that your javascript functions are always available when needed, you should load the libraries from a tiddler that is rendered as soon as your TiddlyWiki document is opened, such as MainMenu.  For example: put your {{{<script src="..."></script>}}} syntax into a separate 'library' tiddler (e.g., LoadScripts), and then add {{{<<tiddler LoadScripts>>}}} to MainMenu so that the library is loaded before any other tiddlers that rely upon the functions it defines. 
>
>Normally, loading external javascript in this way does not produce any direct output, and should not have any impact on the appearance of your MainMenu.  However, if your LoadScripts tiddler contains notes or other visible content, you can suppress this output by using 'inline CSS' in the MainMenu, like this: {{{@@display:none;<<tiddler LoadScripts>>@@}}}
<<<
!!!!!Creating dynamic tiddler content and accessing the ~TiddlyWiki DOM
<<<
An important difference between TiddlyWiki inline scripting and conventional embedded javascript techniques for web pages is the method used to produce output that is dynamically inserted into the document: in a typical web document, you use the {{{document.write()}}} (or {{{document.writeln()}}}) function to output text sequences (often containing HTML tags) that are then rendered when the entire document is first loaded into the browser window.

However, in a ~TiddlyWiki document, tiddlers (and other DOM elements) are created, deleted, and rendered "on-the-fly", so writing directly to the global 'document' object does not produce the results you want (i.e., replacing the embedded script within the tiddler content), and instead will //completely replace the entire ~TiddlyWiki document in your browser window (which is clearly not a good thing!)//.  In order to allow scripts to use {{{document.write()}}}, the plugin automatically converts and buffers all HTML output so it can be safely inserted into your tiddler content, immediately following the script.

''Note that {{{document.write()}}} can only be used to output "pure HTML" syntax.  To produce //wiki-formatted// output, your script should instead return a text value containing the desired wiki-syntax content'', which will then be automatically rendered immediately following the script.  If returning a text value is not sufficient for your needs, the plugin also provides an automatically-defined variable, 'place', that gives the script code ''direct access to the //containing DOM element//'' into which the tiddler output is being rendered.  You can use this variable to ''perform direct DOM manipulations'' that can, for example:
* generate wiki-formatted output using {{{wikify("...content...",place)}}}
* vary the script's actions based upon the DOM element in which it is embedded
* access 'tiddler-relative' DOM information using {{{story.findContainingTiddler(place)}}}
Note:
''When using an 'onclick' script, the 'place' element actually refers to the onclick //link text// itself, instead of the containing DOM element.''  This permits you to directly reference or modify the link text to reflect any 'stateful' conditions that might set by the script.  To refer to the containing DOM element from within an 'onclick' script, you can use "place.parentNode" instead.
<<<
!!!!!Instant "bookmarklets"
<<<
You can also use an 'onclick' link to define a "bookmarklet": a small piece of javascript that can be ''invoked directly from the browser without having to be defined within the current document.''  This allows you to create 'stand-alone' commands that can be applied to virtually ANY TiddlyWiki document... even remotely-hosted documents that have been written by others!!  To create a bookmarklet, simply define an 'onclick' script and then grab the resulting link text and drag-and-drop it onto your browser's toolbar (or right-click and use the 'bookmark this link' command to add it to the browser's menu).

Notes:
*When writing scripts intended for use as bookmarklets, due to the ~URI-encoding required by the browser, ''you cannot not use ANY double-quotes (") within the bookmarklet script code.''
*All comments embedded in the bookmarklet script must ''use the fully-delimited {{{/* ... */}}} comment syntax,'' rather than the shorter {{{//}}} comment syntax.
*Most importantly, because bookmarklets are invoked directly from the browser interface and are not embedded within the TiddlyWiki document, there is NO containing 'place' DOM element surrounding the script.  As a result, ''you cannot use a bookmarklet to generate dynamic output in your document,''  and using {{{document.write()}}} or returning wiki-syntax text or making reference to the 'place' DOM element will halt the script and report a "Reference Error" when that bookmarklet is invoked.  
Please see [[InstantBookmarklets]] for many examples of 'onclick' scripts that can also be used as bookmarklets.
<<<
!!!!!Special reserved function name
<<<
The plugin 'wraps' all inline javascript code inside a function, {{{_out()}}}, so that any return value you provide can be correctly handled by the plugin and inserted into the tiddler.  To avoid unpredictable results (and possibly fatal execution errors), this function should never be redefined or called from ''within'' your script code.
<<<
!!!!!$(...) 'shorthand' function
<<<
As described by Dustin Diaz [[here|http://www.dustindiaz.com/top-ten-javascript/]], the plugin defines a 'shorthand' function that allows you to write:
{{{
$(id)
}}}
in place of the normal standard javascript syntax:
{{{
document.getElementById(id)
}}}
This function is provided merely as a convenience for javascript coders that may be familiar with this abbreviation, in order to allow them to save a few bytes when writing their own inline script code.
<<<
!!!!!Examples
<<<
simple dynamic output:
><script show>
	document.write("The current date/time is: "+(new Date())+"<br>");
	return "link to current user: [["+config.options.txtUserName+"]]\n";
</script>
dynamic output using 'place' to get size information for current tiddler:
><script show>
	if (!window.story) window.story=window;
	var title=story.findContainingTiddler(place).getAttribute("tiddler");
	var size=store.getTiddlerText(title).length;
	return title+" is using "+size+" bytes";
</script>
dynamic output from an 'onclick' script, using {{{document.write()}}} and/or {{{return "..."}}}
><script label="click here" show>
	document.write("<br>The current date/time is: "+(new Date())+"<br>");
	return "link to current user: [["+config.options.txtUserName+"]]\n";
</script>
creating an 'onclick' button/link that accesses the link text AND the containing tiddler:
><script label="click here" title="clicking this link will show an 'alert' box" key="H" show>
	if (!window.story) window.story=window;
	var txt=place.firstChild.data;
	var tid=story.findContainingTiddler(place).getAttribute('tiddler');
	alert('Hello World!\nlinktext='+txt+'\ntiddler='+tid);
</script>
dynamically setting onclick link text based on stateful information:
>{{block{
{{{
<script label="click here">
	/* toggle "txtSomething" value */
	var on=(config.txtSomething=="ON");
	place.innerHTML=on?"enable":"disable";
	config.txtSomething=on?"OFF":"ON";
	return "\nThe current value is: "+config.txtSomething;
</script><script>
	/* initialize onclick link text based on current "txtSomething" value */
	var on=(config.txtSomething=="ON");
	place.lastChild.previousSibling.innerHTML=on?"disable":"enable";
</script>
}}}
<script label="click here">
	/* toggle "txtSomething" value */
	var on=(config.txtSomething=="ON");
	place.innerHTML=on?"enable":"disable";
	config.txtSomething=on?"OFF":"ON";
	return "\nThe current value is: "+config.txtSomething;
</script><script>
	/* initialize onclick link text based on current "txtSomething" value */
	var on=(config.txtSomething=="ON");
	place.lastChild.innerHTML=on?"enable":"disable";
</script>
}}}
loading a script from a source url:
>http://www.TiddlyTools.com/demo.js contains:
>>{{{function inlineJavascriptDemo() { alert('Hello from demo.js!!') } }}}
>>{{{displayMessage('InlineJavascriptPlugin: demo.js has been loaded');}}}
>note: When using this example on your local system, you will need to download the external script file from the above URL and install it into the same directory as your document.
>
><script src="demo.js" show>
	return "inlineJavascriptDemo() function has been defined"
</script>
><script label="click to invoke inlineJavascriptDemo()" key="D" show>
	inlineJavascriptDemo();
</script>
<<<
!!!!!Revisions
<<<
2008.06.11 [1.9.3] added $(...) function as 'shorthand' convenience syntax for document.getElementById()
2008.03.03 [1.9.2] corrected declaration of wikifyPlainText() for 'TW 2.1.x compatibility fallback' (fixes Safari "parse error")
2008.02.23 [1.9.1] in onclick function, use string instead of array for 'bufferedHTML' attribute on link element (fixes IE errors)
2008.02.21 [1.9.0] 'onclick' scripts now allow returned text (or document.write() calls) to be wikified into a span that immediately follows the onclick link.  Also, added default 'return false' handling if no return value provided (prevents HREF from being triggered -- return TRUE to allow HREF to be processed).  Thanks to Xavier Verges for suggestion and preliminary code.
2008.02.14 [1.8.1] added backward-compatibility for use of wikifyPlainText() in TW2.1.3 and earlier
2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info tiddler
2007.12.28 [1.8.0] added support for key="X" syntax to specify custom access key definitions
2007.12.15 [1.7.0] autogenerate URI encoded HREF on links for onclick scripts.  Drag links to browser toolbar to create bookmarklets.  IMPORTANT NOTE: place is NOT defined when scripts are used as bookmarklets.  In addition, double-quotes will cause syntax errors.  Thanks to PaulReiber for debugging and brainstorming.
2007.11.26 [1.6.2] when converting "document.write()" function calls in inline code, allow whitespace between "write" and "(" so that "document.write ( foobar )" is properly converted.
2007.11.16 [1.6.1] when rendering "onclick scripts", pass label text through wikifyPlainText() to parse any embedded wiki-syntax to enable use of HTML entities or even TW macros to generate dynamic label text.
2007.02.19 [1.6.0] added support for title="..." to specify mouseover tooltip when using an onclick (label="...") script
2006.10.16 [1.5.2] add newline before closing '}' in 'function out_' wrapper.  Fixes error caused when last line of script is a comment.
2006.06.01 [1.5.1] when calling wikify() on script return value, pass hightlightRegExp and tiddler params so macros that rely on these values can render properly
2006.04.19 [1.5.0] added 'show' parameter to force display of javascript source code in tiddler output
2006.01.05 [1.4.0] added support 'onclick' scripts.  When label="..." param is present, a button/link is created using the indicated label text, and the script is only executed when the button/link is clicked.  'place' value is set to match the clicked button/link element.
2005.12.13 [1.3.1] when catching eval error in IE, e.description contains the error text, instead of e.toString().  Fixed error reporting so IE shows the correct response text.  Based on a suggestion by UdoBorkowski
2005.11.09 [1.3.0] for 'inline' scripts (i.e., not scripts loaded with src="..."), automatically replace calls to 'document.write()' with 'place.innerHTML+=' so script output is directed into tiddler content.  Based on a suggestion by BradleyMeck
2005.11.08 [1.2.0] handle loading of javascript from an external URL via src="..." syntax
2005.11.08 [1.1.0] pass 'place' param into scripts to provide direct DOM access 
2005.11.08 [1.0.0] initial release
<<<
/%
|Name|InstantBookmarklets|
|Source|http://www.TiddlyTools.com/#InstantBookmarklets|
|Version|2.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|instantly create bookmarklets by dragging onclick links to the browser toolbar|

See [[InlineJavascriptPluginInfo]] for bookmarklet authoring documentation

%/{{nowrap{
__[[InstantBookmarklets:|InstantBookmarklets]]__{{fine{__// drag these links to your browser toolbar!//__ <script label="(help...)">
alert("To create a bookmarklet, simply drag-and-drop any command link below directly onto your browser's toolbar or right-click and use 'bookmark this link' (or 'add to favorites') to add the bookmarklet to your browser's bookmarks menu.  Once installed, you can use the bookmarklet with ANY TiddlyWiki document, even if the command script (and InlineJavascriptPlugin) has not been installed in that document!");
</script>}}}

//~TiddlyWiklets: {{fine{(TiddlyWiki "tear-off" utilities)}}}///%

========================== TOGGLE SITE TITLES %/
*<script label="&#x25b2; - Toggle site titles" title="show/hide SiteTitle and SiteSubtitle (header) content">
	var c=document.getElementById('contentWrapper');  if (!c) return;
	for (var i=0; i<c.childNodes.length; i++)
		if (hasClass(c.childNodes[i],'header')) { var h=c.childNodes[i]; break; }
	if (!h) return;
	config.options.chkHideSiteTitles=h.style.display!='none';
	h.style.display=config.options.chkHideSiteTitles?'none':'block';
	saveOptionCookie('chkHideSiteTitles');
	return false;
</script>/%

========================== TOGGLE LEFT SIDEBAR %/
*<<tiddler ToggleLeftSidebar with: "&#x25c4; - Toggle left sidebar">>/%

========================== TOGGLE RIGHT SIDEBAR %/
*<<tiddler ToggleRightSidebar with: "&#x25ba; - Toggle right sidebar">>/%

========================== TOGGLE ANIMATION EFFECTS %/
*<<tiddler ToggleAnimations with: "&infin; - Toggle animation effects">>/%

========================== TOGGLE SINGLE PAGE MODE %/
*<<tiddler ToggleSinglePageMode with: "1 - Toggle single-page mode">>/%

========================== TOGGLE "FULLSCREEN" (SIDEBARS AND TITLES) %/
*<<tiddler ToggleFullScreen with: "&loz; - Toggle fullscreen">>/%

========================== TOGGLE TIDDLER TITLES (and SUBTITLES) %/
*<<tiddler ToggleTiddlerTitles with: "T - Toggle tiddler titles">>/%

========================== TOGGLE TIDDLER TAGS %/
*<<tiddler ToggleTiddlerTags with: "# - Toggle tiddler tags">>/%

========================== RESTART WITHOUT RELOADING %/
*<script label="&#x2302; - Home" title="Restart initial page content WITHOUT RELOADING!">
	story.closeAllTiddlers(); restart(); refreshPageTemplate(); 
 	return false;
</script>/%

========================== REFRESH WITHOUT RESTARTING %/
*<<tiddler RefreshPageDisplay with: "&asymp; - Refresh current display">>/%

========================== SHOW CURRENT VERSION, TIMESTAMP, and TIDDLER INFO %/
*<<tiddler ShowDocumentInfo>>/%

========================== RESET TIDDLYWIKI OPTION COOKIES (WITH CONFIRM) %/
*<<tiddler ResetOptionCookies>>/%

========================== CLEAR CHANGE COUNTERS %/
*<<tiddler ResetChangeCounters>>/%

========================== RESCUE STORE AREA (adapted from http://www.TiddlyWiki.com/#TiddlyBookmarklets) %/
*<<tiddler RescueStoreAreaCommand with: "&sum; - Rescue current storeArea contents">>/%

========================== LOAD REMOTE PLUGINS... %/

//Load remote plugins: {{fine{(load on demand)}}}///%

========================== TiddlyTools (Eric Shulman)...%/
*[[TiddlyTools|http://www.TiddlyTools.com/]]{{block{/%

========================== LOAD IMPORT TIDDLERS PLUGIN
%/<<tiddler LoadRemotePlugin with:
	[[ImportTiddlersPlugin]]
	[[Load ImportTiddlersPlugin from svn.TiddlyWiki.org repository]]
	[[http://svn.tiddlywiki.org/Trunk/contributors/EricShulman/plugins/ImportTiddlersPlugin.js]]
	[[window.story.displayTiddler(null,'ImportTiddlers')]]
	[[version.extensions.importTiddlers!=undefined]]
>>/%

========================== LOAD TIDDLER TWEAKER PLUGIN
%/<<tiddler LoadRemotePlugin with:
	[[TiddlerTweakerPlugin]]
	[[Load TiddlerTweakerPlugin from svn.TiddlyWiki.org repository]]
	[[http://svn.tiddlywiki.org/Trunk/contributors/EricShulman/plugins/TiddlerTweakerPlugin.js]]
	[[window.story.displayTiddler(null,'TiddlerTweaker')]]
	[[version.extensions.tiddlerTweaker!=undefined]]
>>/%

========================== LOAD REARRANGE TIDDLERS PLUGIN
%/<<tiddler LoadRemotePlugin with:
	[[RearrangeTiddlersPlugin]]
	[[Load RearrangeTiddlersPlugin from www.TiddlyTools.com]]
	[[http://www.TiddlyTools.com/plugins/RearrangeTiddlersPlugin.js]]
	[[window.story.forEachTiddler(function(t,e){window.story.refreshTiddler(t,null,true)}); window.refreshDisplay()]]
	[[Story.prototype.rearrangeTiddlersHijack_refreshTiddler!=undefined]]
>>/%

%/}}}/%

========================== Abego Software (Udo Borkowski)...%/
*[[Abego Software|http://tiddlywiki.abego-software.de/]]{{block{/%

========================== LOAD YOURSEARCH PLUGIN
%/<<tiddler LoadRemotePlugin with:
	[[YourSearchPlugin]]
	[[Load YourSearchPlugin from tiddlywiki.abego-software.de]]
	[[http://tiddlywiki.abego-software.de/archive/YourSearchPlugin/Plugin-YourSearch-src.2.1.1.js]]
	[[window.refreshPageTemplate()]]
	[[version.extensions.YourSearchPlugin!=undefined]]
>>/%
%/}}}/%

========================== Firefox Privileges (Xavier Vergés) %/
*[[FirefoxPrivileges.TiddlySpot.com|http://firefoxprivileges.tiddlyspot.com/]]{{block{/%

========================== LOAD AND DISPLAY FIREFOX PRIVILEGE MANAGER
%/<<tiddler LoadRemotePlugin with:
	[[Firefox Privilege Manager]]
	[[Load Firefox Privilege Manager from svn.TiddlyWiki.org repository]]
	[[http://svn.tiddlywiki.org/Trunk/contributors/XavierVerges/plugins/FirefoxPrivilegesPlugin.js]]
	[[config.macros.firefoxPrivileges.onload()]]
	[[config.macros.firefoxPrivileges!=undefined]]
	[[backstage.switchTab("firefoxPrivileges")]]
>>/%
%/}}}/%

========================== Jash (Billy Reisinger) %/
*[[BillyReisinger.com:|http://www.billyreisinger.com/jash/]]{{block{/%

========================== LOAD AND DISPLAY JAVASCRIPT SHELL
%/<<tiddler LoadRemotePlugin with:
	[[Jash (JAvascript SHell)]]
	[[Load Jash (JAvascript SHell) from www.billyreisinger.com/jash]]
	[[http://www.billyreisinger.com/jash/source/latest/Jash.js]]
	[[window.jash.close()]]
	[[window.jash!=undefined]]
>>/%
%/}}}

}}}/%  END NOWRAP %/
/***
|Name:|InstantTimestampPlugin|
|Description:|A handy way to insert timestamps in your tiddler content|
|Version:|1.0.10 ($Rev: 3646 $)|
|Date:|$Date: 2008-02-27 02:34:38 +1000 (Wed, 27 Feb 2008) $|
|Source:|http://mptw.tiddlyspot.com/#InstantTimestampPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Usage
If you enter {ts} in your tiddler content (without the spaces) it will be replaced with a timestamp when you save the tiddler. Full list of formats:
* {ts} or {t} -> timestamp
* {ds} or {d} -> datestamp
* !ts or !t at start of line -> !!timestamp
* !ds or !d at start of line -> !!datestamp
(I added the extra ! since that's how I like it. Remove it from translations below if required)
!!Notes
* Change the timeFormat and dateFormat below to suit your preference.
* See also http://mptw2.tiddlyspot.com/#AutoCorrectPlugin
* You could invent other translations and add them to the translations array below.
***/
//{{{

config.InstantTimestamp = {

	// adjust to suit
	timeFormat: 'DD/0MM/YY 0hh:0mm',
	dateFormat: 'DD/0MM/YY',

	translations: [
		[/^!ts?$/img,  "'!!{{ts{'+now.formatString(config.InstantTimestamp.timeFormat)+'}}}'"],
		[/^!ds?$/img,  "'!!{{ds{'+now.formatString(config.InstantTimestamp.dateFormat)+'}}}'"],

		// thanks Adapted Cat
		[/\{ts?\}(?!\}\})/ig,"'{{ts{'+now.formatString(config.InstantTimestamp.timeFormat)+'}}}'"],
		[/\{ds?\}(?!\}\})/ig,"'{{ds{'+now.formatString(config.InstantTimestamp.dateFormat)+'}}}'"]
		
	],

	excludeTags: [
		"noAutoCorrect",
		"noTimestamp",
		"html",
		"CSS",
		"css",
		"systemConfig",
		"systemConfigDisabled",
		"zsystemConfig",
		"Plugins",
		"Plugin",
		"plugins",
		"plugin",
		"javascript",
		"code",
		"systemTheme",
		"systemPalette"
	],

	excludeTiddlers: [
		"StyleSheet",
		"StyleSheetLayout",
		"StyleSheetColors",
		"StyleSheetPrint"
		// more?
	]

}; 

TiddlyWiki.prototype.saveTiddler_mptw_instanttimestamp = TiddlyWiki.prototype.saveTiddler;
TiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created) {

	tags = tags ? tags : []; // just in case tags is null
	tags = (typeof(tags) == "string") ? tags.readBracketedList() : tags;
	var conf = config.InstantTimestamp;

	if ( !tags.containsAny(conf.excludeTags) && !conf.excludeTiddlers.contains(newTitle) ) {

		var now = new Date();
		var trans = conf.translations;
		for (var i=0;i<trans.length;i++) {
			newBody = newBody.replace(trans[i][0], eval(trans[i][1]));
		}
	}

	// TODO: use apply() instead of naming all args?
	return this.saveTiddler_mptw_instanttimestamp(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created);
}

// you can override these in StyleSheet 
setStylesheet(".ts,.ds { font-style:italic; }","instantTimestampStyles");

//}}}

! CT200 - Fundamentos de Automata e Linguagens Formais

Prof. Carlos H. Q. Forster

<script>
  document.write("forster"); document.write("@"); document.write("ita.br");
</script>

Ramal: 5981   Sala: 121


!AULA 1
* [[Orientações gerais (estrutura do curso)]]
* [[Motivação]]
* [[Revisão de Teoria dos Conjuntos]]


<<tiddler NextTiddler with: [[Orientações gerais (estrutura do curso)]]>>
[img[tooltip|KurtGodel.jpg]]

* Nascido em 1906 (Brno, Rep. Tcheca), faleceu em 1978 (Princeton, EUA). Doutorado em 1929 (Univ. de Viena).
* Teorema provado em 1931: qualquer sistema matemático baseado em axiomas tem proposições que não podem ser provadas. 
* Teorema de Gödel encerrou uma busca de mais de 100 anos por uma base axiomática completa para a Matemática (Hilbert, Russell e outros). É um dos dez mais importantes teoremas provados, considerando-se qualquer área da Ciência.

[[Mais info|http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Godel.html]]

<<tiddler NextTiddler with: [[Aplicações diretas]]>>

| source file:|{{{C:\Documents and Settings\User\Desktop\KurtGodel.jpg}}}|
| attached on:|1 March 2009 by Professor|
| description:|attached by FileDropPlugin|
| embedded:|[[KurtGodel.jpg|KurtGodel.jpg]] - {{{type=image/jpeg, size=19620 bytes, encoded=26568 bytes}}}|
| local file:|/%LOCAL_LINK%/[[C:\Documents and Settings\User\Desktop\KurtGodel.jpg|C:/Documents and Settings/User/Desktop/KurtGodel.jpg]]|
| remote link:|//none//|
image
<<<
usage: {{{[img[tooltip|KurtGodel.jpg]] or [img[tooltip|KurtGodel.jpg][link]]}}}
[img[tooltip|KurtGodel.jpg]]
<<<

/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/jpeg;base64,
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
---END_DATA---
%/
/***
|Name:|LessBackupsPlugin|
|Description:|Intelligently limit the number of backup files you create|
|Version:|3.0.1 ($Rev: 2320 $)|
|Date:|$Date: 2007-06-18 22:37:46 +1000 (Mon, 18 Jun 2007) $|
|Source:|http://mptw.tiddlyspot.com/#LessBackupsPlugin|
|Author:|Simon Baird|
|Email:|simon.baird@gmail.com|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Description
You end up with just backup one per year, per month, per weekday, per hour, minute, and second.  So total number won't exceed about 200 or so. Can be reduced by commenting out the seconds/minutes/hours line from modes array
!!Notes
Works in IE and Firefox only.  Algorithm by Daniel Baird. IE specific code by by Saq Imtiaz.
***/
//{{{

var MINS  = 60 * 1000;
var HOURS = 60 * MINS;
var DAYS  = 24 * HOURS;

if (!config.lessBackups) {
	config.lessBackups = {
		// comment out the ones you don't want or set config.lessBackups.modes in your 'tweaks' plugin
		modes: [
			["YYYY",  365*DAYS], // one per year for ever
			["MMM",   31*DAYS],  // one per month
			["ddd",   7*DAYS],   // one per weekday
			//["d0DD",  1*DAYS],   // one per day of month
			["h0hh",  24*HOURS], // one per hour
			["m0mm",  1*HOURS],  // one per minute
			["s0ss",  1*MINS],   // one per second
			["latest",0]         // always keep last version. (leave this).
		]
	};
}

window.getSpecialBackupPath = function(backupPath) {

	var now = new Date();

	var modes = config.lessBackups.modes;

	for (var i=0;i<modes.length;i++) {

		// the filename we will try
		var specialBackupPath = backupPath.replace(/(\.)([0-9]+\.[0-9]+)(\.html)$/,
				'$1'+now.formatString(modes[i][0]).toLowerCase()+'$3')

		// open the file
		try {
			if (config.browser.isIE) {
				var fsobject = new ActiveXObject("Scripting.FileSystemObject")
				var fileExists  = fsobject.FileExists(specialBackupPath);
				if (fileExists) {
					var fileObject = fsobject.GetFile(specialBackupPath);
					var modDate = new Date(fileObject.DateLastModified).valueOf();
				}
			}
			else {
				netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
				var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
				file.initWithPath(specialBackupPath);
				var fileExists = file.exists();
				if (fileExists) {
					var modDate = file.lastModifiedTime;
				}
			}
		}
		catch(e) {
			// give up
			return backupPath;
		}

		// expiry is used to tell if it's an 'old' one. Eg, if the month is June and there is a
		// June file on disk that's more than an month old then it must be stale so overwrite
		// note that "latest" should be always written because the expiration period is zero (see above)
		var expiry = new Date(modDate + modes[i][1]);
		if (!fileExists || now > expiry)
			return specialBackupPath;
	}
}

// hijack the core function
window.getBackupPath_mptw_orig = window.getBackupPath;
window.getBackupPath = function(localPath) {
	return getSpecialBackupPath(getBackupPath_mptw_orig(localPath));
}

//}}}

<script>
wikify("Toolbar commands are:\n",place);
for(var t in config.commands)
  wikify("* "+t+"\n",place);
</script>

MPTW is a distribution or edition of TiddlyWiki that includes a standard TiddlyWiki core packaged with some plugins designed to improve usability and provide a better way to organise your information. For more information see http://mptw.tiddlyspot.com/.
[[Início]]
<<toggleSideBar "sidebar">>
<<fontSize>>
<<tiddler DigitalClock with: "0hh:0mm" 60>>
[[Agradecimentos]]
/***
|Name:|MathifyPlugin|
|Description:|Includes ASCIIMathML in your tiddlers with a plugin|
|Version:|1.0 ($Rev: 0000 $)|
|Date:|$Date: 2008-07-05$|
|Source:|to be announced|
|Author:|Mathifier|
|License:|GPL|
***/

//{{{

/* This is ASCIIMathML code copied and pasted. */
/* You may put it in a separate file instead, */
/* but I prefer it this way. */

/*
ASCIIMathML.js
==============
This file contains JavaScript functions to convert ASCII math notation
to Presentation MathML. The conversion is done while the (X)HTML page 
loads, and should work with Firefox/Mozilla/Netscape 7+ and Internet 
Explorer 6+MathPlayer (http://www.dessci.com/en/products/mathplayer/).
Just add the next line to your (X)HTML page with this file in the same folder:
<script type="text/javascript" src="ASCIIMathML.js"></script>
This is a convenient and inexpensive solution for authoring MathML.

Version 1.4.7 Aug 14, 2005, (c) Peter Jipsen http://www.chapman.edu/~jipsen
Latest version at http://www.chapman.edu/~jipsen/mathml/ASCIIMathML.js
For changes see http://www.chapman.edu/~jipsen/mathml/asciimathchanges.txt
If you use it on a webpage, please send the URL to jipsen@chapman.edu

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at
your option) any later version.

This program is distributed in the hope that it will be useful, 
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License (at http://www.gnu.org/copyleft/gpl.html) 
for more details.
*/

var checkForMathML = true;   // check if browser can display MathML
var notifyIfNoMathML = true; // put note at top of page if no MathML capability
var mathcolor = "red";       // change it to "" (to inherit) or any other color
var mathfontfamily = "serif"; // change to "" to inherit (works in IE) 
                              // or another family (e.g. "arial")
var displaystyle = true;      // puts limits above and below large operators
var showasciiformulaonhover = true; // helps students learn ASCIIMath
var decimalsign = ".";        // change to "," if you like, beware of `(1,2)`!
var AMdelimiter1 = "`", AMescape1 = "\\\\`"; // can use other characters
var AMdelimiter2 = "$", AMescape2 = "\\\\\\$", AMdelimiter2regexp = "\\$";
var doubleblankmathdelimiter = false; // if true,  x+1  is equal to `x+1`
                                      // for IE this works only in <!--   -->
//var separatetokens;// has been removed (email me if this is a problem)
var isIE = document.createElementNS==null;

if (document.getElementById==null) 
  alert("This webpage requires a recent browser such as\
\nMozilla/Netscape 7+ or Internet Explorer 6+MathPlayer")

// all further global variables start with "AM"

function AMcreateElementXHTML(t) {
  if (isIE) return document.createElement(t);
  else return document.createElementNS("http://www.w3.org/1999/xhtml",t);
}

function AMnoMathMLNote() {
  var nd = AMcreateElementXHTML("h3");
  nd.setAttribute("align","center")
  nd.appendChild(AMcreateElementXHTML("p"));
  nd.appendChild(document.createTextNode("To view the "));
  var an = AMcreateElementXHTML("a");
  an.appendChild(document.createTextNode("ASCIIMathML"));
  an.setAttribute("href","http://www.chapman.edu/~jipsen/asciimath.html");
  nd.appendChild(an);
  nd.appendChild(document.createTextNode(" notation use Internet Explorer 6+"));  
  an = AMcreateElementXHTML("a");
  an.appendChild(document.createTextNode("MathPlayer"));
  an.setAttribute("href","http://www.dessci.com/en/products/mathplayer/download.htm");
  nd.appendChild(an);
  nd.appendChild(document.createTextNode(" or Netscape/Mozilla/Firefox"));
  nd.appendChild(AMcreateElementXHTML("p"));
  return nd;
}

function AMisMathMLavailable() {
  if (navigator.appName.slice(0,8)=="Netscape") 
    if (navigator.appVersion.slice(0,1)>="5") return null;
    else return AMnoMathMLNote();
  else if (navigator.appName.slice(0,9)=="Microsoft")
    try {
        var ActiveX = new ActiveXObject("MathPlayer.Factory.1");
        return null;
    } catch (e) {
        return AMnoMathMLNote();
    }
  else return AMnoMathMLNote();
}

// character lists for Mozilla/Netscape fonts
var AMcal = [0xEF35,0x212C,0xEF36,0xEF37,0x2130,0x2131,0xEF38,0x210B,0x2110,0xEF39,0xEF3A,0x2112,0x2133,0xEF3B,0xEF3C,0xEF3D,0xEF3E,0x211B,0xEF3F,0xEF40,0xEF41,0xEF42,0xEF43,0xEF44,0xEF45,0xEF46];
var AMfrk = [0xEF5D,0xEF5E,0x212D,0xEF5F,0xEF60,0xEF61,0xEF62,0x210C,0x2111,0xEF63,0xEF64,0xEF65,0xEF66,0xEF67,0xEF68,0xEF69,0xEF6A,0x211C,0xEF6B,0xEF6C,0xEF6D,0xEF6E,0xEF6F,0xEF70,0xEF71,0x2128];
var AMbbb = [0xEF8C,0xEF8D,0x2102,0xEF8E,0xEF8F,0xEF90,0xEF91,0x210D,0xEF92,0xEF93,0xEF94,0xEF95,0xEF96,0x2115,0xEF97,0x2119,0x211A,0x211D,0xEF98,0xEF99,0xEF9A,0xEF9B,0xEF9C,0xEF9D,0xEF9E,0x2124];

var CONST = 0, UNARY = 1, BINARY = 2, INFIX = 3, LEFTBRACKET = 4, 
    RIGHTBRACKET = 5, SPACE = 6, UNDEROVER = 7, DEFINITION = 8,
    LEFTRIGHT = 9, TEXT = 10; // token types

var AMsqrt = {input:"sqrt", tag:"msqrt", output:"sqrt", tex:null, ttype:UNARY},
  AMroot  = {input:"root", tag:"mroot", output:"root", tex:null, ttype:BINARY},
  AMfrac  = {input:"frac", tag:"mfrac", output:"/",    tex:null, ttype:BINARY},
  AMdiv   = {input:"/",    tag:"mfrac", output:"/",    tex:null, ttype:INFIX},
  AMover  = {input:"stackrel", tag:"mover", output:"stackrel", tex:null, ttype:BINARY},
  AMsub   = {input:"_",    tag:"msub",  output:"_",    tex:null, ttype:INFIX},
  AMsup   = {input:"^",    tag:"msup",  output:"^",    tex:null, ttype:INFIX},
  AMtext  = {input:"text", tag:"mtext", output:"text", tex:null, ttype:TEXT},
  AMmbox  = {input:"mbox", tag:"mtext", output:"mbox", tex:null, ttype:TEXT},
  AMquote = {input:"\"",   tag:"mtext", output:"mbox", tex:null, ttype:TEXT};

var AMsymbols = [
//some greek symbols
{input:"alpha",  tag:"mi", output:"\u03B1", tex:null, ttype:CONST},
{input:"beta",   tag:"mi", output:"\u03B2", tex:null, ttype:CONST},
{input:"chi",    tag:"mi", output:"\u03C7", tex:null, ttype:CONST},
{input:"delta",  tag:"mi", output:"\u03B4", tex:null, ttype:CONST},
{input:"Delta",  tag:"mo", output:"\u0394", tex:null, ttype:CONST},
{input:"epsi",   tag:"mi", output:"\u03B5", tex:"epsilon", ttype:CONST},
{input:"varepsilon", tag:"mi", output:"\u025B", tex:null, ttype:CONST},
{input:"eta",    tag:"mi", output:"\u03B7", tex:null, ttype:CONST},
{input:"gamma",  tag:"mi", output:"\u03B3", tex:null, ttype:CONST},
{input:"Gamma",  tag:"mo", output:"\u0393", tex:null, ttype:CONST},
{input:"iota",   tag:"mi", output:"\u03B9", tex:null, ttype:CONST},
{input:"kappa",  tag:"mi", output:"\u03BA", tex:null, ttype:CONST},
{input:"lambda", tag:"mi", output:"\u03BB", tex:null, ttype:CONST},
{input:"Lambda", tag:"mo", output:"\u039B", tex:null, ttype:CONST},
{input:"mu",     tag:"mi", output:"\u03BC", tex:null, ttype:CONST},
{input:"nu",     tag:"mi", output:"\u03BD", tex:null, ttype:CONST},
{input:"omega",  tag:"mi", output:"\u03C9", tex:null, ttype:CONST},
{input:"Omega",  tag:"mo", output:"\u03A9", tex:null, ttype:CONST},
{input:"phi",    tag:"mi", output:"\u03C6", tex:null, ttype:CONST},
{input:"varphi", tag:"mi", output:"\u03D5", tex:null, ttype:CONST},
{input:"Phi",    tag:"mo", output:"\u03A6", tex:null, ttype:CONST},
{input:"pi",     tag:"mi", output:"\u03C0", tex:null, ttype:CONST},
{input:"Pi",     tag:"mo", output:"\u03A0", tex:null, ttype:CONST},
{input:"psi",    tag:"mi", output:"\u03C8", tex:null, ttype:CONST},
{input:"Psi",    tag:"mi", output:"\u03A8", tex:null, ttype:CONST},
{input:"rho",    tag:"mi", output:"\u03C1", tex:null, ttype:CONST},
{input:"sigma",  tag:"mi", output:"\u03C3", tex:null, ttype:CONST},
{input:"Sigma",  tag:"mo", output:"\u03A3", tex:null, ttype:CONST},
{input:"tau",    tag:"mi", output:"\u03C4", tex:null, ttype:CONST},
{input:"theta",  tag:"mi", output:"\u03B8", tex:null, ttype:CONST},
{input:"vartheta", tag:"mi", output:"\u03D1", tex:null, ttype:CONST},
{input:"Theta",  tag:"mo", output:"\u0398", tex:null, ttype:CONST},
{input:"upsilon", tag:"mi", output:"\u03C5", tex:null, ttype:CONST},
{input:"xi",     tag:"mi", output:"\u03BE", tex:null, ttype:CONST},
{input:"Xi",     tag:"mo", output:"\u039E", tex:null, ttype:CONST},
{input:"zeta",   tag:"mi", output:"\u03B6", tex:null, ttype:CONST},

//binary operation symbols
{input:"*",  tag:"mo", output:"\u22C5", tex:"cdot", ttype:CONST},
{input:"**", tag:"mo", output:"\u22C6", tex:"star", ttype:CONST},
{input:"//", tag:"mo", output:"/",      tex:null, ttype:CONST},
{input:"\\\\", tag:"mo", output:"\\",   tex:"backslash", ttype:CONST},
{input:"setminus", tag:"mo", output:"\\", tex:null, ttype:CONST},
{input:"xx", tag:"mo", output:"\u00D7", tex:"times", ttype:CONST},
{input:"-:", tag:"mo", output:"\u00F7", tex:"divide", ttype:CONST},
{input:"@",  tag:"mo", output:"\u2218", tex:"circ", ttype:CONST},
{input:"o+", tag:"mo", output:"\u2295", tex:"oplus", ttype:CONST},
{input:"ox", tag:"mo", output:"\u2297", tex:"otimes", ttype:CONST},
{input:"o.", tag:"mo", output:"\u2299", tex:"odot", ttype:CONST},
{input:"sum", tag:"mo", output:"\u2211", tex:null, ttype:UNDEROVER},
{input:"prod", tag:"mo", output:"\u220F", tex:null, ttype:UNDEROVER},
{input:"ww",  tag:"mo", output:"\u2227", tex:"wedge", ttype:CONST},
{input:"www", tag:"mo", output:"\u22C0", tex:"bigwedge", ttype:UNDEROVER},
{input:"vv",  tag:"mo", output:"\u2228", tex:"vee", ttype:CONST},
{input:"vvv", tag:"mo", output:"\u22C1", tex:"bigvee", ttype:UNDEROVER},
{input:"nn",  tag:"mo", output:"\u2229", tex:"cap", ttype:CONST},
{input:"nnn", tag:"mo", output:"\u22C2", tex:"bigcap", ttype:UNDEROVER},
{input:"uu",  tag:"mo", output:"\u222A", tex:"cup", ttype:CONST},
{input:"uuu", tag:"mo", output:"\u22C3", tex:"bigcup", ttype:UNDEROVER},

//binary relation symbols
{input:"!=",  tag:"mo", output:"\u2260", tex:"ne", ttype:CONST},
{input:":=",  tag:"mo", output:":=",     tex:null, ttype:CONST},
{input:"lt",  tag:"mo", output:"<",      tex:null, ttype:CONST},
{input:"<=",  tag:"mo", output:"\u2264", tex:"le", ttype:CONST},
{input:"lt=", tag:"mo", output:"\u2264", tex:"leq", ttype:CONST},
{input:">=",  tag:"mo", output:"\u2265", tex:"ge", ttype:CONST},
{input:"geq", tag:"mo", output:"\u2265", tex:null, ttype:CONST},
{input:"-<",  tag:"mo", output:"\u227A", tex:"prec", ttype:CONST},
{input:"-lt", tag:"mo", output:"\u227A", tex:null, ttype:CONST},
{input:">-",  tag:"mo", output:"\u227B", tex:"succ", ttype:CONST},
{input:"in",  tag:"mo", output:"\u2208", tex:null, ttype:CONST},
{input:"!in", tag:"mo", output:"\u2209", tex:"notin", ttype:CONST},
{input:"sub", tag:"mo", output:"\u2282", tex:"subset", ttype:CONST},
{input:"sup", tag:"mo", output:"\u2283", tex:"supset", ttype:CONST},
{input:"sube", tag:"mo", output:"\u2286", tex:"subseteq", ttype:CONST},
{input:"supe", tag:"mo", output:"\u2287", tex:"supseteq", ttype:CONST},
{input:"subne", tag:"mo", output:"\u228A", tex:"supsetneq", ttype:CONST},
{input:"nsub", tag:"mo", output:"\u2284", tex:"notsubset", ttype:CONST},
{input:"nsup", tag:"mo", output:"\u2285", tex:"notsupset", ttype:CONST},
{input:"-=",  tag:"mo", output:"\u2261", tex:"equiv", ttype:CONST},
{input:"~=",  tag:"mo", output:"\u2245", tex:"cong", ttype:CONST},
{input:"~~",  tag:"mo", output:"\u2248", tex:"approx", ttype:CONST},
{input:"prop", tag:"mo", output:"\u221D", tex:"propto", ttype:CONST},

//logical symbols
{input:"and", tag:"mtext", output:"and", tex:null, ttype:SPACE},
{input:"or",  tag:"mtext", output:"or",  tex:null, ttype:SPACE},
{input:"not", tag:"mo", output:"\u00AC", tex:"neg", ttype:CONST},
{input:"=>",  tag:"mo", output:"\u21D2", tex:"implies", ttype:CONST},
{input:"if",  tag:"mo", output:"if",     tex:null, ttype:SPACE},
{input:"<=>", tag:"mo", output:"\u21D4", tex:"iff", ttype:CONST},
{input:"AA",  tag:"mo", output:"\u2200", tex:"forall", ttype:CONST},
{input:"EE",  tag:"mo", output:"\u2203", tex:"exists", ttype:CONST},
{input:"_|_", tag:"mo", output:"\u22A5", tex:"bot", ttype:CONST},
{input:"TT",  tag:"mo", output:"\u22A4", tex:"top", ttype:CONST},
{input:"|--",  tag:"mo", output:"\u22A2", tex:"vdash", ttype:CONST},
{input:"|==",  tag:"mo", output:"\u22A8", tex:"models", ttype:CONST},
{input:"~~=",  tag:"mo", output:"\u2243", tex:"simeq", ttype:CONST},

//grouping brackets
{input:"(", tag:"mo", output:"(", tex:null, ttype:LEFTBRACKET},
{input:")", tag:"mo", output:")", tex:null, ttype:RIGHTBRACKET},
{input:"[", tag:"mo", output:"[", tex:null, ttype:LEFTBRACKET},
{input:"]", tag:"mo", output:"]", tex:null, ttype:RIGHTBRACKET},
{input:"{", tag:"mo", output:"{", tex:null, ttype:LEFTBRACKET},
{input:"}", tag:"mo", output:"}", tex:null, ttype:RIGHTBRACKET},
{input:"|", tag:"mo", output:"|", tex:null, ttype:LEFTRIGHT},
//{input:"||", tag:"mo", output:"||", tex:null, ttype:LEFTRIGHT},
{input:"(:", tag:"mo", output:"\u2329", tex:"langle", ttype:LEFTBRACKET},
{input:":)", tag:"mo", output:"\u232A", tex:"rangle", ttype:RIGHTBRACKET},
{input:"<<", tag:"mo", output:"\u2329", tex:null, ttype:LEFTBRACKET},
{input:">>", tag:"mo", output:"\u232A", tex:null, ttype:RIGHTBRACKET},
{input:"{:", tag:"mo", output:"{:", tex:null, ttype:LEFTBRACKET, invisible:true},
{input:":}", tag:"mo", output:":}", tex:null, ttype:RIGHTBRACKET, invisible:true},

//miscellaneous symbols
{input:"int",  tag:"mo", output:"\u222B", tex:null, ttype:CONST},
{input:"dx",   tag:"mi", output:"{:d x:}", tex:null, ttype:DEFINITION},
{input:"dy",   tag:"mi", output:"{:d y:}", tex:null, ttype:DEFINITION},
{input:"dz",   tag:"mi", output:"{:d z:}", tex:null, ttype:DEFINITION},
{input:"dt",   tag:"mi", output:"{:d t:}", tex:null, ttype:DEFINITION},
{input:"oint", tag:"mo", output:"\u222E", tex:null, ttype:CONST},
{input:"del",  tag:"mo", output:"\u2202", tex:"partial", ttype:CONST},
{input:"grad", tag:"mo", output:"\u2207", tex:"nabla", ttype:CONST},
{input:"+-",   tag:"mo", output:"\u00B1", tex:"pm", ttype:CONST},
{input:"O/",   tag:"mo", output:"\u2205", tex:"emptyset", ttype:CONST},
{input:"oo",   tag:"mo", output:"\u221E", tex:"infty", ttype:CONST},
{input:"aleph", tag:"mo", output:"\u2135", tex:null, ttype:CONST},
{input:"...",  tag:"mo", output:"...",    tex:"ldots", ttype:CONST},
{input:":.",  tag:"mo", output:"\u2234",  tex:"therefore", ttype:CONST},
{input:"/_",  tag:"mo", output:"\u2220",  tex:"angle", ttype:CONST},
{input:"\\ ",  tag:"mo", output:"\u00A0", tex:null, ttype:CONST},
{input:"quad", tag:"mo", output:"\u00A0\u00A0", tex:null, ttype:CONST},
{input:"qquad", tag:"mo", output:"\u00A0\u00A0\u00A0\u00A0", tex:null, ttype:CONST},
{input:"cdots", tag:"mo", output:"\u22EF", tex:null, ttype:CONST},
{input:"vdots", tag:"mo", output:"\u22EE", tex:null, ttype:CONST},
{input:"ddots", tag:"mo", output:"\u22F1", tex:null, ttype:CONST},
{input:"diamond", tag:"mo", output:"\u22C4", tex:null, ttype:CONST},
{input:"square", tag:"mo", output:"\u25A1", tex:null, ttype:CONST},
{input:"|__", tag:"mo", output:"\u230A",  tex:"lfloor", ttype:CONST},
{input:"__|", tag:"mo", output:"\u230B",  tex:"rfloor", ttype:CONST},
{input:"|~", tag:"mo", output:"\u2308",  tex:"lceiling", ttype:CONST},
{input:"~|", tag:"mo", output:"\u2309",  tex:"rceiling", ttype:CONST},
{input:"CC",  tag:"mo", output:"\u2102", tex:null, ttype:CONST},
{input:"NN",  tag:"mo", output:"\u2115", tex:null, ttype:CONST},
{input:"QQ",  tag:"mo", output:"\u211A", tex:null, ttype:CONST},
{input:"RR",  tag:"mo", output:"\u211D", tex:null, ttype:CONST},
{input:"ZZ",  tag:"mo", output:"\u2124", tex:null, ttype:CONST},
{input:"f",   tag:"mi", output:"f",      tex:null, ttype:UNARY, func:true},
{input:"g",   tag:"mi", output:"g",      tex:null, ttype:UNARY, func:true},

//standard functions
{input:"lim",  tag:"mo", output:"lim", tex:null, ttype:UNDEROVER},
{input:"Lim",  tag:"mo", output:"Lim", tex:null, ttype:UNDEROVER},
{input:"sin",  tag:"mo", output:"sin", tex:null, ttype:UNARY, func:true},
{input:"cos",  tag:"mo", output:"cos", tex:null, ttype:UNARY, func:true},
{input:"tan",  tag:"mo", output:"tan", tex:null, ttype:UNARY, func:true},
{input:"sinh", tag:"mo", output:"sinh", tex:null, ttype:UNARY, func:true},
{input:"cosh", tag:"mo", output:"cosh", tex:null, ttype:UNARY, func:true},
{input:"tanh", tag:"mo", output:"tanh", tex:null, ttype:UNARY, func:true},
{input:"cot",  tag:"mo", output:"cot", tex:null, ttype:UNARY, func:true},
{input:"sec",  tag:"mo", output:"sec", tex:null, ttype:UNARY, func:true},
{input:"csc",  tag:"mo", output:"csc", tex:null, ttype:UNARY, func:true},
{input:"log",  tag:"mo", output:"log", tex:null, ttype:UNARY, func:true},
{input:"ln",   tag:"mo", output:"ln",  tex:null, ttype:UNARY, func:true},
{input:"det",  tag:"mo", output:"det", tex:null, ttype:UNARY, func:true},
{input:"dim",  tag:"mo", output:"dim", tex:null, ttype:CONST},
{input:"mod",  tag:"mo", output:"mod", tex:null, ttype:CONST},
{input:"gcd",  tag:"mo", output:"gcd", tex:null, ttype:UNARY, func:true},
{input:"lcm",  tag:"mo", output:"lcm", tex:null, ttype:UNARY, func:true},
{input:"lub",  tag:"mo", output:"lub", tex:null, ttype:CONST},
{input:"glb",  tag:"mo", output:"glb", tex:null, ttype:CONST},
{input:"min",  tag:"mo", output:"min", tex:null, ttype:UNDEROVER},
{input:"max",  tag:"mo", output:"max", tex:null, ttype:UNDEROVER},

//arrows
{input:"uarr", tag:"mo", output:"\u2191", tex:"uparrow", ttype:CONST},
{input:"darr", tag:"mo", output:"\u2193", tex:"downarrow", ttype:CONST},
{input:"rarr", tag:"mo", output:"\u2192", tex:"rightarrow", ttype:CONST},
{input:"->",   tag:"mo", output:"\u2192", tex:"to", ttype:CONST},
{input:"|->",  tag:"mo", output:"\u21A6", tex:"mapsto", ttype:CONST},
{input:"larr", tag:"mo", output:"\u2190", tex:"leftarrow", ttype:CONST},
{input:"harr", tag:"mo", output:"\u2194", tex:"leftrightarrow", ttype:CONST},
{input:"rArr", tag:"mo", output:"\u21D2", tex:"Rightarrow", ttype:CONST},
{input:"lArr", tag:"mo", output:"\u21D0", tex:"Leftarrow", ttype:CONST},
{input:"hArr", tag:"mo", output:"\u21D4", tex:"Leftrightarrow", ttype:CONST},

//commands with argument
AMsqrt, AMroot, AMfrac, AMdiv, AMover, AMsub, AMsup,
{input:"hat", tag:"mover", output:"\u005E", tex:null, ttype:UNARY, acc:true},
{input:"bar", tag:"mover", output:"\u00AF", tex:"overline", ttype:UNARY, acc:true},
{input:"vec", tag:"mover", output:"\u2192", tex:null, ttype:UNARY, acc:true},
{input:"dot", tag:"mover", output:".",      tex:null, ttype:UNARY, acc:true},
{input:"ddot", tag:"mover", output:"..",    tex:null, ttype:UNARY, acc:true},
{input:"ul", tag:"munder", output:"\u0332", tex:"underline", ttype:UNARY, acc:true},
AMtext, AMmbox, AMquote,
{input:"bb", tag:"mstyle", atname:"fontweight", atval:"bold", output:"bb", tex:null, ttype:UNARY},
{input:"mathbf", tag:"mstyle", atname:"fontweight", atval:"bold", output:"mathbf", tex:null, ttype:UNARY},
{input:"sf", tag:"mstyle", atname:"fontfamily", atval:"sans-serif", output:"sf", tex:null, ttype:UNARY},
{input:"mathsf", tag:"mstyle", atname:"fontfamily", atval:"sans-serif", output:"mathsf", tex:null, ttype:UNARY},
{input:"bbb", tag:"mstyle", atname:"mathvariant", atval:"double-struck", output:"bbb", tex:null, ttype:UNARY, codes:AMbbb},
{input:"mathbb", tag:"mstyle", atname:"mathvariant", atval:"double-struck", output:"mathbb", tex:null, ttype:UNARY, codes:AMbbb},
{input:"cc",  tag:"mstyle", atname:"mathvariant", atval:"script", output:"cc", tex:null, ttype:UNARY, codes:AMcal},
{input:"mathcal", tag:"mstyle", atname:"mathvariant", atval:"script", output:"mathcal", tex:null, ttype:UNARY, codes:AMcal},
{input:"tt",  tag:"mstyle", atname:"fontfamily", atval:"monospace", output:"tt", tex:null, ttype:UNARY},
{input:"mathtt", tag:"mstyle", atname:"fontfamily", atval:"monospace", output:"mathtt", tex:null, ttype:UNARY},
{input:"fr",  tag:"mstyle", atname:"mathvariant", atval:"fraktur", output:"fr", tex:null, ttype:UNARY, codes:AMfrk},
{input:"mathfrak",  tag:"mstyle", atname:"mathvariant", atval:"fraktur", output:"mathfrak", tex:null, ttype:UNARY, codes:AMfrk}
];

function compareNames(s1,s2) {
  if (s1.input > s2.input) return 1
  else return -1;
}

var AMnames = []; //list of input symbols

function AMinitSymbols() {
  var texsymbols = [], i;
  for (i=0; i<AMsymbols.length; i++)
    if (AMsymbols[i].tex) 
      texsymbols[texsymbols.length] = {input:AMsymbols[i].tex, 
        tag:AMsymbols[i].tag, output:AMsymbols[i].output, ttype:AMsymbols[i].ttype};
  AMsymbols = AMsymbols.concat(texsymbols);
  AMsymbols.sort(compareNames);
  for (i=0; i<AMsymbols.length; i++) AMnames[i] = AMsymbols[i].input;
}

var AMmathml = "http://www.w3.org/1998/Math/MathML";

function AMcreateElementMathML(t) {
  if (isIE) return document.createElement("m:"+t);
  else return document.createElementNS(AMmathml,t);
}

function AMcreateMmlNode(t,frag) {
//  var node = AMcreateElementMathML(name);
  if (isIE) var node = document.createElement("m:"+t);
  else var node = document.createElementNS(AMmathml,t);
  node.appendChild(frag);
  return node;
}

function newcommand(oldstr,newstr) {
  AMsymbols = AMsymbols.concat([{input:oldstr, tag:"mo", output:newstr, 
                                 tex:null, ttype:DEFINITION}]);
}

function AMremoveCharsAndBlanks(str,n) {
//remove n characters and any following blanks
  var st;
  if (str.charAt(n)=="\\" && str.charAt(n+1)!="\\" && str.charAt(n+1)!=" ") 
    st = str.slice(n+1);
  else st = str.slice(n);
  for (var i=0; i<st.length && st.charCodeAt(i)<=32; i=i+1);
  return st.slice(i);
}

function AMposition(arr, str, n) { 
// return position >=n where str appears or would be inserted
// assumes arr is sorted
  if (n==0) {
    var h,m;
    n = -1;
    h = arr.length;
    while (n+1<h) {
      m = (n+h) >> 1;
      if (arr[m]<str) n = m; else h = m;
    }
    return h;
  } else
    for (var i=n; i<arr.length && arr[i]<str; i++);
  return i; // i=arr.length || arr[i]>=str
}

function AMgetSymbol(str) {
//return maximal initial substring of str that appears in names
//return null if there is none
  var k = 0; //new pos
  var j = 0; //old pos
  var mk; //match pos
  var st;
  var tagst;
  var match = "";
  var more = true;
  for (var i=1; i<=str.length && more; i++) {
    st = str.slice(0,i); //initial substring of length i
    j = k;
    k = AMposition(AMnames, st, j);
    if (k<AMnames.length && str.slice(0,AMnames[k].length)==AMnames[k]){
      match = AMnames[k];
      mk = k;
      i = match.length;
    }
    more = k<AMnames.length && str.slice(0,AMnames[k].length)>=AMnames[k];
  }
  AMpreviousSymbol=AMcurrentSymbol;
  if (match!=""){
    AMcurrentSymbol=AMsymbols[mk].ttype;
    return AMsymbols[mk]; 
  }
// if str[0] is a digit or - return maxsubstring of digits.digits
  AMcurrentSymbol=CONST;
  k = 1;
  st = str.slice(0,1);
  var integ = true;
  while ("0"<=st && st<="9" && k<=str.length) {
    st = str.slice(k,k+1);
    k++;
  }
  if (st == decimalsign) {
    st = str.slice(k,k+1);
    if ("0"<=st && st<="9") {
      integ = false;
      k++;
      while ("0"<=st && st<="9" && k<=str.length) {
        st = str.slice(k,k+1);
        k++;
      }
    }
  }
  if ((integ && k>1) || k>2) {
    st = str.slice(0,k-1);
    tagst = "mn";
  } else {
    k = 2;
    st = str.slice(0,1); //take 1 character
    tagst = (("A">st || st>"Z") && ("a">st || st>"z")?"mo":"mi");
  }
  if (st=="-" && AMpreviousSymbol==INFIX)
    return {input:st, tag:tagst, output:st, ttype:UNARY, func:true};
  return {input:st, tag:tagst, output:st, ttype:CONST};
}

function AMremoveBrackets(node) {
  var st;
  if (node.nodeName=="mrow") {
    st = node.firstChild.firstChild.nodeValue;
    if (st=="(" || st=="[" || st=="{") node.removeChild(node.firstChild);
  }
  if (node.nodeName=="mrow") {
    st = node.lastChild.firstChild.nodeValue;
    if (st==")" || st=="]" || st=="}") node.removeChild(node.lastChild);
  }
}

/*Parsing ASCII math expressions with the following grammar
v ::= [A-Za-z] | greek letters | numbers | other constant symbols
u ::= sqrt | text | bb | other unary symbols for font commands
b ::= frac | root | stackrel         binary symbols
l ::= ( | [ | { | (: | {:            left brackets
r ::= ) | ] | } | :) | :}            right brackets
S ::= v | lEr | uS | bSS             Simple expression
I ::= S_S | S^S | S_S^S | S          Intermediate expression
E ::= IE | I/I                       Expression
Each terminal symbol is translated into a corresponding mathml node.*/

var AMnestingDepth,AMpreviousSymbol,AMcurrentSymbol;

function AMparseSexpr(str) { //parses str and returns [node,tailstr]
  var symbol, node, result, i, st,// rightvert = false,
    newFrag = document.createDocumentFragment();
  str = AMremoveCharsAndBlanks(str,0);
  symbol = AMgetSymbol(str);             //either a token or a bracket or empty
  if (symbol == null || symbol.ttype == RIGHTBRACKET && AMnestingDepth > 0) {
    return [null,str];
  }
  if (symbol.ttype == DEFINITION) {
    str = symbol.output+AMremoveCharsAndBlanks(str,symbol.input.length); 
    symbol = AMgetSymbol(str);
  }
  switch (symbol.ttype) {
  case UNDEROVER:
  case CONST:
    str = AMremoveCharsAndBlanks(str,symbol.input.length); 
    return [AMcreateMmlNode(symbol.tag,        //its a constant
                             document.createTextNode(symbol.output)),str];
  case LEFTBRACKET:   //read (expr+)
    AMnestingDepth++;
    str = AMremoveCharsAndBlanks(str,symbol.input.length); 
    result = AMparseExpr(str,true);
    AMnestingDepth--;
    if (typeof symbol.invisible == "boolean" && symbol.invisible) 
      node = AMcreateMmlNode("mrow",result[0]);
    else {
      node = AMcreateMmlNode("mo",document.createTextNode(symbol.output));
      node = AMcreateMmlNode("mrow",node);
      node.appendChild(result[0]);
    }
    return [node,result[1]];
  case TEXT:
      if (symbol!=AMquote) str = AMremoveCharsAndBlanks(str,symbol.input.length);
      if (str.charAt(0)=="{") i=str.indexOf("}");
      else if (str.charAt(0)=="(") i=str.indexOf(")");
      else if (str.charAt(0)=="[") i=str.indexOf("]");
      else if (symbol==AMquote) i=str.slice(1).indexOf("\"")+1;
      else i = 0;
      if (i==-1) i = str.length;
      st = str.slice(1,i);
      if (st.charAt(0) == " ") {
        node = AMcreateElementMathML("mspace");
        node.setAttribute("width","1ex");
        newFrag.appendChild(node);
      }
      newFrag.appendChild(
        AMcreateMmlNode(symbol.tag,document.createTextNode(st)));
      if (st.charAt(st.length-1) == " ") {
        node = AMcreateElementMathML("mspace");
        node.setAttribute("width","1ex");
        newFrag.appendChild(node);
      }
      str = AMremoveCharsAndBlanks(str,i+1);
      return [AMcreateMmlNode("mrow",newFrag),str];
  case UNARY:
      str = AMremoveCharsAndBlanks(str,symbol.input.length); 
      result = AMparseSexpr(str);
      if (result[0]==null) return [AMcreateMmlNode(symbol.tag,
                             document.createTextNode(symbol.output)),str];
      if (typeof symbol.func == "boolean" && symbol.func) { // functions hack
        st = str.charAt(0);
        if (st=="^" || st=="_" || st=="/" || st=="|") {
          return [AMcreateMmlNode(symbol.tag,
                    document.createTextNode(symbol.output)),str];
        } else {
          node = AMcreateMmlNode("mrow",
           AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output)));
          node.appendChild(result[0]);
          return [node,result[1]];
        }
      }
      AMremoveBrackets(result[0]);
      if (symbol.input == "sqrt") {           // sqrt
        return [AMcreateMmlNode(symbol.tag,result[0]),result[1]];
      } else if (typeof symbol.acc == "boolean" && symbol.acc) {   // accent
        node = AMcreateMmlNode(symbol.tag,result[0]);
        node.appendChild(AMcreateMmlNode("mo",document.createTextNode(symbol.output)));
        return [node,result[1]];
      } else {                        // font change command
        if (!isIE && typeof symbol.codes != "undefined") {
          for (i=0; i<result[0].childNodes.length; i++)
            if (result[0].childNodes[i].nodeName=="mi" || result[0].nodeName=="mi") {
              st = (result[0].nodeName=="mi"?result[0].firstChild.nodeValue:
                              result[0].childNodes[i].firstChild.nodeValue);
              var newst = [];
              for (var j=0; j<st.length; j++)
                if (st.charCodeAt(j)>64 && st.charCodeAt(j)<91) newst = newst +
                  String.fromCharCode(symbol.codes[st.charCodeAt(j)-65]);
                else newst = newst + st.charAt(j);
              if (result[0].nodeName=="mi")
                result[0]=AMcreateElementMathML("mo").
                          appendChild(document.createTextNode(newst));
              else result[0].replaceChild(AMcreateElementMathML("mo").
          appendChild(document.createTextNode(newst)),result[0].childNodes[i]);
            }
        }
        node = AMcreateMmlNode(symbol.tag,result[0]);
        node.setAttribute(symbol.atname,symbol.atval);
        return [node,result[1]];
      }
  case BINARY:
    str = AMremoveCharsAndBlanks(str,symbol.input.length); 
    result = AMparseSexpr(str);
    if (result[0]==null) return [AMcreateMmlNode("mo",
                           document.createTextNode(symbol.input)),str];
    AMremoveBrackets(result[0]);
    var result2 = AMparseSexpr(result[1]);
    if (result2[0]==null) return [AMcreateMmlNode("mo",
                           document.createTextNode(symbol.input)),str];
    AMremoveBrackets(result2[0]);
    if (symbol.input=="root" || symbol.input=="stackrel") 
      newFrag.appendChild(result2[0]);
    newFrag.appendChild(result[0]);
    if (symbol.input=="frac") newFrag.appendChild(result2[0]);
    return [AMcreateMmlNode(symbol.tag,newFrag),result2[1]];
  case INFIX:
    str = AMremoveCharsAndBlanks(str,symbol.input.length); 
    return [AMcreateMmlNode("mo",document.createTextNode(symbol.output)),str];
  case SPACE:
    str = AMremoveCharsAndBlanks(str,symbol.input.length); 
    node = AMcreateElementMathML("mspace");
    node.setAttribute("width","1ex");
    newFrag.appendChild(node);
    newFrag.appendChild(
      AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output)));
    node = AMcreateElementMathML("mspace");
    node.setAttribute("width","1ex");
    newFrag.appendChild(node);
    return [AMcreateMmlNode("mrow",newFrag),str];
  case LEFTRIGHT:
//    if (rightvert) return [null,str]; else rightvert = true;
    AMnestingDepth++;
    str = AMremoveCharsAndBlanks(str,symbol.input.length); 
    result = AMparseExpr(str,false);
    AMnestingDepth--;
    var st = "";
    if (result[0].lastChild!=null)
      st = result[0].lastChild.firstChild.nodeValue;
//alert(result[0].lastChild+"***"+st);
    if (st == "|") { // its an absolute value subterm
      node = AMcreateMmlNode("mo",document.createTextNode(symbol.output));
      node = AMcreateMmlNode("mrow",node);
      node.appendChild(result[0]);
      return [node,result[1]];
    } else { // the "|" is a \mid
      node = AMcreateMmlNode("mo",document.createTextNode(symbol.output));
      node = AMcreateMmlNode("mrow",node);
      return [node,str];
    }
  default:
//alert("default");
    str = AMremoveCharsAndBlanks(str,symbol.input.length); 
    return [AMcreateMmlNode(symbol.tag,        //its a constant
                             document.createTextNode(symbol.output)),str];
  }
}

function AMparseIexpr(str) {
  var symbol, sym1, sym2, node, result, underover;
  str = AMremoveCharsAndBlanks(str,0);
  sym1 = AMgetSymbol(str);
  result = AMparseSexpr(str);
  node = result[0];
  str = result[1];
  symbol = AMgetSymbol(str);
  if (symbol.ttype == INFIX && symbol.input != "/") {
    str = AMremoveCharsAndBlanks(str,symbol.input.length);
//    if (symbol.input == "/") result = AMparseIexpr(str); else ...
    result = AMparseSexpr(str);
    if (result[0] == null) // show box in place of missing argument
      result[0] = AMcreateMmlNode("mo",document.createTextNode("\u25A1"));
    else AMremoveBrackets(result[0]);
    str = result[1];
//    if (symbol.input == "/") AMremoveBrackets(node);
    if (symbol.input == "_") {
      sym2 = AMgetSymbol(str);
      underover = (sym1.ttype == UNDEROVER);
      if (sym2.input == "^") {
        str = AMremoveCharsAndBlanks(str,sym2.input.length);
        var res2 = AMparseSexpr(str);
        AMremoveBrackets(res2[0]);
        str = res2[1];
        node = AMcreateMmlNode((underover?"munderover":"msubsup"),node);
        node.appendChild(result[0]);
        node.appendChild(res2[0]);
        node = AMcreateMmlNode("mrow",node); // so sum does not stretch
      } else {
        node = AMcreateMmlNode((underover?"munder":"msub"),node);
        node.appendChild(result[0]);
      }
    } else {
      node = AMcreateMmlNode(symbol.tag,node);
      node.appendChild(result[0]);
    }
  }
  return [node,str];
}

function AMparseExpr(str,rightbracket) {
  var symbol, node, result, i, nodeList = [],
  newFrag = document.createDocumentFragment();
  do {
    str = AMremoveCharsAndBlanks(str,0);
    result = AMparseIexpr(str);
    node = result[0];
    str = result[1];
    symbol = AMgetSymbol(str);
    if (symbol.ttype == INFIX && symbol.input == "/") {
      str = AMremoveCharsAndBlanks(str,symbol.input.length);
      result = AMparseIexpr(str);
      if (result[0] == null) // show box in place of missing argument
        result[0] = AMcreateMmlNode("mo",document.createTextNode("\u25A1"));
      else AMremoveBrackets(result[0]);
      str = result[1];
      AMremoveBrackets(node);
      node = AMcreateMmlNode(symbol.tag,node);
      node.appendChild(result[0]);
      newFrag.appendChild(node);
      symbol = AMgetSymbol(str);
    } 
    else if (node!=undefined) newFrag.appendChild(node);
  } while ((symbol.ttype != RIGHTBRACKET && 
           (symbol.ttype != LEFTRIGHT || rightbracket)
           || AMnestingDepth == 0) && symbol!=null && symbol.output!="");
  if (symbol.ttype == RIGHTBRACKET || symbol.ttype == LEFTRIGHT) {
//    if (AMnestingDepth > 0) AMnestingDepth--;
    var len = newFrag.childNodes.length;
    if (len>0 && newFrag.childNodes[len-1].nodeName == "mrow" && len>1 &&
      newFrag.childNodes[len-2].nodeName == "mo" &&
      newFrag.childNodes[len-2].firstChild.nodeValue == ",") { //matrix
      var right = newFrag.childNodes[len-1].lastChild.firstChild.nodeValue;
      if (right==")" || right=="]") {
        var left = newFrag.childNodes[len-1].firstChild.firstChild.nodeValue;
        if (left=="(" && right==")" && symbol.output != "}" || 
            left=="[" && right=="]") {
        var pos = []; // positions of commas
        var matrix = true;
        var m = newFrag.childNodes.length;
        for (i=0; matrix && i<m; i=i+2) {
          pos[i] = [];
          node = newFrag.childNodes[i];
          if (matrix) matrix = node.nodeName=="mrow" && 
            (i==m-1 || node.nextSibling.nodeName=="mo" && 
            node.nextSibling.firstChild.nodeValue==",")&&
            node.firstChild.firstChild.nodeValue==left &&
            node.lastChild.firstChild.nodeValue==right;
          if (matrix) 
            for (var j=0; j<node.childNodes.length; j++)
              if (node.childNodes[j].firstChild.nodeValue==",")
                pos[i][pos[i].length]=j;
          if (matrix && i>1) matrix = pos[i].length == pos[i-2].length;
        }
        if (matrix) {
          var row, frag, n, k, table = document.createDocumentFragment();
          for (i=0; i<m; i=i+2) {
            row = document.createDocumentFragment();
            frag = document.createDocumentFragment();
            node = newFrag.firstChild; // <mrow>(-,-,...,-,-)</mrow>
            n = node.childNodes.length;
            k = 0;
            node.removeChild(node.firstChild); //remove (
            for (j=1; j<n-1; j++) {
              if (typeof pos[i][k] != "undefined" && j==pos[i][k]){
                node.removeChild(node.firstChild); //remove ,
                row.appendChild(AMcreateMmlNode("mtd",frag));
                k++;
              } else frag.appendChild(node.firstChild);
            }
            row.appendChild(AMcreateMmlNode("mtd",frag));
            if (newFrag.childNodes.length>2) {
              newFrag.removeChild(newFrag.firstChild); //remove <mrow>)</mrow>
              newFrag.removeChild(newFrag.firstChild); //remove <mo>,</mo>
            }
            table.appendChild(AMcreateMmlNode("mtr",row));
          }
          node = AMcreateMmlNode("mtable",table);
          if (typeof symbol.invisible == "boolean" && symbol.invisible) node.setAttribute("columnalign","left");
          newFrag.replaceChild(node,newFrag.firstChild);
        }
       }
      }
    }
    str = AMremoveCharsAndBlanks(str,symbol.input.length);
    if (typeof symbol.invisible != "boolean" || !symbol.invisible) {
      node = AMcreateMmlNode("mo",document.createTextNode(symbol.output));
      newFrag.appendChild(node);
    }
  }
  return [newFrag,str];
}

function AMparseMath(str) {
  var result, node = AMcreateElementMathML("mstyle");
  if (mathcolor != "") node.setAttribute("mathcolor",mathcolor);
  if (displaystyle) node.setAttribute("displaystyle","true");
  if (mathfontfamily != "") node.setAttribute("fontfamily",mathfontfamily);
  AMnestingDepth = 0;
  node.appendChild(AMparseExpr(str.replace(/^\s+/g,""),false)[0]);
  node = AMcreateMmlNode("math",node);
  if (showasciiformulaonhover)                      //fixed by djhsu so newline
    node.setAttribute("title",str.replace(/\s+/g," "));//does not show in Gecko
  if (mathfontfamily != "" && (isIE || mathfontfamily != "serif")) {
    var fnode = AMcreateElementXHTML("font");
    fnode.setAttribute("face",mathfontfamily);
    fnode.appendChild(node);
    return fnode;
  }
  return node;
}

function AMstrarr2docFrag(arr, linebreaks) {
  var newFrag=document.createDocumentFragment();
  var expr = false;
  for (var i=0; i<arr.length; i++) {
    if (expr) newFrag.appendChild(AMparseMath(arr[i]));
    else {
      var arri = (linebreaks ? arr[i].split("\n\n") : [arr[i]]);
      newFrag.appendChild(AMcreateElementXHTML("span").
      appendChild(document.createTextNode(arri[0])));
      for (var j=1; j<arri.length; j++) {
        newFrag.appendChild(AMcreateElementXHTML("p"));
        newFrag.appendChild(AMcreateElementXHTML("span").
        appendChild(document.createTextNode(arri[j])));
      }
    }
    expr = !expr;
  }
  return newFrag;
}

function AMprocessNodeR(n, linebreaks) {
  var mtch, str, arr, frg, i;
  if (n.childNodes.length == 0) {
   if ((n.nodeType!=8 || linebreaks) &&
    n.parentNode.nodeName!="form" && n.parentNode.nodeName!="FORM" &&
    n.parentNode.nodeName!="textarea" && n.parentNode.nodeName!="TEXTAREA" &&
    n.parentNode.nodeName!="pre" && n.parentNode.nodeName!="PRE") {
    str = n.nodeValue;
    if (!(str == null)) {
      str = str.replace(/\r\n\r\n/g,"\n\n");
      if (doubleblankmathdelimiter) {
        str = str.replace(/\x20\x20\./g," "+AMdelimiter1+".");
        str = str.replace(/\x20\x20,/g," "+AMdelimiter1+",");
        str = str.replace(/\x20\x20/g," "+AMdelimiter1+" ");
      }
      str = str.replace(/\x20+/g," ");
      str = str.replace(/\s*\r\n/g," ");
      mtch = false;
      str = str.replace(new RegExp(AMescape2, "g"),
              function(st){mtch=true;return "AMescape2"});
      str = str.replace(new RegExp(AMescape1, "g"),
              function(st){mtch=true;return "AMescape1"});
      str = str.replace(new RegExp(AMdelimiter2regexp, "g"),AMdelimiter1);
      arr = str.split(AMdelimiter1);
      for (i=0; i<arr.length; i++)
        arr[i]=arr[i].replace(/AMescape2/g,AMdelimiter2).
                      replace(/AMescape1/g,AMdelimiter1);
      if (arr.length>1 || mtch) {
        if (checkForMathML) {
          checkForMathML = false;
          var nd = AMisMathMLavailable();
          AMnoMathML = nd != null
          if (AMnoMathML && notifyIfNoMathML) 
            AMbody.insertBefore(nd,AMbody.childNodes[0]);
        }
        if (!AMnoMathML) {
          frg = AMstrarr2docFrag(arr,n.nodeType==8);
          var len = frg.childNodes.length;
          n.parentNode.replaceChild(frg,n);
          return len-1;
        } else return 0;
      }
    }
   } else return 0;
  } else if (n.nodeName!="math") {
    for (i=0; i<n.childNodes.length; i++)
      i += AMprocessNodeR(n.childNodes[i], linebreaks);
  }
  return 0;
}

function AMprocessNode(n, linebreaks, spanclassAM) {
  var frag,st;
  if (spanclassAM!=null) {
    frag = document.getElementsByTagName("span")
    for (var i=0;i<frag.length;i++)
      if (frag[i].className == "AM")
        AMprocessNodeR(frag[i],linebreaks);
  } else {
    try {
      st = n.innerHTML;
    } catch(err) {}
    if (st==null || 
        st.indexOf(AMdelimiter1)!=-1 || st.indexOf(AMdelimiter2)!=-1) 
      AMprocessNodeR(n,linebreaks);
  }
  if (isIE) { //needed to match size and font of formula to surrounding text
    frag = document.getElementsByTagName('math');
    for (var i=0;i<frag.length;i++) frag[i].update()
  }
}

var AMbody;
var AMnoMathML = false, AMtranslated = false;

AMinitSymbols(); // moved out of translate for TiddlyWiki

function translate(spanclassAM) {
  //if (!AMtranslated)
  { // run this only once
    AMtranslated = true;
    AMbody = document.getElementsByTagName("body")[0];
    AMprocessNode(AMbody, false, spanclassAM);
  }
}

/*************  my code goes here *********************/

Story.prototype.OLDMrefreshTiddler=Story.prototype.refreshTiddler;
Story.prototype.refreshTiddler=function(title,template,force,customFields,defaultText)
{
  var k=this.OLDMrefreshTiddler(title, template, force, 
                                        customFields,defaultText);
  AMprocessNode(k,false);
  return k;
}


//}}}
/%
|Name|MicroCalc|
|Source|http://www.TiddlyTools.com/#MicroCalc|
|Version|1.1.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|html|
|Requires||
|Overrides||
|Description|a simple embeddable calculator using javascript eval() function|

Usage: <<tiddler MicroCalc>>

%/<<tiddler HideTiddlerTags>>/%
%/{{small smallform{/%
%/<html><div style="width:100%"><hide linebreaks>
<form action="javascript:;" style="display:inline;margin:0;padding:0;"><!--
--><input name="input" value="0" style="width:70%;text-align:right;"
	title="INPUT: enter a JavaScript expression, function, or object/variable name"
	onfocus="this.select()"
	onkeyup="if (event.keyCode==13) {this.form.go.click(); return false;}"><!--
--><input name="go" type="button" value="=" style="width:5%"
	title="CALCULATE: evaluate input and display results"
	onclick="var i=this.form.input; var o=this.form.output; var val=i.value; var res='';
		try{res=eval(val);i.value=res}catch(e){res=e.description||e.toString()};
		o.value+=(o.value.length?'\n':'')+val+'\n='+res;
		o.style.display='block'; o.scrollTop=o.scrollHeight;
		i.select();i.focus();"><!--
--><input name="memstore" type="button" value="m" style="width:5%"
	title="MEMORY STORE: save input to temporary memory"
	onclick="var f=this.form; f.memory.value=f.input.value;
		f.memory.parentNode.style.display='block'"><!--
--><input name="clear" type="button" value="c" style="width:5%" 
	title="CLEAR: erase history and reset input"
	onclick="var i=this.form.input; var o=this.form.output;
		o.value='';o.style.display='none';
		i.value='0';i.select();i.focus();"><!--
--><div style="display:none"><!--
--><input name="memory" value="0" style="width:70%;text-align:right;"
	title="MEMORY: temporarily store input during calculations"><!--
--><input name="meminsert" type="button" value="mi" style="width:5%"
	title="MEMORY INSERT: append memory value to current input"
	onclick="var i=this.form.input;
		i.value+=this.form.memory.value; i.select();i.focus();"><!--
--><input name="memrecall" type="button" value="mr" style="width:5%"
	title="MEMORY RECALL: replace current input with memory value "
	onclick="var i=this.form.input;
		i.value=this.form.memory.value; i.select();i.focus();"><!--
--><input name="memclear" type="button" value="mc" style="width:5%"
	title="MEMORY CLEAR: clear temporary memory"
	onclick="var f=this.form; f.memory.value='0';
		f.memory.parentNode.style.display='none';
		f.input.select();f.input.focus();"><!--
--></div><!--
--><textarea name="output" rows=5 style="width:99%;display:none;"
	title="HISTORY: previous inputs and calculated results"></textarea><!--
--></form></div></html>/%
%/}}}
Objetivo do curso: 
Apresentar os fundamentos da Teoria da Computação.

Como definir o processo computacional de maneira formal?
Quais as capacidades / limitações da computação?
Como definir uma máquina abstrata que realiza computações? 

Em suma: quais as capacidades e limitações de um computador?

Veremos que existem vários modelos, e que a capacidade computacional de uma máquina é caracterizada pela linguagem formal que ela pode reconhecer.

Quanto mais “poderosa” uma máquina, a linguagem que ela pode reconhecer pode ser mais complexa.


<<tiddler NextTiddler with: [[Teoria da Computação - visão geral]]>>
/%
|Name|MoveTiddlerToTop|
|Source|http://www.TiddlyTools.com/#MoveTiddlerToTop|
|Version|1.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires||
|Overrides||
|Description|reposition the current tiddler to top of the story column|

Usage: <<tiddler MoveTiddlerToTop>>

%/<script>
	var here=story.findContainingTiddler(place); if (!here) return;
	here.parentNode.insertBefore(here,here.parentNode.firstChild); // move to top of column
</script>
Name: MptwBlack
Background: #000
Foreground: #fff
PrimaryPale: #333
PrimaryLight: #555
PrimaryMid: #888
PrimaryDark: #aaa
SecondaryPale: #111
SecondaryLight: #222
SecondaryMid: #555
SecondaryDark: #888
TertiaryPale: #222
TertiaryLight: #666
TertiaryMid: #888
TertiaryDark: #aaa
Error: #300

This is in progress. Help appreciated.


Name: MptwBlue
Background: #fff
Foreground: #000
PrimaryPale: #cdf
PrimaryLight: #57c
PrimaryMid: #114
PrimaryDark: #012
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88

/***
|Name:|MptwConfigPlugin|
|Description:|Miscellaneous tweaks used by MPTW|
|Version:|1.0 ($Rev: 3646 $)|
|Date:|$Date: 2008-02-27 02:34:38 +1000 (Wed, 27 Feb 2008) $|
|Source:|http://mptw.tiddlyspot.com/#MptwConfigPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#MptwConfigPlugin|
!!Note: instead of editing this you should put overrides in MptwUserConfigPlugin
***/
//{{{
var originalReadOnly = readOnly;
var originalShowBackstage = showBackstage;

config.options.chkHttpReadOnly = false; 		// means web visitors can experiment with your site by clicking edit
readOnly = false;								// needed because the above doesn't work any more post 2.1 (??)
showBackstage = true;							// show backstage for same reason

config.options.chkInsertTabs = true;    		// tab inserts a tab when editing a tiddler
config.views.wikified.defaultText = "";			// don't need message when a tiddler doesn't exist
config.views.editor.defaultText = "";			// don't need message when creating a new tiddler 

config.options.chkSaveBackups = true;			// do save backups
config.options.txtBackupFolder = 'twbackup';	// put backups in a backups folder

config.options.chkAutoSave = (window.location.protocol == "file:"); // do autosave if we're in local file

config.mptwVersion = "2.4.5";

config.macros.mptwVersion={handler:function(place){wikify(config.mptwVersion,place);}};

if (config.options.txtTheme == '')
	config.options.txtTheme = 'MptwTheme';

// add to default GettingStarted
config.shadowTiddlers.GettingStarted += "\n\nSee also [[MPTW]].";

// add select theme and palette controls in default OptionsPanel
config.shadowTiddlers.OptionsPanel = config.shadowTiddlers.OptionsPanel.replace(/(\n\-\-\-\-\nAlso see AdvancedOptions)/, "{{select{<<selectTheme>>\n<<selectPalette>>}}}$1");

// these are used by ViewTemplate
config.mptwDateFormat = 'DD/MM/YY';
config.mptwJournalFormat = 'Journal DD/MM/YY';

//}}}
Name: MptwGreen
Background: #fff
Foreground: #000
PrimaryPale: #9b9
PrimaryLight: #385
PrimaryMid: #031
PrimaryDark: #020
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88

Name: MptwRed
Background: #fff
Foreground: #000
PrimaryPale: #eaa
PrimaryLight: #c55
PrimaryMid: #711
PrimaryDark: #500
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88

|Name|MptwRounded|
|Description|Mptw Theme with some rounded corners (Firefox only)|
|ViewTemplate|MptwTheme##ViewTemplate|
|EditTemplate|MptwTheme##EditTemplate|
|PageTemplate|MptwTheme##PageTemplate|
|StyleSheet|##StyleSheet|

!StyleSheet
/*{{{*/

[[MptwTheme##StyleSheet]]

.tiddler,
.sliderPanel,
.button,
.tiddlyLink,
.tabContents
{ -moz-border-radius: 1em; }

.tab {
	-moz-border-radius-topleft: 0.5em;
	-moz-border-radius-topright: 0.5em;
}
#topMenu {
	-moz-border-radius-bottomleft: 2em;
	-moz-border-radius-bottomright: 2em;
}

/*}}}*/

Name: MptwSmoke
Background: #fff
Foreground: #000
PrimaryPale: #aaa
PrimaryLight: #777
PrimaryMid: #111
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88

|Name|MptwStandard|
|Description|Mptw Theme with the default TiddlyWiki PageLayout and Styles|
|ViewTemplate|MptwTheme##ViewTemplate|
|EditTemplate|MptwTheme##EditTemplate|
Name: MptwTeal
Background: #fff
Foreground: #000
PrimaryPale: #B5D1DF
PrimaryLight: #618FA9
PrimaryMid: #1a3844
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #f8f8f8
TertiaryLight: #bbb
TertiaryMid: #999
TertiaryDark: #888
Error: #f88
|Name|MptwTheme|
|Description|Mptw Theme including custom PageLayout|
|PageTemplate|##PageTemplate|
|ViewTemplate|##ViewTemplate|
|EditTemplate|##EditTemplate|
|StyleSheet|##StyleSheet|

http://mptw.tiddlyspot.com/#MptwTheme ($Rev: 1829 $)

!PageTemplate
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
	<div class='headerShadow'>
		<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
		<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
	</div>
	<div class='headerForeground'>
		<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
		<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
	</div>
</div>
<!-- horizontal MainMenu -->
<div id='topMenu' refresh='content' tiddler='MainMenu'></div>
<!-- original MainMenu menu -->
<!-- <div id='mainMenu' refresh='content' tiddler='MainMenu'></div> -->
<div id='sidebar'>
	<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
	<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
	<div id='messageArea'></div>
	<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->

!ViewTemplate
<!--{{{-->
[[MptwTheme##ViewTemplateToolbar]]

<div class="tagglyTagged" macro="tags"></div>

<div class='titleContainer'>
	<span class='title' macro='view title'></span>
	<span macro="miniTag"></span>
</div>

<div class='subtitle'>
	(updated <span macro='view modified date {{config.mptwDateFormat?config.mptwDateFormat:"MM/0DD/YY"}}'></span>
	by <span macro='view modifier link'></span>)
	<!--
	(<span macro='message views.wikified.createdPrompt'></span>
	<span macro='view created date {{config.mptwDateFormat?config.mptwDateFormat:"MM/0DD/YY"}}'></span>)
	-->
</div>

<div macro="showWhen tiddler.tags.containsAny(['css','html','pre','systemConfig']) && !tiddler.text.match('{{'+'{')">
	<div class='viewer'><pre macro='view text'></pre></div>
</div>
<div macro="else">
	<div class='viewer' macro='view text wikified'></div>
</div>

<div class="tagglyTagging" macro="tagglyTagging"></div>

<!--}}}-->

!ViewTemplateToolbar
<!--{{{-->
<div class='toolbar'>
	<span macro="showWhenTagged systemConfig">
		<span macro="toggleTag systemConfigDisable . '[[disable|systemConfigDisable]]'"></span>
	</span>
	<span macro="showWhenTagged systemTheme"><span macro="applyTheme"></span></span>
	<span macro="showWhenTagged systemPalette"><span macro="applyPalette"></span></span>
	<span macro="showWhen tiddler.tags.contains('css') || tiddler.title == 'StyleSheet'"><span macro="refreshAll"></span></span>
	<span style="padding:1em;"></span>
	<span macro='toolbar closeTiddler closeOthers +editTiddler deleteTiddler > fields syncing permalink references jump'></span> <span macro='newHere label:"new here"'></span>
	<span macro='newJournalHere {{config.mptwJournalFormat?config.mptwJournalFormat:"MM/0DD/YY"}}'></span>
</div>
<!--}}}-->

!EditTemplate
<!--{{{-->
<div class="toolbar" macro="toolbar +saveTiddler saveCloseTiddler closeOthers -cancelTiddler cancelCloseTiddler deleteTiddler"></div>
<div class="title" macro="view title"></div>
<div class="editLabel">Title</div><div class="editor" macro="edit title"></div>
<div macro='annotations'></div>
<div class="editLabel">Content</div><div class="editor" macro="edit text"></div>
<div class="editLabel">Tags</div><div class="editor" macro="edit tags"></div>
<div class="editorFooter"><span macro="message views.editor.tagPrompt"></span><span macro="tagChooser"></span></div>
<!--}}}-->

!StyleSheet
/*{{{*/

/* a contrasting background so I can see where one tiddler ends and the other begins */
body {
	background: [[ColorPalette::TertiaryLight]];
}

/* sexy colours and font for the header */
.headerForeground {
	color: [[ColorPalette::PrimaryPale]];
}
.headerShadow, .headerShadow a {
	color: [[ColorPalette::PrimaryMid]];
}

/* separate the top menu parts */
.headerForeground, .headerShadow {
	padding: 1em 1em 0;
}

.headerForeground, .headerShadow {
	font-family: 'Trebuchet MS' sans-serif;
	font-weight:bold;
}
.headerForeground .siteSubtitle {
	color: [[ColorPalette::PrimaryLight]];
}
.headerShadow .siteSubtitle {
	color: [[ColorPalette::PrimaryMid]];
}

/* make shadow go and down right instead of up and left */
.headerShadow {
	left: 1px;
	top: 1px;
}

/* prefer monospace for editing */
.editor textarea, .editor input {
	font-family: 'Consolas' monospace;
	background-color:[[ColorPalette::TertiaryPale]];
}


/* sexy tiddler titles */
.title {
	font-size: 250%;
	color: [[ColorPalette::PrimaryLight]];
	font-family: 'Trebuchet MS' sans-serif;
}

/* more subtle tiddler subtitle */
.subtitle {
	padding:0px;
	margin:0px;
	padding-left:1em;
	font-size: 90%;
	color: [[ColorPalette::TertiaryMid]];
}
.subtitle .tiddlyLink {
	color: [[ColorPalette::TertiaryMid]];
}

/* a little bit of extra whitespace */
.viewer {
	padding-bottom:3px;
}

/* don't want any background color for headings */
h1,h2,h3,h4,h5,h6 {
	background-color: transparent;
	color: [[ColorPalette::Foreground]];
}

/* give tiddlers 3d style border and explicit background */
.tiddler {
	background: [[ColorPalette::Background]];
	border-right: 2px [[ColorPalette::TertiaryMid]] solid;
	border-bottom: 2px [[ColorPalette::TertiaryMid]] solid;
	margin-bottom: 1em;
	padding:1em 2em 2em 1.5em;
}

/* make options slider look nicer */
#sidebarOptions .sliderPanel {
	border:solid 1px [[ColorPalette::PrimaryLight]];
}

/* the borders look wrong with the body background */
#sidebar .button {
	border-style: none;
}

/* this means you can put line breaks in SidebarOptions for readability */
#sidebarOptions br {
	display:none;
}
/* undo the above in OptionsPanel */
#sidebarOptions .sliderPanel br {
	display:inline;
}

/* horizontal main menu stuff */
#displayArea {
	margin: 1em 15.7em 0em 1em; /* use the freed up space */
}
#topMenu br {
	display: none;
}
#topMenu {
	background: [[ColorPalette::PrimaryMid]];
	color:[[ColorPalette::PrimaryPale]];
}
#topMenu {
	padding:2px;
}
#topMenu .button, #topMenu .tiddlyLink, #topMenu a {
	margin-left: 0.5em;
	margin-right: 0.5em;
	padding-left: 3px;
	padding-right: 3px;
	color: [[ColorPalette::PrimaryPale]];
	font-size: 115%;
}
#topMenu .button:hover, #topMenu .tiddlyLink:hover {
	background: [[ColorPalette::PrimaryDark]];
}

/* make 2.2 act like 2.1 with the invisible buttons */
.toolbar {
	visibility:hidden;
}
.selected .toolbar {
	visibility:visible;
}

/* experimental. this is a little borked in IE7 with the button 
 * borders but worth it I think for the extra screen realestate */
.toolbar { float:right; }

/* fix for TaggerPlugin. from sb56637. improved by FND */
.popup li .tagger a {
   display:inline;
}

/* makes theme selector look a little better */
#sidebarOptions .sliderPanel .select .button {
  padding:0.5em;
  display:block;
}
#sidebarOptions .sliderPanel .select br {
	display:none;
}

/* make it print a little cleaner */
@media print {
	#topMenu {
		display: none ! important;
	}
	/* not sure if we need all the importants */
	.tiddler {
		border-style: none ! important;
		margin:0px ! important;
		padding:0px ! important;
		padding-bottom:2em ! important;
	}
	.tagglyTagging .button, .tagglyTagging .hidebutton {
		display: none ! important;
	}
	.headerShadow {
		visibility: hidden ! important;
	}
	.tagglyTagged .quickopentag, .tagged .quickopentag {
		border-style: none ! important;
	}
	.quickopentag a.button, .miniTag {
		display: none ! important;
	}
}

/* get user styles specified in StyleSheet */
[[StyleSheet]]

/*}}}*/

|Name|MptwTrim|
|Description|Mptw Theme with a reduced header to increase useful space|
|ViewTemplate|MptwTheme##ViewTemplate|
|EditTemplate|MptwTheme##EditTemplate|
|StyleSheet|MptwTheme##StyleSheet|
|PageTemplate|##PageTemplate|

!PageTemplate
<!--{{{-->

<!-- horizontal MainMenu -->
<div id='topMenu' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<span refresh='content' tiddler='SiteTitle' style="padding-left:1em;font-weight:bold;"></span>:
<span refresh='content' tiddler='MainMenu'></span>
</div>
<div id='sidebar'>
	<div id='sidebarOptions'>
		<div refresh='content' tiddler='SideBarOptions'></div>
		<div style="margin-left:0.1em;"
			macro='slider chkTabSliderPanel SideBarTabs {{"tabs \u00bb"}} "Show Timeline, All, Tags, etc"'></div>
	</div>
</div>
<div id='displayArea'>
	<div id='messageArea'></div>
	<div id='tiddlerDisplay'></div>
</div>

For upgrading. See [[ImportTiddlers]].
URL: http://mptw.tiddlyspot.com/upgrade.html
/***
|Description:|A place to put your config tweaks so they aren't overwritten when you upgrade MPTW|
See http://www.tiddlywiki.org/wiki/Configuration_Options for other options you can set. In some cases where there are clashes with other plugins it might help to rename this to zzMptwUserConfigPlugin so it gets executed last.
***/
//{{{

// example: set your preferred date format
//config.mptwDateFormat = 'MM/0DD/YY';
//config.mptwJournalFormat = 'Journal MM/0DD/YY';

// example: set the theme you want to start with
//config.options.txtTheme = 'MptwRoundTheme';

// example: switch off autosave, switch on backups and set a backup folder
config.options.chkSaveBackups = false;
config.options.chkAutoSave = false;
config.options.txtBackupFolder = 'backups';

//}}}
config.commands.closeTiddler.imgLoc="data:image/gif;base64,R0lGODlhEAAQAMQfAOt0dP94eOFjY/a0tP/JyfFfX/yVlf6mppNtbf5qanknJ9dVVeZqat5eXpiMjGo4OIUvL3pGRthWVuhvb1kaGv39/f1lZdg7O/7Y2F8/P+13d4tcXNRTU2dCQv///////yH5BAEAAB8ALAAAAAAQABAAAAV/4Cd+Xml6Y0pGTosgEap6G0YQh6FDskhjGg0AMJkwAjxfBygkGhmCAAXl6QyGnuLFI4g+qNbixLMNdBNfkpXBLncbial6AC17Gvg4eND1BPB3cHJVBguGhwsSHHo+GRqKHJGRCQo9JI4WBZoFFpUVMw8QCqMQU58qJCclqKytIQA7";

config.commands.closeOthers.imgLoc="data:image/gif;base64,R0lGODlhEAAQAMQfAJLNW3aXtJnM/OTs9YivyMfj/ldwkabS+73d/UpXbdXb5PP2+dHn+uv1/uvx9mGNRIm77LXZ/H6xW1Jhe6/S5ERNX5rA1qjL3uLw/t7o8CkxQz9GVsvM0WOPRf///////yH5BAEAAB8ALAAAAAAQABAAAAWYoCeO5PidHkNRl2URRCAHHkplg6M7Qz9AhpqH4igYjYhkAwIUXRbHwuOhbCwmIgvU2JFIHpHwNbvtAM4A8GHsIUA78DO8s06I3IhGwyzpYDAHA3YeAQ1JCHwPBwcCAxUiAQ5JEXN0AgIZj4SSYQyeBZeYG5ALCGGLi6EOox4GCgs8PhmzDhwakAa5ExMJCRUVGxsaWCXFJSEAOw==";

config.commands.editTiddler.imgLoc="data:image/gif;base64,R0lGODlhEAAQAMQAAGB3lYivyMDf/XiZt+Ts9ajT/Mbh/UlVa/P2+bLY/FRlfu3x9ZzN++Xy/rTR4ENLXN7v/tTk8Jm/1enx96jL3uDo7ykxQz5FVb2JAP+8Bv/RV6HQ/FSr9qfR+jhllf///yH5BAAAAAAALAAAAAAQABAAAAWV4CeOZClGjkNJUhAMsOdJohMRUz4RvNdxntrEQCQKGj6gQkRBFAXHpAex/EicBijy54FQRddslAspfD8BhBZDLpgPovQRo8l0C50NAf4ZLBp0GRhleXoPIn4RdYN4GxsMFYd9CwkKlgoAAwybFReICAkJeAUDAKYAC54fABEIOzwEFbILDhaImJcHBw8PFxcWVSbCIiEAOw==";


config.commands.saveTiddler.imgLoc="data:image/gif;base64,R0lGODlhEAAQANUkAOLp8LHX/PH1+ENLXElVa5XK/JrA1j5FVYm77Lvc/a7T5bba/LDR49Xn8N7n74ivyKjL3ikxQ+nv9NXb5MvM0Z7O+1Jhe1dwkcDf/ezx9oXIWe3x9naXtKTR+/L2+uXt9avU+8fj/n2/Uv///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACQALAAAAAAQABAAAAaewJFwSBySjqOGggExGB4PjpQzQioan0xW++kiLtUR4xMqlzFoD+IrhHjMIYwgkfDYLULD+ywQSRYLAR54IwYjfCIaIhsBIINDIiNyiYuNjgRClH2KGyAgHR0fmJmKnJ6gFR8DQlSUnZ8dFRUAqyMcGRuVsBUFBQ4HrB4JjKeyvRnAIxcTHlwAzwAOGRQRrBfXFhYEBAMDBwcRhEXjREEAOw==";


config.commands.cancelTiddler.imgLoc="data:image/gif;base64,R0lGODlhEAAQANUiALba/OLp8ElVa0NLXIivyJXK/MDf/T5FVbvc/Ym77MvM0ZrA1t7n7ykxQ67T5dXn8LDR46jL3tXb5J7O+1Jhe1dwkbHX/KvU+6TR++zx9naXtMfj/u0xMeXt9fL2+u3x9s8dHf///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACIALAAAAAAQABAAAAaewJBwSByKjqGHAxJZLAgEjVQTQjoenUxW2+kmKtUQpLMplw1oT+IrjHg+5o8BgfDYKcLFBwTffxAAABYeeCEKIBx8iHyCF4RCBB6LiR8WFheOApBvi5WYGBgdmiEaGZN8F6ATHQNCh5SdGBMTAa2kfgB+sgUFDAdCGm+NH7ITvBm/IRUSHlwBzwEMGQoNwBXXFBQCAgMDBwcNhUXjREEAOw==";

config.commands.deleteTiddler.imgLoc="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ2SURBVBgZBcFLiJVlGADg5/3+b87cbLyFNBJ4oexGQYqIi6hFQambgohoE0aLUqGCaBcuonWLUFe1CIJolWCLaiK1C0FUREpRBgmWNpqi4XjOnP97e57ITI+8fuLZ6bnJZ0rYhikECGSQzbi1M1cu5UJcvfzqycN7RgCRmXa9+dXJ9w5su6uUWJV0EoBMSIv/LXv/uyvOnx1eP/3zL2u+PLxnCBVKF3cMarfq1D+6EkGQjT6b8TgtLfceuv0mO7ZU37bFmWx3Xn5w/7HVx9/ePSwQESsysxt0xUShBl2hCyIoAs383MCe7fM23jY5Xedm34UCSUBBCUqEEqFEKBFKF/7+d8mGFcvuXhOe37lWN9E9CRUgk9oRQkZofVJC7Rhk8fulNGpjrY08sHlS1DKGCpkkahQpJaKEQDayKwwoLbTWSYUooEKiIYIQEolsTHSAKKIPWVJDJlChjcmkIZCZoBS0ULskgySFvtE3oEJrKTNJUgKQQAj950eMFg5ZPvebU+vW2zH9WGWnCn2jT7LRACRoyY2FI6ZOfeC+p54zuekeSz99YubkQv304YkDFdo4tUwHfxgJqQWZQSMjPX30Lbv3vmDqzBeceMPMylU2b9jg+1/z5Qrjca/vmZ+bsHVd0ZI+6YOWrL7yp6lbNrHrFQD14LyuxcYK42Fr49Zy1ItvzvVapBSgJetXzrv+4zGzR180XDrvOq5d7fSdvyos3+gvzA66m1+7dzSbmUXSACunq4vn9zt9/B23rp5WuwnXFsf+uNBJ/aHITNv3fbZvvJyPR8T9KWcAJImUHh0eq1sXP+zWDi/G1cHc8Oxgy8cvffT1E/8D2iAtJW5RUGAAAAAASUVORK5CYII=";


config.commands.permalink.imgLoc="data:image/gif;base64,R0lGODlhEAAQAMQfAKxoR8VkLxFw1feVPITSWv+eQv7Qo0Cc6OyIN/v7+3PLTSCZEFy17Wa6XuT1x2bGQ3nNUU6vRXPAa9mLXMTkwJZEHJt7LL5aJ/z8/O2KONx3L/ubP/r6+rtVI////////yH5BAEAAB8ALAAAAAAQABAAAAWD4CeOZDlimOitnvlhXefFiyCs3NkZMe9QDMGik3t1BgZDIcZgHCCxHAyxKRQmnYOkoYgaNYMNr3JoEB6dDBGmyWxihwNBgVZz2Js3YB+JWNprHW15YgA2FxkaRB8JgoQxHQEbdiKNg4R5iYuVgpcZmkUjHDEapYqbJRyjkKouoqqhIyEAOw==";

config.commands.references.imgLoc="data:image/gif;base64,R0lGODlhEAAQANUrAJu81zqa6oyz2aPYioGt2VarVUunzme1jT6Miuf4yGag2XjJTm6wzNDpvK3W+Ze3y0qotz6CuTR7y4i213i6ii6WKNvo7bbW62Oa2pvK+oWy58jf8VSRuVCmTM7i9FSR2+Dt8o7Hjbrfuy53yIrKdz13uSVxxkSgOr7a9er0/////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACsALAAAAAAQABAAAAaOQJVwSByujipOJFJqOpuq40oFSFmvV0IUCUB5v1/BdvpIKbDZseoBRl0oHQkGJKWaraJCQ7WZILZUXx5/CSQBBw0nUSoCdxoOCQMQBgskJIqMXxIOEwwBlAUDmAACBAQjFp6fBSeiRSohAyQHEAEmCAeKUkgnCQsVJiYZJmO7KieWDB/Eu83HwczNzkZSQQA7";

config.commands.jump.imgLoc="data:image/gif;base64,R0lGODlhEAAQAMQfAJLNW3aXtMfj/pfL/OTr9IivyMvM0Vdwkb7e/UpXbfP2+azU+9Xo9Ovx9u32/mGNRIm77OPx/rXZ/H6xW1Jhe6/S5ERNX5rA1qjL3tvj6ykxQz9GVqDP+2OPRf///////yH5BAEAAB8ALAAAAAAQABAAAAWYoCeO5PidHlNV2HUVRSAHHloxRKM3RE9Ah5qn0hAYjYikAwIUYRRHAaKjdCgoogv0OO1IvtfstkPuALyLsKcAnQLegEknnRCxk4/J5D15CAh1HgENSWVmDxEcBBYig0kMEREdiBwDi42EXwsLHYkDAxkbjQoImgsclZ8Noh4HGQo8Pj0ZDQYajQe5FBQJCRYWGxsaWCXFJSEAOw==";

config.commands.syncing.imgLoc="data:image/gif;base64,R0lGODlhEAAQAMQfAJXG2JXa+ZLO5ChrlkCy4TZ1kiVvpCN0trvo9SN5xTd4lrfh7iR9zo3S+EGz7JDJ4TaCromrvC9ymyV+0Dd3mTl1koe72YvN7LTj+9ne6N3g6v7+/0Cw2Stoh////////yH5BAEAAB8ALAAAAAAQABAAAAV94CeOXumJ5ah6VVFQpXSqX6YgC4JAljGTnYVAwCFcMIffx9OJdDqDB8HRSCiZCpMh0GgwroWTZ2A4JBiTn2nNVk8YiYNhIA6vGJhAwFdSdK4JAQ4EDwMDTX8rBwEXBBxDAIkrBhYQDw8AAAoaGzQeMh4ULhVKJDNrNKmqNCEAOw==";

config.commands.fields.imgLoc="data:image/gif;base64,R0lGODlhEAAQAMQAAHyqzUprjGiTtzpae4Gvz1V5nmaXyFyApG2cyom10oay0Uxvkk5yllR8o1yRxFGIwXelzY2t03KfwXekxZFggajA3uFCQsXa6VWDvUZmhfT1+NXZ4unr8P///wAAAAAAACH5BAAAAAAALAAAAAAQABAAAAVrYCeOZCleiQJACGJETvRQlZgSq2twDvdYGJtmSCwODyIFZ8lsLpEdAmez3Fiv1IJIap2WqAwRoIm9chZip5oTEE2m1TK13ZFMqZsvJyMSkOV7fWtOfB1QJiQDfQ0NBQUMCwEBGZQDioiYHSEAOw==";


/***
|Name:|NewHerePlugin|
|Description:|Creates the new here and new journal macros|
|Version:|3.0 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#NewHerePlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
merge(config.macros, {
	newHere: {
		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			wikify("<<newTiddler "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);
		}
	},
	newJournalHere: {
		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			wikify("<<newJournal "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);
		}
	}
});

//}}}

/***
|Name:|NewMeansNewPlugin|
|Description:|If 'New Tiddler' already exists then create 'New Tiddler (1)' and so on|
|Version:|1.1 ($Rev: 2263 $)|
|Date:|$Date: 2007-06-13 04:22:32 +1000 (Wed, 13 Jun 2007) $|
|Source:|http://mptw.tiddlyspot.com/empty.html#NewMeansNewPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Note: I think this should be in the core
***/
//{{{

String.prototype.getNextFreeName = function() {
       var numberRegExp = / \(([0-9]+)\)$/;
       var match = numberRegExp.exec(this);
       if (match) {
               var num = parseInt(match[1]) + 1;
               return this.replace(numberRegExp," ("+num+")");
       }
       else {
               return this + " (1)";
       }
}

config.macros.newTiddler.checkForUnsaved = function(newName) {
	var r = false;
	story.forEachTiddler(function(title,element) {
		if (title == newName)
			r = true;
	});
	return r;
}

config.macros.newTiddler.getName = function(newName) {
       while (store.getTiddler(newName) || config.macros.newTiddler.checkForUnsaved(newName))
               newName = newName.getNextFreeName();
       return newName;
}


config.macros.newTiddler.onClickNewTiddler = function()
{
	var title = this.getAttribute("newTitle");
	if(this.getAttribute("isJournal") == "true") {
		var now = new Date();
		title = now.formatString(title.trim());
	}

	title = config.macros.newTiddler.getName(title); // <--- only changed bit

	var params = this.getAttribute("params");
	var tags = params ? params.split("|") : [];
	var focus = this.getAttribute("newFocus");
	var template = this.getAttribute("newTemplate");
	var customFields = this.getAttribute("customFields");
	story.displayTiddler(null,title,template,false,null,null);
	var tiddlerElem = document.getElementById(story.idPrefix + title);
	if(customFields)
		story.addCustomFields(tiddlerElem,customFields);
	var text = this.getAttribute("newText");
	if(typeof text == "string")
		story.getTiddlerField(title,"text").value = text.format([title]);
	for(var t=0;t<tags.length;t++)
		story.setTiddlerTag(title,tags[t],+1);
	story.focusTiddler(title,focus);
	return false;
};

//}}}

/%
|Name|NextTiddler|
|Source|http://www.TiddlyTools.com/#NextTiddler|
|Version|0.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|insert a link that, when clicked, closes the current tiddler and opens another one in its place|

usage: <<tiddler NextTiddler with: NewTiddlerTitle linktext>>


%/<script label="próximo">
	var tiddler=story.findContainingTiddler(place);
	story.displayTiddler(tiddler,"$1");
	story.closeTiddler(tiddler.getAttribute("tiddler")); // close self
	return false;
</script>
Autômato:

* uma fita contendo a informação de entrada.
* uma cabeça de leitura que se move pela fita.
* um controle que decide sobre o movimetno da cabeça e produz uma saída.

Modos de operação:
* produzir uma saída de forma autônoma
* entrada traduzida em saída
* entrada aceita ou não

<<tiddler NextTiddler with: [[Teoria da Computabilidade]]>>
Orientações Gerais: Horários e Avaliação

Horários: 
3 tempos semanais (teoria) - terças às 9:00

Avaliação (por bimestre):
* Um exame escrito individual em sala.
* Um projeto realizado em dupla.
* Uma lista de exercício realizada individualmente.

<<tiddler NextTiddler with: [[Tópicos]]>>
<!--{{{-->
<!--{{{-->
<div macro='polyglot'></div> or <span macro='polyglot'></span>
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--}}}-->
/***
|Name:|PrettyDatesPlugin|
|Description:|Provides a new date format ('pppp') that displays times such as '2 days ago'|
|Version:|1.0 ($Rev: 3646 $)|
|Date:|$Date: 2008-02-27 02:34:38 +1000 (Wed, 27 Feb 2008) $|
|Source:|http://mptw.tiddlyspot.com/#PrettyDatesPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Notes
* If you want to you can rename this plugin. :) Some suggestions: LastUpdatedPlugin, RelativeDatesPlugin, SmartDatesPlugin, SexyDatesPlugin.
* Inspired by http://ejohn.org/files/pretty.js
***/
//{{{
Date.prototype.prettyDate = function() {
	var diff = (((new Date()).getTime() - this.getTime()) / 1000);
	var day_diff = Math.floor(diff / 86400);

	if (isNaN(day_diff))      return "";
	else if (diff < 0)        return "in the future";
	else if (diff < 60)       return "just now";
	else if (diff < 120)      return "1 minute ago";
	else if (diff < 3600)     return Math.floor(diff/60) + " minutes ago";
	else if (diff < 7200)     return "1 hour ago";
	else if (diff < 86400)    return Math.floor(diff/3600) + " hours ago";
	else if (day_diff == 1)   return "Yesterday";
	else if (day_diff < 7)    return day_diff + " days ago";
	else if (day_diff < 14)   return  "a week ago";
	else if (day_diff < 31)   return Math.ceil(day_diff/7) + " weeks ago";
	else if (day_diff < 62)   return "a month ago";
	else if (day_diff < 365)  return "about " + Math.ceil(day_diff/31) + " months ago";
	else if (day_diff < 730)  return "a year ago";
	else                      return Math.ceil(day_diff/365) + " years ago";
}

Date.prototype.formatString_orig_mptw = Date.prototype.formatString;

Date.prototype.formatString = function(template) {
	return this.formatString_orig_mptw(template).replace(/pppp/,this.prettyDate());
}

// for MPTW. otherwise edit your ViewTemplate as required.
// config.mptwDateFormat = 'pppp (DD/MM/YY)'; 
config.mptwDateFormat = 'pppp'; 

//}}}

!Demonstrar que nem todo problema pode ser resolvido computacionalmente.

1 - Assumir que para cada função computável há um programa de computador finito.

2 - Assim, o conjunto de todos os programas de computador (possíveis de se escrever) é infinito, mas contável.

3 - Consideramos os problemas que consistem em responder ''sim'' ou ''não'' para um determinado número inteiro. (Exemplo: o número é par? o número é primo? o número é perfeito?)

4 - Um problema assim pode ser modelado como uma função f(n) que retorne 0 ou 1.

5 - Suponha que cada problema desse possa ser numerado, assim temos funções f_0, f_1, f_2, ..., f_i, ... (isto é, um conunto infinito, mas contável de problemas).

6 - A função f(n) definida como
|0 | se f_n(n)=1|
|1 | caso contrário|
não pode corresponder a nenhum inteiro.

Veja que f_j(j)=
|0 | se f_j(j)=1|
|1 | caso contrário|

7 - Logo, a suposição 5 é falsa e o conjunto de problemas é infinito e incontável (maior portanto que o conjunto dos possíveis programas.


<<tiddler NextTiddler with: [[Exemplos de problemas não computáveis]]>>
!Quantificadores

p(x) é uma sentença aberta dependente de x.

Exemplo: $p(x)=x in A$

Se $A={1,2,3}$, p(1) é verdadeira e p(4) é falsa.

!Quantificador universal $AA$ (qualquer)

$AA x in B, p(x)$ 
é verdadeira se $B sub A$

!Quantificar existencial $EE$ (existe)

$EE x in B, p(x)$
é verdadeira se A e B não são disjuntos.


!Construção de conjuntos com quantificadores

Exemplo
$B={3,5,7}$
$A={x | EE y in B, y<x " e " x<10}={4,5,6,7,8,9}$
$C={x | AA y in B, y<x " e " x<10}={8,9}$


!Cardinalidade de um conjunto finito
é o número de elementos de um conjunto
$A={2,3,7,8}$
$|A|=4$

!Conjunto das partes

$2^A$ é o conjunto de todos os subconjuntos de A.

$A={1,2}$
$2^A={emptyset, {1}, {2}, {1,2}}$

$|2^A|=2^(|A|)$

>Demonstração:
>
>  Associe a cada elemento $a_i$ de A uma proposição $p_i(x)$:
>    $p_i(x)=a_i in x$ que pode ser verdadeira ou falsa.
>
> Para A={1,2,3}
>  | $1 in X $ | $2 in X$ | $3 in X$ | conjunto |
>  | V | V | V | {1,2,3} |
>  | V | V | F | {1,2} |
>  | V | F | V | {1,3} |
>  | V | F | F | {1} |
>  | F | V | V | {2,3} |
>  | F | V | F | {2} |
>  | F | F | V | {3} |
>  | F | F | F | emptyset |
>

!Pares ordenados

$(a,b)={ {a}, {a,b} }$

A ordem do par importa.
$(a,b)=(c,d) " sse " a=c " e " b=d$

!Produto cartesiano
$A xx B = {(a,b)| a in A ww b in B}$

Exemplo:
A={1,2,3}
B={x,y}

$A xx B= { (1,x), (1,y), (2,x), (2,y), (3,x), (3,y)}$
> $|A xx B| = ?$

$A xx B$ não é necessariamente igual a $B xx A$
> Quando são iguais?


! Tuplas

(a,b,c)=((a,b),c)

Assim $(a,b,c)=(d,e,f) <=> a=d, b=e " e " c=f$

Produto cartesiano simultâneo de vários conjuntos $A xx B xx C$


<<tiddler NextTiddler with: [[Relações]]>>
/***
|Name:|QuickOpenTagPlugin|
|Description:|Changes tag links to make it easier to open tags as tiddlers|
|Version:|3.0.1 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#QuickOpenTagPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
config.quickOpenTag = {

	dropdownChar: (document.all ? "\u25bc" : "\u25be"), // the little one doesn't work in IE?

	createTagButton: function(place,tag,excludeTiddler) {
		// little hack so we can do this: <<tag PrettyTagName|RealTagName>>
		var splitTag = tag.split("|");
		var pretty = tag;
		if (splitTag.length == 2) {
			tag = splitTag[1];
			pretty = splitTag[0];
		}
		
		var sp = createTiddlyElement(place,"span",null,"quickopentag");
		createTiddlyText(createTiddlyLink(sp,tag,false),pretty);
		
		var theTag = createTiddlyButton(sp,config.quickOpenTag.dropdownChar,
                        config.views.wikified.tag.tooltip.format([tag]),onClickTag);
		theTag.setAttribute("tag",tag);
		if (excludeTiddler)
			theTag.setAttribute("tiddler",excludeTiddler);
    		return(theTag);
	},

	miniTagHandler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var tagged = store.getTaggedTiddlers(tiddler.title);
		if (tagged.length > 0) {
			var theTag = createTiddlyButton(place,config.quickOpenTag.dropdownChar,
                        	config.views.wikified.tag.tooltip.format([tiddler.title]),onClickTag);
			theTag.setAttribute("tag",tiddler.title);
			theTag.className = "miniTag";
		}
	},

	allTagsHandler: function(place,macroName,params) {
		var tags = store.getTags(params[0]);
		var filter = params[1]; // new feature
		var ul = createTiddlyElement(place,"ul");
		if(tags.length == 0)
			createTiddlyElement(ul,"li",null,"listTitle",this.noTags);
		for(var t=0; t<tags.length; t++) {
			var title = tags[t][0];
			if (!filter || (title.match(new RegExp('^'+filter)))) {
				var info = getTiddlyLinkInfo(title);
				var theListItem =createTiddlyElement(ul,"li");
				var theLink = createTiddlyLink(theListItem,tags[t][0],true);
				var theCount = " (" + tags[t][1] + ")";
				theLink.appendChild(document.createTextNode(theCount));
				var theDropDownBtn = createTiddlyButton(theListItem," " +
					config.quickOpenTag.dropdownChar,this.tooltip.format([tags[t][0]]),onClickTag);
				theDropDownBtn.setAttribute("tag",tags[t][0]);
			}
		}
	},

	// todo fix these up a bit
	styles: [
"/*{{{*/",
"/* created by QuickOpenTagPlugin */",
".tagglyTagged .quickopentag, .tagged .quickopentag ",
"	{ margin-right:1.2em; border:1px solid #eee; padding:2px; padding-right:0px; padding-left:1px; }",
".quickopentag .tiddlyLink { padding:2px; padding-left:3px; }",
".quickopentag a.button { padding:1px; padding-left:2px; padding-right:2px;}",
"/* extra specificity to make it work right */",
"#displayArea .viewer .quickopentag a.button, ",
"#displayArea .viewer .quickopentag a.tiddyLink, ",
"#mainMenu .quickopentag a.tiddyLink, ",
"#mainMenu .quickopentag a.tiddyLink ",
"	{ border:0px solid black; }",
"#displayArea .viewer .quickopentag a.button, ",
"#mainMenu .quickopentag a.button ",
"	{ margin-left:0px; padding-left:2px; }",
"#displayArea .viewer .quickopentag a.tiddlyLink, ",
"#mainMenu .quickopentag a.tiddlyLink ",
"	{ margin-right:0px; padding-right:0px; padding-left:0px; margin-left:0px; }",
"a.miniTag {font-size:150%;} ",
"#mainMenu .quickopentag a.button ",
"	/* looks better in right justified main menus */",
"	{ margin-left:0px; padding-left:2px; margin-right:0px; padding-right:0px; }", 
"#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }",
"#topMenu .quickopentag .tiddlyLink { padding-right:1px; margin-right:0px; }",
"#topMenu .quickopentag .button { padding-left:1px; margin-left:0px; border:0px; }",
"/*}}}*/",
		""].join("\n"),

	init: function() {
		// we fully replace these builtins. can't hijack them easily
		window.createTagButton = this.createTagButton;
		config.macros.allTags.handler = this.allTagsHandler;
		config.macros.miniTag = { handler: this.miniTagHandler };
		config.shadowTiddlers["QuickOpenTagStyles"] = this.styles;
		store.addNotification("QuickOpenTagStyles",refreshStyles);
	}
}

config.quickOpenTag.init();

//}}}

Uma relação nos conjuntos $A_1, A_2, ..., A_n$ é um conjunto qualquer de tuplas de elementos de $A_1,A_2,...,A_n$.

Assim,
 $ R sub A_1 xx A_2 xx ... xx A_n = prod_(i=1)^n A_i $

Quando n=2, a relação é binária.

É comum haver relações binárias sobre o mesmo conjunto A.

 $ R sub A xx A $

Exemplo

A relação < no conjunto {1,2,3}

$R_1={(1,2),(1,3),(2,3)}$

Dizemos que $1 R_1 2$ é verdadeira e $2 R_1 1$ é falsa.

A relação $<=$ no mesmo conjunto
$R_2={(1,2),(1,3),(2,3),(1,1),(2,2),(3,3)}$

A relação "é o dobro de" no mesmo conjunto

$R_3={(2,1)}$

Relação vazia
$R_4=emptyset$

!Relação conversa

$R^C$ é o converso de uma relação R.

$R^C={(x,y)|(y,x) in R}$

> Qual o converso de "<"?

!Funções

Uma relação f em $A xx B$ é uma função com domínio A e codomínio B (ou contra-domínio) se para cada $x in A$ existe um único y em B tl que $(x,y) in f$. Em outros termos,

$(x,y) in f$ e $(x,z) in f -> y=z$

Imagem ou amplitude de f:
$Im f ={y in B | EE x in A, f(x)=y}$

Exemplo: função quadrado

$ f: NN -> NN$
$   x |-> x^2 $

ou $f(x)=x^2$

[img[tooltip|funcaoimg.jpg]]

> qual a cardinalidade de uma função?
>> = a cardinalidade do domínio

! Composição de relações

$R_1 sub X xx Z, R_2 sub Z xx Y$

$ x (R_1 R_2) y <=> EE z in Z, x R_1 z ww z R_2 y$


! Correspondências

Dados dois conjuntos A e B e uma função $f: A -> B$

* f é injetora, biunívoca ou "1 para 1" se nunca mapeia elementos diferentes para o mesmo lugar, ou seja:
$a neq b -> f(a) neq f(b)$

* f é sobrejetora, "sobre" ou "onto" se atinge todos os elementos de B, ou seja:
$AA b in B, EE a in A | f(a)=b$
em outras palavras, $Im f = B$

* f é bijetora ou uma correspondência se for injetora e sobrejetora

Uma bijeção num conjunto finito pode ser asociada a uma permutação ou a uma rerrotulação.

> Exercício:
>
>  Proponha contra-exemplos de funções injetoras e sobrejetoras.
>

! Função Inversa

Seja $f:a->B$

Se f é injetora, contém uma inversa $f^(-1)$.

Se f for também sobrejetora, o domínio de $f^(-1)$ é B.

Se $f^C$ for uma função, existe a inversa $f^(-1)$ e $f^(-1)=f^C$

/***
|Name:|RenameTagsPlugin|
|Description:|Allows you to easily rename or delete tags across multiple tiddlers|
|Version:|3.0 ($Rev: 5501 $)|
|Date:|$Date: 2008-06-10 23:11:55 +1000 (Tue, 10 Jun 2008) $|
|Source:|http://mptw.tiddlyspot.com/#RenameTagsPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
Rename a tag and you will be prompted to rename it in all its tagged tiddlers.
***/
//{{{
config.renameTags = {

	prompts: {
		rename: "Rename the tag '%0' to '%1' in %2 tidder%3?",
		remove: "Remove the tag '%0' from %1 tidder%2?"
	},

	removeTag: function(tag,tiddlers) {
		store.suspendNotifications();
		for (var i=0;i<tiddlers.length;i++) {
			store.setTiddlerTag(tiddlers[i].title,false,tag);
		}
		store.resumeNotifications();
		store.notifyAll();
	},

	renameTag: function(oldTag,newTag,tiddlers) {
		store.suspendNotifications();
		for (var i=0;i<tiddlers.length;i++) {
			store.setTiddlerTag(tiddlers[i].title,false,oldTag); // remove old
			store.setTiddlerTag(tiddlers[i].title,true,newTag);  // add new
		}
		store.resumeNotifications();
		store.notifyAll();
	},

	storeMethods: {

		saveTiddler_orig_renameTags: TiddlyWiki.prototype.saveTiddler,

		saveTiddler: function(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created) {
			if (title != newTitle) {
				var tagged = this.getTaggedTiddlers(title);
				if (tagged.length > 0) {
					// then we are renaming a tag
					if (confirm(config.renameTags.prompts.rename.format([title,newTitle,tagged.length,tagged.length>1?"s":""])))
						config.renameTags.renameTag(title,newTitle,tagged);

					if (!this.tiddlerExists(title) && newBody == "")
						// dont create unwanted tiddler
						return null;
				}
			}
			return this.saveTiddler_orig_renameTags(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created);
		},

		removeTiddler_orig_renameTags: TiddlyWiki.prototype.removeTiddler,

		removeTiddler: function(title) {
			var tagged = this.getTaggedTiddlers(title);
			if (tagged.length > 0)
				if (confirm(config.renameTags.prompts.remove.format([title,tagged.length,tagged.length>1?"s":""])))
					config.renameTags.removeTag(title,tagged);
			return this.removeTiddler_orig_renameTags(title);
		}

	},

	init: function() {
		merge(TiddlyWiki.prototype,this.storeMethods);
	}
}

config.renameTags.init();

//}}}

! Notação de conjunto

A={1,3,7,10}

> A ordem não importa: {2,3}={3,2}

B={ x | x é par}

> Notação ~Zermelo-Fraenkel, onde o membro após a barra vertical (lida como "tal que") é uma expressão lógica.
> P={x | x é o nome de um rio e x está no Brasil}

! Pertinência

$x in A$

$x notin A$

No caso anterior,
$1 in A$
$2 notin A$

Conjunto infinito:
$C={2,4,6,8,...}$

! Conjunto vazio ou nulo

$emptyset = {}$

$B={x | x^2=4 " e x é impar"}= emptyset$

$x notin emptyset, AA x$
> Qualquer que seja x, x não pertence ao conjunto vazio

! Universo de discurso

U é o conjunto de todos os elementos do discurso.
$x in U, AA x$

<<tiddler NextTiddler with: [[Subconjuntos]]>>
/***
|Name:|SVGIncluderPlugin|
|Description:|Includes ASCIISVG in your tiddlers with a plugin|
|Version:|1.0 ($Rev: 0000 $)|
|Date:|$Date: 2008-07-05$|
|Source:|to be announced|
|Author:|Mathifier|
|License:|GPL|
***/



//{{{

/* ASCIIsvg.js
==============
JavaScript routines to dynamically generate Scalable Vector Graphics
using a mathematical xy-coordinate system (y increases upwards) and
very intuitive JavaScript commands (no programming experience required).
ASCIIsvg.js is good for learning math and illustrating online math texts.
Works with Internet Explorer+Adobe SVGviewer and SVG enabled Mozilla/Firefox.

Ver 1.2.7 Sep 13, 2005 (c) Peter Jipsen http://www.chapman.edu/~jipsen
Latest version at http://www.chapman.edu/~jipsen/svg/ASCIIsvg.js
If you use it on a webpage, please send the URL to jipsen@chapman.edu

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at
your option) any later version.

This program is distributed in the hope that it will be useful, 
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License (at http://www.gnu.org/copyleft/gpl.html) 
for more details.*/

var checkIfSVGavailable = true;
var notifyIfNoSVG = true;
var alertIfNoSVG = false;
var xunitlength = 20;  // pixels
var yunitlength = 20;  // pixels
var origin = [0,0];   // in pixels (default is bottom left corner)
var defaultwidth = 300; defaultheight = 200; defaultborder = 0;
var border = defaultborder;
var strokewidth, strokedasharray, stroke, fill;
var fontstyle, fontfamily, fontsize, fontweight, fontstroke, fontfill;
var markerstrokewidth = "1";
var markerstroke = "black";
var markerfill = "yellow";
var marker = "none";
var arrowfill = stroke;
var dotradius = 4;
var ticklength = 4;
var axesstroke = "black";
var gridstroke = "grey";
var pointerpos = null;
var coordinates = null;
var above = "above";
var below = "below";
var left = "left";
var right = "right";
var aboveleft = "aboveleft";
var aboveright = "aboveright";
var belowleft = "belowleft";
var belowright = "belowright";
var cpi = "\u03C0", ctheta = "\u03B8";
var pi = Math.PI, ln = Math.log, e = Math.E;
var arcsin = Math.asin, arccos = Math.acos, arctan = Math.atan;
var sec = function(x) { return 1/Math.cos(x) };
var csc = function(x) { return 1/Math.sin(x) };
var cot = function(x) { return 1/Math.tan(x) };
var xmin, xmax, ymin, ymax, xscl, yscl, 
    xgrid, ygrid, xtick, ytick, initialized;
var isIE = document.createElementNS==null;
var picture, svgpicture, doc, width, height, a, b, c, d, i, n, p, t, x, y;
var arcsec = function(x) { return arccos(1/x) };
var arccsc = function(x) { return arcsin(1/x) };
var arccot = function(x) { return arctan(1/x) };
var sinh = function(x) { return (Math.exp(x)-Math.exp(-x))/2 };
var cosh = function(x) { return (Math.exp(x)+Math.exp(-x))/2 };
var tanh = 
  function(x) { return (Math.exp(x)-Math.exp(-x))/(Math.exp(x)+Math.exp(-x)) };
var sech = function(x) { return 1/cosh(x) };
var csch = function(x) { return 1/sinh(x) };
var coth = function(x) { return 1/tanh(x) };
var arcsinh = function(x) { return ln(x+Math.sqrt(x*x+1)) };
var arccosh = function(x) { return ln(x+Math.sqrt(x*x-1)) };
var arctanh = function(x) { return ln((1+x)/(1-x))/2 };
var sech = function(x) { return 1/cosh(x) };
var csch = function(x) { return 1/sinh(x) };
var coth = function(x) { return 1/tanh(x) };
var arcsech = function(x) { return arccosh(1/x) };
var arccsch = function(x) { return arcsinh(1/x) };
var arccoth = function(x) { return arctanh(1/x) };
var sign = function(x) { return (x==0?0:(x<0?-1:1)) };

function factorial(x,n) {
  if (n==null) n=1;
  for (var i=x-n; i>0; i-=n) x*=i;
  return (x<0?NaN:(x==0?1:x));
}

function C(x,k) {
  var res=1;
  for (var i=0; i<k; i++) res*=(x-i)/(k-i);
  return res;
}

function chop(x,n) {
  if (n==null) n=0;
  return Math.floor(x*Math.pow(10,n))/Math.pow(10,n);
}

function ran(a,b,n) {
  if (n==null) n=0;
  return chop((b+Math.pow(10,-n)-a)*Math.random()+a,n);
}

function myCreateElementXHTML(t) {
  if (isIE) return document.createElement(t);
  else return document.createElementNS("http://www.w3.org/1999/xhtml",t);
}

function isSVGavailable() {
  var nd = myCreateElementXHTML("center");
  nd.appendChild(document.createTextNode("To view the "));
  var an = myCreateElementXHTML("a");
  an.appendChild(document.createTextNode("ASCIIsvg"));
  an.setAttribute("href","http://www.chapman.edu/~jipsen/asciisvg.html");
  nd.appendChild(an);
  nd.appendChild(document.createTextNode(" images use Internet Explorer 6+"));
  an = myCreateElementXHTML("a");
  an.appendChild(document.createTextNode("Adobe SVGviewer 3.02"));
  an.setAttribute("href","http://www.adobe.com/svg");
  nd.appendChild(an);
  nd.appendChild(document.createTextNode(" or "));
  an = myCreateElementXHTML("a");
  an.appendChild(document.createTextNode("SVG enabled Mozilla/Firefox"));
  an.setAttribute("href",
    "http://www.chapman.edu/~jipsen/svg/svgenabledmozillafirefox.html");
  nd.appendChild(an);
  if (navigator.appName.slice(0,8)=="Netscape") 
    if (window['SVGElement']) return null;
    else return nd;
  else if (navigator.appName.slice(0,9)=="Microsoft")
    try	{
      var oSVG=eval("new ActiveXObject('Adobe.SVGCtl.3');");
        return null;
    } catch (e) {
        return nd;
    }
  else return nd;
}


function less(x,y) { return x < y }  // used for scripts in XML files
                                     // since IE does not handle CDATA well
function setText(st,id) { 
  var node = document.getElementById(id);
  if (node!=null)
    if (node.childNodes.length!=0) node.childNodes[0].nodeValue = st;
    else node.appendChild(document.createTextNode(st));
}

function myCreateElementSVG(t) {
  if (isIE) return doc.createElement(t);
  else return doc.createElementNS("http://www.w3.org/2000/svg",t);
}

function showNames(obj) {
  var st,str="";
  for (st in obj) str+=st+", ";
  return str;
}

function getX() {
  return (doc.getElementById("pointerpos").getAttribute("cx")-origin[0])/xunitlength;
}

function getY() {
  return (height-origin[1]-doc.getElementById("pointerpos").getAttribute("cy"))/yunitlength;
}

function mousemove_listener(evt) {
  if (svgpicture.getAttribute("xbase")!=null)
    pointerpos.cx.baseVal.value = evt.clientX-svgpicture.getAttribute("xbase");
  if (svgpicture.getAttribute("ybase")!=null)
    pointerpos.cy.baseVal.value = evt.clientY-svgpicture.getAttribute("ybase");
}

function top_listener(evt) {
  svgpicture.setAttribute("ybase",evt.clientY);
}

function bottom_listener(evt) { 
  svgpicture.setAttribute("ybase",evt.clientY-height+1);
}

function left_listener(evt) {
  svgpicture.setAttribute("xbase",evt.clientX);
}

function right_listener(evt) {
  svgpicture.setAttribute("xbase",evt.clientX-width+1);
}

function drawPictures() { // main routine; called after webpage has loaded
  var src, id, dsvg, onmov, nd, node, ht, index;
  var pictures = document.getElementsByTagName("textarea");
  for (index = 0; index<pictures.length; index++)
    if (pictures[index].className=="ASCIIsvg"){
      pictures[index].style.display="none";  // hide the textarea
    }
  pictures = document.getElementsByTagName("embed");
  var len = pictures.length;
 if (checkIfSVGavailable) {
  nd = isSVGavailable();
  if (nd != null && notifyIfNoSVG && len>0)
    if (alertIfNoSVG)
      alert("To view the SVG pictures in Internet Explorer\n\
download the free Adobe SVGviewer from www.adobe.com/svg or\n\
use Firefox 1.5 preview (called Deerpark)");
    else {
    var ASbody = document.getElementsByTagName("body")[0];
    ASbody.insertBefore(nd,ASbody.childNodes[0]);
  }
 }
 if (nd == null) {
  for (index = 0; index < len; index++) {
    xmin = null; xmax = null; ymin = null; ymax = null;
    xscl = null; xgrid = null; yscl = null; ygrid = null;
    initialized = false;
    picture = (isIE ? pictures[index] : pictures[0]);
    src = picture.getAttribute("script");
    if (src==null) src = "";
    ht = picture.getAttribute("height");
    if (ht==null) ht ="";
   if (ht!="") {defaultborder = 25; border = 25;}
   if (ht=="" || src=="") 
    if (document.getElementById("picture"+(index+1)+"input")==null) {
      if (isIE && src.indexOf("nobutton()")==-1)
        picture.parentNode.insertBefore(myCreateElementXHTML("br"),picture);
      node = myCreateElementXHTML("textarea");
      node.setAttribute("rows","10");
      node.setAttribute("cols","60");
//      node.setAttribute("style","display:block");
      if (isIE) src = src.replace(/([^\r])\n/g,"$1\r").slice(1);
      node.appendChild(document.createTextNode(src));
      if (src.indexOf("showcode()")==-1) node.style.display = "none";
      node.setAttribute("id","picture"+(index+1)+"input");
      picture.parentNode.insertBefore(node,picture);

      if (src.indexOf("nobutton()")==-1) {
        picture.parentNode.insertBefore(myCreateElementXHTML("br"),picture);

        node = myCreateElementXHTML("button");
        if (isIE) node.onclick = function() { showHideCode(this) };
        else node.setAttribute("onclick","showHideCode(this)");
        node.appendChild(document.createTextNode("Show/Hide"));
        picture.parentNode.insertBefore(node,picture);

        node = myCreateElementXHTML("button");
        if (isIE) node.onclick = ASfn[index];
        else node.setAttribute("onclick","updatePicture("+index+")");
        node.appendChild(document.createTextNode("Update"));
        if (src.indexOf("showCode()")==-1) node.style.display = "none";
        picture.parentNode.insertBefore(node,picture);

/*      node = myCreateElementXHTML("span");
//      node.setAttribute("id","AScoord"+index);
        node.appendChild(document.createTextNode("(x,y)"));
        picture.parentNode.insertBefore(node,picture);
*/
        picture.parentNode.insertBefore(myCreateElementXHTML("br"),picture);
      }
      if (isIE) picture.onmousemove = ASupdateCoords[index];
      else picture.setAttribute("onmousemove","updateCoords"+index+"()");
    } else src = document.getElementById("picture"+(index+1)+"input").value;
    src = src.replace(/plot\(\x20*([^\"f\[][^\n\r]+?)\,/g,"plot\(\"$1\",");
    src = src.replace(/plot\(\x20*([^\"f\[][^\n\r]+)\)/g,"plot(\"$1\")");
    src = src.replace(/([0-9])([a-zA-Z])/g,"$1*$2");
    src = src.replace(/\)([\(0-9a-zA-Z])/g,"\)*$1");
//    eval(src.replace(/\s\s/g,";")); //for XML version
    id = picture.getAttribute("id");
    dsvg = picture.getAttribute("src");
    onmov = picture.getAttribute("onmousemove");
    if (id == null || id == "") {
      id = "picture"+(index+1);
      picture.setAttribute("id",id);
    }
//axes();
    try {
      with (Math) eval(src);
    } catch(err) {
      if (err=="wait") return false;
      else {
var st,str="";
for (st in err) str+=st;
 alert(err.name+"\n"+err.number+"\n"+err.message+"\n"+err.description+"\n"+src)
      }
    }
    if (isIE) src = src.replace(/([^\r])\n/g,"$1\r");
    setText("<embed width=\""+width+"\" height=\""+height+"\" src=\""+
            dsvg+"\" "+(onmov!=null?"onmousemove=\""+onmov+"\"":"")+
            (isIE?"\r":"\n")+"script=\'"+src+"\'>",id+"script");
//    setText(src.replace(/\s\s/g,"\r"),id+"script"); //for XML version
  }
 }
}

function switchTo(id) {
//alert(id);
  picture = document.getElementById(id);
  width = picture.getAttribute("width")-0;
  height = picture.getAttribute("height")-0;
  strokewidth = "1" // pixel
  stroke = "black"; // default line color
  fill = "none";    // default fill color
  marker = "none";
  if ((picture.nodeName == "EMBED" || picture.nodeName == "embed") && isIE) {
    svgpicture = picture.getSVGDocument().getElementById("root");
    doc = picture.getSVGDocument();
  } else {
    picture.setAttribute("onmousemove","updateCoords"+(id.slice(id.length-1)-1)+"()");
//alert(picture.getAttribute("onmousemove")+"***");
    svgpicture = picture;
    doc = document;
  }
  xunitlength = svgpicture.getAttribute("xunitlength")-0;
  yunitlength = svgpicture.getAttribute("yunitlength")-0;
  xmin = svgpicture.getAttribute("xmin")-0;
  xmax = svgpicture.getAttribute("xmax")-0;
  ymin = svgpicture.getAttribute("ymin")-0;
  ymax = svgpicture.getAttribute("ymax")-0;
  origin = [svgpicture.getAttribute("ox")-0,svgpicture.getAttribute("oy")-0];
}

function updatePicture(obj) {
//alert(typeof obj)
  var src = document.getElementById((typeof obj=="string"?
              obj:"picture"+(obj+1)+"input")).value;
  xmin = null; xmax = null; ymin = null; ymax = null;
  xscl = null; xgrid = null; yscl = null; ygrid = null;
  initialized = false;
  switchTo((typeof obj=="string"?obj.slice(0,8):"picture"+(obj+1)));
  src = src.replace(/plot\(\x20*([^\"f\[][^\n\r]+?)\,/g,"plot\(\"$1\",");
  src = src.replace(/plot\(\x20*([^\"f\[][^\n\r]+)\)/g,"plot(\"$1\")");
  src = src.replace(/([0-9])([a-zA-Z])/g,"$1*$2");
  src = src.replace(/\)([\(0-9a-zA-Z])/g,"\)*$1");
//alert(src);
  try {
    with (Math) eval(src);
  } catch(err) {alert(err+"\n"+src)}
}

function showHideCode(obj) {
  var node = obj.nextSibling;
  while (node != null && node.nodeName != "BUTTON" && 
    node.nodeName != "button") node = node.nextSibling;
  if (node.style.display == "none") node.style.display = "";
  else node.style.display = "none";
  while (node != null && node.nodeName != "TEXTAREA" && 
    node.nodeName != "textarea") node = node.previousSibling;
  if (node.style.display == "none") node.style.display = "";
  else node.style.display = "none";
//  updatePicture(node.getAttribute("id"));
}

function hideCode() { //do nothing
}

function showcode() { //do nothing
}

function nobutton() { //do nothing
}

function setBorder(x) { border = x }

function initPicture(x_min,x_max,y_min,y_max) {
 if (!initialized) {
  strokewidth = "1"; // pixel
  strokedasharray = null;
  stroke = "black"; // default line color
  fill = "none";    // default fill color
  fontstyle = "italic"; // default shape for text labels
  fontfamily = "times"; // default font
  fontsize = "16";      // default size
  fontweight = "normal";
  fontstroke = "none";  // default font outline color
  fontfill = "none";    // default font color
  marker = "none";
  initialized = true;
  if (x_min!=null) xmin = x_min;
  if (x_max!=null) xmax = x_max;
  if (y_min!=null) ymin = y_min;
  if (y_max!=null) ymax = y_max;
  if (xmin==null) xmin = -5;
  if (xmax==null) xmax = 5;
 if (typeof xmin != "number" || typeof xmax != "number" || xmin >= xmax) 
   alert("Picture requires at least two numbers: xmin < xmax");
 else if (y_max != null && (typeof y_min != "number" || 
          typeof y_max != "number" || y_min >= y_max))
   alert("initPicture(xmin,xmax,ymin,ymax) requires numbers ymin < ymax");
 else {
  if (width==null) width = picture.getAttribute("width");
  else picture.setAttribute("width",width);
  if (width==null || width=="") width=defaultwidth;
  if (height==null) height = picture.getAttribute("height");
  else picture.setAttribute("height",height);
  if (height==null || height=="") height=defaultheight;
  xunitlength = (width-2*border)/(xmax-xmin);
  yunitlength = xunitlength;
//alert(xmin+" "+xmax+" "+ymin+" "+ymax)
  if (ymin==null) {
    origin = [-xmin*xunitlength+border,height/2];
    ymin = -(height-2*border)/(2*yunitlength);
    ymax = -ymin;
  } else {
    if (ymax!=null) yunitlength = (height-2*border)/(ymax-ymin);
    else ymax = (height-2*border)/yunitlength + ymin;
    origin = [-xmin*xunitlength+border,-ymin*yunitlength+border];
  }
  if (isIE) {
//alert(picture.FULLSCREEN+"\n"+picture.script+"\n"+showNames(picture));
    if (picture.FULLSCREEN==undefined) {
      setTimeout('drawPictures()',100);
      throw "wait";
    }
    svgpicture = picture.getSVGDocument().getElementById("root");
    if (svgpicture==null) {
      setTimeout('drawPictures()',100);
      throw "wait";
    }
    while (svgpicture.childNodes.length()>5) 
      svgpicture.removeChild(svgpicture.lastChild); 
    svgpicture.setAttribute("width",width);
    svgpicture.setAttribute("height",height);
    doc = picture.getSVGDocument();
  } else {
    var qnode = document.createElementNS("http://www.w3.org/2000/svg","svg");
    qnode.setAttribute("id",picture.getAttribute("id"));
    qnode.setAttribute("style","display:inline");
    qnode.setAttribute("width",picture.getAttribute("width"));
    qnode.setAttribute("height",picture.getAttribute("height"));
    if (picture.parentNode!=null)
      picture.parentNode.replaceChild(qnode,picture);
    else
      svgpicture.parentNode.replaceChild(qnode,svgpicture);
    svgpicture = qnode;
    doc = document;
    pointerpos = doc.getElementById("pointerpos");
    if (pointerpos==null) {
      pointerpos = myCreateElementSVG("circle");
      pointerpos.setAttribute("id","pointerpos");
      pointerpos.setAttribute("cx",0);
      pointerpos.setAttribute("cy",0);
      pointerpos.setAttribute("r",0.5);
      pointerpos.setAttribute("fill","red");
      svgpicture.appendChild(pointerpos);
    }
  }
  svgpicture.setAttribute("xunitlength",xunitlength);
  svgpicture.setAttribute("yunitlength",yunitlength);
  svgpicture.setAttribute("xmin",xmin);
  svgpicture.setAttribute("xmax",xmax);
  svgpicture.setAttribute("ymin",ymin);
  svgpicture.setAttribute("ymax",ymax);
  svgpicture.setAttribute("ox",origin[0]);
  svgpicture.setAttribute("oy",origin[1]);
  var node = myCreateElementSVG("rect");
  node.setAttribute("x","0");
  node.setAttribute("y","0");
  node.setAttribute("width",width);
  node.setAttribute("height",height);
  node.setAttribute("style","stroke-width:1;fill:white");
  svgpicture.appendChild(node);
  if (!isIE && picture.getAttribute("onmousemove")!=null) {
    svgpicture.addEventListener("mousemove", mousemove_listener, true);
    var st = picture.getAttribute("onmousemove");
    svgpicture.addEventListener("mousemove", eval(st.slice(0,st.indexOf("("))), true);
    node = myCreateElementSVG("polyline");
    node.setAttribute("points","0,0 "+width+",0");
    node.setAttribute("style","stroke:white; stroke-width:3");
    node.addEventListener("mousemove", top_listener, true);
    svgpicture.appendChild(node);
    node = myCreateElementSVG("polyline");
    node.setAttribute("points","0,"+height+" "+width+","+height);
    node.setAttribute("style","stroke:white; stroke-width:3");
    node.addEventListener("mousemove", bottom_listener, true);
    svgpicture.appendChild(node);
    node = myCreateElementSVG("polyline");
    node.setAttribute("points","0,0 0,"+height);
    node.setAttribute("style","stroke:white; stroke-width:3");
    node.addEventListener("mousemove", left_listener, true);
    svgpicture.appendChild(node);
    node = myCreateElementSVG("polyline");
    node.setAttribute("points",(width-1)+",0 "+(width-1)+","+height);
    node.setAttribute("style","stroke:white; stroke-width:3");
    node.addEventListener("mousemove", right_listener, true);
    svgpicture.appendChild(node);
  }
  border = defaultborder;
 }
 }
}

function line(p,q,id) { // segment connecting points p,q (coordinates in units)
  var node;
  if (id!=null) node = doc.getElementById(id);
  if (node==null) {
    node = myCreateElementSVG("path");
    node.setAttribute("id", id);
    svgpicture.appendChild(node);
  }
  node.setAttribute("d","M"+(p[0]*xunitlength+origin[0])+","+
    (height-p[1]*yunitlength-origin[1])+" "+
    (q[0]*xunitlength+origin[0])+","+(height-q[1]*yunitlength-origin[1]));
  node.setAttribute("stroke-width", strokewidth);
  if (strokedasharray!=null) 
    node.setAttribute("stroke-dasharray", strokedasharray);
  node.setAttribute("stroke", stroke);
  node.setAttribute("fill", fill);
  if (marker=="dot" || marker=="arrowdot") {
    ASdot(p,4,markerstroke,markerfill);
    if (marker=="arrowdot") arrowhead(p,q);
    ASdot(q,4,markerstroke,markerfill);
  } else if (marker=="arrow") arrowhead(p,q);
}

function path(plist,id,c) {
  if (c==null) c="";
  var node, st, i;
  if (id!=null) node = doc.getElementById(id);
  if (node==null) {
    node = myCreateElementSVG("path");
    node.setAttribute("id", id);
    svgpicture.appendChild(node);
  }
  if (typeof plist == "string") st = plist;
  else {
    st = "M";
    st += (plist[0][0]*xunitlength+origin[0])+","+
          (height-plist[0][1]*yunitlength-origin[1])+" "+c;
    for (i=1; i<plist.length; i++)
      st += (plist[i][0]*xunitlength+origin[0])+","+
            (height-plist[i][1]*yunitlength-origin[1])+" ";
  }
  node.setAttribute("d", st);
  node.setAttribute("stroke-width", strokewidth);
  if (strokedasharray!=null) 
    node.setAttribute("stroke-dasharray", strokedasharray);
  node.setAttribute("stroke", stroke);
  node.setAttribute("fill", fill);
  if (marker=="dot" || marker=="arrowdot")
    for (i=0; i<plist.length; i++)
      if (c!="C" && c!="T" || i!=1 && i!=2)
        ASdot(plist[i],4,markerstroke,markerfill);
}

function curve(plist,id) {
  path(plist,id,"T");
}

function circle(center,radius,id) { // coordinates in units
  var node;
  if (id!=null) node = doc.getElementById(id);
  if (node==null) {
    node = myCreateElementSVG("circle");
    node.setAttribute("id", id);
    svgpicture.appendChild(node);
  }
  node.setAttribute("cx",center[0]*xunitlength+origin[0]);
  node.setAttribute("cy",height-center[1]*yunitlength-origin[1]);
  node.setAttribute("r",radius*xunitlength);
  node.setAttribute("stroke-width", strokewidth);
  node.setAttribute("stroke", stroke);
  node.setAttribute("fill", fill);
}

function loop(p,d,id) { 
// d is a direction vector e.g. [1,0] means loop starts in that direction
  if (d==null) d=[1,0];
  path([p,[p[0]+d[0],p[1]+d[1]],[p[0]-d[1],p[1]+d[0]],p],id,"C");
  if (marker=="arrow" || marker=="arrowdot") 
    arrowhead([p[0]+Math.cos(1.4)*d[0]-Math.sin(1.4)*d[1],
               p[1]+Math.sin(1.4)*d[0]+Math.cos(1.4)*d[1]],p);
}

function arc(start,end,radius,id) { // coordinates in units
  var node, v;
//alert([fill, stroke, origin, xunitlength, yunitlength, height])
  if (id!=null) node = doc.getElementById(id);
  if (radius==null) {
    v=[end[0]-start[0],end[1]-start[1]];
    radius = Math.sqrt(v[0]*v[0]+v[1]*v[1]);
  }
  if (node==null) {
    node = myCreateElementSVG("path");
    node.setAttribute("id", id);
    svgpicture.appendChild(node);
  }
  node.setAttribute("d","M"+(start[0]*xunitlength+origin[0])+","+
    (height-start[1]*yunitlength-origin[1])+" A"+radius*xunitlength+","+
     radius*yunitlength+" 0 0,0 "+(end[0]*xunitlength+origin[0])+","+
    (height-end[1]*yunitlength-origin[1]));
  node.setAttribute("stroke-width", strokewidth);
  node.setAttribute("stroke", stroke);
  node.setAttribute("fill", fill);
  if (marker=="arrow" || marker=="arrowdot") {
    u = [(end[1]-start[1])/4,(start[0]-end[0])/4];
    v = [(end[0]-start[0])/2,(end[1]-start[1])/2];
//alert([u,v])
    v = [start[0]+v[0]+u[0],start[1]+v[1]+u[1]];
  } else v=[start[0],start[1]];
  if (marker=="dot" || marker=="arrowdot") {
    ASdot(start,4,markerstroke,markerfill);
    if (marker=="arrowdot") arrowhead(v,end);
    ASdot(end,4,markerstroke,markerfill);
  } else if (marker=="arrow") arrowhead(v,end);
}

function ellipse(center,rx,ry,id) { // coordinates in units
  var node;
  if (id!=null) node = doc.getElementById(id);
  if (node==null) {
    node = myCreateElementSVG("ellipse");
    node.setAttribute("id", id);
    svgpicture.appendChild(node);
  }
  node.setAttribute("cx",center[0]*xunitlength+origin[0]);
  node.setAttribute("cy",height-center[1]*yunitlength-origin[1]);
  node.setAttribute("rx",rx*xunitlength);
  node.setAttribute("ry",ry*yunitlength);
  node.setAttribute("stroke-width", strokewidth);
  node.setAttribute("stroke", stroke);
  node.setAttribute("fill", fill);
}

function rect(p,q,id,rx,ry) { // opposite corners in units, rounded by radii
  var node;
  if (id!=null) node = doc.getElementById(id);
  if (node==null) {
    node = myCreateElementSVG("rect");
    node.setAttribute("id", id);
    svgpicture.appendChild(node);
  }
  node.setAttribute("x",p[0]*xunitlength+origin[0]);
  node.setAttribute("y",height-q[1]*yunitlength-origin[1]);
  node.setAttribute("width",(q[0]-p[0])*xunitlength);
  node.setAttribute("height",(q[1]-p[1])*yunitlength);
  if (rx!=null) node.setAttribute("rx",rx*xunitlength);
  if (ry!=null) node.setAttribute("ry",ry*yunitlength);
  node.setAttribute("stroke-width", strokewidth);
  node.setAttribute("stroke", stroke);
  node.setAttribute("fill", fill);
}

function text(p,st,pos,id,fontsty) {
  var textanchor = "middle";
  var dx = 0; var dy = fontsize/3;
  if (pos!=null) {
    if (pos.slice(0,5)=="above") dy = -fontsize/2;
    if (pos.slice(0,5)=="below") dy = fontsize-0;
    if (pos.slice(0,5)=="right" || pos.slice(5,10)=="right") {
      textanchor = "start";
      dx = fontsize/2;
    }
    if (pos.slice(0,4)=="left" || pos.slice(5,9)=="left") {
      textanchor = "end";
      dx = -fontsize/2;
    }
  }
  var node;
  if (id!=null) node = doc.getElementById(id);
  if (node==null) {
    node = myCreateElementSVG("text");
    node.setAttribute("id", id);
    svgpicture.appendChild(node);
    node.appendChild(doc.createTextNode(st));
  }
  node.lastChild.nodeValue = st;
  node.setAttribute("x",p[0]*xunitlength+origin[0]+dx);
  node.setAttribute("y",height-p[1]*yunitlength-origin[1]+dy);
  node.setAttribute("font-style",(fontsty!=null?fontsty:fontstyle));
  node.setAttribute("font-family",fontfamily);
  node.setAttribute("font-size",fontsize);
  node.setAttribute("font-weight",fontweight);
  node.setAttribute("text-anchor",textanchor);
  if (fontstroke!="none") node.setAttribute("stroke",fontstroke);
  if (fontfill!="none") node.setAttribute("fill",fontfill);
  return p;
}

function ASdot(center,radius,s,f) { // coordinates in units, radius in pixel
  if (s==null) s = stroke; if (f==null) f = fill;
  var node = myCreateElementSVG("circle");
  node.setAttribute("cx",center[0]*xunitlength+origin[0]);
  node.setAttribute("cy",height-center[1]*yunitlength-origin[1]);
  node.setAttribute("r",radius);
  node.setAttribute("stroke-width", strokewidth);
  node.setAttribute("stroke", s);
  node.setAttribute("fill", f);
  svgpicture.appendChild(node);
}

function dot(center, typ, label, pos, id) {
  var node;
  var cx = center[0]*xunitlength+origin[0];
  var cy = height-center[1]*yunitlength-origin[1];
  if (id!=null) node = doc.getElementById(id);
  if (typ=="+" || typ=="-" || typ=="|") {
    if (node==null) {
      node = myCreateElementSVG("path");
      node.setAttribute("id", id);
      svgpicture.appendChild(node);
    }
    if (typ=="+") {
      node.setAttribute("d",
        " M "+(cx-ticklength)+" "+cy+" L "+(cx+ticklength)+" "+cy+
        " M "+cx+" "+(cy-ticklength)+" L "+cx+" "+(cy+ticklength));
      node.setAttribute("stroke-width", .5);
      node.setAttribute("stroke", axesstroke);
    } else {
      if (typ=="-") node.setAttribute("d",
        " M "+(cx-ticklength)+" "+cy+" L "+(cx+ticklength)+" "+cy);
      else node.setAttribute("d",
        " M "+cx+" "+(cy-ticklength)+" L "+cx+" "+(cy+ticklength));
      node.setAttribute("stroke-width", strokewidth);
      node.setAttribute("stroke", stroke);
    }
  } else {
    if (node==null) {
      node = myCreateElementSVG("circle");
      node.setAttribute("id", id);
      svgpicture.appendChild(node);
    }
    node.setAttribute("cx",cx);
    node.setAttribute("cy",cy);
    node.setAttribute("r",dotradius);
    node.setAttribute("stroke-width", strokewidth);
    node.setAttribute("stroke", stroke);
    node.setAttribute("fill", (typ=="open"?"white":stroke));
  }
  if (label!=null) 
    text(center,label,(pos==null?"below":pos),(id==null?id:id+"label"))
}

function arrowhead(p,q) { // draw arrowhead at q (in units)
  var up;
  var v = [p[0]*xunitlength+origin[0],height-p[1]*yunitlength-origin[1]];
  var w = [q[0]*xunitlength+origin[0],height-q[1]*yunitlength-origin[1]];
  var u = [w[0]-v[0],w[1]-v[1]];
  var d = Math.sqrt(u[0]*u[0]+u[1]*u[1]);
  if (d > 0.00000001) {
    u = [u[0]/d, u[1]/d];
    up = [-u[1],u[0]];
    var node = myCreateElementSVG("path");
    node.setAttribute("d","M "+(w[0]-15*u[0]-4*up[0])+" "+
      (w[1]-15*u[1]-4*up[1])+" L "+(w[0]-3*u[0])+" "+(w[1]-3*u[1])+" L "+
      (w[0]-15*u[0]+4*up[0])+" "+(w[1]-15*u[1]+4*up[1])+" z");
    node.setAttribute("stroke-width", markerstrokewidth);
    node.setAttribute("stroke", stroke); /*was markerstroke*/
    node.setAttribute("fill", stroke); /*was arrowfill*/
    svgpicture.appendChild(node);    
  }
}

function chopZ(st) {
  var k = st.indexOf(".");
  if (k==-1) return st;
  for (var i=st.length-1; i>k && st.charAt(i)=="0"; i--);
  if (i==k) i--;
  return st.slice(0,i+1);
}

function grid(dx,dy) { // for backward compatibility
  axes(dx,dy,null,dx,dy)
}

function noaxes() {
  if (!initialized) initPicture();
}

function axes(dx,dy,labels,gdx,gdy) {
//xscl=x is equivalent to xtick=x; xgrid=x; labels=true;
  var x, y, ldx, ldy, pnode, st;
  if (!initialized) initPicture();
  if (typeof dx=="string") { labels = dx; dx = null; }
  if (typeof dy=="string") { gdx = dy; dy = null; }
  if (xscl!=null) {dx = xscl; gdx = xscl; labels = dx}
  if (yscl!=null) {dy = yscl; gdy = yscl}
  if (xtick!=null) {dx = xtick}
  if (ytick!=null) {dy = ytick}
//alert(null)
  dx = (dx==null?xunitlength:dx*xunitlength);
  dy = (dy==null?dx:dy*yunitlength);
  fontsize = Math.min(dx/2,dy/2,16);//alert(fontsize)
  ticklength = fontsize/4;
  if (xgrid!=null) gdx = xgrid;
  if (ygrid!=null) gdy = ygrid;
  if (gdx!=null) {
    gdx = (typeof gdx=="string"?dx:gdx*xunitlength);
    gdy = (gdy==null?dy:gdy*yunitlength);
    pnode = myCreateElementSVG("path");
    st="";
    for (x = origin[0]; x<width; x = x+gdx)
      st += " M"+x+",0"+" "+x+","+height;
    for (x = origin[0]-gdx; x>0; x = x-gdx)
      st += " M"+x+",0"+" "+x+","+height;
    for (y = height-origin[1]; y<height; y = y+gdy)
      st += " M0,"+y+" "+width+","+y;
    for (y = height-origin[1]-gdy; y>0; y = y-gdy)
      st += " M0,"+y+" "+width+","+y;
    pnode.setAttribute("d",st);
    pnode.setAttribute("stroke-width", .5);
    pnode.setAttribute("stroke", gridstroke);
    pnode.setAttribute("fill", fill);
    svgpicture.appendChild(pnode);
  }
  pnode = myCreateElementSVG("path");
  st="M0,"+(height-origin[1])+" "+width+","+
    (height-origin[1])+" M"+origin[0]+",0 "+origin[0]+","+height;
  for (x = origin[0]+dx; x<width; x = x+dx)
    st += " M"+x+","+(height-origin[1]+ticklength)+" "+x+","+
           (height-origin[1]-ticklength);
  for (x = origin[0]-dx; x>0; x = x-dx)
    st += " M"+x+","+(height-origin[1]+ticklength)+" "+x+","+
           (height-origin[1]-ticklength);
  for (y = height-origin[1]+dy; y<height; y = y+dy)
    st += " M"+(origin[0]+ticklength)+","+y+" "+(origin[0]-ticklength)+","+y;
  for (y = height-origin[1]-dy; y>0; y = y-dy)
    st += " M"+(origin[0]+ticklength)+","+y+" "+(origin[0]-ticklength)+","+y;
  if (labels!=null) with (Math) {
    ldx = dx/xunitlength;
    ldy = dy/yunitlength;
    var ddx = floor(1.1-log(ldx)/log(10));
    var ddy = floor(1.1-log(ldy)/log(10));
    for (x = ldx; x<=xmax; x = x+ldx)
      text([x,0],chopZ(x.toFixed(ddx)),"below");
    for (x = -ldx; xmin<=x; x = x-ldx)
      text([x,0],chopZ(x.toFixed(ddx)),"below");
    for (y = ldy; y<=ymax; y = y+ldy)
      text([0,y],chopZ(y.toFixed(ddy)),"left");
    for (y = -ldy; ymin<=y; y = y-ldy)
      text([0,y],chopZ(y.toFixed(ddy)),"left");
  }
  pnode.setAttribute("d",st);
  pnode.setAttribute("stroke-width", .5);
  pnode.setAttribute("stroke", axesstroke);
  pnode.setAttribute("fill", fill);
  svgpicture.appendChild(pnode);
}

function mathjs(st) {
  //translate a math formula to js function notation
  // a^b --> pow(a,b)
  // na --> n*a
  // (...)d --> (...)*d
  // n! --> factorial(n)
  // sin^-1 --> arcsin etc.
  //while ^ in string, find term on left and right
  //slice and concat new formula string
  st = st.replace(/\s/g,"");
  if (st.indexOf("^-1")!=-1) {
    st = st.replace(/sin\^-1/g,"arcsin");
    st = st.replace(/cos\^-1/g,"arccos");
    st = st.replace(/tan\^-1/g,"arctan");
    st = st.replace(/sec\^-1/g,"arcsec");
    st = st.replace(/csc\^-1/g,"arccsc");
    st = st.replace(/cot\^-1/g,"arccot");
    st = st.replace(/sinh\^-1/g,"arcsinh");
    st = st.replace(/cosh\^-1/g,"arccosh");
    st = st.replace(/tanh\^-1/g,"arctanh");
    st = st.replace(/sech\^-1/g,"arcsech");
    st = st.replace(/csch\^-1/g,"arccsch");
    st = st.replace(/coth\^-1/g,"arccoth");
  }
  st = st.replace(/^e$/g,"(E)");
  st = st.replace(/^e([^a-zA-Z])/g,"(E)$1");
  st = st.replace(/([^a-zA-Z])e([^a-zA-Z])/g,"$1(E)$2");
  st = st.replace(/([0-9])([\(a-zA-Z])/g,"$1*$2");
  st = st.replace(/\)([\(0-9a-zA-Z])/g,"\)*$1");
  var i,j,k, ch, nested;
  while ((i=st.indexOf("^"))!=-1) {
    //find left argument
    if (i==0) return "Error: missing argument";
    j = i-1;
    ch = st.charAt(j);
    if (ch>="0" && ch<="9") {// look for (decimal) number
      j--;
      while (j>=0 && (ch=st.charAt(j))>="0" && ch<="9") j--;
      if (ch==".") {
        j--;
        while (j>=0 && (ch=st.charAt(j))>="0" && ch<="9") j--;
      }
    } else if (ch==")") {// look for matching opening bracket and function name
      nested = 1;
      j--;
      while (j>=0 && nested>0) {
        ch = st.charAt(j);
        if (ch=="(") nested--;
        else if (ch==")") nested++;
        j--;
      }
      while (j>=0 && (ch=st.charAt(j))>="a" && ch<="z" || ch>="A" && ch<="Z")
        j--;
    } else if (ch>="a" && ch<="z" || ch>="A" && ch<="Z") {// look for variable
      j--;
      while (j>=0 && (ch=st.charAt(j))>="a" && ch<="z" || ch>="A" && ch<="Z")
        j--;
    } else { 
      return "Error: incorrect syntax in "+st+" at position "+j;
    }
    //find right argument
    if (i==st.length-1) return "Error: missing argument";
    k = i+1;
    ch = st.charAt(k);
    if (ch>="0" && ch<="9" || ch=="-") {// look for signed (decimal) number
      k++;
      while (k<st.length && (ch=st.charAt(k))>="0" && ch<="9") k++;
      if (ch==".") {
        k++;
        while (k<st.length && (ch=st.charAt(k))>="0" && ch<="9") k++;
      }
    } else if (ch=="(") {// look for matching closing bracket and function name
      nested = 1;
      k++;
      while (k<st.length && nested>0) {
        ch = st.charAt(k);
        if (ch=="(") nested++;
        else if (ch==")") nested--;
        k++;
      }
    } else if (ch>="a" && ch<="z" || ch>="A" && ch<="Z") {// look for variable
      k++;
      while (k<st.length && (ch=st.charAt(k))>="a" && ch<="z" ||
               ch>="A" && ch<="Z") k++;
    } else { 
      return "Error: incorrect syntax in "+st+" at position "+k;
    }
    st = st.slice(0,j+1)+"pow("+st.slice(j+1,i)+","+st.slice(i+1,k)+")"+
           st.slice(k);
  }
  while ((i=st.indexOf("!"))!=-1) {
    //find left argument
    if (i==0) return "Error: missing argument";
    j = i-1;
    ch = st.charAt(j);
    if (ch>="0" && ch<="9") {// look for (decimal) number
      j--;
      while (j>=0 && (ch=st.charAt(j))>="0" && ch<="9") j--;
      if (ch==".") {
        j--;
        while (j>=0 && (ch=st.charAt(j))>="0" && ch<="9") j--;
      }
    } else if (ch==")") {// look for matching opening bracket and function name
      nested = 1;
      j--;
      while (j>=0 && nested>0) {
        ch = st.charAt(j);
        if (ch=="(") nested--;
        else if (ch==")") nested++;
        j--;
      }
      while (j>=0 && (ch=st.charAt(j))>="a" && ch<="z" || ch>="A" && ch<="Z")
        j--;
    } else if (ch>="a" && ch<="z" || ch>="A" && ch<="Z") {// look for variable
      j--;
      while (j>=0 && (ch=st.charAt(j))>="a" && ch<="z" || ch>="A" && ch<="Z")
        j--;
    } else { 
      return "Error: incorrect syntax in "+st+" at position "+j;
    }
    st = st.slice(0,j+1)+"factorial("+st.slice(j+1,i)+")"+st.slice(i+1);
  }
  return st;
}

function plot(fun,x_min,x_max,points,id) {
  var pth = [];
  var f = function(x) { return x }, g = fun;
  var name = null;
  if (typeof fun=="string") 
    eval("g = function(x){ with(Math) return "+mathjs(fun)+" }");
  else if (typeof fun=="object") {
    eval("f = function(t){ with(Math) return "+mathjs(fun[0])+" }");
    eval("g = function(t){ with(Math) return "+mathjs(fun[1])+" }");
  }
  if (typeof x_min=="string") { name = x_min; x_min = xmin }
  else name = id;
  var min = (x_min==null?xmin:x_min);
  var max = (x_max==null?xmax:x_max);
  var inc = max-min-0.000001*(max-min);
  inc = (points==null?inc/200:inc/points);
  var gt;
//alert(typeof g(min))
  for (var t = min; t <= max; t += inc) {
    gt = g(t);
    if (!(isNaN(gt)||Math.abs(gt)=="Infinity")) pth[pth.length] = [f(t), gt];
  }
  path(pth,name)
  return p;
}

function slopefield(fun,dx,dy) {
  var g = fun;
  if (typeof fun=="string") 
    eval("g = function(x,y){ with(Math) return "+mathjs(fun)+" }");
  var gxy,x,y,u,v,dz;
  if (dx==null) dx=1;
  if (dy==null) dy=1;
  dz = Math.sqrt(dx*dx+dy*dy)/6;
  var x_min = Math.ceil(xmin/dx);
  var y_min = Math.ceil(ymin/dy);
  for (x = x_min; x <= xmax; x += dx)
    for (y = y_min; y <= ymax; y += dy) {
      gxy = g(x,y);
      if (!isNaN(gxy)) {
        if (Math.abs(gxy)=="Infinity") {u = 0; v = dz;}
        else {u = dz/Math.sqrt(1+gxy*gxy); v = gxy*u;}
        line([x-u,y-v],[x+u,y+v]);
      }
    }
}

function updateCoords(ind) {
  switchTo("picture"+(ind+1));
  var gx=getX(), gy=getY();
  if ((xmax-gx)*xunitlength > 6*fontsize || (gy-ymin)*yunitlength > 2*fontsize)
    text([xmax,ymin],"("+gx.toFixed(2)+", "+gy.toFixed(2)+")",
         "aboveleft","AScoord"+ind,"");
  else text([xmax,ymin]," ","aboveleft","AScoord"+ind,"");
}

function updateCoords0() {updateCoords(0)}
function updateCoords1() {updateCoords(1)}
function updateCoords2() {updateCoords(2)}
function updateCoords3() {updateCoords(3)}
function updateCoords4() {updateCoords(4)}
function updateCoords5() {updateCoords(5)}
function updateCoords6() {updateCoords(6)}
function updateCoords7() {updateCoords(7)}
function updateCoords8() {updateCoords(8)}
function updateCoords9() {updateCoords(9)}
ASfn = [function() {updatePicture(0)},
  function() {updatePicture(1)},
  function() {updatePicture(2)},
  function() {updatePicture(3)},
  function() {updatePicture(4)},
  function() {updatePicture(5)},
  function() {updatePicture(6)},
  function() {updatePicture(7)},
  function() {updatePicture(8)},
  function() {updatePicture(9)}];
ASupdateCoords = [function() {updateCoords(0)},
  function() {updateCoords(1)},
  function() {updateCoords(2)},
  function() {updateCoords(3)},
  function() {updateCoords(4)},
  function() {updateCoords(5)},
  function() {updateCoords(6)},
  function() {updateCoords(7)},
  function() {updateCoords(8)},
  function() {updateCoords(9)}];

/*************  my code goes here *********************/

Story.prototype.OLDSVGrefreshTiddler=Story.prototype.refreshTiddler;
Story.prototype.refreshTiddler=function(title,template,force,customFields,defaultText)
{
  var k=this.OLDSVGrefreshTiddler(title, template, force, 
                                        customFields,defaultText);
  drawPictures();
  return k;
}


//}}}
/***
|Name:|SelectThemePlugin|
|Description:|Lets you easily switch theme and palette|
|Version:|1.0 ($Rev: 3646 $)|
|Date:|$Date: 2008-02-27 02:34:38 +1000 (Wed, 27 Feb 2008) $|
|Source:|http://mptw.tiddlyspot.com/#SelectThemePlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!Notes
* Borrows largely from ThemeSwitcherPlugin by Martin Budden http://www.martinswiki.com/#ThemeSwitcherPlugin
* Theme is cookie based. But set a default by setting config.options.txtTheme in MptwConfigPlugin (for example)
* Palette is not cookie based. It actually overwrites your ColorPalette tiddler when you select a palette, so beware. 
!Usage
* {{{<<selectTheme>>}}} makes a dropdown selector
* {{{<<selectPalette>>}}} makes a dropdown selector
* {{{<<applyTheme>>}}} applies the current tiddler as a theme
* {{{<<applyPalette>>}}} applies the current tiddler as a palette
* {{{<<applyTheme TiddlerName>>}}} applies TiddlerName as a theme
* {{{<<applyPalette TiddlerName>>}}} applies TiddlerName as a palette
***/
//{{{

config.macros.selectTheme = {
	label: {
      		selectTheme:"select theme",
      		selectPalette:"select palette"
	},
	prompt: {
		selectTheme:"Select the current theme",
		selectPalette:"Select the current palette"
	},
	tags: {
		selectTheme:'systemTheme',
		selectPalette:'systemPalette'
	}
};

config.macros.selectTheme.handler = function(place,macroName)
{
	var btn = createTiddlyButton(place,this.label[macroName],this.prompt[macroName],this.onClick);
	// want to handle palettes and themes with same code. use mode attribute to distinguish
	btn.setAttribute('mode',macroName);
};

config.macros.selectTheme.onClick = function(ev)
{
	var e = ev ? ev : window.event;
	var popup = Popup.create(this);
	var mode = this.getAttribute('mode');
	var tiddlers = store.getTaggedTiddlers(config.macros.selectTheme.tags[mode]);
	// for default
	if (mode == "selectPalette") {
		var btn = createTiddlyButton(createTiddlyElement(popup,'li'),"(default)","default color palette",config.macros.selectTheme.onClickTheme);
		btn.setAttribute('theme',"(default)");
		btn.setAttribute('mode',mode);
	}
	for(var i=0; i<tiddlers.length; i++) {
		var t = tiddlers[i].title;
		var name = store.getTiddlerSlice(t,'Name');
		var desc = store.getTiddlerSlice(t,'Description');
		var btn = createTiddlyButton(createTiddlyElement(popup,'li'),name ? name : title,desc ? desc : config.macros.selectTheme.label['mode'],config.macros.selectTheme.onClickTheme);
		btn.setAttribute('theme',t);
		btn.setAttribute('mode',mode);
	}
	Popup.show();
	return stopEvent(e);
};

config.macros.selectTheme.onClickTheme = function(ev)
{
	var mode = this.getAttribute('mode');
	var theme = this.getAttribute('theme');
	if (mode == 'selectTheme')
		story.switchTheme(theme);
	else // selectPalette
		config.macros.selectTheme.updatePalette(theme);
	return false;
};

config.macros.selectTheme.updatePalette = function(title)
{
	if (title != "") {
		store.deleteTiddler("ColorPalette");
		if (title != "(default)")
			store.saveTiddler("ColorPalette","ColorPalette",store.getTiddlerText(title),
					config.options.txtUserName,undefined,"");
		refreshAll();
		if(config.options.chkAutoSave)
			saveChanges(true);
	}
};

config.macros.applyTheme = {
	label: "apply",
	prompt: "apply this theme or palette" // i'm lazy
};

config.macros.applyTheme.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
	var useTiddler = params[0] ? params[0] : tiddler.title;
	var btn = createTiddlyButton(place,this.label,this.prompt,config.macros.selectTheme.onClickTheme);
	btn.setAttribute('theme',useTiddler);
	btn.setAttribute('mode',macroName=="applyTheme"?"selectTheme":"selectPalette"); // a bit untidy here
}

config.macros.selectPalette = config.macros.selectTheme;
config.macros.applyPalette = config.macros.applyTheme;

config.macros.refreshAll = { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
	createTiddlyButton(place,"refresh","refresh layout and styles",function() { refreshAll(); });
}};

//}}}

/***
|Name|SetIconPlugin|
|Source|http://www.TiddlyTools.com/#SetIconPlugin|
|Documentation|http://www.TiddlyTools.com/#SetIconPluginInfo|
|Version|1.8.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.3|
|Type|plugin|
|Requires||
|Overrides||
|Options|##Configuration|
|Description|add an image to a toolbar, macro, or slider link|
!!!!!Documentation
>see [[SetIconPluginInfo]]
!!!!!Configuration
<<<
<<option chkIconsShowImage>> show images on links
<<option chkIconsShowText>> include link text with images
default image style: {{stretch{<<option txtIconsCSS>>}}}
<<<
!!!!!Revisions
<<<
2008.05.11 [1.8.0] added optional 'notext' value for iconpos to force text to be hidden for specific links
| see [[SetIconPluginInfo]] for additional revision details |
2008.05.09 [1.0.0] initial release (as inline script)
<<<
!!!!!Code
***/
//{{{
version.extensions.setIcon= {major: 1, minor: 8, revision: 0, date: new Date(2008,5,11)};

if (config.options.chkIconsShowImage===undefined)
	config.options.chkIconsShowImage=true;
if (config.options.chkIconsShowText===undefined)
	config.options.chkIconsShowText=true;
if (config.options.txtIconsCSS===undefined)
	config.options.txtIconsCSS="vertical-align:middle;width:auto;height:auto";

config.macros.setIcon = {
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		if (!config.options.chkIconsShowImage) return; // text-only - do nothing
		if (!params[0]) return; // no image src specified - do nothing

		// find nearest link element
		var btn=place.lastChild; // look for sibling link
		while (btn && btn.nodeName!="A") btn=btn.previousSibling;
		if (!btn) { // look for child link
			var links=place.getElementsByTagName("A");
			if (links.length) btn=links[links.length-1];
		}
		if (!btn) { // look for parent link
			var btn=place.parentNode.lastChild;
			while (btn && btn.nodeName!="A") btn=btn.previousSibling;
		}
		if (!btn) { // look for cousin link
			var links=place.parentNode.getElementsByTagName("A");
			if (links.length) btn=links[links.length-1];
		}
		if (!btn) return; // can't find a link - do nothing

		// set icon and command text/tip
		var txt=btn.innerHTML;
		var src=params[0];  // default to direct URL
		if (config.macros.attach && config.macros.attach.isAttachment(src))
			src=config.macros.attach.getAttachment(src); // retrieve attachment (if any)
		var css=params[1]; if (!css||!css.length) css=config.options.txtIconsCSS;
		var after=params[2]&&params[2].toUpperCase()=="RIGHT";
		var notext=params[2]&&params[2].toUpperCase()=="NOTEXT";
		btn.innerHTML="<img src='"+src+"' style='"+css+"'>";
		if (config.options.chkIconsShowText && !notext)
			btn.innerHTML=after?txt+btn.innerHTML:btn.innerHTML+txt;
		else
			btn.title=txt.toUpperCase()+": "+btn.title; // add text to tooltip

		// adjust nested slider button text/tip
		if (btn.getAttribute("closedtext")!=null) {
			btn.setAttribute("closedtext",btn.innerHTML);
			btn.setAttribute("openedtext",btn.innerHTML);
			if (!config.options.chkIconsShowText || notext) {
				btn.setAttribute("closedtip",txt.toUpperCase()+": "+btn.getAttribute("closedtip"));
				btn.setAttribute("openedtip",txt.toUpperCase()+": "+btn.getAttribute("openedtip"));
			}
		}
	}
};
//}}}
/***
|Name|SetIconPlugin|
|Source|http://www.TiddlyTools.com/#SetIconPlugin|
|Documentation|http://www.TiddlyTools.com/#SetIconPluginInfo|
|Version|1.8.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.3|
|Type|documentation|
|Requires||
|Overrides||
|Options|##Configuration|
|Description|documentation for SetIconPluginInfo|
!!!!!Syntax
<<<
{{{
<<setIcon image style iconpos>>
}}}
where:
*''image''<br>is a tiddlername for an attached image or a URL for an external image
*''style''<br>(optional) is CSS style attributes applied to the image (default="vertical-align:middle;width:auto;height:auto")
*''iconpos''<br>(optional) indicates the placement of the image relative to the link text.  Use keywords: ''left'', ''right'' or ''notext'' (default=''left'', i.e., the text follows the image).  ''notext'' hides the link text, even if the global option (see Configuration section, below) is set to display the link text along with image.  //Note:  when specifying the non-default //''right''// or //''notext''// value, you can use "" as a placeholder for the ''style'' parameter to apply the standard CSS styles)//
<<<
!!!!!Usage
<<<
First, create a link element using any of:
* ''links:''<br>&nbsp;&nbsp;"""[[TiddlerName]]""" or """[[text|TiddlerName]]""" or """[[text|URL]]"""
* ''macros that generate links:''<br>&nbsp;&nbsp;"""<<toolbar ...>>""", """<<slider ...>>""", """<<saveChanges>>""", etc.
* ''inline sliders:'' (using NestedSlidersPlugin)<br>&nbsp;&nbsp;"""+++[sliderlabel]...==="""
* '''onclick' scripts:'' (using InlineJavascriptPlugin)<br>&nbsp;&nbsp;"""<script label="...">...</script>"""
* ''~HTML-based links:''<br>&nbsp;&nbsp;"""<html><a href="...">...</a></html>"""
* ''transcluded links:'' (where the output of the specified ~TiddlerName contains a link)<br>&nbsp;&nbsp;"""<<tiddler TiddlerName>>""" 
Then, ''embed the """<<setIcon>>""" macro immediately following the generated link''.  The macro looks for the last rendered //sibling// link element that occurs within the same DOM container and adds the specified image to that link.  It is important to note that the macro does not initially look within the //child// DOM elements of the current container.  This is necessary so that 'sliderPanel' content created by the """<<slider>>""" macro can be skipped over, allowing the correct 'sliderButton' link element to be located.

When you use the """<<tiddler>>""" macro to transclude content containing a link, or you directly embed a link using HTML syntax, the resulting link element will //always// be rendered within a //child// DOM element container.  However, the """<<setIcon>>""" macro only looks within //child// DOM elements when no //sibling// link elements are found within the current DOM container.  In order to ensure that the """<<setIcon>>""" macro will not inadvertently find a sibling link element, you will need to isolate the child DOM element container link along with the associated """<<setIcon>>""" macro that follows it by enclosing the both elements within a surrounding SPAN 'class wrapper' element, like this:
{{{
{{span{<<tiddler SomeTranscludedLink>><<setIcon ...>>}}}
{{span{<html><a href="...">...</a></html><<setIcon ...>>}}}
}}}
This same technique should also be applied for any other macros that may generate output that is nested within their own containing DOM elements.  Similarly, in addition to """<<tiddler>>""" and ~HTML-based content, link elements that are defined directly within a ViewTemplate or EditTemplate definition using """<span macro='...'></span>""" are also rendered within their own DOM element containers.  In order to ensure that the associated """<span macro='setIcon ...'></span>""" macro will locate the correct template-defined link element, it should be inserted //within// the span that invokes the link-generating macro, like this:
{{{
<span macro='...'><span macro='setIcon ...'></span></span>
}}}
or, your can surround the paired link+icon sequence in an enclosing span, like this:
{{{
<span><span macro='...'></span><span macro='setIcon ...'></span></span>
}}}
so that the span containing the link element is a //cousin// (i.e., a //child// of the //parent// container) of the span that invokes the setIcon macro.

''In general, whether the link element is rendered in tiddler content or directly from a template, if you are uncertain when an 'isolation span' is needed, you can always choose to surround every link+icon sequence within a enclosing span, regardless of the type of link content being rendered.''
<<<
!!!!!Examples
<<<
''~TiddlyLink:'' [[About]]<<setIcon information.png>>
{{{
[[About]]<<setIcon information.png>>
}}}
''toolbar command:'' <<toolbar jump>><<setIcon page_go.png>>
{{{
in tiddler content:
	<<toolbar jump>><<setIcon page_go.png>>
in template definitions:
	<span class='toolbar' macro='toolbar jump'><span macro='setIcon page_go.png'></span></span>
}}}
''slider macro:''<<slider "" PluginManager Plugins "view installed plugin status">><<setIcon cog.png>>
{{{
in tiddler content:
	<<slider "" PluginManager Plugins "view installed plugin status">><<setIcon cog.png>>
in template definitions:
	<span macro='slider ...'><span macro='setIcon page_go.png'></span></span>
}}}
''nested (inline) slider:'' +++[settings]<<list filter [tag[settings]]>>===<<setIcon wrench.png>>
{{{
+++[settings]
	<<list filter [tag[settings]]>>
===<<setIcon wrench.png>>
}}}
''onclick script:'' <script label="print document">window.print();</script><<setIcon printer.png>>
{{{
<script label="print document">
	window.print();
</script><<setIcon printer.png>>
}}}
''tiddler macro:'' {{span{<<tiddler SiteUrl>><<setIcon exclamation.png>>}}}
{{{
in tiddler content:
	{{span{<<tiddler SiteUrl>><<setIcon exclamation.png>>}}}
in template definitions:
	<span macro='tiddler ...'><span macro='setIcon exclamation.png'></span></span>
}}}
''HTML link:'' {{span{<html><a href="http://www.TiddlyWiki.com">TiddlyWiki.com</a></html><<setIcon server_go.png>>}}}
{{{
in tiddler content:
	{{span{<html><a href="http://www.TiddlyWiki.com">TiddlyWiki.com</a></html><<setIcon server_go.png>>}}}
in template definitions:
	<span><a href="http://www.TiddlyWiki.com">TiddlyWiki.com</a><span macro='setIcon server_go.png'></span></span>
}}}
''macro link:'' {{span{<<saveChanges>><<setIcon disk.png>>}}}
{{{
in tiddler content:
	{{span{<<saveChanges>><<setIcon disk.png>>}}}
in template definitions:
	<span macro='saveChanges'><span macro='setIcon disk.png'></span></span>
}}}
<<<
!!!!!Configuration
<<<
<<option chkIconsShowImage>> show icons on links //(unchecked=text-only)//
^^{{{<<option chkIconsShowImage>>}}}^^
<<option chkIconsShowText>> include link text with images //(unchecked=icons-only, ignored if no icons displayed)//
^^{{{<<option chkIconsShowText>>}}}^^
default image style: {{stretch{<<option txtIconsCSS>>}}}
^^{{{<<option txtIconsCSS>>}}}^^
<<<
!!!!!Revisions
<<<
2008.05.11 [1.8.0] added optional 'notext' value for iconpos to force text to be hidden for specific links
2008.05.11 [1.7.0] support use within template definitions by looking for nearest link using: siblings, children, parents, or cousins.  Also, major documentation re-write with improved examples
2008.05.11 [1.6.0] added optional iconpos param to control icon placement ("left" or "right", default="left")
2008.05.10 [1.5.0] converted to plugin/macro and reduced code size by moving documentation into SetIconPluginInfo
2008.05.10 [1.4.0] handle links contained in {{{<<tiddler>>}}} and {{{<html>...</html}}}
2008.05.10 [1.3.0] added support for setting styles on images
2008.05.09 [1.2.0] handle links created by TiddlyLinks, sliders, and nested sliders syntax
2008.05.09 [1.1.0] added support for external URLs and options for displaying text with images
2008.05.09 [1.0.0] initial release (as inline script)
<<<
<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal "DD MMM YYYY" "journal">><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
<<slider chkSliderCalendarPanel CalendarPanel "calendar »" "Month calendar">>
<<slider chkSliderMicroCalc MicroCalc "calc »" "Calculator">>
<<slider chkSliderDicas Dicas "dicas »" "Dicas">>
name <<option txtUserName>>
<<slider chkSliderTabsPanel TabsPanel "tabs »" "Tabs with tiddler lists">>
Dicas para utilizar o AsciiMathML.
Colocar as equações entre sinais de aspas para trás{{{`}}}.
Assim são obtidos:
| x^2 | `x^2` |
| x_12 | `x_12` |
| sum_(i=1)^(oo) (1)/(i!) | `sum_(i=1)^(oo) (1)/(i!)` |
| [(a,b),(c,...)] | `[(a,b),(c,...)]` |

Dicas para escrever no Wiki.
Com {{{//}}} //itálico//.
Com {{{''}}} ''negrito''.
Com {{{[[}}} [[Hiperlinks]]
Com {{{----}}} traço horizontal
----
Com {{{!, !!, !!!}}}
!Titulos e
!!Subtitulos e
!!!Subsubtitulos
Com {{{*}}} itens
* um
* dois
* três
** tres ponto um
Com {{{#}}} itens numerados
# a
# b
# c
Dicas para utilizar o AsciiSVG.

Aula 01 - Introdução
CT-200 Fundamentos de Linguagens Formais e Automata
!Subconjuntos

A={1,3,7}

São subconjuntos de A: $emptyset$, {1}, {3}, {7}, {1,3}, {1,7}, {3,7}, {1,3,7} (que é o próprio A)

${1,3} sub A$
> está contido em A (é subconjunto de A)

${1,7} subne A$
> é subconjunto próprio de A, isto é, é subconjunto de A, mas é diferente de A

$ A subne A$ é falso.


!Inclusão e Comparabilidade

$emptyset sub A, AA "conjunto " A$

$A sub B => B sup A$
> A está contido em B, então B contém A

Se $A sub B$ ou $B sub A$, então A e B são comparáveis.

Se $A nsub B$ e $B nsub A$, então A e B não são comparáveis.

! Diagramas de Venn-Euler

[img[tooltip|euler-venn.jpg]]

!Operações sobre conjuntos

Considerar os conjuntos e elementos abaixo:
A={a,b,c,d} B={c,d,e,f}

[img[tooltip|operacoes.jpg]]

!Complemento

Complemento de A é $bar A = {x| x notin A}$

Complemento relativo de A com relação a B
$bar A^B=B- A$


<<tiddler NextTiddler with: [[Expressões lógicas]]>>
<<allTags excludeLists>>
<<tabs txtMoreTab "Tags" "All Tags" TabAllTags "Miss" "Missing tiddlers" TabMoreMissing "Orph" "Orphaned tiddlers" TabMoreOrphans "Shad" "Shadowed tiddlers" TabMoreShadowed>>
<<allTags excludeLists [a-z]>>
/***
|''Name:''|TableSortingPlugin|
|''Description:''|Dynamically sort tables by clicking on column headers|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#TableSortingPlugin|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.02|
|''Date:''|25-01-2008|
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.3|
!!Usage:
* Make sure your table has a header row
** {{{|Name|Phone Number|Address|h}}}<br> Note the /h/ that denote a header row 
* Give the table a class of 'sortable'
** {{{
|sortable|k
|Name|Phone Number|Address|h
}}}<br>Note the /k/ that denotes a class name being assigned to the table.
* To disallow sorting by a column, place {{{<<nosort>>}}} in it's header
* To automatically sort a table by a column, place {{{<<autosort>>}}} in the header for that column
** Or to sort automatically but in reverse order, use {{{<<autosort reverse>>}}}

!!Example:
|sortable|k
|Name |Salary |Extension |Performance |File Size |Start date |h
|ZBloggs, Fred |$12000.00 |1353 |+1.2 |74.2Kb |Aug 19, 2003 21:34:00 |
|ABloggs, Fred |$12000.00 |1353 |1.2 |3350b |09/18/2003 |
|CBloggs, Fred |$12000 |1353 |1.200 |55.2Kb |August 18, 2003 |
|DBloggs, Fred |$12000.00 |1353 |1.2 |2100b |07/18/2003 |
|Bloggs, Fred |$12000.00 |1353 |01.20 |6.156Mb |08/17/2003 05:43 |
|Turvey, Kevin |$191200.00 |2342 |-33 |1b |02/05/1979 |
|Mbogo, Arnold |$32010.12 |2755 |-21.673 |1.2Gb |09/08/1998 |
|Shakespeare, Bill |£122000.00|3211 |6 |33.22Gb |12/11/1961 |
|Shakespeare, Hamlet |£9000 |9005 |-8 |3Gb |01/01/2002 |
|Fitz, Marvin |€3300.30 |5554 |+5 |4Kb |05/22/1995 |

***/
// /%
//!BEGIN-PLUGIN-CODE
config.tableSorting = {
	
	darrow: "\u2193",
	
	uarrow: "\u2191",
	
	getText : function (o) {
		var p = o.cells[SORT_INDEX];
		return p.innerText || p.textContent || '';
	},
	
	sortTable : function (o,rev) {
		SORT_INDEX = o.getAttribute("index");
		var c = config.tableSorting;
		var T = findRelated(o.parentNode,"TABLE");
		if(T.tBodies[0].rows.length<=1) 
			return;
		var itm = "";
		var i = 0;
		while (itm == "" && i < T.tBodies[0].rows.length) {
			itm = c.getText(T.tBodies[0].rows[i]).trim();
			i++;
		}
		if (itm == "") 
			return; 	
		var r = [];
		var S = o.getElementsByTagName("span")[0];		
		c.fn = c.sortAlpha; 
		if(!isNaN(Date.parse(itm)))
			c.fn = c.sortDate; 
		else if(itm.match(/^[$|£|€|\+|\-]{0,1}\d*\.{0,1}\d+$/)) 
			c.fn = c.sortNumber; 
		else if(itm.match(/^\d*\.{0,1}\d+[K|M|G]{0,1}b$/)) 
			c.fn = c.sortFile; 
		for(i=0; i<T.tBodies[0].rows.length; i++) {
			 r[i]=T.tBodies[0].rows[i]; 
		} 
		r.sort(c.reSort);
		if(S.firstChild.nodeValue==c.darrow || rev) {
			r.reverse();
			S.firstChild.nodeValue=c.uarrow;
		} 
		else 
			S.firstChild.nodeValue=c.darrow;
		var thead = T.getElementsByTagName('thead')[0]; 
		var headers = thead.rows[thead.rows.length-1].cells;
		for(var k=0; k<headers.length; k++) {
			if(!hasClass(headers[k],"nosort"))
				addClass(headers[k].getElementsByTagName("span")[0],"hidden");
		}
		removeClass(S,"hidden");
		for(i=0; i<r.length; i++) { 
			T.tBodies[0].appendChild(r[i]);
			c.stripe(r[i],i);
			for(var j=0; j<r[i].cells.length;j++){
				removeClass(r[i].cells[j],"sortedCol");
			}
			addClass(r[i].cells[SORT_INDEX],"sortedCol");
		}
	},
	
	stripe : function (e,i){
		var cl = ["oddRow","evenRow"];
		i&1? cl.reverse() : cl;
		removeClass(e,cl[1]);
		addClass(e,cl[0]);
	},
	
	sortNumber : function(v) {
		var x = parseFloat(this.getText(v).replace(/[^0-9.-]/g,''));
		return isNaN(x)? 0: x;
	},
	
	sortDate : function(v) {
		return Date.parse(this.getText(v));
	},

	sortAlpha : function(v) {
		return this.getText(v).toLowerCase();
	},
	
	sortFile : function(v) { 		
		var j, q = config.messages.sizeTemplates, s = this.getText(v);
		for (var i=0; i<q.length; i++) {
			if ((j = s.toLowerCase().indexOf(q[i].template.replace("%0\u00a0","").toLowerCase())) != -1)
				return q[i].unit * s.substr(0,j);
		}
		return parseFloat(s);
	},
	
	reSort : function(a,b){
		var c = config.tableSorting;
		var aa = c.fn(a);
		var bb = c.fn(b);
		return ((aa==bb)? 0 : ((aa<bb)? -1:1));
	}
};

Story.prototype.tSort_refreshTiddler = Story.prototype.refreshTiddler;
Story.prototype.refreshTiddler = function(title,template,force,customFields,defaultText){
	var elem = this.tSort_refreshTiddler.apply(this,arguments);
	if(elem){
		var tables = elem.getElementsByTagName("TABLE");
		var c = config.tableSorting;
		for(var i=0; i<tables.length; i++){
			if(hasClass(tables[i],"sortable")){
				var x = null, rev, table = tables[i], thead = table.getElementsByTagName('thead')[0], headers = thead.rows[thead.rows.length-1].cells;
				for (var j=0; j<headers.length; j++){
					var h = headers[j];
					if (hasClass(h,"nosort"))
						continue;
					h.setAttribute("index",j);
					h.onclick = function(){c.sortTable(this); return false;};
					h.ondblclick = stopEvent;
					if(h.getElementsByTagName("span").length == 0)
						createTiddlyElement(h,"span",null,"hidden",c.uarrow); 
					if(!x && hasClass(h,"autosort")) {
						x = j;
						rev = hasClass(h,"reverse");
					}
				}
				if(x)
					c.sortTable(headers[x],rev);		
			}
		}
	}
	return elem; 
};

setStylesheet("table.sortable span.hidden {visibility:hidden;}\n"+
	"table.sortable thead {cursor:pointer;}\n"+
	"table.sortable .nosort {cursor:default;}\n"+
	"table.sortable td.sortedCol {background:#ffc;}","TableSortingPluginStyles");

function stopEvent(e){
	var ev = e? e : window.event;
	ev.cancelBubble = true;
	if (ev.stopPropagation) ev.stopPropagation();
	return false;	
}	

config.macros.nosort={
	handler : function(place){
		addClass(place,"nosort");
	}	
};

config.macros.autosort={
	handler : function(place,m,p,w,pS){
		addClass(place,"autosort"+" "+pS);		
	}	
};
//!END-PLUGIN-CODE
// %/
<<tabs txtMainTab "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "Tags" "All tags" TabTags "More" "More lists" TabMore>>
/***
|Name:|TagglyTaggingPlugin|
|Description:|tagglyTagging macro is a replacement for the builtin tagging macro in your ViewTemplate|
|Version:|3.1 ($Rev: 5655 $)|
|Date:|$Date: 2008-06-18 23:50:30 +1000 (Wed, 18 Jun 2008) $|
|Source:|http://mptw.tiddlyspot.com/#TagglyTaggingPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!Notes
See http://mptw.tiddlyspot.com/#TagglyTagging
***/
//{{{
config.taggly = {

	// for translations
	lingo: {
		labels: {
			asc:        "\u2191", // down arrow
			desc:       "\u2193", // up arrow
			title:      "title",
			modified:   "modified",
			created:    "created",
			show:       "+",
			hide:       "-",
			normal:     "normal",
			group:      "group",
			commas:     "commas",
			sitemap:    "sitemap",
			numCols:    "cols\u00b1", // plus minus sign
			label:      "Tagged as '%0':",
			excerpts:   "excerpts",
			descr:      "descr",
			slices:     "slices",
			contents:   "contents",
			sliders:    "sliders",
			noexcerpts: "title only"
		},

		tooltips: {
			title:      "Click to sort by title",
			modified:   "Click to sort by modified date",
			created:    "Click to sort by created date",
			show:       "Click to show tagging list",
			hide:       "Click to hide tagging list",
			normal:     "Click to show a normal ungrouped list",
			group:      "Click to show list grouped by tag",
			sitemap:    "Click to show a sitemap style list",
			commas:     "Click to show a comma separated list",
			numCols:    "Click to change number of columns",
			excerpts:   "Click to show excerpts",
			descr:      "Click to show the description slice",
			slices:     "Click to show all slices",
			contents:   "Click to show entire tiddler contents",
			sliders:    "Click to show tiddler contents in sliders",
			noexcerpts: "Click to show entire title only"
		},

		tooDeepMessage: "* //sitemap too deep...//"
	},

	config: {
		showTaggingCounts: true,
		listOpts: {
			// the first one will be the default
			sortBy:     ["title","modified","created"],
			sortOrder:  ["asc","desc"],
			hideState:  ["show","hide"],
			listMode:   ["normal","group","sitemap","commas"],
			numCols:    ["1","2","3","4","5","6"],
			excerpts:   ["noexcerpts","excerpts","descr","slices","contents","sliders"]
		},
		valuePrefix: "taggly.",
		excludeTags: ["excludeLists","excludeTagging"],
		excerptSize: 50,
		excerptMarker: "/%"+"%/",
		siteMapDepthLimit: 25
	},

	getTagglyOpt: function(title,opt) {
		var val = store.getValue(title,this.config.valuePrefix+opt);
		return val ? val : this.config.listOpts[opt][0];
	},

	setTagglyOpt: function(title,opt,value) {
		if (!store.tiddlerExists(title))
			// create it silently
			store.saveTiddler(title,title,config.views.editor.defaultText.format([title]),config.options.txtUserName,new Date(),"");
		// if value is default then remove it to save space
		return store.setValue(title,
			this.config.valuePrefix+opt,
			value == this.config.listOpts[opt][0] ? null : value);
	},

	getNextValue: function(title,opt) {
		var current = this.getTagglyOpt(title,opt);
		var pos = this.config.listOpts[opt].indexOf(current);
		// a little usability enhancement. actually it doesn't work right for grouped or sitemap
		var limit = (opt == "numCols" ? store.getTaggedTiddlers(title).length : this.config.listOpts[opt].length);
		var newPos = (pos + 1) % limit;
		return this.config.listOpts[opt][newPos];
	},

	toggleTagglyOpt: function(title,opt) {
		var newVal = this.getNextValue(title,opt);
		this.setTagglyOpt(title,opt,newVal);
	}, 

	createListControl: function(place,title,type) {
		var lingo = config.taggly.lingo;
		var label;
		var tooltip;
		var onclick;

		if ((type == "title" || type == "modified" || type == "created")) {
			// "special" controls. a little tricky. derived from sortOrder and sortBy
			label = lingo.labels[type];
			tooltip = lingo.tooltips[type];

			if (this.getTagglyOpt(title,"sortBy") == type) {
				label += lingo.labels[this.getTagglyOpt(title,"sortOrder")];
				onclick = function() {
					config.taggly.toggleTagglyOpt(title,"sortOrder");
					return false;
				}
			}
			else {
				onclick = function() {
					config.taggly.setTagglyOpt(title,"sortBy",type);
					config.taggly.setTagglyOpt(title,"sortOrder",config.taggly.config.listOpts.sortOrder[0]);
					return false;
				}
			}
		}
		else {
			// "regular" controls, nice and simple
			label = lingo.labels[type == "numCols" ? type : this.getNextValue(title,type)];
			tooltip = lingo.tooltips[type == "numCols" ? type : this.getNextValue(title,type)];
			onclick = function() {
				config.taggly.toggleTagglyOpt(title,type);
				return false;
			}
		}

		// hide button because commas don't have columns
		if (!(this.getTagglyOpt(title,"listMode") == "commas" && type == "numCols"))
			createTiddlyButton(place,label,tooltip,onclick,type == "hideState" ? "hidebutton" : "button");
	},

	makeColumns: function(orig,numCols) {
		var listSize = orig.length;
		var colSize = listSize/numCols;
		var remainder = listSize % numCols;

		var upperColsize = colSize;
		var lowerColsize = colSize;

		if (colSize != Math.floor(colSize)) {
			// it's not an exact fit so..
			upperColsize = Math.floor(colSize) + 1;
			lowerColsize = Math.floor(colSize);
		}

		var output = [];
		var c = 0;
		for (var j=0;j<numCols;j++) {
			var singleCol = [];
			var thisSize = j < remainder ? upperColsize : lowerColsize;
			for (var i=0;i<thisSize;i++) 
				singleCol.push(orig[c++]);
			output.push(singleCol);
		}

		return output;
	},

	drawTable: function(place,columns,theClass) {
		var newTable = createTiddlyElement(place,"table",null,theClass);
		var newTbody = createTiddlyElement(newTable,"tbody");
		var newTr = createTiddlyElement(newTbody,"tr");
		for (var j=0;j<columns.length;j++) {
			var colOutput = "";
			for (var i=0;i<columns[j].length;i++) 
				colOutput += columns[j][i];
			var newTd = createTiddlyElement(newTr,"td",null,"tagglyTagging"); // todo should not need this class
			wikify(colOutput,newTd);
		}
		return newTable;
	},

	createTagglyList: function(place,title) {
		switch(this.getTagglyOpt(title,"listMode")) {
			case "group":  return this.createTagglyListGrouped(place,title); break;
			case "normal": return this.createTagglyListNormal(place,title,false); break;
			case "commas": return this.createTagglyListNormal(place,title,true); break;
			case "sitemap":return this.createTagglyListSiteMap(place,title); break;
		}
	},

	getTaggingCount: function(title) {
		// thanks to Doug Edmunds
		if (this.config.showTaggingCounts) {
			var tagCount = store.getTaggedTiddlers(title).length;
			if (tagCount > 0)
				return " ("+tagCount+")";
		}
		return "";
	},

	getExcerpt: function(inTiddlerTitle,title,indent) {
		if (!indent)
			indent = 1;

		var displayMode = this.getTagglyOpt(inTiddlerTitle,"excerpts");
		var t = store.getTiddler(title);

		if (t && displayMode == "excerpts") {
			var text = t.text.replace(/\n/," ");
			var marker = text.indexOf(this.config.excerptMarker);
			if (marker != -1) {
				return " {{excerpt{<nowiki>" + text.substr(0,marker) + "</nowiki>}}}";
			}
			else if (text.length < this.config.excerptSize) {
				return " {{excerpt{<nowiki>" + t.text + "</nowiki>}}}";
			}
			else {
				return " {{excerpt{<nowiki>" + t.text.substr(0,this.config.excerptSize) + "..." + "</nowiki>}}}";
			}
		}
		else if (t && displayMode == "contents") {
			return "\n{{contents indent"+indent+"{\n" + t.text + "\n}}}";
		}
		else if (t && displayMode == "sliders") {
			return "<slider slide>\n{{contents{\n" + t.text + "\n}}}\n</slider>";
		}
		else if (t && displayMode == "descr") {
			var descr = store.getTiddlerSlice(title,'Description');
			return descr ? " {{excerpt{" + descr  + "}}}" : "";
		}
		else if (t && displayMode == "slices") {
			var result = "";
			var slices = store.calcAllSlices(title);
			for (var s in slices)
				result += "|%0|<nowiki>%1</nowiki>|\n".format([s,slices[s]]);
			return result ? "\n{{excerpt excerptIndent{\n" + result  + "}}}" : "";
		}
		return "";
	},

	notHidden: function(t,inTiddler) {
		if (typeof t == "string") 
			t = store.getTiddler(t);
		return (!t || !t.tags.containsAny(this.config.excludeTags) ||
				(inTiddler && this.config.excludeTags.contains(inTiddler)));
	},

	// this is for normal and commas mode
	createTagglyListNormal: function(place,title,useCommas) {

		var list = store.getTaggedTiddlers(title,this.getTagglyOpt(title,"sortBy"));

		if (this.getTagglyOpt(title,"sortOrder") == "desc")
			list = list.reverse();

		var output = [];
		var first = true;
		for (var i=0;i<list.length;i++) {
			if (this.notHidden(list[i],title)) {
				var countString = this.getTaggingCount(list[i].title);
				var excerpt = this.getExcerpt(title,list[i].title);
				if (useCommas)
					output.push((first ? "" : ", ") + "[[" + list[i].title + "]]" + countString + excerpt);
				else
					output.push("*[[" + list[i].title + "]]" + countString + excerpt + "\n");

				first = false;
			}
		}

		return this.drawTable(place,
			this.makeColumns(output,useCommas ? 1 : parseInt(this.getTagglyOpt(title,"numCols"))),
			useCommas ? "commas" : "normal");
	},

	// this is for the "grouped" mode
	createTagglyListGrouped: function(place,title) {
		var sortBy = this.getTagglyOpt(title,"sortBy");
		var sortOrder = this.getTagglyOpt(title,"sortOrder");

		var list = store.getTaggedTiddlers(title,sortBy);

		if (sortOrder == "desc")
			list = list.reverse();

		var leftOvers = []
		for (var i=0;i<list.length;i++)
			leftOvers.push(list[i].title);

		var allTagsHolder = {};
		for (var i=0;i<list.length;i++) {
			for (var j=0;j<list[i].tags.length;j++) {

				if (list[i].tags[j] != title) { // not this tiddler

					if (this.notHidden(list[i].tags[j],title)) {

						if (!allTagsHolder[list[i].tags[j]])
							allTagsHolder[list[i].tags[j]] = "";

						if (this.notHidden(list[i],title)) {
							allTagsHolder[list[i].tags[j]] += "**[["+list[i].title+"]]"
										+ this.getTaggingCount(list[i].title) + this.getExcerpt(title,list[i].title) + "\n";

							leftOvers.setItem(list[i].title,-1); // remove from leftovers. at the end it will contain the leftovers

						}
					}
				}
			}
		}

		var allTags = [];
		for (var t in allTagsHolder)
			allTags.push(t);

		var sortHelper = function(a,b) {
			if (a == b) return 0;
			if (a < b) return -1;
			return 1;
		};

		allTags.sort(function(a,b) {
			var tidA = store.getTiddler(a);
			var tidB = store.getTiddler(b);
			if (sortBy == "title") return sortHelper(a,b);
			else if (!tidA && !tidB) return 0;
			else if (!tidA) return -1;
			else if (!tidB) return +1;
			else return sortHelper(tidA[sortBy],tidB[sortBy]);
		});

		var leftOverOutput = "";
		for (var i=0;i<leftOvers.length;i++)
			if (this.notHidden(leftOvers[i],title))
				leftOverOutput += "*[["+leftOvers[i]+"]]" + this.getTaggingCount(leftOvers[i]) + this.getExcerpt(title,leftOvers[i]) + "\n";

		var output = [];

		if (sortOrder == "desc")
			allTags.reverse();
		else if (leftOverOutput != "")
			// leftovers first...
			output.push(leftOverOutput);

		for (var i=0;i<allTags.length;i++)
			if (allTagsHolder[allTags[i]] != "")
				output.push("*[["+allTags[i]+"]]" + this.getTaggingCount(allTags[i]) + this.getExcerpt(title,allTags[i]) + "\n" + allTagsHolder[allTags[i]]);

		if (sortOrder == "desc" && leftOverOutput != "")
			// leftovers last...
			output.push(leftOverOutput);

		return this.drawTable(place,
				this.makeColumns(output,parseInt(this.getTagglyOpt(title,"numCols"))),
				"grouped");

	},

	// used to build site map
	treeTraverse: function(title,depth,sortBy,sortOrder) {

		var list = store.getTaggedTiddlers(title,sortBy);
		if (sortOrder == "desc")
			list.reverse();

		var indent = "";
		for (var j=0;j<depth;j++)
			indent += "*"

		var childOutput = "";

		if (depth > this.config.siteMapDepthLimit)
			childOutput += indent + this.lingo.tooDeepMessage;
		else
			for (var i=0;i<list.length;i++)
				if (list[i].title != title)
					if (this.notHidden(list[i].title,this.config.inTiddler))
						childOutput += this.treeTraverse(list[i].title,depth+1,sortBy,sortOrder);

		if (depth == 0)
			return childOutput;
		else
			return indent + "[["+title+"]]" + this.getTaggingCount(title) + this.getExcerpt(this.config.inTiddler,title,depth) + "\n" + childOutput;
	},

	// this if for the site map mode
	createTagglyListSiteMap: function(place,title) {
		this.config.inTiddler = title; // nasty. should pass it in to traverse probably
		var output = this.treeTraverse(title,0,this.getTagglyOpt(title,"sortBy"),this.getTagglyOpt(title,"sortOrder"));
		return this.drawTable(place,
				this.makeColumns(output.split(/(?=^\*\[)/m),parseInt(this.getTagglyOpt(title,"numCols"))), // regexp magic
				"sitemap"
				);
	},

	macros: {
		tagglyTagging: {
			handler: function (place,macroName,params,wikifier,paramString,tiddler) {
				var refreshContainer = createTiddlyElement(place,"div");
				// do some refresh magic to make it keep the list fresh - thanks Saq
				refreshContainer.setAttribute("refresh","macro");
				refreshContainer.setAttribute("macroName",macroName);
				if (params[0])
					refreshContainer.setAttribute("title",params[0]);
				else {
        			refreshContainer.setAttribute("title",tiddler.title);
				}
				this.refresh(refreshContainer);
			},

			refresh: function(place) {
				var title = place.getAttribute("title");
				removeChildren(place);
				addClass(place,"tagglyTagging");
				if (store.getTaggedTiddlers(title).length > 0) {
					var lingo = config.taggly.lingo;
					config.taggly.createListControl(place,title,"hideState");
					if (config.taggly.getTagglyOpt(title,"hideState") == "show") {
						createTiddlyElement(place,"span",null,"tagglyLabel",lingo.labels.label.format([title]));
						config.taggly.createListControl(place,title,"title");
						config.taggly.createListControl(place,title,"modified");
						config.taggly.createListControl(place,title,"created");
						config.taggly.createListControl(place,title,"listMode");
						config.taggly.createListControl(place,title,"excerpts");
						config.taggly.createListControl(place,title,"numCols");
						config.taggly.createTagglyList(place,title);
					}
				}
			}
		}
	},

	// todo fix these up a bit
	styles: [
"/*{{{*/",
"/* created by TagglyTaggingPlugin */",
".tagglyTagging { padding-top:0.5em; }",
".tagglyTagging li.listTitle { display:none; }",
".tagglyTagging ul {",
"	margin-top:0px; padding-top:0.5em; padding-left:2em;",
"	margin-bottom:0px; padding-bottom:0px;",
"}",
".tagglyTagging { vertical-align: top; margin:0px; padding:0px; }",
".tagglyTagging table { margin:0px; padding:0px; }",
".tagglyTagging .button { visibility:hidden; margin-left:3px; margin-right:3px; }",
".tagglyTagging .button, .tagglyTagging .hidebutton {",
"	color:[[ColorPalette::TertiaryLight]]; font-size:90%;",
"	border:0px; padding-left:0.3em;padding-right:0.3em;",
"}",
".tagglyTagging .button:hover, .hidebutton:hover, ",
".tagglyTagging .button:active, .hidebutton:active  {",
"	border:0px; background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]];",
"}",
".selected .tagglyTagging .button { visibility:visible; }",
".tagglyTagging .hidebutton { color:[[ColorPalette::Background]]; }",
".selected .tagglyTagging .hidebutton { color:[[ColorPalette::TertiaryLight]] }",
".tagglyLabel { color:[[ColorPalette::TertiaryMid]]; font-size:90%; }",
".tagglyTagging ul {padding-top:0px; padding-bottom:0.5em; margin-left:1em; }",
".tagglyTagging ul ul {list-style-type:disc; margin-left:-1em;}",
".tagglyTagging ul ul li {margin-left:0.5em; }",
".editLabel { font-size:90%; padding-top:0.5em; }",
".tagglyTagging .commas { padding-left:1.8em; }",
"/* not technically tagglytagging but will put them here anyway */",
".tagglyTagged li.listTitle { display:none; }",
".tagglyTagged li { display: inline; font-size:90%; }",
".tagglyTagged ul { margin:0px; padding:0px; }",
".excerpt { color:[[ColorPalette::TertiaryDark]]; }",
".excerptIndent { margin-left:4em; }",
"div.tagglyTagging table,",
"div.tagglyTagging table tr,",
"td.tagglyTagging",
" {border-style:none!important; }",
".tagglyTagging .contents { border-bottom:2px solid [[ColorPalette::TertiaryPale]]; padding:0 1em 1em 0.5em;",
"  margin-bottom:0.5em; }",
".tagglyTagging .indent1  { margin-left:3em;  }",
".tagglyTagging .indent2  { margin-left:4em;  }",
".tagglyTagging .indent3  { margin-left:5em;  }",
".tagglyTagging .indent4  { margin-left:6em;  }",
".tagglyTagging .indent5  { margin-left:7em;  }",
".tagglyTagging .indent6  { margin-left:8em;  }",
".tagglyTagging .indent7  { margin-left:9em;  }",
".tagglyTagging .indent8  { margin-left:10em; }",
".tagglyTagging .indent9  { margin-left:11em; }",
".tagglyTagging .indent10 { margin-left:12em; }",
"/*}}}*/",
		""].join("\n"),

	init: function() {
		merge(config.macros,this.macros);
		config.shadowTiddlers["TagglyTaggingStyles"] = this.styles;
		store.addNotification("TagglyTaggingStyles",refreshStyles);
	}
};

config.taggly.init();

//}}}

/***
InlineSlidersPlugin
By Saq Imtiaz
http://tw.lewcid.org/sandbox/#InlineSlidersPlugin

// syntax adjusted to not clash with NestedSlidersPlugin
// added + syntax to start open instead of closed

***/
//{{{
config.formatters.unshift( {
	name: "inlinesliders",
	// match: "\\+\\+\\+\\+|\\<slider",
	match: "\\<slider",
	// lookaheadRegExp: /(?:\+\+\+\+|<slider) (.*?)(?:>?)\n((?:.|\n)*?)\n(?:====|<\/slider>)/mg,
	lookaheadRegExp: /(?:<slider)(\+?) (.*?)(?:>)\n((?:.|\n)*?)\n(?:<\/slider>)/mg,
	handler: function(w) {
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart ) {
			var btn = createTiddlyButton(w.output,lookaheadMatch[2] + " "+"\u00BB",lookaheadMatch[2],this.onClickSlider,"button sliderButton");
			var panel = createTiddlyElement(w.output,"div",null,"sliderPanel");
			panel.style.display = (lookaheadMatch[1] == '+' ? "block" : "none");
			wikify(lookaheadMatch[3],panel);
			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
		}
   },
   onClickSlider : function(e) {
		if(!e) var e = window.event;
		var n = this.nextSibling;
		n.style.display = (n.style.display=="none") ? "block" : "none";
		return false;
	}
});

//}}}

Há problemas simples e problemas difíceis:

Ordenamento: simples.

Alocação de recursos: complexo.

O QUE TORNA ALGUNS PROBLEMAS FÁCEIS E OUTROS DIFÍCEIS? COMO CLASSIFICAR PROBLEMAS?

<<tiddler NextTiddler with: [[Kurt Gödel]]>>
Há problemas que podem ser resolvidos por computadores, e outros que não podem.
Exemplo: Teorema de Gödel

O QUE TORNA ALGUNS PROBLEMAS COMPUTÁVEIS E OUTROS NÃO COMPUTÁVEIS?
QUAIS AS CONSEQUÊNCIAS DISSO PARA O PROJETO DE COMPUTADORES?


Definição de problema como linguagens.
A solução de problemas é equivalente à interpretação de linguagens por autômatos.

<<tiddler NextTiddler with: [[Teoria da Complexidade]]>>
[img[tooltip|Teoria-da-computacao.jpg]]

[[Teoria de Autômatos e Linguagens Formais]]

[[Teoria da Computabilidade]]

[[Teoria da Complexidade]]

<<tiddler NextTiddler with: [[Teoria de Autômatos e Linguagens Formais]]>>
O QUE É UM COMPUTADOR?

Existem modelos gerais de computadores que não referenciam nenhuma implementação particular?
Como verificar o que um computador faz?

Exemplos de modelos computacionais:
* Autômato finito: processamento de texto, compiladores e projeto de hardware.
* Gramática livre de contexto: linguagens de programação e Inteligência Artificial.

<<tiddler NextTiddler with: [[Noção de Autômato]]>>
| source file:|{{{C:\Documents and Settings\User\Desktop\Teoria-da-computacao.jpg}}}|
| attached on:|1 March 2009 by Professor|
| description:|attached by FileDropPlugin|
| embedded:|[[Teoria-da-computacao.jpg|Teoria-da-computacao.jpg]] - {{{type=image/jpeg, size=19298 bytes, encoded=26134 bytes}}}|
| local file:|/%LOCAL_LINK%/[[C:\Documents and Settings\User\Desktop\Teoria-da-computacao.jpg|C:/Documents and Settings/User/Desktop/Teoria-da-computacao.jpg]]|
| remote link:|//none//|
image
<<<
usage: {{{[img[tooltip|Teoria-da-computacao.jpg]] or [img[tooltip|Teoria-da-computacao.jpg][link]]}}}
[img[tooltip|Teoria-da-computacao.jpg]]
<<<

/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/jpeg;base64,
/9j/4AAQSkZJRgABAQEAWABiAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkS
Ew8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJ
CQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy
MjIyMjIyMjIyMjIyMjL/wAARCAF0AoADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEA
AAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh
MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6
Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZ
mqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx
8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV
YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hp
anN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPE
xcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDw
/RNE1HxHrEGk6Tb/AGi+n3eXFvVN21Sx5YgDgE8muw/4Ul8Q/wDoXv8Aydt//jlH
wS/5K9oX/bx/6TyV9f0AfIH/AApL4h/9C9/5O2//AMco/wCFJfEP/oXv/J23/wDj
lfX9FAHyB/wpL4h/9C9/5O2//wAco/4Ul8Q/+he/8nbf/wCOV9f0UAfIH/CkviH/
ANC9/wCTtv8A/HKP+FJfEP8A6F7/AMnbf/45X1/RQB8gf8KS+If/AEL3/k7b/wDx
yj/hSXxD/wChe/8AJ23/APjlfX9FAHyB/wAKS+If/Qvf+Ttv/wDHKP8AhSXxD/6F
7/ydt/8A45X1/RQB8gf8KS+If/Qvf+Ttv/8AHKP+FJfEP/oXv/J23/8AjlfX9FAH
yB/wpL4h/wDQvf8Ak7b/APxyj/hSXxD/AOhe/wDJ23/+OV9f0UAfIH/CkviH/wBC
9/5O2/8A8co/4Ul8Q/8AoXv/ACdt/wD45X1/RQB8gf8ACkviH/0L3/k7b/8Axyj/
AIUl8Q/+he/8nbf/AOOV9f0UAfIH/CkviH/0L3/k7b//AByj/hSXxD/6F7/ydt//
AI5X1/RQB8gf8KS+If8A0L3/AJO2/wD8co/4Ul8Q/wDoXv8Aydt//jlfX9FAHyB/
wpL4h/8AQvf+Ttv/APHKP+FJfEP/AKF7/wAnbf8A+OV9f0UAfIH/AApL4h/9C9/5
O2//AMco/wCFJfEP/oXv/J23/wDjlfX9FAHyB/wpL4h/9C9/5O2//wAco/4Ul8Q/
+he/8nbf/wCOV9f0UAfIH/CkviH/ANC9/wCTtv8A/HKP+FJfEP8A6F7/AMnbf/45
X1/RQB8gf8KS+If/AEL3/k7b/wDxyj/hSXxD/wChe/8AJ23/APjlfX9FAHyB/wAK
S+If/Qvf+Ttv/wDHKP8AhSXxD/6F7/ydt/8A45X1/RQB8gf8KS+If/Qvf+Ttv/8A
HKP+FJfEP/oXv/J23/8AjlfX9FAHyB/wpL4h/wDQvf8Ak7b/APxyj/hSXxD/AOhe
/wDJ23/+OV9f0UAfIH/CkviH/wBC9/5O2/8A8co/4Ul8Q/8AoXv/ACdt/wD45X1/
RQB8gf8ACkviH/0L3/k7b/8Axyj/AIUl8Q/+he/8nbf/AOOV9f0UAfIH/CkviH/0
L3/k7b//AByj/hSXxD/6F7/ydt//AI5X1/RQB8gf8KS+If8A0L3/AJO2/wD8co/4
Ul8Q/wDoXv8Aydt//jlfX9FAHyB/wpL4h/8AQvf+Ttv/APHKP+FJfEP/AKF7/wAn
bf8A+OV9f0UAfIH/AApL4h/9C9/5O2//AMco/wCFJfEP/oXv/J23/wDjlfX9FAHy
B/wpL4h/9C9/5O2//wAco/4Ul8Q/+he/8nbf/wCOV9f0UAfIH/CkviH/ANC9/wCT
tv8A/HKP+FJfEP8A6F7/AMnbf/45X1/RQB8gf8KS+If/AEL3/k7b/wDxyj/hSXxD
/wChe/8AJ23/APjlfX9FAHyB/wAKS+If/Qvf+Ttv/wDHKP8AhSXxD/6F7/ydt/8A
45X1/RQB8gf8KS+If/Qvf+Ttv/8AHKP+FJfEP/oXv/J23/8AjlfX9FAHyB/wpL4h
/wDQvf8Ak7b/APxyj/hSXxD/AOhe/wDJ23/+OV9f0UAfIH/CkviH/wBC9/5O2/8A
8co/4Ul8Q/8AoXv/ACdt/wD45X1/RQB8gf8ACkviH/0L3/k7b/8Axyj/AIUl8Q/+
he/8nbf/AOOV9f0UAfIH/CkviH/0L3/k7b//AByj/hSXxD/6F7/ydt//AI5X1/RQ
B8gf8KS+If8A0L3/AJO2/wD8co/4Ul8Q/wDoXv8Aydt//jlfX9FAHyB/wpL4h/8A
Qvf+Ttv/APHKP+FJfEP/AKF7/wAnbf8A+OV9f0UAfIH/AApL4h/9C9/5O2//AMco
/wCFJfEP/oXv/J23/wDjlfX9FAHyB/wpL4h/9C9/5O2//wAco/4Ul8Q/+he/8nbf
/wCOV9f0UAfIH/CkviH/ANC9/wCTtv8A/HK4/W9E1Hw5rE+k6tb/AGe+g2+ZFvV9
u5Qw5UkHgg8Gvu+vkD42/wDJXtd/7d//AEnjoAPgl/yV7Qv+3j/0nkr6/r5A+CX/
ACV7Qv8At4/9J5K+v6ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK
KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK
KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK
KKACiiigAooooAKKKKACiiigAooooAK+QPjb/wAle13/ALd//SeOvr+vkD42/wDJ
Xtd/7d//AEnjoAPgl/yV7Qv+3j/0nkr6/r5A+CX/ACV7Qv8At4/9J5K+v6ACiiig
AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
AooooAK+QPjb/wAle13/ALd//SeOvr+vkD42/wDJXtd/7d//AEnjoAPgl/yV7Qv+
3j/0nkr6/r5A+CX/ACV7Qv8At4/9J5K+v6ACiiigAooooAKKKKACiiigAooooAKK
KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK
KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK
KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK+QPjb/wAle13/ALd/
/SeOvr+vkD42/wDJXtd/7d//AEnjoAPgl/yV7Qv+3j/0nkr6/r5A+CX/ACV7Qv8A
t4/9J5K+v6ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
AooooAKKKKACiiigAooooAK+QPjb/wAle13/ALd//SeOvr+vkD42/wDJXtd/7d//
AEnjoAPgl/yV7Qv+3j/0nkr6/r5A+CX/ACV7Qv8At4/9J5K+v6ACiiigAooooAKK
KKACiiigAooooAK4X4r6Rpt54H1C9utPtJ7qBEEU8sKs8YMi5CsRkfhXdVU1TTLP
WdOm0+/h861mADx7iucEEcgg9QKTQHG67rUfg+/0jw94e061sBfLNcO8Gly3CIEC
5xDBhizFhls4AHOcilh8Ya5qMfh2xh0+LTNW1QTtMb+3kKQrDwSIyUc7iVIBIwDz
nFdTq2gabrX2dr2GTzbZi0E0E8kEseRg7ZI2VgCOozg8Z6VXl8I6FLpljp4sfJt7
A7rX7NM8LwnBBKyIwYEgnPPOec0+moHI2PjvXNaufDlnZQ6faz6j9sjupJonmSN7
c4LIA65UkHgnuOeOYLLxHJpcXiEafb2Ntez+JZLVB5M85nby1YsIwxLOQDxujQYy
SMc9zbeF9FspdMltrBIm0yN4rTYzARq4AbjOGJxyTk5561XuPBegXMcySWLAzXv9
oM8dxKjrcYA8xXVgyHAx8pAo6/13T/JB0/rsyp4E8Sah4k0zUG1S0W3vLDUJbKQK
mwNsxztDuAecEB2GQcGuO8Ta3qfiC0S4YWcemWvim3sooQrecTHKoLs+7By2fl2j
AwcmvR9E8PaX4dgnh0q1NvHPL50oMjuXfAUsSxJyQoye55PJJqlc+B/Dt3qD3s1i
5le5S8KrcyrH564xJ5YYJv8AlGWxk85zk09OZPtb701/kw6Nd7/r/wAA5ex+IWr6
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
f8le0L/t4/8ASeSvr+gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
iigAooooAKKKKACiiigAooooAKKKKAM/VtC0rXYPJ1TT7a7UKyqZYwWQMMHa3VTw
OQQeB6V5/rPwP0O9cyaVe3OmsWB8th58YUDBABIbJODkse/HTHqFFXGpOPwslxT3
Pn68+B3iSH7Q1teadcom4xL5jpJIB0GCu0MfQtgHv3rj9Z8GeI/D6GTU9IuYYlUM
0ygSRqCcDLqSoOexOeR6ivrGit44ua31M3Rj0PjGivsS+02x1SBYNQsra7hVt4ju
IlkUNgjOCDzgn86xr7wB4T1GBYZ/D9iihtwNvF5DZwR96PBI56Zx+VarGLqiXQfR
nypRX0dqHwa8I3nl+RDd2OzOfs9wTvzjr5m7pjtjr3ql/wAKM8M/8/2r/wDf6P8A
+N1axVMn2Mj5+or3TUPgPpknl/2drV3b4z5n2iJZt3TGNuzHf1/DvS/4UH/1Mv8A
5If/AGyqWJp9xeyn2PGKK9n/AOFB/wDUy/8Akh/9srQsfgRo8cDDUNXvribdkNbq
kKhcDjBD85zzn8KTxNPuHspnhFFfQP8Awozwz/z/AGr/APf6P/43WnafCDwbbWqR
S6fNdOuczTXMgduc87Cq+3AHSk8VTH7GR810V9XWngXwrZWqW8Xh7TmRM4M1usr8
nPLPlj17mt2GGK3gjggjSKGNQiRooVVUDAAA6ACs3jF0RSoPqz5e0n4ceLNXn8uP
Rrm3UMqvJeL5CqCevzYLAY52gn25FdVafArXXukW81TTobc53vCXkcccYUqoPOO4
/pXvVFZSxU3toWqMTz/RPg74X0rZJdxzancLsbdcNiMMvUhFwNpP8LbuBj1z3VpZ
2thapbWdtDbW6Z2RQoERcnJwBwOSTU1FYSnKXxM0UUtgoooqRhRRRQAUUUUAFFFF
ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV8gfG3/kr
2u/9u/8A6Tx19f18gfG3/kr2u/8Abv8A+k8dAB8Ev+SvaF/28f8ApPJX1/XyB8Ev
+SvaF/28f+k8lfX9ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF
ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFcdrmp+J7LxVpWmWd/p
C2+pvMIzNp0jvCI03ckTgPnp0WtO68XaNpd6NO1DUFF3GI1uHjt5PKiZ+F3uAVi3
HoHYHBHXrQtQZvUVial4u0PSdQNje3pjnUI0hELskIc7UMjqpWME9NxFQ33i/TI7
jU9PtbktqVjEzyhrWZ4oT5ZdTIyqQFIHrzyBk8Um9LjSu7HQ0VysXjnSrTRNOudU
vFe4uLBL2U2FpPMix7QTJtCFkjznBcDp7GujW8tnsRercRm1MfmibcNmzGd2emMc
5qmrXv0EtSeiuKtviBaX/iy1tLWWMaPJpUt/JcXEEkLAKygMN+392VJO7GDjg8Gt
vSPFej65dNa2M832gQrcCOe1lgZomOA6iRV3LkdRkUrf19/+QPT+v67m1RRRQAUU
UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU
UUAFFFFABRRRQAUUUUAFfIHxt/5K9rv/AG7/APpPHX1/XyB8bf8Akr2u/wDbv/6T
x0AHwS/5K9oX/bx/6TyV9f18gfBL/kr2hf8Abx/6TyV9f0AFFFFABRRRQAUUUUAF
FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF
FFczdeJdSn1bUNP0DSIdQfTlUXT3F4bdfMZdyxoQj7m2kE52gZHPXAB01FZlxr2n
ada2s2sXdvpT3AGyK+uI0bd3XO4gkZ7E06/8QaLpUhj1HV9Ps3ChytxcpGQpOAcM
RwSCM+1AFPVtFub/AMUaBqcTxCDTmnMqsTubfHtG3jB565IrlNZ+HV5e6/rM8X2e
4sNYkikmW41G6hEO0BXBhiIWYEKCNzLgnHIFdtD4h0S4N2IdY0+T7Gpa62XKHyAM
5L4Pyjg9cdKIPEOiXKXT2+safKtom+4MdyjCFcZy+D8owDyaFo7gchrvgfVr248Q
WthNYjT/ABAkC3MtwzCW2KAIxRQpEmVAxllwe5q/b+ELy3ufGDiW3K6zDHFaks25
dsHl/Pxxzzxmt3UPEmi6XaSXV3qdrHHHbG7OJQWMPA3hRyRkgAjqSB3qvH4z8Ntp
VlqUuuadbW16m+Bri7jTdj7wGWwSDwQOh4pNXTXy/r7gTs00cVffDzXrrSbLTJJd
NvLRNFi04w3VxKIrWdQVNxHGFKyNg8FtpGBgiuvtvDcj/DqLwxdyxxynTBYySQZZ
VPl7CVzgkd+cUy78a6dp3iuXR9RltbO2SxS7F7cXSxoxZyoTBwO2c5/CptU8SPpu
oz262kE0MWmS3/mfbEV2KHGwR8ttP9/oOlOTvF32d/wvf9f6sOKakrbq36f8A5dP
B/iy5uIZ57vTNPmttBl0qGaymkdhK23bKMou0fL0GdvYnPE3hXwTqmk+Ml168t9K
twdNNnMLW4lmklk3q3mu7oC5Yhgd2SAF5Pbd0PxVJrNxpSfYoYYr/Sl1Et9sRpIy
xX5PLwGYfN9/AHGOppLbxrp2oeK7fRtOltb2CWzluWvLe6WRUZGVShC5Gfmz149K
rVS131/9uv8Ar/VidOXTbT9Lfkv6udNRWfpuvaPrLSrperWF8YseYLW5SXZnpnaT
jofyrKtfGmn6h4st9F02W1voZbSW5N5bXKyKjI6qUwuRn5s9ePSp62H5nS0VR03W
tK1lZW0vU7O+ERCyG1nWXYT2O0nFXqACiiigAooooAKKKKACiiigAooooAKKKKAC
iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvkD42/8AJXtd/wC3
f/0njr6/r5A+Nv8AyV7Xf+3f/wBJ46AD4Jf8le0L/t4/9J5K+v6+QPgl/wAle0L/
ALeP/SeSvr+gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo
oAKKKKACiiigAooooAKKKKACiiigArjEtdX8MeINeu7HRZtWttVkW6jFvPFG0Uoj
CMr+Y6/KdoIK7j1yOmezoo63A8/1/SNck1yXVhoial9t0R9Pa2huUItpSST80hTd
G2cEgbvlHy1lr4F1q2F3C8CXbDwgNKjuPMX95cfN8o3EEDpyQB0r1SilbS39df8A
NjTad/T8Lf5I8h1rw1qenaPJdzWYitbTwVLYysHTCTfKdmAcngHkce9SWfhjVtfs
IpYdOTTYB4VOmRs8qFbmSRQVwEJIRcZywU5bpXq09vDdW8lvcQxzQSqUkjkUMrqe
CCDwRSxRRwRJFEixxooVEQYCgcAAdhTet79f15r/APpQlpa3T/7W3/pJ5S3hnxHq
0jebosliq+FJdJBnuIW3XBK4GEdvlOOD+eO8eqeHvE+pWMds2hXiRSaEmnosN1bw
vHONykzyK+9ouQwVWYHHzISa9doolrv/AFv/APJP8Aj7trdP+B/kjyWHw14gsJor
hvDb3+fCkelMn2mDcs/O5SWYAr6kH6Zq3B4L1qymtIvKFwlv4Sk0szCRQGuCVwoB
IOOOuMe9en0US969+t/xv/8AJMIu1reX4W/yR5Zb+CtdlWwgaEWuPB7aU8xlUiK5
Oz5TtJJ6HkZHHWok8PeJbq4t5oPDkWnyW3hiXS1+0yQSI0/y7V2qzAx8HG4euQO/
rFFOTvf5/jzf/JMadrf12/yR5FYeDfEN5rF7PJY31gl14dk03zby9ikKzkgghImK
pHyQoQADaflGeXP4S8Qa08MX9i/2ME8MS6SZpJ4mHnHZgDy2Y+XwcHGeTkDjPrdF
J6/16/8AyTEnb+vT/JHn3grw7qlprcOo6lbanA9vpiWIN5PabW5B2olunKrt4Z2B
5xt6mvQaKKbdxJWCiiikMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
ooooAKKKKACiiigAooooAKKKKACiiigAr5A+Nv8AyV7Xf+3f/wBJ46+v6+QPjb/y
V7Xf+3f/ANJ46AD4Jf8AJXtC/wC3j/0nkr6/r5A+CX/JXtC/7eP/AEnkr6/oAKKK
KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK
KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK
KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK
KACiiigAr5A+Nv8AyV7Xf+3f/wBJ46+v6+QPjb/yV7Xf+3f/ANJ46AD4Jf8AJXtC
/wC3j/0nkr6/r5A+CX/JXtC/7eP/AEnkr6/oAKKKKACiiigAooooAKKKKACiiigA
ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAr5A+Nv8AyV7Xf+3f
/wBJ46+v6+QPjb/yV7Xf+3f/ANJ46AD4Jf8AJXtC/wC3j/0nkr6/r5A+CX/JXtC/
7eP/AEnkr6/oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK
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
/9k=
---END_DATA---
%/
TidIDE - TiddlyWiki Integrated Development Environment

Provides tools for authors and developers to help construct and debug the contents of their TiddlyWiki documents.
/***
|Name|TidIDEPlugin|
|Source|http://www.TiddlyTools.com/#TidIDEPlugin|
|Documentation|http://www.TiddlyTools.com/#TidIDEPluginInfo|
|Version|1.8.3|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Options|##Configuration|
|Description|TiddlyWiki Integrated Development Environment - tools for authors and plugin writers|
~TidIDE (//prounounced "Tie Dyed"//) - ''Tid''dlyWiki ''I''ntegrated ''D''evelopment ''E''nvironment - lets you define a set of checkboxes to toggle a stack of 'tool panels' containing tools for TiddlyWiki authors to use when creating and debugging their TiddlyWiki documents.  Each tool is defined by a separate tiddler, allowing you to define any convenient set of tools simply by adding/removing tiddler references from the {{{<<tidIDE...>>}}} macro call.

In addition to presenting checkboxes/tool panels that are defined in separate tiddlers, the {{{<<tidIDE>>}}} macro can invoke an optional built-in "editor panel" that presents an alternative tiddler editor to create, modify, and manage the tiddlers in your document... and, if you have also installed [[PreviewPlugin]], the editor can automatically display a ''//formatted preview//'' of the current tiddler content that is updated ''live, key-by-key'' while you edit the tiddler source.
!!!!!Documentation
>see [[TidIDEPluginInfo]]
!!!!!Configuration
<<<
Number of rows to display in text input area <<option txtTidIDEMaxEditRows>> 
{{{usage: <<option txtTidIDEMaxEditRows>>}}}
^^Note: if value is not specified here, default is to use {{{<<option txtMaxEditRows>>}}} core setting (see [[AdvancedOptions]])^^
<<<
!!!!!Revisions
<<<
2008.04.24 [1.8.3] fixed 'run' button onclick handler
2007.12.21 [1.8.2] added txtTidIDEMaxEditRows option as custom override for standard core txtMaxEditRows setting
2007.09.27 [1.8.0] split preview functionality into separate stand-alone plugin (see [[PreviewPlugin]]).  Moved {{{<<DOMViewer>>}}} macro definition to separate plugin (see [[DOMViewerPlugin]]).  Replicated ''run'' button functionality in stand-along plugin (see [[RunTiddlerPlugin]]). Major re-write of documentation
|please see [[TidIDEPluginInfo]] for additional revision details|
2006.04.15 [0.5.0] Initial ALPHA release. Converted from inline script.
<<<
!!!!!Code
***/
// // version
//{{{
version.extensions.tidIDE = {major: 1, minor: 8, revision: 3, date: new Date(2008,4,24)};
//}}}
// // settings
//{{{
if (config.options.txtTidIDEMaxEditRows==undefined)
	config.options.txtTidIDEMaxEditRows=config.options.txtMaxEditRows
//}}}
// //  macro definition
//{{{
config.macros.tidIDE = {
	versionMsg: "TidIDE v%0.%1.%2: ",
	datetimefmt: "0MM/0DD/YYYY 0hh:0mm",
	titleMsg: "Please enter a new tiddler title",
	isShadowMsg: "'%0' is a shadow tiddler and cannot be removed.",
	evalMsg: "Warning!! Processing '%0' as a systemConfig (plugin) tiddler may produce unexpected results! Are you sure you want to proceed?",
	evalCompletedMsg: "Processing completed",
	toolsDef: "<html><a href='javascript:config.macros.tidIDE.set(\"%0\",\"%1\");'>edit %1...</a></html>",
	editorLabel: "TiddlerEditor"
};
config.macros.tidIDE.handler= function(place,macroName,params) {
	var here=story.findContainingTiddler(place);
	var selectors="";
	var panels="";
	var showsys=false;
	var title="";
	var id=""; if (here) id=here.getAttribute("tiddler").replace(/ /g,"_");
	var p=params.shift();
	if (!p) p="edit:here"; // default to editor if no params
	var openpanels=[];
	var panelcount=0;
	while (p) {
		var defOpen=(p.substr(0,1)=="+"); if (defOpen) p=p.substr(1);
		if (p.substr(0,3)=="id:")
			{ id=p.substr(3); }
		else if (p.substr(0,4)=="edit") {
			panelcount++;
			defOpen=defOpen || (!params[0] && panelcount==1); // if only one panel to show, default to open
			var toolname=this.editorLabel;
			if (p.indexOf('|')!=-1) toolname=p.substr(0,p.indexOf('|'));
			selectors+=this.html.editorchk.replace(/%toolname%/mg,toolname);
			selectors=selectors.replace(/%showpanel%/mg,defOpen?"CHECKED":"");
			panels+=this.html.editorpanel;
			// editor panel setup...
			panels=panels.replace(/%showpanel%/mg,defOpen?"block":"none");
			panels=panels.replace(/%maxrows%/mg,config.options.txtTidIDEMaxEditRows);
			panels=panels.replace(/%disabled%/mg,readOnly?"DISABLED":"");
			panels=panels.replace(/%readonlychk%/mg,readOnly?"CHECKED":"");
			panels=panels.replace(/%minoredits%/mg,config.options.chkForceMinorUpdate&&!readOnly?"":"DISABLED");
			panels=panels.replace(/%minorchk%/mg,config.options.chkForceMinorUpdate?"CHECKED":"");
			var tiddlers=store.getTiddlers("title"); var tiddlerlist=""; 
			for (var t=0; t<tiddlers.length; t++)
				tiddlerlist+='<option value="'+tiddlers[t].title+'">'+tiddlers[t].title+'</option>';
			for (var t in config.shadowTiddlers)
				if (!store.tiddlerExists(t)) tiddlerlist+="<option value='"+t+"'>"+t+" (shadow)</option>";
			panels=panels.replace(/%tiddlerlist%/mg,tiddlerlist);
			var tags = store.getTags(); var taglist="";
			for (var t=0; t<tags.length; t++)
				taglist+="<option value='"+tags[t][0]+"'>"+tags[t][0]+"</option>";
			panels=panels.replace(/%taglist%/mg,taglist);
			if (p.substr(0,5)=="edit:") { 
				title=p.substr(5); 
				if (here && title=="here") title=here.id.substr(7);
			}
		}
		else {
			panelcount++;
			defOpen=defOpen || (!params[0] && panelcount==1); // if only one panel to show, default to open
			var toolid=toolname=p;
			if (p.indexOf('|')!=-1)
				{ toolname=p.substr(0,p.indexOf('|')); toolid=p.substr(p.indexOf('|')+1); }
			selectors+=this.html.toolschk.replace(/%toolid%/mg,toolid).replace(/%toolname%/mg,toolname);
			selectors=selectors.replace(/%showpanel%/mg,defOpen?"CHECKED":"");
			panels+=this.html.toolspanel.replace(/%toolid%/mg,toolid);
			panels=panels.replace(/%showpanel%/mg,defOpen?"block":"none");
			if (defOpen) openpanels.push(toolid);
		}
		p=params.shift(); // next param
	}
	var html=this.html.framework;
	if (panelcount<2)
		html=html.replace(/%version%/mg,'').replace(/%selector%/mg,''); // omit header/selectors if just one panel to display
	else {
		html=html.replace(/%version%/mg,
			this.versionMsg.format([version.extensions.tidIDE.major,version.extensions.tidIDE.minor,version.extensions.tidIDE.revision]));
		html=html.replace(/%selector%/mg,selectors+"<hr style='margin:0;padding:0'>");
	}
	html=html.replace(/%panels%/mg,panels);
	html=html.replace(/%id%/mg,id);
	var newIDE=createTiddlyElement(place,"span");
	newIDE.innerHTML=html;
	if (title.length) this.set(id,title);  // pre-load tiddler editor values (if needed)
	if (openpanels.length) for (i=0;i<openpanels.length;i++) { config.macros.tidIDE.loadPanel(id,openpanels[i]); }
	// see [[TextAreaPlugin]] for extended ctrl-F/G (search/search again)and TAB handler definitions
	if (window.addKeyDownHandlers!=undefined) {
		var elems=newIDE.getElementsByTagName("textarea");
		for (var i=0;i<elems.length;i++) window.addKeyDownHandlers(elems[i]);
	}
	var prev=document.getElementById(id+'_previewpanel');
	if (config.macros.preview && prev)  // add previewer to editor (if installed)
		config.macros.preview.handler(prev,"preview",["text","15"]);
}
//}}}

// // CUSTOM PANEL FUNCTIONS 
//{{{
config.macros.tidIDE.loadPanel=function(id,toolid) {
	var place=document.getElementById(id+"_"+toolid+"_panel"); if (!place) return;
	var t=store.getTiddlerText(toolid,"");
	place.innerHTML=""; 
	if (t) wikify(t,place); else place.innerHTML=this.toolsDef.format([id,toolid]);
}
//}}}

// // EDITOR PANEL FUNCTIONS
//{{{
config.macros.tidIDE.set=function(id,title) {
	var place=document.getElementById(id+"_editorpanel"); if (!place) return;
	var f=document.getElementById(id+"_editorform");
	if (f.dirty && !confirm(config.commands.cancelTiddler.warning.format([f.current]))) return;
	// reset to form defaults
	f.dirty=false;
	f.current="";
	f.created.value=f.created.defaultValue;
	f.modified.value=f.modified.defaultValue;
	f.author.value=f.author.defaultValue;
	f.content.value=f.content.defaultValue;
	f.tags.value=f.tags.defaultValue;
	f.size.value=f.size.defaultValue;
	if (!title.length) return;
	f.current=title;
	// values for new/shadow tiddlers
	var cdate=new Date();
	var mdate=new Date();
	var modifier=config.options.txtUserName;
	var text=config.views.editor.defaultText.format([title]);
	var tags="";
	// adjust values for shadow tiddlers
	if (store.isShadowTiddler(title))
		{ modifier=config.views.wikified.shadowModifier; text=store.getTiddlerText(title) }
	// get values for specified tiddler (if it exists)
	var t=store.getTiddler(title);
	if (t)	{ var cdate=t.created; var mdate=t.modified; var modifier=t.modifier; var text=t.text; var tags=t.getTags(); }
	if (!t && !store.isShadowTiddler(title)) f.tiddlers.options[f.tiddlers.options.length]=new Option(title,title,false,true); // add item to list
	f.tiddlers.value=title; // select current title (just in case it wasn't already selected)
	f.created.value=cdate.formatString(this.datetimefmt);
	f.modified.value=mdate.formatString(this.datetimefmt);
	f.author.value=modifier;
	f.content.value=text;
	f.tags.value=tags;
	f.minoredits.checked=config.options.chkForceMinorUpdate&&!readOnly;
	f.size.value=f.content.value.length+" bytes";
}

config.macros.tidIDE.add=function(id) {
	var place=document.getElementById(id+"_editorpanel"); if (!place) return;
	var f=document.getElementById(id+"_editorform");
	if (f.dirty && !confirm(config.commands.cancelTiddler.warning.format([f.current]))) return;
	var title=prompt(this.titleMsg,config.macros.newTiddler.title);
	while (title && store.tiddlerExists(title) && !confirm(config.messages.overwriteWarning.format([title])))
		title=prompt(this.titleMsg,config.macros.newTiddler.title);
	if (!title || !title.trim().length) return; // cancelled by user
	f.dirty=false; // suppress unneeded confirmation message
	this.set(id,title);
}

config.macros.tidIDE.remove=function(id) {
	var place=document.getElementById(id+"_editorpanel"); if (!place) return;
	var f=document.getElementById(id+"_editorform");
	if (!f.current.length) return;
	if (!store.tiddlerExists(f.current) && store.isShadowTiddler(f.current)) { alert(this.isShadowMsg.format([f.current])); return; }
	if (config.options.chkConfirmDelete && !confirm(config.commands.deleteTiddler.warning.format([f.current]))) return;
	if (store.tiddlerExists(f.current)) {
		story.closeTiddler(f.current);
		store.removeTiddler(f.current);
		store.setDirty(true);
		if(config.options.chkAutoSave) saveChanges();
	}
	f.tiddlers.options[f.tiddlers.selectedIndex]=null; // remove item from list
	f.dirty=false; // suppress unneeded confirmation message
	this.set(id,""); // clear form controls
}

config.macros.tidIDE.save=function(id,saveAs) {
	var place=document.getElementById(id+"_editorpanel"); if (!place) return;
	var f=document.getElementById(id+"_editorform");
	var title=f.current;
	if (!title || !title.trim().length || saveAs) { // get a new title
		title=prompt(this.titleMsg,config.macros.newTiddler.title);
		while (title && store.tiddlerExists(title) && !confirm(config.messages.overwriteWarning.format([title])))
			title=prompt(this.titleMsg,config.macros.newTiddler.title);
		if (!title || !title.trim().length) return; // cancelled by user
		f.tiddlers.options[f.tiddlers.options.length]=new Option(title,title,false,true); // add item to list
		f.current=title;
	}
	var author=config.options.txtUserName;
	var mdate=new Date();
	var content=f.content.value;
	var tags=f.tags.value;
	var tiddler=store.saveTiddler(title,title,content,author,mdate,tags);
	if (f.minoredits.checked) {
		var author=f.author.value;
		var mdate=new Date(f.modified.value);
		var cdate=new Date(f.created.value);
		tiddler.assign(null,null,author,mdate,null,cdate);
	}
	store.setDirty(true);
	if(config.options.chkAutoSave) saveChanges();
	story.refreshTiddler(title,null,true);
	f.dirty=false;
}
//}}}

// // HTML DEFINITIONS
//{{{
config.macros.tidIDE.html = { };
config.macros.tidIDE.html.framework = " \
	<html> %version% <form style='display:inline;margin:0;padding:0;'>%selector%</form> %panels% </html> \
";
//}}}
//{{{
config.macros.tidIDE.html.editorchk = " \
	<input type=checkbox name=editor \
		style='display:inline;width:auto;margin:1px;' \
		title='add/delete/modify tiddlers' %showpanel% \
		onclick='document.getElementById(\"%id%_editorpanel\").style.display=this.checked?\"block\":\"none\";'>%toolname% \
";
config.macros.tidIDE.html.toolschk = " \
	<input type=checkbox name=tools \
		style='display:inline;width:auto;margin:1px;' \
		title='' %showpanel% \
		onclick='document.getElementById(\"%id%_%toolid%_panel\").style.display=this.checked?\"block\":\"none\"; \
			if (this.checked) config.macros.tidIDE.loadPanel(\"%id%\",\"%toolid%\");'>%toolname% \
";
//}}}
//{{{
config.macros.tidIDE.html.toolspanel = " \
	<div id='%id%_%toolid%_panel' style='display:%showpanel%;margin:0;margin-top:0.5em'> \
	</div> \
";
//}}}
//{{{
config.macros.tidIDE.html.editorpanel = " \
	<div id='%id%_editorpanel' style='display:%showpanel%;margin:0;margin-top:0.5em'> \
	<form id='%id%_editorform' style='display:inline;margin:0;padding:0;'> \
	<!-- tiddler editor list and buttons --> \
	<select size=1 name=tiddlers style='display:inline;width:44%;'  \
		onchange='config.macros.tidIDE.set(\"%id%\",this.value); this.value=this.form.current;'> \
	<option value=''>select a tiddler...</option> \
	%tiddlerlist% \
	</select><!-- \
	--><input name=add type=button style='display:inline;width:8%' \
		value='new' title='create a new tiddler' \
		onclick='config.macros.tidIDE.add(\"%id%\")' %disabled%><!-- \
	--><input name=remove type=button style='display:inline;width:8%' \
		value='remove' title='delete this tiddler' \
		onclick='config.macros.tidIDE.remove(\"%id%\")' %disabled%><!-- \
	--><input name=save type=button style='display:inline;width:8%' \
		value='save' title='save changes to this tiddler' \
		onclick='config.macros.tidIDE.save(\"%id%\")' %disabled%><!-- \
	--><input name=saveas type=button style='display:inline;width:8%' \
		value='save as' title='save changes to a new tiddler' \
		onclick='config.macros.tidIDE.save(\"%id%\",true)' %disabled%><!-- \
	--><input name=view type=button style='display:inline;width:8%' \
		value='open' title='open this tiddler for regular viewing' \
		onclick='if (!this.form.current.length) return;	story.displayTiddler(null,this.form.current)'><!-- \
	--><input name=run type=button style='display:inline;width:8%' \
		value='run' title='evaluate this tiddler as a javascript \"systemConfig\" plugin' \
		onclick='if (!confirm(config.macros.tidIDE.evalMsg.format([this.form.current]))) return false; \
			try { window.eval(this.form.content.value); displayMessage(config.macros.tidIDE.evalCompletedMsg); } \
			catch(e) { displayMessage(config.messages.pluginError.format([err])); }'><!-- \
	--><input name=previewbutton type=button style='display:inline;width:8%;' \
		value='preview' title='show \"live\" preview display' \
		onclick='if (!config.macros.preview) { alert(\"Please install PreviewPlugin\"); return false; } \
			this.form.preview.checked=!this.form.preview.checked; \
			document.getElementById(\"%id%_previewpanel\").style.display=this.form.preview.checked?\"block\":\"none\"; \
			if (this.form.freeze) this.form.freeze.checked=!this.form.preview.checked; \
			if (this.form.preview.checked) config.macros.preview.render(this.form.content.id,this.form.content.getAttribute(\"previewid\"));'><!-- \
	hidden field for preview show/hide state: \
	--><input name=preview type=checkbox style='display:none;'>\
	<!-- tiddler content edit --> \
	<div><textarea id='%id%_content' name='content' edit='text' cols=60 rows=%maxrows% \
		style='width:100%;' \
		onkeyup='var f=this.form; f.dirty=true; f.size.value=this.value.length+\" bytes\";'></textarea></div> \
	<!-- tag edit and droplist --> \
	<table width='100%' style='border:0;padding:0;margin:0'><tr style='border:0;padding:0;margin:0'> \
	<td style='border:0;padding:0;margin:0'> \
		<input type=text name=tags size=60 style='width:100%;' value='' \
			onchange='this.form.dirty=true' %disabled%> \
	</td><td width='1' style='border:0;padding:0;margin:0;'> \
		<select size=1 name=taglist \
			onchange='this.form.dirty=true; this.form.tags.value+=\" \"+this.value' %disabled%> \
		<option value=''>select tags...</option> \
		%taglist% \
		</select> \
	</td></tr></table> \
	<!--  created/modified dates, author, current tiddler size --> \
	<div style='float:right;'> \
		created <input type=text name=created size=15 \
			style='display:inline;;text-align:center;padding:0;' value='' \
			onchange='this.form.dirty=true' %minoredits%> \
		modified <input type=text name=modified size=15 \
			style='display:inline;text-align:center;padding:0;' value='' \
			onchange='this.form.dirty=true;' %minoredits%> \
		by <input type=text name=author size=15 \
			style='display:inline;padding:0;' value='' \
			onfocus='this.select()' onchange='this.form.dirty=true' %minoredits%> \
		<input type=text name=size size=10 \
			style='display:inline;text-align:center;padding:0;' value='' \
			onfocus='this.blur()' onkeydown='return false' DISABLED>  \
	</div> \
	<!-- toggles: read-only, minor edit --> \
	<span style='white-space:nowrap'> \
	<input type=checkbox name=readonly \
		style='display:inline;width:auto;margin:1px;' %readonlychk% \
		title='do not allow tiddler changes to be saved' \
		onclick='readOnly=config.options.chkHttpReadOnly=this.checked;saveOptionCookie(\"chkHttpReadOnly\"); \
			var f=this.form; f.minoredits.disabled=f.tags.disabled=f.taglist.disabled=this.checked; \
			f.add.disabled=f.remove.disabled=f.save.disabled=f.saveas.disabled=this.checked; \
			f.created.disabled=f.modified.disabled=f.author.disabled=this.checked||!f.minoredits.checked;'>readonly \
	<input type=checkbox name=minoredits \
		style='display:inline;width:auto;margin:1px;' %disabled% %minorchk% \
		title='check: save datestamps/author as entered, uncheck: auto-update modified/author' \
		onclick='this.form.created.disabled=this.form.modified.disabled=this.form.author.disabled=!this.checked; \
			config.options.chkForceMinorUpdate=this.checked;saveOptionCookie(\"chkForceMinorUpdate\");'>minor edits \
	</span> \
	<!-- tiddler preview display --> \
	<div id='%id%_previewpanel' style='display:none;white-space:nowrap'></div> \
";
//}}}
|Name|TidIDEPluginInfo|
|Source|http://www.TiddlyTools.com/#TidIDEPlugin|
|Documentation|http://www.TiddlyTools.com/#TidIDEPluginInfo|
|Version|1.8.3|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|documentation|
|Requires||
|Overrides||
|Description|documentation for TidIDEPlugin|
~TidIDE (//prounounced "Tie Dyed"//) - ''Tid''dlyWiki ''I''ntegrated ''D''evelopment ''E''nvironment - lets you define a set of checkboxes to toggle a stack of 'tool panels' containing tools for TiddlyWiki authors to use when creating and debugging their TiddlyWiki documents.  Each tool is defined by a separate tiddler, allowing you to define any convenient set of tools simply by adding/removing tiddler references from the {{{<<tidIDE...>>}}} macro call.

In addition to presenting checkboxes/tool panels that are defined in separate tiddlers, the {{{<<tidIDE>>}}} macro can invoke an optional built-in "editor panel" that presents an alternative tiddler editor to create, modify, and manage the tiddlers in your document... and, if you have also installed [[PreviewPlugin]], the editor can automatically display a ''//formatted preview//'' of the current tiddler content that is updated ''live, key-by-key'' while you edit the tiddler source.
!!!!!Usage
<<<
Syntax:
{{{
<<tidIDE id:xyz TiddlerName ...>>
<<tidIDE id:xyz [[checkbox text|TiddlerName]] ...>>
<<tidIDE id:xyz edit ... >>
<<tidIDE id:xyz edit:here ... >>
<<tidIDE id:xyz edit:TidderName ...>>
}}}
where:
* ''id'' - assign a unique ID to this instance of TidIDE.  (default id=current tiddler title or "" if not in a tiddler)
* ''{{{TidderName}}}'' or ''{{{[[checkbox text|TiddlerName]]}}}'' will include the custom tool panel content defined in TiddlerName (and a corresponding labelled checkbox to toggle its display)
* ''edit'' includes tiddler editor/previewer.
**''edit:here'' automatically sets the editor to show the current tiddler contents (if in a tiddler)
**''edit:tiddlertitle'' automatically sets the editor to show the specified tiddler contents
* all parameters are optional.  The default panel is "edit:here".
* panel parameters preceded by a "+" are displayed by default.  If only one panel specified in the parameters, it is automatically displayed, even if the "+" is omitted.
<<<
!!!!!Example
<<<
{{{<<tidIDE id:example SystemInfo TiddlerTweaker +edit:GettingStarted>>}}}
{{smallform{<<tidIDE id:example SystemInfo TiddlerTweaker +edit:GettingStarted>>}}}
<<<
!!!!!Using the built-in TidIDE editor
<<<
The editor includes a droplist of all tiddlers in the document, sorted alpha-numerically by tiddler title.  Shadow tiddlers that have not been customized are added to the end of this list and marked with "(shadow)".  Next to the droplist are several buttons:
* ''new'' prompts for a new tiddler title and begins a new editing session
* ''remove'' deletes an existing tiddler (note: shadow tiddlers cannot be removed)
* ''save'' saves changes to the tiddler currently being edited
* ''save as'' saves changes using a new tiddler title
* ''open'' opens the tiddler in the normal ~TiddlyWiki display area
* ''run'' invokes the tiddler as if it was a plugin (i.e., containing javascript code)
* ''preview'' toggles display of the live, key-by-key preview (when [[PreviewPlugin]] is installed)
If a tiddlername was not specified in the macro, select a tiddler from the droplist (or press ''add'') to begin editing.  Once a tiddler has been loaded into the editor, you can change it's content, enter or select tags.
!!!!!minor edits
Normally, when you save changes to a tiddler, the created/modified dates and tiddler author are automatically updated.  However, it is sometimes useful to make small changes to a tiddler without automatically updating the date/author information.  Select the ''minor edits'' checkbox to prevent those values from being //automatically// changed.  In addition, this enables the date/author edit fields which allows you to //manually// 'back date' a tiddler or change the author to another name.  When the tiddler is saved, the date/author values shown in the edit fields will be used.
!!!!!using the previewer
When [[PreviewPlugin]] is installed, you can use the TidIDE editor's ''preview'' button to toggle the preview display area that shows you what your tiddler changes will look like, //before// committing to those changes.  Please refer to the documentation in [[PreviewPlugin]] for more information.
<<<
!!!!!Revisions
<<<
2008.04.24 [1.8.3] fixed 'run' button onclick handler
2007.12.21 [1.8.1] added txtTidIDEMaxEditRows option as custom override for standard core txtMaxEditRows setting
2007.09.27 [1.8.0] split preview functionality into separate stand-alone plugin (see [[PreviewPlugin]]).  Moved {{{<<DOMViewer>>}}} macro definition to separate plugin (see [[DOMViewerPlugin]]).  Replicated ''run'' button functionality in stand-along plugin (see [[RunTiddlerPlugin]]). Major re-write of documentation
2007.09.13 [1.7.1] removed errant trailing comma from config.macros.tidIDE object definition (fixes IE error)
2007.09.09 [1.7.0] split systemInfo into separate plugin (see [[SystemInfoPlugin]])
2007.09.06 [1.6.3] in handler(), when using tiddler title as default instance ID, replace spaces with underscores to ensure generated form control ID's don't have embedded spaces.
2007.09.03 [1.6.2] in loadPanel(), use store.getTiddlerText() to permit use of shadow tiddlers as custom panels
2006.12.09 [1.6.1] in handler(), allow non-existing tiddler title when processing "edit:title" param
so that new tiddler (or journal) can be created directly from newTiddler, newJournal, or tidIDE macro (without pressing "new" button).  Also, set 'edit=text' attribute on text area field so that default content can be initialized from "text:xxx" parameter specified in newTiddler/newJournal macro.
2006.11.28 [1.6.0] added font and size params to set CSS for form controls in editor and system info panels
2006.09.28 [1.5.8] use separate form ID and definition for each panel (as well as checkbox 'selector' form), so that forms in custom panels don't conflict with each other.
2006.08.27 [1.5.7] in handler(), corrected initial display setting for custom 'toolspanel' when '+' prefix has been used for 'defOpen'
2006.08.15 [1.5.6] in handler(), supress header/selectors if only one panel to display.  Also, init system_panel as needed.
2006.08.04 [1.5.5] in handler(), fix construction of tiddler list to permit use of apostrophes (') in tiddler names.
2006.05.22 [1.5.4] in setsys(), remove "(cookie)" prefix from selected item text when setting cookie name (was preventing saving of cookie values)
2006.05.17 [1.5.3] in setsys(), call saveOptionsCookie().  Also, set tiddler editor textarea height (%maxrows%) using config.options.txtMaxEditRows
2006.04.30 [1.5.2] documentation update
2006.04.30 [1.5.1] in save(), when performing "save as" behavior, set current tiddler title (f.current) to new title
2006.04.24 [1.5.0] added macro parameters to dynamically configure and assemble HTML for IDE panels.  Supports multiple custom panels loaded from tiddlers and {{{[[label|tiddlername]]}}}
2006.04.24 [1.4.6] layout adjustments: move system panel above editor panel and move config setting controls to top of system panel
2006.04.23 [1.4.5] fix HTML so that click on "readonly" checkbox won't change "minor edits" option value.
2006.04.23 [1.4.4] in render(), strip carriage returns (\r) that are added by IE's textarea control.  Fixes errors in wikify() of 'block-mode' syntax.  Also, defer rendering HTML and DOM preview displays until those options are checked and still more code cleanup
2006.04.23 [1.4.3] init "minor edits" checkbox state from config.options.chkForceMinorEdits value
2006.04.23 [1.4.2] added "TidIDE v#.#.#: " title in front of subsystem checkboxes.
2006.04.23 [1.4.1] added 'readonly' checkbox and handling to editor.
2006.04.23 [1.4.0] implemented 'minor edits' logic, including use of TW AdvancedOptions setting.  Replaced separate MDY date input fields with date/time text input fields (using formatted date input).
2006.04.22 [1.3.2] Layout changes:  Added editor/system/tools "subsystem" checkboxes at top of panel.  Added automatic read-only notice.  Moved tools_panel to bottom.  Added 'minor edits' checkbox (handler not yet implemented).
2006.04.22 [1.3.1] assorted code cleanup and optimizations
2006.04.22 [1.3.0] added "tools" section via custom-defined TidIDETools tiddler content
2006.04.22 [1.2.2] corrected 'wrap' and 'white-space' CSS for system viewer textarea control so that IE preserves newlines.
2006.04.22 [1.2.1] added checkbox indicators in options droplist.  Allows easy preview of boolean state value for chk* options.
2006.04.22 [1.2.0] added options droplist to "system" display and supporting setsys() function to update internal config.options.* values
layout adjustments: consolidate some buttons, general tweaks for spacing, sizes, etc.
2006.04.21 [1.1.1] migrated remaining functionality from ToolkitPlugin (now obsolete).
2006.04.21 [1.1.0] added "system" display and supporting functions
2006.04.21 [1.0.1] added formatHTML() for better HTML display in preview
2006.04.20 [1.0.0] 4:20:00pm official release... renamed from ~TiddlerEditorPlugin to TidIDEPlugin.  (pronounced "Tie Dyed"... dude!)
2006.04.20 [0.9.9] added "run" button to dynamically load systemConfig plugins (with warning/confirmation)
2006.04.20 [0.9.8] layout adjustments for narrow displays
2006.04.20 [0.9.7] added HTML viewer to preview display
2006.04.20 [0.9.6] added DOM viewer to preview display
2006.04.19 [0.9.5] improved save() handler so saving 'unnamed' edit does fallback to 'save as' prompt for tiddler name
2006.04.19 [0.9.4] added 'preview status' display field and refresh button.  Currently shows preview rendering time and autofreeze notice, if any.
2006.04.19 [0.9.3] correct IE object error by explicitly using "window." scope when referencing addKeyDownHandlers() function definition
2006.04.18 [0.9.2] if TextAreaPlugin is installed, call addKeyDownHandlers() for extended ctrl-F/G and TAB keystrokes in textarea
2006.04.18 [0.9.1] "save as" now presents an "overwriteWarning" message box instead of always rejecting existing tiddler titles
2006.04.18 [0.9.0] added "save as".  Use TW standard text for new tiddler title and default text
2006.04.18 [0.8.5] added "display:inline" to input elements to prevent unwanted line breaks between controls when macro is used in EditTemplate definitions
2006.04.18 [0.8.4] added cookie for 'auto-freeze' time limit.  Also, added more documentation.
2006.04.17 [0.8.3] added timing wrapper around preview wikify().  Automatically freeze preview display if tiddler rendering exceeds time limit
2006.04.17 [0.8.2] more code cleanup for better 'dirty' flag handling
2006.04.17 [0.8.1] show/hide freeze checkbox when toggling preview display.  Also, code cleanup for better 'multiple instance' definition
2006.04.17 [0.8.0] added "freeze" checkbox to toggle 'live update' of preview display.  Also, layout/CSS adjustments for better appearance in IE
2006.04.16 [0.7.1] correct month number offset (was 0-11 instead of 1-12)
2006.04.16 [0.7.0] added support for 'dirty' flag, read-only mode and improved alert/confirm/prompt handling
2006.04.16 [0.6.0] created "add/remove" functions.  Added handling to trigger autoSave() if option is set.
2006.04.15 [0.5.1] move 'save' logic to separate function, and added handling to create a 'real' tiddler when saving a shadow
2006.04.15 [0.5.0] Initial ALPHA release. Converted from inline script.
<<<
/***

|Name|ToggleSideBarMacro|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#ToggleSideBarMacro|
|Version|1.0|
|Requires|~TW2.x|
!Description:
Provides a button for toggling visibility of the SideBar. You can choose whether the SideBar should initially be hidden or displayed.

!Demo
<<toggleSideBar "Toggle Sidebar">>

!Usage:
{{{<<toggleSideBar>>}}} <<toggleSideBar>>
additional options:
{{{<<toggleSideBar label tooltip show/hide>>}}} where:
label = custom label for the button,
tooltip = custom tooltip for the button,
show/hide = use one or the other, determines whether the sidebar is shown at first or not.
(default is to show the sidebar)

You can add it to your tiddler toolbar, your MainMenu, or where you like really.
If you are using a horizontal MainMenu and want the button to be right aligned, put the following in your StyleSheet:
{{{ .HideSideBarButton {float:right;} }}}

!History
*23-07-06: version 1.0: completely rewritten, now works with custom stylesheets too, and easier to customize start behaviour. 
*20-07-06: version 0.11
*27-04-06: version 0.1: working.

!Code
***/
//{{{
config.macros.toggleSideBar={};

config.macros.toggleSideBar.settings={
         styleHide :  "#sidebar { display: none;}\n"+"#contentWrapper #displayArea { margin-right: 1em;}\n"+"",
         styleShow : " ",
         arrow1: "«",
         arrow2: "»"
};

config.macros.toggleSideBar.handler=function (place,macroName,params,wikifier,paramString,tiddler)
{
          var tooltip= params[1]||'toggle sidebar';
          var mode = (params[2] && params[2]=="hide")? "hide":"show";
          var arrow = (mode == "hide")? this.settings.arrow1:this.settings.arrow2;
          var label= (params[0]&&params[0]!='.')?params[0]+" "+arrow:arrow;
          var theBtn = createTiddlyButton(place,label,tooltip,this.onToggleSideBar,"button HideSideBarButton");
          if (mode == "hide")
             { 
             (document.getElementById("sidebar")).setAttribute("toggle","hide");
              setStylesheet(this.settings.styleHide,"ToggleSideBarStyles");
             }
};

config.macros.toggleSideBar.onToggleSideBar = function(){
          var sidebar = document.getElementById("sidebar");
          var settings = config.macros.toggleSideBar.settings;
          if (sidebar.getAttribute("toggle")=='hide')
             {
              setStylesheet(settings.styleShow,"ToggleSideBarStyles");
              sidebar.setAttribute("toggle","show");
              this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);
              }
          else
              {    
               setStylesheet(settings.styleHide,"ToggleSideBarStyles");
               sidebar.setAttribute("toggle","hide");
               this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);
              }

     return false;
}

setStylesheet(".HideSideBarButton .button {font-weight:bold; padding: 0 5px;}\n","ToggleSideBarButtonStyles");

//}}}
/***
|Name:|ToggleTagPlugin|
|Description:|Makes a checkbox which toggles a tag in a tiddler|
|Version:|3.1.0 ($Rev: 4907 $)|
|Date:|$Date: 2008-05-13 03:15:46 +1000 (Tue, 13 May 2008) $|
|Source:|http://mptw.tiddlyspot.com/#ToggleTagPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Usage
{{{<<toggleTag }}}//{{{TagName TiddlerName LabelText}}}//{{{>>}}}
* TagName - the tag to be toggled, default value "checked"
* TiddlerName - the tiddler to toggle the tag in, default value the current tiddler
* LabelText - the text (gets wikified) to put next to the check box, default value is '{{{[[TagName]]}}}' or '{{{[[TagName]] [[TiddlerName]]}}}'
(If a parameter is '.' then the default will be used)
* TouchMod flag - if non empty then touch the tiddlers mod date. Note, can set config.toggleTagAlwaysTouchModDate to always touch mod date
!!Examples
|Code|Description|Example|h
|{{{<<toggleTag>>}}}|Toggles the default tag (checked) in this tiddler|<<toggleTag>>|
|{{{<<toggleTag TagName>>}}}|Toggles the TagName tag in this tiddler|<<toggleTag TagName>>|
|{{{<<toggleTag TagName TiddlerName>>}}}|Toggles the TagName tag in the TiddlerName tiddler|<<toggleTag TagName TiddlerName>>|
|{{{<<toggleTag TagName TiddlerName 'click me'>>}}}|Same but with custom label|<<toggleTag TagName TiddlerName 'click me'>>|
|{{{<<toggleTag . . 'click me'>>}}}|dot means use default value|<<toggleTag . . 'click me'>>|
!!Notes
* If TiddlerName doesn't exist it will be silently created
* Set label to '-' to specify no label
* See also http://mgtd-alpha.tiddlyspot.com/#ToggleTag2
!!Known issues
* Doesn't smoothly handle the case where you toggle a tag in a tiddler that is current open for editing
* Should convert to use named params
***/
//{{{

if (config.toggleTagAlwaysTouchModDate == undefined) config.toggleTagAlwaysTouchModDate = false;

merge(config.macros,{

	toggleTag: {

		createIfRequired: true,
		shortLabel: "[[%0]]",
		longLabel: "[[%0]] [[%1]]",

		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			var tiddlerTitle = tiddler ? tiddler.title : '';
			var tag   = (params[0] && params[0] != '.') ? params[0] : "checked";
			var title = (params[1] && params[1] != '.') ? params[1] : tiddlerTitle;
			var defaultLabel = (title == tiddlerTitle ? this.shortLabel : this.longLabel);
			var label = (params[2] && params[2] != '.') ? params[2] : defaultLabel;
			var touchMod = (params[3] && params[3] != '.') ? params[3] : "";
			label = (label == '-' ? '' : label); // dash means no label
			var theTiddler = (title == tiddlerTitle ? tiddler : store.getTiddler(title));
			var cb = createTiddlyCheckbox(place, label.format([tag,title]), theTiddler && theTiddler.isTagged(tag), function(e) {
				if (!store.tiddlerExists(title)) {
					if (config.macros.toggleTag.createIfRequired) {
						var content = store.getTiddlerText(title); // just in case it's a shadow
						store.saveTiddler(title,title,content?content:"",config.options.txtUserName,new Date(),null);
					}
					else 
						return false;
				}
				if ((touchMod != "" || config.toggleTagAlwaysTouchModDate) && theTiddler)
						theTiddler.modified = new Date();
				store.setTiddlerTag(title,this.checked,tag);
				return true;
			});
		}
	}
});

//}}}

//{{{
//replaces toolbar buttons with icons.
//for each command that you want to use an icon, add a line like the following in a systemConfig tiddler, specifying the icon image location:
//config.commands.editTiddler.imgLoc= "jump.bmp";
//No need to edit the ViewTemplate! If an image location is specified, then the icon will be used for that command!

config.macros.toolbar.createCommand = function(place,commandName,tiddler,theClass)
{
	if(typeof commandName != "string")
		{
		var c = null;
		for(var t in config.commands)
			if(config.commands[t] == commandName)
				c = t;
		commandName = c;
		}
	if((tiddler instanceof Tiddler) && (typeof commandName == "string"))
		{
		var title = tiddler.title;
		var command = config.commands[commandName];
		var ro = tiddler.isReadOnly();
		var shadow = store.isShadowTiddler(title) && !store.tiddlerExists(title);
		var text = ro && command.readOnlyText ? command.readOnlyText : command.text;
		var tooltip = ro && command.readOnlyTooltip ? command.readOnlyTooltip : command.tooltip;
		if((!ro || (ro && !command.hideReadOnly)) && !(shadow && command.hideShadow))
		    {
			    var btn = createTiddlyButton(null,text,tooltip,this.onClickCommand);
			    btn.setAttribute("commandName", commandName);
			    btn.setAttribute("tiddler", title);
			    if(theClass)
				            addClass(btn,theClass);
                             place.appendChild(btn);
                            if(command.imgLoc)
                                   btn.innerHTML = "<img src='"+command.imgLoc+"'>";

		     }
       }
}

setStylesheet(".toolbarImg {vertical-align: middle; cursor:pointer;}\n","commandIconStyles"); 
//}}}
* Teoria de Conjuntos
* Provas de Teoremas
* Conjuntos Infinitos
* Estruturas de Dados e Algoritmos
* Linguagens Regulares
* Autômatos Finitos
* Teorema de Kleene
* Propriedades e Minimização de Autômatos
* Gramáticas
* Hierarquia de Chomsky
* Gramáticas Livres de Contexto
* Normalização de Gramáticas
* Autômato de Pilha
* Análise Sintática
* Máquinas de Turing
* Linguagens Irrestritas e Computabilidade

<<tiddler NextTiddler with: [[Bibliografia]]>>
<!--{{{-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<div class='viewer'> <span macro='view text wikified'></span> <span macro='navigation "" "" plugin'></span></div>
<!--}}}-->
<!--}}}-->
| source file:|{{{C:\Documents and Settings\User\Desktop\euler-venn.jpg}}}|
| attached on:|1 March 2009 by Professor|
| description:|attached by FileDropPlugin|
| embedded:|[[euler-venn.jpg|euler-venn.jpg]] - {{{type=image/jpeg, size=13930 bytes, encoded=18866 bytes}}}|
| local file:|/%LOCAL_LINK%/[[C:\Documents and Settings\User\Desktop\euler-venn.jpg|C:/Documents and Settings/User/Desktop/euler-venn.jpg]]|
| remote link:|//none//|
image
<<<
usage: {{{[img[tooltip|euler-venn.jpg]] or [img[tooltip|euler-venn.jpg][link]]}}}
[img[tooltip|euler-venn.jpg]]
<<<

/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/jpeg;base64,
/9j/4AAQSkZJRgABAQEAlgCWAAD/2wBDAA0JCgsKCA0LCgsODg0PEyAVExISEycc
HhcgLikxMC4pLSwzOko+MzZGNywtQFdBRkxOUlNSMj5aYVpQYEpRUk//2wBDAQ4O
DhMREyYVFSZPNS01T09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09P
T09PT09PT09PT09PT0//wAARCAFeAlgDASIAAhEBAxEB/8QAGwABAAIDAQEAAAAA
AAAAAAAAAAQFAgMGAQf/xABMEAABAwMABAYOCAQFBAIDAAABAAIDBAUREiExQRNR
YXGBsgYUFhciNlRVdJKUodHSFSMyQlJikbEzcoLBJDRDosIlNVPwB2NEg9P/xAAU
AQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQAC
EQMRAD8A62ydj9klsVvkls9ve99NG5znUzCSS0ZJOFO7nLD5ktvsrPgs7B4vW30W
LqBWCCs7nLD5ktvsrPgnc5YfMlt9lZ8FZogrO5yw+ZLb7Kz4J3OWHzJbfZWfBWaI
KzucsPmS2+ys+Cdzlh8yW32VnwVmiCs7nLD5ktvsrPgnc5YfMlt9lZ8FZogrO5yw
+ZLb7Kz4J3OWHzJbfZWfBWaIKzucsPmS2+ys+Cdzlh8yW32VnwVmiCs7nLD5ktvs
rPgnc5YfMlt9lZ8FZogrO5yw+ZLb7Kz4J3OWHzJbfZWfBWaIKzucsPmS2+ys+Cdz
lh8yW32VnwVmiCs7nLD5ktvsrPgnc5YfMlt9lZ8FZogrO5yw+ZLb7Kz4J3OWHzJb
fZWfBWaIKzucsPmS2+ys+Cdzlh8yW32VnwVmiCs7nLD5ktvsrPgnc5YfMlt9lZ8F
ZogrO5yw+ZLb7Kz4J3OWHzJbfZWfBWaIKzucsPmS2+ys+Cdzlh8yW32VnwVmiCs7
nLD5ktvsrPgnc5YfMlt9lZ8FZogrO5yw+ZLb7Kz4J3OWHzJbfZWfBWaIKzucsPmS
2+ys+Cdzlh8yW32VnwVmiCs7nLD5ktvsrPgnc5YfMlt9lZ8FZogrO5yw+ZLb7Kz4
J3OWHzJbfZWfBWaIKzucsPmS2+ys+Cdzlh8yW32VnwVmiCs7nLD5ktvsrPgnc5Yf
Mlt9lZ8FZogrO5yw+ZLb7Kz4J3OWHzJbfZWfBWaIKzucsPmS2+ys+Cdzlh8yW32V
nwVmiCs7nLD5ktvsrPgnc5YfMlt9lZ8FZogrO5yw+ZLb7Kz4J3OWHzJbfZWfBWaI
KzucsPmS2+ys+Cdzlh8yW32VnwVmiCs7nLD5ktvsrPgnc5YfMlt9lZ8FZogrO5yw
+ZLb7Kz4J3OWHzJbfZWfBWaIKzucsPmS2+ys+Cdzlh8yW32VnwVmiCs7nLD5ktvs
rPgnc5YfMlt9lZ8FZogrO5yw+ZLb7Kz4J3OWHzJbfZWfBWaIKzucsPmS2+ys+Cdz
lh8yW32VnwVmiCs7nLD5ktvsrPgnc5YfMlt9lZ8FZogrO5yw+ZLb7Kz4J3OWHzJb
fZWfBWaIKzucsPmS2+ys+Cdzlh8yW32VnwVmiDm+yGwWWHsduUsNnt8cjKWRzXNp
mAtIacEHCKx7JvFi6eiS9UogzsHi9bfRYuoFYKvsHi9bfRYuoFYICIiAiIgIi1zT
w08ZknlZEwbXPcGgdJQbEUD6Vik/ytPU1PLHEQ08znYB/Veirr3HwLY5o/8AtmaD
7soJyKD21cG4LraDx8HO0n3gLz6T0P8AM0VZAOMx6Y/VhcgnotNNVU9UzTpp45Wj
USxwODxHiW5AREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERARF
EqbhFDLwEbX1FRjPAxAFw5TuaOUkIJaHUMlV/A3Gp1z1DaRh+5AA53S9wx+jelei
z0B1zQmoPHUPMvWJx0IN766jjcWyVUDCNzpAFlHWUspxFUwvPE14K8ZRUkYxHSws
HE2MBYy2+imGJaOnePzRg/2QSUUD6IpGa6YSUzt3ASFg9X7J6QvMXOl1hzK2MbQQ
I5f1+yT6qCwRRqWugqi5jCWSs+3E8aL2844uXYpKAiIgIiICIiAiIgIiICIiAiIg
IiICIiAiIgrOybxYunokvVKJ2TeLF09El6pRBnYPF62+ixdQKwVfYPF62+ixdQKw
QEREBePe2Npc9wa1oySTgALyWRkMTpZXBrGAuc4nAAG9V0cL7o8T1bXNpQdKGncM
afE54/Zu7adewPRVVVfqoAIoD/8AkyNzpfyN3851chW6C2U0UgmkDp5x/rTHScOb
c3oAWF3u9HZqZtRXPLWOfoDAyc4J/TAJPMp4IIBByCgIiICIiCLU2+lqXiSSLEw2
SsJa8f1DWtBfXUGuTSracbXNaOFZzganDmweQqxRBrp54qmFs0EjZI3bHNOpbFX1
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
LMdBRS01TE5tdFKe2Xu18M86+EB3gjHNs3ILWqpYauLg5m5AOWkHDmnjBGsFQ2zV
tB4NSx1VANk0bcyNH5mDbzt/RWSINNNVQVUfCU8zJG7CWnODxHiK3KLUW6kqJOFf
FozbpYyWP9YYK1dp1sX+XuTyPwzxtkA6Ron3oJ6KBo3dp/i0UnLwb2f8imhd3f69
FH/+l7/+QQT1Hqq2mpAOHlAc77LAC5zuZo1noWg0FRL/AJm4zuH4YQIh+o8L3rfS
0NLSZNPC1jnfaftc7ncdZ6UEUtrbhqeH0dMdoB+teOcfYHNr5lOggipoWxQMayNu
xrRgBbEQEREBERAREQEREBERAREQEREBERAREQEREFZ2TeLF09El6pROybxYunok
vVKIM7B4vW30WLqBWCr7B4vW30WLqBWCAiIgIiICIiDCWGKdmhNEyRvE9oI96iGz
Ww5xQ07c72MDT7lORBBFmtmvSooX5/G3S/dSYKanpwRTwRRA7mMDf2W1EBERAREQ
EREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREB
ERAREQEREBERAREQEREBERAREQEREBERBWdk3ixdPRJeqUTsm8WLp6JL1SiDOweL
1t9Fi6gVgq+weL1t9Fi6gVggIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIg
IiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiIC
IiAiIgIiICIiAiIgrOybxYunokvVKJ2TeLF09El6pRBnYPF62+ixdQKwVfYPF62+
ixdQKwQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERA
REQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQETKICIiAiIg
rOybxYunokvVKJ2TeLF09El6pRBnYPF62+ixdQKwVfYPF62+ixdQKwQERYTzRU0L
5qiVkUTBlz3uDWtHKSgzRQqS72yulMVFcaSokAyWxTNeccwKmoCKPV1sFIG8K8l7
9TI2gue88gGsqPm5VX2QyiiP4gJJD0A6Lf8AcgsFg6WNhw+RjTyuAUMWmB+uqlqK
k7+FlOif6RhvuWbLVbWDwKClbzQt+CCS2aJxw2VhPEHBZqI+125/26CldzxN+C1/
RFIz/LCSmI2cBI5g9UHRPSEE9FX6FzptccsdZGPuyAMk9YajzYHOttNXwzyGFwdD
UAZMMow7HGNxHKMhBLREQEREBERAREQEREBERAREQEREBERAREQEUKW60UbzG2bh
pG7Y4GmVw5w0HHSse36h38K11bhxuMbf3dn3IJ6KD23WjP8A0yQjdiVmf3Xn0k9n
8e3VkY3kMbJ7mEn3IJ6KNT3CkqXaEM7DINsZ1PHO06wpKCjHZBPJLUCmsldURU8r
4nSxuiwS04OAXgn9Fb0lTDWUkNVTvD4ZmB7HDeCMhcRDNStddo5uyx1sca2f6hsk
II8I6wCNL9DzLqOxkuPY7QacAhxCGhgBAwNQODrGRg4PGgtEREBERAREQEREBEXj
3NYxz3EBrRkk7ggrKq+UtLeqe1yNeZJwPDGNFhOlog8p0XY5laLhhRXy7W+tr6aK
iAuErainfJK8SMazHBYABGxoO37xXXWmubcrZT1jBgSsBLfwneOg5HQgloihVtc6
KVtLSxiareMhhOGsb+Jx3D3ndvwE3I41gJonO0WysJ4g4KA20RzeHc5HVr/wv1RD
mZs/XJ5VtdaLY9ui630hHFwLfggmoqx1DUUX1lslc5o200zy5rv5XHW0/qORS6Ks
jrIi9gc1zXaL43jDmO4iP/c7UEhERARF45wa0ucQANZJ3IPVi+WNn23tbznCrmvq
Lp4UMj6ei3PbqfMOMH7reXaeTfvjtNuj1ijhc47XvaHOPO46z0oJbXNcMtIIO8Fe
qA+0UoOnSNNHL+On8DPONjukL2mq5W1Ao65rWzkZjkaMMmA244iN4/dBzt5io5ey
+cVtpnuLRQw6LYmB2h4cmSckbf7Kx7EZNKkrIwyWBkVU5sdNLnTp2Ybhpz0kYyME
YUittFVNdn19FcnUj3wshe3gWvBDS4g6/wCYqRarb2gJ3y1D6moqH6cszwAXHAAA
A1AAAakE9ERAREQVnZN4sXT0SXqlE7JvFi6eiS9UogzsHi9bfRYuoFYKvsHi9bfR
YuoFYICpuzDPcpccDJ4L+4Vyo9fRw3Chmo6kOMUzdF2icHHOg5qvfXdv2uWutVPR
QR1bczQTiR2k7LWt+y3AJdg7VfVNXLJOaSgAMw/iSOGWQg8fG7iHScb6uos8MVXB
FDU1tTVE6cfbNS+RkAG2TRJwSN2d55Mi9pKaKkgbDCCGjWSTkuJ2kneTxoMKShip
dJ40pJn/AG5n63v6eLkGoKSiICIiAiIgLRV0cFZGGTszg5a4HDmnjBGsHmW9EFay
pnoZWwV7+EheQI6nGNe5r8ageI7DyHbZLCWKOaJ8UrGvY8Yc1wyCFCo3vpKkUFQ4
uaQXU8jjkuaNrSfxD3jmKCwREQEREBERAREQEREBERAREQERV1RPNV1DqOieWBmq
ecDOh+Vv5v2/RBsqa8NmNNSRmoqRtaDhrOV7t3NrPIsBbn1GHXKcz/8A0t8GIdG1
39RPMFKpaaGkhEUDA1g18ZJ3kneeUrcgwiijhjEcMbY2DY1owB0LNEQEREGmppKe
rYG1MEcoGzTbnHNxKIaasoxmjmM8Q/0J3ZOPyv2+tnoViiCFSTUlY52IQydh+sjk
YA9h5fiNRU1Ra2iZU6MjXGKoj/hzMGtvJyg7wV5RVb5XOp6lojqoh4bRscNzm8h9
2xBLREQEREBERAREQEIBGCMgoiAAAAAMAbl41oaMNAA5F6iCNcKvtSmL2s4SVxDI
o8403nYPjxAErG30YpYnF7uEnlOnNLjBe7+wGwDcFoi/xl5kmOuGiHBs4jIRlx6A
QOlyskBERAVbcYnU0guVKwmSMYmY0fxY9+r8Q2jpG9WSIMYpGTRMljcHseA5rhsI
OwrJVttHalVUW77jPrYP5HbR0OyOQFqskBVtWDX1vaA/y8YD6n834WdO08mBvU6p
nZTU0s8pwyJhe7mAyo9rgfDRh04+vmJll/mO7o1AcgCCYAANSIiAo9bSMrKcxuJY
4EOY9u1jhscFIRBFt1S+ogImaG1ETuDmaNgcOLkIII5CFKVfP/hbtDONTKkcDJ/M
Mlh6w6QrBAREQEREFZ2TeLF09El6pROybxYunokvVKIM7B4vW30WLqBWCr7B4vW3
0WLqBWCAsZZGxRPkkcGsYC5xO4BZKBd/rY4KPdVShjhxsGXOHSGkdKD21xvdG+tm
aRNVHSIO1jPut6Bt5SVOREBEVbHe6OW+S2lunw8bNIuIGgSACWg52gOBxjegskRa
KmsgpdHhnnSf9hjQXOdzAayg3ooPDXCfXDTRwMO+d2Xeq3V/uXvA3PfW03RTO+dB
NRQf+qRaz2pUDiAdEf3cs4bhE+UQzsfTzO2RygDS/lI1HoKCWotxpTVUpbGQ2Zh0
4n/heNh5tx5CVKRBooqltXSRzBpaXDwmna1w1Fp5QQR0Leq+j+oulZTbGP0ahg/m
yHAdLc/1KwQEREBERAREQEREBERAREQQ7jUSMaynpiO2ZyWsOM6A+888gHvIG9bq
SmjpKdsMQOi3eTkknWSTvJOtRbf/AImqqa52sFxhh5GNOCel2ecBqsEBERAREQER
EBERAUO4Ur5mNmpiG1UOXROJwDxtPIdn6HcpiINNHUsq6Zk7AQHbWna0jUQeUHIW
5V8f+EvD4tkVW0yNHFI3Ad+oweglWCAiIgIiICIiAiIgLXUzspqaWolOGRML3HkA
yVsVdfPDoBB5RNHERxtLxpf7coNtogfBbIWyjEzwZJf53HSd7yVMREBERAREQV1z
+orKGtGrRl4CQ/kk1dcMVioN6jdLZ6trP4jYy9n8zdbfeApcMjZoWSs+y9ocOYoI
d1+s7VpPKJ2h38rcvP66OOlT1Ak+sv0I3Q073Hnc5oHVcp6AiIgIiIIV4idLbJ+D
GZYxwkY/M06TfeApUMjJoWSxnLHtDmnjBWagWTVa4ov/AAF0I5mOLR7ggnoiICIi
Cs7JvFi6eiS9UonZN4sXT0SXqlEGdg8Xrb6LF1ArBV9g8Xrb6LF1ArBAUCbw79St
3R08rukuYB/dT1AOrsgZn71KcdDhn9wgnoiII9fVxUFBPWVBxFBGXu5gMrjO1r9Q
2yC41NBTCSmqHV072VLjIQ7Om3Q0cfZOMaX3Qu5exkjCyRrXNO0OGQV64N0CH40c
a8oIlRW5ZFHRaEs07dKM5y0N/GeTX0rOkoo6bSeXOknf9uV/2nfAcg1LRaIw6A1h
aGmowWADGhGPsNHFq144yVYICIiAtc8EVREYp2New7QQtiIK+KSShnZT1D3SQSHR
ilcclp/C47+Q79h17bBaqmCOpp3wyjLHjBxtHKOVarbM+alxMczROMcm7LgcZ6Rg
9KDVU+BeqJ/445Y/10Xf8VPUCt13O3AbnyOPNoEf3CnoCIiAiIgIiICIiAiq7/dn
2mjZJT0xqqmV+hFAHYLzguOvB2AE7FOpKmKspIaqB2lFMwPYeMEZCDco1yndS22p
nZrdHG5zRxnGr3qSoF6/7eG7nVEDDzGVg/ugk0dO2lo4KdusRRtYDzDC3IiAiIgI
iICIiAiIgIiIIF48CCGqH2qedjxzE6Lv9rnKeoN7GbJX8lPIf9pU1hyxp4wg9REQ
EREBERAREQFX3Lwq61s46kuI5BE/++FYKvrP+727nk6qCwREQEREBERB44ZaQd6g
WEn6CoQdrYGN/QY/srAqvsP/AGiHiBcBzaRwg9h136rdnZTQt/3SH4KeoFMMXutB
3xQn3vH9lPQEREBERAUC1au3I9zKqT34d/yU9QLYcy1/pR6rUE9ERAREQVnZN4sX
T0SXqlE7JvFi6eiS9UogzsHi9bfRYuoFYKvsHi9bfRYuoFYICgVn1V1oJtzuEgPJ
pAO/dgU9RLnA+ooXth/jMxJFn8bTlvRkIJaLVSVDKqljnjzoyNDgDtHIeVbUBQ7y
SLPV6JwTC4AjdkYUxRrjC6ot1TDH9uSJzW8+NSCQ1oa0NaMADAAXq1Us7amlinZ9
mRgeM8oytqAiIgIiIChUngXSujGx3By9Jbo/8ApqgUTg6qr6kkBnCCMHdhrRn/cX
fogH62/txspqY553uGPdGf1U9QLSDLFLWvGDVv4RudzNjPcAeclT0BERAREQEREB
ERBzVVTXK59kr6ijqI6WO3x8DG6amMge9+C8jW3YA0Z17SpHYxDU25tVaap2n2tJ
pxStjLGOjf4QAGvGDpDGTsCvVArKqZ8/aVBo8ORpSSOGWwtO8jeTuH9kG+rrqaj0
RPIA5/2GNBc9/M0az0Kpu9ZWTW9z4rc9kcckcpfPIGamva7OBk7t+FaUdBBSaT26
Ukz/AOJNIcvfzni5BqG5bKyBtVRzU79TZWOYekYQR+EumM9rUZ5O2HfvoJ27URD/
ABVDIBvdC7hQOjU79AtlsqHVVugmfqkLAJB+F41OHQQQpSDVT1MNVHpwSNe0HBwd
h4jxFbVEqqFksnDwuMFSBgSsG3kcPvDkPRhe0dU6UvhqGiOpjxptB1EbnDjBQSkR
EBERAREQEREEG9nFlrG73wuYBxkjA/dTWjDQOJQbp9c+kpB/rTtc7kazwz0ZDR/U
p6AiIgIiICIiAiIgKvuPg3C1v46hzDzGJ5/cBWCr714FNBP/AOCpieTxAuDSf0cU
FgiIgIiICIiAdir7B/2Oid+OJr/11/3W27TmmtNXM3OkyFxbjecavet1JCKakhp2
/ZijawY5BhBFZ4F/mz/q0rMf0ufnrhT1Aq/qrvQTbniSA9I0h1Pep6AiIgIiICgW
fwqaaT8dTMefDyB7gpdTMynppZ5DhkTC93MBlaLVC+C10scv8QRN0/5iMn35QS0R
EBERBWdk3ixdPRJeqUTsm8WLp6JL1SiDOweL1t9Fi6gVgq+weL1t9Fi6gVggIiIK
6M/R9wMTtVNVOLozuZIdZb/VtHLnjCsVqqaeOqgfDM3LHjB3HnB3HlUSmqpaecUV
e7MhOIZiMCYcXI7jG/aN4AWCIiCvpT2lWOo36opXGSA8p1uZzg5I5DyKwWqpp46m
ExSg4OsEHBaRsIO4hRG1U1F4FwBfGPs1LG6sfnA+yeXZzbEFgixjkZLG2SJ7XscM
hzTkHpWSAiKFNcWF7oaNvbM4OCGHwWH8ztg5tvIgzr6l0EQZCA6olOjE08fGeQbS
oUsIcyOzQOLm6OlUv36JOsH8zznoyeJeOdJBOWMc2pukzduMMhb/AGb73H3T6Gkb
SQlukXyPOnJI7a9x2k/+6hgIJIAAAAwAiIgIiICIiAiIgIiINFfUijopahzS7g25
DRtcdwHKTgdK122ldS02JXB9RIdOZ4+887ejcOQBart4ctvhP2Zatuf6WuePewKw
QEREFfTntO6S07tUVVmaLkd99v7O6XcSsFGrqUVdPotdwcrCHxSAfYcNh+I3gkLy
gq+2Y3NkbwdREdGWPP2TycYO0HiQSlBucbmRtrIWkzU2XYG17PvN6R7wFORB4x7Z
GNexwc1wyCN4XqhWfwbbHGNkTnxDma4tHuAU1AREQEREBEVfXTPqJvo6lcWyOGZp
Gn+Ew/8AI7B0ncg8of8AF101cdcbcwQcoB8J3S4Y5mjjVisIomQxMiiaGsYA1rRs
AG5ZoCIiAiIgIiICIiAtFfTCsoJ6ZxwJY3MzxZG1b0QRbZUmst0FQ4aL3sGm38Lt
jh0HIUpVtF/hLnU0R1MlzUQ9J8MdDtf9askBERAREQV13+udSUY/152l38rPDPRl
oHSrFVtGe27rUVm2OAGmiPGcgyH9QG87CrJBCu8T5KB7oml0sJE0YG0uadLHTjHS
pUMjJoWSxuDmPaHNI3g7Fmq+3ntWoltztQbmSDljJ2f0k45i1BYIiICIiCBdzwsc
NENtVIGEfkHhO9wI6Qp42Kuoj25Xy13+kwGGDlGfDd0kAf053qxQEREBERBWdk3i
xdPRJeqUTsm8WLp6JL1SiDOweL1t9Fi6gVgq+weL1t9Fi6gVggIiIC11FPFUwuhn
YHsdtB/92rYiCtBrbeMFr6ymGwj+Mwco++PfzqXS1lPVsLqeVr9E4cNhaeIg6wed
b1GqaClqnB80IMjRhsjSWvbzOGsIJKKB2lWRf5a5Px+GojEgH6aLv1JT/q7fIpeX
w4/mQZyWyke90jYzE9xy58LzGSeXRIz0rz6PePs3CsA4tJp95blY5u7traGPl0nv
/sE7VuEuqe5BjeKmhDCecuLvdhBhUUdBBEZbhPI+MbTUTnRP9OdH3LFklRUxiK3Q
9qUwGOGezROPyMP7nA5CpNPbaWCUTCMyTDZLK4veOYnZ0KWg0UlHDSRlsIOXHSe9
xy554yd5W9EQEREBERAREQEREBERBX3b6t1DUH7MNU3PJpB0f7vCsFpraZlXRy00
mQ2VpaSNo5RyhabZVPqICyow2qgPBztH4uMchGsc6CYiIgKHWUbpJG1NK8R1UYw1
xHgvH4XcY/ZTEQRKSuZO8wSsMNUwZfC7bzg/eHKPcdSlkgDJWiro4KxjWzMyWnLH
gkOYeMEawVT3CS4RYtrD26J2nSLcMmZH94nY08QPg6zsOCgsrNk2yKQ/6pdKOZ7i
4fupqgRXWhGjHJL2s7YI52mM8wzjPQpwIcAQcg7wg9RFhLNFCwvmkbGwbXOOAEGa
KAbtTyaqJstY7/6G5b65w33rHtatrf8AOSiCH/wwOOT/ADP29AxzlB7UVsk0zqS3
Br5WnEkpGWQ8/G78o6cKTR0kdHDoMLnOcdJ73HLnuO0k8a2QwxQRNihjbHG0Ya1o
wAs0BERAREQEREBERAREQEREEK500k0LJqbHbVO7hIsnAcdhaeQgke/ct9HVR1lM
yeLOHaiCMFpGogjcQdS3KuqaaemqHVlvaHOf/GgJwJeUHc7G/Ydh3EBYootJcKar
JZG8tmb9uF40Xs52n99ilICg3KpkY1lLSkdtVGWx6s6A3vPIM9JwN68qLmwSmnom
9tVQ1GNh1M5Xu2NHv4gVnQ0Rpy+eoeJaqXHCSYwMDY1o3NHF07UG+lp46Sljp4QQ
yNuiMnJPKeVbURAUSvpXVDGSQODKmE6UTzszvB5CNR+IUtEEWirGVTHAtMc0ZxLE
7aw/3HEd6lKLVUMVS9suXxTsGGzRnDgOLiI5DkLVo3eLUH0dQNxcHRHpxpA+5BPV
bVzPrZnUFI8gDVUTNP8ADH4QfxH3DXxZydS19TqqqtsUW9lM0tceQvJzjmAPKpkE
EVNC2KCNscbdjWhBlFGyGJkUTQyNgDWtGwAblkiICIiAiIgrOybxYunokvVKJ2Te
LF09El6pRBnYPF62+ixdQKwVfYPF62+ixdQKwQEREBERARcxfbrXQXN0lE/FJbGM
lrWhueEDnDI2fdYC7VxhXdTcqendHH9ZLLI3SbHCwvcW8erYOVBMRVFbdXfR1Y6G
nq4ZGU8j2vkhLQCGkjaqCnu4jjoZaXsmNxrJnxNdROMLtLSI0h4DQW4BJyTu1oO2
REQEREBERAREQEREBERAREQEREBQa2jkdK2ro3NZVMGPC+zI38LuTiO0fqDORBCp
LlFPJwErXU9UBrhk1HnB2OHKFNWmppaerj4OphZK3aA4ZweMcRUT6Nli/wApcaqJ
o2MeRKP1cC73oLFFX9rXPGPpKPnFMPmXn0Vwv+draqpH4C8RtPOGAZHIcoPam45l
dTUDBU1I1EA+BHyvdu5tvIttBRdqte+WQzVMpzLKRjSO4AbmjcP7klb4IIqeJsUE
bI426gxjQAOgLYg8exr2lr2hzTtBGQVC+h7bpaTaKCM5yTG3QJ/TCkVlVDRUk1VU
PDIoWF73cQAWNBWwXCjjq6ZxdFIMjIwRuII3FBpFoos62SnkM7yP0ysorVboniRl
FTiQbHmMF36nWpmVU1V/paatlpO162aWHR0+ApXyBuRkZLRxILbCLRRVcFdSsqaZ
+nG/ODgjYcEEHWCCMYW9AREQEREBERAREQEREBERAVPNfT23NT0Ntq67td2jPJDo
BrDtwC5w0iOIZVwuZtN1obNHV2+7VMdJPFUTSAzHREzHvLw5p+9qdjAydSC9oq+m
rqCOtgf9S8Zy7wSNeCDnYQdS36bC0O024dsOdq5S6VdPWi01V1pzBaXzSGRs48An
H1TpAdgOs4O8jKgSQUtTRywUzc2iS8QNp2jUwtOjp6H5dLOMatuEHW3GKkqaUyyU
sVZwf2R4OQeQnUD0rD6HtpBD2Pe1u1kk73NH9Jdhczc6anoYuySlo4WQU4hppBFG
3RaHEuBIA1DOiP0Um411LQ1vZJDVyiOWogY6CM/alHBFvgjfrG5B1MQpaWERxCGG
NoyGtw0Acy1PuNOy6R28u+ukidKNYxgFo/XwvcuaorZRXK80ja+mjqGMs0OGyN0m
glzteOPlUKxR0LbjY5quOn4aSgkZDJK0ZdI2RoYATtcG5xvwg7sSMMhjD2l41lud
Y6E02aehpt0wM6Oda4KhFv7UtYpw3uiFVH2zgfXZ0vrdPfoaOljOr7ONyROpaPsi
zG6hrZnV5Ba9ro66NznY2j7bACTr1EIO/JABJIAG8qvN1Yaqpp4YXyvpxE4lrmgO
EhIyCTuwT+2VC7Lgw2+n7ZaXUIqozWDdwWvbyaWjnkXMu+jNO+mz8H2qZrdjgh9X
nhtejuxzas5QfQTIwPDC9ukRkNzrWuGfhDJps4LRkLG6TmnT5Rg+461w1yfSUfZB
VTaVDWT9tMdwE7XR1bT4OBE8a3N2EbtoUqaRkDJ6mV2jDBfw+V52MbogZPEMkIOz
L2DOXtGNuvYotwuVNb7fUVszw6OnaXPDSCdW7nXIXOemuMPZG+nkEsEj6Noew6nD
SAJB3jlC87I7XQ0pu9NR0UMcTrTw3BsjGNNriA7H4gN+1B3JmiEYe6RgYdji4YK9
e9jG6T3taOMnC4+pNgN3gdXCi+hzRjtLSDe19PTdp4+7pY0cb9uN6r54ozabVJV1
NNE1rqgU0d0iL4Hxl3gaZP2XaIGCde1B9CRVPYvO2osNO+OAQMGkxrWvL2kBxALS
deicZHIQrZAREQVnZN4sXT0SXqlE7JvFi6eiS9UogzsHi9bfRYuoFYKvsHi9bfRY
uoFYICIiAiIg5uk7FaSeGae7xvkrKp7nz8HUSNbrOpuGkAgNwNm5ZW233S1sjLWw
1OhGKYh0miTGxzjG4HG3DsEe9dEiCpqvpGtoaqlkoooeGgexr+H0tZaQNWFVPtt3
rbdBbZ7bQUzGiMOqW1Be5ujjwmt0B4WrVr1Lq0QAiIgIiICIiAiIgIiICIiAiIgI
iICIiAiIgIiICIiDneymWeeWitdJTGqfLIJ54g8NzEwg4JOrW7RHKMqBS11bbXXO
lnp+0DLI2pg0ntkEbHva2V2Rq8Ekvx+bWut4CHtk1AiZwxYGGTR8ItBzjPFkleSU
0EsrZZIY3SMBa1zmgkA7RniOEFHJbm1dzjp211c+KFgmldw51uJ8AatW5x1cQ41F
jir+6O7toblT0zW8AHcPBwpd9XtzptVvF2O2aLTxbaU6bi45iB/9CzqLDZ6qTham
10csmA3SfC1xwNQGSOJBD7EXH6MmY97ZZGVUokmYfBmeXZLxxDJxjcQVerCCGKnh
ZDBGyONgw1jGgADkAWaAiIgIiICIiAiIgIiICIiAsXRsfjSY12NmRnCyRB45rXDD
mgg7img3AGiMDYMbF6iCvu9sN0pxTGoMMTnAzBjATI0HOjk7FOLGuwXNBI2EhZIg
8DWg5AAOMLzg2avAbq2atiyRBjoMDi4NGkdpxrKaDNLT0RpceNayRAIBGCMhYiOM
DAY3GrdxLJEGD4w7LgGh+MNcRnCh2q2i300sck7qiSeV0ssj2gaTjjOoagMAKeiD
Hg2AY0G45l7otznAzjGV6iDHg4y0NLG6I2DGoL1zGuGHNDhxEZXqIAAAwBhERARE
QVnZN4sXT0SXqlE7JvFi6eiS9UogzsHi9bfRYuoFYKvsHi9bfRYuoFYICIiAiIgI
iICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICI
iAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiIKzsm8WLp6JL1Sidk
3ixdPRJeqUQZ2DxetvosXUCsF8/tX/yJaaS00dNJS1pfDAyNxaxmCQ0DV4Sld8yz
+SV/qM+ZB2yLie+ZZ/JK/wBRnzJ3zLP5JX+oz5kHbIuJ75ln8kr/AFGfMnfMs/kl
f6jPmQdsi4nvmWfySv8AUZ8yd8yz+SV/qM+ZB2yLie+ZZ/JK/wBRnzJ3zLP5JX+o
z5kHbIuJ75ln8kr/AFGfMnfMs/klf6jPmQdsi4nvmWfySv8AUZ8yd8yz+SV/qM+Z
B2yLie+ZZ/JK/wBRnzJ3zLP5JX+oz5kHbIuJ75ln8kr/AFGfMnfMs/klf6jPmQds
i4nvmWfySv8AUZ8yd8yz+SV/qM+ZB2yLie+ZZ/JK/wBRnzJ3zLP5JX+oz5kHbIuJ
75ln8kr/AFGfMnfMs/klf6jPmQdsi4nvmWfySv8AUZ8yd8yz+SV/qM+ZB2yLie+Z
Z/JK/wBRnzJ3zLP5JX+oz5kHbIuJ75ln8kr/AFGfMnfMs/klf6jPmQdsi4nvmWfy
Sv8AUZ8yd8yz+SV/qM+ZB2yLie+ZZ/JK/wBRnzJ3zLP5JX+oz5kHbIuJ75ln8kr/
AFGfMnfMs/klf6jPmQdsi4nvmWfySv8AUZ8yd8yz+SV/qM+ZB2yLie+ZZ/JK/wBR
nzJ3zLP5JX+oz5kHbIuJ75ln8kr/AFGfMnfMs/klf6jPmQdsi4nvmWfySv8AUZ8y
d8yz+SV/qM+ZB2yLie+ZZ/JK/wBRnzJ3zLP5JX+oz5kHbIuJ75ln8kr/AFGfMnfM
s/klf6jPmQdsi4nvmWfySv8AUZ8yd8yz+SV/qM+ZB2yLie+ZZ/JK/wBRnzJ3zLP5
JX+oz5kHbIuJ75ln8kr/AFGfMnfMs/klf6jPmQdsi4nvmWfySv8AUZ8yd8yz+SV/
qM+ZB2yLie+ZZ/JK/wBRnzJ3zLP5JX+oz5kHbIuJ75ln8kr/AFGfMnfMs/klf6jP
mQdsi4nvmWfySv8AUZ8yd8yz+SV/qM+ZB2yLie+ZZ/JK/wBRnzJ3zLP5JX+oz5kH
bIuJ75ln8kr/AFGfMnfMs/klf6jPmQdsi4nvmWfySv8AUZ8yd8yz+SV/qM+ZB2yL
ie+ZZ/JK/wBRnzJ3zLP5JX+oz5kHbIuJ75ln8kr/AFGfMnfMs/klf6jPmQdsi4nv
mWfySv8AUZ8yd8yz+SV/qM+ZB0fZN4sXT0SXqlFyF5/+Q7TW2atpI6WtD54HxtLm
swCWka/CRB//2Q==
---END_DATA---
%/
| source file:|{{{C:\Documents and Settings\User\Desktop\exemplo.jpg}}}|
| attached on:|1 March 2009 by Professor|
| description:|attached by FileDropPlugin|
| embedded:|[[exemplo.jpg|exemplo.jpg]] - {{{type=image/jpeg, size=15694 bytes, encoded=21255 bytes}}}|
| local file:|/%LOCAL_LINK%/[[C:\Documents and Settings\User\Desktop\exemplo.jpg|C:/Documents and Settings/User/Desktop/exemplo.jpg]]|
| remote link:|//none//|
image
<<<
usage: {{{[img[tooltip|exemplo.jpg]] or [img[tooltip|exemplo.jpg][link]]}}}
[img[tooltip|exemplo.jpg]]
<<<

/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/jpeg;base64,
/9j/4AAQSkZJRgABAQEAlgCWAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkS
Ew8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAGs
AkUBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgED
AwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2Jy
ggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1
dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJ
ytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/AH+APgt4W8Te
BtL1m/k1EXV1GzSCKdVXIdhwNp7AV0n/AAzz4K/566r/AOBC/wDxFH/DPPgr/nrq
v/gQv/xFH/DPPgr/AJ66r/4EL/8AEUf8M8+Cv+euq/8AgQv/AMRR/wAM8+Cv+euq
/wDgQv8A8RR/wzz4K/566r/4EL/8RR/wzz4K/wCeuq/+BC//ABFH/DPPgr/nrqv/
AIEL/wDEUf8ADPPgr/nrqv8A4EL/APEUf8M8+Cv+euq/+BC//EUf8M8+Cv8Anrqv
/gQv/wARR/wzz4K/566r/wCBC/8AxFH/AAzz4K/566r/AOBC/wDxFH/DPPgr/nrq
v/gQv/xFH/DPPgr/AJ66r/4EL/8AEUf8M8+Cv+euq/8AgQv/AMRR/wAM8+Cv+euq
/wDgQv8A8RR/wzz4K/566r/4EL/8RR/wzz4K/wCeuq/+BC//ABFH/DPPgr/nrqv/
AIEL/wDEUf8ADPPgr/nrqv8A4EL/APEUf8M8+Cv+euq/+BC//EUf8M8+Cv8Anrqv
/gQv/wARR/wzz4K/566r/wCBC/8AxFH/AAzz4K/566r/AOBC/wDxFH/DPPgr/nrq
v/gQv/xFH/DPPgr/AJ66r/4EL/8AEUf8M8+Cv+euq/8AgQv/AMRR/wAM8+Cv+euq
/wDgQv8A8RR/wzz4K/566r/4EL/8RR/wzz4K/wCeuq/+BC//ABFH/DPPgr/nrqv/
AIEL/wDEUf8ADPPgr/nrqv8A4EL/APEUf8M8+Cv+euq/+BC//EUf8M8+Cv8Anrqv
/gQv/wARR/wzz4K/566r/wCBC/8AxFH/AAzz4K/566r/AOBC/wDxFH/DPPgr/nrq
v/gQv/xFH/DPPgr/AJ66r/4EL/8AEUf8M8+Cv+euq/8AgQv/AMRR/wAM8+Cv+euq
/wDgQv8A8RR/wzz4K/566r/4EL/8RR/wzz4K/wCeuq/+BC//ABFH/DPPgr/nrqv/
AIEL/wDEUf8ADPPgr/nrqv8A4EL/APEUf8M8+Cv+euq/+BC//EUf8M8+Cv8Anrqv
/gQv/wARR/wzz4K/566r/wCBC/8AxFH/AAzz4K/566r/AOBC/wDxFH/DPPgr/nrq
v/gQv/xFH/DPPgr/AJ66r/4EL/8AEUf8M8+Cv+euq/8AgQv/AMRR/wAM8+Cv+euq
/wDgQv8A8RR/wzz4K/566r/4EL/8RR/wzz4K/wCeuq/+BC//ABFH/DPPgr/nrqv/
AIEL/wDEUf8ADPPgr/nrqv8A4EL/APEUf8M8+Cv+euq/+BC//EUf8M8+Cv8Anrqv
/gQv/wARR/wzz4K/566r/wCBC/8AxFH/AAzz4K/566r/AOBC/wDxFH/DPPgr/nrq
v/gQv/xFH/DPPgr/AJ66r/4EL/8AEUf8M8+Cv+euq/8AgQv/AMRR/wAM8+Cv+euq
/wDgQv8A8RR/wzz4K/566r/4EL/8RR/wzz4K/wCeuq/+BC//ABFH/DPPgr/nrqv/
AIEL/wDEUf8ADPPgr/nrqv8A4EL/APEUf8M8+Cv+euq/+BC//EUf8M8+Cv8Anrqv
/gQv/wARXjPxe8F6V4G8TWen6S1w0E1mJ289wx3F3XggDjCivob4P/8AJKNA/wCu
T/8Aox67iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
iiiiiiiiiiiiiiivmT9pD/ketM/7Bi/+jZK9j+D/APySjQP+uT/+jHruKKKKKKKK
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK+
ZP2kP+R60z/sGL/6Nkr2P4P/APJKNA/65P8A+jHruKKKKKKKKKKKKKKKKKKKKKKK
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK+ZP2kP8AketM/wCw
Yv8A6Nkr2P4P/wDJKNA/65P/AOjHruKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK+ZP2kP+R60z/sGL/wCjZK9j+D//
ACSjQP8Ark//AKMeu4oooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooor5k/aQ/5HrTP+wYv/o2SvY/g/wD8ko0D/rk//ox6
7iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
iiiiiiiivmT9pD/ketM/7Bi/+jZK9j+D/wDySjQP+uT/APox67iiiiiiiiiiiiii
iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiivmT9pD/
AJHrTP8AsGL/AOjZK9j+D/8AySjQP+uT/wDox67iiiiiiiiiiiiiiiiiiiiiiiii
iiiiiiiiiiiiiiiiiiiiiiiiiivK9W+PvhXRtZvtLuNP1lp7K4kt5GjhiKlkYqSM
yA4yPQVXg/aK8GzXEUT2mswI7hWlkt4yqAn7x2yE4HXgE+gNeoaVqtjrml2+p6Zc
x3NncJvilTow/mCDkEHkEEHBFXKKKKKKKKKKKKKKKKK+ZP2kP+R60z/sGL/6Nkr2
P4P/APJKNA/65P8A+jHruKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
KKKKKKKK8f8AhB/yUP4nf9hUf+jbivXJ4Ibq3lt7iKOaCVCkkcihldSMEEHggjjF
eR/A79xqPjex0/nw9Bqp/s9k+eM5Lg7ZOd/yLD3PGD/Fk+wUUUUUUUUUUUUUUUUV
8yftIf8AI9aZ/wBgxf8A0bJXsfwf/wCSUaB/1yf/ANGPXcUUUUUUUUUUUUUUUV5P
8XNcv7nXPDXgnQr++stT1G7Sae5snkV4YPmTJC43Ly7H5hjyueoIufBPxRc654Tu
NK1WS7bWtHuGhu/tbu8rBmZlLFhkEHem3JI8vnGQK9Mooooooooooooooooooooo
ooooooooooor5w8NeD9Y8V/EPx//AGT4tvtA+zaq/mfZA/7/AHSzYztkT7u09c/e
PSuj1X4J+KtR0u4tZ/iXqV+jpkW12spikYcqGzK2BuA52nHXBxWp8H9SuNHvNW+H
2r2djbatpG2ZZLOMKLqIhR5jbVALAGL5jhmDLkZVifWKKKKKKKKKKKKKKKKK+ZP2
kP8AketM/wCwYv8A6Nkr2P4P/wDJKNA/65P/AOjHruKKKKKKKKKKKKKKKK8b+Gom
8a/E3xJ48nkjn0+3dtO0slCQFBHzIGO6M7ME8DJnfpyKLwTeA/2gbW7EkcOi+LE8
p0VCFFwAAPlU8uZNh3sMfv39zXslFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFfOHh
r4j6P8P/AIh+P/7Wtr6b7dqr+X9kRGxslmzncy/3x0z3rq5/2kPCq28rW+lazJOE
JjSSOJFZscAsHJAz3wcehrQ+Gmia1qXjHXviB4g02TSrjUkFta2LEhliXaCXVhnP
7uMA8Z+Y7QCteqUUUUUUUUUUUUUUUUV8yftIf8j1pn/YMX/0bJXsfwf/AOSUaB/1
yf8A9GPXcUUUUUUUUUUUUUUV5/8AGfxJ/wAI58Nb/bHvm1L/AIl8eVyq+YrbieRj
5A+Dz823jGa4vw98D/E2naNAtv4/1LRnmRZp7K1jYLHKVG4EpMAxGMbu+BWZ49+D
fiCDwvd6xeeNL7XpNNiaZLe7jbhMgyEM8rbcKC3A52gdcV7P4H8Sf8Jd4L0vXDH5
cl1F+9QLgCRSUfaMn5dytjJzjGea6Ciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
iiiiiiiiiiiiiiiiivmT9pD/AJHrTP8AsGL/AOjZK9j+D/8AySjQP+uT/wDox67i
iiiiiiiiiiiiiiuL8TeAW8UeNfD+u3OsSRWejOJorFLdcvKG3bvMzkAlYwRg8KcE
E5rtKK4v4eeAW+H9vqdjDrEl7p9zcefbwyW6o0Bxg5cH5yVCDoB8uQBk12lFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFfMn7SH/I9aZ/2DF/8A
Rslex/B//klGgf8AXJ//AEY9dxRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
RRRTZJEiQvI6oo6sxwKqy6vpkJAl1G0jJ6B51Gf1pi65pLsFXVLJmJwALhCT+tW4
riCYkRTRyEdQjA4qSiiiiiiiiiiiiiiiiiiiiiiiivmT9pD/AJHrTP8AsGL/AOjZ
K9j+D/8AySjQP+uT/wDox67iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiisTW
/GHh7w6duqatbQTH7sG7fK30jXLH8BWKPGOv6qf+Kf8ABt68J6XWqyrZp9Qhy5H/
AAEU7+yfH2p/8f3iTTdJQ9Y9LsvNbH/XSY/qFo/4V1BOMah4m8T3wI+ZJNSaND/w
GMKKevws8Eht76BDO/8AfuZZJmP4uxNW4vh54MiYsvhbRySMfNZo38xT5PAHg6Vd
reFdFA/2bGNT+YFVJfhf4ImOW8NWCnGAY0MeP++SOfeof+FZ6PB/yDNR13Sx6Weq
zAduzMw7Uf8ACL+K9O50nxtPOg5EOr2kc4b6umxh+tL/AG1430sf8TPwvaalEOWm
0e8w2PaKUKSfYMas6f8AEPw3e3Qsp7x9Mvz/AMumpxNbSZ9AHwG/AmupBBAIOQeh
FFFFFFFFFFFFFFFFFFFFFfMn7SH/ACPWmf8AYMX/ANGyV7H8H/8AklGgf9cn/wDR
j13FFFFFFFFFFFFFFFFFFFFFFFFBIAJJwB1JrnNT8feFNIk8q716yE2ceTC/nSZ/
3Ey36Vn/APCwHuR/xLPCPiW9B+5IbMQRsPXMrKcfhSjXvHNzxb+Cra1H9691ZM/l
GrfzpBN8SnRcWXhSInGd11cMQO/AjGfzp5/4WRg4HhQntn7RTftPxJiCFtM8MTcg
MsV7OpP/AH1Hx+tJ/wAJJ4ytj/pngRpVHWSw1SKTPuFcIaT/AIWRZWw3avoPiLSo
x96a505njX/gUe4Vt6R4t8O69gaXrVjdOf8AlnHMu/8AFeo/KtmiuV1Xx3ZW2oPp
OjWs+uauvDWtjgrD/wBdZD8sY+pz7VUGg+K/EXzeINZGlWbc/wBnaMxDkej3BG4+
hCBR71uaJ4T0Dw6D/ZOlW1s5+9MqbpW/3nOWP4mtmiiiiiiiiiqmoaZYatam21Gy
t7yA9Y7iIOv5EVyp8BzaMxm8HazcaRg5+wzZuLN/by2OUz6oR9KB42v9BZYvGekH
T4ydo1SzYz2bH/aON8Wf9oY967G3uILu3S4tpo5oZBuSSNgysPUEcGpKKKKKKKKK
KKKKKKKKK+ZP2kP+R60z/sGL/wCjZK9j+D//ACSjQP8Ark//AKMeu4oooooooooo
ooooooooooorB1zxlofh+Vba8vN98/8Aq7G2UzXEh7YjXJ/E4HvWT/aHjnXhnT9N
s/D9o33ZtSPn3JHqIUIVT7Mx+lH/AArmz1FhJ4m1bU9fkzkx3M3lW4PtDHtX8810
mmaDpGix+Xpel2dkuMf6PAqZ+uBzWhRRRRRRWNq3hLw7ruTqmi2F05/5aSQLv/Bs
ZH51x2v6XB4FtFudJ8Xajpgdttvpk4N+k7do44m/eZJx91uKxru98d6jFbS+MtMv
7TQHjzNDoA/fN/12AYyKuOoQ/WvQ/CF14Wm0dYfCklj9ij6xW2FKH/bX7wb/AHua
6CiiiiiiiiiiiiimuiyIyOoZGBDKwyCPQ1xl14HuNHnkv/BV8NKnY75NPkBaxnPu
n/LMn+8mPpVzQfGkOoX/APY2r2kmj68oybK4YESj+9C/SRfpyOciupoooooooooo
oooooor5k/aQ/wCR60z/ALBi/wDo2SvY/g//AMko0D/rk/8A6Meu4ooooooooooo
oooooooorH1/xPpXhuGNr+djPMdtvawoZJ529EQcn+Q7kVz5tfFvi/m8lk8M6O3/
AC727hr6Yf7Ug+WIey5brzXQaF4W0Tw1CyaTp8Nuz/6yXG6WQ+rOcs34mtiiiiii
iiiiuW8Q+LJba/Gg+H7ZdS8QSKG8rOIrVT/y0nYfdX0X7zduuaf4d8HQaTdNq2pX
Dapr8y4mv5x90f3Il6Rp7D8c101c7rfgjRNbuftrQPZ6ov3NRsXMNwp/3l+99GyP
ask6v4p8I/Lrlq2vaSv/ADErCLFxEPWWEfe92T06V1Wkaxp2vadHqGl3kV3ayfdk
jORnuCOoI9DyKvUUUUUUUUUUUUUVl674e0vxJYfZNUtVmRTujcHa8TdmRhyre4rm
YNa1PwRcR6f4ouHvNGdglrrjDmPPRLnHQ9hJ0PGcGu5VldQykFSMgg8EUtFFFFFF
FFFFFFFFfMn7SH/I9aZ/2DF/9GyV7H8H/wDklGgf9cn/APRj13FFFFFFFFFFFFFF
FFFFFcXqPivUdY1KfRfBsMNxcQtsu9Unyba0PdRj/WSD+6OBxk9RWl4e8H2WhTyX
80suo6zOMXGpXfzSv/sr2RPRVwPrXRUUUUUUUUUUVyPiHxDfXWpnwx4YKNq7KGur
tl3RadGf429XP8Kd+p466/h3w5YeGtO+yWSszu3mXFzKd0txIeru3Uk/p2rXooor
ktW8GMmoya14YuxpGsP80oC7ra79pox1P+2MMM96n0DxaL+/fRdYtDpevRLua1ds
pOv/AD0hf+Nf1HcV01FFFFFFFFFFFFFR3FvDd28lvcRJNDIpR45FDKwPUEHqK4RH
n+Gt0sUzST+DpnxHKxLNpbE8Kx6mEnof4eh4rvkdZEV0YMjDKspyCPUUtFFFFFFF
FFFFFFfMn7SH/I9aZ/2DF/8ARslex/B//klGgf8AXJ//AEY9dxRRRRRRRRRRRRRR
RRSMyopZmCqBkknAArg5LzUfiHNLbaTcy2HhdHMc+oRHbNfkcMkJ/hj7F+p6Dua7
LTNLsdG06HT9NtY7a0hXbHFGMAD+p9+pq3RRRRRRRRRRXL+K/EN1Zy2+haGqTeIN
QB8kNyttH0aeT/ZXsP4jgetaPhzw9aeGtKWyti0kjMZbi5k5kuJT96Rz3JP5dO1a
9FFFFFZHiHw3p/iWxW3vUdZIm8y3uYW2TW8nZ426qf5981i6Pr+o6Pq0PhvxW8bX
M3Gn6oi7I74D+Fh0SUD+Hoe1djRRRRRRRRRRRRRTJoYriF4Zo0kikUq6OMqwPBBB
6iuF02WT4f63DoV27N4bv5Nul3DnP2SU8/ZnP90/wE/7td7RRRRRRRRRRRRRXzJ+
0h/yPWmf9gxf/Rslex/B/wD5JRoH/XJ//Rj13FFFFFFFFFFFFFFFFFcDcyTfEXUp
9PtpXi8J2khju54yQ2oyA/NEjDpEDwzD7x4HGTXdQQRW1vHBBEkUMahEjRQFVRwA
AOgqSiiiiiiiiiisrxHr1r4a0O41O6DOIwFjhT780h4WNR3LHArN8HaBc6db3Gra
wVk1/U2Et44OREP4IU/2UHHucnvXT0UUUUUUVn63olh4h0qbTdSh823k54OGRh0Z
T1DA8giud8P6zqGkayvhTxHP510UL6bqLDAvol6q3pKo6juOa7Kiiiiiiiiiiiii
qOsaRZa9pNzpmowia1uEKOh/Qg9iDyD2IrnfBerXkM914U1uYyavpagxzt1vLY8J
MPU/wt6MPeuwoooooooooooor5k/aQ/5HrTP+wYv/o2SvY/g/wD8ko0D/rk//ox6
7iiiiiiiiiiiiiiiiuL8S3t34h1k+DtHnaAeWJNXvYz81tC3SND2kcZx6Lk+ldXp
9ha6Xp9vYWMCQWtugjijQcKoqzRRRRRRRRRRRXC2ajxl49nv5Mvo3h6QwWin7k17
/wAtJPfYCFHuWIruqKKKKKKKKKx/Evh218TaQ1lO7wyowltrmPiS3mXlZFPYg/mM
jvVDwh4gu9RW70jWkSLXtMYR3Sp92ZSPkmT/AGWH5HIrp6KKKKKKKKKKKKK5Hx3p
V09nB4i0iMnWtGJnhVes8X/LWE+oZc49wMV0Wk6paa3pNpqdjJ5lrdRLLG3sR39D
2Iq5RRRRRRRRRRRXzJ+0h/yPWmf9gxf/AEbJXsfwf/5JRoH/AFyf/wBGPXcUUUUU
UUUUUUUUUVg+LfEJ8OaL58EP2nULiRbaxtc8zTvwq/TuT6A0eEvDv/CO6P5U8/2r
UbmQ3F/dHrNM33j9B0A7ACt6iiiiiiiiiiiub8c61c6L4bb+zsHVL6VLGwB/57SH
AP8AwEZb/gNaHh3Q7fw34fstItSWjto9pdusjHlnPuzEk/WtSiiiiiiiiiiuP8aa
VeQTWvizRYjJq2lqRJAvW8tTzJCff+JfRh710mlapaa1pNrqdjKJbW6jEsbeoPr6
H1FXKKKKKKKKKKKKKK4nw0v/AAjPjHUvCvSwulbVNMHZAzYmiHsrkMB6P7V21FFF
FFFFFFFFfMn7SH/I9aZ/2DF/9GyV7H8H/wDklGgf9cn/APRj13FFFFFFFFFFFFFF
FcNpOfFnj671tgG0vQy9jYeklwcefKPpwgP+9Xc0UUUUUUUUUUUVxRH/AAkXxTAP
zWXhu3z7Ndzj9dsf5F67WiiiiiiiiiiiiuH8Oj/hFPGV74Xc7dO1DfqGk54CknM8
I+jHeB6MfSu4ooooooooooooorjPiJFJZafYeKbZC1xoNyLlwvV7ZvknX/vg7v8A
gArsIpUnhSWJg8bqGVh0IPINPoooooooooor5k/aQ/5HrTP+wYv/AKNkr2P4P/8A
JKNA/wCuT/8Aox67iiiiiiiiiiiiiiud8ca1NoXhS7uLTnUJ9trZIOrTyHYmPoTn
6A1d8NaJD4b8N6fo8GClrCELf326s31LEn8a1aKKKKKKKKKKKZLKkMTyysFjRSzM
egA5JrkfhrG83heTWplKz63dzaiwPZXbEY+gjVK7GiiiiiiiiiiiiuS+IdlO/h1N
YsY9+oaJMuowAdXCf6xPo0ZcY+ldLYXsGpafbX1q++3uYlmib1VhkH8jViiiiiii
iiiiiioby1ivrG4s513QzxtFIvqrDBH5GuX+Gt3LL4LtrG6bN3pUkmmz/wC9CxQf
moU/jXXUUUUUUUUUUV8yftIf8j1pn/YMX/0bJXsfwf8A+SUaB/1yf/0Y9dxRRRRR
RRRRRRRRXF6oP7a+KOkacctbaNaPqUq9VMzny4s+4HmMK7SiiiiiiiiiiiiuU+JV
3JZ/DnW2hOJZrf7NHj+9KwjH/oddHYWcWn6da2UIAit4kiQDsqgAfyqxRRRRRRRR
RRRRSEBlKsAQRgg964z4dk6db6x4Zcn/AIkt+8UCtyRbSYki/RiP+A12lFFFFFFF
FFFFFFcZ4bAsfiN4v08fLHP9l1CNexLoY3P/AH1GPzrs6KKKKKKKKKK+ZP2kP+R6
0z/sGL/6Nkr2P4P/APJKNA/65P8A+jHruKKKKKKKKKKKKKK4zwKP7Q1LxR4gflr3
U3toj28m3HlL+bBz+NdnRRRRRRRRRRRRXGfETM0Phuw/gvNetUkHqqbpT/6LFdnR
RRRRRRRRRRRRRXFzD+yfi9ayLxDrumPE4Hea3YMCf+ASMPwrtKKKKKKx9H8U6Nr2
o6pYaZeefdaXL5N4nlOvlPlhjLAA8o3TPStiiiiiiiuNu/8ARPjDpko/5f8ARp4G
+sUqOP8A0NvzrsqKKKKKKKKKK+ZP2kP+R60z/sGL/wCjZK9j+D//ACSjQP8Ark//
AKMeu4ooory/Wfj54K0jUXs4mvtS2ZDTWMStGGBIIDOy7umcrlSCME10ngz4jeHP
HSOukXMi3cSb5bO4TZKi7iM4yQw6cqTjcucE4rrKKKKKKKgvbpLGwuLuT/VwRNK3
0UEn+Vc38M7V7X4caGJf9ZPb/an92lJkP/oddXRRRRRRRRRRRRXG+Mf3vivwRbf3
tUklx/uW8h/rXZUUUUUVwfiv4v8AhDwlcG0uLyS+vFfbJbWCrK0XLA7iSFBBXBXO
4ZHGOa0PBnxG8OeOkddIuZFu4k3y2dwmyVF3EZxkhh05UnG5c4JxXWUUUUUUVxvj
kfZdW8I6qvW31hLdj6JOjxH9StdlRRRVPVdVsdD0u41PU7mO2s7dN8sr9FH8yScA
AckkAZJrzeH9oLwRLqhtHOpQwB2X7a9sDEQM4bCsXwccfLnkZA5xn/BmeG68dfEm
4t5Y5oJdTV45I2DK6mW4III4II5zXslFFFFFFcb4h+T4m+C5P70d/F+caN/7JXZU
UUUUUUUUUV8yftIf8j1pn/YMX/0bJXsfwf8A+SUaB/1yf/0Y9dxRRWP4q0qz1vwv
qOnajfz2FjNEftFzBMImSMHc2WIICkAhs8bSa8vsfir8Nvh1Zx+HNDivr23gyZLm
ziRxJLkhmZ2Zd7HaDuUFcbQpwABzmg63D4i/aI8P6pb+HJNDguLeeSNZIgjXitHO
wuDhQCXB65b7v3jX0XRRRRRRXO+PpvI+HniSTOCNMuAD7mNgP51paDF5Hh3TIf8A
nnaRL+SAVoUUUUV5v8OPFOs694y8d2Gp3nn2ul6gIbNPKRfKTzJhjKgE8IvXPSvS
KKKKKKK43xf+68XeCLj+7qU0X/fdvIP6V2VFFFFZfiXUptG8K6vqlusbT2VlNcRr
ICVLIhYA4IOMj1Fed/Afw9bweED4puG+1avrEsry3UoJkCCQrs3EnOWQuTxkkZzt
BroNa+HSah8RdJ8Z6fqX9nX1nhblBarILpBkEE5GGKMyFju424xt57iiiiiiiuN+
KPyeBpp+9veWco/C5j/oTXZUUUV5H8bZ5r698HeFGlki0/W9TCXjQsVcqrxqAO2P
3hbBB5VT259E/wCEV0L/AIRf/hGv7Mg/sbyvJ+yYO3bnOc9d2fm3Z3bvmznmvJ/g
Fpn9ieIfHek+d532G7htvN27d+x513YycZxnGTXuFFFFFFFcb4iO74l+Co89Fv5f
yiVf/Z67KiiiiiiiiiivmT9pD/ketM/7Bi/+jZK9j+D/APySjQP+uT/+jHruKKK4
/wCKdjqmpfDPW7TRo55b6SJQscDYd0DqZFHrlAw2j72cYOcVwfw6+I/wy8M+DtPt
1uI9N1BrdFvh9ilaSWVc7mZ1VtwLFivPAbGB0GBoPi+bxx+0R4f1g6fJZ2Zt54rE
SKQ0kKxz/OT0JLbx8vAxtySCT9F0UUUUUVyfxP3/APCsvEWzr9if8u/6V01ptFnB
s+75a4+mKmoooor5k0FvFeo/Ffxn4c8L38enDUNTnlv73aC8MEcsikpnnOZeNuGz
t+ZRk10eqx+PfhFqNlrFz4jvvEnhqSWNdRM6GR4hkjAV3JXIb5WDAFgA38O73SCe
G6t4ri3ljmglQPHJGwZXUjIII4II5zUlFFFFcb8Qf3LeFrw8Lb6/bbz6K4eP+biu
yooooqnq2mw6zo19pdw0iwXtvJbyNGQGCupUkZBGcH0NeJ/Dz4j2Xw+gu/AvjIfY
JNIlkWC7jikdJgzliCAu7nduVsAFSOhA3dBbfEHUfHfxF03TfBVzOmgWH77Vr82y
lJlOCsYEgDLnaUBBDHcxAITJ9Yoooooorjvirj/hWmseu2Lb/veamP1xXY0UUV5f
8avDWqano+leINBWeTV9CuxNBDDH5jMGZclUCncyssZ542h854qv/wANA+Ef+EX/
ALR/f/2t5Wf7K8t93mZxt83bs2553ddv8OflrH+AV1eX3iHx3eajb/Z76e7hluId
hTy5Gecsu08jBJGDyK9woooooorjL8/avjFo0K/8uWj3Nw3/AG0kjQf+gn8q7Oii
iiiiiiiivmT9pD/ketM/7Bi/+jZK9j+D/wDySjQP+uT/APox67iiiisOfwX4Vuri
W4uPDWjTTyuXkkksImZ2JySSVySTzmtC80nTdQuLW4vdPtLme0ffbSTQq7QtkHKE
jKnKg5HoPSrlFFFFFFc74+i8/wCHfiRMZP8AZlwR9RGx/pWloUvn+HtNm/56WsTf
mgNaFFFFFeN/CGeFfiX8S7dpYxO+pl0jLDcyrNOGIHUgFlBPbcPWtz4631vafCjU
oZ5Nkl3LBDANpO9xIshHHT5UY8+nrius8FwTWvgXw9b3EUkM8WmWySRyKVZGESgg
g8gg8YrcoooorkfifbyT/DjWXhH762iW7Q+hidZM/wDjldRaXMd7ZQXURzHNGsiH
1BGR/OpqKKKKz9T0LR9b8r+1tKsb/wAnPl/a7dJdmcZxuBxnA6egqxY2FnplnHZ2
FpBaWsedkMEYjRckk4UcDJJP41YoooooorjPikd3gSeDvPeWcQ/G5j/pmuzoooor
Lh8NaDbaodUg0TTYtQLs5u0tUWUs2dx3gZycnJzzk1Ys9J03T7i6uLLT7S2nu333
MkMKo0zZJy5AyxyxOT6n1q5RRRRRRXGaDi++J3iy9PzLaQ2lhG3phWlcfnItdnRR
RRRRRRRRXzJ+0h/yPWmf9gxf/Rslex/B/wD5JRoH/XJ//Rj13FFFFFFFFFFFFFV7
+0S/0+5s5PuXETRN9GBB/nXOfDS7e8+HGhNL/rIbYWz/AO9ETGf1Suroooorw9/g
r4g/4S3XPE9n4gg07U31CS80t4NzjDNISkoKjGdyA43DG8FWyK0LD4VeJfEXiG21
T4j6/BqcdhsNpa2ir5bneGYSKY1XacAEBcsCMkBQD7BRRRRRUVzbxXdrNbTqHimR
o3U91IwR+Vcr8NLiU+DYtMuX3XWjzy6ZMfeJiq/mmw/jXX0UUUUUUUUUUUUVxnjw
fbNS8JaSvJudZjnZfVIEeU/qq12dFFFFFFFFFFFFMmmjt4JJ5WCRRqXdj0AAyTXJ
fDSGRvCI1adCtxrNzLqcgPYStlB/3wErsKKKKKKKKKKK+ZP2kP8AketM/wCwYv8A
6Nkr2P4P/wDJKNA/65P/AOjHruKKKKKKKKKKKKKK4vwEfsF94n8PvgNYao88QHaG
4Hmp+pcfhXaUUUUUUUUUUUUUVxVof+Ee+KN3aMdtn4ig+1QeguoQFkUf7ybW/wCA
mu1ooooooooooooorjLj/ia/F2yiXmLQ9MkncjtLcMEUH/gEbH8a7Oiiiiiiiiii
iiuQ+It3M+gw6BZuVvtenGnxkclI25lf6LGG/MV1VrbRWdpDawIEhhjWONR2UDAH
5CpaKKKKKKKKKK+ZP2kP+R60z/sGL/6Nkr2P4P8A/JKNA/65P/6Meu4ooooooooo
oooori9QP9i/FbTL4/Lba3ZPYSHoPPiPmR59ypkA+ldpRRRRRRRRRRRRRXLePdLu
73QEv9MjL6rpM6X9oo6yMn3o/wDgSFlx7itvR9WtNd0e01Sxk3211EJYz3wex9x0
I9RV6iiiiiiiiiiigkAZJwK4z4f/APEyGueJjyNX1Bzbv/et4h5UZ/Hazf8AAq7O
iiiiiiiiiiiiuH0Zh4o+Id/ro+bTtFRtNsmPR5yQZ5F+mFTPfBruKKKKKKKKKKKK
+ZP2kP8AketM/wCwYv8A6Nkr2P4P/wDJKNA/65P/AOjHruKKKKKKKKKKKKKK5vx1
o0+teFbhLLjUrRlvLFh1WeI7lx9cFfoxrS8P6zB4h8P2Gr23EV3CsoXupI5U+4OQ
fpWlRRRRRRRRRRRRRXC6Gw8I+Nbvw5Kdmmasz32lE8KkpOZoB+PzgejGu6oooooo
ooooork/iHqNxbeGv7NsH26lrEy6dakfwmThn+ipuOfYV0Wm6fb6Tpdpp1omy3tY
VhjX0VRgfyq1RRRRRRRRRRRXL+ONcudL0mLT9KYHXNVk+yWCdSrH70h/2UXLE+w9
a1tA0W18O6DZaRZ58m1jCBj1c9WY+5JJPua0qKKKKKKKKKKK+ZP2kP8AketM/wCw
Yv8A6Nkr2P4P/wDJKNA/65P/AOjHruKKKKKKKKKKKKKKK4fRM+FPHN54ef5dN1cv
qGmeiS9Z4R+J3gDjBau4ooooooooooooorE8V+HY/EuiPZ+abe7icT2d0v3redeU
cfQ9fUEioPB/iOTX9Mkjvolt9ZsJPs2o2oP+rlH8Q/2GHzKfQ+1dFRRRRRRRRRRX
DaF/xVnji88SMS2maTvsNL4+V5Ok8w9eR5YPTANdzRRRRRRRRRRRUF7e22nWM97e
TJDbQIZJZHOAqgZJNcl4PsrjWtSn8aapE8c15H5Wm20g5tbTOQSOzv8AePtgV2lF
FFFFFFFFFFFfMn7SH/I9aZ/2DF/9GyV7H8H/APklGgf9cn/9GPXcUUUUUUUUUUUU
UUVz/jDw6/iHR1W0mFtqlnKt1p9z/wA85l6Z9VPKkehqTwn4iTxLoq3TQm2vYXNv
e2rfet514ZD/ADB7gityiiiiiiiiiiiiiuQ8VaJe22oR+K/D0W7V7VNlxag4F/b9
TGf9sdVb146Gt/Q9asvEOj2+qafJvt51yMjDIehVh2YHII9RWhRRRRRRRRXI+NNX
vCbXwzokmzWdVBUSjn7Jbj/WTH6DhfViPSug0bSbTQtGtNKsY9lraxCOMHrgdz6k
9SfU1eoooooooooooJABJOAOpNcCP+Lj6zuzu8I6dNx/d1O4U9feFCPozDuBXfUU
UUUUUUUUUUUV8yftIf8AI9aZ/wBgxf8A0bJXsfwf/wCSUaB/1yf/ANGPXcUUUUUU
UUUUUUUUUVw/iW1uvC2uv4y0uB5raRFj1qzjGWkiXpOg7ug6juv0rsbO8ttQsoby
zmSe2nQSRSochlIyCKnoooooooooooooritY0e/8M6rP4l8NW7TxzHfqmkp0uR3l
iHaYDqP4/r16bRtZsNf0uHUtMuFntpRkMvUHupHUEdweRV+iiiiiisrxFr9n4a0i
TULve/IjhgjGZJ5W4WNB3Yn/AB7VmeEdCvLRrvXdb2NrupkNOEOVtox9yBD6L3Pc
kn0rqKKKKKKKKKKKQkKCSQAOSTXBXNzcfEa7ksLCWSDwnC5S7vIyVbUWBwYoj2i7
M469B3NdzbW0FlaxWtrCkMEShI441wqqOAAOwqWiiiiiiiiiiiiivmT9pD/ketM/
7Bi/+jZK9j+D/wDySjQP+uT/APox67iiiiiiiiiiiiiiiijqMGuAkEnw21CWeONn
8H3cu+VEBJ0uVjywH/PFickD7p56V3sUsc0SSxOskbqGR0OQwPQg9xTqKKKKKKKK
KKKKK4/V/C97p2pTeIPCTRwajId13YSHbb3/APvf3JPRx+OQa0/Dniuw8RxyxxCS
11G3+W70+4G2a3b/AGl7j0YcGt2iiiiqOsaxYaDpU+palcLBawjLMepPYAdyTwAO
tc1oOlahr+sx+KvENubcxqRpWmPybRG6ySf9NWHb+Ecdc12dFFFFFFFFFFVNS1Ox
0fT5b/UbqK1tYhl5ZWwB/wDX9u9cWsGqfEciS7S40vwkeUtjmO41Eer944j/AHer
DrgEV3VtbQWdrFbW0McMEShI441CqijoAB0FS0UUUUUUUUUUUUUV8yftIf8AI9aZ
/wBgxf8A0bJXsfwf/wCSUaB/1yf/ANGPXcUUUUUUUUUUUUUUUUU2SNJY2jkRXRwV
ZWGQQeoIrgzDffDiV5LSGa+8Isxd7eMF5tMz1KDq8Pcr1XqMjNdtY31rqdjDe2Nx
HcWsy745Y23Kw9jViiiiiiiiiiiiiisDxD4SsPEDxXe+ay1W3H+jajatsmi9s/xL
6qcg81ixeLtT8LyCz8bW2LcHbFrlpGTbSDt5qjJhbp/s9cEV2tvcQXdvHcW00c0E
g3JJGwZWHqCOCKkorK1/xFpvhrTvtmozFVZgkUUa7pJnPREUcsx9BWBpOh6l4h1a
DxF4pgEIgO7TdI3bltT/AM9ZD0aX07L255HaUUUUUUUUUUVymreOrWG+k0nQrWXX
NaXhra0I8uE+s0v3Yx+Z9qg0zwZcXuoRa14vu01TUozugtUUi0sz/wBM0P3m/wBt
ufpXZUUUUUUUUUUUUUUUUV8yftIf8j1pn/YMX/0bJXsfwf8A+SUaB/1yf/0Y9dxR
RRRRRRRRRRRRRRRRRXFXnhjU/D1/Nqvg0whZm8y70WZtkFw3doz/AMspD9Np4yO9
a3hzxdp3iMzW8ay2mp23F1p90uyaE+47r6MMg1v0UUUUUUUUUUUUUjosiMjqGRhh
lYZBHoa42fwNJpVxJe+DdR/sWZzuksmTzLKY+8WRsPuhH0NN/wCE4vdDPl+MdEm0
9B/zErPNzZn3JA3R/wDAh+NSah4/tJ5U0/wpHH4g1SVQyraygwQKejzSjIUe33j6
c1PoXhGSDU/7e8Q3a6prrKVSTbthtFPVIEP3R6sfmPfrXVUUUUUUUUUjusaM7sFV
RksxwAK5O8+IOmm5ex0G3uPEGoLwYdOAaOM/9NJj8ifnn2qqfD/ijxRz4l1NNM05
uTpekyMGcf3ZZzhj6EIAD611WlaPp2h2CWOl2UNpap92OFAo+p9T7nmrtFFFFFFF
FFFFFFFFFFfMn7SH/I9aZ/2DF/8ARslex/B//klGgf8AXJ//AEY9dxRRRRRRRRRR
RRRRRRRRRWF4h8JaX4j8mW5WWC+t+be/tZDFcQH/AGXHb2OR7ViDVPFXhH5Nbtm1
/Sl/5iNjFi5iX1lhH3v95Ow6V02jeINI8Q2v2nSNQt7yIfe8pslD6MvVT7ECtKii
iiiiiiiiiisHXvGWieHXWC8u/MvpP9VY2ymW4lPYLGvPPqcD3rF+yeLfF4zfyv4a
0d/+XW3cNezL/tydIgfRct1GamPwt8Kwxx/2baXGlXMa7Uu9PuXhm/4EwPzn/ezQ
NL8daQMafrun6zAOkerW5ilA9PNi4P1KUn/CY69p3Gt+CdTRR/y20uVL1D77RtcD
/gNKvxT8IKwS61KWxkzjZe2k0GDz3ZQO3rWva+MfDN8AbXxDpU2egS8jJ/LNX4tW
06cExahayAddkynH609tRsUUs95bqoGSTKoA/Wqk3ibQLZN8+t6bEvq93Go/U1jT
/E/wVBL5Q8QWs8nTbaBrgn6CMNmoD8QJL35dC8K6/qTH7sj232WE/wDA5Sv8jRu+
Imq9I9D0CBupZnvZ1+gGxP506P4dafeOsviPUdR8QTA52302IAf9mFMIPxBrq7Sz
tbC2S2s7aG2gThYoUCKv0A4FT0UUUUUUUUUUUUUUUUUUV8yftIf8j1pn/YMX/wBG
yV7H8H/+SUaB/wBcn/8ARj13FFFFFFFFFFFFFFFFFFFFFFc5rXgfQ9auxftBJZam
Pu6hYSGCcfVl+99GBFZoi8e6ANsUlh4mtF6CY/ZLvHpuAMbfUhc1LF8R9It5Fg16
3vvD9weAupwFI2P+zKMxkf8AAq6ey1Gx1ODz7C8t7uL/AJ6QSrIv5g1ZoooooorN
1TxBo2iIX1TVbKyGM/v51Qn6AnJrnf8AhYSan8vhbQtT1wnpcLH9ntv+/smM/wDA
QaDovjHxBxrWtQ6NZnraaNkysPRp3GR/wBR9a3NC8K6J4bjZdK0+KCR/9ZOcvLIf
VnbLN+JrYooopGVXUqyhlIwQRkGsi68JeG759934e0m4frulso3P6iqMnw68GSsW
bwtpAJ/u2iKPyAqOP4aeCYk2r4X0wj/agDH8zVyPwR4ThcPF4X0VHHRlsIgR+O2t
mC2gtY/Lt4I4U/uxoFH5CpaKKKKKKKKKKKKKKKKKKKKKKK+ZP2kP+R60z/sGL/6N
kr2P4P8A/JKNA/65P/6Meu4ooooooooooooooooooooooopskaTRtHIiujDDKwyC
PpXMX3w48JX0/wBo/saG1ue09iWtpAfXMZXP41U/4QfVbT/kFeOtfg9FuzFdqP8A
vtMn8TQ2m/ESzB+zeI9E1D0+3aa8X6xyf0p5b4lKykQ+E5F7gy3KH89rU1bn4kmR
lOmeFwB0c3s+D9P3eaXPxLZDx4SjcngZuXA/ln9KP7G8e3Z3XHi7T7HP8FhpQb8m
ldv5Uh8AS3g/4nHi7xFfqfvxLcrbRt9ViVTj8a0dL8BeFNGfzLLQbJZs586WPzZM
/wC++W/Wui6DAoooooooooooooooooooooooooooooooooooor5k/aQ/5HrTP+wY
v/o2SvY/g/8A8ko0D/rk/wD6Meu4oooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooooooor5k/aQ/wCR60z/ALBi/wDo2SvY/g//
AMko0D/rk/8A6Meu4ooooooooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooor5k/aQ/5HrTP+wYv/AKNkr2P4P/8AJKNA/wCuT/8A
ox67iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
iiiiiiiiiiivmT9pD/ketM/7Bi/+jZK9j+D/APySjQP+uT/+jHruKKKKKKKKKKKK
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK+ZP2k
P+R60z/sGL/6Nkr2P4P/APJKNA/65P8A+jHruKKKKKKKKKKKKKKKKKKKKKKKKKKK
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK+ZP2kP8AketM/wCwYv8A
6Nkr2P4P/wDJKNA/65P/AOjHruKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK+ZP2kP+R60z/sGL/wCjZK9j+D//ACSj
QP8Ark//AKMeu4oooooooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooor5k/aQ/5HrTP+wYv/o2SvY/g/wD8ko0D/rk//ox67iii
iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
iiiivmT9pD/ketM/7Bi/+jZK5PRPi54x8PaNbaTpuoQx2dspWNGtkYgEk9SMnkmt
D/hevj7/AKCkH/gJH/8AE0f8L18ff9BSD/wEj/8AiaP+F6+Pv+gpB/4CR/8AxNH/
AAvXx9/0FIP/AAEj/wDiaP8Ahevj7/oKQf8AgJH/APE0f8L18ff9BSD/AMBI/wD4
mj/hevj7/oKQf+Akf/xNH/C9fH3/AEFIP/ASP/4mj/hevj7/AKCkH/gJH/8AE0f8
L18ff9BSD/wEj/8AiaP+F6+Pv+gpB/4CR/8AxNH/AAvXx9/0FIP/AAEj/wDiaP8A
hevj7/oKQf8AgJH/APE0f8L18ff9BSD/AMBI/wD4mj/hevj7/oKQf+Akf/xNH/C9
fH3/AEFIP/ASP/4mj/hevj7/AKCkH/gJH/8AE0f8L18ff9BSD/wEj/8AiaP+F6+P
v+gpB/4CR/8AxNH/AAvXx9/0FIP/AAEj/wDiaP8Ahevj7/oKQf8AgJH/APE0f8L1
8ff9BSD/AMBI/wD4mj/hevj7/oKQf+Akf/xNH/C9fH3/AEFIP/ASP/4mj/hevj7/
AKCkH/gJH/8AE0f8L18ff9BSD/wEj/8AiaP+F6+Pv+gpB/4CR/8AxNH/AAvXx9/0
FIP/AAEj/wDiaP8Ahevj7/oKQf8AgJH/APE0f8L18ff9BSD/AMBI/wD4mj/hevj7
/oKQf+Akf/xNH/C9fH3/AEFIP/ASP/4mj/hevj7/AKCkH/gJH/8AE0f8L18ff9BS
D/wEj/8AiaP+F6+Pv+gpB/4CR/8AxNH/AAvXx9/0FIP/AAEj/wDiaP8Ahevj7/oK
Qf8AgJH/APE0f8L18ff9BSD/AMBI/wD4mj/hevj7/oKQf+Akf/xNH/C9fH3/AEFI
P/ASP/4mj/hevj7/AKCkH/gJH/8AE0f8L18ff9BSD/wEj/8AiaP+F6+Pv+gpB/4C
R/8AxNH/AAvXx9/0FIP/AAEj/wDiaP8Ahevj7/oKQf8AgJH/APE0f8L18ff9BSD/
AMBI/wD4mj/hevj7/oKQf+Akf/xNH/C9fH3/AEFIP/ASP/4mj/hevj7/AKCkH/gJ
H/8AE0f8L18ff9BSD/wEj/8AiaP+F6+Pv+gpB/4CR/8AxNH/AAvXx9/0FIP/AAEj
/wDiaP8Ahevj7/oKQf8AgJH/APE0f8L18ff9BSD/AMBI/wD4mj/hevj7/oKQf+Ak
f/xNH/C9fH3/AEFIP/ASP/4mj/hevj7/AKCkH/gJH/8AE0f8L18ff9BSD/wEj/8A
iaP+F6+Pv+gpB/4CR/8AxNH/AAvXx9/0FIP/AAEj/wDiaP8Ahevj7/oKQf8AgJH/
APE0f8L18ff9BSD/AMBI/wD4mj/hevj7/oKQf+Akf/xNH/C9fH3/AEFIP/ASP/4m
j/hevj7/AKCkH/gJH/8AE0f8L18ff9BSD/wEj/8AiaP+F6+Pv+gpB/4CR/8AxNH/
AAvXx9/0FIP/AAEj/wDiaP8Ahevj7/oKQf8AgJH/APE0f8L18ff9BSD/AMBI/wD4
mj/hevj7/oKQf+Akf/xNcn4o8Xax4y1CK+1q4Se4iiEKMsaphQScYAHdjX//2Q==

---END_DATA---
%/
| source file:|{{{C:\Documents and Settings\User\Desktop\funcaoimg.jpg}}}|
| attached on:|2 March 2009 by Professor|
| description:|attached by FileDropPlugin|
| embedded:|[[funcaoimg.jpg|funcaoimg.jpg]] - {{{type=image/jpeg, size=18928 bytes, encoded=25634 bytes}}}|
| local file:|/%LOCAL_LINK%/[[C:\Documents and Settings\User\Desktop\funcaoimg.jpg|C:/Documents and Settings/User/Desktop/funcaoimg.jpg]]|
| remote link:|//none//|
image
<<<
usage: {{{[img[tooltip|funcaoimg.jpg]] or [img[tooltip|funcaoimg.jpg][link]]}}}
[img[tooltip|funcaoimg.jpg]]
<<<

/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/jpeg;base64,
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
OUTJupDRmI/R77jwQ+7IZ9u/VOxo/wAoCmF4iY2NjWMADWgAAcWS9rJ0xxnspeNx
/Ds60TspeNx/Ds60RLo2gfiZhnsusqwKv6B+JmGey6yrAgjdI4HT4DbbGM5GM4Rn
8TfCHxC1IJWzwRys+q9ocOcKbkaHMLTuIyKrGC5sodrO+vVkfAf5SQPhkrYsuSet
t9ERXYiIiAiIgItGzi1OriVbD5ZP7TZ2sYBxcp6D0LeTadCLDat1qcfCWp44Wfee
4AKu29N6Ak4HC68+ITbgImkDP15Z/BRbomNq0LDat1qcXC2544Wcr3AKrf8AnHGO
OHCYHejN+XxP5LPV0Hw8S8Nic8+ITHe6R5APMDn8U3VvGTt9t6cYYyTgcPjnvzcT
YWEA85+S1+3NMsUH9lowYbCdz5SHOHMfkrRUpVaUfB1K8ULORjQM1n3bU1/Ubk6i
nYbodNjGI2vpzFrNjtfVYeDOQJI1i3bxZZdKtVDQrR6iAYsNikePtTZvPx2LPouz
WwyS0f8Ae53zA8rc8m/8LQppZuidPEMMcEYZDGyNo+y0ZBe0REiIiAiIg+OGYyVZ
qRmjds4Y76sZ4WD2Tju5jmPVkrOoTSOu8RxYjXaXTUyXEDe+M/Xb0bR6Qpl0rlNx
9WKetXss1LEMcrTxPaCvcUjJomyxuDmPAc0jjBXpaOfpAXNDcCt5ntQQPP2oSW/D
d8Fody2L0NuDY9M0DdFOMx8vgrcijSfKqM3EdJMFxJ7r+GsuGy0Z8A7LW1OMZce3
kUlT04wid/BWuGpy7iJmbOkblLY41zKjLjAS+m8S7ONu54/ykrPapUsQjHbVaGdp
HglzQdnoK4+eYzL3Hf8AHyuWPpkrW69uPhK08crPvMcCFmVWsaD4fwnDYbPYoSjc
6N5I+O34rCIdMMJP6KevikA3NeA1+Xw/MrDwxvVb+dncW9FVItNYoZBFjOHWqMm7
MtJb81u19LcIs4m2lFYB12gslOxpO3wfQdyi8eSZyYp5FqT4lVgv16Mkg7YsZ6jB
tOQBOZ5BsWS5cr0azrFuZkUTN7nFV1U+UZ0UNT0nwy5bZWa+WKSTZHw0ZYJPUSpk
HNLjce0zKXoREUJF4lkbFG6SQ5MYC4nkAGa9qNxo8LDFQb9a3IGH0MG1/wABlzq2
OPllIrnfGWveBxuZhcUkgyknJmfnyuOfwzy5lvoNgyCL1ZNTTxsru7ERFKFf0o/b
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
gpRFXdXmMj5kORfUREiIiAiIgIiICIiAiIg4z2UvG4/h2daJ2UvG4/h2daIOjaB+
JmGey6yrAq/oH4mYZ7LrKsCAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiA
iIgIiICIiAiIgIiIPMj2sjc97gGtGZJ4govAmOsCbFZgQ+6QWNP2Yh9Qc+138yo+
mOkWJ1NKJsIhabFOZsedcDwnZ5ZgEDPbu510ahK+alFJLXdXe5oJicQSz0bNiDYR
EQEREBERAREQEREBERAREQEREBERAREQEREBERBxnspeNx/Ds60TspeNx/Ds60Qd
G0D8TMM9l1lWBV/QPxMwz2XWVYEBERAREQEREBERAREQEREBERAREQEREBERAREQ
EREBERAREQEREBERARFWNN3uZ9A6riNbGK7Tkcsx4SCXiwikzFpcT4BptyANMjtp
AAyyHIpADJQuKaTYfhWIdo2mzmYwcOwMaHa/haoa0Z5lxPFlzrSi06whzZ2zxXa1
iEtHas0GUr892q0E5oLOihMG0oo4vdlpMhtVLUYDjDbj4N5HKBmVIYlaFGnJZMM8
/Btz4KBms923iHGg20XOtADDiGKSX7NfFHX9eV/bEuYgyz1dQbcs8juy2beRdFQE
REBERAREQEREBERAREQEREBERAREQEREHGeyl43H8OzrROyl43H8OzrRB0bQPxMw
z2XWVYFX9A/EzDPZdZVgQEREBERAREQEREBERAREQEREBERAREQEREBERAREQERE
BERAREQEREBVfTndo/8A/NV/+ZWhaOKYXXxTtXtnX/sthlmPVOXhtzyz9G1BBzRs
d2Ua5c0EswpzmkjceEIzHMT0r5bhid2TaJLGkjDnuBI3HWIz6CRzqd+iq/003Fjr
9stgNcbfB1NbW3cuaS4XXkxmPFTr9sRwmFu3wdUnPdyoIS40N7JOGkDIuoy59KtB
C0n4VXkxiHFH6/bEMTomZHZqnfsW64E7kFX7Hg/8uE/4qb+sq0rRwnC6+E1O1quv
wfCOk8I5nNxzK3kBERAREQEREBERAREQEREBERAREQEREBERBxnspeNx/Ds60Tsp
eNx/Ds60QdG0D8TMM9l1lWBV/QPxMwz2XWVYEBERAREQEREBERAREQEREBERAREQ
EREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREB
ERAREQEREHGeyl43H8OzrROyl43H8OzrRB0bQPxMwz2XWVYFwvDdOscwuhFSqSQC
GFuqwOiBIC2e+TpJ5av7kIO1ouKd8nSTy1f3ITvk6SeWr+5CDtaLinfJ0k8tX9yE
75Oknlq/uQg7Wi4p3ydJPLV/chO+TpJ5av7kIO1ouKd8nSTy1f3ITvk6SeWr+5CD
taLinfJ0k8tX9yE75Oknlq/uQg7Wi4p3ydJPLV/chO+TpJ5av7kIO1ouKd8nSTy1
f3ITvk6SeWr+5CDtaLinfJ0k8tX9yE75Oknlq/uQg7Wi4p3ydJPLV/chO+TpJ5av
7kIO1ouKd8nSTy1f3ITvk6SeWr+5CDtaLinfJ0k8tX9yE75Oknlq/uQg7Wi4p3yd
JPLV/chO+TpJ5av7kIO1ouKd8nSTy1f3ITvk6SeWr+5CDtaLinfJ0k8tX9yE75Ok
nlq/uQg7Wi4p3ydJPLV/chO+TpJ5av7kIO1ouKd8nSTy1f3ITvk6SeWr+5CDtaLi
nfJ0k8tX9yE75Oknlq/uQg7Wi4p3ydJPLV/chO+TpJ5av7kIO1ouKd8nSTy1f3IT
vk6SeWr+5CDtaLinfJ0k8tX9yE75Oknlq/uQg7Wi4p3ydJPLV/chO+TpJ5av7kIO
1ouKd8nSTy1f3ITvk6SeWr+5CDtaLinfJ0k8tX9yE75Oknlq/uQg7Wi4p3ydJPLV
/chO+TpJ5av7kIO1ouKd8nSTy1f3ITvk6SeWr+5CDtaLinfJ0k8tX9yE75Oknlq/
uQg7Wi4p3ydJPLV/chO+TpJ5av7kIO1ouKd8nSTy1f3ITvk6SeWr+5CDtaLinfJ0
k8tX9yE75Oknlq/uQg7Wi4p3ydJPLV/chO+TpJ5av7kIMvZS8bj+HZ1oq3jWNXca
vm5eMbpdUNza3IZBEH//2Q==
---END_DATA---
%/
| source file:|{{{C:\Documents and Settings\User\Desktop\operacoes.jpg}}}|
| attached on:|1 March 2009 by Professor|
| description:|attached by FileDropPlugin|
| embedded:|[[operacoes.jpg|operacoes.jpg]] - {{{type=image/jpeg, size=25107 bytes, encoded=33999 bytes}}}|
| local file:|/%LOCAL_LINK%/[[C:\Documents and Settings\User\Desktop\operacoes.jpg|C:/Documents and Settings/User/Desktop/operacoes.jpg]]|
| remote link:|//none//|
image
<<<
usage: {{{[img[tooltip|operacoes.jpg]] or [img[tooltip|operacoes.jpg][link]]}}}
[img[tooltip|operacoes.jpg]]
<<<

/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/jpeg;base64,
/9j/4AAQSkZJRgABAQEAlgCWAAD/2wBDAA0JCgsKCA0LCgsODg0PEyAVExISEycc
HhcgLikxMC4pLSwzOko+MzZGNywtQFdBRkxOUlNSMj5aYVpQYEpRUk//2wBDAQ4O
DhMREyYVFSZPNS01T09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09P
T09PT09PT09PT09PT0//wAARCAGxAlgDASIAAhEBAxEB/8QAGwABAAIDAQEAAAAA
AAAAAAAAAAQFAgMGAQf/xABPEAABAwMBBAQLBAcFBgYCAwABAAIDBAUREgYTITFB
UWGBFBUiMjZVcXSRk7IjQqGxM1JicoLB0RYkNFOSByWiwuHwNUNEVGPxc9Jko9P/
xAAbAQEAAgMBAQAAAAAAAAAAAAAAAwQBAgUGB//EADERAQACAQIFAgQFBAMBAAAA
AAABAgMEEQUSITFBUXEiMmHRE4GR4fAGFKHBI0Kx8f/aAAwDAQACEQMRAD8A66w2
S1TWC3Sy2+nfI+lic5zmAlxLBklTvEFn9W0vywvdnPRq1+5w/QFYoK3xBZ/VtL8s
J4gs/q2l+WFZIgrfEFn9W0vywniCz+raX5YVkiCt8QWf1bS/LCeILP6tpflhWSIK
3xBZ/VtL8sJ4gs/q2l+WFZIgrfEFn9W0vywniCz+raX5YVkiCt8QWf1bS/LCeILP
6tpflhWSIK3xBZ/VtL8sJ4gs/q2l+WFZIgrfEFn9W0vywniCz+raX5YVkiCt8QWf
1bS/LCeILP6tpflhWSIK3xBZ/VtL8sJ4gs/q2l+WFZIgrfEFn9W0vywniCz+raX5
YVkiCt8QWf1bS/LCeILP6tpflhWSIK3xBZ/VtL8sJ4gs/q2l+WFZIgrfEFn9W0vy
wniCz+raX5YVkiCt8QWf1bS/LCeILP6tpflhWSIK3xBZ/VtL8sJ4gs/q2l+WFZIg
rfEFn9W0vywniCz+raX5YVkiCt8QWf1bS/LCeILP6tpflhWSIK3xBZ/VtL8sJ4gs
/q2l+WFZIgrfEFn9W0vywniCz+raX5YVkiCt8QWf1bS/LCeILP6tpflhWSIK3xBZ
/VtL8sJ4gs/q2l+WFZIgrfEFn9W0vywniCz+raX5YVkiCt8QWf1bS/LCeILP6tpf
lhWSIK3xBZ/VtL8sJ4gs/q2l+WFZIgrfEFn9W0vywniCz+raX5YVkiCt8QWf1bS/
LCeILP6tpflhWSIK3xBZ/VtL8sJ4gs/q2l+WFZIgrfEFn9W0vywniCz+raX5YVki
Ct8QWf1bS/LCeILP6tpflhWSIK3xBZ/VtL8sJ4gs/q2l+WFZIgrfEFn9W0vywniC
z+raX5YVkiCt8QWf1bS/LCeILP6tpflhWSIK3xBZ/VtL8sJ4gs/q2l+WFZIgrfEF
n9W0vywniCz+raX5YVkiCt8QWf1bS/LCeILP6tpflhWSIOb2ls1rp9mrnNBQU8cs
dLI5j2sALSGnBCKdtX6J3b3OX6SiDbs56NWv3OH6ArFV2zno1a/c4foCsUBERARE
QEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQERE
BERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREFTtX6J3b3OX6Si
bV+id29zl+kog27OejVr9zh+gKxVds56NWv3OH6ArFARFSbU1OmkgtzJhDLcZhCH
6g0sZ50jv9II9pCC7RUmy1VroZqCSYTTW6U05fqBL2c2O72kd4Ku0BERAREQEREB
ERAREQEREBERAREQEREBERAREQULbnequsrY7fQ0LoaScwapql7HOIa12cBhH3h0
qytNe2526KrbG6PUXNcwnJa5ri1wz04IPFciTaWXW8tulwuNLI+sJayCaZjXN3bO
OGcDxyO5dFsmySKwxRvY9sbHvEG8ZoeYtR0FwwMEjHR+KC4REQEREBERAREQEREB
ERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQVO1fondv
c5fpKJtX6J3b3OX6SiDbs56NWv3OH6ArFV2zno1a/c4foCsUBVVVZIK+8GsuUUFV
BHCI4IZYw8MJOXOIPDJw0dytUQVVJZYbfeDV26OCmp5Yd3NBHGGBzgctcAOGeLgf
aFaoiAiIgIq6W6Bz3RUEXhL2nBfnTG09run2DPctDoJ6jjW1T3j/AC4sxs/A5PeV
nZibRCdUXGipn7uapjbJ/lg5f/pHFaDd2u/QUdZKOvdhn1kLGCCGnZogiZE3nhjQ
Atizs152HjKqPm214/flYPyyvBcawedbSf3Zmn88LYibMc0sRdiP0tvrIx1hrX/S
4lbYrrQyvEYqGskdwDJQY3H2B2CsFCqquFzn0rIfC5OTowAWt/eJ4D2c+xa2mtY3
mdmYtMrxaKmtpaTHhNRFEXeaHOALvYOlUUNtnGSap9MwjHg9M4tjH8/hpUumZDR5
/u8cerzpWN8797p+OVzsvEcdelI3SxXdJN2id+gpqubtEJaPi7C88YVR8y2Sj9+V
g/IlbgQQCCCDyIXqqW4llntENuSGjw6tHO3Z/dnH8wvfGcrf0ltq2jraWO/J2fwW
5FiOI5o9Dkhrbd6EkCSYwE9E7DH9QGVOBBAIOQeRCiEAggjIPQoni6GM6qRz6R/X
AdI72+ae8Kxj4nE/PViaLZFWNrKyl4VcQqIv82Bp1D2s/mM+xT4J4qmISwSNkY7k
5pyujjy0yRvSd2sxs2IiKRgREQEREBERAREQEREBERAREQEREBERAREQEREBERAR
EQEREBERAREQEREBERAREQEREBERAREQEREFTtX6J3b3OX6SibV+id29zl+kog27
OejVr9zh+gKxVds56NWv3OH6ArFAREQERYyyMhidLK4MYwFznE4AA6UGNRPFTQum
neGRtHElVUm/uPGoDoaXogBw5/756v2R355DxmuvnbV1LS2NvGnhd939pw/WP4Dt
yttVV01FDvqyoigjBxrkeGjPtK2iGlreIbGNaxgYxoa1owABgALJaqeogqoWzU00
c0TvNfG4OB7wtqy0EREBeOcGtLnEBoGSTyC9Vb/4nLqd/goz5I/znDpP7I6Ovnyx
mHNmrhpzWZrXeWWua4/o3OhpD98cHyjs/Vb28z0Y5qVDDFBEI4WNYwcgAtiLz2fU
XzW3ssVrEdhFjLJHDG6SV7WMaMuc44AHtWulq6ath31HURTx5xrjeHDPtCh2nbds
yDXRHVDjtYeR/oVvilbK3LcgjgQeYKwWD2uDhJFgPHwcOorBEpSLCKRsrA9ue0Hm
D1LNYbCIiAostKWymoo3iGoPnHGWydjh0+3mFsqqqmo4TNVzxQRA4L5Hho+JWUE0
VRC2ankZLE8Za9jsgjsK3pa9J5q9GO7OirhUl0UjNzUxjy4ic8OsHpb2/kparaqm
34a9j93PGcxSgcWn+YPSOlSKCrNVG5srN3URHTLHnOD1jrB6D/MFd3SaqM0bT3R2
rslIiK41EREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBER
AREQEREBERAREQEREFTtX6J3b3OX6SibV+id29zl+kog27OejVr9zh+gKxVds56N
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
JAwtij1/ZsyMEhvXjgpqIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIi
ICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgqdq/RO7e5y/SUTav
0Tu3ucv0lEG3Zz0atfucP0BWKrtnPRq1+5w/QFYoCIiAiIgIiICIiAiIgIiICIiA
iIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgI
iICIiAiIgIiICIiAiIgIiICIiAiIgIiIKnav0Tu3ucv0lE2r9E7t7nL9JRBt2c9G
rX7nD9AViq7Zz0atfucP0BWKAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIi
AiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIg
IiICIiAiIgIiICIiCp2r9E7t7nL9JRNq/RO7e5y/SUQfGaf/AA0X7g/JbERAREQE
REBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBE
RAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERBpqv8LL+4fyRE
Qf/Z
---END_DATA---
%/
version.extensions.smileyMacro = {major: 0, minor: 1, revision: 0, date: new Date(2005,7,20)};
//Author: Alan Hecht
config.macros.smiley = {}
config.macros.smiley.handler = function(place,macroName,params)
{
	var palette = ["transparent","#000000","#1a1507","#352e18","#464646","#666666","#a3141e","#b06b63","#cc9900","#dd9030","#dddddd","#e89d00","#edc32a","#f3cb3c","#fdf201","#fdf526","#ff3149","#ffac00","#ffbf06","#ffc846","#ffcc66","#ffd758","#ffdd01","#ffea7b","#ffed55","#ffffff"];
	var data = params;
	var imageMap = null;
	if(data[0] == ":-)" || data[0] == ":)")

		imageMap = "aaaaabbbbbaaaaaaaabdtyyvtdbaaaaabnyxxxxxujbaaabmyyffyffuujbaadyyyeeyeetttdabppppddyddpmmlbbwoooooooowsrlbbwwpooooowwmrlbbwwboooowwwbllbbwwwboooowbrllbacwwwbbbbbrllcaablswwwwsrrlibaaablsssrrllibaaaaabcrrlllcbaaaaaaaabbbbbaaaaa";
	else if(data[0] == ":-(" || data[0] == ":(")
		imageMap = "aaaaabbbbbaaaaaaaabdtyyvtdbaaaaabnyxxxxxujbaaabmyyyyyyyuujbaadyyyeeyeetttdabppppddyddpmmlbbwoooooooowsrlbbwwpooooowwmrlbbwwoooooowwrllbbwwwwbbbbbsrllbacwwbwwwwsbllcaablswwwwsrrlibaaablsssrrllibaaaaabcrrlllcbaaaaaaaabbbbbaaaaa";
	else if(data[0] == ";-)" || data[0] == ";)")
		imageMap = "aaaaabbbbbaaaaaaaabdtyyvtdbaaaaabnyxxxxxujbaaabmyyxxxxxuujbaadyyyxxxeetttdabppphddyddpmmlbbwoooooooowsrlbbwwpooooowwmrlbbwwboooowwwbllbbwwwboooowbrllbacwwwbbbbbrllcaablswwwwsrrlibaaablsssrrllibaaaaabcrrlllcbaaaaaaaabbbbbaaaaa";
	else if(data[0] == ":-|" || data[0] == ":|")
		imageMap = "aaaaabbbbbaaaaaaaabdtyyvtdbaaaaabnyxxxxxujbaaabmyyffyffuujbaadyyyeeyeetttdabppppddyddpmmlbbwoooooooowsrlbbwwpooooowwmrlbbwwoooooowwrllbbwwwwbbbbbsrllbacwwwwwwwsrllcaablswwwwsrrlibaaablsssrrllibaaaaabcrrlllcbaaaaaaaabbbbbaaaaa";
	else if(data[0] == ":-D" || data[0] == ":D")
		imageMap = "aaaaabbbbbaaaaaaaabdtyyvtdbaaaaabnyxxxxxujbaaabmyyeeyeeuujbaadyyyeeyeetttdabppppyyyyypmmlbbwbbbbbbbbbbblbbwbkzzzzzzzkbwbbwbfzzzzzzzfbwbbwbkzzzzzzzkbwbacwbkzzzzzkblcaablsbkzzzkblibaaablsbbbbblibaaaaabcrrlllcbaaaaaaaabbbbbaaaaa";
	else
		createTiddlyElement(place,"span",null,"errorNoSuchMacro","unknown smiley");
	if(imageMap)
		{
		var box = createTiddlyElement(place,"span",null,"smiley",String.fromCharCode(160));
		box.style.position = "relative";
		box.style.width = "15px";
		box.style.height = "15px";
		box.style.marginLeft = "1px";
		box.style.marginRight = "1px";
		box.style.paddingRight = "12px";
		box.style.verticalAlign = "top";

		//now divide into 15x15 grid and create each pixel
		// rows
		for(r=0; r<15; r++)
			{
			// columns
			for(c=0; c<15; c++)
				{
				//create each pixel with the correct background
				var pix = document.createElement("img");
				pix.className = "smileyPixel";
				pix.style.position = "absolute";
				pix.border = 0;
				pix.style.top = r + "px";
				pix.style.left = c + "px";
				pix.style.width = "1px";
				pix.style.height = "1px";
				pix.style.backgroundColor = palette[imageMap.charCodeAt((r*15)+c)-97];
				pix.src = "data:image/gif,GIF89a%01%00%01%00%91%FF%00%FF%FF%FF%00%00%00%C0%C0%C0%00%00%00!%F9%04%01%00%00%02%00%2C%00%00%00%00%01%00%01%00%40%02%02T%01%00%3B";
				box.appendChild(pix);
				}
			}
		}
}