; インデックス表示
* Options Indexes
* Options -Indexes (非表示にする場合)
; 404 not found 時に表示するページの設定
* ~ErrorDocument 404 "表示するページへのパス"
; CGI の実行
* Options +~ExecCGI
* Options -~ExecCGI (実行を禁止する場合)
; アクセス制限
* アクセスを拒否する
** Deny from "拒否するホスト"
** Deny from all (全てのアクセスを拒否する)
* アクセスを許可する
** Allow from "許可するホスト"
** Allow from all (全てのアクセスを許可する)
* アクセス制御の評価順序を宣誓
** order allow,deny (allowを指定して、次にdenyを指定する)
; コンテンツタイプの指定
* ~AddType text/xml;charset=utf-8 .rss
;リダイレクト
* redirect 301 from to
; サンプル
{{{
# Access Control
order deny, allow
deny from all
allow from 192.168.1.
# Basic Authentication
AuthUserFile "パスワードのファイル"
AuthGroupFile /dev/null # とりあえず無しで...
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user
}}}
* [[特定のホスト(IPアドレス。プロバイダ)からのアクセスを制限する|http://www.shtml.jp/htaccess/host.html]]
.NET のコレクションは、''ジェネリック型 と 非ジェネリック型で、用意されているインターフェイス・クラスの設計が微妙に異なる''。
基本的には、ジェネリック型の方を使えばよいが、 Array は 非ジェネリック型の方に属するので、設計がどういう構造になっているかは、両方知っておく必要がある。
----
! 非ジェネリック型
実際に (明示的に) 使うことはほとんど無いだろうけど、配列まわりの混乱を避けるためには、知っておいた方がよさそう。
:$$\mathrm{IEnumerable} \stackrel{inherit}{\leftarrow} \mathrm{ICollection} \stackrel{inherit}{\leftarrow} \mathrm{IList} \stackrel{implement}{\leftarrow} \mathrm{Array}$$
各インターフェイスの役割は、次の通り。
<<<
* ''IEnumerable''インターフェイスは、「''列挙可能''」である事を示します。「示す」と言っても、ただ表明しているわけではありません。列挙可能にするための「''~GetEnumerator''」メソッドを実装しています。ここではその詳細に踏み込みませんが、C#の「''foreach''」を使用する時、C#のコンパイラは暗黙に「''~GetEnumerator''」メソッドを呼び出して、要素の列挙を実行します。そのため、「''IEnumerable''」を実装している=列挙可能、と見なせるわけです。
** だから、配列に対して、直接foreachが使えます。(厳密には異なるのですが、このように解釈していて問題ありません)
* ''ICollection''インターフェイスを実装しているクラスは、''要素数を把握可能''である事を示します(他にも機能はあるのですが、省略)。要素数は、皆さんおなじみの「''Count''」プロパティで取得できます。
** ICollection は IEnumerable を継承しています。そのため、ICollection にキャスト出来た場合は、勿論「列挙が可能」と言う事になります。
* ''IList ''インターフェイスは、''リスト形状のコレクションに対する、追加・変更・削除も含めた、全ての操作が可能である事を示します''。
** このインターフェイスは、ICollectionを継承しているので、要素数の把握も可能(つまり、Countプロパティが使える)で、更にIEnumerableも継承していることになるので、列挙も可能です。
<<<
[[列挙可能から完全なるモノまで – IEnumerableの探索 – C# Advent Calendar 2014 – kekyoの丼|https://www.kekyo.net/2014/12/14/4587]]
これらのインターフェイスと配列の関係(と問題点) は、次の通り。
<<<
''.NETの配列は、System.Arrayクラスを暗黙に継承しています。''
<<<
<<<
ところで、配列の基底型であるSystem.Arrayが、IListインターフェイスを実装しているのはおかしいと思うかもしれません。配列の要素数は、一度生成されたら「不変」な筈です。そのため、ICollectionインターフェイスの実装までが妥当と思われますが、そうなっていません。実際、''配列のインスタンスをIListインターフェイスにキャストし、Addメソッドを呼び出して要素を追加しようとしても、例外がスローされます''。
<<<
[[列挙可能から完全なるモノまで – IEnumerableの探索 – C# Advent Calendar 2014 – kekyoの丼|https://www.kekyo.net/2014/12/14/4587]]
----
! ジェネリック型
基本となるのは、次の3つのインターフェイス。
:$$\mathrm{IEnumerable \langle T \rangle} \stackrel{inherit}{\leftarrow} \mathrm{ICollection \langle T \rangle} \stackrel{inherit}{\leftarrow} \mathrm{IList\langle T \rangle}$$
なお、ややこしいことに、Array <T> というクラスは存在しない。
<<<
「Array<T>」クラスが導入されたわけではなく、''配列を定義すると自動的に「IEnumerable<T>」インターフェイス・「ICollection<T>」インターフェイス・「IList<T>」インターフェイスが、直接配列の型に実装されます''。
<<<
高階関数的なことをするためのものらしい。見た目はたいぶ異なるが、やっていることはこんな感じのはず。
```javascript
(function(f, collection) {
return f(collection);
})(objFun, collection)
```
コレクションの取り扱い方によって、使うキーワードが変わるみたい。
# 要素ごとに写像を適用
# フィルター
# ソート
# 畳み込み
これらの機能は、組み合わせて使うことも可能。
* 例えば、「ソート ⇒ 写像を適用」
---
! 1. 要素ごとに写像を適用
高階関数は、コレクションの各要素に同じ写像を適用し、写像を適用した後の各要素を集めたコレクションを返す。
$$f: A^n \to B^n$$ という写像で、コードで書くと以下のようなイメージ。
コレクションの各要素を $$a_i \in A$$ とすると、写像を適用した後のコレクションの各要素は $$b_i = f(a_i)$$ となる。
```javascript
function f(collection) {
var ret = []
for each (elem in collection) {
ret.push( f_each(each) )
}
return ret
}
```
; VB.NET のコード
<<<
```vbnet
Dim numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
Dim allNumber = From n In numbers
Select n * n
' メソッド構文で表すと以下のコードになります。
Dim allNumber = numbers.Select(Function(n) n * n)
```
<<<
https://jyuch.hatenablog.com/entry/2014/10/05/000948
---
! 2. ソートなど
写像の大まかなイメージは $$f: A^n \to B^n$$ だが、各要素を決める際の引数の取り方が (1のケースとは) 異なる。
$$b_i = f(a_1, a_2, ... a_i)$$
----
! 3. フィルター
$$f: A^n \to A^m \ \ \ [n \geq m]$$ となる写像。
```javascript
function f(collection) {
var ret = []
for each (elem in collection) {
var isSatisfied = f_each_cond(statement)
if (isSatisfied) { ret.push(elem) }
}
return ret
}
```
----
! 4. 畳み込み
イメージとしては、ベクトルをスカラーに落とすような写像。
$$f: A^n \to B$$
----
----
! 写像 (逐次処理)
<<<
写像というのは map, mapping と呼ばれる処理で、 配列などのコレクションのメンバーに一つずつ関数を適用して 戻り値で新しいコレクションを作ります。
<<<
[[C# やるなら LINQ を使おう - プログラマーズ雑記帳|http://yohshiy.blog.fc2.com/blog-entry-274.html]]
感覚的には、 $$f: A^n \to B^n$$ という写像をイメージすればよい。
!! 逐次処理
逐次処理の場合は、 $$f$$ が 恒等写像 になる。
''foreach''。
---
<<<
;LINQ の主要メソッド
それでは、ここから LINQ のメソッドでまず最初に覚えておいた方がよいと思われる機能について説明していきます。高階関数を用いたデータ処理における主要な機能は次の 5 つです。
#逐次処理(each)
#写像(map)
#フィルター(filter)
#並び替え(sort)
#畳み込み(fold)
<<<
[[C# やるなら LINQ を使おう - プログラマーズ雑記帳|http://yohshiy.blog.fc2.com/blog-entry-274.html]]
''String.Format()'' 関数は、C言語でいう sprintf() みたいな関数。ただし、書式の指定の仕方はだいぶ異なる。
; 基本的な形
```vbnet
x = 1
y = 20
z = 300
String.Format("{0}, {1}, {2}", x, y, z)
' 出力: 1, 20 ,300
```
; 数値の書式
|書式指定子 (小文字でも可) | 意味 |h
| C | 通貨 |
* http://www.openreference.org/articles/view/533
(連結閉集合の) 体積分と面積分を関係づける定理。
V を連結閉集合の領域、S をその境界とすると、ベクトル A に対し、次の関係が成り立つ。
: $$\displaystyle \iiint_V \mathrm{div} A dV = \iint_S (A \cdot n) dS$$
----
! 大雑把な証明
V が 次のように表すことができる場合について、証明する。
: $$\{ (x,y,z) | (x,y) \in D, \ f_1(x,y) \leq z \leq f_2(x,y) \} $$
このとき S は 3つのタイプの面に分けられる。
:$$S_1: z = f_1(x,y), \ S_2: z = f_2(x,y), \ S_0:$$ x-y 平面に垂直な面
n を Sの外向き単位法線ベクトル とすると、定理の式は、
: $$\displaystyle \iiint_V \left( \dfrac{\partial A_x}{\partial x} + \dfrac{\partial A_y}{\partial y} + \dfrac{\partial A_z}{\partial z} \right) dV = \iint_S (A_x \cdot n_x + A_y \cdot n_y + A_z \cdot n_z) dS$$
と書くことができる。そして、証明は左右の各成分の項が等しいことを示す形で行う。
面倒なので、z軸方向の場合だけ書く。
まず、左辺(体積分)の項は、 S,,1,,, S,,2,, の面積分に変形することができる。
: $$\displaystyle \iiint_V \dfrac{\partial A_z}{\partial z} dV = \iint \left( \int_{f_1}^{f_2} \dfrac{\partial A_z}{\partial z} dz \right) dx dy = \iint A_z(x,y,f_2) dx dy - \iint A_z(x,y,f_1) dx dy $$
ここで、z軸に対応する基底を e,,z,, とすると、e,,z,, と n は、 S,,2,, の各点では 鋭角をなし ($$e_z \cdot n \geq 0$$)、S,,1,, の各点では鈍角をなす ($$e_z \cdot n \leq 0$$)。よって、上式は、
: $$\displaystyle \iint A_z(x,y,f_2) dx dy - \iint A_z(x,y,f_1) dx dy = \iint_{S_2} \left[A_z(x,y,f_2) \cdot n \right]ds + \iint_{S_1} \left[A_z(x,y,f_1) \cdot n \right]ds $$
と変形できる。そして、S,,0,, は z軸に垂直なので常に 0 であることから、最終的に、
: $$\displaystyle \iiint_V \dfrac{\partial A_z}{\partial z} dV = \iint_{S} \left[A_z \cdot n \right]ds $$
の関係が得られる。
----
* [[ガウスの発散定理の証明と物理的意味|https://ramenhuhu.com/math-vectorcalculus4]]
* [[Divergence theorem proof (part 1) (video) - Khan Academy|https://www.khanacademy.org/math/multivariable-calculus/greens-theorem-and-stokes-theorem/divergence-theorem-proof/v/divergence-theorem-proof-part-1]]
* [[16.9 The Divergence Theorem|https://www.whitman.edu/mathematics/calculus_online/section16.09.html]]
{
"tiddlers": {
"$:/Acknowledgements": {
"title": "$:/Acknowledgements",
"text": "TiddlyWiki incorporates code from these fine OpenSource projects:\n\n* [[The Stanford Javascript Crypto Library|http://bitwiseshiftleft.github.io/sjcl/]]\n* [[The Jasmine JavaScript Test Framework|http://pivotal.github.io/jasmine/]]\n* [[Normalize.css by Nicolas Gallagher|http://necolas.github.io/normalize.css/]]\n\nAnd media from these projects:\n\n* World flag icons from [[Wikipedia|http://commons.wikimedia.org/wiki/Category:SVG_flags_by_country]]\n"
},
"$:/core/copyright.txt": {
"title": "$:/core/copyright.txt",
"type": "text/plain",
"text": "TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n\nCopyright (c) 2004-2007, Jeremy Ruston\nCopyright (c) 2007-2017, UnaMesa Association\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n* Neither the name of the copyright holder nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
},
"$:/core/icon": {
"title": "$:/core/icon",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path d=\"M64 0l54.56 32v64L64 128 9.44 96V32L64 0zm21.127 95.408c-3.578-.103-5.15-.094-6.974-3.152l-1.42.042c-1.653-.075-.964-.04-2.067-.097-1.844-.07-1.548-1.86-1.873-2.8-.52-3.202.687-6.43.65-9.632-.014-1.14-1.593-5.17-2.157-6.61-1.768.34-3.546.406-5.34.497-4.134-.01-8.24-.527-12.317-1.183-.8 3.35-3.16 8.036-1.21 11.44 2.37 3.52 4.03 4.495 6.61 4.707 2.572.212 3.16 3.18 2.53 4.242-.55.73-1.52.864-2.346 1.04l-1.65.08c-1.296-.046-2.455-.404-3.61-.955-1.93-1.097-3.925-3.383-5.406-5.024.345.658.55 1.938.24 2.53-.878 1.27-4.665 1.26-6.4.47-1.97-.89-6.73-7.162-7.468-11.86 1.96-3.78 4.812-7.07 6.255-11.186-3.146-2.05-4.83-5.384-4.61-9.16l.08-.44c-3.097.59-1.49.37-4.82.628-10.608-.032-19.935-7.37-14.68-18.774.34-.673.664-1.287 1.243-.994.466.237.4 1.18.166 2.227-3.005 13.627 11.67 13.732 20.69 11.21.89-.25 2.67-1.936 3.905-2.495 2.016-.91 4.205-1.282 6.376-1.55 5.4-.63 11.893 2.276 15.19 2.37 3.3.096 7.99-.805 10.87-.615 2.09.098 4.143.483 6.16 1.03 1.306-6.49 1.4-11.27 4.492-12.38 1.814.293 3.213 2.818 4.25 4.167 2.112-.086 4.12.46 6.115 1.066 3.61-.522 6.642-2.593 9.833-4.203-3.234 2.69-3.673 7.075-3.303 11.127.138 2.103-.444 4.386-1.164 6.54-1.348 3.507-3.95 7.204-6.97 7.014-1.14-.036-1.805-.695-2.653-1.4-.164 1.427-.81 2.7-1.434 3.96-1.44 2.797-5.203 4.03-8.687 7.016-3.484 2.985 1.114 13.65 2.23 15.594 1.114 1.94 4.226 2.652 3.02 4.406-.37.58-.936.785-1.54 1.01l-.82.11zm-40.097-8.85l.553.14c.694-.27 2.09.15 2.83.353-1.363-1.31-3.417-3.24-4.897-4.46-.485-1.47-.278-2.96-.174-4.46l.02-.123c-.582 1.205-1.322 2.376-1.72 3.645-.465 1.71 2.07 3.557 3.052 4.615l.336.3z\" fill-rule=\"evenodd\"/></svg>"
},
"$:/core/images/advanced-search-button": {
"title": "$:/core/images/advanced-search-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-advanced-search-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M74.5651535,87.9848361 C66.9581537,93.0488876 57.8237115,96 48,96 C21.490332,96 0,74.509668 0,48 C0,21.490332 21.490332,0 48,0 C74.509668,0 96,21.490332 96,48 C96,57.8541369 93.0305793,67.0147285 87.9377231,74.6357895 L122.284919,108.982985 C125.978897,112.676963 125.973757,118.65366 122.284271,122.343146 C118.593975,126.033442 112.613238,126.032921 108.92411,122.343793 L74.5651535,87.9848361 Z M48,80 C65.673112,80 80,65.673112 80,48 C80,30.326888 65.673112,16 48,16 C30.326888,16 16,30.326888 16,48 C16,65.673112 30.326888,80 48,80 Z\"></path>\n <circle cx=\"48\" cy=\"48\" r=\"8\"></circle>\n <circle cx=\"28\" cy=\"48\" r=\"8\"></circle>\n <circle cx=\"68\" cy=\"48\" r=\"8\"></circle>\n </g>\n</svg>"
},
"$:/core/images/auto-height": {
"title": "$:/core/images/auto-height",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-auto-height tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <path d=\"M67.9867828,114.356363 L67.9579626,99.8785426 C67.9550688,98.4248183 67.1636987,97.087107 65.8909901,96.3845863 L49.9251455,87.5716209 L47.992126,95.0735397 L79.8995411,95.0735397 C84.1215894,95.0735397 85.4638131,89.3810359 81.686497,87.4948823 L49.7971476,71.5713518 L48.0101917,79.1500092 L79.992126,79.1500092 C84.2093753,79.1500092 85.5558421,73.4676733 81.7869993,71.5753162 L49.805065,55.517008 L48.0101916,63.0917009 L79.9921259,63.0917015 C84.2035118,63.0917016 85.5551434,57.4217887 81.7966702,55.5218807 L65.7625147,47.4166161 L67.9579705,50.9864368 L67.9579705,35.6148245 L77.1715737,44.8284272 C78.7336709,46.3905243 81.2663308,46.3905243 82.8284279,44.8284271 C84.390525,43.2663299 84.390525,40.7336699 82.8284278,39.1715728 L66.8284271,23.1715728 C65.2663299,21.6094757 62.73367,21.6094757 61.1715729,23.1715729 L45.1715729,39.1715729 C43.6094757,40.73367 43.6094757,43.26633 45.1715729,44.8284271 C46.73367,46.3905243 49.26633,46.3905243 50.8284271,44.8284271 L59.9579705,35.6988837 L59.9579705,50.9864368 C59.9579705,52.495201 60.806922,53.8755997 62.1534263,54.5562576 L78.1875818,62.6615223 L79.9921261,55.0917015 L48.0101917,55.0917009 C43.7929424,55.0917008 42.4464755,60.7740368 46.2153183,62.6663939 L78.1972526,78.7247021 L79.992126,71.1500092 L48.0101917,71.1500092 C43.7881433,71.1500092 42.4459197,76.842513 46.2232358,78.7286665 L78.1125852,94.6521971 L79.8995411,87.0735397 L47.992126,87.0735397 C43.8588276,87.0735397 42.4404876,92.5780219 46.0591064,94.5754586 L62.024951,103.388424 L59.9579785,99.8944677 L59.9867142,114.32986 L50.8284271,105.171573 C49.26633,103.609476 46.73367,103.609476 45.1715729,105.171573 C43.6094757,106.73367 43.6094757,109.26633 45.1715729,110.828427 L61.1715729,126.828427 C62.73367,128.390524 65.2663299,128.390524 66.8284271,126.828427 L82.8284278,110.828427 C84.390525,109.26633 84.390525,106.73367 82.8284279,105.171573 C81.2663308,103.609476 78.7336709,103.609476 77.1715737,105.171573 L67.9867828,114.356363 L67.9867828,114.356363 Z M16,20 L112,20 C114.209139,20 116,18.209139 116,16 C116,13.790861 114.209139,12 112,12 L16,12 C13.790861,12 12,13.790861 12,16 C12,18.209139 13.790861,20 16,20 L16,20 Z\"></path>\n</svg>"
},
"$:/core/images/blank": {
"title": "$:/core/images/blank",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-blank tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\"></svg>"
},
"$:/core/images/bold": {
"title": "$:/core/images/bold",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-bold tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M41.1456583,51.8095238 L41.1456583,21.8711485 L67.4985994,21.8711485 C70.0084159,21.8711485 72.4285598,22.0802967 74.7591036,22.4985994 C77.0896475,22.9169022 79.1512515,23.6638602 80.9439776,24.7394958 C82.7367036,25.8151314 84.170863,27.3090474 85.2464986,29.2212885 C86.3221342,31.1335296 86.859944,33.5835518 86.859944,36.5714286 C86.859944,41.9496067 85.2465147,45.8337882 82.0196078,48.2240896 C78.792701,50.614391 74.6694929,51.8095238 69.6498599,51.8095238 L41.1456583,51.8095238 Z M13,0 L13,128 L75.0280112,128 C80.7647346,128 86.3519803,127.28292 91.789916,125.848739 C97.2278517,124.414559 102.068139,122.203563 106.310924,119.215686 C110.553709,116.22781 113.929959,112.373506 116.439776,107.652661 C118.949592,102.931816 120.204482,97.3445701 120.204482,90.8907563 C120.204482,82.8832466 118.262391,76.0411115 114.378151,70.3641457 C110.493911,64.6871798 104.607883,60.7133634 96.719888,58.442577 C102.456611,55.6937304 106.788968,52.1680887 109.717087,47.8655462 C112.645206,43.5630037 114.109244,38.1849062 114.109244,31.7310924 C114.109244,25.7553389 113.123259,20.7357813 111.151261,16.6722689 C109.179262,12.6087565 106.400578,9.35201972 102.815126,6.90196078 C99.2296739,4.45190185 94.927196,2.68908101 89.907563,1.61344538 C84.8879301,0.537809748 79.3305627,0 73.2352941,0 L13,0 Z M41.1456583,106.128852 L41.1456583,70.9915966 L71.8011204,70.9915966 C77.896389,70.9915966 82.7964334,72.3958776 86.5014006,75.2044818 C90.2063677,78.0130859 92.0588235,82.7039821 92.0588235,89.2773109 C92.0588235,92.6237329 91.4911355,95.3725383 90.3557423,97.5238095 C89.2203491,99.6750808 87.6965548,101.378145 85.7843137,102.633053 C83.8720726,103.887961 81.661077,104.784311 79.1512605,105.322129 C76.641444,105.859947 74.0121519,106.128852 71.2633053,106.128852 L41.1456583,106.128852 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/cancel-button": {
"title": "$:/core/images/cancel-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-cancel-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n\t<g fill-rule=\"evenodd\">\n\t <path d=\"M64,76.3137085 L47.0294734,93.2842351 C43.9038742,96.4098343 38.8399231,96.4084656 35.7157288,93.2842712 C32.5978915,90.166434 32.5915506,85.0947409 35.7157649,81.9705266 L52.6862915,65 L35.7157649,48.0294734 C32.5901657,44.9038742 32.5915344,39.8399231 35.7157288,36.7157288 C38.833566,33.5978915 43.9052591,33.5915506 47.0294734,36.7157649 L64,53.6862915 L80.9705266,36.7157649 C84.0961258,33.5901657 89.1600769,33.5915344 92.2842712,36.7157288 C95.4021085,39.833566 95.4084494,44.9052591 92.2842351,48.0294734 L75.3137085,65 L92.2842351,81.9705266 C95.4098343,85.0961258 95.4084656,90.1600769 92.2842712,93.2842712 C89.166434,96.4021085 84.0947409,96.4084494 80.9705266,93.2842351 L64,76.3137085 Z M64,129 C99.346224,129 128,100.346224 128,65 C128,29.653776 99.346224,1 64,1 C28.653776,1 1.13686838e-13,29.653776 1.13686838e-13,65 C1.13686838e-13,100.346224 28.653776,129 64,129 Z M64,113 C90.509668,113 112,91.509668 112,65 C112,38.490332 90.509668,17 64,17 C37.490332,17 16,38.490332 16,65 C16,91.509668 37.490332,113 64,113 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/chevron-down": {
"title": "$:/core/images/chevron-down",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-chevron-down tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n\t<g fill-rule=\"evenodd\" transform=\"translate(64.000000, 40.500000) rotate(-270.000000) translate(-64.000000, -40.500000) translate(-22.500000, -26.500000)\">\n <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n\t</g>\n</svg>"
},
"$:/core/images/chevron-left": {
"title": "$:/core/images/chevron-left",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-chevron-left tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\" version=\"1.1\">\n <g fill-rule=\"evenodd\" transform=\"translate(92.500000, 64.000000) rotate(-180.000000) translate(-92.500000, -64.000000) translate(6.000000, -3.000000)\">\n <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n </g>\n</svg>"
},
"$:/core/images/chevron-right": {
"title": "$:/core/images/chevron-right",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-chevron-right tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\" transform=\"translate(-48.000000, -3.000000)\">\n <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n </g>\n</svg>"
},
"$:/core/images/chevron-up": {
"title": "$:/core/images/chevron-up",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-chevron-up tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n\t<g fill-rule=\"evenodd\" transform=\"translate(64.000000, 89.500000) rotate(-90.000000) translate(-64.000000, -89.500000) translate(-22.500000, 22.500000)\">\n <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n\t</g>\n</svg>"
},
"$:/core/images/clone-button": {
"title": "$:/core/images/clone-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-clone-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M32.2650915,96 L32.2650915,120.002359 C32.2650915,124.419334 35.8432884,128 40.2627323,128 L120.002359,128 C124.419334,128 128,124.421803 128,120.002359 L128,40.2627323 C128,35.8457573 124.421803,32.2650915 120.002359,32.2650915 L96,32.2650915 L96,48 L108.858899,48 C110.519357,48 111.853018,49.3405131 111.853018,50.9941198 L111.853018,108.858899 C111.853018,110.519357 110.512505,111.853018 108.858899,111.853018 L50.9941198,111.853018 C49.333661,111.853018 48,110.512505 48,108.858899 L48,96 L32.2650915,96 Z\"></path>\n <path d=\"M40,56 L32.0070969,56 C27.5881712,56 24,52.418278 24,48 C24,43.5907123 27.5848994,40 32.0070969,40 L40,40 L40,32.0070969 C40,27.5881712 43.581722,24 48,24 C52.4092877,24 56,27.5848994 56,32.0070969 L56,40 L63.9929031,40 C68.4118288,40 72,43.581722 72,48 C72,52.4092877 68.4151006,56 63.9929031,56 L56,56 L56,63.9929031 C56,68.4118288 52.418278,72 48,72 C43.5907123,72 40,68.4151006 40,63.9929031 L40,56 Z M7.9992458,0 C3.58138434,0 0,3.5881049 0,7.9992458 L0,88.0007542 C0,92.4186157 3.5881049,96 7.9992458,96 L88.0007542,96 C92.4186157,96 96,92.4118951 96,88.0007542 L96,7.9992458 C96,3.58138434 92.4118951,0 88.0007542,0 L7.9992458,0 Z M19.0010118,16 C17.3435988,16 16,17.336731 16,19.0010118 L16,76.9989882 C16,78.6564012 17.336731,80 19.0010118,80 L76.9989882,80 C78.6564012,80 80,78.663269 80,76.9989882 L80,19.0010118 C80,17.3435988 78.663269,16 76.9989882,16 L19.0010118,16 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/close-all-button": {
"title": "$:/core/images/close-all-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-close-all-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\" transform=\"translate(-23.000000, -23.000000)\">\n <path d=\"M43,131 L22.9976794,131 C18.5827987,131 15,127.418278 15,123 C15,118.590712 18.5806831,115 22.9976794,115 L43,115 L43,94.9976794 C43,90.5827987 46.581722,87 51,87 C55.4092877,87 59,90.5806831 59,94.9976794 L59,115 L79.0023206,115 C83.4172013,115 87,118.581722 87,123 C87,127.409288 83.4193169,131 79.0023206,131 L59,131 L59,151.002321 C59,155.417201 55.418278,159 51,159 C46.5907123,159 43,155.419317 43,151.002321 L43,131 Z\" transform=\"translate(51.000000, 123.000000) rotate(-45.000000) translate(-51.000000, -123.000000) \"></path>\n <path d=\"M43,59 L22.9976794,59 C18.5827987,59 15,55.418278 15,51 C15,46.5907123 18.5806831,43 22.9976794,43 L43,43 L43,22.9976794 C43,18.5827987 46.581722,15 51,15 C55.4092877,15 59,18.5806831 59,22.9976794 L59,43 L79.0023206,43 C83.4172013,43 87,46.581722 87,51 C87,55.4092877 83.4193169,59 79.0023206,59 L59,59 L59,79.0023206 C59,83.4172013 55.418278,87 51,87 C46.5907123,87 43,83.4193169 43,79.0023206 L43,59 Z\" transform=\"translate(51.000000, 51.000000) rotate(-45.000000) translate(-51.000000, -51.000000) \"></path>\n <path d=\"M115,59 L94.9976794,59 C90.5827987,59 87,55.418278 87,51 C87,46.5907123 90.5806831,43 94.9976794,43 L115,43 L115,22.9976794 C115,18.5827987 118.581722,15 123,15 C127.409288,15 131,18.5806831 131,22.9976794 L131,43 L151.002321,43 C155.417201,43 159,46.581722 159,51 C159,55.4092877 155.419317,59 151.002321,59 L131,59 L131,79.0023206 C131,83.4172013 127.418278,87 123,87 C118.590712,87 115,83.4193169 115,79.0023206 L115,59 Z\" transform=\"translate(123.000000, 51.000000) rotate(-45.000000) translate(-123.000000, -51.000000) \"></path>\n <path d=\"M115,131 L94.9976794,131 C90.5827987,131 87,127.418278 87,123 C87,118.590712 90.5806831,115 94.9976794,115 L115,115 L115,94.9976794 C115,90.5827987 118.581722,87 123,87 C127.409288,87 131,90.5806831 131,94.9976794 L131,115 L151.002321,115 C155.417201,115 159,118.581722 159,123 C159,127.409288 155.419317,131 151.002321,131 L131,131 L131,151.002321 C131,155.417201 127.418278,159 123,159 C118.590712,159 115,155.419317 115,151.002321 L115,131 Z\" transform=\"translate(123.000000, 123.000000) rotate(-45.000000) translate(-123.000000, -123.000000) \"></path>\n </g>\n</svg>"
},
"$:/core/images/close-button": {
"title": "$:/core/images/close-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-close-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <g fill-rule=\"evenodd\">\n <path d=\"M65.0864256,75.4091629 L14.9727349,125.522854 C11.8515951,128.643993 6.78104858,128.64922 3.65685425,125.525026 C0.539017023,122.407189 0.5336324,117.334539 3.65902635,114.209145 L53.7727171,64.0954544 L3.65902635,13.9817637 C0.537886594,10.8606239 0.532659916,5.79007744 3.65685425,2.6658831 C6.77469148,-0.451954124 11.8473409,-0.457338747 14.9727349,2.66805521 L65.0864256,52.7817459 L115.200116,2.66805521 C118.321256,-0.453084553 123.391803,-0.458311231 126.515997,2.6658831 C129.633834,5.78372033 129.639219,10.8563698 126.513825,13.9817637 L76.4001341,64.0954544 L126.513825,114.209145 C129.634965,117.330285 129.640191,122.400831 126.515997,125.525026 C123.39816,128.642863 118.32551,128.648248 115.200116,125.522854 L65.0864256,75.4091629 L65.0864256,75.4091629 Z\"></path>\n </g>\n</svg>\n"
},
"$:/core/images/close-others-button": {
"title": "$:/core/images/close-others-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-close-others-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M64,128 C99.346224,128 128,99.346224 128,64 C128,28.653776 99.346224,0 64,0 C28.653776,0 0,28.653776 0,64 C0,99.346224 28.653776,128 64,128 Z M64,112 C90.509668,112 112,90.509668 112,64 C112,37.490332 90.509668,16 64,16 C37.490332,16 16,37.490332 16,64 C16,90.509668 37.490332,112 64,112 Z M64,96 C81.673112,96 96,81.673112 96,64 C96,46.326888 81.673112,32 64,32 C46.326888,32 32,46.326888 32,64 C32,81.673112 46.326888,96 64,96 Z M64,80 C72.836556,80 80,72.836556 80,64 C80,55.163444 72.836556,48 64,48 C55.163444,48 48,55.163444 48,64 C48,72.836556 55.163444,80 64,80 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/copy-clipboard": {
"title": "$:/core/images/copy-clipboard",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-copy-clipboard tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n\t<g fill-rule=\"evenodd\">\n\t\t<rect x=\"40\" y=\"40\" width=\"33\" height=\"8\" rx=\"4\"></rect>\n\t\t<rect x=\"40\" y=\"82\" width=\"17\" height=\"8\" rx=\"4\"></rect>\n\t\t<rect x=\"40\" y=\"54\" width=\"17\" height=\"8\" rx=\"4\"></rect>\n\t\t<rect x=\"40\" y=\"96\" width=\"33\" height=\"8\" rx=\"4\"></rect>\n\t\t<rect x=\"40\" y=\"68\" width=\"12\" height=\"8\" rx=\"4\"></rect>\n\t\t<path d=\"M40,16 L23.9992458,16 C19.5813843,16 16,19.5907123 16,24 C16,24.0016363 16.0000005,24.0032725 16.0000015,24.0049086 C16.0000005,24.0065441 16,24.0081803 16,24.0098166 L16,119.990183 C16,119.99182 16.0000005,119.993456 16.0000015,119.995092 C16.0000005,119.996727 16,119.998364 16,120 C16,124.409288 19.5813843,128 23.9992458,128 L104.000754,128 C106.205061,128 108.203844,127.105595 109.652065,125.659342 C111.102424,124.21251 112,122.214511 112,120.007595 L112,103.992405 C112,99.5776607 108.418278,96 104,96 C99.5907123,96 96,99.5783218 96,103.992405 L96,112 L32,112 L32,32 L96,32 L96,40.0075946 C96,44.4223393 99.581722,48 104,48 C108.409288,48 112,44.4216782 112,40.0075946 L112,23.9924054 C112,21.7851587 111.104671,19.7871591 109.657101,18.3409203 C108.203844,16.8944047 106.205061,16 104.000754,16 L88,16 C88,11.5907123 84.4151006,8 79.9929031,8 L48.0070969,8 C43.5881712,8 40,11.581722 40,16 Z M44,14.9958262 C44,12.7889923 45.7964248,11 48.0000255,11 L79.9999745,11 C82.2091276,11 84,12.7965212 84,14.9958262 L84,19.0041738 C84,21.2110077 82.2035752,23 79.9999745,23 L48.0000255,23 C45.7908724,23 44,21.2034788 44,19.0041738 L44,14.9958262 Z\"></path>\n\t\t<rect x=\"62\" y=\"64\" width=\"66\" height=\"16\" rx=\"8\"></rect>\n\t\t<path d=\"M60.6568542,85.6568542 L76.6568542,69.6568543 L65.3431458,69.6568542 L81.3431458,85.6568542 C84.4673401,88.7810486 89.5326599,88.7810486 92.6568542,85.6568542 C95.7810486,82.5326599 95.7810486,77.4673401 92.6568542,74.3431458 L76.6568542,58.3431458 C73.5326599,55.2189514 68.4673401,55.2189514 65.3431458,58.3431457 L49.3431458,74.3431457 C46.2189514,77.4673401 46.2189514,82.5326599 49.3431457,85.6568542 C52.4673401,88.7810486 57.5326599,88.7810486 60.6568542,85.6568542 L60.6568542,85.6568542 Z\" transform=\"translate(71.000000, 72.000000) rotate(-90.000000) translate(-71.000000, -72.000000) \"></path>\n\t</g>\n</svg>"
},
"$:/core/images/delete-button": {
"title": "$:/core/images/delete-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-delete-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <g fill-rule=\"evenodd\" transform=\"translate(12.000000, 0.000000)\">\n <rect x=\"0\" y=\"11\" width=\"105\" height=\"16\" rx=\"8\"></rect>\n <rect x=\"28\" y=\"0\" width=\"48\" height=\"16\" rx=\"8\"></rect>\n <rect x=\"8\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n <rect x=\"8\" y=\"112\" width=\"88\" height=\"16\" rx=\"8\"></rect>\n <rect x=\"80\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n <rect x=\"56\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n <rect x=\"32\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n </g>\n</svg>"
},
"$:/core/images/done-button": {
"title": "$:/core/images/done-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-done-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <g fill-rule=\"evenodd\">\n <path d=\"M3.52445141,76.8322939 C2.07397484,75.3828178 1.17514421,73.3795385 1.17514421,71.1666288 L1.17514421,23.1836596 C1.17514421,18.7531992 4.75686621,15.1751442 9.17514421,15.1751442 C13.5844319,15.1751442 17.1751442,18.7606787 17.1751442,23.1836596 L17.1751442,63.1751442 L119.173716,63.1751442 C123.590457,63.1751442 127.175144,66.7568662 127.175144,71.1751442 C127.175144,75.5844319 123.592783,79.1751442 119.173716,79.1751442 L9.17657227,79.1751442 C6.96796403,79.1751442 4.9674142,78.279521 3.51911285,76.8315312 Z\" id=\"Rectangle-285\" transform=\"translate(64.175144, 47.175144) rotate(-45.000000) translate(-64.175144, -47.175144) \"></path>\n </g>\n</svg>"
},
"$:/core/images/down-arrow": {
"title": "$:/core/images/down-arrow",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-down-arrow tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <path d=\"M109.35638,81.3533152 C107.923899,82.7869182 105.94502,83.6751442 103.759224,83.6751442 L24.5910645,83.6751442 C20.225873,83.6751442 16.6751442,80.1307318 16.6751442,75.7584775 C16.6751442,71.3951199 20.2192225,67.8418109 24.5910645,67.8418109 L95.8418109,67.8418109 L95.8418109,-3.40893546 C95.8418109,-7.77412698 99.3862233,-11.3248558 103.758478,-11.3248558 C108.121835,-11.3248558 111.675144,-7.78077754 111.675144,-3.40893546 L111.675144,75.7592239 C111.675144,77.9416955 110.789142,79.9205745 109.356651,81.3538862 Z\" transform=\"translate(64.175144, 36.175144) rotate(45.000000) translate(-64.175144, -36.175144) \"></path>\n</svg>"
},
"$:/core/images/download-button": {
"title": "$:/core/images/download-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-download-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path class=\"tc-image-download-button-ring\" d=\"M64,128 C99.346224,128 128,99.346224 128,64 C128,28.653776 99.346224,0 64,0 C28.653776,0 0,28.653776 0,64 C0,99.346224 28.653776,128 64,128 Z M64,112 C90.509668,112 112,90.509668 112,64 C112,37.490332 90.509668,16 64,16 C37.490332,16 16,37.490332 16,64 C16,90.509668 37.490332,112 64,112 Z\"/><path d=\"M34.3496823,66.4308767 L61.2415823,93.634668 C63.0411536,95.4551107 65.9588502,95.4551107 67.7584215,93.634668 L94.6503215,66.4308767 C96.4498928,64.610434 96.4498928,61.6588981 94.6503215,59.8384554 C93.7861334,58.9642445 92.6140473,58.4731195 91.3919019,58.4731195 L82.9324098,58.4731195 C80.3874318,58.4731195 78.3243078,56.3860674 78.3243078,53.8115729 L78.3243078,38.6615466 C78.3243078,36.0870521 76.2611837,34 73.7162058,34 L55.283798,34 C52.7388201,34 50.675696,36.0870521 50.675696,38.6615466 L50.675696,38.6615466 L50.675696,53.8115729 C50.675696,56.3860674 48.612572,58.4731195 46.0675941,58.4731195 L37.608102,58.4731195 C35.063124,58.4731195 33,60.5601716 33,63.134666 C33,64.3709859 33.4854943,65.5566658 34.3496823,66.4308767 L34.3496823,66.4308767 Z\"/></g></svg>"
},
"$:/core/images/edit-button": {
"title": "$:/core/images/edit-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-edit-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <g fill-rule=\"evenodd\">\n <path d=\"M116.870058,45.3431458 L108.870058,45.3431458 L108.870058,45.3431458 L108.870058,61.3431458 L116.870058,61.3431458 L116.870058,45.3431458 Z M124.870058,45.3431458 L127.649881,45.3431458 C132.066101,45.3431458 135.656854,48.9248678 135.656854,53.3431458 C135.656854,57.7524334 132.07201,61.3431458 127.649881,61.3431458 L124.870058,61.3431458 L124.870058,45.3431458 Z M100.870058,45.3431458 L15.6638275,45.3431458 C15.5064377,45.3431458 15.3501085,45.3476943 15.1949638,45.3566664 L15.1949638,45.3566664 C15.0628002,45.3477039 14.928279,45.3431458 14.7913977,45.3431458 C6.68160973,45.3431458 -8.34314575,53.3431458 -8.34314575,53.3431458 C-8.34314575,53.3431458 6.85614548,61.3431458 14.7913977,61.3431458 C14.9266533,61.3431458 15.0596543,61.3384973 15.190398,61.3293588 C15.3470529,61.3385075 15.5049057,61.3431458 15.6638275,61.3431458 L100.870058,61.3431458 L100.870058,45.3431458 L100.870058,45.3431458 Z\" transform=\"translate(63.656854, 53.343146) rotate(-45.000000) translate(-63.656854, -53.343146) \"></path>\n <path d=\"M35.1714596,124.189544 C41.9594858,123.613403 49.068777,121.917633 58.85987,118.842282 C60.6854386,118.268877 62.4306907,117.705515 65.1957709,116.802278 C81.1962861,111.575575 87.0734839,109.994907 93.9414474,109.655721 C102.29855,109.242993 107.795169,111.785371 111.520478,118.355045 C112.610163,120.276732 115.051363,120.951203 116.97305,119.861518 C118.894737,118.771832 119.569207,116.330633 118.479522,114.408946 C113.146151,105.003414 104.734907,101.112919 93.5468356,101.66546 C85.6716631,102.054388 79.4899908,103.716944 62.7116783,109.197722 C59.9734132,110.092199 58.2519873,110.64787 56.4625698,111.20992 C37.002649,117.322218 25.6914684,118.282267 16.8654804,112.957098 C14.9739614,111.815848 12.5154166,112.424061 11.3741667,114.31558 C10.2329168,116.207099 10.84113,118.665644 12.7326489,119.806894 C19.0655164,123.627836 26.4866335,124.926678 35.1714596,124.189544 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/erase": {
"title": "$:/core/images/erase",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-erase tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M60.0870401,127.996166 L123.102318,64.980888 C129.636723,58.4464827 129.629513,47.8655877 123.098967,41.3350425 L99.4657866,17.7018617 C92.927448,11.1635231 82.3486358,11.1698163 75.8199411,17.698511 L4.89768189,88.6207702 C-1.63672343,95.1551755 -1.6295126,105.736071 4.90103262,112.266616 L20.6305829,127.996166 L60.0870401,127.996166 Z M25.1375576,120.682546 L10.812569,106.357558 C7.5455063,103.090495 7.54523836,97.793808 10.8048093,94.5342371 L46.2691086,59.0699377 L81.7308914,94.5317205 L55.5800654,120.682546 L25.1375576,120.682546 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/excise": {
"title": "$:/core/images/excise",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-excise tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M56,107.313709 L53.6568542,109.656854 C50.5326599,112.781049 45.4673401,112.781049 42.3431457,109.656854 C39.2189514,106.53266 39.2189514,101.46734 42.3431458,98.3431457 L58.3431458,82.3431457 C61.4673401,79.2189514 66.5326599,79.2189514 69.6568542,82.3431458 L85.6568542,98.3431458 C88.7810486,101.46734 88.7810486,106.53266 85.6568542,109.656854 C82.5326599,112.781049 77.4673401,112.781049 74.3431458,109.656854 L72,107.313708 L72,121.597798 C72,125.133636 68.418278,128 64,128 C59.581722,128 56,125.133636 56,121.597798 L56,107.313709 Z M0,40.0070969 C0,35.5848994 3.59071231,32 8,32 C12.418278,32 16,35.5881712 16,40.0070969 L16,71.9929031 C16,76.4151006 12.4092877,80 8,80 C3.581722,80 0,76.4118288 0,71.9929031 L0,40.0070969 Z M32,40.0070969 C32,35.5848994 35.5907123,32 40,32 C44.418278,32 48,35.5881712 48,40.0070969 L48,71.9929031 C48,76.4151006 44.4092877,80 40,80 C35.581722,80 32,76.4118288 32,71.9929031 L32,40.0070969 Z M80,40.0070969 C80,35.5848994 83.5907123,32 88,32 C92.418278,32 96,35.5881712 96,40.0070969 L96,71.9929031 C96,76.4151006 92.4092877,80 88,80 C83.581722,80 80,76.4118288 80,71.9929031 L80,40.0070969 Z M56,8.00709688 C56,3.58489938 59.5907123,0 64,0 C68.418278,0 72,3.58817117 72,8.00709688 L72,39.9929031 C72,44.4151006 68.4092877,48 64,48 C59.581722,48 56,44.4118288 56,39.9929031 L56,8.00709688 Z M112,40.0070969 C112,35.5848994 115.590712,32 120,32 C124.418278,32 128,35.5881712 128,40.0070969 L128,71.9929031 C128,76.4151006 124.409288,80 120,80 C115.581722,80 112,76.4118288 112,71.9929031 L112,40.0070969 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/export-button": {
"title": "$:/core/images/export-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-export-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M8.00348646,127.999999 C8.00464867,128 8.00581094,128 8.00697327,128 L119.993027,128 C122.205254,128 124.207939,127.101378 125.657096,125.651198 L125.656838,125.65759 C127.104563,124.210109 128,122.21009 128,119.999949 L128,56.0000511 C128,51.5817449 124.409288,48 120,48 C115.581722,48 112,51.5797863 112,56.0000511 L112,112 L16,112 L16,56.0000511 C16,51.5817449 12.4092877,48 8,48 C3.581722,48 7.10542736e-15,51.5797863 7.10542736e-15,56.0000511 L7.10542736e-15,119.999949 C7.10542736e-15,124.418255 3.59071231,128 8,128 C8.00116233,128 8.0023246,128 8.00348681,127.999999 Z M56.6235633,27.3113724 L47.6580188,36.2769169 C44.5333664,39.4015692 39.4634864,39.4061295 36.339292,36.2819351 C33.2214548,33.1640979 33.2173444,28.0901742 36.3443103,24.9632084 L58.9616908,2.34582788 C60.5248533,0.782665335 62.5748436,0.000361191261 64.624516,2.38225238e-14 L64.6193616,0.00151809229 C66.6695374,0.000796251595 68.7211167,0.781508799 70.2854358,2.34582788 L92.9028163,24.9632084 C96.0274686,28.0878607 96.0320289,33.1577408 92.9078345,36.2819351 C89.7899973,39.3997724 84.7160736,39.4038827 81.5891078,36.2769169 L72.6235633,27.3113724 L72.6235633,88.5669606 C72.6235633,92.9781015 69.0418413,96.5662064 64.6235633,96.5662064 C60.2142756,96.5662064 56.6235633,92.984822 56.6235633,88.5669606 L56.6235633,27.3113724 L56.6235633,27.3113724 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/file": {
"title": "$:/core/images/file",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-file tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"nonzero\">\n <path d=\"M111.96811,30.5 L112,30.5 L112,119.999079 C112,124.417866 108.419113,128 104.000754,128 L23.9992458,128 C19.5813843,128 16,124.417687 16,119.999079 L16,8.00092105 C16,3.58213437 19.5808867,0 23.9992458,0 L81,0 L81,0.0201838424 C83.1589869,-0.071534047 85.3482153,0.707077645 86.9982489,2.35711116 L109.625176,24.9840387 C111.151676,26.510538 111.932942,28.4998414 111.96811,30.5 L111.96811,30.5 Z M81,8 L24,8 L24,120 L104,120 L104,30.5 L89.0003461,30.5 C84.5818769,30.5 81,26.9216269 81,22.4996539 L81,8 Z\"></path>\n <rect x=\"32\" y=\"36\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n <rect x=\"32\" y=\"52\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n <rect x=\"32\" y=\"68\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n <rect x=\"32\" y=\"84\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n <rect x=\"32\" y=\"100\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n <rect x=\"32\" y=\"20\" width=\"40\" height=\"8\" rx=\"4\"></rect>\n </g>\n</svg>"
},
"$:/core/images/fixed-height": {
"title": "$:/core/images/fixed-height",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-fixed-height tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M60,35.6568542 L50.8284271,44.8284271 C49.26633,46.3905243 46.73367,46.3905243 45.1715729,44.8284271 C43.6094757,43.26633 43.6094757,40.73367 45.1715729,39.1715729 L61.1715729,23.1715729 C62.73367,21.6094757 65.2663299,21.6094757 66.8284271,23.1715728 L82.8284278,39.1715728 C84.390525,40.7336699 84.390525,43.2663299 82.8284279,44.8284271 C81.2663308,46.3905243 78.7336709,46.3905243 77.1715737,44.8284272 L68,35.6568539 L68,93.3431461 L77.1715737,84.1715728 C78.7336709,82.6094757 81.2663308,82.6094757 82.8284279,84.1715729 C84.390525,85.7336701 84.390525,88.2663301 82.8284278,89.8284272 L66.8284271,105.828427 C65.2663299,107.390524 62.73367,107.390524 61.1715729,105.828427 L45.1715729,89.8284271 C43.6094757,88.26633 43.6094757,85.73367 45.1715729,84.1715729 C46.73367,82.6094757 49.26633,82.6094757 50.8284271,84.1715729 L60,93.3431458 L60,35.6568542 L60,35.6568542 Z M16,116 L112,116 C114.209139,116 116,114.209139 116,112 C116,109.790861 114.209139,108 112,108 L16,108 C13.790861,108 12,109.790861 12,112 C12,114.209139 13.790861,116 16,116 L16,116 Z M16,20 L112,20 C114.209139,20 116,18.209139 116,16 C116,13.790861 114.209139,12 112,12 L16,12 C13.790861,12 12,13.790861 12,16 C12,18.209139 13.790861,20 16,20 L16,20 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/fold-all-button": {
"title": "$:/core/images/fold-all-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-fold-all tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <rect x=\"0\" y=\"0\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n <rect x=\"0\" y=\"64\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n <path d=\"M64.0292774,58.6235628 C61.9791013,58.6242848 59.9275217,57.8435723 58.3632024,56.279253 L35.7458219,33.6618725 C32.6211696,30.5372202 32.6166093,25.4673401 35.7408036,22.3431458 C38.8586409,19.2253085 43.9325646,19.2211982 47.0595304,22.348164 L64.0250749,39.3137085 L80.9906194,22.348164 C84.1152717,19.2235117 89.1851518,19.2189514 92.3093461,22.3431458 C95.4271834,25.460983 95.4312937,30.5349067 92.3043279,33.6618725 L69.6869474,56.279253 C68.1237851,57.8424153 66.0737951,58.6247195 64.0241231,58.6250809 Z\" transform=\"translate(64.024316, 39.313708) scale(1, -1) translate(-64.024316, -39.313708) \"></path>\n <path d=\"M64.0292774,123.621227 C61.9791013,123.621949 59.9275217,122.841236 58.3632024,121.276917 L35.7458219,98.6595365 C32.6211696,95.5348842 32.6166093,90.4650041 35.7408036,87.3408098 C38.8586409,84.2229725 43.9325646,84.2188622 47.0595304,87.345828 L64.0250749,104.311373 L80.9906194,87.345828 C84.1152717,84.2211757 89.1851518,84.2166154 92.3093461,87.3408098 C95.4271834,90.458647 95.4312937,95.5325707 92.3043279,98.6595365 L69.6869474,121.276917 C68.1237851,122.840079 66.0737951,123.622383 64.0241231,123.622745 Z\" transform=\"translate(64.024316, 104.311372) scale(1, -1) translate(-64.024316, -104.311372) \"></path>\n </g>\n</svg>"
},
"$:/core/images/fold-button": {
"title": "$:/core/images/fold-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-fold tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <rect x=\"0\" y=\"0\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n <path d=\"M64.0292774,63.6235628 C61.9791013,63.6242848 59.9275217,62.8435723 58.3632024,61.279253 L35.7458219,38.6618725 C32.6211696,35.5372202 32.6166093,30.4673401 35.7408036,27.3431458 C38.8586409,24.2253085 43.9325646,24.2211982 47.0595304,27.348164 L64.0250749,44.3137085 L80.9906194,27.348164 C84.1152717,24.2235117 89.1851518,24.2189514 92.3093461,27.3431458 C95.4271834,30.460983 95.4312937,35.5349067 92.3043279,38.6618725 L69.6869474,61.279253 C68.1237851,62.8424153 66.0737951,63.6247195 64.0241231,63.6250809 Z\" transform=\"translate(64.024316, 44.313708) scale(1, -1) translate(-64.024316, -44.313708) \"></path>\n <path d=\"M64.0049614,105.998482 C61.9547853,105.999204 59.9032057,105.218491 58.3388864,103.654172 L35.7215059,81.0367916 C32.5968535,77.9121393 32.5922933,72.8422592 35.7164876,69.7180649 C38.8343248,66.6002276 43.9082485,66.5961173 47.0352144,69.7230831 L64.0007589,86.6886276 L80.9663034,69.7230831 C84.0909557,66.5984308 89.1608358,66.5938705 92.2850301,69.7180649 C95.4028673,72.8359021 95.4069777,77.9098258 92.2800119,81.0367916 L69.6626314,103.654172 C68.099469,105.217334 66.0494791,105.999639 63.999807,106 Z\" transform=\"translate(64.000000, 86.688628) scale(1, -1) translate(-64.000000, -86.688628) \"></path>\n </g>\n</svg>"
},
"$:/core/images/fold-others-button": {
"title": "$:/core/images/fold-others-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-fold-others tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <rect x=\"0\" y=\"56.0314331\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n <path d=\"M101.657101,104.948818 C100.207918,103.498614 98.2051847,102.599976 95.9929031,102.599976 L72,102.599976 L72,78.6070725 C72,76.3964271 71.1036108,74.3936927 69.6545293,72.9441002 L69.6571005,72.9488183 C68.2079177,71.4986143 66.2051847,70.5999756 63.9929031,70.5999756 L32.0070969,70.5999756 C27.5881712,70.5999756 24,74.1816976 24,78.5999756 C24,83.0092633 27.5848994,86.5999756 32.0070969,86.5999756 L56,86.5999756 L56,110.592879 C56,112.803524 56.8963895,114.806259 58.3454713,116.255852 L58.3429,116.251133 C59.7920828,117.701337 61.7948156,118.599976 64.0070969,118.599976 L88,118.599976 L88,142.592879 C88,147.011804 91.581722,150.599976 96,150.599976 C100.409288,150.599976 104,147.015076 104,142.592879 L104,110.607072 C104,108.396427 103.103611,106.393693 101.654529,104.9441 Z\" transform=\"translate(64.000000, 110.599976) rotate(-45.000000) translate(-64.000000, -110.599976) \"></path>\n <path d=\"M101.725643,11.7488671 C100.27646,10.2986632 98.2737272,9.40002441 96.0614456,9.40002441 L72.0685425,9.40002441 L72.0685425,-14.5928787 C72.0685425,-16.8035241 71.1721533,-18.8062584 69.7230718,-20.255851 L69.725643,-20.2511329 C68.2764602,-21.7013368 66.2737272,-22.5999756 64.0614456,-22.5999756 L32.0756394,-22.5999756 C27.6567137,-22.5999756 24.0685425,-19.0182536 24.0685425,-14.5999756 C24.0685425,-10.1906879 27.6534419,-6.59997559 32.0756394,-6.59997559 L56.0685425,-6.59997559 L56.0685425,17.3929275 C56.0685425,19.6035732 56.964932,21.6063078 58.4140138,23.0559004 L58.4114425,23.0511823 C59.8606253,24.5013859 61.8633581,25.4000244 64.0756394,25.4000244 L88.0685425,25.4000244 L88.0685425,49.3929275 C88.0685425,53.8118532 91.6502645,57.4000244 96.0685425,57.4000244 C100.47783,57.4000244 104.068542,53.815125 104.068542,49.3929275 L104.068542,17.4071213 C104.068542,15.1964759 103.172153,13.1937416 101.723072,11.744149 Z\" transform=\"translate(64.068542, 17.400024) scale(1, -1) rotate(-45.000000) translate(-64.068542, -17.400024) \"></path>\n </g>\n</svg>"
},
"$:/core/images/folder": {
"title": "$:/core/images/folder",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-folder tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M55.6943257,128.000004 L7.99859666,128.000004 C3.5810937,128.000004 0,124.413822 0,119.996384 L0,48.0036243 C0,43.5833471 3.58387508,40.0000044 7.99859666,40.0000044 L16,40.0000044 L16,31.9999914 C16,27.5817181 19.5783731,24 24.0003461,24 L55.9996539,24 C60.4181231,24 64,27.5800761 64,31.9999914 L64,40.0000044 L104.001403,40.0000044 C108.418906,40.0000044 112,43.5861868 112,48.0036243 L112,59.8298353 L104,59.7475921 L104,51.9994189 C104,49.7887607 102.207895,48.0000044 99.9972215,48.0000044 L56,48.0000044 L56,36.0000255 C56,33.7898932 54.2072328,32 51.9957423,32 L28.0042577,32 C25.7890275,32 24,33.7908724 24,36.0000255 L24,48.0000044 L12.0027785,48.0000044 C9.78987688,48.0000044 8,49.7906032 8,51.9994189 L8,116.00059 C8,118.211248 9.79210499,120.000004 12.0027785,120.000004 L58.7630167,120.000004 L55.6943257,128.000004 L55.6943257,128.000004 Z\"></path>\n <path d=\"M23.8728955,55.5 L119.875702,55.5 C124.293205,55.5 126.87957,59.5532655 125.650111,64.5630007 L112.305967,118.936999 C111.077582,123.942356 106.497904,128 102.083183,128 L6.08037597,128 C1.66287302,128 -0.923492342,123.946735 0.305967145,118.936999 L13.650111,64.5630007 C14.878496,59.5576436 19.4581739,55.5 23.8728955,55.5 L23.8728955,55.5 L23.8728955,55.5 Z M25.6530124,64 L113.647455,64 C115.858129,64 117.151473,66.0930612 116.538306,68.6662267 L105.417772,115.333773 C104.803671,117.910859 102.515967,120 100.303066,120 L12.3086228,120 C10.0979492,120 8.8046054,117.906939 9.41777189,115.333773 L20.5383062,68.6662267 C21.1524069,66.0891409 23.4401107,64 25.6530124,64 L25.6530124,64 L25.6530124,64 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/full-screen-button": {
"title": "$:/core/images/full-screen-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-full-screen-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g>\n <g>\n <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n </g>\n <g transform=\"translate(104.000000, 104.000000) rotate(-180.000000) translate(-104.000000, -104.000000) translate(80.000000, 80.000000)\">\n <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n </g>\n <g transform=\"translate(24.000000, 104.000000) rotate(-90.000000) translate(-24.000000, -104.000000) translate(0.000000, 80.000000)\">\n <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n </g>\n <g transform=\"translate(104.000000, 24.000000) rotate(90.000000) translate(-104.000000, -24.000000) translate(80.000000, 0.000000)\">\n <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n </g>\n </g>\n</svg>"
},
"$:/core/images/github": {
"title": "$:/core/images/github",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-github tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M63.9383506,1.60695328 C28.6017227,1.60695328 -0.055756057,30.2970814 -0.055756057,65.6906208 C-0.055756057,94.003092 18.2804728,118.019715 43.7123154,126.493393 C46.9143781,127.083482 48.0812647,125.104717 48.0812647,123.405261 C48.0812647,121.886765 48.02626,117.85449 47.9948287,112.508284 C30.1929317,116.379268 26.4368926,103.916587 26.4368926,103.916587 C23.5255693,96.5129372 19.3294921,94.5420399 19.3294921,94.5420399 C13.5186324,90.5687739 19.7695302,90.6474524 19.7695302,90.6474524 C26.1933001,91.099854 29.5721638,97.2525155 29.5721638,97.2525155 C35.2808718,107.044059 44.5531024,104.215566 48.1991321,102.575118 C48.7806109,98.4366275 50.4346826,95.612068 52.2616263,94.0109598 C38.0507543,92.3941159 23.1091047,86.8944862 23.1091047,62.3389152 C23.1091047,55.3443933 25.6039634,49.6205298 29.6978889,45.1437211 C29.0378318,43.5229433 26.8415704,37.0044266 30.3265147,28.1845627 C30.3265147,28.1845627 35.6973364,26.4615028 47.9241083,34.7542205 C53.027764,33.330139 58.5046663,32.6220321 63.9462084,32.5944947 C69.3838216,32.6220321 74.856795,33.330139 79.9683085,34.7542205 C92.1872225,26.4615028 97.5501864,28.1845627 97.5501864,28.1845627 C101.042989,37.0044266 98.8467271,43.5229433 98.190599,45.1437211 C102.292382,49.6205298 104.767596,55.3443933 104.767596,62.3389152 C104.767596,86.9574291 89.8023734,92.3744463 75.5482834,93.9598188 C77.8427675,95.9385839 79.8897303,99.8489072 79.8897303,105.828476 C79.8897303,114.392635 79.8111521,121.304544 79.8111521,123.405261 C79.8111521,125.120453 80.966252,127.114954 84.2115327,126.489459 C109.623731,117.996111 127.944244,93.9952241 127.944244,65.6906208 C127.944244,30.2970814 99.2867652,1.60695328 63.9383506,1.60695328\"></path>\n </g>\n </svg>\n"
},
"$:/core/images/globe": {
"title": "$:/core/images/globe",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-globe tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M72.8111354,37.1275855 C72.8111354,37.9789875 72.8111354,38.8303894 72.8111354,39.6817913 C72.8111354,41.8784743 73.7885604,46.5631866 72.8111354,48.5143758 C71.3445471,51.4420595 68.1617327,52.0543531 66.4170946,54.3812641 C65.2352215,55.9575873 61.7987417,64.9821523 62.7262858,67.3005778 C66.6959269,77.2228204 74.26087,70.4881886 80.6887657,76.594328 C81.5527211,77.415037 83.5758191,78.8666631 83.985137,79.8899578 C87.2742852,88.1128283 76.4086873,94.8989524 87.7419325,106.189751 C88.9872885,107.430443 91.555495,102.372895 91.8205061,101.575869 C92.6726866,99.0129203 98.5458765,96.1267309 100.908882,94.5234439 C102.928056,93.1534443 105.782168,91.8557166 107.236936,89.7775886 C109.507391,86.5342557 108.717505,82.2640435 110.334606,79.0328716 C112.473794,74.7585014 114.163418,69.3979002 116.332726,65.0674086 C120.230862,57.2857361 121.054075,67.1596684 121.400359,67.5059523 C121.757734,67.8633269 122.411167,67.5059523 122.916571,67.5059523 C123.011132,67.5059523 124.364019,67.6048489 124.432783,67.5059523 C125.0832,66.5705216 123.390209,49.5852316 123.114531,48.2089091 C121.710578,41.1996597 116.17083,32.4278331 111.249523,27.7092761 C104.975994,21.6942076 104.160516,11.5121686 92.9912146,12.7547535 C92.7872931,12.7774397 87.906794,22.9027026 85.2136766,26.2672064 C81.486311,30.9237934 82.7434931,22.1144904 78.6876623,22.1144904 C78.6065806,22.1144904 77.5045497,22.0107615 77.4353971,22.1144904 C76.8488637,22.9942905 75.9952305,26.0101404 75.1288269,26.5311533 C74.8635477,26.6906793 73.4071369,26.2924966 73.2826811,26.5311533 C71.0401728,30.8313939 81.5394677,28.7427264 79.075427,34.482926 C76.7225098,39.9642538 72.747373,32.4860199 72.747373,43.0434079\"></path>\n <path d=\"M44.4668556,7.01044608 C54.151517,13.1403033 45.1489715,19.2084878 47.1611905,23.2253896 C48.8157833,26.5283781 51.4021933,28.6198851 48.8753629,33.038878 C46.8123257,36.6467763 42.0052989,37.0050492 39.251679,39.7621111 C36.2115749,42.8060154 33.7884281,48.7028116 32.4624592,52.6732691 C30.8452419,57.5158356 47.0088721,59.5388126 44.5246867,63.6811917 C43.1386839,65.9923513 37.7785192,65.1466282 36.0880227,63.8791519 C34.9234453,63.0059918 32.4946425,63.3331166 31.6713597,62.0997342 C29.0575851,58.1839669 29.4107339,54.0758543 28.0457962,49.9707786 C27.1076833,47.1493864 21.732611,47.8501656 20.2022714,49.3776393 C19.6790362,49.8998948 19.8723378,51.1703278 19.8723378,51.8829111 C19.8723378,57.1682405 26.9914913,55.1986414 26.9914913,58.3421973 C26.9914913,72.9792302 30.9191897,64.8771867 38.1313873,69.6793121 C48.1678018,76.3618966 45.9763926,76.981595 53.0777543,84.0829567 C56.7511941,87.7563965 60.8192437,87.7689005 62.503478,93.3767069 C64.1046972,98.7081071 53.1759798,98.7157031 50.786754,100.825053 C49.663965,101.816317 47.9736094,104.970571 46.5680513,105.439676 C44.7757187,106.037867 43.334221,105.93607 41.6242359,107.219093 C39.1967302,109.040481 37.7241465,112.151588 37.6034934,112.030935 C35.4555278,109.88297 34.0848666,96.5511248 33.7147244,93.7726273 C33.1258872,89.3524817 28.1241923,88.2337027 26.7275443,84.7420826 C25.1572737,80.8164061 28.2518481,75.223612 25.599097,70.9819941 C19.0797019,60.557804 13.7775712,56.4811506 10.2493953,44.6896152 C9.3074899,41.5416683 13.5912267,38.1609942 15.1264825,35.8570308 C17.0029359,33.0410312 17.7876232,30.0028946 19.8723378,27.2224065 C22.146793,24.1888519 40.8551166,9.46076832 43.8574051,8.63490613 L44.4668556,7.01044608 Z\"></path>\n <path d=\"M64,126 C98.2416545,126 126,98.2416545 126,64 C126,29.7583455 98.2416545,2 64,2 C29.7583455,2 2,29.7583455 2,64 C2,98.2416545 29.7583455,126 64,126 Z M64,120 C94.927946,120 120,94.927946 120,64 C120,33.072054 94.927946,8 64,8 C33.072054,8 8,33.072054 8,64 C8,94.927946 33.072054,120 64,120 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/heading-1": {
"title": "$:/core/images/heading-1",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-heading-1 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M14,30 L27.25,30 L27.25,60.104 L61.7,60.104 L61.7,30 L74.95,30 L74.95,105.684 L61.7,105.684 L61.7,71.552 L27.25,71.552 L27.25,105.684 L14,105.684 L14,30 Z M84.3350766,43.78 C86.8790893,43.78 89.3523979,43.5680021 91.7550766,43.144 C94.1577553,42.7199979 96.3307336,42.0133383 98.2740766,41.024 C100.21742,40.0346617 101.87807,38.7626744 103.256077,37.208 C104.634084,35.6533256 105.535075,33.7453446 105.959077,31.484 L115.817077,31.484 L115.817077,105.684 L102.567077,105.684 L102.567077,53.32 L84.3350766,53.32 L84.3350766,43.78 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/heading-2": {
"title": "$:/core/images/heading-2",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-heading-2 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M6,30 L19.25,30 L19.25,60.104 L53.7,60.104 L53.7,30 L66.95,30 L66.95,105.684 L53.7,105.684 L53.7,71.552 L19.25,71.552 L19.25,105.684 L6,105.684 L6,30 Z M125.519077,105.684 L74.8510766,105.684 C74.9217436,99.5359693 76.4057288,94.1653563 79.3030766,89.572 C82.2004244,84.9786437 86.1577182,80.986017 91.1750766,77.594 C93.5777553,75.8273245 96.0863969,74.113675 98.7010766,72.453 C101.315756,70.792325 103.718399,69.0080095 105.909077,67.1 C108.099754,65.1919905 109.901736,63.1250111 111.315077,60.899 C112.728417,58.6729889 113.47041,56.1113478 113.541077,53.214 C113.541077,51.8713266 113.382078,50.4403409 113.064077,48.921 C112.746075,47.4016591 112.127748,45.9883399 111.209077,44.681 C110.290405,43.3736601 109.018418,42.2783377 107.393077,41.395 C105.767735,40.5116622 103.647756,40.07 101.033077,40.07 C98.6303979,40.07 96.6340846,40.5469952 95.0440766,41.501 C93.4540687,42.4550048 92.1820814,43.762325 91.2280766,45.423 C90.2740719,47.083675 89.5674123,49.0446554 89.1080766,51.306 C88.648741,53.5673446 88.3837436,56.0053203 88.3130766,58.62 L76.2290766,58.62 C76.2290766,54.5213128 76.7767378,50.7230175 77.8720766,47.225 C78.9674154,43.7269825 80.610399,40.7060127 82.8010766,38.162 C84.9917542,35.6179873 87.6593942,33.6216739 90.8040766,32.173 C93.948759,30.7243261 97.6057224,30 101.775077,30 C106.297766,30 110.078395,30.7419926 113.117077,32.226 C116.155758,33.7100074 118.611401,35.5826554 120.484077,37.844 C122.356753,40.1053446 123.681739,42.5609868 124.459077,45.211 C125.236414,47.8610133 125.625077,50.3873213 125.625077,52.79 C125.625077,55.7580148 125.165748,58.4433213 124.247077,60.846 C123.328405,63.2486787 122.091751,65.4569899 120.537077,67.471 C118.982402,69.4850101 117.215753,71.3399915 115.237077,73.036 C113.2584,74.7320085 111.209087,76.3219926 109.089077,77.806 C106.969066,79.2900074 104.849087,80.7033266 102.729077,82.046 C100.609066,83.3886734 98.6480856,84.7313266 96.8460766,86.074 C95.0440676,87.4166734 93.47175,88.8123261 92.1290766,90.261 C90.7864032,91.7096739 89.8677458,93.2466585 89.3730766,94.872 L125.519077,94.872 L125.519077,105.684 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/heading-3": {
"title": "$:/core/images/heading-3",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-heading-3 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M6,30 L19.25,30 L19.25,60.104 L53.7,60.104 L53.7,30 L66.95,30 L66.95,105.684 L53.7,105.684 L53.7,71.552 L19.25,71.552 L19.25,105.684 L6,105.684 L6,30 Z M94.8850766,62.224 C96.8637532,62.294667 98.8424001,62.1533351 100.821077,61.8 C102.799753,61.4466649 104.566402,60.8283378 106.121077,59.945 C107.675751,59.0616623 108.930072,57.8426744 109.884077,56.288 C110.838081,54.7333256 111.315077,52.8253446 111.315077,50.564 C111.315077,47.3839841 110.237421,44.8400095 108.082077,42.932 C105.926733,41.0239905 103.153094,40.07 99.7610766,40.07 C97.641066,40.07 95.8037511,40.4939958 94.2490766,41.342 C92.6944022,42.1900042 91.4047484,43.3383261 90.3800766,44.787 C89.3554048,46.2356739 88.5957458,47.860991 88.1010766,49.663 C87.6064075,51.465009 87.3944096,53.3199905 87.4650766,55.228 L75.3810766,55.228 C75.5224107,51.623982 76.1937373,48.2850154 77.3950766,45.211 C78.596416,42.1369846 80.2393995,39.4693446 82.3240766,37.208 C84.4087537,34.9466554 86.9350618,33.1800064 89.9030766,31.908 C92.8710915,30.6359936 96.2277246,30 99.9730766,30 C102.870424,30 105.714729,30.4239958 108.506077,31.272 C111.297424,32.1200042 113.806065,33.3566585 116.032077,34.982 C118.258088,36.6073415 120.042403,38.6743208 121.385077,41.183 C122.72775,43.6916792 123.399077,46.5713171 123.399077,49.822 C123.399077,53.5673521 122.551085,56.8356527 120.855077,59.627 C119.159068,62.4183473 116.509095,64.4499936 112.905077,65.722 L112.905077,65.934 C117.145098,66.7820042 120.448731,68.8843166 122.816077,72.241 C125.183422,75.5976835 126.367077,79.6786426 126.367077,84.484 C126.367077,88.017351 125.660417,91.1796527 124.247077,93.971 C122.833736,96.7623473 120.925755,99.129657 118.523077,101.073 C116.120398,103.016343 113.329093,104.517995 110.149077,105.578 C106.969061,106.638005 103.612428,107.168 100.079077,107.168 C95.7683884,107.168 92.005426,106.549673 88.7900766,105.313 C85.5747272,104.076327 82.8894207,102.327345 80.7340766,100.066 C78.5787325,97.8046554 76.9357489,95.0840159 75.8050766,91.904 C74.6744043,88.7239841 74.0737436,85.1906861 74.0030766,81.304 L86.0870766,81.304 C85.9457426,85.8266893 87.0587315,89.5896517 89.4260766,92.593 C91.7934218,95.5963483 95.3443863,97.098 100.079077,97.098 C104.107097,97.098 107.481396,95.9496782 110.202077,93.653 C112.922757,91.3563219 114.283077,88.0880212 114.283077,83.848 C114.283077,80.9506522 113.717749,78.6540085 112.587077,76.958 C111.456404,75.2619915 109.972419,73.9723378 108.135077,73.089 C106.297734,72.2056623 104.230755,71.6580011 101.934077,71.446 C99.6373985,71.2339989 97.2877553,71.163333 94.8850766,71.234 L94.8850766,62.224 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/heading-4": {
"title": "$:/core/images/heading-4",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-heading-4 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M8,30 L21.25,30 L21.25,60.104 L55.7,60.104 L55.7,30 L68.95,30 L68.95,105.684 L55.7,105.684 L55.7,71.552 L21.25,71.552 L21.25,105.684 L8,105.684 L8,30 Z M84.5890766,78.548 L107.061077,78.548 L107.061077,45.9 L106.849077,45.9 L84.5890766,78.548 Z M128.049077,88.088 L118.509077,88.088 L118.509077,105.684 L107.061077,105.684 L107.061077,88.088 L75.2610766,88.088 L75.2610766,76.11 L107.061077,31.484 L118.509077,31.484 L118.509077,78.548 L128.049077,78.548 L128.049077,88.088 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/heading-5": {
"title": "$:/core/images/heading-5",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-heading-5 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M6,30 L19.25,30 L19.25,60.104 L53.7,60.104 L53.7,30 L66.95,30 L66.95,105.684 L53.7,105.684 L53.7,71.552 L19.25,71.552 L19.25,105.684 L6,105.684 L6,30 Z M83.7550766,31.484 L122.127077,31.484 L122.127077,42.296 L92.7650766,42.296 L88.9490766,61.164 L89.1610766,61.376 C90.7864181,59.5386575 92.8533974,58.1430048 95.3620766,57.189 C97.8707558,56.2349952 100.361731,55.758 102.835077,55.758 C106.509762,55.758 109.795729,56.3763272 112.693077,57.613 C115.590424,58.8496729 118.0284,60.5809889 120.007077,62.807 C121.985753,65.0330111 123.487405,67.6653181 124.512077,70.704 C125.536748,73.7426819 126.049077,77.028649 126.049077,80.562 C126.049077,83.5300148 125.572081,86.5863176 124.618077,89.731 C123.664072,92.8756824 122.144754,95.7376538 120.060077,98.317 C117.9754,100.896346 115.30776,103.016325 112.057077,104.677 C108.806394,106.337675 104.919766,107.168 100.397077,107.168 C96.7930586,107.168 93.454092,106.691005 90.3800766,105.737 C87.3060613,104.782995 84.6030883,103.35201 82.2710766,101.444 C79.939065,99.5359905 78.0840835,97.1863473 76.7060766,94.395 C75.3280697,91.6036527 74.5684107,88.3353521 74.4270766,84.59 L86.5110766,84.59 C86.8644117,88.6180201 88.2423979,91.7096559 90.6450766,93.865 C93.0477553,96.0203441 96.2277235,97.098 100.185077,97.098 C102.729089,97.098 104.884401,96.6740042 106.651077,95.826 C108.417752,94.9779958 109.848738,93.8120074 110.944077,92.328 C112.039415,90.8439926 112.816741,89.1126766 113.276077,87.134 C113.735412,85.1553234 113.965077,83.0353446 113.965077,80.774 C113.965077,78.7246564 113.682413,76.763676 113.117077,74.891 C112.55174,73.018324 111.703749,71.3753404 110.573077,69.962 C109.442404,68.5486596 107.976086,67.4180042 106.174077,66.57 C104.372068,65.7219958 102.269755,65.298 99.8670766,65.298 C97.3230639,65.298 94.9380878,65.7749952 92.7120766,66.729 C90.4860655,67.6830048 88.8784149,69.4673203 87.8890766,72.082 L75.8050766,72.082 L83.7550766,31.484 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/heading-6": {
"title": "$:/core/images/heading-6",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-heading-6 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M6,30 L19.25,30 L19.25,60.104 L53.7,60.104 L53.7,30 L66.95,30 L66.95,105.684 L53.7,105.684 L53.7,71.552 L19.25,71.552 L19.25,105.684 L6,105.684 L6,30 Z M112.587077,50.246 C112.304409,47.2073181 111.226753,44.751676 109.354077,42.879 C107.481401,41.006324 104.955093,40.07 101.775077,40.07 C99.584399,40.07 97.6940846,40.4763293 96.1040766,41.289 C94.5140687,42.1016707 93.1714154,43.1793266 92.0760766,44.522 C90.9807378,45.8646734 90.0974133,47.401658 89.4260766,49.133 C88.7547399,50.864342 88.2070787,52.6839905 87.7830766,54.592 C87.3590745,56.5000095 87.0587442,58.390324 86.8820766,60.263 C86.7054091,62.135676 86.5464107,63.8846585 86.4050766,65.51 L86.6170766,65.722 C88.2424181,62.7539852 90.4860623,60.5456739 93.3480766,59.097 C96.2100909,57.6483261 99.3017267,56.924 102.623077,56.924 C106.297762,56.924 109.583729,57.5599936 112.481077,58.832 C115.378424,60.1040064 117.834067,61.8529889 119.848077,64.079 C121.862087,66.3050111 123.399071,68.9373181 124.459077,71.976 C125.519082,75.0146819 126.049077,78.300649 126.049077,81.834 C126.049077,85.438018 125.466082,88.7769846 124.300077,91.851 C123.134071,94.9250154 121.455754,97.6103219 119.265077,99.907 C117.074399,102.203678 114.459758,103.987994 111.421077,105.26 C108.382395,106.532006 105.025762,107.168 101.351077,107.168 C95.9097161,107.168 91.4400941,106.16101 87.9420766,104.147 C84.4440591,102.13299 81.6880867,99.3770175 79.6740766,95.879 C77.6600666,92.3809825 76.2644138,88.2823568 75.4870766,83.583 C74.7097394,78.8836432 74.3210766,73.8133605 74.3210766,68.372 C74.3210766,63.9199777 74.7980719,59.4326893 75.7520766,54.91 C76.7060814,50.3873107 78.278399,46.2710186 80.4690766,42.561 C82.6597542,38.8509815 85.5393921,35.8300117 89.1080766,33.498 C92.6767611,31.1659883 97.0757171,30 102.305077,30 C105.273091,30 108.064397,30.4946617 110.679077,31.484 C113.293756,32.4733383 115.608067,33.8513245 117.622077,35.618 C119.636087,37.3846755 121.27907,39.5046543 122.551077,41.978 C123.823083,44.4513457 124.529743,47.2073181 124.671077,50.246 L112.587077,50.246 Z M100.927077,97.098 C103.117754,97.098 105.025735,96.6563378 106.651077,95.773 C108.276418,94.8896623 109.636738,93.7413404 110.732077,92.328 C111.827415,90.9146596 112.640074,89.271676 113.170077,87.399 C113.700079,85.526324 113.965077,83.6006766 113.965077,81.622 C113.965077,79.6433234 113.700079,77.7353425 113.170077,75.898 C112.640074,74.0606575 111.827415,72.4530069 110.732077,71.075 C109.636738,69.6969931 108.276418,68.5840042 106.651077,67.736 C105.025735,66.8879958 103.117754,66.464 100.927077,66.464 C98.736399,66.464 96.8107516,66.8703293 95.1500766,67.683 C93.4894017,68.4956707 92.0937489,69.5909931 90.9630766,70.969 C89.8324043,72.3470069 88.9844128,73.9546575 88.4190766,75.792 C87.8537405,77.6293425 87.5710766,79.5726564 87.5710766,81.622 C87.5710766,83.6713436 87.8537405,85.6146575 88.4190766,87.452 C88.9844128,89.2893425 89.8324043,90.9323261 90.9630766,92.381 C92.0937489,93.8296739 93.4894017,94.9779958 95.1500766,95.826 C96.8107516,96.6740042 98.736399,97.098 100.927077,97.098 L100.927077,97.098 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/help": {
"title": "$:/core/images/help",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-help tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M36.0548906,111.44117 C30.8157418,115.837088 20.8865444,118.803477 9.5,118.803477 C7.86465619,118.803477 6.25937294,118.742289 4.69372699,118.624467 C12.612543,115.984876 18.7559465,110.02454 21.0611049,102.609942 C8.74739781,92.845129 1.04940554,78.9359851 1.04940554,63.5 C1.04940554,33.9527659 29.2554663,10 64.0494055,10 C98.8433448,10 127.049406,33.9527659 127.049406,63.5 C127.049406,93.0472341 98.8433448,117 64.0494055,117 C53.9936953,117 44.48824,114.999337 36.0548906,111.44117 L36.0548906,111.44117 Z M71.4042554,77.5980086 C71.406883,77.2865764 71.4095079,76.9382011 71.4119569,76.5610548 C71.4199751,75.3262169 71.4242825,74.0811293 71.422912,72.9158546 C71.4215244,71.736154 71.4143321,70.709635 71.4001396,69.8743525 C71.4078362,68.5173028 71.9951951,67.7870427 75.1273009,65.6385471 C75.2388969,65.5619968 76.2124091,64.8981068 76.5126553,64.6910879 C79.6062455,62.5580654 81.5345849,60.9050204 83.2750652,58.5038955 C85.6146327,55.2762841 86.8327108,51.426982 86.8327108,46.8554323 C86.8327108,33.5625756 76.972994,24.9029551 65.3778484,24.9029551 C54.2752771,24.9029551 42.8794554,34.5115163 41.3121702,47.1975534 C40.9043016,50.4989536 43.2499725,53.50591 46.5513726,53.9137786 C49.8527728,54.3216471 52.8597292,51.9759763 53.2675978,48.6745761 C54.0739246,42.1479456 60.2395837,36.9492759 65.3778484,36.9492759 C70.6427674,36.9492759 74.78639,40.5885487 74.78639,46.8554323 C74.78639,50.4892974 73.6853224,52.008304 69.6746221,54.7736715 C69.4052605,54.9593956 68.448509,55.6118556 68.3131127,55.7047319 C65.6309785,57.5445655 64.0858213,58.803255 62.6123358,60.6352315 C60.5044618,63.2559399 59.3714208,66.3518252 59.3547527,69.9487679 C59.3684999,70.8407274 59.3752803,71.8084521 59.3765995,72.9300232 C59.3779294,74.0607297 59.3737237,75.2764258 59.36589,76.482835 C59.3634936,76.8518793 59.3609272,77.1924914 59.3583633,77.4963784 C59.3568319,77.6778944 59.3556368,77.8074256 59.3549845,77.8730928 C59.3219814,81.1994287 61.9917551,83.9227111 65.318091,83.9557142 C68.644427,83.9887173 71.3677093,81.3189435 71.4007124,77.9926076 C71.4014444,77.9187458 71.402672,77.7856841 71.4042554,77.5980086 Z M65.3778489,102.097045 C69.5359735,102.097045 72.9067994,98.7262189 72.9067994,94.5680944 C72.9067994,90.4099698 69.5359735,87.0391439 65.3778489,87.0391439 C61.2197243,87.0391439 57.8488984,90.4099698 57.8488984,94.5680944 C57.8488984,98.7262189 61.2197243,102.097045 65.3778489,102.097045 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/home-button": {
"title": "$:/core/images/home-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-home-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <g fill-rule=\"evenodd\">\n <path d=\"M112.9847,119.501583 C112.99485,119.336814 113,119.170705 113,119.003406 L113,67.56802 C116.137461,70.5156358 121.076014,70.4518569 124.133985,67.3938855 C127.25818,64.2696912 127.260618,59.2068102 124.131541,56.0777326 L70.3963143,2.34250601 C68.8331348,0.779326498 66.7828947,-0.000743167069 64.7337457,1.61675364e-05 C62.691312,-0.00409949529 60.6426632,0.777559815 59.077717,2.34250601 L33,28.420223 L33,28.420223 L33,8.00697327 C33,3.58484404 29.4092877,0 25,0 C20.581722,0 17,3.59075293 17,8.00697327 L17,44.420223 L5.3424904,56.0777326 C2.21694607,59.2032769 2.22220878,64.2760483 5.34004601,67.3938855 C8.46424034,70.5180798 13.5271213,70.5205187 16.6561989,67.3914411 L17,67.04764 L17,119.993027 C17,119.994189 17.0000002,119.995351 17.0000007,119.996514 C17.0000002,119.997675 17,119.998838 17,120 C17,124.418278 20.5881049,128 24.9992458,128 L105.000754,128 C109.418616,128 113,124.409288 113,120 C113,119.832611 112.99485,119.666422 112.9847,119.501583 Z M97,112 L97,51.5736087 L97,51.5736087 L64.7370156,19.3106244 L33,51.04764 L33,112 L97,112 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/import-button": {
"title": "$:/core/images/import-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-import-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M105.449437,94.2138951 C105.449437,94.2138951 110.049457,94.1897106 110.049457,99.4026111 C110.049457,104.615512 105.163246,104.615511 105.163246,104.615511 L45.0075072,105.157833 C45.0075072,105.157833 0.367531803,106.289842 0.367532368,66.6449212 C0.367532934,27.0000003 45.0428249,27.0000003 45.0428249,27.0000003 L105.532495,27.0000003 C105.532495,27.0000003 138.996741,25.6734987 138.996741,55.1771866 C138.996741,84.6808745 105.727102,82.8457535 105.727102,82.8457535 L56.1735087,82.8457535 C56.1735087,82.8457535 22.6899229,85.1500223 22.6899229,66.0913753 C22.6899229,47.0327282 56.1735087,49.3383013 56.1735087,49.3383013 L105.727102,49.3383013 C105.727102,49.3383013 111.245209,49.3383024 111.245209,54.8231115 C111.245209,60.3079206 105.727102,60.5074524 105.727102,60.5074524 L56.1735087,60.5074524 C56.1735087,60.5074524 37.48913,60.5074528 37.48913,66.6449195 C37.48913,72.7823862 56.1735087,71.6766023 56.1735087,71.6766023 L105.727102,71.6766029 C105.727102,71.6766029 127.835546,73.1411469 127.835546,55.1771866 C127.835546,35.5304025 105.727102,38.3035317 105.727102,38.3035317 L45.0428249,38.3035317 C45.0428249,38.3035317 11.5287276,38.3035313 11.5287276,66.6449208 C11.5287276,94.9863103 45.0428244,93.9579678 45.0428244,93.9579678 L105.449437,94.2138951 Z\" transform=\"translate(69.367532, 66.000000) rotate(-45.000000) translate(-69.367532, -66.000000) \"></path>\n </g>\n</svg>"
},
"$:/core/images/info-button": {
"title": "$:/core/images/info-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-info-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <g fill-rule=\"evenodd\">\n <g transform=\"translate(0.049406, 0.000000)\">\n <path d=\"M64,128 C99.346224,128 128,99.346224 128,64 C128,28.653776 99.346224,0 64,0 C28.653776,0 0,28.653776 0,64 C0,99.346224 28.653776,128 64,128 Z M64,112 C90.509668,112 112,90.509668 112,64 C112,37.490332 90.509668,16 64,16 C37.490332,16 16,37.490332 16,64 C16,90.509668 37.490332,112 64,112 Z\"></path>\n <circle cx=\"64\" cy=\"32\" r=\"8\"></circle>\n <rect x=\"56\" y=\"48\" width=\"16\" height=\"56\" rx=\"8\"></rect>\n </g>\n </g>\n</svg>"
},
"$:/core/images/italic": {
"title": "$:/core/images/italic",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-italic tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <polygon points=\"66.7114846 0 89.1204482 0 62.4089636 128 40 128\"></polygon>\n </g>\n</svg>"
},
"$:/core/images/left-arrow": {
"title": "$:/core/images/left-arrow",
"created": "20150315234410875",
"modified": "20150315235324760",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-left-arrow tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <path transform=\"rotate(135, 63.8945, 64.1752)\" d=\"m109.07576,109.35336c-1.43248,1.43361 -3.41136,2.32182 -5.59717,2.32182l-79.16816,0c-4.36519,0 -7.91592,-3.5444 -7.91592,-7.91666c0,-4.36337 3.54408,-7.91667 7.91592,-7.91667l71.25075,0l0,-71.25075c0,-4.3652 3.54442,-7.91592 7.91667,-7.91592c4.36336,0 7.91667,3.54408 7.91667,7.91592l0,79.16815c0,2.1825 -0.88602,4.16136 -2.3185,5.59467l-0.00027,-0.00056z\"/>\n</svg>\n"
},
"$:/core/images/line-width": {
"title": "$:/core/images/line-width",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-line-width tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M128,-97 L112.992786,-97 C112.452362,-97 112,-96.5522847 112,-96 C112,-95.4438648 112.444486,-95 112.992786,-95 L128,-95 L128,-97 Z M128,-78.6794919 L111.216185,-88.3696322 C110.748163,-88.6398444 110.132549,-88.4782926 109.856406,-88 C109.578339,-87.5183728 109.741342,-86.9117318 110.216185,-86.6375814 L128,-76.3700908 L128,-78.6794919 Z M78.6794919,-128 L88.3696322,-111.216185 C88.6437826,-110.741342 88.4816272,-110.134474 88,-109.856406 C87.5217074,-109.580264 86.9077936,-109.748163 86.6375814,-110.216185 L76.3700908,-128 L78.6794919,-128 Z M97,-128 L97,-112.992786 C97,-112.444486 96.5561352,-112 96,-112 C95.4477153,-112 95,-112.452362 95,-112.992786 L95,-128 L97,-128 Z M115.629909,-128 L105.362419,-110.216185 C105.088268,-109.741342 104.481627,-109.578339 104,-109.856406 C103.521707,-110.132549 103.360156,-110.748163 103.630368,-111.216185 L113.320508,-128 L115.629909,-128 Z M128,-113.320508 L111.216185,-103.630368 C110.741342,-103.356217 110.134474,-103.518373 109.856406,-104 C109.580264,-104.478293 109.748163,-105.092206 110.216185,-105.362419 L128,-115.629909 L128,-113.320508 Z M48,-96 C48,-96.5522847 48.4523621,-97 48.9927864,-97 L79.0072136,-97 C79.5555144,-97 80,-96.5561352 80,-96 C80,-95.4477153 79.5476379,-95 79.0072136,-95 L48.9927864,-95 C48.4444856,-95 48,-95.4438648 48,-96 Z M54.4307806,-120 C54.706923,-120.478293 55.3225377,-120.639844 55.7905589,-120.369632 L81.7838153,-105.362419 C82.2586577,-105.088268 82.4216611,-104.481627 82.1435935,-104 C81.8674512,-103.521707 81.2518365,-103.360156 80.7838153,-103.630368 L54.7905589,-118.637581 C54.3157165,-118.911732 54.152713,-119.518373 54.4307806,-120 Z M104,-82.1435935 C104.478293,-82.4197359 105.092206,-82.2518365 105.362419,-81.7838153 L120.369632,-55.7905589 C120.643783,-55.3157165 120.481627,-54.7088482 120,-54.4307806 C119.521707,-54.1546382 118.907794,-54.3225377 118.637581,-54.7905589 L103.630368,-80.7838153 C103.356217,-81.2586577 103.518373,-81.865526 104,-82.1435935 Z M96,-80 C96.5522847,-80 97,-79.5476379 97,-79.0072136 L97,-48.9927864 C97,-48.4444856 96.5561352,-48 96,-48 C95.4477153,-48 95,-48.4523621 95,-48.9927864 L95,-79.0072136 C95,-79.5555144 95.4438648,-80 96,-80 Z M88,-82.1435935 C88.4782926,-81.8674512 88.6398444,-81.2518365 88.3696322,-80.7838153 L73.3624186,-54.7905589 C73.0882682,-54.3157165 72.4816272,-54.152713 72,-54.4307806 C71.5217074,-54.706923 71.3601556,-55.3225377 71.6303678,-55.7905589 L86.6375814,-81.7838153 C86.9117318,-82.2586577 87.5183728,-82.4216611 88,-82.1435935 Z M82.1435935,-88 C82.4197359,-87.5217074 82.2518365,-86.9077936 81.7838153,-86.6375814 L55.7905589,-71.6303678 C55.3157165,-71.3562174 54.7088482,-71.5183728 54.4307806,-72 C54.1546382,-72.4782926 54.3225377,-73.0922064 54.7905589,-73.3624186 L80.7838153,-88.3696322 C81.2586577,-88.6437826 81.865526,-88.4816272 82.1435935,-88 Z M1.30626177e-08,-41.9868843 L15.0170091,-57.9923909 L20.7983821,-52.9749272 L44.7207091,-81.2095939 L73.4260467,-42.1002685 L85.984793,-56.6159488 L104.48741,-34.0310661 L127.969109,-47.4978019 L127.969109,7.99473128e-07 L1.30626177e-08,7.99473128e-07 L1.30626177e-08,-41.9868843 Z M96,-84 C102.627417,-84 108,-89.372583 108,-96 C108,-102.627417 102.627417,-108 96,-108 C89.372583,-108 84,-102.627417 84,-96 C84,-89.372583 89.372583,-84 96,-84 Z\"></path>\n <path d=\"M16,18 L112,18 C113.104569,18 114,17.1045695 114,16 C114,14.8954305 113.104569,14 112,14 L16,14 C14.8954305,14 14,14.8954305 14,16 C14,17.1045695 14.8954305,18 16,18 L16,18 Z M16,35 L112,35 C114.209139,35 116,33.209139 116,31 C116,28.790861 114.209139,27 112,27 L16,27 C13.790861,27 12,28.790861 12,31 C12,33.209139 13.790861,35 16,35 L16,35 Z M16,56 L112,56 C115.313708,56 118,53.3137085 118,50 C118,46.6862915 115.313708,44 112,44 L16,44 C12.6862915,44 10,46.6862915 10,50 C10,53.3137085 12.6862915,56 16,56 L16,56 Z M16,85 L112,85 C117.522847,85 122,80.5228475 122,75 C122,69.4771525 117.522847,65 112,65 L16,65 C10.4771525,65 6,69.4771525 6,75 C6,80.5228475 10.4771525,85 16,85 L16,85 Z M16,128 L112,128 C120.836556,128 128,120.836556 128,112 C128,103.163444 120.836556,96 112,96 L16,96 C7.163444,96 0,103.163444 0,112 C0,120.836556 7.163444,128 16,128 L16,128 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/link": {
"title": "$:/core/images/link",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-link tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M128.719999,57.568543 C130.219553,53.8628171 131.045202,49.8121445 131.045202,45.5685425 C131.045202,27.8915447 116.718329,13.5685425 99.0452364,13.5685425 L67.0451674,13.5685425 C49.3655063,13.5685425 35.0452019,27.8954305 35.0452019,45.5685425 C35.0452019,63.2455403 49.3720745,77.5685425 67.0451674,77.5685425 L99.0452364,77.5685425 C100.406772,77.5685425 101.748384,77.4835732 103.065066,77.3186499 C96.4792444,73.7895096 91.1190212,68.272192 87.7873041,61.5685425 L67.0506214,61.5685425 C58.2110723,61.5685425 51.0452019,54.4070414 51.0452019,45.5685425 C51.0452019,36.7319865 58.2005234,29.5685425 67.0506214,29.5685425 L99.0397824,29.5685425 C107.879331,29.5685425 115.045202,36.7300436 115.045202,45.5685425 C115.045202,48.9465282 113.99957,52.0800164 112.21335,54.6623005 C114.314383,56.4735917 117.050039,57.5685425 120.041423,57.5685425 L128.720003,57.5685425 Z\" transform=\"translate(83.045202, 45.568542) rotate(-225.000000) translate(-83.045202, -45.568542)\"></path>\n <path d=\"M-0.106255113,71.0452019 C-1.60580855,74.7509276 -2.43145751,78.8016001 -2.43145751,83.0452019 C-2.43145751,100.7222 11.8954151,115.045202 29.568508,115.045202 L61.568577,115.045202 C79.2482381,115.045202 93.5685425,100.718314 93.5685425,83.0452019 C93.5685425,65.3682041 79.2416699,51.0452019 61.568577,51.0452019 L29.568508,51.0452019 C28.206973,51.0452019 26.8653616,51.1301711 25.5486799,51.2950943 C32.1345,54.8242347 37.4947231,60.3415524 40.8264403,67.0452019 L61.563123,67.0452019 C70.4026721,67.0452019 77.5685425,74.206703 77.5685425,83.0452019 C77.5685425,91.8817579 70.413221,99.0452019 61.563123,99.0452019 L29.573962,99.0452019 C20.7344129,99.0452019 13.5685425,91.8837008 13.5685425,83.0452019 C13.5685425,79.6672162 14.6141741,76.533728 16.4003949,73.9514439 C14.2993609,72.1401527 11.5637054,71.0452019 8.5723215,71.0452019 L-0.106255113,71.0452019 Z\" transform=\"translate(45.568542, 83.045202) rotate(-225.000000) translate(-45.568542, -83.045202)\"></path>\n </g>\n</svg>"
},
"$:/core/images/list-bullet": {
"title": "$:/core/images/list-bullet",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-list-bullet tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M11.6363636,40.2727273 C18.0629498,40.2727273 23.2727273,35.0629498 23.2727273,28.6363636 C23.2727273,22.2097775 18.0629498,17 11.6363636,17 C5.20977746,17 0,22.2097775 0,28.6363636 C0,35.0629498 5.20977746,40.2727273 11.6363636,40.2727273 Z M11.6363636,75.1818182 C18.0629498,75.1818182 23.2727273,69.9720407 23.2727273,63.5454545 C23.2727273,57.1188684 18.0629498,51.9090909 11.6363636,51.9090909 C5.20977746,51.9090909 0,57.1188684 0,63.5454545 C0,69.9720407 5.20977746,75.1818182 11.6363636,75.1818182 Z M11.6363636,110.090909 C18.0629498,110.090909 23.2727273,104.881132 23.2727273,98.4545455 C23.2727273,92.0279593 18.0629498,86.8181818 11.6363636,86.8181818 C5.20977746,86.8181818 0,92.0279593 0,98.4545455 C0,104.881132 5.20977746,110.090909 11.6363636,110.090909 Z M34.9090909,22.8181818 L128,22.8181818 L128,34.4545455 L34.9090909,34.4545455 L34.9090909,22.8181818 Z M34.9090909,57.7272727 L128,57.7272727 L128,69.3636364 L34.9090909,69.3636364 L34.9090909,57.7272727 Z M34.9090909,92.6363636 L128,92.6363636 L128,104.272727 L34.9090909,104.272727 L34.9090909,92.6363636 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/list-number": {
"title": "$:/core/images/list-number",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-list-number tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M33.8390805,22.3563218 L128,22.3563218 L128,34.1264368 L33.8390805,34.1264368 L33.8390805,22.3563218 Z M33.8390805,57.6666667 L128,57.6666667 L128,69.4367816 L33.8390805,69.4367816 L33.8390805,57.6666667 Z M33.8390805,92.9770115 L128,92.9770115 L128,104.747126 L33.8390805,104.747126 L33.8390805,92.9770115 Z M0.379509711,42.6307008 L0.379509711,40.4082314 L1.37821948,40.4082314 C2.20382368,40.4082314 2.82301754,40.268077 3.23581964,39.9877642 C3.64862174,39.7074513 3.85501969,39.0400498 3.85501969,37.9855395 L3.85501969,22.7686318 C3.85501969,21.3270228 3.66193774,20.4327047 3.27576803,20.0856507 C2.88959832,19.7385967 1.79768657,19.5650723 0,19.5650723 L0,17.4226919 C3.50215975,17.2758613 6.25191314,16.4683055 8.24934266,15 L10.3666074,15 L10.3666074,37.865406 C10.3666074,38.786434 10.5164123,39.4404875 10.8160268,39.8275862 C11.1156412,40.2146849 11.764796,40.4082314 12.7635108,40.4082314 L13.7622206,40.4082314 L13.7622206,42.6307008 L0.379509711,42.6307008 Z M0.0798967812,77.9873934 L0.0798967812,76.0852799 C7.27064304,69.5312983 10.8659622,63.5046623 10.8659622,58.005191 C10.8659622,56.4434479 10.5397203,55.195407 9.88722667,54.2610308 C9.23473303,53.3266546 8.36253522,52.8594735 7.27060709,52.8594735 C6.3784219,52.8594735 5.61608107,53.1764892 4.98356173,53.8105302 C4.35104238,54.4445712 4.03478745,55.1753759 4.03478745,56.0029663 C4.03478745,56.9773871 4.28113339,57.8316611 4.77383268,58.5658139 C4.88036225,58.7259926 4.93362624,58.8461249 4.93362624,58.9262143 C4.93362624,59.0730449 4.77383427,59.2065252 4.45424555,59.3266593 C4.2411864,59.4067486 3.70188852,59.6336652 2.83633573,60.0074156 C1.99741533,60.3811661 1.47809145,60.5680386 1.2783485,60.5680386 C1.03865696,60.5680386 0.765679018,60.1976307 0.459406492,59.4568039 C0.153133966,58.715977 0,57.9184322 0,57.0641453 C0,55.1153036 0.848894811,53.5202138 2.5467099,52.2788283 C4.24452499,51.0374428 6.34512352,50.4167594 8.84856852,50.4167594 C11.3120649,50.4167594 13.3793735,51.0874979 15.0505562,52.4289952 C16.7217389,53.7704924 17.5573177,55.5224215 17.5573177,57.684835 C17.5573177,58.9662652 17.2743527,60.2076321 16.7084144,61.4089729 C16.142476,62.6103138 14.7875733,64.4623531 12.6436656,66.9651465 C10.4997579,69.4679398 8.40914641,71.7804862 6.3717683,73.902855 L17.8169822,73.902855 L16.7982982,79.6292176 L14.6810335,79.6292176 C14.7609307,79.3489048 14.8008787,79.0952922 14.8008787,78.8683723 C14.8008787,78.4812736 14.7010087,78.237672 14.5012658,78.1375603 C14.3015228,78.0374485 13.9020429,77.9873934 13.3028141,77.9873934 L0.0798967812,77.9873934 Z M12.2042333,97.1935484 C13.9486551,97.2335931 15.4400468,97.8309175 16.6784531,98.9855395 C17.9168594,100.140162 18.5360532,101.75861 18.5360532,103.840934 C18.5360532,106.830938 17.4041935,109.233584 15.14044,111.048943 C12.8766866,112.864303 10.1402492,113.771969 6.93104577,113.771969 C4.92030005,113.771969 3.26245842,113.388213 1.95747114,112.62069 C0.652483855,111.853166 0,110.848727 0,109.607341 C0,108.833144 0.26964894,108.209124 0.808954909,107.735261 C1.34826088,107.261399 1.93749375,107.024472 2.57667119,107.024472 C3.21584864,107.024472 3.73850152,107.224692 4.14464552,107.625139 C4.55078953,108.025586 4.92696644,108.67964 5.27318756,109.587319 C5.73925445,110.855401 6.51158227,111.489433 7.59019421,111.489433 C8.85523291,111.489433 9.87723568,111.012241 10.6562332,110.057842 C11.4352307,109.103444 11.8247236,107.371536 11.8247236,104.862069 C11.8247236,103.153495 11.7048796,101.838714 11.4651881,100.917686 C11.2254966,99.9966584 10.6728827,99.5361513 9.80732989,99.5361513 C9.22141723,99.5361513 8.62219737,99.843156 8.00965231,100.457175 C7.51695303,100.951059 7.07752513,101.197998 6.69135542,101.197998 C6.3584505,101.197998 6.08880156,101.051169 5.88240051,100.757508 C5.67599946,100.463847 5.57280049,100.183539 5.57280049,99.916574 C5.57280049,99.5962164 5.67599946,99.3225818 5.88240051,99.0956618 C6.08880156,98.8687419 6.57150646,98.5016711 7.33052967,97.9944383 C10.2068282,96.0722929 11.6449559,93.9766521 11.6449559,91.7074527 C11.6449559,90.5194601 11.3386879,89.615131 10.7261429,88.9944383 C10.1135978,88.3737455 9.37455999,88.0634038 8.5090072,88.0634038 C7.71003539,88.0634038 6.98431355,88.3270274 6.33181991,88.8542825 C5.67932627,89.3815377 5.35308434,90.0122321 5.35308434,90.7463849 C5.35308434,91.3871 5.60608828,91.9810874 6.11210376,92.5283648 C6.28521432,92.7285883 6.3717683,92.8954387 6.3717683,93.028921 C6.3717683,93.1490551 5.80250943,93.4560598 4.6639746,93.9499444 C3.52543978,94.4438289 2.80970494,94.6907675 2.51674861,94.6907675 C2.10394651,94.6907675 1.76771758,94.3570667 1.50805174,93.6896552 C1.24838591,93.0222436 1.11855494,92.4082342 1.11855494,91.8476085 C1.11855494,90.0989901 2.04734573,88.6240327 3.90495518,87.4226919 C5.76256463,86.2213511 7.86982116,85.6206897 10.226788,85.6206897 C12.2907985,85.6206897 14.0784711,86.0678487 15.5898594,86.9621802 C17.1012478,87.8565117 17.8569306,89.0778566 17.8569306,90.6262514 C17.8569306,91.987771 17.2876717,93.2491599 16.1491369,94.4104561 C15.0106021,95.5717522 13.6956474,96.4994404 12.2042333,97.1935484 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/list": {
"title": "$:/core/images/list",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-list tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M0.719999312,185.568543 C2.21955287,181.862817 3.0452019,177.812144 3.0452019,173.568542 C3.0452019,155.891545 -11.2816707,141.568542 -28.9547636,141.568542 L-60.9548326,141.568542 C-78.6344937,141.568542 -92.9547981,155.895431 -92.9547981,173.568542 C-92.9547981,191.24554 -78.6279255,205.568542 -60.9548326,205.568542 L-28.9547636,205.568542 C-27.593228,205.568542 -26.2516158,205.483573 -24.9349335,205.31865 C-31.5207556,201.78951 -36.8809788,196.272192 -40.2126959,189.568542 L-60.9493786,189.568542 C-69.7889277,189.568542 -76.9547981,182.407041 -76.9547981,173.568542 C-76.9547981,164.731986 -69.7994766,157.568542 -60.9493786,157.568542 L-28.9602176,157.568542 C-20.1206685,157.568542 -12.9547981,164.730044 -12.9547981,173.568542 C-12.9547981,176.946528 -14.0004297,180.080016 -15.7866505,182.6623 C-13.6856165,184.473592 -10.949961,185.568542 -7.9585771,185.568542 L0.720002586,185.568542 Z\" transform=\"translate(-44.954798, 173.568542) rotate(-225.000000) translate(44.954798, -173.568542) \"></path>\n <path d=\"M87.7480315,128 L23.9992458,128 C19.5813843,128 16,124.409247 16,119.993027 L16,8.00697327 C16,3.58484404 19.5881049,0 23.9992458,0 L104.000754,0 C108.418616,0 112,3.59075293 112,8.00697327 L112,104 L91.2492027,104 C90.2848199,104 89.410573,104.391703 88.7768998,105.025201 C88.1373658,105.661376 87.7480315,106.53563 87.7480315,107.501171 L87.7480315,128 Z M95.7480315,127.879386 L111.627417,112 L95.7480315,112 L95.7480315,127.879386 Z M40,15.5089165 C40,13.5709954 41.5636015,12 43.4998101,12 L98.5001899,12 C100.433082,12 102,13.5614718 102,15.5089165 L102,16.4910835 C102,18.4290046 100.436399,20 98.5001899,20 L43.4998101,20 C41.5669183,20 40,18.4385282 40,16.4910835 L40,15.5089165 Z M32,22 C35.3137085,22 38,19.3137085 38,16 C38,12.6862915 35.3137085,10 32,10 C28.6862915,10 26,12.6862915 26,16 C26,19.3137085 28.6862915,22 32,22 Z M40,31.5089165 C40,29.5709954 41.5636015,28 43.4998101,28 L98.5001899,28 C100.433082,28 102,29.5614718 102,31.5089165 L102,32.4910835 C102,34.4290046 100.436399,36 98.5001899,36 L43.4998101,36 C41.5669183,36 40,34.4385282 40,32.4910835 L40,31.5089165 Z M40,47.5089165 C40,45.5709954 41.5636015,44 43.4998101,44 L98.5001899,44 C100.433082,44 102,45.5614718 102,47.5089165 L102,48.4910835 C102,50.4290046 100.436399,52 98.5001899,52 L43.4998101,52 C41.5669183,52 40,50.4385282 40,48.4910835 L40,47.5089165 Z M40,63.5089165 C40,61.5709954 41.5636015,60 43.4998101,60 L98.5001899,60 C100.433082,60 102,61.5614718 102,63.5089165 L102,64.4910835 C102,66.4290046 100.436399,68 98.5001899,68 L43.4998101,68 C41.5669183,68 40,66.4385282 40,64.4910835 L40,63.5089165 Z M40,79.5089165 C40,77.5709954 41.5636015,76 43.4998101,76 L98.5001899,76 C100.433082,76 102,77.5614718 102,79.5089165 L102,80.4910835 C102,82.4290046 100.436399,84 98.5001899,84 L43.4998101,84 C41.5669183,84 40,82.4385282 40,80.4910835 L40,79.5089165 Z M40,95.5089165 C40,93.5709954 41.5636015,92 43.4998101,92 L98.5001899,92 C100.433082,92 102,93.5614718 102,95.5089165 L102,96.4910835 C102,98.4290046 100.436399,100 98.5001899,100 L43.4998101,100 C41.5669183,100 40,98.4385282 40,96.4910835 L40,95.5089165 Z M40,111.508916 C40,109.570995 41.5680474,108 43.4972017,108 L76.5027983,108 C78.4342495,108 80,109.561472 80,111.508916 L80,112.491084 C80,114.429005 78.4319526,116 76.5027983,116 L43.4972017,116 C41.5657505,116 40,114.438528 40,112.491084 L40,111.508916 Z M32,38 C35.3137085,38 38,35.3137085 38,32 C38,28.6862915 35.3137085,26 32,26 C28.6862915,26 26,28.6862915 26,32 C26,35.3137085 28.6862915,38 32,38 Z M32,54 C35.3137085,54 38,51.3137085 38,48 C38,44.6862915 35.3137085,42 32,42 C28.6862915,42 26,44.6862915 26,48 C26,51.3137085 28.6862915,54 32,54 Z M32,70 C35.3137085,70 38,67.3137085 38,64 C38,60.6862915 35.3137085,58 32,58 C28.6862915,58 26,60.6862915 26,64 C26,67.3137085 28.6862915,70 32,70 Z M32,86 C35.3137085,86 38,83.3137085 38,80 C38,76.6862915 35.3137085,74 32,74 C28.6862915,74 26,76.6862915 26,80 C26,83.3137085 28.6862915,86 32,86 Z M32,102 C35.3137085,102 38,99.3137085 38,96 C38,92.6862915 35.3137085,90 32,90 C28.6862915,90 26,92.6862915 26,96 C26,99.3137085 28.6862915,102 32,102 Z M32,118 C35.3137085,118 38,115.313708 38,112 C38,108.686292 35.3137085,106 32,106 C28.6862915,106 26,108.686292 26,112 C26,115.313708 28.6862915,118 32,118 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/locked-padlock": {
"title": "$:/core/images/locked-padlock",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-locked-padlock tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M96.4723753,64 L105,64 L105,96.0097716 C105,113.673909 90.6736461,128 73.001193,128 L55.998807,128 C38.3179793,128 24,113.677487 24,96.0097716 L24,64 L32.0000269,64 C32.0028554,48.2766389 32.3030338,16.2688026 64.1594984,16.2688041 C95.9543927,16.2688056 96.4648869,48.325931 96.4723753,64 Z M80.5749059,64 L48.4413579,64 C48.4426205,47.71306 48.5829272,31.9999996 64.1595001,31.9999996 C79.8437473,31.9999996 81.1369461,48.1359182 80.5749059,64 Z M67.7315279,92.3641717 C70.8232551,91.0923621 73,88.0503841 73,84.5 C73,79.8055796 69.1944204,76 64.5,76 C59.8055796,76 56,79.8055796 56,84.5 C56,87.947435 58.0523387,90.9155206 61.0018621,92.2491029 L55.9067479,115.020857 L72.8008958,115.020857 L67.7315279,92.3641717 L67.7315279,92.3641717 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/mail": {
"title": "$:/core/images/mail",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-mail tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M122.826782,104.894066 C121.945525,105.22777 120.990324,105.41043 119.993027,105.41043 L8.00697327,105.41043 C7.19458381,105.41043 6.41045219,105.289614 5.67161357,105.064967 L5.67161357,105.064967 L39.8346483,70.9019325 L60.6765759,91.7438601 C61.6118278,92.679112 62.8865166,93.0560851 64.0946097,92.8783815 C65.2975108,93.0473238 66.5641085,92.6696979 67.4899463,91.7438601 L88.5941459,70.6396605 C88.6693095,70.7292352 88.7490098,70.8162939 88.8332479,70.9005321 L122.826782,104.894066 Z M127.903244,98.6568194 C127.966933,98.2506602 128,97.8343714 128,97.4103789 L128,33.410481 C128,32.7414504 127.917877,32.0916738 127.763157,31.4706493 L94.2292399,65.0045665 C94.3188145,65.0797417 94.4058701,65.1594458 94.4901021,65.2436778 L127.903244,98.6568194 Z M0.205060636,99.2178117 C0.0709009529,98.6370366 0,98.0320192 0,97.4103789 L0,33.410481 C0,32.694007 0.0944223363,31.9995312 0.27147538,31.3387595 L0.27147538,31.3387595 L34.1777941,65.2450783 L0.205060636,99.2178117 L0.205060636,99.2178117 Z M5.92934613,25.6829218 C6.59211333,25.5051988 7.28862283,25.4104299 8.00697327,25.4104299 L119.993027,25.4104299 C120.759109,25.4104299 121.500064,25.5178649 122.201605,25.7184927 L122.201605,25.7184927 L64.0832611,83.8368368 L5.92934613,25.6829218 L5.92934613,25.6829218 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/menu-button": {
"title": "$:/core/images/menu-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-menu-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <rect x=\"0\" y=\"16\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n <rect x=\"0\" y=\"56\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n <rect x=\"0\" y=\"96\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n</svg>"
},
"$:/core/images/mono-block": {
"title": "$:/core/images/mono-block",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-mono-block tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M23.9653488,32.9670593 L24.3217888,32.9670593 C25.0766067,32.9670593 25.6497006,33.1592554 26.0410876,33.5436534 C26.4324747,33.9280514 26.6281653,34.4906619 26.6281653,35.2315017 C26.6281653,36.0562101 26.4219913,36.6502709 26.009637,37.0137017 C25.5972828,37.3771326 24.9158602,37.5588453 23.9653488,37.5588453 L17.6542639,37.5588453 C16.6897744,37.5588453 16.0048573,37.380627 15.5994921,37.0241852 C15.1941269,36.6677435 14.9914474,36.0701882 14.9914474,35.2315017 C14.9914474,34.4207713 15.1941269,33.8406885 15.5994921,33.4912358 C16.0048573,33.141783 16.6897744,32.9670593 17.6542639,32.9670593 L18.388111,32.9670593 L17.5284616,30.5139133 L8.47069195,30.5139133 L7.5691084,32.9670593 L8.30295547,32.9670593 C9.25346691,32.9670593 9.93488953,33.1452775 10.3472438,33.5017193 C10.759598,33.8581611 10.965772,34.4347494 10.965772,35.2315017 C10.965772,36.0562101 10.759598,36.6502709 10.3472438,37.0137017 C9.93488953,37.3771326 9.25346691,37.5588453 8.30295547,37.5588453 L2.89345418,37.5588453 C1.92896463,37.5588453 1.24404754,37.3771326 0.838682371,37.0137017 C0.433317198,36.6502709 0.230637652,36.0562101 0.230637652,35.2315017 C0.230637652,34.4906619 0.426328248,33.9280514 0.817715312,33.5436534 C1.20910238,33.1592554 1.78219626,32.9670593 2.53701417,32.9670593 L2.89345418,32.9670593 L8.51262607,17.3256331 L6.83526132,17.3256331 C5.88474988,17.3256331 5.20332727,17.1439204 4.79097304,16.7804895 C4.37861882,16.4170587 4.1724448,15.8299869 4.1724448,15.0192565 C4.1724448,14.1945481 4.37861882,13.6004873 4.79097304,13.2370565 C5.20332727,12.8736257 5.88474988,12.691913 6.83526132,12.691913 L14.6979086,12.691913 C15.9419603,12.691913 16.815579,13.3628521 17.318791,14.7047506 L17.318791,14.7676518 L23.9653488,32.9670593 Z M12.9786097,17.3256331 L9.9383861,26.1737321 L16.0188333,26.1737321 L12.9786097,17.3256331 Z M35.3809383,26.6979086 L35.3809383,33.0928616 L38.5259972,33.0928616 C40.7485166,33.0928616 42.3140414,32.8482484 43.2226185,32.3590146 C44.1311956,31.8697807 44.5854773,31.0520736 44.5854773,29.9058686 C44.5854773,28.7456855 44.1521624,27.9209895 43.2855197,27.4317556 C42.4188769,26.9425218 40.9022748,26.6979086 38.7356678,26.6979086 L35.3809383,26.6979086 Z M46.0741385,24.370565 C47.5977525,24.9296893 48.7159844,25.6949794 49.428868,26.666458 C50.1417516,27.6379366 50.498188,28.8784752 50.498188,30.388111 C50.498188,31.6601189 50.1906743,32.8202846 49.5756374,33.8686428 C48.9606006,34.917001 48.0799929,35.7766419 46.933788,36.4475911 C46.2628387,36.8389782 45.5115266,37.1220307 44.6798291,37.296757 C43.8481316,37.4714834 42.6704935,37.5588453 41.1468796,37.5588453 L39.3856466,37.5588453 L30.2020747,37.5588453 C29.2795194,37.5588453 28.6190637,37.3771326 28.2206876,37.0137017 C27.8223114,36.6502709 27.6231264,36.0562101 27.6231264,35.2315017 C27.6231264,34.4906619 27.811828,33.9280514 28.189237,33.5436534 C28.5666459,33.1592554 29.118773,32.9670593 29.8456347,32.9670593 L30.2020747,32.9670593 L30.2020747,17.3256331 L29.8456347,17.3256331 C29.118773,17.3256331 28.5666459,17.1299425 28.189237,16.7385554 C27.811828,16.3471683 27.6231264,15.7740744 27.6231264,15.0192565 C27.6231264,14.2085262 27.8258059,13.6179599 28.2311711,13.24754 C28.6365363,12.8771201 29.2934976,12.691913 30.2020747,12.691913 L39.8469219,12.691913 C42.796303,12.691913 45.0362615,13.2650068 46.5668644,14.4112118 C48.0974674,15.5574168 48.8627574,17.2347648 48.8627574,19.443306 C48.8627574,20.5335986 48.6286276,21.4945792 48.1603609,22.3262767 C47.6920943,23.1579742 46.9966938,23.8393968 46.0741385,24.370565 L46.0741385,24.370565 Z M35.3809383,17.1998307 L35.3809383,22.4835296 L38.2114913,22.4835296 C39.9307988,22.4835296 41.1433816,22.2808501 41.8492761,21.8754849 C42.5551706,21.4701197 42.9081126,20.7852027 42.9081126,19.8207131 C42.9081126,18.912136 42.5901154,18.2481858 41.9541114,17.8288425 C41.3181074,17.4094992 40.2872373,17.1998307 38.8614701,17.1998307 L35.3809383,17.1998307 Z M71.244119,13.3838259 C71.5236812,12.880614 71.8102281,12.5241775 72.1037684,12.3145059 C72.3973087,12.1048342 72.7677231,12 73.2150226,12 C73.8999499,12 74.3856819,12.1817127 74.6722332,12.5451435 C74.9587844,12.9085744 75.1020579,13.5305909 75.1020579,14.4112118 L75.143992,19.8626472 C75.143992,20.8271368 74.9867406,21.4771091 74.6722332,21.8125837 C74.3577257,22.1480584 73.7881263,22.3157932 72.9634178,22.3157932 C72.3763372,22.3157932 71.92555,22.1760142 71.6110425,21.896452 C71.2965351,21.6168898 71.0274605,21.0997075 70.8038107,20.3448896 C70.4403799,19.0169692 69.8602971,18.0629775 69.0635448,17.482886 C68.2667926,16.9027945 67.1625385,16.612753 65.7507494,16.612753 C63.5981206,16.612753 61.9487284,17.3396038 60.8025235,18.7933272 C59.6563185,20.2470506 59.0832246,22.3507245 59.0832246,25.104412 C59.0832246,27.8441215 59.6633074,29.9477954 60.8234905,31.4154969 C61.9836736,32.8831984 63.6400547,33.6170381 65.7926836,33.6170381 C67.2603851,33.6170381 68.878327,33.1278116 70.6465578,32.149344 C72.4147886,31.1708763 73.5295261,30.6816498 73.9908037,30.6816498 C74.53595,30.6816498 74.9937262,30.9122852 75.3641461,31.3735628 C75.734566,31.8348404 75.9197732,32.4079343 75.9197732,33.0928616 C75.9197732,34.3229353 74.836486,35.4831009 72.669879,36.5733935 C70.5032721,37.663686 68.0641285,38.2088241 65.3523753,38.2088241 C61.6901107,38.2088241 58.7267959,36.9997358 56.4623422,34.5815228 C54.1978885,32.1633099 53.0656786,29.0043046 53.0656786,25.104412 C53.0656786,21.3443006 54.2118664,18.22024 56.5042763,15.7321366 C58.7966863,13.2440331 61.7040894,12 65.226573,12 C66.2190187,12 67.1974717,12.1118232 68.1619613,12.3354729 C69.1264508,12.5591227 70.1538264,12.9085702 71.244119,13.3838259 L71.244119,13.3838259 Z M81.4645862,32.9670593 L81.4645862,17.3256331 L81.1081461,17.3256331 C80.3533282,17.3256331 79.7802344,17.1299425 79.3888473,16.7385554 C78.9974602,16.3471683 78.8017696,15.7740744 78.8017696,15.0192565 C78.8017696,14.2085262 79.0114381,13.6179599 79.4307814,13.24754 C79.8501247,12.8771201 80.5280528,12.691913 81.4645862,12.691913 L85.4063933,12.691913 L86.6434498,12.691913 C89.5648747,12.691913 91.7034933,12.8177141 93.0593699,13.06932 C94.4152465,13.320926 95.5684233,13.740263 96.5189347,14.3273436 C98.210286,15.3337675 99.5067362,16.7699967 100.408324,18.6360743 C101.309912,20.5021519 101.7607,22.6582429 101.7607,25.104412 C101.7607,27.6903623 101.247012,29.9512876 100.219621,31.8872557 C99.1922296,33.8232239 97.7350336,35.2874089 95.8479888,36.2798546 C94.9953241,36.7271541 93.9959043,37.0521403 92.8496993,37.2548229 C91.7034944,37.4575055 89.9981906,37.5588453 87.7337369,37.5588453 L85.4063933,37.5588453 L81.4645862,37.5588453 C80.5000966,37.5588453 79.8151795,37.380627 79.4098143,37.0241852 C79.0044492,36.6677435 78.8017696,36.0701882 78.8017696,35.2315017 C78.8017696,34.4906619 78.9974602,33.9280514 79.3888473,33.5436534 C79.7802344,33.1592554 80.3533282,32.9670593 81.1081461,32.9670593 L81.4645862,32.9670593 Z M86.8740874,17.2417648 L86.8740874,32.9670593 L88.0692098,32.9670593 C90.7110725,32.9670593 92.6609895,32.3205814 93.9190194,31.0276063 C95.1770492,29.7346312 95.8060547,27.7462749 95.8060547,25.0624779 C95.8060547,22.4206153 95.1665658,20.4497314 93.8875688,19.1497672 C92.6085718,17.849803 90.6831161,17.1998307 88.1111439,17.1998307 C87.7756693,17.1998307 87.5205727,17.2033252 87.3458463,17.2103142 C87.1711199,17.2173033 87.0138685,17.2277867 86.8740874,17.2417648 L86.8740874,17.2417648 Z M121.94052,17.1159625 L112.190837,17.1159625 L112.190837,22.4835296 L115.88104,22.4835296 L115.88104,22.2319249 C115.88104,21.4351727 116.055763,20.841112 116.405216,20.4497249 C116.754669,20.0583378 117.285829,19.8626472 117.998713,19.8626472 C118.627728,19.8626472 119.141415,20.0408655 119.539792,20.3973072 C119.938168,20.753749 120.137353,21.2045363 120.137353,21.7496826 C120.137353,21.7776388 120.144342,21.8684951 120.15832,22.0222543 C120.172298,22.1760135 120.179287,22.3297704 120.179287,22.4835296 L120.179287,26.8237109 C120.179287,27.7602442 120.011552,28.4311834 119.676077,28.8365486 C119.340603,29.2419138 118.795465,29.4445933 118.040647,29.4445933 C117.327763,29.4445933 116.789614,29.2558917 116.426183,28.8784827 C116.062752,28.5010738 115.88104,27.9419578 115.88104,27.201118 L115.88104,26.8237109 L112.190837,26.8237109 L112.190837,33.0928616 L121.94052,33.0928616 L121.94052,30.5977816 C121.94052,29.6612482 122.118738,28.9903091 122.47518,28.5849439 C122.831622,28.1795787 123.415199,27.9768992 124.225929,27.9768992 C125.022682,27.9768992 125.592281,28.1760842 125.934745,28.5744604 C126.277208,28.9728365 126.448438,29.6472701 126.448438,30.5977816 L126.448438,35.6718099 C126.448438,36.4266278 126.30167,36.9298322 126.008129,37.1814382 C125.714589,37.4330442 125.134506,37.5588453 124.267863,37.5588453 L107.095842,37.5588453 C106.173287,37.5588453 105.512831,37.3771326 105.114455,37.0137017 C104.716079,36.6502709 104.516894,36.0562101 104.516894,35.2315017 C104.516894,34.4906619 104.705595,33.9280514 105.083004,33.5436534 C105.460413,33.1592554 106.01254,32.9670593 106.739402,32.9670593 L107.095842,32.9670593 L107.095842,17.3256331 L106.739402,17.3256331 C106.026518,17.3256331 105.477886,17.126448 105.093488,16.7280719 C104.70909,16.3296957 104.516894,15.7600963 104.516894,15.0192565 C104.516894,14.2085262 104.719573,13.6179599 105.124938,13.24754 C105.530304,12.8771201 106.187265,12.691913 107.095842,12.691913 L124.267863,12.691913 C125.120528,12.691913 125.697116,12.8212085 125.997646,13.0798036 C126.298175,13.3383986 126.448438,13.8520864 126.448438,14.6208824 L126.448438,19.3175037 C126.448438,20.2680151 126.273714,20.9494377 125.924261,21.361792 C125.574808,21.7741462 125.008703,21.9803202 124.225929,21.9803202 C123.415199,21.9803202 122.831622,21.7706517 122.47518,21.3513084 C122.118738,20.9319652 121.94052,20.254037 121.94052,19.3175037 L121.94052,17.1159625 Z M19.7719369,47.6405477 C20.037521,47.1373358 20.3205734,46.7808993 20.6211028,46.5712277 C20.9216322,46.361556 21.295541,46.2567218 21.7428405,46.2567218 C22.4277678,46.2567218 22.9134998,46.4384345 23.2000511,46.8018653 C23.4866023,47.1652962 23.6298758,47.7873127 23.6298758,48.6679336 L23.6718099,54.119369 C23.6718099,55.0838586 23.5145586,55.7338309 23.2000511,56.0693055 C22.8855436,56.4047802 22.3089553,56.572515 21.4702687,56.572515 C20.8831881,56.572515 20.4254119,56.4292415 20.0969263,56.1426902 C19.7684407,55.856139 19.4993662,55.3424512 19.2896945,54.6016114 C18.9122856,53.2597129 18.3322027,52.3022267 17.5494286,51.7291243 C16.7666545,51.1560218 15.6693894,50.8694748 14.2576003,50.8694748 C12.1049715,50.8694748 10.4590738,51.5963256 9.31985785,53.050049 C8.18064193,54.5037724 7.61104252,56.6074463 7.61104252,59.3611338 C7.61104252,62.1148214 8.20859773,64.2429566 9.40372609,65.7456034 C10.5988544,67.2482501 12.2936748,67.9995623 14.488238,67.9995623 C14.9914499,67.9995623 15.5645438,67.9401562 16.2075368,67.8213423 C16.8505299,67.7025283 17.6053364,67.5173212 18.4719792,67.2657152 L18.4719792,63.9529198 L16.1027015,63.9529198 C15.1521901,63.9529198 14.4777564,63.7781961 14.0793803,63.4287433 C13.6810042,63.0792906 13.4818191,62.4992078 13.4818191,61.6884774 C13.4818191,60.8497908 13.6810042,60.2522356 14.0793803,59.8957938 C14.4777564,59.5393521 15.1521901,59.3611338 16.1027015,59.3611338 L23.6718099,59.3611338 C24.6502776,59.3611338 25.3386891,59.5358576 25.7370653,59.8853103 C26.1354414,60.2347631 26.3346265,60.8218348 26.3346265,61.6465433 C26.3346265,62.3873831 26.1354414,62.9569825 25.7370653,63.3553586 C25.3386891,63.7537347 24.7621008,63.9529198 24.0072829,63.9529198 L23.6718099,63.9529198 L23.6718099,68.9430799 L23.6718099,69.1946846 C23.6718099,69.6419841 23.6228873,69.9529924 23.5250405,70.1277188 C23.4271937,70.3024451 23.2315031,70.4806634 22.9379628,70.6623788 C22.1412106,71.1376345 20.8762107,71.5569715 19.1429251,71.9204023 C17.4096396,72.2838332 15.6554131,72.4655459 13.8801932,72.4655459 C10.2179286,72.4655459 7.25461383,71.2564576 4.99016011,68.8382446 C2.72570638,66.4200317 1.59349651,63.2610264 1.59349651,59.3611338 C1.59349651,55.6010224 2.73968428,52.4769618 5.03209423,49.9888583 C7.32450417,47.5007549 10.2319073,46.2567218 13.7543909,46.2567218 C14.7328585,46.2567218 15.7078171,46.368545 16.6792957,46.5921947 C17.6507743,46.8158445 18.6816444,47.165292 19.7719369,47.6405477 L19.7719369,47.6405477 Z M35.611576,51.5823548 L35.611576,56.4047785 L42.4678043,56.4047785 L42.4678043,51.5823548 L42.1323314,51.5823548 C41.3775135,51.5823548 40.8009251,51.3866642 40.402549,50.9952772 C40.0041729,50.6038901 39.8049878,50.0307962 39.8049878,49.2759783 C39.8049878,48.4512699 40.0111618,47.8572091 40.4235161,47.4937783 C40.8358703,47.1303474 41.5172929,46.9486347 42.4678043,46.9486347 L47.8773056,46.9486347 C48.8278171,46.9486347 49.5022507,47.1303474 49.9006269,47.4937783 C50.299003,47.8572091 50.498188,48.4512699 50.498188,49.2759783 C50.498188,50.0307962 50.3059919,50.6038901 49.9215939,50.9952772 C49.5371959,51.3866642 48.9745854,51.5823548 48.2337456,51.5823548 L47.8773056,51.5823548 L47.8773056,67.2237811 L48.2337456,67.2237811 C48.9885636,67.2237811 49.5616574,67.4159772 49.9530445,67.8003752 C50.3444316,68.1847732 50.5401222,68.7473837 50.5401222,69.4882235 C50.5401222,70.3129319 50.3374426,70.9069927 49.9320774,71.2704235 C49.5267123,71.6338543 48.8417952,71.815567 47.8773056,71.815567 L42.4678043,71.815567 C41.5033148,71.815567 40.8183977,71.6373488 40.4130325,71.280907 C40.0076674,70.9244652 39.8049878,70.32691 39.8049878,69.4882235 C39.8049878,68.7473837 40.0041729,68.1847732 40.402549,67.8003752 C40.8009251,67.4159772 41.3775135,67.2237811 42.1323314,67.2237811 L42.4678043,67.2237811 L42.4678043,61.0384986 L35.611576,61.0384986 L35.611576,67.2237811 L35.9470489,67.2237811 C36.7018668,67.2237811 37.2784552,67.4159772 37.6768313,67.8003752 C38.0752074,68.1847732 38.2743925,68.7473837 38.2743925,69.4882235 C38.2743925,70.3129319 38.0682185,70.9069927 37.6558642,71.2704235 C37.24351,71.6338543 36.5620874,71.815567 35.611576,71.815567 L30.2020747,71.815567 C29.2375851,71.815567 28.552668,71.6373488 28.1473029,71.280907 C27.7419377,70.9244652 27.5392581,70.32691 27.5392581,69.4882235 C27.5392581,68.7473837 27.7349487,68.1847732 28.1263358,67.8003752 C28.5177229,67.4159772 29.0908168,67.2237811 29.8456347,67.2237811 L30.2020747,67.2237811 L30.2020747,51.5823548 L29.8456347,51.5823548 C29.1047949,51.5823548 28.5421844,51.3866642 28.1577864,50.9952772 C27.7733884,50.6038901 27.5811923,50.0307962 27.5811923,49.2759783 C27.5811923,48.4512699 27.7803773,47.8572091 28.1787534,47.4937783 C28.5771296,47.1303474 29.2515632,46.9486347 30.2020747,46.9486347 L35.611576,46.9486347 C36.5481093,46.9486347 37.2260374,47.1303474 37.6453807,47.4937783 C38.064724,47.8572091 38.2743925,48.4512699 38.2743925,49.2759783 C38.2743925,50.0307962 38.0752074,50.6038901 37.6768313,50.9952772 C37.2784552,51.3866642 36.7018668,51.5823548 35.9470489,51.5823548 L35.611576,51.5823548 Z M67.365213,51.5823548 L67.365213,67.2237811 L70.887679,67.2237811 C71.8381904,67.2237811 72.519613,67.4019993 72.9319673,67.7584411 C73.3443215,68.1148829 73.5504955,68.6914712 73.5504955,69.4882235 C73.5504955,70.2989538 73.340827,70.8895201 72.9214837,71.25994 C72.5021404,71.6303599 71.8242123,71.815567 70.887679,71.815567 L58.4332458,71.815567 C57.4827343,71.815567 56.8013117,71.6338543 56.3889575,71.2704235 C55.9766033,70.9069927 55.7704292,70.3129319 55.7704292,69.4882235 C55.7704292,68.6774931 55.9731088,68.0974103 56.378474,67.7479575 C56.7838391,67.3985048 57.4687562,67.2237811 58.4332458,67.2237811 L61.9557117,67.2237811 L61.9557117,51.5823548 L58.4332458,51.5823548 C57.4827343,51.5823548 56.8013117,51.4006421 56.3889575,51.0372113 C55.9766033,50.6737805 55.7704292,50.0867087 55.7704292,49.2759783 C55.7704292,48.4512699 55.9731088,47.8641981 56.378474,47.5147453 C56.7838391,47.1652926 57.4687562,46.9905689 58.4332458,46.9905689 L70.887679,46.9905689 C71.8801247,46.9905689 72.5720308,47.1652926 72.9634178,47.5147453 C73.3548049,47.8641981 73.5504955,48.4512699 73.5504955,49.2759783 C73.5504955,50.0867087 73.347816,50.6737805 72.9424508,51.0372113 C72.5370856,51.4006421 71.8521685,51.5823548 70.887679,51.5823548 L67.365213,51.5823548 Z M97.8608265,51.5823548 L97.8608265,63.1771386 L97.8608265,63.5755127 C97.8608265,65.4485794 97.7385199,66.8044357 97.493903,67.6431222 C97.2492861,68.4818088 96.8404325,69.2296264 96.26733,69.8865976 C95.5264902,70.7392623 94.4991146,71.3822457 93.1851723,71.815567 C91.87123,72.2488884 90.2917273,72.4655459 88.4466169,72.4655459 C87.1466527,72.4655459 85.8921362,72.3397448 84.6830298,72.0881388 C83.4739233,71.8365328 82.3102631,71.4591296 81.1920144,70.9559176 C80.5769776,70.6763554 80.175113,70.31293 79.9864085,69.8656305 C79.797704,69.418331 79.7033532,68.6914802 79.7033532,67.6850564 L79.7033532,63.3658422 C79.7033532,62.1637247 79.8780769,61.3250508 80.2275297,60.849795 C80.5769824,60.3745393 81.185021,60.136915 82.0516638,60.136915 C83.2957156,60.136915 83.9806326,61.0524675 84.1064356,62.8835998 C84.1204137,63.2050963 84.1413806,63.4497096 84.1693368,63.6174469 C84.3370741,65.2389076 84.7144774,66.3466561 85.301558,66.9407258 C85.8886386,67.5347954 86.8251579,67.8318258 88.1111439,67.8318258 C89.7046484,67.8318258 90.8263749,67.4089943 91.476357,66.5633187 C92.126339,65.7176431 92.4513252,64.1765796 92.4513252,61.9400821 L92.4513252,51.5823548 L88.9288593,51.5823548 C87.9783478,51.5823548 87.2969252,51.4006421 86.884571,51.0372113 C86.4722168,50.6737805 86.2660427,50.0867087 86.2660427,49.2759783 C86.2660427,48.4512699 86.4652278,47.8641981 86.8636039,47.5147453 C87.26198,47.1652926 87.9503916,46.9905689 88.9288593,46.9905689 L99.6220595,46.9905689 C100.600527,46.9905689 101.288939,47.1652926 101.687315,47.5147453 C102.085691,47.8641981 102.284876,48.4512699 102.284876,49.2759783 C102.284876,50.0867087 102.078702,50.6737805 101.666348,51.0372113 C101.253994,51.4006421 100.572571,51.5823548 99.6220595,51.5823548 L97.8608265,51.5823548 Z M112.505343,51.5823548 L112.505343,57.9353738 L118.984165,51.4565525 C118.257303,51.3726838 117.747109,51.1665098 117.453569,50.8380242 C117.160029,50.5095387 117.013261,49.9888619 117.013261,49.2759783 C117.013261,48.4512699 117.212446,47.8572091 117.610822,47.4937783 C118.009198,47.1303474 118.683632,46.9486347 119.634143,46.9486347 L124.771073,46.9486347 C125.721584,46.9486347 126.396018,47.1303474 126.794394,47.4937783 C127.19277,47.8572091 127.391955,48.4512699 127.391955,49.2759783 C127.391955,50.0447743 127.19277,50.6213627 126.794394,51.0057607 C126.396018,51.3901587 125.812441,51.5823548 125.043645,51.5823548 L124.561402,51.5823548 L118.459988,57.641835 C119.592215,58.4805215 120.626579,59.5812811 121.563113,60.9441468 C122.499646,62.3070125 123.596911,64.400203 124.854941,67.2237811 L125.127513,67.2237811 L125.546854,67.2237811 C126.371563,67.2237811 126.98659,67.4124827 127.391955,67.7898917 C127.79732,68.1673006 128,68.7334056 128,69.4882235 C128,70.3129319 127.793826,70.9069927 127.381472,71.2704235 C126.969118,71.6338543 126.287695,71.815567 125.337183,71.815567 L122.758235,71.815567 C121.626008,71.815567 120.710456,71.0537715 120.01155,69.5301576 C119.885747,69.2505954 119.787902,69.026949 119.718012,68.8592117 C118.795456,66.9022764 117.949793,65.3926632 117.180997,64.3303269 C116.412201,63.2679906 115.510627,62.2965265 114.476247,61.4159056 L112.505343,63.302941 L112.505343,67.2237811 L112.840816,67.2237811 C113.595634,67.2237811 114.172222,67.4159772 114.570599,67.8003752 C114.968975,68.1847732 115.16816,68.7473837 115.16816,69.4882235 C115.16816,70.3129319 114.961986,70.9069927 114.549631,71.2704235 C114.137277,71.6338543 113.455855,71.815567 112.505343,71.815567 L107.095842,71.815567 C106.131352,71.815567 105.446435,71.6373488 105.04107,71.280907 C104.635705,70.9244652 104.433025,70.32691 104.433025,69.4882235 C104.433025,68.7473837 104.628716,68.1847732 105.020103,67.8003752 C105.41149,67.4159772 105.984584,67.2237811 106.739402,67.2237811 L107.095842,67.2237811 L107.095842,51.5823548 L106.739402,51.5823548 C105.998562,51.5823548 105.435952,51.3866642 105.051554,50.9952772 C104.667156,50.6038901 104.474959,50.0307962 104.474959,49.2759783 C104.474959,48.4512699 104.674145,47.8572091 105.072521,47.4937783 C105.470897,47.1303474 106.14533,46.9486347 107.095842,46.9486347 L112.505343,46.9486347 C113.441877,46.9486347 114.119805,47.1303474 114.539148,47.4937783 C114.958491,47.8572091 115.16816,48.4512699 115.16816,49.2759783 C115.16816,50.0307962 114.968975,50.6038901 114.570599,50.9952772 C114.172222,51.3866642 113.595634,51.5823548 112.840816,51.5823548 L112.505343,51.5823548 Z M13.439885,96.325622 L17.4445933,84.4372993 C17.6961993,83.6545252 18.0456468,83.0849258 18.4929463,82.728484 C18.9402458,82.3720422 19.5343065,82.193824 20.2751463,82.193824 L23.5460076,82.193824 C24.496519,82.193824 25.1779416,82.3755367 25.5902958,82.7389675 C26.0026501,83.1023984 26.2088241,83.6964591 26.2088241,84.5211676 C26.2088241,85.2759855 26.009639,85.8490794 25.6112629,86.2404664 C25.2128868,86.6318535 24.6362984,86.8275441 23.8814805,86.8275441 L23.5460076,86.8275441 L24.1330852,102.46897 L24.4895252,102.46897 C25.2443431,102.46897 25.8104481,102.661166 26.187857,103.045564 C26.565266,103.429962 26.7539676,103.992573 26.7539676,104.733413 C26.7539676,105.558121 26.5547826,106.152182 26.1564064,106.515613 C25.7580303,106.879044 25.0835967,107.060756 24.1330852,107.060756 L19.4154969,107.060756 C18.4649855,107.060756 17.7905518,106.882538 17.3921757,106.526096 C16.9937996,106.169654 16.7946145,105.572099 16.7946145,104.733413 C16.7946145,103.992573 16.9868106,103.429962 17.3712086,103.045564 C17.7556066,102.661166 18.325206,102.46897 19.0800239,102.46897 L19.4154969,102.46897 L19.1219581,89.6790642 L16.0607674,99.1981091 C15.8371177,99.9109927 15.5191204,100.42468 15.1067662,100.739188 C14.694412,101.053695 14.1248126,101.210947 13.3979509,101.210947 C12.6710892,101.210947 12.0945008,101.053695 11.6681685,100.739188 C11.2418362,100.42468 10.91685,99.9109927 10.6932002,99.1981091 L7.65297664,89.6790642 L7.35943781,102.46897 L7.69491075,102.46897 C8.44972866,102.46897 9.01932808,102.661166 9.40372609,103.045564 C9.78812409,103.429962 9.98032022,103.992573 9.98032022,104.733413 C9.98032022,105.558121 9.77764067,106.152182 9.3722755,106.515613 C8.96691032,106.879044 8.29597114,107.060756 7.35943781,107.060756 L2.62088241,107.060756 C1.68434908,107.060756 1.01340989,106.879044 0.608044719,106.515613 C0.202679546,106.152182 0,105.558121 0,104.733413 C0,103.992573 0.192196121,103.429962 0.57659413,103.045564 C0.960992139,102.661166 1.53059155,102.46897 2.28540946,102.46897 L2.62088241,102.46897 L3.22892713,86.8275441 L2.89345418,86.8275441 C2.13863627,86.8275441 1.56204791,86.6318535 1.16367179,86.2404664 C0.765295672,85.8490794 0.5661106,85.2759855 0.5661106,84.5211676 C0.5661106,83.6964591 0.772284622,83.1023984 1.18463885,82.7389675 C1.59699308,82.3755367 2.27841569,82.193824 3.22892713,82.193824 L6.49978838,82.193824 C7.22665007,82.193824 7.81022738,82.3685477 8.25053783,82.7180005 C8.69084827,83.0674532 9.05077919,83.6405471 9.33034138,84.4372993 L13.439885,96.325622 Z M43.8935644,98.3803938 L43.8935644,86.8275441 L42.7403761,86.8275441 C41.8178209,86.8275441 41.1573651,86.6458314 40.758989,86.2824006 C40.3606129,85.9189697 40.1614278,85.3318979 40.1614278,84.5211676 C40.1614278,83.7104372 40.3606129,83.119871 40.758989,82.7494511 C41.1573651,82.3790312 41.8178209,82.193824 42.7403761,82.193824 L48.6950209,82.193824 C49.6035981,82.193824 50.2605593,82.3790312 50.6659245,82.7494511 C51.0712897,83.119871 51.2739692,83.7104372 51.2739692,84.5211676 C51.2739692,85.2620074 51.0817731,85.8316068 50.6973751,86.2299829 C50.3129771,86.628359 49.7643445,86.8275441 49.051461,86.8275441 L48.6950209,86.8275441 L48.6950209,105.865634 C48.6950209,106.522605 48.6251315,106.934953 48.4853504,107.10269 C48.3455693,107.270428 48.0310665,107.354295 47.5418327,107.354295 L45.4451268,107.354295 C44.7741775,107.354295 44.3024234,107.284406 44.0298503,107.144625 C43.7572771,107.004843 43.5231473,106.76023 43.3274538,106.410777 L34.6051571,91.0838571 L34.6051571,102.46897 L35.8212466,102.46897 C36.7298237,102.46897 37.379796,102.643694 37.7711831,102.993147 C38.1625701,103.3426 38.3582607,103.922682 38.3582607,104.733413 C38.3582607,105.558121 38.1590757,106.152182 37.7606995,106.515613 C37.3623234,106.879044 36.7158456,107.060756 35.8212466,107.060756 L29.8037005,107.060756 C28.8951234,107.060756 28.2381621,106.879044 27.832797,106.515613 C27.4274318,106.152182 27.2247522,105.558121 27.2247522,104.733413 C27.2247522,103.992573 27.4134539,103.429962 27.7908629,103.045564 C28.1682718,102.661166 28.7273878,102.46897 29.4682276,102.46897 L29.8037005,102.46897 L29.8037005,86.8275441 L29.4682276,86.8275441 C28.755344,86.8275441 28.203217,86.628359 27.8118299,86.2299829 C27.4204428,85.8316068 27.2247522,85.2620074 27.2247522,84.5211676 C27.2247522,83.7104372 27.4309263,83.119871 27.8432805,82.7494511 C28.2556347,82.3790312 28.9091015,82.193824 29.8037005,82.193824 L33.2422983,82.193824 C34.0670067,82.193824 34.6261227,82.3021527 34.919663,82.5188134 C35.2132033,82.7354741 35.5416839,83.1722835 35.9051148,83.8292546 L43.8935644,98.3803938 Z M64.6604624,86.3662688 C62.8572863,86.3662688 61.4420239,87.0931196 60.4146329,88.546843 C59.3872418,90.0005663 58.873554,92.0203728 58.873554,94.6063231 C58.873554,97.1922733 59.3907363,99.2190688 60.4251164,100.68677 C61.4594965,102.154472 62.8712644,102.888312 64.6604624,102.888312 C66.4636385,102.888312 67.8823953,102.157966 68.9167754,100.697254 C69.9511555,99.2365414 70.4683378,97.2062514 70.4683378,94.6063231 C70.4683378,92.0203728 69.95465,90.0005663 68.9272589,88.546843 C67.8998679,87.0931196 66.4776166,86.3662688 64.6604624,86.3662688 L64.6604624,86.3662688 Z M64.6604624,81.501911 C68.0990773,81.501911 70.929602,82.7319662 73.1521214,85.1921135 C75.3746408,87.6522607 76.4858838,90.7902992 76.4858838,94.6063231 C76.4858838,98.4503032 75.3816297,101.595331 73.1730884,104.0415 C70.9645471,106.487669 68.1270335,107.710735 64.6604624,107.710735 C61.2358256,107.710735 58.4053009,106.477185 56.1688034,104.010049 C53.9323059,101.542913 52.8140739,98.4083688 52.8140739,94.6063231 C52.8140739,90.7763211 53.9218224,87.6347881 56.1373528,85.1816299 C58.3528831,82.7284717 61.1938912,81.501911 64.6604624,81.501911 L64.6604624,81.501911 Z M87.4611651,98.1707232 L87.4611651,102.46897 L89.6207722,102.46897 C90.5293493,102.46897 91.1758272,102.643694 91.5602252,102.993147 C91.9446232,103.3426 92.1368193,103.922682 92.1368193,104.733413 C92.1368193,105.558121 91.9411287,106.152182 91.5497417,106.515613 C91.1583546,106.879044 90.5153712,107.060756 89.6207722,107.060756 L82.3661697,107.060756 C81.4436145,107.060756 80.7831587,106.879044 80.3847826,106.515613 C79.9864065,106.152182 79.7872214,105.558121 79.7872214,104.733413 C79.7872214,103.992573 79.9759231,103.429962 80.353332,103.045564 C80.730741,102.661166 81.282868,102.46897 82.0097297,102.46897 L82.3661697,102.46897 L82.3661697,86.8275441 L82.0097297,86.8275441 C81.2968461,86.8275441 80.7482136,86.628359 80.3638155,86.2299829 C79.9794175,85.8316068 79.7872214,85.2620074 79.7872214,84.5211676 C79.7872214,83.7104372 79.989901,83.119871 80.3952661,82.7494511 C80.8006313,82.3790312 81.4575926,82.193824 82.3661697,82.193824 L91.0255652,82.193824 C94.450202,82.193824 97.0396079,82.8507853 98.7938606,84.1647276 C100.548113,85.4786699 101.425227,87.414609 101.425227,89.972603 C101.425227,92.6703781 100.551608,94.7111515 98.8043442,96.0949843 C97.0570805,97.4788171 94.4641801,98.1707232 91.0255652,98.1707232 L87.4611651,98.1707232 Z M87.4611651,86.8275441 L87.4611651,93.4531348 L90.4384875,93.4531348 C92.0879044,93.4531348 93.328443,93.1735768 94.1601405,92.6144525 C94.9918381,92.0553281 95.4076806,91.2166541 95.4076806,90.0984053 C95.4076806,89.0500471 94.9778602,88.2428234 94.1182064,87.67671 C93.2585527,87.1105966 92.031992,86.8275441 90.4384875,86.8275441 L87.4611651,86.8275441 Z M114.727851,107.396229 L113.092421,109.03166 C113.69348,108.835966 114.284046,108.689198 114.864137,108.591352 C115.444229,108.493505 116.013828,108.444582 116.572953,108.444582 C117.677223,108.444582 118.840883,108.608823 120.063968,108.937308 C121.287053,109.265794 122.031376,109.430034 122.29696,109.430034 C122.744259,109.430034 123.327837,109.279772 124.047709,108.979242 C124.767582,108.678713 125.253314,108.52845 125.50492,108.52845 C126.02211,108.52845 126.45193,108.727636 126.794394,109.126012 C127.136858,109.524388 127.308087,110.024098 127.308087,110.625156 C127.308087,111.421909 126.836333,112.099837 125.892811,112.658961 C124.949288,113.218086 123.792617,113.497643 122.422762,113.497643 C121.486229,113.497643 120.28413,113.277492 118.816428,112.837181 C117.348727,112.396871 116.286406,112.176719 115.629435,112.176719 C114.636989,112.176719 113.518757,112.449288 112.274706,112.994434 C111.030654,113.53958 110.261869,113.812149 109.968329,113.812149 C109.36727,113.812149 108.857077,113.612964 108.437734,113.214588 C108.01839,112.816212 107.808722,112.337469 107.808722,111.778345 C107.808722,111.386958 107.941512,110.971115 108.207096,110.530805 C108.47268,110.090494 108.94094,109.520895 109.611889,108.821989 L111.729562,106.683349 C109.395218,105.830685 107.536157,104.29661 106.152324,102.08108 C104.768491,99.8655494 104.076585,97.3180772 104.076585,94.4385866 C104.076585,90.6365409 105.180839,87.5299526 107.389381,85.1187288 C109.597922,82.7075049 112.442425,81.501911 115.922974,81.501911 C119.389545,81.501911 122.227059,82.7109994 124.4356,85.1292123 C126.644141,87.5474252 127.748395,90.650519 127.748395,94.4385866 C127.748395,98.2126762 126.65113,101.322759 124.456567,103.768928 C122.262004,106.215097 119.480402,107.438163 116.111677,107.438163 C115.888028,107.438163 115.660887,107.434669 115.430248,107.42768 C115.199609,107.420691 114.965479,107.410207 114.727851,107.396229 L114.727851,107.396229 Z M115.922974,86.3662688 C114.119798,86.3662688 112.704535,87.0931196 111.677144,88.546843 C110.649753,90.0005663 110.136065,92.0203728 110.136065,94.6063231 C110.136065,97.1922733 110.653248,99.2190688 111.687628,100.68677 C112.722008,102.154472 114.133776,102.888312 115.922974,102.888312 C117.72615,102.888312 119.144907,102.157966 120.179287,100.697254 C121.213667,99.2365414 121.730849,97.2062514 121.730849,94.6063231 C121.730849,92.0203728 121.217161,90.0005663 120.18977,88.546843 C119.162379,87.0931196 117.740128,86.3662688 115.922974,86.3662688 L115.922974,86.3662688 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/mono-line": {
"title": "$:/core/images/mono-line",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-mono-line tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M60.4374591,84.522627 L61.3450888,84.522627 C63.2671377,84.522627 64.7264493,85.0120303 65.7230673,85.9908515 C66.7196852,86.9696727 67.2179868,88.4022896 67.2179868,90.288745 C67.2179868,92.3887615 66.6929905,93.9014625 65.6429823,94.8268935 C64.5929741,95.7523244 62.857817,96.215033 60.4374591,96.215033 L44.3670747,96.215033 C41.9111232,96.215033 40.1670679,95.7612227 39.1348565,94.8535884 C38.102645,93.9459542 37.586547,92.424355 37.586547,90.288745 C37.586547,88.2243221 38.102645,86.747214 39.1348565,85.8573766 C40.1670679,84.9675391 41.9111232,84.522627 44.3670747,84.522627 L46.235724,84.522627 L44.0467348,78.2759992 L20.9822627,78.2759992 L18.6864935,84.522627 L20.5551429,84.522627 C22.9755008,84.522627 24.7106579,84.9764373 25.7606661,85.8840716 C26.8106743,86.7917058 27.3356705,88.2599156 27.3356705,90.288745 C27.3356705,92.3887615 26.8106743,93.9014625 25.7606661,94.8268935 C24.7106579,95.7523244 22.9755008,96.215033 20.5551429,96.215033 L6.78052766,96.215033 C4.32457622,96.215033 2.58052094,95.7523244 1.54830946,94.8268935 C0.516097994,93.9014625 0,92.3887615 0,90.288745 C0,88.4022896 0.498301511,86.9696727 1.49491948,85.9908515 C2.49153745,85.0120303 3.95084902,84.522627 5.87289797,84.522627 L6.78052766,84.522627 L21.0890427,44.6937008 L16.8178442,44.6937008 C14.3974863,44.6937008 12.6623292,44.2309922 11.612321,43.3055613 C10.5623128,42.3801303 10.0373165,40.8852258 10.0373165,38.8208028 C10.0373165,36.7207864 10.5623128,35.2080854 11.612321,34.2826544 C12.6623292,33.3572234 14.3974863,32.8945149 16.8178442,32.8945149 L36.8390873,32.8945149 C40.0069087,32.8945149 42.231469,34.6029772 43.512835,38.0199531 L43.512835,38.180123 L60.4374591,84.522627 Z M32.4611088,44.6937008 L24.7195615,67.224273 L40.2026561,67.224273 L32.4611088,44.6937008 Z M89.5058233,68.5590225 L89.5058233,84.8429669 L97.5143205,84.8429669 C103.173687,84.8429669 107.160099,84.22009 109.473676,82.9743176 C111.787254,81.7285451 112.944025,79.6463566 112.944025,76.7276897 C112.944025,73.7734293 111.840643,71.6734444 109.633846,70.4276719 C107.427049,69.1818994 103.565213,68.5590225 98.0482204,68.5590225 L89.5058233,68.5590225 Z M116.734714,62.6327346 C120.614405,64.0564746 123.461842,66.0051894 125.277111,68.4789376 C127.092379,70.9526857 128,74.1115614 128,77.9556593 C128,81.1946677 127.216955,84.1488838 125.650841,86.8183962 C124.084727,89.4879087 121.84237,91.676876 118.923703,93.385364 C117.215215,94.3819819 115.302093,95.1027395 113.18428,95.5476582 C111.066467,95.9925769 108.06776,96.215033 104.188068,96.215033 L99.7033098,96.215033 L76.3184979,96.215033 C73.9693269,96.215033 72.2875593,95.7523244 71.2731446,94.8268935 C70.2587299,93.9014625 69.7515301,92.3887615 69.7515301,90.288745 C69.7515301,88.4022896 70.2320352,86.9696727 71.1930596,85.9908515 C72.1540841,85.0120303 73.5600062,84.522627 75.4108682,84.522627 L76.3184979,84.522627 L76.3184979,44.6937008 L75.4108682,44.6937008 C73.5600062,44.6937008 72.1540841,44.1953993 71.1930596,43.1987813 C70.2320352,42.2021633 69.7515301,40.7428518 69.7515301,38.8208028 C69.7515301,36.7563799 70.2676281,35.2525771 71.2998396,34.3093494 C72.3320511,33.3661217 74.0049204,32.8945149 76.3184979,32.8945149 L100.877889,32.8945149 C108.388118,32.8945149 114.09189,34.3538264 117.989378,37.2724934 C121.886867,40.1911603 123.835581,44.4623161 123.835581,50.0860889 C123.835581,52.8623819 123.239399,55.3093982 122.047017,57.4272114 C120.854635,59.5450246 119.083885,61.2801816 116.734714,62.6327346 L116.734714,62.6327346 Z M89.5058233,44.3733609 L89.5058233,57.8276363 L96.7134708,57.8276363 C101.091471,57.8276363 104.179161,57.3115383 105.976633,56.2793268 C107.774104,55.2471153 108.672827,53.50306 108.672827,51.0471086 C108.672827,48.7335312 107.863087,47.0428653 106.243583,45.9750604 C104.624078,44.9072554 101.999097,44.3733609 98.3685602,44.3733609 L89.5058233,44.3733609 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/new-button": {
"title": "$:/core/images/new-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-new-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <g fill-rule=\"evenodd\">\n <path d=\"M56,72 L8.00697327,72 C3.59075293,72 0,68.418278 0,64 C0,59.5907123 3.58484404,56 8.00697327,56 L56,56 L56,8.00697327 C56,3.59075293 59.581722,0 64,0 C68.4092877,0 72,3.58484404 72,8.00697327 L72,56 L119.993027,56 C124.409247,56 128,59.581722 128,64 C128,68.4092877 124.415156,72 119.993027,72 L72,72 L72,119.993027 C72,124.409247 68.418278,128 64,128 C59.5907123,128 56,124.415156 56,119.993027 L56,72 L56,72 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/new-here-button": {
"title": "$:/core/images/new-here-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-new-here-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n \t<g transform=\"translate(52.233611, 64.389922) rotate(75.000000) translate(-52.233611, -64.389922) translate(-7.734417, 3.702450)\">\n\t <path d=\"M18.9270186,45.959338 L18.9080585,49.6521741 C18.8884833,53.4648378 21.0574548,58.7482162 23.7526408,61.4434022 L78.5671839,116.257945 C81.2617332,118.952495 85.6348701,118.950391 88.3334363,116.251825 L115.863237,88.7220241 C118.555265,86.0299959 118.564544,81.6509578 115.869358,78.9557717 L61.0548144,24.1412286 C58.3602652,21.4466794 53.0787224,19.2788426 49.2595808,19.3006519 L25.9781737,19.4336012 C22.1633003,19.4553862 19.0471195,22.5673232 19.0275223,26.3842526 L18.9871663,34.2443819 C19.0818862,34.255617 19.1779758,34.2665345 19.2754441,34.2771502 C22.6891275,34.6489512 27.0485594,34.2348566 31.513244,33.2285542 C31.7789418,32.8671684 32.075337,32.5211298 32.4024112,32.1940556 C34.8567584,29.7397084 38.3789778,29.0128681 41.4406288,30.0213822 C41.5958829,29.9543375 41.7503946,29.8866669 41.9041198,29.8183808 L42.1110981,30.2733467 C43.1114373,30.6972371 44.0473796,31.3160521 44.8614145,32.1300869 C48.2842088,35.5528813 48.2555691,41.130967 44.7974459,44.5890903 C41.4339531,47.952583 36.0649346,48.0717177 32.6241879,44.9262969 C27.8170558,45.8919233 23.0726921,46.2881596 18.9270186,45.959338 Z\"></path>\n\t <path d=\"M45.4903462,38.8768094 C36.7300141,42.6833154 26.099618,44.7997354 18.1909048,43.9383587 C7.2512621,42.7468685 1.50150083,35.8404432 4.66865776,24.7010202 C7.51507386,14.6896965 15.4908218,6.92103848 24.3842626,4.38423012 C34.1310219,1.60401701 42.4070208,6.15882777 42.4070209,16.3101169 L34.5379395,16.310117 C34.5379394,11.9285862 31.728784,10.3825286 26.5666962,11.8549876 C20.2597508,13.6540114 14.3453742,19.4148216 12.2444303,26.8041943 C10.4963869,32.9523565 12.6250796,35.5092726 19.0530263,36.2093718 C25.5557042,36.9176104 35.0513021,34.9907189 42.7038419,31.5913902 L42.7421786,31.6756595 C44.3874154,31.5384763 47.8846101,37.3706354 45.9274416,38.6772897 L45.9302799,38.6835285 C45.9166992,38.6895612 45.9031139,38.6955897 45.8895238,38.7016142 C45.8389288,38.7327898 45.7849056,38.7611034 45.7273406,38.7863919 C45.6506459,38.8200841 45.571574,38.8501593 45.4903462,38.8768094 Z\"></path>\n </g>\n <rect x=\"96\" y=\"80\" width=\"16\" height=\"48\" rx=\"8\"></rect>\n <rect x=\"80\" y=\"96\" width=\"48\" height=\"16\" rx=\"8\"></rect>\n </g>\n </g>\n</svg>"
},
"$:/core/images/new-image-button": {
"title": "$:/core/images/new-image-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-new-image-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <g fill-rule=\"evenodd\">\n <path d=\"M81.3619177,73.6270062 L97.1875317,46.2162388 C97.91364,44.9585822 97.4824378,43.3533085 96.2260476,42.6279312 L46.2162388,13.7547547 C44.9585822,13.0286463 43.3533085,13.4598485 42.6279312,14.7162388 L30.0575956,36.4886988 L40.0978909,31.2276186 C43.1404959,29.6333041 46.8692155,31.3421319 47.6479264,34.6877101 L51.2545483,52.3903732 L61.1353556,53.2399953 C63.2899974,53.4346096 65.1046382,54.9309951 65.706105,57.0091178 C65.7395572,57.1246982 65.8069154,57.3539875 65.9047035,57.6813669 C66.0696435,58.2335608 66.2581528,58.852952 66.4667073,59.5238092 C67.0618822,61.4383079 67.6960725,63.3742727 68.3393254,65.2021174 C68.5462918,65.7902259 68.7511789,66.3583016 68.953259,66.9034738 C69.5777086,68.5881157 70.1617856,70.0172008 70.6783305,71.110045 C70.9334784,71.6498566 71.1627732,72.0871602 71.4035746,72.5373068 C71.6178999,72.7492946 71.9508843,72.9623307 72.4151452,73.1586945 C73.5561502,73.6412938 75.1990755,73.899146 77.0720271,73.9171651 C77.9355886,73.9254732 78.7819239,73.8832103 79.5638842,73.8072782 C80.0123946,73.7637257 80.3172916,73.7224469 80.4352582,73.7027375 C80.7503629,73.6500912 81.0598053,73.6256267 81.3619177,73.6270062 L81.3619177,73.6270062 L81.3619177,73.6270062 L81.3619177,73.6270062 Z M37.4707881,2.64867269 C38.9217993,0.135447653 42.1388058,-0.723707984 44.6486727,0.725364314 L108.293614,37.4707881 C110.806839,38.9217993 111.665994,42.1388058 110.216922,44.6486727 L73.4714982,108.293614 C72.0204871,110.806839 68.8034805,111.665994 66.2936136,110.216922 L2.64867269,73.4714982 C0.135447653,72.0204871 -0.723707984,68.8034805 0.725364314,66.2936136 L37.4707881,2.64867269 L37.4707881,2.64867269 L37.4707881,2.64867269 L37.4707881,2.64867269 Z M80.3080975,53.1397764 C82.8191338,54.5895239 86.0299834,53.7291793 87.4797308,51.218143 C88.9294783,48.7071068 88.0691338,45.4962571 85.5580975,44.0465097 C83.0470612,42.5967622 79.8362116,43.4571068 78.3864641,45.968143 C76.9367166,48.4791793 77.7970612,51.6900289 80.3080975,53.1397764 L80.3080975,53.1397764 L80.3080975,53.1397764 L80.3080975,53.1397764 Z M96,112 L88.0070969,112 C83.5881712,112 80,108.418278 80,104 C80,99.5907123 83.5848994,96 88.0070969,96 L96,96 L96,88.0070969 C96,83.5881712 99.581722,80 104,80 C108.409288,80 112,83.5848994 112,88.0070969 L112,96 L119.992903,96 C124.411829,96 128,99.581722 128,104 C128,108.409288 124.415101,112 119.992903,112 L112,112 L112,119.992903 C112,124.411829 108.418278,128 104,128 C99.5907123,128 96,124.415101 96,119.992903 L96,112 L96,112 Z M33.3471097,51.7910932 C40.7754579,59.7394511 42.3564368,62.4818351 40.7958321,65.1848818 C39.2352273,67.8879286 26.9581062,62.8571718 24.7019652,66.7649227 C22.4458242,70.6726735 23.7947046,70.0228006 22.2648667,72.6725575 L41.9944593,84.0634431 C41.9944593,84.0634431 36.3904568,75.8079231 37.7602356,73.4353966 C40.2754811,69.0788636 46.5298923,72.1787882 48.1248275,69.4162793 C50.538989,65.234829 43.0222016,59.7770885 33.3471097,51.7910932 L33.3471097,51.7910932 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/new-journal-button": {
"title": "$:/core/images/new-journal-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-new-journal-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M102.545455,112.818182 L102.545455,124.636364 L102.545455,124.636364 L102.545455,124.636364 C102.545455,125.941761 103.630828,127 104.969697,127 L111.030303,127 C112.369172,127 113.454545,125.941761 113.454545,124.636364 L113.454545,112.818182 L125.575758,112.818182 C126.914626,112.818182 128,111.759982 128,110.454545 L128,104.545455 C128,103.240018 126.914626,102.181818 125.575758,102.181818 L113.454545,102.181818 L113.454545,90.3636364 C113.454545,89.0582 112.369172,88 111.030303,88 L104.969697,88 L104.969697,88 C103.630828,88 102.545455,89.0582 102.545455,90.3636364 L102.545455,102.181818 L90.4242424,102.181818 L90.4242424,102.181818 C89.0853705,102.181818 88,103.240018 88,104.545455 L88,110.454545 L88,110.454545 L88,110.454545 C88,111.759982 89.0853705,112.818182 90.4242424,112.818182 L102.545455,112.818182 Z\"></path>\n <g transform=\"translate(59.816987, 64.316987) rotate(30.000000) translate(-59.816987, -64.316987) translate(20.316987, 12.816987)\">\n <g transform=\"translate(0.000000, 0.000000)\">\n <path d=\"M9.99631148,0 C4.4755011,0 -2.27373675e-13,4.48070044 -2.27373675e-13,9.99759461 L-2.27373675e-13,91.6128884 C-2.27373675e-13,97.1344074 4.46966773,101.610483 9.99631148,101.610483 L68.9318917,101.610483 C74.4527021,101.610483 78.9282032,97.1297826 78.9282032,91.6128884 L78.9282032,9.99759461 C78.9282032,4.47607557 74.4585355,0 68.9318917,0 L9.99631148,0 Z M20.8885263,26 C24.2022348,26 26.8885263,23.3137085 26.8885263,20 C26.8885263,16.6862915 24.2022348,14 20.8885263,14 C17.5748178,14 14.8885263,16.6862915 14.8885263,20 C14.8885263,23.3137085 17.5748178,26 20.8885263,26 Z M57.3033321,25.6783342 C60.6170406,25.6783342 63.3033321,22.9920427 63.3033321,19.6783342 C63.3033321,16.3646258 60.6170406,13.6783342 57.3033321,13.6783342 C53.9896236,13.6783342 51.3033321,16.3646258 51.3033321,19.6783342 C51.3033321,22.9920427 53.9896236,25.6783342 57.3033321,25.6783342 Z\"></path>\n <text font-family=\"Helvetica\" font-size=\"47.1724138\" font-weight=\"bold\" fill=\"#FFFFFF\">\n <tspan x=\"42\" y=\"77.4847912\" text-anchor=\"middle\"><<now \"DD\">></tspan>\n </text>\n </g>\n </g>\n </g>\n</svg>"
},
"$:/core/images/opacity": {
"title": "$:/core/images/opacity",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-opacity tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M102.361773,65 C101.833691,67.051742 101.183534,69.0544767 100.419508,71 L82.5835324,71 C83.7602504,69.1098924 84.7666304,67.1027366 85.581205,65 L102.361773,65 Z M102.834311,63 C103.256674,61.0388326 103.568427,59.0365486 103.762717,57 L87.6555706,57 C87.3692052,59.0609452 86.9083652,61.0660782 86.2884493,63 L102.834311,63 Z M99.5852583,73 C98.6682925,75.0747721 97.6196148,77.0783056 96.4498253,79 L75.8124196,79 C77.8387053,77.2115633 79.6621163,75.1985844 81.2437158,73 L99.5852583,73 Z M95.1689122,81 C93.7449202,83.1155572 92.1695234,85.1207336 90.458251,87 L60.4614747,87 C65.1836162,85.86248 69.5430327,83.794147 73.3347255,81 L95.1689122,81 Z M87.6555706,47 L103.762717,47 C101.246684,20.6269305 79.0321807,0 52,0 C23.281193,0 0,23.281193 0,52 C0,77.2277755 17.9651296,98.2595701 41.8000051,103 L62.1999949,103 C67.8794003,101.870444 73.2255333,99.8158975 78.074754,97 L39,97 L39,95 L81.2493857,95 C83.8589242,93.2215015 86.2981855,91.2116653 88.5376609,89 L39,89 L39,87 L43.5385253,87 C27.7389671,83.1940333 16,68.967908 16,52 C16,32.117749 32.117749,16 52,16 C70.1856127,16 85.2217929,29.4843233 87.6555706,47 Z M87.8767787,49 L103.914907,49 C103.971379,49.9928025 104,50.9930589 104,52 C104,53.0069411 103.971379,54.0071975 103.914907,55 L87.8767787,55 C87.958386,54.0107999 88,53.0102597 88,52 C88,50.9897403 87.958386,49.9892001 87.8767787,49 Z\"></path>\n <path d=\"M76,128 C104.718807,128 128,104.718807 128,76 C128,47.281193 104.718807,24 76,24 C47.281193,24 24,47.281193 24,76 C24,104.718807 47.281193,128 76,128 L76,128 Z M76,112 C95.882251,112 112,95.882251 112,76 C112,56.117749 95.882251,40 76,40 C56.117749,40 40,56.117749 40,76 C40,95.882251 56.117749,112 76,112 L76,112 Z\"></path>\n <path d=\"M37,58 L90,58 L90,62 L37,62 L37,58 L37,58 Z M40,50 L93,50 L93,54 L40,54 L40,50 L40,50 Z M40,42 L93,42 L93,46 L40,46 L40,42 L40,42 Z M32,66 L85,66 L85,70 L32,70 L32,66 L32,66 Z M30,74 L83,74 L83,78 L30,78 L30,74 L30,74 Z M27,82 L80,82 L80,86 L27,86 L27,82 L27,82 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/open-window": {
"title": "$:/core/images/open-window",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-open-window tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M16,112 L104.993898,112 C108.863261,112 112,115.590712 112,120 C112,124.418278 108.858091,128 104.993898,128 L7.00610161,128 C3.13673853,128 0,124.409288 0,120 C0,119.998364 4.30952878e-07,119.996727 1.29273572e-06,119.995091 C4.89579306e-07,119.993456 0,119.99182 0,119.990183 L0,24.0098166 C0,19.586117 3.59071231,16 8,16 C12.418278,16 16,19.5838751 16,24.0098166 L16,112 Z\"></path>\n <path d=\"M96,43.1959595 L96,56 C96,60.418278 99.581722,64 104,64 C108.418278,64 112,60.418278 112,56 L112,24 C112,19.5907123 108.415101,16 103.992903,16 L72.0070969,16 C67.5881712,16 64,19.581722 64,24 C64,28.4092877 67.5848994,32 72.0070969,32 L84.5685425,32 L48.2698369,68.2987056 C45.1421332,71.4264093 45.1434327,76.4904296 48.267627,79.614624 C51.3854642,82.7324612 56.4581306,82.7378289 59.5835454,79.6124141 L96,43.1959595 Z M32,7.9992458 C32,3.58138434 35.5881049,0 39.9992458,0 L120.000754,0 C124.418616,0 128,3.5881049 128,7.9992458 L128,88.0007542 C128,92.4186157 124.411895,96 120.000754,96 L39.9992458,96 C35.5813843,96 32,92.4118951 32,88.0007542 L32,7.9992458 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/options-button": {
"title": "$:/core/images/options-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-options-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M110.48779,76.0002544 C109.354214,80.4045063 107.611262,84.5641217 105.354171,88.3838625 L105.354171,88.3838625 L112.07833,95.1080219 C115.20107,98.2307613 115.210098,103.299824 112.089164,106.420759 L106.420504,112.089418 C103.301049,115.208874 98.2346851,115.205502 95.1077675,112.078585 L88.3836082,105.354425 C84.5638673,107.611516 80.4042519,109.354468 76,110.488045 L76,110.488045 L76,119.993281 C76,124.409501 72.4220153,128.000254 68.0083475,128.000254 L59.9916525,128.000254 C55.5800761,128.000254 52,124.41541 52,119.993281 L52,110.488045 C47.5957481,109.354468 43.4361327,107.611516 39.6163918,105.354425 L32.8922325,112.078585 C29.7694931,115.201324 24.7004301,115.210353 21.5794957,112.089418 L15.9108363,106.420759 C12.7913807,103.301303 12.7947522,98.2349395 15.9216697,95.1080219 L22.6458291,88.3838625 C20.3887383,84.5641217 18.6457859,80.4045063 17.5122098,76.0002544 L8.00697327,76.0002544 C3.59075293,76.0002544 2.19088375e-16,72.4222697 4.89347582e-16,68.0086019 L9.80228577e-16,59.9919069 C1.25035972e-15,55.5803305 3.58484404,52.0002544 8.00697327,52.0002544 L17.5122098,52.0002544 C18.6457859,47.5960025 20.3887383,43.4363871 22.6458291,39.6166462 L15.9216697,32.8924868 C12.7989304,29.7697475 12.7899019,24.7006845 15.9108363,21.5797501 L21.5794957,15.9110907 C24.6989513,12.7916351 29.7653149,12.7950065 32.8922325,15.9219241 L39.6163918,22.6460835 C43.4361327,20.3889927 47.5957481,18.6460403 52,17.5124642 L52,8.00722764 C52,3.5910073 55.5779847,0.000254375069 59.9916525,0.000254375069 L68.0083475,0.000254375069 C72.4199239,0.000254375069 76,3.58509841 76,8.00722764 L76,17.5124642 C80.4042519,18.6460403 84.5638673,20.3889927 88.3836082,22.6460835 L95.1077675,15.9219241 C98.2305069,12.7991848 103.29957,12.7901562 106.420504,15.9110907 L112.089164,21.5797501 C115.208619,24.6992057 115.205248,29.7655693 112.07833,32.8924868 L105.354171,39.6166462 L105.354171,39.6166462 C107.611262,43.4363871 109.354214,47.5960025 110.48779,52.0002544 L119.993027,52.0002544 C124.409247,52.0002544 128,55.5782391 128,59.9919069 L128,68.0086019 C128,72.4201783 124.415156,76.0002544 119.993027,76.0002544 L110.48779,76.0002544 L110.48779,76.0002544 Z M64,96.0002544 C81.673112,96.0002544 96,81.6733664 96,64.0002544 C96,46.3271424 81.673112,32.0002544 64,32.0002544 C46.326888,32.0002544 32,46.3271424 32,64.0002544 C32,81.6733664 46.326888,96.0002544 64,96.0002544 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/paint": {
"title": "$:/core/images/paint",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-paint tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M83.5265806,76.1907935 C90.430962,69.2864121 91.8921169,59.0000433 87.9100453,50.6642209 L125.812763,12.7615036 C128.732035,9.84223095 128.72611,5.10322984 125.812796,2.18991592 C122.893542,-0.729338085 118.161775,-0.730617045 115.241209,2.18994966 L77.3384914,40.092667 C69.002669,36.1105954 58.7163002,37.5717503 51.8119188,44.4761317 L83.5265806,76.1907935 L83.5265806,76.1907935 L83.5265806,76.1907935 L83.5265806,76.1907935 Z M80.8836921,78.8336819 L49.1690303,47.1190201 C49.1690303,47.1190201 8.50573364,81.242543 0,80.2820711 C0,80.2820711 3.78222974,85.8744423 6.82737483,88.320684 C20.8514801,82.630792 44.1526049,63.720771 44.1526049,63.720771 L44.8144806,64.3803375 C44.8144806,64.3803375 19.450356,90.2231043 9.18040433,92.0477601 C10.4017154,93.4877138 13.5343883,96.1014812 15.4269991,97.8235871 C20.8439164,96.3356979 50.1595367,69.253789 50.1595367,69.253789 L50.8214124,69.9133555 L18.4136144,100.936036 L23.6993903,106.221812 L56.1060358,75.2002881 L56.7679115,75.8598546 C56.7679115,75.8598546 28.9040131,106.396168 28.0841366,108.291555 C28.0841366,108.291555 34.1159238,115.144621 35.6529617,116.115796 C36.3545333,113.280171 63.5365402,82.6307925 63.5365402,82.6307925 L64.1984159,83.290359 C64.1984159,83.290359 43.6013016,107.04575 39.2343772,120.022559 C42.443736,123.571575 46.7339155,125.159692 50.1595362,126.321151 C47.9699978,114.504469 80.8836921,78.8336819 80.8836921,78.8336819 L80.8836921,78.8336819 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/palette": {
"title": "$:/core/images/palette",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-palette tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M80.2470434,39.1821571 C75.0645698,38.2680897 69.6261555,37.7814854 64.0193999,37.7814854 C28.6624616,37.7814854 0,57.1324214 0,81.0030106 C0,90.644534 4.67604329,99.5487133 12.5805659,106.738252 C23.5031767,91.1899067 26.3405471,72.3946229 36.8885698,63.5622337 C52.0716764,50.8486559 63.4268694,55.7343343 63.4268694,55.7343343 L80.2470434,39.1821571 Z M106.781666,48.8370714 C119.830962,56.749628 128.0388,68.229191 128.0388,81.0030106 C128.0388,90.3534932 128.557501,98.4142085 116.165191,106.082518 C105.367708,112.763955 112.341384,99.546808 104.321443,95.1851533 C96.3015017,90.8234987 84.3749007,96.492742 86.1084305,103.091059 C89.3087234,115.272303 105.529892,114.54645 92.4224435,119.748569 C79.3149955,124.950687 74.2201582,124.224536 64.0193999,124.224536 C56.1979176,124.224536 48.7040365,123.277578 41.7755684,121.544216 C51.620343,117.347916 69.6563669,109.006202 75.129737,102.088562 C82.7876655,92.4099199 87.3713218,80.0000002 83.3235694,72.4837191 C83.1303943,72.1250117 94.5392656,60.81569 106.781666,48.8370714 Z M1.13430476,123.866563 C0.914084026,123.867944 0.693884185,123.868637 0.473712455,123.868637 C33.9526848,108.928928 22.6351223,59.642592 59.2924543,59.6425917 C59.6085574,61.0606542 59.9358353,62.5865065 60.3541977,64.1372318 C34.4465025,59.9707319 36.7873124,112.168427 1.13429588,123.866563 L1.13430476,123.866563 Z M1.84669213,123.859694 C40.7185279,123.354338 79.9985412,101.513051 79.9985401,79.0466836 C70.7284906,79.0466835 65.9257264,75.5670082 63.1833375,71.1051511 C46.585768,64.1019718 32.81846,116.819636 1.84665952,123.859695 L1.84669213,123.859694 Z M67.1980193,59.8524981 C62.748213,63.9666823 72.0838429,76.2846822 78.5155805,71.1700593 C89.8331416,59.8524993 112.468264,37.2173758 123.785825,25.8998146 C135.103386,14.5822535 123.785825,3.26469247 112.468264,14.5822535 C101.150703,25.8998144 78.9500931,48.9868127 67.1980193,59.8524981 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/permalink-button": {
"title": "$:/core/images/permalink-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-permalink-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M80.4834582,48 L73.0956761,80 L73.0956761,80 L47.5165418,80 L54.9043239,48 L80.4834582,48 Z M84.1773493,32 L89.8007299,7.64246248 C90.7941633,3.33942958 95.0918297,0.64641956 99.3968675,1.64031585 C103.693145,2.63218977 106.385414,6.93288901 105.390651,11.2416793 L100.598215,32 L104.000754,32 C108.411895,32 112,35.581722 112,40 C112,44.4092877 108.418616,48 104.000754,48 L96.9043239,48 L89.5165418,80 L104.000754,80 C108.411895,80 112,83.581722 112,88 C112,92.4092877 108.418616,96 104.000754,96 L85.8226507,96 L80.1992701,120.357538 C79.2058367,124.66057 74.9081703,127.35358 70.6031325,126.359684 C66.3068546,125.36781 63.6145865,121.067111 64.6093491,116.758321 L69.401785,96 L43.8226507,96 L38.1992701,120.357538 C37.2058367,124.66057 32.9081703,127.35358 28.6031325,126.359684 C24.3068546,125.36781 21.6145865,121.067111 22.6093491,116.758321 L27.401785,96 L23.9992458,96 C19.5881049,96 16,92.418278 16,88 C16,83.5907123 19.5813843,80 23.9992458,80 L31.0956761,80 L38.4834582,48 L23.9992458,48 C19.5881049,48 16,44.418278 16,40 C16,35.5907123 19.5813843,32 23.9992458,32 L42.1773493,32 L47.8007299,7.64246248 C48.7941633,3.33942958 53.0918297,0.64641956 57.3968675,1.64031585 C61.6931454,2.63218977 64.3854135,6.93288901 63.3906509,11.2416793 L58.598215,32 L84.1773493,32 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/permaview-button": {
"title": "$:/core/images/permaview-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-permaview-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M81.4834582,48 L79.6365127,56 L79.6365127,56 L74.0573784,56 L75.9043239,48 L81.4834582,48 Z M85.1773493,32 L90.8007299,7.64246248 C91.7941633,3.33942958 96.0918297,0.64641956 100.396867,1.64031585 C104.693145,2.63218977 107.385414,6.93288901 106.390651,11.2416793 L101.598215,32 L104.000754,32 C108.411895,32 112,35.581722 112,40 C112,44.4092877 108.418616,48 104.000754,48 L97.9043239,48 L96.0573784,56 L104.000754,56 C108.411895,56 112,59.581722 112,64 C112,68.4092877 108.418616,72 104.000754,72 L92.3634873,72 L90.5165418,80 L104.000754,80 C108.411895,80 112,83.581722 112,88 C112,92.4092877 108.418616,96 104.000754,96 L86.8226507,96 L81.1992701,120.357538 C80.2058367,124.66057 75.9081703,127.35358 71.6031325,126.359684 C67.3068546,125.36781 64.6145865,121.067111 65.6093491,116.758321 L70.401785,96 L64.8226507,96 L59.1992701,120.357538 C58.2058367,124.66057 53.9081703,127.35358 49.6031325,126.359684 C45.3068546,125.36781 42.6145865,121.067111 43.6093491,116.758321 L48.401785,96 L42.8226507,96 L37.1992701,120.357538 C36.2058367,124.66057 31.9081703,127.35358 27.6031325,126.359684 C23.3068546,125.36781 20.6145865,121.067111 21.6093491,116.758321 L26.401785,96 L23.9992458,96 C19.5881049,96 16,92.418278 16,88 C16,83.5907123 19.5813843,80 23.9992458,80 L30.0956761,80 L31.9426216,72 L23.9992458,72 C19.5881049,72 16,68.418278 16,64 C16,59.5907123 19.5813843,56 23.9992458,56 L35.6365127,56 L37.4834582,48 L23.9992458,48 C19.5881049,48 16,44.418278 16,40 C16,35.5907123 19.5813843,32 23.9992458,32 L41.1773493,32 L46.8007299,7.64246248 C47.7941633,3.33942958 52.0918297,0.64641956 56.3968675,1.64031585 C60.6931454,2.63218977 63.3854135,6.93288901 62.3906509,11.2416793 L57.598215,32 L63.1773493,32 L68.8007299,7.64246248 C69.7941633,3.33942958 74.0918297,0.64641956 78.3968675,1.64031585 C82.6931454,2.63218977 85.3854135,6.93288901 84.3906509,11.2416793 L79.598215,32 L85.1773493,32 Z M53.9043239,48 L52.0573784,56 L57.6365127,56 L59.4834582,48 L53.9043239,48 Z M75.9426216,72 L74.0956761,80 L74.0956761,80 L68.5165418,80 L70.3634873,72 L75.9426216,72 L75.9426216,72 Z M48.3634873,72 L46.5165418,80 L52.0956761,80 L53.9426216,72 L48.3634873,72 L48.3634873,72 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/picture": {
"title": "$:/core/images/picture",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-picture tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M112,68.2332211 L112,20.0027785 C112,17.7898769 110.207895,16 107.997221,16 L20.0027785,16 C17.7898769,16 16,17.792105 16,20.0027785 L16,58.312373 L25.2413115,43.7197989 C28.041793,39.297674 34.2643908,38.7118128 37.8410347,42.5335275 L56.0882845,63.1470817 L69.7748997,56.7400579 C72.766567,55.3552503 76.3013751,55.9473836 78.678437,58.2315339 C78.8106437,58.3585731 79.0742301,58.609836 79.4527088,58.9673596 C80.0910923,59.570398 80.8117772,60.2441563 81.598127,60.9705595 C83.8422198,63.043576 86.1541548,65.1151944 88.3956721,67.0372264 C89.1168795,67.6556396 89.8200801,68.2492007 90.5021258,68.8146755 C92.6097224,70.5620551 94.4693308,72.0029474 95.9836366,73.0515697 C96.7316295,73.5695379 97.3674038,73.9719282 98.0281481,74.3824999 C98.4724987,74.4989557 99.0742374,74.5263881 99.8365134,74.4317984 C101.709944,74.1993272 104.074502,73.2878514 106.559886,71.8846196 C107.705822,71.2376318 108.790494,70.5370325 109.764561,69.8410487 C110.323259,69.4418522 110.694168,69.1550757 110.834827,69.0391868 C111.210545,68.7296319 111.600264,68.4615815 112,68.2332211 L112,68.2332211 Z M0,8.00697327 C0,3.58484404 3.59075293,0 8.00697327,0 L119.993027,0 C124.415156,0 128,3.59075293 128,8.00697327 L128,119.993027 C128,124.415156 124.409247,128 119.993027,128 L8.00697327,128 C3.58484404,128 0,124.409247 0,119.993027 L0,8.00697327 L0,8.00697327 Z M95,42 C99.418278,42 103,38.418278 103,34 C103,29.581722 99.418278,26 95,26 C90.581722,26 87,29.581722 87,34 C87,38.418278 90.581722,42 95,42 L95,42 Z M32,76 C47.8587691,80.8294182 52.0345556,83.2438712 52.0345556,88 C52.0345556,92.7561288 32,95.4712486 32,102.347107 C32,109.222965 33.2849191,107.337637 33.2849191,112 L67.999999,112 C67.999999,112 54.3147136,105.375255 54.3147136,101.200691 C54.3147136,93.535181 64.9302432,92.860755 64.9302432,88 C64.9302432,80.6425555 50.8523779,79.167282 32,76 L32,76 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/plugin-generic-language": {
"title": "$:/core/images/plugin-generic-language",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M61.2072232,68.1369825 C56.8829239,70.9319564 54.2082892,74.793177 54.2082892,79.0581634 C54.2082892,86.9638335 63.3980995,93.4821994 75.2498076,94.3940006 C77.412197,98.2964184 83.8475284,101.178858 91.5684735,101.403106 C86.4420125,100.27851 82.4506393,97.6624107 80.9477167,94.3948272 C92.8046245,93.4861461 102,86.9662269 102,79.0581634 C102,70.5281905 91.3014611,63.6132813 78.1041446,63.6132813 C71.5054863,63.6132813 65.5315225,65.3420086 61.2072232,68.1369825 Z M74.001066,53.9793443 C69.6767667,56.7743182 63.7028029,58.5030456 57.1041446,58.5030456 C54.4851745,58.5030456 51.9646095,58.2307276 49.6065315,57.7275105 C46.2945155,59.9778212 41.2235699,61.4171743 35.5395922,61.4171743 C35.4545771,61.4171743 35.3696991,61.4168523 35.2849622,61.4162104 C39.404008,60.5235193 42.7961717,58.6691298 44.7630507,56.286533 C37.8379411,53.5817651 33.2082892,48.669413 33.2082892,43.0581634 C33.2082892,34.5281905 43.9068281,27.6132812 57.1041446,27.6132812 C70.3014611,27.6132812 81,34.5281905 81,43.0581634 C81,47.3231498 78.3253653,51.1843704 74.001066,53.9793443 Z M64,0 L118.5596,32 L118.5596,96 L64,128 L9.44039956,96 L9.44039956,32 L64,0 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/plugin-generic-plugin": {
"title": "$:/core/images/plugin-generic-plugin",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M40.3972881,76.4456988 L40.3972881,95.3404069 L54.5170166,95.3404069 L54.5170166,95.3404069 C54.5165526,95.3385183 54.516089,95.3366295 54.515626,95.3347404 C54.6093153,95.3385061 54.7034848,95.3404069 54.7980982,95.3404069 C58.6157051,95.3404069 61.710487,92.245625 61.710487,88.4280181 C61.710487,86.6197822 61.01617,84.9737128 59.8795929,83.7418666 L59.8795929,83.7418666 C59.8949905,83.7341665 59.9104102,83.7265043 59.925852,83.7188798 C58.8840576,82.5086663 58.2542926,80.9336277 58.2542926,79.2114996 C58.2542926,75.3938927 61.3490745,72.2991108 65.1666814,72.2991108 C68.9842884,72.2991108 72.0790703,75.3938927 72.0790703,79.2114996 C72.0790703,81.1954221 71.2432806,82.9841354 69.9045961,84.2447446 L69.9045961,84.2447446 C69.9333407,84.2629251 69.9619885,84.281245 69.9905383,84.2997032 L69.9905383,84.2997032 C69.1314315,85.4516923 68.6228758,86.8804654 68.6228758,88.4280181 C68.6228758,91.8584969 71.1218232,94.7053153 74.3986526,95.2474079 C74.3913315,95.2784624 74.3838688,95.3094624 74.3762652,95.3404069 L95.6963988,95.3404069 L95.6963988,75.5678578 L95.6963988,75.5678578 C95.6466539,75.5808558 95.5967614,75.5934886 95.5467242,75.6057531 C95.5504899,75.5120637 95.5523907,75.4178943 95.5523907,75.3232809 C95.5523907,71.505674 92.4576088,68.4108921 88.6400019,68.4108921 C86.831766,68.4108921 85.1856966,69.105209 83.9538504,70.2417862 L83.9538504,70.2417862 C83.9461503,70.2263886 83.938488,70.2109688 83.9308636,70.1955271 C82.7206501,71.2373215 81.1456115,71.8670865 79.4234834,71.8670865 C75.6058765,71.8670865 72.5110946,68.7723046 72.5110946,64.9546976 C72.5110946,61.1370907 75.6058765,58.0423088 79.4234834,58.0423088 C81.4074059,58.0423088 83.1961192,58.8780985 84.4567284,60.2167829 L84.4567284,60.2167829 C84.4749089,60.1880383 84.4932288,60.1593906 84.511687,60.1308407 L84.511687,60.1308407 C85.6636761,60.9899475 87.0924492,61.4985032 88.6400019,61.4985032 C92.0704807,61.4985032 94.9172991,58.9995558 95.4593917,55.7227265 C95.538755,55.7414363 95.6177614,55.761071 95.6963988,55.7816184 L95.6963988,40.0412962 L74.3762652,40.0412962 L74.3762652,40.0412962 C74.3838688,40.0103516 74.3913315,39.9793517 74.3986526,39.9482971 L74.3986526,39.9482971 C71.1218232,39.4062046 68.6228758,36.5593862 68.6228758,33.1289073 C68.6228758,31.5813547 69.1314315,30.1525815 69.9905383,29.0005925 C69.9619885,28.9821342 69.9333407,28.9638143 69.9045961,28.9456339 C71.2432806,27.6850247 72.0790703,25.8963113 72.0790703,23.9123888 C72.0790703,20.0947819 68.9842884,17 65.1666814,17 C61.3490745,17 58.2542926,20.0947819 58.2542926,23.9123888 C58.2542926,25.6345169 58.8840576,27.2095556 59.925852,28.419769 L59.925852,28.419769 C59.9104102,28.4273935 59.8949905,28.4350558 59.8795929,28.4427558 C61.01617,29.674602 61.710487,31.3206715 61.710487,33.1289073 C61.710487,36.9465143 58.6157051,40.0412962 54.7980982,40.0412962 C54.7034848,40.0412962 54.6093153,40.0393953 54.515626,40.0356296 L54.515626,40.0356296 C54.516089,40.0375187 54.5165526,40.0394075 54.5170166,40.0412962 L40.3972881,40.0412962 L40.3972881,52.887664 L40.3972881,52.887664 C40.4916889,53.3430132 40.5412962,53.8147625 40.5412962,54.2980982 C40.5412962,58.1157051 37.4465143,61.210487 33.6289073,61.210487 C32.0813547,61.210487 30.6525815,60.7019313 29.5005925,59.8428245 C29.4821342,59.8713744 29.4638143,59.9000221 29.4456339,59.9287667 C28.1850247,58.5900823 26.3963113,57.7542926 24.4123888,57.7542926 C20.5947819,57.7542926 17.5,60.8490745 17.5,64.6666814 C17.5,68.4842884 20.5947819,71.5790703 24.4123888,71.5790703 C26.134517,71.5790703 27.7095556,70.9493053 28.919769,69.9075109 L28.919769,69.9075109 C28.9273935,69.9229526 28.9350558,69.9383724 28.9427558,69.95377 C30.174602,68.8171928 31.8206715,68.1228758 33.6289073,68.1228758 C37.4465143,68.1228758 40.5412962,71.2176578 40.5412962,75.0352647 C40.5412962,75.5186004 40.4916889,75.9903496 40.3972881,76.4456988 Z M64,0 L118.5596,32 L118.5596,96 L64,128 L9.44039956,96 L9.44039956,32 L64,0 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/plugin-generic-theme": {
"title": "$:/core/images/plugin-generic-theme",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M29.4078519,91.4716406 L51.4693474,69.4101451 L51.4646675,69.4054652 C50.5969502,68.5377479 50.5929779,67.1348725 51.4693474,66.2585029 C52.3396494,65.3882009 53.7499654,65.3874786 54.6163097,66.2538229 L64.0805963,75.7181095 C64.9483136,76.5858268 64.9522859,77.9887022 64.0759163,78.8650718 C63.2056143,79.7353737 61.7952984,79.736096 60.9289541,78.8697517 L60.9242741,78.8650718 L60.9242741,78.8650718 L38.8627786,100.926567 C36.2518727,103.537473 32.0187578,103.537473 29.4078519,100.926567 C26.796946,98.3156614 26.796946,94.0825465 29.4078519,91.4716406 Z M60.8017407,66.3810363 C58.3659178,63.6765806 56.3370667,61.2899536 54.9851735,59.5123615 C48.1295381,50.4979488 44.671561,55.2444054 40.7586738,59.5123614 C36.8457866,63.7803174 41.789473,67.2384487 38.0759896,70.2532832 C34.3625062,73.2681177 34.5917646,74.3131575 28.3243876,68.7977024 C22.0570105,63.2822473 21.6235306,61.7636888 24.5005999,58.6166112 C27.3776691,55.4695337 29.7823103,60.4247912 35.6595047,54.8320442 C41.5366991,49.2392972 36.5996215,44.2825646 36.5996215,44.2825646 C36.5996215,44.2825646 48.8365511,19.267683 65.1880231,21.1152173 C81.5394952,22.9627517 59.0022276,18.7228947 53.3962199,38.3410355 C50.9960082,46.7405407 53.8429162,44.7613399 58.3941742,48.3090467 C59.7875202,49.3951602 64.4244828,52.7100463 70.1884353,56.9943417 L90.8648751,36.3179019 L92.4795866,31.5515482 L100.319802,26.8629752 L103.471444,30.0146174 L98.782871,37.8548326 L94.0165173,39.4695441 L73.7934912,59.6925702 C86.4558549,69.2403631 102.104532,81.8392557 102.104532,86.4016913 C102.104533,93.6189834 99.0337832,97.9277545 92.5695848,95.5655717 C87.8765989,93.8506351 73.8015497,80.3744087 63.8173444,69.668717 L60.9242741,72.5617873 L57.7726319,69.4101451 L60.8017407,66.3810363 L60.8017407,66.3810363 Z M63.9533761,1.42108547e-13 L118.512977,32 L118.512977,96 L63.9533761,128 L9.39377563,96 L9.39377563,32 L63.9533761,1.42108547e-13 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/preview-closed": {
"title": "$:/core/images/preview-closed",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-preview-closed tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M0.0881363238,64 C-0.210292223,65.8846266 0.249135869,67.8634737 1.4664206,69.4579969 C16.2465319,88.8184886 39.1692554,100.414336 64,100.414336 C88.8307446,100.414336 111.753468,88.8184886 126.533579,69.4579969 C127.750864,67.8634737 128.210292,65.8846266 127.911864,64 C110.582357,78.4158332 88.3036732,87.0858436 64,87.0858436 C39.6963268,87.0858436 17.4176431,78.4158332 0.0881363238,64 Z\"></path>\n <rect x=\"62\" y=\"96\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n <rect transform=\"translate(80.000000, 101.000000) rotate(-5.000000) translate(-80.000000, -101.000000) \" x=\"78\" y=\"93\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n <rect transform=\"translate(48.000000, 101.000000) rotate(-355.000000) translate(-48.000000, -101.000000) \" x=\"46\" y=\"93\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n <rect transform=\"translate(32.000000, 96.000000) rotate(-350.000000) translate(-32.000000, -96.000000) \" x=\"30\" y=\"88\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n <rect transform=\"translate(96.000000, 96.000000) rotate(-10.000000) translate(-96.000000, -96.000000) \" x=\"94\" y=\"88\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n <rect transform=\"translate(112.000000, 88.000000) rotate(-20.000000) translate(-112.000000, -88.000000) \" x=\"110\" y=\"80\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n <rect transform=\"translate(16.000000, 88.000000) rotate(-340.000000) translate(-16.000000, -88.000000) \" x=\"14\" y=\"80\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n </g>\n</svg>"
},
"$:/core/images/preview-open": {
"title": "$:/core/images/preview-open",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-preview-open tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M64.1099282,99.5876785 C39.2791836,99.5876785 16.3564602,87.9918313 1.57634884,68.6313396 C-0.378878622,66.070184 -0.378878622,62.5174945 1.57634884,59.9563389 C16.3564602,40.5958472 39.2791836,29 64.1099282,29 C88.9406729,29 111.863396,40.5958472 126.643508,59.9563389 C128.598735,62.5174945 128.598735,66.070184 126.643508,68.6313396 C111.863396,87.9918313 88.9406729,99.5876785 64.1099282,99.5876785 Z M110.213805,67.5808331 C111.654168,66.0569335 111.654168,63.9430665 110.213805,62.4191669 C99.3257042,50.8995835 82.4391647,44 64.1470385,44 C45.8549124,44 28.9683729,50.8995835 18.0802717,62.4191669 C16.6399094,63.9430665 16.6399094,66.0569335 18.0802717,67.5808331 C28.9683729,79.1004165 45.8549124,86 64.1470385,86 C82.4391647,86 99.3257042,79.1004165 110.213805,67.5808331 Z\"></path>\n <path d=\"M63.5,88 C76.4786916,88 87,77.4786916 87,64.5 C87,51.5213084 76.4786916,41 63.5,41 C50.5213084,41 40,51.5213084 40,64.5 C40,77.4786916 50.5213084,88 63.5,88 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/print-button": {
"title": "$:/core/images/print-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-print-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <g fill-rule=\"evenodd\">\n <path d=\"M112,71 L112,30.5 L111.96811,30.5 L111.96811,30.5 C111.932942,28.4998414 111.151676,26.510538 109.625176,24.9840387 L86.9982489,2.35711116 C85.3482153,0.707077645 83.1589869,-0.071534047 81,0.0201838424 L81,0 L23.9992458,0 C19.5808867,0 16,3.58213437 16,8.00092105 L16,71 L24,71 L24,8 L81,8 L81,22.4996539 C81,26.9216269 84.5818769,30.5 89.0003461,30.5 L104,30.5 L104,71 L112,71 Z\"></path>\n <rect x=\"32\" y=\"36\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n <rect x=\"32\" y=\"52\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n <rect x=\"32\" y=\"20\" width=\"40\" height=\"8\" rx=\"4\"></rect>\n <path d=\"M0,80.0054195 C0,71.1658704 7.15611005,64 16.0008841,64 L111.999116,64 C120.83616,64 128,71.1553215 128,80.0054195 L128,111.99458 C128,120.83413 120.84389,128 111.999116,128 L16.0008841,128 C7.16383982,128 0,120.844679 0,111.99458 L0,80.0054195 Z M104,96 C108.418278,96 112,92.418278 112,88 C112,83.581722 108.418278,80 104,80 C99.581722,80 96,83.581722 96,88 C96,92.418278 99.581722,96 104,96 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/quote": {
"title": "$:/core/images/quote",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-quote tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M51.2188077,117.712501 L51.2188077,62.1993386 L27.4274524,62.1993386 C27.4274524,53.3075754 29.1096526,45.797753 32.4741035,39.669646 C35.8385544,33.541539 42.0867267,28.9154883 51.2188077,25.7913554 L51.2188077,2 C43.7689521,2.96127169 36.8599155,5.18417913 30.4914905,8.668789 C24.1230656,12.1533989 18.6559149,16.5391352 14.0898743,21.8261295 C9.52383382,27.1131238 5.97919764,33.2411389 3.45585945,40.2103586 C0.932521268,47.1795784 -0.208971741,54.6293222 0.0313461819,62.5598136 L0.0313461819,117.712501 L51.2188077,117.712501 Z M128,117.712501 L128,62.1993386 L104.208645,62.1993386 C104.208645,53.3075754 105.890845,45.797753 109.255296,39.669646 C112.619747,33.541539 118.867919,28.9154883 128,25.7913554 L128,2 C120.550144,2.96127169 113.641108,5.18417913 107.272683,8.668789 C100.904258,12.1533989 95.4371072,16.5391352 90.8710666,21.8261295 C86.3050261,27.1131238 82.7603899,33.2411389 80.2370517,40.2103586 C77.7137136,47.1795784 76.5722206,54.6293222 76.8125385,62.5598136 L76.8125385,117.712501 L128,117.712501 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/refresh-button": {
"title": "$:/core/images/refresh-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-refresh-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M106.369002,39.4325143 C116.529932,60.3119371 112.939592,86.1974934 95.5979797,103.539105 C73.7286194,125.408466 38.2713806,125.408466 16.4020203,103.539105 C-5.46734008,81.6697449 -5.46734008,46.2125061 16.4020203,24.3431458 C19.5262146,21.2189514 24.5915344,21.2189514 27.7157288,24.3431458 C30.8399231,27.4673401 30.8399231,32.5326599 27.7157288,35.6568542 C12.0947571,51.2778259 12.0947571,76.6044251 27.7157288,92.2253967 C43.3367004,107.846368 68.6632996,107.846368 84.2842712,92.2253967 C97.71993,78.7897379 99.5995262,58.1740623 89.9230597,42.729491 L83.4844861,54.9932839 C81.4307001,58.9052072 76.5945372,60.4115251 72.682614,58.3577391 C68.7706907,56.3039532 67.2643728,51.4677903 69.3181587,47.555867 L84.4354914,18.7613158 C86.4966389,14.8353707 91.3577499,13.3347805 95.273202,15.415792 L124.145886,30.7612457 C128.047354,32.8348248 129.52915,37.6785572 127.455571,41.5800249 C125.381992,45.4814927 120.53826,46.9632892 116.636792,44.8897102 L106.369002,39.4325143 Z M98.1470904,27.0648707 C97.9798954,26.8741582 97.811187,26.6843098 97.6409651,26.4953413 L98.6018187,26.1987327 L98.1470904,27.0648707 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/right-arrow": {
"title": "$:/core/images/right-arrow",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-right-arrow tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <path d=\"M80.3563798,109.353315 C78.9238993,110.786918 76.9450203,111.675144 74.7592239,111.675144 L-4.40893546,111.675144 C-8.77412698,111.675144 -12.3248558,108.130732 -12.3248558,103.758478 C-12.3248558,99.3951199 -8.78077754,95.8418109 -4.40893546,95.8418109 L66.8418109,95.8418109 L66.8418109,24.5910645 C66.8418109,20.225873 70.3862233,16.6751442 74.7584775,16.6751442 C79.1218352,16.6751442 82.6751442,20.2192225 82.6751442,24.5910645 L82.6751442,103.759224 C82.6751442,105.941695 81.7891419,107.920575 80.3566508,109.353886 Z\" transform=\"translate(35.175144, 64.175144) rotate(-45.000000) translate(-35.175144, -64.175144) \"></path>\n</svg>"
},
"$:/core/images/save-button": {
"title": "$:/core/images/save-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-save-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <g fill-rule=\"evenodd\">\n <path d=\"M120.78304,34.329058 C125.424287,43.1924006 128.049406,53.2778608 128.049406,63.9764502 C128.049406,99.3226742 99.3956295,127.97645 64.0494055,127.97645 C28.7031816,127.97645 0.0494055385,99.3226742 0.0494055385,63.9764502 C0.0494055385,28.6302262 28.7031816,-0.0235498012 64.0494055,-0.0235498012 C82.8568763,-0.0235498012 99.769563,8.08898558 111.479045,21.0056358 L114.159581,18.3250998 C117.289194,15.1954866 122.356036,15.1939641 125.480231,18.3181584 C128.598068,21.4359957 128.601317,26.5107804 125.473289,29.6388083 L120.78304,34.329058 Z M108.72451,46.3875877 C110.870571,51.8341374 112.049406,57.767628 112.049406,63.9764502 C112.049406,90.4861182 90.5590735,111.97645 64.0494055,111.97645 C37.5397375,111.97645 16.0494055,90.4861182 16.0494055,63.9764502 C16.0494055,37.4667822 37.5397375,15.9764502 64.0494055,15.9764502 C78.438886,15.9764502 91.3495036,22.308215 100.147097,32.3375836 L58.9411255,73.5435552 L41.975581,56.5780107 C38.8486152,53.4510448 33.7746915,53.4551552 30.6568542,56.5729924 C27.5326599,59.6971868 27.5372202,64.7670668 30.6618725,67.8917192 L53.279253,90.5090997 C54.8435723,92.073419 56.8951519,92.8541315 58.9380216,92.8558261 C60.987971,92.8559239 63.0389578,92.0731398 64.6049211,90.5071765 L108.72451,46.3875877 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/size": {
"title": "$:/core/images/size",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-size tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <path d=\"M92.3431458,26 L83.1715729,35.1715729 C81.6094757,36.73367 81.6094757,39.26633 83.1715729,40.8284271 C84.73367,42.3905243 87.26633,42.3905243 88.8284271,40.8284271 L104.828427,24.8284271 C106.390524,23.26633 106.390524,20.73367 104.828427,19.1715729 L88.8284271,3.17157288 C87.26633,1.60947571 84.73367,1.60947571 83.1715729,3.17157288 C81.6094757,4.73367004 81.6094757,7.26632996 83.1715729,8.82842712 L92.3431457,18 L22,18 C19.790861,18 18,19.790861 18,22 L18,92.3431458 L8.82842712,83.1715729 C7.26632996,81.6094757 4.73367004,81.6094757 3.17157288,83.1715729 C1.60947571,84.73367 1.60947571,87.26633 3.17157288,88.8284271 L19.1715729,104.828427 C20.73367,106.390524 23.26633,106.390524 24.8284271,104.828427 L40.8284271,88.8284271 C42.3905243,87.26633 42.3905243,84.73367 40.8284271,83.1715729 C39.26633,81.6094757 36.73367,81.6094757 35.1715729,83.1715729 L26,92.3431458 L26,22 L22,26 L92.3431458,26 L92.3431458,26 Z M112,52 L112,116 L116,112 L52,112 C49.790861,112 48,113.790861 48,116 C48,118.209139 49.790861,120 52,120 L116,120 C118.209139,120 120,118.209139 120,116 L120,52 C120,49.790861 118.209139,48 116,48 C113.790861,48 112,49.790861 112,52 L112,52 Z\"></path>\n</svg>"
},
"$:/core/images/spiral": {
"title": "$:/core/images/spiral",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-spiral tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"nonzero\">\n <path d=\"M64.534 68.348c3.39 0 6.097-2.62 6.476-5.968l-4.755-.538 4.75.583c.377-3.07-1.194-6.054-3.89-7.78-2.757-1.773-6.34-2.01-9.566-.7-3.46 1.403-6.14 4.392-7.35 8.148l-.01.026c-1.3 4.08-.72 8.64 1.58 12.52 2.5 4.2 6.77 7.2 11.76 8.27 5.37 1.15 11.11-.05 15.83-3.31 5.04-3.51 8.46-9.02 9.45-15.3 1.05-6.7-.72-13.63-4.92-19.19l.02.02c-4.42-5.93-11.2-9.82-18.78-10.78-7.96-1.01-16.13 1.31-22.59 6.43-6.81 5.39-11.18 13.41-12.11 22.26-.98 9.27 1.87 18.65 7.93 26.02 6.32 7.69 15.6 12.56 25.74 13.48 10.54.96 21.15-2.42 29.45-9.4l.01-.01c8.58-7.25 13.94-17.78 14.86-29.21.94-11.84-2.96-23.69-10.86-32.9-8.19-9.5-19.95-15.36-32.69-16.27-13.16-.94-26.24 3.49-36.34 12.34l.01-.01c-10.41 9.08-16.78 22.1-17.68 36.15-.93 14.44 4.03 28.77 13.79 39.78 10.03 11.32 24.28 18.2 39.6 19.09 15.73.92 31.31-4.56 43.24-15.234 12.23-10.954 19.61-26.44 20.5-43.074.14-2.64-1.89-4.89-4.52-5.03-2.64-.14-4.89 1.88-5.03 4.52-.75 14.1-7 27.2-17.33 36.45-10.03 8.98-23.11 13.58-36.3 12.81-12.79-.75-24.67-6.48-33-15.89-8.07-9.11-12.17-20.94-11.41-32.827.74-11.52 5.942-22.15 14.43-29.54l.01-.01c8.18-7.17 18.74-10.75 29.35-9.998 10.21.726 19.6 5.41 26.11 12.96 6.24 7.273 9.32 16.61 8.573 25.894-.718 8.9-4.88 17.064-11.504 22.66l.01-.007c-6.36 5.342-14.44 7.92-22.425 7.19-7.604-.68-14.52-4.314-19.21-10.027-4.44-5.4-6.517-12.23-5.806-18.94.67-6.3 3.76-11.977 8.54-15.766 4.46-3.54 10.05-5.128 15.44-4.44 5.03.63 9.46 3.18 12.32 7.01l.02.024c2.65 3.5 3.75 7.814 3.1 11.92-.59 3.71-2.58 6.925-5.45 8.924-2.56 1.767-5.61 2.403-8.38 1.81-2.42-.516-4.42-1.92-5.53-3.79-.93-1.56-1.15-3.3-.69-4.75l-4.56-1.446L59.325 65c.36-1.12 1.068-1.905 1.84-2.22.25-.103.48-.14.668-.13.06.006.11.015.14.025.01 0 .01 0-.01-.01-.02-.015-.054-.045-.094-.088-.06-.064-.12-.145-.17-.244-.15-.29-.23-.678-.18-1.11l-.005.04c.15-1.332 1.38-2.523 3.035-2.523-2.65 0-4.79 2.144-4.79 4.787s2.14 4.785 4.78 4.785z\"></path>\n </g>\n</svg>"
},
"$:/core/images/stamp": {
"title": "$:/core/images/stamp",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-stamp tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M49.7334301,64 L16.0098166,64 C11.5838751,64 8,67.5829053 8,72.002643 L8,74.4986785 L8,97 L120,97 L120,74.4986785 L120,72.002643 C120,67.5737547 116.413883,64 111.990183,64 L78.2665699,64 C76.502049,60.7519149 75.5,57.0311962 75.5,53.0769231 C75.5,46.6017951 78.1869052,40.7529228 82.5087769,36.5800577 C85.3313113,32.7688808 87,28.0549983 87,22.952183 C87,10.2760423 76.7025492,0 64,0 C51.2974508,0 41,10.2760423 41,22.952183 C41,28.0549983 42.6686887,32.7688808 45.4912231,36.5800577 C49.8130948,40.7529228 52.5,46.6017951 52.5,53.0769231 C52.5,57.0311962 51.497951,60.7519149 49.7334301,64 Z M8,104 L120,104 L120,112 L8,112 L8,104 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/star-filled": {
"title": "$:/core/images/star-filled",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-star-filled tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"nonzero\">\n <path d=\"M61.8361286,96.8228569 L99.1627704,124.110219 C101.883827,126.099427 105.541968,123.420868 104.505636,120.198072 L90.2895569,75.9887263 L89.0292911,79.8977279 L126.314504,52.5528988 C129.032541,50.5595011 127.635256,46.2255025 124.273711,46.2229134 L78.1610486,46.1873965 L81.4604673,48.6032923 L67.1773543,4.41589688 C66.1361365,1.19470104 61.6144265,1.19470104 60.5732087,4.41589688 L46.2900957,48.6032923 L49.5895144,46.1873965 L3.47685231,46.2229134 C0.115307373,46.2255025 -1.28197785,50.5595011 1.43605908,52.5528988 L38.7212719,79.8977279 L37.4610061,75.9887263 L23.2449266,120.198072 C22.2085954,123.420868 25.8667356,126.099427 28.5877926,124.110219 L65.9144344,96.8228569 L61.8361286,96.8228569 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/storyview-classic": {
"title": "$:/core/images/storyview-classic",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-storyview-classic tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M8.00697327,0 C3.58484404,0 0,3.59075293 0,8.00697327 L0,119.993027 C0,124.415156 3.59075293,128 8.00697327,128 L119.993027,128 C124.415156,128 128,124.409247 128,119.993027 L128,8.00697327 C128,3.58484404 124.409247,0 119.993027,0 L8.00697327,0 L8.00697327,0 Z M23.9992458,16 C19.5813843,16 16,19.5776607 16,23.9924054 L16,40.0075946 C16,44.4216782 19.5881049,48 23.9992458,48 L104.000754,48 C108.418616,48 112,44.4223393 112,40.0075946 L112,23.9924054 C112,19.5783218 108.411895,16 104.000754,16 L23.9992458,16 L23.9992458,16 Z M23.9992458,64 C19.5813843,64 16,67.5907123 16,72 C16,76.418278 19.5881049,80 23.9992458,80 L104.000754,80 C108.418616,80 112,76.4092877 112,72 C112,67.581722 108.411895,64 104.000754,64 L23.9992458,64 L23.9992458,64 Z M23.9992458,96 C19.5813843,96 16,99.5907123 16,104 C16,108.418278 19.5881049,112 23.9992458,112 L104.000754,112 C108.418616,112 112,108.409288 112,104 C112,99.581722 108.411895,96 104.000754,96 L23.9992458,96 L23.9992458,96 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/storyview-pop": {
"title": "$:/core/images/storyview-pop",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-storyview-pop tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M8.00697327,0 C3.58484404,0 0,3.59075293 0,8.00697327 L0,119.993027 C0,124.415156 3.59075293,128 8.00697327,128 L119.993027,128 C124.415156,128 128,124.409247 128,119.993027 L128,8.00697327 C128,3.58484404 124.409247,0 119.993027,0 L8.00697327,0 L8.00697327,0 Z M23.9992458,16 C19.5813843,16 16,19.5776607 16,23.9924054 L16,40.0075946 C16,44.4216782 19.5881049,48 23.9992458,48 L104.000754,48 C108.418616,48 112,44.4223393 112,40.0075946 L112,23.9924054 C112,19.5783218 108.411895,16 104.000754,16 L23.9992458,16 L23.9992458,16 Z M16.0098166,56 C11.586117,56 8,59.5776607 8,63.9924054 L8,80.0075946 C8,84.4216782 11.5838751,88 16.0098166,88 L111.990183,88 C116.413883,88 120,84.4223393 120,80.0075946 L120,63.9924054 C120,59.5783218 116.416125,56 111.990183,56 L16.0098166,56 L16.0098166,56 Z M23.9992458,96 C19.5813843,96 16,99.5907123 16,104 C16,108.418278 19.5881049,112 23.9992458,112 L104.000754,112 C108.418616,112 112,108.409288 112,104 C112,99.581722 108.411895,96 104.000754,96 L23.9992458,96 L23.9992458,96 Z M23.9992458,64 C19.5813843,64 16,67.5907123 16,72 C16,76.418278 19.5881049,80 23.9992458,80 L104.000754,80 C108.418616,80 112,76.4092877 112,72 C112,67.581722 108.411895,64 104.000754,64 L23.9992458,64 L23.9992458,64 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/storyview-zoomin": {
"title": "$:/core/images/storyview-zoomin",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-storyview-zoomin tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M8.00697327,0 C3.58484404,0 0,3.59075293 0,8.00697327 L0,119.993027 C0,124.415156 3.59075293,128 8.00697327,128 L119.993027,128 C124.415156,128 128,124.409247 128,119.993027 L128,8.00697327 C128,3.58484404 124.409247,0 119.993027,0 L8.00697327,0 L8.00697327,0 Z M23.9992458,16 C19.5813843,16 16,19.578055 16,24.0085154 L16,71.9914846 C16,76.4144655 19.5881049,80 23.9992458,80 L104.000754,80 C108.418616,80 112,76.421945 112,71.9914846 L112,24.0085154 C112,19.5855345 108.411895,16 104.000754,16 L23.9992458,16 L23.9992458,16 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/strikethrough": {
"title": "$:/core/images/strikethrough",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-strikethrough tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M92.793842,38.7255689 L108.215529,38.7255689 C107.987058,31.985687 106.70193,26.1883331 104.360107,21.3333333 C102.018284,16.4783336 98.8197436,12.4516001 94.7643909,9.25301205 C90.7090382,6.05442399 85.9969032,3.71263572 80.6278447,2.22757697 C75.2587862,0.742518233 69.4328739,0 63.1499331,0 C57.552404,0 52.0977508,0.713959839 46.7858099,2.14190094 C41.473869,3.56984203 36.7331757,5.74027995 32.5635877,8.65327979 C28.3939997,11.5662796 25.0526676,15.2788708 22.5394913,19.7911647 C20.026315,24.3034585 18.7697456,29.6438781 18.7697456,35.8125837 C18.7697456,41.4101128 19.883523,46.0651309 22.1111111,49.7777778 C24.3386992,53.4904246 27.3087722,56.5176144 31.021419,58.8594378 C34.7340659,61.2012612 38.9321497,63.0861151 43.6157965,64.5140562 C48.2994433,65.9419973 53.068695,67.1985666 57.9236948,68.2838019 C62.7786945,69.3690371 67.5479462,70.4256977 72.231593,71.4538153 C76.9152398,72.4819329 81.1133237,73.8241773 84.8259705,75.480589 C88.5386174,77.1370007 91.5086903,79.2788802 93.7362784,81.9062918 C95.9638666,84.5337035 97.0776439,87.9607107 97.0776439,92.1874163 C97.0776439,96.6425926 96.1637753,100.298067 94.3360107,103.153949 C92.5082461,106.009831 90.109341,108.265944 87.1392236,109.922356 C84.1691061,111.578768 80.827774,112.749662 77.1151272,113.435074 C73.4024803,114.120485 69.7184476,114.463186 66.0629183,114.463186 C61.4935068,114.463186 57.0383974,113.892018 52.6974565,112.749665 C48.3565156,111.607312 44.5582492,109.836692 41.3025435,107.437751 C38.0468378,105.03881 35.4194656,101.983062 33.4203481,98.270415 C31.4212305,94.5577681 30.4216867,90.1312171 30.4216867,84.9906292 L15,84.9906292 C15,92.4159229 16.3422445,98.8415614 19.0267738,104.267738 C21.711303,109.693914 25.3667774,114.149023 29.9933066,117.633199 C34.6198357,121.117376 39.9888137,123.71619 46.1004016,125.429719 C52.2119895,127.143248 58.6947448,128 65.5488621,128 C71.1463912,128 76.7723948,127.343157 82.4270415,126.029451 C88.0816882,124.715745 93.1936407,122.602424 97.7630522,119.689424 C102.332464,116.776425 106.073613,113.006717 108.986613,108.380187 C111.899613,103.753658 113.356091,98.1847715 113.356091,91.6733601 C113.356091,85.6188899 112.242314,80.5926126 110.014726,76.5943775 C107.787137,72.5961424 104.817065,69.2833688 101.104418,66.6559572 C97.3917708,64.0285455 93.193687,61.9437828 88.5100402,60.4016064 C83.8263934,58.85943 79.0571416,57.5171855 74.2021419,56.3748327 C69.3471422,55.2324798 64.5778904,54.1758192 59.8942436,53.2048193 C55.2105968,52.2338193 51.012513,51.0058084 47.2998661,49.5207497 C43.5872193,48.0356909 40.6171463,46.1222786 38.3895582,43.7804552 C36.1619701,41.4386318 35.0481928,38.3828836 35.0481928,34.6131191 C35.0481928,30.6148841 35.8192694,27.273552 37.3614458,24.5890228 C38.9036222,21.9044935 40.9598265,19.762614 43.5301205,18.1633199 C46.1004145,16.5640259 49.041929,15.4216902 52.3547523,14.7362784 C55.6675757,14.0508667 59.0374661,13.708166 62.4645248,13.708166 C70.9179361,13.708166 77.8576257,15.6786952 83.2838019,19.6198126 C88.709978,23.56093 91.8799597,29.9294518 92.793842,38.7255689 L92.793842,38.7255689 Z\"></path>\n <rect x=\"5\" y=\"54\" width=\"118\" height=\"16\"></rect>\n </g>\n</svg>"
},
"$:/core/images/subscript": {
"title": "$:/core/images/subscript",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-subscript tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M2.27170276,16 L22.1825093,16 L43.8305003,49.6746527 L66.4138983,16 L85.1220387,16 L53.5854592,61.9685735 L87.3937414,111.411516 L67.0820462,111.411516 L43.295982,74.9306422 L19.1090291,111.411516 L0,111.411516 L33.8082822,61.9685735 L2.27170276,16 Z M127.910914,128.411516 L85.3276227,128.411516 C85.3870139,123.24448 86.6342108,118.730815 89.0692508,114.870386 C91.5042907,111.009956 94.8301491,107.654403 99.0469256,104.803624 C101.066227,103.318844 103.174584,101.878629 105.372059,100.482935 C107.569534,99.0872413 109.588805,97.5876355 111.429933,95.9840726 C113.271061,94.3805097 114.785514,92.6433426 115.973338,90.7725192 C117.161163,88.9016958 117.784761,86.7487964 117.844152,84.3137564 C117.844152,83.1853233 117.710524,81.9826691 117.443264,80.7057579 C117.176003,79.4288467 116.656338,78.2410402 115.884252,77.1423026 C115.112166,76.0435651 114.04314,75.123015 112.677142,74.3806248 C111.311144,73.6382345 109.529434,73.267045 107.331959,73.267045 C105.312658,73.267045 103.634881,73.6679297 102.298579,74.4697112 C100.962276,75.2714926 99.8932503,76.3702137 99.0914688,77.7659073 C98.2896874,79.161601 97.6957841,80.8096826 97.3097412,82.7102016 C96.9236982,84.6107206 96.7009845,86.6596869 96.6415933,88.857162 L86.4857457,88.857162 C86.4857457,85.4124713 86.9460207,82.2202411 87.8665846,79.2803758 C88.7871485,76.3405105 90.1679736,73.801574 92.0091014,71.6634901 C93.8502292,69.5254062 96.092214,67.8476295 98.7351233,66.6301095 C101.378033,65.4125895 104.451482,64.8038386 107.955564,64.8038386 C111.756602,64.8038386 114.933984,65.4274371 117.487807,66.6746527 C120.041629,67.9218683 122.105443,69.4957119 123.67931,71.3962309 C125.253178,73.2967499 126.366746,75.3605638 127.02005,77.5877345 C127.673353,79.8149053 128,81.9381095 128,83.9574109 C128,86.4518421 127.613963,88.7086746 126.841877,90.727976 C126.069791,92.7472774 125.03046,94.6032252 123.723854,96.2958749 C122.417247,97.9885247 120.932489,99.5475208 119.269534,100.97291 C117.60658,102.398299 115.884261,103.734582 114.102524,104.981797 C112.320788,106.229013 110.539078,107.416819 108.757341,108.545253 C106.975605,109.673686 105.327523,110.802102 103.813047,111.930535 C102.298571,113.058968 100.977136,114.231927 99.8487031,115.449447 C98.7202699,116.666967 97.9481956,117.958707 97.5324571,119.324705 L127.910914,119.324705 L127.910914,128.411516 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/superscript": {
"title": "$:/core/images/superscript",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-superscript tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M2.27170276,16 L22.1825093,16 L43.8305003,49.6746527 L66.4138983,16 L85.1220387,16 L53.5854592,61.9685735 L87.3937414,111.411516 L67.0820462,111.411516 L43.295982,74.9306422 L19.1090291,111.411516 L0,111.411516 L33.8082822,61.9685735 L2.27170276,16 Z M127.910914,63.4115159 L85.3276227,63.4115159 C85.3870139,58.2444799 86.6342108,53.7308149 89.0692508,49.8703857 C91.5042907,46.0099565 94.8301491,42.654403 99.0469256,39.8036245 C101.066227,38.318844 103.174584,36.8786285 105.372059,35.4829349 C107.569534,34.0872413 109.588805,32.5876355 111.429933,30.9840726 C113.271061,29.3805097 114.785514,27.6433426 115.973338,25.7725192 C117.161163,23.9016958 117.784761,21.7487964 117.844152,19.3137564 C117.844152,18.1853233 117.710524,16.9826691 117.443264,15.7057579 C117.176003,14.4288467 116.656338,13.2410402 115.884252,12.1423026 C115.112166,11.0435651 114.04314,10.123015 112.677142,9.38062477 C111.311144,8.63823453 109.529434,8.26704499 107.331959,8.26704499 C105.312658,8.26704499 103.634881,8.6679297 102.298579,9.46971115 C100.962276,10.2714926 99.8932503,11.3702137 99.0914688,12.7659073 C98.2896874,14.161601 97.6957841,15.8096826 97.3097412,17.7102016 C96.9236982,19.6107206 96.7009845,21.6596869 96.6415933,23.857162 L86.4857457,23.857162 C86.4857457,20.4124713 86.9460207,17.2202411 87.8665846,14.2803758 C88.7871485,11.3405105 90.1679736,8.80157397 92.0091014,6.6634901 C93.8502292,4.52540622 96.092214,2.84762946 98.7351233,1.63010947 C101.378033,0.412589489 104.451482,-0.196161372 107.955564,-0.196161372 C111.756602,-0.196161372 114.933984,0.427437071 117.487807,1.67465266 C120.041629,2.92186826 122.105443,4.49571195 123.67931,6.39623095 C125.253178,8.29674995 126.366746,10.3605638 127.02005,12.5877345 C127.673353,14.8149053 128,16.9381095 128,18.9574109 C128,21.4518421 127.613963,23.7086746 126.841877,25.727976 C126.069791,27.7472774 125.03046,29.6032252 123.723854,31.2958749 C122.417247,32.9885247 120.932489,34.5475208 119.269534,35.97291 C117.60658,37.3982993 115.884261,38.7345816 114.102524,39.9817972 C112.320788,41.2290128 110.539078,42.4168194 108.757341,43.5452525 C106.975605,44.6736857 105.327523,45.8021019 103.813047,46.9305351 C102.298571,48.0589682 100.977136,49.2319272 99.8487031,50.4494472 C98.7202699,51.6669672 97.9481956,52.9587068 97.5324571,54.3247048 L127.910914,54.3247048 L127.910914,63.4115159 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/tag-button": {
"title": "$:/core/images/tag-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-tag-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M18.1643182,47.6600756 L18.1677196,51.7651887 C18.1708869,55.5878829 20.3581578,60.8623899 23.0531352,63.5573673 L84.9021823,125.406414 C87.5996731,128.103905 91.971139,128.096834 94.6717387,125.396234 L125.766905,94.3010679 C128.473612,91.5943612 128.472063,87.2264889 125.777085,84.5315115 L63.9280381,22.6824644 C61.2305472,19.9849735 55.9517395,17.801995 52.1318769,17.8010313 L25.0560441,17.7942007 C21.2311475,17.7932358 18.1421354,20.8872832 18.1452985,24.7049463 L18.1535504,34.6641936 C18.2481119,34.6754562 18.3439134,34.6864294 18.4409623,34.6971263 C22.1702157,35.1081705 26.9295004,34.6530132 31.806204,33.5444844 C32.1342781,33.0700515 32.5094815,32.6184036 32.9318197,32.1960654 C35.6385117,29.4893734 39.5490441,28.718649 42.94592,29.8824694 C43.0432142,29.8394357 43.1402334,29.7961748 43.2369683,29.7526887 L43.3646982,30.0368244 C44.566601,30.5115916 45.6933052,31.2351533 46.6655958,32.2074439 C50.4612154,36.0030635 50.4663097,42.1518845 46.6769742,45.94122 C43.0594074,49.5587868 37.2914155,49.7181264 33.4734256,46.422636 C28.1082519,47.5454734 22.7987486,48.0186448 18.1643182,47.6600756 Z\"></path>\n <path d=\"M47.6333528,39.5324628 L47.6562932,39.5834939 C37.9670934,43.9391617 26.0718874,46.3819521 17.260095,45.4107025 C5.27267473,44.0894301 -1.02778744,36.4307276 2.44271359,24.0779512 C5.56175386,12.9761516 14.3014034,4.36129832 24.0466405,1.54817001 C34.7269254,-1.53487574 43.7955833,3.51606438 43.7955834,14.7730751 L35.1728168,14.7730752 C35.1728167,9.91428944 32.0946059,8.19982862 26.4381034,9.83267419 C19.5270911,11.8276553 13.046247,18.2159574 10.7440788,26.4102121 C8.82861123,33.2280582 11.161186,36.0634845 18.2047888,36.8398415 C25.3302805,37.6252244 35.7353482,35.4884477 44.1208333,31.7188498 L44.1475077,31.7781871 C44.159701,31.7725635 44.1718402,31.7671479 44.1839238,31.7619434 C45.9448098,31.0035157 50.4503245,38.3109156 47.7081571,39.5012767 C47.6834429,39.512005 47.6585061,39.5223987 47.6333528,39.5324628 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/theme-button": {
"title": "$:/core/images/theme-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-theme-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M55.854113,66.9453198 C54.3299482,65.1432292 53.0133883,63.518995 51.9542746,62.1263761 C40.8899947,47.578055 35.3091807,55.2383404 28.9941893,62.1263758 C22.6791979,69.0144112 30.6577916,74.5954741 24.6646171,79.4611023 C18.6714426,84.3267304 19.0414417,86.0133155 8.92654943,77.1119468 C-1.18834284,68.2105781 -1.88793412,65.7597832 2.7553553,60.6807286 C7.39864472,55.601674 11.2794845,63.5989423 20.7646627,54.5728325 C30.2498409,45.5467226 22.2819131,37.5470737 22.2819131,37.5470737 C22.2819131,37.5470737 42.0310399,-2.82433362 68.4206088,0.157393922 C94.8101776,3.13912147 58.4373806,-3.70356506 49.3898693,27.958066 C45.5161782,41.5139906 50.1107906,38.3197672 57.4560458,44.0453955 C59.1625767,45.3756367 63.8839488,48.777453 70.127165,53.3625321 C63.9980513,59.2416709 58.9704753,64.0315459 55.854113,66.9453198 Z M67.4952439,79.8919946 C83.5082212,96.9282402 105.237121,117.617674 112.611591,120.312493 C123.044132,124.12481 128.000001,117.170903 128,105.522947 C127.999999,98.3705516 104.170675,78.980486 84.0760493,63.7529565 C76.6683337,70.9090328 70.7000957,76.7055226 67.4952439,79.8919946 Z\"></path>\n <path d=\"M58.2852966,138.232794 L58.2852966,88.3943645 C56.318874,88.3923153 54.7254089,86.7952906 54.7254089,84.8344788 C54.7254089,82.8684071 56.3175932,81.2745911 58.2890859,81.2745911 L79.6408336,81.2745911 C81.608998,81.2745911 83.2045105,82.8724076 83.2045105,84.8344788 C83.2045105,86.7992907 81.614366,88.3923238 79.6446228,88.3943645 L79.6446228,88.3943646 L79.6446228,138.232794 C79.6446228,144.131009 74.8631748,148.912457 68.9649597,148.912457 C63.0667446,148.912457 58.2852966,144.131009 58.2852966,138.232794 Z M65.405072,-14.8423767 L72.5248474,-14.8423767 L76.0847351,-0.690681892 L72.5248474,6.51694947 L72.5248474,81.2745911 L65.405072,81.2745911 L65.405072,6.51694947 L61.8451843,-0.690681892 L65.405072,-14.8423767 Z\" transform=\"translate(68.964960, 67.035040) rotate(45.000000) translate(-68.964960, -67.035040) \"></path>\n </g>\n</svg>"
},
"$:/core/images/timestamp-off": {
"title": "$:/core/images/timestamp-off",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-timestamp-off tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10c-2.762 0-5-2.24-5-5-.004-2.756 2.238-5 5-5H66.69c2.762 0 5.002 2.24 5 5 .006 2.757-2.238 5-5 5H49.705z\"/><path d=\"M58.25 35.88c-18.777 0-33.998 15.224-33.998 33.998 0 18.773 15.22 34.002 33.998 34.002 18.784 0 34.002-15.23 34.002-34.002 0-18.774-15.218-33.998-34.002-33.998zm-3.03 50.123H44.196v-34H55.22v34zm16.976 0H61.17v-34h11.025v34z\"/>\n </g>\n</svg>\n"
},
"$:/core/images/timestamp-on": {
"title": "$:/core/images/timestamp-on",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-timestamp-on tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10c-2.762 0-5-2.24-5-5-.004-2.756 2.238-5 5-5H66.69c2.762 0 5.002 2.24 5 5 .006 2.757-2.238 5-5 5H49.705z\"/><path d=\"M13.41 27.178c-2.116 1.775-5.27 1.498-7.045-.613-1.772-2.11-1.498-5.27.616-7.047l9.95-8.348c2.115-1.774 5.27-1.5 7.045.618 1.775 2.108 1.498 5.27-.616 7.043l-9.95 8.348zM102.983 27.178c2.116 1.775 5.27 1.498 7.045-.613 1.772-2.11 1.498-5.27-.616-7.047l-9.95-8.348c-2.114-1.774-5.27-1.5-7.044.618-1.775 2.108-1.498 5.27.616 7.043l9.95 8.348zM65.097 71.072c0 3.826-3.09 6.928-6.897 6.928-3.804.006-6.9-3.102-6.903-6.928 0 0 4.76-39.072 6.903-39.072s6.897 39.072 6.897 39.072z\"/>\n </g>\n</svg>\n"
},
"$:/core/images/tip": {
"title": "$:/core/images/tip",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-tip tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M64,128.241818 C99.346224,128.241818 128,99.5880417 128,64.2418177 C128,28.8955937 99.346224,0.241817675 64,0.241817675 C28.653776,0.241817675 0,28.8955937 0,64.2418177 C0,99.5880417 28.653776,128.241818 64,128.241818 Z M75.9358659,91.4531941 C75.3115438,95.581915 70.2059206,98.8016748 64,98.8016748 C57.7940794,98.8016748 52.6884562,95.581915 52.0641341,91.4531941 C54.3299053,94.0502127 58.8248941,95.8192805 64,95.8192805 C69.1751059,95.8192805 73.6700947,94.0502127 75.9358659,91.4531941 L75.9358659,91.4531941 Z M75.9358659,95.9453413 C75.3115438,100.074062 70.2059206,103.293822 64,103.293822 C57.7940794,103.293822 52.6884562,100.074062 52.0641341,95.9453413 C54.3299053,98.5423599 58.8248941,100.311428 64,100.311428 C69.1751059,100.311428 73.6700947,98.5423599 75.9358659,95.9453413 L75.9358659,95.9453413 Z M75.9358659,100.40119 C75.3115438,104.529911 70.2059206,107.74967 64,107.74967 C57.7940794,107.74967 52.6884562,104.529911 52.0641341,100.40119 C54.3299053,102.998208 58.8248941,104.767276 64,104.767276 C69.1751059,104.767276 73.6700947,102.998208 75.9358659,100.40119 L75.9358659,100.40119 Z M75.9358659,104.893337 C75.3115438,109.022058 70.2059206,112.241818 64,112.241818 C57.7940794,112.241818 52.6884562,109.022058 52.0641341,104.893337 C54.3299053,107.490356 58.8248941,109.259423 64,109.259423 C69.1751059,109.259423 73.6700947,107.490356 75.9358659,104.893337 L75.9358659,104.893337 Z M64.3010456,24.2418177 C75.9193117,24.2418188 88.0000013,32.0619847 88,48.4419659 C87.9999987,64.8219472 75.9193018,71.7540963 75.9193021,83.5755932 C75.9193022,89.4486648 70.0521957,92.8368862 63.9999994,92.8368862 C57.947803,92.8368862 51.9731007,89.8295115 51.9731007,83.5755932 C51.9731007,71.1469799 39.9999998,65.4700602 40,48.4419647 C40.0000002,31.4138691 52.6827796,24.2418166 64.3010456,24.2418177 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/twitter": {
"title": "$:/core/images/twitter",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-twitter tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M41.6263422,115.803477 C27.0279663,115.803477 13.4398394,111.540813 1.99987456,104.234833 C4.02221627,104.472643 6.08004574,104.594302 8.16644978,104.594302 C20.277456,104.594302 31.4238403,100.47763 40.270894,93.5715185 C28.9590538,93.3635501 19.4123842,85.9189246 16.1230832,75.6885328 C17.7011365,75.9892376 19.320669,76.1503787 20.9862896,76.1503787 C23.344152,76.1503787 25.6278127,75.8359011 27.7971751,75.247346 C15.9709927,72.8821073 7.06079851,62.4745062 7.06079851,49.9982394 C7.06079851,49.8898938 7.06079851,49.7820074 7.06264203,49.67458 C10.5482779,51.6032228 14.5339687,52.7615103 18.7717609,52.8951059 C11.8355159,48.277565 7.2714207,40.3958845 7.2714207,31.4624258 C7.2714207,26.7434257 8.54621495,22.3200804 10.7713439,18.5169676 C23.5211299,34.0957738 42.568842,44.3472839 64.0532269,45.4210985 C63.6126256,43.5365285 63.3835682,41.5711584 63.3835682,39.5529928 C63.3835682,25.3326379 74.95811,13.8034766 89.2347917,13.8034766 C96.6697089,13.8034766 103.387958,16.930807 108.103682,21.9353619 C113.991886,20.780288 119.52429,18.6372496 124.518847,15.6866694 C122.588682,21.6993889 118.490075,26.7457211 113.152623,29.9327334 C118.381769,29.3102055 123.363882,27.926045 127.999875,25.8780385 C124.534056,31.0418981 120.151087,35.5772616 115.100763,39.2077561 C115.150538,40.3118708 115.175426,41.4224128 115.175426,42.538923 C115.175426,76.5663154 89.1744164,115.803477 41.6263422,115.803477\"></path>\n </g>\n</svg>\n"
},
"$:/core/images/underline": {
"title": "$:/core/images/underline",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-underline tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M7,117.421488 L121.247934,117.421488 L121.247934,128 L7,128 L7,117.421488 Z M104.871212,98.8958333 L104.871212,0 L88.6117424,0 L88.6117424,55.8560606 C88.6117424,60.3194668 88.0060035,64.432115 86.7945076,68.1941288 C85.5830116,71.9561425 83.7657949,75.239885 81.342803,78.0454545 C78.9198111,80.8510241 75.8911167,83.0189317 72.2566288,84.5492424 C68.6221409,86.0795531 64.3182067,86.844697 59.344697,86.844697 C53.0959284,86.844697 48.1862552,85.0593613 44.6155303,81.4886364 C41.0448054,77.9179114 39.2594697,73.0720003 39.2594697,66.9507576 L39.2594697,0 L23,0 L23,65.0378788 C23,70.3939662 23.5419769,75.2717583 24.625947,79.6714015 C25.709917,84.0710447 27.5908957,87.864883 30.2689394,91.0530303 C32.9469831,94.2411776 36.4538925,96.6960141 40.7897727,98.4176136 C45.125653,100.139213 50.545422,101 57.0492424,101 C64.3182182,101 70.630655,99.5653553 75.9867424,96.6960227 C81.3428298,93.8266902 85.742407,89.33147 89.1856061,83.2102273 L89.5681818,83.2102273 L89.5681818,98.8958333 L104.871212,98.8958333 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/unfold-all-button": {
"title": "$:/core/images/unfold-all-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-unfold-all tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <rect x=\"0\" y=\"0\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n <rect x=\"0\" y=\"64\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n <path d=\"M85.598226,8.34884273 C84.1490432,6.89863875 82.1463102,6 79.9340286,6 L47.9482224,6 C43.5292967,6 39.9411255,9.581722 39.9411255,14 C39.9411255,18.4092877 43.5260249,22 47.9482224,22 L71.9411255,22 L71.9411255,45.9929031 C71.9411255,50.4118288 75.5228475,54 79.9411255,54 C84.3504132,54 87.9411255,50.4151006 87.9411255,45.9929031 L87.9411255,14.0070969 C87.9411255,11.7964515 87.0447363,9.79371715 85.5956548,8.34412458 Z\" transform=\"translate(63.941125, 30.000000) scale(1, -1) rotate(-45.000000) translate(-63.941125, -30.000000) \"></path>\n <path d=\"M85.6571005,72.2899682 C84.2079177,70.8397642 82.2051847,69.9411255 79.9929031,69.9411255 L48.0070969,69.9411255 C43.5881712,69.9411255 40,73.5228475 40,77.9411255 C40,82.3504132 43.5848994,85.9411255 48.0070969,85.9411255 L72,85.9411255 L72,109.934029 C72,114.352954 75.581722,117.941125 80,117.941125 C84.4092877,117.941125 88,114.356226 88,109.934029 L88,77.9482224 C88,75.737577 87.1036108,73.7348426 85.6545293,72.2852501 Z\" transform=\"translate(64.000000, 93.941125) scale(1, -1) rotate(-45.000000) translate(-64.000000, -93.941125) \"></path>\n </g>\n</svg>"
},
"$:/core/images/unfold-button": {
"title": "$:/core/images/unfold-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-unfold tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <rect x=\"0\" y=\"0\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n <path d=\"M85.598226,11.3488427 C84.1490432,9.89863875 82.1463102,9 79.9340286,9 L47.9482224,9 C43.5292967,9 39.9411255,12.581722 39.9411255,17 C39.9411255,21.4092877 43.5260249,25 47.9482224,25 L71.9411255,25 L71.9411255,48.9929031 C71.9411255,53.4118288 75.5228475,57 79.9411255,57 C84.3504132,57 87.9411255,53.4151006 87.9411255,48.9929031 L87.9411255,17.0070969 C87.9411255,14.7964515 87.0447363,12.7937171 85.5956548,11.3441246 Z\" transform=\"translate(63.941125, 33.000000) scale(1, -1) rotate(-45.000000) translate(-63.941125, -33.000000) \"></path>\n <path d=\"M85.6571005,53.4077172 C84.2079177,51.9575133 82.2051847,51.0588745 79.9929031,51.0588745 L48.0070969,51.0588745 C43.5881712,51.0588745 40,54.6405965 40,59.0588745 C40,63.4681622 43.5848994,67.0588745 48.0070969,67.0588745 L72,67.0588745 L72,91.0517776 C72,95.4707033 75.581722,99.0588745 80,99.0588745 C84.4092877,99.0588745 88,95.4739751 88,91.0517776 L88,59.0659714 C88,56.855326 87.1036108,54.8525917 85.6545293,53.4029991 Z\" transform=\"translate(64.000000, 75.058875) scale(1, -1) rotate(-45.000000) translate(-64.000000, -75.058875) \"></path>\n </g>\n</svg>"
},
"$:/core/images/unlocked-padlock": {
"title": "$:/core/images/unlocked-padlock",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-unlocked-padlock tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M48.6266053,64 L105,64 L105,96.0097716 C105,113.673909 90.6736461,128 73.001193,128 L55.998807,128 C38.3179793,128 24,113.677487 24,96.0097716 L24,64 L30.136303,64 C19.6806213,51.3490406 2.77158986,28.2115132 25.8366966,8.85759246 C50.4723026,-11.8141335 71.6711028,13.2108337 81.613302,25.0594855 C91.5555012,36.9081373 78.9368488,47.4964439 69.1559674,34.9513593 C59.375086,22.4062748 47.9893192,10.8049522 35.9485154,20.9083862 C23.9077117,31.0118202 34.192312,43.2685325 44.7624679,55.8655518 C47.229397,58.805523 48.403443,61.5979188 48.6266053,64 Z M67.7315279,92.3641717 C70.8232551,91.0923621 73,88.0503841 73,84.5 C73,79.8055796 69.1944204,76 64.5,76 C59.8055796,76 56,79.8055796 56,84.5 C56,87.947435 58.0523387,90.9155206 61.0018621,92.2491029 L55.9067479,115.020857 L72.8008958,115.020857 L67.7315279,92.3641717 L67.7315279,92.3641717 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/up-arrow": {
"title": "$:/core/images/up-arrow",
"created": "20150316000544368",
"modified": "20150316000831867",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-up-arrow tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n<path transform=\"rotate(-135, 63.8945, 64.1752)\" d=\"m109.07576,109.35336c-1.43248,1.43361 -3.41136,2.32182 -5.59717,2.32182l-79.16816,0c-4.36519,0 -7.91592,-3.5444 -7.91592,-7.91666c0,-4.36337 3.54408,-7.91667 7.91592,-7.91667l71.25075,0l0,-71.25074c0,-4.3652 3.54442,-7.91592 7.91667,-7.91592c4.36336,0 7.91667,3.54408 7.91667,7.91592l0,79.16815c0,2.1825 -0.88602,4.16136 -2.3185,5.59467l-0.00027,-0.00056l0.00001,-0.00001z\" />\n</svg>\n \n"
},
"$:/core/images/video": {
"title": "$:/core/images/video",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-video tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M64,12 C29.0909091,12 8.72727273,14.9166667 5.81818182,17.8333333 C2.90909091,20.75 1.93784382e-15,41.1666667 0,64.5 C1.93784382e-15,87.8333333 2.90909091,108.25 5.81818182,111.166667 C8.72727273,114.083333 29.0909091,117 64,117 C98.9090909,117 119.272727,114.083333 122.181818,111.166667 C125.090909,108.25 128,87.8333333 128,64.5 C128,41.1666667 125.090909,20.75 122.181818,17.8333333 C119.272727,14.9166667 98.9090909,12 64,12 Z M54.9161194,44.6182253 C51.102648,42.0759111 48.0112186,43.7391738 48.0112186,48.3159447 L48.0112186,79.6840553 C48.0112186,84.2685636 51.109784,85.9193316 54.9161194,83.3817747 L77.0838806,68.6032672 C80.897352,66.0609529 80.890216,61.9342897 77.0838806,59.3967328 L54.9161194,44.6182253 Z\"></path>\n </g>\n</svg>"
},
"$:/core/images/warning": {
"title": "$:/core/images/warning",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-warning tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M57.0717968,11 C60.1509982,5.66666667 67.8490018,5.66666667 70.9282032,11 L126.353829,107 C129.433031,112.333333 125.584029,119 119.425626,119 L8.57437416,119 C2.41597129,119 -1.43303051,112.333333 1.64617093,107 L57.0717968,11 Z M64,37 C59.581722,37 56,40.5820489 56,44.9935776 L56,73.0064224 C56,77.4211534 59.5907123,81 64,81 C68.418278,81 72,77.4179511 72,73.0064224 L72,44.9935776 C72,40.5788466 68.4092877,37 64,37 Z M64,104 C68.418278,104 72,100.418278 72,96 C72,91.581722 68.418278,88 64,88 C59.581722,88 56,91.581722 56,96 C56,100.418278 59.581722,104 64,104 Z\"></path>\n </g>\n</svg>"
},
"$:/language/Buttons/AdvancedSearch/Caption": {
"title": "$:/language/Buttons/AdvancedSearch/Caption",
"text": "advanced search"
},
"$:/language/Buttons/AdvancedSearch/Hint": {
"title": "$:/language/Buttons/AdvancedSearch/Hint",
"text": "Advanced search"
},
"$:/language/Buttons/Cancel/Caption": {
"title": "$:/language/Buttons/Cancel/Caption",
"text": "cancel"
},
"$:/language/Buttons/Cancel/Hint": {
"title": "$:/language/Buttons/Cancel/Hint",
"text": "Discard changes to this tiddler"
},
"$:/language/Buttons/Clone/Caption": {
"title": "$:/language/Buttons/Clone/Caption",
"text": "clone"
},
"$:/language/Buttons/Clone/Hint": {
"title": "$:/language/Buttons/Clone/Hint",
"text": "Clone this tiddler"
},
"$:/language/Buttons/Close/Caption": {
"title": "$:/language/Buttons/Close/Caption",
"text": "close"
},
"$:/language/Buttons/Close/Hint": {
"title": "$:/language/Buttons/Close/Hint",
"text": "Close this tiddler"
},
"$:/language/Buttons/CloseAll/Caption": {
"title": "$:/language/Buttons/CloseAll/Caption",
"text": "close all"
},
"$:/language/Buttons/CloseAll/Hint": {
"title": "$:/language/Buttons/CloseAll/Hint",
"text": "Close all tiddlers"
},
"$:/language/Buttons/CloseOthers/Caption": {
"title": "$:/language/Buttons/CloseOthers/Caption",
"text": "close others"
},
"$:/language/Buttons/CloseOthers/Hint": {
"title": "$:/language/Buttons/CloseOthers/Hint",
"text": "Close other tiddlers"
},
"$:/language/Buttons/ControlPanel/Caption": {
"title": "$:/language/Buttons/ControlPanel/Caption",
"text": "control panel"
},
"$:/language/Buttons/ControlPanel/Hint": {
"title": "$:/language/Buttons/ControlPanel/Hint",
"text": "Open control panel"
},
"$:/language/Buttons/Delete/Caption": {
"title": "$:/language/Buttons/Delete/Caption",
"text": "delete"
},
"$:/language/Buttons/Delete/Hint": {
"title": "$:/language/Buttons/Delete/Hint",
"text": "Delete this tiddler"
},
"$:/language/Buttons/Edit/Caption": {
"title": "$:/language/Buttons/Edit/Caption",
"text": "edit"
},
"$:/language/Buttons/Edit/Hint": {
"title": "$:/language/Buttons/Edit/Hint",
"text": "Edit this tiddler"
},
"$:/language/Buttons/Encryption/Caption": {
"title": "$:/language/Buttons/Encryption/Caption",
"text": "encryption"
},
"$:/language/Buttons/Encryption/Hint": {
"title": "$:/language/Buttons/Encryption/Hint",
"text": "Set or clear a password for saving this wiki"
},
"$:/language/Buttons/Encryption/ClearPassword/Caption": {
"title": "$:/language/Buttons/Encryption/ClearPassword/Caption",
"text": "clear password"
},
"$:/language/Buttons/Encryption/ClearPassword/Hint": {
"title": "$:/language/Buttons/Encryption/ClearPassword/Hint",
"text": "Clear the password and save this wiki without encryption"
},
"$:/language/Buttons/Encryption/SetPassword/Caption": {
"title": "$:/language/Buttons/Encryption/SetPassword/Caption",
"text": "set password"
},
"$:/language/Buttons/Encryption/SetPassword/Hint": {
"title": "$:/language/Buttons/Encryption/SetPassword/Hint",
"text": "Set a password for saving this wiki with encryption"
},
"$:/language/Buttons/ExportPage/Caption": {
"title": "$:/language/Buttons/ExportPage/Caption",
"text": "export all"
},
"$:/language/Buttons/ExportPage/Hint": {
"title": "$:/language/Buttons/ExportPage/Hint",
"text": "Export all tiddlers"
},
"$:/language/Buttons/ExportTiddler/Caption": {
"title": "$:/language/Buttons/ExportTiddler/Caption",
"text": "export tiddler"
},
"$:/language/Buttons/ExportTiddler/Hint": {
"title": "$:/language/Buttons/ExportTiddler/Hint",
"text": "Export tiddler"
},
"$:/language/Buttons/ExportTiddlers/Caption": {
"title": "$:/language/Buttons/ExportTiddlers/Caption",
"text": "export tiddlers"
},
"$:/language/Buttons/ExportTiddlers/Hint": {
"title": "$:/language/Buttons/ExportTiddlers/Hint",
"text": "Export tiddlers"
},
"$:/language/Buttons/Fold/Caption": {
"title": "$:/language/Buttons/Fold/Caption",
"text": "fold tiddler"
},
"$:/language/Buttons/Fold/Hint": {
"title": "$:/language/Buttons/Fold/Hint",
"text": "Fold the body of this tiddler"
},
"$:/language/Buttons/Fold/FoldBar/Caption": {
"title": "$:/language/Buttons/Fold/FoldBar/Caption",
"text": "fold-bar"
},
"$:/language/Buttons/Fold/FoldBar/Hint": {
"title": "$:/language/Buttons/Fold/FoldBar/Hint",
"text": "Optional bars to fold and unfold tiddlers"
},
"$:/language/Buttons/Unfold/Caption": {
"title": "$:/language/Buttons/Unfold/Caption",
"text": "unfold tiddler"
},
"$:/language/Buttons/Unfold/Hint": {
"title": "$:/language/Buttons/Unfold/Hint",
"text": "Unfold the body of this tiddler"
},
"$:/language/Buttons/FoldOthers/Caption": {
"title": "$:/language/Buttons/FoldOthers/Caption",
"text": "fold other tiddlers"
},
"$:/language/Buttons/FoldOthers/Hint": {
"title": "$:/language/Buttons/FoldOthers/Hint",
"text": "Fold the bodies of other opened tiddlers"
},
"$:/language/Buttons/FoldAll/Caption": {
"title": "$:/language/Buttons/FoldAll/Caption",
"text": "fold all tiddlers"
},
"$:/language/Buttons/FoldAll/Hint": {
"title": "$:/language/Buttons/FoldAll/Hint",
"text": "Fold the bodies of all opened tiddlers"
},
"$:/language/Buttons/UnfoldAll/Caption": {
"title": "$:/language/Buttons/UnfoldAll/Caption",
"text": "unfold all tiddlers"
},
"$:/language/Buttons/UnfoldAll/Hint": {
"title": "$:/language/Buttons/UnfoldAll/Hint",
"text": "Unfold the bodies of all opened tiddlers"
},
"$:/language/Buttons/FullScreen/Caption": {
"title": "$:/language/Buttons/FullScreen/Caption",
"text": "full-screen"
},
"$:/language/Buttons/FullScreen/Hint": {
"title": "$:/language/Buttons/FullScreen/Hint",
"text": "Enter or leave full-screen mode"
},
"$:/language/Buttons/Help/Caption": {
"title": "$:/language/Buttons/Help/Caption",
"text": "help"
},
"$:/language/Buttons/Help/Hint": {
"title": "$:/language/Buttons/Help/Hint",
"text": "Show help panel"
},
"$:/language/Buttons/Import/Caption": {
"title": "$:/language/Buttons/Import/Caption",
"text": "import"
},
"$:/language/Buttons/Import/Hint": {
"title": "$:/language/Buttons/Import/Hint",
"text": "Import many types of file including text, image, TiddlyWiki or JSON"
},
"$:/language/Buttons/Info/Caption": {
"title": "$:/language/Buttons/Info/Caption",
"text": "info"
},
"$:/language/Buttons/Info/Hint": {
"title": "$:/language/Buttons/Info/Hint",
"text": "Show information for this tiddler"
},
"$:/language/Buttons/Home/Caption": {
"title": "$:/language/Buttons/Home/Caption",
"text": "home"
},
"$:/language/Buttons/Home/Hint": {
"title": "$:/language/Buttons/Home/Hint",
"text": "Open the default tiddlers"
},
"$:/language/Buttons/Language/Caption": {
"title": "$:/language/Buttons/Language/Caption",
"text": "language"
},
"$:/language/Buttons/Language/Hint": {
"title": "$:/language/Buttons/Language/Hint",
"text": "Choose the user interface language"
},
"$:/language/Buttons/Manager/Caption": {
"title": "$:/language/Buttons/Manager/Caption",
"text": "tiddler manager"
},
"$:/language/Buttons/Manager/Hint": {
"title": "$:/language/Buttons/Manager/Hint",
"text": "Open tiddler manager"
},
"$:/language/Buttons/More/Caption": {
"title": "$:/language/Buttons/More/Caption",
"text": "more"
},
"$:/language/Buttons/More/Hint": {
"title": "$:/language/Buttons/More/Hint",
"text": "More actions"
},
"$:/language/Buttons/NewHere/Caption": {
"title": "$:/language/Buttons/NewHere/Caption",
"text": "new here"
},
"$:/language/Buttons/NewHere/Hint": {
"title": "$:/language/Buttons/NewHere/Hint",
"text": "Create a new tiddler tagged with this one"
},
"$:/language/Buttons/NewJournal/Caption": {
"title": "$:/language/Buttons/NewJournal/Caption",
"text": "new journal"
},
"$:/language/Buttons/NewJournal/Hint": {
"title": "$:/language/Buttons/NewJournal/Hint",
"text": "Create a new journal tiddler"
},
"$:/language/Buttons/NewJournalHere/Caption": {
"title": "$:/language/Buttons/NewJournalHere/Caption",
"text": "new journal here"
},
"$:/language/Buttons/NewJournalHere/Hint": {
"title": "$:/language/Buttons/NewJournalHere/Hint",
"text": "Create a new journal tiddler tagged with this one"
},
"$:/language/Buttons/NewImage/Caption": {
"title": "$:/language/Buttons/NewImage/Caption",
"text": "new image"
},
"$:/language/Buttons/NewImage/Hint": {
"title": "$:/language/Buttons/NewImage/Hint",
"text": "Create a new image tiddler"
},
"$:/language/Buttons/NewMarkdown/Caption": {
"title": "$:/language/Buttons/NewMarkdown/Caption",
"text": "new Markdown tiddler"
},
"$:/language/Buttons/NewMarkdown/Hint": {
"title": "$:/language/Buttons/NewMarkdown/Hint",
"text": "Create a new Markdown tiddler"
},
"$:/language/Buttons/NewTiddler/Caption": {
"title": "$:/language/Buttons/NewTiddler/Caption",
"text": "new tiddler"
},
"$:/language/Buttons/NewTiddler/Hint": {
"title": "$:/language/Buttons/NewTiddler/Hint",
"text": "Create a new tiddler"
},
"$:/language/Buttons/OpenWindow/Caption": {
"title": "$:/language/Buttons/OpenWindow/Caption",
"text": "open in new window"
},
"$:/language/Buttons/OpenWindow/Hint": {
"title": "$:/language/Buttons/OpenWindow/Hint",
"text": "Open tiddler in new window"
},
"$:/language/Buttons/Palette/Caption": {
"title": "$:/language/Buttons/Palette/Caption",
"text": "palette"
},
"$:/language/Buttons/Palette/Hint": {
"title": "$:/language/Buttons/Palette/Hint",
"text": "Choose the colour palette"
},
"$:/language/Buttons/Permalink/Caption": {
"title": "$:/language/Buttons/Permalink/Caption",
"text": "permalink"
},
"$:/language/Buttons/Permalink/Hint": {
"title": "$:/language/Buttons/Permalink/Hint",
"text": "Set browser address bar to a direct link to this tiddler"
},
"$:/language/Buttons/Permaview/Caption": {
"title": "$:/language/Buttons/Permaview/Caption",
"text": "permaview"
},
"$:/language/Buttons/Permaview/Hint": {
"title": "$:/language/Buttons/Permaview/Hint",
"text": "Set browser address bar to a direct link to all the tiddlers in this story"
},
"$:/language/Buttons/Print/Caption": {
"title": "$:/language/Buttons/Print/Caption",
"text": "print page"
},
"$:/language/Buttons/Print/Hint": {
"title": "$:/language/Buttons/Print/Hint",
"text": "Print the current page"
},
"$:/language/Buttons/Refresh/Caption": {
"title": "$:/language/Buttons/Refresh/Caption",
"text": "refresh"
},
"$:/language/Buttons/Refresh/Hint": {
"title": "$:/language/Buttons/Refresh/Hint",
"text": "Perform a full refresh of the wiki"
},
"$:/language/Buttons/Save/Caption": {
"title": "$:/language/Buttons/Save/Caption",
"text": "ok"
},
"$:/language/Buttons/Save/Hint": {
"title": "$:/language/Buttons/Save/Hint",
"text": "Confirm changes to this tiddler"
},
"$:/language/Buttons/SaveWiki/Caption": {
"title": "$:/language/Buttons/SaveWiki/Caption",
"text": "save changes"
},
"$:/language/Buttons/SaveWiki/Hint": {
"title": "$:/language/Buttons/SaveWiki/Hint",
"text": "Save changes"
},
"$:/language/Buttons/StoryView/Caption": {
"title": "$:/language/Buttons/StoryView/Caption",
"text": "storyview"
},
"$:/language/Buttons/StoryView/Hint": {
"title": "$:/language/Buttons/StoryView/Hint",
"text": "Choose the story visualisation"
},
"$:/language/Buttons/HideSideBar/Caption": {
"title": "$:/language/Buttons/HideSideBar/Caption",
"text": "hide sidebar"
},
"$:/language/Buttons/HideSideBar/Hint": {
"title": "$:/language/Buttons/HideSideBar/Hint",
"text": "Hide sidebar"
},
"$:/language/Buttons/ShowSideBar/Caption": {
"title": "$:/language/Buttons/ShowSideBar/Caption",
"text": "show sidebar"
},
"$:/language/Buttons/ShowSideBar/Hint": {
"title": "$:/language/Buttons/ShowSideBar/Hint",
"text": "Show sidebar"
},
"$:/language/Buttons/TagManager/Caption": {
"title": "$:/language/Buttons/TagManager/Caption",
"text": "tag manager"
},
"$:/language/Buttons/TagManager/Hint": {
"title": "$:/language/Buttons/TagManager/Hint",
"text": "Open tag manager"
},
"$:/language/Buttons/Timestamp/Caption": {
"title": "$:/language/Buttons/Timestamp/Caption",
"text": "timestamps"
},
"$:/language/Buttons/Timestamp/Hint": {
"title": "$:/language/Buttons/Timestamp/Hint",
"text": "Choose whether modifications update timestamps"
},
"$:/language/Buttons/Timestamp/On/Caption": {
"title": "$:/language/Buttons/Timestamp/On/Caption",
"text": "timestamps are on"
},
"$:/language/Buttons/Timestamp/On/Hint": {
"title": "$:/language/Buttons/Timestamp/On/Hint",
"text": "Update timestamps when tiddlers are modified"
},
"$:/language/Buttons/Timestamp/Off/Caption": {
"title": "$:/language/Buttons/Timestamp/Off/Caption",
"text": "timestamps are off"
},
"$:/language/Buttons/Timestamp/Off/Hint": {
"title": "$:/language/Buttons/Timestamp/Off/Hint",
"text": "Don't update timestamps when tiddlers are modified"
},
"$:/language/Buttons/Theme/Caption": {
"title": "$:/language/Buttons/Theme/Caption",
"text": "theme"
},
"$:/language/Buttons/Theme/Hint": {
"title": "$:/language/Buttons/Theme/Hint",
"text": "Choose the display theme"
},
"$:/language/Buttons/Bold/Caption": {
"title": "$:/language/Buttons/Bold/Caption",
"text": "bold"
},
"$:/language/Buttons/Bold/Hint": {
"title": "$:/language/Buttons/Bold/Hint",
"text": "Apply bold formatting to selection"
},
"$:/language/Buttons/Clear/Caption": {
"title": "$:/language/Buttons/Clear/Caption",
"text": "clear"
},
"$:/language/Buttons/Clear/Hint": {
"title": "$:/language/Buttons/Clear/Hint",
"text": "Clear image to solid colour"
},
"$:/language/Buttons/EditorHeight/Caption": {
"title": "$:/language/Buttons/EditorHeight/Caption",
"text": "editor height"
},
"$:/language/Buttons/EditorHeight/Caption/Auto": {
"title": "$:/language/Buttons/EditorHeight/Caption/Auto",
"text": "Automatically adjust height to fit content"
},
"$:/language/Buttons/EditorHeight/Caption/Fixed": {
"title": "$:/language/Buttons/EditorHeight/Caption/Fixed",
"text": "Fixed height:"
},
"$:/language/Buttons/EditorHeight/Hint": {
"title": "$:/language/Buttons/EditorHeight/Hint",
"text": "Choose the height of the text editor"
},
"$:/language/Buttons/Excise/Caption": {
"title": "$:/language/Buttons/Excise/Caption",
"text": "excise"
},
"$:/language/Buttons/Excise/Caption/Excise": {
"title": "$:/language/Buttons/Excise/Caption/Excise",
"text": "Perform excision"
},
"$:/language/Buttons/Excise/Caption/MacroName": {
"title": "$:/language/Buttons/Excise/Caption/MacroName",
"text": "Macro name:"
},
"$:/language/Buttons/Excise/Caption/NewTitle": {
"title": "$:/language/Buttons/Excise/Caption/NewTitle",
"text": "Title of new tiddler:"
},
"$:/language/Buttons/Excise/Caption/Replace": {
"title": "$:/language/Buttons/Excise/Caption/Replace",
"text": "Replace excised text with:"
},
"$:/language/Buttons/Excise/Caption/Replace/Macro": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Macro",
"text": "macro"
},
"$:/language/Buttons/Excise/Caption/Replace/Link": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Link",
"text": "link"
},
"$:/language/Buttons/Excise/Caption/Replace/Transclusion": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Transclusion",
"text": "transclusion"
},
"$:/language/Buttons/Excise/Caption/Tag": {
"title": "$:/language/Buttons/Excise/Caption/Tag",
"text": "Tag new tiddler with the title of this tiddler"
},
"$:/language/Buttons/Excise/Caption/TiddlerExists": {
"title": "$:/language/Buttons/Excise/Caption/TiddlerExists",
"text": "Warning: tiddler already exists"
},
"$:/language/Buttons/Excise/Hint": {
"title": "$:/language/Buttons/Excise/Hint",
"text": "Excise the selected text into a new tiddler"
},
"$:/language/Buttons/Heading1/Caption": {
"title": "$:/language/Buttons/Heading1/Caption",
"text": "heading 1"
},
"$:/language/Buttons/Heading1/Hint": {
"title": "$:/language/Buttons/Heading1/Hint",
"text": "Apply heading level 1 formatting to lines containing selection"
},
"$:/language/Buttons/Heading2/Caption": {
"title": "$:/language/Buttons/Heading2/Caption",
"text": "heading 2"
},
"$:/language/Buttons/Heading2/Hint": {
"title": "$:/language/Buttons/Heading2/Hint",
"text": "Apply heading level 2 formatting to lines containing selection"
},
"$:/language/Buttons/Heading3/Caption": {
"title": "$:/language/Buttons/Heading3/Caption",
"text": "heading 3"
},
"$:/language/Buttons/Heading3/Hint": {
"title": "$:/language/Buttons/Heading3/Hint",
"text": "Apply heading level 3 formatting to lines containing selection"
},
"$:/language/Buttons/Heading4/Caption": {
"title": "$:/language/Buttons/Heading4/Caption",
"text": "heading 4"
},
"$:/language/Buttons/Heading4/Hint": {
"title": "$:/language/Buttons/Heading4/Hint",
"text": "Apply heading level 4 formatting to lines containing selection"
},
"$:/language/Buttons/Heading5/Caption": {
"title": "$:/language/Buttons/Heading5/Caption",
"text": "heading 5"
},
"$:/language/Buttons/Heading5/Hint": {
"title": "$:/language/Buttons/Heading5/Hint",
"text": "Apply heading level 5 formatting to lines containing selection"
},
"$:/language/Buttons/Heading6/Caption": {
"title": "$:/language/Buttons/Heading6/Caption",
"text": "heading 6"
},
"$:/language/Buttons/Heading6/Hint": {
"title": "$:/language/Buttons/Heading6/Hint",
"text": "Apply heading level 6 formatting to lines containing selection"
},
"$:/language/Buttons/Italic/Caption": {
"title": "$:/language/Buttons/Italic/Caption",
"text": "italic"
},
"$:/language/Buttons/Italic/Hint": {
"title": "$:/language/Buttons/Italic/Hint",
"text": "Apply italic formatting to selection"
},
"$:/language/Buttons/LineWidth/Caption": {
"title": "$:/language/Buttons/LineWidth/Caption",
"text": "line width"
},
"$:/language/Buttons/LineWidth/Hint": {
"title": "$:/language/Buttons/LineWidth/Hint",
"text": "Set line width for painting"
},
"$:/language/Buttons/Link/Caption": {
"title": "$:/language/Buttons/Link/Caption",
"text": "link"
},
"$:/language/Buttons/Link/Hint": {
"title": "$:/language/Buttons/Link/Hint",
"text": "Create wikitext link"
},
"$:/language/Buttons/ListBullet/Caption": {
"title": "$:/language/Buttons/ListBullet/Caption",
"text": "bulleted list"
},
"$:/language/Buttons/ListBullet/Hint": {
"title": "$:/language/Buttons/ListBullet/Hint",
"text": "Apply bulleted list formatting to lines containing selection"
},
"$:/language/Buttons/ListNumber/Caption": {
"title": "$:/language/Buttons/ListNumber/Caption",
"text": "numbered list"
},
"$:/language/Buttons/ListNumber/Hint": {
"title": "$:/language/Buttons/ListNumber/Hint",
"text": "Apply numbered list formatting to lines containing selection"
},
"$:/language/Buttons/MonoBlock/Caption": {
"title": "$:/language/Buttons/MonoBlock/Caption",
"text": "monospaced block"
},
"$:/language/Buttons/MonoBlock/Hint": {
"title": "$:/language/Buttons/MonoBlock/Hint",
"text": "Apply monospaced block formatting to lines containing selection"
},
"$:/language/Buttons/MonoLine/Caption": {
"title": "$:/language/Buttons/MonoLine/Caption",
"text": "monospaced"
},
"$:/language/Buttons/MonoLine/Hint": {
"title": "$:/language/Buttons/MonoLine/Hint",
"text": "Apply monospaced character formatting to selection"
},
"$:/language/Buttons/Opacity/Caption": {
"title": "$:/language/Buttons/Opacity/Caption",
"text": "opacity"
},
"$:/language/Buttons/Opacity/Hint": {
"title": "$:/language/Buttons/Opacity/Hint",
"text": "Set painting opacity"
},
"$:/language/Buttons/Paint/Caption": {
"title": "$:/language/Buttons/Paint/Caption",
"text": "paint colour"
},
"$:/language/Buttons/Paint/Hint": {
"title": "$:/language/Buttons/Paint/Hint",
"text": "Set painting colour"
},
"$:/language/Buttons/Picture/Caption": {
"title": "$:/language/Buttons/Picture/Caption",
"text": "picture"
},
"$:/language/Buttons/Picture/Hint": {
"title": "$:/language/Buttons/Picture/Hint",
"text": "Insert picture"
},
"$:/language/Buttons/Preview/Caption": {
"title": "$:/language/Buttons/Preview/Caption",
"text": "preview"
},
"$:/language/Buttons/Preview/Hint": {
"title": "$:/language/Buttons/Preview/Hint",
"text": "Show preview pane"
},
"$:/language/Buttons/PreviewType/Caption": {
"title": "$:/language/Buttons/PreviewType/Caption",
"text": "preview type"
},
"$:/language/Buttons/PreviewType/Hint": {
"title": "$:/language/Buttons/PreviewType/Hint",
"text": "Choose preview type"
},
"$:/language/Buttons/Quote/Caption": {
"title": "$:/language/Buttons/Quote/Caption",
"text": "quote"
},
"$:/language/Buttons/Quote/Hint": {
"title": "$:/language/Buttons/Quote/Hint",
"text": "Apply quoted text formatting to lines containing selection"
},
"$:/language/Buttons/Size/Caption": {
"title": "$:/language/Buttons/Size/Caption",
"text": "image size"
},
"$:/language/Buttons/Size/Caption/Height": {
"title": "$:/language/Buttons/Size/Caption/Height",
"text": "Height:"
},
"$:/language/Buttons/Size/Caption/Resize": {
"title": "$:/language/Buttons/Size/Caption/Resize",
"text": "Resize image"
},
"$:/language/Buttons/Size/Caption/Width": {
"title": "$:/language/Buttons/Size/Caption/Width",
"text": "Width:"
},
"$:/language/Buttons/Size/Hint": {
"title": "$:/language/Buttons/Size/Hint",
"text": "Set image size"
},
"$:/language/Buttons/Stamp/Caption": {
"title": "$:/language/Buttons/Stamp/Caption",
"text": "stamp"
},
"$:/language/Buttons/Stamp/Caption/New": {
"title": "$:/language/Buttons/Stamp/Caption/New",
"text": "Add your own"
},
"$:/language/Buttons/Stamp/Hint": {
"title": "$:/language/Buttons/Stamp/Hint",
"text": "Insert a preconfigured snippet of text"
},
"$:/language/Buttons/Stamp/New/Title": {
"title": "$:/language/Buttons/Stamp/New/Title",
"text": "Name as shown in menu"
},
"$:/language/Buttons/Stamp/New/Text": {
"title": "$:/language/Buttons/Stamp/New/Text",
"text": "Text of snippet. (Remember to add a descriptive title in the caption field)."
},
"$:/language/Buttons/Strikethrough/Caption": {
"title": "$:/language/Buttons/Strikethrough/Caption",
"text": "strikethrough"
},
"$:/language/Buttons/Strikethrough/Hint": {
"title": "$:/language/Buttons/Strikethrough/Hint",
"text": "Apply strikethrough formatting to selection"
},
"$:/language/Buttons/Subscript/Caption": {
"title": "$:/language/Buttons/Subscript/Caption",
"text": "subscript"
},
"$:/language/Buttons/Subscript/Hint": {
"title": "$:/language/Buttons/Subscript/Hint",
"text": "Apply subscript formatting to selection"
},
"$:/language/Buttons/Superscript/Caption": {
"title": "$:/language/Buttons/Superscript/Caption",
"text": "superscript"
},
"$:/language/Buttons/Superscript/Hint": {
"title": "$:/language/Buttons/Superscript/Hint",
"text": "Apply superscript formatting to selection"
},
"$:/language/Buttons/Underline/Caption": {
"title": "$:/language/Buttons/Underline/Caption",
"text": "underline"
},
"$:/language/Buttons/Underline/Hint": {
"title": "$:/language/Buttons/Underline/Hint",
"text": "Apply underline formatting to selection"
},
"$:/language/ControlPanel/Advanced/Caption": {
"title": "$:/language/ControlPanel/Advanced/Caption",
"text": "Advanced"
},
"$:/language/ControlPanel/Advanced/Hint": {
"title": "$:/language/ControlPanel/Advanced/Hint",
"text": "Internal information about this TiddlyWiki"
},
"$:/language/ControlPanel/Appearance/Caption": {
"title": "$:/language/ControlPanel/Appearance/Caption",
"text": "Appearance"
},
"$:/language/ControlPanel/Appearance/Hint": {
"title": "$:/language/ControlPanel/Appearance/Hint",
"text": "Ways to customise the appearance of your TiddlyWiki."
},
"$:/language/ControlPanel/Basics/AnimDuration/Prompt": {
"title": "$:/language/ControlPanel/Basics/AnimDuration/Prompt",
"text": "Animation duration:"
},
"$:/language/ControlPanel/Basics/Caption": {
"title": "$:/language/ControlPanel/Basics/Caption",
"text": "Basics"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint",
"text": "Use [[double square brackets]] for titles with spaces. Or you can choose to <$button set=\"$:/DefaultTiddlers\" setTo=\"[list[$:/StoryList]]\">retain story ordering</$button>"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt",
"text": "Default tiddlers:"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint",
"text": "Choose which tiddlers are displayed at startup:"
},
"$:/language/ControlPanel/Basics/Language/Prompt": {
"title": "$:/language/ControlPanel/Basics/Language/Prompt",
"text": "Hello! Current language:"
},
"$:/language/ControlPanel/Basics/NewJournal/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt",
"text": "Title of new journal tiddlers"
},
"$:/language/ControlPanel/Basics/NewJournal/Text/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Text/Prompt",
"text": "Text for new journal tiddlers"
},
"$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt",
"text": "Tags for new journal tiddlers"
},
"$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt",
"text": "Number of overridden shadow tiddlers:"
},
"$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt",
"text": "Number of shadow tiddlers:"
},
"$:/language/ControlPanel/Basics/Subtitle/Prompt": {
"title": "$:/language/ControlPanel/Basics/Subtitle/Prompt",
"text": "Subtitle:"
},
"$:/language/ControlPanel/Basics/SystemTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt",
"text": "Number of system tiddlers:"
},
"$:/language/ControlPanel/Basics/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tags/Prompt",
"text": "Number of tags:"
},
"$:/language/ControlPanel/Basics/Tiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tiddlers/Prompt",
"text": "Number of tiddlers:"
},
"$:/language/ControlPanel/Basics/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/Title/Prompt",
"text": "Title of this ~TiddlyWiki:"
},
"$:/language/ControlPanel/Basics/Username/Prompt": {
"title": "$:/language/ControlPanel/Basics/Username/Prompt",
"text": "Username for signing edits:"
},
"$:/language/ControlPanel/Basics/Version/Prompt": {
"title": "$:/language/ControlPanel/Basics/Version/Prompt",
"text": "~TiddlyWiki version:"
},
"$:/language/ControlPanel/EditorTypes/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Caption",
"text": "Editor Types"
},
"$:/language/ControlPanel/EditorTypes/Editor/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Editor/Caption",
"text": "Editor"
},
"$:/language/ControlPanel/EditorTypes/Hint": {
"title": "$:/language/ControlPanel/EditorTypes/Hint",
"text": "These tiddlers determine which editor is used to edit specific tiddler types."
},
"$:/language/ControlPanel/EditorTypes/Type/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Type/Caption",
"text": "Type"
},
"$:/language/ControlPanel/Info/Caption": {
"title": "$:/language/ControlPanel/Info/Caption",
"text": "Info"
},
"$:/language/ControlPanel/Info/Hint": {
"title": "$:/language/ControlPanel/Info/Hint",
"text": "Information about this TiddlyWiki"
},
"$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt",
"text": "Type shortcut here"
},
"$:/language/ControlPanel/KeyboardShortcuts/Add/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Caption",
"text": "add shortcut"
},
"$:/language/ControlPanel/KeyboardShortcuts/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Caption",
"text": "Keyboard Shortcuts"
},
"$:/language/ControlPanel/KeyboardShortcuts/Hint": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Hint",
"text": "Manage keyboard shortcut assignments"
},
"$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption",
"text": "No keyboard shortcuts assigned"
},
"$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint",
"text": "remove keyboard shortcut"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/All": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/All",
"text": "All platforms"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac",
"text": "Macintosh platform only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac",
"text": "Non-Macintosh platforms only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux",
"text": "Linux platform only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux",
"text": "Non-Linux platforms only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows",
"text": "Windows platform only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows",
"text": "Non-Windows platforms only"
},
"$:/language/ControlPanel/LoadedModules/Caption": {
"title": "$:/language/ControlPanel/LoadedModules/Caption",
"text": "Loaded Modules"
},
"$:/language/ControlPanel/LoadedModules/Hint": {
"title": "$:/language/ControlPanel/LoadedModules/Hint",
"text": "These are the currently loaded tiddler modules linked to their source tiddlers. Any italicised modules lack a source tiddler, typically because they were setup during the boot process."
},
"$:/language/ControlPanel/Palette/Caption": {
"title": "$:/language/ControlPanel/Palette/Caption",
"text": "Palette"
},
"$:/language/ControlPanel/Palette/Editor/Clone/Caption": {
"title": "$:/language/ControlPanel/Palette/Editor/Clone/Caption",
"text": "clone"
},
"$:/language/ControlPanel/Palette/Editor/Clone/Prompt": {
"title": "$:/language/ControlPanel/Palette/Editor/Clone/Prompt",
"text": "It is recommended that you clone this shadow palette before editing it"
},
"$:/language/ControlPanel/Palette/Editor/Prompt/Modified": {
"title": "$:/language/ControlPanel/Palette/Editor/Prompt/Modified",
"text": "This shadow palette has been modified"
},
"$:/language/ControlPanel/Palette/Editor/Prompt": {
"title": "$:/language/ControlPanel/Palette/Editor/Prompt",
"text": "Editing"
},
"$:/language/ControlPanel/Palette/Editor/Reset/Caption": {
"title": "$:/language/ControlPanel/Palette/Editor/Reset/Caption",
"text": "reset"
},
"$:/language/ControlPanel/Palette/HideEditor/Caption": {
"title": "$:/language/ControlPanel/Palette/HideEditor/Caption",
"text": "hide editor"
},
"$:/language/ControlPanel/Palette/Prompt": {
"title": "$:/language/ControlPanel/Palette/Prompt",
"text": "Current palette:"
},
"$:/language/ControlPanel/Palette/ShowEditor/Caption": {
"title": "$:/language/ControlPanel/Palette/ShowEditor/Caption",
"text": "show editor"
},
"$:/language/ControlPanel/Parsing/Caption": {
"title": "$:/language/ControlPanel/Parsing/Caption",
"text": "Parsing"
},
"$:/language/ControlPanel/Parsing/Hint": {
"title": "$:/language/ControlPanel/Parsing/Hint",
"text": "Here you can globally disable/enable wiki parser rules. For changes to take effect, save and reload your wiki. Disabling certain parser rules can prevent <$text text=\"TiddlyWiki\"/> from functioning correctly. Use [[safe mode|https://tiddlywiki.com/#SafeMode]] to restore normal operation."
},
"$:/language/ControlPanel/Parsing/Block/Caption": {
"title": "$:/language/ControlPanel/Parsing/Block/Caption",
"text": "Block Parse Rules"
},
"$:/language/ControlPanel/Parsing/Inline/Caption": {
"title": "$:/language/ControlPanel/Parsing/Inline/Caption",
"text": "Inline Parse Rules"
},
"$:/language/ControlPanel/Parsing/Pragma/Caption": {
"title": "$:/language/ControlPanel/Parsing/Pragma/Caption",
"text": "Pragma Parse Rules"
},
"$:/language/ControlPanel/Plugins/Add/Caption": {
"title": "$:/language/ControlPanel/Plugins/Add/Caption",
"text": "Get more plugins"
},
"$:/language/ControlPanel/Plugins/Add/Hint": {
"title": "$:/language/ControlPanel/Plugins/Add/Hint",
"text": "Install plugins from the official library"
},
"$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint": {
"title": "$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint",
"text": "This plugin is already installed at version <$text text=<<installedVersion>>/>"
},
"$:/language/ControlPanel/Plugins/Caption": {
"title": "$:/language/ControlPanel/Plugins/Caption",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Disable/Caption": {
"title": "$:/language/ControlPanel/Plugins/Disable/Caption",
"text": "disable"
},
"$:/language/ControlPanel/Plugins/Disable/Hint": {
"title": "$:/language/ControlPanel/Plugins/Disable/Hint",
"text": "Disable this plugin when reloading page"
},
"$:/language/ControlPanel/Plugins/Disabled/Status": {
"title": "$:/language/ControlPanel/Plugins/Disabled/Status",
"text": "(disabled)"
},
"$:/language/ControlPanel/Plugins/Empty/Hint": {
"title": "$:/language/ControlPanel/Plugins/Empty/Hint",
"text": "None"
},
"$:/language/ControlPanel/Plugins/Enable/Caption": {
"title": "$:/language/ControlPanel/Plugins/Enable/Caption",
"text": "enable"
},
"$:/language/ControlPanel/Plugins/Enable/Hint": {
"title": "$:/language/ControlPanel/Plugins/Enable/Hint",
"text": "Enable this plugin when reloading page"
},
"$:/language/ControlPanel/Plugins/Install/Caption": {
"title": "$:/language/ControlPanel/Plugins/Install/Caption",
"text": "install"
},
"$:/language/ControlPanel/Plugins/Installed/Hint": {
"title": "$:/language/ControlPanel/Plugins/Installed/Hint",
"text": "Currently installed plugins:"
},
"$:/language/ControlPanel/Plugins/Languages/Caption": {
"title": "$:/language/ControlPanel/Plugins/Languages/Caption",
"text": "Languages"
},
"$:/language/ControlPanel/Plugins/Languages/Hint": {
"title": "$:/language/ControlPanel/Plugins/Languages/Hint",
"text": "Language pack plugins"
},
"$:/language/ControlPanel/Plugins/NoInfoFound/Hint": {
"title": "$:/language/ControlPanel/Plugins/NoInfoFound/Hint",
"text": "No ''\"<$text text=<<currentTab>>/>\"'' found"
},
"$:/language/ControlPanel/Plugins/NotInstalled/Hint": {
"title": "$:/language/ControlPanel/Plugins/NotInstalled/Hint",
"text": "This plugin is not currently installed"
},
"$:/language/ControlPanel/Plugins/OpenPluginLibrary": {
"title": "$:/language/ControlPanel/Plugins/OpenPluginLibrary",
"text": "open plugin library"
},
"$:/language/ControlPanel/Plugins/ClosePluginLibrary": {
"title": "$:/language/ControlPanel/Plugins/ClosePluginLibrary",
"text": "close plugin library"
},
"$:/language/ControlPanel/Plugins/Plugins/Caption": {
"title": "$:/language/ControlPanel/Plugins/Plugins/Caption",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Plugins/Hint": {
"title": "$:/language/ControlPanel/Plugins/Plugins/Hint",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Reinstall/Caption": {
"title": "$:/language/ControlPanel/Plugins/Reinstall/Caption",
"text": "reinstall"
},
"$:/language/ControlPanel/Plugins/Themes/Caption": {
"title": "$:/language/ControlPanel/Plugins/Themes/Caption",
"text": "Themes"
},
"$:/language/ControlPanel/Plugins/Themes/Hint": {
"title": "$:/language/ControlPanel/Plugins/Themes/Hint",
"text": "Theme plugins"
},
"$:/language/ControlPanel/Saving/Caption": {
"title": "$:/language/ControlPanel/Saving/Caption",
"text": "Saving"
},
"$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description",
"text": "Permit automatic saving for the download saver"
},
"$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint",
"text": "Enable Autosave for Download Saver"
},
"$:/language/ControlPanel/Saving/DownloadSaver/Caption": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/Caption",
"text": "Download Saver"
},
"$:/language/ControlPanel/Saving/DownloadSaver/Hint": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/Hint",
"text": "These settings apply to the HTML5-compatible download saver"
},
"$:/language/ControlPanel/Saving/General/Caption": {
"title": "$:/language/ControlPanel/Saving/General/Caption",
"text": "General"
},
"$:/language/ControlPanel/Saving/General/Hint": {
"title": "$:/language/ControlPanel/Saving/General/Hint",
"text": "These settings apply to all the loaded savers"
},
"$:/language/ControlPanel/Saving/Hint": {
"title": "$:/language/ControlPanel/Saving/Hint",
"text": "Settings used for saving the entire TiddlyWiki as a single file via a saver module"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading",
"text": "Advanced Settings"
},
"$:/language/ControlPanel/Saving/TiddlySpot/BackupDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir",
"text": "Backup Directory"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Backups": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Backups",
"text": "Backups"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Caption": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Caption",
"text": "~TiddlySpot Saver"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Description": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Description",
"text": "These settings are only used when saving to http://tiddlyspot.com or a compatible remote server"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Filename": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Filename",
"text": "Upload Filename"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Heading": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Heading",
"text": "~TiddlySpot"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Hint": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Hint",
"text": "//The server URL defaults to `http://<wikiname>.tiddlyspot.com/store.cgi` and can be changed to use a custom server address, e.g. `http://example.com/store.php`.//"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Password": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Password",
"text": "Password"
},
"$:/language/ControlPanel/Saving/TiddlySpot/ServerURL": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL",
"text": "Server URL"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UploadDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir",
"text": "Upload Directory"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UserName": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UserName",
"text": "Wiki Name"
},
"$:/language/ControlPanel/Settings/AutoSave/Caption": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Caption",
"text": "Autosave"
},
"$:/language/ControlPanel/Settings/AutoSave/Disabled/Description": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description",
"text": "Do not save changes automatically"
},
"$:/language/ControlPanel/Settings/AutoSave/Enabled/Description": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description",
"text": "Save changes automatically"
},
"$:/language/ControlPanel/Settings/AutoSave/Hint": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Hint",
"text": "Attempt to automatically save changes during editing when using a supporting saver"
},
"$:/language/ControlPanel/Settings/CamelCase/Caption": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Caption",
"text": "Camel Case Wiki Links"
},
"$:/language/ControlPanel/Settings/CamelCase/Hint": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Hint",
"text": "You can globally disable automatic linking of ~CamelCase phrases. Requires reload to take effect"
},
"$:/language/ControlPanel/Settings/CamelCase/Description": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Description",
"text": "Enable automatic ~CamelCase linking"
},
"$:/language/ControlPanel/Settings/Caption": {
"title": "$:/language/ControlPanel/Settings/Caption",
"text": "Settings"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Caption": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Caption",
"text": "Editor Toolbar"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Hint": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Hint",
"text": "Enable or disable the editor toolbar:"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Description": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Description",
"text": "Show editor toolbar"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Caption": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Caption",
"text": "Tiddler Info Panel Mode"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Hint": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Hint",
"text": "Control when the tiddler info panel closes:"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description",
"text": "Tiddler info panel closes automatically"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description",
"text": "Tiddler info panel stays open until explicitly closed"
},
"$:/language/ControlPanel/Settings/Hint": {
"title": "$:/language/ControlPanel/Settings/Hint",
"text": "These settings let you customise the behaviour of TiddlyWiki."
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption",
"text": "Navigation Address Bar"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint",
"text": "Behaviour of the browser address bar when navigating to a tiddler:"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description",
"text": "Do not update the address bar"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description",
"text": "Include the target tiddler"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description",
"text": "Include the target tiddler and the current story sequence"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Caption",
"text": "Navigation History"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Hint",
"text": "Update browser history when navigating to a tiddler:"
},
"$:/language/ControlPanel/Settings/NavigationHistory/No/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/No/Description",
"text": "Do not update history"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description",
"text": "Update history"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption",
"text": "Performance Instrumentation"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint",
"text": "Displays performance statistics in the browser developer console. Requires reload to take effect"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description",
"text": "Enable performance instrumentation"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption",
"text": "Toolbar Button Style"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint",
"text": "Choose the style for toolbar buttons:"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless",
"text": "Borderless"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed",
"text": "Boxed"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded",
"text": "Rounded"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Caption": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Caption",
"text": "Toolbar Buttons"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Hint": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Hint",
"text": "Default toolbar button appearance:"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description",
"text": "Include icon"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description",
"text": "Include text"
},
"$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption": {
"title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption",
"text": "Default Sidebar Tab"
},
"$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint": {
"title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint",
"text": "Specify which sidebar tab is displayed by default"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/Caption": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption",
"text": "Tiddler Opening Behaviour"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint",
"text": "Navigation from //within// the story river"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint",
"text": "Navigation from //outside// the story river"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove",
"text": "Open above the current tiddler"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow",
"text": "Open below the current tiddler"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop",
"text": "Open at the top of the story river"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom",
"text": "Open at the bottom of the story river"
},
"$:/language/ControlPanel/Settings/TitleLinks/Caption": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Caption",
"text": "Tiddler Titles"
},
"$:/language/ControlPanel/Settings/TitleLinks/Hint": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Hint",
"text": "Optionally display tiddler titles as links"
},
"$:/language/ControlPanel/Settings/TitleLinks/No/Description": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/No/Description",
"text": "Do not display tiddler titles as links"
},
"$:/language/ControlPanel/Settings/TitleLinks/Yes/Description": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description",
"text": "Display tiddler titles as links"
},
"$:/language/ControlPanel/Settings/MissingLinks/Caption": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Caption",
"text": "Wiki Links"
},
"$:/language/ControlPanel/Settings/MissingLinks/Hint": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Hint",
"text": "Choose whether to link to tiddlers that do not exist yet"
},
"$:/language/ControlPanel/Settings/MissingLinks/Description": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Description",
"text": "Enable links to missing tiddlers"
},
"$:/language/ControlPanel/StoryView/Caption": {
"title": "$:/language/ControlPanel/StoryView/Caption",
"text": "Story View"
},
"$:/language/ControlPanel/StoryView/Prompt": {
"title": "$:/language/ControlPanel/StoryView/Prompt",
"text": "Current view:"
},
"$:/language/ControlPanel/Theme/Caption": {
"title": "$:/language/ControlPanel/Theme/Caption",
"text": "Theme"
},
"$:/language/ControlPanel/Theme/Prompt": {
"title": "$:/language/ControlPanel/Theme/Prompt",
"text": "Current theme:"
},
"$:/language/ControlPanel/TiddlerFields/Caption": {
"title": "$:/language/ControlPanel/TiddlerFields/Caption",
"text": "Tiddler Fields"
},
"$:/language/ControlPanel/TiddlerFields/Hint": {
"title": "$:/language/ControlPanel/TiddlerFields/Hint",
"text": "This is the full set of TiddlerFields in use in this wiki (including system tiddlers but excluding shadow tiddlers)."
},
"$:/language/ControlPanel/Toolbars/Caption": {
"title": "$:/language/ControlPanel/Toolbars/Caption",
"text": "Toolbars"
},
"$:/language/ControlPanel/Toolbars/EditToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/EditToolbar/Caption",
"text": "Edit Toolbar"
},
"$:/language/ControlPanel/Toolbars/EditToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/EditToolbar/Hint",
"text": "Choose which buttons are displayed for tiddlers in edit mode. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Toolbars/Hint": {
"title": "$:/language/ControlPanel/Toolbars/Hint",
"text": "Select which toolbar buttons are displayed"
},
"$:/language/ControlPanel/Toolbars/PageControls/Caption": {
"title": "$:/language/ControlPanel/Toolbars/PageControls/Caption",
"text": "Page Toolbar"
},
"$:/language/ControlPanel/Toolbars/PageControls/Hint": {
"title": "$:/language/ControlPanel/Toolbars/PageControls/Hint",
"text": "Choose which buttons are displayed on the main page toolbar. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Toolbars/EditorToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Caption",
"text": "Editor Toolbar"
},
"$:/language/ControlPanel/Toolbars/EditorToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Hint",
"text": "Choose which buttons are displayed in the editor toolbar. Note that some buttons will only appear when editing tiddlers of a certain type. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Toolbars/ViewToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption",
"text": "View Toolbar"
},
"$:/language/ControlPanel/Toolbars/ViewToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint",
"text": "Choose which buttons are displayed for tiddlers in view mode. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Tools/Download/Full/Caption": {
"title": "$:/language/ControlPanel/Tools/Download/Full/Caption",
"text": "Download full wiki"
},
"$:/language/Date/DaySuffix/1": {
"title": "$:/language/Date/DaySuffix/1",
"text": "st"
},
"$:/language/Date/DaySuffix/2": {
"title": "$:/language/Date/DaySuffix/2",
"text": "nd"
},
"$:/language/Date/DaySuffix/3": {
"title": "$:/language/Date/DaySuffix/3",
"text": "rd"
},
"$:/language/Date/DaySuffix/4": {
"title": "$:/language/Date/DaySuffix/4",
"text": "th"
},
"$:/language/Date/DaySuffix/5": {
"title": "$:/language/Date/DaySuffix/5",
"text": "th"
},
"$:/language/Date/DaySuffix/6": {
"title": "$:/language/Date/DaySuffix/6",
"text": "th"
},
"$:/language/Date/DaySuffix/7": {
"title": "$:/language/Date/DaySuffix/7",
"text": "th"
},
"$:/language/Date/DaySuffix/8": {
"title": "$:/language/Date/DaySuffix/8",
"text": "th"
},
"$:/language/Date/DaySuffix/9": {
"title": "$:/language/Date/DaySuffix/9",
"text": "th"
},
"$:/language/Date/DaySuffix/10": {
"title": "$:/language/Date/DaySuffix/10",
"text": "th"
},
"$:/language/Date/DaySuffix/11": {
"title": "$:/language/Date/DaySuffix/11",
"text": "th"
},
"$:/language/Date/DaySuffix/12": {
"title": "$:/language/Date/DaySuffix/12",
"text": "th"
},
"$:/language/Date/DaySuffix/13": {
"title": "$:/language/Date/DaySuffix/13",
"text": "th"
},
"$:/language/Date/DaySuffix/14": {
"title": "$:/language/Date/DaySuffix/14",
"text": "th"
},
"$:/language/Date/DaySuffix/15": {
"title": "$:/language/Date/DaySuffix/15",
"text": "th"
},
"$:/language/Date/DaySuffix/16": {
"title": "$:/language/Date/DaySuffix/16",
"text": "th"
},
"$:/language/Date/DaySuffix/17": {
"title": "$:/language/Date/DaySuffix/17",
"text": "th"
},
"$:/language/Date/DaySuffix/18": {
"title": "$:/language/Date/DaySuffix/18",
"text": "th"
},
"$:/language/Date/DaySuffix/19": {
"title": "$:/language/Date/DaySuffix/19",
"text": "th"
},
"$:/language/Date/DaySuffix/20": {
"title": "$:/language/Date/DaySuffix/20",
"text": "th"
},
"$:/language/Date/DaySuffix/21": {
"title": "$:/language/Date/DaySuffix/21",
"text": "st"
},
"$:/language/Date/DaySuffix/22": {
"title": "$:/language/Date/DaySuffix/22",
"text": "nd"
},
"$:/language/Date/DaySuffix/23": {
"title": "$:/language/Date/DaySuffix/23",
"text": "rd"
},
"$:/language/Date/DaySuffix/24": {
"title": "$:/language/Date/DaySuffix/24",
"text": "th"
},
"$:/language/Date/DaySuffix/25": {
"title": "$:/language/Date/DaySuffix/25",
"text": "th"
},
"$:/language/Date/DaySuffix/26": {
"title": "$:/language/Date/DaySuffix/26",
"text": "th"
},
"$:/language/Date/DaySuffix/27": {
"title": "$:/language/Date/DaySuffix/27",
"text": "th"
},
"$:/language/Date/DaySuffix/28": {
"title": "$:/language/Date/DaySuffix/28",
"text": "th"
},
"$:/language/Date/DaySuffix/29": {
"title": "$:/language/Date/DaySuffix/29",
"text": "th"
},
"$:/language/Date/DaySuffix/30": {
"title": "$:/language/Date/DaySuffix/30",
"text": "th"
},
"$:/language/Date/DaySuffix/31": {
"title": "$:/language/Date/DaySuffix/31",
"text": "st"
},
"$:/language/Date/Long/Day/0": {
"title": "$:/language/Date/Long/Day/0",
"text": "Sunday"
},
"$:/language/Date/Long/Day/1": {
"title": "$:/language/Date/Long/Day/1",
"text": "Monday"
},
"$:/language/Date/Long/Day/2": {
"title": "$:/language/Date/Long/Day/2",
"text": "Tuesday"
},
"$:/language/Date/Long/Day/3": {
"title": "$:/language/Date/Long/Day/3",
"text": "Wednesday"
},
"$:/language/Date/Long/Day/4": {
"title": "$:/language/Date/Long/Day/4",
"text": "Thursday"
},
"$:/language/Date/Long/Day/5": {
"title": "$:/language/Date/Long/Day/5",
"text": "Friday"
},
"$:/language/Date/Long/Day/6": {
"title": "$:/language/Date/Long/Day/6",
"text": "Saturday"
},
"$:/language/Date/Long/Month/1": {
"title": "$:/language/Date/Long/Month/1",
"text": "January"
},
"$:/language/Date/Long/Month/2": {
"title": "$:/language/Date/Long/Month/2",
"text": "February"
},
"$:/language/Date/Long/Month/3": {
"title": "$:/language/Date/Long/Month/3",
"text": "March"
},
"$:/language/Date/Long/Month/4": {
"title": "$:/language/Date/Long/Month/4",
"text": "April"
},
"$:/language/Date/Long/Month/5": {
"title": "$:/language/Date/Long/Month/5",
"text": "May"
},
"$:/language/Date/Long/Month/6": {
"title": "$:/language/Date/Long/Month/6",
"text": "June"
},
"$:/language/Date/Long/Month/7": {
"title": "$:/language/Date/Long/Month/7",
"text": "July"
},
"$:/language/Date/Long/Month/8": {
"title": "$:/language/Date/Long/Month/8",
"text": "August"
},
"$:/language/Date/Long/Month/9": {
"title": "$:/language/Date/Long/Month/9",
"text": "September"
},
"$:/language/Date/Long/Month/10": {
"title": "$:/language/Date/Long/Month/10",
"text": "October"
},
"$:/language/Date/Long/Month/11": {
"title": "$:/language/Date/Long/Month/11",
"text": "November"
},
"$:/language/Date/Long/Month/12": {
"title": "$:/language/Date/Long/Month/12",
"text": "December"
},
"$:/language/Date/Period/am": {
"title": "$:/language/Date/Period/am",
"text": "am"
},
"$:/language/Date/Period/pm": {
"title": "$:/language/Date/Period/pm",
"text": "pm"
},
"$:/language/Date/Short/Day/0": {
"title": "$:/language/Date/Short/Day/0",
"text": "Sun"
},
"$:/language/Date/Short/Day/1": {
"title": "$:/language/Date/Short/Day/1",
"text": "Mon"
},
"$:/language/Date/Short/Day/2": {
"title": "$:/language/Date/Short/Day/2",
"text": "Tue"
},
"$:/language/Date/Short/Day/3": {
"title": "$:/language/Date/Short/Day/3",
"text": "Wed"
},
"$:/language/Date/Short/Day/4": {
"title": "$:/language/Date/Short/Day/4",
"text": "Thu"
},
"$:/language/Date/Short/Day/5": {
"title": "$:/language/Date/Short/Day/5",
"text": "Fri"
},
"$:/language/Date/Short/Day/6": {
"title": "$:/language/Date/Short/Day/6",
"text": "Sat"
},
"$:/language/Date/Short/Month/1": {
"title": "$:/language/Date/Short/Month/1",
"text": "Jan"
},
"$:/language/Date/Short/Month/2": {
"title": "$:/language/Date/Short/Month/2",
"text": "Feb"
},
"$:/language/Date/Short/Month/3": {
"title": "$:/language/Date/Short/Month/3",
"text": "Mar"
},
"$:/language/Date/Short/Month/4": {
"title": "$:/language/Date/Short/Month/4",
"text": "Apr"
},
"$:/language/Date/Short/Month/5": {
"title": "$:/language/Date/Short/Month/5",
"text": "May"
},
"$:/language/Date/Short/Month/6": {
"title": "$:/language/Date/Short/Month/6",
"text": "Jun"
},
"$:/language/Date/Short/Month/7": {
"title": "$:/language/Date/Short/Month/7",
"text": "Jul"
},
"$:/language/Date/Short/Month/8": {
"title": "$:/language/Date/Short/Month/8",
"text": "Aug"
},
"$:/language/Date/Short/Month/9": {
"title": "$:/language/Date/Short/Month/9",
"text": "Sep"
},
"$:/language/Date/Short/Month/10": {
"title": "$:/language/Date/Short/Month/10",
"text": "Oct"
},
"$:/language/Date/Short/Month/11": {
"title": "$:/language/Date/Short/Month/11",
"text": "Nov"
},
"$:/language/Date/Short/Month/12": {
"title": "$:/language/Date/Short/Month/12",
"text": "Dec"
},
"$:/language/RelativeDate/Future/Days": {
"title": "$:/language/RelativeDate/Future/Days",
"text": "<<period>> days from now"
},
"$:/language/RelativeDate/Future/Hours": {
"title": "$:/language/RelativeDate/Future/Hours",
"text": "<<period>> hours from now"
},
"$:/language/RelativeDate/Future/Minutes": {
"title": "$:/language/RelativeDate/Future/Minutes",
"text": "<<period>> minutes from now"
},
"$:/language/RelativeDate/Future/Months": {
"title": "$:/language/RelativeDate/Future/Months",
"text": "<<period>> months from now"
},
"$:/language/RelativeDate/Future/Second": {
"title": "$:/language/RelativeDate/Future/Second",
"text": "1 second from now"
},
"$:/language/RelativeDate/Future/Seconds": {
"title": "$:/language/RelativeDate/Future/Seconds",
"text": "<<period>> seconds from now"
},
"$:/language/RelativeDate/Future/Years": {
"title": "$:/language/RelativeDate/Future/Years",
"text": "<<period>> years from now"
},
"$:/language/RelativeDate/Past/Days": {
"title": "$:/language/RelativeDate/Past/Days",
"text": "<<period>> days ago"
},
"$:/language/RelativeDate/Past/Hours": {
"title": "$:/language/RelativeDate/Past/Hours",
"text": "<<period>> hours ago"
},
"$:/language/RelativeDate/Past/Minutes": {
"title": "$:/language/RelativeDate/Past/Minutes",
"text": "<<period>> minutes ago"
},
"$:/language/RelativeDate/Past/Months": {
"title": "$:/language/RelativeDate/Past/Months",
"text": "<<period>> months ago"
},
"$:/language/RelativeDate/Past/Second": {
"title": "$:/language/RelativeDate/Past/Second",
"text": "1 second ago"
},
"$:/language/RelativeDate/Past/Seconds": {
"title": "$:/language/RelativeDate/Past/Seconds",
"text": "<<period>> seconds ago"
},
"$:/language/RelativeDate/Past/Years": {
"title": "$:/language/RelativeDate/Past/Years",
"text": "<<period>> years ago"
},
"$:/language/Docs/ModuleTypes/allfilteroperator": {
"title": "$:/language/Docs/ModuleTypes/allfilteroperator",
"text": "A sub-operator for the ''all'' filter operator."
},
"$:/language/Docs/ModuleTypes/animation": {
"title": "$:/language/Docs/ModuleTypes/animation",
"text": "Animations that may be used with the RevealWidget."
},
"$:/language/Docs/ModuleTypes/bitmapeditoroperation": {
"title": "$:/language/Docs/ModuleTypes/bitmapeditoroperation",
"text": "A bitmap editor toolbar operation."
},
"$:/language/Docs/ModuleTypes/command": {
"title": "$:/language/Docs/ModuleTypes/command",
"text": "Commands that can be executed under Node.js."
},
"$:/language/Docs/ModuleTypes/config": {
"title": "$:/language/Docs/ModuleTypes/config",
"text": "Data to be inserted into `$tw.config`."
},
"$:/language/Docs/ModuleTypes/filteroperator": {
"title": "$:/language/Docs/ModuleTypes/filteroperator",
"text": "Individual filter operator methods."
},
"$:/language/Docs/ModuleTypes/global": {
"title": "$:/language/Docs/ModuleTypes/global",
"text": "Global data to be inserted into `$tw`."
},
"$:/language/Docs/ModuleTypes/info": {
"title": "$:/language/Docs/ModuleTypes/info",
"text": "Publishes system information via the [[$:/temp/info-plugin]] pseudo-plugin."
},
"$:/language/Docs/ModuleTypes/isfilteroperator": {
"title": "$:/language/Docs/ModuleTypes/isfilteroperator",
"text": "Operands for the ''is'' filter operator."
},
"$:/language/Docs/ModuleTypes/library": {
"title": "$:/language/Docs/ModuleTypes/library",
"text": "Generic module type for general purpose JavaScript modules."
},
"$:/language/Docs/ModuleTypes/macro": {
"title": "$:/language/Docs/ModuleTypes/macro",
"text": "JavaScript macro definitions."
},
"$:/language/Docs/ModuleTypes/parser": {
"title": "$:/language/Docs/ModuleTypes/parser",
"text": "Parsers for different content types."
},
"$:/language/Docs/ModuleTypes/saver": {
"title": "$:/language/Docs/ModuleTypes/saver",
"text": "Savers handle different methods for saving files from the browser."
},
"$:/language/Docs/ModuleTypes/startup": {
"title": "$:/language/Docs/ModuleTypes/startup",
"text": "Startup functions."
},
"$:/language/Docs/ModuleTypes/storyview": {
"title": "$:/language/Docs/ModuleTypes/storyview",
"text": "Story views customise the animation and behaviour of list widgets."
},
"$:/language/Docs/ModuleTypes/texteditoroperation": {
"title": "$:/language/Docs/ModuleTypes/texteditoroperation",
"text": "A text editor toolbar operation."
},
"$:/language/Docs/ModuleTypes/tiddlerdeserializer": {
"title": "$:/language/Docs/ModuleTypes/tiddlerdeserializer",
"text": "Converts different content types into tiddlers."
},
"$:/language/Docs/ModuleTypes/tiddlerfield": {
"title": "$:/language/Docs/ModuleTypes/tiddlerfield",
"text": "Defines the behaviour of an individual tiddler field."
},
"$:/language/Docs/ModuleTypes/tiddlermethod": {
"title": "$:/language/Docs/ModuleTypes/tiddlermethod",
"text": "Adds methods to the `$tw.Tiddler` prototype."
},
"$:/language/Docs/ModuleTypes/upgrader": {
"title": "$:/language/Docs/ModuleTypes/upgrader",
"text": "Applies upgrade processing to tiddlers during an upgrade/import."
},
"$:/language/Docs/ModuleTypes/utils": {
"title": "$:/language/Docs/ModuleTypes/utils",
"text": "Adds methods to `$tw.utils`."
},
"$:/language/Docs/ModuleTypes/utils-node": {
"title": "$:/language/Docs/ModuleTypes/utils-node",
"text": "Adds Node.js-specific methods to `$tw.utils`."
},
"$:/language/Docs/ModuleTypes/widget": {
"title": "$:/language/Docs/ModuleTypes/widget",
"text": "Widgets encapsulate DOM rendering and refreshing."
},
"$:/language/Docs/ModuleTypes/wikimethod": {
"title": "$:/language/Docs/ModuleTypes/wikimethod",
"text": "Adds methods to `$tw.Wiki`."
},
"$:/language/Docs/ModuleTypes/wikirule": {
"title": "$:/language/Docs/ModuleTypes/wikirule",
"text": "Individual parser rules for the main WikiText parser."
},
"$:/language/Docs/PaletteColours/alert-background": {
"title": "$:/language/Docs/PaletteColours/alert-background",
"text": "Alert background"
},
"$:/language/Docs/PaletteColours/alert-border": {
"title": "$:/language/Docs/PaletteColours/alert-border",
"text": "Alert border"
},
"$:/language/Docs/PaletteColours/alert-highlight": {
"title": "$:/language/Docs/PaletteColours/alert-highlight",
"text": "Alert highlight"
},
"$:/language/Docs/PaletteColours/alert-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/alert-muted-foreground",
"text": "Alert muted foreground"
},
"$:/language/Docs/PaletteColours/background": {
"title": "$:/language/Docs/PaletteColours/background",
"text": "General background"
},
"$:/language/Docs/PaletteColours/blockquote-bar": {
"title": "$:/language/Docs/PaletteColours/blockquote-bar",
"text": "Blockquote bar"
},
"$:/language/Docs/PaletteColours/button-background": {
"title": "$:/language/Docs/PaletteColours/button-background",
"text": "Default button background"
},
"$:/language/Docs/PaletteColours/button-border": {
"title": "$:/language/Docs/PaletteColours/button-border",
"text": "Default button border"
},
"$:/language/Docs/PaletteColours/button-foreground": {
"title": "$:/language/Docs/PaletteColours/button-foreground",
"text": "Default button foreground"
},
"$:/language/Docs/PaletteColours/dirty-indicator": {
"title": "$:/language/Docs/PaletteColours/dirty-indicator",
"text": "Unsaved changes indicator"
},
"$:/language/Docs/PaletteColours/code-background": {
"title": "$:/language/Docs/PaletteColours/code-background",
"text": "Code background"
},
"$:/language/Docs/PaletteColours/code-border": {
"title": "$:/language/Docs/PaletteColours/code-border",
"text": "Code border"
},
"$:/language/Docs/PaletteColours/code-foreground": {
"title": "$:/language/Docs/PaletteColours/code-foreground",
"text": "Code foreground"
},
"$:/language/Docs/PaletteColours/download-background": {
"title": "$:/language/Docs/PaletteColours/download-background",
"text": "Download button background"
},
"$:/language/Docs/PaletteColours/download-foreground": {
"title": "$:/language/Docs/PaletteColours/download-foreground",
"text": "Download button foreground"
},
"$:/language/Docs/PaletteColours/dragger-background": {
"title": "$:/language/Docs/PaletteColours/dragger-background",
"text": "Dragger background"
},
"$:/language/Docs/PaletteColours/dragger-foreground": {
"title": "$:/language/Docs/PaletteColours/dragger-foreground",
"text": "Dragger foreground"
},
"$:/language/Docs/PaletteColours/dropdown-background": {
"title": "$:/language/Docs/PaletteColours/dropdown-background",
"text": "Dropdown background"
},
"$:/language/Docs/PaletteColours/dropdown-border": {
"title": "$:/language/Docs/PaletteColours/dropdown-border",
"text": "Dropdown border"
},
"$:/language/Docs/PaletteColours/dropdown-tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/dropdown-tab-background-selected",
"text": "Dropdown tab background for selected tabs"
},
"$:/language/Docs/PaletteColours/dropdown-tab-background": {
"title": "$:/language/Docs/PaletteColours/dropdown-tab-background",
"text": "Dropdown tab background"
},
"$:/language/Docs/PaletteColours/dropzone-background": {
"title": "$:/language/Docs/PaletteColours/dropzone-background",
"text": "Dropzone background"
},
"$:/language/Docs/PaletteColours/external-link-background-hover": {
"title": "$:/language/Docs/PaletteColours/external-link-background-hover",
"text": "External link background hover"
},
"$:/language/Docs/PaletteColours/external-link-background-visited": {
"title": "$:/language/Docs/PaletteColours/external-link-background-visited",
"text": "External link background visited"
},
"$:/language/Docs/PaletteColours/external-link-background": {
"title": "$:/language/Docs/PaletteColours/external-link-background",
"text": "External link background"
},
"$:/language/Docs/PaletteColours/external-link-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground-hover",
"text": "External link foreground hover"
},
"$:/language/Docs/PaletteColours/external-link-foreground-visited": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground-visited",
"text": "External link foreground visited"
},
"$:/language/Docs/PaletteColours/external-link-foreground": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground",
"text": "External link foreground"
},
"$:/language/Docs/PaletteColours/foreground": {
"title": "$:/language/Docs/PaletteColours/foreground",
"text": "General foreground"
},
"$:/language/Docs/PaletteColours/message-background": {
"title": "$:/language/Docs/PaletteColours/message-background",
"text": "Message box background"
},
"$:/language/Docs/PaletteColours/message-border": {
"title": "$:/language/Docs/PaletteColours/message-border",
"text": "Message box border"
},
"$:/language/Docs/PaletteColours/message-foreground": {
"title": "$:/language/Docs/PaletteColours/message-foreground",
"text": "Message box foreground"
},
"$:/language/Docs/PaletteColours/modal-backdrop": {
"title": "$:/language/Docs/PaletteColours/modal-backdrop",
"text": "Modal backdrop"
},
"$:/language/Docs/PaletteColours/modal-background": {
"title": "$:/language/Docs/PaletteColours/modal-background",
"text": "Modal background"
},
"$:/language/Docs/PaletteColours/modal-border": {
"title": "$:/language/Docs/PaletteColours/modal-border",
"text": "Modal border"
},
"$:/language/Docs/PaletteColours/modal-footer-background": {
"title": "$:/language/Docs/PaletteColours/modal-footer-background",
"text": "Modal footer background"
},
"$:/language/Docs/PaletteColours/modal-footer-border": {
"title": "$:/language/Docs/PaletteColours/modal-footer-border",
"text": "Modal footer border"
},
"$:/language/Docs/PaletteColours/modal-header-border": {
"title": "$:/language/Docs/PaletteColours/modal-header-border",
"text": "Modal header border"
},
"$:/language/Docs/PaletteColours/muted-foreground": {
"title": "$:/language/Docs/PaletteColours/muted-foreground",
"text": "General muted foreground"
},
"$:/language/Docs/PaletteColours/notification-background": {
"title": "$:/language/Docs/PaletteColours/notification-background",
"text": "Notification background"
},
"$:/language/Docs/PaletteColours/notification-border": {
"title": "$:/language/Docs/PaletteColours/notification-border",
"text": "Notification border"
},
"$:/language/Docs/PaletteColours/page-background": {
"title": "$:/language/Docs/PaletteColours/page-background",
"text": "Page background"
},
"$:/language/Docs/PaletteColours/pre-background": {
"title": "$:/language/Docs/PaletteColours/pre-background",
"text": "Preformatted code background"
},
"$:/language/Docs/PaletteColours/pre-border": {
"title": "$:/language/Docs/PaletteColours/pre-border",
"text": "Preformatted code border"
},
"$:/language/Docs/PaletteColours/primary": {
"title": "$:/language/Docs/PaletteColours/primary",
"text": "General primary"
},
"$:/language/Docs/PaletteColours/sidebar-button-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-button-foreground",
"text": "Sidebar button foreground"
},
"$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover",
"text": "Sidebar controls foreground hover"
},
"$:/language/Docs/PaletteColours/sidebar-controls-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground",
"text": "Sidebar controls foreground"
},
"$:/language/Docs/PaletteColours/sidebar-foreground-shadow": {
"title": "$:/language/Docs/PaletteColours/sidebar-foreground-shadow",
"text": "Sidebar foreground shadow"
},
"$:/language/Docs/PaletteColours/sidebar-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-foreground",
"text": "Sidebar foreground"
},
"$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover",
"text": "Sidebar muted foreground hover"
},
"$:/language/Docs/PaletteColours/sidebar-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground",
"text": "Sidebar muted foreground"
},
"$:/language/Docs/PaletteColours/sidebar-tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-background-selected",
"text": "Sidebar tab background for selected tabs"
},
"$:/language/Docs/PaletteColours/sidebar-tab-background": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-background",
"text": "Sidebar tab background"
},
"$:/language/Docs/PaletteColours/sidebar-tab-border-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-border-selected",
"text": "Sidebar tab border for selected tabs"
},
"$:/language/Docs/PaletteColours/sidebar-tab-border": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-border",
"text": "Sidebar tab border"
},
"$:/language/Docs/PaletteColours/sidebar-tab-divider": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-divider",
"text": "Sidebar tab divider"
},
"$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected",
"text": "Sidebar tab foreground for selected tabs"
},
"$:/language/Docs/PaletteColours/sidebar-tab-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground",
"text": "Sidebar tab foreground"
},
"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover",
"text": "Sidebar tiddler link foreground hover"
},
"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground",
"text": "Sidebar tiddler link foreground"
},
"$:/language/Docs/PaletteColours/site-title-foreground": {
"title": "$:/language/Docs/PaletteColours/site-title-foreground",
"text": "Site title foreground"
},
"$:/language/Docs/PaletteColours/static-alert-foreground": {
"title": "$:/language/Docs/PaletteColours/static-alert-foreground",
"text": "Static alert foreground"
},
"$:/language/Docs/PaletteColours/tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/tab-background-selected",
"text": "Tab background for selected tabs"
},
"$:/language/Docs/PaletteColours/tab-background": {
"title": "$:/language/Docs/PaletteColours/tab-background",
"text": "Tab background"
},
"$:/language/Docs/PaletteColours/tab-border-selected": {
"title": "$:/language/Docs/PaletteColours/tab-border-selected",
"text": "Tab border for selected tabs"
},
"$:/language/Docs/PaletteColours/tab-border": {
"title": "$:/language/Docs/PaletteColours/tab-border",
"text": "Tab border"
},
"$:/language/Docs/PaletteColours/tab-divider": {
"title": "$:/language/Docs/PaletteColours/tab-divider",
"text": "Tab divider"
},
"$:/language/Docs/PaletteColours/tab-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/tab-foreground-selected",
"text": "Tab foreground for selected tabs"
},
"$:/language/Docs/PaletteColours/tab-foreground": {
"title": "$:/language/Docs/PaletteColours/tab-foreground",
"text": "Tab foreground"
},
"$:/language/Docs/PaletteColours/table-border": {
"title": "$:/language/Docs/PaletteColours/table-border",
"text": "Table border"
},
"$:/language/Docs/PaletteColours/table-footer-background": {
"title": "$:/language/Docs/PaletteColours/table-footer-background",
"text": "Table footer background"
},
"$:/language/Docs/PaletteColours/table-header-background": {
"title": "$:/language/Docs/PaletteColours/table-header-background",
"text": "Table header background"
},
"$:/language/Docs/PaletteColours/tag-background": {
"title": "$:/language/Docs/PaletteColours/tag-background",
"text": "Tag background"
},
"$:/language/Docs/PaletteColours/tag-foreground": {
"title": "$:/language/Docs/PaletteColours/tag-foreground",
"text": "Tag foreground"
},
"$:/language/Docs/PaletteColours/tiddler-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-background",
"text": "Tiddler background"
},
"$:/language/Docs/PaletteColours/tiddler-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-border",
"text": "Tiddler border"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover",
"text": "Tiddler controls foreground hover"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected",
"text": "Tiddler controls foreground for selected controls"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground",
"text": "Tiddler controls foreground"
},
"$:/language/Docs/PaletteColours/tiddler-editor-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-background",
"text": "Tiddler editor background"
},
"$:/language/Docs/PaletteColours/tiddler-editor-border-image": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-border-image",
"text": "Tiddler editor border image"
},
"$:/language/Docs/PaletteColours/tiddler-editor-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-border",
"text": "Tiddler editor border"
},
"$:/language/Docs/PaletteColours/tiddler-editor-fields-even": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-even",
"text": "Tiddler editor background for even fields"
},
"$:/language/Docs/PaletteColours/tiddler-editor-fields-odd": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd",
"text": "Tiddler editor background for odd fields"
},
"$:/language/Docs/PaletteColours/tiddler-info-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-background",
"text": "Tiddler info panel background"
},
"$:/language/Docs/PaletteColours/tiddler-info-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-border",
"text": "Tiddler info panel border"
},
"$:/language/Docs/PaletteColours/tiddler-info-tab-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-tab-background",
"text": "Tiddler info panel tab background"
},
"$:/language/Docs/PaletteColours/tiddler-link-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-link-background",
"text": "Tiddler link background"
},
"$:/language/Docs/PaletteColours/tiddler-link-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-link-foreground",
"text": "Tiddler link foreground"
},
"$:/language/Docs/PaletteColours/tiddler-subtitle-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground",
"text": "Tiddler subtitle foreground"
},
"$:/language/Docs/PaletteColours/tiddler-title-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-title-foreground",
"text": "Tiddler title foreground"
},
"$:/language/Docs/PaletteColours/toolbar-new-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-new-button",
"text": "Toolbar 'new tiddler' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-options-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-options-button",
"text": "Toolbar 'options' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-save-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-save-button",
"text": "Toolbar 'save' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-info-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-info-button",
"text": "Toolbar 'info' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-edit-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-edit-button",
"text": "Toolbar 'edit' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-close-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-close-button",
"text": "Toolbar 'close' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-delete-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-delete-button",
"text": "Toolbar 'delete' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-cancel-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-cancel-button",
"text": "Toolbar 'cancel' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-done-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-done-button",
"text": "Toolbar 'done' button foreground"
},
"$:/language/Docs/PaletteColours/untagged-background": {
"title": "$:/language/Docs/PaletteColours/untagged-background",
"text": "Untagged pill background"
},
"$:/language/Docs/PaletteColours/very-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/very-muted-foreground",
"text": "Very muted foreground"
},
"$:/language/EditTemplate/Body/External/Hint": {
"title": "$:/language/EditTemplate/Body/External/Hint",
"text": "This tiddler shows content stored outside of the main TiddlyWiki file. You can edit the tags and fields but cannot directly edit the content itself"
},
"$:/language/EditTemplate/Body/Placeholder": {
"title": "$:/language/EditTemplate/Body/Placeholder",
"text": "Type the text for this tiddler"
},
"$:/language/EditTemplate/Body/Preview/Type/Output": {
"title": "$:/language/EditTemplate/Body/Preview/Type/Output",
"text": "output"
},
"$:/language/EditTemplate/Field/Remove/Caption": {
"title": "$:/language/EditTemplate/Field/Remove/Caption",
"text": "remove field"
},
"$:/language/EditTemplate/Field/Remove/Hint": {
"title": "$:/language/EditTemplate/Field/Remove/Hint",
"text": "Remove field"
},
"$:/language/EditTemplate/Fields/Add/Button": {
"title": "$:/language/EditTemplate/Fields/Add/Button",
"text": "add"
},
"$:/language/EditTemplate/Fields/Add/Name/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Name/Placeholder",
"text": "field name"
},
"$:/language/EditTemplate/Fields/Add/Prompt": {
"title": "$:/language/EditTemplate/Fields/Add/Prompt",
"text": "Add a new field:"
},
"$:/language/EditTemplate/Fields/Add/Value/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Value/Placeholder",
"text": "field value"
},
"$:/language/EditTemplate/Fields/Add/Dropdown/System": {
"title": "$:/language/EditTemplate/Fields/Add/Dropdown/System",
"text": "System fields"
},
"$:/language/EditTemplate/Fields/Add/Dropdown/User": {
"title": "$:/language/EditTemplate/Fields/Add/Dropdown/User",
"text": "User fields"
},
"$:/language/EditTemplate/Shadow/Warning": {
"title": "$:/language/EditTemplate/Shadow/Warning",
"text": "This is a shadow tiddler. Any changes you make will override the default version from the plugin <<pluginLink>>"
},
"$:/language/EditTemplate/Shadow/OverriddenWarning": {
"title": "$:/language/EditTemplate/Shadow/OverriddenWarning",
"text": "This is a modified shadow tiddler. You can revert to the default version in the plugin <<pluginLink>> by deleting this tiddler"
},
"$:/language/EditTemplate/Tags/Add/Button": {
"title": "$:/language/EditTemplate/Tags/Add/Button",
"text": "add"
},
"$:/language/EditTemplate/Tags/Add/Placeholder": {
"title": "$:/language/EditTemplate/Tags/Add/Placeholder",
"text": "tag name"
},
"$:/language/EditTemplate/Tags/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Tags/Dropdown/Caption",
"text": "tag list"
},
"$:/language/EditTemplate/Tags/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Tags/Dropdown/Hint",
"text": "Show tag list"
},
"$:/language/EditTemplate/Title/BadCharacterWarning": {
"title": "$:/language/EditTemplate/Title/BadCharacterWarning",
"text": "Warning: avoid using any of the characters <<bad-chars>> in tiddler titles"
},
"$:/language/EditTemplate/Title/Exists/Prompt": {
"title": "$:/language/EditTemplate/Title/Exists/Prompt",
"text": "Target tiddler already exists"
},
"$:/language/EditTemplate/Title/Relink/Prompt": {
"title": "$:/language/EditTemplate/Title/Relink/Prompt",
"text": "Update ''<$text text=<<fromTitle>>/>'' to ''<$text text=<<toTitle>>/>'' in the //tags// and //list// fields of other tiddlers"
},
"$:/language/EditTemplate/Type/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Type/Dropdown/Caption",
"text": "content type list"
},
"$:/language/EditTemplate/Type/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Type/Dropdown/Hint",
"text": "Show content type list"
},
"$:/language/EditTemplate/Type/Delete/Caption": {
"title": "$:/language/EditTemplate/Type/Delete/Caption",
"text": "delete content type"
},
"$:/language/EditTemplate/Type/Delete/Hint": {
"title": "$:/language/EditTemplate/Type/Delete/Hint",
"text": "Delete content type"
},
"$:/language/EditTemplate/Type/Placeholder": {
"title": "$:/language/EditTemplate/Type/Placeholder",
"text": "content type"
},
"$:/language/EditTemplate/Type/Prompt": {
"title": "$:/language/EditTemplate/Type/Prompt",
"text": "Type:"
},
"$:/language/Exporters/StaticRiver": {
"title": "$:/language/Exporters/StaticRiver",
"text": "Static HTML"
},
"$:/language/Exporters/JsonFile": {
"title": "$:/language/Exporters/JsonFile",
"text": "JSON file"
},
"$:/language/Exporters/CsvFile": {
"title": "$:/language/Exporters/CsvFile",
"text": "CSV file"
},
"$:/language/Exporters/TidFile": {
"title": "$:/language/Exporters/TidFile",
"text": "\".tid\" file"
},
"$:/language/Docs/Fields/_canonical_uri": {
"title": "$:/language/Docs/Fields/_canonical_uri",
"text": "The full URI of an external image tiddler"
},
"$:/language/Docs/Fields/bag": {
"title": "$:/language/Docs/Fields/bag",
"text": "The name of the bag from which a tiddler came"
},
"$:/language/Docs/Fields/caption": {
"title": "$:/language/Docs/Fields/caption",
"text": "The text to be displayed on a tab or button"
},
"$:/language/Docs/Fields/color": {
"title": "$:/language/Docs/Fields/color",
"text": "The CSS color value associated with a tiddler"
},
"$:/language/Docs/Fields/component": {
"title": "$:/language/Docs/Fields/component",
"text": "The name of the component responsible for an [[alert tiddler|AlertMechanism]]"
},
"$:/language/Docs/Fields/current-tiddler": {
"title": "$:/language/Docs/Fields/current-tiddler",
"text": "Used to cache the top tiddler in a [[history list|HistoryMechanism]]"
},
"$:/language/Docs/Fields/created": {
"title": "$:/language/Docs/Fields/created",
"text": "The date a tiddler was created"
},
"$:/language/Docs/Fields/creator": {
"title": "$:/language/Docs/Fields/creator",
"text": "The name of the person who created a tiddler"
},
"$:/language/Docs/Fields/dependents": {
"title": "$:/language/Docs/Fields/dependents",
"text": "For a plugin, lists the dependent plugin titles"
},
"$:/language/Docs/Fields/description": {
"title": "$:/language/Docs/Fields/description",
"text": "The descriptive text for a plugin, or a modal dialogue"
},
"$:/language/Docs/Fields/draft.of": {
"title": "$:/language/Docs/Fields/draft.of",
"text": "For draft tiddlers, contains the title of the tiddler of which this is a draft"
},
"$:/language/Docs/Fields/draft.title": {
"title": "$:/language/Docs/Fields/draft.title",
"text": "For draft tiddlers, contains the proposed new title of the tiddler"
},
"$:/language/Docs/Fields/footer": {
"title": "$:/language/Docs/Fields/footer",
"text": "The footer text for a wizard"
},
"$:/language/Docs/Fields/hack-to-give-us-something-to-compare-against": {
"title": "$:/language/Docs/Fields/hack-to-give-us-something-to-compare-against",
"text": "A temporary storage field used in [[$:/core/templates/static.content]]"
},
"$:/language/Docs/Fields/icon": {
"title": "$:/language/Docs/Fields/icon",
"text": "The title of the tiddler containing the icon associated with a tiddler"
},
"$:/language/Docs/Fields/library": {
"title": "$:/language/Docs/Fields/library",
"text": "If set to \"yes\" indicates that a tiddler should be saved as a JavaScript library"
},
"$:/language/Docs/Fields/list": {
"title": "$:/language/Docs/Fields/list",
"text": "An ordered list of tiddler titles associated with a tiddler"
},
"$:/language/Docs/Fields/list-before": {
"title": "$:/language/Docs/Fields/list-before",
"text": "If set, the title of a tiddler before which this tiddler should be added to the ordered list of tiddler titles, or at the start of the list if this field is present but empty"
},
"$:/language/Docs/Fields/list-after": {
"title": "$:/language/Docs/Fields/list-after",
"text": "If set, the title of the tiddler after which this tiddler should be added to the ordered list of tiddler titles"
},
"$:/language/Docs/Fields/modified": {
"title": "$:/language/Docs/Fields/modified",
"text": "The date and time at which a tiddler was last modified"
},
"$:/language/Docs/Fields/modifier": {
"title": "$:/language/Docs/Fields/modifier",
"text": "The tiddler title associated with the person who last modified a tiddler"
},
"$:/language/Docs/Fields/name": {
"title": "$:/language/Docs/Fields/name",
"text": "The human readable name associated with a plugin tiddler"
},
"$:/language/Docs/Fields/plugin-priority": {
"title": "$:/language/Docs/Fields/plugin-priority",
"text": "A numerical value indicating the priority of a plugin tiddler"
},
"$:/language/Docs/Fields/plugin-type": {
"title": "$:/language/Docs/Fields/plugin-type",
"text": "The type of plugin in a plugin tiddler"
},
"$:/language/Docs/Fields/revision": {
"title": "$:/language/Docs/Fields/revision",
"text": "The revision of the tiddler held at the server"
},
"$:/language/Docs/Fields/released": {
"title": "$:/language/Docs/Fields/released",
"text": "Date of a TiddlyWiki release"
},
"$:/language/Docs/Fields/source": {
"title": "$:/language/Docs/Fields/source",
"text": "The source URL associated with a tiddler"
},
"$:/language/Docs/Fields/subtitle": {
"title": "$:/language/Docs/Fields/subtitle",
"text": "The subtitle text for a wizard"
},
"$:/language/Docs/Fields/tags": {
"title": "$:/language/Docs/Fields/tags",
"text": "A list of tags associated with a tiddler"
},
"$:/language/Docs/Fields/text": {
"title": "$:/language/Docs/Fields/text",
"text": "The body text of a tiddler"
},
"$:/language/Docs/Fields/title": {
"title": "$:/language/Docs/Fields/title",
"text": "The unique name of a tiddler"
},
"$:/language/Docs/Fields/type": {
"title": "$:/language/Docs/Fields/type",
"text": "The content type of a tiddler"
},
"$:/language/Docs/Fields/version": {
"title": "$:/language/Docs/Fields/version",
"text": "Version information for a plugin"
},
"$:/language/Filters/AllTiddlers": {
"title": "$:/language/Filters/AllTiddlers",
"text": "All tiddlers except system tiddlers"
},
"$:/language/Filters/RecentSystemTiddlers": {
"title": "$:/language/Filters/RecentSystemTiddlers",
"text": "Recently modified tiddlers, including system tiddlers"
},
"$:/language/Filters/RecentTiddlers": {
"title": "$:/language/Filters/RecentTiddlers",
"text": "Recently modified tiddlers"
},
"$:/language/Filters/AllTags": {
"title": "$:/language/Filters/AllTags",
"text": "All tags except system tags"
},
"$:/language/Filters/Missing": {
"title": "$:/language/Filters/Missing",
"text": "Missing tiddlers"
},
"$:/language/Filters/Drafts": {
"title": "$:/language/Filters/Drafts",
"text": "Draft tiddlers"
},
"$:/language/Filters/Orphans": {
"title": "$:/language/Filters/Orphans",
"text": "Orphan tiddlers"
},
"$:/language/Filters/SystemTiddlers": {
"title": "$:/language/Filters/SystemTiddlers",
"text": "System tiddlers"
},
"$:/language/Filters/ShadowTiddlers": {
"title": "$:/language/Filters/ShadowTiddlers",
"text": "Shadow tiddlers"
},
"$:/language/Filters/OverriddenShadowTiddlers": {
"title": "$:/language/Filters/OverriddenShadowTiddlers",
"text": "Overridden shadow tiddlers"
},
"$:/language/Filters/SystemTags": {
"title": "$:/language/Filters/SystemTags",
"text": "System tags"
},
"$:/language/Filters/StoryList": {
"title": "$:/language/Filters/StoryList",
"text": "Tiddlers in the story river, excluding <$text text=\"$:/AdvancedSearch\"/>"
},
"$:/language/Filters/TypedTiddlers": {
"title": "$:/language/Filters/TypedTiddlers",
"text": "Non wiki-text tiddlers"
},
"GettingStarted": {
"title": "GettingStarted",
"text": "\\define lingo-base() $:/language/ControlPanel/Basics/\nWelcome to ~TiddlyWiki and the ~TiddlyWiki community\n\nBefore you start storing important information in ~TiddlyWiki it is important to make sure that you can reliably save changes. See https://tiddlywiki.com/#GettingStarted for details\n\n!! Set up this ~TiddlyWiki\n\n<div class=\"tc-control-panel\">\n\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n</div>\n\nSee the [[control panel|$:/ControlPanel]] for more options.\n"
},
"$:/language/Help/build": {
"title": "$:/language/Help/build",
"description": "Automatically run configured commands",
"text": "Build the specified build targets for the current wiki. If no build targets are specified then all available targets will be built.\n\n```\n--build <target> [<target> ...]\n```\n\nBuild targets are defined in the `tiddlywiki.info` file of a wiki folder.\n\n"
},
"$:/language/Help/clearpassword": {
"title": "$:/language/Help/clearpassword",
"description": "Clear a password for subsequent crypto operations",
"text": "Clear the password for subsequent crypto operations\n\n```\n--clearpassword\n```\n"
},
"$:/language/Help/default": {
"title": "$:/language/Help/default",
"text": "\\define commandTitle()\n$:/language/Help/$(command)$\n\\end\n```\nusage: tiddlywiki [<wikifolder>] [--<command> [<args>...]...]\n```\n\nAvailable commands:\n\n<ul>\n<$list filter=\"[commands[]sort[title]]\" variable=\"command\">\n<li><$link to=<<commandTitle>>><$macrocall $name=\"command\" $type=\"text/plain\" $output=\"text/plain\"/></$link>: <$transclude tiddler=<<commandTitle>> field=\"description\"/></li>\n</$list>\n</ul>\n\nTo get detailed help on a command:\n\n```\ntiddlywiki --help <command>\n```\n"
},
"$:/language/Help/editions": {
"title": "$:/language/Help/editions",
"description": "Lists the available editions of TiddlyWiki",
"text": "Lists the names and descriptions of the available editions. You can create a new wiki of a specified edition with the `--init` command.\n\n```\n--editions\n```\n"
},
"$:/language/Help/fetch": {
"title": "$:/language/Help/fetch",
"description": "Fetch tiddlers from wiki by URL",
"text": "Fetch one or more files over HTTP/HTTPS, and import the tiddlers matching a filter, optionally transforming the incoming titles.\n\n```\n--fetch file <url> <import-filter> <transform-filter>\n--fetch files <url-filter> <import-filter> <transform-filter>\n--fetch raw-file <url> <transform-filter>\n--fetch raw-files <url-filter> <transform-filter>\n```\n\nThe \"file\" and \"files\" variants fetch the specified files and attempt to import the tiddlers within them (the same processing as if the files were dragged into the browser window). The \"raw-file\" and \"raw-files\" variants fetch the specified files and then store the raw file data in tiddlers, without applying the import logic.\n\nWith the \"file\" and \"raw-file\" variants only a single file is fetched and the first parameter is the URL of the file to read.\n\nWith the \"files\" and \"raw-files\" variants, multiple files are fetched and the first parameter is a filter yielding a list of URLs of the files to read. For example, given a set of tiddlers tagged \"remote-server\" that have a field \"url\" the filter `[tag[remote-server]get[url]]` will retrieve all the available URLs.\n\nFor the \"file\" and \"files\" variants, the `<import-filter>` parameter specifies a filter determining which tiddlers are imported. It defaults to `[all[tiddlers]]` if not provided.\n\nFor all variants, the `<transform-filter>` parameter specifies an optional filter that transforms the titles of the imported tiddlers. For example, `[addprefix[$:/myimports/]]` would add the prefix `$:/myimports/` to each title.\n\nPreceding the `--fetch` command with `--verbose` will output progress information during the import.\n\nNote that TiddlyWiki will not fetch an older version of an already loaded plugin.\n\nThe following example retrieves all the non-system tiddlers from https://tiddlywiki.com and saves them to a JSON file:\n\n```\ntiddlywiki --verbose --fetch file \"https://tiddlywiki.com/\" \"[!is[system]]\" \"\" --rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[!is[system]]\"\n```\n\nThe following example retrieves the \"favicon\" file from tiddlywiki.com and saves it in a file called \"output.ico\". Note that the intermediate tiddler \"Icon Tiddler\" is quoted in the \"--fetch\" command because it is being used as a transformation filter to replace the default title, while there are no quotes for the \"--savetiddler\" command because it is being used directly as a title.\n\n```\ntiddlywiki --verbose --fetch raw-file \"https://tiddlywiki.com/favicon.ico\" \"[[Icon Tiddler]]\" --savetiddler \"Icon Tiddler\" output.ico\n```\n\n"
},
"$:/language/Help/help": {
"title": "$:/language/Help/help",
"description": "Display help for TiddlyWiki commands",
"text": "Displays help text for a command:\n\n```\n--help [<command>]\n```\n\nIf the command name is omitted then a list of available commands is displayed.\n"
},
"$:/language/Help/import": {
"title": "$:/language/Help/import",
"description": "Import tiddlers from a file",
"text": "Import tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The deserializer must be explicitly specified, unlike the `load` command which infers the deserializer from the file extension.\n\n```\n--import <filepath> <deserializer> [<title>] [<encoding>]\n```\n\nThe deserializers in the core include:\n\n* application/javascript\n* application/json\n* application/x-tiddler\n* application/x-tiddler-html-div\n* application/x-tiddlers\n* text/html\n* text/plain\n\nThe title of the imported tiddler defaults to the filename.\n\nThe encoding defaults to \"utf8\", but can be \"base64\" for importing binary files.\n\nNote that TiddlyWiki will not import an older version of an already loaded plugin.\n"
},
"$:/language/Help/init": {
"title": "$:/language/Help/init",
"description": "Initialise a new wiki folder",
"text": "Initialise an empty [[WikiFolder|WikiFolders]] with a copy of the specified edition.\n\n```\n--init <edition> [<edition> ...]\n```\n\nFor example:\n\n```\ntiddlywiki ./MyWikiFolder --init empty\n```\n\nNote:\n\n* The wiki folder directory will be created if necessary\n* The \"edition\" defaults to ''empty''\n* The init command will fail if the wiki folder is not empty\n* The init command removes any `includeWikis` definitions in the edition's `tiddlywiki.info` file\n* When multiple editions are specified, editions initialised later will overwrite any files shared with earlier editions (so, the final `tiddlywiki.info` file will be copied from the last edition)\n* `--editions` returns a list of available editions\n"
},
"$:/language/Help/load": {
"title": "$:/language/Help/load",
"description": "Load tiddlers from a file",
"text": "Load tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The processing applied to incoming files is determined by the file extension. Use the alternative `import` command if you need to specify the deserializer and encoding explicitly.\n\n```\n--load <filepath>\n--load <dirpath>\n```\n\nTo load tiddlers from an encrypted TiddlyWiki file you should first specify the password with the PasswordCommand. For example:\n\n```\ntiddlywiki ./MyWiki --password pa55w0rd --load my_encrypted_wiki.html\n```\n\nNote that TiddlyWiki will not load an older version of an already loaded plugin.\n"
},
"$:/language/Help/makelibrary": {
"title": "$:/language/Help/makelibrary",
"description": "Construct library plugin required by upgrade process",
"text": "Constructs the `$:/UpgradeLibrary` tiddler for the upgrade process.\n\nThe upgrade library is formatted as an ordinary plugin tiddler with the plugin type `library`. It contains a copy of each of the plugins, themes and language packs available within the TiddlyWiki5 repository.\n\nThis command is intended for internal use; it is only relevant to users constructing a custom upgrade procedure.\n\n```\n--makelibrary <title>\n```\n\nThe title argument defaults to `$:/UpgradeLibrary`.\n"
},
"$:/language/Help/notfound": {
"title": "$:/language/Help/notfound",
"text": "No such help item"
},
"$:/language/Help/output": {
"title": "$:/language/Help/output",
"description": "Set the base output directory for subsequent commands",
"text": "Sets the base output directory for subsequent commands. The default output directory is the `output` subdirectory of the edition directory.\n\n```\n--output <pathname>\n```\n\nIf the specified pathname is relative then it is resolved relative to the current working directory. For example `--output .` sets the output directory to the current working directory.\n\n"
},
"$:/language/Help/password": {
"title": "$:/language/Help/password",
"description": "Set a password for subsequent crypto operations",
"text": "Set a password for subsequent crypto operations\n\n```\n--password <password>\n```\n\n''Note'': This should not be used for serving TiddlyWiki with password protection. Instead, see the password option under the [[ServerCommand]].\n"
},
"$:/language/Help/render": {
"title": "$:/language/Help/render",
"description": "Renders individual tiddlers to files",
"text": "Render individual tiddlers identified by a filter and save the results to the specified files.\n\nOptionally, the title of a template tiddler can be specified. In this case, instead of directly rendering each tiddler, the template tiddler is rendered with the \"currentTiddler\" variable set to the title of the tiddler that is being rendered.\n\nA name and value for an additional variable may optionally also be specified.\n\n```\n--render <tiddler-filter> [<filename-filter>] [<render-type>] [<template>] [<name>] [<value>]\n```\n\n* ''tiddler-filter'': A filter identifying the tiddler(s) to be rendered\n* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]addsuffix[.html]]`, which uses the unchanged tiddler title as the filename\n* ''template'': Optional template through which each tiddler is rendered\n* ''render-type'': Optional render type: `text/html` (the default) returns the full HTML text and `text/plain` just returns the text content (ie it ignores HTML tags and other unprintable material)\n* ''name'': Name of optional variable\n* ''value'': Value of optional variable\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nNotes:\n\n* The output directory is not cleared of any existing files\n* Any missing directories in the path to the filename are automatically created.\n* When referring to a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets : `--render \"[[Motovun Jack.jpg]]\"`\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being rendered, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`\n* The `--render` command is a more flexible replacement for both the `--rendertiddler` and `--rendertiddlers` commands, which are deprecated\n\nExamples:\n\n* `--render \"[!is[system]]\" \"[encodeuricomponent[]addprefix[tiddlers/]addsuffix[.html]]\"` -- renders all non-system tiddlers as files in the subdirectory \"tiddlers\" with URL-encoded titles and the extension HTML\n\n"
},
"$:/language/Help/rendertiddler": {
"title": "$:/language/Help/rendertiddler",
"description": "Render an individual tiddler as a specified ContentType",
"text": "(Note: The `--rendertiddler` command is deprecated in favour of the new, more flexible `--render` command)\n\nRender an individual tiddler as a specified ContentType, defaulting to `text/html` and save it to the specified filename.\n\nOptionally the title of a template tiddler can be specified, in which case the template tiddler is rendered with the \"currentTiddler\" variable set to the tiddler that is being rendered (the first parameter value).\n\nA name and value for an additional variable may optionally also be specified.\n\n```\n--rendertiddler <title> <filename> [<type>] [<template>] [<name>] [<value>]\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n\nFor example, the following command saves all tiddlers matching the filter `[tag[done]]` to a JSON file titled `output.json` by employing the core template `$:/core/templates/exporters/JsonFile`.\n\n```\n--rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[tag[done]]\"\n```\n"
},
"$:/language/Help/rendertiddlers": {
"title": "$:/language/Help/rendertiddlers",
"description": "Render tiddlers matching a filter to a specified ContentType",
"text": "(Note: The `--rendertiddlers` command is deprecated in favour of the new, more flexible `--render` command)\n\nRender a set of tiddlers matching a filter to separate files of a specified ContentType (defaults to `text/html`) and extension (defaults to `.html`).\n\n```\n--rendertiddlers <filter> <template> <pathname> [<type>] [<extension>] [\"noclean\"]\n```\n\nFor example:\n\n```\n--rendertiddlers [!is[system]] $:/core/templates/static.tiddler.html ./static text/plain\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny files in the target directory are deleted unless the ''noclean'' flag is specified. The target directory is recursively created if it is missing.\n"
},
"$:/language/Help/save": {
"title": "$:/language/Help/save",
"description": "Saves individual raw tiddlers to files",
"text": "Saves individual tiddlers identified by a filter in their raw text or binary format to the specified files.\n\n```\n--save <tiddler-filter> <filename-filter>\n```\n\n* ''tiddler-filter'': A filter identifying the tiddler(s) to be saved\n* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]]`, which uses the unchanged tiddler title as the filename\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nNotes:\n\n* The output directory is not cleared of any existing files\n* Any missing directories in the path to the filename are automatically created.\n* When saving a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets : `--save \"[[Motovun Jack.jpg]]\"`\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being saved, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`\n* The `--save` command is a more flexible replacement for both the `--savetiddler` and `--savetiddlers` commands, which are deprecated\n\nExamples:\n\n* `--save \"[!is[system]is[image]]\" \"[encodeuricomponent[]addprefix[tiddlers/]]\"` -- saves all non-system image tiddlers as files in the subdirectory \"tiddlers\" with URL-encoded titles\n"
},
"$:/language/Help/savetiddler": {
"title": "$:/language/Help/savetiddler",
"description": "Saves a raw tiddler to a file",
"text": "(Note: The `--savetiddler` command is deprecated in favour of the new, more flexible `--save` command)\n\nSaves an individual tiddler in its raw text or binary format to the specified filename.\n\n```\n--savetiddler <title> <filename>\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n"
},
"$:/language/Help/savetiddlers": {
"title": "$:/language/Help/savetiddlers",
"description": "Saves a group of raw tiddlers to a directory",
"text": "(Note: The `--savetiddlers` command is deprecated in favour of the new, more flexible `--save` command)\n\nSaves a group of tiddlers in their raw text or binary format to the specified directory.\n\n```\n--savetiddlers <filter> <pathname> [\"noclean\"]\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nThe output directory is cleared of existing files before saving the specified files. The deletion can be disabled by specifying the ''noclean'' flag.\n\nAny missing directories in the pathname are automatically created.\n"
},
"$:/language/Help/server": {
"title": "$:/language/Help/server",
"description": "Provides an HTTP server interface to TiddlyWiki",
"text": "The server built in to TiddlyWiki5 is very simple. Although compatible with TiddlyWeb it doesn't support many of the features needed for robust Internet-facing usage.\n\nAt the root, it serves a rendering of a specified tiddler. Away from the root, it serves individual tiddlers encoded in JSON, and supports the basic HTTP operations for `GET`, `PUT` and `DELETE`.\n\n```\n--server <port> <roottiddler> <rendertype> <servetype> <username> <password> <host> <pathprefix>\n```\n\nThe parameters are:\n\n* ''port'' - port number to serve from (defaults to \"8080\")\n* ''roottiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\")\n* ''rendertype'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''servetype'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''username'' - the default username for signing edits\n* ''password'' - optional password for basic authentication\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''pathprefix'' - optional prefix for paths\n\nIf the password parameter is specified then the browser will prompt the user for the username and password. Note that the password is transmitted in plain text so this implementation isn't suitable for general use.\n\nFor example:\n\n```\n--server 8080 $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n\nThe username and password can be specified as empty strings if you need to set the hostname or pathprefix and don't want to require a password:\n\n```\n--server 8080 $:/core/save/all text/plain text/html \"\" \"\" 192.168.0.245\n```\n\nTo run multiple TiddlyWiki servers at the same time you'll need to put each one on a different port.\n"
},
"$:/language/Help/setfield": {
"title": "$:/language/Help/setfield",
"description": "Prepares external tiddlers for use",
"text": "//Note that this command is experimental and may change or be replaced before being finalised//\n\nSets the specified field of a group of tiddlers to the result of wikifying a template tiddler with the `currentTiddler` variable set to the tiddler.\n\n```\n--setfield <filter> <fieldname> <templatetitle> <rendertype>\n```\n\nThe parameters are:\n\n* ''filter'' - filter identifying the tiddlers to be affected\n* ''fieldname'' - the field to modify (defaults to \"text\")\n* ''templatetitle'' - the tiddler to wikify into the specified field. If blank or missing then the specified field is deleted\n* ''rendertype'' - the text type to render (defaults to \"text/plain\"; \"text/html\" can be used to include HTML tags)\n"
},
"$:/language/Help/unpackplugin": {
"title": "$:/language/Help/unpackplugin",
"description": "Unpack the payload tiddlers from a plugin",
"text": "Extract the payload tiddlers from a plugin, creating them as ordinary tiddlers:\n\n```\n--unpackplugin <title>\n```\n"
},
"$:/language/Help/verbose": {
"title": "$:/language/Help/verbose",
"description": "Triggers verbose output mode",
"text": "Triggers verbose output, useful for debugging\n\n```\n--verbose\n```\n"
},
"$:/language/Help/version": {
"title": "$:/language/Help/version",
"description": "Displays the version number of TiddlyWiki",
"text": "Displays the version number of TiddlyWiki.\n\n```\n--version\n```\n"
},
"$:/language/Import/Imported/Hint": {
"title": "$:/language/Import/Imported/Hint",
"text": "The following tiddlers were imported:"
},
"$:/language/Import/Listing/Cancel/Caption": {
"title": "$:/language/Import/Listing/Cancel/Caption",
"text": "Cancel"
},
"$:/language/Import/Listing/Hint": {
"title": "$:/language/Import/Listing/Hint",
"text": "These tiddlers are ready to import:"
},
"$:/language/Import/Listing/Import/Caption": {
"title": "$:/language/Import/Listing/Import/Caption",
"text": "Import"
},
"$:/language/Import/Listing/Select/Caption": {
"title": "$:/language/Import/Listing/Select/Caption",
"text": "Select"
},
"$:/language/Import/Listing/Status/Caption": {
"title": "$:/language/Import/Listing/Status/Caption",
"text": "Status"
},
"$:/language/Import/Listing/Title/Caption": {
"title": "$:/language/Import/Listing/Title/Caption",
"text": "Title"
},
"$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible": {
"title": "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible",
"text": "Blocked incompatible or obsolete plugin"
},
"$:/language/Import/Upgrader/Plugins/Suppressed/Version": {
"title": "$:/language/Import/Upgrader/Plugins/Suppressed/Version",
"text": "Blocked plugin (due to incoming <<incoming>> being older than existing <<existing>>)"
},
"$:/language/Import/Upgrader/Plugins/Upgraded": {
"title": "$:/language/Import/Upgrader/Plugins/Upgraded",
"text": "Upgraded plugin from <<incoming>> to <<upgraded>>"
},
"$:/language/Import/Upgrader/State/Suppressed": {
"title": "$:/language/Import/Upgrader/State/Suppressed",
"text": "Blocked temporary state tiddler"
},
"$:/language/Import/Upgrader/System/Suppressed": {
"title": "$:/language/Import/Upgrader/System/Suppressed",
"text": "Blocked system tiddler"
},
"$:/language/Import/Upgrader/ThemeTweaks/Created": {
"title": "$:/language/Import/Upgrader/ThemeTweaks/Created",
"text": "Migrated theme tweak from <$text text=<<from>>/>"
},
"$:/language/AboveStory/ClassicPlugin/Warning": {
"title": "$:/language/AboveStory/ClassicPlugin/Warning",
"text": "It looks like you are trying to load a plugin designed for ~TiddlyWiki Classic. Please note that [[these plugins do not work with TiddlyWiki version 5.x.x|https://tiddlywiki.com/#TiddlyWikiClassic]]. ~TiddlyWiki Classic plugins detected:"
},
"$:/language/BinaryWarning/Prompt": {
"title": "$:/language/BinaryWarning/Prompt",
"text": "This tiddler contains binary data"
},
"$:/language/ClassicWarning/Hint": {
"title": "$:/language/ClassicWarning/Hint",
"text": "This tiddler is written in TiddlyWiki Classic wiki text format, which is not fully compatible with TiddlyWiki version 5. See https://tiddlywiki.com/static/Upgrading.html for more details."
},
"$:/language/ClassicWarning/Upgrade/Caption": {
"title": "$:/language/ClassicWarning/Upgrade/Caption",
"text": "upgrade"
},
"$:/language/CloseAll/Button": {
"title": "$:/language/CloseAll/Button",
"text": "close all"
},
"$:/language/ColourPicker/Recent": {
"title": "$:/language/ColourPicker/Recent",
"text": "Recent:"
},
"$:/language/ConfirmCancelTiddler": {
"title": "$:/language/ConfirmCancelTiddler",
"text": "Do you wish to discard changes to the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmDeleteTiddler": {
"title": "$:/language/ConfirmDeleteTiddler",
"text": "Do you wish to delete the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmOverwriteTiddler": {
"title": "$:/language/ConfirmOverwriteTiddler",
"text": "Do you wish to overwrite the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmEditShadowTiddler": {
"title": "$:/language/ConfirmEditShadowTiddler",
"text": "You are about to edit a ShadowTiddler. Any changes will override the default system making future upgrades non-trivial. Are you sure you want to edit \"<$text text=<<title>>/>\"?"
},
"$:/language/Count": {
"title": "$:/language/Count",
"text": "count"
},
"$:/language/DefaultNewTiddlerTitle": {
"title": "$:/language/DefaultNewTiddlerTitle",
"text": "New Tiddler"
},
"$:/language/DropMessage": {
"title": "$:/language/DropMessage",
"text": "Drop here (or use the 'Escape' key to cancel)"
},
"$:/language/Encryption/Cancel": {
"title": "$:/language/Encryption/Cancel",
"text": "Cancel"
},
"$:/language/Encryption/ConfirmClearPassword": {
"title": "$:/language/Encryption/ConfirmClearPassword",
"text": "Do you wish to clear the password? This will remove the encryption applied when saving this wiki"
},
"$:/language/Encryption/PromptSetPassword": {
"title": "$:/language/Encryption/PromptSetPassword",
"text": "Set a new password for this TiddlyWiki"
},
"$:/language/Encryption/Username": {
"title": "$:/language/Encryption/Username",
"text": "Username"
},
"$:/language/Encryption/Password": {
"title": "$:/language/Encryption/Password",
"text": "Password"
},
"$:/language/Encryption/RepeatPassword": {
"title": "$:/language/Encryption/RepeatPassword",
"text": "Repeat password"
},
"$:/language/Encryption/PasswordNoMatch": {
"title": "$:/language/Encryption/PasswordNoMatch",
"text": "Passwords do not match"
},
"$:/language/Encryption/SetPassword": {
"title": "$:/language/Encryption/SetPassword",
"text": "Set password"
},
"$:/language/Error/Caption": {
"title": "$:/language/Error/Caption",
"text": "Error"
},
"$:/language/Error/EditConflict": {
"title": "$:/language/Error/EditConflict",
"text": "File changed on server"
},
"$:/language/Error/Filter": {
"title": "$:/language/Error/Filter",
"text": "Filter error"
},
"$:/language/Error/FilterSyntax": {
"title": "$:/language/Error/FilterSyntax",
"text": "Syntax error in filter expression"
},
"$:/language/Error/IsFilterOperator": {
"title": "$:/language/Error/IsFilterOperator",
"text": "Filter Error: Unknown operand for the 'is' filter operator"
},
"$:/language/Error/LoadingPluginLibrary": {
"title": "$:/language/Error/LoadingPluginLibrary",
"text": "Error loading plugin library"
},
"$:/language/Error/RecursiveTransclusion": {
"title": "$:/language/Error/RecursiveTransclusion",
"text": "Recursive transclusion error in transclude widget"
},
"$:/language/Error/RetrievingSkinny": {
"title": "$:/language/Error/RetrievingSkinny",
"text": "Error retrieving skinny tiddler list"
},
"$:/language/Error/SavingToTWEdit": {
"title": "$:/language/Error/SavingToTWEdit",
"text": "Error saving to TWEdit"
},
"$:/language/Error/WhileSaving": {
"title": "$:/language/Error/WhileSaving",
"text": "Error while saving"
},
"$:/language/Error/XMLHttpRequest": {
"title": "$:/language/Error/XMLHttpRequest",
"text": "XMLHttpRequest error code"
},
"$:/language/InternalJavaScriptError/Title": {
"title": "$:/language/InternalJavaScriptError/Title",
"text": "Internal JavaScript Error"
},
"$:/language/InternalJavaScriptError/Hint": {
"title": "$:/language/InternalJavaScriptError/Hint",
"text": "Well, this is embarrassing. It is recommended that you restart TiddlyWiki by refreshing your browser"
},
"$:/language/InvalidFieldName": {
"title": "$:/language/InvalidFieldName",
"text": "Illegal characters in field name \"<$text text=<<fieldName>>/>\". Fields can only contain lowercase letters, digits and the characters underscore (`_`), hyphen (`-`) and period (`.`)"
},
"$:/language/LazyLoadingWarning": {
"title": "$:/language/LazyLoadingWarning",
"text": "<p>Trying to load external content from ''<$text text={{!!_canonical_uri}}/>''</p><p>If this message doesn't disappear, either the tiddler content type doesn't match the type of the external content, or you may be using a browser that doesn't support external content for wikis loaded as standalone files. See https://tiddlywiki.com/#ExternalText</p>"
},
"$:/language/LoginToTiddlySpace": {
"title": "$:/language/LoginToTiddlySpace",
"text": "Login to TiddlySpace"
},
"$:/language/Manager/Controls/FilterByTag/None": {
"title": "$:/language/Manager/Controls/FilterByTag/None",
"text": "(none)"
},
"$:/language/Manager/Controls/FilterByTag/Prompt": {
"title": "$:/language/Manager/Controls/FilterByTag/Prompt",
"text": "Filter by tag:"
},
"$:/language/Manager/Controls/Order/Prompt": {
"title": "$:/language/Manager/Controls/Order/Prompt",
"text": "Reverse order"
},
"$:/language/Manager/Controls/Search/Placeholder": {
"title": "$:/language/Manager/Controls/Search/Placeholder",
"text": "Search"
},
"$:/language/Manager/Controls/Search/Prompt": {
"title": "$:/language/Manager/Controls/Search/Prompt",
"text": "Search:"
},
"$:/language/Manager/Controls/Show/Option/Tags": {
"title": "$:/language/Manager/Controls/Show/Option/Tags",
"text": "tags"
},
"$:/language/Manager/Controls/Show/Option/Tiddlers": {
"title": "$:/language/Manager/Controls/Show/Option/Tiddlers",
"text": "tiddlers"
},
"$:/language/Manager/Controls/Show/Prompt": {
"title": "$:/language/Manager/Controls/Show/Prompt",
"text": "Show:"
},
"$:/language/Manager/Controls/Sort/Prompt": {
"title": "$:/language/Manager/Controls/Sort/Prompt",
"text": "Sort by:"
},
"$:/language/Manager/Item/Colour": {
"title": "$:/language/Manager/Item/Colour",
"text": "Colour"
},
"$:/language/Manager/Item/Fields": {
"title": "$:/language/Manager/Item/Fields",
"text": "Fields"
},
"$:/language/Manager/Item/Icon/None": {
"title": "$:/language/Manager/Item/Icon/None",
"text": "(none)"
},
"$:/language/Manager/Item/Icon": {
"title": "$:/language/Manager/Item/Icon",
"text": "Icon"
},
"$:/language/Manager/Item/RawText": {
"title": "$:/language/Manager/Item/RawText",
"text": "Raw text"
},
"$:/language/Manager/Item/Tags": {
"title": "$:/language/Manager/Item/Tags",
"text": "Tags"
},
"$:/language/Manager/Item/Tools": {
"title": "$:/language/Manager/Item/Tools",
"text": "Tools"
},
"$:/language/Manager/Item/WikifiedText": {
"title": "$:/language/Manager/Item/WikifiedText",
"text": "Wikified text"
},
"$:/language/MissingTiddler/Hint": {
"title": "$:/language/MissingTiddler/Hint",
"text": "Missing tiddler \"<$text text=<<currentTiddler>>/>\" -- click {{||$:/core/ui/Buttons/edit}} to create"
},
"$:/language/No": {
"title": "$:/language/No",
"text": "No"
},
"$:/language/OfficialPluginLibrary": {
"title": "$:/language/OfficialPluginLibrary",
"text": "Official ~TiddlyWiki Plugin Library"
},
"$:/language/OfficialPluginLibrary/Hint": {
"title": "$:/language/OfficialPluginLibrary/Hint",
"text": "The official ~TiddlyWiki plugin library at tiddlywiki.com. Plugins, themes and language packs are maintained by the core team."
},
"$:/language/PluginReloadWarning": {
"title": "$:/language/PluginReloadWarning",
"text": "Please save {{$:/core/ui/Buttons/save-wiki}} and reload {{$:/core/ui/Buttons/refresh}} to allow changes to plugins to take effect"
},
"$:/language/RecentChanges/DateFormat": {
"title": "$:/language/RecentChanges/DateFormat",
"text": "DDth MMM YYYY"
},
"$:/language/SystemTiddler/Tooltip": {
"title": "$:/language/SystemTiddler/Tooltip",
"text": "This is a system tiddler"
},
"$:/language/SystemTiddlers/Include/Prompt": {
"title": "$:/language/SystemTiddlers/Include/Prompt",
"text": "Include system tiddlers"
},
"$:/language/TagManager/Colour/Heading": {
"title": "$:/language/TagManager/Colour/Heading",
"text": "Colour"
},
"$:/language/TagManager/Count/Heading": {
"title": "$:/language/TagManager/Count/Heading",
"text": "Count"
},
"$:/language/TagManager/Icon/Heading": {
"title": "$:/language/TagManager/Icon/Heading",
"text": "Icon"
},
"$:/language/TagManager/Info/Heading": {
"title": "$:/language/TagManager/Info/Heading",
"text": "Info"
},
"$:/language/TagManager/Tag/Heading": {
"title": "$:/language/TagManager/Tag/Heading",
"text": "Tag"
},
"$:/language/Tiddler/DateFormat": {
"title": "$:/language/Tiddler/DateFormat",
"text": "DDth MMM YYYY at hh12:0mmam"
},
"$:/language/UnsavedChangesWarning": {
"title": "$:/language/UnsavedChangesWarning",
"text": "You have unsaved changes in TiddlyWiki"
},
"$:/language/Yes": {
"title": "$:/language/Yes",
"text": "Yes"
},
"$:/language/Modals/Download": {
"title": "$:/language/Modals/Download",
"subtitle": "Download changes",
"footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
"help": "https://tiddlywiki.com/static/DownloadingChanges.html",
"text": "Your browser only supports manual saving.\n\nTo save your modified wiki, right click on the download link below and select \"Download file\" or \"Save file\", and then choose the folder and filename.\n\n//You can marginally speed things up by clicking the link with the control key (Windows) or the options/alt key (Mac OS X). You will not be prompted for the folder or filename, but your browser is likely to give it an unrecognisable name -- you may need to rename the file to include an `.html` extension before you can do anything useful with it.//\n\nOn smartphones that do not allow files to be downloaded you can instead bookmark the link, and then sync your bookmarks to a desktop computer from where the wiki can be saved normally.\n"
},
"$:/language/Modals/SaveInstructions": {
"title": "$:/language/Modals/SaveInstructions",
"subtitle": "Save your work",
"footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
"help": "https://tiddlywiki.com/static/SavingChanges.html",
"text": "Your changes to this wiki need to be saved as a ~TiddlyWiki HTML file.\n\n!!! Desktop browsers\n\n# Select ''Save As'' from the ''File'' menu\n# Choose a filename and location\n#* Some browsers also require you to explicitly specify the file saving format as ''Webpage, HTML only'' or similar\n# Close this tab\n\n!!! Smartphone browsers\n\n# Create a bookmark to this page\n#* If you've got iCloud or Google Sync set up then the bookmark will automatically sync to your desktop where you can open it and save it as above\n# Close this tab\n\n//If you open the bookmark again in Mobile Safari you will see this message again. If you want to go ahead and use the file, just click the ''close'' button below//\n"
},
"$:/config/NewJournal/Title": {
"title": "$:/config/NewJournal/Title",
"text": "DDth MMM YYYY"
},
"$:/config/NewJournal/Text": {
"title": "$:/config/NewJournal/Text",
"text": ""
},
"$:/config/NewJournal/Tags": {
"title": "$:/config/NewJournal/Tags",
"text": "Journal"
},
"$:/language/Notifications/Save/Done": {
"title": "$:/language/Notifications/Save/Done",
"text": "Saved wiki"
},
"$:/language/Notifications/Save/Starting": {
"title": "$:/language/Notifications/Save/Starting",
"text": "Starting to save wiki"
},
"$:/language/Search/DefaultResults/Caption": {
"title": "$:/language/Search/DefaultResults/Caption",
"text": "List"
},
"$:/language/Search/Filter/Caption": {
"title": "$:/language/Search/Filter/Caption",
"text": "Filter"
},
"$:/language/Search/Filter/Hint": {
"title": "$:/language/Search/Filter/Hint",
"text": "Search via a [[filter expression|https://tiddlywiki.com/static/Filters.html]]"
},
"$:/language/Search/Filter/Matches": {
"title": "$:/language/Search/Filter/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/Matches": {
"title": "$:/language/Search/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/Matches/All": {
"title": "$:/language/Search/Matches/All",
"text": "All matches:"
},
"$:/language/Search/Matches/Title": {
"title": "$:/language/Search/Matches/Title",
"text": "Title matches:"
},
"$:/language/Search/Search": {
"title": "$:/language/Search/Search",
"text": "Search"
},
"$:/language/Search/Search/TooShort": {
"title": "$:/language/Search/Search/TooShort",
"text": "Search text too short"
},
"$:/language/Search/Shadows/Caption": {
"title": "$:/language/Search/Shadows/Caption",
"text": "Shadows"
},
"$:/language/Search/Shadows/Hint": {
"title": "$:/language/Search/Shadows/Hint",
"text": "Search for shadow tiddlers"
},
"$:/language/Search/Shadows/Matches": {
"title": "$:/language/Search/Shadows/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/Standard/Caption": {
"title": "$:/language/Search/Standard/Caption",
"text": "Standard"
},
"$:/language/Search/Standard/Hint": {
"title": "$:/language/Search/Standard/Hint",
"text": "Search for standard tiddlers"
},
"$:/language/Search/Standard/Matches": {
"title": "$:/language/Search/Standard/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/System/Caption": {
"title": "$:/language/Search/System/Caption",
"text": "System"
},
"$:/language/Search/System/Hint": {
"title": "$:/language/Search/System/Hint",
"text": "Search for system tiddlers"
},
"$:/language/Search/System/Matches": {
"title": "$:/language/Search/System/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/SideBar/All/Caption": {
"title": "$:/language/SideBar/All/Caption",
"text": "All"
},
"$:/language/SideBar/Contents/Caption": {
"title": "$:/language/SideBar/Contents/Caption",
"text": "Contents"
},
"$:/language/SideBar/Drafts/Caption": {
"title": "$:/language/SideBar/Drafts/Caption",
"text": "Drafts"
},
"$:/language/SideBar/Explorer/Caption": {
"title": "$:/language/SideBar/Explorer/Caption",
"text": "Explorer"
},
"$:/language/SideBar/Missing/Caption": {
"title": "$:/language/SideBar/Missing/Caption",
"text": "Missing"
},
"$:/language/SideBar/More/Caption": {
"title": "$:/language/SideBar/More/Caption",
"text": "More"
},
"$:/language/SideBar/Open/Caption": {
"title": "$:/language/SideBar/Open/Caption",
"text": "Open"
},
"$:/language/SideBar/Orphans/Caption": {
"title": "$:/language/SideBar/Orphans/Caption",
"text": "Orphans"
},
"$:/language/SideBar/Recent/Caption": {
"title": "$:/language/SideBar/Recent/Caption",
"text": "Recent"
},
"$:/language/SideBar/Shadows/Caption": {
"title": "$:/language/SideBar/Shadows/Caption",
"text": "Shadows"
},
"$:/language/SideBar/System/Caption": {
"title": "$:/language/SideBar/System/Caption",
"text": "System"
},
"$:/language/SideBar/Tags/Caption": {
"title": "$:/language/SideBar/Tags/Caption",
"text": "Tags"
},
"$:/language/SideBar/Tags/Untagged/Caption": {
"title": "$:/language/SideBar/Tags/Untagged/Caption",
"text": "untagged"
},
"$:/language/SideBar/Tools/Caption": {
"title": "$:/language/SideBar/Tools/Caption",
"text": "Tools"
},
"$:/language/SideBar/Types/Caption": {
"title": "$:/language/SideBar/Types/Caption",
"text": "Types"
},
"$:/SiteSubtitle": {
"title": "$:/SiteSubtitle",
"text": "a non-linear personal web notebook"
},
"$:/SiteTitle": {
"title": "$:/SiteTitle",
"text": "My ~TiddlyWiki"
},
"$:/language/Snippets/ListByTag": {
"title": "$:/language/Snippets/ListByTag",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "List of tiddlers by tag",
"text": "<<list-links \"[tag[task]sort[title]]\">>\n"
},
"$:/language/Snippets/MacroDefinition": {
"title": "$:/language/Snippets/MacroDefinition",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "Macro definition",
"text": "\\define macroName(param1:\"default value\",param2)\nText of the macro\n\\end\n"
},
"$:/language/Snippets/Table4x3": {
"title": "$:/language/Snippets/Table4x3",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "Table with 4 columns by 3 rows",
"text": "|! |!Alpha |!Beta |!Gamma |!Delta |\n|!One | | | | |\n|!Two | | | | |\n|!Three | | | | |\n"
},
"$:/language/Snippets/TableOfContents": {
"title": "$:/language/Snippets/TableOfContents",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "Table of Contents",
"text": "<div class=\"tc-table-of-contents\">\n\n<<toc-selective-expandable 'TableOfContents'>>\n\n</div>"
},
"$:/language/ThemeTweaks/ThemeTweaks": {
"title": "$:/language/ThemeTweaks/ThemeTweaks",
"text": "Theme Tweaks"
},
"$:/language/ThemeTweaks/ThemeTweaks/Hint": {
"title": "$:/language/ThemeTweaks/ThemeTweaks/Hint",
"text": "You can tweak certain aspects of the ''Vanilla'' theme."
},
"$:/language/ThemeTweaks/Options": {
"title": "$:/language/ThemeTweaks/Options",
"text": "Options"
},
"$:/language/ThemeTweaks/Options/SidebarLayout": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout",
"text": "Sidebar layout"
},
"$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid",
"text": "Fixed story, fluid sidebar"
},
"$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed",
"text": "Fluid story, fixed sidebar"
},
"$:/language/ThemeTweaks/Options/StickyTitles": {
"title": "$:/language/ThemeTweaks/Options/StickyTitles",
"text": "Sticky titles"
},
"$:/language/ThemeTweaks/Options/StickyTitles/Hint": {
"title": "$:/language/ThemeTweaks/Options/StickyTitles/Hint",
"text": "Causes tiddler titles to \"stick\" to the top of the browser window. Caution: Does not work at all with Chrome, and causes some layout issues in Firefox"
},
"$:/language/ThemeTweaks/Options/CodeWrapping": {
"title": "$:/language/ThemeTweaks/Options/CodeWrapping",
"text": "Wrap long lines in code blocks"
},
"$:/language/ThemeTweaks/Settings": {
"title": "$:/language/ThemeTweaks/Settings",
"text": "Settings"
},
"$:/language/ThemeTweaks/Settings/FontFamily": {
"title": "$:/language/ThemeTweaks/Settings/FontFamily",
"text": "Font family"
},
"$:/language/ThemeTweaks/Settings/CodeFontFamily": {
"title": "$:/language/ThemeTweaks/Settings/CodeFontFamily",
"text": "Code font family"
},
"$:/language/ThemeTweaks/Settings/EditorFontFamily": {
"title": "$:/language/ThemeTweaks/Settings/EditorFontFamily",
"text": "Editor font family"
},
"$:/language/ThemeTweaks/Settings/BackgroundImage": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImage",
"text": "Page background image"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment",
"text": "Page background image attachment"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll",
"text": "Scroll with tiddlers"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed",
"text": "Fixed to window"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize",
"text": "Page background image size"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto",
"text": "Auto"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover",
"text": "Cover"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain",
"text": "Contain"
},
"$:/language/ThemeTweaks/Metrics": {
"title": "$:/language/ThemeTweaks/Metrics",
"text": "Sizes"
},
"$:/language/ThemeTweaks/Metrics/FontSize": {
"title": "$:/language/ThemeTweaks/Metrics/FontSize",
"text": "Font size"
},
"$:/language/ThemeTweaks/Metrics/LineHeight": {
"title": "$:/language/ThemeTweaks/Metrics/LineHeight",
"text": "Line height"
},
"$:/language/ThemeTweaks/Metrics/BodyFontSize": {
"title": "$:/language/ThemeTweaks/Metrics/BodyFontSize",
"text": "Font size for tiddler body"
},
"$:/language/ThemeTweaks/Metrics/BodyLineHeight": {
"title": "$:/language/ThemeTweaks/Metrics/BodyLineHeight",
"text": "Line height for tiddler body"
},
"$:/language/ThemeTweaks/Metrics/StoryLeft": {
"title": "$:/language/ThemeTweaks/Metrics/StoryLeft",
"text": "Story left position"
},
"$:/language/ThemeTweaks/Metrics/StoryLeft/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryLeft/Hint",
"text": "how far the left margin of the story river<br>(tiddler area) is from the left of the page"
},
"$:/language/ThemeTweaks/Metrics/StoryTop": {
"title": "$:/language/ThemeTweaks/Metrics/StoryTop",
"text": "Story top position"
},
"$:/language/ThemeTweaks/Metrics/StoryTop/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryTop/Hint",
"text": "how far the top margin of the story river<br>is from the top of the page"
},
"$:/language/ThemeTweaks/Metrics/StoryRight": {
"title": "$:/language/ThemeTweaks/Metrics/StoryRight",
"text": "Story right"
},
"$:/language/ThemeTweaks/Metrics/StoryRight/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryRight/Hint",
"text": "how far the left margin of the sidebar <br>is from the left of the page"
},
"$:/language/ThemeTweaks/Metrics/StoryWidth": {
"title": "$:/language/ThemeTweaks/Metrics/StoryWidth",
"text": "Story width"
},
"$:/language/ThemeTweaks/Metrics/StoryWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryWidth/Hint",
"text": "the overall width of the story river"
},
"$:/language/ThemeTweaks/Metrics/TiddlerWidth": {
"title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth",
"text": "Tiddler width"
},
"$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint",
"text": "within the story river"
},
"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint",
"text": "Sidebar breakpoint"
},
"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint",
"text": "the minimum page width at which the story<br>river and sidebar will appear side by side"
},
"$:/language/ThemeTweaks/Metrics/SidebarWidth": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarWidth",
"text": "Sidebar width"
},
"$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint",
"text": "the width of the sidebar in fluid-fixed layout"
},
"$:/language/TiddlerInfo/Advanced/Caption": {
"title": "$:/language/TiddlerInfo/Advanced/Caption",
"text": "Advanced"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint",
"text": "none"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Heading": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading",
"text": "Plugin Details"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint",
"text": "This plugin contains the following shadow tiddlers:"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading",
"text": "Shadow Status"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint",
"text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is not a shadow tiddler"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint",
"text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is a shadow tiddler"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source",
"text": "It is defined in the plugin <$link to=<<pluginTiddler>>><$text text=<<pluginTiddler>>/></$link>"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint",
"text": "It is overridden by an ordinary tiddler"
},
"$:/language/TiddlerInfo/Fields/Caption": {
"title": "$:/language/TiddlerInfo/Fields/Caption",
"text": "Fields"
},
"$:/language/TiddlerInfo/List/Caption": {
"title": "$:/language/TiddlerInfo/List/Caption",
"text": "List"
},
"$:/language/TiddlerInfo/List/Empty": {
"title": "$:/language/TiddlerInfo/List/Empty",
"text": "This tiddler does not have a list"
},
"$:/language/TiddlerInfo/Listed/Caption": {
"title": "$:/language/TiddlerInfo/Listed/Caption",
"text": "Listed"
},
"$:/language/TiddlerInfo/Listed/Empty": {
"title": "$:/language/TiddlerInfo/Listed/Empty",
"text": "This tiddler is not listed by any others"
},
"$:/language/TiddlerInfo/References/Caption": {
"title": "$:/language/TiddlerInfo/References/Caption",
"text": "References"
},
"$:/language/TiddlerInfo/References/Empty": {
"title": "$:/language/TiddlerInfo/References/Empty",
"text": "No tiddlers link to this one"
},
"$:/language/TiddlerInfo/Tagging/Caption": {
"title": "$:/language/TiddlerInfo/Tagging/Caption",
"text": "Tagging"
},
"$:/language/TiddlerInfo/Tagging/Empty": {
"title": "$:/language/TiddlerInfo/Tagging/Empty",
"text": "No tiddlers are tagged with this one"
},
"$:/language/TiddlerInfo/Tools/Caption": {
"title": "$:/language/TiddlerInfo/Tools/Caption",
"text": "Tools"
},
"$:/language/Docs/Types/application/javascript": {
"title": "$:/language/Docs/Types/application/javascript",
"description": "JavaScript code",
"name": "application/javascript",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/application/json": {
"title": "$:/language/Docs/Types/application/json",
"description": "JSON data",
"name": "application/json",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/application/x-tiddler-dictionary": {
"title": "$:/language/Docs/Types/application/x-tiddler-dictionary",
"description": "Data dictionary",
"name": "application/x-tiddler-dictionary",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/image/gif": {
"title": "$:/language/Docs/Types/image/gif",
"description": "GIF image",
"name": "image/gif",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/jpeg": {
"title": "$:/language/Docs/Types/image/jpeg",
"description": "JPEG image",
"name": "image/jpeg",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/png": {
"title": "$:/language/Docs/Types/image/png",
"description": "PNG image",
"name": "image/png",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/svg+xml": {
"title": "$:/language/Docs/Types/image/svg+xml",
"description": "Structured Vector Graphics image",
"name": "image/svg+xml",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/x-icon": {
"title": "$:/language/Docs/Types/image/x-icon",
"description": "ICO format icon file",
"name": "image/x-icon",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/text/css": {
"title": "$:/language/Docs/Types/text/css",
"description": "Static stylesheet",
"name": "text/css",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/text/html": {
"title": "$:/language/Docs/Types/text/html",
"description": "HTML markup",
"name": "text/html",
"group": "Text",
"group-sort": "0"
},
"$:/language/Docs/Types/text/plain": {
"title": "$:/language/Docs/Types/text/plain",
"description": "Plain text",
"name": "text/plain",
"group": "Text",
"group-sort": "0"
},
"$:/language/Docs/Types/text/vnd.tiddlywiki": {
"title": "$:/language/Docs/Types/text/vnd.tiddlywiki",
"description": "TiddlyWiki 5",
"name": "text/vnd.tiddlywiki",
"group": "Text",
"group-sort": "0"
},
"$:/language/Docs/Types/text/x-tiddlywiki": {
"title": "$:/language/Docs/Types/text/x-tiddlywiki",
"description": "TiddlyWiki Classic",
"name": "text/x-tiddlywiki",
"group": "Text",
"group-sort": "0"
},
"$:/languages/en-GB/icon": {
"title": "$:/languages/en-GB/icon",
"type": "image/svg+xml",
"text": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 60 30\" width=\"1200\" height=\"600\">\n<clipPath id=\"t\">\n\t<path d=\"M30,15 h30 v15 z v15 h-30 z h-30 v-15 z v-15 h30 z\"/>\n</clipPath>\n<path d=\"M0,0 v30 h60 v-30 z\" fill=\"#00247d\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" stroke=\"#fff\" stroke-width=\"6\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" clip-path=\"url(#t)\" stroke=\"#cf142b\" stroke-width=\"4\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#fff\" stroke-width=\"10\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#cf142b\" stroke-width=\"6\"/>\n</svg>\n"
},
"$:/languages/en-GB": {
"title": "$:/languages/en-GB",
"name": "en-GB",
"description": "English (British)",
"author": "JeremyRuston",
"core-version": ">=5.0.0\"",
"text": "Stub pseudo-plugin for the default language"
},
"$:/core/modules/commander.js": {
"title": "$:/core/modules/commander.js",
"text": "/*\\\ntitle: $:/core/modules/commander.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Commander class is a command interpreter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a sequence of commands\n\tcommandTokens: an array of command string tokens\n\twiki: reference to the wiki store object\n\tstreams: {output:, error:}, each of which has a write(string) method\n\tcallback: a callback invoked as callback(err) where err is null if there was no error\n*/\nvar Commander = function(commandTokens,callback,wiki,streams) {\n\tvar path = require(\"path\");\n\tthis.commandTokens = commandTokens;\n\tthis.nextToken = 0;\n\tthis.callback = callback;\n\tthis.wiki = wiki;\n\tthis.streams = streams;\n\tthis.outputPath = path.resolve($tw.boot.wikiPath,$tw.config.wikiOutputSubDir);\n};\n\n/*\nLog a string if verbose flag is set\n*/\nCommander.prototype.log = function(str) {\n\tif(this.verbose) {\n\t\tthis.streams.output.write(str + \"\\n\");\n\t}\n};\n\n/*\nWrite a string if verbose flag is set\n*/\nCommander.prototype.write = function(str) {\n\tif(this.verbose) {\n\t\tthis.streams.output.write(str);\n\t}\n};\n\n/*\nAdd a string of tokens to the command queue\n*/\nCommander.prototype.addCommandTokens = function(commandTokens) {\n\tvar params = commandTokens.slice(0);\n\tparams.unshift(0);\n\tparams.unshift(this.nextToken);\n\tArray.prototype.splice.apply(this.commandTokens,params);\n};\n\n/*\nExecute the sequence of commands and invoke a callback on completion\n*/\nCommander.prototype.execute = function() {\n\tthis.executeNextCommand();\n};\n\n/*\nExecute the next command in the sequence\n*/\nCommander.prototype.executeNextCommand = function() {\n\tvar self = this;\n\t// Invoke the callback if there are no more commands\n\tif(this.nextToken >= this.commandTokens.length) {\n\t\tthis.callback(null);\n\t} else {\n\t\t// Get and check the command token\n\t\tvar commandName = this.commandTokens[this.nextToken++];\n\t\tif(commandName.substr(0,2) !== \"--\") {\n\t\t\tthis.callback(\"Missing command: \" + commandName);\n\t\t} else {\n\t\t\tcommandName = commandName.substr(2); // Trim off the --\n\t\t\t// Accumulate the parameters to the command\n\t\t\tvar params = [];\n\t\t\twhile(this.nextToken < this.commandTokens.length && \n\t\t\t\tthis.commandTokens[this.nextToken].substr(0,2) !== \"--\") {\n\t\t\t\tparams.push(this.commandTokens[this.nextToken++]);\n\t\t\t}\n\t\t\t// Get the command info\n\t\t\tvar command = $tw.commands[commandName],\n\t\t\t\tc,err;\n\t\t\tif(!command) {\n\t\t\t\tthis.callback(\"Unknown command: \" + commandName);\n\t\t\t} else {\n\t\t\t\tif(this.verbose) {\n\t\t\t\t\tthis.streams.output.write(\"Executing command: \" + commandName + \" \" + params.join(\" \") + \"\\n\");\n\t\t\t\t}\n\t\t\t\tif(command.info.synchronous) {\n\t\t\t\t\t// Synchronous command\n\t\t\t\t\tc = new command.Command(params,this);\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.executeNextCommand();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Asynchronous command\n\t\t\t\t\tc = new command.Command(params,this,function(err) {\n\t\t\t\t\t\tif(err) {\n\t\t\t\t\t\t\tself.callback(err);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.executeNextCommand();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nCommander.initCommands = function(moduleType) {\n\tmoduleType = moduleType || \"command\";\n\t$tw.commands = {};\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tvar c = $tw.commands[module.info.name] = {};\n\t\t// Add the methods defined by the module\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\tc[f] = module[f];\n\t\t\t}\n\t\t}\n\t});\n};\n\nexports.Commander = Commander;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/commands/build.js": {
"title": "$:/core/modules/commands/build.js",
"text": "/*\\\ntitle: $:/core/modules/commands/build.js\ntype: application/javascript\nmodule-type: command\n\nCommand to build a build target\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"build\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\t// Get the build targets defined in the wiki\n\tvar buildTargets = $tw.boot.wikiInfo.build;\n\tif(!buildTargets) {\n\t\treturn \"No build targets defined\";\n\t}\n\t// Loop through each of the specified targets\n\tvar targets;\n\tif(this.params.length > 0) {\n\t\ttargets = this.params;\n\t} else {\n\t\ttargets = Object.keys(buildTargets);\n\t}\n\tfor(var targetIndex=0; targetIndex<targets.length; targetIndex++) {\n\t\tvar target = targets[targetIndex],\n\t\t\tcommands = buildTargets[target];\n\t\tif(!commands) {\n\t\t\treturn \"Build target '\" + target + \"' not found\";\n\t\t}\n\t\t// Add the commands to the queue\n\t\tthis.commander.addCommandTokens(commands);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/clearpassword.js": {
"title": "$:/core/modules/commands/clearpassword.js",
"text": "/*\\\ntitle: $:/core/modules/commands/clearpassword.js\ntype: application/javascript\nmodule-type: command\n\nClear password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"clearpassword\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\t$tw.crypto.setPassword(null);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/editions.js": {
"title": "$:/core/modules/commands/editions.js",
"text": "/*\\\ntitle: $:/core/modules/commands/editions.js\ntype: application/javascript\nmodule-type: command\n\nCommand to list the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"editions\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\t// Output the list\n\tthis.commander.streams.output.write(\"Available editions:\\n\\n\");\n\tvar editionInfo = $tw.utils.getEditionInfo();\n\t$tw.utils.each(editionInfo,function(info,name) {\n\t\tself.commander.streams.output.write(\" \" + name + \": \" + info.description + \"\\n\");\n\t});\n\tthis.commander.streams.output.write(\"\\n\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/fetch.js": {
"title": "$:/core/modules/commands/fetch.js",
"text": "/*\\\ntitle: $:/core/modules/commands/fetch.js\ntype: application/javascript\nmodule-type: command\n\nCommands to fetch external tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"fetch\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing subcommand and url\";\n\t}\n\tswitch(this.params[0]) {\n\t\tcase \"raw-file\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\traw: true,\n\t\t\t\turl: this.params[1],\n\t\t\t\ttransformFilter: this.params[2] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"file\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\turl: this.params[1],\n\t\t\t\timportFilter: this.params[2],\n\t\t\t\ttransformFilter: this.params[3] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"raw-files\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\traw: true,\n\t\t\t\turlFilter: this.params[1],\n\t\t\t\ttransformFilter: this.params[2] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"files\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\turlFilter: this.params[1],\n\t\t\t\timportFilter: this.params[2],\n\t\t\t\ttransformFilter: this.params[3] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t}\n\treturn null;\n};\n\nCommand.prototype.fetchFiles = function(options) {\n\tvar self = this;\n\t// Get the list of URLs\n\tvar urls;\n\tif(options.url) {\n\t\turls = [options.url]\n\t} else if(options.urlFilter) {\n\t\turls = $tw.wiki.filterTiddlers(options.urlFilter);\n\t} else {\n\t\treturn \"Missing URL\";\n\t}\n\t// Process each URL in turn\n\tvar next = 0;\n\tvar getNextFile = function(err) {\n\t\tif(err) {\n\t\t\treturn options.callback(err);\n\t\t}\n\t\tif(next < urls.length) {\n\t\t\tself.fetchFile(urls[next++],options,getNextFile);\n\t\t} else {\n\t\t\toptions.callback(null);\n\t\t}\n\t};\n\tgetNextFile(null);\n\t// Success\n\treturn null;\n};\n\nCommand.prototype.fetchFile = function(url,options,callback,redirectCount) {\n\tif(redirectCount > 10) {\n\t\treturn callback(\"Error too many redirects retrieving \" + url);\n\t}\n\tvar self = this,\n\t\tlib = url.substr(0,8) === \"https://\" ? require(\"https\") : require(\"http\");\n\tlib.get(url).on(\"response\",function(response) {\n\t var type = (response.headers[\"content-type\"] || \"\").split(\";\")[0],\n\t \tdata = [];\n\t self.commander.write(\"Reading \" + url + \": \");\n\t response.on(\"data\",function(chunk) {\n\t data.push(chunk);\n\t self.commander.write(\".\");\n\t });\n\t response.on(\"end\",function() {\n\t self.commander.write(\"\\n\");\n\t if(response.statusCode === 200) {\n\t\t self.processBody(Buffer.concat(data),type,options,url);\n\t\t callback(null);\n\t } else {\n\t \tif(response.statusCode === 302 || response.statusCode === 303 || response.statusCode === 307) {\n\t \t\treturn self.fetchFile(response.headers.location,options,callback,redirectCount + 1);\n\t \t} else {\n\t\t \treturn callback(\"Error \" + response.statusCode + \" retrieving \" + url)\t \t\t\n\t \t}\n\t }\n\t \t});\n\t \tresponse.on(\"error\",function(e) {\n\t\t\tconsole.log(\"Error on GET request: \" + e);\n\t\t\tcallback(e);\n\t \t});\n\t});\n\treturn null;\n};\n\nCommand.prototype.processBody = function(body,type,options,url) {\n\tvar self = this;\n\t// Collect the tiddlers in a wiki\n\tvar incomingWiki = new $tw.Wiki();\n\tif(options.raw) {\n\t\tvar typeInfo = type ? $tw.config.contentTypeInfo[type] : null,\n\t\t\tencoding = typeInfo ? typeInfo.encoding : \"utf8\";\n\t\tincomingWiki.addTiddler(new $tw.Tiddler({\n\t\t\ttitle: url,\n\t\t\ttype: type,\n\t\t\ttext: body.toString(encoding)\n\t\t}));\n\t} else {\n\t\t// Deserialise the file to extract the tiddlers\n\t\tvar tiddlers = this.commander.wiki.deserializeTiddlers(type || \"text/html\",body.toString(\"utf8\"),{});\n\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\tincomingWiki.addTiddler(new $tw.Tiddler(tiddler));\n\t\t});\n\t}\n\t// Filter the tiddlers to select the ones we want\n\tvar filteredTitles = incomingWiki.filterTiddlers(options.importFilter || \"[all[tiddlers]]\");\n\t// Import the selected tiddlers\n\tvar count = 0;\n\tincomingWiki.each(function(tiddler,title) {\n\t\tif(filteredTitles.indexOf(title) !== -1) {\n\t\t\tvar newTiddler;\n\t\t\tif(options.transformFilter) {\n\t\t\t\tvar transformedTitle = (incomingWiki.filterTiddlers(options.transformFilter,null,self.commander.wiki.makeTiddlerIterator([title])) || [\"\"])[0];\n\t\t\t\tif(transformedTitle) {\n\t\t\t\t\tself.commander.log(\"Importing \" + title + \" as \" + transformedTitle)\n\t\t\t\t\tnewTiddler = new $tw.Tiddler(tiddler,{title: transformedTitle});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.commander.log(\"Importing \" + title)\n\t\t\t\tnewTiddler = tiddler;\n\t\t\t}\n\t\t\tself.commander.wiki.importTiddler(newTiddler);\n\t\t\tcount++;\n\t\t}\n\t});\n\tself.commander.log(\"Imported \" + count + \" tiddlers\")\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/help.js": {
"title": "$:/core/modules/commands/help.js",
"text": "/*\\\ntitle: $:/core/modules/commands/help.js\ntype: application/javascript\nmodule-type: command\n\nHelp command\n\n\\*/\n(function(){\n\n/*jshint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"help\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar subhelp = this.params[0] || \"default\",\n\t\thelpBase = \"$:/language/Help/\",\n\t\ttext;\n\tif(!this.commander.wiki.getTiddler(helpBase + subhelp)) {\n\t\tsubhelp = \"notfound\";\n\t}\n\t// Wikify the help as formatted text (ie block elements generate newlines)\n\ttext = this.commander.wiki.renderTiddler(\"text/plain-formatted\",helpBase + subhelp);\n\t// Remove any leading linebreaks\n\ttext = text.replace(/^(\\r?\\n)*/g,\"\");\n\tthis.commander.streams.output.write(text);\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/import.js": {
"title": "$:/core/modules/commands/import.js",
"text": "/*\\\ntitle: $:/core/modules/commands/import.js\ntype: application/javascript\nmodule-type: command\n\nCommand to import tiddlers from a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"import\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 2) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar filename = self.params[0],\n\t\tdeserializer = self.params[1],\n\t\ttitle = self.params[2] || filename,\n\t\tencoding = self.params[3] || \"utf8\",\n\t\ttext = fs.readFileSync(filename,encoding),\n\t\ttiddlers = this.commander.wiki.deserializeTiddlers(null,text,{title: title},{deserializer: deserializer});\n\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\n\t});\n\tthis.commander.log(tiddlers.length + \" tiddler(s) imported\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/init.js": {
"title": "$:/core/modules/commands/init.js",
"text": "/*\\\ntitle: $:/core/modules/commands/init.js\ntype: application/javascript\nmodule-type: command\n\nCommand to initialise an empty wiki folder\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"init\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\t// Check that we don't already have a valid wiki folder\n\tif($tw.boot.wikiTiddlersPath || ($tw.utils.isDirectory($tw.boot.wikiPath) && !$tw.utils.isDirectoryEmpty($tw.boot.wikiPath))) {\n\t\treturn \"Wiki folder is not empty\";\n\t}\n\t// Loop through each of the specified editions\n\tvar editions = this.params.length > 0 ? this.params : [\"empty\"];\n\tfor(var editionIndex=0; editionIndex<editions.length; editionIndex++) {\n\t\tvar editionName = editions[editionIndex];\n\t\t// Check the edition exists\n\t\tvar editionPath = $tw.findLibraryItem(editionName,$tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar));\n\t\tif(!$tw.utils.isDirectory(editionPath)) {\n\t\t\treturn \"Edition '\" + editionName + \"' not found\";\n\t\t}\n\t\t// Copy the edition content\n\t\tvar err = $tw.utils.copyDirectory(editionPath,$tw.boot.wikiPath);\n\t\tif(!err) {\n\t\t\tthis.commander.streams.output.write(\"Copied edition '\" + editionName + \"' to \" + $tw.boot.wikiPath + \"\\n\");\n\t\t} else {\n\t\t\treturn err;\n\t\t}\n\t}\n\t// Tweak the tiddlywiki.info to remove any included wikis\n\tvar packagePath = $tw.boot.wikiPath + \"/tiddlywiki.info\",\n\t\tpackageJson = JSON.parse(fs.readFileSync(packagePath));\n\tdelete packageJson.includeWikis;\n\tfs.writeFileSync(packagePath,JSON.stringify(packageJson,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/load.js": {
"title": "$:/core/modules/commands/load.js",
"text": "/*\\\ntitle: $:/core/modules/commands/load.js\ntype: application/javascript\nmodule-type: command\n\nCommand to load tiddlers from a file or directory\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"load\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar tiddlers = $tw.loadTiddlersFromPath(self.params[0]),\n\t\tcount = 0;\n\t$tw.utils.each(tiddlers,function(tiddlerInfo) {\n\t\t$tw.utils.each(tiddlerInfo.tiddlers,function(tiddler) {\n\t\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\n\t\t\tcount++;\n\t\t});\n\t});\n\tif(!count) {\n\t\tself.callback(\"No tiddlers found in file \\\"\" + self.params[0] + \"\\\"\");\n\t} else {\n\t\tself.callback(null);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/makelibrary.js": {
"title": "$:/core/modules/commands/makelibrary.js",
"text": "/*\\\ntitle: $:/core/modules/commands/makelibrary.js\ntype: application/javascript\nmodule-type: command\n\nCommand to pack all of the plugins in the library into a plugin tiddler of type \"library\"\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"makelibrary\",\n\tsynchronous: true\n};\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar wiki = this.commander.wiki,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tupgradeLibraryTitle = this.params[0] || UPGRADE_LIBRARY_TITLE,\n\t\ttiddlers = {};\n\t// Collect up the library plugins\n\tvar collectPlugins = function(folder) {\n\t\t\tvar pluginFolders = fs.readdirSync(folder);\n\t\t\tfor(var p=0; p<pluginFolders.length; p++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(pluginFolders[p])) {\n\t\t\t\t\tpluginFields = $tw.loadPluginFolder(path.resolve(folder,\"./\" + pluginFolders[p]));\n\t\t\t\t\tif(pluginFields && pluginFields.title) {\n\t\t\t\t\t\ttiddlers[pluginFields.title] = pluginFields;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcollectPublisherPlugins = function(folder) {\n\t\t\tvar publisherFolders = fs.readdirSync(folder);\n\t\t\tfor(var t=0; t<publisherFolders.length; t++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(publisherFolders[t])) {\n\t\t\t\t\tcollectPlugins(path.resolve(folder,\"./\" + publisherFolders[t]));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\tcollectPublisherPlugins(path.resolve($tw.boot.corePath,$tw.config.pluginsPath));\n\tcollectPublisherPlugins(path.resolve($tw.boot.corePath,$tw.config.themesPath));\n\tcollectPlugins(path.resolve($tw.boot.corePath,$tw.config.languagesPath));\n\t// Save the upgrade library tiddler\n\tvar pluginFields = {\n\t\ttitle: upgradeLibraryTitle,\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"library\",\n\t\t\"text\": JSON.stringify({tiddlers: tiddlers},null,$tw.config.preferences.jsonSpaces)\n\t};\n\twiki.addTiddler(new $tw.Tiddler(pluginFields));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/output.js": {
"title": "$:/core/modules/commands/output.js",
"text": "/*\\\ntitle: $:/core/modules/commands/output.js\ntype: application/javascript\nmodule-type: command\n\nCommand to set the default output location (defaults to current working directory)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"output\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing output path\";\n\t}\n\tthis.commander.outputPath = path.resolve(process.cwd(),this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/password.js": {
"title": "$:/core/modules/commands/password.js",
"text": "/*\\\ntitle: $:/core/modules/commands/password.js\ntype: application/javascript\nmodule-type: command\n\nSave password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"password\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing password\";\n\t}\n\t$tw.crypto.setPassword(this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/render.js": {
"title": "$:/core/modules/commands/render.js",
"text": "/*\\\ntitle: $:/core/modules/commands/render.js\ntype: application/javascript\nmodule-type: command\n\nRender individual tiddlers and save the results to the specified files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"render\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing tiddler filter\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\ttiddlerFilter = this.params[0],\n\t\tfilenameFilter = this.params[1] || \"[is[tiddler]addsuffix[.html]]\",\n\t\ttype = this.params[2] || \"text/html\",\n\t\ttemplate = this.params[3],\n\t\tvarName = this.params[4],\n\t\tvarValue = this.params[5],\n\t\ttiddlers = wiki.filterTiddlers(tiddlerFilter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template || title),\n\t\t\tvariables = {currentTiddler: title};\n\t\tif(varName) {\n\t\t\tvariables[varName] = varValue || \"\";\n\t\t}\n\t\tvar widgetNode = wiki.makeWidget(parser,{variables: variables}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\tfilepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]);\n\t\tif(self.commander.verbose) {\n\t\t\tconsole.log(\"Rendering \\\"\" + title + \"\\\" to \\\"\" + filepath + \"\\\"\");\n\t\t}\n\t\t$tw.utils.createFileDirectories(filepath);\n\t\tfs.writeFileSync(filepath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/rendertiddler.js": {
"title": "$:/core/modules/commands/rendertiddler.js",
"text": "/*\\\ntitle: $:/core/modules/commands/rendertiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render a tiddler and save it to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"rendertiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttype = this.params[2] || \"text/html\",\n\t\ttemplate = this.params[3],\n\t\tname = this.params[4],\n\t\tvalue = this.params[5],\n\t\tvariables = {};\n\t$tw.utils.createFileDirectories(filename);\n\tif(template) {\n\t\tvariables.currentTiddler = title;\n\t\ttitle = template;\n\t}\n\tif(name && value) {\n\t\tvariables[name] = value;\n\t}\n\tfs.writeFile(filename,this.commander.wiki.renderTiddler(type,title,{variables: variables}),\"utf8\",function(err) {\n\t\tself.callback(err);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/rendertiddlers.js": {
"title": "$:/core/modules/commands/rendertiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/commands/rendertiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"rendertiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttemplate = this.params[1],\n\t\toutputPath = this.commander.outputPath,\n\t\tpathname = path.resolve(outputPath,this.params[2]),\t\t\n\t\ttype = this.params[3] || \"text/html\",\n\t\textension = this.params[4] || \".html\",\n\t\tdeleteDirectory = (this.params[5] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template),\n\t\t\twidgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\texportPath = null;\n\t\tif($tw.utils.hop($tw.macros,\"tv-get-export-path\")) {\n\t\t\tvar macroPath = $tw.macros[\"tv-get-export-path\"].run.apply(self,[title]);\n\t\t\tif(macroPath) {\n\t\t\t\texportPath = path.resolve(outputPath,macroPath + extension);\n\t\t\t}\n\t\t}\n\t\tvar finalPath = exportPath || path.resolve(pathname,encodeURIComponent(title) + extension);\n\t\t$tw.utils.createFileDirectories(finalPath);\n\t\tfs.writeFileSync(finalPath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/save.js": {
"title": "$:/core/modules/commands/save.js",
"text": "/*\\\ntitle: $:/core/modules/commands/save.js\ntype: application/javascript\nmodule-type: command\n\nSaves individual tiddlers in their raw text or binary format to the specified files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"save\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename filter\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\ttiddlerFilter = this.params[0],\n\t\tfilenameFilter = this.params[1] || \"[is[tiddler]]\",\n\t\ttiddlers = wiki.filterTiddlers(tiddlerFilter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]);\n\t\tif(self.commander.verbose) {\n\t\t\tconsole.log(\"Saving \\\"\" + title + \"\\\" to \\\"\" + filepath + \"\\\"\");\n\t\t}\n\t\t$tw.utils.createFileDirectories(filepath);\n\t\tfs.writeFileSync(filepath,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savelibrarytiddlers.js": {
"title": "$:/core/modules/commands/savelibrarytiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/commands/savelibrarytiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the subtiddlers of a bundle tiddler as a series of JSON files\n\n--savelibrarytiddlers <tiddler> <pathname> <skinnylisting>\n\nThe tiddler identifies the bundle tiddler that contains the subtiddlers.\n\nThe pathname specifies the pathname to the folder in which the JSON files should be saved. The filename is the URL encoded title of the subtiddler.\n\nThe skinnylisting specifies the title of the tiddler to which a JSON catalogue of the subtiddlers will be saved. The JSON file contains the same data as the bundle tiddler but with the `text` field removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savelibrarytiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tcontainerTitle = this.params[0],\n\t\tfilter = this.params[1],\n\t\tbasepath = this.params[2],\n\t\tskinnyListTitle = this.params[3];\n\t// Get the container tiddler as data\n\tvar containerData = self.commander.wiki.getTiddlerDataCached(containerTitle,undefined);\n\tif(!containerData) {\n\t\treturn \"'\" + containerTitle + \"' is not a tiddler bundle\";\n\t}\n\t// Filter the list of plugins\n\tvar pluginList = [];\n\t$tw.utils.each(containerData.tiddlers,function(tiddler,title) {\n\t\tpluginList.push(title);\n\t});\n\tvar filteredPluginList;\n\tif(filter) {\n\t\tfilteredPluginList = self.commander.wiki.filterTiddlers(filter,null,self.commander.wiki.makeTiddlerIterator(pluginList));\n\t} else {\n\t\tfilteredPluginList = pluginList;\n\t}\n\t// Iterate through the plugins\n\tvar skinnyList = [];\n\t$tw.utils.each(filteredPluginList,function(title) {\n\t\tvar tiddler = containerData.tiddlers[title];\n\t\t// Save each JSON file and collect the skinny data\n\t\tvar pathname = path.resolve(self.commander.outputPath,basepath + encodeURIComponent(title) + \".json\");\n\t\t$tw.utils.createFileDirectories(pathname);\n\t\tfs.writeFileSync(pathname,JSON.stringify(tiddler,null,$tw.config.preferences.jsonSpaces),\"utf8\");\n\t\t// Collect the skinny list data\n\t\tvar pluginTiddlers = JSON.parse(tiddler.text),\n\t\t\treadmeContent = (pluginTiddlers.tiddlers[title + \"/readme\"] || {}).text,\n\t\t\ticonTiddler = pluginTiddlers.tiddlers[title + \"/icon\"] || {},\n\t\t\ticonType = iconTiddler.type,\n\t\t\ticonText = iconTiddler.text,\n\t\t\ticonContent;\n\t\tif(iconType && iconText) {\n\t\t\ticonContent = $tw.utils.makeDataUri(iconText,iconType);\n\t\t}\n\t\tskinnyList.push($tw.utils.extend({},tiddler,{text: undefined, readme: readmeContent, icon: iconContent}));\n\t});\n\t// Save the catalogue tiddler\n\tif(skinnyListTitle) {\n\t\tself.commander.wiki.setTiddlerData(skinnyListTitle,skinnyList);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savetiddler.js": {
"title": "$:/core/modules/commands/savetiddler.js",
"text": "/*\\\ntitle: $:/core/modules/commands/savetiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the content of a tiddler to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savetiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttiddler = this.commander.wiki.getTiddler(title);\n\tif(tiddler) {\n\t\tvar type = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"};\n\t\t$tw.utils.createFileDirectories(filename);\n\t\tfs.writeFile(filename,tiddler.fields.text,contentTypeInfo.encoding,function(err) {\n\t\t\tself.callback(err);\n\t\t});\n\t} else {\n\t\treturn \"Missing tiddler: \" + title;\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savetiddlers.js": {
"title": "$:/core/modules/commands/savetiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/commands/savetiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"savetiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tpathname = path.resolve(this.commander.outputPath,this.params[1]),\n\t\tdeleteDirectory = (this.params[2] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.createDirectory(pathname);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilename = path.resolve(pathname,encodeURIComponent(title));\n\t\tfs.writeFileSync(filename,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/server.js": {
"title": "$:/core/modules/commands/server.js",
"text": "/*\\\ntitle: $:/core/modules/commands/server.js\ntype: application/javascript\nmodule-type: command\n\nServe tiddlers over http\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif($tw.node) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\"),\n\t\thttp = require(\"http\");\n}\n\nexports.info = {\n\tname: \"server\",\n\tsynchronous: true\n};\n\n/*\nA simple HTTP server with regexp-based routes\n*/\nfunction SimpleServer(options) {\n\tthis.routes = options.routes || [];\n\tthis.wiki = options.wiki;\n\tthis.variables = options.variables || {};\n}\n\nSimpleServer.prototype.set = function(obj) {\n\tvar self = this;\n\t$tw.utils.each(obj,function(value,name) {\n\t\tself.variables[name] = value;\n\t});\n};\n\nSimpleServer.prototype.get = function(name) {\n\treturn this.variables[name];\n};\n\nSimpleServer.prototype.addRoute = function(route) {\n\tthis.routes.push(route);\n};\n\nSimpleServer.prototype.findMatchingRoute = function(request,state) {\n\tvar pathprefix = this.get(\"pathprefix\") || \"\";\n\tfor(var t=0; t<this.routes.length; t++) {\n\t\tvar potentialRoute = this.routes[t],\n\t\t\tpathRegExp = potentialRoute.path,\n\t\t\tpathname = state.urlInfo.pathname,\n\t\t\tmatch;\n\t\tif(pathprefix) {\n\t\t\tif(pathname.substr(0,pathprefix.length) === pathprefix) {\n\t\t\t\tpathname = pathname.substr(pathprefix.length);\n\t\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t\t} else {\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t} else {\n\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t}\n\t\tif(match && request.method === potentialRoute.method) {\n\t\t\tstate.params = [];\n\t\t\tfor(var p=1; p<match.length; p++) {\n\t\t\t\tstate.params.push(match[p]);\n\t\t\t}\n\t\t\treturn potentialRoute;\n\t\t}\n\t}\n\treturn null;\n};\n\nSimpleServer.prototype.checkCredentials = function(request,incomingUsername,incomingPassword) {\n\tvar header = request.headers.authorization || \"\",\n\t\ttoken = header.split(/\\s+/).pop() || \"\",\n\t\tauth = $tw.utils.base64Decode(token),\n\t\tparts = auth.split(/:/),\n\t\tusername = parts[0],\n\t\tpassword = parts[1];\n\tif(incomingUsername === username && incomingPassword === password) {\n\t\treturn \"ALLOWED\";\n\t} else {\n\t\treturn \"DENIED\";\n\t}\n};\n\nSimpleServer.prototype.requestHandler = function(request,response) {\n\t// Compose the state object\n\tvar self = this;\n\tvar state = {};\n\tstate.wiki = self.wiki;\n\tstate.server = self;\n\tstate.urlInfo = url.parse(request.url);\n\t// Find the route that matches this path\n\tvar route = self.findMatchingRoute(request,state);\n\t// Check for the username and password if we've got one\n\tvar username = self.get(\"username\"),\n\t\tpassword = self.get(\"password\");\n\tif(username && password) {\n\t\t// Check they match\n\t\tif(self.checkCredentials(request,username,password) !== \"ALLOWED\") {\n\t\t\tvar servername = state.wiki.getTiddlerText(\"$:/SiteTitle\") || \"TiddlyWiki5\";\n\t\t\tresponse.writeHead(401,\"Authentication required\",{\n\t\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to ' + servername + '\"'\n\t\t\t});\n\t\t\tresponse.end();\n\t\t\treturn;\n\t\t}\n\t}\n\t// Return a 404 if we didn't find a route\n\tif(!route) {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t\treturn;\n\t}\n\t// Set the encoding for the incoming request\n\t// TODO: Presumably this would need tweaking if we supported PUTting binary tiddlers\n\trequest.setEncoding(\"utf8\");\n\t// Dispatch the appropriate method\n\tswitch(request.method) {\n\t\tcase \"GET\": // Intentional fall-through\n\t\tcase \"DELETE\":\n\t\t\troute.handler(request,response,state);\n\t\t\tbreak;\n\t\tcase \"PUT\":\n\t\t\tvar data = \"\";\n\t\t\trequest.on(\"data\",function(chunk) {\n\t\t\t\tdata += chunk.toString();\n\t\t\t});\n\t\t\trequest.on(\"end\",function() {\n\t\t\t\tstate.data = data;\n\t\t\t\troute.handler(request,response,state);\n\t\t\t});\n\t\t\tbreak;\n\t}\n};\n\t\nSimpleServer.prototype.listen = function(port,host) {\n\thttp.createServer(this.requestHandler.bind(this)).listen(port,host);\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n\t// Set up server\n\tthis.server = new SimpleServer({\n\t\twiki: this.commander.wiki\n\t});\n\t// Add route handlers\n\tthis.server.addRoute({\n\t\tmethod: \"PUT\",\n\t\tpath: /^\\/recipes\\/default\\/tiddlers\\/(.+)$/,\n\t\thandler: function(request,response,state) {\n\t\t\tvar title = decodeURIComponent(state.params[0]),\n\t\t\t\tfields = JSON.parse(state.data);\n\t\t\t// Pull up any subfields in the `fields` object\n\t\t\tif(fields.fields) {\n\t\t\t\t$tw.utils.each(fields.fields,function(field,name) {\n\t\t\t\t\tfields[name] = field;\n\t\t\t\t});\n\t\t\t\tdelete fields.fields;\n\t\t\t}\n\t\t\t// Remove any revision field\n\t\t\tif(fields.revision) {\n\t\t\t\tdelete fields.revision;\n\t\t\t}\n\t\t\tstate.wiki.addTiddler(new $tw.Tiddler(state.wiki.getCreationFields(),fields,{title: title},state.wiki.getModificationFields()));\n\t\t\tvar changeCount = state.wiki.getChangeCount(title).toString();\n\t\t\tresponse.writeHead(204, \"OK\",{\n\t\t\t\tEtag: \"\\\"default/\" + encodeURIComponent(title) + \"/\" + changeCount + \":\\\"\",\n\t\t\t\t\"Content-Type\": \"text/plain\"\n\t\t\t});\n\t\t\tresponse.end();\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"DELETE\",\n\t\tpath: /^\\/bags\\/default\\/tiddlers\\/(.+)$/,\n\t\thandler: function(request,response,state) {\n\t\t\tvar title = decodeURIComponent(state.params[0]);\n\t\t\tstate.wiki.deleteTiddler(title);\n\t\t\tresponse.writeHead(204, \"OK\", {\n\t\t\t\t\"Content-Type\": \"text/plain\"\n\t\t\t});\n\t\t\tresponse.end();\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": state.server.get(\"serveType\")});\n\t\t\tvar text = state.wiki.renderTiddler(state.server.get(\"renderType\"),state.server.get(\"rootTiddler\"));\n\t\t\tresponse.end(text,\"utf8\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/status$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\t\tvar text = JSON.stringify({\n\t\t\t\tusername: state.server.get(\"username\"),\n\t\t\t\tspace: {\n\t\t\t\t\trecipe: \"default\"\n\t\t\t\t},\n\t\t\t\ttiddlywiki_version: $tw.version\n\t\t\t});\n\t\t\tresponse.end(text,\"utf8\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/favicon.ico$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": \"image/x-icon\"});\n\t\t\tvar buffer = state.wiki.getTiddlerText(\"$:/favicon.ico\",\"\");\n\t\t\tresponse.end(buffer,\"base64\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/recipes\\/default\\/tiddlers.json$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\t\tvar tiddlers = [];\n\t\t\tstate.wiki.forEachTiddler({sortField: \"title\"},function(title,tiddler) {\n\t\t\t\tvar tiddlerFields = {};\n\t\t\t\t$tw.utils.each(tiddler.fields,function(field,name) {\n\t\t\t\t\tif(name !== \"text\") {\n\t\t\t\t\t\ttiddlerFields[name] = tiddler.getFieldString(name);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\t\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\ttiddlers.push(tiddlerFields);\n\t\t\t});\n\t\t\tvar text = JSON.stringify(tiddlers);\n\t\t\tresponse.end(text,\"utf8\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/recipes\\/default\\/tiddlers\\/(.+)$/,\n\t\thandler: function(request,response,state) {\n\t\t\tvar title = decodeURIComponent(state.params[0]),\n\t\t\t\ttiddler = state.wiki.getTiddler(title),\n\t\t\t\ttiddlerFields = {},\n\t\t\t\tknownFields = [\n\t\t\t\t\t\"bag\", \"created\", \"creator\", \"modified\", \"modifier\", \"permissions\", \"recipe\", \"revision\", \"tags\", \"text\", \"title\", \"type\", \"uri\"\n\t\t\t\t];\n\t\t\tif(tiddler) {\n\t\t\t\t$tw.utils.each(tiddler.fields,function(field,name) {\n\t\t\t\t\tvar value = tiddler.getFieldString(name);\n\t\t\t\t\tif(knownFields.indexOf(name) !== -1) {\n\t\t\t\t\t\ttiddlerFields[name] = value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttiddlerFields.fields = tiddlerFields.fields || {};\n\t\t\t\t\t\ttiddlerFields.fields[name] = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\t\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\t\t\tresponse.end(JSON.stringify(tiddlerFields),\"utf8\");\n\t\t\t} else {\n\t\t\t\tresponse.writeHead(404);\n\t\t\t\tresponse.end();\n\t\t\t}\n\t\t}\n\t});\n};\n\nCommand.prototype.execute = function() {\n\tif(!$tw.boot.wikiTiddlersPath) {\n\t\t$tw.utils.warning(\"Warning: Wiki folder '\" + $tw.boot.wikiPath + \"' does not exist or is missing a tiddlywiki.info file\");\n\t}\n\tvar port = this.params[0] || \"8080\",\n\t\trootTiddler = this.params[1] || \"$:/core/save/all\",\n\t\trenderType = this.params[2] || \"text/plain\",\n\t\tserveType = this.params[3] || \"text/html\",\n\t\tusername = this.params[4],\n\t\tpassword = this.params[5],\n\t\thost = this.params[6] || \"127.0.0.1\",\n\t\tpathprefix = this.params[7];\n\tthis.server.set({\n\t\trootTiddler: rootTiddler,\n\t\trenderType: renderType,\n\t\tserveType: serveType,\n\t\tusername: username,\n\t\tpassword: password,\n\t\tpathprefix: pathprefix\n\t});\n\tthis.server.listen(port,host);\n\t$tw.utils.log(\"Serving on \" + host + \":\" + port,\"brown/orange\");\n\t$tw.utils.log(\"(press ctrl-C to exit)\",\"red\");\n\t// Warn if required plugins are missing\n\tif(!$tw.wiki.getTiddler(\"$:/plugins/tiddlywiki/tiddlyweb\") || !$tw.wiki.getTiddler(\"$:/plugins/tiddlywiki/filesystem\")) {\n\t\t$tw.utils.warning(\"Warning: Plugins required for client-server operation (\\\"tiddlywiki/filesystem\\\" and \\\"tiddlywiki/tiddlyweb\\\") are missing from tiddlywiki.info file\");\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/setfield.js": {
"title": "$:/core/modules/commands/setfield.js",
"text": "/*\\\ntitle: $:/core/modules/commands/setfield.js\ntype: application/javascript\nmodule-type: command\n\nCommand to modify selected tiddlers to set a field to the text of a template tiddler that has been wikified with the selected tiddler as the current tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"setfield\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 4) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar self = this,\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tfieldname = this.params[1] || \"text\",\n\t\ttemplatetitle = this.params[2],\n\t\trendertype = this.params[3] || \"text/plain\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(templatetitle),\n\t\t\tnewFields = {},\n\t\t\ttiddler = wiki.getTiddler(title);\n\t\tif(parser) {\n\t\t\tvar widgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}});\n\t\t\tvar container = $tw.fakeDocument.createElement(\"div\");\n\t\t\twidgetNode.render(container,null);\n\t\t\tnewFields[fieldname] = rendertype === \"text/html\" ? container.innerHTML : container.textContent;\n\t\t} else {\n\t\t\tnewFields[fieldname] = undefined;\n\t\t}\n\t\twiki.addTiddler(new $tw.Tiddler(tiddler,newFields));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/unpackplugin.js": {
"title": "$:/core/modules/commands/unpackplugin.js",
"text": "/*\\\ntitle: $:/core/modules/commands/unpackplugin.js\ntype: application/javascript\nmodule-type: command\n\nCommand to extract the shadow tiddlers from within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"unpackplugin\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing plugin name\";\n\t}\n\tvar self = this,\n\t\ttitle = this.params[0],\n\t\tpluginData = this.commander.wiki.getTiddlerDataCached(title);\n\tif(!pluginData) {\n\t\treturn \"Plugin '\" + title + \"' not found\";\n\t}\n\t$tw.utils.each(pluginData.tiddlers,function(tiddler) {\n\t\tself.commander.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/verbose.js": {
"title": "$:/core/modules/commands/verbose.js",
"text": "/*\\\ntitle: $:/core/modules/commands/verbose.js\ntype: application/javascript\nmodule-type: command\n\nVerbose command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"verbose\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.verbose = true;\n\t// Output the boot message log\n\tthis.commander.streams.output.write(\"Boot log:\\n \" + $tw.boot.logMessages.join(\"\\n \") + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/version.js": {
"title": "$:/core/modules/commands/version.js",
"text": "/*\\\ntitle: $:/core/modules/commands/version.js\ntype: application/javascript\nmodule-type: command\n\nVersion command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"version\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.streams.output.write($tw.version + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/config.js": {
"title": "$:/core/modules/config.js",
"text": "/*\\\ntitle: $:/core/modules/config.js\ntype: application/javascript\nmodule-type: config\n\nCore configuration constants\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.preferences = {};\n\nexports.preferences.notificationDuration = 3 * 1000;\nexports.preferences.jsonSpaces = 4;\n\nexports.textPrimitives = {\n\tupperLetter: \"[A-Z\\u00c0-\\u00d6\\u00d8-\\u00de\\u0150\\u0170]\",\n\tlowerLetter: \"[a-z\\u00df-\\u00f6\\u00f8-\\u00ff\\u0151\\u0171]\",\n\tanyLetter: \"[A-Za-z0-9\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\",\n\tblockPrefixLetters:\t\"[A-Za-z0-9-_\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\"\n};\n\nexports.textPrimitives.unWikiLink = \"~\";\nexports.textPrimitives.wikiLink = exports.textPrimitives.upperLetter + \"+\" +\n\texports.textPrimitives.lowerLetter + \"+\" +\n\texports.textPrimitives.upperLetter +\n\texports.textPrimitives.anyLetter + \"*\";\n\nexports.htmlEntities = {quot:34, amp:38, apos:39, lt:60, gt:62, nbsp:160, iexcl:161, cent:162, pound:163, curren:164, yen:165, brvbar:166, sect:167, uml:168, copy:169, ordf:170, laquo:171, not:172, shy:173, reg:174, macr:175, deg:176, plusmn:177, sup2:178, sup3:179, acute:180, micro:181, para:182, middot:183, cedil:184, sup1:185, ordm:186, raquo:187, frac14:188, frac12:189, frac34:190, iquest:191, Agrave:192, Aacute:193, Acirc:194, Atilde:195, Auml:196, Aring:197, AElig:198, Ccedil:199, Egrave:200, Eacute:201, Ecirc:202, Euml:203, Igrave:204, Iacute:205, Icirc:206, Iuml:207, ETH:208, Ntilde:209, Ograve:210, Oacute:211, Ocirc:212, Otilde:213, Ouml:214, times:215, Oslash:216, Ugrave:217, Uacute:218, Ucirc:219, Uuml:220, Yacute:221, THORN:222, szlig:223, agrave:224, aacute:225, acirc:226, atilde:227, auml:228, aring:229, aelig:230, ccedil:231, egrave:232, eacute:233, ecirc:234, euml:235, igrave:236, iacute:237, icirc:238, iuml:239, eth:240, ntilde:241, ograve:242, oacute:243, ocirc:244, otilde:245, ouml:246, divide:247, oslash:248, ugrave:249, uacute:250, ucirc:251, uuml:252, yacute:253, thorn:254, yuml:255, OElig:338, oelig:339, Scaron:352, scaron:353, Yuml:376, fnof:402, circ:710, tilde:732, Alpha:913, Beta:914, Gamma:915, Delta:916, Epsilon:917, Zeta:918, Eta:919, Theta:920, Iota:921, Kappa:922, Lambda:923, Mu:924, Nu:925, Xi:926, Omicron:927, Pi:928, Rho:929, Sigma:931, Tau:932, Upsilon:933, Phi:934, Chi:935, Psi:936, Omega:937, alpha:945, beta:946, gamma:947, delta:948, epsilon:949, zeta:950, eta:951, theta:952, iota:953, kappa:954, lambda:955, mu:956, nu:957, xi:958, omicron:959, pi:960, rho:961, sigmaf:962, sigma:963, tau:964, upsilon:965, phi:966, chi:967, psi:968, omega:969, thetasym:977, upsih:978, piv:982, ensp:8194, emsp:8195, thinsp:8201, zwnj:8204, zwj:8205, lrm:8206, rlm:8207, ndash:8211, mdash:8212, lsquo:8216, rsquo:8217, sbquo:8218, ldquo:8220, rdquo:8221, bdquo:8222, dagger:8224, Dagger:8225, bull:8226, hellip:8230, permil:8240, prime:8242, Prime:8243, lsaquo:8249, rsaquo:8250, oline:8254, frasl:8260, euro:8364, image:8465, weierp:8472, real:8476, trade:8482, alefsym:8501, larr:8592, uarr:8593, rarr:8594, darr:8595, harr:8596, crarr:8629, lArr:8656, uArr:8657, rArr:8658, dArr:8659, hArr:8660, forall:8704, part:8706, exist:8707, empty:8709, nabla:8711, isin:8712, notin:8713, ni:8715, prod:8719, sum:8721, minus:8722, lowast:8727, radic:8730, prop:8733, infin:8734, ang:8736, and:8743, or:8744, cap:8745, cup:8746, int:8747, there4:8756, sim:8764, cong:8773, asymp:8776, ne:8800, equiv:8801, le:8804, ge:8805, sub:8834, sup:8835, nsub:8836, sube:8838, supe:8839, oplus:8853, otimes:8855, perp:8869, sdot:8901, lceil:8968, rceil:8969, lfloor:8970, rfloor:8971, lang:9001, rang:9002, loz:9674, spades:9824, clubs:9827, hearts:9829, diams:9830 };\n\nexports.htmlVoidElements = \"area,base,br,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr\".split(\",\");\n\nexports.htmlBlockElements = \"address,article,aside,audio,blockquote,canvas,dd,div,dl,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,li,noscript,ol,output,p,pre,section,table,tfoot,ul,video\".split(\",\");\n\nexports.htmlUnsafeElements = \"script\".split(\",\");\n\n})();\n",
"type": "application/javascript",
"module-type": "config"
},
"$:/core/modules/deserializers.js": {
"title": "$:/core/modules/deserializers.js",
"text": "/*\\\ntitle: $:/core/modules/deserializers.js\ntype: application/javascript\nmodule-type: tiddlerdeserializer\n\nFunctions to deserialise tiddlers from a block of text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nUtility function to parse an old-style tiddler DIV in a *.tid file. It looks like this:\n\n<div title=\"Title\" creator=\"JoeBloggs\" modifier=\"JoeBloggs\" created=\"201102111106\" modified=\"201102111310\" tags=\"myTag [[my long tag]]\">\n<pre>The text of the tiddler (without the expected HTML encoding).\n</pre>\n</div>\n\nNote that the field attributes are HTML encoded, but that the body of the <PRE> tag is not encoded.\n\nWhen these tiddler DIVs are encountered within a TiddlyWiki HTML file then the body is encoded in the usual way.\n*/\nvar parseTiddlerDiv = function(text /* [,fields] */) {\n\t// Slot together the default results\n\tvar result = {};\n\tif(arguments.length > 1) {\n\t\tfor(var f=1; f<arguments.length; f++) {\n\t\t\tvar fields = arguments[f];\n\t\t\tfor(var t in fields) {\n\t\t\t\tresult[t] = fields[t];\t\t\n\t\t\t}\n\t\t}\n\t}\n\t// Parse the DIV body\n\tvar startRegExp = /^\\s*<div\\s+([^>]*)>(\\s*<pre>)?/gi,\n\t\tendRegExp,\n\t\tmatch = startRegExp.exec(text);\n\tif(match) {\n\t\t// Old-style DIVs don't have the <pre> tag\n\t\tif(match[2]) {\n\t\t\tendRegExp = /<\\/pre>\\s*<\\/div>\\s*$/gi;\n\t\t} else {\n\t\t\tendRegExp = /<\\/div>\\s*$/gi;\n\t\t}\n\t\tvar endMatch = endRegExp.exec(text);\n\t\tif(endMatch) {\n\t\t\t// Extract the text\n\t\t\tresult.text = text.substring(match.index + match[0].length,endMatch.index);\n\t\t\t// Process the attributes\n\t\t\tvar attrRegExp = /\\s*([^=\\s]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/gi,\n\t\t\t\tattrMatch;\n\t\t\tdo {\n\t\t\t\tattrMatch = attrRegExp.exec(match[1]);\n\t\t\t\tif(attrMatch) {\n\t\t\t\t\tvar name = attrMatch[1];\n\t\t\t\t\tvar value = attrMatch[2] !== undefined ? attrMatch[2] : attrMatch[3];\n\t\t\t\t\tresult[name] = value;\n\t\t\t\t}\n\t\t\t} while(attrMatch);\n\t\t\treturn result;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports[\"application/x-tiddler-html-div\"] = function(text,fields) {\n\treturn [parseTiddlerDiv(text,fields)];\n};\n\nexports[\"application/json\"] = function(text,fields) {\n\tvar incoming,\n\t\tresults = [];\n\ttry {\n\t\tincoming = JSON.parse(text);\n\t} catch(e) {\n\t\tincoming = [{\n\t\t\ttitle: \"JSON error: \" + e,\n\t\t\ttext: \"\"\n\t\t}]\n\t}\n\tif(!$tw.utils.isArray(incoming)) {\n\t\tincoming = [incoming];\n\t}\n\tfor(var t=0; t<incoming.length; t++) {\n\t\tvar incomingFields = incoming[t],\n\t\t\tfields = {};\n\t\tfor(var f in incomingFields) {\n\t\t\tif(typeof incomingFields[f] === \"string\") {\n\t\t\t\tfields[f] = incomingFields[f];\n\t\t\t}\n\t\t}\n\t\tresults.push(fields);\n\t}\n\treturn results;\n};\n\n/*\nParse an HTML file into tiddlers. There are three possibilities:\n# A TiddlyWiki classic HTML file containing `text/x-tiddlywiki` tiddlers\n# A TiddlyWiki5 HTML file containing `text/vnd.tiddlywiki` tiddlers\n# An ordinary HTML file\n*/\nexports[\"text/html\"] = function(text,fields) {\n\t// Check if we've got a store area\n\tvar storeAreaMarkerRegExp = /<div id=[\"']?storeArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\tmatch = storeAreaMarkerRegExp.exec(text);\n\tif(match) {\n\t\t// If so, it's either a classic TiddlyWiki file or an unencrypted TW5 file\n\t\t// First read the normal tiddlers\n\t\tvar results = deserializeTiddlyWikiFile(text,storeAreaMarkerRegExp.lastIndex,!!match[1],fields);\n\t\t// Then any system tiddlers\n\t\tvar systemAreaMarkerRegExp = /<div id=[\"']?systemArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\t\tsysMatch = systemAreaMarkerRegExp.exec(text);\n\t\tif(sysMatch) {\n\t\t\tresults.push.apply(results,deserializeTiddlyWikiFile(text,systemAreaMarkerRegExp.lastIndex,!!sysMatch[1],fields));\n\t\t}\n\t\treturn results;\n\t} else {\n\t\t// Check whether we've got an encrypted file\n\t\tvar encryptedStoreArea = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedStoreArea) {\n\t\t\t// If so, attempt to decrypt it using the current password\n\t\t\treturn $tw.utils.decryptStoreArea(encryptedStoreArea);\n\t\t} else {\n\t\t\t// It's not a TiddlyWiki so we'll return the entire HTML file as a tiddler\n\t\t\treturn deserializeHtmlFile(text,fields);\n\t\t}\n\t}\n};\n\nfunction deserializeHtmlFile(text,fields) {\n\tvar result = {};\n\t$tw.utils.each(fields,function(value,name) {\n\t\tresult[name] = value;\n\t});\n\tresult.text = text;\n\tresult.type = \"text/html\";\n\treturn [result];\n}\n\nfunction deserializeTiddlyWikiFile(text,storeAreaEnd,isTiddlyWiki5,fields) {\n\tvar results = [],\n\t\tendOfDivRegExp = /(<\\/div>\\s*)/gi,\n\t\tstartPos = storeAreaEnd,\n\t\tdefaultType = isTiddlyWiki5 ? undefined : \"text/x-tiddlywiki\";\n\tendOfDivRegExp.lastIndex = startPos;\n\tvar match = endOfDivRegExp.exec(text);\n\twhile(match) {\n\t\tvar endPos = endOfDivRegExp.lastIndex,\n\t\t\ttiddlerFields = parseTiddlerDiv(text.substring(startPos,endPos),fields,{type: defaultType});\n\t\tif(!tiddlerFields) {\n\t\t\tbreak;\n\t\t}\n\t\t$tw.utils.each(tiddlerFields,function(value,name) {\n\t\t\tif(typeof value === \"string\") {\n\t\t\t\ttiddlerFields[name] = $tw.utils.htmlDecode(value);\n\t\t\t}\n\t\t});\n\t\tif(tiddlerFields.text !== null) {\n\t\t\tresults.push(tiddlerFields);\n\t\t}\n\t\tstartPos = endPos;\n\t\tmatch = endOfDivRegExp.exec(text);\n\t}\n\treturn results;\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "tiddlerdeserializer"
},
"$:/core/modules/editor/engines/framed.js": {
"title": "$:/core/modules/editor/engines/framed.js",
"text": "/*\\\ntitle: $:/core/modules/editor/engines/framed.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea within an iframe. This is done so that the selection is preserved even when clicking away from the textarea\n\n\\*/\n(function(){\n\n/*jslint node: true,browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction FramedEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Create our hidden dummy text area for reading styles\n\tthis.dummyTextArea = this.widget.document.createElement(\"textarea\");\n\tif(this.widget.editClass) {\n\t\tthis.dummyTextArea.className = this.widget.editClass;\n\t}\n\tthis.dummyTextArea.setAttribute(\"hidden\",\"true\");\n\tthis.parentNode.insertBefore(this.dummyTextArea,this.nextSibling);\n\tthis.widget.domNodes.push(this.dummyTextArea);\n\t// Create the iframe\n\tthis.iframeNode = this.widget.document.createElement(\"iframe\");\n\tthis.parentNode.insertBefore(this.iframeNode,this.nextSibling);\n\tthis.iframeDoc = this.iframeNode.contentWindow.document;\n\t// (Firefox requires us to put some empty content in the iframe)\n\tthis.iframeDoc.open();\n\tthis.iframeDoc.write(\"\");\n\tthis.iframeDoc.close();\n\t// Style the iframe\n\tthis.iframeNode.className = this.dummyTextArea.className;\n\tthis.iframeNode.style.border = \"none\";\n\tthis.iframeNode.style.padding = \"0\";\n\tthis.iframeNode.style.resize = \"none\";\n\tthis.iframeDoc.body.style.margin = \"0\";\n\tthis.iframeDoc.body.style.padding = \"0\";\n\tthis.widget.domNodes.push(this.iframeNode);\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.iframeDoc.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.iframeDoc.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\t// Copy the styles from the dummy textarea\n\tthis.copyStyles();\n\t// Add event listeners\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"input\",handlerObject: this,handlerMethod: \"handleInputEvent\"},\n\t\t{name: \"keydown\",handlerObject: this.widget,handlerMethod: \"handleKeydownEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tthis.iframeDoc.body.appendChild(this.domNode);\n}\n\n/*\nCopy styles from the dummy text area to the textarea in the iframe\n*/\nFramedEngine.prototype.copyStyles = function() {\n\t// Copy all styles\n\t$tw.utils.copyStyles(this.dummyTextArea,this.domNode);\n\t// Override the ones that should not be set the same as the dummy textarea\n\tthis.domNode.style.display = \"block\";\n\tthis.domNode.style.width = \"100%\";\n\tthis.domNode.style.margin = \"0\";\n\t// In Chrome setting -webkit-text-fill-color overrides the placeholder text colour\n\tthis.domNode.style[\"-webkit-text-fill-color\"] = \"currentcolor\";\n};\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nFramedEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode) {\n\t\t\tthis.domNode.value = text;\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nGet the text of the engine\n*/\nFramedEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nFramedEngine.prototype.fixHeight = function() {\n\t// Make sure styles are updated\n\tthis.copyStyles();\n\t// Adjust height\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\tvar newHeight = $tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t\tthis.iframeNode.style.height = (newHeight + 14) + \"px\"; // +14 for the border on the textarea\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t\tthis.iframeNode.style.height = (fixedHeight + 14) + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nFramedEngine.prototype.focus = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nFramedEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nFramedEngine.prototype.createTextOperation = function() {\n\tvar operation = {\n\t\ttext: this.domNode.value,\n\t\tselStart: this.domNode.selectionStart,\n\t\tselEnd: this.domNode.selectionEnd,\n\t\tcutStart: null,\n\t\tcutEnd: null,\n\t\treplacement: null,\n\t\tnewSelStart: null,\n\t\tnewSelEnd: null\n\t};\n\toperation.selection = operation.text.substring(operation.selStart,operation.selEnd);\n\treturn operation;\n};\n\n/*\nExecute a text operation\n*/\nFramedEngine.prototype.executeTextOperation = function(operation) {\n\t// Perform the required changes to the text area and the underlying tiddler\n\tvar newText = operation.text;\n\tif(operation.replacement !== null) {\n\t\tnewText = operation.text.substring(0,operation.cutStart) + operation.replacement + operation.text.substring(operation.cutEnd);\n\t\t// Attempt to use a execCommand to modify the value of the control\n\t\tif(this.iframeDoc.queryCommandSupported(\"insertText\") && this.iframeDoc.queryCommandSupported(\"delete\") && !$tw.browser.isFirefox) {\n\t\t\tthis.domNode.focus();\n\t\t\tthis.domNode.setSelectionRange(operation.cutStart,operation.cutEnd);\n\t\t\tif(operation.replacement === \"\") {\n\t\t\t\tthis.iframeDoc.execCommand(\"delete\",false,\"\");\n\t\t\t} else {\n\t\t\t\tthis.iframeDoc.execCommand(\"insertText\",false,operation.replacement);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.domNode.value = newText;\n\t\t}\n\t\tthis.domNode.focus();\n\t\tthis.domNode.setSelectionRange(operation.newSelStart,operation.newSelEnd);\n\t}\n\tthis.domNode.focus();\n\treturn newText;\n};\n\nexports.FramedEngine = FramedEngine;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/editor/engines/simple.js": {
"title": "$:/core/modules/editor/engines/simple.js",
"text": "/*\\\ntitle: $:/core/modules/editor/engines/simple.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction SimpleEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.widget.document.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.widget.document.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\tif(this.widget.editClass) {\n\t\tthis.domNode.className = this.widget.editClass;\n\t}\n\t// Add an input event handler\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"focus\", handlerObject: this, handlerMethod: \"handleFocusEvent\"},\n\t\t{name: \"input\", handlerObject: this, handlerMethod: \"handleInputEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tthis.parentNode.insertBefore(this.domNode,this.nextSibling);\n\tthis.widget.domNodes.push(this.domNode);\n}\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nSimpleEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode || text === \"\") {\n\t\t\tthis.domNode.value = text;\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nGet the text of the engine\n*/\nSimpleEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nSimpleEngine.prototype.fixHeight = function() {\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\t$tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nSimpleEngine.prototype.focus = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nSimpleEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nHandle a dom \"focus\" event\n*/\nSimpleEngine.prototype.handleFocusEvent = function(event) {\n\tif(this.widget.editFocusPopup) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNode,\n\t\t\ttitle: this.widget.editFocusPopup,\n\t\t\twiki: this.widget.wiki,\n\t\t\tforce: true\n\t\t});\n\t}\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nSimpleEngine.prototype.createTextOperation = function() {\n\treturn null;\n};\n\n/*\nExecute a text operation\n*/\nSimpleEngine.prototype.executeTextOperation = function(operation) {\n};\n\nexports.SimpleEngine = SimpleEngine;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/editor/factory.js": {
"title": "$:/core/modules/editor/factory.js",
"text": "/*\\\ntitle: $:/core/modules/editor/factory.js\ntype: application/javascript\nmodule-type: library\n\nFactory for constructing text editor widgets with specified engines for the toolbar and non-toolbar cases\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DEFAULT_MIN_TEXT_AREA_HEIGHT = \"100px\"; // Minimum height of textareas in pixels\n\n// Configuration tiddlers\nvar HEIGHT_MODE_TITLE = \"$:/config/TextEditor/EditorHeight/Mode\";\nvar ENABLE_TOOLBAR_TITLE = \"$:/config/TextEditor/EnableToolbar\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nfunction editTextWidgetFactory(toolbarEngine,nonToolbarEngine) {\n\n\tvar EditTextWidget = function(parseTreeNode,options) {\n\t\t// Initialise the editor operations if they've not been done already\n\t\tif(!this.editorOperations) {\n\t\t\tEditTextWidget.prototype.editorOperations = {};\n\t\t\t$tw.modules.applyMethods(\"texteditoroperation\",this.editorOperations);\n\t\t}\n\t\tthis.initialise(parseTreeNode,options);\n\t};\n\n\t/*\n\tInherit from the base widget class\n\t*/\n\tEditTextWidget.prototype = new Widget();\n\n\t/*\n\tRender this widget into the DOM\n\t*/\n\tEditTextWidget.prototype.render = function(parent,nextSibling) {\n\t\t// Save the parent dom node\n\t\tthis.parentDomNode = parent;\n\t\t// Compute our attributes\n\t\tthis.computeAttributes();\n\t\t// Execute our logic\n\t\tthis.execute();\n\t\t// Create the wrapper for the toolbar and render its content\n\t\tif(this.editShowToolbar) {\n\t\t\tthis.toolbarNode = this.document.createElement(\"div\");\n\t\t\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\t\t\tparent.insertBefore(this.toolbarNode,nextSibling);\n\t\t\tthis.renderChildren(this.toolbarNode,null);\n\t\t\tthis.domNodes.push(this.toolbarNode);\n\t\t}\n\t\t// Create our element\n\t\tvar editInfo = this.getEditInfo(),\n\t\t\tEngine = this.editShowToolbar ? toolbarEngine : nonToolbarEngine;\n\t\tthis.engine = new Engine({\n\t\t\t\twidget: this,\n\t\t\t\tvalue: editInfo.value,\n\t\t\t\ttype: editInfo.type,\n\t\t\t\tparentNode: parent,\n\t\t\t\tnextSibling: nextSibling\n\t\t\t});\n\t\t// Call the postRender hook\n\t\tif(this.postRender) {\n\t\t\tthis.postRender();\n\t\t}\n\t\t// Fix height\n\t\tthis.engine.fixHeight();\n\t\t// Focus if required\n\t\tif(this.editFocus === \"true\" || this.editFocus === \"yes\") {\n\t\t\tthis.engine.focus();\n\t\t}\n\t\t// Add widget message listeners\n\t\tthis.addEventListeners([\n\t\t\t{type: \"tm-edit-text-operation\", handler: \"handleEditTextOperationMessage\"}\n\t\t]);\n\t};\n\n\t/*\n\tGet the tiddler being edited and current value\n\t*/\n\tEditTextWidget.prototype.getEditInfo = function() {\n\t\t// Get the edit value\n\t\tvar self = this,\n\t\t\tvalue,\n\t\t\ttype = \"text/plain\",\n\t\t\tupdate;\n\t\tif(this.editIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(this.editTitle,this.editIndex,this.editDefault);\n\t\t\tupdate = function(value) {\n\t\t\t\tvar data = self.wiki.getTiddlerData(self.editTitle,{});\n\t\t\t\tif(data[self.editIndex] !== value) {\n\t\t\t\t\tdata[self.editIndex] = value;\n\t\t\t\t\tself.wiki.setTiddlerData(self.editTitle,data);\n\t\t\t\t}\n\t\t\t};\n\t\t} else {\n\t\t\t// Get the current tiddler and the field name\n\t\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\t\tif(tiddler) {\n\t\t\t\t// If we've got a tiddler, the value to display is the field string value\n\t\t\t\tvalue = tiddler.getFieldString(this.editField);\n\t\t\t\tif(this.editField === \"text\") {\n\t\t\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise, we need to construct a default value for the editor\n\t\t\t\tswitch(this.editField) {\n\t\t\t\t\tcase \"text\":\n\t\t\t\t\t\tvalue = \"Type the text for the tiddler '\" + this.editTitle + \"'\";\n\t\t\t\t\t\ttype = \"text/vnd.tiddlywiki\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"title\":\n\t\t\t\t\t\tvalue = this.editTitle;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(this.editDefault !== undefined) {\n\t\t\t\t\tvalue = this.editDefault;\n\t\t\t\t}\n\t\t\t}\n\t\t\tupdate = function(value) {\n\t\t\t\tvar tiddler = self.wiki.getTiddler(self.editTitle),\n\t\t\t\t\tupdateFields = {\n\t\t\t\t\t\ttitle: self.editTitle\n\t\t\t\t\t};\n\t\t\t\tupdateFields[self.editField] = value;\n\t\t\t\tself.wiki.addTiddler(new $tw.Tiddler(self.wiki.getCreationFields(),tiddler,updateFields,self.wiki.getModificationFields()));\n\t\t\t};\n\t\t}\n\t\tif(this.editType) {\n\t\t\ttype = this.editType;\n\t\t}\n\t\treturn {value: value || \"\", type: type, update: update};\n\t};\n\n\t/*\n\tHandle an edit text operation message from the toolbar\n\t*/\n\tEditTextWidget.prototype.handleEditTextOperationMessage = function(event) {\n\t\t// Prepare information about the operation\n\t\tvar operation = this.engine.createTextOperation();\n\t\t// Invoke the handler for the selected operation\n\t\tvar handler = this.editorOperations[event.param];\n\t\tif(handler) {\n\t\t\thandler.call(this,event,operation);\n\t\t}\n\t\t// Execute the operation via the engine\n\t\tvar newText = this.engine.executeTextOperation(operation);\n\t\t// Fix the tiddler height and save changes\n\t\tthis.engine.fixHeight();\n\t\tthis.saveChanges(newText);\n\t};\n\n\t/*\n\tCompute the internal state of the widget\n\t*/\n\tEditTextWidget.prototype.execute = function() {\n\t\t// Get our parameters\n\t\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t\tthis.editField = this.getAttribute(\"field\",\"text\");\n\t\tthis.editIndex = this.getAttribute(\"index\");\n\t\tthis.editDefault = this.getAttribute(\"default\");\n\t\tthis.editClass = this.getAttribute(\"class\");\n\t\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\t\tthis.editSize = this.getAttribute(\"size\");\n\t\tthis.editRows = this.getAttribute(\"rows\");\n\t\tthis.editAutoHeight = this.wiki.getTiddlerText(HEIGHT_MODE_TITLE,\"auto\");\n\t\tthis.editAutoHeight = this.getAttribute(\"autoHeight\",this.editAutoHeight === \"auto\" ? \"yes\" : \"no\") === \"yes\";\n\t\tthis.editMinHeight = this.getAttribute(\"minHeight\",DEFAULT_MIN_TEXT_AREA_HEIGHT);\n\t\tthis.editFocusPopup = this.getAttribute(\"focusPopup\");\n\t\tthis.editFocus = this.getAttribute(\"focus\");\n\t\t// Get the default editor element tag and type\n\t\tvar tag,type;\n\t\tif(this.editField === \"text\") {\n\t\t\ttag = \"textarea\";\n\t\t} else {\n\t\t\ttag = \"input\";\n\t\t\tvar fieldModule = $tw.Tiddler.fieldModules[this.editField];\n\t\t\tif(fieldModule && fieldModule.editTag) {\n\t\t\t\ttag = fieldModule.editTag;\n\t\t\t}\n\t\t\tif(fieldModule && fieldModule.editType) {\n\t\t\t\ttype = fieldModule.editType;\n\t\t\t}\n\t\t\ttype = type || \"text\";\n\t\t}\n\t\t// Get the rest of our parameters\n\t\tthis.editTag = this.getAttribute(\"tag\",tag);\n\t\tthis.editType = this.getAttribute(\"type\",type);\n\t\t// Make the child widgets\n\t\tthis.makeChildWidgets();\n\t\t// Determine whether to show the toolbar\n\t\tthis.editShowToolbar = this.wiki.getTiddlerText(ENABLE_TOOLBAR_TITLE,\"yes\");\n\t\tthis.editShowToolbar = (this.editShowToolbar === \"yes\") && !!(this.children && this.children.length > 0);\n\t};\n\n\t/*\n\tSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n\t*/\n\tEditTextWidget.prototype.refresh = function(changedTiddlers) {\n\t\tvar changedAttributes = this.computeAttributes();\n\t\t// Completely rerender if any of our attributes have changed\n\t\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.placeholder || changedAttributes.size || changedAttributes.autoHeight || changedAttributes.minHeight || changedAttributes.focusPopup || changedAttributes.rows || changedTiddlers[HEIGHT_MODE_TITLE] || changedTiddlers[ENABLE_TOOLBAR_TITLE]) {\n\t\t\tthis.refreshSelf();\n\t\t\treturn true;\n\t\t} else if(changedTiddlers[this.editTitle]) {\n\t\t\tvar editInfo = this.getEditInfo();\n\t\t\tthis.updateEditor(editInfo.value,editInfo.type);\n\t\t}\n\t\tthis.engine.fixHeight();\n\t\tif(this.editShowToolbar) {\n\t\t\treturn this.refreshChildren(changedTiddlers);\t\t\t\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\t/*\n\tUpdate the editor with new text. This method is separate from updateEditorDomNode()\n\tso that subclasses can override updateEditor() and still use updateEditorDomNode()\n\t*/\n\tEditTextWidget.prototype.updateEditor = function(text,type) {\n\t\tthis.updateEditorDomNode(text,type);\n\t};\n\n\t/*\n\tUpdate the editor dom node with new text\n\t*/\n\tEditTextWidget.prototype.updateEditorDomNode = function(text,type) {\n\t\tthis.engine.setText(text,type);\n\t};\n\n\t/*\n\tSave changes back to the tiddler store\n\t*/\n\tEditTextWidget.prototype.saveChanges = function(text) {\n\t\tvar editInfo = this.getEditInfo();\n\t\tif(text !== editInfo.value) {\n\t\t\teditInfo.update(text);\n\t\t}\n\t};\n\n\t/*\n\tHandle a dom \"keydown\" event, which we'll bubble up to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.handleKeydownEvent = function(event) {\n\t\t// Check for a keyboard shortcut\n\t\tif(this.toolbarNode) {\n\t\t\tvar shortcutElements = this.toolbarNode.querySelectorAll(\"[data-tw-keyboard-shortcut]\");\n\t\t\tfor(var index=0; index<shortcutElements.length; index++) {\n\t\t\t\tvar el = shortcutElements[index],\n\t\t\t\t\tshortcutData = el.getAttribute(\"data-tw-keyboard-shortcut\"),\n\t\t\t\t\tkeyInfoArray = $tw.keyboardManager.parseKeyDescriptors(shortcutData,{\n\t\t\t\t\t\twiki: this.wiki\n\t\t\t\t\t});\n\t\t\t\tif($tw.keyboardManager.checkKeyDescriptors(event,keyInfoArray)) {\n\t\t\t\t\tvar clickEvent = this.document.createEvent(\"Events\");\n\t\t\t\t clickEvent.initEvent(\"click\",true,false);\n\t\t\t\t el.dispatchEvent(clickEvent);\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\treturn true;\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Propogate the event to the container\n\t\tif(this.propogateKeydownEvent(event)) {\n\t\t\t// Ignore the keydown if it was already handled\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\t// Otherwise, process the keydown normally\n\t\treturn false;\n\t};\n\n\t/*\n\tPropogate keydown events to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.propogateKeydownEvent = function(event) {\n\t\tvar newEvent = this.document.createEventObject ? this.document.createEventObject() : this.document.createEvent(\"Events\");\n\t\tif(newEvent.initEvent) {\n\t\t\tnewEvent.initEvent(\"keydown\", true, true);\n\t\t}\n\t\tnewEvent.keyCode = event.keyCode;\n\t\tnewEvent.which = event.which;\n\t\tnewEvent.metaKey = event.metaKey;\n\t\tnewEvent.ctrlKey = event.ctrlKey;\n\t\tnewEvent.altKey = event.altKey;\n\t\tnewEvent.shiftKey = event.shiftKey;\n\t\treturn !this.parentDomNode.dispatchEvent(newEvent);\n\t};\n\n\treturn EditTextWidget;\n\n}\n\nexports.editTextWidgetFactory = editTextWidgetFactory;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/editor/operations/bitmap/clear.js": {
"title": "$:/core/modules/editor/operations/bitmap/clear.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/clear.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to clear the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"clear\"] = function(event) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.globalAlpha = 1;\n\tctx.fillStyle = event.paramObject.colour || \"white\";\n\tctx.fillRect(0,0,this.canvasDomNode.width,this.canvasDomNode.height);\n\t// Save changes\n\tthis.strokeEnd();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "bitmapeditoroperation"
},
"$:/core/modules/editor/operations/bitmap/resize.js": {
"title": "$:/core/modules/editor/operations/bitmap/resize.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/resize.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to resize the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"resize\"] = function(event) {\n\t// Get the new width\n\tvar newWidth = parseInt(event.paramObject.width || this.canvasDomNode.width,10),\n\t\tnewHeight = parseInt(event.paramObject.height || this.canvasDomNode.height,10);\n\t// Update if necessary\n\tif(newWidth > 0 && newHeight > 0 && !(newWidth === this.currCanvas.width && newHeight === this.currCanvas.height)) {\n\t\tthis.changeCanvasSize(newWidth,newHeight);\n\t}\n\t// Update the input controls\n\tthis.refreshToolbar();\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "bitmapeditoroperation"
},
"$:/core/modules/editor/operations/text/excise.js": {
"title": "$:/core/modules/editor/operations/text/excise.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/excise.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to excise the selection to a new tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"excise\"] = function(event,operation) {\n\tvar editTiddler = this.wiki.getTiddler(this.editTitle),\n\t\teditTiddlerTitle = this.editTitle;\n\tif(editTiddler && editTiddler.fields[\"draft.of\"]) {\n\t\teditTiddlerTitle = editTiddler.fields[\"draft.of\"];\n\t}\n\tvar excisionTitle = event.paramObject.title || this.wiki.generateNewTitle(\"New Excision\");\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\tthis.wiki.getModificationFields(),\n\t\t{\n\t\t\ttitle: excisionTitle,\n\t\t\ttext: operation.selection,\n\t\t\ttags: event.paramObject.tagnew === \"yes\" ? [editTiddlerTitle] : []\n\t\t}\n\t));\n\toperation.replacement = excisionTitle;\n\tswitch(event.paramObject.type || \"transclude\") {\n\t\tcase \"transclude\":\n\t\t\toperation.replacement = \"{{\" + operation.replacement+ \"}}\";\n\t\t\tbreak;\n\t\tcase \"link\":\n\t\t\toperation.replacement = \"[[\" + operation.replacement+ \"]]\";\n\t\t\tbreak;\n\t\tcase \"macro\":\n\t\t\toperation.replacement = \"<<\" + (event.paramObject.macro || \"translink\") + \" \\\"\\\"\\\"\" + operation.replacement + \"\\\"\\\"\\\">>\";\n\t\t\tbreak;\n\t}\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/make-link.js": {
"title": "$:/core/modules/editor/operations/text/make-link.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/make-link.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to make a link\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"make-link\"] = function(event,operation) {\n\tif(operation.selection) {\n\t\toperation.replacement = \"[[\" + operation.selection + \"|\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t} else {\n\t\toperation.replacement = \"[[\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t}\n\toperation.newSelStart = operation.selStart + operation.replacement.length;\n\toperation.newSelEnd = operation.newSelStart;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/prefix-lines.js": {
"title": "$:/core/modules/editor/operations/text/prefix-lines.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/prefix-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to add a prefix to the selected lines\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"prefix-lines\"] = function(event,operation) {\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Compose the required prefix\n\tvar prefix = $tw.utils.repeat(event.paramObject.character,event.paramObject.count);\n\t// Process each line\n\tvar lines = operation.text.substring(operation.cutStart,operation.cutEnd).split(/\\r?\\n/mg);\n\t$tw.utils.each(lines,function(line,index) {\n\t\t// Remove and count any existing prefix characters\n\t\tvar count = 0;\n\t\twhile(line.charAt(0) === event.paramObject.character) {\n\t\t\tline = line.substring(1);\n\t\t\tcount++;\n\t\t}\n\t\t// Remove any whitespace\n\t\twhile(line.charAt(0) === \" \") {\n\t\t\tline = line.substring(1);\n\t\t}\n\t\t// We're done if we removed the exact required prefix, otherwise add it\n\t\tif(count !== event.paramObject.count) {\n\t\t\t// Apply the prefix\n\t\t\tline = prefix + \" \" + line;\n\t\t}\n\t\t// Save the modified line\n\t\tlines[index] = line;\n\t});\n\t// Stitch the replacement text together and set the selection\n\toperation.replacement = lines.join(\"\\n\");\n\tif(lines.length === 1) {\n\t\toperation.newSelStart = operation.cutStart + operation.replacement.length;\n\t\toperation.newSelEnd = operation.newSelStart;\n\t} else {\n\t\toperation.newSelStart = operation.cutStart;\n\t\toperation.newSelEnd = operation.newSelStart + operation.replacement.length;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/replace-all.js": {
"title": "$:/core/modules/editor/operations/text/replace-all.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-all.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the entire text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-all\"] = function(event,operation) {\n\toperation.cutStart = 0;\n\toperation.cutEnd = operation.text.length;\n\toperation.replacement = event.paramObject.text;\n\toperation.newSelStart = 0;\n\toperation.newSelEnd = operation.replacement.length;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/replace-selection.js": {
"title": "$:/core/modules/editor/operations/text/replace-selection.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the selection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-selection\"] = function(event,operation) {\n\toperation.replacement = event.paramObject.text;\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/wrap-lines.js": {
"title": "$:/core/modules/editor/operations/text/wrap-lines.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selected lines with a prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-lines\"] = function(event,operation) {\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Add the prefix and suffix\n\toperation.replacement = event.paramObject.prefix + \"\\n\" +\n\t\t\t\toperation.text.substring(operation.cutStart,operation.cutEnd) + \"\\n\" +\n\t\t\t\tevent.paramObject.suffix + \"\\n\";\n\toperation.newSelStart = operation.cutStart + event.paramObject.prefix.length + 1;\n\toperation.newSelEnd = operation.newSelStart + (operation.cutEnd - operation.cutStart);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/wrap-selection.js": {
"title": "$:/core/modules/editor/operations/text/wrap-selection.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selection with the specified prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-selection\"] = function(event,operation) {\n\tif(operation.selStart === operation.selEnd) {\n\t\t// No selection; check if we're within the prefix/suffix\n\t\tif(operation.text.substring(operation.selStart - event.paramObject.prefix.length,operation.selStart + event.paramObject.suffix.length) === event.paramObject.prefix + event.paramObject.suffix) {\n\t\t\t// Remove the prefix and suffix unless they comprise the entire text\n\t\t\tif(operation.selStart > event.paramObject.prefix.length || (operation.selEnd + event.paramObject.suffix.length) < operation.text.length ) {\n\t\t\t\toperation.cutStart = operation.selStart - event.paramObject.prefix.length;\n\t\t\t\toperation.cutEnd = operation.selEnd + event.paramObject.suffix.length;\n\t\t\t\toperation.replacement = \"\";\n\t\t\t\toperation.newSelStart = operation.cutStart;\n\t\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t\t}\n\t\t} else {\n\t\t\t// Wrap the cursor instead\n\t\t\toperation.cutStart = operation.selStart;\n\t\t\toperation.cutEnd = operation.selEnd;\n\t\t\toperation.replacement = event.paramObject.prefix + event.paramObject.suffix;\n\t\t\toperation.newSelStart = operation.selStart + event.paramObject.prefix.length;\n\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t}\n\t} else if(operation.text.substring(operation.selStart,operation.selStart + event.paramObject.prefix.length) === event.paramObject.prefix && operation.text.substring(operation.selEnd - event.paramObject.suffix.length,operation.selEnd) === event.paramObject.suffix) {\n\t\t// Prefix and suffix are already present, so remove them\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = operation.selection.substring(event.paramObject.prefix.length,operation.selection.length - event.paramObject.suffix.length);\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t} else {\n\t\t// Add the prefix and suffix\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = event.paramObject.prefix + operation.selection + event.paramObject.suffix;\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/filters/addprefix.js": {
"title": "$:/core/modules/filters/addprefix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/addprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a prefix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(operator.operand + title);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/addsuffix.js": {
"title": "$:/core/modules/filters/addsuffix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/addsuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a suffix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addsuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title + operator.operand);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/after.js": {
"title": "$:/core/modules/filters/after.js",
"text": "/*\\\ntitle: $:/core/modules/filters/after.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is after the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.after = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index === -1 || index > (results.length - 2)) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index + 1]];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/all/current.js": {
"title": "$:/core/modules/filters/all/current.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/current.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar currTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(currTiddlerTitle) {\n\t\treturn [currTiddlerTitle];\n\t} else {\n\t\treturn [];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/missing.js": {
"title": "$:/core/modules/filters/all/missing.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/missing.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\treturn options.wiki.getMissingTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/orphans.js": {
"title": "$:/core/modules/filters/all/orphans.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/orphans.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[orphans]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphans = function(source,prefix,options) {\n\treturn options.wiki.getOrphanTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/shadows.js": {
"title": "$:/core/modules/filters/all/shadows.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/shadows.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[shadows]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadows = function(source,prefix,options) {\n\treturn options.wiki.allShadowTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/tags.js": {
"title": "$:/core/modules/filters/all/tags.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/tags.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[tags]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,prefix,options) {\n\treturn Object.keys(options.wiki.getTagMap());\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/tiddlers.js": {
"title": "$:/core/modules/filters/all/tiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/tiddlers.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddlers = function(source,prefix,options) {\n\treturn options.wiki.allTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all.js": {
"title": "$:/core/modules/filters/all.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for selecting tiddlers\n\n[all[shadows+tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar allFilterOperators;\n\nfunction getAllFilterOperators() {\n\tif(!allFilterOperators) {\n\t\tallFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"allfilteroperator\",allFilterOperators);\n\t}\n\treturn allFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.all = function(source,operator,options) {\n\t// Get our suboperators\n\tvar allFilterOperators = getAllFilterOperators();\n\t// Cycle through the suboperators accumulating their results\n\tvar results = [],\n\t\tsubops = operator.operand.split(\"+\");\n\t// Check for common optimisations\n\tif(subops.length === 1 && subops[0] === \"\") {\n\t\treturn source;\n\t} else if(subops.length === 1 && subops[0] === \"tiddlers\") {\n\t\treturn options.wiki.each;\n\t} else if(subops.length === 1 && subops[0] === \"shadows\") {\n\t\treturn options.wiki.eachShadow;\n\t} else if(subops.length === 2 && subops[0] === \"tiddlers\" && subops[1] === \"shadows\") {\n\t\treturn options.wiki.eachTiddlerPlusShadows;\n\t} else if(subops.length === 2 && subops[0] === \"shadows\" && subops[1] === \"tiddlers\") {\n\t\treturn options.wiki.eachShadowPlusTiddlers;\n\t}\n\t// Do it the hard way\n\tfor(var t=0; t<subops.length; t++) {\n\t\tvar subop = allFilterOperators[subops[t]];\n\t\tif(subop) {\n\t\t\t$tw.utils.pushTop(results,subop(source,operator.prefix,options));\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/backlinks.js": {
"title": "$:/core/modules/filters/backlinks.js",
"text": "/*\\\ntitle: $:/core/modules/filters/backlinks.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the backlinks from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.backlinks = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerBacklinks(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/before.js": {
"title": "$:/core/modules/filters/before.js",
"text": "/*\\\ntitle: $:/core/modules/filters/before.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is before the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.before = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index <= 0) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index - 1]];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/commands.js": {
"title": "$:/core/modules/filters/commands.js",
"text": "/*\\\ntitle: $:/core/modules/filters/commands.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the commands available in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.commands = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.commands,function(commandInfo,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/count.js": {
"title": "$:/core/modules/filters/count.js",
"text": "/*\\\ntitle: $:/core/modules/filters/count.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the number of entries in the current list.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.count = function(source,operator,options) {\n\tvar count = 0;\n\tsource(function(tiddler,title) {\n\t\tcount++;\n\t});\n\treturn [count + \"\"];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/days.js": {
"title": "$:/core/modules/filters/days.js",
"text": "/*\\\ntitle: $:/core/modules/filters/days.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a specified date field within a specified date interval.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.days = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\tdayInterval = (parseInt(operator.operand,10)||0),\n\t\tdayIntervalSign = $tw.utils.sign(dayInterval),\n\t\ttargetTimeStamp = (new Date()).setHours(0,0,0,0) + 1000*60*60*24*dayInterval,\n\t\tisWithinDays = function(dateField) {\n\t\t\tvar sign = $tw.utils.sign(targetTimeStamp - (new Date(dateField)).setHours(0,0,0,0));\n\t\t\treturn sign === 0 || sign === dayIntervalSign;\n\t\t};\n\n\tif(operator.prefix === \"!\") {\n\t\ttargetTimeStamp = targetTimeStamp - 1000*60*60*24*dayIntervalSign;\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(!isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/each.js": {
"title": "$:/core/modules/filters/each.js",
"text": "/*\\\ntitle: $:/core/modules/filters/each.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique value of the specified field.\nWith suffix \"list\", selects all tiddlers that are values in a specified list field.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.each = function(source,operator,options) {\n\tvar results =[] ,\n\t\tvalue,values = {},\n\t\tfield = operator.operand || \"title\";\n\tif(operator.suffix !== \"list-item\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\tvalue = (field === \"title\") ? title : tiddler.getFieldString(field);\n\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\t$tw.utils.each(\n\t\t\t\t\toptions.wiki.getTiddlerList(title,field),\n\t\t\t\t\tfunction(value) {\n\t\t\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\t\t\tresults.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/eachday.js": {
"title": "$:/core/modules/filters/eachday.js",
"text": "/*\\\ntitle: $:/core/modules/filters/eachday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique day covered by the specified date field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.eachday = function(source,operator,options) {\n\tvar results = [],\n\t\tvalues = [],\n\t\tfieldName = operator.operand || \"modified\";\n\t// Function to convert a date/time to a date integer\n\tvar toDate = function(value) {\n\t\tvalue = (new Date(value)).setHours(0,0,0,0);\n\t\treturn value+0;\n\t};\n\tsource(function(tiddler,title) {\n\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\tvar value = toDate($tw.utils.parseDate(tiddler.fields[fieldName]));\n\t\t\tif(values.indexOf(value) === -1) {\n\t\t\t\tvalues.push(value);\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/editiondescription.js": {
"title": "$:/core/modules/filters/editiondescription.js",
"text": "/*\\\ntitle: $:/core/modules/filters/editiondescription.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the descriptions of the specified edition names\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editiondescription = function(source,operator,options) {\n\tvar results = [],\n\t\teditionInfo = $tw.utils.getEditionInfo();\n\tif(editionInfo) {\n\t\tsource(function(tiddler,title) {\n\t\t\tif($tw.utils.hop(editionInfo,title)) {\n\t\t\t\tresults.push(editionInfo[title].description || \"\");\t\t\t\t\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/editions.js": {
"title": "$:/core/modules/filters/editions.js",
"text": "/*\\\ntitle: $:/core/modules/filters/editions.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the available editions in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editions = function(source,operator,options) {\n\tvar results = [],\n\t\teditionInfo = $tw.utils.getEditionInfo();\n\tif(editionInfo) {\n\t\t$tw.utils.each(editionInfo,function(info,name) {\n\t\t\tresults.push(name);\n\t\t});\n\t}\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/decodeuricomponent.js": {
"title": "$:/core/modules/filters/decodeuricomponent.js",
"text": "/*\\\ntitle: $:/core/modules/filters/decodeuricomponent.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for applying decodeURIComponent() to each item.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter functions\n*/\n\nexports.decodeuricomponent = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(decodeURIComponent(title));\n\t});\n\treturn results;\n};\n\nexports.encodeuricomponent = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(encodeURIComponent(title));\n\t});\n\treturn results;\n};\n\nexports.decodeuri = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(decodeURI(title));\n\t});\n\treturn results;\n};\n\nexports.encodeuri = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(encodeURI(title));\n\t});\n\treturn results;\n};\n\nexports.decodehtml = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.htmlDecode(title));\n\t});\n\treturn results;\n};\n\nexports.encodehtml = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.htmlEncode(title));\n\t});\n\treturn results;\n};\n\nexports.stringify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.stringify(title));\n\t});\n\treturn results;\n};\n\nexports.jsonstringify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.jsonStringify(title));\n\t});\n\treturn results;\n};\n\nexports.escaperegexp = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.escapeRegExp(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/enlist.js": {
"title": "$:/core/modules/filters/enlist.js",
"text": "/*\\\ntitle: $:/core/modules/filters/enlist.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning its operand parsed as a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.enlist = function(source,operator,options) {\n\tvar list = $tw.utils.parseStringArray(operator.operand);\n\tif(operator.prefix === \"!\") {\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t} else {\n\t\treturn list;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/field.js": {
"title": "$:/core/modules/filters/field.js",
"text": "/*\\\ntitle: $:/core/modules/filters/field.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.field = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || operator.operator || \"title\").toLowerCase();\n\tif(operator.prefix === \"!\") {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text !== operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !!operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text === operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/fields.js": {
"title": "$:/core/modules/filters/fields.js",
"text": "/*\\\ntitle: $:/core/modules/filters/fields.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the fields on the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.fields = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tfor(var fieldName in tiddler.fields) {\n\t\t\t\t$tw.utils.pushTop(results,fieldName);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/get.js": {
"title": "$:/core/modules/filters/get.js",
"text": "/*\\\ntitle: $:/core/modules/filters/get.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing tiddler titles by the value of the field specified in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.get = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tvar value = tiddler.getFieldString(operator.operand);\n\t\t\tif(value) {\n\t\t\t\tresults.push(value);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/getindex.js": {
"title": "$:/core/modules/filters/getindex.js",
"text": "/*\\\ntitle: $:/core/modules/filters/getindex.js\ntype: application/javascript\nmodule-type: filteroperator\n\nreturns the value at a given index of datatiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.getindex = function(source,operator,options) {\n\tvar data,title,results = [];\n\tif(operator.operand){\n\t\tsource(function(tiddler,title) {\n\t\t\ttitle = tiddler ? tiddler.fields.title : title;\n\t\t\tdata = options.wiki.extractTiddlerDataItem(tiddler,operator.operand);\n\t\t\tif(data) {\n\t\t\t\tresults.push(data);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/has.js": {
"title": "$:/core/modules/filters/has.js",
"text": "/*\\\ntitle: $:/core/modules/filters/has.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a tiddler has the specified field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.has = function(source,operator,options) {\n\tvar results = [],\n\t\tinvert = operator.prefix === \"!\";\n\n\tif(operator.suffix === \"field\") {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || (tiddler && (!$tw.utils.hop(tiddler.fields,operator.operand)))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || !$tw.utils.hop(tiddler.fields,operator.operand) || (tiddler.fields[operator.operand] === \"\")) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand) && !(tiddler.fields[operator.operand] === \"\" || tiddler.fields[operator.operand].length === 0)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/haschanged.js": {
"title": "$:/core/modules/filters/haschanged.js",
"text": "/*\\\ntitle: $:/core/modules/filters/haschanged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returns tiddlers from the list that have a non-zero changecount.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.haschanged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) === 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) > 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/indexes.js": {
"title": "$:/core/modules/filters/indexes.js",
"text": "/*\\\ntitle: $:/core/modules/filters/indexes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the indexes of a data tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.indexes = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar data = options.wiki.getTiddlerDataCached(title);\n\t\tif(data) {\n\t\t\t$tw.utils.pushTop(results,Object.keys(data));\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/insertbefore.js": {
"title": "$:/core/modules/filters/insertbefore.js",
"text": "/*\\\ntitle: $:/core/modules/filters/insertbefore.js\ntype: application/javascript\nmodule-type: filteroperator\n\nInsert an item before another item in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOrder a list\n*/\nexports.insertbefore = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar target = options.widget && options.widget.getVariable(operator.suffix || \"currentTiddler\");\n\tif(target !== operator.operand) {\n\t\t// Remove the entry from the list if it is present\n\t\tvar pos = results.indexOf(operator.operand);\n\t\tif(pos !== -1) {\n\t\t\tresults.splice(pos,1);\n\t\t}\n\t\t// Insert the entry before the target marker\n\t\tpos = results.indexOf(target);\n\t\tif(pos !== -1) {\n\t\t\tresults.splice(pos,0,operator.operand);\n\t\t} else {\n\t\t\tresults.push(operator.operand);\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/is/current.js": {
"title": "$:/core/modules/filters/is/current.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/current.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar results = [],\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title !== currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title === currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/image.js": {
"title": "$:/core/modules/filters/is/image.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/image.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[image]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.image = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/missing.js": {
"title": "$:/core/modules/filters/is/missing.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/missing.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/orphan.js": {
"title": "$:/core/modules/filters/is/orphan.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/orphan.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[orphan]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphan = function(source,prefix,options) {\n\tvar results = [],\n\t\torphanTitles = options.wiki.getOrphanTitles();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) !== -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/shadow.js": {
"title": "$:/core/modules/filters/is/shadow.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/shadow.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[shadow]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadow = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/system.js": {
"title": "$:/core/modules/filters/is/system.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/system.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[system]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.system = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/tag.js": {
"title": "$:/core/modules/filters/is/tag.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/tag.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tag]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,prefix,options) {\n\tvar results = [],\n\t\ttagMap = options.wiki.getTagMap();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!$tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif($tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/tiddler.js": {
"title": "$:/core/modules/filters/is/tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/tiddler.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tiddler]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddler = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is.js": {
"title": "$:/core/modules/filters/is.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking tiddler properties\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar isFilterOperators;\n\nfunction getIsFilterOperators() {\n\tif(!isFilterOperators) {\n\t\tisFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"isfilteroperator\",isFilterOperators);\n\t}\n\treturn isFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.is = function(source,operator,options) {\n\t// Dispatch to the correct isfilteroperator\n\tvar isFilterOperators = getIsFilterOperators();\n\tif(operator.operand) {\n\t\tvar isFilterOperator = isFilterOperators[operator.operand];\n\t\tif(isFilterOperator) {\n\t\t\treturn isFilterOperator(source,operator.prefix,options);\n\t\t} else {\n\t\t\treturn [$tw.language.getString(\"Error/IsFilterOperator\")];\n\t\t}\n\t} else {\n\t\t// Return all tiddlers if the operand is missing\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t\treturn results;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/limit.js": {
"title": "$:/core/modules/filters/limit.js",
"text": "/*\\\ntitle: $:/core/modules/filters/limit.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for chopping the results to a specified maximum number of entries\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.limit = function(source,operator,options) {\n\tvar results = [];\n\t// Convert to an array\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\t// Slice the array if necessary\n\tvar limit = Math.min(results.length,parseInt(operator.operand,10));\n\tif(operator.prefix === \"!\") {\n\t\tresults = results.slice(-limit);\n\t} else {\n\t\tresults = results.slice(0,limit);\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/links.js": {
"title": "$:/core/modules/filters/links.js",
"text": "/*\\\ntitle: $:/core/modules/filters/links.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the links from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.links = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerLinks(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/list.js": {
"title": "$:/core/modules/filters/list.js",
"text": "/*\\\ntitle: $:/core/modules/filters/list.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddlers whose title is listed in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.list = function(source,operator,options) {\n\tvar results = [],\n\t\ttr = $tw.utils.parseTextReference(operator.operand),\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\"),\n\t\tlist = options.wiki.getTiddlerList(tr.title || currTiddlerTitle,tr.field,tr.index);\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults = list;\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/listed.js": {
"title": "$:/core/modules/filters/listed.js",
"text": "/*\\\ntitle: $:/core/modules/filters/listed.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that have the selected tiddlers in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.listed = function(source,operator,options) {\n\tvar field = operator.operand || \"list\",\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.findListingsOfTiddler(title,field));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/listops.js": {
"title": "$:/core/modules/filters/listops.js",
"text": "/*\\\ntitle: $:/core/modules/filters/listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for manipulating the current selection list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOrder a list\n*/\nexports.order = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.operand.toLowerCase() === \"reverse\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.unshift(title);\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\t\t\n\t}\n\treturn results;\n};\n\n/*\nReverse list\n*/\nexports.reverse = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.unshift(title);\n\t});\n\treturn results;\n};\n\n/*\nFirst entry/entries in list\n*/\nexports.first = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1,\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,count);\n};\n\n/*\nLast entry/entries in list\n*/\nexports.last = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1,\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(-count);\n};\n\n/*\nAll but the first entry/entries of the list\n*/\nexports.rest = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1,\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count);\n};\nexports.butfirst = exports.rest;\nexports.bf = exports.rest;\n\n/*\nAll but the last entry/entries of the list\n*/\nexports.butlast = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1,\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,-count);\n};\nexports.bl = exports.butlast;\n\n/*\nThe nth member of the list\n*/\nexports.nth = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1,\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count - 1,count);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/lookup.js": {
"title": "$:/core/modules/filters/lookup.js",
"text": "/*\\\ntitle: $:/core/modules/filters/lookup.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that looks up values via a title prefix\n\n[lookup:<field>[<prefix>]]\n\nPrepends the prefix to the selected items and returns the specified field value\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.lookup = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(options.wiki.getTiddlerText(operator.operand + title) || options.wiki.getTiddlerText(operator.operand + operator.suffix));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/minlength.js": {
"title": "$:/core/modules/filters/minlength.js",
"text": "/*\\\ntitle: $:/core/modules/filters/minlength.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for filtering out titles that don't meet the minimum length in the operand\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.minlength = function(source,operator,options) {\n\tvar results = [],\n\t\tminLength = parseInt(operator.operand || \"\",10) || 0;\n\tsource(function(tiddler,title) {\n\t\tif(title.length >= minLength) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/modules.js": {
"title": "$:/core/modules/filters/modules.js",
"text": "/*\\\ntitle: $:/core/modules/filters/modules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the modules of a given type in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.modules = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.each($tw.modules.types[title],function(moduleInfo,moduleName) {\n\t\t\tresults.push(moduleName);\n\t\t});\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/moduletypes.js": {
"title": "$:/core/modules/filters/moduletypes.js",
"text": "/*\\\ntitle: $:/core/modules/filters/moduletypes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the module types in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.moduletypes = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.modules.types,function(moduleInfo,type) {\n\t\tresults.push(type);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/next.js": {
"title": "$:/core/modules/filters/next.js",
"text": "/*\\\ntitle: $:/core/modules/filters/next.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs next in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.next = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch++;\n\t\tif(match > 0 && match < list.length) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/plugintiddlers.js": {
"title": "$:/core/modules/filters/plugintiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/filters/plugintiddlers.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the shadow tiddlers within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.plugintiddlers = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar pluginInfo = options.wiki.getPluginInfo(title) || options.wiki.getTiddlerDataCached(title,{tiddlers:[]});\n\t\tif(pluginInfo && pluginInfo.tiddlers) {\n\t\t\t$tw.utils.each(pluginInfo.tiddlers,function(fields,title) {\n\t\t\t\tresults.push(title);\n\t\t\t});\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/prefix.js": {
"title": "$:/core/modules/filters/prefix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/prefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title starts with a prefix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.prefix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/previous.js": {
"title": "$:/core/modules/filters/previous.js",
"text": "/*\\\ntitle: $:/core/modules/filters/previous.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs immediately prior in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.previous = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch--;\n\t\tif(match >= 0) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/regexp.js": {
"title": "$:/core/modules/filters/regexp.js",
"text": "/*\\\ntitle: $:/core/modules/filters/regexp.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for regexp matching\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.regexp = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"title\").toLowerCase(),\n\t\tregexpString, regexp, flags = \"\", match,\n\t\tgetFieldString = function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\treturn tiddler.getFieldString(fieldname);\n\t\t\t} else if(fieldname === \"title\") {\n\t\t\t\treturn title;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\t// Process flags and construct regexp\n\tregexpString = operator.operand;\n\tmatch = /^\\(\\?([gim]+)\\)/.exec(regexpString);\n\tif(match) {\n\t\tflags = match[1];\n\t\tregexpString = regexpString.substr(match[0].length);\n\t} else {\n\t\tmatch = /\\(\\?([gim]+)\\)$/.exec(regexpString);\n\t\tif(match) {\n\t\t\tflags = match[1];\n\t\t\tregexpString = regexpString.substr(0,regexpString.length - match[0].length);\n\t\t}\n\t}\n\ttry {\n\t\tregexp = new RegExp(regexpString,flags);\n\t} catch(e) {\n\t\treturn [\"\" + e];\n\t}\n\t// Process the incoming tiddlers\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/removeprefix.js": {
"title": "$:/core/modules/filters/removeprefix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/removeprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a prefix from each title in the list. Titles that do not start with the prefix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removeprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/removesuffix.js": {
"title": "$:/core/modules/filters/removesuffix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/removesuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a suffix from each title in the list. Titles that do not end with the suffix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removesuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title.substr(-operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(0,title.length - operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/sameday.js": {
"title": "$:/core/modules/filters/sameday.js",
"text": "/*\\\ntitle: $:/core/modules/filters/sameday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a modified date field on the same day as the provided value.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sameday = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\ttargetDate = (new Date($tw.utils.parseDate(operator.operand))).setHours(0,0,0,0);\n\t// Function to convert a date/time to a date integer\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tif(tiddler.getFieldDay(fieldName) === targetDate) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/search.js": {
"title": "$:/core/modules/filters/search.js",
"text": "/*\\\ntitle: $:/core/modules/filters/search.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for searching for the text in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.search = function(source,operator,options) {\n\tvar invert = operator.prefix === \"!\";\n\tif(operator.suffix) {\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert,\n\t\t\tfield: operator.suffix\n\t\t});\n\t} else {\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert\n\t\t});\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/shadowsource.js": {
"title": "$:/core/modules/filters/shadowsource.js",
"text": "/*\\\ntitle: $:/core/modules/filters/shadowsource.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the source plugins for shadow tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadowsource = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar source = options.wiki.getShadowSource(title);\n\t\tif(source) {\n\t\t\t$tw.utils.pushTop(results,source);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/sort.js": {
"title": "$:/core/modules/filters/sort.js",
"text": "/*\\\ntitle: $:/core/modules/filters/sort.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for sorting\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,false);\n\treturn results;\n};\n\nexports.nsort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,true);\n\treturn results;\n};\n\nexports.sortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,false);\n\treturn results;\n};\n\nexports.nsortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,true);\n\treturn results;\n};\n\nvar prepare_results = function (source) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/splitbefore.js": {
"title": "$:/core/modules/filters/splitbefore.js",
"text": "/*\\\ntitle: $:/core/modules/filters/splitbefore.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that splits each result on the first occurance of the specified separator and returns the unique values.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.splitbefore = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar parts = title.split(operator.operand);\n\t\tif(parts.length === 1) {\n\t\t\t$tw.utils.pushTop(results,parts[0]);\n\t\t} else {\n\t\t\t$tw.utils.pushTop(results,parts[0] + operator.operand);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/storyviews.js": {
"title": "$:/core/modules/filters/storyviews.js",
"text": "/*\\\ntitle: $:/core/modules/filters/storyviews.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the story views in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.storyviews = function(source,operator,options) {\n\tvar results = [],\n\t\tstoryviews = {};\n\t$tw.modules.applyMethods(\"storyview\",storyviews);\n\t$tw.utils.each(storyviews,function(info,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/suffix.js": {
"title": "$:/core/modules/filters/suffix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/suffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title ends with a suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.suffix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tag.js": {
"title": "$:/core/modules/filters/tag.js",
"text": "/*\\\ntitle: $:/core/modules/filters/tag.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking for the presence of a tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,operator,options) {\n\tvar results = [];\n\tif((operator.suffix || \"\").toLowerCase() === \"strict\" && !operator.operand) {\n\t\t// New semantics:\n\t\t// Always return copy of input if operator.operand is missing\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t} else {\n\t\t// Old semantics:\n\t\tif(operator.prefix === \"!\") {\n\t\t\t// Returns a copy of the input if operator.operand is missing\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && !tiddler.hasTag(operator.operand)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t// Returns empty results if operator.operand is missing\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && tiddler.hasTag(operator.operand)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t\tresults = options.wiki.sortByList(results,operator.operand);\n\t\t}\t\t\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tagging.js": {
"title": "$:/core/modules/filters/tagging.js",
"text": "/*\\\ntitle: $:/core/modules/filters/tagging.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that are tagged with the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tagging = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlersWithTag(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tags.js": {
"title": "$:/core/modules/filters/tags.js",
"text": "/*\\\ntitle: $:/core/modules/filters/tags.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the tags of the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,operator,options) {\n\tvar tags = {};\n\tsource(function(tiddler,title) {\n\t\tvar t, length;\n\t\tif(tiddler && tiddler.fields.tags) {\n\t\t\tfor(t=0, length=tiddler.fields.tags.length; t<length; t++) {\n\t\t\t\ttags[tiddler.fields.tags[t]] = true;\n\t\t\t}\n\t\t}\n\t});\n\treturn Object.keys(tags);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/title.js": {
"title": "$:/core/modules/filters/title.js",
"text": "/*\\\ntitle: $:/core/modules/filters/title.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing title fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.title = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields.title !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults.push(operator.operand);\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/untagged.js": {
"title": "$:/core/modules/filters/untagged.js",
"text": "/*\\\ntitle: $:/core/modules/filters/untagged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the selected tiddlers that are untagged\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.untagged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && $tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length > 0) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!tiddler || !tiddler.hasField(\"tags\") || ($tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length === 0)) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/wikiparserrules.js": {
"title": "$:/core/modules/filters/wikiparserrules.js",
"text": "/*\\\ntitle: $:/core/modules/filters/wikiparserrules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the wiki parser rules in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.wikiparserrules = function(source,operator,options) {\n\tvar results = [],\n\t\toperand = operator.operand;\n\t$tw.utils.each($tw.modules.types.wikirule,function(mod) {\n\t\tvar exp = mod.exports;\n\t\tif(!operand || exp.types[operand]) {\n\t\t\tresults.push(exp.name);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/x-listops.js": {
"title": "$:/core/modules/filters/x-listops.js",
"text": "/*\\\ntitle: $:/core/modules/filters/x-listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nExtended filter operators to manipulate the current list.\n\n\\*/\n(function () {\n\n /*jslint node: true, browser: true */\n /*global $tw: false */\n \"use strict\";\n\n /*\n Fetch titles from the current list\n */\n var prepare_results = function (source) {\n var results = [];\n source(function (tiddler, title) {\n results.push(title);\n });\n return results;\n };\n\n /*\n Moves a number of items from the tail of the current list before the item named in the operand\n */\n exports.putbefore = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand),\n count = parseInt(operator.suffix) || 1;\n return (index === -1) ?\n results.slice(0, -1) :\n results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index, -count));\n };\n\n /*\n Moves a number of items from the tail of the current list after the item named in the operand\n */\n exports.putafter = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand),\n count = parseInt(operator.suffix) || 1;\n return (index === -1) ?\n results.slice(0, -1) :\n results.slice(0, index + 1).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n };\n\n /*\n Replaces the item named in the operand with a number of items from the tail of the current list\n */\n exports.replace = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand),\n count = parseInt(operator.suffix) || 1;\n return (index === -1) ?\n results.slice(0, -count) :\n results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n };\n\n /*\n Moves a number of items from the tail of the current list to the head of the list\n */\n exports.putfirst = function (source, operator) {\n var results = prepare_results(source),\n count = parseInt(operator.suffix) || 1;\n return results.slice(-count).concat(results.slice(0, -count));\n };\n\n /*\n Moves a number of items from the head of the current list to the tail of the list\n */\n exports.putlast = function (source, operator) {\n var results = prepare_results(source),\n count = parseInt(operator.suffix) || 1;\n return results.slice(count).concat(results.slice(0, count));\n };\n\n /*\n Moves the item named in the operand a number of places forward or backward in the list\n */\n exports.move = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand),\n count = parseInt(operator.suffix) || 1,\n marker = results.splice(index, 1),\n offset = (index + count) > 0 ? index + count : 0;\n return results.slice(0, offset).concat(marker).concat(results.slice(offset));\n };\n\n /*\n Returns the items from the current list that are after the item named in the operand\n */\n exports.allafter = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand);\n return (index === -1 || index > (results.length - 2)) ? [] :\n (operator.suffix) ? results.slice(index) :\n results.slice(index + 1);\n };\n\n /*\n Returns the items from the current list that are before the item named in the operand\n */\n exports.allbefore = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand);\n return (index < 0) ? [] :\n (operator.suffix) ? results.slice(0, index + 1) :\n results.slice(0, index);\n };\n\n /*\n Appends the items listed in the operand array to the tail of the current list\n */\n exports.append = function (source, operator) {\n var append = $tw.utils.parseStringArray(operator.operand, \"true\"),\n results = prepare_results(source),\n count = parseInt(operator.suffix) || append.length;\n return (append.length === 0) ? results :\n (operator.prefix) ? results.concat(append.slice(-count)) :\n results.concat(append.slice(0, count));\n };\n\n /*\n Prepends the items listed in the operand array to the head of the current list\n */\n exports.prepend = function (source, operator) {\n var prepend = $tw.utils.parseStringArray(operator.operand, \"true\"),\n results = prepare_results(source),\n count = parseInt(operator.suffix) || prepend.length;\n return (prepend.length === 0) ? results :\n (operator.prefix) ? prepend.slice(-count).concat(results) :\n prepend.slice(0, count).concat(results);\n };\n\n /*\n Returns all items from the current list except the items listed in the operand array\n */\n exports.remove = function (source, operator) {\n var array = $tw.utils.parseStringArray(operator.operand, \"true\"),\n results = prepare_results(source),\n count = parseInt(operator.suffix) || array.length,\n p,\n len,\n index;\n len = array.length - 1;\n for (p = 0; p < count; ++p) {\n if (operator.prefix) {\n index = results.indexOf(array[len - p]);\n } else {\n index = results.indexOf(array[p]);\n }\n if (index !== -1) {\n results.splice(index, 1);\n }\n }\n return results;\n };\n\n /*\n Returns all items from the current list sorted in the order of the items in the operand array\n */\n exports.sortby = function (source, operator) {\n var results = prepare_results(source);\n if (!results || results.length < 2) {\n return results;\n }\n var lookup = $tw.utils.parseStringArray(operator.operand, \"true\");\n results.sort(function (a, b) {\n return lookup.indexOf(a) - lookup.indexOf(b);\n });\n return results;\n };\n\n /*\n Removes all duplicate items from the current list\n */\n exports.unique = function (source, operator) {\n var results = prepare_results(source);\n var set = results.reduce(function (a, b) {\n if (a.indexOf(b) < 0) {\n a.push(b);\n }\n return a;\n }, []);\n return set;\n };\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters.js": {
"title": "$:/core/modules/filters.js",
"text": "/*\\\ntitle: $:/core/modules/filters.js\ntype: application/javascript\nmodule-type: wikimethod\n\nAdds tiddler filtering methods to the $tw.Wiki object.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParses an operation (i.e. a run) within a filter string\n\toperators: Array of array of operator nodes into which results should be inserted\n\tfilterString: filter string\n\tp: start position within the string\nReturns the new start position, after the parsed operation\n*/\nfunction parseFilterOperation(operators,filterString,p) {\n\tvar nextBracketPos, operator;\n\t// Skip the starting square bracket\n\tif(filterString.charAt(p++) !== \"[\") {\n\t\tthrow \"Missing [ in filter expression\";\n\t}\n\t// Process each operator in turn\n\tdo {\n\t\toperator = {};\n\t\t// Check for an operator prefix\n\t\tif(filterString.charAt(p) === \"!\") {\n\t\t\toperator.prefix = filterString.charAt(p++);\n\t\t}\n\t\t// Get the operator name\n\t\tnextBracketPos = filterString.substring(p).search(/[\\[\\{<\\/]/);\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing [ in filter expression\";\n\t\t}\n\t\tnextBracketPos += p;\n\t\tvar bracket = filterString.charAt(nextBracketPos);\n\t\toperator.operator = filterString.substring(p,nextBracketPos);\n\n\t\t// Any suffix?\n\t\tvar colon = operator.operator.indexOf(':');\n\t\tif(colon > -1) {\n\t\t\toperator.suffix = operator.operator.substring(colon + 1);\n\t\t\toperator.operator = operator.operator.substring(0,colon) || \"field\";\n\t\t}\n\t\t// Empty operator means: title\n\t\telse if(operator.operator === \"\") {\n\t\t\toperator.operator = \"title\";\n\t\t}\n\n\t\tp = nextBracketPos + 1;\n\t\tswitch (bracket) {\n\t\t\tcase \"{\": // Curly brackets\n\t\t\t\toperator.indirect = true;\n\t\t\t\tnextBracketPos = filterString.indexOf(\"}\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"[\": // Square brackets\n\t\t\t\tnextBracketPos = filterString.indexOf(\"]\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"<\": // Angle brackets\n\t\t\t\toperator.variable = true;\n\t\t\t\tnextBracketPos = filterString.indexOf(\">\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"/\": // regexp brackets\n\t\t\t\tvar rex = /^((?:[^\\\\\\/]*|\\\\.)*)\\/(?:\\(([mygi]+)\\))?/g,\n\t\t\t\t\trexMatch = rex.exec(filterString.substring(p));\n\t\t\t\tif(rexMatch) {\n\t\t\t\t\toperator.regexp = new RegExp(rexMatch[1], rexMatch[2]);\n// DEPRECATION WARNING\nconsole.log(\"WARNING: Filter\",operator.operator,\"has a deprecated regexp operand\",operator.regexp);\n\t\t\t\t\tnextBracketPos = p + rex.lastIndex - 1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow \"Unterminated regular expression in filter expression\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing closing bracket in filter expression\";\n\t\t}\n\t\tif(!operator.regexp) {\n\t\t\toperator.operand = filterString.substring(p,nextBracketPos);\n\t\t}\n\t\tp = nextBracketPos + 1;\n\n\t\t// Push this operator\n\t\toperators.push(operator);\n\t} while(filterString.charAt(p) !== \"]\");\n\t// Skip the ending square bracket\n\tif(filterString.charAt(p++) !== \"]\") {\n\t\tthrow \"Missing ] in filter expression\";\n\t}\n\t// Return the parsing position\n\treturn p;\n}\n\n/*\nParse a filter string\n*/\nexports.parseFilter = function(filterString) {\n\tfilterString = filterString || \"\";\n\tvar results = [], // Array of arrays of operator nodes {operator:,operand:}\n\t\tp = 0, // Current position in the filter string\n\t\tmatch;\n\tvar whitespaceRegExp = /(\\s+)/mg,\n\t\toperandRegExp = /((?:\\+|\\-)?)(?:(\\[)|(?:\"([^\"]*)\")|(?:'([^']*)')|([^\\s\\[\\]]+))/mg;\n\twhile(p < filterString.length) {\n\t\t// Skip any whitespace\n\t\twhitespaceRegExp.lastIndex = p;\n\t\tmatch = whitespaceRegExp.exec(filterString);\n\t\tif(match && match.index === p) {\n\t\t\tp = p + match[0].length;\n\t\t}\n\t\t// Match the start of the operation\n\t\tif(p < filterString.length) {\n\t\t\toperandRegExp.lastIndex = p;\n\t\t\tmatch = operandRegExp.exec(filterString);\n\t\t\tif(!match || match.index !== p) {\n\t\t\t\tthrow $tw.language.getString(\"Error/FilterSyntax\");\n\t\t\t}\n\t\t\tvar operation = {\n\t\t\t\tprefix: \"\",\n\t\t\t\toperators: []\n\t\t\t};\n\t\t\tif(match[1]) {\n\t\t\t\toperation.prefix = match[1];\n\t\t\t\tp++;\n\t\t\t}\n\t\t\tif(match[2]) { // Opening square bracket\n\t\t\t\tp = parseFilterOperation(operation.operators,filterString,p);\n\t\t\t} else {\n\t\t\t\tp = match.index + match[0].length;\n\t\t\t}\n\t\t\tif(match[3] || match[4] || match[5]) { // Double quoted string, single quoted string or unquoted title\n\t\t\t\toperation.operators.push(\n\t\t\t\t\t{operator: \"title\", operand: match[3] || match[4] || match[5]}\n\t\t\t\t);\n\t\t\t}\n\t\t\tresults.push(operation);\n\t\t}\n\t}\n\treturn results;\n};\n\nexports.getFilterOperators = function() {\n\tif(!this.filterOperators) {\n\t\t$tw.Wiki.prototype.filterOperators = {};\n\t\t$tw.modules.applyMethods(\"filteroperator\",this.filterOperators);\n\t}\n\treturn this.filterOperators;\n};\n\nexports.filterTiddlers = function(filterString,widget,source) {\n\tvar fn = this.compileFilter(filterString);\n\treturn fn.call(this,source,widget);\n};\n\n/*\nCompile a filter into a function with the signature fn(source,widget) where:\nsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\nwidget: an optional widget node for retrieving the current tiddler etc.\n*/\nexports.compileFilter = function(filterString) {\n\tvar filterParseTree;\n\ttry {\n\t\tfilterParseTree = this.parseFilter(filterString);\n\t} catch(e) {\n\t\treturn function(source,widget) {\n\t\t\treturn [$tw.language.getString(\"Error/Filter\") + \": \" + e];\n\t\t};\n\t}\n\t// Get the hashmap of filter operator functions\n\tvar filterOperators = this.getFilterOperators();\n\t// Assemble array of functions, one for each operation\n\tvar operationFunctions = [];\n\t// Step through the operations\n\tvar self = this;\n\t$tw.utils.each(filterParseTree,function(operation) {\n\t\t// Create a function for the chain of operators in the operation\n\t\tvar operationSubFunction = function(source,widget) {\n\t\t\tvar accumulator = source,\n\t\t\t\tresults = [],\n\t\t\t\tcurrTiddlerTitle = widget && widget.getVariable(\"currentTiddler\");\n\t\t\t$tw.utils.each(operation.operators,function(operator) {\n\t\t\t\tvar operand = operator.operand,\n\t\t\t\t\toperatorFunction;\n\t\t\t\tif(!operator.operator) {\n\t\t\t\t\toperatorFunction = filterOperators.title;\n\t\t\t\t} else if(!filterOperators[operator.operator]) {\n\t\t\t\t\toperatorFunction = filterOperators.field;\n\t\t\t\t} else {\n\t\t\t\t\toperatorFunction = filterOperators[operator.operator];\n\t\t\t\t}\n\t\t\t\tif(operator.indirect) {\n\t\t\t\t\toperand = self.getTextReference(operator.operand,\"\",currTiddlerTitle);\n\t\t\t\t}\n\t\t\t\tif(operator.variable) {\n\t\t\t\t\toperand = widget.getVariable(operator.operand,{defaultValue: \"\"});\n\t\t\t\t}\n\t\t\t\t// Invoke the appropriate filteroperator module\n\t\t\t\tresults = operatorFunction(accumulator,{\n\t\t\t\t\t\t\toperator: operator.operator,\n\t\t\t\t\t\t\toperand: operand,\n\t\t\t\t\t\t\tprefix: operator.prefix,\n\t\t\t\t\t\t\tsuffix: operator.suffix,\n\t\t\t\t\t\t\tregexp: operator.regexp\n\t\t\t\t\t\t},{\n\t\t\t\t\t\t\twiki: self,\n\t\t\t\t\t\t\twidget: widget\n\t\t\t\t\t\t});\n\t\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\t\taccumulator = self.makeTiddlerIterator(results);\n\t\t\t\t} else {\n\t\t\t\t\taccumulator = results;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\treturn results;\n\t\t\t} else {\n\t\t\t\tvar resultArray = [];\n\t\t\t\tresults(function(tiddler,title) {\n\t\t\t\t\tresultArray.push(title);\n\t\t\t\t});\n\t\t\t\treturn resultArray;\n\t\t\t}\n\t\t};\n\t\t// Wrap the operator functions in a wrapper function that depends on the prefix\n\t\toperationFunctions.push((function() {\n\t\t\tswitch(operation.prefix || \"\") {\n\t\t\t\tcase \"\": // No prefix means that the operation is unioned into the result\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"-\": // The results of this operation are removed from the main result\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t$tw.utils.removeArrayEntries(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"+\": // This operation is applied to the main results so far\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t// This replaces all the elements of the array, but keeps the actual array so that references to it are preserved\n\t\t\t\t\t\tsource = self.makeTiddlerIterator(results);\n\t\t\t\t\t\tresults.splice(0,results.length);\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t}\n\t\t})());\n\t});\n\t// Return a function that applies the operations to a source iterator of tiddler titles\n\treturn $tw.perf.measure(\"filter\",function filterFunction(source,widget) {\n\t\tif(!source) {\n\t\t\tsource = self.each;\n\t\t} else if(typeof source === \"object\") { // Array or hashmap\n\t\t\tsource = self.makeTiddlerIterator(source);\n\t\t}\n\t\tvar results = [];\n\t\t$tw.utils.each(operationFunctions,function(operationFunction) {\n\t\t\toperationFunction(results,source,widget);\n\t\t});\n\t\treturn results;\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikimethod"
},
"$:/core/modules/info/platform.js": {
"title": "$:/core/modules/info/platform.js",
"text": "/*\\\ntitle: $:/core/modules/info/platform.js\ntype: application/javascript\nmodule-type: info\n\nInitialise basic platform $:/info/ tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.getInfoTiddlerFields = function() {\n\tvar mapBoolean = function(value) {return value ? \"yes\" : \"no\";},\n\t\tinfoTiddlerFields = [];\n\t// Basics\n\tinfoTiddlerFields.push({title: \"$:/info/browser\", text: mapBoolean(!!$tw.browser)});\n\tinfoTiddlerFields.push({title: \"$:/info/node\", text: mapBoolean(!!$tw.node)});\n\t// Document location\n\tif($tw.browser) {\n\t\tvar setLocationProperty = function(name,value) {\n\t\t\t\tinfoTiddlerFields.push({title: \"$:/info/url/\" + name, text: value});\t\t\t\n\t\t\t},\n\t\t\tlocation = document.location;\n\t\tsetLocationProperty(\"full\", (location.toString()).split(\"#\")[0]);\n\t\tsetLocationProperty(\"host\", location.host);\n\t\tsetLocationProperty(\"hostname\", location.hostname);\n\t\tsetLocationProperty(\"protocol\", location.protocol);\n\t\tsetLocationProperty(\"port\", location.port);\n\t\tsetLocationProperty(\"pathname\", location.pathname);\n\t\tsetLocationProperty(\"search\", location.search);\n\t\tsetLocationProperty(\"origin\", location.origin);\n\t}\n\treturn infoTiddlerFields;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "info"
},
"$:/core/modules/keyboard.js": {
"title": "$:/core/modules/keyboard.js",
"text": "/*\\\ntitle: $:/core/modules/keyboard.js\ntype: application/javascript\nmodule-type: global\n\nKeyboard handling utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar namedKeys = {\n\t\"cancel\": 3,\n\t\"help\": 6,\n\t\"backspace\": 8,\n\t\"tab\": 9,\n\t\"clear\": 12,\n\t\"return\": 13,\n\t\"enter\": 13,\n\t\"pause\": 19,\n\t\"escape\": 27,\n\t\"space\": 32,\n\t\"page_up\": 33,\n\t\"page_down\": 34,\n\t\"end\": 35,\n\t\"home\": 36,\n\t\"left\": 37,\n\t\"up\": 38,\n\t\"right\": 39,\n\t\"down\": 40,\n\t\"printscreen\": 44,\n\t\"insert\": 45,\n\t\"delete\": 46,\n\t\"0\": 48,\n\t\"1\": 49,\n\t\"2\": 50,\n\t\"3\": 51,\n\t\"4\": 52,\n\t\"5\": 53,\n\t\"6\": 54,\n\t\"7\": 55,\n\t\"8\": 56,\n\t\"9\": 57,\n\t\"firefoxsemicolon\": 59,\n\t\"firefoxequals\": 61,\n\t\"a\": 65,\n\t\"b\": 66,\n\t\"c\": 67,\n\t\"d\": 68,\n\t\"e\": 69,\n\t\"f\": 70,\n\t\"g\": 71,\n\t\"h\": 72,\n\t\"i\": 73,\n\t\"j\": 74,\n\t\"k\": 75,\n\t\"l\": 76,\n\t\"m\": 77,\n\t\"n\": 78,\n\t\"o\": 79,\n\t\"p\": 80,\n\t\"q\": 81,\n\t\"r\": 82,\n\t\"s\": 83,\n\t\"t\": 84,\n\t\"u\": 85,\n\t\"v\": 86,\n\t\"w\": 87,\n\t\"x\": 88,\n\t\"y\": 89,\n\t\"z\": 90,\n\t\"numpad0\": 96,\n\t\"numpad1\": 97,\n\t\"numpad2\": 98,\n\t\"numpad3\": 99,\n\t\"numpad4\": 100,\n\t\"numpad5\": 101,\n\t\"numpad6\": 102,\n\t\"numpad7\": 103,\n\t\"numpad8\": 104,\n\t\"numpad9\": 105,\n\t\"multiply\": 106,\n\t\"add\": 107,\n\t\"separator\": 108,\n\t\"subtract\": 109,\n\t\"decimal\": 110,\n\t\"divide\": 111,\n\t\"f1\": 112,\n\t\"f2\": 113,\n\t\"f3\": 114,\n\t\"f4\": 115,\n\t\"f5\": 116,\n\t\"f6\": 117,\n\t\"f7\": 118,\n\t\"f8\": 119,\n\t\"f9\": 120,\n\t\"f10\": 121,\n\t\"f11\": 122,\n\t\"f12\": 123,\n\t\"f13\": 124,\n\t\"f14\": 125,\n\t\"f15\": 126,\n\t\"f16\": 127,\n\t\"f17\": 128,\n\t\"f18\": 129,\n\t\"f19\": 130,\n\t\"f20\": 131,\n\t\"f21\": 132,\n\t\"f22\": 133,\n\t\"f23\": 134,\n\t\"f24\": 135,\n\t\"firefoxminus\": 173,\n\t\"semicolon\": 186,\n\t\"equals\": 187,\n\t\"comma\": 188,\n\t\"dash\": 189,\n\t\"period\": 190,\n\t\"slash\": 191,\n\t\"backquote\": 192,\n\t\"openbracket\": 219,\n\t\"backslash\": 220,\n\t\"closebracket\": 221,\n\t\"quote\": 222\n};\n\nfunction KeyboardManager(options) {\n\tvar self = this;\n\toptions = options || \"\";\n\t// Save the named key hashmap\n\tthis.namedKeys = namedKeys;\n\t// Create a reverse mapping of code to keyname\n\tthis.keyNames = [];\n\t$tw.utils.each(namedKeys,function(keyCode,name) {\n\t\tself.keyNames[keyCode] = name.substr(0,1).toUpperCase() + name.substr(1);\n\t});\n\t// Save the platform-specific name of the \"meta\" key\n\tthis.metaKeyName = $tw.platform.isMac ? \"cmd-\" : \"win-\";\n}\n\n/*\nReturn an array of keycodes for the modifier keys ctrl, shift, alt, meta\n*/\nKeyboardManager.prototype.getModifierKeys = function() {\n\treturn [\n\t\t16, // Shift\n\t\t17, // Ctrl\n\t\t18, // Alt\n\t\t20, // CAPS LOCK\n\t\t91, // Meta (left)\n\t\t93, // Meta (right)\n\t\t224 // Meta (Firefox)\n\t]\n};\n\n/*\nParses a key descriptor into the structure:\n{\n\tkeyCode: numeric keycode\n\tshiftKey: boolean\n\taltKey: boolean\n\tctrlKey: boolean\n\tmetaKey: boolean\n}\nKey descriptors have the following format:\n\tctrl+enter\n\tctrl+shift+alt+A\n*/\nKeyboardManager.prototype.parseKeyDescriptor = function(keyDescriptor) {\n\tvar components = keyDescriptor.split(/\\+|\\-/),\n\t\tinfo = {\n\t\t\tkeyCode: 0,\n\t\t\tshiftKey: false,\n\t\t\taltKey: false,\n\t\t\tctrlKey: false,\n\t\t\tmetaKey: false\n\t\t};\n\tfor(var t=0; t<components.length; t++) {\n\t\tvar s = components[t].toLowerCase(),\n\t\t\tc = s.charCodeAt(0);\n\t\t// Look for modifier keys\n\t\tif(s === \"ctrl\") {\n\t\t\tinfo.ctrlKey = true;\n\t\t} else if(s === \"shift\") {\n\t\t\tinfo.shiftKey = true;\n\t\t} else if(s === \"alt\") {\n\t\t\tinfo.altKey = true;\n\t\t} else if(s === \"meta\" || s === \"cmd\" || s === \"win\") {\n\t\t\tinfo.metaKey = true;\n\t\t}\n\t\t// Replace named keys with their code\n\t\tif(this.namedKeys[s]) {\n\t\t\tinfo.keyCode = this.namedKeys[s];\n\t\t}\n\t}\n\tif(info.keyCode) {\n\t\treturn info;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nParse a list of key descriptors into an array of keyInfo objects. The key descriptors can be passed as an array of strings or a space separated string\n*/\nKeyboardManager.prototype.parseKeyDescriptors = function(keyDescriptors,options) {\n\tvar self = this;\n\toptions = options || {};\n\toptions.stack = options.stack || [];\n\tvar wiki = options.wiki || $tw.wiki;\n\tif(typeof keyDescriptors === \"string\" && keyDescriptors === \"\") {\n\t\treturn [];\n\t}\n\tif(!$tw.utils.isArray(keyDescriptors)) {\n\t\tkeyDescriptors = keyDescriptors.split(\" \");\n\t}\n\tvar result = [];\n\t$tw.utils.each(keyDescriptors,function(keyDescriptor) {\n\t\t// Look for a named shortcut\n\t\tif(keyDescriptor.substr(0,2) === \"((\" && keyDescriptor.substr(-2,2) === \"))\") {\n\t\t\tif(options.stack.indexOf(keyDescriptor) === -1) {\n\t\t\t\toptions.stack.push(keyDescriptor);\n\t\t\t\tvar name = keyDescriptor.substring(2,keyDescriptor.length - 2),\n\t\t\t\t\tlookupName = function(configName) {\n\t\t\t\t\t\tvar keyDescriptors = wiki.getTiddlerText(\"$:/config/\" + configName + \"/\" + name);\n\t\t\t\t\t\tif(keyDescriptors) {\n\t\t\t\t\t\t\tresult.push.apply(result,self.parseKeyDescriptors(keyDescriptors,options));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\tlookupName(\"shortcuts\");\n\t\t\t\tlookupName($tw.platform.isMac ? \"shortcuts-mac\" : \"shortcuts-not-mac\");\n\t\t\t\tlookupName($tw.platform.isWindows ? \"shortcuts-windows\" : \"shortcuts-not-windows\");\n\t\t\t\tlookupName($tw.platform.isLinux ? \"shortcuts-linux\" : \"shortcuts-not-linux\");\n\t\t\t}\n\t\t} else {\n\t\t\tresult.push(self.parseKeyDescriptor(keyDescriptor));\n\t\t}\n\t});\n\treturn result;\n};\n\nKeyboardManager.prototype.getPrintableShortcuts = function(keyInfoArray) {\n\tvar self = this,\n\t\tresult = [];\n\t$tw.utils.each(keyInfoArray,function(keyInfo) {\n\t\tif(keyInfo) {\n\t\t\tresult.push((keyInfo.ctrlKey ? \"ctrl-\" : \"\") + \n\t\t\t\t (keyInfo.shiftKey ? \"shift-\" : \"\") + \n\t\t\t\t (keyInfo.altKey ? \"alt-\" : \"\") + \n\t\t\t\t (keyInfo.metaKey ? self.metaKeyName : \"\") + \n\t\t\t\t (self.keyNames[keyInfo.keyCode]));\n\t\t}\n\t});\n\treturn result;\n}\n\nKeyboardManager.prototype.checkKeyDescriptor = function(event,keyInfo) {\n\treturn keyInfo &&\n\t\t\tevent.keyCode === keyInfo.keyCode && \n\t\t\tevent.shiftKey === keyInfo.shiftKey && \n\t\t\tevent.altKey === keyInfo.altKey && \n\t\t\tevent.ctrlKey === keyInfo.ctrlKey && \n\t\t\tevent.metaKey === keyInfo.metaKey;\n};\n\nKeyboardManager.prototype.checkKeyDescriptors = function(event,keyInfoArray) {\n\tfor(var t=0; t<keyInfoArray.length; t++) {\n\t\tif(this.checkKeyDescriptor(event,keyInfoArray[t])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\nexports.KeyboardManager = KeyboardManager;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/language.js": {
"title": "$:/core/modules/language.js",
"text": "/*\\\ntitle: $:/core/modules/language.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Language() manages translateable strings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate an instance of the language manager. Options include:\nwiki: wiki from which to retrieve translation tiddlers\n*/\nfunction Language(options) {\n\toptions = options || \"\";\n\tthis.wiki = options.wiki || $tw.wiki;\n}\n\n/*\nReturn a wikified translateable string. The title is automatically prefixed with \"$:/language/\"\nOptions include:\nvariables: optional hashmap of variables to supply to the language wikification\n*/\nLanguage.prototype.getString = function(title,options) {\n\toptions = options || {};\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.renderTiddler(\"text/plain\",title,{variables: options.variables});\n};\n\n/*\nReturn a raw, unwikified translateable string. The title is automatically prefixed with \"$:/language/\"\n*/\nLanguage.prototype.getRawString = function(title) {\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.getTiddlerText(title);\n};\n\nexports.Language = Language;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/macros/changecount.js": {
"title": "$:/core/modules/macros/changecount.js",
"text": "/*\\\ntitle: $:/core/modules/macros/changecount.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the changecount for the current tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"changecount\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn this.wiki.getChangeCount(this.getVariable(\"currentTiddler\")) + \"\";\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/contrastcolour.js": {
"title": "$:/core/modules/macros/contrastcolour.js",
"text": "/*\\\ntitle: $:/core/modules/macros/contrastcolour.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to choose which of two colours has the highest contrast with a base colour\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"contrastcolour\";\n\nexports.params = [\n\t{name: \"target\"},\n\t{name: \"fallbackTarget\"},\n\t{name: \"colourA\"},\n\t{name: \"colourB\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(target,fallbackTarget,colourA,colourB) {\n\tvar rgbTarget = $tw.utils.parseCSSColor(target) || $tw.utils.parseCSSColor(fallbackTarget);\n\tif(!rgbTarget) {\n\t\treturn colourA;\n\t}\n\tvar rgbColourA = $tw.utils.parseCSSColor(colourA),\n\t\trgbColourB = $tw.utils.parseCSSColor(colourB);\n\tif(rgbColourA && !rgbColourB) {\n\t\treturn rgbColourA;\n\t}\n\tif(rgbColourB && !rgbColourA) {\n\t\treturn rgbColourB;\n\t}\n\tif(!rgbColourA && !rgbColourB) {\n\t\t// If neither colour is readable, return a crude inverse of the target\n\t\treturn [255 - rgbTarget[0],255 - rgbTarget[1],255 - rgbTarget[2],rgbTarget[3]];\n\t}\n\t// Colour brightness formula derived from http://www.w3.org/WAI/ER/WD-AERT/#color-contrast\n\tvar brightnessTarget = rgbTarget[0] * 0.299 + rgbTarget[1] * 0.587 + rgbTarget[2] * 0.114,\n\t\tbrightnessA = rgbColourA[0] * 0.299 + rgbColourA[1] * 0.587 + rgbColourA[2] * 0.114,\n\t\tbrightnessB = rgbColourB[0] * 0.299 + rgbColourB[1] * 0.587 + rgbColourB[2] * 0.114;\n\treturn Math.abs(brightnessTarget - brightnessA) > Math.abs(brightnessTarget - brightnessB) ? colourA : colourB;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/csvtiddlers.js": {
"title": "$:/core/modules/macros/csvtiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/macros/csvtiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to CSV\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"csvtiddlers\";\n\nexports.params = [\n\t{name: \"filter\"},\n\t{name: \"format\"},\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter,format) {\n\tvar self = this,\n\t\ttiddlers = this.wiki.filterTiddlers(filter),\n\t\ttiddler,\n\t\tfields = [],\n\t\tt,f;\n\t// Collect all the fields\n\tfor(t=0;t<tiddlers.length; t++) {\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\tfor(f in tiddler.fields) {\n\t\t\tif(fields.indexOf(f) === -1) {\n\t\t\t\tfields.push(f);\n\t\t\t}\n\t\t}\n\t}\n\t// Sort the fields and bring the standard ones to the front\n\tfields.sort();\n\t\"title text modified modifier created creator\".split(\" \").reverse().forEach(function(value,index) {\n\t\tvar p = fields.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tfields.splice(p,1);\n\t\t\tfields.unshift(value)\n\t\t}\n\t});\n\t// Output the column headings\n\tvar output = [], row = [];\n\tfields.forEach(function(value) {\n\t\trow.push(quoteAndEscape(value))\n\t});\n\toutput.push(row.join(\",\"));\n\t// Output each tiddler\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\trow = [];\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\t\tfor(f=0; f<fields.length; f++) {\n\t\t\t\trow.push(quoteAndEscape(tiddler ? tiddler.getFieldString(fields[f]) || \"\" : \"\"));\n\t\t\t}\n\t\toutput.push(row.join(\",\"));\n\t}\n\treturn output.join(\"\\n\");\n};\n\nfunction quoteAndEscape(value) {\n\treturn \"\\\"\" + value.replace(/\"/mg,\"\\\"\\\"\") + \"\\\"\";\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/displayshortcuts.js": {
"title": "$:/core/modules/macros/displayshortcuts.js",
"text": "/*\\\ntitle: $:/core/modules/macros/displayshortcuts.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to display a list of keyboard shortcuts in human readable form. Notably, it resolves named shortcuts like `((bold))` to the underlying keystrokes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"displayshortcuts\";\n\nexports.params = [\n\t{name: \"shortcuts\"},\n\t{name: \"prefix\"},\n\t{name: \"separator\"},\n\t{name: \"suffix\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(shortcuts,prefix,separator,suffix) {\n\tvar shortcutArray = $tw.keyboardManager.getPrintableShortcuts($tw.keyboardManager.parseKeyDescriptors(shortcuts,{\n\t\twiki: this.wiki\n\t}));\n\tif(shortcutArray.length > 0) {\n\t\tshortcutArray.sort(function(a,b) {\n\t\t return a.toLowerCase().localeCompare(b.toLowerCase());\n\t\t})\n\t\treturn prefix + shortcutArray.join(separator) + suffix;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/dumpvariables.js": {
"title": "$:/core/modules/macros/dumpvariables.js",
"text": "/*\\\ntitle: $:/core/modules/macros/dumpvariables.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to dump all active variable values\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"dumpvariables\";\n\nexports.params = [\n];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\tvar output = [\"|!Variable |!Value |\"],\n\t\tvariables = [], variable;\n\tfor(variable in this.variables) {\n\t\tvariables.push(variable);\n\t}\n\tvariables.sort();\n\tfor(var index=0; index<variables.length; index++) {\n\t\tvar variable = variables[index];\n\t\toutput.push(\"|\" + variable + \" |<input size=50 value=<<\" + variable + \">>/> |\")\n\t}\n\treturn output.join(\"\\n\");\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/jsontiddler.js": {
"title": "$:/core/modules/macros/jsontiddler.js",
"text": "/*\\\ntitle: $:/core/modules/macros/jsontiddler.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output a single tiddler to JSON\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"jsontiddler\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\ttitle = title || this.getVariable(\"currentTiddler\");\n\tvar tiddler = !!title && this.wiki.getTiddler(title),\n\t\tfields = new Object();\n\tif(tiddler) {\n\t\tfor(var field in tiddler.fields) {\n\t\t\tfields[field] = tiddler.getFieldString(field);\n\t\t}\n\t}\n\treturn JSON.stringify(fields,null,$tw.config.preferences.jsonSpaces);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/jsontiddlers.js": {
"title": "$:/core/modules/macros/jsontiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/macros/jsontiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to JSON\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"jsontiddlers\";\n\nexports.params = [\n\t{name: \"filter\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter) {\n\tvar tiddlers = this.wiki.filterTiddlers(filter),\n\t\tdata = [];\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\tvar tiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\tif(tiddler) {\n\t\t\tvar fields = new Object();\n\t\t\tfor(var field in tiddler.fields) {\n\t\t\t\tfields[field] = tiddler.getFieldString(field);\n\t\t\t}\n\t\t\tdata.push(fields);\n\t\t}\n\t}\n\treturn JSON.stringify(data,null,$tw.config.preferences.jsonSpaces);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/makedatauri.js": {
"title": "$:/core/modules/macros/makedatauri.js",
"text": "/*\\\ntitle: $:/core/modules/macros/makedatauri.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to convert a string of text to a data URI\n\n<<makedatauri text:\"Text to be converted\" type:\"text/vnd.tiddlywiki\">>\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"makedatauri\";\n\nexports.params = [\n\t{name: \"text\"},\n\t{name: \"type\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(text,type) {\n\treturn $tw.utils.makeDataUri(text,type);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/now.js": {
"title": "$:/core/modules/macros/now.js",
"text": "/*\\\ntitle: $:/core/modules/macros/now.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return a formatted version of the current time\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"now\";\n\nexports.params = [\n\t{name: \"format\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(format) {\n\treturn $tw.utils.formatDateString(new Date(),format || \"0hh:0mm, DDth MMM YYYY\");\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/qualify.js": {
"title": "$:/core/modules/macros/qualify.js",
"text": "/*\\\ntitle: $:/core/modules/macros/qualify.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to qualify a state tiddler title according\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"qualify\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\treturn title + \"-\" + this.getStateQualifier();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/resolvepath.js": {
"title": "$:/core/modules/macros/resolvepath.js",
"text": "/*\\\ntitle: $:/core/modules/macros/resolvepath.js\ntype: application/javascript\nmodule-type: macro\n\nResolves a relative path for an absolute rootpath.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"resolvepath\";\n\nexports.params = [\n\t{name: \"source\"},\n\t{name: \"root\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(source, root) {\n\treturn $tw.utils.resolvePath(source, root);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/version.js": {
"title": "$:/core/modules/macros/version.js",
"text": "/*\\\ntitle: $:/core/modules/macros/version.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the TiddlyWiki core version number\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"version\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn $tw.version;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/parsers/audioparser.js": {
"title": "$:/core/modules/parsers/audioparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/audioparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe audio parser parses an audio tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar AudioParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"audio\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"audio/ogg\"] = AudioParser;\nexports[\"audio/mpeg\"] = AudioParser;\nexports[\"audio/mp3\"] = AudioParser;\nexports[\"audio/mp4\"] = AudioParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/csvparser.js": {
"title": "$:/core/modules/parsers/csvparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/csvparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe CSV text parser processes CSV files into a table wrapped in a scrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar CsvParser = function(type,text,options) {\n\t// Table framework\n\tthis.tree = [{\n\t\t\"type\": \"scrollable\", \"children\": [{\n\t\t\t\"type\": \"element\", \"tag\": \"table\", \"children\": [{\n\t\t\t\t\"type\": \"element\", \"tag\": \"tbody\", \"children\": []\n\t\t\t}], \"attributes\": {\n\t\t\t\t\"class\": {\"type\": \"string\", \"value\": \"tc-csv-table\"}\n\t\t\t}\n\t\t}]\n\t}];\n\t// Split the text into lines\n\tvar lines = text.split(/\\r?\\n/mg),\n\t\ttag = \"th\";\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar lineText = lines[line];\n\t\tif(lineText) {\n\t\t\tvar row = {\n\t\t\t\t\t\"type\": \"element\", \"tag\": \"tr\", \"children\": []\n\t\t\t\t};\n\t\t\tvar columns = lineText.split(\",\");\n\t\t\tfor(var column=0; column<columns.length; column++) {\n\t\t\t\trow.children.push({\n\t\t\t\t\t\t\"type\": \"element\", \"tag\": tag, \"children\": [{\n\t\t\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\t\t\"text\": columns[column]\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t}\n\t\t\ttag = \"td\";\n\t\t\tthis.tree[0].children[0].children[0].children.push(row);\n\t\t}\n\t}\n};\n\nexports[\"text/csv\"] = CsvParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/htmlparser.js": {
"title": "$:/core/modules/parsers/htmlparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/htmlparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe HTML parser displays text as raw HTML\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HtmlParser = function(type,text,options) {\n\tvar src;\n\tif(options._canonical_uri) {\n\t\tsrc = options._canonical_uri;\n\t} else if(text) {\n\t\tsrc = \"data:text/html;charset=utf-8,\" + encodeURIComponent(text);\n\t}\n\tthis.tree = [{\n\t\ttype: \"element\",\n\t\ttag: \"iframe\",\n\t\tattributes: {\n\t\t\tsrc: {type: \"string\", value: src},\n\t\t\tsandbox: {type: \"string\", value: \"\"}\n\t\t}\n\t}];\n};\n\nexports[\"text/html\"] = HtmlParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/imageparser.js": {
"title": "$:/core/modules/parsers/imageparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/imageparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe image parser parses an image into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"img\",\n\t\t\tattributes: {}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\tif(type === \"image/svg+xml\" || type === \".svg\") {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:image/svg+xml,\" + encodeURIComponent(text)};\n\t\t} else {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t\t}\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"image/svg+xml\"] = ImageParser;\nexports[\"image/jpg\"] = ImageParser;\nexports[\"image/jpeg\"] = ImageParser;\nexports[\"image/png\"] = ImageParser;\nexports[\"image/gif\"] = ImageParser;\nexports[\"image/x-icon\"] = ImageParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/utils/parseutils.js": {
"title": "$:/core/modules/utils/parseutils.js",
"text": "/*\\\ntitle: $:/core/modules/utils/parseutils.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions concerned with parsing text into tokens.\n\nMost functions have the following pattern:\n\n* The parameters are:\n** `source`: the source string being parsed\n** `pos`: the current parse position within the string\n** Any further parameters are used to identify the token that is being parsed\n* The return value is:\n** null if the token was not found at the specified position\n** an object representing the token with the following standard fields:\n*** `type`: string indicating the type of the token\n*** `start`: start position of the token in the source string\n*** `end`: end position of the token in the source string\n*** Any further fields required to describe the token\n\nThe exception is `skipWhiteSpace`, which just returns the position after the whitespace.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for a whitespace token. Returns null if not found, otherwise returns {type: \"whitespace\", start:, end:,}\n*/\nexports.parseWhiteSpace = function(source,pos) {\n\tvar p = pos,c;\n\twhile(true) {\n\t\tc = source.charAt(p);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tp++;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\tif(p === pos) {\n\t\treturn null;\n\t} else {\n\t\treturn {\n\t\t\ttype: \"whitespace\",\n\t\t\tstart: pos,\n\t\t\tend: p\n\t\t}\n\t}\n};\n\n/*\nConvenience wrapper for parseWhiteSpace. Returns the position after the whitespace\n*/\nexports.skipWhiteSpace = function(source,pos) {\n\tvar c;\n\twhile(true) {\n\t\tc = source.charAt(pos);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tpos++;\n\t\t} else {\n\t\t\treturn pos;\n\t\t}\n\t}\n};\n\n/*\nLook for a given string token. Returns null if not found, otherwise returns {type: \"token\", value:, start:, end:,}\n*/\nexports.parseTokenString = function(source,pos,token) {\n\tvar match = source.indexOf(token,pos) === pos;\n\tif(match) {\n\t\treturn {\n\t\t\ttype: \"token\",\n\t\t\tvalue: token,\n\t\t\tstart: pos,\n\t\t\tend: pos + token.length\n\t\t};\n\t}\n\treturn null;\n};\n\n/*\nLook for a token matching a regex. Returns null if not found, otherwise returns {type: \"regexp\", match:, start:, end:,}\n*/\nexports.parseTokenRegExp = function(source,pos,reToken) {\n\tvar node = {\n\t\ttype: \"regexp\",\n\t\tstart: pos\n\t};\n\treToken.lastIndex = pos;\n\tnode.match = reToken.exec(source);\n\tif(node.match && node.match.index === pos) {\n\t\tnode.end = pos + node.match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a string literal. Returns null if not found, otherwise returns {type: \"string\", value:, start:, end:,}\n*/\nexports.parseStringLiteral = function(source,pos) {\n\tvar node = {\n\t\ttype: \"string\",\n\t\tstart: pos\n\t};\n\tvar reString = /(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\")|(?:'([^']*)')/g;\n\treString.lastIndex = pos;\n\tvar match = reString.exec(source);\n\tif(match && match.index === pos) {\n\t\tnode.value = match[1] !== undefined ? match[1] :(\n\t\t\tmatch[2] !== undefined ? match[2] : match[3] \n\t\t\t\t\t);\n\t\tnode.end = pos + match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a macro invocation parameter. Returns null if not found, or {type: \"macro-parameter\", name:, value:, start:, end:}\n*/\nexports.parseMacroParameter = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macro-parameter\",\n\t\tstart: pos\n\t};\n\t// Define our regexp\n\tvar reMacroParameter = /(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\\s>\"'=]+)))/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the parameter\n\tvar token = $tw.utils.parseTokenRegExp(source,pos,reMacroParameter);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the parameter details\n\tnode.value = token.match[2] !== undefined ? token.match[2] : (\n\t\t\t\t\ttoken.match[3] !== undefined ? token.match[3] : (\n\t\t\t\t\t\ttoken.match[4] !== undefined ? token.match[4] : (\n\t\t\t\t\t\t\ttoken.match[5] !== undefined ? token.match[5] : (\n\t\t\t\t\t\t\t\ttoken.match[6] !== undefined ? token.match[6] : (\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\tif(token.match[1]) {\n\t\tnode.name = token.match[1];\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for a macro invocation. Returns null if not found, or {type: \"macrocall\", name:, parameters:, start:, end:}\n*/\nexports.parseMacroInvocation = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macrocall\",\n\t\tstart: pos,\n\t\tparams: []\n\t};\n\t// Define our regexps\n\tvar reMacroName = /([^\\s>\"'=]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double less than sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"<<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the macro name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reMacroName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Process parameters\n\tvar parameter = $tw.utils.parseMacroParameter(source,pos);\n\twhile(parameter) {\n\t\tnode.params.push(parameter);\n\t\tpos = parameter.end;\n\t\t// Get the next parameter\n\t\tparameter = $tw.utils.parseMacroParameter(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">>\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for an HTML attribute definition. Returns null if not found, otherwise returns {type: \"attribute\", name:, valueType: \"string|indirect|macro\", value:, start:, end:,}\n*/\nexports.parseAttribute = function(source,pos) {\n\tvar node = {\n\t\tstart: pos\n\t};\n\t// Define our regexps\n\tvar reAttributeName = /([^\\/\\s>\"'=]+)/g,\n\t\treUnquotedAttribute = /([^\\/\\s<>\"'=]+)/g,\n\t\treFilteredValue = /\\{\\{\\{(.+?)\\}\\}\\}/g,\n\t\treIndirectValue = /\\{\\{([^\\}]+)\\}\\}/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the attribute name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reAttributeName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for an equals sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"=\");\n\tif(token) {\n\t\tpos = token.end;\n\t\t// Skip whitespace\n\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t// Look for a string literal\n\t\tvar stringLiteral = $tw.utils.parseStringLiteral(source,pos);\n\t\tif(stringLiteral) {\n\t\t\tpos = stringLiteral.end;\n\t\t\tnode.type = \"string\";\n\t\t\tnode.value = stringLiteral.value;\n\t\t} else {\n\t\t\t// Look for a filtered value\n\t\t\tvar filteredValue = $tw.utils.parseTokenRegExp(source,pos,reFilteredValue);\n\t\t\tif(filteredValue) {\n\t\t\t\tpos = filteredValue.end;\n\t\t\t\tnode.type = \"filtered\";\n\t\t\t\tnode.filter = filteredValue.match[1];\n\t\t\t} else {\n\t\t\t\t// Look for an indirect value\n\t\t\t\tvar indirectValue = $tw.utils.parseTokenRegExp(source,pos,reIndirectValue);\n\t\t\t\tif(indirectValue) {\n\t\t\t\t\tpos = indirectValue.end;\n\t\t\t\t\tnode.type = \"indirect\";\n\t\t\t\t\tnode.textReference = indirectValue.match[1];\n\t\t\t\t} else {\n\t\t\t\t\t// Look for a unquoted value\n\t\t\t\t\tvar unquotedValue = $tw.utils.parseTokenRegExp(source,pos,reUnquotedAttribute);\n\t\t\t\t\tif(unquotedValue) {\n\t\t\t\t\t\tpos = unquotedValue.end;\n\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\tnode.value = unquotedValue.match[1];\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Look for a macro invocation value\n\t\t\t\t\t\tvar macroInvocation = $tw.utils.parseMacroInvocation(source,pos);\n\t\t\t\t\t\tif(macroInvocation) {\n\t\t\t\t\t\t\tpos = macroInvocation.end;\n\t\t\t\t\t\t\tnode.type = \"macro\";\n\t\t\t\t\t\t\tnode.value = macroInvocation;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\t\tnode.value = \"true\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tnode.type = \"string\";\n\t\tnode.value = \"true\";\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/parsers/pdfparser.js": {
"title": "$:/core/modules/parsers/pdfparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/pdfparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe PDF parser embeds a PDF viewer\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"embed\",\n\t\t\tattributes: {}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:application/pdf;base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"application/pdf\"] = ImageParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/textparser.js": {
"title": "$:/core/modules/parsers/textparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/textparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe plain text parser processes blocks of source text into a degenerate parse tree consisting of a single text node\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar TextParser = function(type,text,options) {\n\tthis.tree = [{\n\t\ttype: \"codeblock\",\n\t\tattributes: {\n\t\t\tcode: {type: \"string\", value: text},\n\t\t\tlanguage: {type: \"string\", value: type}\n\t\t}\n\t}];\n};\n\nexports[\"text/plain\"] = TextParser;\nexports[\"text/x-tiddlywiki\"] = TextParser;\nexports[\"application/javascript\"] = TextParser;\nexports[\"application/json\"] = TextParser;\nexports[\"text/css\"] = TextParser;\nexports[\"application/x-tiddler-dictionary\"] = TextParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/videoparser.js": {
"title": "$:/core/modules/parsers/videoparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/videoparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe video parser parses a video tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar VideoParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"video\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"video/mp4\"] = VideoParser;\nexports[\"video/quicktime\"] = VideoParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/wikiparser/rules/codeblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/codeblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for code blocks. For example:\n\n```\n\t```\n\tThis text will not be //wikified//\n\t```\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match and get language if defined\n\tthis.matchRegExp = /```([\\w-]*)\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\\r?\\n```$)/mg;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Return the $codeblock widget\n\treturn [{\n\t\t\ttype: \"codeblock\",\n\t\t\tattributes: {\n\t\t\t\t\tcode: {type: \"string\", value: text},\n\t\t\t\t\tlanguage: {type: \"string\", value: this.match[1]}\n\t\t\t}\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/codeinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/codeinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for code runs. For example:\n\n```\n\tThis is a `code run`.\n\tThis is another ``code run``\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(``?)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar reEnd = new RegExp(this.match[1], \"mg\");\n\t// Look for the end marker\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the text\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"code\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: text\n\t\t}]\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/commentblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/commentblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/commentinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/commentinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/dash.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/dash.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/dash.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for dashes. For example:\n\n```\nThis is an en-dash: --\n\nThis is an em-dash: ---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"dash\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{2,3}(?!-)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar dash = this.match[0].length === 2 ? \"–\" : \"—\";\n\treturn [{\n\t\ttype: \"entity\",\n\t\tentity: dash\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/bold.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - bold. For example:\n\n```\n\tThis is ''bold'' text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except bold \n\\rules only bold \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"bold\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /''/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/''/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strong\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/italic.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - italic. For example:\n\n```\n\tThis is //italic// text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except italic\n\\rules only italic\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"italic\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\/\\//mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\/\\//mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"em\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - strikethrough. For example:\n\n```\n\tThis is ~~strikethrough~~ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except strikethrough \n\\rules only strikethrough \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"strikethrough\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~~/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/~~/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strike\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - subscript. For example:\n\n```\n\tThis is ,,subscript,, text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except subscript \n\\rules only subscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"subscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /,,/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/,,/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sub\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - superscript. For example:\n\n```\n\tThis is ^^superscript^^ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except superscript \n\\rules only superscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"superscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\^\\^/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\^\\^/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sup\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - underscore. For example:\n\n```\n\tThis is __underscore__ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except underscore \n\\rules only underscore\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"underscore\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /__/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/__/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"u\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/entity.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/entity.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/entity.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML entities. For example:\n\n```\n\tThis is a copyright symbol: ©\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"entity\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(&#?[a-zA-Z0-9]{2,8};)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar entityString = this.match[1];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Return the entity\n\treturn [{type: \"entity\", entity: this.match[0]}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/extlink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/extlink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/extlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\nAn external link: https://www.tiddlywiki.com/\n\nA suppressed external link: ~http://www.tiddlyspace.com/\n```\n\nExternal links can be suppressed by preceding them with `~`.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"extlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~?(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|\"\\\\^]+(?:\\/|\\b)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(this.match[0].substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: this.match[0].substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: this.match[0]},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"},\n\t\t\t\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: this.match[0]\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t},\n\t\tisBlock: true\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t}\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for marking areas with hard line breaks. For example:\n\n```\n\"\"\"\nThis is some text\nThat is set like\nIt is a Poem\nWhen it is\nClearly\nNot\n\"\"\"\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"hardlinebreaks\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\"\"\"(?:\\r?\\n)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\"\"\")|(\\r?\\n)/mg,\n\t\ttree = [],\n\t\tmatch;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tdo {\n\t\t// Parse the run up to the terminator\n\t\ttree.push.apply(tree,this.parser.parseInlineRun(reEnd,{eatTerminator: false}));\n\t\t// Redo the terminator match\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tmatch = reEnd.exec(this.parser.source);\n\t\tif(match) {\n\t\t\tthis.parser.pos = reEnd.lastIndex;\n\t\t\t// Add a line break if the terminator was a line break\n\t\t\tif(match[2]) {\n\t\t\t\ttree.push({type: \"element\", tag: \"br\"});\n\t\t\t}\n\t\t}\n\t} while(match && !match[1]);\n\t// Return the nodes\n\treturn tree;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/heading.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/heading.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/heading.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for headings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"heading\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(!{1,6})/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar headingLevel = this.match[1].length;\n\t// Move past the !s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse any classes, whitespace and then the heading itself\n\tvar classes = this.parser.parseClasses();\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// Return the heading\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"h\" + headingLevel, \n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: classes.join(\" \")}\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/horizrule.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/horizrule.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/horizrule.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for rules. For example:\n\n```\n---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"horizrule\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{3,}\\r?(?:\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\treturn [{type: \"element\", tag: \"hr\"}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/html.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/html.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/html.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for HTML elements and widgets. For example:\n\n{{{\n<aside>\nThis is an HTML5 aside element\n</aside>\n\n<$slider target=\"MyTiddler\">\nThis is a widget invocation\n</$slider>\n\n}}}\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"html\";\nexports.types = {inline: true, block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextTag = this.findNextTag(this.parser.source,startPos,{\n\t\trequireLineBreak: this.is.block\n\t});\n\treturn this.nextTag ? this.nextTag.start : undefined;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Retrieve the most recent match so that recursive calls don't overwrite it\n\tvar tag = this.nextTag;\n\tthis.nextTag = null;\n\t// Advance the parser position to past the tag\n\tthis.parser.pos = tag.end;\n\t// Check for an immediately following double linebreak\n\tvar hasLineBreak = !tag.isSelfClosing && !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t// Set whether we're in block mode\n\ttag.isBlock = this.is.block || hasLineBreak;\n\t// Parse the body if we need to\n\tif(!tag.isSelfClosing && $tw.config.htmlVoidElements.indexOf(tag.tag) === -1) {\n\t\t\tvar reEndString = \"</\" + $tw.utils.escapeRegExp(tag.tag) + \">\",\n\t\t\t\treEnd = new RegExp(\"(\" + reEndString + \")\",\"mg\");\n\t\tif(hasLineBreak) {\n\t\t\ttag.children = this.parser.parseBlocks(reEndString);\n\t\t} else {\n\t\t\ttag.children = this.parser.parseInlineRun(reEnd);\n\t\t}\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tvar endMatch = reEnd.exec(this.parser.source);\n\t\tif(endMatch && endMatch.index === this.parser.pos) {\n\t\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t\t}\n\t}\n\t// Return the tag\n\treturn [tag];\n};\n\n/*\nLook for an HTML tag. Returns null if not found, otherwise returns {type: \"element\", name:, attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseTag = function(source,pos,options) {\n\toptions = options || {};\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Define our regexps\n\tvar reTagName = /([a-zA-Z0-9\\-\\$]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a less than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\"<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the tag name\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,reTagName);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tnode.tag = token.match[1];\n\tif(node.tag.charAt(0) === \"$\") {\n\t\tnode.type = node.tag.substr(1);\n\t}\n\tpos = token.end;\n\t// Check that the tag is terminated by a space, / or >\n\tif(!$tw.utils.parseWhiteSpace(source,pos) && !(source.charAt(pos) === \"/\") && !(source.charAt(pos) === \">\") ) {\n\t\treturn null;\n\t}\n\t// Process attributes\n\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\twhile(attribute) {\n\t\tnode.attributes[attribute.name] = attribute;\n\t\tpos = attribute.end;\n\t\t// Get the next attribute\n\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a closing slash\n\ttoken = $tw.utils.parseTokenString(source,pos,\"/\");\n\tif(token) {\n\t\tpos = token.end;\n\t\tnode.isSelfClosing = true;\n\t}\n\t// Look for a greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Check for a required line break\n\tif(options.requireLineBreak) {\n\t\ttoken = $tw.utils.parseTokenRegExp(source,pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t\tif(!token) {\n\t\t\treturn null;\n\t\t}\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\nexports.findNextTag = function(source,pos,options) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /<([a-zA-Z\\-\\$]+)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseTag(source,match.index,options);\n\t\t// Return success\n\t\tif(tag && this.isLegalTag(tag)) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\nexports.isLegalTag = function(tag) {\n\t// Widgets are always OK\n\tif(tag.type !== \"element\") {\n\t\treturn true;\n\t// If it's an HTML tag that starts with a dash then it's not legal\n\t} else if(tag.tag.charAt(0) === \"-\") {\n\t\treturn false;\n\t} else {\n\t\t// Otherwise it's OK\n\t\treturn true;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/image.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/image.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/image.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for embedding images. For example:\n\n```\n[img[https://tiddlywiki.com/fractalveg.jpg]]\n[img width=23 height=24 [https://tiddlywiki.com/fractalveg.jpg]]\n[img width={{!!width}} height={{!!height}} [https://tiddlywiki.com/fractalveg.jpg]]\n[img[Description of image|https://tiddlywiki.com/fractalveg.jpg]]\n[img[TiddlerTitle]]\n[img[Description of image|TiddlerTitle]]\n```\n\nGenerates the `<$image>` widget.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"image\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextImage = this.findNextImage(this.parser.source,startPos);\n\treturn this.nextImage ? this.nextImage.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextImage.end;\n\tvar node = {\n\t\ttype: \"image\",\n\t\tattributes: this.nextImage.attributes\n\t};\n\treturn [node];\n};\n\n/*\nFind the next image from the current position\n*/\nexports.findNextImage = function(source,pos) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /(\\[img)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseImage(source,match.index);\n\t\t// Return success\n\t\tif(tag) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an image at the specified position. Returns null if not found, otherwise returns {type: \"image\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseImage = function(source,pos) {\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"image\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[img`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[img\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Process attributes\n\tif(source.charAt(pos) !== \"[\") {\n\t\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\t\twhile(attribute) {\n\t\t\tnode.attributes[attribute.name] = attribute;\n\t\t\tpos = attribute.end;\n\t\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t\tif(source.charAt(pos) !== \"[\") {\n\t\t\t\t// Get the next attribute\n\t\t\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t\t\t} else {\n\t\t\t\tattribute = null;\n\t\t\t}\n\t\t}\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[` after the attributes\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the source up to the terminating `]]`\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,/(?:([^|\\]]*?)\\|)?([^\\]]+?)\\]\\]/g);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\tif(token.match[1]) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: token.match[1].trim()};\n\t}\n\tnode.attributes.source = {type: \"string\", value: (token.match[2] || \"\").trim()};\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/list.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/list.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/list.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for lists. For example:\n\n```\n* This is an unordered list\n* It has two items\n\n# This is a numbered list\n## With a subitem\n# And a third item\n\n; This is a term that is being defined\n: This is the definition of that term\n```\n\nNote that lists can be nested arbitrarily:\n\n```\n#** One\n#* Two\n#** Three\n#**** Four\n#**# Five\n#**## Six\n## Seven\n### Eight\n## Nine\n```\n\nA CSS class can be applied to a list item as follows:\n\n```\n* List item one\n*.active List item two has the class `active`\n* List item three\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"list\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /([\\*#;:>]+)/mg;\n};\n\nvar listTypes = {\n\t\"*\": {listTag: \"ul\", itemTag: \"li\"},\n\t\"#\": {listTag: \"ol\", itemTag: \"li\"},\n\t\";\": {listTag: \"dl\", itemTag: \"dt\"},\n\t\":\": {listTag: \"dl\", itemTag: \"dd\"},\n\t\">\": {listTag: \"blockquote\", itemTag: \"p\"}\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Array of parse tree nodes for the previous row of the list\n\tvar listStack = [];\n\t// Cycle through the items in the list\n\twhile(true) {\n\t\t// Match the list marker\n\t\tvar reMatch = /([\\*#;:>]+)/mg;\n\t\treMatch.lastIndex = this.parser.pos;\n\t\tvar match = reMatch.exec(this.parser.source);\n\t\tif(!match || match.index !== this.parser.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check whether the list type of the top level matches\n\t\tvar listInfo = listTypes[match[0].charAt(0)];\n\t\tif(listStack.length > 0 && listStack[0].tag !== listInfo.listTag) {\n\t\t\tbreak;\n\t\t}\n\t\t// Move past the list marker\n\t\tthis.parser.pos = match.index + match[0].length;\n\t\t// Walk through the list markers for the current row\n\t\tfor(var t=0; t<match[0].length; t++) {\n\t\t\tlistInfo = listTypes[match[0].charAt(t)];\n\t\t\t// Remove any stacked up element if we can't re-use it because the list type doesn't match\n\t\t\tif(listStack.length > t && listStack[t].tag !== listInfo.listTag) {\n\t\t\t\tlistStack.splice(t,listStack.length - t);\n\t\t\t}\n\t\t\t// Construct the list element or reuse the previous one at this level\n\t\t\tif(listStack.length <= t) {\n\t\t\t\tvar listElement = {type: \"element\", tag: listInfo.listTag, children: [\n\t\t\t\t\t{type: \"element\", tag: listInfo.itemTag, children: []}\n\t\t\t\t]};\n\t\t\t\t// Link this list element into the last child item of the parent list item\n\t\t\t\tif(t) {\n\t\t\t\t\tvar prevListItem = listStack[t-1].children[listStack[t-1].children.length-1];\n\t\t\t\t\tprevListItem.children.push(listElement);\n\t\t\t\t}\n\t\t\t\t// Save this element in the stack\n\t\t\t\tlistStack[t] = listElement;\n\t\t\t} else if(t === (match[0].length - 1)) {\n\t\t\t\tlistStack[t].children.push({type: \"element\", tag: listInfo.itemTag, children: []});\n\t\t\t}\n\t\t}\n\t\tif(listStack.length > match[0].length) {\n\t\t\tlistStack.splice(match[0].length,listStack.length - match[0].length);\n\t\t}\n\t\t// Process the body of the list item into the last list item\n\t\tvar lastListChildren = listStack[listStack.length-1].children,\n\t\t\tlastListItem = lastListChildren[lastListChildren.length-1],\n\t\t\tclasses = this.parser.parseClasses();\n\t\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\t\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t\tlastListItem.children.push.apply(lastListItem.children,tree);\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(lastListItem,classes.join(\" \"));\n\t\t}\n\t\t// Consume any whitespace following the list item\n\t\tthis.parser.skipWhitespace();\n\t}\n\t// Return the root element of the list\n\treturn [listStack[0]];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrocallblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/macrocallblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for block macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^>\\s]+)(?:\\s*)((?:[^>]|(?:>(?!>)))*?)>>(?:\\r?\\n|$)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params,\n\t\tisBlock: true\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrocallinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/macrocallinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^\\s>]+)\\s*([\\s\\S]*?)>>/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5]|| paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrodef.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/macrodef.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrodef.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for macro definitions\n\n```\n\\define name(param:defaultvalue,param2:defaultvalue)\ndefinition text, including $param$ markers\n\\end\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrodef\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\define\\s+([^(\\s]+)\\(\\s*([^)]*)\\)(\\s*\\r?\\n)?/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the macro name and parameters\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the parameters\n\tvar paramString = this.match[2],\n\t\tparams = [];\n\tif(paramString !== \"\") {\n\t\tvar reParam = /\\s*([A-Za-z0-9\\-_]+)(?:\\s*:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))?/mg,\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\twhile(paramMatch) {\n\t\t\t// Save the parameter details\n\t\t\tvar paramInfo = {name: paramMatch[1]},\n\t\t\t\tdefaultValue = paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6];\n\t\t\tif(defaultValue) {\n\t\t\t\tparamInfo[\"default\"] = defaultValue;\n\t\t\t}\n\t\t\tparams.push(paramInfo);\n\t\t\t// Look for the next parameter\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\t}\n\t}\n\t// Is this a multiline definition?\n\tvar reEnd;\n\tif(this.match[3]) {\n\t\t// If so, the end of the body is marked with \\end\n\t\treEnd = /(\\r?\\n\\\\end[^\\S\\n\\r]*(?:$|\\r?\\n))/mg;\n\t} else {\n\t\t// Otherwise, the end of the definition is marked by the end of the line\n\t\treEnd = /($|\\r?\\n)/mg;\n\t\t// Move past any whitespace\n\t\tthis.parser.pos = $tw.utils.skipWhiteSpace(this.parser.source,this.parser.pos);\n\t}\n\t// Find the end of the definition\n\treEnd.lastIndex = this.parser.pos;\n\tvar text,\n\t\tendMatch = reEnd.exec(this.parser.source);\n\tif(endMatch) {\n\t\ttext = this.parser.source.substring(this.parser.pos,endMatch.index);\n\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t} else {\n\t\t// We didn't find the end of the definition, so we'll make it blank\n\t\ttext = \"\";\n\t}\n\t// Save the macro definition\n\treturn [{\n\t\ttype: \"set\",\n\t\tattributes: {\n\t\t\tname: {type: \"string\", value: this.match[1]},\n\t\t\tvalue: {type: \"string\", value: text}\n\t\t},\n\t\tchildren: [],\n\t\tparams: params\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/prettyextlink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/prettyextlink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettyextlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\n[ext[https://tiddlywiki.com/fractalveg.jpg]]\n[ext[Tooltip|https://tiddlywiki.com/fractalveg.jpg]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettyextlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextLink = this.findNextLink(this.parser.source,startPos);\n\treturn this.nextLink ? this.nextLink.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextLink.end;\n\treturn [this.nextLink];\n};\n\n/*\nFind the next link from the current position\n*/\nexports.findNextLink = function(source,pos) {\n\t// A regexp for finding candidate links\n\tvar reLookahead = /(\\[ext\\[)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a link\n\t\tvar link = this.parseLink(source,match.index);\n\t\t// Return success\n\t\tif(link) {\n\t\t\treturn link;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an link at the specified position. Returns null if not found, otherwise returns {type: \"element\", tag: \"a\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseLink = function(source,pos) {\n\tvar token,\n\t\ttextNode = {\n\t\t\ttype: \"text\"\n\t\t},\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tstart: pos,\n\t\t\tattributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t},\n\t\t\tchildren: [textNode]\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[ext[`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[ext[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Look ahead for the terminating `]]`\n\tvar closePos = source.indexOf(\"]]\",pos);\n\tif(closePos === -1) {\n\t\treturn null;\n\t}\n\t// Look for a `|` separating the tooltip\n\tvar splitPos = source.indexOf(\"|\",pos);\n\tif(splitPos === -1 || splitPos > closePos) {\n\t\tsplitPos = null;\n\t}\n\t// Pull out the tooltip and URL\n\tvar tooltip, URL;\n\tif(splitPos) {\n\t\tURL = source.substring(splitPos + 1,closePos).trim();\n\t\ttextNode.text = source.substring(pos,splitPos).trim();\n\t} else {\n\t\tURL = source.substring(pos,closePos).trim();\n\t\ttextNode.text = URL;\n\t}\n\tnode.attributes.href = {type: \"string\", value: URL};\n\tnode.attributes.target = {type: \"string\", value: \"_blank\"};\n\tnode.attributes.rel = {type: \"string\", value: \"noopener noreferrer\"};\n\t// Update the end position\n\tnode.end = closePos + 2;\n\treturn node;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/prettylink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/prettylink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettylink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for pretty links. For example:\n\n```\n[[Introduction]]\n\n[[Link description|TiddlerTitle]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettylink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\[\\[(.*?)(?:\\|(.*?))?\\]\\]/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Process the link\n\tvar text = this.match[1],\n\t\tlink = this.match[2] || text;\n\tif($tw.utils.isLinkExternal(link)) {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: link},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"},\n\t\t\t\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: link}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/quoteblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/quoteblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/quoteblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for quote blocks. For example:\n\n```\n\t<<<.optionalClass(es) optional cited from\n\ta quote\n\t<<<\n\t\n\t<<<.optionalClass(es)\n\ta quote\n\t<<< optional cited from\n```\n\nQuotes can be quoted by putting more <s\n\n```\n\t<<<\n\tQuote Level 1\n\t\n\t<<<<\n\tQuoteLevel 2\n\t<<<<\n\t\n\t<<<\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"quoteblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(<<<+)/mg;\n};\n\nexports.parse = function() {\n\tvar classes = [\"tc-quote\"];\n\t// Get all the details of the match\n\tvar reEndString = \"^\" + this.match[1] + \"(?!<)\";\n\t// Move past the <s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\n\t// Parse any classes, whitespace and then the optional cite itself\n\tclasses.push.apply(classes, this.parser.parseClasses());\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar cite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// before handling the cite, parse the body of the quote\n\tvar tree= this.parser.parseBlocks(reEndString);\n\t// If we got a cite, put it before the text\n\tif(cite.length > 0) {\n\t\ttree.unshift({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Parse any optional cite\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tcite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// If we got a cite, push it\n\tif(cite.length > 0) {\n\t\ttree.push({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Return the blockquote element\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"blockquote\",\n\t\tattributes: {\n\t\t\tclass: { type: \"string\", value: classes.join(\" \") },\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/rules.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/rules.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/rules.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for rules specifications\n\n```\n\\rules except ruleone ruletwo rulethree\n\\rules only ruleone ruletwo rulethree\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"rules\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\rules[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\tif(tokens.length > 0) {\n\t\tthis.parser.amendRules(tokens[0],tokens.slice(1));\n\t}\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/styleblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/styleblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for assigning styles and classes to paragraphs and other blocks. For example:\n\n```\n@@.myClass\n@@background-color:red;\nThis paragraph will have the CSS class `myClass`.\n\n* The `<ul>` around this list will also have the class `myClass`\n* List item 2\n\n@@\n```\n\nNote that classes and styles can be mixed subject to the rule that styles must precede classes. For example\n\n```\n@@.myFirstClass.mySecondClass\n@@width:100px;.myThirdClass\nThis is a paragraph\n@@\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(?:\\.([^\\r\\n\\s]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEndString = \"^@@(?:\\\\r?\\\\n)?\";\n\tvar classes = [], styles = [];\n\tdo {\n\t\t// Get the class and style\n\t\tif(this.match[1]) {\n\t\t\tstyles.push(this.match[1]);\n\t\t}\n\t\tif(this.match[2]) {\n\t\t\tclasses.push(this.match[2].split(\".\").join(\" \"));\n\t\t}\n\t\t// Move past the match\n\t\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\t// Look for another line of classes and styles\n\t\tthis.match = this.matchRegExp.exec(this.parser.source);\n\t} while(this.match && this.match.index === this.parser.pos);\n\t// Parse the body\n\tvar tree = this.parser.parseBlocks(reEndString);\n\tfor(var t=0; t<tree.length; t++) {\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(tree[t],classes.join(\" \"));\n\t\t}\n\t\tif(styles.length > 0) {\n\t\t\t$tw.utils.addAttributeToParseTreeNode(tree[t],\"style\",styles.join(\"\"));\n\t\t}\n\t}\n\treturn tree;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/styleinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/styleinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for assigning styles and classes to inline runs. For example:\n\n```\n@@.myClass This is some text with a class@@\n@@background-color:red;This is some text with a background colour@@\n@@width:100px;.myClass This is some text with a class and a width@@\n```\n\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(\\.(?:[^\\r\\n\\s]+)\\s+)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /@@/g;\n\t// Get the styles and class\n\tvar stylesString = this.match[1],\n\t\tclassString = this.match[2] ? this.match[2].split(\".\").join(\" \") : undefined;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the run up to the terminator\n\tvar tree = this.parser.parseInlineRun(reEnd,{eatTerminator: true});\n\t// Return the classed span\n\tvar node = {\n\t\ttype: \"element\",\n\t\ttag: \"span\",\n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: \"tc-inline-style\"}\n\t\t},\n\t\tchildren: tree\n\t};\n\tif(classString) {\n\t\t$tw.utils.addClassToParseTreeNode(node,classString);\n\t}\n\tif(stylesString) {\n\t\t$tw.utils.addAttributeToParseTreeNode(node,\"style\",stylesString);\n\t}\n\treturn [node];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/syslink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/syslink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/syslink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for system tiddler links.\nCan be suppressed preceding them with `~`.\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"syslink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp(\n\t\t\"~?\\\\$:\\\\/[\" +\n\t\t$tw.config.textPrimitives.anyLetter.substr(1,$tw.config.textPrimitives.anyLetter.length - 2) +\n\t\t\"\\/._-]+\",\n\t\t\"mg\"\n\t);\n};\n\nexports.parse = function() {\n\tvar match = this.match[0];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(match.substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: match.substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: match}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: match\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/table.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/table.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/table.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for tables.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"table\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\|(?:[^\\n]*)\\|(?:[fhck]?)\\r?(?:\\n|$)/mg;\n};\n\nvar processRow = function(prevColumns) {\n\tvar cellRegExp = /(?:\\|([^\\n\\|]*)\\|)|(\\|[fhck]?\\r?(?:\\n|$))/mg,\n\t\tcellTermRegExp = /((?:\\x20*)\\|)/mg,\n\t\ttree = [],\n\t\tcol = 0,\n\t\tcolSpanCount = 1,\n\t\tprevCell,\n\t\tvAlign;\n\t// Match a single cell\n\tcellRegExp.lastIndex = this.parser.pos;\n\tvar cellMatch = cellRegExp.exec(this.parser.source);\n\twhile(cellMatch && cellMatch.index === this.parser.pos) {\n\t\tif(cellMatch[1] === \"~\") {\n\t\t\t// Rowspan\n\t\t\tvar last = prevColumns[col];\n\t\t\tif(last) {\n\t\t\t\tlast.rowSpanCount++;\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"rowspan\",last.rowSpanCount);\n\t\t\t\tvAlign = $tw.utils.getAttributeValueFromParseTreeNode(last.element,\"valign\",\"center\");\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"valign\",vAlign);\n\t\t\t\tif(colSpanCount > 1) {\n\t\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"colspan\",colSpanCount);\n\t\t\t\t\tcolSpanCount = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \">\") {\n\t\t\t// Colspan\n\t\t\tcolSpanCount++;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \"<\" && prevCell) {\n\t\t\tcolSpanCount = 1 + $tw.utils.getAttributeValueFromParseTreeNode(prevCell,\"colspan\",1);\n\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\tcolSpanCount = 1;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[2]) {\n\t\t\t// End of row\n\t\t\tif(prevCell && colSpanCount > 1) {\n\t\t\t\tif(prevCell.attributes && prevCell.attributes && prevCell.attributes.colspan) {\n\t\t\t\t\t\tcolSpanCount += prevCell.attributes.colspan.value;\n\t\t\t\t} else {\n\t\t\t\t\tcolSpanCount -= 1;\n\t\t\t\t}\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\t}\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t\tbreak;\n\t\t} else {\n\t\t\t// For ordinary cells, step beyond the opening `|`\n\t\t\tthis.parser.pos++;\n\t\t\t// Look for a space at the start of the cell\n\t\t\tvar spaceLeft = false;\n\t\t\tvAlign = null;\n\t\t\tif(this.parser.source.substr(this.parser.pos).search(/^\\^([^\\^]|\\^\\^)/) === 0) {\n\t\t\t\tvAlign = \"top\";\n\t\t\t} else if(this.parser.source.substr(this.parser.pos).search(/^,([^,]|,,)/) === 0) {\n\t\t\t\tvAlign = \"bottom\";\n\t\t\t}\n\t\t\tif(vAlign) {\n\t\t\t\tthis.parser.pos++;\n\t\t\t}\n\t\t\tvar chr = this.parser.source.substr(this.parser.pos,1);\n\t\t\twhile(chr === \" \") {\n\t\t\t\tspaceLeft = true;\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tchr = this.parser.source.substr(this.parser.pos,1);\n\t\t\t}\n\t\t\t// Check whether this is a heading cell\n\t\t\tvar cell;\n\t\t\tif(chr === \"!\") {\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tcell = {type: \"element\", tag: \"th\", children: []};\n\t\t\t} else {\n\t\t\t\tcell = {type: \"element\", tag: \"td\", children: []};\n\t\t\t}\n\t\t\ttree.push(cell);\n\t\t\t// Record information about this cell\n\t\t\tprevCell = cell;\n\t\t\tprevColumns[col] = {rowSpanCount:1,element:cell};\n\t\t\t// Check for a colspan\n\t\t\tif(colSpanCount > 1) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"colspan\",colSpanCount);\n\t\t\t\tcolSpanCount = 1;\n\t\t\t}\n\t\t\t// Parse the cell\n\t\t\tcell.children = this.parser.parseInlineRun(cellTermRegExp,{eatTerminator: true});\n\t\t\t// Set the alignment for the cell\n\t\t\tif(vAlign) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"valign\",vAlign);\n\t\t\t}\n\t\t\tif(this.parser.source.substr(this.parser.pos - 2,1) === \" \") { // spaceRight\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",spaceLeft ? \"center\" : \"left\");\n\t\t\t} else if(spaceLeft) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",\"right\");\n\t\t\t}\n\t\t\t// Move back to the closing `|`\n\t\t\tthis.parser.pos--;\n\t\t}\n\t\tcol++;\n\t\tcellRegExp.lastIndex = this.parser.pos;\n\t\tcellMatch = cellRegExp.exec(this.parser.source);\n\t}\n\treturn tree;\n};\n\nexports.parse = function() {\n\tvar rowContainerTypes = {\"c\":\"caption\", \"h\":\"thead\", \"\":\"tbody\", \"f\":\"tfoot\"},\n\t\ttable = {type: \"element\", tag: \"table\", children: []},\n\t\trowRegExp = /^\\|([^\\n]*)\\|([fhck]?)\\r?(?:\\n|$)/mg,\n\t\trowTermRegExp = /(\\|(?:[fhck]?)\\r?(?:\\n|$))/mg,\n\t\tprevColumns = [],\n\t\tcurrRowType,\n\t\trowContainer,\n\t\trowCount = 0;\n\t// Match the row\n\trowRegExp.lastIndex = this.parser.pos;\n\tvar rowMatch = rowRegExp.exec(this.parser.source);\n\twhile(rowMatch && rowMatch.index === this.parser.pos) {\n\t\tvar rowType = rowMatch[2];\n\t\t// Check if it is a class assignment\n\t\tif(rowType === \"k\") {\n\t\t\t$tw.utils.addClassToParseTreeNode(table,rowMatch[1]);\n\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t} else {\n\t\t\t// Otherwise, create a new row if this one is of a different type\n\t\t\tif(rowType !== currRowType) {\n\t\t\t\trowContainer = {type: \"element\", tag: rowContainerTypes[rowType], children: []};\n\t\t\t\ttable.children.push(rowContainer);\n\t\t\t\tcurrRowType = rowType;\n\t\t\t}\n\t\t\t// Is this a caption row?\n\t\t\tif(currRowType === \"c\") {\n\t\t\t\t// If so, move past the opening `|` of the row\n\t\t\t\tthis.parser.pos++;\n\t\t\t\t// Move the caption to the first row if it isn't already\n\t\t\t\tif(table.children.length !== 1) {\n\t\t\t\t\ttable.children.pop(); // Take rowContainer out of the children array\n\t\t\t\t\ttable.children.splice(0,0,rowContainer); // Insert it at the bottom\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t// Set the alignment - TODO: figure out why TW did this\n//\t\t\t\trowContainer.attributes.align = rowCount === 0 ? \"top\" : \"bottom\";\n\t\t\t\t// Parse the caption\n\t\t\t\trowContainer.children = this.parser.parseInlineRun(rowTermRegExp,{eatTerminator: true});\n\t\t\t} else {\n\t\t\t\t// Create the row\n\t\t\t\tvar theRow = {type: \"element\", tag: \"tr\", children: []};\n\t\t\t\t$tw.utils.addClassToParseTreeNode(theRow,rowCount%2 ? \"oddRow\" : \"evenRow\");\n\t\t\t\trowContainer.children.push(theRow);\n\t\t\t\t// Process the row\n\t\t\t\ttheRow.children = processRow.call(this,prevColumns);\n\t\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t\t\t// Increment the row count\n\t\t\t\trowCount++;\n\t\t\t}\n\t\t}\n\t\trowMatch = rowRegExp.exec(this.parser.source);\n\t}\n\treturn [table];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/transcludeblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/transcludeblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {},\n\t\t\tisBlock: true\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tisBlock: true,\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/transcludeinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/transcludeinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {}\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/typedblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/typedblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/typedblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for typed blocks. For example:\n\n```\n$$$.js\nThis will be rendered as JavaScript\n$$$\n\n$$$.svg\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"150\" height=\"100\">\n <circle cx=\"100\" cy=\"50\" r=\"40\" stroke=\"black\" stroke-width=\"2\" fill=\"red\" />\n</svg>\n$$$\n\n$$$text/vnd.tiddlywiki>text/html\nThis will be rendered as an //HTML representation// of WikiText\n$$$\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.name = \"typedblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\$\\$\\$([^ >\\r\\n]*)(?: *> *([^ \\r\\n]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /\\r?\\n\\$\\$\\$\\r?(?:\\n|$)/mg;\n\t// Save the type\n\tvar parseType = this.match[1],\n\t\trenderType = this.match[2];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Parse the block according to the specified type\n\tvar parser = this.parser.wiki.parseText(parseType,text,{defaultType: \"text/plain\"});\n\t// If there's no render type, just return the parse tree\n\tif(!renderType) {\n\t\treturn parser.tree;\n\t} else {\n\t\t// Otherwise, render to the rendertype and return in a <PRE> tag\n\t\tvar widgetNode = this.parser.wiki.makeWidget(parser),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\ttext = renderType === \"text/html\" ? container.innerHTML : container.textContent;\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"pre\",\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/whitespace.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/whitespace.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/whitespace.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for whitespace specifications\n\n```\n\\whitespace trim\n\\whitespace notrim\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"whitespace\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\whitespace[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\tvar self = this;\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\t$tw.utils.each(tokens,function(token) {\n\t\tswitch(token) {\n\t\t\tcase \"trim\":\n\t\t\t\tself.parser.configTrimWhiteSpace = true;\n\t\t\t\tbreak;\n\t\t\tcase \"notrim\":\n\t\t\t\tself.parser.configTrimWhiteSpace = false;\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/wikilink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/wikilink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikilink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for wiki links. For example:\n\n```\nAWikiLink\nAnotherLink\n~SuppressedLink\n```\n\nPrecede a camel case word with `~` to prevent it from being recognised as a link.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"wikilink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp($tw.config.textPrimitives.unWikiLink + \"?\" + $tw.config.textPrimitives.wikiLink,\"mg\");\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get the details of the match\n\tvar linkText = this.match[0];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// If the link starts with the unwikilink character then just output it as plain text\n\tif(linkText.substr(0,1) === $tw.config.textPrimitives.unWikiLink) {\n\t\treturn [{type: \"text\", text: linkText.substr(1)}];\n\t}\n\t// If the link has been preceded with a blocked letter then don't treat it as a link\n\tif(this.match.index > 0) {\n\t\tvar preRegExp = new RegExp($tw.config.textPrimitives.blockPrefixLetters,\"mg\");\n\t\tpreRegExp.lastIndex = this.match.index-1;\n\t\tvar preMatch = preRegExp.exec(this.parser.source);\n\t\tif(preMatch && preMatch.index === this.match.index-1) {\n\t\t\treturn [{type: \"text\", text: linkText}];\n\t\t}\n\t}\n\treturn [{\n\t\ttype: \"link\",\n\t\tattributes: {\n\t\t\tto: {type: \"string\", value: linkText}\n\t\t},\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: linkText\n\t\t}]\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/wikiparser.js": {
"title": "$:/core/modules/parsers/wikiparser/wikiparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/wikiparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe wiki text parser processes blocks of source text into a parse tree.\n\nThe parse tree is made up of nested arrays of these JavaScript objects:\n\n\t{type: \"element\", tag: <string>, attributes: {}, children: []} - an HTML element\n\t{type: \"text\", text: <string>} - a text node\n\t{type: \"entity\", value: <string>} - an entity\n\t{type: \"raw\", html: <string>} - raw HTML\n\nAttributes are stored as hashmaps of the following objects:\n\n\t{type: \"string\", value: <string>} - literal string\n\t{type: \"indirect\", textReference: <textReference>} - indirect through a text reference\n\t{type: \"macro\", macro: <TBD>} - indirect through a macro invocation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar WikiParser = function(type,text,options) {\n\tthis.wiki = options.wiki;\n\tvar self = this;\n\t// Check for an externally linked tiddler\n\tif($tw.browser && (text || \"\") === \"\" && options._canonical_uri) {\n\t\tthis.loadRemoteTiddler(options._canonical_uri);\n\t\ttext = $tw.language.getRawString(\"LazyLoadingWarning\");\n\t}\n\t// Initialise the classes if we don't have them already\n\tif(!this.pragmaRuleClasses) {\n\t\tWikiParser.prototype.pragmaRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"pragma\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.pragmaRuleClasses,\"$:/config/WikiParserRules/Pragmas/\");\n\t}\n\tif(!this.blockRuleClasses) {\n\t\tWikiParser.prototype.blockRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"block\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.blockRuleClasses,\"$:/config/WikiParserRules/Block/\");\n\t}\n\tif(!this.inlineRuleClasses) {\n\t\tWikiParser.prototype.inlineRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"inline\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.inlineRuleClasses,\"$:/config/WikiParserRules/Inline/\");\n\t}\n\t// Save the parse text\n\tthis.type = type || \"text/vnd.tiddlywiki\";\n\tthis.source = text || \"\";\n\tthis.sourceLength = this.source.length;\n\t// Flag for ignoring whitespace\n\tthis.configTrimWhiteSpace = false;\n\t// Set current parse position\n\tthis.pos = 0;\n\t// Instantiate the pragma parse rules\n\tthis.pragmaRules = this.instantiateRules(this.pragmaRuleClasses,\"pragma\",0);\n\t// Instantiate the parser block and inline rules\n\tthis.blockRules = this.instantiateRules(this.blockRuleClasses,\"block\",0);\n\tthis.inlineRules = this.instantiateRules(this.inlineRuleClasses,\"inline\",0);\n\t// Parse any pragmas\n\tthis.tree = [];\n\tvar topBranch = this.parsePragmas();\n\t// Parse the text into inline runs or blocks\n\tif(options.parseAsInline) {\n\t\ttopBranch.push.apply(topBranch,this.parseInlineRun());\n\t} else {\n\t\ttopBranch.push.apply(topBranch,this.parseBlocks());\n\t}\n\t// Return the parse tree\n};\n\n/*\n*/\nWikiParser.prototype.loadRemoteTiddler = function(url) {\n\tvar self = this;\n\t$tw.utils.httpRequest({\n\t\turl: url,\n\t\ttype: \"GET\",\n\t\tcallback: function(err,data) {\n\t\t\tif(!err) {\n\t\t\t\tvar tiddlers = self.wiki.deserializeTiddlers(\".tid\",data,self.wiki.getCreationFields());\n\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\ttiddler[\"_canonical_uri\"] = url;\n\t\t\t\t});\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tself.wiki.addTiddlers(tiddlers);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\n*/\nWikiParser.prototype.setupRules = function(proto,configPrefix) {\n\tvar self = this;\n\tif(!$tw.safemode) {\n\t\t$tw.utils.each(proto,function(object,name) {\n\t\t\tif(self.wiki.getTiddlerText(configPrefix + name,\"enable\") !== \"enable\") {\n\t\t\t\tdelete proto[name];\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nInstantiate an array of parse rules\n*/\nWikiParser.prototype.instantiateRules = function(classes,type,startPos) {\n\tvar rulesInfo = [],\n\t\tself = this;\n\t$tw.utils.each(classes,function(RuleClass) {\n\t\t// Instantiate the rule\n\t\tvar rule = new RuleClass(self);\n\t\trule.is = {};\n\t\trule.is[type] = true;\n\t\trule.init(self);\n\t\tvar matchIndex = rule.findNextMatch(startPos);\n\t\tif(matchIndex !== undefined) {\n\t\t\trulesInfo.push({\n\t\t\t\trule: rule,\n\t\t\t\tmatchIndex: matchIndex\n\t\t\t});\n\t\t}\n\t});\n\treturn rulesInfo;\n};\n\n/*\nSkip any whitespace at the current position. Options are:\n\ttreatNewlinesAsNonWhitespace: true if newlines are NOT to be treated as whitespace\n*/\nWikiParser.prototype.skipWhitespace = function(options) {\n\toptions = options || {};\n\tvar whitespaceRegExp = options.treatNewlinesAsNonWhitespace ? /([^\\S\\n]+)/mg : /(\\s+)/mg;\n\twhitespaceRegExp.lastIndex = this.pos;\n\tvar whitespaceMatch = whitespaceRegExp.exec(this.source);\n\tif(whitespaceMatch && whitespaceMatch.index === this.pos) {\n\t\tthis.pos = whitespaceRegExp.lastIndex;\n\t}\n};\n\n/*\nGet the next match out of an array of parse rule instances\n*/\nWikiParser.prototype.findNextMatch = function(rules,startPos) {\n\t// Find the best matching rule by finding the closest match position\n\tvar matchingRule,\n\t\tmatchingRulePos = this.sourceLength;\n\t// Step through each rule\n\tfor(var t=0; t<rules.length; t++) {\n\t\tvar ruleInfo = rules[t];\n\t\t// Ask the rule to get the next match if we've moved past the current one\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex < startPos) {\n\t\t\truleInfo.matchIndex = ruleInfo.rule.findNextMatch(startPos);\n\t\t}\n\t\t// Adopt this match if it's closer than the current best match\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex <= matchingRulePos) {\n\t\t\tmatchingRule = ruleInfo;\n\t\t\tmatchingRulePos = ruleInfo.matchIndex;\n\t\t}\n\t}\n\treturn matchingRule;\n};\n\n/*\nParse any pragmas at the beginning of a block of parse text\n*/\nWikiParser.prototype.parsePragmas = function() {\n\tvar currentTreeBranch = this.tree;\n\twhile(true) {\n\t\t// Skip whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check for the end of the text\n\t\tif(this.pos >= this.sourceLength) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check if we've arrived at a pragma rule match\n\t\tvar nextMatch = this.findNextMatch(this.pragmaRules,this.pos);\n\t\t// If not, just exit\n\t\tif(!nextMatch || nextMatch.matchIndex !== this.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the pragma rule\n\t\tvar subTree = nextMatch.rule.parse();\n\t\tif(subTree.length > 0) {\n\t\t\t// Quick hack; we only cope with a single parse tree node being returned, which is true at the moment\n\t\t\tcurrentTreeBranch.push.apply(currentTreeBranch,subTree);\n\t\t\tsubTree[0].children = [];\n\t\t\tcurrentTreeBranch = subTree[0].children;\n\t\t}\n\t}\n\treturn currentTreeBranch;\n};\n\n/*\nParse a block from the current position\n\tterminatorRegExpString: optional regular expression string that identifies the end of plain paragraphs. Must not include capturing parenthesis\n*/\nWikiParser.prototype.parseBlock = function(terminatorRegExpString) {\n\tvar terminatorRegExp = terminatorRegExpString ? new RegExp(\"(\" + terminatorRegExpString + \"|\\\\r?\\\\n\\\\r?\\\\n)\",\"mg\") : /(\\r?\\n\\r?\\n)/mg;\n\tthis.skipWhitespace();\n\tif(this.pos >= this.sourceLength) {\n\t\treturn [];\n\t}\n\t// Look for a block rule that applies at the current position\n\tvar nextMatch = this.findNextMatch(this.blockRules,this.pos);\n\tif(nextMatch && nextMatch.matchIndex === this.pos) {\n\t\treturn nextMatch.rule.parse();\n\t}\n\t// Treat it as a paragraph if we didn't find a block rule\n\treturn [{type: \"element\", tag: \"p\", children: this.parseInlineRun(terminatorRegExp)}];\n};\n\n/*\nParse a series of blocks of text until a terminating regexp is encountered or the end of the text\n\tterminatorRegExpString: terminating regular expression\n*/\nWikiParser.prototype.parseBlocks = function(terminatorRegExpString) {\n\tif(terminatorRegExpString) {\n\t\treturn this.parseBlocksTerminated(terminatorRegExpString);\n\t} else {\n\t\treturn this.parseBlocksUnterminated();\n\t}\n};\n\n/*\nParse a block from the current position to the end of the text\n*/\nWikiParser.prototype.parseBlocksUnterminated = function() {\n\tvar tree = [];\n\twhile(this.pos < this.sourceLength) {\n\t\ttree.push.apply(tree,this.parseBlock());\n\t}\n\treturn tree;\n};\n\n/*\nParse blocks of text until a terminating regexp is encountered\n*/\nWikiParser.prototype.parseBlocksTerminated = function(terminatorRegExpString) {\n\tvar terminatorRegExp = new RegExp(\"(\" + terminatorRegExpString + \")\",\"mg\"),\n\t\ttree = [];\n\t// Skip any whitespace\n\tthis.skipWhitespace();\n\t// Check if we've got the end marker\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar match = terminatorRegExp.exec(this.source);\n\t// Parse the text into blocks\n\twhile(this.pos < this.sourceLength && !(match && match.index === this.pos)) {\n\t\tvar blocks = this.parseBlock(terminatorRegExpString);\n\t\ttree.push.apply(tree,blocks);\n\t\t// Skip any whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check if we've got the end marker\n\t\tterminatorRegExp.lastIndex = this.pos;\n\t\tmatch = terminatorRegExp.exec(this.source);\n\t}\n\tif(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t}\n\treturn tree;\n};\n\n/*\nParse a run of text at the current position\n\tterminatorRegExp: a regexp at which to stop the run\n\toptions: see below\nOptions available:\n\teatTerminator: move the parse position past any encountered terminator (default false)\n*/\nWikiParser.prototype.parseInlineRun = function(terminatorRegExp,options) {\n\tif(terminatorRegExp) {\n\t\treturn this.parseInlineRunTerminated(terminatorRegExp,options);\n\t} else {\n\t\treturn this.parseInlineRunUnterminated(options);\n\t}\n};\n\nWikiParser.prototype.parseInlineRunUnterminated = function(options) {\n\tvar tree = [];\n\t// Find the next occurrence of an inline rule\n\tvar nextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around the matches until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && nextMatch) {\n\t\t// Process the text preceding the run rule\n\t\tif(nextMatch.matchIndex > this.pos) {\n\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,nextMatch.matchIndex));\n\t\t\tthis.pos = nextMatch.matchIndex;\n\t\t}\n\t\t// Process the run rule\n\t\ttree.push.apply(tree,nextMatch.rule.parse());\n\t\t// Look for the next run rule\n\t\tnextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\tthis.pushTextWidget(tree,this.source.substr(this.pos));\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\nWikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,options) {\n\toptions = options || {};\n\tvar tree = [];\n\t// Find the next occurrence of the terminator\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar terminatorMatch = terminatorRegExp.exec(this.source);\n\t// Find the next occurrence of a inlinerule\n\tvar inlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && (terminatorMatch || inlineRuleMatch)) {\n\t\t// Return if we've found the terminator, and it precedes any inline rule match\n\t\tif(terminatorMatch) {\n\t\t\tif(!inlineRuleMatch || inlineRuleMatch.matchIndex >= terminatorMatch.index) {\n\t\t\t\tif(terminatorMatch.index > this.pos) {\n\t\t\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,terminatorMatch.index));\n\t\t\t\t}\n\t\t\t\tthis.pos = terminatorMatch.index;\n\t\t\t\tif(options.eatTerminator) {\n\t\t\t\t\tthis.pos += terminatorMatch[0].length;\n\t\t\t\t}\n\t\t\t\treturn tree;\n\t\t\t}\n\t\t}\n\t\t// Process any inline rule, along with the text preceding it\n\t\tif(inlineRuleMatch) {\n\t\t\t// Preceding text\n\t\t\tif(inlineRuleMatch.matchIndex > this.pos) {\n\t\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,inlineRuleMatch.matchIndex));\n\t\t\t\tthis.pos = inlineRuleMatch.matchIndex;\n\t\t\t}\n\t\t\t// Process the inline rule\n\t\t\ttree.push.apply(tree,inlineRuleMatch.rule.parse());\n\t\t\t// Look for the next inline rule\n\t\t\tinlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t\t\t// Look for the next terminator match\n\t\t\tterminatorRegExp.lastIndex = this.pos;\n\t\t\tterminatorMatch = terminatorRegExp.exec(this.source);\n\t\t}\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\tthis.pushTextWidget(tree,this.source.substr(this.pos));\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\n/*\nPush a text widget onto an array, respecting the configTrimWhiteSpace setting\n*/\nWikiParser.prototype.pushTextWidget = function(array,text) {\n\tif(this.configTrimWhiteSpace) {\n\t\ttext = $tw.utils.trim(text);\n\t}\n\tif(text) {\n\t\tarray.push({type: \"text\", text: text});\t\t\n\t}\n};\n\n/*\nParse zero or more class specifiers `.classname`\n*/\nWikiParser.prototype.parseClasses = function() {\n\tvar classRegExp = /\\.([^\\s\\.]+)/mg,\n\t\tclassNames = [];\n\tclassRegExp.lastIndex = this.pos;\n\tvar match = classRegExp.exec(this.source);\n\twhile(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t\tclassNames.push(match[1]);\n\t\tmatch = classRegExp.exec(this.source);\n\t}\n\treturn classNames;\n};\n\n/*\nAmend the rules used by this instance of the parser\n\ttype: `only` keeps just the named rules, `except` keeps all but the named rules\n\tnames: array of rule names\n*/\nWikiParser.prototype.amendRules = function(type,names) {\n\tnames = names || [];\n\t// Define the filter function\n\tvar keepFilter;\n\tif(type === \"only\") {\n\t\tkeepFilter = function(name) {\n\t\t\treturn names.indexOf(name) !== -1;\n\t\t};\n\t} else if(type === \"except\") {\n\t\tkeepFilter = function(name) {\n\t\t\treturn names.indexOf(name) === -1;\n\t\t};\n\t} else {\n\t\treturn;\n\t}\n\t// Define a function to process each of our rule arrays\n\tvar processRuleArray = function(ruleArray) {\n\t\tfor(var t=ruleArray.length-1; t>=0; t--) {\n\t\t\tif(!keepFilter(ruleArray[t].rule.name)) {\n\t\t\t\truleArray.splice(t,1);\n\t\t\t}\n\t\t}\n\t};\n\t// Process each rule array\n\tprocessRuleArray(this.pragmaRules);\n\tprocessRuleArray(this.blockRules);\n\tprocessRuleArray(this.inlineRules);\n};\n\nexports[\"text/vnd.tiddlywiki\"] = WikiParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/wikiparser/rules/wikirulebase.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/wikirulebase.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikirulebase.js\ntype: application/javascript\nmodule-type: global\n\nBase class for wiki parser rules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nThis constructor is always overridden with a blank constructor, and so shouldn't be used\n*/\nvar WikiRuleBase = function() {\n};\n\n/*\nTo be overridden by individual rules\n*/\nWikiRuleBase.prototype.init = function(parser) {\n\tthis.parser = parser;\n};\n\n/*\nDefault implementation of findNextMatch uses RegExp matching\n*/\nWikiRuleBase.prototype.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\treturn this.match ? this.match.index : undefined;\n};\n\nexports.WikiRuleBase = WikiRuleBase;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/pluginswitcher.js": {
"title": "$:/core/modules/pluginswitcher.js",
"text": "/*\\\ntitle: $:/core/modules/pluginswitcher.js\ntype: application/javascript\nmodule-type: global\n\nManages switching plugins for themes and languages.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\noptions:\nwiki: wiki store to be used\npluginType: type of plugin to be switched\ncontrollerTitle: title of tiddler used to control switching of this resource\ndefaultPlugins: array of default plugins to be used if nominated plugin isn't found\nonSwitch: callback when plugin is switched (single parameter is array of plugin titles)\n*/\nfunction PluginSwitcher(options) {\n\tthis.wiki = options.wiki;\n\tthis.pluginType = options.pluginType;\n\tthis.controllerTitle = options.controllerTitle;\n\tthis.defaultPlugins = options.defaultPlugins || [];\n\tthis.onSwitch = options.onSwitch;\n\t// Switch to the current plugin\n\tthis.switchPlugins();\n\t// Listen for changes to the selected plugin\n\tvar self = this;\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,self.controllerTitle)) {\n\t\t\tself.switchPlugins();\n\t\t}\n\t});\n}\n\nPluginSwitcher.prototype.switchPlugins = function() {\n\t// Get the name of the current theme\n\tvar selectedPluginTitle = this.wiki.getTiddlerText(this.controllerTitle);\n\t// If it doesn't exist, then fallback to one of the default themes\n\tvar index = 0;\n\twhile(!this.wiki.getTiddler(selectedPluginTitle) && index < this.defaultPlugins.length) {\n\t\tselectedPluginTitle = this.defaultPlugins[index++];\n\t}\n\t// Accumulate the titles of the plugins that we need to load\n\tvar plugins = [],\n\t\tself = this,\n\t\taccumulatePlugin = function(title) {\n\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\tif(tiddler && tiddler.isPlugin() && plugins.indexOf(title) === -1) {\n\t\t\t\tplugins.push(title);\n\t\t\t\tvar pluginInfo = JSON.parse(self.wiki.getTiddlerText(title)),\n\t\t\t\t\tdependents = $tw.utils.parseStringArray(tiddler.fields.dependents || \"\");\n\t\t\t\t$tw.utils.each(dependents,function(title) {\n\t\t\t\t\taccumulatePlugin(title);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\taccumulatePlugin(selectedPluginTitle);\n\t// Unregister any existing theme tiddlers\n\tvar unregisteredTiddlers = $tw.wiki.unregisterPluginTiddlers(this.pluginType);\n\t// Register any new theme tiddlers\n\tvar registeredTiddlers = $tw.wiki.registerPluginTiddlers(this.pluginType,plugins);\n\t// Unpack the current theme tiddlers\n\t$tw.wiki.unpackPluginTiddlers();\n\t// Call the switch handler\n\tif(this.onSwitch) {\n\t\tthis.onSwitch(plugins);\n\t}\n};\n\nexports.PluginSwitcher = PluginSwitcher;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/saver-handler.js": {
"title": "$:/core/modules/saver-handler.js",
"text": "/*\\\ntitle: $:/core/modules/saver-handler.js\ntype: application/javascript\nmodule-type: global\n\nThe saver handler tracks changes to the store and handles saving the entire wiki via saver modules.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInstantiate the saver handler with the following options:\nwiki: wiki to be synced\ndirtyTracking: true if dirty tracking should be performed\n*/\nfunction SaverHandler(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\tthis.dirtyTracking = options.dirtyTracking;\n\tthis.pendingAutoSave = false;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"saver-handler\");\n\t// Initialise our savers\n\tif($tw.browser) {\n\t\tthis.initSavers();\n\t}\n\t// Only do dirty tracking if required\n\tif($tw.browser && this.dirtyTracking) {\n\t\t// Compile the dirty tiddler filter\n\t\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t\t// Count of changes that have not yet been saved\n\t\tthis.numChanges = 0;\n\t\t// Listen out for changes to tiddlers\n\t\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\t\t// Filter the changes so that we only count changes to tiddlers that we care about\n\t\t\tvar filteredChanges = self.filterFn.call(self.wiki,function(iterator) {\n\t\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\t\titerator(tiddler,title);\n\t\t\t\t});\n\t\t\t});\n\t\t\t// Adjust the number of changes\n\t\t\tself.numChanges += filteredChanges.length;\n\t\t\tself.updateDirtyStatus();\n\t\t\t// Do any autosave if one is pending and there's no more change events\n\t\t\tif(self.pendingAutoSave && self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tself.pendingAutoSave = false;\n\t\t\t}\n\t\t});\n\t\t// Listen for the autosave event\n\t\t$tw.rootWidget.addEventListener(\"tm-auto-save-wiki\",function(event) {\n\t\t\t// Do the autosave unless there are outstanding tiddler change events\n\t\t\tif(self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise put ourselves in the \"pending autosave\" state and wait for the change event before we do the autosave\n\t\t\t\tself.pendingAutoSave = true;\n\t\t\t}\n\t\t});\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t}\n\t// Install the save action handlers\n\tif($tw.browser) {\n\t\t$tw.rootWidget.addEventListener(\"tm-save-wiki\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-download-file\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\tmethod: \"download\",\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t}\n}\n\nSaverHandler.prototype.titleSyncFilter = \"$:/config/SaverFilter\";\nSaverHandler.prototype.titleAutoSave = \"$:/config/AutoSave\";\nSaverHandler.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\n\n/*\nSelect the appropriate saver modules and set them up\n*/\nSaverHandler.prototype.initSavers = function(moduleType) {\n\tmoduleType = moduleType || \"saver\";\n\t// Instantiate the available savers\n\tthis.savers = [];\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tif(module.canSave(self)) {\n\t\t\tself.savers.push(module.create(self.wiki));\n\t\t}\n\t});\n\t// Sort the savers into priority order\n\tthis.savers.sort(function(a,b) {\n\t\tif(a.info.priority < b.info.priority) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(a.info.priority > b.info.priority) {\n\t\t\t\treturn +1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nSave the wiki contents. Options are:\n\tmethod: \"save\", \"autosave\" or \"download\"\n\ttemplate: the tiddler containing the template to save\n\tdownloadType: the content type for the saved file\n*/\nSaverHandler.prototype.saveWiki = function(options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tmethod = options.method || \"save\",\n\t\tvariables = options.variables || {},\n\t\ttemplate = options.template || \"$:/core/save/all\",\n\t\tdownloadType = options.downloadType || \"text/plain\",\n\t\ttext = this.wiki.renderTiddler(downloadType,template,options),\n\t\tcallback = function(err) {\n\t\t\tif(err) {\n\t\t\t\talert($tw.language.getString(\"Error/WhileSaving\") + \":\\n\\n\" + err);\n\t\t\t} else {\n\t\t\t\t// Clear the task queue if we're saving (rather than downloading)\n\t\t\t\tif(method !== \"download\") {\n\t\t\t\t\tself.numChanges = 0;\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t}\n\t\t\t\t$tw.notifier.display(self.titleSavedNotification);\n\t\t\t\tif(options.callback) {\n\t\t\t\t\toptions.callback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t// Ignore autosave if disabled\n\tif(method === \"autosave\" && this.wiki.getTiddlerText(this.titleAutoSave,\"yes\") !== \"yes\") {\n\t\treturn false;\n\t}\n\t// Call the highest priority saver that supports this method\n\tfor(var t=this.savers.length-1; t>=0; t--) {\n\t\tvar saver = this.savers[t];\n\t\tif(saver.info.capabilities.indexOf(method) !== -1 && saver.save(text,method,callback,{variables: {filename: variables.filename}})) {\n\t\t\tthis.logger.log(\"Saving wiki with method\",method,\"through saver\",saver.info.name);\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSaverHandler.prototype.isDirty = function() {\n\treturn this.numChanges > 0;\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSaverHandler.prototype.updateDirtyStatus = function() {\n\tif($tw.browser) {\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",this.isDirty());\n\t}\n};\n\nexports.SaverHandler = SaverHandler;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/savers/andtidwiki.js": {
"title": "$:/core/modules/savers/andtidwiki.js",
"text": "/*\\\ntitle: $:/core/modules/savers/andtidwiki.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the AndTidWiki Android app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar AndTidWiki = function(wiki) {\n};\n\nAndTidWiki.prototype.save = function(text,method,callback) {\n\t// Get the pathname of this document\n\tvar pathname = decodeURIComponent(document.location.toString().split(\"#\")[0]);\n\t// Strip the file://\n\tif(pathname.indexOf(\"file://\") === 0) {\n\t\tpathname = pathname.substr(7);\n\t}\n\t// Strip any query or location part\n\tvar p = pathname.indexOf(\"?\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\tp = pathname.indexOf(\"#\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\t// Save the file\n\twindow.twi.saveFile(pathname,text);\n\t// Call the callback\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nAndTidWiki.prototype.info = {\n\tname: \"andtidwiki\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.twi && !!window.twi.saveFile;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new AndTidWiki(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/beaker.js": {
"title": "$:/core/modules/savers/beaker.js",
"text": "/*\\\ntitle: $:/core/modules/savers/beaker.js\ntype: application/javascript\nmodule-type: saver\n\nSaves files using the Beaker browser's (https://beakerbrowser.com) Dat protocol (https://datproject.org/)\nCompatible with beaker >= V0.7.2\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet up the saver\n*/\nvar BeakerSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nBeakerSaver.prototype.save = function(text,method,callback) {\n\tvar dat = new DatArchive(\"\" + window.location),\n\t\tpathname = (\"\" + window.location.pathname).split(\"#\")[0];\n\tdat.stat(pathname).then(function(value) {\n\t\tif(value.isDirectory()) {\n\t\t\tpathname = pathname + \"/index.html\";\n\t\t}\n\t\tdat.writeFile(pathname,text,\"utf8\").then(function(value) {\n\t\t\tcallback(null);\n\t\t},function(reason) {\n\t\t\tcallback(\"Beaker Saver Write Error: \" + reason);\n\t\t});\n\t},function(reason) {\n\t\tcallback(\"Beaker Saver Stat Error: \" + reason);\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nBeakerSaver.prototype.info = {\n\tname: \"beaker\",\n\tpriority: 3000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.DatArchive;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new BeakerSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/download.js": {
"title": "$:/core/modules/savers/download.js",
"text": "/*\\\ntitle: $:/core/modules/savers/download.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar DownloadSaver = function(wiki) {\n};\n\nDownloadSaver.prototype.save = function(text,method,callback,options) {\n\toptions = options || {};\n\t// Get the current filename\n\tvar filename = options.variables.filename;\n\tif(!filename) {\n\t\tvar p = document.location.pathname.lastIndexOf(\"/\");\n\t\tif(p !== -1) {\n\t\t\t// We decode the pathname because document.location is URL encoded by the browser\n\t\t\tfilename = decodeURIComponent(document.location.pathname.substr(p+1));\n\t\t}\n\t}\n\tif(!filename) {\n\t\tfilename = \"tiddlywiki.html\";\n\t}\n\t// Set up the link\n\tvar link = document.createElement(\"a\");\n\tif(Blob !== undefined) {\n\t\tvar blob = new Blob([text], {type: \"text/html\"});\n\t\tlink.setAttribute(\"href\", URL.createObjectURL(blob));\n\t} else {\n\t\tlink.setAttribute(\"href\",\"data:text/html,\" + encodeURIComponent(text));\n\t}\n\tlink.setAttribute(\"download\",filename);\n\tdocument.body.appendChild(link);\n\tlink.click();\n\tdocument.body.removeChild(link);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nDownloadSaver.prototype.info = {\n\tname: \"download\",\n\tpriority: 100\n};\n\nObject.defineProperty(DownloadSaver.prototype.info, \"capabilities\", {\n\tget: function() {\n\t\tvar capabilities = [\"save\", \"download\"];\n\t\tif(($tw.wiki.getTextReference(\"$:/config/DownloadSaver/AutoSave\") || \"\").toLowerCase() === \"yes\") {\n\t\t\tcapabilities.push(\"autosave\");\n\t\t}\n\t\treturn capabilities;\n\t}\n});\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn document.createElement(\"a\").download !== undefined;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new DownloadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/fsosaver.js": {
"title": "$:/core/modules/savers/fsosaver.js",
"text": "/*\\\ntitle: $:/core/modules/savers/fsosaver.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via MS FileSystemObject ActiveXObject\n\nNote: Since TiddlyWiki's markup contains the MOTW, the FileSystemObject normally won't be available. \nHowever, if the wiki is loaded as an .HTA file (Windows HTML Applications) then the FSO can be used.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar FSOSaver = function(wiki) {\n};\n\nFSOSaver.prototype.save = function(text,method,callback) {\n\t// Get the pathname of this document\n\tvar pathname = unescape(document.location.pathname);\n\t// Test for a Windows path of the form /x:\\blah...\n\tif(/^\\/[A-Z]\\:\\\\[^\\\\]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t} else if(document.location.hostname !== \"\" && /^\\/\\\\[^\\\\]+\\\\[^\\\\]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t\t// reconstruct UNC path\n\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t} else {\n\t\treturn false;\n\t}\n\t// Save the file (as UTF-16)\n\tvar fso = new ActiveXObject(\"Scripting.FileSystemObject\");\n\tvar file = fso.OpenTextFile(pathname,2,-1,-1);\n\tfile.Write(text);\n\tfile.Close();\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nFSOSaver.prototype.info = {\n\tname: \"FSOSaver\",\n\tpriority: 120,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\ttry {\n\t\treturn (window.location.protocol === \"file:\") && !!(new ActiveXObject(\"Scripting.FileSystemObject\"));\n\t} catch(e) { return false; }\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new FSOSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/manualdownload.js": {
"title": "$:/core/modules/savers/manualdownload.js",
"text": "/*\\\ntitle: $:/core/modules/savers/manualdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Title of the tiddler containing the download message\nvar downloadInstructionsTitle = \"$:/language/Modals/Download\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar ManualDownloadSaver = function(wiki) {\n};\n\nManualDownloadSaver.prototype.save = function(text,method,callback) {\n\t$tw.modal.display(downloadInstructionsTitle,{\n\t\tdownloadLink: \"data:text/html,\" + encodeURIComponent(text)\n\t});\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nManualDownloadSaver.prototype.info = {\n\tname: \"manualdownload\",\n\tpriority: 0,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new ManualDownloadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/msdownload.js": {
"title": "$:/core/modules/savers/msdownload.js",
"text": "/*\\\ntitle: $:/core/modules/savers/msdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via window.navigator.msSaveBlob()\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar MsDownloadSaver = function(wiki) {\n};\n\nMsDownloadSaver.prototype.save = function(text,method,callback) {\n\t// Get the current filename\n\tvar filename = \"tiddlywiki.html\",\n\t\tp = document.location.pathname.lastIndexOf(\"/\");\n\tif(p !== -1) {\n\t\tfilename = document.location.pathname.substr(p+1);\n\t}\n\t// Set up the link\n\tvar blob = new Blob([text], {type: \"text/html\"});\n\twindow.navigator.msSaveBlob(blob,filename);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nMsDownloadSaver.prototype.info = {\n\tname: \"msdownload\",\n\tpriority: 110,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.navigator.msSaveBlob;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new MsDownloadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/put.js": {
"title": "$:/core/modules/savers/put.js",
"text": "/*\\\ntitle: $:/core/modules/savers/put.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by performing a PUT request to the server\n\nWorks with any server which accepts a PUT request\nto the current URL, such as a WebDAV server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar PutSaver = function(wiki) {\n\tthis.wiki = wiki;\n\tvar self = this;\n\tvar uri = this.uri();\n\t// Async server probe. Until probe finishes, save will fail fast\n\t// See also https://github.com/Jermolene/TiddlyWiki5/issues/2276\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"OPTIONS\",\n\t\tcallback: function(err, data, xhr) {\n\t\t\t// Check DAV header http://www.webdav.org/specs/rfc2518.html#rfc.section.9.1\n\t\t\tif(!err) {\n\t\t\t\tself.serverAcceptsPuts = xhr.status === 200 && !!xhr.getResponseHeader(\"dav\");\n\t\t\t}\n\t\t}\n\t});\n\t// Retrieve ETag if available\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"HEAD\",\n\t\tcallback: function(err, data, xhr) {\n\t\t\tif(!err) {\n\t\t\t\tself.etag = xhr.getResponseHeader(\"ETag\");\n\t\t\t}\n\t\t}\n\t});\n};\n\nPutSaver.prototype.uri = function() {\n\treturn document.location.toString().split(\"#\")[0];\n};\n\n// TODO: in case of edit conflict\n// Prompt: Do you want to save over this? Y/N\n// Merging would be ideal, and may be possible using future generic merge flow\nPutSaver.prototype.save = function(text, method, callback) {\n\tif(!this.serverAcceptsPuts) {\n\t\treturn false;\n\t}\n\tvar self = this;\n\tvar headers = { \"Content-Type\": \"text/html;charset=UTF-8\" };\n\tif(this.etag) {\n\t\theaders[\"If-Match\"] = this.etag;\n\t}\n\t$tw.utils.httpRequest({\n\t\turl: this.uri(),\n\t\ttype: \"PUT\",\n\t\theaders: headers,\n\t\tdata: text,\n\t\tcallback: function(err, data, xhr) {\n\t\t\tif(err) {\n\t\t\t\tcallback(err);\n\t\t\t} if(xhr.status === 200 || xhr.status === 201) {\n\t\t\t\tself.etag = xhr.getResponseHeader(\"ETag\");\n\t\t\t\tcallback(null); // success\n\t\t\t} else if(xhr.status === 412) { // edit conflict\n\t\t\t\tvar message = $tw.language.getString(\"Error/EditConflict\");\n\t\t\t\tcallback(message);\n\t\t\t} else {\n\t\t\t\tcallback(xhr.responseText); // fail\n\t\t\t}\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nPutSaver.prototype.info = {\n\tname: \"put\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn /^https?:/.test(location.protocol);\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new PutSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/tiddlyfox.js": {
"title": "$:/core/modules/savers/tiddlyfox.js",
"text": "/*\\\ntitle: $:/core/modules/savers/tiddlyfox.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TiddlyFox file extension\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TiddlyFoxSaver = function(wiki) {\n};\n\nTiddlyFoxSaver.prototype.save = function(text,method,callback) {\n\tvar messageBox = document.getElementById(\"tiddlyfox-message-box\");\n\tif(messageBox) {\n\t\t// Get the pathname of this document\n\t\tvar pathname = document.location.toString().split(\"#\")[0];\n\t\t// Replace file://localhost/ with file:///\n\t\tif(pathname.indexOf(\"file://localhost/\") === 0) {\n\t\t\tpathname = \"file://\" + pathname.substr(16);\n\t\t}\n\t\t// Windows path file:///x:/blah/blah --> x:\\blah\\blah\n\t\tif(/^file\\:\\/\\/\\/[A-Z]\\:\\//i.test(pathname)) {\n\t\t\t// Remove the leading slash and convert slashes to backslashes\n\t\t\tpathname = pathname.substr(8).replace(/\\//g,\"\\\\\");\n\t\t// Firefox Windows network path file://///server/share/blah/blah --> //server/share/blah/blah\n\t\t} else if(pathname.indexOf(\"file://///\") === 0) {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(10)).replace(/\\//g,\"\\\\\");\n\t\t// Mac/Unix local path file:///path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:///\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(7));\n\t\t// Mac/Unix local path file:/path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:/\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(5));\n\t\t// Otherwise Windows networth path file://server/share/path/path --> \\\\server\\share\\path\\path\n\t\t} else {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(7)).replace(new RegExp(\"/\",\"g\"),\"\\\\\");\n\t\t}\n\t\t// Create the message element and put it in the message box\n\t\tvar message = document.createElement(\"div\");\n\t\tmessage.setAttribute(\"data-tiddlyfox-path\",decodeURIComponent(pathname));\n\t\tmessage.setAttribute(\"data-tiddlyfox-content\",text);\n\t\tmessageBox.appendChild(message);\n\t\t// Add an event handler for when the file has been saved\n\t\tmessage.addEventListener(\"tiddlyfox-have-saved-file\",function(event) {\n\t\t\tcallback(null);\n\t\t}, false);\n\t\t// Create and dispatch the custom event to the extension\n\t\tvar event = document.createEvent(\"Events\");\n\t\tevent.initEvent(\"tiddlyfox-save-file\",true,false);\n\t\tmessage.dispatchEvent(event);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyFoxSaver.prototype.info = {\n\tname: \"tiddlyfox\",\n\tpriority: 1500,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyFoxSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/tiddlyie.js": {
"title": "$:/core/modules/savers/tiddlyie.js",
"text": "/*\\\ntitle: $:/core/modules/savers/tiddlyie.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via Internet Explorer BHO extenion (TiddlyIE)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar TiddlyIESaver = function(wiki) {\n};\n\nTiddlyIESaver.prototype.save = function(text,method,callback) {\n\t// Check existence of TiddlyIE BHO extension (note: only works after document is complete)\n\tif(typeof(window.TiddlyIE) != \"undefined\") {\n\t\t// Get the pathname of this document\n\t\tvar pathname = unescape(document.location.pathname);\n\t\t// Test for a Windows path of the form /x:/blah...\n\t\tif(/^\\/[A-Z]\\:\\/[^\\/]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+ (is this better?: ^/[a-z]:/[^/]+(/[^/]+)*\\.[^/]+ )\n\t\t\t// Remove the leading slash\n\t\t\tpathname = pathname.substr(1);\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t} else if(document.hostname !== \"\" && /^\\/[^\\/]+\\/[^\\/]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t\t// reconstruct UNC path\n\t\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t\t} else return false;\n\t\t// Prompt the user to save the file\n\t\twindow.TiddlyIE.save(pathname, text);\n\t\t// Callback that we succeeded\n\t\tcallback(null);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyIESaver.prototype.info = {\n\tname: \"tiddlyiesaver\",\n\tpriority: 1500,\n\tcapabilities: [\"save\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn (window.location.protocol === \"file:\");\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyIESaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/twedit.js": {
"title": "$:/core/modules/savers/twedit.js",
"text": "/*\\\ntitle: $:/core/modules/savers/twedit.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TWEdit iOS app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TWEditSaver = function(wiki) {\n};\n\nTWEditSaver.prototype.save = function(text,method,callback) {\n\t// Bail if we're not running under TWEdit\n\tif(typeof DeviceInfo !== \"object\") {\n\t\treturn false;\n\t}\n\t// Get the pathname of this document\n\tvar pathname = decodeURIComponent(document.location.pathname);\n\t// Strip any query or location part\n\tvar p = pathname.indexOf(\"?\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\tp = pathname.indexOf(\"#\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\t// Remove the leading \"/Documents\" from path\n\tvar prefix = \"/Documents\";\n\tif(pathname.indexOf(prefix) === 0) {\n\t\tpathname = pathname.substr(prefix.length);\n\t}\n\t// Error handler\n\tvar errorHandler = function(event) {\n\t\t// Error\n\t\tcallback($tw.language.getString(\"Error/SavingToTWEdit\") + \": \" + event.target.error.code);\n\t};\n\t// Get the file system\n\twindow.requestFileSystem(LocalFileSystem.PERSISTENT,0,function(fileSystem) {\n\t\t// Now we've got the filesystem, get the fileEntry\n\t\tfileSystem.root.getFile(pathname, {create: true}, function(fileEntry) {\n\t\t\t// Now we've got the fileEntry, create the writer\n\t\t\tfileEntry.createWriter(function(writer) {\n\t\t\t\twriter.onerror = errorHandler;\n\t\t\t\twriter.onwrite = function() {\n\t\t\t\t\tcallback(null);\n\t\t\t\t};\n\t\t\t\twriter.position = 0;\n\t\t\t\twriter.write(text);\n\t\t\t},errorHandler);\n\t\t}, errorHandler);\n\t}, errorHandler);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nTWEditSaver.prototype.info = {\n\tname: \"twedit\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TWEditSaver(wiki);\n};\n\n/////////////////////////// Hack\n// HACK: This ensures that TWEdit recognises us as a TiddlyWiki document\nif($tw.browser) {\n\twindow.version = {title: \"TiddlyWiki\"};\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/upload.js": {
"title": "$:/core/modules/savers/upload.js",
"text": "/*\\\ntitle: $:/core/modules/savers/upload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via upload to a server.\n\nDesigned to be compatible with BidiX's UploadPlugin at http://tiddlywiki.bidix.info/#UploadPlugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar UploadSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nUploadSaver.prototype.save = function(text,method,callback) {\n\t// Get the various parameters we need\n\tvar backupDir = this.wiki.getTextReference(\"$:/UploadBackupDir\") || \".\",\n\t\tusername = this.wiki.getTextReference(\"$:/UploadName\"),\n\t\tpassword = $tw.utils.getPassword(\"upload\"),\n\t\tuploadDir = this.wiki.getTextReference(\"$:/UploadDir\") || \".\",\n\t\tuploadFilename = this.wiki.getTextReference(\"$:/UploadFilename\") || \"index.html\",\n\t\turl = this.wiki.getTextReference(\"$:/UploadURL\");\n\t// Bail out if we don't have the bits we need\n\tif(!username || username.toString().trim() === \"\" || !password || password.toString().trim() === \"\") {\n\t\treturn false;\n\t}\n\t// Construct the url if not provided\n\tif(!url) {\n\t\turl = \"http://\" + username + \".tiddlyspot.com/store.cgi\";\n\t}\n\t// Assemble the header\n\tvar boundary = \"---------------------------\" + \"AaB03x\";\t\n\tvar uploadFormName = \"UploadPlugin\";\n\tvar head = [];\n\thead.push(\"--\" + boundary + \"\\r\\nContent-disposition: form-data; name=\\\"UploadPlugin\\\"\\r\\n\");\n\thead.push(\"backupDir=\" + backupDir + \";user=\" + username + \";password=\" + password + \";uploaddir=\" + uploadDir + \";;\"); \n\thead.push(\"\\r\\n\" + \"--\" + boundary);\n\thead.push(\"Content-disposition: form-data; name=\\\"userfile\\\"; filename=\\\"\" + uploadFilename + \"\\\"\");\n\thead.push(\"Content-Type: text/html;charset=UTF-8\");\n\thead.push(\"Content-Length: \" + text.length + \"\\r\\n\");\n\thead.push(\"\");\n\t// Assemble the tail and the data itself\n\tvar tail = \"\\r\\n--\" + boundary + \"--\\r\\n\",\n\t\tdata = head.join(\"\\r\\n\") + text + tail;\n\t// Do the HTTP post\n\tvar http = new XMLHttpRequest();\n\thttp.open(\"POST\",url,true,username,password);\n\thttp.setRequestHeader(\"Content-Type\",\"multipart/form-data; charset=UTF-8; boundary=\" + boundary);\n\thttp.onreadystatechange = function() {\n\t\tif(http.readyState == 4 && http.status == 200) {\n\t\t\tif(http.responseText.substr(0,4) === \"0 - \") {\n\t\t\t\tcallback(null);\n\t\t\t} else {\n\t\t\t\tcallback(http.responseText);\n\t\t\t}\n\t\t}\n\t};\n\ttry {\n\t\thttp.send(data);\n\t} catch(ex) {\n\t\treturn callback($tw.language.getString(\"Error/Caption\") + \":\" + ex);\n\t}\n\t$tw.notifier.display(\"$:/language/Notifications/Save/Starting\");\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nUploadSaver.prototype.info = {\n\tname: \"upload\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new UploadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/browser-messaging.js": {
"title": "$:/core/modules/browser-messaging.js",
"text": "/*\\\ntitle: $:/core/modules/browser-messaging.js\ntype: application/javascript\nmodule-type: startup\n\nBrowser message handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"browser-messaging\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n/*\nLoad a specified url as an iframe and call the callback when it is loaded. If the url is already loaded then the existing iframe instance is used\n*/\nfunction loadIFrame(url,callback) {\n\t// Check if iframe already exists\n\tvar iframeInfo = $tw.browserMessaging.iframeInfoMap[url];\n\tif(iframeInfo) {\n\t\t// We've already got the iframe\n\t\tcallback(null,iframeInfo);\n\t} else {\n\t\t// Create the iframe and save it in the list\n\t\tvar iframe = document.createElement(\"iframe\");\n\t\tiframeInfo = {\n\t\t\turl: url,\n\t\t\tstatus: \"loading\",\n\t\t\tdomNode: iframe\n\t\t};\n\t\t$tw.browserMessaging.iframeInfoMap[url] = iframeInfo;\n\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t// Add the iframe to the DOM and hide it\n\t\tiframe.style.display = \"none\";\n\t\tiframe.setAttribute(\"library\",\"true\");\n\t\tdocument.body.appendChild(iframe);\n\t\t// Set up onload\n\t\tiframe.onload = function() {\n\t\t\tiframeInfo.status = \"loaded\";\n\t\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t\tcallback(null,iframeInfo);\n\t\t};\n\t\tiframe.onerror = function() {\n\t\t\tcallback(\"Cannot load iframe\");\n\t\t};\n\t\ttry {\n\t\t\tiframe.src = url;\n\t\t} catch(ex) {\n\t\t\tcallback(ex);\n\t\t}\n\t}\n}\n\n/*\nUnload library iframe for given url\n*/\nfunction unloadIFrame(url){\n\t$tw.utils.each(document.getElementsByTagName('iframe'), function(iframe) {\n\t\tif(iframe.getAttribute(\"library\") === \"true\" &&\n\t\t iframe.getAttribute(\"src\") === url) {\n\t\t\tiframe.parentNode.removeChild(iframe);\n\t\t}\n\t});\n}\n\nfunction saveIFrameInfoTiddler(iframeInfo) {\n\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),{\n\t\ttitle: \"$:/temp/ServerConnection/\" + iframeInfo.url,\n\t\ttext: iframeInfo.status,\n\t\ttags: [\"$:/tags/ServerConnection\"],\n\t\turl: iframeInfo.url\n\t},$tw.wiki.getModificationFields()));\n}\n\nexports.startup = function() {\n\t// Initialise the store of iframes we've created\n\t$tw.browserMessaging = {\n\t\tiframeInfoMap: {} // Hashmap by URL of {url:,status:\"loading/loaded\",domNode:}\n\t};\n\t// Listen for widget messages to control loading the plugin library\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url;\n\t\tif(url) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers.json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-info\",\n\t\t\t\t\t\t\tinfoTitlePrefix: paramObject.infoTitlePrefix || \"$:/temp/RemoteAssetInfo/\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Listen for widget messages to control unloading the plugin library\n\t$tw.rootWidget.addEventListener(\"tm-unload-plugin-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url;\n\t\t$tw.browserMessaging.iframeInfoMap[url] = undefined;\n\t\tif(url) {\n\t\t\tunloadIFrame(url);\n\t\t\t$tw.utils.each(\n\t\t\t\t$tw.wiki.filterTiddlers(\"[[$:/temp/ServerConnection/\" + url + \"]] [prefix[$:/temp/RemoteAssetInfo/\" + url + \"/]]\"),\n\t\t\t\tfunction(title) {\n\t\t\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-from-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url,\n\t\t\ttitle = paramObject.title;\n\t\tif(url && title) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers/\" + encodeURIComponent(title) + \".json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-tiddler\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Listen for window messages from other windows\n\twindow.addEventListener(\"message\",function listener(event){\n\t\tconsole.log(\"browser-messaging: \",document.location.toString())\n\t\tconsole.log(\"browser-messaging: Received message from\",event.origin);\n\t\tconsole.log(\"browser-messaging: Message content\",event.data);\n\t\tswitch(event.data.verb) {\n\t\t\tcase \"GET-RESPONSE\":\n\t\t\t\tif(event.data.status.charAt(0) === \"2\") {\n\t\t\t\t\tif(event.data.cookies) {\n\t\t\t\t\t\tif(event.data.cookies.type === \"save-info\") {\n\t\t\t\t\t\t\tvar tiddlers = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\t\t\t\t\ttitle: event.data.cookies.infoTitlePrefix + event.data.cookies.url + \"/\" + tiddler.title,\n\t\t\t\t\t\t\t\t\t\"original-title\": tiddler.title,\n\t\t\t\t\t\t\t\t\ttext: \"\",\n\t\t\t\t\t\t\t\t\ttype: \"text/vnd.tiddlywiki\",\n\t\t\t\t\t\t\t\t\t\"original-type\": tiddler.type,\n\t\t\t\t\t\t\t\t\t\"plugin-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-plugin-type\": tiddler[\"plugin-type\"],\n\t\t\t\t\t\t\t\t\t\"module-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-module-type\": tiddler[\"module-type\"],\n\t\t\t\t\t\t\t\t\ttags: [\"$:/tags/RemoteAssetInfo\"],\n\t\t\t\t\t\t\t\t\t\"original-tags\": $tw.utils.stringifyList(tiddler.tags || []),\n\t\t\t\t\t\t\t\t\t\"server-url\": event.data.cookies.url\n\t\t\t\t\t\t\t\t},$tw.wiki.getModificationFields()));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else if(event.data.cookies.type === \"save-tiddler\") {\n\t\t\t\t\t\t\tvar tiddler = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t},false);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/commands.js": {
"title": "$:/core/modules/startup/commands.js",
"text": "/*\\\ntitle: $:/core/modules/startup/commands.js\ntype: application/javascript\nmodule-type: startup\n\nCommand processing\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"commands\";\nexports.platforms = [\"node\"];\nexports.after = [\"story\"];\nexports.synchronous = false;\n\nexports.startup = function(callback) {\n\t// On the server, start a commander with the command line arguments\n\tvar commander = new $tw.Commander(\n\t\t$tw.boot.argv,\n\t\tfunction(err) {\n\t\t\tif(err) {\n\t\t\t\treturn $tw.utils.error(\"Error: \" + err);\n\t\t\t}\n\t\t\tcallback();\n\t\t},\n\t\t$tw.wiki,\n\t\t{output: process.stdout, error: process.stderr}\n\t);\n\tcommander.execute();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/favicon.js": {
"title": "$:/core/modules/startup/favicon.js",
"text": "/*\\\ntitle: $:/core/modules/startup/favicon.js\ntype: application/javascript\nmodule-type: startup\n\nFavicon handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"favicon\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\t\t\n// Favicon tiddler\nvar FAVICON_TITLE = \"$:/favicon.ico\";\n\nexports.startup = function() {\n\t// Set up the favicon\n\tsetFavicon();\n\t// Reset the favicon when the tiddler changes\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,FAVICON_TITLE)) {\n\t\t\tsetFavicon();\n\t\t}\n\t});\n};\n\nfunction setFavicon() {\n\tvar tiddler = $tw.wiki.getTiddler(FAVICON_TITLE);\n\tif(tiddler) {\n\t\tvar faviconLink = document.getElementById(\"faviconLink\");\n\t\tfaviconLink.setAttribute(\"href\",\"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text);\n\t}\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/info.js": {
"title": "$:/core/modules/startup/info.js",
"text": "/*\\\ntitle: $:/core/modules/startup/info.js\ntype: application/javascript\nmodule-type: startup\n\nInitialise $:/info tiddlers via $:/temp/info-plugin pseudo-plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"info\";\nexports.before = [\"startup\"];\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Collect up the info tiddlers\n\tvar infoTiddlerFields = {};\n\t// Give each info module a chance to fill in as many info tiddlers as they want\n\t$tw.modules.forEachModuleOfType(\"info\",function(title,moduleExports) {\n\t\tif(moduleExports && moduleExports.getInfoTiddlerFields) {\n\t\t\tvar tiddlerFieldsArray = moduleExports.getInfoTiddlerFields(infoTiddlerFields);\n\t\t\t$tw.utils.each(tiddlerFieldsArray,function(fields) {\n\t\t\t\tif(fields) {\n\t\t\t\t\tinfoTiddlerFields[fields.title] = fields;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Bake the info tiddlers into a plugin\n\tvar fields = {\n\t\ttitle: \"$:/temp/info-plugin\",\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"info\",\n\t\ttext: JSON.stringify({tiddlers: infoTiddlerFields},null,$tw.config.preferences.jsonSpaces)\n\t};\n\t$tw.wiki.addTiddler(new $tw.Tiddler(fields));\n\t$tw.wiki.readPluginInfo();\n\t$tw.wiki.registerPluginTiddlers(\"info\");\n\t$tw.wiki.unpackPluginTiddlers();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/load-modules.js": {
"title": "$:/core/modules/startup/load-modules.js",
"text": "/*\\\ntitle: $:/core/modules/startup/load-modules.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"load-modules\";\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Load modules\n\t$tw.modules.applyMethods(\"utils\",$tw.utils);\n\tif($tw.node) {\n\t\t$tw.modules.applyMethods(\"utils-node\",$tw.utils);\n\t}\n\t$tw.modules.applyMethods(\"global\",$tw);\n\t$tw.modules.applyMethods(\"config\",$tw.config);\n\t$tw.Tiddler.fieldModules = $tw.modules.getModulesByTypeAsHashmap(\"tiddlerfield\");\n\t$tw.modules.applyMethods(\"tiddlermethod\",$tw.Tiddler.prototype);\n\t$tw.modules.applyMethods(\"wikimethod\",$tw.Wiki.prototype);\n\t$tw.modules.applyMethods(\"tiddlerdeserializer\",$tw.Wiki.tiddlerDeserializerModules);\n\t$tw.macros = $tw.modules.getModulesByTypeAsHashmap(\"macro\");\n\t$tw.wiki.initParsers();\n\t$tw.Commander.initCommands();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/password.js": {
"title": "$:/core/modules/startup/password.js",
"text": "/*\\\ntitle: $:/core/modules/startup/password.js\ntype: application/javascript\nmodule-type: startup\n\nPassword handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"password\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t$tw.rootWidget.addEventListener(\"tm-set-password\",function(event) {\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: $tw.language.getString(\"Encryption/PromptSetPassword\"),\n\t\t\tnoUserName: true,\n\t\t\tsubmitText: $tw.language.getString(\"Encryption/SetPassword\"),\n\t\t\tcanCancel: true,\n\t\t\trepeatPassword: true,\n\t\t\tcallback: function(data) {\n\t\t\t\tif(data) {\n\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t}\n\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t}\n\t\t});\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-clear-password\",function(event) {\n\t\tif($tw.browser) {\n\t\t\tif(!confirm($tw.language.getString(\"Encryption/ConfirmClearPassword\"))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t$tw.crypto.setPassword(null);\n\t});\n\t// Ensure that $:/isEncrypted is maintained properly\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,\"$:/isEncrypted\")) {\n\t\t\t$tw.crypto.updateCryptoStateTiddler();\n\t\t}\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/render.js": {
"title": "$:/core/modules/startup/render.js",
"text": "/*\\\ntitle: $:/core/modules/startup/render.js\ntype: application/javascript\nmodule-type: startup\n\nTitle, stylesheet and page rendering\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"render\";\nexports.platforms = [\"browser\"];\nexports.after = [\"story\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar PAGE_TITLE_TITLE = \"$:/core/wiki/title\";\nvar PAGE_STYLESHEET_TITLE = \"$:/core/ui/PageStylesheet\";\nvar PAGE_TEMPLATE_TITLE = \"$:/core/ui/PageTemplate\";\n\n// Time (in ms) that we defer refreshing changes to draft tiddlers\nvar DRAFT_TIDDLER_TIMEOUT_TITLE = \"$:/config/Drafts/TypingTimeout\";\nvar DRAFT_TIDDLER_TIMEOUT = 400;\n\nexports.startup = function() {\n\t// Set up the title\n\t$tw.titleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TITLE_TITLE,{document: $tw.fakeDocument, parseAsInline: true});\n\t$tw.titleContainer = $tw.fakeDocument.createElement(\"div\");\n\t$tw.titleWidgetNode.render($tw.titleContainer,null);\n\tdocument.title = $tw.titleContainer.textContent;\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.titleWidgetNode.refresh(changes,$tw.titleContainer,null)) {\n\t\t\tdocument.title = $tw.titleContainer.textContent;\n\t\t}\n\t});\n\t// Set up the styles\n\t$tw.styleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_STYLESHEET_TITLE,{document: $tw.fakeDocument});\n\t$tw.styleContainer = $tw.fakeDocument.createElement(\"style\");\n\t$tw.styleWidgetNode.render($tw.styleContainer,null);\n\t$tw.styleElement = document.createElement(\"style\");\n\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\tdocument.head.insertBefore($tw.styleElement,document.head.firstChild);\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"styleRefresh\",function(changes) {\n\t\tif($tw.styleWidgetNode.refresh(changes,$tw.styleContainer,null)) {\n\t\t\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\t\t}\n\t}));\n\t// Display the $:/core/ui/PageTemplate tiddler to kick off the display\n\t$tw.perf.report(\"mainRender\",function() {\n\t\t$tw.pageWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TEMPLATE_TITLE,{document: document, parentWidget: $tw.rootWidget});\n\t\t$tw.pageContainer = document.createElement(\"div\");\n\t\t$tw.utils.addClass($tw.pageContainer,\"tc-page-container-wrapper\");\n\t\tdocument.body.insertBefore($tw.pageContainer,document.body.firstChild);\n\t\t$tw.pageWidgetNode.render($tw.pageContainer,null);\n\t})();\n\t// Prepare refresh mechanism\n\tvar deferredChanges = Object.create(null),\n\t\ttimerId;\n\tfunction refresh() {\n\t\t// Process the refresh\n\t\t$tw.pageWidgetNode.refresh(deferredChanges);\n\t\tdeferredChanges = Object.create(null);\n\t}\n\t// Add the change event handler\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"mainRefresh\",function(changes) {\n\t\t// Check if only drafts have changed\n\t\tvar onlyDraftsHaveChanged = true;\n\t\tfor(var title in changes) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\tif(!tiddler || !tiddler.hasField(\"draft.of\")) {\n\t\t\t\tonlyDraftsHaveChanged = false;\n\t\t\t}\n\t\t}\n\t\t// Defer the change if only drafts have changed\n\t\tif(timerId) {\n\t\t\tclearTimeout(timerId);\n\t\t}\n\t\ttimerId = null;\n\t\tif(onlyDraftsHaveChanged) {\n\t\t\tvar timeout = parseInt($tw.wiki.getTiddlerText(DRAFT_TIDDLER_TIMEOUT_TITLE,\"\"),10);\n\t\t\tif(isNaN(timeout)) {\n\t\t\t\ttimeout = DRAFT_TIDDLER_TIMEOUT;\n\t\t\t}\n\t\t\ttimerId = setTimeout(refresh,timeout);\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t} else {\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t\trefresh();\n\t\t}\n\t}));\n\t// Fix up the link between the root widget and the page container\n\t$tw.rootWidget.domNodes = [$tw.pageContainer];\n\t$tw.rootWidget.children = [$tw.pageWidgetNode];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/rootwidget.js": {
"title": "$:/core/modules/startup/rootwidget.js",
"text": "/*\\\ntitle: $:/core/modules/startup/rootwidget.js\ntype: application/javascript\nmodule-type: startup\n\nSetup the root widget and the core root widget handlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"rootwidget\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.before = [\"story\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Install the modal message mechanism\n\t$tw.modal = new $tw.utils.Modal($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-modal\",function(event) {\n\t\t$tw.modal.display(event.param,{variables: event.paramObject});\n\t});\n\t// Install the notification mechanism\n\t$tw.notifier = new $tw.utils.Notifier($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-notify\",function(event) {\n\t\t$tw.notifier.display(event.param,{variables: event.paramObject});\n\t});\n\t// Install the scroller\n\t$tw.pageScroller = new $tw.utils.PageScroller();\n\t$tw.rootWidget.addEventListener(\"tm-scroll\",function(event) {\n\t\t$tw.pageScroller.handleEvent(event);\n\t});\n\tvar fullscreen = $tw.utils.getFullScreenApis();\n\tif(fullscreen) {\n\t\t$tw.rootWidget.addEventListener(\"tm-full-screen\",function(event) {\n\t\t\tif(document[fullscreen._fullscreenElement]) {\n\t\t\t\tdocument[fullscreen._exitFullscreen]();\n\t\t\t} else {\n\t\t\t\tdocument.documentElement[fullscreen._requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t\t\t}\n\t\t});\n\t}\n\t// If we're being viewed on a data: URI then give instructions for how to save\n\tif(document.location.protocol === \"data:\") {\n\t\t$tw.rootWidget.dispatchEvent({\n\t\t\ttype: \"tm-modal\",\n\t\t\tparam: \"$:/language/Modals/SaveInstructions\"\n\t\t});\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup.js": {
"title": "$:/core/modules/startup.js",
"text": "/*\\\ntitle: $:/core/modules/startup.js\ntype: application/javascript\nmodule-type: startup\n\nMiscellaneous startup logic for both the client and server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"startup\";\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\n// Set to `true` to enable performance instrumentation\nvar PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE = \"$:/config/Performance/Instrumentation\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.startup = function() {\n\tvar modules,n,m,f;\n\t// Minimal browser detection\n\tif($tw.browser) {\n\t\t$tw.browser.isIE = (/msie|trident/i.test(navigator.userAgent));\n\t\t$tw.browser.isFirefox = !!document.mozFullScreenEnabled;\n\t}\n\t// Platform detection\n\t$tw.platform = {};\n\tif($tw.browser) {\n\t\t$tw.platform.isMac = /Mac/.test(navigator.platform);\n\t\t$tw.platform.isWindows = /win/i.test(navigator.platform);\n\t\t$tw.platform.isLinux = /Linux/i.test(navigator.appVersion);\n\t} else {\n\t\tswitch(require(\"os\").platform()) {\n\t\t\tcase \"darwin\":\n\t\t\t\t$tw.platform.isMac = true;\n\t\t\t\tbreak;\n\t\t\tcase \"win32\":\n\t\t\t\t$tw.platform.isWindows = true;\n\t\t\t\tbreak;\n\t\t\tcase \"freebsd\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t\tcase \"linux\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t// Initialise version\n\t$tw.version = $tw.utils.extractVersionInfo();\n\t// Set up the performance framework\n\t$tw.perf = new $tw.Performance($tw.wiki.getTiddlerText(PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE,\"no\") === \"yes\");\n\t// Kick off the language manager and switcher\n\t$tw.language = new $tw.Language();\n\t$tw.languageSwitcher = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"language\",\n\t\tcontrollerTitle: \"$:/language\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/languages/en-US\"\n\t\t],\n\t\tonSwitch: function(plugins) {\n\t\t\tif($tw.browser) {\n\t\t\t\tvar pluginTiddler = $tw.wiki.getTiddler(plugins[0]);\n\t\t\t\tif(pluginTiddler) {\n\t\t\t\t\tdocument.documentElement.setAttribute(\"dir\",pluginTiddler.getFieldString(\"text-direction\") || \"auto\");\n\t\t\t\t} else {\n\t\t\t\t\tdocument.documentElement.removeAttribute(\"dir\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\t// Kick off the theme manager\n\t$tw.themeManager = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"theme\",\n\t\tcontrollerTitle: \"$:/theme\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/themes/tiddlywiki/snowwhite\",\n\t\t\t\"$:/themes/tiddlywiki/vanilla\"\n\t\t]\n\t});\n\t// Kick off the keyboard manager\n\t$tw.keyboardManager = new $tw.KeyboardManager();\n\t// Clear outstanding tiddler store change events to avoid an unnecessary refresh cycle at startup\n\t$tw.wiki.clearTiddlerEventQueue();\n\t// Create a root widget for attaching event handlers. By using it as the parentWidget for another widget tree, one can reuse the event handlers\n\tif($tw.browser) {\n\t\t$tw.rootWidget = new widget.widget({\n\t\t\ttype: \"widget\",\n\t\t\tchildren: []\n\t\t},{\n\t\t\twiki: $tw.wiki,\n\t\t\tdocument: document\n\t\t});\n\t}\n\t// Find a working syncadaptor\n\t$tw.syncadaptor = undefined;\n\t$tw.modules.forEachModuleOfType(\"syncadaptor\",function(title,module) {\n\t\tif(!$tw.syncadaptor && module.adaptorClass) {\n\t\t\t$tw.syncadaptor = new module.adaptorClass({wiki: $tw.wiki});\n\t\t}\n\t});\n\t// Set up the syncer object if we've got a syncadaptor\n\tif($tw.syncadaptor) {\n\t\t$tw.syncer = new $tw.Syncer({wiki: $tw.wiki, syncadaptor: $tw.syncadaptor});\n\t} \n\t// Setup the saver handler\n\t$tw.saverHandler = new $tw.SaverHandler({wiki: $tw.wiki, dirtyTracking: !$tw.syncadaptor});\n\t// Host-specific startup\n\tif($tw.browser) {\n\t\t// Install the popup manager\n\t\t$tw.popup = new $tw.utils.Popup();\n\t\t// Install the animator\n\t\t$tw.anim = new $tw.utils.Animator();\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/story.js": {
"title": "$:/core/modules/startup/story.js",
"text": "/*\\\ntitle: $:/core/modules/startup/story.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"story\";\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar DEFAULT_STORY_TITLE = \"$:/StoryList\";\nvar DEFAULT_HISTORY_TITLE = \"$:/HistoryList\";\n\n// Default tiddlers\nvar DEFAULT_TIDDLERS_TITLE = \"$:/DefaultTiddlers\";\n\n// Config\nvar CONFIG_UPDATE_ADDRESS_BAR = \"$:/config/Navigation/UpdateAddressBar\"; // Can be \"no\", \"permalink\", \"permaview\"\nvar CONFIG_UPDATE_HISTORY = \"$:/config/Navigation/UpdateHistory\"; // Can be \"yes\" or \"no\"\n\nexports.startup = function() {\n\t// Open startup tiddlers\n\topenStartupTiddlers();\n\tif($tw.browser) {\n\t\t// Set up location hash update\n\t\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t\tif($tw.utils.hop(changes,DEFAULT_STORY_TITLE) || $tw.utils.hop(changes,DEFAULT_HISTORY_TITLE)) {\n\t\t\t\tupdateLocationHash({\n\t\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_UPDATE_ADDRESS_BAR,\"permaview\").trim(),\n\t\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim()\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t// Listen for changes to the browser location hash\n\t\twindow.addEventListener(\"hashchange\",function() {\n\t\t\tvar hash = $tw.utils.getLocationHash();\n\t\t\tif(hash !== $tw.locationHash) {\n\t\t\t\t$tw.locationHash = hash;\n\t\t\t\topenStartupTiddlers({defaultToCurrentStory: true});\n\t\t\t}\n\t\t},false);\n\t\t// Listen for the tm-browser-refresh message\n\t\t$tw.rootWidget.addEventListener(\"tm-browser-refresh\",function(event) {\n\t\t\twindow.location.reload(true);\n\t\t});\n\t\t// Listen for the tm-print message\n\t\t$tw.rootWidget.addEventListener(\"tm-print\",function(event) {\n\t\t\t(event.event.view || window).print();\n\t\t});\n\t\t// Listen for the tm-home message\n\t\t$tw.rootWidget.addEventListener(\"tm-home\",function(event) {\n\t\t\twindow.location.hash = \"\";\n\t\t\tvar storyFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE),\n\t\t\t\tstoryList = $tw.wiki.filterTiddlers(storyFilter);\n\t\t\t//invoke any hooks that might change the default story list\n\t\t\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t\t\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t\t\tif(storyList[0]) {\n\t\t\t\t$tw.wiki.addToHistory(storyList[0]);\t\t\t\t\n\t\t\t}\n\t\t});\n\t\t// Listen for the tm-permalink message\n\t\t$tw.rootWidget.addEventListener(\"tm-permalink\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: \"permalink\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle\n\t\t\t});\n\t\t});\n\t\t// Listen for the tm-permaview message\n\t\t$tw.rootWidget.addEventListener(\"tm-permaview\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: \"permaview\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle\n\t\t\t});\n\t\t});\n\t}\n};\n\n/*\nProcess the location hash to open the specified tiddlers. Options:\ndefaultToCurrentStory: If true, the current story is retained as the default, instead of opening the default tiddlers\n*/\nfunction openStartupTiddlers(options) {\n\toptions = options || {};\n\t// Work out the target tiddler and the story filter. \"null\" means \"unspecified\"\n\tvar target = null,\n\t\tstoryFilter = null;\n\tif($tw.locationHash.length > 1) {\n\t\tvar hash = $tw.locationHash.substr(1),\n\t\t\tsplit = hash.indexOf(\":\");\n\t\tif(split === -1) {\n\t\t\ttarget = decodeURIComponent(hash.trim());\n\t\t} else {\n\t\t\ttarget = decodeURIComponent(hash.substr(0,split).trim());\n\t\t\tstoryFilter = decodeURIComponent(hash.substr(split + 1).trim());\n\t\t}\n\t}\n\t// If the story wasn't specified use the current tiddlers or a blank story\n\tif(storyFilter === null) {\n\t\tif(options.defaultToCurrentStory) {\n\t\t\tvar currStoryList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE);\n\t\t\tstoryFilter = $tw.utils.stringifyList(currStoryList);\n\t\t} else {\n\t\t\tif(target && target !== \"\") {\n\t\t\t\tstoryFilter = \"\";\n\t\t\t} else {\n\t\t\t\tstoryFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE);\n\t\t\t}\n\t\t}\n\t}\n\t// Process the story filter to get the story list\n\tvar storyList = $tw.wiki.filterTiddlers(storyFilter);\n\t// Invoke any hooks that want to change the default story list\n\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t// If the target tiddler isn't included then splice it in at the top\n\tif(target && storyList.indexOf(target) === -1) {\n\t\tstoryList.unshift(target);\n\t}\n\t// Save the story list\n\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t// If a target tiddler was specified add it to the history stack\n\tif(target && target !== \"\") {\n\t\t// The target tiddler doesn't need double square brackets, but we'll silently remove them if they're present\n\t\tif(target.indexOf(\"[[\") === 0 && target.substr(-2) === \"]]\") {\n\t\t\ttarget = target.substr(2,target.length - 4);\n\t\t}\n\t\t$tw.wiki.addToHistory(target);\n\t} else if(storyList.length > 0) {\n\t\t$tw.wiki.addToHistory(storyList[0]);\n\t}\n}\n\n/*\noptions: See below\noptions.updateAddressBar: \"permalink\", \"permaview\" or \"no\" (defaults to \"permaview\")\noptions.updateHistory: \"yes\" or \"no\" (defaults to \"no\")\noptions.targetTiddler: optional title of target tiddler for permalink\n*/\nfunction updateLocationHash(options) {\n\tif(options.updateAddressBar !== \"no\") {\n\t\t// Get the story and the history stack\n\t\tvar storyList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE),\n\t\t\thistoryList = $tw.wiki.getTiddlerData(DEFAULT_HISTORY_TITLE,[]),\n\t\t\ttargetTiddler = \"\";\n\t\tif(options.targetTiddler) {\n\t\t\ttargetTiddler = options.targetTiddler;\n\t\t} else {\n\t\t\t// The target tiddler is the one at the top of the stack\n\t\t\tif(historyList.length > 0) {\n\t\t\t\ttargetTiddler = historyList[historyList.length-1].title;\n\t\t\t}\n\t\t\t// Blank the target tiddler if it isn't present in the story\n\t\t\tif(storyList.indexOf(targetTiddler) === -1) {\n\t\t\t\ttargetTiddler = \"\";\n\t\t\t}\n\t\t}\n\t\t// Assemble the location hash\n\t\tif(options.updateAddressBar === \"permalink\") {\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler);\n\t\t} else {\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler) + \":\" + encodeURIComponent($tw.utils.stringifyList(storyList));\n\t\t}\n\t\t// Only change the location hash if we must, thus avoiding unnecessary onhashchange events\n\t\tif($tw.utils.getLocationHash() !== $tw.locationHash) {\n\t\t\tif(options.updateHistory === \"yes\") {\n\t\t\t\t// Assign the location hash so that history is updated\n\t\t\t\twindow.location.hash = $tw.locationHash;\n\t\t\t} else {\n\t\t\t\t// We use replace so that browser history isn't affected\n\t\t\t\twindow.location.replace(window.location.toString().split(\"#\")[0] + $tw.locationHash);\n\t\t\t}\n\t\t}\n\t}\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/windows.js": {
"title": "$:/core/modules/startup/windows.js",
"text": "/*\\\ntitle: $:/core/modules/startup/windows.js\ntype: application/javascript\nmodule-type: startup\n\nSetup root widget handlers for the messages concerned with opening external browser windows\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"windows\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Global to keep track of open windows (hashmap by title)\nvar windows = {};\n\nexports.startup = function() {\n\t// Handle open window message\n\t$tw.rootWidget.addEventListener(\"tm-open-window\",function(event) {\n\t\t// Get the parameters\n\t\tvar refreshHandler,\n\t\t\ttitle = event.param || event.tiddlerTitle,\n\t\t\tparamObject = event.paramObject || {},\n\t\t\ttemplate = paramObject.template || \"$:/core/templates/single.tiddler.window\",\n\t\t\twidth = paramObject.width || \"700\",\n\t\t\theight = paramObject.height || \"600\",\n\t\t\tvariables = $tw.utils.extend({},paramObject,{currentTiddler: title});\n\t\t// Open the window\n\t\tvar srcWindow = window.open(\"\",\"external-\" + title,\"scrollbars,width=\" + width + \",height=\" + height),\n\t\t\tsrcDocument = srcWindow.document;\n\t\twindows[title] = srcWindow;\n\t\t// Check for reopening the same window\n\t\tif(srcWindow.haveInitialisedWindow) {\n\t\t\treturn;\n\t\t}\n\t\t// Initialise the document\n\t\tsrcDocument.write(\"<html><head></head><body class='tc-body tc-single-tiddler-window'></body></html>\");\n\t\tsrcDocument.close();\n\t\tsrcDocument.title = title;\n\t\tsrcWindow.addEventListener(\"beforeunload\",function(event) {\n\t\t\tdelete windows[title];\n\t\t\t$tw.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t},false);\n\t\t// Set up the styles\n\t\tvar styleWidgetNode = $tw.wiki.makeTranscludeWidget(\"$:/core/ui/PageStylesheet\",{\n\t\t\t\tdocument: $tw.fakeDocument,\n\t\t\t\tvariables: variables,\n\t\t\t\timportPageMacros: true}),\n\t\t\tstyleContainer = $tw.fakeDocument.createElement(\"style\");\n\t\tstyleWidgetNode.render(styleContainer,null);\n\t\tvar styleElement = srcDocument.createElement(\"style\");\n\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\tsrcDocument.head.insertBefore(styleElement,srcDocument.head.firstChild);\n\t\t// Render the text of the tiddler\n\t\tvar parser = $tw.wiki.parseTiddler(template),\n\t\t\twidgetNode = $tw.wiki.makeWidget(parser,{document: srcDocument, parentWidget: $tw.rootWidget, variables: variables});\n\t\twidgetNode.render(srcDocument.body,srcDocument.body.firstChild);\n\t\t// Function to handle refreshes\n\t\trefreshHandler = function(changes) {\n\t\t\tif(styleWidgetNode.refresh(changes,styleContainer,null)) {\n\t\t\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\t\t}\n\t\t\twidgetNode.refresh(changes);\n\t\t};\n\t\t$tw.wiki.addEventListener(\"change\",refreshHandler);\n\t\tsrcWindow.haveInitialisedWindow = true;\n\t});\n\t// Close open windows when unloading main window\n\t$tw.addUnloadTask(function() {\n\t\t$tw.utils.each(windows,function(win) {\n\t\t\twin.close();\n\t\t});\n\t});\n\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/story.js": {
"title": "$:/core/modules/story.js",
"text": "/*\\\ntitle: $:/core/modules/story.js\ntype: application/javascript\nmodule-type: global\n\nLightweight object for managing interactions with the story and history lists.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nConstruct Story object with options:\nwiki: reference to wiki object to use to resolve tiddler titles\nstoryTitle: title of story list tiddler\nhistoryTitle: title of history list tiddler\n*/\nfunction Story(options) {\n\toptions = options || {};\n\tthis.wiki = options.wiki || $tw.wiki;\n\tthis.storyTitle = options.storyTitle || \"$:/StoryList\";\n\tthis.historyTitle = options.historyTitle || \"$:/HistoryList\";\n};\n\nStory.prototype.navigateTiddler = function(navigateTo,navigateFromTitle,navigateFromClientRect) {\n\tthis.addToStory(navigateTo,navigateFromTitle);\n\tthis.addToHistory(navigateTo,navigateFromClientRect);\n};\n\nStory.prototype.getStoryList = function() {\n\treturn this.wiki.getTiddlerList(this.storyTitle) || [];\n};\n\nStory.prototype.addToStory = function(navigateTo,navigateFromTitle,options) {\n\toptions = options || {};\n\tvar storyList = this.getStoryList();\n\t// See if the tiddler is already there\n\tvar slot = storyList.indexOf(navigateTo);\n\t// Quit if it already exists in the story river\n\tif(slot >= 0) {\n\t\treturn;\n\t}\n\t// First we try to find the position of the story element we navigated from\n\tvar fromIndex = storyList.indexOf(navigateFromTitle);\n\tif(fromIndex >= 0) {\n\t\t// The tiddler is added from inside the river\n\t\t// Determine where to insert the tiddler; Fallback is \"below\"\n\t\tswitch(options.openLinkFromInsideRiver) {\n\t\t\tcase \"top\":\n\t\t\t\tslot = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"bottom\":\n\t\t\t\tslot = storyList.length;\n\t\t\t\tbreak;\n\t\t\tcase \"above\":\n\t\t\t\tslot = fromIndex;\n\t\t\t\tbreak;\n\t\t\tcase \"below\": // Intentional fall-through\n\t\t\tdefault:\n\t\t\t\tslot = fromIndex + 1;\n\t\t\t\tbreak;\n\t\t}\n\t} else {\n\t\t// The tiddler is opened from outside the river. Determine where to insert the tiddler; default is \"top\"\n\t\tif(options.openLinkFromOutsideRiver === \"bottom\") {\n\t\t\t// Insert at bottom\n\t\t\tslot = storyList.length;\n\t\t} else {\n\t\t\t// Insert at top\n\t\t\tslot = 0;\n\t\t}\n\t}\n\t// Add the tiddler\n\tstoryList.splice(slot,0,navigateTo);\n\t// Save the story\n\tthis.saveStoryList(storyList);\n};\n\nStory.prototype.saveStoryList = function(storyList) {\n\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\t{title: this.storyTitle},\n\t\tstoryTiddler,\n\t\t{list: storyList},\n\t\tthis.wiki.getModificationFields()\n\t));\n};\n\nStory.prototype.addToHistory = function(navigateTo,navigateFromClientRect) {\n\tvar titles = $tw.utils.isArray(navigateTo) ? navigateTo : [navigateTo];\n\t// Add a new record to the top of the history stack\n\tvar historyList = this.wiki.getTiddlerData(this.historyTitle,[]);\n\t$tw.utils.each(titles,function(title) {\n\t\thistoryList.push({title: title, fromPageRect: navigateFromClientRect});\n\t});\n\tthis.wiki.setTiddlerData(this.historyTitle,historyList,{\"current-tiddler\": titles[titles.length-1]});\n};\n\nStory.prototype.storyCloseTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCloseAllTiddlers = function() {\n// TBD\n};\n\nStory.prototype.storyCloseOtherTiddlers = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyEditTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyDeleteTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storySaveTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCancelTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyNewTiddler = function(targetTitle) {\n// TBD\n};\n\nexports.Story = Story;\n\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/storyviews/classic.js": {
"title": "$:/core/modules/storyviews/classic.js",
"text": "/*\\\ntitle: $:/core/modules/storyviews/classic.js\ntype: application/javascript\nmodule-type: storyview\n\nViews the story as a linear sequence\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ClassicStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nClassicStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Scroll the node into view\n\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\n};\n\nClassicStoryView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Get the current height of the tiddler\n\tvar computedStyle = window.getComputedStyle(targetElement),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t// Reset the margin once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"}\n\t\t]);\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t// Transition to the final position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n};\n\nClassicStoryView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\twidget.removeChildDomNodes();\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Get the current height of the tiddler\n\tvar currWidth = targetElement.offsetWidth,\n\t\tcomputedStyle = window.getComputedStyle(targetElement),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t// Remove the dom nodes of the widget at the end of the transition\n\tsetTimeout(removeElement,duration);\n\t// Animate the closure\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"translateX(0px)\"},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t{transform: \"translateX(-\" + currWidth + \"px)\"},\n\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n};\n\nexports.classic = ClassicStoryView;\n\n})();",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/storyviews/pop.js": {
"title": "$:/core/modules/storyviews/pop.js",
"text": "/*\\\ntitle: $:/core/modules/storyviews/pop.js\ntype: application/javascript\nmodule-type: storyview\n\nAnimates list insertions and removals\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar PopStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nPopStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Scroll the node into view\n\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\n};\n\nPopStoryView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Reset once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{transform: \"none\"}\n\t\t]);\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(2)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t// Transition to the final position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n};\n\nPopStoryView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\tif(targetElement.parentNode) {\n\t\t\t\twidget.removeChildDomNodes();\n\t\t\t}\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Remove the element at the end of the transition\n\tsetTimeout(removeElement,duration);\n\t// Animate the closure\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(0.1)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n};\n\nexports.pop = PopStoryView;\n\n})();\n",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/storyviews/zoomin.js": {
"title": "$:/core/modules/storyviews/zoomin.js",
"text": "/*\\\ntitle: $:/core/modules/storyviews/zoomin.js\ntype: application/javascript\nmodule-type: storyview\n\nZooms between individual tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ZoominListView = function(listWidget) {\n\tvar self = this;\n\tthis.listWidget = listWidget;\n\t// Get the index of the tiddler that is at the top of the history\n\tvar history = this.listWidget.wiki.getTiddlerDataCached(this.listWidget.historyTitle,[]),\n\t\ttargetTiddler;\n\tif(history.length > 0) {\n\t\ttargetTiddler = history[history.length-1].title;\n\t}\n\t// Make all the tiddlers position absolute, and hide all but the top (or first) one\n\t$tw.utils.each(this.listWidget.children,function(itemWidget,index) {\n\t\tvar domNode = itemWidget.findFirstDomNode();\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(domNode instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\t\tif((targetTiddler && targetTiddler !== itemWidget.parseTreeNode.itemTitle) || (!targetTiddler && index)) {\n\t\t\tdomNode.style.display = \"none\";\n\t\t} else {\n\t\t\tself.currentTiddlerDomNode = domNode;\n\t\t}\n\t\t$tw.utils.addClass(domNode,\"tc-storyview-zoomin-tiddler\");\n\t});\n};\n\nZoominListView.prototype.navigateTo = function(historyInfo) {\n\tvar duration = $tw.utils.getAnimationDuration(),\n\t\tlistElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the new tiddler be position absolute and visible so that we can measure it\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"0 0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t// Get the position of the source node, or use the centre of the window as the source position\n\tvar sourceBounds = historyInfo.fromPageRect || {\n\t\t\tleft: window.innerWidth/2 - 2,\n\t\t\ttop: window.innerHeight/2 - 2,\n\t\t\twidth: window.innerWidth/8,\n\t\t\theight: window.innerHeight/8\n\t\t};\n\t// Try to find the title node in the target tiddler\n\tvar titleDomNode = findTitleDomNode(listItemWidget) || listItemWidget.findFirstDomNode(),\n\t\tzoomBounds = titleDomNode.getBoundingClientRect();\n\t// Compute the transform for the target tiddler to make the title lie over the source rectange\n\tvar targetBounds = targetElement.getBoundingClientRect(),\n\t\tscale = sourceBounds.width / zoomBounds.width,\n\t\tx = sourceBounds.left - targetBounds.left - (zoomBounds.left - targetBounds.left) * scale,\n\t\ty = sourceBounds.top - targetBounds.top - (zoomBounds.top - targetBounds.top) * scale;\n\t// Transform the target tiddler to its starting position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(targetElement);\n\t// Apply the ending transitions with a timeout to ensure that the previously applied transformations are applied first\n\tvar self = this,\n\t\tprevCurrentTiddler = this.currentTiddlerDomNode;\n\tthis.currentTiddlerDomNode = targetElement;\n\t// Transform the target tiddler to its natural size\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{zIndex: \"500\"},\n\t]);\n\t// Transform the previous tiddler out of the way and then hide it\n\tif(prevCurrentTiddler && prevCurrentTiddler !== targetElement) {\n\t\tscale = zoomBounds.width / sourceBounds.width;\n\t\tx = zoomBounds.left - targetBounds.left - (sourceBounds.left - targetBounds.left) * scale;\n\t\ty = zoomBounds.top - targetBounds.top - (sourceBounds.top - targetBounds.top) * scale;\n\t\t$tw.utils.setStyle(prevCurrentTiddler,[\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transformOrigin: \"0 0\"},\n\t\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"},\n\t\t\t{zIndex: \"0\"}\n\t\t]);\n\t\t// Hide the tiddler when the transition has finished\n\t\tsetTimeout(function() {\n\t\t\tif(self.currentTiddlerDomNode !== prevCurrentTiddler) {\n\t\t\t\tprevCurrentTiddler.style.display = \"none\";\n\t\t\t}\n\t\t},duration);\n\t}\n\t// Scroll the target into view\n//\t$tw.pageScroller.scrollIntoView(targetElement);\n};\n\n/*\nFind the first child DOM node of a widget that has the class \"tc-title\"\n*/\nfunction findTitleDomNode(widget,targetClass) {\n\ttargetClass = targetClass || \"tc-title\";\n\tvar domNode = widget.findFirstDomNode();\n\tif(domNode && domNode.querySelector) {\n\t\treturn domNode.querySelector(\".\" + targetClass);\n\t}\n\treturn null;\n}\n\nZoominListView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the newly inserted node position absolute and hidden\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"none\"}\n\t]);\n};\n\nZoominListView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\twidget.removeChildDomNodes();\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Abandon if hidden\n\tif(targetElement.style.display != \"block\" ) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Set up the tiddler that is being closed\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\t// We'll move back to the previous or next element in the story\n\tvar toWidget = widget.previousSibling();\n\tif(!toWidget) {\n\t\ttoWidget = widget.nextSibling();\n\t}\n\tvar toWidgetDomNode = toWidget && toWidget.findFirstDomNode();\n\t// Set up the tiddler we're moving back in\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.addClass(toWidgetDomNode,\"tc-storyview-zoomin-tiddler\");\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{display: \"block\"},\n\t\t\t{transformOrigin: \"50% 50%\"},\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(10)\"},\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0\"},\n\t\t\t{zIndex: \"500\"}\n\t\t]);\n\t\tthis.currentTiddlerDomNode = toWidgetDomNode;\n\t}\n\t// Animate them both\n\t// Force layout\n\t$tw.utils.forceLayout(this.listWidget.parentDomNode);\n\t// First, the tiddler we're closing\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(0.1)\"},\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"0\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\tsetTimeout(removeElement,duration);\n\t// Now the tiddler we're going back to\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t\t{opacity: \"1\"}\n\t\t]);\n\t}\n\treturn true; // Indicate that we'll delete the DOM node\n};\n\nexports.zoomin = ZoominListView;\n\n})();\n",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/syncer.js": {
"title": "$:/core/modules/syncer.js",
"text": "/*\\\ntitle: $:/core/modules/syncer.js\ntype: application/javascript\nmodule-type: global\n\nThe syncer tracks changes to the store. If a syncadaptor is used then individual tiddlers are synchronised through it. If there is no syncadaptor then the entire wiki is saved via saver modules.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDefaults\n*/\nSyncer.prototype.titleIsLoggedIn = \"$:/status/IsLoggedIn\";\nSyncer.prototype.titleUserName = \"$:/status/UserName\";\nSyncer.prototype.titleSyncFilter = \"$:/config/SyncFilter\";\nSyncer.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\nSyncer.prototype.taskTimerInterval = 1 * 1000; // Interval for sync timer\nSyncer.prototype.throttleInterval = 1 * 1000; // Defer saving tiddlers if they've changed in the last 1s...\nSyncer.prototype.fallbackInterval = 10 * 1000; // Unless the task is older than 10s\nSyncer.prototype.pollTimerInterval = 60 * 1000; // Interval for polling for changes from the adaptor\n\n/*\nInstantiate the syncer with the following options:\nsyncadaptor: reference to syncadaptor to be used\nwiki: wiki to be synced\n*/\nfunction Syncer(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\tthis.syncadaptor = options.syncadaptor;\n\tthis.disableUI = !!options.disableUI;\n\tthis.titleIsLoggedIn = options.titleIsLoggedIn || this.titleIsLoggedIn;\n\tthis.titleUserName = options.titleUserName || this.titleUserName;\n\tthis.titleSyncFilter = options.titleSyncFilter || this.titleSyncFilter;\n\tthis.titleSavedNotification = options.titleSavedNotification || this.titleSavedNotification;\n\tthis.taskTimerInterval = options.taskTimerInterval || this.taskTimerInterval;\n\tthis.throttleInterval = options.throttleInterval || this.throttleInterval;\n\tthis.fallbackInterval = options.fallbackInterval || this.fallbackInterval;\n\tthis.pollTimerInterval = options.pollTimerInterval || this.pollTimerInterval;\n\tthis.logging = \"logging\" in options ? options.logging : true;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"syncer\" + ($tw.browser ? \"-browser\" : \"\") + ($tw.node ? \"-server\" : \"\") + (this.syncadaptor.name ? (\"-\" + this.syncadaptor.name) : \"\"),{\n\t\t\tcolour: \"cyan\",\n\t\t\tenable: this.logging\n\t\t});\n\t// Compile the dirty tiddler filter\n\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t// Record information for known tiddlers\n\tthis.readTiddlerInfo();\n\t// Tasks are {type: \"load\"/\"save\"/\"delete\", title:, queueTime:, lastModificationTime:}\n\tthis.taskQueue = {}; // Hashmap of tasks yet to be performed\n\tthis.taskInProgress = {}; // Hash of tasks in progress\n\tthis.taskTimerId = null; // Timer for task dispatch\n\tthis.pollTimerId = null; // Timer for polling server\n\t// Listen out for changes to tiddlers\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tself.syncToServer(changes);\n\t});\n\t// Browser event handlers\n\tif($tw.browser && !this.disableUI) {\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t\t// Listen out for login/logout/refresh events in the browser\n\t\t$tw.rootWidget.addEventListener(\"tm-login\",function() {\n\t\t\tself.handleLoginEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-logout\",function() {\n\t\t\tself.handleLogoutEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-server-refresh\",function() {\n\t\t\tself.handleRefreshEvent();\n\t\t});\n\t}\n\t// Listen out for lazyLoad events\n\tif(!this.disableUI) {\n\t\tthis.wiki.addEventListener(\"lazyLoad\",function(title) {\n\t\t\tself.handleLazyLoadEvent(title);\n\t\t});\t\t\n\t}\n\t// Get the login status\n\tthis.getStatus(function(err,isLoggedIn) {\n\t\t// Do a sync from the server\n\t\tself.syncFromServer();\n\t});\n}\n\n/*\nRead (or re-read) the latest tiddler info from the store\n*/\nSyncer.prototype.readTiddlerInfo = function() {\n\t// Hashmap by title of {revision:,changeCount:,adaptorInfo:}\n\tthis.tiddlerInfo = {};\n\t// Record information for known tiddlers\n\tvar self = this,\n\t\ttiddlers = this.filterFn.call(this.wiki);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\tself.tiddlerInfo[title] = {\n\t\t\trevision: tiddler.fields.revision,\n\t\t\tadaptorInfo: self.syncadaptor && self.syncadaptor.getTiddlerInfo(tiddler),\n\t\t\tchangeCount: self.wiki.getChangeCount(title),\n\t\t\thasBeenLazyLoaded: false\n\t\t};\n\t});\n};\n\n/*\nCreate an tiddlerInfo structure if it doesn't already exist\n*/\nSyncer.prototype.createTiddlerInfo = function(title) {\n\tif(!$tw.utils.hop(this.tiddlerInfo,title)) {\n\t\tthis.tiddlerInfo[title] = {\n\t\t\trevision: null,\n\t\t\tadaptorInfo: {},\n\t\t\tchangeCount: -1,\n\t\t\thasBeenLazyLoaded: false\n\t\t};\n\t}\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSyncer.prototype.isDirty = function() {\n\treturn (this.numTasksInQueue() > 0) || (this.numTasksInProgress() > 0);\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSyncer.prototype.updateDirtyStatus = function() {\n\tif($tw.browser && !this.disableUI) {\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",this.isDirty());\n\t}\n};\n\n/*\nSave an incoming tiddler in the store, and updates the associated tiddlerInfo\n*/\nSyncer.prototype.storeTiddler = function(tiddlerFields,hasBeenLazyLoaded) {\n\t// Save the tiddler\n\tvar tiddler = new $tw.Tiddler(this.wiki.getTiddler(tiddlerFields.title),tiddlerFields);\n\tthis.wiki.addTiddler(tiddler);\n\t// Save the tiddler revision and changeCount details\n\tthis.tiddlerInfo[tiddlerFields.title] = {\n\t\trevision: tiddlerFields.revision,\n\t\tadaptorInfo: this.syncadaptor.getTiddlerInfo(tiddler),\n\t\tchangeCount: this.wiki.getChangeCount(tiddlerFields.title),\n\t\thasBeenLazyLoaded: hasBeenLazyLoaded !== undefined ? hasBeenLazyLoaded : true\n\t};\n};\n\nSyncer.prototype.getStatus = function(callback) {\n\tvar self = this;\n\t// Check if the adaptor supports getStatus()\n\tif(this.syncadaptor && this.syncadaptor.getStatus) {\n\t\t// Mark us as not logged in\n\t\tthis.wiki.addTiddler({title: this.titleIsLoggedIn,text: \"no\"});\n\t\t// Get login status\n\t\tthis.syncadaptor.getStatus(function(err,isLoggedIn,username) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Set the various status tiddlers\n\t\t\tself.wiki.addTiddler({title: self.titleIsLoggedIn,text: isLoggedIn ? \"yes\" : \"no\"});\n\t\t\tif(isLoggedIn) {\n\t\t\t\tself.wiki.addTiddler({title: self.titleUserName,text: username || \"\"});\n\t\t\t} else {\n\t\t\t\tself.wiki.deleteTiddler(self.titleUserName);\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tif(callback) {\n\t\t\t\tcallback(err,isLoggedIn,username);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tcallback(null,true,\"UNAUTHENTICATED\");\n\t}\n};\n\n/*\nSynchronise from the server by reading the skinny tiddler list and queuing up loads for any tiddlers that we don't already have up to date\n*/\nSyncer.prototype.syncFromServer = function() {\n\tif(this.syncadaptor && this.syncadaptor.getSkinnyTiddlers) {\n\t\tthis.logger.log(\"Retrieving skinny tiddler list\");\n\t\tvar self = this;\n\t\tif(this.pollTimerId) {\n\t\t\tclearTimeout(this.pollTimerId);\n\t\t\tthis.pollTimerId = null;\n\t\t}\n\t\tthis.syncadaptor.getSkinnyTiddlers(function(err,tiddlers) {\n\t\t\t// Trigger the next sync\n\t\t\tself.pollTimerId = setTimeout(function() {\n\t\t\t\tself.pollTimerId = null;\n\t\t\t\tself.syncFromServer.call(self);\n\t\t\t},self.pollTimerInterval);\n\t\t\t// Check for errors\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert($tw.language.getString(\"Error/RetrievingSkinny\") + \":\",err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Process each incoming tiddler\n\t\t\tfor(var t=0; t<tiddlers.length; t++) {\n\t\t\t\t// Get the incoming tiddler fields, and the existing tiddler\n\t\t\t\tvar tiddlerFields = tiddlers[t],\n\t\t\t\t\tincomingRevision = tiddlerFields.revision + \"\",\n\t\t\t\t\ttiddler = self.wiki.getTiddler(tiddlerFields.title),\n\t\t\t\t\ttiddlerInfo = self.tiddlerInfo[tiddlerFields.title],\n\t\t\t\t\tcurrRevision = tiddlerInfo ? tiddlerInfo.revision : null;\n\t\t\t\t// Ignore the incoming tiddler if it's the same as the revision we've already got\n\t\t\t\tif(currRevision !== incomingRevision) {\n\t\t\t\t\t// Do a full load if we've already got a fat version of the tiddler\n\t\t\t\t\tif(tiddler && tiddler.fields.text !== undefined) {\n\t\t\t\t\t\t// Do a full load of this tiddler\n\t\t\t\t\t\tself.enqueueSyncTask({\n\t\t\t\t\t\t\ttype: \"load\",\n\t\t\t\t\t\t\ttitle: tiddlerFields.title\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Load the skinny version of the tiddler\n\t\t\t\t\t\tself.storeTiddler(tiddlerFields,false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nSynchronise a set of changes to the server\n*/\nSyncer.prototype.syncToServer = function(changes) {\n\tvar self = this,\n\t\tnow = Date.now(),\n\t\tfilteredChanges = this.filterFn.call(this.wiki,function(callback) {\n\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\tcallback(tiddler,title);\n\t\t\t});\n\t\t});\n\t$tw.utils.each(changes,function(change,title,object) {\n\t\t// Process the change if it is a deletion of a tiddler we're already syncing, or is on the filtered change list\n\t\tif((change.deleted && $tw.utils.hop(self.tiddlerInfo,title)) || filteredChanges.indexOf(title) !== -1) {\n\t\t\t// Queue a task to sync this tiddler\n\t\t\tself.enqueueSyncTask({\n\t\t\t\ttype: change.deleted ? \"delete\" : \"save\",\n\t\t\t\ttitle: title\n\t\t\t});\n\t\t}\n\t});\n};\n\n/*\nLazily load a skinny tiddler if we can\n*/\nSyncer.prototype.handleLazyLoadEvent = function(title) {\n\t// Don't lazy load the same tiddler twice\n\tvar info = this.tiddlerInfo[title];\n\tif(!info || !info.hasBeenLazyLoaded) {\n\t\tthis.createTiddlerInfo(title);\n\t\tthis.tiddlerInfo[title].hasBeenLazyLoaded = true;\n\t\t// Queue up a sync task to load this tiddler\n\t\tthis.enqueueSyncTask({\n\t\t\ttype: \"load\",\n\t\t\ttitle: title\n\t\t});\t\t\n\t}\n};\n\n/*\nDispay a password prompt and allow the user to login\n*/\nSyncer.prototype.handleLoginEvent = function() {\n\tvar self = this;\n\tthis.getStatus(function(err,isLoggedIn,username) {\n\t\tif(!isLoggedIn) {\n\t\t\t$tw.passwordPrompt.createPrompt({\n\t\t\t\tserviceName: $tw.language.getString(\"LoginToTiddlySpace\"),\n\t\t\t\tcallback: function(data) {\n\t\t\t\t\tself.login(data.username,data.password,function(err,isLoggedIn) {\n\t\t\t\t\t\tself.syncFromServer();\n\t\t\t\t\t});\n\t\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n};\n\n/*\nAttempt to login to TiddlyWeb.\n\tusername: username\n\tpassword: password\n\tcallback: invoked with arguments (err,isLoggedIn)\n*/\nSyncer.prototype.login = function(username,password,callback) {\n\tthis.logger.log(\"Attempting to login as\",username);\n\tvar self = this;\n\tif(this.syncadaptor.login) {\n\t\tthis.syncadaptor.login(username,password,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.getStatus(function(err,isLoggedIn,username) {\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback(null,isLoggedIn);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t} else {\n\t\tcallback(null,true);\n\t}\n};\n\n/*\nAttempt to log out of TiddlyWeb\n*/\nSyncer.prototype.handleLogoutEvent = function() {\n\tthis.logger.log(\"Attempting to logout\");\n\tvar self = this;\n\tif(this.syncadaptor.logout) {\n\t\tthis.syncadaptor.logout(function(err) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t} else {\n\t\t\t\tself.getStatus();\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nImmediately refresh from the server\n*/\nSyncer.prototype.handleRefreshEvent = function() {\n\tthis.syncFromServer();\n};\n\n/*\nQueue up a sync task. If there is already a pending task for the tiddler, just update the last modification time\n*/\nSyncer.prototype.enqueueSyncTask = function(task) {\n\tvar self = this,\n\t\tnow = Date.now();\n\t// Set the timestamps on this task\n\ttask.queueTime = now;\n\ttask.lastModificationTime = now;\n\t// Fill in some tiddlerInfo if the tiddler is one we haven't seen before\n\tthis.createTiddlerInfo(task.title);\n\t// Bail if this is a save and the tiddler is already at the changeCount that the server has\n\tif(task.type === \"save\" && this.wiki.getChangeCount(task.title) <= this.tiddlerInfo[task.title].changeCount) {\n\t\treturn;\n\t}\n\t// Check if this tiddler is already in the queue\n\tif($tw.utils.hop(this.taskQueue,task.title)) {\n\t\t// this.logger.log(\"Re-queueing up sync task with type:\",task.type,\"title:\",task.title);\n\t\tvar existingTask = this.taskQueue[task.title];\n\t\t// If so, just update the last modification time\n\t\texistingTask.lastModificationTime = task.lastModificationTime;\n\t\t// If the new task is a save then we upgrade the existing task to a save. Thus a pending load is turned into a save if the tiddler changes locally in the meantime. But a pending save is not modified to become a load\n\t\tif(task.type === \"save\" || task.type === \"delete\") {\n\t\t\texistingTask.type = task.type;\n\t\t}\n\t} else {\n\t\t// this.logger.log(\"Queuing up sync task with type:\",task.type,\"title:\",task.title);\n\t\t// If it is not in the queue, insert it\n\t\tthis.taskQueue[task.title] = task;\n\t\tthis.updateDirtyStatus();\n\t}\n\t// Process the queue\n\t$tw.utils.nextTick(function() {self.processTaskQueue.call(self);});\n};\n\n/*\nReturn the number of tasks in progress\n*/\nSyncer.prototype.numTasksInProgress = function() {\n\treturn $tw.utils.count(this.taskInProgress);\n};\n\n/*\nReturn the number of tasks in the queue\n*/\nSyncer.prototype.numTasksInQueue = function() {\n\treturn $tw.utils.count(this.taskQueue);\n};\n\n/*\nTrigger a timeout if one isn't already outstanding\n*/\nSyncer.prototype.triggerTimeout = function() {\n\tvar self = this;\n\tif(!this.taskTimerId) {\n\t\tthis.taskTimerId = setTimeout(function() {\n\t\t\tself.taskTimerId = null;\n\t\t\tself.processTaskQueue.call(self);\n\t\t},self.taskTimerInterval);\n\t}\n};\n\n/*\nProcess the task queue, performing the next task if appropriate\n*/\nSyncer.prototype.processTaskQueue = function() {\n\tvar self = this;\n\t// Only process a task if the sync adaptor is fully initialised and we're not already performing a task. If we are already performing a task then we'll dispatch the next one when it completes\n\tif((!this.syncadaptor.isReady || this.syncadaptor.isReady()) && this.numTasksInProgress() === 0) {\n\t\t// Choose the next task to perform\n\t\tvar task = this.chooseNextTask();\n\t\t// Perform the task if we had one\n\t\tif(task) {\n\t\t\t// Remove the task from the queue and add it to the in progress list\n\t\t\tdelete this.taskQueue[task.title];\n\t\t\tthis.taskInProgress[task.title] = task;\n\t\t\tthis.updateDirtyStatus();\n\t\t\t// Dispatch the task\n\t\t\tthis.dispatchTask(task,function(err) {\n\t\t\t\tif(err) {\n\t\t\t\t\tself.logger.alert(\"Sync error while processing '\" + task.title + \"':\\n\" + err);\n\t\t\t\t}\n\t\t\t\t// Mark that this task is no longer in progress\n\t\t\t\tdelete self.taskInProgress[task.title];\n\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t// Process the next task\n\t\t\t\tself.processTaskQueue.call(self);\n\t\t\t});\n\t\t} else {\n\t\t\t// Make sure we've set a time if there wasn't a task to perform, but we've still got tasks in the queue\n\t\t\tif(this.numTasksInQueue() > 0) {\n\t\t\t\tthis.triggerTimeout();\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nChoose the next applicable task\n*/\nSyncer.prototype.chooseNextTask = function() {\n\tvar self = this,\n\t\tcandidateTask = null,\n\t\tnow = Date.now();\n\t// Select the best candidate task\n\t$tw.utils.each(this.taskQueue,function(task,title) {\n\t\t// Exclude the task if there's one of the same name in progress\n\t\tif($tw.utils.hop(self.taskInProgress,title)) {\n\t\t\treturn;\n\t\t}\n\t\t// Exclude the task if it is a save and the tiddler has been modified recently, but not hit the fallback time\n\t\tif(task.type === \"save\" && (now - task.lastModificationTime) < self.throttleInterval &&\n\t\t\t(now - task.queueTime) < self.fallbackInterval) {\n\t\t\treturn;\n\t\t}\n\t\t// Exclude the task if it is newer than the current best candidate\n\t\tif(candidateTask && candidateTask.queueTime < task.queueTime) {\n\t\t\treturn;\n\t\t}\n\t\t// Now this is our best candidate\n\t\tcandidateTask = task;\n\t});\n\treturn candidateTask;\n};\n\n/*\nDispatch a task and invoke the callback\n*/\nSyncer.prototype.dispatchTask = function(task,callback) {\n\tvar self = this;\n\tif(task.type === \"save\") {\n\t\tvar changeCount = this.wiki.getChangeCount(task.title),\n\t\t\ttiddler = this.wiki.getTiddler(task.title);\n\t\tthis.logger.log(\"Dispatching 'save' task:\",task.title);\n\t\tif(tiddler) {\n\t\t\tthis.syncadaptor.saveTiddler(tiddler,function(err,adaptorInfo,revision) {\n\t\t\t\tif(err) {\n\t\t\t\t\treturn callback(err);\n\t\t\t\t}\n\t\t\t\t// Adjust the info stored about this tiddler\n\t\t\t\tself.tiddlerInfo[task.title] = {\n\t\t\t\t\tchangeCount: changeCount,\n\t\t\t\t\tadaptorInfo: adaptorInfo,\n\t\t\t\t\trevision: revision\n\t\t\t\t};\n\t\t\t\t// Invoke the callback\n\t\t\t\tcallback(null);\n\t\t\t},{\n\t\t\t\ttiddlerInfo: self.tiddlerInfo[task.title]\n\t\t\t});\n\t\t} else {\n\t\t\tthis.logger.log(\" Not Dispatching 'save' task:\",task.title,\"tiddler does not exist\");\n\t\t\treturn callback(null);\n\t\t}\n\t} else if(task.type === \"load\") {\n\t\t// Load the tiddler\n\t\tthis.logger.log(\"Dispatching 'load' task:\",task.title);\n\t\tthis.syncadaptor.loadTiddler(task.title,function(err,tiddlerFields) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\t// Store the tiddler\n\t\t\tif(tiddlerFields) {\n\t\t\t\tself.storeTiddler(tiddlerFields,true);\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t});\n\t} else if(task.type === \"delete\") {\n\t\t// Delete the tiddler\n\t\tthis.logger.log(\"Dispatching 'delete' task:\",task.title);\n\t\tthis.syncadaptor.deleteTiddler(task.title,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tdelete self.tiddlerInfo[task.title];\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t},{\n\t\t\ttiddlerInfo: self.tiddlerInfo[task.title]\n\t\t});\n\t}\n};\n\nexports.Syncer = Syncer;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/tiddler.js": {
"title": "$:/core/modules/tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/tiddler.js\ntype: application/javascript\nmodule-type: tiddlermethod\n\nExtension methods for the $tw.Tiddler object (constructor and methods required at boot time are in boot/boot.js)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.hasTag = function(tag) {\n\treturn this.fields.tags && this.fields.tags.indexOf(tag) !== -1;\n};\n\nexports.isPlugin = function() {\n\treturn this.fields.type === \"application/json\" && this.hasField(\"plugin-type\");\n};\n\nexports.isDraft = function() {\n\treturn this.hasField(\"draft.of\");\n};\n\nexports.getFieldString = function(field) {\n\tvar value = this.fields[field];\n\t// Check for a missing field\n\tif(value === undefined || value === null) {\n\t\treturn \"\";\n\t}\n\t// Parse the field with the associated module (if any)\n\tvar fieldModule = $tw.Tiddler.fieldModules[field];\n\tif(fieldModule && fieldModule.stringify) {\n\t\treturn fieldModule.stringify.call(this,value);\n\t} else {\n\t\treturn value.toString();\n\t}\n};\n\n/*\nGet all the fields as a hashmap of strings. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStrings = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [];\n\tvar fields = {};\n\tfor(var field in this.fields) {\n\t\tif($tw.utils.hop(this.fields,field)) {\n\t\t\tif(exclude.indexOf(field) === -1) {\n\t\t\t\tfields[field] = this.getFieldString(field);\n\t\t\t}\n\t\t}\n\t}\n\treturn fields;\n};\n\n/*\nGet all the fields as a name:value block. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStringBlock = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [];\n\tvar fields = [];\n\tfor(var field in this.fields) {\n\t\tif($tw.utils.hop(this.fields,field)) {\n\t\t\tif(exclude.indexOf(field) === -1) {\n\t\t\t\tfields.push(field + \": \" + this.getFieldString(field));\n\t\t\t}\n\t\t}\n\t}\n\treturn fields.join(\"\\n\");\n};\n\n/*\nCompare two tiddlers for equality\ntiddler: the tiddler to compare\nexcludeFields: array of field names to exclude from the comparison\n*/\nexports.isEqual = function(tiddler,excludeFields) {\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\treturn false;\n\t}\n\texcludeFields = excludeFields || [];\n\tvar self = this,\n\t\tdifferences = []; // Fields that have differences\n\t// Add to the differences array\n\tfunction addDifference(fieldName) {\n\t\t// Check for this field being excluded\n\t\tif(excludeFields.indexOf(fieldName) === -1) {\n\t\t\t// Save the field as a difference\n\t\t\t$tw.utils.pushTop(differences,fieldName);\n\t\t}\n\t}\n\t// Returns true if the two values of this field are equal\n\tfunction isFieldValueEqual(fieldName) {\n\t\tvar valueA = self.fields[fieldName],\n\t\t\tvalueB = tiddler.fields[fieldName];\n\t\t// Check for identical string values\n\t\tif(typeof(valueA) === \"string\" && typeof(valueB) === \"string\" && valueA === valueB) {\n\t\t\treturn true;\n\t\t}\n\t\t// Check for identical array values\n\t\tif($tw.utils.isArray(valueA) && $tw.utils.isArray(valueB) && $tw.utils.isArrayEqual(valueA,valueB)) {\n\t\t\treturn true;\n\t\t}\n\t\t// Otherwise the fields must be different\n\t\treturn false;\n\t}\n\t// Compare our fields\n\tfor(var fieldName in this.fields) {\n\t\tif(!isFieldValueEqual(fieldName)) {\n\t\t\taddDifference(fieldName);\n\t\t}\n\t}\n\t// There's a difference for every field in the other tiddler that we don't have\n\tfor(fieldName in tiddler.fields) {\n\t\tif(!(fieldName in this.fields)) {\n\t\t\taddDifference(fieldName);\n\t\t}\n\t}\n\t// Return whether there were any differences\n\treturn differences.length === 0;\n};\n\nexports.getFieldDay = function(field) {\n\tif(this.cache && this.cache.day && $tw.utils.hop(this.cache.day,field) ) {\n\t\treturn this.cache.day[field];\n\t}\n\tvar day = \"\";\n\tif(this.fields[field]) {\n\t\tday = (new Date($tw.utils.parseDate(this.fields[field]))).setHours(0,0,0,0);\n\t}\n\tthis.cache.day = this.cache.day || {};\n\tthis.cache.day[field] = day;\n\treturn day;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "tiddlermethod"
},
"$:/core/modules/upgraders/plugins.js": {
"title": "$:/core/modules/upgraders/plugins.js",
"text": "/*\\\ntitle: $:/core/modules/upgraders/plugins.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that checks that plugins are newer than any already installed version\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar BLOCKED_PLUGINS = {\n\t\"$:/themes/tiddlywiki/stickytitles\": {\n\t\tversions: [\"*\"]\n\t},\n\t\"$:/plugins/tiddlywiki/fullscreen\": {\n\t\tversions: [\"*\"]\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {},\n\t\tupgradeLibrary,\n\t\tgetLibraryTiddler = function(title) {\n\t\t\tif(!upgradeLibrary) {\n\t\t\t\tupgradeLibrary = wiki.getTiddlerData(UPGRADE_LIBRARY_TITLE,{});\n\t\t\t\tupgradeLibrary.tiddlers = upgradeLibrary.tiddlers || {};\n\t\t\t}\n\t\t\treturn upgradeLibrary.tiddlers[title];\n\t\t};\n\n\t// Go through all the incoming tiddlers\n\t$tw.utils.each(titles,function(title) {\n\t\tvar incomingTiddler = tiddlers[title];\n\t\t// Check if we're dealing with a plugin\n\t\tif(incomingTiddler && incomingTiddler[\"plugin-type\"] && incomingTiddler.version) {\n\t\t\t// Upgrade the incoming plugin if it is in the upgrade library\n\t\t\tvar libraryTiddler = getLibraryTiddler(title);\n\t\t\tif(libraryTiddler && libraryTiddler[\"plugin-type\"] && libraryTiddler.version) {\n\t\t\t\ttiddlers[title] = libraryTiddler;\n\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Upgraded\",{variables: {incoming: incomingTiddler.version, upgraded: libraryTiddler.version}});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Suppress the incoming plugin if it is older than the currently installed one\n\t\t\tvar existingTiddler = wiki.getTiddler(title);\n\t\t\tif(existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t\t\t// Reject the incoming plugin by blanking all its fields\n\t\t\t\tif($tw.utils.checkVersions(existingTiddler.fields.version,incomingTiddler.version)) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Version\",{variables: {incoming: incomingTiddler.version, existing: existingTiddler.fields.version}});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(incomingTiddler && incomingTiddler[\"plugin-type\"]) {\n\t\t\t// Check whether the plugin is on the blocked list\n\t\t\tvar blockInfo = BLOCKED_PLUGINS[title];\n\t\t\tif(blockInfo) {\n\t\t\t\tif(blockInfo.versions.indexOf(\"*\") !== -1 || (incomingTiddler.version && blockInfo.versions.indexOf(incomingTiddler.version) !== -1)) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Incompatible\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "upgrader"
},
"$:/core/modules/upgraders/system.js": {
"title": "$:/core/modules/upgraders/system.js",
"text": "/*\\\ntitle: $:/core/modules/upgraders/system.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that suppresses certain system tiddlers that shouldn't be imported\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DONT_IMPORT_LIST = [\"$:/StoryList\",\"$:/HistoryList\"],\n\tDONT_IMPORT_PREFIX_LIST = [\"$:/temp/\",\"$:/state/\"];\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {};\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tif(DONT_IMPORT_LIST.indexOf(title) !== -1) {\n\t\t\ttiddlers[title] = Object.create(null);\n\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/System/Suppressed\");\n\t\t} else {\n\t\t\tfor(var t=0; t<DONT_IMPORT_PREFIX_LIST.length; t++) {\n\t\t\t\tvar prefix = DONT_IMPORT_PREFIX_LIST[t];\n\t\t\t\tif(title.substr(0,prefix.length) === prefix) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/State/Suppressed\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "upgrader"
},
"$:/core/modules/upgraders/themetweaks.js": {
"title": "$:/core/modules/upgraders/themetweaks.js",
"text": "/*\\\ntitle: $:/core/modules/upgraders/themetweaks.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that handles the change in theme tweak storage introduced in 5.0.14-beta.\n\nPreviously, theme tweaks were stored in two data tiddlers:\n\n* $:/themes/tiddlywiki/vanilla/metrics\n* $:/themes/tiddlywiki/vanilla/settings\n\nNow, each tweak is stored in its own separate tiddler.\n\nThis upgrader copies any values from the old format to the new. The old data tiddlers are not deleted in case they have been used to store additional indexes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar MAPPINGS = {\n\t\"$:/themes/tiddlywiki/vanilla/metrics\": {\n\t\t\"fontsize\": \"$:/themes/tiddlywiki/vanilla/metrics/fontsize\",\n\t\t\"lineheight\": \"$:/themes/tiddlywiki/vanilla/metrics/lineheight\",\n\t\t\"storyleft\": \"$:/themes/tiddlywiki/vanilla/metrics/storyleft\",\n\t\t\"storytop\": \"$:/themes/tiddlywiki/vanilla/metrics/storytop\",\n\t\t\"storyright\": \"$:/themes/tiddlywiki/vanilla/metrics/storyright\",\n\t\t\"storywidth\": \"$:/themes/tiddlywiki/vanilla/metrics/storywidth\",\n\t\t\"tiddlerwidth\": \"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"\n\t},\n\t\"$:/themes/tiddlywiki/vanilla/settings\": {\n\t\t\"fontfamily\": \"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {};\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tvar mapping = MAPPINGS[title];\n\t\tif(mapping) {\n\t\t\tvar tiddler = new $tw.Tiddler(tiddlers[title]),\n\t\t\t\ttiddlerData = wiki.getTiddlerDataCached(tiddler,{});\n\t\t\tfor(var index in mapping) {\n\t\t\t\tvar mappedTitle = mapping[index];\n\t\t\t\tif(!tiddlers[mappedTitle] || tiddlers[mappedTitle].title !== mappedTitle) {\n\t\t\t\t\ttiddlers[mappedTitle] = {\n\t\t\t\t\t\ttitle: mappedTitle,\n\t\t\t\t\t\ttext: tiddlerData[index]\n\t\t\t\t\t};\n\t\t\t\t\tmessages[mappedTitle] = $tw.language.getString(\"Import/Upgrader/ThemeTweaks/Created\",{variables: {\n\t\t\t\t\t\tfrom: title + \"##\" + index\n\t\t\t\t\t}});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "upgrader"
},
"$:/core/modules/utils/crypto.js": {
"title": "$:/core/modules/utils/crypto.js",
"text": "/*\\\ntitle: $:/core/modules/utils/crypto.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions related to crypto.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for an encrypted store area in the text of a TiddlyWiki file\n*/\nexports.extractEncryptedStoreArea = function(text) {\n\tvar encryptedStoreAreaStartMarker = \"<pre id=\\\"encryptedStoreArea\\\" type=\\\"text/plain\\\" style=\\\"display:none;\\\">\",\n\t\tencryptedStoreAreaStart = text.indexOf(encryptedStoreAreaStartMarker);\n\tif(encryptedStoreAreaStart !== -1) {\n\t\tvar encryptedStoreAreaEnd = text.indexOf(\"</pre>\",encryptedStoreAreaStart);\n\t\tif(encryptedStoreAreaEnd !== -1) {\n\t\t\treturn $tw.utils.htmlDecode(text.substring(encryptedStoreAreaStart + encryptedStoreAreaStartMarker.length,encryptedStoreAreaEnd-1));\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If the password is not provided then the password in the password store will be used\n*/\nexports.decryptStoreArea = function(encryptedStoreArea,password) {\n\tvar decryptedText = $tw.crypto.decrypt(encryptedStoreArea,password);\n\tif(decryptedText) {\n\t\tvar json = JSON.parse(decryptedText),\n\t\t\ttiddlers = [];\n\t\tfor(var title in json) {\n\t\t\tif(title !== \"$:/isEncrypted\") {\n\t\t\t\ttiddlers.push(json[title]);\n\t\t\t}\n\t\t}\n\t\treturn tiddlers;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If that fails, the user is prompted for a password.\nencryptedStoreArea: text of the TiddlyWiki encrypted store area\ncallback: function(tiddlers) called with the array of decrypted tiddlers\n\nThe following configuration settings are supported:\n\n$tw.config.usePasswordVault: causes any password entered by the user to also be put into the system password vault\n*/\nexports.decryptStoreAreaInteractive = function(encryptedStoreArea,callback,options) {\n\t// Try to decrypt with the current password\n\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea);\n\tif(tiddlers) {\n\t\tcallback(tiddlers);\n\t} else {\n\t\t// Prompt for a new password and keep trying\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: \"Enter a password to decrypt the imported TiddlyWiki\",\n\t\t\tnoUserName: true,\n\t\t\tcanCancel: true,\n\t\t\tsubmitText: \"Decrypt\",\n\t\t\tcallback: function(data) {\n\t\t\t\t// Exit if the user cancelled\n\t\t\t\tif(!data) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// Attempt to decrypt the tiddlers\n\t\t\t\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea,data.password);\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tif($tw.config.usePasswordVault) {\n\t\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t\t}\n\t\t\t\t\tcallback(tiddlers);\n\t\t\t\t\t// Exit and remove the password prompt\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\t// We didn't decrypt everything, so continue to prompt for password\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/animations/slide.js": {
"title": "$:/core/modules/utils/dom/animations/slide.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/animations/slide.js\ntype: application/javascript\nmodule-type: animation\n\nA simple slide animation that varies the height of the element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction slideOpen(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration();\n\t// Get the current height of the domNode\n\tvar computedStyle = window.getComputedStyle(domNode),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrPaddingBottom = parseInt(computedStyle.paddingBottom,10),\n\t\tcurrPaddingTop = parseInt(computedStyle.paddingTop,10),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Reset the margin once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"none\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{marginTop: currMarginTop + \"px\"},\n\t\t{paddingBottom: currPaddingBottom + \"px\"},\n\t\t{paddingTop: currPaddingTop + \"px\"},\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n}\n\nfunction slideClosed(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration(),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Clear the properties we've set when the animation is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n}\n\nexports.slide = {\n\topen: slideOpen,\n\tclose: slideClosed\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "animation"
},
"$:/core/modules/utils/dom/animator.js": {
"title": "$:/core/modules/utils/dom/animator.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/animator.js\ntype: application/javascript\nmodule-type: utils\n\nOrchestrates animations and transitions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Animator() {\n\t// Get the registered animation modules\n\tthis.animations = {};\n\t$tw.modules.applyMethods(\"animation\",this.animations);\n}\n\nAnimator.prototype.perform = function(type,domNode,options) {\n\toptions = options || {};\n\t// Find an animation that can handle this type\n\tvar chosenAnimation;\n\t$tw.utils.each(this.animations,function(animation,name) {\n\t\tif($tw.utils.hop(animation,type)) {\n\t\t\tchosenAnimation = animation[type];\n\t\t}\n\t});\n\tif(!chosenAnimation) {\n\t\tchosenAnimation = function(domNode,options) {\n\t\t\tif(options.callback) {\n\t\t\t\toptions.callback();\n\t\t\t}\n\t\t};\n\t}\n\t// Call the animation\n\tchosenAnimation(domNode,options);\n};\n\nexports.Animator = Animator;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/browser.js": {
"title": "$:/core/modules/utils/dom/browser.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/browser.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser feature detection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet style properties of an element\n\telement: dom node\n\tstyles: ordered array of {name: value} pairs\n*/\nexports.setStyle = function(element,styles) {\n\tif(element.nodeType === 1) { // Element.ELEMENT_NODE\n\t\tfor(var t=0; t<styles.length; t++) {\n\t\t\tfor(var styleName in styles[t]) {\n\t\t\t\telement.style[$tw.utils.convertStyleNameToPropertyName(styleName)] = styles[t][styleName];\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nConverts a standard CSS property name into the local browser-specific equivalent. For example:\n\t\"background-color\" --> \"backgroundColor\"\n\t\"transition\" --> \"webkitTransition\"\n*/\n\nvar styleNameCache = {}; // We'll cache the style name conversions\n\nexports.convertStyleNameToPropertyName = function(styleName) {\n\t// Return from the cache if we can\n\tif(styleNameCache[styleName]) {\n\t\treturn styleNameCache[styleName];\n\t}\n\t// Convert it by first removing any hyphens\n\tvar propertyName = $tw.utils.unHyphenateCss(styleName);\n\t// Then check if it needs a prefix\n\tif($tw.browser && document.body.style[propertyName] === undefined) {\n\t\tvar prefixes = [\"O\",\"MS\",\"Moz\",\"webkit\"];\n\t\tfor(var t=0; t<prefixes.length; t++) {\n\t\t\tvar prefixedName = prefixes[t] + propertyName.substr(0,1).toUpperCase() + propertyName.substr(1);\n\t\t\tif(document.body.style[prefixedName] !== undefined) {\n\t\t\t\tpropertyName = prefixedName;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t// Put it in the cache too\n\tstyleNameCache[styleName] = propertyName;\n\treturn propertyName;\n};\n\n/*\nConverts a JS format CSS property name back into the dashed form used in CSS declarations. For example:\n\t\"backgroundColor\" --> \"background-color\"\n\t\"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.convertPropertyNameToStyleName = function(propertyName) {\n\t// Rehyphenate the name\n\tvar styleName = $tw.utils.hyphenateCss(propertyName);\n\t// If there's a webkit prefix, add a dash (other browsers have uppercase prefixes, and so get the dash automatically)\n\tif(styleName.indexOf(\"webkit\") === 0) {\n\t\tstyleName = \"-\" + styleName;\n\t} else if(styleName.indexOf(\"-m-s\") === 0) {\n\t\tstyleName = \"-ms\" + styleName.substr(4);\n\t}\n\treturn styleName;\n};\n\n/*\nRound trip a stylename to a property name and back again. For example:\n\t\"transform\" --> \"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.roundTripPropertyName = function(propertyName) {\n\treturn $tw.utils.convertPropertyNameToStyleName($tw.utils.convertStyleNameToPropertyName(propertyName));\n};\n\n/*\nConverts a standard event name into the local browser specific equivalent. For example:\n\t\"animationEnd\" --> \"webkitAnimationEnd\"\n*/\n\nvar eventNameCache = {}; // We'll cache the conversions\n\nvar eventNameMappings = {\n\t\"transitionEnd\": {\n\t\tcorrespondingCssProperty: \"transition\",\n\t\tmappings: {\n\t\t\ttransition: \"transitionend\",\n\t\t\tOTransition: \"oTransitionEnd\",\n\t\t\tMSTransition: \"msTransitionEnd\",\n\t\t\tMozTransition: \"transitionend\",\n\t\t\twebkitTransition: \"webkitTransitionEnd\"\n\t\t}\n\t},\n\t\"animationEnd\": {\n\t\tcorrespondingCssProperty: \"animation\",\n\t\tmappings: {\n\t\t\tanimation: \"animationend\",\n\t\t\tOAnimation: \"oAnimationEnd\",\n\t\t\tMSAnimation: \"msAnimationEnd\",\n\t\t\tMozAnimation: \"animationend\",\n\t\t\twebkitAnimation: \"webkitAnimationEnd\"\n\t\t}\n\t}\n};\n\nexports.convertEventName = function(eventName) {\n\tif(eventNameCache[eventName]) {\n\t\treturn eventNameCache[eventName];\n\t}\n\tvar newEventName = eventName,\n\t\tmappings = eventNameMappings[eventName];\n\tif(mappings) {\n\t\tvar convertedProperty = $tw.utils.convertStyleNameToPropertyName(mappings.correspondingCssProperty);\n\t\tif(mappings.mappings[convertedProperty]) {\n\t\t\tnewEventName = mappings.mappings[convertedProperty];\n\t\t}\n\t}\n\t// Put it in the cache too\n\teventNameCache[eventName] = newEventName;\n\treturn newEventName;\n};\n\n/*\nReturn the names of the fullscreen APIs\n*/\nexports.getFullScreenApis = function() {\n\tvar d = document,\n\t\tdb = d.body,\n\t\tresult = {\n\t\t\"_requestFullscreen\": db.webkitRequestFullscreen !== undefined ? \"webkitRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.mozRequestFullScreen !== undefined ? \"mozRequestFullScreen\" :\n\t\t\t\t\t\t\tdb.msRequestFullscreen !== undefined ? \"msRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.requestFullscreen !== undefined ? \"requestFullscreen\" : \"\",\n\t\t\"_exitFullscreen\": d.webkitExitFullscreen !== undefined ? \"webkitExitFullscreen\" :\n\t\t\t\t\t\t\td.mozCancelFullScreen !== undefined ? \"mozCancelFullScreen\" :\n\t\t\t\t\t\t\td.msExitFullscreen !== undefined ? \"msExitFullscreen\" :\n\t\t\t\t\t\t\td.exitFullscreen !== undefined ? \"exitFullscreen\" : \"\",\n\t\t\"_fullscreenElement\": d.webkitFullscreenElement !== undefined ? \"webkitFullscreenElement\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozFullScreenElement\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"msFullscreenElement\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenElement\" : \"\",\n\t\t\"_fullscreenChange\": d.webkitFullscreenElement !== undefined ? \"webkitfullscreenchange\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozfullscreenchange\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"MSFullscreenChange\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenchange\" : \"\"\n\t};\n\tif(!result._requestFullscreen || !result._exitFullscreen || !result._fullscreenElement || !result._fullscreenChange) {\n\t\treturn null;\n\t} else {\n\t\treturn result;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/csscolorparser.js": {
"title": "$:/core/modules/utils/dom/csscolorparser.js",
"text": "// (c) Dean McNamee <dean@gmail.com>, 2012.\n//\n// https://github.com/deanm/css-color-parser-js\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n// http://www.w3.org/TR/css3-color/\nvar kCSSColorTable = {\n \"transparent\": [0,0,0,0], \"aliceblue\": [240,248,255,1],\n \"antiquewhite\": [250,235,215,1], \"aqua\": [0,255,255,1],\n \"aquamarine\": [127,255,212,1], \"azure\": [240,255,255,1],\n \"beige\": [245,245,220,1], \"bisque\": [255,228,196,1],\n \"black\": [0,0,0,1], \"blanchedalmond\": [255,235,205,1],\n \"blue\": [0,0,255,1], \"blueviolet\": [138,43,226,1],\n \"brown\": [165,42,42,1], \"burlywood\": [222,184,135,1],\n \"cadetblue\": [95,158,160,1], \"chartreuse\": [127,255,0,1],\n \"chocolate\": [210,105,30,1], \"coral\": [255,127,80,1],\n \"cornflowerblue\": [100,149,237,1], \"cornsilk\": [255,248,220,1],\n \"crimson\": [220,20,60,1], \"cyan\": [0,255,255,1],\n \"darkblue\": [0,0,139,1], \"darkcyan\": [0,139,139,1],\n \"darkgoldenrod\": [184,134,11,1], \"darkgray\": [169,169,169,1],\n \"darkgreen\": [0,100,0,1], \"darkgrey\": [169,169,169,1],\n \"darkkhaki\": [189,183,107,1], \"darkmagenta\": [139,0,139,1],\n \"darkolivegreen\": [85,107,47,1], \"darkorange\": [255,140,0,1],\n \"darkorchid\": [153,50,204,1], \"darkred\": [139,0,0,1],\n \"darksalmon\": [233,150,122,1], \"darkseagreen\": [143,188,143,1],\n \"darkslateblue\": [72,61,139,1], \"darkslategray\": [47,79,79,1],\n \"darkslategrey\": [47,79,79,1], \"darkturquoise\": [0,206,209,1],\n \"darkviolet\": [148,0,211,1], \"deeppink\": [255,20,147,1],\n \"deepskyblue\": [0,191,255,1], \"dimgray\": [105,105,105,1],\n \"dimgrey\": [105,105,105,1], \"dodgerblue\": [30,144,255,1],\n \"firebrick\": [178,34,34,1], \"floralwhite\": [255,250,240,1],\n \"forestgreen\": [34,139,34,1], \"fuchsia\": [255,0,255,1],\n \"gainsboro\": [220,220,220,1], \"ghostwhite\": [248,248,255,1],\n \"gold\": [255,215,0,1], \"goldenrod\": [218,165,32,1],\n \"gray\": [128,128,128,1], \"green\": [0,128,0,1],\n \"greenyellow\": [173,255,47,1], \"grey\": [128,128,128,1],\n \"honeydew\": [240,255,240,1], \"hotpink\": [255,105,180,1],\n \"indianred\": [205,92,92,1], \"indigo\": [75,0,130,1],\n \"ivory\": [255,255,240,1], \"khaki\": [240,230,140,1],\n \"lavender\": [230,230,250,1], \"lavenderblush\": [255,240,245,1],\n \"lawngreen\": [124,252,0,1], \"lemonchiffon\": [255,250,205,1],\n \"lightblue\": [173,216,230,1], \"lightcoral\": [240,128,128,1],\n \"lightcyan\": [224,255,255,1], \"lightgoldenrodyellow\": [250,250,210,1],\n \"lightgray\": [211,211,211,1], \"lightgreen\": [144,238,144,1],\n \"lightgrey\": [211,211,211,1], \"lightpink\": [255,182,193,1],\n \"lightsalmon\": [255,160,122,1], \"lightseagreen\": [32,178,170,1],\n \"lightskyblue\": [135,206,250,1], \"lightslategray\": [119,136,153,1],\n \"lightslategrey\": [119,136,153,1], \"lightsteelblue\": [176,196,222,1],\n \"lightyellow\": [255,255,224,1], \"lime\": [0,255,0,1],\n \"limegreen\": [50,205,50,1], \"linen\": [250,240,230,1],\n \"magenta\": [255,0,255,1], \"maroon\": [128,0,0,1],\n \"mediumaquamarine\": [102,205,170,1], \"mediumblue\": [0,0,205,1],\n \"mediumorchid\": [186,85,211,1], \"mediumpurple\": [147,112,219,1],\n \"mediumseagreen\": [60,179,113,1], \"mediumslateblue\": [123,104,238,1],\n \"mediumspringgreen\": [0,250,154,1], \"mediumturquoise\": [72,209,204,1],\n \"mediumvioletred\": [199,21,133,1], \"midnightblue\": [25,25,112,1],\n \"mintcream\": [245,255,250,1], \"mistyrose\": [255,228,225,1],\n \"moccasin\": [255,228,181,1], \"navajowhite\": [255,222,173,1],\n \"navy\": [0,0,128,1], \"oldlace\": [253,245,230,1],\n \"olive\": [128,128,0,1], \"olivedrab\": [107,142,35,1],\n \"orange\": [255,165,0,1], \"orangered\": [255,69,0,1],\n \"orchid\": [218,112,214,1], \"palegoldenrod\": [238,232,170,1],\n \"palegreen\": [152,251,152,1], \"paleturquoise\": [175,238,238,1],\n \"palevioletred\": [219,112,147,1], \"papayawhip\": [255,239,213,1],\n \"peachpuff\": [255,218,185,1], \"peru\": [205,133,63,1],\n \"pink\": [255,192,203,1], \"plum\": [221,160,221,1],\n \"powderblue\": [176,224,230,1], \"purple\": [128,0,128,1],\n \"red\": [255,0,0,1], \"rosybrown\": [188,143,143,1],\n \"royalblue\": [65,105,225,1], \"saddlebrown\": [139,69,19,1],\n \"salmon\": [250,128,114,1], \"sandybrown\": [244,164,96,1],\n \"seagreen\": [46,139,87,1], \"seashell\": [255,245,238,1],\n \"sienna\": [160,82,45,1], \"silver\": [192,192,192,1],\n \"skyblue\": [135,206,235,1], \"slateblue\": [106,90,205,1],\n \"slategray\": [112,128,144,1], \"slategrey\": [112,128,144,1],\n \"snow\": [255,250,250,1], \"springgreen\": [0,255,127,1],\n \"steelblue\": [70,130,180,1], \"tan\": [210,180,140,1],\n \"teal\": [0,128,128,1], \"thistle\": [216,191,216,1],\n \"tomato\": [255,99,71,1], \"turquoise\": [64,224,208,1],\n \"violet\": [238,130,238,1], \"wheat\": [245,222,179,1],\n \"white\": [255,255,255,1], \"whitesmoke\": [245,245,245,1],\n \"yellow\": [255,255,0,1], \"yellowgreen\": [154,205,50,1]}\n\nfunction clamp_css_byte(i) { // Clamp to integer 0 .. 255.\n i = Math.round(i); // Seems to be what Chrome does (vs truncation).\n return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clamp_css_float(f) { // Clamp to float 0.0 .. 1.0.\n return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parse_css_int(str) { // int or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_byte(parseFloat(str) / 100 * 255);\n return clamp_css_byte(parseInt(str));\n}\n\nfunction parse_css_float(str) { // float or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_float(parseFloat(str) / 100);\n return clamp_css_float(parseFloat(str));\n}\n\nfunction css_hue_to_rgb(m1, m2, h) {\n if (h < 0) h += 1;\n else if (h > 1) h -= 1;\n\n if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;\n if (h * 2 < 1) return m2;\n if (h * 3 < 2) return m1 + (m2 - m1) * (2/3 - h) * 6;\n return m1;\n}\n\nfunction parseCSSColor(css_str) {\n // Remove all whitespace, not compliant, but should just be more accepting.\n var str = css_str.replace(/ /g, '').toLowerCase();\n\n // Color keywords (and transparent) lookup.\n if (str in kCSSColorTable) return kCSSColorTable[str].slice(); // dup.\n\n // #abc and #abc123 syntax.\n if (str[0] === '#') {\n if (str.length === 4) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xfff)) return null; // Covers NaN.\n return [((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n (iv & 0xf0) | ((iv & 0xf0) >> 4),\n (iv & 0xf) | ((iv & 0xf) << 4),\n 1];\n } else if (str.length === 7) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xffffff)) return null; // Covers NaN.\n return [(iv & 0xff0000) >> 16,\n (iv & 0xff00) >> 8,\n iv & 0xff,\n 1];\n }\n\n return null;\n }\n\n var op = str.indexOf('('), ep = str.indexOf(')');\n if (op !== -1 && ep + 1 === str.length) {\n var fname = str.substr(0, op);\n var params = str.substr(op+1, ep-(op+1)).split(',');\n var alpha = 1; // To allow case fallthrough.\n switch (fname) {\n case 'rgba':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'rgb':\n if (params.length !== 3) return null;\n return [parse_css_int(params[0]),\n parse_css_int(params[1]),\n parse_css_int(params[2]),\n alpha];\n case 'hsla':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'hsl':\n if (params.length !== 3) return null;\n var h = (((parseFloat(params[0]) % 360) + 360) % 360) / 360; // 0 .. 1\n // NOTE(deanm): According to the CSS spec s/l should only be\n // percentages, but we don't bother and let float or percentage.\n var s = parse_css_float(params[1]);\n var l = parse_css_float(params[2]);\n var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n var m1 = l * 2 - m2;\n return [clamp_css_byte(css_hue_to_rgb(m1, m2, h+1/3) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h-1/3) * 255),\n alpha];\n default:\n return null;\n }\n }\n\n return null;\n}\n\ntry { exports.parseCSSColor = parseCSSColor } catch(e) { }\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom.js": {
"title": "$:/core/modules/utils/dom.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static DOM-related utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDetermines whether element 'a' contains element 'b'\nCode thanks to John Resig, http://ejohn.org/blog/comparing-document-position/\n*/\nexports.domContains = function(a,b) {\n\treturn a.contains ?\n\t\ta !== b && a.contains(b) :\n\t\t!!(a.compareDocumentPosition(b) & 16);\n};\n\nexports.removeChildren = function(node) {\n\twhile(node.hasChildNodes()) {\n\t\tnode.removeChild(node.firstChild);\n\t}\n};\n\nexports.hasClass = function(el,className) {\n\treturn el && el.className && el.className.toString().split(\" \").indexOf(className) !== -1;\n};\n\nexports.addClass = function(el,className) {\n\tvar c = el.className.split(\" \");\n\tif(c.indexOf(className) === -1) {\n\t\tc.push(className);\n\t}\n\tel.className = c.join(\" \");\n};\n\nexports.removeClass = function(el,className) {\n\tvar c = el.className.split(\" \"),\n\t\tp = c.indexOf(className);\n\tif(p !== -1) {\n\t\tc.splice(p,1);\n\t\tel.className = c.join(\" \");\n\t}\n};\n\nexports.toggleClass = function(el,className,status) {\n\tif(status === undefined) {\n\t\tstatus = !exports.hasClass(el,className);\n\t}\n\tif(status) {\n\t\texports.addClass(el,className);\n\t} else {\n\t\texports.removeClass(el,className);\n\t}\n};\n\n/*\nGet the first parent element that has scrollbars or use the body as fallback.\n*/\nexports.getScrollContainer = function(el) {\n\tvar doc = el.ownerDocument;\n\twhile(el.parentNode) {\t\n\t\tel = el.parentNode;\n\t\tif(el.scrollTop) {\n\t\t\treturn el;\n\t\t}\n\t}\n\treturn doc.body;\n};\n\n/*\nGet the scroll position of the viewport\nReturns:\n\t{\n\t\tx: horizontal scroll position in pixels,\n\t\ty: vertical scroll position in pixels\n\t}\n*/\nexports.getScrollPosition = function() {\n\tif(\"scrollX\" in window) {\n\t\treturn {x: window.scrollX, y: window.scrollY};\n\t} else {\n\t\treturn {x: document.documentElement.scrollLeft, y: document.documentElement.scrollTop};\n\t}\n};\n\n/*\nAdjust the height of a textarea to fit its content, preserving scroll position, and return the height\n*/\nexports.resizeTextAreaToFit = function(domNode,minHeight) {\n\t// Get the scroll container and register the current scroll position\n\tvar container = $tw.utils.getScrollContainer(domNode),\n\t\tscrollTop = container.scrollTop;\n // Measure the specified minimum height\n\tdomNode.style.height = minHeight;\n\tvar measuredHeight = domNode.offsetHeight;\n\t// Set its height to auto so that it snaps to the correct height\n\tdomNode.style.height = \"auto\";\n\t// Calculate the revised height\n\tvar newHeight = Math.max(domNode.scrollHeight + domNode.offsetHeight - domNode.clientHeight,measuredHeight);\n\t// Only try to change the height if it has changed\n\tif(newHeight !== domNode.offsetHeight) {\n\t\tdomNode.style.height = newHeight + \"px\";\n\t\t// Make sure that the dimensions of the textarea are recalculated\n\t\t$tw.utils.forceLayout(domNode);\n\t\t// Set the container to the position we registered at the beginning\n\t\tcontainer.scrollTop = scrollTop;\n\t}\n\treturn newHeight;\n};\n\n/*\nGets the bounding rectangle of an element in absolute page coordinates\n*/\nexports.getBoundingPageRect = function(element) {\n\tvar scrollPos = $tw.utils.getScrollPosition(),\n\t\tclientRect = element.getBoundingClientRect();\n\treturn {\n\t\tleft: clientRect.left + scrollPos.x,\n\t\twidth: clientRect.width,\n\t\tright: clientRect.right + scrollPos.x,\n\t\ttop: clientRect.top + scrollPos.y,\n\t\theight: clientRect.height,\n\t\tbottom: clientRect.bottom + scrollPos.y\n\t};\n};\n\n/*\nSaves a named password in the browser\n*/\nexports.savePassword = function(name,password) {\n\ttry {\n\t\tif(window.localStorage) {\n\t\t\tlocalStorage.setItem(\"tw5-password-\" + name,password);\n\t\t}\n\t} catch(e) {\n\t}\n};\n\n/*\nRetrieve a named password from the browser\n*/\nexports.getPassword = function(name) {\n\ttry {\n\t\treturn window.localStorage ? localStorage.getItem(\"tw5-password-\" + name) : \"\";\n\t} catch(e) {\n\t\treturn \"\";\n\t}\n};\n\n/*\nForce layout of a dom node and its descendents\n*/\nexports.forceLayout = function(element) {\n\tvar dummy = element.offsetWidth;\n};\n\n/*\nPulse an element for debugging purposes\n*/\nexports.pulseElement = function(element) {\n\t// Event handler to remove the class at the end\n\telement.addEventListener($tw.browser.animationEnd,function handler(event) {\n\t\telement.removeEventListener($tw.browser.animationEnd,handler,false);\n\t\t$tw.utils.removeClass(element,\"pulse\");\n\t},false);\n\t// Apply the pulse class\n\t$tw.utils.removeClass(element,\"pulse\");\n\t$tw.utils.forceLayout(element);\n\t$tw.utils.addClass(element,\"pulse\");\n};\n\n/*\nAttach specified event handlers to a DOM node\ndomNode: where to attach the event handlers\nevents: array of event handlers to be added (see below)\nEach entry in the events array is an object with these properties:\nhandlerFunction: optional event handler function\nhandlerObject: optional event handler object\nhandlerMethod: optionally specifies object handler method name (defaults to `handleEvent`)\n*/\nexports.addEventListeners = function(domNode,events) {\n\t$tw.utils.each(events,function(eventInfo) {\n\t\tvar handler;\n\t\tif(eventInfo.handlerFunction) {\n\t\t\thandler = eventInfo.handlerFunction;\n\t\t} else if(eventInfo.handlerObject) {\n\t\t\tif(eventInfo.handlerMethod) {\n\t\t\t\thandler = function(event) {\n\t\t\t\t\teventInfo.handlerObject[eventInfo.handlerMethod].call(eventInfo.handlerObject,event);\n\t\t\t\t};\t\n\t\t\t} else {\n\t\t\t\thandler = eventInfo.handlerObject;\n\t\t\t}\n\t\t}\n\t\tdomNode.addEventListener(eventInfo.name,handler,false);\n\t});\n};\n\n/*\nGet the computed styles applied to an element as an array of strings of individual CSS properties\n*/\nexports.getComputedStyles = function(domNode) {\n\tvar textAreaStyles = window.getComputedStyle(domNode,null),\n\t\tstyleDefs = [],\n\t\tname;\n\tfor(var t=0; t<textAreaStyles.length; t++) {\n\t\tname = textAreaStyles[t];\n\t\tstyleDefs.push(name + \": \" + textAreaStyles.getPropertyValue(name) + \";\");\n\t}\n\treturn styleDefs;\n};\n\n/*\nApply a set of styles passed as an array of strings of individual CSS properties\n*/\nexports.setStyles = function(domNode,styleDefs) {\n\tdomNode.style.cssText = styleDefs.join(\"\");\n};\n\n/*\nCopy the computed styles from a source element to a destination element\n*/\nexports.copyStyles = function(srcDomNode,dstDomNode) {\n\t$tw.utils.setStyles(dstDomNode,$tw.utils.getComputedStyles(srcDomNode));\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/dragndrop.js": {
"title": "$:/core/modules/utils/dom/dragndrop.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/dragndrop.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser data transfer utilities, used with the clipboard and drag and drop\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOptions:\n\ndomNode: dom node to make draggable\ndragImageType: \"pill\" or \"dom\"\ndragTiddlerFn: optional function to retrieve the title of tiddler to drag\ndragFilterFn: optional function to retreive the filter defining a list of tiddlers to drag\nwidget: widget to use as the contect for the filter\n*/\nexports.makeDraggable = function(options) {\n\tvar dragImageType = options.dragImageType || \"dom\",\n\t\tdragImage,\n\t\tdomNode = options.domNode;\n\t// Make the dom node draggable (not necessary for anchor tags)\n\tif((domNode.tagName || \"\").toLowerCase() !== \"a\") {\n\t\tdomNode.setAttribute(\"draggable\",\"true\");\t\t\n\t}\n\t// Add event handlers\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"dragstart\", handlerFunction: function(event) {\n\t\t\t// Collect the tiddlers being dragged\n\t\t\tvar dragTiddler = options.dragTiddlerFn && options.dragTiddlerFn(),\n\t\t\t\tdragFilter = options.dragFilterFn && options.dragFilterFn(),\n\t\t\t\ttitles = dragTiddler ? [dragTiddler] : [];\n\t\t\tif(dragFilter) {\n\t\t\t\ttitles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));\n\t\t\t}\n\t\t\tvar titleString = $tw.utils.stringifyList(titles);\n\t\t\t// Check that we've something to drag\n\t\t\tif(titles.length > 0 && event.target === domNode) {\n\t\t\t\t// Mark the drag in progress\n\t\t\t\t$tw.dragInProgress = domNode;\n\t\t\t\t// Set the dragging class on the element being dragged\n\t\t\t\t$tw.utils.addClass(event.target,\"tc-dragging\");\n\t\t\t\t// Create the drag image elements\n\t\t\t\tdragImage = options.widget.document.createElement(\"div\");\n\t\t\t\tdragImage.className = \"tc-tiddler-dragger\";\n\t\t\t\tvar inner = options.widget.document.createElement(\"div\");\n\t\t\t\tinner.className = \"tc-tiddler-dragger-inner\";\n\t\t\t\tinner.appendChild(options.widget.document.createTextNode(\n\t\t\t\t\ttitles.length === 1 ? \n\t\t\t\t\t\ttitles[0] :\n\t\t\t\t\t\ttitles.length + \" tiddlers\"\n\t\t\t\t));\n\t\t\t\tdragImage.appendChild(inner);\n\t\t\t\toptions.widget.document.body.appendChild(dragImage);\n\t\t\t\t// Set the data transfer properties\n\t\t\t\tvar dataTransfer = event.dataTransfer;\n\t\t\t\t// Set up the image\n\t\t\t\tdataTransfer.effectAllowed = \"all\";\n\t\t\t\tif(dataTransfer.setDragImage) {\n\t\t\t\t\tif(dragImageType === \"pill\") {\n\t\t\t\t\t\tdataTransfer.setDragImage(dragImage.firstChild,-16,-16);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar r = domNode.getBoundingClientRect();\n\t\t\t\t\t\tdataTransfer.setDragImage(domNode,event.clientX-r.left,event.clientY-r.top);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Set up the data transfer\n\t\t\t\tif(dataTransfer.clearData) {\n\t\t\t\t\tdataTransfer.clearData();\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tvar jsonData = [];\n\t\t\t\tif(titles.length > 1) {\n\t\t\t\t\ttitles.forEach(function(title) {\n\t\t\t\t\t\tjsonData.push(options.widget.wiki.getTiddlerAsJson(title));\n\t\t\t\t\t});\n\t\t\t\t\tjsonData = \"[\" + jsonData.join(\",\") + \"]\";\n\t\t\t\t} else {\n\t\t\t\t\tjsonData = options.widget.wiki.getTiddlerAsJson(titles[0]);\n\t\t\t\t}\n\t\t\t\t// IE doesn't like these content types\n\t\t\t\tif(!$tw.browser.isIE) {\n\t\t\t\t\tdataTransfer.setData(\"text/vnd.tiddler\",jsonData);\n\t\t\t\t\tdataTransfer.setData(\"text/plain\",titleString);\n\t\t\t\t\tdataTransfer.setData(\"text/x-moz-url\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\t\t}\n\t\t\t\tdataTransfer.setData(\"URL\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\t\tdataTransfer.setData(\"Text\",titleString);\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t\treturn false;\n\t\t}},\n\t\t{name: \"dragend\", handlerFunction: function(event) {\n\t\t\tif(event.target === domNode) {\n\t\t\t\t$tw.dragInProgress = null;\n\t\t\t\t// Remove the dragging class on the element being dragged\n\t\t\t\t$tw.utils.removeClass(event.target,\"tc-dragging\");\n\t\t\t\t// Delete the drag image element\n\t\t\t\tif(dragImage) {\n\t\t\t\t\tdragImage.parentNode.removeChild(dragImage);\n\t\t\t\t\tdragImage = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}}\n\t]);\n};\n\nexports.importDataTransfer = function(dataTransfer,fallbackTitle,callback) {\n\t// Try each provided data type in turn\n\tfor(var t=0; t<importDataTypes.length; t++) {\n\t\tif(!$tw.browser.isIE || importDataTypes[t].IECompatible) {\n\t\t\t// Get the data\n\t\t\tvar dataType = importDataTypes[t];\n\t\t\t\tvar data = dataTransfer.getData(dataType.type);\n\t\t\t// Import the tiddlers in the data\n\t\t\tif(data !== \"\" && data !== null) {\n\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\tconsole.log(\"Importing data type '\" + dataType.type + \"', data: '\" + data + \"'\")\n\t\t\t\t}\n\t\t\t\tvar tiddlerFields = dataType.toTiddlerFieldsArray(data,fallbackTitle);\n\t\t\t\tcallback(tiddlerFields);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar importDataTypes = [\n\t{type: \"text/vnd.tiddler\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn parseJSONTiddlers(data,fallbackTitle);\n\t}},\n\t{type: \"URL\", IECompatible: true, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn parseJSONTiddlers(match[1],fallbackTitle);\n\t\t} else {\n\t\t\treturn [{title: fallbackTitle, text: data}]; // As URL string\n\t\t}\n\t}},\n\t{type: \"text/x-moz-url\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn parseJSONTiddlers(match[1],fallbackTitle);\n\t\t} else {\n\t\t\treturn [{title: fallbackTitle, text: data}]; // As URL string\n\t\t}\n\t}},\n\t{type: \"text/html\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"text/plain\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"Text\", IECompatible: true, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"text/uri-list\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}}\n];\n\nfunction parseJSONTiddlers(json,fallbackTitle) {\n\tvar data = JSON.parse(json);\n\tif(!$tw.utils.isArray(data)) {\n\t\tdata = [data];\n\t}\n\tdata.forEach(function(fields) {\n\t\tfields.title = fields.title || fallbackTitle;\n\t});\n\treturn data;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/http.js": {
"title": "$:/core/modules/utils/dom/http.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/http.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser HTTP support\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nA quick and dirty HTTP function; to be refactored later. Options are:\n\turl: URL to retrieve\n\ttype: GET, PUT, POST etc\n\tcallback: function invoked with (err,data)\n\treturnProp: string name of the property to return as first argument of callback\n*/\nexports.httpRequest = function(options) {\n\tvar type = options.type || \"GET\",\n\t\theaders = options.headers || {accept: \"application/json\"},\n\t\treturnProp = options.returnProp || \"responseText\",\n\t\trequest = new XMLHttpRequest(),\n\t\tdata = \"\",\n\t\tf,results;\n\t// Massage the data hashmap into a string\n\tif(options.data) {\n\t\tif(typeof options.data === \"string\") { // Already a string\n\t\t\tdata = options.data;\n\t\t} else { // A hashmap of strings\n\t\t\tresults = [];\n\t\t\t$tw.utils.each(options.data,function(dataItem,dataItemTitle) {\n\t\t\t\tresults.push(dataItemTitle + \"=\" + encodeURIComponent(dataItem));\n\t\t\t});\n\t\t\tdata = results.join(\"&\");\n\t\t}\n\t}\n\t// Set up the state change handler\n\trequest.onreadystatechange = function() {\n\t\tif(this.readyState === 4) {\n\t\t\tif(this.status === 200 || this.status === 201 || this.status === 204) {\n\t\t\t\t// Success!\n\t\t\t\toptions.callback(null,this[returnProp],this);\n\t\t\t\treturn;\n\t\t\t}\n\t\t// Something went wrong\n\t\toptions.callback($tw.language.getString(\"Error/XMLHttpRequest\") + \": \" + this.status);\n\t\t}\n\t};\n\t// Make the request\n\trequest.open(type,options.url,true);\n\tif(headers) {\n\t\t$tw.utils.each(headers,function(header,headerTitle,object) {\n\t\t\trequest.setRequestHeader(headerTitle,header);\n\t\t});\n\t}\n\tif(data && !$tw.utils.hop(headers,\"Content-type\")) {\n\t\trequest.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded; charset=UTF-8\");\n\t}\n\ttry {\n\t\trequest.send(data);\n\t} catch(e) {\n\t\toptions.callback(e);\n\t}\n\treturn request;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/keyboard.js": {
"title": "$:/core/modules/utils/dom/keyboard.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/keyboard.js\ntype: application/javascript\nmodule-type: utils\n\nKeyboard utilities; now deprecated. Instead, use $tw.keyboardManager\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n[\"parseKeyDescriptor\",\"checkKeyDescriptor\"].forEach(function(method) {\n\texports[method] = function() {\n\t\tif($tw.keyboardManager) {\n\t\t\treturn $tw.keyboardManager[method].apply($tw.keyboardManager,Array.prototype.slice.call(arguments,0));\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t};\n});\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/modal.js": {
"title": "$:/core/modules/utils/dom/modal.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/modal.js\ntype: application/javascript\nmodule-type: utils\n\nModal message mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Modal = function(wiki) {\n\tthis.wiki = wiki;\n\tthis.modalCount = 0;\n};\n\n/*\nDisplay a modal dialogue\n\ttitle: Title of tiddler to display\n\toptions: see below\nOptions include:\n\tdownloadLink: Text of a big download link to include\n*/\nModal.prototype.display = function(title,options) {\n\toptions = options || {};\n\tvar self = this,\n\t\trefreshHandler,\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\ttiddler = this.wiki.getTiddler(title);\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Create the variables\n\tvar variables = $tw.utils.extend({currentTiddler: title},options.variables);\n\t// Create the wrapper divs\n\tvar wrapper = document.createElement(\"div\"),\n\t\tmodalBackdrop = document.createElement(\"div\"),\n\t\tmodalWrapper = document.createElement(\"div\"),\n\t\tmodalHeader = document.createElement(\"div\"),\n\t\theaderTitle = document.createElement(\"h3\"),\n\t\tmodalBody = document.createElement(\"div\"),\n\t\tmodalLink = document.createElement(\"a\"),\n\t\tmodalFooter = document.createElement(\"div\"),\n\t\tmodalFooterHelp = document.createElement(\"span\"),\n\t\tmodalFooterButtons = document.createElement(\"span\");\n\t// Up the modal count and adjust the body class\n\tthis.modalCount++;\n\tthis.adjustPageClass();\n\t// Add classes\n\t$tw.utils.addClass(wrapper,\"tc-modal-wrapper\");\n\t$tw.utils.addClass(modalBackdrop,\"tc-modal-backdrop\");\n\t$tw.utils.addClass(modalWrapper,\"tc-modal\");\n\t$tw.utils.addClass(modalHeader,\"tc-modal-header\");\n\t$tw.utils.addClass(modalBody,\"tc-modal-body\");\n\t$tw.utils.addClass(modalFooter,\"tc-modal-footer\");\n\t// Join them together\n\twrapper.appendChild(modalBackdrop);\n\twrapper.appendChild(modalWrapper);\n\tmodalHeader.appendChild(headerTitle);\n\tmodalWrapper.appendChild(modalHeader);\n\tmodalWrapper.appendChild(modalBody);\n\tmodalFooter.appendChild(modalFooterHelp);\n\tmodalFooter.appendChild(modalFooterButtons);\n\tmodalWrapper.appendChild(modalFooter);\n\t// Render the title of the message\n\tvar headerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"subtitle\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\tattributes: {\n\t\t\t\ttext: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: title\n\t\t}}}],\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\theaderWidgetNode.render(headerTitle,null);\n\t// Render the body of the message\n\tvar bodyWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\tbodyWidgetNode.render(modalBody,null);\n\t// Setup the link if present\n\tif(options.downloadLink) {\n\t\tmodalLink.href = options.downloadLink;\n\t\tmodalLink.appendChild(document.createTextNode(\"Right-click to save changes\"));\n\t\tmodalBody.appendChild(modalLink);\n\t}\n\t// Render the footer of the message\n\tif(tiddler && tiddler.fields && tiddler.fields.help) {\n\t\tvar link = document.createElement(\"a\");\n\t\tlink.setAttribute(\"href\",tiddler.fields.help);\n\t\tlink.setAttribute(\"target\",\"_blank\");\n\t\tlink.setAttribute(\"rel\",\"noopener noreferrer\");\n\t\tlink.appendChild(document.createTextNode(\"Help\"));\n\t\tmodalFooterHelp.appendChild(link);\n\t\tmodalFooterHelp.style.float = \"left\";\n\t}\n\tvar footerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"footer\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"button\",\n\t\t\tattributes: {\n\t\t\t\tmessage: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: \"tm-close-tiddler\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\tattributes: {\n\t\t\t\t\ttext: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tvalue: $tw.language.getString(\"Buttons/Close/Caption\")\n\t\t\t}}}\n\t\t]}],\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\tfooterWidgetNode.render(modalFooterButtons,null);\n\t// Set up the refresh handler\n\trefreshHandler = function(changes) {\n\t\theaderWidgetNode.refresh(changes,modalHeader,null);\n\t\tbodyWidgetNode.refresh(changes,modalBody,null);\n\t\tfooterWidgetNode.refresh(changes,modalFooterButtons,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Add the close event handler\n\tvar closeHandler = function(event) {\n\t\t// Remove our refresh handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Decrease the modal count and adjust the body class\n\t\tself.modalCount--;\n\t\tself.adjustPageClass();\n\t\t// Force layout and animate the modal message away\n\t\t$tw.utils.forceLayout(modalBackdrop);\n\t\t$tw.utils.forceLayout(modalWrapper);\n\t\t$tw.utils.setStyle(modalBackdrop,[\n\t\t\t{opacity: \"0\"}\n\t\t]);\n\t\t$tw.utils.setStyle(modalWrapper,[\n\t\t\t{transform: \"translateY(\" + window.innerHeight + \"px)\"}\n\t\t]);\n\t\t// Set up an event for the transition end\n\t\twindow.setTimeout(function() {\n\t\t\tif(wrapper.parentNode) {\n\t\t\t\t// Remove the modal message from the DOM\n\t\t\t\tdocument.body.removeChild(wrapper);\n\t\t\t}\n\t\t},duration);\n\t\t// Don't let anyone else handle the tm-close-tiddler message\n\t\treturn false;\n\t};\n\theaderWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tbodyWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tfooterWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\t// Set the initial styles for the message\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-window.innerHeight) + \"px)\"}\n\t]);\n\t// Put the message into the document\n\tdocument.body.appendChild(wrapper);\n\t// Set up animation for the styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{transition: \"opacity \" + duration + \"ms ease-out\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(modalBackdrop);\n\t$tw.utils.forceLayout(modalWrapper);\n\t// Set final animated styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0.7\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n};\n\nModal.prototype.adjustPageClass = function() {\n\tif($tw.pageContainer) {\n\t\t$tw.utils.toggleClass($tw.pageContainer,\"tc-modal-displayed\",this.modalCount > 0);\n\t}\n};\n\nexports.Modal = Modal;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/notifier.js": {
"title": "$:/core/modules/utils/dom/notifier.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/notifier.js\ntype: application/javascript\nmodule-type: utils\n\nNotifier mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Notifier = function(wiki) {\n\tthis.wiki = wiki;\n};\n\n/*\nDisplay a notification\n\ttitle: Title of tiddler containing the notification text\n\toptions: see below\nOptions include:\n*/\nNotifier.prototype.display = function(title,options) {\n\toptions = options || {};\n\t// Create the wrapper divs\n\tvar self = this,\n\t\tnotification = document.createElement(\"div\"),\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\trefreshHandler;\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Add classes\n\t$tw.utils.addClass(notification,\"tc-notification\");\n\t// Create the variables\n\tvar variables = $tw.utils.extend({currentTiddler: title},options.variables);\n\t// Render the body of the notification\n\tvar widgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables,\n\t\timportPageMacros: true});\n\twidgetNode.render(notification,null);\n\trefreshHandler = function(changes) {\n\t\twidgetNode.refresh(changes,notification,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Set the initial styles for the notification\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"0\"},\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-window.innerHeight) + \"px)\"},\n\t\t{transition: \"opacity \" + duration + \"ms ease-out, \" + $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Add the notification to the DOM\n\tdocument.body.appendChild(notification);\n\t// Force layout\n\t$tw.utils.forceLayout(notification);\n\t// Set final animated styles\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n\t// Set a timer to remove the notification\n\twindow.setTimeout(function() {\n\t\t// Remove our change event handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Force layout and animate the notification away\n\t\t$tw.utils.forceLayout(notification);\n\t\t$tw.utils.setStyle(notification,[\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transform: \"translateX(\" + (notification.offsetWidth) + \"px)\"}\n\t\t]);\n\t\t// Remove the modal message from the DOM once the transition ends\n\t\tsetTimeout(function() {\n\t\t\tif(notification.parentNode) {\n\t\t\t\tdocument.body.removeChild(notification);\n\t\t\t}\n\t\t},duration);\n\t},$tw.config.preferences.notificationDuration);\n};\n\nexports.Notifier = Notifier;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/popup.js": {
"title": "$:/core/modules/utils/dom/popup.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/popup.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Popup object prototype that manages popups in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreates a Popup object with these options:\n\trootElement: the DOM element to which the popup zapper should be attached\n*/\nvar Popup = function(options) {\n\toptions = options || {};\n\tthis.rootElement = options.rootElement || document.documentElement;\n\tthis.popups = []; // Array of {title:,wiki:,domNode:} objects\n};\n\n/*\nTrigger a popup open or closed. Parameters are in a hashmap:\n\ttitle: title of the tiddler where the popup details are stored\n\tdomNode: dom node to which the popup will be positioned\n\twiki: wiki\n\tforce: if specified, forces the popup state to true or false (instead of toggling it)\n*/\nPopup.prototype.triggerPopup = function(options) {\n\t// Check if this popup is already active\n\tvar index = this.findPopup(options.title);\n\t// Compute the new state\n\tvar state = index === -1;\n\tif(options.force !== undefined) {\n\t\tstate = options.force;\n\t}\n\t// Show or cancel the popup according to the new state\n\tif(state) {\n\t\tthis.show(options);\n\t} else {\n\t\tthis.cancel(index);\n\t}\n};\n\nPopup.prototype.findPopup = function(title) {\n\tvar index = -1;\n\tfor(var t=0; t<this.popups.length; t++) {\n\t\tif(this.popups[t].title === title) {\n\t\t\tindex = t;\n\t\t}\n\t}\n\treturn index;\n};\n\nPopup.prototype.handleEvent = function(event) {\n\tif(event.type === \"click\") {\n\t\t// Find out what was clicked on\n\t\tvar info = this.popupInfo(event.target),\n\t\t\tcancelLevel = info.popupLevel - 1;\n\t\t// Don't remove the level that was clicked on if we clicked on a handle\n\t\tif(info.isHandle) {\n\t\t\tcancelLevel++;\n\t\t}\n\t\t// Cancel\n\t\tthis.cancel(cancelLevel);\n\t}\n};\n\n/*\nFind the popup level containing a DOM node. Returns:\npopupLevel: count of the number of nested popups containing the specified element\nisHandle: true if the specified element is within a popup handle\n*/\nPopup.prototype.popupInfo = function(domNode) {\n\tvar isHandle = false,\n\t\tpopupCount = 0,\n\t\tnode = domNode;\n\t// First check ancestors to see if we're within a popup handle\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup-handle\")) {\n\t\t\tisHandle = true;\n\t\t\tpopupCount++;\n\t\t}\n\t\tif($tw.utils.hasClass(node,\"tc-popup-keep\")) {\n\t\t\tisHandle = true;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\t// Then count the number of ancestor popups\n\tnode = domNode;\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup\")) {\n\t\t\tpopupCount++;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\tvar info = {\n\t\tpopupLevel: popupCount,\n\t\tisHandle: isHandle\n\t};\n\treturn info;\n};\n\n/*\nDisplay a popup by adding it to the stack\n*/\nPopup.prototype.show = function(options) {\n\t// Find out what was clicked on\n\tvar info = this.popupInfo(options.domNode);\n\t// Cancel any higher level popups\n\tthis.cancel(info.popupLevel);\n\t// Store the popup details if not already there\n\tif(this.findPopup(options.title) === -1) {\n\t\tthis.popups.push({\n\t\t\ttitle: options.title,\n\t\t\twiki: options.wiki,\n\t\t\tdomNode: options.domNode\n\t\t});\n\t}\n\t// Set the state tiddler\n\toptions.wiki.setTextReference(options.title,\n\t\t\t\"(\" + options.domNode.offsetLeft + \",\" + options.domNode.offsetTop + \",\" + \n\t\t\t\toptions.domNode.offsetWidth + \",\" + options.domNode.offsetHeight + \")\");\n\t// Add the click handler if we have any popups\n\tif(this.popups.length > 0) {\n\t\tthis.rootElement.addEventListener(\"click\",this,true);\t\t\n\t}\n};\n\n/*\nCancel all popups at or above a specified level or DOM node\nlevel: popup level to cancel (0 cancels all popups)\n*/\nPopup.prototype.cancel = function(level) {\n\tvar numPopups = this.popups.length;\n\tlevel = Math.max(0,Math.min(level,numPopups));\n\tfor(var t=level; t<numPopups; t++) {\n\t\tvar popup = this.popups.pop();\n\t\tif(popup.title) {\n\t\t\tpopup.wiki.deleteTiddler(popup.title);\n\t\t}\n\t}\n\tif(this.popups.length === 0) {\n\t\tthis.rootElement.removeEventListener(\"click\",this,false);\n\t}\n};\n\n/*\nReturns true if the specified title and text identifies an active popup\n*/\nPopup.prototype.readPopupState = function(text) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/;\n\treturn popupLocationRegExp.test(text);\n};\n\nexports.Popup = Popup;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/scroller.js": {
"title": "$:/core/modules/utils/dom/scroller.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/scroller.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Scroller object prototype that manages scrolling in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nEvent handler for when the `tm-scroll` event hits the document body\n*/\nvar PageScroller = function() {\n\tthis.idRequestFrame = null;\n\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\twindow.webkitRequestAnimationFrame ||\n\t\twindow.mozRequestAnimationFrame ||\n\t\tfunction(callback) {\n\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t};\n\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\twindow.webkitCancelAnimationFrame ||\n\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\twindow.mozCancelAnimationFrame ||\n\t\twindow.mozCancelRequestAnimationFrame ||\n\t\tfunction(id) {\n\t\t\twindow.clearTimeout(id);\n\t\t};\n};\n\nPageScroller.prototype.cancelScroll = function() {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(window,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle an event\n*/\nPageScroller.prototype.handleEvent = function(event) {\n\tif(event.type === \"tm-scroll\") {\n\t\treturn this.scrollIntoView(event.target);\n\t}\n\treturn true;\n};\n\n/*\nHandle a scroll event hitting the page document\n*/\nPageScroller.prototype.scrollIntoView = function(element) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\t// Now get ready to scroll the body\n\tthis.cancelScroll();\n\tthis.startTime = Date.now();\n\tvar scrollPosition = $tw.utils.getScrollPosition();\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar clientBounds = element.getBoundingClientRect(),\n\t\tbounds = {\n\t\t\tleft: clientBounds.left + scrollPosition.x,\n\t\t\ttop: clientBounds.top + scrollPosition.y,\n\t\t\twidth: clientBounds.width,\n\t\t\theight: clientBounds.height\n\t\t};\n\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\t// targetPos/targetSize - position and size of the target element\n\t// currentPos/currentSize - position and size of the current scroll viewport\n\t// returns: new position of the scroll viewport\n\tvar getEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\tvar newPos = currentPos;\n\t\t\t// If the target is above/left of the current view, then scroll to it's top/left\n\t\t\tif(targetPos <= currentPos) {\n\t\t\t\tnewPos = targetPos;\n\t\t\t// If the target is smaller than the window and the scroll position is too far up, then scroll till the target is at the bottom of the window\n\t\t\t} else if(targetSize < currentSize && currentPos < (targetPos + targetSize - currentSize)) {\n\t\t\t\tnewPos = targetPos + targetSize - currentSize;\n\t\t\t// If the target is big, then just scroll to the top\n\t\t\t} else if(currentPos < targetPos) {\n\t\t\t\tnewPos = targetPos;\n\t\t\t// Otherwise, stay where we are\n\t\t\t} else {\n\t\t\t\tnewPos = currentPos;\n\t\t\t}\n\t\t\t// If we are scrolling within 50 pixels of the top/left then snap to zero\n\t\t\tif(newPos < 50) {\n\t\t\t\tnewPos = 0;\n\t\t\t}\n\t\t\treturn newPos;\n\t\t},\n\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,window.innerWidth),\n\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,window.innerHeight);\n\t// Only scroll if the position has changed\n\tif(endX !== scrollPosition.x || endY !== scrollPosition.y) {\n\t\tvar self = this,\n\t\t\tdrawFrame;\n\t\tdrawFrame = function () {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll();\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\twindow.scrollTo(scrollPosition.x + (endX - scrollPosition.x) * t,scrollPosition.y + (endY - scrollPosition.y) * t);\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(window,drawFrame);\n\t\t\t}\n\t\t};\n\t\tdrawFrame();\n\t}\n};\n\nexports.PageScroller = PageScroller;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/edition-info.js": {
"title": "$:/core/modules/utils/edition-info.js",
"text": "/*\\\ntitle: $:/core/modules/utils/edition-info.js\ntype: application/javascript\nmodule-type: utils-node\n\nInformation about the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\nvar editionInfo;\n\nexports.getEditionInfo = function() {\n\tif(!editionInfo) {\n\t\t// Enumerate the edition paths\n\t\tvar editionPaths = $tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar);\n\t\teditionInfo = {};\n\t\tfor(var editionIndex=0; editionIndex<editionPaths.length; editionIndex++) {\n\t\t\tvar editionPath = editionPaths[editionIndex];\n\t\t\t// Enumerate the folders\n\t\t\tvar entries = fs.readdirSync(editionPath);\n\t\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\t\tvar entry = entries[entryIndex];\n\t\t\t\t// Check if directories have a valid tiddlywiki.info\n\t\t\t\tif(!editionInfo[entry] && $tw.utils.isDirectory(path.resolve(editionPath,entry))) {\n\t\t\t\t\tvar info;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tinfo = JSON.parse(fs.readFileSync(path.resolve(editionPath,entry,\"tiddlywiki.info\"),\"utf8\"));\n\t\t\t\t\t} catch(ex) {\n\t\t\t\t\t}\n\t\t\t\t\tif(info) {\n\t\t\t\t\t\teditionInfo[entry] = info;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn editionInfo;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils-node"
},
"$:/core/modules/utils/fakedom.js": {
"title": "$:/core/modules/utils/fakedom.js",
"text": "/*\\\ntitle: $:/core/modules/utils/fakedom.js\ntype: application/javascript\nmodule-type: global\n\nA barebones implementation of DOM interfaces needed by the rendering mechanism.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Sequence number used to enable us to track objects for testing\nvar sequenceNumber = null;\n\nvar bumpSequenceNumber = function(object) {\n\tif(sequenceNumber !== null) {\n\t\tobject.sequenceNumber = sequenceNumber++;\n\t}\n};\n\nvar TW_TextNode = function(text) {\n\tbumpSequenceNumber(this);\n\tthis.textContent = text + \"\";\n};\n\nObject.defineProperty(TW_TextNode.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn 3;\n\t}\n});\n\nObject.defineProperty(TW_TextNode.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\treturn this.textContent.replace(/(\\r?\\n)/g,\"\");\n\t}\n});\n\nvar TW_Element = function(tag,namespace) {\n\tbumpSequenceNumber(this);\n\tthis.isTiddlyWikiFakeDom = true;\n\tthis.tag = tag;\n\tthis.attributes = {};\n\tthis.isRaw = false;\n\tthis.children = [];\n\tthis.style = {};\n\tthis.namespaceURI = namespace || \"http://www.w3.org/1999/xhtml\";\n};\n\nObject.defineProperty(TW_Element.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn 1;\n\t}\n});\n\nTW_Element.prototype.getAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot getAttribute on a raw TW_Element\";\n\t}\n\treturn this.attributes[name];\n};\n\nTW_Element.prototype.setAttribute = function(name,value) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot setAttribute on a raw TW_Element\";\n\t}\n\tthis.attributes[name] = value + \"\";\n};\n\nTW_Element.prototype.setAttributeNS = function(namespace,name,value) {\n\tthis.setAttribute(name,value);\n};\n\nTW_Element.prototype.removeAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot removeAttribute on a raw TW_Element\";\n\t}\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\tdelete this.attributes[name];\n\t}\n};\n\nTW_Element.prototype.appendChild = function(node) {\n\tthis.children.push(node);\n\tnode.parentNode = this;\n};\n\nTW_Element.prototype.insertBefore = function(node,nextSibling) {\n\tif(nextSibling) {\n\t\tvar p = this.children.indexOf(nextSibling);\n\t\tif(p !== -1) {\n\t\t\tthis.children.splice(p,0,node);\n\t\t\tnode.parentNode = this;\n\t\t} else {\n\t\t\tthis.appendChild(node);\n\t\t}\n\t} else {\n\t\tthis.appendChild(node);\n\t}\n};\n\nTW_Element.prototype.removeChild = function(node) {\n\tvar p = this.children.indexOf(node);\n\tif(p !== -1) {\n\t\tthis.children.splice(p,1);\n\t}\n};\n\nTW_Element.prototype.hasChildNodes = function() {\n\treturn !!this.children.length;\n};\n\nObject.defineProperty(TW_Element.prototype, \"childNodes\", {\n\tget: function() {\n\t\treturn this.children;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"firstChild\", {\n\tget: function() {\n\t\treturn this.children[0];\n\t}\n});\n\nTW_Element.prototype.addEventListener = function(type,listener,useCapture) {\n\t// Do nothing\n};\n\nObject.defineProperty(TW_Element.prototype, \"tagName\", {\n\tget: function() {\n\t\treturn this.tag || \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"className\", {\n\tget: function() {\n\t\treturn this.attributes[\"class\"] || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes[\"class\"] = value + \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"value\", {\n\tget: function() {\n\t\treturn this.attributes.value || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes.value = value + \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"outerHTML\", {\n\tget: function() {\n\t\tvar output = [],attr,a,v;\n\t\toutput.push(\"<\",this.tag);\n\t\tif(this.attributes) {\n\t\t\tattr = [];\n\t\t\tfor(a in this.attributes) {\n\t\t\t\tattr.push(a);\n\t\t\t}\n\t\t\tattr.sort();\n\t\t\tfor(a=0; a<attr.length; a++) {\n\t\t\t\tv = this.attributes[attr[a]];\n\t\t\t\tif(v !== undefined) {\n\t\t\t\t\toutput.push(\" \",attr[a],\"=\\\"\",$tw.utils.htmlEncode(v),\"\\\"\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(this.style) {\n\t\t\tvar style = [];\n\t\t\tfor(var s in this.style) {\n\t\t\t\tstyle.push(s + \":\" + this.style[s] + \";\");\n\t\t\t}\n\t\t\tif(style.length > 0) {\n\t\t\t\toutput.push(\" style=\\\"\",style.join(\"\"),\"\\\"\")\n\t\t\t}\n\t\t}\n\t\toutput.push(\">\");\n\t\tif($tw.config.htmlVoidElements.indexOf(this.tag) === -1) {\n\t\t\toutput.push(this.innerHTML);\n\t\t\toutput.push(\"</\",this.tag,\">\");\n\t\t}\n\t\treturn output.join(\"\");\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"innerHTML\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn this.rawHTML;\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tif(node instanceof TW_Element) {\n\t\t\t\t\tb.push(node.outerHTML);\n\t\t\t\t} else if(node instanceof TW_TextNode) {\n\t\t\t\t\tb.push($tw.utils.htmlEncode(node.textContent));\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.isRaw = true;\n\t\tthis.rawHTML = value;\n\t\tthis.rawTextContent = null;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textInnerHTML\", {\n\tset: function(value) {\n\t\tif(this.isRaw) {\n\t\t\tthis.rawTextContent = value;\n\t\t} else {\n\t\t\tthrow \"Cannot set textInnerHTML of a non-raw TW_Element\";\n\t\t}\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\tif(this.rawTextContent === null) {\n\t\t\t\treturn \"\";\n\t\t\t} else {\n\t\t\t\treturn this.rawTextContent;\n\t\t\t}\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.textContent);\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.children = [new TW_TextNode(value)];\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn \"\";\n\t\t} else {\n\t\t\tvar b = [],\n\t\t\t\tisBlock = $tw.config.htmlBlockElements.indexOf(this.tag) !== -1;\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\tif(this.tag === \"li\") {\n\t\t\t\tb.push(\"* \");\n\t\t\t}\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.formattedTextContent);\n\t\t\t});\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\treturn b.join(\"\");\n\t\t}\n\t}\n});\n\nvar document = {\n\tsetSequenceNumber: function(value) {\n\t\tsequenceNumber = value;\n\t},\n\tcreateElementNS: function(namespace,tag) {\n\t\treturn new TW_Element(tag,namespace);\n\t},\n\tcreateElement: function(tag) {\n\t\treturn new TW_Element(tag);\n\t},\n\tcreateTextNode: function(text) {\n\t\treturn new TW_TextNode(text);\n\t},\n\tcompatMode: \"CSS1Compat\", // For KaTeX to know that we're not a browser in quirks mode\n\tisTiddlyWikiFakeDom: true\n};\n\nexports.fakeDocument = document;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/utils/filesystem.js": {
"title": "$:/core/modules/utils/filesystem.js",
"text": "/*\\\ntitle: $:/core/modules/utils/filesystem.js\ntype: application/javascript\nmodule-type: utils-node\n\nFile system utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\n/*\nRecursively (and synchronously) copy a directory and all its content\n*/\nexports.copyDirectory = function(srcPath,dstPath) {\n\t// Remove any trailing path separators\n\tsrcPath = $tw.utils.removeTrailingSeparator(srcPath);\n\tdstPath = $tw.utils.removeTrailingSeparator(dstPath);\n\t// Create the destination directory\n\tvar err = $tw.utils.createDirectory(dstPath);\n\tif(err) {\n\t\treturn err;\n\t}\n\t// Function to copy a folder full of files\n\tvar copy = function(srcPath,dstPath) {\n\t\tvar srcStats = fs.lstatSync(srcPath),\n\t\t\tdstExists = fs.existsSync(dstPath);\n\t\tif(srcStats.isFile()) {\n\t\t\t$tw.utils.copyFile(srcPath,dstPath);\n\t\t} else if(srcStats.isDirectory()) {\n\t\t\tvar items = fs.readdirSync(srcPath);\n\t\t\tfor(var t=0; t<items.length; t++) {\n\t\t\t\tvar item = items[t],\n\t\t\t\t\terr = copy(srcPath + path.sep + item,dstPath + path.sep + item);\n\t\t\t\tif(err) {\n\t\t\t\t\treturn err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tcopy(srcPath,dstPath);\n\treturn null;\n};\n\n/*\nCopy a file\n*/\nvar FILE_BUFFER_LENGTH = 64 * 1024,\n\tfileBuffer;\n\nexports.copyFile = function(srcPath,dstPath) {\n\t// Create buffer if required\n\tif(!fileBuffer) {\n\t\tfileBuffer = new Buffer(FILE_BUFFER_LENGTH);\n\t}\n\t// Create any directories in the destination\n\t$tw.utils.createDirectory(path.dirname(dstPath));\n\t// Copy the file\n\tvar srcFile = fs.openSync(srcPath,\"r\"),\n\t\tdstFile = fs.openSync(dstPath,\"w\"),\n\t\tbytesRead = 1,\n\t\tpos = 0;\n\twhile (bytesRead > 0) {\n\t\tbytesRead = fs.readSync(srcFile,fileBuffer,0,FILE_BUFFER_LENGTH,pos);\n\t\tfs.writeSync(dstFile,fileBuffer,0,bytesRead);\n\t\tpos += bytesRead;\n\t}\n\tfs.closeSync(srcFile);\n\tfs.closeSync(dstFile);\n\treturn null;\n};\n\n/*\nRemove trailing path separator\n*/\nexports.removeTrailingSeparator = function(dirPath) {\n\tvar len = dirPath.length;\n\tif(dirPath.charAt(len-1) === path.sep) {\n\t\tdirPath = dirPath.substr(0,len-1);\n\t}\n\treturn dirPath;\n};\n\n/*\nRecursively create a directory\n*/\nexports.createDirectory = function(dirPath) {\n\tif(dirPath.substr(dirPath.length-1,1) !== path.sep) {\n\t\tdirPath = dirPath + path.sep;\n\t}\n\tvar pos = 1;\n\tpos = dirPath.indexOf(path.sep,pos);\n\twhile(pos !== -1) {\n\t\tvar subDirPath = dirPath.substr(0,pos);\n\t\tif(!$tw.utils.isDirectory(subDirPath)) {\n\t\t\ttry {\n\t\t\t\tfs.mkdirSync(subDirPath);\n\t\t\t} catch(e) {\n\t\t\t\treturn \"Error creating directory '\" + subDirPath + \"'\";\n\t\t\t}\n\t\t}\n\t\tpos = dirPath.indexOf(path.sep,pos + 1);\n\t}\n\treturn null;\n};\n\n/*\nRecursively create directories needed to contain a specified file\n*/\nexports.createFileDirectories = function(filePath) {\n\treturn $tw.utils.createDirectory(path.dirname(filePath));\n};\n\n/*\nRecursively delete a directory\n*/\nexports.deleteDirectory = function(dirPath) {\n\tif(fs.existsSync(dirPath)) {\n\t\tvar entries = fs.readdirSync(dirPath);\n\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\tvar currPath = dirPath + path.sep + entries[entryIndex];\n\t\t\tif(fs.lstatSync(currPath).isDirectory()) {\n\t\t\t\t$tw.utils.deleteDirectory(currPath);\n\t\t\t} else {\n\t\t\t\tfs.unlinkSync(currPath);\n\t\t\t}\n\t\t}\n\tfs.rmdirSync(dirPath);\n\t}\n\treturn null;\n};\n\n/*\nCheck if a path identifies a directory\n*/\nexports.isDirectory = function(dirPath) {\n\treturn fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();\n};\n\n/*\nCheck if a path identifies a directory that is empty\n*/\nexports.isDirectoryEmpty = function(dirPath) {\n\tif(!$tw.utils.isDirectory(dirPath)) {\n\t\treturn false;\n\t}\n\tvar files = fs.readdirSync(dirPath),\n\t\tempty = true;\n\t$tw.utils.each(files,function(file,index) {\n\t\tif(file.charAt(0) !== \".\") {\n\t\t\tempty = false;\n\t\t}\n\t});\n\treturn empty;\n};\n\n/*\nRecursively delete a tree of empty directories\n*/\nexports.deleteEmptyDirs = function(dirpath,callback) {\n\tvar self = this;\n\tfs.readdir(dirpath,function(err,files) {\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\tif(files.length > 0) {\n\t\t\treturn callback(null);\n\t\t}\n\t\tfs.rmdir(dirpath,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.deleteEmptyDirs(path.dirname(dirpath),callback);\n\t\t});\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils-node"
},
"$:/core/modules/utils/logger.js": {
"title": "$:/core/modules/utils/logger.js",
"text": "/*\\\ntitle: $:/core/modules/utils/logger.js\ntype: application/javascript\nmodule-type: utils\n\nA basic logging implementation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ALERT_TAG = \"$:/tags/Alert\";\n\n/*\nMake a new logger\n*/\nfunction Logger(componentName,options) {\n\toptions = options || {};\n\tthis.componentName = componentName || \"\";\n\tthis.colour = options.colour || \"white\";\n\tthis.enable = \"enable\" in options ? options.enable : true;\n}\n\n/*\nLog a message\n*/\nLogger.prototype.log = function(/* args */) {\n\tif(this.enable && console !== undefined && console.log !== undefined) {\n\t\treturn Function.apply.call(console.log, console, [$tw.utils.terminalColour(this.colour),this.componentName + \":\"].concat(Array.prototype.slice.call(arguments,0)).concat($tw.utils.terminalColour()));\n\t}\n};\n\n/*\nAlert a message\n*/\nLogger.prototype.alert = function(/* args */) {\n\tif(this.enable) {\n\t\t// Prepare the text of the alert\n\t\tvar text = Array.prototype.join.call(arguments,\" \");\n\t\t// Create alert tiddlers in the browser\n\t\tif($tw.browser) {\n\t\t\t// Check if there is an existing alert with the same text and the same component\n\t\t\tvar existingAlerts = $tw.wiki.getTiddlersWithTag(ALERT_TAG),\n\t\t\t\talertFields,\n\t\t\t\texistingCount,\n\t\t\t\tself = this;\n\t\t\t$tw.utils.each(existingAlerts,function(title) {\n\t\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\t\tif(tiddler.fields.text === text && tiddler.fields.component === self.componentName && tiddler.fields.modified && (!alertFields || tiddler.fields.modified < alertFields.modified)) {\n\t\t\t\t\t\talertFields = $tw.utils.extend({},tiddler.fields);\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(alertFields) {\n\t\t\t\texistingCount = alertFields.count || 1;\n\t\t\t} else {\n\t\t\t\talertFields = {\n\t\t\t\t\ttitle: $tw.wiki.generateNewTitle(\"$:/temp/alerts/alert\",{prefix: \"\"}),\n\t\t\t\t\ttext: text,\n\t\t\t\t\ttags: [ALERT_TAG],\n\t\t\t\t\tcomponent: this.componentName\n\t\t\t\t};\n\t\t\t\texistingCount = 0;\n\t\t\t}\n\t\t\talertFields.modified = new Date();\n\t\t\tif(++existingCount > 1) {\n\t\t\t\talertFields.count = existingCount;\n\t\t\t} else {\n\t\t\t\talertFields.count = undefined;\n\t\t\t}\n\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler(alertFields));\n\t\t\t// Log the alert as well\n\t\t\tthis.log.apply(this,Array.prototype.slice.call(arguments,0));\n\t\t} else {\n\t\t\t// Print an orange message to the console if not in the browser\n\t\t\tconsole.error(\"\\x1b[1;33m\" + text + \"\\x1b[0m\");\n\t\t}\t\t\n\t}\n};\n\nexports.Logger = Logger;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/parsetree.js": {
"title": "$:/core/modules/utils/parsetree.js",
"text": "/*\\\ntitle: $:/core/modules/utils/parsetree.js\ntype: application/javascript\nmodule-type: utils\n\nParse tree utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.addAttributeToParseTreeNode = function(node,name,value) {\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[name] = {type: \"string\", value: value};\n};\n\nexports.getAttributeValueFromParseTreeNode = function(node,name,defaultValue) {\n\tif(node.attributes && node.attributes[name] && node.attributes[name].value !== undefined) {\n\t\treturn node.attributes[name].value;\n\t}\n\treturn defaultValue;\n};\n\nexports.addClassToParseTreeNode = function(node,classString) {\n\tvar classes = [];\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[\"class\"] = node.attributes[\"class\"] || {type: \"string\", value: \"\"};\n\tif(node.attributes[\"class\"].type === \"string\") {\n\t\tif(node.attributes[\"class\"].value !== \"\") {\n\t\t\tclasses = node.attributes[\"class\"].value.split(\" \");\n\t\t}\n\t\tif(classString !== \"\") {\n\t\t\t$tw.utils.pushTop(classes,classString.split(\" \"));\n\t\t}\n\t\tnode.attributes[\"class\"].value = classes.join(\" \");\n\t}\n};\n\nexports.addStyleToParseTreeNode = function(node,name,value) {\n\t\tnode.attributes = node.attributes || {};\n\t\tnode.attributes.style = node.attributes.style || {type: \"string\", value: \"\"};\n\t\tif(node.attributes.style.type === \"string\") {\n\t\t\tnode.attributes.style.value += name + \":\" + value + \";\";\n\t\t}\n};\n\nexports.findParseTreeNode = function(nodeArray,search) {\n\tfor(var t=0; t<nodeArray.length; t++) {\n\t\tif(nodeArray[t].type === search.type && nodeArray[t].tag === search.tag) {\n\t\t\treturn nodeArray[t];\n\t\t}\n\t}\n\treturn undefined;\n};\n\n/*\nHelper to get the text of a parse tree node or array of nodes\n*/\nexports.getParseTreeText = function getParseTreeText(tree) {\n\tvar output = [];\n\tif($tw.utils.isArray(tree)) {\n\t\t$tw.utils.each(tree,function(node) {\n\t\t\toutput.push(getParseTreeText(node));\n\t\t});\n\t} else {\n\t\tif(tree.type === \"text\") {\n\t\t\toutput.push(tree.text);\n\t\t}\n\t\tif(tree.children) {\n\t\t\treturn getParseTreeText(tree.children);\n\t\t}\n\t}\n\treturn output.join(\"\");\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/performance.js": {
"title": "$:/core/modules/utils/performance.js",
"text": "/*\\\ntitle: $:/core/modules/utils/performance.js\ntype: application/javascript\nmodule-type: global\n\nPerformance measurement.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Performance(enabled) {\n\tthis.enabled = !!enabled;\n\tthis.measures = {}; // Hashmap of current values of measurements\n\tthis.logger = new $tw.utils.Logger(\"performance\");\n}\n\n/*\nWrap performance reporting around a top level function\n*/\nPerformance.prototype.report = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tself.measures = {};\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments);\n\t\t\tself.logger.log(name + \": \" + $tw.utils.timer(startTime).toFixed(2) + \"ms\");\n\t\t\tfor(var m in self.measures) {\n\t\t\t\tself.logger.log(\"+\" + m + \": \" + self.measures[m].toFixed(2) + \"ms\");\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\n/*\nWrap performance measurements around a subfunction\n*/\nPerformance.prototype.measure = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments),\n\t\t\t\tvalue = self.measures[name] || 0;\n\t\t\tself.measures[name] = value + $tw.utils.timer(startTime);\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\nexports.Performance = Performance;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/utils/pluginmaker.js": {
"title": "$:/core/modules/utils/pluginmaker.js",
"text": "/*\\\ntitle: $:/core/modules/utils/pluginmaker.js\ntype: application/javascript\nmodule-type: utils\n\nA quick and dirty way to pack up plugins within the browser.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRepack a plugin, and then delete any non-shadow payload tiddlers\n*/\nexports.repackPlugin = function(title,additionalTiddlers,excludeTiddlers) {\n\tadditionalTiddlers = additionalTiddlers || [];\n\texcludeTiddlers = excludeTiddlers || [];\n\t// Get the plugin tiddler\n\tvar pluginTiddler = $tw.wiki.getTiddler(title);\n\tif(!pluginTiddler) {\n\t\tthrow \"No such tiddler as \" + title;\n\t}\n\t// Extract the JSON\n\tvar jsonPluginTiddler;\n\ttry {\n\t\tjsonPluginTiddler = JSON.parse(pluginTiddler.fields.text);\n\t} catch(e) {\n\t\tthrow \"Cannot parse plugin tiddler \" + title + \"\\n\" + $tw.language.getString(\"Error/Caption\") + \": \" + e;\n\t}\n\t// Get the list of tiddlers\n\tvar tiddlers = Object.keys(jsonPluginTiddler.tiddlers);\n\t// Add the additional tiddlers\n\t$tw.utils.pushTop(tiddlers,additionalTiddlers);\n\t// Remove any excluded tiddlers\n\tfor(var t=tiddlers.length-1; t>=0; t--) {\n\t\tif(excludeTiddlers.indexOf(tiddlers[t]) !== -1) {\n\t\t\ttiddlers.splice(t,1);\n\t\t}\n\t}\n\t// Pack up the tiddlers into a block of JSON\n\tvar plugins = {};\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = $tw.wiki.getTiddler(title),\n\t\t\tfields = {};\n\t\t$tw.utils.each(tiddler.fields,function (value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\tplugins[title] = fields;\n\t});\n\t// Retrieve and bump the version number\n\tvar pluginVersion = $tw.utils.parseVersion(pluginTiddler.getFieldString(\"version\") || \"0.0.0\") || {\n\t\t\tmajor: \"0\",\n\t\t\tminor: \"0\",\n\t\t\tpatch: \"0\"\n\t\t};\n\tpluginVersion.patch++;\n\tvar version = pluginVersion.major + \".\" + pluginVersion.minor + \".\" + pluginVersion.patch;\n\tif(pluginVersion.prerelease) {\n\t\tversion += \"-\" + pluginVersion.prerelease;\n\t}\n\tif(pluginVersion.build) {\n\t\tversion += \"+\" + pluginVersion.build;\n\t}\n\t// Save the tiddler\n\t$tw.wiki.addTiddler(new $tw.Tiddler(pluginTiddler,{text: JSON.stringify({tiddlers: plugins},null,4), version: version}));\n\t// Delete any non-shadow constituent tiddlers\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tif($tw.wiki.tiddlerExists(title)) {\n\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t}\n\t});\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t// Return a heartwarming confirmation\n\treturn \"Plugin \" + title + \" successfully saved\";\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/transliterate.js": {
"title": "$:/core/modules/utils/transliterate.js",
"text": "/*\\\ntitle: $:/core/modules/utils/transliterate.js\ntype: application/javascript\nmodule-type: utils\n\nTransliteration static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nTransliterate string to ASCII\n\n(Some pairs taken from http://semplicewebsites.com/removing-accents-javascript)\n*/\nexports.transliterationPairs = {\n\t\"Á\":\"A\",\n\t\"Ă\":\"A\",\n\t\"Ắ\":\"A\",\n\t\"Ặ\":\"A\",\n\t\"Ằ\":\"A\",\n\t\"Ẳ\":\"A\",\n\t\"Ẵ\":\"A\",\n\t\"Ǎ\":\"A\",\n\t\"Â\":\"A\",\n\t\"Ấ\":\"A\",\n\t\"Ậ\":\"A\",\n\t\"Ầ\":\"A\",\n\t\"Ẩ\":\"A\",\n\t\"Ẫ\":\"A\",\n\t\"Ä\":\"A\",\n\t\"Ǟ\":\"A\",\n\t\"Ȧ\":\"A\",\n\t\"Ǡ\":\"A\",\n\t\"Ạ\":\"A\",\n\t\"Ȁ\":\"A\",\n\t\"À\":\"A\",\n\t\"Ả\":\"A\",\n\t\"Ȃ\":\"A\",\n\t\"Ā\":\"A\",\n\t\"Ą\":\"A\",\n\t\"Å\":\"A\",\n\t\"Ǻ\":\"A\",\n\t\"Ḁ\":\"A\",\n\t\"Ⱥ\":\"A\",\n\t\"Ã\":\"A\",\n\t\"Ꜳ\":\"AA\",\n\t\"Æ\":\"AE\",\n\t\"Ǽ\":\"AE\",\n\t\"Ǣ\":\"AE\",\n\t\"Ꜵ\":\"AO\",\n\t\"Ꜷ\":\"AU\",\n\t\"Ꜹ\":\"AV\",\n\t\"Ꜻ\":\"AV\",\n\t\"Ꜽ\":\"AY\",\n\t\"Ḃ\":\"B\",\n\t\"Ḅ\":\"B\",\n\t\"Ɓ\":\"B\",\n\t\"Ḇ\":\"B\",\n\t\"Ƀ\":\"B\",\n\t\"Ƃ\":\"B\",\n\t\"Ć\":\"C\",\n\t\"Č\":\"C\",\n\t\"Ç\":\"C\",\n\t\"Ḉ\":\"C\",\n\t\"Ĉ\":\"C\",\n\t\"Ċ\":\"C\",\n\t\"Ƈ\":\"C\",\n\t\"Ȼ\":\"C\",\n\t\"Ď\":\"D\",\n\t\"Ḑ\":\"D\",\n\t\"Ḓ\":\"D\",\n\t\"Ḋ\":\"D\",\n\t\"Ḍ\":\"D\",\n\t\"Ɗ\":\"D\",\n\t\"Ḏ\":\"D\",\n\t\"Dz\":\"D\",\n\t\"Dž\":\"D\",\n\t\"Đ\":\"D\",\n\t\"Ƌ\":\"D\",\n\t\"DZ\":\"DZ\",\n\t\"DŽ\":\"DZ\",\n\t\"É\":\"E\",\n\t\"Ĕ\":\"E\",\n\t\"Ě\":\"E\",\n\t\"Ȩ\":\"E\",\n\t\"Ḝ\":\"E\",\n\t\"Ê\":\"E\",\n\t\"Ế\":\"E\",\n\t\"Ệ\":\"E\",\n\t\"Ề\":\"E\",\n\t\"Ể\":\"E\",\n\t\"Ễ\":\"E\",\n\t\"Ḙ\":\"E\",\n\t\"Ë\":\"E\",\n\t\"Ė\":\"E\",\n\t\"Ẹ\":\"E\",\n\t\"Ȅ\":\"E\",\n\t\"È\":\"E\",\n\t\"Ẻ\":\"E\",\n\t\"Ȇ\":\"E\",\n\t\"Ē\":\"E\",\n\t\"Ḗ\":\"E\",\n\t\"Ḕ\":\"E\",\n\t\"Ę\":\"E\",\n\t\"Ɇ\":\"E\",\n\t\"Ẽ\":\"E\",\n\t\"Ḛ\":\"E\",\n\t\"Ꝫ\":\"ET\",\n\t\"Ḟ\":\"F\",\n\t\"Ƒ\":\"F\",\n\t\"Ǵ\":\"G\",\n\t\"Ğ\":\"G\",\n\t\"Ǧ\":\"G\",\n\t\"Ģ\":\"G\",\n\t\"Ĝ\":\"G\",\n\t\"Ġ\":\"G\",\n\t\"Ɠ\":\"G\",\n\t\"Ḡ\":\"G\",\n\t\"Ǥ\":\"G\",\n\t\"Ḫ\":\"H\",\n\t\"Ȟ\":\"H\",\n\t\"Ḩ\":\"H\",\n\t\"Ĥ\":\"H\",\n\t\"Ⱨ\":\"H\",\n\t\"Ḧ\":\"H\",\n\t\"Ḣ\":\"H\",\n\t\"Ḥ\":\"H\",\n\t\"Ħ\":\"H\",\n\t\"Í\":\"I\",\n\t\"Ĭ\":\"I\",\n\t\"Ǐ\":\"I\",\n\t\"Î\":\"I\",\n\t\"Ï\":\"I\",\n\t\"Ḯ\":\"I\",\n\t\"İ\":\"I\",\n\t\"Ị\":\"I\",\n\t\"Ȉ\":\"I\",\n\t\"Ì\":\"I\",\n\t\"Ỉ\":\"I\",\n\t\"Ȋ\":\"I\",\n\t\"Ī\":\"I\",\n\t\"Į\":\"I\",\n\t\"Ɨ\":\"I\",\n\t\"Ĩ\":\"I\",\n\t\"Ḭ\":\"I\",\n\t\"Ꝺ\":\"D\",\n\t\"Ꝼ\":\"F\",\n\t\"Ᵹ\":\"G\",\n\t\"Ꞃ\":\"R\",\n\t\"Ꞅ\":\"S\",\n\t\"Ꞇ\":\"T\",\n\t\"Ꝭ\":\"IS\",\n\t\"Ĵ\":\"J\",\n\t\"Ɉ\":\"J\",\n\t\"Ḱ\":\"K\",\n\t\"Ǩ\":\"K\",\n\t\"Ķ\":\"K\",\n\t\"Ⱪ\":\"K\",\n\t\"Ꝃ\":\"K\",\n\t\"Ḳ\":\"K\",\n\t\"Ƙ\":\"K\",\n\t\"Ḵ\":\"K\",\n\t\"Ꝁ\":\"K\",\n\t\"Ꝅ\":\"K\",\n\t\"Ĺ\":\"L\",\n\t\"Ƚ\":\"L\",\n\t\"Ľ\":\"L\",\n\t\"Ļ\":\"L\",\n\t\"Ḽ\":\"L\",\n\t\"Ḷ\":\"L\",\n\t\"Ḹ\":\"L\",\n\t\"Ⱡ\":\"L\",\n\t\"Ꝉ\":\"L\",\n\t\"Ḻ\":\"L\",\n\t\"Ŀ\":\"L\",\n\t\"Ɫ\":\"L\",\n\t\"Lj\":\"L\",\n\t\"Ł\":\"L\",\n\t\"LJ\":\"LJ\",\n\t\"Ḿ\":\"M\",\n\t\"Ṁ\":\"M\",\n\t\"Ṃ\":\"M\",\n\t\"Ɱ\":\"M\",\n\t\"Ń\":\"N\",\n\t\"Ň\":\"N\",\n\t\"Ņ\":\"N\",\n\t\"Ṋ\":\"N\",\n\t\"Ṅ\":\"N\",\n\t\"Ṇ\":\"N\",\n\t\"Ǹ\":\"N\",\n\t\"Ɲ\":\"N\",\n\t\"Ṉ\":\"N\",\n\t\"Ƞ\":\"N\",\n\t\"Nj\":\"N\",\n\t\"Ñ\":\"N\",\n\t\"NJ\":\"NJ\",\n\t\"Ó\":\"O\",\n\t\"Ŏ\":\"O\",\n\t\"Ǒ\":\"O\",\n\t\"Ô\":\"O\",\n\t\"Ố\":\"O\",\n\t\"Ộ\":\"O\",\n\t\"Ồ\":\"O\",\n\t\"Ổ\":\"O\",\n\t\"Ỗ\":\"O\",\n\t\"Ö\":\"O\",\n\t\"Ȫ\":\"O\",\n\t\"Ȯ\":\"O\",\n\t\"Ȱ\":\"O\",\n\t\"Ọ\":\"O\",\n\t\"Ő\":\"O\",\n\t\"Ȍ\":\"O\",\n\t\"Ò\":\"O\",\n\t\"Ỏ\":\"O\",\n\t\"Ơ\":\"O\",\n\t\"Ớ\":\"O\",\n\t\"Ợ\":\"O\",\n\t\"Ờ\":\"O\",\n\t\"Ở\":\"O\",\n\t\"Ỡ\":\"O\",\n\t\"Ȏ\":\"O\",\n\t\"Ꝋ\":\"O\",\n\t\"Ꝍ\":\"O\",\n\t\"Ō\":\"O\",\n\t\"Ṓ\":\"O\",\n\t\"Ṑ\":\"O\",\n\t\"Ɵ\":\"O\",\n\t\"Ǫ\":\"O\",\n\t\"Ǭ\":\"O\",\n\t\"Ø\":\"O\",\n\t\"Ǿ\":\"O\",\n\t\"Õ\":\"O\",\n\t\"Ṍ\":\"O\",\n\t\"Ṏ\":\"O\",\n\t\"Ȭ\":\"O\",\n\t\"Ƣ\":\"OI\",\n\t\"Ꝏ\":\"OO\",\n\t\"Ɛ\":\"E\",\n\t\"Ɔ\":\"O\",\n\t\"Ȣ\":\"OU\",\n\t\"Ṕ\":\"P\",\n\t\"Ṗ\":\"P\",\n\t\"Ꝓ\":\"P\",\n\t\"Ƥ\":\"P\",\n\t\"Ꝕ\":\"P\",\n\t\"Ᵽ\":\"P\",\n\t\"Ꝑ\":\"P\",\n\t\"Ꝙ\":\"Q\",\n\t\"Ꝗ\":\"Q\",\n\t\"Ŕ\":\"R\",\n\t\"Ř\":\"R\",\n\t\"Ŗ\":\"R\",\n\t\"Ṙ\":\"R\",\n\t\"Ṛ\":\"R\",\n\t\"Ṝ\":\"R\",\n\t\"Ȑ\":\"R\",\n\t\"Ȓ\":\"R\",\n\t\"Ṟ\":\"R\",\n\t\"Ɍ\":\"R\",\n\t\"Ɽ\":\"R\",\n\t\"Ꜿ\":\"C\",\n\t\"Ǝ\":\"E\",\n\t\"Ś\":\"S\",\n\t\"Ṥ\":\"S\",\n\t\"Š\":\"S\",\n\t\"Ṧ\":\"S\",\n\t\"Ş\":\"S\",\n\t\"Ŝ\":\"S\",\n\t\"Ș\":\"S\",\n\t\"Ṡ\":\"S\",\n\t\"Ṣ\":\"S\",\n\t\"Ṩ\":\"S\",\n\t\"Ť\":\"T\",\n\t\"Ţ\":\"T\",\n\t\"Ṱ\":\"T\",\n\t\"Ț\":\"T\",\n\t\"Ⱦ\":\"T\",\n\t\"Ṫ\":\"T\",\n\t\"Ṭ\":\"T\",\n\t\"Ƭ\":\"T\",\n\t\"Ṯ\":\"T\",\n\t\"Ʈ\":\"T\",\n\t\"Ŧ\":\"T\",\n\t\"Ɐ\":\"A\",\n\t\"Ꞁ\":\"L\",\n\t\"Ɯ\":\"M\",\n\t\"Ʌ\":\"V\",\n\t\"Ꜩ\":\"TZ\",\n\t\"Ú\":\"U\",\n\t\"Ŭ\":\"U\",\n\t\"Ǔ\":\"U\",\n\t\"Û\":\"U\",\n\t\"Ṷ\":\"U\",\n\t\"Ü\":\"U\",\n\t\"Ǘ\":\"U\",\n\t\"Ǚ\":\"U\",\n\t\"Ǜ\":\"U\",\n\t\"Ǖ\":\"U\",\n\t\"Ṳ\":\"U\",\n\t\"Ụ\":\"U\",\n\t\"Ű\":\"U\",\n\t\"Ȕ\":\"U\",\n\t\"Ù\":\"U\",\n\t\"Ủ\":\"U\",\n\t\"Ư\":\"U\",\n\t\"Ứ\":\"U\",\n\t\"Ự\":\"U\",\n\t\"Ừ\":\"U\",\n\t\"Ử\":\"U\",\n\t\"Ữ\":\"U\",\n\t\"Ȗ\":\"U\",\n\t\"Ū\":\"U\",\n\t\"Ṻ\":\"U\",\n\t\"Ų\":\"U\",\n\t\"Ů\":\"U\",\n\t\"Ũ\":\"U\",\n\t\"Ṹ\":\"U\",\n\t\"Ṵ\":\"U\",\n\t\"Ꝟ\":\"V\",\n\t\"Ṿ\":\"V\",\n\t\"Ʋ\":\"V\",\n\t\"Ṽ\":\"V\",\n\t\"Ꝡ\":\"VY\",\n\t\"Ẃ\":\"W\",\n\t\"Ŵ\":\"W\",\n\t\"Ẅ\":\"W\",\n\t\"Ẇ\":\"W\",\n\t\"Ẉ\":\"W\",\n\t\"Ẁ\":\"W\",\n\t\"Ⱳ\":\"W\",\n\t\"Ẍ\":\"X\",\n\t\"Ẋ\":\"X\",\n\t\"Ý\":\"Y\",\n\t\"Ŷ\":\"Y\",\n\t\"Ÿ\":\"Y\",\n\t\"Ẏ\":\"Y\",\n\t\"Ỵ\":\"Y\",\n\t\"Ỳ\":\"Y\",\n\t\"Ƴ\":\"Y\",\n\t\"Ỷ\":\"Y\",\n\t\"Ỿ\":\"Y\",\n\t\"Ȳ\":\"Y\",\n\t\"Ɏ\":\"Y\",\n\t\"Ỹ\":\"Y\",\n\t\"Ź\":\"Z\",\n\t\"Ž\":\"Z\",\n\t\"Ẑ\":\"Z\",\n\t\"Ⱬ\":\"Z\",\n\t\"Ż\":\"Z\",\n\t\"Ẓ\":\"Z\",\n\t\"Ȥ\":\"Z\",\n\t\"Ẕ\":\"Z\",\n\t\"Ƶ\":\"Z\",\n\t\"IJ\":\"IJ\",\n\t\"Œ\":\"OE\",\n\t\"ᴀ\":\"A\",\n\t\"ᴁ\":\"AE\",\n\t\"ʙ\":\"B\",\n\t\"ᴃ\":\"B\",\n\t\"ᴄ\":\"C\",\n\t\"ᴅ\":\"D\",\n\t\"ᴇ\":\"E\",\n\t\"ꜰ\":\"F\",\n\t\"ɢ\":\"G\",\n\t\"ʛ\":\"G\",\n\t\"ʜ\":\"H\",\n\t\"ɪ\":\"I\",\n\t\"ʁ\":\"R\",\n\t\"ᴊ\":\"J\",\n\t\"ᴋ\":\"K\",\n\t\"ʟ\":\"L\",\n\t\"ᴌ\":\"L\",\n\t\"ᴍ\":\"M\",\n\t\"ɴ\":\"N\",\n\t\"ᴏ\":\"O\",\n\t\"ɶ\":\"OE\",\n\t\"ᴐ\":\"O\",\n\t\"ᴕ\":\"OU\",\n\t\"ᴘ\":\"P\",\n\t\"ʀ\":\"R\",\n\t\"ᴎ\":\"N\",\n\t\"ᴙ\":\"R\",\n\t\"ꜱ\":\"S\",\n\t\"ᴛ\":\"T\",\n\t\"ⱻ\":\"E\",\n\t\"ᴚ\":\"R\",\n\t\"ᴜ\":\"U\",\n\t\"ᴠ\":\"V\",\n\t\"ᴡ\":\"W\",\n\t\"ʏ\":\"Y\",\n\t\"ᴢ\":\"Z\",\n\t\"á\":\"a\",\n\t\"ă\":\"a\",\n\t\"ắ\":\"a\",\n\t\"ặ\":\"a\",\n\t\"ằ\":\"a\",\n\t\"ẳ\":\"a\",\n\t\"ẵ\":\"a\",\n\t\"ǎ\":\"a\",\n\t\"â\":\"a\",\n\t\"ấ\":\"a\",\n\t\"ậ\":\"a\",\n\t\"ầ\":\"a\",\n\t\"ẩ\":\"a\",\n\t\"ẫ\":\"a\",\n\t\"ä\":\"a\",\n\t\"ǟ\":\"a\",\n\t\"ȧ\":\"a\",\n\t\"ǡ\":\"a\",\n\t\"ạ\":\"a\",\n\t\"ȁ\":\"a\",\n\t\"à\":\"a\",\n\t\"ả\":\"a\",\n\t\"ȃ\":\"a\",\n\t\"ā\":\"a\",\n\t\"ą\":\"a\",\n\t\"ᶏ\":\"a\",\n\t\"ẚ\":\"a\",\n\t\"å\":\"a\",\n\t\"ǻ\":\"a\",\n\t\"ḁ\":\"a\",\n\t\"ⱥ\":\"a\",\n\t\"ã\":\"a\",\n\t\"ꜳ\":\"aa\",\n\t\"æ\":\"ae\",\n\t\"ǽ\":\"ae\",\n\t\"ǣ\":\"ae\",\n\t\"ꜵ\":\"ao\",\n\t\"ꜷ\":\"au\",\n\t\"ꜹ\":\"av\",\n\t\"ꜻ\":\"av\",\n\t\"ꜽ\":\"ay\",\n\t\"ḃ\":\"b\",\n\t\"ḅ\":\"b\",\n\t\"ɓ\":\"b\",\n\t\"ḇ\":\"b\",\n\t\"ᵬ\":\"b\",\n\t\"ᶀ\":\"b\",\n\t\"ƀ\":\"b\",\n\t\"ƃ\":\"b\",\n\t\"ɵ\":\"o\",\n\t\"ć\":\"c\",\n\t\"č\":\"c\",\n\t\"ç\":\"c\",\n\t\"ḉ\":\"c\",\n\t\"ĉ\":\"c\",\n\t\"ɕ\":\"c\",\n\t\"ċ\":\"c\",\n\t\"ƈ\":\"c\",\n\t\"ȼ\":\"c\",\n\t\"ď\":\"d\",\n\t\"ḑ\":\"d\",\n\t\"ḓ\":\"d\",\n\t\"ȡ\":\"d\",\n\t\"ḋ\":\"d\",\n\t\"ḍ\":\"d\",\n\t\"ɗ\":\"d\",\n\t\"ᶑ\":\"d\",\n\t\"ḏ\":\"d\",\n\t\"ᵭ\":\"d\",\n\t\"ᶁ\":\"d\",\n\t\"đ\":\"d\",\n\t\"ɖ\":\"d\",\n\t\"ƌ\":\"d\",\n\t\"ı\":\"i\",\n\t\"ȷ\":\"j\",\n\t\"ɟ\":\"j\",\n\t\"ʄ\":\"j\",\n\t\"dz\":\"dz\",\n\t\"dž\":\"dz\",\n\t\"é\":\"e\",\n\t\"ĕ\":\"e\",\n\t\"ě\":\"e\",\n\t\"ȩ\":\"e\",\n\t\"ḝ\":\"e\",\n\t\"ê\":\"e\",\n\t\"ế\":\"e\",\n\t\"ệ\":\"e\",\n\t\"ề\":\"e\",\n\t\"ể\":\"e\",\n\t\"ễ\":\"e\",\n\t\"ḙ\":\"e\",\n\t\"ë\":\"e\",\n\t\"ė\":\"e\",\n\t\"ẹ\":\"e\",\n\t\"ȅ\":\"e\",\n\t\"è\":\"e\",\n\t\"ẻ\":\"e\",\n\t\"ȇ\":\"e\",\n\t\"ē\":\"e\",\n\t\"ḗ\":\"e\",\n\t\"ḕ\":\"e\",\n\t\"ⱸ\":\"e\",\n\t\"ę\":\"e\",\n\t\"ᶒ\":\"e\",\n\t\"ɇ\":\"e\",\n\t\"ẽ\":\"e\",\n\t\"ḛ\":\"e\",\n\t\"ꝫ\":\"et\",\n\t\"ḟ\":\"f\",\n\t\"ƒ\":\"f\",\n\t\"ᵮ\":\"f\",\n\t\"ᶂ\":\"f\",\n\t\"ǵ\":\"g\",\n\t\"ğ\":\"g\",\n\t\"ǧ\":\"g\",\n\t\"ģ\":\"g\",\n\t\"ĝ\":\"g\",\n\t\"ġ\":\"g\",\n\t\"ɠ\":\"g\",\n\t\"ḡ\":\"g\",\n\t\"ᶃ\":\"g\",\n\t\"ǥ\":\"g\",\n\t\"ḫ\":\"h\",\n\t\"ȟ\":\"h\",\n\t\"ḩ\":\"h\",\n\t\"ĥ\":\"h\",\n\t\"ⱨ\":\"h\",\n\t\"ḧ\":\"h\",\n\t\"ḣ\":\"h\",\n\t\"ḥ\":\"h\",\n\t\"ɦ\":\"h\",\n\t\"ẖ\":\"h\",\n\t\"ħ\":\"h\",\n\t\"ƕ\":\"hv\",\n\t\"í\":\"i\",\n\t\"ĭ\":\"i\",\n\t\"ǐ\":\"i\",\n\t\"î\":\"i\",\n\t\"ï\":\"i\",\n\t\"ḯ\":\"i\",\n\t\"ị\":\"i\",\n\t\"ȉ\":\"i\",\n\t\"ì\":\"i\",\n\t\"ỉ\":\"i\",\n\t\"ȋ\":\"i\",\n\t\"ī\":\"i\",\n\t\"į\":\"i\",\n\t\"ᶖ\":\"i\",\n\t\"ɨ\":\"i\",\n\t\"ĩ\":\"i\",\n\t\"ḭ\":\"i\",\n\t\"ꝺ\":\"d\",\n\t\"ꝼ\":\"f\",\n\t\"ᵹ\":\"g\",\n\t\"ꞃ\":\"r\",\n\t\"ꞅ\":\"s\",\n\t\"ꞇ\":\"t\",\n\t\"ꝭ\":\"is\",\n\t\"ǰ\":\"j\",\n\t\"ĵ\":\"j\",\n\t\"ʝ\":\"j\",\n\t\"ɉ\":\"j\",\n\t\"ḱ\":\"k\",\n\t\"ǩ\":\"k\",\n\t\"ķ\":\"k\",\n\t\"ⱪ\":\"k\",\n\t\"ꝃ\":\"k\",\n\t\"ḳ\":\"k\",\n\t\"ƙ\":\"k\",\n\t\"ḵ\":\"k\",\n\t\"ᶄ\":\"k\",\n\t\"ꝁ\":\"k\",\n\t\"ꝅ\":\"k\",\n\t\"ĺ\":\"l\",\n\t\"ƚ\":\"l\",\n\t\"ɬ\":\"l\",\n\t\"ľ\":\"l\",\n\t\"ļ\":\"l\",\n\t\"ḽ\":\"l\",\n\t\"ȴ\":\"l\",\n\t\"ḷ\":\"l\",\n\t\"ḹ\":\"l\",\n\t\"ⱡ\":\"l\",\n\t\"ꝉ\":\"l\",\n\t\"ḻ\":\"l\",\n\t\"ŀ\":\"l\",\n\t\"ɫ\":\"l\",\n\t\"ᶅ\":\"l\",\n\t\"ɭ\":\"l\",\n\t\"ł\":\"l\",\n\t\"lj\":\"lj\",\n\t\"ſ\":\"s\",\n\t\"ẜ\":\"s\",\n\t\"ẛ\":\"s\",\n\t\"ẝ\":\"s\",\n\t\"ḿ\":\"m\",\n\t\"ṁ\":\"m\",\n\t\"ṃ\":\"m\",\n\t\"ɱ\":\"m\",\n\t\"ᵯ\":\"m\",\n\t\"ᶆ\":\"m\",\n\t\"ń\":\"n\",\n\t\"ň\":\"n\",\n\t\"ņ\":\"n\",\n\t\"ṋ\":\"n\",\n\t\"ȵ\":\"n\",\n\t\"ṅ\":\"n\",\n\t\"ṇ\":\"n\",\n\t\"ǹ\":\"n\",\n\t\"ɲ\":\"n\",\n\t\"ṉ\":\"n\",\n\t\"ƞ\":\"n\",\n\t\"ᵰ\":\"n\",\n\t\"ᶇ\":\"n\",\n\t\"ɳ\":\"n\",\n\t\"ñ\":\"n\",\n\t\"nj\":\"nj\",\n\t\"ó\":\"o\",\n\t\"ŏ\":\"o\",\n\t\"ǒ\":\"o\",\n\t\"ô\":\"o\",\n\t\"ố\":\"o\",\n\t\"ộ\":\"o\",\n\t\"ồ\":\"o\",\n\t\"ổ\":\"o\",\n\t\"ỗ\":\"o\",\n\t\"ö\":\"o\",\n\t\"ȫ\":\"o\",\n\t\"ȯ\":\"o\",\n\t\"ȱ\":\"o\",\n\t\"ọ\":\"o\",\n\t\"ő\":\"o\",\n\t\"ȍ\":\"o\",\n\t\"ò\":\"o\",\n\t\"ỏ\":\"o\",\n\t\"ơ\":\"o\",\n\t\"ớ\":\"o\",\n\t\"ợ\":\"o\",\n\t\"ờ\":\"o\",\n\t\"ở\":\"o\",\n\t\"ỡ\":\"o\",\n\t\"ȏ\":\"o\",\n\t\"ꝋ\":\"o\",\n\t\"ꝍ\":\"o\",\n\t\"ⱺ\":\"o\",\n\t\"ō\":\"o\",\n\t\"ṓ\":\"o\",\n\t\"ṑ\":\"o\",\n\t\"ǫ\":\"o\",\n\t\"ǭ\":\"o\",\n\t\"ø\":\"o\",\n\t\"ǿ\":\"o\",\n\t\"õ\":\"o\",\n\t\"ṍ\":\"o\",\n\t\"ṏ\":\"o\",\n\t\"ȭ\":\"o\",\n\t\"ƣ\":\"oi\",\n\t\"ꝏ\":\"oo\",\n\t\"ɛ\":\"e\",\n\t\"ᶓ\":\"e\",\n\t\"ɔ\":\"o\",\n\t\"ᶗ\":\"o\",\n\t\"ȣ\":\"ou\",\n\t\"ṕ\":\"p\",\n\t\"ṗ\":\"p\",\n\t\"ꝓ\":\"p\",\n\t\"ƥ\":\"p\",\n\t\"ᵱ\":\"p\",\n\t\"ᶈ\":\"p\",\n\t\"ꝕ\":\"p\",\n\t\"ᵽ\":\"p\",\n\t\"ꝑ\":\"p\",\n\t\"ꝙ\":\"q\",\n\t\"ʠ\":\"q\",\n\t\"ɋ\":\"q\",\n\t\"ꝗ\":\"q\",\n\t\"ŕ\":\"r\",\n\t\"ř\":\"r\",\n\t\"ŗ\":\"r\",\n\t\"ṙ\":\"r\",\n\t\"ṛ\":\"r\",\n\t\"ṝ\":\"r\",\n\t\"ȑ\":\"r\",\n\t\"ɾ\":\"r\",\n\t\"ᵳ\":\"r\",\n\t\"ȓ\":\"r\",\n\t\"ṟ\":\"r\",\n\t\"ɼ\":\"r\",\n\t\"ᵲ\":\"r\",\n\t\"ᶉ\":\"r\",\n\t\"ɍ\":\"r\",\n\t\"ɽ\":\"r\",\n\t\"ↄ\":\"c\",\n\t\"ꜿ\":\"c\",\n\t\"ɘ\":\"e\",\n\t\"ɿ\":\"r\",\n\t\"ś\":\"s\",\n\t\"ṥ\":\"s\",\n\t\"š\":\"s\",\n\t\"ṧ\":\"s\",\n\t\"ş\":\"s\",\n\t\"ŝ\":\"s\",\n\t\"ș\":\"s\",\n\t\"ṡ\":\"s\",\n\t\"ṣ\":\"s\",\n\t\"ṩ\":\"s\",\n\t\"ʂ\":\"s\",\n\t\"ᵴ\":\"s\",\n\t\"ᶊ\":\"s\",\n\t\"ȿ\":\"s\",\n\t\"ɡ\":\"g\",\n\t\"ᴑ\":\"o\",\n\t\"ᴓ\":\"o\",\n\t\"ᴝ\":\"u\",\n\t\"ť\":\"t\",\n\t\"ţ\":\"t\",\n\t\"ṱ\":\"t\",\n\t\"ț\":\"t\",\n\t\"ȶ\":\"t\",\n\t\"ẗ\":\"t\",\n\t\"ⱦ\":\"t\",\n\t\"ṫ\":\"t\",\n\t\"ṭ\":\"t\",\n\t\"ƭ\":\"t\",\n\t\"ṯ\":\"t\",\n\t\"ᵵ\":\"t\",\n\t\"ƫ\":\"t\",\n\t\"ʈ\":\"t\",\n\t\"ŧ\":\"t\",\n\t\"ᵺ\":\"th\",\n\t\"ɐ\":\"a\",\n\t\"ᴂ\":\"ae\",\n\t\"ǝ\":\"e\",\n\t\"ᵷ\":\"g\",\n\t\"ɥ\":\"h\",\n\t\"ʮ\":\"h\",\n\t\"ʯ\":\"h\",\n\t\"ᴉ\":\"i\",\n\t\"ʞ\":\"k\",\n\t\"ꞁ\":\"l\",\n\t\"ɯ\":\"m\",\n\t\"ɰ\":\"m\",\n\t\"ᴔ\":\"oe\",\n\t\"ɹ\":\"r\",\n\t\"ɻ\":\"r\",\n\t\"ɺ\":\"r\",\n\t\"ⱹ\":\"r\",\n\t\"ʇ\":\"t\",\n\t\"ʌ\":\"v\",\n\t\"ʍ\":\"w\",\n\t\"ʎ\":\"y\",\n\t\"ꜩ\":\"tz\",\n\t\"ú\":\"u\",\n\t\"ŭ\":\"u\",\n\t\"ǔ\":\"u\",\n\t\"û\":\"u\",\n\t\"ṷ\":\"u\",\n\t\"ü\":\"u\",\n\t\"ǘ\":\"u\",\n\t\"ǚ\":\"u\",\n\t\"ǜ\":\"u\",\n\t\"ǖ\":\"u\",\n\t\"ṳ\":\"u\",\n\t\"ụ\":\"u\",\n\t\"ű\":\"u\",\n\t\"ȕ\":\"u\",\n\t\"ù\":\"u\",\n\t\"ủ\":\"u\",\n\t\"ư\":\"u\",\n\t\"ứ\":\"u\",\n\t\"ự\":\"u\",\n\t\"ừ\":\"u\",\n\t\"ử\":\"u\",\n\t\"ữ\":\"u\",\n\t\"ȗ\":\"u\",\n\t\"ū\":\"u\",\n\t\"ṻ\":\"u\",\n\t\"ų\":\"u\",\n\t\"ᶙ\":\"u\",\n\t\"ů\":\"u\",\n\t\"ũ\":\"u\",\n\t\"ṹ\":\"u\",\n\t\"ṵ\":\"u\",\n\t\"ᵫ\":\"ue\",\n\t\"ꝸ\":\"um\",\n\t\"ⱴ\":\"v\",\n\t\"ꝟ\":\"v\",\n\t\"ṿ\":\"v\",\n\t\"ʋ\":\"v\",\n\t\"ᶌ\":\"v\",\n\t\"ⱱ\":\"v\",\n\t\"ṽ\":\"v\",\n\t\"ꝡ\":\"vy\",\n\t\"ẃ\":\"w\",\n\t\"ŵ\":\"w\",\n\t\"ẅ\":\"w\",\n\t\"ẇ\":\"w\",\n\t\"ẉ\":\"w\",\n\t\"ẁ\":\"w\",\n\t\"ⱳ\":\"w\",\n\t\"ẘ\":\"w\",\n\t\"ẍ\":\"x\",\n\t\"ẋ\":\"x\",\n\t\"ᶍ\":\"x\",\n\t\"ý\":\"y\",\n\t\"ŷ\":\"y\",\n\t\"ÿ\":\"y\",\n\t\"ẏ\":\"y\",\n\t\"ỵ\":\"y\",\n\t\"ỳ\":\"y\",\n\t\"ƴ\":\"y\",\n\t\"ỷ\":\"y\",\n\t\"ỿ\":\"y\",\n\t\"ȳ\":\"y\",\n\t\"ẙ\":\"y\",\n\t\"ɏ\":\"y\",\n\t\"ỹ\":\"y\",\n\t\"ź\":\"z\",\n\t\"ž\":\"z\",\n\t\"ẑ\":\"z\",\n\t\"ʑ\":\"z\",\n\t\"ⱬ\":\"z\",\n\t\"ż\":\"z\",\n\t\"ẓ\":\"z\",\n\t\"ȥ\":\"z\",\n\t\"ẕ\":\"z\",\n\t\"ᵶ\":\"z\",\n\t\"ᶎ\":\"z\",\n\t\"ʐ\":\"z\",\n\t\"ƶ\":\"z\",\n\t\"ɀ\":\"z\",\n\t\"ff\":\"ff\",\n\t\"ffi\":\"ffi\",\n\t\"ffl\":\"ffl\",\n\t\"fi\":\"fi\",\n\t\"fl\":\"fl\",\n\t\"ij\":\"ij\",\n\t\"œ\":\"oe\",\n\t\"st\":\"st\",\n\t\"ₐ\":\"a\",\n\t\"ₑ\":\"e\",\n\t\"ᵢ\":\"i\",\n\t\"ⱼ\":\"j\",\n\t\"ₒ\":\"o\",\n\t\"ᵣ\":\"r\",\n\t\"ᵤ\":\"u\",\n\t\"ᵥ\":\"v\",\n\t\"ₓ\":\"x\",\n\t\"Ё\":\"YO\",\n\t\"Й\":\"I\",\n\t\"Ц\":\"TS\",\n\t\"У\":\"U\",\n\t\"К\":\"K\",\n\t\"Е\":\"E\",\n\t\"Н\":\"N\",\n\t\"Г\":\"G\",\n\t\"Ш\":\"SH\",\n\t\"Щ\":\"SCH\",\n\t\"З\":\"Z\",\n\t\"Х\":\"H\",\n\t\"Ъ\":\"'\",\n\t\"ё\":\"yo\",\n\t\"й\":\"i\",\n\t\"ц\":\"ts\",\n\t\"у\":\"u\",\n\t\"к\":\"k\",\n\t\"е\":\"e\",\n\t\"н\":\"n\",\n\t\"г\":\"g\",\n\t\"ш\":\"sh\",\n\t\"щ\":\"sch\",\n\t\"з\":\"z\",\n\t\"х\":\"h\",\n\t\"ъ\":\"'\",\n\t\"Ф\":\"F\",\n\t\"Ы\":\"I\",\n\t\"В\":\"V\",\n\t\"А\":\"a\",\n\t\"П\":\"P\",\n\t\"Р\":\"R\",\n\t\"О\":\"O\",\n\t\"Л\":\"L\",\n\t\"Д\":\"D\",\n\t\"Ж\":\"ZH\",\n\t\"Э\":\"E\",\n\t\"ф\":\"f\",\n\t\"ы\":\"i\",\n\t\"в\":\"v\",\n\t\"а\":\"a\",\n\t\"п\":\"p\",\n\t\"р\":\"r\",\n\t\"о\":\"o\",\n\t\"л\":\"l\",\n\t\"д\":\"d\",\n\t\"ж\":\"zh\",\n\t\"э\":\"e\",\n\t\"Я\":\"Ya\",\n\t\"Ч\":\"CH\",\n\t\"С\":\"S\",\n\t\"М\":\"M\",\n\t\"И\":\"I\",\n\t\"Т\":\"T\",\n\t\"Ь\":\"'\",\n\t\"Б\":\"B\",\n\t\"Ю\":\"YU\",\n\t\"я\":\"ya\",\n\t\"ч\":\"ch\",\n\t\"с\":\"s\",\n\t\"м\":\"m\",\n\t\"и\":\"i\",\n\t\"т\":\"t\",\n\t\"ь\":\"'\",\n\t\"б\":\"b\",\n\t\"ю\":\"yu\"\n};\n\nexports.transliterate = function(str) {\n\treturn str.replace(/[^A-Za-z0-9\\[\\] ]/g,function(ch) {\n\t\treturn exports.transliterationPairs[ch] || ch\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/utils.js": {
"title": "$:/core/modules/utils/utils.js",
"text": "/*\\\ntitle: $:/core/modules/utils/utils.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDisplay a message, in colour if we're on a terminal\n*/\nexports.log = function(text,colour) {\n\tconsole.log($tw.node ? exports.terminalColour(colour) + text + exports.terminalColour() : text);\n};\n\nexports.terminalColour = function(colour) {\n\tif(!$tw.browser && $tw.node && process.stdout.isTTY) {\n\t\tif(colour) {\n\t\t\tvar code = exports.terminalColourLookup[colour];\n\t\t\tif(code) {\n\t\t\t\treturn \"\\x1b[\" + code + \"m\";\n\t\t\t}\n\t\t} else {\n\t\t\treturn \"\\x1b[0m\"; // Cancel colour\n\t\t}\n\t}\n\treturn \"\";\n};\n\nexports.terminalColourLookup = {\n\t\"black\": \"0;30\",\n\t\"red\": \"0;31\",\n\t\"green\": \"0;32\",\n\t\"brown/orange\": \"0;33\",\n\t\"blue\": \"0;34\",\n\t\"purple\": \"0;35\",\n\t\"cyan\": \"0;36\",\n\t\"light gray\": \"0;37\"\n};\n\n/*\nDisplay a warning, in colour if we're on a terminal\n*/\nexports.warning = function(text) {\n\texports.log(text,\"brown/orange\");\n};\n\n/*\nRepeatedly replaces a substring within a string. Like String.prototype.replace, but without any of the default special handling of $ sequences in the replace string\n*/\nexports.replaceString = function(text,search,replace) {\n\treturn text.replace(search,function() {\n\t\treturn replace;\n\t});\n};\n\n/*\nRepeats a string\n*/\nexports.repeat = function(str,count) {\n\tvar result = \"\";\n\tfor(var t=0;t<count;t++) {\n\t\tresult += str;\n\t}\n\treturn result;\n};\n\n/*\nTrim whitespace from the start and end of a string\nThanks to Steven Levithan, http://blog.stevenlevithan.com/archives/faster-trim-javascript\n*/\nexports.trim = function(str) {\n\tif(typeof str === \"string\") {\n\t\treturn str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\t} else {\n\t\treturn str;\n\t}\n};\n\n/*\nFind the line break preceding a given position in a string\nReturns position immediately after that line break, or the start of the string\n*/\nexports.findPrecedingLineBreak = function(text,pos) {\n\tvar result = text.lastIndexOf(\"\\n\",pos - 1);\n\tif(result === -1) {\n\t\tresult = 0;\n\t} else {\n\t\tresult++;\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nFind the line break following a given position in a string\n*/\nexports.findFollowingLineBreak = function(text,pos) {\n\t// Cut to just past the following line break, or to the end of the text\n\tvar result = text.indexOf(\"\\n\",pos);\n\tif(result === -1) {\n\t\tresult = text.length;\n\t} else {\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nReturn the number of keys in an object\n*/\nexports.count = function(object) {\n\treturn Object.keys(object || {}).length;\n};\n\n/*\nCheck if an array is equal by value and by reference.\n*/\nexports.isArrayEqual = function(array1,array2) {\n\tif(array1 === array2) {\n\t\treturn true;\n\t}\n\tarray1 = array1 || [];\n\tarray2 = array2 || [];\n\tif(array1.length !== array2.length) {\n\t\treturn false;\n\t}\n\treturn array1.every(function(value,index) {\n\t\treturn value === array2[index];\n\t});\n};\n\n/*\nPush entries onto an array, removing them first if they already exist in the array\n\tarray: array to modify (assumed to be free of duplicates)\n\tvalue: a single value to push or an array of values to push\n*/\nexports.pushTop = function(array,value) {\n\tvar t,p;\n\tif($tw.utils.isArray(value)) {\n\t\t// Remove any array entries that are duplicated in the new values\n\t\tif(value.length !== 0) {\n\t\t\tif(array.length !== 0) {\n\t\t\t\tif(value.length < array.length) {\n\t\t\t\t\tfor(t=0; t<value.length; t++) {\n\t\t\t\t\t\tp = array.indexOf(value[t]);\n\t\t\t\t\t\tif(p !== -1) {\n\t\t\t\t\t\t\tarray.splice(p,1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor(t=array.length-1; t>=0; t--) {\n\t\t\t\t\t\tp = value.indexOf(array[t]);\n\t\t\t\t\t\tif(p !== -1) {\n\t\t\t\t\t\t\tarray.splice(t,1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Push the values on top of the main array\n\t\t\tarray.push.apply(array,value);\n\t\t}\n\t} else {\n\t\tp = array.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tarray.splice(p,1);\n\t\t}\n\t\tarray.push(value);\n\t}\n\treturn array;\n};\n\n/*\nRemove entries from an array\n\tarray: array to modify\n\tvalue: a single value to remove, or an array of values to remove\n*/\nexports.removeArrayEntries = function(array,value) {\n\tvar t,p;\n\tif($tw.utils.isArray(value)) {\n\t\tfor(t=0; t<value.length; t++) {\n\t\t\tp = array.indexOf(value[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tarray.splice(p,1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tp = array.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tarray.splice(p,1);\n\t\t}\n\t}\n};\n\n/*\nCheck whether any members of a hashmap are present in another hashmap\n*/\nexports.checkDependencies = function(dependencies,changes) {\n\tvar hit = false;\n\t$tw.utils.each(changes,function(change,title) {\n\t\tif($tw.utils.hop(dependencies,title)) {\n\t\t\thit = true;\n\t\t}\n\t});\n\treturn hit;\n};\n\nexports.extend = function(object /* [, src] */) {\n\t$tw.utils.each(Array.prototype.slice.call(arguments, 1), function(source) {\n\t\tif(source) {\n\t\t\tfor(var property in source) {\n\t\t\t\tobject[property] = source[property];\n\t\t\t}\n\t\t}\n\t});\n\treturn object;\n};\n\nexports.deepCopy = function(object) {\n\tvar result,t;\n\tif($tw.utils.isArray(object)) {\n\t\t// Copy arrays\n\t\tresult = object.slice(0);\n\t} else if(typeof object === \"object\") {\n\t\tresult = {};\n\t\tfor(t in object) {\n\t\t\tif(object[t] !== undefined) {\n\t\t\t\tresult[t] = $tw.utils.deepCopy(object[t]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = object;\n\t}\n\treturn result;\n};\n\nexports.extendDeepCopy = function(object,extendedProperties) {\n\tvar result = $tw.utils.deepCopy(object),t;\n\tfor(t in extendedProperties) {\n\t\tif(extendedProperties[t] !== undefined) {\n\t\t\tresult[t] = $tw.utils.deepCopy(extendedProperties[t]);\n\t\t}\n\t}\n\treturn result;\n};\n\nexports.deepFreeze = function deepFreeze(object) {\n\tvar property, key;\n\tif(object) {\n\t\tObject.freeze(object);\n\t\tfor(key in object) {\n\t\t\tproperty = object[key];\n\t\t\tif($tw.utils.hop(object,key) && (typeof property === \"object\") && !Object.isFrozen(property)) {\n\t\t\t\tdeepFreeze(property);\n\t\t\t}\n\t\t}\n\t}\n};\n\nexports.slowInSlowOut = function(t) {\n\treturn (1 - ((Math.cos(t * Math.PI) + 1) / 2));\n};\n\nexports.formatDateString = function(date,template) {\n\tvar result = \"\",\n\t\tt = template,\n\t\tmatches = [\n\t\t\t[/^0hh12/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getHours12(date));\n\t\t\t}],\n\t\t\t[/^wYYYY/, function() {\n\t\t\t\treturn $tw.utils.getYearForWeekNo(date);\n\t\t\t}],\n\t\t\t[/^hh12/, function() {\n\t\t\t\treturn $tw.utils.getHours12(date);\n\t\t\t}],\n\t\t\t[/^DDth/, function() {\n\t\t\t\treturn date.getDate() + $tw.utils.getDaySuffix(date);\n\t\t\t}],\n\t\t\t[/^YYYY/, function() {\n\t\t\t\treturn date.getFullYear();\n\t\t\t}],\n\t\t\t[/^0hh/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getHours());\n\t\t\t}],\n\t\t\t[/^0mm/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMinutes());\n\t\t\t}],\n\t\t\t[/^0ss/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getSeconds());\n\t\t\t}],\n\t\t\t[/^0XXX/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMilliseconds());\n\t\t\t}],\n\t\t\t[/^0DD/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getDate());\n\t\t\t}],\n\t\t\t[/^0MM/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMonth()+1);\n\t\t\t}],\n\t\t\t[/^0WW/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getWeek(date));\n\t\t\t}],\n\t\t\t[/^ddd/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^mmm/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^DDD/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^MMM/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^TZD/, function() {\n\t\t\t\tvar tz = date.getTimezoneOffset(),\n\t\t\t\tatz = Math.abs(tz);\n\t\t\t\treturn (tz < 0 ? '+' : '-') + $tw.utils.pad(Math.floor(atz / 60)) + ':' + $tw.utils.pad(atz % 60);\n\t\t\t}],\n\t\t\t[/^wYY/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getYearForWeekNo(date) - 2000);\n\t\t\t}],\n\t\t\t[/^[ap]m/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toLowerCase();\n\t\t\t}],\n\t\t\t[/^hh/, function() {\n\t\t\t\treturn date.getHours();\n\t\t\t}],\n\t\t\t[/^mm/, function() {\n\t\t\t\treturn date.getMinutes();\n\t\t\t}],\n\t\t\t[/^ss/, function() {\n\t\t\t\treturn date.getSeconds();\n\t\t\t}],\n\t\t\t[/^XXX/, function() {\n\t\t\t\treturn date.getMilliseconds();\n\t\t\t}],\n\t\t\t[/^[AP]M/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toUpperCase();\n\t\t\t}],\n\t\t\t[/^DD/, function() {\n\t\t\t\treturn date.getDate();\n\t\t\t}],\n\t\t\t[/^MM/, function() {\n\t\t\t\treturn date.getMonth() + 1;\n\t\t\t}],\n\t\t\t[/^WW/, function() {\n\t\t\t\treturn $tw.utils.getWeek(date);\n\t\t\t}],\n\t\t\t[/^YY/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getFullYear() - 2000);\n\t\t\t}]\n\t\t];\n\t// If the user wants everything in UTC, shift the datestamp\n\t// Optimize for format string that essentially means \n\t// 'return raw UTC (tiddlywiki style) date string.'\n\tif(t.indexOf(\"[UTC]\") == 0 ) {\n\t\tif(t == \"[UTC]YYYY0MM0DD0hh0mm0ssXXX\") \n\t\t\treturn $tw.utils.stringifyDate(new Date());\n\t\tvar offset = date.getTimezoneOffset() ; // in minutes\n\t\tdate = new Date(date.getTime()+offset*60*1000) ;\n\t\tt = t.substr(5) ;\n\t} \n\twhile(t.length){\n\t\tvar matchString = \"\";\n\t\t$tw.utils.each(matches, function(m) {\n\t\t\tvar match = m[0].exec(t);\n\t\t\tif(match) {\n\t\t\t\tmatchString = m[1].call();\n\t\t\t\tt = t.substr(match[0].length);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\tif(matchString) {\n\t\t\tresult += matchString;\n\t\t} else {\n\t\t\tresult += t.charAt(0);\n\t\t\tt = t.substr(1);\n\t\t}\n\t}\n\tresult = result.replace(/\\\\(.)/g,\"$1\");\n\treturn result;\n};\n\nexports.getAmPm = function(date) {\n\treturn $tw.language.getString(\"Date/Period/\" + (date.getHours() >= 12 ? \"pm\" : \"am\"));\n};\n\nexports.getDaySuffix = function(date) {\n\treturn $tw.language.getString(\"Date/DaySuffix/\" + date.getDate());\n};\n\nexports.getWeek = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week to calculate weekNo\n\tvar x = new Date(dt.getFullYear(),0,1);\n\tvar n = Math.floor((dt.getTime() - x.getTime()) / 86400000);\n\treturn Math.floor(n / 7) + 1;\n};\n\nexports.getYearForWeekNo = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week\n\treturn dt.getFullYear();\n};\n\nexports.getHours12 = function(date) {\n\tvar h = date.getHours();\n\treturn h > 12 ? h-12 : ( h > 0 ? h : 12 );\n};\n\n/*\nConvert a date delta in milliseconds into a string representation of \"23 seconds ago\", \"27 minutes ago\" etc.\n\tdelta: delta in milliseconds\nReturns an object with these members:\n\tdescription: string describing the delta period\n\tupdatePeriod: time in millisecond until the string will be inaccurate\n*/\nexports.getRelativeDate = function(delta) {\n\tvar futurep = false;\n\tif(delta < 0) {\n\t\tdelta = -1 * delta;\n\t\tfuturep = true;\n\t}\n\tvar units = [\n\t\t{name: \"Years\", duration: 365 * 24 * 60 * 60 * 1000},\n\t\t{name: \"Months\", duration: (365/12) * 24 * 60 * 60 * 1000},\n\t\t{name: \"Days\", duration: 24 * 60 * 60 * 1000},\n\t\t{name: \"Hours\", duration: 60 * 60 * 1000},\n\t\t{name: \"Minutes\", duration: 60 * 1000},\n\t\t{name: \"Seconds\", duration: 1000}\n\t];\n\tfor(var t=0; t<units.length; t++) {\n\t\tvar result = Math.floor(delta / units[t].duration);\n\t\tif(result >= 2) {\n\t\t\treturn {\n\t\t\t\tdelta: delta,\n\t\t\t\tdescription: $tw.language.getString(\n\t\t\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/\" + units[t].name,\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{period: result.toString()}\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t\tupdatePeriod: units[t].duration\n\t\t\t};\n\t\t}\n\t}\n\treturn {\n\t\tdelta: delta,\n\t\tdescription: $tw.language.getString(\n\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/Second\",\n\t\t\t{variables:\n\t\t\t\t{period: \"1\"}\n\t\t\t}\n\t\t),\n\t\tupdatePeriod: 1000\n\t};\n};\n\n// Convert & to \"&\", < to \"<\", > to \">\", \" to \""\"\nexports.htmlEncode = function(s) {\n\tif(s) {\n\t\treturn s.toString().replace(/&/mg,\"&\").replace(/</mg,\"<\").replace(/>/mg,\">\").replace(/\\\"/mg,\""\");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n// Converts all HTML entities to their character equivalents\nexports.entityDecode = function(s) {\n\tvar converter = String.fromCodePoint || String.fromCharCode,\n\t\te = s.substr(1,s.length-2); // Strip the & and the ;\n\tif(e.charAt(0) === \"#\") {\n\t\tif(e.charAt(1) === \"x\" || e.charAt(1) === \"X\") {\n\t\t\treturn converter(parseInt(e.substr(2),16));\t\n\t\t} else {\n\t\t\treturn converter(parseInt(e.substr(1),10));\n\t\t}\n\t} else {\n\t\tvar c = $tw.config.htmlEntities[e];\n\t\tif(c) {\n\t\t\treturn converter(c);\n\t\t} else {\n\t\t\treturn s; // Couldn't convert it as an entity, just return it raw\n\t\t}\n\t}\n};\n\nexports.unescapeLineBreaks = function(s) {\n\treturn s.replace(/\\\\n/mg,\"\\n\").replace(/\\\\b/mg,\" \").replace(/\\\\s/mg,\"\\\\\").replace(/\\r/mg,\"\");\n};\n\n/*\n * Returns an escape sequence for given character. Uses \\x for characters <=\n * 0xFF to save space, \\u for the rest.\n *\n * The code needs to be in sync with th code template in the compilation\n * function for \"action\" nodes.\n */\n// Copied from peg.js, thanks to David Majda\nexports.escape = function(ch) {\n\tvar charCode = ch.charCodeAt(0);\n\tif(charCode <= 0xFF) {\n\t\treturn '\\\\x' + $tw.utils.pad(charCode.toString(16).toUpperCase());\n\t} else {\n\t\treturn '\\\\u' + $tw.utils.pad(charCode.toString(16).toUpperCase(),4);\n\t}\n};\n\n// Turns a string into a legal JavaScript string\n// Copied from peg.js, thanks to David Majda\nexports.stringify = function(s) {\n\t/*\n\t* ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a string\n\t* literal except for the closing quote character, backslash, carriage return,\n\t* line separator, paragraph separator, and line feed. Any character may\n\t* appear in the form of an escape sequence.\n\t*\n\t* For portability, we also escape all non-ASCII characters.\n\t*/\n\treturn (s || \"\")\n\t\t.replace(/\\\\/g, '\\\\\\\\') // backslash\n\t\t.replace(/\"/g, '\\\\\"') // double quote character\n\t\t.replace(/'/g, \"\\\\'\") // single quote character\n\t\t.replace(/\\r/g, '\\\\r') // carriage return\n\t\t.replace(/\\n/g, '\\\\n') // line feed\n\t\t.replace(/[\\x00-\\x1f\\x80-\\uFFFF]/g, exports.escape); // non-ASCII characters\n};\n\n// Turns a string into a legal JSON string\n// Derived from peg.js, thanks to David Majda\nexports.jsonStringify = function(s) {\n\t// See http://www.json.org/\n\treturn (s || \"\")\n\t\t.replace(/\\\\/g, '\\\\\\\\') // backslash\n\t\t.replace(/\"/g, '\\\\\"') // double quote character\n\t\t.replace(/\\r/g, '\\\\r') // carriage return\n\t\t.replace(/\\n/g, '\\\\n') // line feed\n\t\t.replace(/\\x08/g, '\\\\b') // backspace\n\t\t.replace(/\\x0c/g, '\\\\f') // formfeed\n\t\t.replace(/\\t/g, '\\\\t') // tab\n\t\t.replace(/[\\x00-\\x1f\\x80-\\uFFFF]/g,function(s) {\n\t\t\treturn '\\\\u' + $tw.utils.pad(s.charCodeAt(0).toString(16).toUpperCase(),4);\n\t\t}); // non-ASCII characters\n};\n\n/*\nEscape the RegExp special characters with a preceding backslash\n*/\nexports.escapeRegExp = function(s) {\n return s.replace(/[\\-\\/\\\\\\^\\$\\*\\+\\?\\.\\(\\)\\|\\[\\]\\{\\}]/g, '\\\\$&');\n};\n\n// Checks whether a link target is external, i.e. not a tiddler title\nexports.isLinkExternal = function(to) {\n\tvar externalRegExp = /^(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|\"\\\\^]+(?:\\/|\\b)/i;\n\treturn externalRegExp.test(to);\n};\n\nexports.nextTick = function(fn) {\n/*global window: false */\n\tif(typeof process === \"undefined\") {\n\t\t// Apparently it would be faster to use postMessage - http://dbaron.org/log/20100309-faster-timeouts\n\t\twindow.setTimeout(fn,4);\n\t} else {\n\t\tprocess.nextTick(fn);\n\t}\n};\n\n/*\nConvert a hyphenated CSS property name into a camel case one\n*/\nexports.unHyphenateCss = function(propName) {\n\treturn propName.replace(/-([a-z])/gi, function(match0,match1) {\n\t\treturn match1.toUpperCase();\n\t});\n};\n\n/*\nConvert a camelcase CSS property name into a dashed one (\"backgroundColor\" --> \"background-color\")\n*/\nexports.hyphenateCss = function(propName) {\n\treturn propName.replace(/([A-Z])/g, function(match0,match1) {\n\t\treturn \"-\" + match1.toLowerCase();\n\t});\n};\n\n/*\nParse a text reference of one of these forms:\n* title\n* !!field\n* title!!field\n* title##index\n* etc\nReturns an object with the following fields, all optional:\n* title: tiddler title\n* field: tiddler field name\n* index: JSON property index\n*/\nexports.parseTextReference = function(textRef) {\n\t// Separate out the title, field name and/or JSON indices\n\tvar reTextRef = /(?:(.*?)!!(.+))|(?:(.*?)##(.+))|(.*)/mg,\n\t\tmatch = reTextRef.exec(textRef),\n\t\tresult = {};\n\tif(match && reTextRef.lastIndex === textRef.length) {\n\t\t// Return the parts\n\t\tif(match[1]) {\n\t\t\tresult.title = match[1];\n\t\t}\n\t\tif(match[2]) {\n\t\t\tresult.field = match[2];\n\t\t}\n\t\tif(match[3]) {\n\t\t\tresult.title = match[3];\n\t\t}\n\t\tif(match[4]) {\n\t\t\tresult.index = match[4];\n\t\t}\n\t\tif(match[5]) {\n\t\t\tresult.title = match[5];\n\t\t}\n\t} else {\n\t\t// If we couldn't parse it\n\t\tresult.title = textRef\n\t}\n\treturn result;\n};\n\n/*\nChecks whether a string is a valid fieldname\n*/\nexports.isValidFieldName = function(name) {\n\tif(!name || typeof name !== \"string\") {\n\t\treturn false;\n\t}\n\tname = name.toLowerCase().trim();\n\tvar fieldValidatorRegEx = /^[a-z0-9\\-\\._]+$/mg;\n\treturn fieldValidatorRegEx.test(name);\n};\n\n/*\nExtract the version number from the meta tag or from the boot file\n*/\n\n// Browser version\nexports.extractVersionInfo = function() {\n\tif($tw.packageInfo) {\n\t\treturn $tw.packageInfo.version;\n\t} else {\n\t\tvar metatags = document.getElementsByTagName(\"meta\");\n\t\tfor(var t=0; t<metatags.length; t++) {\n\t\t\tvar m = metatags[t];\n\t\t\tif(m.name === \"tiddlywiki-version\") {\n\t\t\t\treturn m.content;\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the animation duration in ms\n*/\nexports.getAnimationDuration = function() {\n\treturn parseInt($tw.wiki.getTiddlerText(\"$:/config/AnimationDuration\",\"400\"),10);\n};\n\n/*\nHash a string to a number\nDerived from http://stackoverflow.com/a/15710692\n*/\nexports.hashString = function(str) {\n\treturn str.split(\"\").reduce(function(a,b) {\n\t\ta = ((a << 5) - a) + b.charCodeAt(0);\n\t\treturn a & a;\n\t},0);\n};\n\n/*\nDecode a base64 string\n*/\nexports.base64Decode = function(string64) {\n\tif($tw.browser) {\n\t\t// TODO\n\t\tthrow \"$tw.utils.base64Decode() doesn't work in the browser\";\n\t} else {\n\t\treturn (new Buffer(string64,\"base64\")).toString();\n\t}\n};\n\n/*\nConvert a hashmap into a tiddler dictionary format sequence of name:value pairs\n*/\nexports.makeTiddlerDictionary = function(data) {\n\tvar output = [];\n\tfor(var name in data) {\n\t\toutput.push(name + \": \" + data[name]);\n\t}\n\treturn output.join(\"\\n\");\n};\n\n/*\nHigh resolution microsecond timer for profiling\n*/\nexports.timer = function(base) {\n\tvar m;\n\tif($tw.node) {\n\t\tvar r = process.hrtime();\t\t\n\t\tm = r[0] * 1e3 + (r[1] / 1e6);\n\t} else if(window.performance) {\n\t\tm = performance.now();\n\t} else {\n\t\tm = Date.now();\n\t}\n\tif(typeof base !== \"undefined\") {\n\t\tm = m - base;\n\t}\n\treturn m;\n};\n\n/*\nConvert text and content type to a data URI\n*/\nexports.makeDataUri = function(text,type) {\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar typeInfo = $tw.config.contentTypeInfo[type] || $tw.config.contentTypeInfo[\"text/plain\"],\n\t\tisBase64 = typeInfo.encoding === \"base64\",\n\t\tparts = [];\n\tparts.push(\"data:\");\n\tparts.push(type);\n\tparts.push(isBase64 ? \";base64\" : \"\");\n\tparts.push(\",\");\n\tparts.push(isBase64 ? text : encodeURIComponent(text));\n\treturn parts.join(\"\");\n};\n\n/*\nUseful for finding out the fully escaped CSS selector equivalent to a given tag. For example:\n\n$tw.utils.tagToCssSelector(\"$:/tags/Stylesheet\") --> tc-tagged-\\%24\\%3A\\%2Ftags\\%2FStylesheet\n*/\nexports.tagToCssSelector = function(tagName) {\n\treturn \"tc-tagged-\" + encodeURIComponent(tagName).replace(/[!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^`{\\|}~,]/mg,function(c) {\n\t\treturn \"\\\\\" + c;\n\t});\n};\n\n/*\nIE does not have sign function\n*/\nexports.sign = Math.sign || function(x) {\n\tx = +x; // convert to a number\n\tif (x === 0 || isNaN(x)) {\n\t\treturn x;\n\t}\n\treturn x > 0 ? 1 : -1;\n};\n\n/*\nIE does not have an endsWith function\n*/\nexports.strEndsWith = function(str,ending,position) {\n\tif(str.endsWith) {\n\t\treturn str.endsWith(ending,position);\n\t} else {\n\t\tif (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > str.length) {\n\t\t\tposition = str.length;\n\t\t}\n\t\tposition -= ending.length;\n\t\tvar lastIndex = str.indexOf(ending, position);\n\t\treturn lastIndex !== -1 && lastIndex === position;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/widgets/action-createtiddler.js": {
"title": "$:/core/modules/widgets/action-createtiddler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-createtiddler.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to create a new tiddler with a unique name and specified fields.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CreateTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCreateTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCreateTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nCreateTiddlerWidget.prototype.execute = function() {\n\tthis.actionBaseTitle = this.getAttribute(\"$basetitle\");\n\tthis.actionSaveTitle = this.getAttribute(\"$savetitle\");\n\tthis.actionTimestamp = this.getAttribute(\"$timestamp\",\"yes\") === \"yes\";\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nCreateTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nCreateTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar title = this.wiki.generateNewTitle(this.actionBaseTitle),\n\t\tfields = {},\n\t\tcreationFields,\n\t\tmodificationFields;\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tfields[name] = attribute;\n\t\t}\n\t});\n\tif(this.actionTimestamp) {\n\t\tcreationFields = this.wiki.getCreationFields();\n\t\tmodificationFields = this.wiki.getModificationFields();\n\t}\n\tvar tiddler = this.wiki.addTiddler(new $tw.Tiddler(creationFields,fields,modificationFields,{title: title}));\n\tif(this.actionSaveTitle) {\n\t\tthis.wiki.setTextReference(this.actionSaveTitle,title,this.getVariable(\"currentTiddler\"));\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-createtiddler\"] = CreateTiddlerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-deletefield.js": {
"title": "$:/core/modules/widgets/action-deletefield.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-deletefield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete fields of a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\ttiddler = this.wiki.getTiddler(self.actionTiddler),\n\t\tremoveFields = {},\n\t\thasChanged = false;\n\tif(this.actionField) {\n\t\tremoveFields[this.actionField] = undefined;\n\t\tif(this.actionField in tiddler.fields) {\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\tif(tiddler) {\n\t\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\t\tif(name.charAt(0) !== \"$\" && name !== \"title\") {\n\t\t\t\tremoveFields[name] = undefined;\n\t\t\t\thasChanged = true;\n\t\t\t}\n\t\t});\n\t\tif(hasChanged) {\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,removeFields,this.wiki.getModificationFields()));\t\t\t\n\t\t}\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletefield\"] = DeleteFieldWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-deletetiddler.js": {
"title": "$:/core/modules/widgets/action-deletetiddler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-deletetiddler.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteTiddlerWidget.prototype.execute = function() {\n\tthis.actionFilter = this.getAttribute(\"$filter\");\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$filter\"] || changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar tiddlers = [];\n\tif(this.actionFilter) {\n\t\ttiddlers = this.wiki.filterTiddlers(this.actionFilter,this);\n\t}\n\tif(this.actionTiddler) {\n\t\ttiddlers.push(this.actionTiddler);\n\t}\n\tfor(var t=0; t<tiddlers.length; t++) {\n\t\tthis.wiki.deleteTiddler(tiddlers[t]);\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletetiddler\"] = DeleteTiddlerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-listops.js": {
"title": "$:/core/modules/widgets/action-listops.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-listops.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to apply list operations to any tiddler field (defaults to the 'list' field of the current tiddler)\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\nvar ActionListopsWidget = function(parseTreeNode, options) {\n\tthis.initialise(parseTreeNode, options);\n};\n/**\n * Inherit from the base widget class\n */\nActionListopsWidget.prototype = new Widget();\n/**\n * Render this widget into the DOM\n */\nActionListopsWidget.prototype.render = function(parent, nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n/**\n * Compute the internal state of the widget\n */\nActionListopsWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.target = this.getAttribute(\"$tiddler\", this.getVariable(\n\t\t\"currentTiddler\"));\n\tthis.filter = this.getAttribute(\"$filter\");\n\tthis.subfilter = this.getAttribute(\"$subfilter\");\n\tthis.listField = this.getAttribute(\"$field\", \"list\");\n\tthis.listIndex = this.getAttribute(\"$index\");\n\tthis.filtertags = this.getAttribute(\"$tags\");\n};\n/**\n * \tRefresh the widget by ensuring our attributes are up to date\n */\nActionListopsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.$tiddler || changedAttributes.$filter ||\n\t\tchangedAttributes.$subfilter || changedAttributes.$field ||\n\t\tchangedAttributes.$index || changedAttributes.$tags) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n/**\n * \tInvoke the action associated with this widget\n */\nActionListopsWidget.prototype.invokeAction = function(triggeringWidget,\n\tevent) {\n\t//Apply the specified filters to the lists\n\tvar field = this.listField,\n\t\tindex,\n\t\ttype = \"!!\",\n\t\tlist = this.listField;\n\tif(this.listIndex) {\n\t\tfield = undefined;\n\t\tindex = this.listIndex;\n\t\ttype = \"##\";\n\t\tlist = this.listIndex;\n\t}\n\tif(this.filter) {\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(this.filter, this)));\n\t}\n\tif(this.subfilter) {\n\t\tvar subfilter = \"[list[\" + this.target + type + list + \"]] \" + this.subfilter;\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(subfilter, this)));\n\t}\n\tif(this.filtertags) {\n\t\tvar tiddler = this.wiki.getTiddler(this.target),\n\t\t\toldtags = tiddler ? (tiddler.fields.tags || []).slice(0) : [],\n\t\t\ttagfilter = \"[list[\" + this.target + \"!!tags]] \" + this.filtertags,\n\t\t\tnewtags = this.wiki.filterTiddlers(tagfilter,this);\n\t\tif($tw.utils.stringifyList(oldtags.sort()) !== $tw.utils.stringifyList(newtags.sort())) {\n\t\t\tthis.wiki.setText(this.target,\"tags\",undefined,$tw.utils.stringifyList(newtags));\t\t\t\n\t\t}\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-listops\"] = ActionListopsWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-navigate.js": {
"title": "$:/core/modules/widgets/action-navigate.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-navigate.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to navigate to a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigateWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigateWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigateWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigateWidget.prototype.execute = function() {\n\tthis.actionTo = this.getAttribute(\"$to\");\n\tthis.actionScroll = this.getAttribute(\"$scroll\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nNavigateWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$to\"] || changedAttributes[\"$scroll\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nNavigateWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar bounds = triggeringWidget && triggeringWidget.getBoundingClientRect && triggeringWidget.getBoundingClientRect(),\n\t\tsuppressNavigation = event.metaKey || event.ctrlKey || (event.button === 1);\n\tif(this.actionScroll === \"yes\") {\n\t\tsuppressNavigation = false;\n\t} else if(this.actionScroll === \"no\") {\n\t\tsuppressNavigation = true;\n\t}\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.actionTo === undefined ? this.getVariable(\"currentTiddler\") : this.actionTo,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: triggeringWidget,\n\t\tnavigateFromClientRect: bounds && { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: suppressNavigation\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-navigate\"] = NavigateWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-sendmessage.js": {
"title": "$:/core/modules/widgets/action-sendmessage.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-sendmessage.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to send a message\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SendMessageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSendMessageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSendMessageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSendMessageWidget.prototype.execute = function() {\n\tthis.actionMessage = this.getAttribute(\"$message\");\n\tthis.actionParam = this.getAttribute(\"$param\");\n\tthis.actionName = this.getAttribute(\"$name\");\n\tthis.actionValue = this.getAttribute(\"$value\",\"\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSendMessageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSendMessageWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\t// Get the string parameter\n\tvar param = this.actionParam;\n\t// Assemble the attributes as a hashmap\n\tvar paramObject = Object.create(null);\n\tvar count = 0;\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparamObject[name] = attribute;\n\t\t\tcount++;\n\t\t}\n\t});\n\t// Add name/value pair if present\n\tif(this.actionName) {\n\t\tparamObject[this.actionName] = this.actionValue;\n\t}\n\t// Dispatch the message\n\tthis.dispatchEvent({\n\t\ttype: this.actionMessage,\n\t\tparam: param,\n\t\tparamObject: paramObject,\n\t\ttiddlerTitle: this.getVariable(\"currentTiddler\"),\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tevent: event\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-sendmessage\"] = SendMessageWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-setfield.js": {
"title": "$:/core/modules/widgets/action-setfield.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-setfield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to set a single field or index on a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n\tthis.actionIndex = this.getAttribute(\"$index\");\n\tthis.actionValue = this.getAttribute(\"$value\");\n\tthis.actionTimestamp = this.getAttribute(\"$timestamp\",\"yes\") === \"yes\";\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSetFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"] || changedAttributes[\"$field\"] || changedAttributes[\"$index\"] || changedAttributes[\"$value\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSetFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\toptions = {};\n\toptions.suppressTimestamp = !this.actionTimestamp;\n\tif((typeof this.actionField == \"string\") || (typeof this.actionIndex == \"string\") || (typeof this.actionValue == \"string\")) {\n\t\tthis.wiki.setText(this.actionTiddler,this.actionField,this.actionIndex,this.actionValue,options);\n\t}\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tself.wiki.setText(self.actionTiddler,name,undefined,attribute,options);\n\t\t}\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-setfield\"] = SetFieldWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/browse.js": {
"title": "$:/core/modules/widgets/browse.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/browse.js\ntype: application/javascript\nmodule-type: widget\n\nBrowse widget for browsing for files to import\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar BrowseWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nBrowseWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nBrowseWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"file\");\n\tif(this.browseMultiple) {\n\t\tdomNode.setAttribute(\"multiple\",\"multiple\");\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\t// Nw.js supports \"nwsaveas\" to force a \"save as\" dialogue that allows a new or existing file to be selected\n\tif(this.nwsaveas) {\n\t\tdomNode.setAttribute(\"nwsaveas\",this.nwsaveas);\n\t}\n\t// Nw.js supports \"webkitdirectory\" and \"nwdirectory\" to allow a directory to be selected\n\tif(this.webkitdirectory) {\n\t\tdomNode.setAttribute(\"webkitdirectory\",this.webkitdirectory);\n\t}\n\tif(this.nwdirectory) {\n\t\tdomNode.setAttribute(\"nwdirectory\",this.nwdirectory);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"change\",function (event) {\n\t\tif(self.message) {\n\t\t\tself.dispatchEvent({type: self.message, param: self.param, files: event.target.files});\n\t\t} else {\n\t\t\tself.wiki.readFiles(event.target.files,{\n\t\t\t\tcallback: function(tiddlerFieldsArray) {\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t\t\t},\n\t\t\t\tdeserializer: self.deserializer\n\t\t\t});\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nBrowseWidget.prototype.execute = function() {\n\tthis.browseMultiple = this.getAttribute(\"multiple\");\n\tthis.deserializer = this.getAttribute(\"deserializer\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.nwsaveas = this.getAttribute(\"nwsaveas\");\n\tthis.webkitdirectory = this.getAttribute(\"webkitdirectory\");\n\tthis.nwdirectory = this.getAttribute(\"nwdirectory\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nBrowseWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.browse = BrowseWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/button.js": {
"title": "$:/core/modules/widgets/button.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/button.js\ntype: application/javascript\nmodule-type: widget\n\nButton widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ButtonWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nButtonWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nButtonWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar tag = \"button\";\n\tif(this.buttonTag && $tw.config.htmlUnsafeElements.indexOf(this.buttonTag) === -1) {\n\t\ttag = this.buttonTag;\n\t}\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = this[\"class\"].split(\" \") || [],\n\t\tisPoppedUp = this.popup && this.isPoppedUp();\n\tif(this.selectedClass) {\n\t\tif(this.set && this.setTo && this.isSelected()) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t\tif(isPoppedUp) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t}\n\tif(isPoppedUp) {\n\t\t$tw.utils.pushTop(classes,\"tc-popup-handle\");\n\t}\n\tdomNode.className = classes.join(\" \");\n\t// Assign other attributes\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"click\",function (event) {\n\t\tvar handled = false;\n\t\tif(self.invokeActions(this,event)) {\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.to) {\n\t\t\tself.navigateTo(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.message) {\n\t\t\tself.dispatchMessage(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.popup) {\n\t\t\tself.triggerPopup(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.set) {\n\t\t\tself.setTiddler();\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.actions) {\n\t\t\tself.invokeActionString(self.actions,self,event);\n\t\t}\n\t\tif(handled) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\treturn handled;\n\t},false);\n\t// Make it draggable if required\n\tif(this.dragTiddler || this.dragFilter) {\n\t\t$tw.utils.makeDraggable({\n\t\t\tdomNode: domNode,\n\t\t\tdragTiddlerFn: function() {return self.dragTiddler;},\n\t\t\tdragFilterFn: function() {return self.dragFilter;},\n\t\t\twidget: this\n\t\t});\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nWe don't allow actions to propagate because we trigger actions ourselves\n*/\nButtonWidget.prototype.allowActionPropagation = function() {\n\treturn false;\n};\n\nButtonWidget.prototype.getBoundingClientRect = function() {\n\treturn this.domNodes[0].getBoundingClientRect();\n};\n\nButtonWidget.prototype.isSelected = function() {\n return this.wiki.getTextReference(this.set,this.defaultSetValue,this.getVariable(\"currentTiddler\")) === this.setTo;\n};\n\nButtonWidget.prototype.isPoppedUp = function() {\n\tvar tiddler = this.wiki.getTiddler(this.popup);\n\tvar result = tiddler && tiddler.fields.text ? $tw.popup.readPopupState(tiddler.fields.text) : false;\n\treturn result;\n};\n\nButtonWidget.prototype.navigateTo = function(event) {\n\tvar bounds = this.getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1),\n\t\tevent: event\n\t});\n};\n\nButtonWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\"), event: event});\n};\n\nButtonWidget.prototype.triggerPopup = function(event) {\n\t$tw.popup.triggerPopup({\n\t\tdomNode: this.domNodes[0],\n\t\ttitle: this.popup,\n\t\twiki: this.wiki\n\t});\n};\n\nButtonWidget.prototype.setTiddler = function() {\n\tthis.wiki.setTextReference(this.set,this.setTo,this.getVariable(\"currentTiddler\"));\n};\n\n/*\nCompute the internal state of the widget\n*/\nButtonWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.actions = this.getAttribute(\"actions\");\n\tthis.to = this.getAttribute(\"to\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.set = this.getAttribute(\"set\");\n\tthis.setTo = this.getAttribute(\"setTo\");\n\tthis.popup = this.getAttribute(\"popup\");\n\tthis.hover = this.getAttribute(\"hover\");\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.style = this.getAttribute(\"style\");\n\tthis.selectedClass = this.getAttribute(\"selectedClass\");\n\tthis.defaultSetValue = this.getAttribute(\"default\",\"\");\n\tthis.buttonTag = this.getAttribute(\"tag\");\n\tthis.dragTiddler = this.getAttribute(\"dragTiddler\");\n\tthis.dragFilter = this.getAttribute(\"dragFilter\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nButtonWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedAttributes.message || changedAttributes.param || changedAttributes.set || changedAttributes.setTo || changedAttributes.popup || changedAttributes.hover || changedAttributes[\"class\"] || changedAttributes.selectedClass || changedAttributes.style || changedAttributes.dragFilter || changedAttributes.dragTiddler || (this.set && changedTiddlers[this.set]) || (this.popup && changedTiddlers[this.popup])) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.button = ButtonWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/checkbox.js": {
"title": "$:/core/modules/widgets/checkbox.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/checkbox.js\ntype: application/javascript\nmodule-type: widget\n\nCheckbox widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CheckboxWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCheckboxWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCheckboxWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",this.checkboxClass);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"checkbox\");\n\tif(this.getValue()) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nCheckboxWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.checkboxTitle);\n\tif(tiddler) {\n\t\tif(this.checkboxTag) {\n\t\t\tif(this.checkboxInvertTag) {\n\t\t\t\treturn !tiddler.hasTag(this.checkboxTag);\n\t\t\t} else {\n\t\t\t\treturn tiddler.hasTag(this.checkboxTag);\n\t\t\t}\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tvar value;\n\t\t\tif($tw.utils.hop(tiddler.fields,this.checkboxField)) {\n\t\t\t\tvalue = tiddler.fields[this.checkboxField] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = this.checkboxDefault || \"\";\n\t\t\t}\n\t\t\tif(value === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(value === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tif(this.checkboxIndex) {\n\t\t\tvar value = this.wiki.extractTiddlerDataItem(tiddler,this.checkboxIndex,this.checkboxDefault || \"\");\n\t\t\tif(value === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(value === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif(this.checkboxTag) {\n\t\t\treturn false;\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tif(this.checkboxDefault === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(this.checkboxDefault === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\nCheckboxWidget.prototype.handleChangeEvent = function(event) {\n\tvar checked = this.inputDomNode.checked,\n\t\ttiddler = this.wiki.getTiddler(this.checkboxTitle),\n\t\tfallbackFields = {text: \"\"},\n\t\tnewFields = {title: this.checkboxTitle},\n\t\thasChanged = false,\n\t\ttagCheck = false,\n\t\thasTag = tiddler && tiddler.hasTag(this.checkboxTag),\n\t\tvalue = checked ? this.checkboxChecked : this.checkboxUnchecked;\n\tif(this.checkboxTag && this.checkboxInvertTag === \"yes\") {\n\t\ttagCheck = hasTag === checked;\n\t} else {\n\t\ttagCheck = hasTag !== checked;\n\t}\n\t// Set the tag if specified\n\tif(this.checkboxTag && (!tiddler || tagCheck)) {\n\t\tnewFields.tags = tiddler ? (tiddler.fields.tags || []).slice(0) : [];\n\t\tvar pos = newFields.tags.indexOf(this.checkboxTag);\n\t\tif(pos !== -1) {\n\t\t\tnewFields.tags.splice(pos,1);\n\t\t}\n\t\tif(this.checkboxInvertTag === \"yes\" && !checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t} else if(this.checkboxInvertTag !== \"yes\" && checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t}\n\t\thasChanged = true;\n\t}\n\t// Set the field if specified\n\tif(this.checkboxField) {\n\t\tif(!tiddler || tiddler.fields[this.checkboxField] !== value) {\n\t\t\tnewFields[this.checkboxField] = value;\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\t// Set the index if specified\n\tif(this.checkboxIndex) {\n\t\tvar indexValue = this.wiki.extractTiddlerDataItem(this.checkboxTitle,this.checkboxIndex);\n\t\tif(!tiddler || indexValue !== value) {\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\tif(hasChanged) {\n\t\tif(this.checkboxIndex) {\n\t\t\tthis.wiki.setText(this.checkboxTitle,\"\",this.checkboxIndex,value);\n\t\t} else {\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),fallbackFields,tiddler,newFields,this.wiki.getModificationFields()));\n\t\t}\n\t}\n\t// Trigger actions\n\tif(this.checkboxActions) {\n\t\tthis.invokeActionString(this.checkboxActions,this,event);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCheckboxWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.checkboxActions = this.getAttribute(\"actions\");\n\tthis.checkboxTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.checkboxTag = this.getAttribute(\"tag\");\n\tthis.checkboxField = this.getAttribute(\"field\");\n\tthis.checkboxIndex = this.getAttribute(\"index\");\n\tthis.checkboxChecked = this.getAttribute(\"checked\");\n\tthis.checkboxUnchecked = this.getAttribute(\"unchecked\");\n\tthis.checkboxDefault = this.getAttribute(\"default\");\n\tthis.checkboxClass = this.getAttribute(\"class\",\"\");\n\tthis.checkboxInvertTag = this.getAttribute(\"invertTag\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCheckboxWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.tag || changedAttributes.invertTag || changedAttributes.field || changedAttributes.index || changedAttributes.checked || changedAttributes.unchecked || changedAttributes[\"default\"] || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.checkboxTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue();\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.checkbox = CheckboxWidget;\n\n})();",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/codeblock.js": {
"title": "$:/core/modules/widgets/codeblock.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/codeblock.js\ntype: application/javascript\nmodule-type: widget\n\nCode block node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CodeBlockWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCodeBlockWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCodeBlockWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar codeNode = this.document.createElement(\"code\"),\n\t\tdomNode = this.document.createElement(\"pre\");\n\tcodeNode.appendChild(this.document.createTextNode(this.getAttribute(\"code\")));\n\tdomNode.appendChild(codeNode);\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n\tif(this.postRender) {\n\t\tthis.postRender();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCodeBlockWidget.prototype.execute = function() {\n\tthis.language = this.getAttribute(\"language\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCodeBlockWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.codeblock = CodeBlockWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/count.js": {
"title": "$:/core/modules/widgets/count.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/count.js\ntype: application/javascript\nmodule-type: widget\n\nCount widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CountWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCountWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCountWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.currentCount);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nCountWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Execute the filter\n\tif(this.filter) {\n\t\tthis.currentCount = this.wiki.filterTiddlers(this.filter,this).length;\n\t} else {\n\t\tthis.currentCount = undefined;\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCountWidget.prototype.refresh = function(changedTiddlers) {\n\t// Re-execute the filter to get the count\n\tthis.computeAttributes();\n\tvar oldCount = this.currentCount;\n\tthis.execute();\n\tif(this.currentCount !== oldCount) {\n\t\t// Regenerate and rerender the widget and replace the existing DOM node\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n\n};\n\nexports.count = CountWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/draggable.js": {
"title": "$:/core/modules/widgets/draggable.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/draggable.js\ntype: application/javascript\nmodule-type: widget\n\nDraggable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DraggableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDraggableWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDraggableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Sanitise the specified tag\n\tvar tag = this.draggableTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"div\";\n\t}\n\t// Create our element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = [\"tc-draggable\"];\n\tif(this.draggableClasses) {\n\t\tclasses.push(this.draggableClasses);\n\t}\n\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t// Add event handlers\n\t$tw.utils.makeDraggable({\n\t\tdomNode: domNode,\n\t\tdragTiddlerFn: function() {return self.getAttribute(\"tiddler\");},\n\t\tdragFilterFn: function() {return self.getAttribute(\"filter\");},\n\t\twidget: this\n\t});\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nDraggableWidget.prototype.execute = function() {\n\t// Pick up our attributes\n\tthis.draggableTag = this.getAttribute(\"tag\",\"div\");\n\tthis.draggableClasses = this.getAttribute(\"class\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDraggableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedTiddlers.tag || changedTiddlers[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.draggable = DraggableWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/droppable.js": {
"title": "$:/core/modules/widgets/droppable.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/droppable.js\ntype: application/javascript\nmodule-type: widget\n\nDroppable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DroppableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDroppableWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDroppableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.droppableTag && $tw.config.htmlUnsafeElements.indexOf(this.droppableTag) === -1) {\n\t\ttag = this.droppableTag;\n\t}\n\t// Create element and assign classes\n\tvar domNode = this.document.createElement(tag),\n\t\tclasses = (this[\"class\"] || \"\").split(\" \");\n\tclasses.push(\"tc-droppable\");\n\tdomNode.className = classes.join(\" \");\n\t// Add event handlers\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"}\n\t]);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n\t// Stack of outstanding enter/leave events\n\tthis.currentlyEntered = [];\n};\n\nDroppableWidget.prototype.enterDrag = function(event) {\n\tif(this.currentlyEntered.indexOf(event.target) === -1) {\n\t\tthis.currentlyEntered.push(event.target);\n\t}\n\t// If we're entering for the first time we need to apply highlighting\n\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDroppableWidget.prototype.leaveDrag = function(event) {\n\tvar pos = this.currentlyEntered.indexOf(event.target);\n\tif(pos !== -1) {\n\t\tthis.currentlyEntered.splice(pos,1);\n\t}\n\t// Remove highlighting if we're leaving externally. The hacky second condition is to resolve a problem with Firefox whereby there is an erroneous dragenter event if the node being dragged is within the dropzone\n\tif(this.currentlyEntered.length === 0 || (this.currentlyEntered.length === 1 && this.currentlyEntered[0] === $tw.dragInProgress)) {\n\t\tthis.currentlyEntered = [];\n\t\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t}\n};\n\nDroppableWidget.prototype.handleDragEnterEvent = function(event) {\n\tthis.enterDrag(event);\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDragOverEvent = function(event) {\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\t// Set the drop effect\n\tevent.dataTransfer.dropEffect = this.droppableEffect;\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDragLeaveEvent = function(event) {\n\tthis.leaveDrag(event);\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDropEvent = function(event) {\n\tvar self = this;\n\tthis.leaveDrag(event);\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\tvar dataTransfer = event.dataTransfer;\n\t// Remove highlighting\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t// Try to import the various data types we understand\n\t$tw.utils.importDataTransfer(dataTransfer,null,function(fieldsArray) {\n\t\tfieldsArray.forEach(function(fields) {\n\t\t\tself.performActions(fields.title || fields.text,event);\n\t\t});\n\t});\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n\treturn false;\n};\n\nDroppableWidget.prototype.performActions = function(title,event) {\n\tif(this.droppableActions) {\n\t\tthis.invokeActionString(this.droppableActions,this,event,{actionTiddler: title});\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDroppableWidget.prototype.execute = function() {\n\tthis.droppableActions = this.getAttribute(\"actions\");\n\tthis.droppableEffect = this.getAttribute(\"effect\",\"copy\");\n\tthis.droppableTag = this.getAttribute(\"tag\");\n\tthis.droppableClass = this.getAttribute(\"class\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDroppableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"class\"] || changedAttributes.tag) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.droppable = DroppableWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/dropzone.js": {
"title": "$:/core/modules/widgets/dropzone.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/dropzone.js\ntype: application/javascript\nmodule-type: widget\n\nDropzone widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DropZoneWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDropZoneWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDropZoneWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"div\");\n\tdomNode.className = \"tc-dropzone\";\n\t// Add event handlers\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"},\n\t\t{name: \"paste\", handlerObject: this, handlerMethod: \"handlePasteEvent\"}\n\t]);\n\tdomNode.addEventListener(\"click\",function (event) {\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n\t// Stack of outstanding enter/leave events\n\tthis.currentlyEntered = [];\n};\n\nDropZoneWidget.prototype.enterDrag = function(event) {\n\tif(this.currentlyEntered.indexOf(event.target) === -1) {\n\t\tthis.currentlyEntered.push(event.target);\n\t}\n\t// If we're entering for the first time we need to apply highlighting\n\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDropZoneWidget.prototype.leaveDrag = function(event) {\n\tvar pos = this.currentlyEntered.indexOf(event.target);\n\tif(pos !== -1) {\n\t\tthis.currentlyEntered.splice(pos,1);\n\t}\n\t// Remove highlighting if we're leaving externally\n\tif(this.currentlyEntered.length === 0) {\n\t\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t}\n};\n\nDropZoneWidget.prototype.handleDragEnterEvent = function(event) {\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\tthis.enterDrag(event);\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handleDragOverEvent = function(event) {\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\tevent.dataTransfer.dropEffect = \"copy\"; // Explicitly show this is a copy\n};\n\nDropZoneWidget.prototype.handleDragLeaveEvent = function(event) {\n\tthis.leaveDrag(event);\n};\n\nDropZoneWidget.prototype.handleDropEvent = function(event) {\n\tvar self = this,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t};\n\tthis.leaveDrag(event);\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\tvar self = this,\n\t\tdataTransfer = event.dataTransfer;\n\t// Remove highlighting\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t// Import any files in the drop\n\tvar numFiles = 0;\n\tif(dataTransfer.files) {\n\t\tnumFiles = this.wiki.readFiles(dataTransfer.files,{\n\t\t\tcallback: readFileCallback,\n\t\t\tdeserializer: this.dropzoneDeserializer\n\t\t});\n\t}\n\t// Try to import the various data types we understand\n\tif(numFiles === 0) {\n\t\t$tw.utils.importDataTransfer(dataTransfer,this.wiki.generateNewTitle(\"Untitled\"),readFileCallback);\n\t}\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handlePasteEvent = function(event) {\n\tvar self = this,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t};\n\t// Let the browser handle it if we're in a textarea or input box\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) == -1) {\n\t\tvar self = this,\n\t\t\titems = event.clipboardData.items;\n\t\t// Enumerate the clipboard items\n\t\tfor(var t = 0; t<items.length; t++) {\n\t\t\tvar item = items[t];\n\t\t\tif(item.kind === \"file\") {\n\t\t\t\t// Import any files\n\t\t\t\tthis.wiki.readFile(item.getAsFile(),{\n\t\t\t\t\tcallback: readFileCallback,\n\t\t\t\t\tdeserializer: this.dropzoneDeserializer\n\t\t\t\t});\n\t\t\t} else if(item.kind === \"string\") {\n\t\t\t\t// Create tiddlers from string items\n\t\t\t\tvar type = item.type;\n\t\t\t\titem.getAsString(function(str) {\n\t\t\t\t\tvar tiddlerFields = {\n\t\t\t\t\t\ttitle: self.wiki.generateNewTitle(\"Untitled\"),\n\t\t\t\t\t\ttext: str,\n\t\t\t\t\t\ttype: type\n\t\t\t\t\t};\n\t\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\t\tconsole.log(\"Importing string '\" + str + \"', type: '\" + type + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify([tiddlerFields])});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t// Tell the browser that we've handled the paste\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDropZoneWidget.prototype.execute = function() {\n\tthis.dropzoneDeserializer = this.getAttribute(\"deserializer\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDropZoneWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.dropzone = DropZoneWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-binary.js": {
"title": "$:/core/modules/widgets/edit-binary.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-binary.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-binary widget; placeholder for editing binary tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar BINARY_WARNING_MESSAGE = \"$:/core/ui/BinaryWarning\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBinaryWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBinaryWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBinaryWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBinaryWidget.prototype.execute = function() {\n\t// Construct the child widgets\n\tthis.makeChildWidgets([{\n\t\ttype: \"transclude\",\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: BINARY_WARNING_MESSAGE}\n\t\t}\n\t}]);\n};\n\n/*\nRefresh by refreshing our child widget\n*/\nEditBinaryWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"edit-binary\"] = EditBinaryWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-bitmap.js": {
"title": "$:/core/modules/widgets/edit-bitmap.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-bitmap.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-bitmap widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Default image sizes\nvar DEFAULT_IMAGE_WIDTH = 600,\n\tDEFAULT_IMAGE_HEIGHT = 370;\n\n// Configuration tiddlers\nvar LINE_WIDTH_TITLE = \"$:/config/BitmapEditor/LineWidth\",\n\tLINE_COLOUR_TITLE = \"$:/config/BitmapEditor/Colour\",\n\tLINE_OPACITY_TITLE = \"$:/config/BitmapEditor/Opacity\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBitmapWidget = function(parseTreeNode,options) {\n\t// Initialise the editor operations if they've not been done already\n\tif(!this.editorOperations) {\n\t\tEditBitmapWidget.prototype.editorOperations = {};\n\t\t$tw.modules.applyMethods(\"bitmapeditoroperation\",this.editorOperations);\n\t}\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBitmapWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBitmapWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create the wrapper for the toolbar and render its content\n\tthis.toolbarNode = this.document.createElement(\"div\");\n\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\tparent.insertBefore(this.toolbarNode,nextSibling);\n\tthis.domNodes.push(this.toolbarNode);\n\t// Create the on-screen canvas\n\tthis.canvasDomNode = $tw.utils.domMaker(\"canvas\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tc-edit-bitmapeditor\",\n\t\teventListeners: [{\n\t\t\tname: \"touchstart\", handlerObject: this, handlerMethod: \"handleTouchStartEvent\"\n\t\t},{\n\t\t\tname: \"touchmove\", handlerObject: this, handlerMethod: \"handleTouchMoveEvent\"\n\t\t},{\n\t\t\tname: \"touchend\", handlerObject: this, handlerMethod: \"handleTouchEndEvent\"\n\t\t},{\n\t\t\tname: \"mousedown\", handlerObject: this, handlerMethod: \"handleMouseDownEvent\"\n\t\t},{\n\t\t\tname: \"mousemove\", handlerObject: this, handlerMethod: \"handleMouseMoveEvent\"\n\t\t},{\n\t\t\tname: \"mouseup\", handlerObject: this, handlerMethod: \"handleMouseUpEvent\"\n\t\t}]\n\t});\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Render toolbar child widgets\n\tthis.renderChildren(this.toolbarNode,null);\n\t// // Insert the elements into the DOM\n\tparent.insertBefore(this.canvasDomNode,nextSibling);\n\tthis.domNodes.push(this.canvasDomNode);\n\t// Load the image into the canvas\n\tif($tw.browser) {\n\t\tthis.loadCanvas();\n\t}\n\t// Add widget message listeners\n\tthis.addEventListeners([\n\t\t{type: \"tm-edit-bitmap-operation\", handler: \"handleEditBitmapOperationMessage\"}\n\t]);\n};\n\n/*\nHandle an edit bitmap operation message from the toolbar\n*/\nEditBitmapWidget.prototype.handleEditBitmapOperationMessage = function(event) {\n\t// Invoke the handler\n\tvar handler = this.editorOperations[event.param];\n\tif(handler) {\n\t\thandler.call(this,event);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBitmapWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nJust refresh the toolbar\n*/\nEditBitmapWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nSet the bitmap size variables and refresh the toolbar\n*/\nEditBitmapWidget.prototype.refreshToolbar = function() {\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Refresh each of our child widgets\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\tchildWidget.refreshSelf();\n\t});\n};\n\nEditBitmapWidget.prototype.loadCanvas = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle),\n\t\tcurrImage = new Image();\n\t// Set up event handlers for loading the image\n\tvar self = this;\n\tcurrImage.onload = function() {\n\t\t// Copy the image to the on-screen canvas\n\t\tself.initCanvas(self.canvasDomNode,currImage.width,currImage.height,currImage);\n\t\t// And also copy the current bitmap to the off-screen canvas\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,currImage.width,currImage.height,currImage);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\tcurrImage.onerror = function() {\n\t\t// Set the on-screen canvas size and clear it\n\t\tself.initCanvas(self.canvasDomNode,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the off-screen canvas size and clear it\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\t// Get the current bitmap into an image object\n\tcurrImage.src = \"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text;\n};\n\nEditBitmapWidget.prototype.initCanvas = function(canvas,width,height,image) {\n\tcanvas.width = width;\n\tcanvas.height = height;\n\tvar ctx = canvas.getContext(\"2d\");\n\tif(image) {\n\t\tctx.drawImage(image,0,0);\n\t} else {\n\t\tctx.fillStyle = \"#fff\";\n\t\tctx.fillRect(0,0,canvas.width,canvas.height);\n\t}\n};\n\n/*\n** Change the size of the canvas, preserving the current image\n*/\nEditBitmapWidget.prototype.changeCanvasSize = function(newWidth,newHeight) {\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\");\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\nEditBitmapWidget.prototype.handleTouchStartEvent = function(event) {\n\tthis.brushDown = true;\n\tthis.strokeStart(event.touches[0].clientX,event.touches[0].clientY);\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.touches[0].clientX,event.touches[0].clientY);\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchEndEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseDownEvent = function(event) {\n\tthis.strokeStart(event.clientX,event.clientY);\n\tthis.brushDown = true;\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.clientX,event.clientY);\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.handleMouseUpEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.adjustCoordinates = function(x,y) {\n\tvar canvasRect = this.canvasDomNode.getBoundingClientRect(),\n\t\tscale = this.canvasDomNode.width/canvasRect.width;\n\treturn {x: (x - canvasRect.left) * scale, y: (y - canvasRect.top) * scale};\n};\n\nEditBitmapWidget.prototype.strokeStart = function(x,y) {\n\t// Start off a new stroke\n\tthis.stroke = [this.adjustCoordinates(x,y)];\n};\n\nEditBitmapWidget.prototype.strokeMove = function(x,y) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\"),\n\t\tt;\n\t// Add the new position to the end of the stroke\n\tthis.stroke.push(this.adjustCoordinates(x,y));\n\t// Redraw the previous image\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Render the stroke\n\tctx.globalAlpha = parseFloat(this.wiki.getTiddlerText(LINE_OPACITY_TITLE,\"1.0\"));\n\tctx.strokeStyle = this.wiki.getTiddlerText(LINE_COLOUR_TITLE,\"#ff0\");\n\tctx.lineWidth = parseFloat(this.wiki.getTiddlerText(LINE_WIDTH_TITLE,\"3\"));\n\tctx.lineCap = \"round\";\n\tctx.lineJoin = \"round\";\n\tctx.beginPath();\n\tctx.moveTo(this.stroke[0].x,this.stroke[0].y);\n\tfor(t=1; t<this.stroke.length-1; t++) {\n\t\tvar s1 = this.stroke[t],\n\t\t\ts2 = this.stroke[t-1],\n\t\t\ttx = (s1.x + s2.x)/2,\n\t\t\tty = (s1.y + s2.y)/2;\n\t\tctx.quadraticCurveTo(s2.x,s2.y,tx,ty);\n\t}\n\tctx.stroke();\n};\n\nEditBitmapWidget.prototype.strokeEnd = function() {\n\t// Copy the bitmap to the off-screen canvas\n\tvar ctx = this.currCanvas.getContext(\"2d\");\n\tctx.drawImage(this.canvasDomNode,0,0);\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\nEditBitmapWidget.prototype.saveChanges = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\tif(tiddler) {\n\t\t// data URIs look like \"data:<type>;base64,<text>\"\n\t\tvar dataURL = this.canvasDomNode.toDataURL(tiddler.fields.type),\n\t\t\tposColon = dataURL.indexOf(\":\"),\n\t\t\tposSemiColon = dataURL.indexOf(\";\"),\n\t\t\tposComma = dataURL.indexOf(\",\"),\n\t\t\ttype = dataURL.substring(posColon+1,posSemiColon),\n\t\t\ttext = dataURL.substring(posComma+1);\n\t\tvar update = {type: type, text: text};\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getModificationFields(),tiddler,update,this.wiki.getCreationFields()));\n\t}\n};\n\nexports[\"edit-bitmap\"] = EditBitmapWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-shortcut.js": {
"title": "$:/core/modules/widgets/edit-shortcut.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-shortcut.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to display an editable keyboard shortcut\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditShortcutWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditShortcutWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditShortcutWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.inputNode = this.document.createElement(\"input\");\n\t// Assign classes\n\tif(this.shortcutClass) {\n\t\tthis.inputNode.className = this.shortcutClass;\t\t\n\t}\n\t// Assign other attributes\n\tif(this.shortcutStyle) {\n\t\tthis.inputNode.setAttribute(\"style\",this.shortcutStyle);\n\t}\n\tif(this.shortcutTooltip) {\n\t\tthis.inputNode.setAttribute(\"title\",this.shortcutTooltip);\n\t}\n\tif(this.shortcutPlaceholder) {\n\t\tthis.inputNode.setAttribute(\"placeholder\",this.shortcutPlaceholder);\n\t}\n\tif(this.shortcutAriaLabel) {\n\t\tthis.inputNode.setAttribute(\"aria-label\",this.shortcutAriaLabel);\n\t}\n\t// Assign the current shortcut\n\tthis.updateInputNode();\n\t// Add event handlers\n\t$tw.utils.addEventListeners(this.inputNode,[\n\t\t{name: \"keydown\", handlerObject: this, handlerMethod: \"handleKeydownEvent\"}\n\t]);\n\t// Link into the DOM\n\tparent.insertBefore(this.inputNode,nextSibling);\n\tthis.domNodes.push(this.inputNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditShortcutWidget.prototype.execute = function() {\n\tthis.shortcutTiddler = this.getAttribute(\"tiddler\");\n\tthis.shortcutField = this.getAttribute(\"field\");\n\tthis.shortcutIndex = this.getAttribute(\"index\");\n\tthis.shortcutPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.shortcutDefault = this.getAttribute(\"default\",\"\");\n\tthis.shortcutClass = this.getAttribute(\"class\");\n\tthis.shortcutStyle = this.getAttribute(\"style\");\n\tthis.shortcutTooltip = this.getAttribute(\"tooltip\");\n\tthis.shortcutAriaLabel = this.getAttribute(\"aria-label\");\n};\n\n/*\nUpdate the value of the input node\n*/\nEditShortcutWidget.prototype.updateInputNode = function() {\n\tif(this.shortcutField) {\n\t\tvar tiddler = this.wiki.getTiddler(this.shortcutTiddler);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,this.shortcutField)) {\n\t\t\tthis.inputNode.value = tiddler.getFieldString(this.shortcutField);\n\t\t} else {\n\t\t\tthis.inputNode.value = this.shortcutDefault;\n\t\t}\n\t} else if(this.shortcutIndex) {\n\t\tthis.inputNode.value = this.wiki.extractTiddlerDataItem(this.shortcutTiddler,this.shortcutIndex,this.shortcutDefault);\n\t} else {\n\t\tthis.inputNode.value = this.wiki.getTiddlerText(this.shortcutTiddler,this.shortcutDefault);\n\t}\n};\n\n/*\nHandle a dom \"keydown\" event\n*/\nEditShortcutWidget.prototype.handleKeydownEvent = function(event) {\n\t// Ignore shift, ctrl, meta, alt\n\tif(event.keyCode && $tw.keyboardManager.getModifierKeys().indexOf(event.keyCode) === -1) {\n\t\t// Get the shortcut text representation\n\t\tvar value = $tw.keyboardManager.getPrintableShortcuts([{\n\t\t\tctrlKey: event.ctrlKey,\n\t\t\tshiftKey: event.shiftKey,\n\t\t\taltKey: event.altKey,\n\t\t\tmetaKey: event.metaKey,\n\t\t\tkeyCode: event.keyCode\n\t\t}]);\n\t\tif(value.length > 0) {\n\t\t\tthis.wiki.setText(this.shortcutTiddler,this.shortcutField,this.shortcutIndex,value[0]);\n\t\t}\n\t\t// Ignore the keydown if it was already handled\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn true;\t\t\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget needed re-rendering\n*/\nEditShortcutWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.placeholder || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.style || changedAttributes.tooltip || changedAttributes[\"aria-label\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedTiddlers[this.shortcutTiddler]) {\n\t\tthis.updateInputNode();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports[\"edit-shortcut\"] = EditShortcutWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-text.js": {
"title": "$:/core/modules/widgets/edit-text.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-text.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-text widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar editTextWidgetFactory = require(\"$:/core/modules/editor/factory.js\").editTextWidgetFactory,\n\tFramedEngine = require(\"$:/core/modules/editor/engines/framed.js\").FramedEngine,\n\tSimpleEngine = require(\"$:/core/modules/editor/engines/simple.js\").SimpleEngine;\n\nexports[\"edit-text\"] = editTextWidgetFactory(FramedEngine,SimpleEngine);\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit.js": {
"title": "$:/core/modules/widgets/edit.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit.js\ntype: application/javascript\nmodule-type: widget\n\nEdit widget is a meta-widget chooses the appropriate actual editting widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n// Mappings from content type to editor type are stored in tiddlers with this prefix\nvar EDITOR_MAPPING_PREFIX = \"$:/config/EditorTypeMappings/\";\n\n/*\nCompute the internal state of the widget\n*/\nEditWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.editField = this.getAttribute(\"field\",\"text\");\n\tthis.editIndex = this.getAttribute(\"index\");\n\tthis.editClass = this.getAttribute(\"class\");\n\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\t// Choose the appropriate edit widget\n\tthis.editorType = this.getEditorType();\n\t// Make the child widgets\n\tthis.makeChildWidgets([{\n\t\ttype: \"edit-\" + this.editorType,\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: this.editTitle},\n\t\t\tfield: {type: \"string\", value: this.editField},\n\t\t\tindex: {type: \"string\", value: this.editIndex},\n\t\t\t\"class\": {type: \"string\", value: this.editClass},\n\t\t\t\"placeholder\": {type: \"string\", value: this.editPlaceholder}\n\t\t},\n\t\tchildren: this.parseTreeNode.children\n\t}]);\n};\n\nEditWidget.prototype.getEditorType = function() {\n\t// Get the content type of the thing we're editing\n\tvar type;\n\tif(this.editField === \"text\") {\n\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\tif(tiddler) {\n\t\t\ttype = tiddler.fields.type;\n\t\t}\n\t}\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar editorType = this.wiki.getTiddlerText(EDITOR_MAPPING_PREFIX + type);\n\tif(!editorType) {\n\t\tvar typeInfo = $tw.config.contentTypeInfo[type];\n\t\tif(typeInfo && typeInfo.encoding === \"base64\") {\n\t\t\teditorType = \"binary\";\n\t\t} else {\n\t\t\teditorType = \"text\";\n\t\t}\n\t}\n\treturn editorType;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEditWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh if an attribute has changed, or the type associated with the target tiddler has changed\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || (changedTiddlers[this.editTitle] && this.getEditorType() !== this.editorType)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.edit = EditWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/element.js": {
"title": "$:/core/modules/widgets/element.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/element.js\ntype: application/javascript\nmodule-type: widget\n\nElement widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ElementWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nElementWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nElementWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Neuter blacklisted elements\n\tvar tag = this.parseTreeNode.tag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"safe-\" + tag;\n\t}\n\tvar domNode = this.document.createElementNS(this.namespace,tag);\n\tthis.assignAttributes(domNode,{excludeEventAttributes: true});\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nElementWidget.prototype.execute = function() {\n\t// Select the namespace for the tag\n\tvar tagNamespaces = {\n\t\t\tsvg: \"http://www.w3.org/2000/svg\",\n\t\t\tmath: \"http://www.w3.org/1998/Math/MathML\",\n\t\t\tbody: \"http://www.w3.org/1999/xhtml\"\n\t\t};\n\tthis.namespace = tagNamespaces[this.parseTreeNode.tag];\n\tif(this.namespace) {\n\t\tthis.setVariable(\"namespace\",this.namespace);\n\t} else {\n\t\tthis.namespace = this.getVariable(\"namespace\",{defaultValue: \"http://www.w3.org/1999/xhtml\"});\n\t}\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nElementWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\thasChangedAttributes = $tw.utils.count(changedAttributes) > 0;\n\tif(hasChangedAttributes) {\n\t\t// Update our attributes\n\t\tthis.assignAttributes(this.domNodes[0],{excludeEventAttributes: true});\n\t}\n\treturn this.refreshChildren(changedTiddlers) || hasChangedAttributes;\n};\n\nexports.element = ElementWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/encrypt.js": {
"title": "$:/core/modules/widgets/encrypt.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/encrypt.js\ntype: application/javascript\nmodule-type: widget\n\nEncrypt widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EncryptWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEncryptWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEncryptWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.encryptedText);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEncryptWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\",\"[!is[system]]\");\n\t// Encrypt the filtered tiddlers\n\tvar tiddlers = this.wiki.filterTiddlers(this.filter),\n\t\tjson = {},\n\t\tself = this;\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title),\n\t\t\tjsonTiddler = {};\n\t\tfor(var f in tiddler.fields) {\n\t\t\tjsonTiddler[f] = tiddler.getFieldString(f);\n\t\t}\n\t\tjson[title] = jsonTiddler;\n\t});\n\tthis.encryptedText = $tw.utils.htmlEncode($tw.crypto.encrypt(JSON.stringify(json)));\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEncryptWidget.prototype.refresh = function(changedTiddlers) {\n\t// We don't need to worry about refreshing because the encrypt widget isn't for interactive use\n\treturn false;\n};\n\nexports.encrypt = EncryptWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/entity.js": {
"title": "$:/core/modules/widgets/entity.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/entity.js\ntype: application/javascript\nmodule-type: widget\n\nHTML entity widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EntityWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEntityWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEntityWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar entityString = this.getAttribute(\"entity\",this.parseTreeNode.entity || \"\"),\n\t\ttextNode = this.document.createTextNode($tw.utils.entityDecode(entityString));\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEntityWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEntityWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.entity) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.entity = EntityWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/fieldmangler.js": {
"title": "$:/core/modules/widgets/fieldmangler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/fieldmangler.js\ntype: application/javascript\nmodule-type: widget\n\nField mangler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldManglerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-remove-field\", handler: \"handleRemoveFieldEvent\"},\n\t\t{type: \"tm-add-field\", handler: \"handleAddFieldEvent\"},\n\t\t{type: \"tm-remove-tag\", handler: \"handleRemoveTagEvent\"},\n\t\t{type: \"tm-add-tag\", handler: \"handleAddTagEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldManglerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldManglerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldManglerWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.mangleTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldManglerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nFieldManglerWidget.prototype.handleRemoveFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tdeletion = {};\n\tdeletion[event.param] = undefined;\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,deletion));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\taddition = this.wiki.getModificationFields(),\n\t\thadInvalidFieldName = false,\n\t\taddField = function(name,value) {\n\t\t\tvar trimmedName = name.toLowerCase().trim();\n\t\t\tif(!$tw.utils.isValidFieldName(trimmedName)) {\n\t\t\t\tif(!hadInvalidFieldName) {\n\t\t\t\t\talert($tw.language.getString(\n\t\t\t\t\t\t\"InvalidFieldName\",\n\t\t\t\t\t\t{variables:\n\t\t\t\t\t\t\t{fieldName: trimmedName}\n\t\t\t\t\t\t}\n\t\t\t\t\t));\n\t\t\t\t\thadInvalidFieldName = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif(!value && tiddler) {\n\t\t\t\t\tvalue = tiddler.fields[trimmedName];\n\t\t\t\t}\n\t\t\t\taddition[trimmedName] = value || \"\";\n\t\t\t}\n\t\t\treturn;\n\t\t};\n\taddition.title = this.mangleTitle;\n\tif(typeof event.param === \"string\") {\n\t\taddField(event.param,\"\");\n\t}\n\tif(typeof event.paramObject === \"object\") {\n\t\tfor(var name in event.paramObject) {\n\t\t\taddField(name,event.paramObject[name]);\n\t\t}\n\t}\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,addition));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleRemoveTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tmodification = this.wiki.getModificationFields();\n\tif(tiddler && tiddler.fields.tags) {\n\t\tvar p = tiddler.fields.tags.indexOf(event.param);\n\t\tif(p !== -1) {\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\tmodification.tags.splice(p,1);\n\t\t\tif(modification.tags.length === 0) {\n\t\t\t\tmodification.tags = undefined;\n\t\t\t}\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\n\t\t}\n\t}\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tmodification = this.wiki.getModificationFields();\n\tif(tiddler && typeof event.param === \"string\") {\n\t\tvar tag = event.param.trim();\n\t\tif(tag !== \"\") {\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\t$tw.utils.pushTop(modification.tags,tag);\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\t\t\t\n\t\t}\n\t} else if(typeof event.param === \"string\" && event.param.trim() !== \"\" && this.mangleTitle.trim() !== \"\") {\n\t\tvar tag = [];\n\t\ttag.push(event.param.trim());\n\t\tthis.wiki.addTiddler(new $tw.Tiddler({title: this.mangleTitle, tags: tag},modification));\n\t}\n\treturn true;\n};\n\nexports.fieldmangler = FieldManglerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/fields.js": {
"title": "$:/core/modules/widgets/fields.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/fields.js\ntype: application/javascript\nmodule-type: widget\n\nFields widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldsWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldsWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldsWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.template = this.getAttribute(\"template\");\n\tthis.exclude = this.getAttribute(\"exclude\");\n\tthis.stripTitlePrefix = this.getAttribute(\"stripTitlePrefix\",\"no\") === \"yes\";\n\t// Get the value to display\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\t// Get the exclusion list\n\tvar exclude;\n\tif(this.exclude) {\n\t\texclude = this.exclude.split(\" \");\n\t} else {\n\t\texclude = [\"text\"]; \n\t}\n\t// Compose the template\n\tvar text = [];\n\tif(this.template && tiddler) {\n\t\tvar fields = [];\n\t\tfor(var fieldName in tiddler.fields) {\n\t\t\tif(exclude.indexOf(fieldName) === -1) {\n\t\t\t\tfields.push(fieldName);\n\t\t\t}\n\t\t}\n\t\tfields.sort();\n\t\tfor(var f=0; f<fields.length; f++) {\n\t\t\tfieldName = fields[f];\n\t\t\tif(exclude.indexOf(fieldName) === -1) {\n\t\t\t\tvar row = this.template,\n\t\t\t\t\tvalue = tiddler.getFieldString(fieldName);\n\t\t\t\tif(this.stripTitlePrefix && fieldName === \"title\") {\n\t\t\t\t\tvar reStrip = /^\\{[^\\}]+\\}(.+)/mg,\n\t\t\t\t\t\treMatch = reStrip.exec(value);\n\t\t\t\t\tif(reMatch) {\n\t\t\t\t\t\tvalue = reMatch[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\trow = $tw.utils.replaceString(row,\"$name$\",fieldName);\n\t\t\t\trow = $tw.utils.replaceString(row,\"$value$\",value);\n\t\t\t\trow = $tw.utils.replaceString(row,\"$encoded_value$\",$tw.utils.htmlEncode(value));\n\t\t\t\ttext.push(row);\n\t\t\t}\n\t\t}\n\t}\n\tthis.text = text.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.template || changedAttributes.exclude || changedAttributes.stripTitlePrefix || changedTiddlers[this.tiddlerTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.fields = FieldsWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/image.js": {
"title": "$:/core/modules/widgets/image.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/image.js\ntype: application/javascript\nmodule-type: widget\n\nThe image widget displays an image referenced with an external URI or with a local tiddler title.\n\n```\n<$image src=\"TiddlerTitle\" width=\"320\" height=\"400\" class=\"classnames\">\n```\n\nThe image source can be the title of an existing tiddler or the URL of an external image.\n\nExternal images always generate an HTML `<img>` tag.\n\nTiddlers that have a _canonical_uri field generate an HTML `<img>` tag with the src attribute containing the URI.\n\nTiddlers that contain image data generate an HTML `<img>` tag with the src attribute containing a base64 representation of the image.\n\nTiddlers that contain wikitext could be rendered to a DIV of the usual size of a tiddler, and then transformed to the size requested.\n\nThe width and height attributes are interpreted as a number of pixels, and do not need to include the \"px\" suffix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\t// Determine what type of image it is\n\tvar tag = \"img\", src = \"\",\n\t\ttiddler = this.wiki.getTiddler(this.imageSource);\n\tif(!tiddler) {\n\t\t// The source isn't the title of a tiddler, so we'll assume it's a URL\n\t\tsrc = this.getVariable(\"tv-get-export-image-link\",{params: [{name: \"src\",value: this.imageSource}],defaultValue: this.imageSource});\n\t} else {\n\t\t// Check if it is an image tiddler\n\t\tif(this.wiki.isImageTiddler(this.imageSource)) {\n\t\t\tvar type = tiddler.fields.type,\n\t\t\t\ttext = tiddler.fields.text,\n\t\t\t\t_canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t// If the tiddler has body text then it doesn't need to be lazily loaded\n\t\t\tif(text) {\n\t\t\t\t// Render the appropriate element for the image type\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = \"data:application/pdf;base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = \"data:image/svg+xml,\" + encodeURIComponent(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = \"data:\" + type + \";base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if(_canonical_uri) {\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\t\n\t\t\t} else {\n\t\t\t\t// Just trigger loading of the tiddler\n\t\t\t\tthis.wiki.getTiddlerText(this.imageSource);\n\t\t\t}\n\t\t}\n\t}\n\t// Create the element and assign the attributes\n\tvar domNode = this.document.createElement(tag);\n\tdomNode.setAttribute(\"src\",src);\n\tif(this.imageClass) {\n\t\tdomNode.setAttribute(\"class\",this.imageClass);\t\t\n\t}\n\tif(this.imageWidth) {\n\t\tdomNode.setAttribute(\"width\",this.imageWidth);\n\t}\n\tif(this.imageHeight) {\n\t\tdomNode.setAttribute(\"height\",this.imageHeight);\n\t}\n\tif(this.imageTooltip) {\n\t\tdomNode.setAttribute(\"title\",this.imageTooltip);\t\t\n\t}\n\tif(this.imageAlt) {\n\t\tdomNode.setAttribute(\"alt\",this.imageAlt);\t\t\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImageWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.imageSource = this.getAttribute(\"source\");\n\tthis.imageWidth = this.getAttribute(\"width\");\n\tthis.imageHeight = this.getAttribute(\"height\");\n\tthis.imageClass = this.getAttribute(\"class\");\n\tthis.imageTooltip = this.getAttribute(\"tooltip\");\n\tthis.imageAlt = this.getAttribute(\"alt\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.source || changedAttributes.width || changedAttributes.height || changedAttributes[\"class\"] || changedAttributes.tooltip || changedTiddlers[this.imageSource]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\t\n\t}\n};\n\nexports.image = ImageWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/importvariables.js": {
"title": "$:/core/modules/widgets/importvariables.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/importvariables.js\ntype: application/javascript\nmodule-type: widget\n\nImport variable definitions from other tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImportVariablesWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImportVariablesWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImportVariablesWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImportVariablesWidget.prototype.execute = function(tiddlerList) {\n\tvar self = this;\n\t// Get our parameters\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Compute the filter\n\tthis.tiddlerList = tiddlerList || this.wiki.filterTiddlers(this.filter,this);\n\t// Accumulate the <$set> widgets from each tiddler\n\tvar widgetStackStart,widgetStackEnd;\n\tfunction addWidgetNode(widgetNode) {\n\t\tif(widgetNode) {\n\t\t\tif(!widgetStackStart && !widgetStackEnd) {\n\t\t\t\twidgetStackStart = widgetNode;\n\t\t\t\twidgetStackEnd = widgetNode;\n\t\t\t} else {\n\t\t\t\twidgetStackEnd.children = [widgetNode];\n\t\t\t\twidgetStackEnd = widgetNode;\n\t\t\t}\n\t\t}\n\t}\n\t$tw.utils.each(this.tiddlerList,function(title) {\n\t\tvar parser = self.wiki.parseTiddler(title);\n\t\tif(parser) {\n\t\t\tvar parseTreeNode = parser.tree[0];\n\t\t\twhile(parseTreeNode && parseTreeNode.type === \"set\") {\n\t\t\t\taddWidgetNode({\n\t\t\t\t\ttype: \"set\",\n\t\t\t\t\tattributes: parseTreeNode.attributes,\n\t\t\t\t\tparams: parseTreeNode.params\n\t\t\t\t});\n\t\t\t\tparseTreeNode = parseTreeNode.children[0];\n\t\t\t}\n\t\t} \n\t});\n\t// Add our own children to the end of the pile\n\tvar parseTreeNodes;\n\tif(widgetStackStart && widgetStackEnd) {\n\t\tparseTreeNodes = [widgetStackStart];\n\t\twidgetStackEnd.children = this.parseTreeNode.children;\n\t} else {\n\t\tparseTreeNodes = this.parseTreeNode.children;\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImportVariablesWidget.prototype.refresh = function(changedTiddlers) {\n\t// Recompute our attributes and the filter list\n\tvar changedAttributes = this.computeAttributes(),\n\t\ttiddlerList = this.wiki.filterTiddlers(this.getAttribute(\"filter\"),this);\n\t// Refresh if the filter has changed, or the list of tiddlers has changed, or any of the tiddlers in the list has changed\n\tfunction haveListedTiddlersChanged() {\n\t\tvar changed = false;\n\t\ttiddlerList.forEach(function(title) {\n\t\t\tif(changedTiddlers[title]) {\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t});\n\t\treturn changed;\n\t}\n\tif(changedAttributes.filter || !$tw.utils.isArrayEqual(this.tiddlerList,tiddlerList) || haveListedTiddlersChanged()) {\n\t\t// Compute the filter\n\t\tthis.removeChildDomNodes();\n\t\tthis.execute(tiddlerList);\n\t\tthis.renderChildren(this.parentDomNode,this.findNextSiblingDomNode());\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.importvariables = ImportVariablesWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/keyboard.js": {
"title": "$:/core/modules/widgets/keyboard.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/keyboard.js\ntype: application/javascript\nmodule-type: widget\n\nKeyboard shortcut widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar KeyboardWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nKeyboardWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nKeyboardWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.tag && $tw.config.htmlUnsafeElements.indexOf(this.tag) === -1) {\n\t\ttag = this.tag;\n\t}\n\t// Create element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = (this[\"class\"] || \"\").split(\" \");\n\tclasses.push(\"tc-keyboard\");\n\tdomNode.className = classes.join(\" \");\n\t// Add a keyboard event handler\n\tdomNode.addEventListener(\"keydown\",function (event) {\n\t\tif($tw.keyboardManager.checkKeyDescriptors(event,self.keyInfoArray)) {\n\t\t\tself.invokeActions(self,event);\n\t\t\tif(self.actions) {\n\t\t\t\tself.invokeActionString(self.actions,self,event);\n\t\t\t}\n\t\t\tself.dispatchMessage(event);\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nKeyboardWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\")});\n};\n\n/*\nCompute the internal state of the widget\n*/\nKeyboardWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.actions = this.getAttribute(\"actions\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.key = this.getAttribute(\"key\");\n\tthis.tag = this.getAttribute(\"tag\");\n\tthis.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key);\n\tthis[\"class\"] = this.getAttribute(\"class\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nKeyboardWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.message || changedAttributes.param || changedAttributes.key || changedAttributes[\"class\"] || changedAttributes.tag) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.keyboard = KeyboardWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/link.js": {
"title": "$:/core/modules/widgets/link.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/link.js\ntype: application/javascript\nmodule-type: widget\n\nLink widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\nvar MISSING_LINK_CONFIG_TITLE = \"$:/config/MissingLinks\";\n\nvar LinkWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the value of the tv-wikilinks configuration macro\n\tvar wikiLinksMacro = this.getVariable(\"tv-wikilinks\"),\n\t\tuseWikiLinks = wikiLinksMacro ? (wikiLinksMacro.trim() !== \"no\") : true,\n\t\tmissingLinksEnabled = !(this.hideMissingLinks && this.isMissing && !this.isShadow);\n\t// Render the link if required\n\tif(useWikiLinks && missingLinksEnabled) {\n\t\tthis.renderLink(parent,nextSibling);\n\t} else {\n\t\t// Just insert the link text\n\t\tvar domNode = this.document.createElement(\"span\");\n\t\tparent.insertBefore(domNode,nextSibling);\n\t\tthis.renderChildren(domNode,null);\n\t\tthis.domNodes.push(domNode);\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.renderLink = function(parent,nextSibling) {\n\tvar self = this;\n\t// Sanitise the specified tag\n\tvar tag = this.linkTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"a\";\n\t}\n\t// Create our element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = [];\n\tif(this.linkClasses) {\n\t\tclasses.push(this.linkClasses);\n\t}\n\tclasses.push(\"tc-tiddlylink\");\n\tif(this.isShadow) {\n\t\tclasses.push(\"tc-tiddlylink-shadow\");\n\t}\n\tif(this.isMissing && !this.isShadow) {\n\t\tclasses.push(\"tc-tiddlylink-missing\");\n\t} else {\n\t\tif(!this.isMissing) {\n\t\t\tclasses.push(\"tc-tiddlylink-resolves\");\n\t\t}\n\t}\n\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t// Set an href\n\tvar wikilinkTransformFilter = this.getVariable(\"tv-filter-export-link\"),\n\t\twikiLinkText;\n\tif(wikilinkTransformFilter) {\n\t\t// Use the filter to construct the href\n\t\twikiLinkText = this.wiki.filterTiddlers(wikilinkTransformFilter,this,function(iterator) {\n\t\t\titerator(self.wiki.getTiddler(self.to),self.to)\n\t\t})[0];\n\t} else {\n\t\t// Expand the tv-wikilink-template variable to construct the href\n\t\tvar wikiLinkTemplateMacro = this.getVariable(\"tv-wikilink-template\"),\n\t\t\twikiLinkTemplate = wikiLinkTemplateMacro ? wikiLinkTemplateMacro.trim() : \"#$uri_encoded$\";\n\t\twikiLinkText = $tw.utils.replaceString(wikiLinkTemplate,\"$uri_encoded$\",encodeURIComponent(this.to));\n\t\twikiLinkText = $tw.utils.replaceString(wikiLinkText,\"$uri_doubleencoded$\",encodeURIComponent(encodeURIComponent(this.to)));\n\t}\n\t// Override with the value of tv-get-export-link if defined\n\twikiLinkText = this.getVariable(\"tv-get-export-link\",{params: [{name: \"to\",value: this.to}],defaultValue: wikiLinkText});\n\tif(tag === \"a\") {\n\t\tdomNode.setAttribute(\"href\",wikiLinkText);\n\t}\n\t// Set the tabindex\n\tif(this.tabIndex) {\n\t\tdomNode.setAttribute(\"tabindex\",this.tabIndex);\n\t}\n\t// Set the tooltip\n\t// HACK: Performance issues with re-parsing the tooltip prevent us defaulting the tooltip to \"<$transclude field='tooltip'><$transclude field='title'/></$transclude>\"\n\tvar tooltipWikiText = this.tooltip || this.getVariable(\"tv-wikilink-tooltip\");\n\tif(tooltipWikiText) {\n\t\tvar tooltipText = this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",tooltipWikiText,{\n\t\t\t\tparseAsInline: true,\n\t\t\t\tvariables: {\n\t\t\t\t\tcurrentTiddler: this.to\n\t\t\t\t},\n\t\t\t\tparentWidget: this\n\t\t\t});\n\t\tdomNode.setAttribute(\"title\",tooltipText);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"click\", handlerObject: this, handlerMethod: \"handleClickEvent\"},\n\t]);\n\t// Make the link draggable if required\n\tif(this.draggable === \"yes\") {\n\t\t$tw.utils.makeDraggable({\n\t\t\tdomNode: domNode,\n\t\t\tdragTiddlerFn: function() {return self.to;},\n\t\t\twidget: this\n\t\t});\n\t}\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nLinkWidget.prototype.handleClickEvent = function(event) {\n\t// Send the click on its way as a navigate event\n\tvar bounds = this.domNodes[0].getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1),\n\t\tmetaKey: event.metaKey,\n\t\tctrlKey: event.ctrlKey,\n\t\taltKey: event.altKey,\n\t\tshiftKey: event.shiftKey\n\t});\n\tif(this.domNodes[0].hasAttribute(\"href\")) {\n\t\tevent.preventDefault();\n\t}\n\tevent.stopPropagation();\n\treturn false;\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkWidget.prototype.execute = function() {\n\t// Pick up our attributes\n\tthis.to = this.getAttribute(\"to\",this.getVariable(\"currentTiddler\"));\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.linkClasses = this.getAttribute(\"class\");\n\tthis.tabIndex = this.getAttribute(\"tabindex\");\n\tthis.draggable = this.getAttribute(\"draggable\",\"yes\");\n\tthis.linkTag = this.getAttribute(\"tag\",\"a\");\n\t// Determine the link characteristics\n\tthis.isMissing = !this.wiki.tiddlerExists(this.to);\n\tthis.isShadow = this.wiki.isShadowTiddler(this.to);\n\tthis.hideMissingLinks = ($tw.wiki.getTiddlerText(MISSING_LINK_CONFIG_TITLE,\"yes\") === \"no\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedTiddlers[this.to] || changedAttributes[\"aria-label\"] || changedAttributes.tooltip || changedTiddlers[MISSING_LINK_CONFIG_TITLE]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.link = LinkWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/linkcatcher.js": {
"title": "$:/core/modules/widgets/linkcatcher.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/linkcatcher.js\ntype: application/javascript\nmodule-type: widget\n\nLinkcatcher widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkCatcherWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkCatcherWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkCatcherWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkCatcherWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.catchTo = this.getAttribute(\"to\");\n\tthis.catchMessage = this.getAttribute(\"message\");\n\tthis.catchSet = this.getAttribute(\"set\");\n\tthis.catchSetTo = this.getAttribute(\"setTo\");\n\tthis.catchActions = this.getAttribute(\"actions\");\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n\t// When executing actions we avoid trapping navigate events, so that we don't trigger ourselves recursively\n\tthis.executingActions = false;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkCatcherWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedAttributes.message || changedAttributes.set || changedAttributes.setTo) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\n/*\nHandle a tm-navigate event\n*/\nLinkCatcherWidget.prototype.handleNavigateEvent = function(event) {\n\tif(!this.executingActions) {\n\t\t// Execute the actions\n\t\tif(this.catchTo) {\n\t\t\tthis.wiki.setTextReference(this.catchTo,event.navigateTo,this.getVariable(\"currentTiddler\"));\n\t\t}\n\t\tif(this.catchMessage && this.parentWidget) {\n\t\t\tthis.parentWidget.dispatchEvent({\n\t\t\t\ttype: this.catchMessage,\n\t\t\t\tparam: event.navigateTo,\n\t\t\t\tnavigateTo: event.navigateTo\n\t\t\t});\n\t\t}\n\t\tif(this.catchSet) {\n\t\t\tvar tiddler = this.wiki.getTiddler(this.catchSet);\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: this.catchSet, text: this.catchSetTo}));\n\t\t}\n\t\tif(this.catchActions) {\n\t\t\tthis.executingActions = true;\n\t\t\tthis.invokeActionString(this.catchActions,this,event,{navigateTo: event.navigateTo});\n\t\t\tthis.executingActions = false;\n\t\t}\n\t} else {\n\t\t// This is a navigate event generated by the actions of this linkcatcher, so we don't trap it again, but just pass it to the parent\n\t\tthis.parentWidget.dispatchEvent({\n\t\t\ttype: \"tm-navigate\",\n\t\t\tparam: event.navigateTo,\n\t\t\tnavigateTo: event.navigateTo\n\t\t});\n\t}\n\treturn false;\n};\n\nexports.linkcatcher = LinkCatcherWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/list.js": {
"title": "$:/core/modules/widgets/list.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/list.js\ntype: application/javascript\nmodule-type: widget\n\nList and list item widgets\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\n/*\nThe list widget creates list element sub-widgets that reach back into the list widget for their configuration\n*/\n\nvar ListWidget = function(parseTreeNode,options) {\n\t// Initialise the storyviews if they've not been done already\n\tif(!this.storyViews) {\n\t\tListWidget.prototype.storyViews = {};\n\t\t$tw.modules.applyMethods(\"storyview\",this.storyViews);\n\t}\n\t// Main initialisation inherited from widget.js\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\t// Construct the storyview\n\tvar StoryView = this.storyViews[this.storyViewName];\n\tif(this.storyViewName && !StoryView) {\n\t\tStoryView = this.storyViews[\"classic\"];\n\t}\n\tif(StoryView && !this.document.isTiddlyWikiFakeDom) {\n\t\tthis.storyview = new StoryView(this);\n\t} else {\n\t\tthis.storyview = null;\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nListWidget.prototype.execute = function() {\n\t// Get our attributes\n\tthis.template = this.getAttribute(\"template\");\n\tthis.editTemplate = this.getAttribute(\"editTemplate\");\n\tthis.variableName = this.getAttribute(\"variable\",\"currentTiddler\");\n\tthis.storyViewName = this.getAttribute(\"storyview\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\t// Compose the list elements\n\tthis.list = this.getTiddlerList();\n\tvar members = [],\n\t\tself = this;\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\tmembers = this.getEmptyMessage();\n\t} else {\n\t\t$tw.utils.each(this.list,function(title,index) {\n\t\t\tmembers.push(self.makeItemTemplate(title));\n\t\t});\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(members);\n\t// Clear the last history\n\tthis.history = [];\n};\n\nListWidget.prototype.getTiddlerList = function() {\n\tvar defaultFilter = \"[!is[system]sort[title]]\";\n\treturn this.wiki.filterTiddlers(this.getAttribute(\"filter\",defaultFilter),this);\n};\n\nListWidget.prototype.getEmptyMessage = function() {\n\tvar emptyMessage = this.getAttribute(\"emptyMessage\",\"\"),\n\t\tparser = this.wiki.parseText(\"text/vnd.tiddlywiki\",emptyMessage,{parseAsInline: true});\n\tif(parser) {\n\t\treturn parser.tree;\n\t} else {\n\t\treturn [];\n\t}\n};\n\n/*\nCompose the template for a list item\n*/\nListWidget.prototype.makeItemTemplate = function(title) {\n\t// Check if the tiddler is a draft\n\tvar tiddler = this.wiki.getTiddler(title),\n\t\tisDraft = tiddler && tiddler.hasField(\"draft.of\"),\n\t\ttemplate = this.template,\n\t\ttemplateTree;\n\tif(isDraft && this.editTemplate) {\n\t\ttemplate = this.editTemplate;\n\t}\n\t// Compose the transclusion of the template\n\tif(template) {\n\t\ttemplateTree = [{type: \"transclude\", attributes: {tiddler: {type: \"string\", value: template}}}];\n\t} else {\n\t\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\t\ttemplateTree = this.parseTreeNode.children;\n\t\t} else {\n\t\t\t// Default template is a link to the title\n\t\t\ttemplateTree = [{type: \"element\", tag: this.parseTreeNode.isBlock ? \"div\" : \"span\", children: [{type: \"link\", attributes: {to: {type: \"string\", value: title}}, children: [\n\t\t\t\t\t{type: \"text\", text: title}\n\t\t\t]}]}];\n\t\t}\n\t}\n\t// Return the list item\n\treturn {type: \"listitem\", itemTitle: title, variableName: this.variableName, children: templateTree};\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tresult;\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshStart) {\n\t\tthis.storyview.refreshStart(changedTiddlers,changedAttributes);\n\t}\n\t// Completely refresh if any of our attributes have changed\n\tif(changedAttributes.filter || changedAttributes.template || changedAttributes.editTemplate || changedAttributes.emptyMessage || changedAttributes.storyview || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\tresult = true;\n\t} else {\n\t\t// Handle any changes to the list\n\t\tresult = this.handleListChanges(changedTiddlers);\n\t\t// Handle any changes to the history stack\n\t\tif(this.historyTitle && changedTiddlers[this.historyTitle]) {\n\t\t\tthis.handleHistoryChanges();\n\t\t}\n\t}\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshEnd) {\n\t\tthis.storyview.refreshEnd(changedTiddlers,changedAttributes);\n\t}\n\treturn result;\n};\n\n/*\nHandle any changes to the history list\n*/\nListWidget.prototype.handleHistoryChanges = function() {\n\t// Get the history data\n\tvar newHistory = this.wiki.getTiddlerDataCached(this.historyTitle,[]);\n\t// Ignore any entries of the history that match the previous history\n\tvar entry = 0;\n\twhile(entry < newHistory.length && entry < this.history.length && newHistory[entry].title === this.history[entry].title) {\n\t\tentry++;\n\t}\n\t// Navigate forwards to each of the new tiddlers\n\twhile(entry < newHistory.length) {\n\t\tif(this.storyview && this.storyview.navigateTo) {\n\t\t\tthis.storyview.navigateTo(newHistory[entry]);\n\t\t}\n\t\tentry++;\n\t}\n\t// Update the history\n\tthis.history = newHistory;\n};\n\n/*\nProcess any changes to the list\n*/\nListWidget.prototype.handleListChanges = function(changedTiddlers) {\n\t// Get the new list\n\tvar prevList = this.list;\n\tthis.list = this.getTiddlerList();\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\t// Check if it was empty before\n\t\tif(prevList.length === 0) {\n\t\t\t// If so, just refresh the empty message\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\t// Replace the previous content with the empty message\n\t\t\tfor(t=this.children.length-1; t>=0; t--) {\n\t\t\t\tthis.removeListItem(t);\n\t\t\t}\n\t\t\tvar nextSibling = this.findNextSiblingDomNode();\n\t\t\tthis.makeChildWidgets(this.getEmptyMessage());\n\t\t\tthis.renderChildren(this.parentDomNode,nextSibling);\n\t\t\treturn true;\n\t\t}\n\t} else {\n\t\t// If the list was empty then we need to remove the empty message\n\t\tif(prevList.length === 0) {\n\t\t\tthis.removeChildDomNodes();\n\t\t\tthis.children = [];\n\t\t}\n\t\t// Cycle through the list, inserting and removing list items as needed\n\t\tvar hasRefreshed = false;\n\t\tfor(var t=0; t<this.list.length; t++) {\n\t\t\tvar index = this.findListItem(t,this.list[t]);\n\t\t\tif(index === undefined) {\n\t\t\t\t// The list item must be inserted\n\t\t\t\tthis.insertListItem(t,this.list[t]);\n\t\t\t\thasRefreshed = true;\n\t\t\t} else {\n\t\t\t\t// There are intervening list items that must be removed\n\t\t\t\tfor(var n=index-1; n>=t; n--) {\n\t\t\t\t\tthis.removeListItem(n);\n\t\t\t\t\thasRefreshed = true;\n\t\t\t\t}\n\t\t\t\t// Refresh the item we're reusing\n\t\t\t\tvar refreshed = this.children[t].refresh(changedTiddlers);\n\t\t\t\thasRefreshed = hasRefreshed || refreshed;\n\t\t\t}\n\t\t}\n\t\t// Remove any left over items\n\t\tfor(t=this.children.length-1; t>=this.list.length; t--) {\n\t\t\tthis.removeListItem(t);\n\t\t\thasRefreshed = true;\n\t\t}\n\t\treturn hasRefreshed;\n\t}\n};\n\n/*\nFind the list item with a given title, starting from a specified position\n*/\nListWidget.prototype.findListItem = function(startIndex,title) {\n\twhile(startIndex < this.children.length) {\n\t\tif(this.children[startIndex].parseTreeNode.itemTitle === title) {\n\t\t\treturn startIndex;\n\t\t}\n\t\tstartIndex++;\n\t}\n\treturn undefined;\n};\n\n/*\nInsert a new list item at the specified index\n*/\nListWidget.prototype.insertListItem = function(index,title) {\n\t// Create, insert and render the new child widgets\n\tvar widget = this.makeChildWidget(this.makeItemTemplate(title));\n\twidget.parentDomNode = this.parentDomNode; // Hack to enable findNextSiblingDomNode() to work\n\tthis.children.splice(index,0,widget);\n\tvar nextSibling = widget.findNextSiblingDomNode();\n\twidget.render(this.parentDomNode,nextSibling);\n\t// Animate the insertion if required\n\tif(this.storyview && this.storyview.insert) {\n\t\tthis.storyview.insert(widget);\n\t}\n\treturn true;\n};\n\n/*\nRemove the specified list item\n*/\nListWidget.prototype.removeListItem = function(index) {\n\tvar widget = this.children[index];\n\t// Animate the removal if required\n\tif(this.storyview && this.storyview.remove) {\n\t\tthis.storyview.remove(widget);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n\t// Remove the child widget\n\tthis.children.splice(index,1);\n};\n\nexports.list = ListWidget;\n\nvar ListItemWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListItemWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListItemWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nListItemWidget.prototype.execute = function() {\n\t// Set the current list item title\n\tthis.setVariable(this.parseTreeNode.variableName,this.parseTreeNode.itemTitle);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListItemWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.listitem = ListItemWidget;\n\n})();",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/macrocall.js": {
"title": "$:/core/modules/widgets/macrocall.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/macrocall.js\ntype: application/javascript\nmodule-type: widget\n\nMacrocall widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar MacroCallWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nMacroCallWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nMacroCallWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nMacroCallWidget.prototype.execute = function() {\n\t// Get the parse type if specified\n\tthis.parseType = this.getAttribute(\"$type\",\"text/vnd.tiddlywiki\");\n\tthis.renderOutput = this.getAttribute(\"$output\",\"text/html\");\n\t// Merge together the parameters specified in the parse tree with the specified attributes\n\tvar params = this.parseTreeNode.params ? this.parseTreeNode.params.slice(0) : [];\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparams.push({name: name, value: attribute});\t\t\t\n\t\t}\n\t});\n\t// Get the macro value\n\tvar text = this.getVariable(this.parseTreeNode.name || this.getAttribute(\"$name\"),{params: params}),\n\t\tparseTreeNodes;\n\t// Are we rendering to HTML?\n\tif(this.renderOutput === \"text/html\") {\n\t\t// If so we'll return the parsed macro\n\t\tvar parser = this.wiki.parseText(this.parseType,text,\n\t\t\t\t\t\t\t{parseAsInline: !this.parseTreeNode.isBlock});\n\t\tparseTreeNodes = parser ? parser.tree : [];\n\t} else {\n\t\t// Otherwise, we'll render the text\n\t\tvar plainText = this.wiki.renderText(\"text/plain\",this.parseType,text,{parentWidget: this});\n\t\tparseTreeNodes = [{type: \"text\", text: plainText}];\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nMacroCallWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\t// Rerender ourselves\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.macrocall = MacroCallWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/navigator.js": {
"title": "$:/core/modules/widgets/navigator.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/navigator.js\ntype: application/javascript\nmodule-type: widget\n\nNavigator widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar IMPORT_TITLE = \"$:/Import\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigatorWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"},\n\t\t{type: \"tm-edit-tiddler\", handler: \"handleEditTiddlerEvent\"},\n\t\t{type: \"tm-delete-tiddler\", handler: \"handleDeleteTiddlerEvent\"},\n\t\t{type: \"tm-save-tiddler\", handler: \"handleSaveTiddlerEvent\"},\n\t\t{type: \"tm-cancel-tiddler\", handler: \"handleCancelTiddlerEvent\"},\n\t\t{type: \"tm-close-tiddler\", handler: \"handleCloseTiddlerEvent\"},\n\t\t{type: \"tm-close-all-tiddlers\", handler: \"handleCloseAllTiddlersEvent\"},\n\t\t{type: \"tm-close-other-tiddlers\", handler: \"handleCloseOtherTiddlersEvent\"},\n\t\t{type: \"tm-new-tiddler\", handler: \"handleNewTiddlerEvent\"},\n\t\t{type: \"tm-import-tiddlers\", handler: \"handleImportTiddlersEvent\"},\n\t\t{type: \"tm-perform-import\", handler: \"handlePerformImportEvent\"},\n\t\t{type: \"tm-fold-tiddler\", handler: \"handleFoldTiddlerEvent\"},\n\t\t{type: \"tm-fold-other-tiddlers\", handler: \"handleFoldOtherTiddlersEvent\"},\n\t\t{type: \"tm-fold-all-tiddlers\", handler: \"handleFoldAllTiddlersEvent\"},\n\t\t{type: \"tm-unfold-all-tiddlers\", handler: \"handleUnfoldAllTiddlersEvent\"},\n\t\t{type: \"tm-rename-tiddler\", handler: \"handleRenameTiddlerEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigatorWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigatorWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigatorWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.storyTitle = this.getAttribute(\"story\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\tthis.setVariable(\"tv-story-list\",this.storyTitle);\n\tthis.setVariable(\"tv-history-list\",this.historyTitle);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nNavigatorWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.story || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nNavigatorWidget.prototype.getStoryList = function() {\n\treturn this.storyTitle ? this.wiki.getTiddlerList(this.storyTitle) : null;\n};\n\nNavigatorWidget.prototype.saveStoryList = function(storyList) {\n\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\t{title: this.storyTitle},\n\t\tstoryTiddler,\n\t\t{list: storyList}\n\t));\n};\n\nNavigatorWidget.prototype.removeTitleFromStory = function(storyList,title) {\n\tvar p = storyList.indexOf(title);\n\twhile(p !== -1) {\n\t\tstoryList.splice(p,1);\n\t\tp = storyList.indexOf(title);\n\t}\n};\n\nNavigatorWidget.prototype.replaceFirstTitleInStory = function(storyList,oldTitle,newTitle) {\n\tvar pos = storyList.indexOf(oldTitle);\n\tif(pos !== -1) {\n\t\tstoryList[pos] = newTitle;\n\t\tdo {\n\t\t\tpos = storyList.indexOf(oldTitle,pos + 1);\n\t\t\tif(pos !== -1) {\n\t\t\t\tstoryList.splice(pos,1);\n\t\t\t}\n\t\t} while(pos !== -1);\n\t} else {\n\t\tstoryList.splice(0,0,newTitle);\n\t}\n};\n\nNavigatorWidget.prototype.addToStory = function(title,fromTitle) {\n\tvar storyList = this.getStoryList();\n\t// Quit if we cannot get hold of the story list\n\tif(!storyList) {\n\t\treturn;\n\t}\n\t// See if the tiddler is already there\n\tvar slot = storyList.indexOf(title);\n\t// Quit if it already exists in the story river\n\tif(slot >= 0) {\n\t\treturn;\n\t}\n\t// First we try to find the position of the story element we navigated from\n\tvar fromIndex = storyList.indexOf(fromTitle);\n\tif(fromIndex >= 0) {\n\t\t// The tiddler is added from inside the river\n\t\t// Determine where to insert the tiddler; Fallback is \"below\"\n\t\tswitch(this.getAttribute(\"openLinkFromInsideRiver\",\"below\")) {\n\t\t\tcase \"top\":\n\t\t\t\tslot = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"bottom\":\n\t\t\t\tslot = storyList.length;\n\t\t\t\tbreak;\n\t\t\tcase \"above\":\n\t\t\t\tslot = fromIndex;\n\t\t\t\tbreak;\n\t\t\tcase \"below\": // Intentional fall-through\n\t\t\tdefault:\n\t\t\t\tslot = fromIndex + 1;\n\t\t\t\tbreak;\n\t\t}\n\t} else {\n\t\t// The tiddler is opened from outside the river. Determine where to insert the tiddler; default is \"top\"\n\t\tif(this.getAttribute(\"openLinkFromOutsideRiver\",\"top\") === \"bottom\") {\n\t\t\t// Insert at bottom\n\t\t\tslot = storyList.length;\n\t\t} else {\n\t\t\t// Insert at top\n\t\t\tslot = 0;\n\t\t}\n\t}\n\t// Add the tiddler\n\tstoryList.splice(slot,0,title);\n\t// Save the story\n\tthis.saveStoryList(storyList);\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\n*/\nNavigatorWidget.prototype.addToHistory = function(title,fromPageRect) {\n\tthis.wiki.addToHistory(title,fromPageRect,this.historyTitle);\n};\n\n/*\nHandle a tm-navigate event\n*/\nNavigatorWidget.prototype.handleNavigateEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-navigating\",event);\n\tif(event.navigateTo) {\n\t\tthis.addToStory(event.navigateTo,event.navigateFromTitle);\n\t\tif(!event.navigateSuppressNavigation) {\n\t\t\tthis.addToHistory(event.navigateTo,event.navigateFromClientRect);\n\t\t}\n\t}\n\treturn false;\n};\n\n// Close a specified tiddler\nNavigatorWidget.prototype.handleCloseTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\tstoryList = this.getStoryList();\n\t// Look for tiddlers with this title to close\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\treturn false;\n};\n\n// Close all tiddlers\nNavigatorWidget.prototype.handleCloseAllTiddlersEvent = function(event) {\n\tthis.saveStoryList([]);\n\treturn false;\n};\n\n// Close other tiddlers\nNavigatorWidget.prototype.handleCloseOtherTiddlersEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle;\n\tthis.saveStoryList([title]);\n\treturn false;\n};\n\n// Place a tiddler in edit mode\nNavigatorWidget.prototype.handleEditTiddlerEvent = function(event) {\n\tvar editTiddler = $tw.hooks.invokeHook(\"th-editing-tiddler\",event);\n\tif(!editTiddler) {\n\t\treturn false;\n\t}\n\tvar self = this;\n\tfunction isUnmodifiedShadow(title) {\n\t\treturn self.wiki.isShadowTiddler(title) && !self.wiki.tiddlerExists(title);\n\t}\n\tfunction confirmEditShadow(title) {\n\t\treturn confirm($tw.language.getString(\n\t\t\t\"ConfirmEditShadowTiddler\",\n\t\t\t{variables:\n\t\t\t\t{title: title}\n\t\t\t}\n\t\t));\n\t}\n\tvar title = event.param || event.tiddlerTitle;\n\tif(isUnmodifiedShadow(title) && !confirmEditShadow(title)) {\n\t\treturn false;\n\t}\n\t// Replace the specified tiddler with a draft in edit mode\n\tvar draftTiddler = this.makeDraftTiddler(title);\n\t// Update the story and history if required\n\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\tvar draftTitle = draftTiddler.fields.title,\n\t\t\tstoryList = this.getStoryList();\n\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\tthis.saveStoryList(storyList);\n\t\treturn false;\n\t}\n};\n\n// Delete a tiddler\nNavigatorWidget.prototype.handleDeleteTiddlerEvent = function(event) {\n\t// Get the tiddler we're deleting\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList(),\n\t\toriginalTitle = tiddler ? tiddler.fields[\"draft.of\"] : \"\",\n\t\toriginalTiddler = originalTitle ? this.wiki.getTiddler(originalTitle) : undefined,\n\t\tconfirmationTitle;\n\tif(!tiddler) {\n\t\treturn false;\n\t}\n\t// Check if the tiddler we're deleting is in draft mode\n\tif(originalTitle) {\n\t\t// If so, we'll prompt for confirmation referencing the original tiddler\n\t\tconfirmationTitle = originalTitle;\n\t} else {\n\t\t// If not a draft, then prompt for confirmation referencing the specified tiddler\n\t\tconfirmationTitle = title;\n\t}\n\t// Seek confirmation\n\tif((this.wiki.getTiddler(originalTitle) || (tiddler.fields.text || \"\") !== \"\") && !confirm($tw.language.getString(\n\t\t\t\t\"ConfirmDeleteTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: confirmationTitle}\n\t\t\t\t}\n\t\t\t))) {\n\t\treturn false;\n\t}\n\t// Delete the original tiddler\n\tif(originalTitle) {\n\t\tif(originalTiddler) {\n\t\t\t$tw.hooks.invokeHook(\"th-deleting-tiddler\",originalTiddler);\n\t\t}\n\t\tthis.wiki.deleteTiddler(originalTitle);\n\t\tthis.removeTitleFromStory(storyList,originalTitle);\n\t}\n\t// Invoke the hook function and delete this tiddler\n\t$tw.hooks.invokeHook(\"th-deleting-tiddler\",tiddler);\n\tthis.wiki.deleteTiddler(title);\n\t// Remove the closed tiddler from the story\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\treturn false;\n};\n\n/*\nCreate/reuse the draft tiddler for a given title\n*/\nNavigatorWidget.prototype.makeDraftTiddler = function(targetTitle) {\n\t// See if there is already a draft tiddler for this tiddler\n\tvar draftTitle = this.wiki.findDraft(targetTitle);\n\tif(draftTitle) {\n\t\treturn this.wiki.getTiddler(draftTitle);\n\t}\n\t// Get the current value of the tiddler we're editing\n\tvar tiddler = this.wiki.getTiddler(targetTitle);\n\t// Save the initial value of the draft tiddler\n\tdraftTitle = this.generateDraftTitle(targetTitle);\n\tvar draftTiddler = new $tw.Tiddler(\n\t\t\ttiddler,\n\t\t\t{\n\t\t\t\ttitle: draftTitle,\n\t\t\t\t\"draft.title\": targetTitle,\n\t\t\t\t\"draft.of\": targetTitle\n\t\t\t},\n\t\t\tthis.wiki.getModificationFields()\n\t\t);\n\tthis.wiki.addTiddler(draftTiddler);\n\treturn draftTiddler;\n};\n\n/*\nGenerate a title for the draft of a given tiddler\n*/\nNavigatorWidget.prototype.generateDraftTitle = function(title) {\n\tvar c = 0,\n\t\tdraftTitle;\n\tdo {\n\t\tdraftTitle = \"Draft \" + (c ? (c + 1) + \" \" : \"\") + \"of '\" + title + \"'\";\n\t\tc++;\n\t} while(this.wiki.tiddlerExists(draftTitle));\n\treturn draftTitle;\n};\n\n// Take a tiddler out of edit mode, saving the changes\nNavigatorWidget.prototype.handleSaveTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList();\n\t// Replace the original tiddler with the draft\n\tif(tiddler) {\n\t\tvar draftTitle = (tiddler.fields[\"draft.title\"] || \"\").trim(),\n\t\t\tdraftOf = (tiddler.fields[\"draft.of\"] || \"\").trim();\n\t\tif(draftTitle) {\n\t\t\tvar isRename = draftOf !== draftTitle,\n\t\t\t\tisConfirmed = true;\n\t\t\tif(isRename && this.wiki.tiddlerExists(draftTitle)) {\n\t\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\t\"ConfirmOverwriteTiddler\",\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{title: draftTitle}\n\t\t\t\t\t}\n\t\t\t\t));\n\t\t\t}\n\t\t\tif(isConfirmed) {\n\t\t\t\t// Create the new tiddler and pass it through the th-saving-tiddler hook\n\t\t\t\tvar newTiddler = new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\ttitle: draftTitle,\n\t\t\t\t\t\"draft.title\": undefined,\n\t\t\t\t\t\"draft.of\": undefined\n\t\t\t\t},this.wiki.getModificationFields());\n\t\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-saving-tiddler\",newTiddler);\n\t\t\t\tthis.wiki.addTiddler(newTiddler);\n\t\t\t\t// If enabled, relink references to renamed tiddler\n\t\t\t\tvar shouldRelink = this.getAttribute(\"relinkOnRename\",\"no\").toLowerCase().trim() === \"yes\";\n\t\t\t\tif(isRename && shouldRelink && this.wiki.tiddlerExists(draftOf)) {\nconsole.log(\"Relinking '\" + draftOf + \"' to '\" + draftTitle + \"'\");\n\t\t\t\t\tthis.wiki.relinkTiddler(draftOf,draftTitle);\n\t\t\t\t}\n\t\t\t\t// Remove the draft tiddler\n\t\t\t\tthis.wiki.deleteTiddler(title);\n\t\t\t\t// Remove the original tiddler if we're renaming it\n\t\t\t\tif(isRename) {\n\t\t\t\t\tthis.wiki.deleteTiddler(draftOf);\n\t\t\t\t}\n\t\t\t\t// #2381 always remove new title & old\n\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t\tthis.removeTitleFromStory(storyList,draftOf);\n\t\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\t\t// Replace the draft in the story with the original\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\t\t\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\t\t\t\tif(draftTitle !== this.storyTitle) {\n\t\t\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Trigger an autosave\n\t\t\t\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Take a tiddler out of edit mode without saving the changes\nNavigatorWidget.prototype.handleCancelTiddlerEvent = function(event) {\n\t// Flip the specified tiddler from draft back to the original\n\tvar draftTitle = event.param || event.tiddlerTitle,\n\t\tdraftTiddler = this.wiki.getTiddler(draftTitle),\n\t\toriginalTitle = draftTiddler && draftTiddler.fields[\"draft.of\"];\n\tif(draftTiddler && originalTitle) {\n\t\t// Ask for confirmation if the tiddler text has changed\n\t\tvar isConfirmed = true,\n\t\t\toriginalTiddler = this.wiki.getTiddler(originalTitle),\n\t\t\tstoryList = this.getStoryList();\n\t\tif(this.wiki.isDraftModified(draftTitle)) {\n\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\"ConfirmCancelTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: draftTitle}\n\t\t\t\t}\n\t\t\t));\n\t\t}\n\t\t// Remove the draft tiddler\n\t\tif(isConfirmed) {\n\t\t\tthis.wiki.deleteTiddler(draftTitle);\n\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\tif(originalTiddler) {\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,draftTitle,originalTitle);\n\t\t\t\t\tthis.addToHistory(originalTitle,event.navigateFromClientRect);\n\t\t\t\t} else {\n\t\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t\t}\n\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Create a new draft tiddler\n// event.param can either be the title of a template tiddler, or a hashmap of fields.\n//\n// The title of the newly created tiddler follows these rules:\n// * If a hashmap was used and a title field was specified, use that title\n// * If a hashmap was used without a title field, use a default title, if necessary making it unique with a numeric suffix\n// * If a template tiddler was used, use the title of the template, if necessary making it unique with a numeric suffix\n//\n// If a draft of the target tiddler already exists then it is reused\nNavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {\n\t// Get the story details\n\tvar storyList = this.getStoryList(),\n\t\ttemplateTiddler, additionalFields, title, draftTitle, existingTiddler;\n\t// Get the template tiddler (if any)\n\tif(typeof event.param === \"string\") {\n\t\t// Get the template tiddler\n\t\ttemplateTiddler = this.wiki.getTiddler(event.param);\n\t\t// Generate a new title\n\t\ttitle = this.wiki.generateNewTitle(event.param || $tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t}\n\t// Get the specified additional fields\n\tif(typeof event.paramObject === \"object\") {\n\t\tadditionalFields = event.paramObject;\n\t}\n\tif(typeof event.param === \"object\") { // Backwards compatibility with 5.1.3\n\t\tadditionalFields = event.param;\n\t}\n\tif(additionalFields && additionalFields.title) {\n\t\ttitle = additionalFields.title;\n\t}\n\t// Make a copy of the additional fields excluding any blank ones\n\tvar filteredAdditionalFields = $tw.utils.extend({},additionalFields);\n\tObject.keys(filteredAdditionalFields).forEach(function(fieldName) {\n\t\tif(filteredAdditionalFields[fieldName] === \"\") {\n\t\t\tdelete filteredAdditionalFields[fieldName];\n\t\t}\n\t});\n\t// Generate a title if we don't have one\n\ttitle = title || this.wiki.generateNewTitle($tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t// Find any existing draft for this tiddler\n\tdraftTitle = this.wiki.findDraft(title);\n\t// Pull in any existing tiddler\n\tif(draftTitle) {\n\t\texistingTiddler = this.wiki.getTiddler(draftTitle);\n\t} else {\n\t\tdraftTitle = this.generateDraftTitle(title);\n\t\texistingTiddler = this.wiki.getTiddler(title);\n\t}\n\t// Merge the tags\n\tvar mergedTags = [];\n\tif(existingTiddler && existingTiddler.fields.tags) {\n\t\t$tw.utils.pushTop(mergedTags,existingTiddler.fields.tags);\n\t}\n\tif(additionalFields && additionalFields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,$tw.utils.parseStringArray(additionalFields.tags));\n\t}\n\tif(templateTiddler && templateTiddler.fields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,templateTiddler.fields.tags);\n\t}\n\t// Save the draft tiddler\n\tvar draftTiddler = new $tw.Tiddler({\n\t\t\ttext: \"\",\n\t\t\t\"draft.title\": title\n\t\t},\n\t\ttemplateTiddler,\n\t\tadditionalFields,\n\t\texistingTiddler,\n\t\tfilteredAdditionalFields,\n\t\tthis.wiki.getCreationFields(),\n\t\t{\n\t\t\ttitle: draftTitle,\n\t\t\t\"draft.of\": title,\n\t\t\ttags: mergedTags\n\t\t},this.wiki.getModificationFields());\n\tthis.wiki.addTiddler(draftTiddler);\n\t// Update the story to insert the new draft at the top and remove any existing tiddler\n\tif(storyList.indexOf(draftTitle) === -1) {\n\t\tvar slot = storyList.indexOf(event.navigateFromTitle);\n\t\tstoryList.splice(slot + 1,0,draftTitle);\n\t}\n\tif(storyList.indexOf(title) !== -1) {\n\t\tstoryList.splice(storyList.indexOf(title),1);\n\t}\n\tthis.saveStoryList(storyList);\n\t// Add a new record to the top of the history stack\n\tthis.addToHistory(draftTitle);\n\treturn false;\n};\n\n// Import JSON tiddlers into a pending import tiddler\nNavigatorWidget.prototype.handleImportTiddlersEvent = function(event) {\n\t// Get the tiddlers\n\tvar tiddlers = [];\n\ttry {\n\t\ttiddlers = JSON.parse(event.param);\n\t} catch(e) {\n\t}\n\t// Get the current $:/Import tiddler\n\tvar importTiddler = this.wiki.getTiddler(IMPORT_TITLE),\n\t\timportData = this.wiki.getTiddlerData(IMPORT_TITLE,{}),\n\t\tnewFields = new Object({\n\t\t\ttitle: IMPORT_TITLE,\n\t\t\ttype: \"application/json\",\n\t\t\t\"plugin-type\": \"import\",\n\t\t\t\"status\": \"pending\"\n\t\t}),\n\t\tincomingTiddlers = [];\n\t// Process each tiddler\n\timportData.tiddlers = importData.tiddlers || {};\n\t$tw.utils.each(tiddlers,function(tiddlerFields) {\n\t\ttiddlerFields.title = $tw.utils.trim(tiddlerFields.title);\n\t\tvar title = tiddlerFields.title;\n\t\tif(title) {\n\t\t\tincomingTiddlers.push(title);\n\t\t\timportData.tiddlers[title] = tiddlerFields;\n\t\t}\n\t});\n\t// Give the active upgrader modules a chance to process the incoming tiddlers\n\tvar messages = this.wiki.invokeUpgraders(incomingTiddlers,importData.tiddlers);\n\t$tw.utils.each(messages,function(message,title) {\n\t\tnewFields[\"message-\" + title] = message;\n\t});\n\t// Deselect any suppressed tiddlers\n\t$tw.utils.each(importData.tiddlers,function(tiddler,title) {\n\t\tif($tw.utils.count(tiddler) === 0) {\n\t\t\tnewFields[\"selection-\" + title] = \"unchecked\";\n\t\t}\n\t});\n\t// Save the $:/Import tiddler\n\tnewFields.text = JSON.stringify(importData,null,$tw.config.preferences.jsonSpaces);\n\tthis.wiki.addTiddler(new $tw.Tiddler(importTiddler,newFields));\n\t// Update the story and history details\n\tif(this.getVariable(\"tv-auto-open-on-import\") !== \"no\") {\n\t\tvar storyList = this.getStoryList(),\n\t\t\thistory = [];\n\t\t// Add it to the story\n\t\tif(storyList.indexOf(IMPORT_TITLE) === -1) {\n\t\t\tstoryList.unshift(IMPORT_TITLE);\n\t\t}\n\t\t// And to history\n\t\thistory.push(IMPORT_TITLE);\n\t\t// Save the updated story and history\n\t\tthis.saveStoryList(storyList);\n\t\tthis.addToHistory(history);\n\t}\n\treturn false;\n};\n\n//\nNavigatorWidget.prototype.handlePerformImportEvent = function(event) {\n\tvar self = this,\n\t\timportTiddler = this.wiki.getTiddler(event.param),\n\t\timportData = this.wiki.getTiddlerDataCached(event.param,{tiddlers: {}}),\n\t\timportReport = [];\n\t// Add the tiddlers to the store\n\timportReport.push($tw.language.getString(\"Import/Imported/Hint\") + \"\\n\");\n\t$tw.utils.each(importData.tiddlers,function(tiddlerFields) {\n\t\tvar title = tiddlerFields.title;\n\t\tif(title && importTiddler && importTiddler.fields[\"selection-\" + title] !== \"unchecked\") {\n\t\t\tvar tiddler = new $tw.Tiddler(tiddlerFields);\n\t\t\ttiddler = $tw.hooks.invokeHook(\"th-importing-tiddler\",tiddler);\n\t\t\tself.wiki.addTiddler(tiddler);\n\t\t\timportReport.push(\"# [[\" + tiddlerFields.title + \"]]\");\n\t\t}\n\t});\n\t// Replace the $:/Import tiddler with an import report\n\tthis.wiki.addTiddler(new $tw.Tiddler({\n\t\ttitle: event.param,\n\t\ttext: importReport.join(\"\\n\"),\n\t\t\"status\": \"complete\"\n\t}));\n\t// Navigate to the $:/Import tiddler\n\tthis.addToHistory([event.param]);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n};\n\nNavigatorWidget.prototype.handleFoldTiddlerEvent = function(event) {\n\tvar paramObject = event.paramObject || {};\n\tif(paramObject.foldedState) {\n\t\tvar foldedState = this.wiki.getTiddlerText(paramObject.foldedState,\"show\") === \"show\" ? \"hide\" : \"show\";\n\t\tthis.wiki.setText(paramObject.foldedState,\"text\",null,foldedState);\n\t}\n};\n\nNavigatorWidget.prototype.handleFoldOtherTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,event.param === title ? \"show\" : \"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleFoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleUnfoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"show\");\n\t});\n};\n\nNavigatorWidget.prototype.handleRenameTiddlerEvent = function(event) {\n\tvar paramObject = event.paramObject || {},\n\t\tfrom = paramObject.from || event.tiddlerTitle,\n\t\tto = paramObject.to;\n\t$tw.wiki.renameTiddler(from,to);\n};\n\nexports.navigator = NavigatorWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/password.js": {
"title": "$:/core/modules/widgets/password.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/password.js\ntype: application/javascript\nmodule-type: widget\n\nPassword widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar PasswordWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nPasswordWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nPasswordWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the current password\n\tvar password = $tw.browser ? $tw.utils.getPassword(this.passwordName) || \"\" : \"\";\n\t// Create our element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"password\");\n\tdomNode.setAttribute(\"value\",password);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nPasswordWidget.prototype.handleChangeEvent = function(event) {\n\tvar password = this.domNodes[0].value;\n\treturn $tw.utils.savePassword(this.passwordName,password);\n};\n\n/*\nCompute the internal state of the widget\n*/\nPasswordWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.passwordName = this.getAttribute(\"name\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nPasswordWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.password = PasswordWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/radio.js": {
"title": "$:/core/modules/widgets/radio.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/radio.js\ntype: application/javascript\nmodule-type: widget\n\nSet a field or index at a given tiddler via radio buttons\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RadioWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRadioWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRadioWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",this.radioClass);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"radio\");\n\tif(this.getValue() == this.radioValue) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nRadioWidget.prototype.getValue = function() {\n\tvar value,\n\t\ttiddler = this.wiki.getTiddler(this.radioTitle);\n\tif (this.radioIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.radioTitle,this.radioIndex);\n\t} else {\n\t\tvalue = tiddler && tiddler.getFieldString(this.radioField);\n\t}\n\treturn value;\n};\n\nRadioWidget.prototype.setValue = function() {\n\tif(this.radioIndex) {\n\t\tthis.wiki.setText(this.radioTitle,\"\",this.radioIndex,this.radioValue);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.radioTitle),\n\t\t\taddition = {};\n\t\taddition[this.radioField] = this.radioValue;\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),{title: this.radioTitle},tiddler,addition,this.wiki.getModificationFields()));\n\t}\n};\n\nRadioWidget.prototype.handleChangeEvent = function(event) {\n\tif(this.inputDomNode.checked) {\n\t\tthis.setValue();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRadioWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.radioTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.radioField = this.getAttribute(\"field\",\"text\");\n\tthis.radioIndex = this.getAttribute(\"index\");\n\tthis.radioValue = this.getAttribute(\"value\");\n\tthis.radioClass = this.getAttribute(\"class\",\"\");\n\tif(this.radioClass !== \"\") {\n\t\tthis.radioClass += \" \";\n\t}\n\tthis.radioClass += \"tc-radio\";\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRadioWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.value || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.radioTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue() === this.radioValue;\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.radio = RadioWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/raw.js": {
"title": "$:/core/modules/widgets/raw.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/raw.js\ntype: application/javascript\nmodule-type: widget\n\nRaw widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RawWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRawWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRawWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar div = this.document.createElement(\"div\");\n\tdiv.innerHTML=this.parseTreeNode.html;\n\tparent.insertBefore(div,nextSibling);\n\tthis.domNodes.push(div);\t\n};\n\n/*\nCompute the internal state of the widget\n*/\nRawWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRawWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.raw = RawWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/reveal.js": {
"title": "$:/core/modules/widgets/reveal.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/reveal.js\ntype: application/javascript\nmodule-type: widget\n\nReveal widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RevealWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRevealWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRevealWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.revealTag && $tw.config.htmlUnsafeElements.indexOf(this.revealTag) === -1) {\n\t\ttag = this.revealTag;\n\t}\n\tvar domNode = this.document.createElement(tag);\n\tvar classes = this[\"class\"].split(\" \") || [];\n\tclasses.push(\"tc-reveal\");\n\tdomNode.className = classes.join(\" \");\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\t}\n\tif(!this.isOpen) {\n\t\tdomNode.setAttribute(\"hidden\",\"true\");\n\t}\n\tthis.domNodes.push(domNode);\n};\n\nRevealWidget.prototype.positionPopup = function(domNode) {\n\tdomNode.style.position = \"absolute\";\n\tdomNode.style.zIndex = \"1000\";\n\tswitch(this.position) {\n\t\tcase \"left\":\n\t\t\tdomNode.style.left = (this.popup.left - domNode.offsetWidth) + \"px\";\n\t\t\tdomNode.style.top = this.popup.top + \"px\";\n\t\t\tbreak;\n\t\tcase \"above\":\n\t\t\tdomNode.style.left = this.popup.left + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top - domNode.offsetHeight) + \"px\";\n\t\t\tbreak;\n\t\tcase \"aboveright\":\n\t\t\tdomNode.style.left = (this.popup.left + this.popup.width) + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top + this.popup.height - domNode.offsetHeight) + \"px\";\n\t\t\tbreak;\n\t\tcase \"right\":\n\t\t\tdomNode.style.left = (this.popup.left + this.popup.width) + \"px\";\n\t\t\tdomNode.style.top = this.popup.top + \"px\";\n\t\t\tbreak;\n\t\tcase \"belowleft\":\n\t\t\tdomNode.style.left = (this.popup.left + this.popup.width - domNode.offsetWidth) + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top + this.popup.height) + \"px\";\n\t\t\tbreak;\n\t\tdefault: // Below\n\t\t\tdomNode.style.left = this.popup.left + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top + this.popup.height) + \"px\";\n\t\t\tbreak;\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRevealWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.state = this.getAttribute(\"state\");\n\tthis.revealTag = this.getAttribute(\"tag\");\n\tthis.type = this.getAttribute(\"type\");\n\tthis.text = this.getAttribute(\"text\");\n\tthis.position = this.getAttribute(\"position\");\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis.style = this.getAttribute(\"style\",\"\");\n\tthis[\"default\"] = this.getAttribute(\"default\",\"\");\n\tthis.animate = this.getAttribute(\"animate\",\"no\");\n\tthis.retain = this.getAttribute(\"retain\",\"no\");\n\tthis.openAnimation = this.animate === \"no\" ? undefined : \"open\";\n\tthis.closeAnimation = this.animate === \"no\" ? undefined : \"close\";\n\t// Compute the title of the state tiddler and read it\n\tthis.stateTitle = this.state;\n\tthis.readState();\n\t// Construct the child widgets\n\tvar childNodes = this.isOpen ? this.parseTreeNode.children : [];\n\tthis.hasChildNodes = this.isOpen;\n\tthis.makeChildWidgets(childNodes);\n};\n\n/*\nRead the state tiddler\n*/\nRevealWidget.prototype.readState = function() {\n\t// Read the information from the state tiddler\n\tvar state = this.stateTitle ? this.wiki.getTextReference(this.stateTitle,this[\"default\"],this.getVariable(\"currentTiddler\")) : this[\"default\"];\n\tswitch(this.type) {\n\t\tcase \"popup\":\n\t\t\tthis.readPopupState(state);\n\t\t\tbreak;\n\t\tcase \"match\":\n\t\t\tthis.readMatchState(state);\n\t\t\tbreak;\n\t\tcase \"nomatch\":\n\t\t\tthis.readMatchState(state);\n\t\t\tthis.isOpen = !this.isOpen;\n\t\t\tbreak;\n\t}\n};\n\nRevealWidget.prototype.readMatchState = function(state) {\n\tthis.isOpen = state === this.text;\n};\n\nRevealWidget.prototype.readPopupState = function(state) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/,\n\t\tmatch = popupLocationRegExp.exec(state);\n\t// Check if the state matches the location regexp\n\tif(match) {\n\t\t// If so, we're open\n\t\tthis.isOpen = true;\n\t\t// Get the location\n\t\tthis.popup = {\n\t\t\tleft: parseFloat(match[1]),\n\t\t\ttop: parseFloat(match[2]),\n\t\t\twidth: parseFloat(match[3]),\n\t\t\theight: parseFloat(match[4])\n\t\t};\n\t} else {\n\t\t// If not, we're closed\n\t\tthis.isOpen = false;\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRevealWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.state || changedAttributes.type || changedAttributes.text || changedAttributes.position || changedAttributes[\"default\"] || changedAttributes.animate) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false,\n\t\t\tcurrentlyOpen = this.isOpen;\n\t\tthis.readState();\n\t\tif(this.isOpen !== currentlyOpen) {\n\t\t\tif(this.retain === \"yes\") {\n\t\t\t\tthis.updateState();\n\t\t\t} else {\n\t\t\t\tthis.refreshSelf();\n\t\t\t\trefreshed = true;\n\t\t\t}\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\n/*\nCalled by refresh() to dynamically show or hide the content\n*/\nRevealWidget.prototype.updateState = function() {\n\t// Read the current state\n\tthis.readState();\n\t// Construct the child nodes if needed\n\tvar domNode = this.domNodes[0];\n\tif(this.isOpen && !this.hasChildNodes) {\n\t\tthis.hasChildNodes = true;\n\t\tthis.makeChildWidgets(this.parseTreeNode.children);\n\t\tthis.renderChildren(domNode,null);\n\t}\n\t// Animate our DOM node\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\n\t}\n\tif(this.isOpen) {\n\t\tdomNode.removeAttribute(\"hidden\");\n $tw.anim.perform(this.openAnimation,domNode);\n\t} else {\n\t\t$tw.anim.perform(this.closeAnimation,domNode,{callback: function() {\n\t\t\tdomNode.setAttribute(\"hidden\",\"true\");\n }});\n\t}\n};\n\nexports.reveal = RevealWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/scrollable.js": {
"title": "$:/core/modules/widgets/scrollable.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/scrollable.js\ntype: application/javascript\nmodule-type: widget\n\nScrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ScrollableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.scaleFactor = 1;\n\tthis.addEventListeners([\n\t\t{type: \"tm-scroll\", handler: \"handleScrollEvent\"}\n\t]);\n\tif($tw.browser) {\n\t\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\tfunction(callback) {\n\t\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t\t};\n\t\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\t\twindow.webkitCancelAnimationFrame ||\n\t\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\t\twindow.mozCancelAnimationFrame ||\n\t\t\twindow.mozCancelRequestAnimationFrame ||\n\t\t\tfunction(id) {\n\t\t\t\twindow.clearTimeout(id);\n\t\t\t};\n\t}\n};\n\n/*\nInherit from the base widget class\n*/\nScrollableWidget.prototype = new Widget();\n\nScrollableWidget.prototype.cancelScroll = function() {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(window,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle a scroll event\n*/\nScrollableWidget.prototype.handleScrollEvent = function(event) {\n\t// Pass the scroll event through if our offsetsize is larger than our scrollsize\n\tif(this.outerDomNode.scrollWidth <= this.outerDomNode.offsetWidth && this.outerDomNode.scrollHeight <= this.outerDomNode.offsetHeight && this.fallthrough === \"yes\") {\n\t\treturn true;\n\t}\n\tthis.scrollIntoView(event.target);\n\treturn false; // Handled event\n};\n\n/*\nScroll an element into view\n*/\nScrollableWidget.prototype.scrollIntoView = function(element) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tthis.cancelScroll();\n\tthis.startTime = Date.now();\n\tvar scrollPosition = {\n\t\tx: this.outerDomNode.scrollLeft,\n\t\ty: this.outerDomNode.scrollTop\n\t};\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar scrollableBounds = this.outerDomNode.getBoundingClientRect(),\n\t\tclientTargetBounds = element.getBoundingClientRect(),\n\t\tbounds = {\n\t\t\tleft: clientTargetBounds.left + scrollPosition.x - scrollableBounds.left,\n\t\t\ttop: clientTargetBounds.top + scrollPosition.y - scrollableBounds.top,\n\t\t\twidth: clientTargetBounds.width,\n\t\t\theight: clientTargetBounds.height\n\t\t};\n\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\tvar getEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\t// If the target is already visible then stay where we are\n\t\t\tif(targetPos >= currentPos && (targetPos + targetSize) <= (currentPos + currentSize)) {\n\t\t\t\treturn currentPos;\n\t\t\t// If the target is above/left of the current view, then scroll to its top/left\n\t\t\t} else if(targetPos <= currentPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// If the target is smaller than the window and the scroll position is too far up, then scroll till the target is at the bottom of the window\n\t\t\t} else if(targetSize < currentSize && currentPos < (targetPos + targetSize - currentSize)) {\n\t\t\t\treturn targetPos + targetSize - currentSize;\n\t\t\t// If the target is big, then just scroll to the top\n\t\t\t} else if(currentPos < targetPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// Otherwise, stay where we are\n\t\t\t} else {\n\t\t\t\treturn currentPos;\n\t\t\t}\n\t\t},\n\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,this.outerDomNode.offsetWidth),\n\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,this.outerDomNode.offsetHeight);\n\t// Only scroll if necessary\n\tif(endX !== scrollPosition.x || endY !== scrollPosition.y) {\n\t\tvar self = this,\n\t\t\tdrawFrame;\n\t\tdrawFrame = function () {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll();\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\tself.outerDomNode.scrollLeft = scrollPosition.x + (endX - scrollPosition.x) * t;\n\t\t\tself.outerDomNode.scrollTop = scrollPosition.y + (endY - scrollPosition.y) * t;\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(window,drawFrame);\n\t\t\t}\n\t\t};\n\t\tdrawFrame();\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nScrollableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create elements\n\tthis.outerDomNode = this.document.createElement(\"div\");\n\t$tw.utils.setStyle(this.outerDomNode,[\n\t\t{overflowY: \"auto\"},\n\t\t{overflowX: \"auto\"},\n\t\t{webkitOverflowScrolling: \"touch\"}\n\t]);\n\tthis.innerDomNode = this.document.createElement(\"div\");\n\tthis.outerDomNode.appendChild(this.innerDomNode);\n\t// Assign classes\n\tthis.outerDomNode.className = this[\"class\"] || \"\";\n\t// Insert element\n\tparent.insertBefore(this.outerDomNode,nextSibling);\n\tthis.renderChildren(this.innerDomNode,null);\n\tthis.domNodes.push(this.outerDomNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nScrollableWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.fallthrough = this.getAttribute(\"fallthrough\",\"yes\");\n\tthis[\"class\"] = this.getAttribute(\"class\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nScrollableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.scrollable = ScrollableWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/select.js": {
"title": "$:/core/modules/widgets/select.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/select.js\ntype: application/javascript\nmodule-type: widget\n\nSelect widget:\n\n```\n<$select tiddler=\"MyTiddler\" field=\"text\">\n<$list filter=\"[tag[chapter]]\">\n<option value=<<currentTiddler>>>\n<$view field=\"description\"/>\n</option>\n</$list>\n</$select>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SelectWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSelectWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSelectWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\tthis.setSelectValue();\n\t$tw.utils.addEventListeners(this.getSelectDomNode(),[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n};\n\n/*\nHandle a change event\n*/\nSelectWidget.prototype.handleChangeEvent = function(event) {\n\t// Get the new value and assign it to the tiddler\n\tif(this.selectMultiple == false) {\n\t\tvar value = this.getSelectDomNode().value;\n\t} else {\n\t\tvar value = this.getSelectValues()\n\t\t\t\tvalue = $tw.utils.stringifyList(value);\n\t}\n\tthis.wiki.setText(this.selectTitle,this.selectField,this.selectIndex,value);\n\t// Trigger actions\n\tif(this.selectActions) {\n\t\tthis.invokeActionString(this.selectActions,this,event);\n\t}\n};\n\n/*\nIf necessary, set the value of the select element to the current value\n*/\nSelectWidget.prototype.setSelectValue = function() {\n\tvar value = this.selectDefault;\n\t// Get the value\n\tif(this.selectIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.selectTitle,this.selectIndex);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.selectTitle);\n\t\tif(tiddler) {\n\t\t\tif(this.selectField === \"text\") {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.selectTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.selectField)) {\n\t\t\t\t\tvalue = tiddler.getFieldString(this.selectField);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.selectField === \"title\") {\n\t\t\t\tvalue = this.selectTitle;\n\t\t\t}\n\t\t}\n\t}\n\t// Assign it to the select element if it's different than the current value\n\tif (this.selectMultiple) {\n\t\tvalue = value === undefined ? \"\" : value;\n\t\tvar select = this.getSelectDomNode();\n\t\tvar values = Array.isArray(value) ? value : $tw.utils.parseStringArray(value);\n\t\tfor(var i=0; i < select.children.length; i++){\n\t\t\tif(values.indexOf(select.children[i].value) != -1) {\n\t\t\t\tselect.children[i].selected = true;\n\t\t\t}\n\t\t}\n\t\t\n\t} else {\n\t\tvar domNode = this.getSelectDomNode();\n\t\tif(domNode.value !== value) {\n\t\t\tdomNode.value = value;\n\t\t}\n\t}\n};\n\n/*\nGet the DOM node of the select element\n*/\nSelectWidget.prototype.getSelectDomNode = function() {\n\treturn this.children[0].domNodes[0];\n};\n\n// Return an array of the selected opion values\n// select is an HTML select element\nSelectWidget.prototype.getSelectValues = function() {\n\tvar select, result, options, opt;\n\tselect = this.getSelectDomNode();\n\tresult = [];\n\toptions = select && select.options;\n\tfor (var i=0; i<options.length; i++) {\n\t\topt = options[i];\n\t\tif (opt.selected) {\n\t\t\tresult.push(opt.value || opt.text);\n\t\t}\n\t}\n\treturn result;\n}\n\n/*\nCompute the internal state of the widget\n*/\nSelectWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.selectActions = this.getAttribute(\"actions\");\n\tthis.selectTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.selectField = this.getAttribute(\"field\",\"text\");\n\tthis.selectIndex = this.getAttribute(\"index\");\n\tthis.selectClass = this.getAttribute(\"class\");\n\tthis.selectDefault = this.getAttribute(\"default\");\n\tthis.selectMultiple = this.getAttribute(\"multiple\", false);\n\tthis.selectSize = this.getAttribute(\"size\");\n\t// Make the child widgets\n\tvar selectNode = {\n\t\ttype: \"element\",\n\t\ttag: \"select\",\n\t\tchildren: this.parseTreeNode.children\n\t};\n\tif(this.selectClass) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"class\",this.selectClass);\n\t}\n\tif(this.selectMultiple) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"multiple\",\"multiple\");\n\t}\n\tif(this.selectSize) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"size\",this.selectSize);\n\t}\n\tthis.makeChildWidgets([selectNode]);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSelectWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// If we're using a different tiddler/field/index then completely refresh ourselves\n\tif(changedAttributes.selectTitle || changedAttributes.selectField || changedAttributes.selectIndex) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t// If the target tiddler value has changed, just update setting and refresh the children\n\t} else {\n\t\tvar childrenRefreshed = this.refreshChildren(changedTiddlers);\n\t\tif(changedTiddlers[this.selectTitle] || childrenRefreshed) {\n\t\t\tthis.setSelectValue();\n\t\t} \n\t\treturn childrenRefreshed;\n\t}\n};\n\nexports.select = SelectWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/set.js": {
"title": "$:/core/modules/widgets/set.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/set.js\ntype: application/javascript\nmodule-type: widget\n\nSet variable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.setName = this.getAttribute(\"name\",\"currentTiddler\");\n\tthis.setFilter = this.getAttribute(\"filter\");\n\tthis.setSelect = this.getAttribute(\"select\");\n\tthis.setTiddler = this.getAttribute(\"tiddler\");\n\tthis.setField = this.getAttribute(\"field\");\n\tthis.setIndex = this.getAttribute(\"index\");\n\tthis.setValue = this.getAttribute(\"value\");\n\tthis.setEmptyValue = this.getAttribute(\"emptyValue\");\n\t// Set context variable\n\tthis.setVariable(this.setName,this.getValue(),this.parseTreeNode.params);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nGet the value to be assigned\n*/\nSetWidget.prototype.getValue = function() {\n\tvar value = this.setValue;\n\tif(this.setTiddler) {\n\t\tvar tiddler = this.wiki.getTiddler(this.setTiddler);\n\t\tif(!tiddler) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t} else if(this.setField) {\n\t\t\tvalue = tiddler.getFieldString(this.setField) || this.setEmptyValue;\n\t\t} else if(this.setIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(this.setTiddler,this.setIndex,this.setEmptyValue);\n\t\t} else {\n\t\t\tvalue = tiddler.fields.text || this.setEmptyValue ;\n\t\t}\n\t} else if(this.setFilter) {\n\t\tvar results = this.wiki.filterTiddlers(this.setFilter,this);\n\t\tif(!this.setValue) {\n\t\t\tvar select;\n\t\t\tif(this.setSelect) {\n\t\t\t\tselect = parseInt(this.setSelect,10);\n\t\t\t}\n\t\t\tif(select !== undefined) {\n\t\t\t\tvalue = results[select] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = $tw.utils.stringifyList(results);\t\t\t\n\t\t\t}\n\t\t}\n\t\tif(results.length === 0 && this.setEmptyValue !== undefined) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t}\n\t} else if(!value && this.setEmptyValue) {\n\t\tvalue = this.setEmptyValue;\n\t}\n\treturn value || \"\";\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSetWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.filter || changedAttributes.select || changedAttributes.tiddler || (this.setTiddler && changedTiddlers[this.setTiddler]) || changedAttributes.field || changedAttributes.index || changedAttributes.value || changedAttributes.emptyValue ||\n\t (this.setFilter && this.getValue() != this.variables[this.setName].value)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.setvariable = SetWidget;\nexports.set = SetWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/text.js": {
"title": "$:/core/modules/widgets/text.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/text.js\ntype: application/javascript\nmodule-type: widget\n\nText node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TextNodeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTextNodeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTextNodeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar text = this.getAttribute(\"text\",this.parseTreeNode.text || \"\");\n\ttext = text.replace(/\\r/mg,\"\");\n\tvar textNode = this.document.createTextNode(text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTextNodeWidget.prototype.execute = function() {\n\t// Nothing to do for a text node\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTextNodeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.text) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.text = TextNodeWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/tiddler.js": {
"title": "$:/core/modules/widgets/tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/tiddler.js\ntype: application/javascript\nmodule-type: widget\n\nTiddler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTiddlerWidget.prototype.execute = function() {\n\tthis.tiddlerState = this.computeTiddlerState();\n\tthis.setVariable(\"currentTiddler\",this.tiddlerState.currentTiddler);\n\tthis.setVariable(\"missingTiddlerClass\",this.tiddlerState.missingTiddlerClass);\n\tthis.setVariable(\"shadowTiddlerClass\",this.tiddlerState.shadowTiddlerClass);\n\tthis.setVariable(\"systemTiddlerClass\",this.tiddlerState.systemTiddlerClass);\n\tthis.setVariable(\"tiddlerTagClasses\",this.tiddlerState.tiddlerTagClasses);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nCompute the tiddler state flags\n*/\nTiddlerWidget.prototype.computeTiddlerState = function() {\n\t// Get our parameters\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Compute the state\n\tvar state = {\n\t\tcurrentTiddler: this.tiddlerTitle || \"\",\n\t\tmissingTiddlerClass: (this.wiki.tiddlerExists(this.tiddlerTitle) || this.wiki.isShadowTiddler(this.tiddlerTitle)) ? \"tc-tiddler-exists\" : \"tc-tiddler-missing\",\n\t\tshadowTiddlerClass: this.wiki.isShadowTiddler(this.tiddlerTitle) ? \"tc-tiddler-shadow\" : \"\",\n\t\tsystemTiddlerClass: this.wiki.isSystemTiddler(this.tiddlerTitle) ? \"tc-tiddler-system\" : \"\",\n\t\ttiddlerTagClasses: this.getTagClasses()\n\t};\n\t// Compute a simple hash to make it easier to detect changes\n\tstate.hash = state.currentTiddler + state.missingTiddlerClass + state.shadowTiddlerClass + state.systemTiddlerClass + state.tiddlerTagClasses;\n\treturn state;\n};\n\n/*\nCreate a string of CSS classes derived from the tags of the current tiddler\n*/\nTiddlerWidget.prototype.getTagClasses = function() {\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\tif(tiddler) {\n\t\tvar tags = [];\n\t\t$tw.utils.each(tiddler.fields.tags,function(tag) {\n\t\t\ttags.push(\"tc-tagged-\" + encodeURIComponent(tag));\n\t\t});\n\t\treturn tags.join(\" \");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tnewTiddlerState = this.computeTiddlerState();\n\tif(changedAttributes.tiddler || newTiddlerState.hash !== this.tiddlerState.hash) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.tiddler = TiddlerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/transclude.js": {
"title": "$:/core/modules/widgets/transclude.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/transclude.js\ntype: application/javascript\nmodule-type: widget\n\nTransclude widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TranscludeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTranscludeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTranscludeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTranscludeWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.transcludeTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.transcludeSubTiddler = this.getAttribute(\"subtiddler\");\n\tthis.transcludeField = this.getAttribute(\"field\");\n\tthis.transcludeIndex = this.getAttribute(\"index\");\n\tthis.transcludeMode = this.getAttribute(\"mode\");\n\t// Parse the text reference\n\tvar parseAsInline = !this.parseTreeNode.isBlock;\n\tif(this.transcludeMode === \"inline\") {\n\t\tparseAsInline = true;\n\t} else if(this.transcludeMode === \"block\") {\n\t\tparseAsInline = false;\n\t}\n\tvar parser = this.wiki.parseTextReference(\n\t\t\t\t\t\tthis.transcludeTitle,\n\t\t\t\t\t\tthis.transcludeField,\n\t\t\t\t\t\tthis.transcludeIndex,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tparseAsInline: parseAsInline,\n\t\t\t\t\t\t\tsubTiddler: this.transcludeSubTiddler\n\t\t\t\t\t\t}),\n\t\tparseTreeNodes = parser ? parser.tree : this.parseTreeNode.children;\n\t// Set context variables for recursion detection\n\tvar recursionMarker = this.makeRecursionMarker();\n\tthis.setVariable(\"transclusion\",recursionMarker);\n\t// Check for recursion\n\tif(parser) {\n\t\tif(this.parentWidget && this.parentWidget.hasVariable(\"transclusion\",recursionMarker)) {\n\t\t\tparseTreeNodes = [{type: \"element\", tag: \"span\", attributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-error\"}\n\t\t\t}, children: [\n\t\t\t\t{type: \"text\", text: $tw.language.getString(\"Error/RecursiveTransclusion\")}\n\t\t\t]}];\n\t\t}\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nCompose a string comprising the title, field and/or index to identify this transclusion for recursion detection\n*/\nTranscludeWidget.prototype.makeRecursionMarker = function() {\n\tvar output = [];\n\toutput.push(\"{\");\n\toutput.push(this.getVariable(\"currentTiddler\",{defaultValue: \"\"}));\n\toutput.push(\"|\");\n\toutput.push(this.transcludeTitle || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeField || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeIndex || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeSubTiddler || \"\");\n\toutput.push(\"}\");\n\treturn output.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTranscludeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedTiddlers[this.transcludeTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.transclude = TranscludeWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/vars.js": {
"title": "$:/core/modules/widgets/vars.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/vars.js\ntype: application/javascript\nmodule-type: widget\n\nThis widget allows multiple variables to be set in one go:\n\n```\n\\define helloworld() Hello world!\n<$vars greeting=\"Hi\" me={{!!title}} sentence=<<helloworld>>>\n <<greeting>>! I am <<me>> and I say: <<sentence>>\n</$vars>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar VarsWidget = function(parseTreeNode,options) {\n\t// Call the constructor\n\tWidget.call(this);\n\t// Initialise\t\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nVarsWidget.prototype = Object.create(Widget.prototype);\n\n/*\nRender this widget into the DOM\n*/\nVarsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nVarsWidget.prototype.execute = function() {\n\t// Parse variables\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(val,key) {\n\t\tif(key.charAt(0) !== \"$\") {\n\t\t\tself.setVariable(key,val);\n\t\t}\n\t});\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nVarsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"vars\"] = VarsWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/view.js": {
"title": "$:/core/modules/widgets/view.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/view.js\ntype: application/javascript\nmodule-type: widget\n\nView widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ViewWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nViewWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nViewWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tif(this.text) {\n\t\tvar textNode = this.document.createTextNode(this.text);\n\t\tparent.insertBefore(textNode,nextSibling);\n\t\tthis.domNodes.push(textNode);\n\t} else {\n\t\tthis.makeChildWidgets();\n\t\tthis.renderChildren(parent,nextSibling);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nViewWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.viewTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.viewSubtiddler = this.getAttribute(\"subtiddler\");\n\tthis.viewField = this.getAttribute(\"field\",\"text\");\n\tthis.viewIndex = this.getAttribute(\"index\");\n\tthis.viewFormat = this.getAttribute(\"format\",\"text\");\n\tthis.viewTemplate = this.getAttribute(\"template\",\"\");\n\tthis.viewMode = this.getAttribute(\"mode\",\"block\");\n\tswitch(this.viewFormat) {\n\t\tcase \"htmlwikified\":\n\t\t\tthis.text = this.getValueAsHtmlWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"plainwikified\":\n\t\t\tthis.text = this.getValueAsPlainWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"htmlencodedplainwikified\":\n\t\t\tthis.text = this.getValueAsHtmlEncodedPlainWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"htmlencoded\":\n\t\t\tthis.text = this.getValueAsHtmlEncoded();\n\t\t\tbreak;\n\t\tcase \"urlencoded\":\n\t\t\tthis.text = this.getValueAsUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"doubleurlencoded\":\n\t\t\tthis.text = this.getValueAsDoubleUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"date\":\n\t\t\tthis.text = this.getValueAsDate(this.viewTemplate);\n\t\t\tbreak;\n\t\tcase \"relativedate\":\n\t\t\tthis.text = this.getValueAsRelativeDate();\n\t\t\tbreak;\n\t\tcase \"stripcomments\":\n\t\t\tthis.text = this.getValueAsStrippedComments();\n\t\t\tbreak;\n\t\tcase \"jsencoded\":\n\t\t\tthis.text = this.getValueAsJsEncoded();\n\t\t\tbreak;\n\t\tdefault: // \"text\"\n\t\t\tthis.text = this.getValueAsText();\n\t\t\tbreak;\n\t}\n};\n\n/*\nThe various formatter functions are baked into this widget for the moment. Eventually they will be replaced by macro functions\n*/\n\n/*\nRetrieve the value of the widget. Options are:\nasString: Optionally return the value as a string\n*/\nViewWidget.prototype.getValue = function(options) {\n\toptions = options || {};\n\tvar value = options.asString ? \"\" : undefined;\n\tif(this.viewIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.viewTitle,this.viewIndex);\n\t} else {\n\t\tvar tiddler;\n\t\tif(this.viewSubtiddler) {\n\t\t\ttiddler = this.wiki.getSubTiddler(this.viewTitle,this.viewSubtiddler);\t\n\t\t} else {\n\t\t\ttiddler = this.wiki.getTiddler(this.viewTitle);\n\t\t}\n\t\tif(tiddler) {\n\t\t\tif(this.viewField === \"text\" && !this.viewSubtiddler) {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.viewTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.viewField)) {\n\t\t\t\t\tif(options.asString) {\n\t\t\t\t\t\tvalue = tiddler.getFieldString(this.viewField);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue = tiddler.fields[this.viewField];\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.viewField === \"title\") {\n\t\t\t\tvalue = this.viewTitle;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\nViewWidget.prototype.getValueAsText = function() {\n\treturn this.getValue({asString: true});\n};\n\nViewWidget.prototype.getValueAsHtmlWikified = function(mode) {\n\treturn this.wiki.renderText(\"text/html\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t});\n};\n\nViewWidget.prototype.getValueAsPlainWikified = function(mode) {\n\treturn this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t});\n};\n\nViewWidget.prototype.getValueAsHtmlEncodedPlainWikified = function(mode) {\n\treturn $tw.utils.htmlEncode(this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t}));\n};\n\nViewWidget.prototype.getValueAsHtmlEncoded = function() {\n\treturn $tw.utils.htmlEncode(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsUrlEncoded = function() {\n\treturn encodeURIComponent(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsDoubleUrlEncoded = function() {\n\treturn encodeURIComponent(encodeURIComponent(this.getValueAsText()));\n};\n\nViewWidget.prototype.getValueAsDate = function(format) {\n\tformat = format || \"YYYY MM DD 0hh:0mm\";\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.formatDateString(value,format);\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsRelativeDate = function(format) {\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.getRelativeDate((new Date()) - (new Date(value))).description;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsStrippedComments = function() {\n\tvar lines = this.getValueAsText().split(\"\\n\"),\n\t\tout = [];\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar text = lines[line];\n\t\tif(!/^\\s*\\/\\/#/.test(text)) {\n\t\t\tout.push(text);\n\t\t}\n\t}\n\treturn out.join(\"\\n\");\n};\n\nViewWidget.prototype.getValueAsJsEncoded = function() {\n\treturn $tw.utils.stringify(this.getValueAsText());\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nViewWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.template || changedAttributes.format || changedTiddlers[this.viewTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.view = ViewWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/widget.js": {
"title": "$:/core/modules/widgets/widget.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/widget.js\ntype: application/javascript\nmodule-type: widget\n\nWidget base class\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate a widget object for a parse tree node\n\tparseTreeNode: reference to the parse tree node to be rendered\n\toptions: see below\nOptions include:\n\twiki: mandatory reference to wiki associated with this render tree\n\tparentWidget: optional reference to a parent renderer node for the context chain\n\tdocument: optional document object to use instead of global document\n*/\nvar Widget = function(parseTreeNode,options) {\n\tif(arguments.length > 0) {\n\t\tthis.initialise(parseTreeNode,options);\n\t}\n};\n\n/*\nInitialise widget properties. These steps are pulled out of the constructor so that we can reuse them in subclasses\n*/\nWidget.prototype.initialise = function(parseTreeNode,options) {\n\toptions = options || {};\n\t// Save widget info\n\tthis.parseTreeNode = parseTreeNode;\n\tthis.wiki = options.wiki;\n\tthis.parentWidget = options.parentWidget;\n\tthis.variablesConstructor = function() {};\n\tthis.variablesConstructor.prototype = this.parentWidget ? this.parentWidget.variables : {};\n\tthis.variables = new this.variablesConstructor();\n\tthis.document = options.document;\n\tthis.attributes = {};\n\tthis.children = [];\n\tthis.domNodes = [];\n\tthis.eventListeners = {};\n\t// Hashmap of the widget classes\n\tif(!this.widgetClasses) {\n\t\tWidget.prototype.widgetClasses = $tw.modules.applyMethods(\"widget\");\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWidget.prototype.execute = function() {\n\tthis.makeChildWidgets();\n};\n\n/*\nSet the value of a context variable\nname: name of the variable\nvalue: value of the variable\nparams: array of {name:, default:} for each parameter\n*/\nWidget.prototype.setVariable = function(name,value,params) {\n\tthis.variables[name] = {value: value, params: params};\n};\n\n/*\nGet the prevailing value of a context variable\nname: name of variable\noptions: see below\nOptions include\nparams: array of {name:, value:} for each parameter\ndefaultValue: default value if the variable is not defined\n*/\nWidget.prototype.getVariable = function(name,options) {\n\toptions = options || {};\n\tvar actualParams = options.params || [],\n\t\tparentWidget = this.parentWidget;\n\t// Check for the variable defined in the parent widget (or an ancestor in the prototype chain)\n\tif(parentWidget && name in parentWidget.variables) {\n\t\tvar variable = parentWidget.variables[name],\n\t\t\tvalue = variable.value;\n\t\t// Substitute any parameters specified in the definition\n\t\tvalue = this.substituteVariableParameters(value,variable.params,actualParams);\n\t\tvalue = this.substituteVariableReferences(value);\n\t\treturn value;\n\t}\n\t// If the variable doesn't exist in the parent widget then look for a macro module\n\treturn this.evaluateMacroModule(name,actualParams,options.defaultValue);\n};\n\nWidget.prototype.substituteVariableParameters = function(text,formalParams,actualParams) {\n\tif(formalParams) {\n\t\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\t\tparamInfo, paramValue;\n\t\t// Step through each of the parameters in the macro definition\n\t\tfor(var p=0; p<formalParams.length; p++) {\n\t\t\t// Check if we've got a macro call parameter with the same name\n\t\t\tparamInfo = formalParams[p];\n\t\t\tparamValue = undefined;\n\t\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If not, use the next available anonymous macro call parameter\n\t\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\t\tnextAnonParameter++;\n\t\t\t}\n\t\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t\t}\n\t\t\t// If we've still not got a value, use the default, if any\n\t\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t\t// Replace any instances of this parameter\n\t\t\ttext = $tw.utils.replaceString(text,new RegExp(\"\\\\$\" + $tw.utils.escapeRegExp(paramInfo.name) + \"\\\\$\",\"mg\"),paramValue);\n\t\t}\n\t}\n\treturn text;\n};\n\nWidget.prototype.substituteVariableReferences = function(text) {\n\tvar self = this;\n\treturn (text || \"\").replace(/\\$\\(([^\\)\\$]+)\\)\\$/g,function(match,p1,offset,string) {\n\t\treturn self.getVariable(p1,{defaultValue: \"\"});\n\t});\n};\n\nWidget.prototype.evaluateMacroModule = function(name,actualParams,defaultValue) {\n\tif($tw.utils.hop($tw.macros,name)) {\n\t\tvar macro = $tw.macros[name],\n\t\t\targs = [];\n\t\tif(macro.params.length > 0) {\n\t\t\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\t\t\tparamInfo, paramValue;\n\t\t\t// Step through each of the parameters in the macro definition\n\t\t\tfor(var p=0; p<macro.params.length; p++) {\n\t\t\t\t// Check if we've got a macro call parameter with the same name\n\t\t\t\tparamInfo = macro.params[p];\n\t\t\t\tparamValue = undefined;\n\t\t\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If not, use the next available anonymous macro call parameter\n\t\t\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\t\t\tnextAnonParameter++;\n\t\t\t\t}\n\t\t\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t\t\t}\n\t\t\t\t// If we've still not got a value, use the default, if any\n\t\t\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t\t\t// Save the parameter\n\t\t\t\targs.push(paramValue);\n\t\t\t}\n\t\t}\n\t\telse for(var i=0; i<actualParams.length; ++i) {\n\t\t\targs.push(actualParams[i].value);\n\t\t}\n\t\treturn (macro.run.apply(this,args) || \"\").toString();\n\t} else {\n\t\treturn defaultValue;\n\t}\n};\n\n/*\nCheck whether a given context variable value exists in the parent chain\n*/\nWidget.prototype.hasVariable = function(name,value) {\n\tvar node = this;\n\twhile(node) {\n\t\tif($tw.utils.hop(node.variables,name) && node.variables[name].value === value) {\n\t\t\treturn true;\n\t\t}\n\t\tnode = node.parentWidget;\n\t}\n\treturn false;\n};\n\n/*\nConstruct a qualifying string based on a hash of concatenating the values of a given variable in the parent chain\n*/\nWidget.prototype.getStateQualifier = function(name) {\n\tthis.qualifiers = this.qualifiers || Object.create(null);\n\tname = name || \"transclusion\";\n\tif(this.qualifiers[name]) {\n\t\treturn this.qualifiers[name];\n\t} else {\n\t\tvar output = [],\n\t\t\tnode = this;\n\t\twhile(node && node.parentWidget) {\n\t\t\tif($tw.utils.hop(node.parentWidget.variables,name)) {\n\t\t\t\toutput.push(node.getVariable(name));\n\t\t\t}\n\t\t\tnode = node.parentWidget;\n\t\t}\n\t\tvar value = $tw.utils.hashString(output.join(\"\"));\n\t\tthis.qualifiers[name] = value;\n\t\treturn value;\n\t}\n};\n\n/*\nCompute the current values of the attributes of the widget. Returns a hashmap of the names of the attributes that have changed\n*/\nWidget.prototype.computeAttributes = function() {\n\tvar changedAttributes = {},\n\t\tself = this,\n\t\tvalue;\n\t$tw.utils.each(this.parseTreeNode.attributes,function(attribute,name) {\n\t\tif(attribute.type === \"filtered\") {\n\t\t\tvalue = self.wiki.filterTiddlers(attribute.filter,self)[0] || \"\";\n\t\t} else if(attribute.type === \"indirect\") {\n\t\t\tvalue = self.wiki.getTextReference(attribute.textReference,\"\",self.getVariable(\"currentTiddler\"));\n\t\t} else if(attribute.type === \"macro\") {\n\t\t\tvalue = self.getVariable(attribute.value.name,{params: attribute.value.params});\n\t\t} else { // String attribute\n\t\t\tvalue = attribute.value;\n\t\t}\n\t\t// Check whether the attribute has changed\n\t\tif(self.attributes[name] !== value) {\n\t\t\tself.attributes[name] = value;\n\t\t\tchangedAttributes[name] = true;\n\t\t}\n\t});\n\treturn changedAttributes;\n};\n\n/*\nCheck for the presence of an attribute\n*/\nWidget.prototype.hasAttribute = function(name) {\n\treturn $tw.utils.hop(this.attributes,name);\n};\n\n/*\nGet the value of an attribute\n*/\nWidget.prototype.getAttribute = function(name,defaultText) {\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\treturn this.attributes[name];\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nAssign the computed attributes of the widget to a domNode\noptions include:\nexcludeEventAttributes: ignores attributes whose name begins with \"on\"\n*/\nWidget.prototype.assignAttributes = function(domNode,options) {\n\toptions = options || {};\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(v,a) {\n\t\t// Check exclusions\n\t\tif(options.excludeEventAttributes && a.substr(0,2) === \"on\") {\n\t\t\tv = undefined;\n\t\t}\n\t\tif(v !== undefined) {\n\t\t\tvar b = a.split(\":\");\n\t\t\t// Setting certain attributes can cause a DOM error (eg xmlns on the svg element)\n\t\t\ttry {\n\t\t\t\tif (b.length == 2 && b[0] == \"xlink\"){\n\t\t\t\t\tdomNode.setAttributeNS(\"http://www.w3.org/1999/xlink\",b[1],v);\n\t\t\t\t} else {\n\t\t\t\t\tdomNode.setAttributeNS(null,a,v);\n\t\t\t\t}\n\t\t\t} catch(e) {\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nMake child widgets correspondng to specified parseTreeNodes\n*/\nWidget.prototype.makeChildWidgets = function(parseTreeNodes) {\n\tthis.children = [];\n\tvar self = this;\n\t$tw.utils.each(parseTreeNodes || (this.parseTreeNode && this.parseTreeNode.children),function(childNode) {\n\t\tself.children.push(self.makeChildWidget(childNode));\n\t});\n};\n\n/*\nConstruct the widget object for a parse tree node\n*/\nWidget.prototype.makeChildWidget = function(parseTreeNode) {\n\tvar WidgetClass = this.widgetClasses[parseTreeNode.type];\n\tif(!WidgetClass) {\n\t\tWidgetClass = this.widgetClasses.text;\n\t\tparseTreeNode = {type: \"text\", text: \"Undefined widget '\" + parseTreeNode.type + \"'\"};\n\t}\n\treturn new WidgetClass(parseTreeNode,{\n\t\twiki: this.wiki,\n\t\tvariables: {},\n\t\tparentWidget: this,\n\t\tdocument: this.document\n\t});\n};\n\n/*\nGet the next sibling of this widget\n*/\nWidget.prototype.nextSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index < this.parentWidget.children.length-1) {\n\t\t\treturn this.parentWidget.children[index+1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the previous sibling of this widget\n*/\nWidget.prototype.previousSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index > 0) {\n\t\t\treturn this.parentWidget.children[index-1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRender the children of this widget into the DOM\n*/\nWidget.prototype.renderChildren = function(parent,nextSibling) {\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\tchildWidget.render(parent,nextSibling);\n\t});\n};\n\n/*\nAdd a list of event listeners from an array [{type:,handler:},...]\n*/\nWidget.prototype.addEventListeners = function(listeners) {\n\tvar self = this;\n\t$tw.utils.each(listeners,function(listenerInfo) {\n\t\tself.addEventListener(listenerInfo.type,listenerInfo.handler);\n\t});\n};\n\n/*\nAdd an event listener\n*/\nWidget.prototype.addEventListener = function(type,handler) {\n\tvar self = this;\n\tif(typeof handler === \"string\") { // The handler is a method name on this widget\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn self[handler].call(self,event);\n\t\t};\n\t} else { // The handler is a function\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn handler.call(self,event);\n\t\t};\n\t}\n};\n\n/*\nDispatch an event to a widget. If the widget doesn't handle the event then it is also dispatched to the parent widget\n*/\nWidget.prototype.dispatchEvent = function(event) {\n\t// Dispatch the event if this widget handles it\n\tvar listener = this.eventListeners[event.type];\n\tif(listener) {\n\t\t// Don't propagate the event if the listener returned false\n\t\tif(!listener(event)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Dispatch the event to the parent widget\n\tif(this.parentWidget) {\n\t\treturn this.parentWidget.dispatchEvent(event);\n\t}\n\treturn true;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nRebuild a previously rendered widget\n*/\nWidget.prototype.refreshSelf = function() {\n\tvar nextSibling = this.findNextSiblingDomNode();\n\tthis.removeChildDomNodes();\n\tthis.render(this.parentDomNode,nextSibling);\n};\n\n/*\nRefresh all the children of a widget\n*/\nWidget.prototype.refreshChildren = function(changedTiddlers) {\n\tvar self = this,\n\t\trefreshed = false;\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\trefreshed = childWidget.refresh(changedTiddlers) || refreshed;\n\t});\n\treturn refreshed;\n};\n\n/*\nFind the next sibling in the DOM to this widget. This is done by scanning the widget tree through all next siblings and their descendents that share the same parent DOM node\n*/\nWidget.prototype.findNextSiblingDomNode = function(startIndex) {\n\t// Refer to this widget by its index within its parents children\n\tvar parent = this.parentWidget,\n\t\tindex = startIndex !== undefined ? startIndex : parent.children.indexOf(this);\nif(index === -1) {\n\tthrow \"node not found in parents children\";\n}\n\t// Look for a DOM node in the later siblings\n\twhile(++index < parent.children.length) {\n\t\tvar domNode = parent.children[index].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\t// Go back and look for later siblings of our parent if it has the same parent dom node\n\tvar grandParent = parent.parentWidget;\n\tif(grandParent && parent.parentDomNode === this.parentDomNode) {\n\t\tindex = grandParent.children.indexOf(parent);\n\t\tif(index !== -1) {\n\t\t\treturn parent.findNextSiblingDomNode(index);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nFind the first DOM node generated by a widget or its children\n*/\nWidget.prototype.findFirstDomNode = function() {\n\t// Return the first dom node of this widget, if we've got one\n\tif(this.domNodes.length > 0) {\n\t\treturn this.domNodes[0];\n\t}\n\t// Otherwise, recursively call our children\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar domNode = this.children[t].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRemove any DOM nodes created by this widget or its children\n*/\nWidget.prototype.removeChildDomNodes = function() {\n\t// If this widget has directly created DOM nodes, delete them and exit. This assumes that any child widgets are contained within the created DOM nodes, which would normally be the case\n\tif(this.domNodes.length > 0) {\n\t\t$tw.utils.each(this.domNodes,function(domNode) {\n\t\t\tdomNode.parentNode.removeChild(domNode);\n\t\t});\n\t\tthis.domNodes = [];\n\t} else {\n\t\t// Otherwise, ask the child widgets to delete their DOM nodes\n\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\tchildWidget.removeChildDomNodes();\n\t\t});\n\t}\n};\n\n/*\nInvoke the action widgets that are descendents of the current widget.\n*/\nWidget.prototype.invokeActions = function(triggeringWidget,event) {\n\tvar handled = false;\n\t// For each child widget\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar child = this.children[t];\n\t\t// Invoke the child if it is an action widget\n\t\tif(child.invokeAction) {\n\t\t\tchild.refreshSelf();\n\t\t\tif(child.invokeAction(triggeringWidget,event)) {\n\t\t\t\thandled = true;\n\t\t\t}\n\t\t}\n\t\t// Propagate through through the child if it permits it\n\t\tif(child.allowActionPropagation() && child.invokeActions(triggeringWidget,event)) {\n\t\t\thandled = true;\n\t\t}\n\t}\n\treturn handled;\n};\n\n/*\nInvoke the action widgets defined in a string\n*/\nWidget.prototype.invokeActionString = function(actions,triggeringWidget,event,variables) {\n\tactions = actions || \"\";\n\tvar parser = this.wiki.parseText(\"text/vnd.tiddlywiki\",actions,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document\n\t\t}),\n\t\twidgetNode = this.wiki.makeWidget(parser,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document,\n\t\t\tvariables: variables\n\t\t});\n\tvar container = this.document.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn widgetNode.invokeActions(this,event);\n};\n\nWidget.prototype.allowActionPropagation = function() {\n\treturn true;\n};\n\nexports.widget = Widget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/wikify.js": {
"title": "$:/core/modules/widgets/wikify.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/wikify.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to wikify text into a variable\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar WikifyWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nWikifyWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nWikifyWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWikifyWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.wikifyName = this.getAttribute(\"name\");\n\tthis.wikifyText = this.getAttribute(\"text\");\n\tthis.wikifyType = this.getAttribute(\"type\");\n\tthis.wikifyMode = this.getAttribute(\"mode\",\"block\");\n\tthis.wikifyOutput = this.getAttribute(\"output\",\"text\");\n\t// Create the parse tree\n\tthis.wikifyParser = this.wiki.parseText(this.wikifyType,this.wikifyText,{\n\t\t\tparseAsInline: this.wikifyMode === \"inline\"\n\t\t});\n\t// Create the widget tree \n\tthis.wikifyWidgetNode = this.wiki.makeWidget(this.wikifyParser,{\n\t\t\tdocument: $tw.fakeDocument,\n\t\t\tparentWidget: this\n\t\t});\n\t// Render the widget tree to the container\n\tthis.wikifyContainer = $tw.fakeDocument.createElement(\"div\");\n\tthis.wikifyWidgetNode.render(this.wikifyContainer,null);\n\tthis.wikifyResult = this.getResult();\n\t// Set context variable\n\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nReturn the result string\n*/\nWikifyWidget.prototype.getResult = function() {\n\tvar result;\n\tswitch(this.wikifyOutput) {\n\t\tcase \"text\":\n\t\t\tresult = this.wikifyContainer.textContent;\n\t\t\tbreak;\n\t\tcase \"formattedtext\":\n\t\t\tresult = this.wikifyContainer.formattedTextContent;\n\t\t\tbreak;\n\t\tcase \"html\":\n\t\t\tresult = this.wikifyContainer.innerHTML;\n\t\t\tbreak;\n\t\tcase \"parsetree\":\n\t\t\tresult = JSON.stringify(this.wikifyParser.tree,0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t\tcase \"widgettree\":\n\t\t\tresult = JSON.stringify(this.getWidgetTree(),0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t}\n\treturn result;\n};\n\n/*\nReturn a string of the widget tree\n*/\nWikifyWidget.prototype.getWidgetTree = function() {\n\tvar copyNode = function(widgetNode,resultNode) {\n\t\t\tvar type = widgetNode.parseTreeNode.type;\n\t\t\tresultNode.type = type;\n\t\t\tswitch(type) {\n\t\t\t\tcase \"element\":\n\t\t\t\t\tresultNode.tag = widgetNode.parseTreeNode.tag;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\tresultNode.text = widgetNode.parseTreeNode.text;\n\t\t\t\t\tbreak;\t\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.attributes || {}).length > 0) {\n\t\t\t\tresultNode.attributes = {};\n\t\t\t\t$tw.utils.each(widgetNode.attributes,function(attr,attrName) {\n\t\t\t\t\tresultNode.attributes[attrName] = widgetNode.getAttribute(attrName);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.children || {}).length > 0) {\n\t\t\t\tresultNode.children = [];\n\t\t\t\t$tw.utils.each(widgetNode.children,function(widgetChildNode) {\n\t\t\t\t\tvar node = {};\n\t\t\t\t\tresultNode.children.push(node);\n\t\t\t\t\tcopyNode(widgetChildNode,node);\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tresults = {};\n\tcopyNode(this.wikifyWidgetNode,results);\n\treturn results;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWikifyWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh ourselves entirely if any of our attributes have changed\n\tif(changedAttributes.name || changedAttributes.text || changedAttributes.type || changedAttributes.mode || changedAttributes.output) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\t// Refresh the widget tree\n\t\tif(this.wikifyWidgetNode.refresh(changedTiddlers)) {\n\t\t\t// Check if there was any change\n\t\t\tvar result = this.getResult();\n\t\t\tif(result !== this.wikifyResult) {\n\t\t\t\t// If so, save the change\n\t\t\t\tthis.wikifyResult = result;\n\t\t\t\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t\t\t\t// Refresh each of our child widgets\n\t\t\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\t\t\tchildWidget.refreshSelf();\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t// Just refresh the children\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.wikify = WikifyWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/wiki-bulkops.js": {
"title": "$:/core/modules/wiki-bulkops.js",
"text": "/*\\\ntitle: $:/core/modules/wiki-bulkops.js\ntype: application/javascript\nmodule-type: wikimethod\n\nBulk tiddler operations such as rename.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRename a tiddler, and relink any tags or lists that reference it.\n*/\nfunction renameTiddler(fromTitle,toTitle,options) {\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\toptions = options || {};\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\t// Rename the tiddler itself\n\t\tvar oldTiddler = this.getTiddler(fromTitle),\n\t\t\tnewTiddler = new $tw.Tiddler(oldTiddler,{title: toTitle},this.getModificationFields());\n\t\tnewTiddler = $tw.hooks.invokeHook(\"th-renaming-tiddler\",newTiddler,oldTiddler);\n\t\tthis.addTiddler(newTiddler);\n\t\tthis.deleteTiddler(fromTitle);\n\t\t// Rename any tags or lists that reference it\n\t\tthis.relinkTiddler(fromTitle,toTitle,options)\n\t}\n}\n\n/*\nRelink any tags or lists that reference a given tiddler\n*/\nfunction relinkTiddler(fromTitle,toTitle,options) {\n\tvar self = this;\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\toptions = options || {};\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\tthis.each(function(tiddler,title) {\n\t\t\tvar type = tiddler.fields.type || \"\";\n\t\t\t// Don't touch plugins or JavaScript modules\n\t\t\tif(!tiddler.fields[\"plugin-type\"] && type !== \"application/javascript\") {\n\t\t\t\tvar tags = (tiddler.fields.tags || []).slice(0),\n\t\t\t\t\tlist = (tiddler.fields.list || []).slice(0),\n\t\t\t\t\tisModified = false;\n\t\t\t\tif(!options.dontRenameInTags) {\n\t\t\t\t\t// Rename tags\n\t\t\t\t\t$tw.utils.each(tags,function (title,index) {\n\t\t\t\t\t\tif(title === fromTitle) {\nconsole.log(\"Renaming tag '\" + tags[index] + \"' to '\" + toTitle + \"' of tiddler '\" + tiddler.fields.title + \"'\");\n\t\t\t\t\t\t\ttags[index] = toTitle;\n\t\t\t\t\t\t\tisModified = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif(!options.dontRenameInLists) {\n\t\t\t\t\t// Rename lists\n\t\t\t\t\t$tw.utils.each(list,function (title,index) {\n\t\t\t\t\t\tif(title === fromTitle) {\nconsole.log(\"Renaming list item '\" + list[index] + \"' to '\" + toTitle + \"' of tiddler '\" + tiddler.fields.title + \"'\");\n\t\t\t\t\t\t\tlist[index] = toTitle;\n\t\t\t\t\t\t\tisModified = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif(isModified) {\n\t\t\t\t\tvar newTiddler = new $tw.Tiddler(tiddler,{tags: tags, list: list},self.getModificationFields())\n\t\t\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-relinking-tiddler\",newTiddler,tiddler);\n\t\t\t\t\tself.addTiddler(newTiddler);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\nexports.renameTiddler = renameTiddler;\nexports.relinkTiddler = relinkTiddler;\n\n})();\n",
"type": "application/javascript",
"module-type": "wikimethod"
},
"$:/core/modules/wiki.js": {
"title": "$:/core/modules/wiki.js",
"text": "/*\\\ntitle: $:/core/modules/wiki.js\ntype: application/javascript\nmodule-type: wikimethod\n\nExtension methods for the $tw.Wiki object\n\nAdds the following properties to the wiki object:\n\n* `eventListeners` is a hashmap by type of arrays of listener functions\n* `changedTiddlers` is a hashmap describing changes to named tiddlers since wiki change events were last dispatched. Each entry is a hashmap containing two fields:\n\tmodified: true/false\n\tdeleted: true/false\n* `changeCount` is a hashmap by tiddler title containing a numerical index that starts at zero and is incremented each time a tiddler is created changed or deleted\n* `caches` is a hashmap by tiddler title containing a further hashmap of named cache objects. Caches are automatically cleared when a tiddler is modified or deleted\n* `globalCache` is a hashmap by cache name of cache objects that are cleared whenever any tiddler change occurs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar USER_NAME_TITLE = \"$:/status/UserName\",\n\tTIMESTAMP_DISABLE_TITLE = \"$:/config/TimestampDisable\";\n\n/*\nGet the value of a text reference. Text references can have any of these forms:\n\t<tiddlertitle>\n\t<tiddlertitle>!!<fieldname>\n\t!!<fieldname> - specifies a field of the current tiddlers\n\t<tiddlertitle>##<index>\n*/\nexports.getTextReference = function(textRef,defaultText,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tif(tr.field) {\n\t\tvar tiddler = this.getTiddler(title);\n\t\tif(tr.field === \"title\") { // Special case so we can return the title of a non-existent tiddler\n\t\t\treturn title;\n\t\t} else if(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\treturn tiddler.getFieldString(tr.field);\n\t\t} else {\n\t\t\treturn defaultText;\n\t\t}\n\t} else if(tr.index) {\n\t\treturn this.extractTiddlerDataItem(title,tr.index,defaultText);\n\t} else {\n\t\treturn this.getTiddlerText(title,defaultText);\n\t}\n};\n\nexports.setTextReference = function(textRef,value,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tthis.setText(title,tr.field,tr.index,value);\n};\n\nexports.setText = function(title,field,index,value,options) {\n\toptions = options || {};\n\tvar creationFields = options.suppressTimestamp ? {} : this.getCreationFields(),\n\t\tmodificationFields = options.suppressTimestamp ? {} : this.getModificationFields();\n\t// Check if it is a reference to a tiddler field\n\tif(index) {\n\t\tvar data = this.getTiddlerData(title,Object.create(null));\n\t\tif(value !== undefined) {\n\t\t\tdata[index] = value;\n\t\t} else {\n\t\t\tdelete data[index];\n\t\t}\n\t\tthis.setTiddlerData(title,data,modificationFields);\n\t} else {\n\t\tvar tiddler = this.getTiddler(title),\n\t\t\tfields = {title: title};\n\t\tfields[field || \"text\"] = value;\n\t\tthis.addTiddler(new $tw.Tiddler(creationFields,tiddler,fields,modificationFields));\n\t}\n};\n\nexports.deleteTextReference = function(textRef,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle,tiddler,fields;\n\t// Check if it is a reference to a tiddler\n\tif(tr.title && !tr.field) {\n\t\tthis.deleteTiddler(tr.title);\n\t// Else check for a field reference\n\t} else if(tr.field) {\n\t\ttitle = tr.title || currTiddlerTitle;\n\t\ttiddler = this.getTiddler(title);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\tfields = Object.create(null);\n\t\t\tfields[tr.field] = undefined;\n\t\t\tthis.addTiddler(new $tw.Tiddler(tiddler,fields,this.getModificationFields()));\n\t\t}\n\t}\n};\n\nexports.addEventListener = function(type,listener) {\n\tthis.eventListeners = this.eventListeners || {};\n\tthis.eventListeners[type] = this.eventListeners[type] || [];\n\tthis.eventListeners[type].push(listener);\t\n};\n\nexports.removeEventListener = function(type,listener) {\n\tvar listeners = this.eventListeners[type];\n\tif(listeners) {\n\t\tvar p = listeners.indexOf(listener);\n\t\tif(p !== -1) {\n\t\t\tlisteners.splice(p,1);\n\t\t}\n\t}\n};\n\nexports.dispatchEvent = function(type /*, args */) {\n\tvar args = Array.prototype.slice.call(arguments,1),\n\t\tlisteners = this.eventListeners[type];\n\tif(listeners) {\n\t\tfor(var p=0; p<listeners.length; p++) {\n\t\t\tvar listener = listeners[p];\n\t\t\tlistener.apply(listener,args);\n\t\t}\n\t}\n};\n\n/*\nCauses a tiddler to be marked as changed, incrementing the change count, and triggers event handlers.\nThis method should be called after the changes it describes have been made to the wiki.tiddlers[] array.\n\ttitle: Title of tiddler\n\tisDeleted: defaults to false (meaning the tiddler has been created or modified),\n\t\ttrue if the tiddler has been deleted\n*/\nexports.enqueueTiddlerEvent = function(title,isDeleted) {\n\t// Record the touch in the list of changed tiddlers\n\tthis.changedTiddlers = this.changedTiddlers || Object.create(null);\n\tthis.changedTiddlers[title] = this.changedTiddlers[title] || Object.create(null);\n\tthis.changedTiddlers[title][isDeleted ? \"deleted\" : \"modified\"] = true;\n\t// Increment the change count\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\tthis.changeCount[title]++;\n\t} else {\n\t\tthis.changeCount[title] = 1;\n\t}\n\t// Trigger events\n\tthis.eventListeners = this.eventListeners || {};\n\tif(!this.eventsTriggered) {\n\t\tvar self = this;\n\t\t$tw.utils.nextTick(function() {\n\t\t\tvar changes = self.changedTiddlers;\n\t\t\tself.changedTiddlers = Object.create(null);\n\t\t\tself.eventsTriggered = false;\n\t\t\tif($tw.utils.count(changes) > 0) {\n\t\t\t\tself.dispatchEvent(\"change\",changes);\n\t\t\t}\n\t\t});\n\t\tthis.eventsTriggered = true;\n\t}\n};\n\nexports.getSizeOfTiddlerEventQueue = function() {\n\treturn $tw.utils.count(this.changedTiddlers);\n};\n\nexports.clearTiddlerEventQueue = function() {\n\tthis.changedTiddlers = Object.create(null);\n\tthis.changeCount = Object.create(null);\n};\n\nexports.getChangeCount = function(title) {\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\treturn this.changeCount[title];\n\t} else {\n\t\treturn 0;\n\t}\n};\n\n/*\nGenerate an unused title from the specified base\n*/\nexports.generateNewTitle = function(baseTitle,options) {\n\toptions = options || {};\n\tvar c = 0,\n\t\ttitle = baseTitle;\n\twhile(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) {\n\t\ttitle = baseTitle + \n\t\t\t(options.prefix || \" \") + \n\t\t\t(++c);\n\t}\n\treturn title;\n};\n\nexports.isSystemTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/\") === 0;\n};\n\nexports.isTemporaryTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/temp/\") === 0;\n};\n\nexports.isImageTiddler = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\t\t\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/vnd.tiddlywiki\"];\n\t\treturn !!contentTypeInfo && contentTypeInfo.flags.indexOf(\"image\") !== -1;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLike addTiddler() except it will silently reject any plugin tiddlers that are older than the currently loaded version. Returns true if the tiddler was imported\n*/\nexports.importTiddler = function(tiddler) {\n\tvar existingTiddler = this.getTiddler(tiddler.fields.title);\n\t// Check if we're dealing with a plugin\n\tif(tiddler && tiddler.hasField(\"plugin-type\") && tiddler.hasField(\"version\") && existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t// Reject the incoming plugin if it is older\n\t\tif(!$tw.utils.checkVersions(tiddler.fields.version,existingTiddler.fields.version)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Fall through to adding the tiddler\n\tthis.addTiddler(tiddler);\n\treturn true;\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is created\n*/\nexports.getCreationFields = function() {\n\tif(this.getTiddlerText(TIMESTAMP_DISABLE_TITLE,\"\").toLowerCase() !== \"yes\") {\n\t\tvar fields = {\n\t\t\t\tcreated: new Date()\n\t\t\t},\n\t\t\tcreator = this.getTiddlerText(USER_NAME_TITLE);\n\t\tif(creator) {\n\t\t\tfields.creator = creator;\n\t\t}\n\t\treturn fields;\n\t} else {\n\t\treturn {};\n\t}\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is modified\n*/\nexports.getModificationFields = function() {\n\tif(this.getTiddlerText(TIMESTAMP_DISABLE_TITLE,\"\").toLowerCase() !== \"yes\") {\n\t\tvar fields = Object.create(null),\n\t\t\tmodifier = this.getTiddlerText(USER_NAME_TITLE);\n\t\tfields.modified = new Date();\n\t\tif(modifier) {\n\t\t\tfields.modifier = modifier;\n\t\t}\n\t\treturn fields;\n\t} else {\n\t\treturn {};\n\t}\n};\n\n/*\nReturn a sorted array of tiddler titles. Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.getTiddlers = function(options) {\n\toptions = options || Object.create(null);\n\tvar self = this,\n\t\tsortField = options.sortField || \"title\",\n\t\ttiddlers = [], t, titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tif(options.includeSystem || !self.isSystemTiddler(title)) {\n\t\t\tif(!options.excludeTag || !tiddler.hasTag(options.excludeTag)) {\n\t\t\t\ttiddlers.push(tiddler);\n\t\t\t}\n\t\t}\n\t});\n\ttiddlers.sort(function(a,b) {\n\t\tvar aa = a.fields[sortField].toLowerCase() || \"\",\n\t\t\tbb = b.fields[sortField].toLowerCase() || \"\";\n\t\tif(aa < bb) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(aa > bb) {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n\tfor(t=0; t<tiddlers.length; t++) {\n\t\ttitles.push(tiddlers[t].fields.title);\n\t}\n\treturn titles;\n};\n\nexports.countTiddlers = function(excludeTag) {\n\tvar tiddlers = this.getTiddlers({excludeTag: excludeTag});\n\treturn $tw.utils.count(tiddlers);\n};\n\n/*\nReturns a function iterator(callback) that iterates through the specified titles, and invokes the callback with callback(tiddler,title)\n*/\nexports.makeTiddlerIterator = function(titles) {\n\tvar self = this;\n\tif(!$tw.utils.isArray(titles)) {\n\t\ttitles = Object.keys(titles);\n\t} else {\n\t\ttitles = titles.slice(0);\n\t}\n\treturn function(callback) {\n\t\ttitles.forEach(function(title) {\n\t\t\tcallback(self.getTiddler(title),title);\n\t\t});\n\t};\n};\n\n/*\nSort an array of tiddler titles by a specified field\n\ttitles: array of titles (sorted in place)\n\tsortField: name of field to sort by\n\tisDescending: true if the sort should be descending\n\tisCaseSensitive: true if the sort should consider upper and lower case letters to be different\n*/\nexports.sortTiddlers = function(titles,sortField,isDescending,isCaseSensitive,isNumeric) {\n\tvar self = this;\n\ttitles.sort(function(a,b) {\n\t\tvar x,y,\n\t\t\tcompareNumbers = function(x,y) {\n\t\t\t\tvar result = \n\t\t\t\t\tisNaN(x) && !isNaN(y) ? (isDescending ? -1 : 1) :\n\t\t\t\t\t!isNaN(x) && isNaN(y) ? (isDescending ? 1 : -1) :\n\t\t\t\t\t\t\t\t\t\t\t(isDescending ? y - x : x - y);\n\t\t\t\treturn result;\n\t\t\t};\n\t\tif(sortField !== \"title\") {\n\t\t\tvar tiddlerA = self.getTiddler(a),\n\t\t\t\ttiddlerB = self.getTiddler(b);\n\t\t\tif(tiddlerA) {\n\t\t\t\ta = tiddlerA.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\ta = \"\";\n\t\t\t}\n\t\t\tif(tiddlerB) {\n\t\t\t\tb = tiddlerB.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\tb = \"\";\n\t\t\t}\n\t\t}\n\t\tx = Number(a);\n\t\ty = Number(b);\n\t\tif(isNumeric && (!isNaN(x) || !isNaN(y))) {\n\t\t\treturn compareNumbers(x,y);\n\t\t} else if($tw.utils.isDate(a) && $tw.utils.isDate(b)) {\n\t\t\treturn isDescending ? b - a : a - b;\n\t\t} else {\n\t\t\ta = String(a);\n\t\t\tb = String(b);\n\t\t\tif(!isCaseSensitive) {\n\t\t\t\ta = a.toLowerCase();\n\t\t\t\tb = b.toLowerCase();\n\t\t\t}\n\t\t\treturn isDescending ? b.localeCompare(a) : a.localeCompare(b);\n\t\t}\n\t});\n};\n\n/*\nFor every tiddler invoke a callback(title,tiddler) with `this` set to the wiki object. Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.forEachTiddler = function(/* [options,]callback */) {\n\tvar arg = 0,\n\t\toptions = arguments.length >= 2 ? arguments[arg++] : {},\n\t\tcallback = arguments[arg++],\n\t\ttitles = this.getTiddlers(options),\n\t\tt, tiddler;\n\tfor(t=0; t<titles.length; t++) {\n\t\ttiddler = this.getTiddler(titles[t]);\n\t\tif(tiddler) {\n\t\t\tcallback.call(this,tiddler.fields.title,tiddler);\n\t\t}\n\t}\n};\n\n/*\nReturn an array of tiddler titles that are directly linked from the specified tiddler\n*/\nexports.getTiddlerLinks = function(title) {\n\tvar self = this;\n\t// We'll cache the links so they only get computed if the tiddler changes\n\treturn this.getCacheForTiddler(title,\"links\",function() {\n\t\t// Parse the tiddler\n\t\tvar parser = self.parseTiddler(title);\n\t\t// Count up the links\n\t\tvar links = [],\n\t\t\tcheckParseTree = function(parseTree) {\n\t\t\t\tfor(var t=0; t<parseTree.length; t++) {\n\t\t\t\t\tvar parseTreeNode = parseTree[t];\n\t\t\t\t\tif(parseTreeNode.type === \"link\" && parseTreeNode.attributes.to && parseTreeNode.attributes.to.type === \"string\") {\n\t\t\t\t\t\tvar value = parseTreeNode.attributes.to.value;\n\t\t\t\t\t\tif(links.indexOf(value) === -1) {\n\t\t\t\t\t\t\tlinks.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(parseTreeNode.children) {\n\t\t\t\t\t\tcheckParseTree(parseTreeNode.children);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\tif(parser) {\n\t\t\tcheckParseTree(parser.tree);\n\t\t}\n\t\treturn links;\n\t});\n};\n\n/*\nReturn an array of tiddler titles that link to the specified tiddler\n*/\nexports.getTiddlerBacklinks = function(targetTitle) {\n\tvar self = this,\n\t\tbacklinks = [];\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\tif(links.indexOf(targetTitle) !== -1) {\n\t\t\tbacklinks.push(title);\n\t\t}\n\t});\n\treturn backlinks;\n};\n\n/*\nReturn a hashmap of tiddler titles that are referenced but not defined. Each value is the number of times the missing tiddler is referenced\n*/\nexports.getMissingTitles = function() {\n\tvar self = this,\n\t\tmissing = [];\n// We should cache the missing tiddler list, even if we recreate it every time any tiddler is modified\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tif((!self.tiddlerExists(link) && !self.isShadowTiddler(link)) && missing.indexOf(link) === -1) {\n\t\t\t\tmissing.push(link);\n\t\t\t}\n\t\t});\n\t});\n\treturn missing;\n};\n\nexports.getOrphanTitles = function() {\n\tvar self = this,\n\t\torphans = this.getTiddlers();\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tvar p = orphans.indexOf(link);\n\t\t\tif(p !== -1) {\n\t\t\t\torphans.splice(p,1);\n\t\t\t}\n\t\t});\n\t});\n\treturn orphans; // Todo\n};\n\n/*\nRetrieves a list of the tiddler titles that are tagged with a given tag\n*/\nexports.getTiddlersWithTag = function(tag) {\n\tvar self = this;\n\treturn this.getGlobalCache(\"taglist-\" + tag,function() {\n\t\tvar tagmap = self.getTagMap();\n\t\treturn self.sortByList(tagmap[tag],tag);\n\t});\n};\n\n/*\nGet a hashmap by tag of arrays of tiddler titles\n*/\nexports.getTagMap = function() {\n\tvar self = this;\n\treturn this.getGlobalCache(\"tagmap\",function() {\n\t\tvar tags = Object.create(null),\n\t\t\tstoreTags = function(tagArray,title) {\n\t\t\t\tif(tagArray) {\n\t\t\t\t\tfor(var index=0; index<tagArray.length; index++) {\n\t\t\t\t\t\tvar tag = tagArray[index];\n\t\t\t\t\t\tif($tw.utils.hop(tags,tag)) {\n\t\t\t\t\t\t\ttags[tag].push(title);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttags[tag] = [title];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\ttitle, tiddler;\n\t\t// Collect up all the tags\n\t\tself.eachShadow(function(tiddler,title) {\n\t\t\tif(!self.tiddlerExists(title)) {\n\t\t\t\ttiddler = self.getTiddler(title);\n\t\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t\t}\n\t\t});\n\t\tself.each(function(tiddler,title) {\n\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t});\n\t\treturn tags;\n\t});\n};\n\n/*\nLookup a given tiddler and return a list of all the tiddlers that include it in the specified list field\n*/\nexports.findListingsOfTiddler = function(targetTitle,fieldName) {\n\tfieldName = fieldName || \"list\";\n\tvar titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tvar list = $tw.utils.parseStringArray(tiddler.fields[fieldName]);\n\t\tif(list && list.indexOf(targetTitle) !== -1) {\n\t\t\ttitles.push(title);\n\t\t}\n\t});\n\treturn titles;\n};\n\n/*\nSorts an array of tiddler titles according to an ordered list\n*/\nexports.sortByList = function(array,listTitle) {\n\tvar list = this.getTiddlerList(listTitle);\n\tif(!array || array.length === 0) {\n\t\treturn [];\n\t} else {\n\t\tvar titles = [], t, title;\n\t\t// First place any entries that are present in the list\n\t\tfor(t=0; t<list.length; t++) {\n\t\t\ttitle = list[t];\n\t\t\tif(array.indexOf(title) !== -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Then place any remaining entries\n\t\tfor(t=0; t<array.length; t++) {\n\t\t\ttitle = array[t];\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Finally obey the list-before and list-after fields of each tiddler in turn\n\t\tvar sortedTitles = titles.slice(0);\n\t\tfor(t=0; t<sortedTitles.length; t++) {\n\t\t\ttitle = sortedTitles[t];\n\t\t\tvar currPos = titles.indexOf(title),\n\t\t\t\tnewPos = -1,\n\t\t\t\ttiddler = this.getTiddler(title);\n\t\t\tif(tiddler) {\n\t\t\t\tvar beforeTitle = tiddler.fields[\"list-before\"],\n\t\t\t\t\tafterTitle = tiddler.fields[\"list-after\"];\n\t\t\t\tif(beforeTitle === \"\") {\n\t\t\t\t\tnewPos = 0;\n\t\t\t\t} else if(beforeTitle) {\n\t\t\t\t\tnewPos = titles.indexOf(beforeTitle);\n\t\t\t\t} else if(afterTitle) {\n\t\t\t\t\tnewPos = titles.indexOf(afterTitle);\n\t\t\t\t\tif(newPos >= 0) {\n\t\t\t\t\t\t++newPos;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(newPos === -1) {\n\t\t\t\t\tnewPos = currPos;\n\t\t\t\t}\n\t\t\t\tif(newPos !== currPos) {\n\t\t\t\t\ttitles.splice(currPos,1);\n\t\t\t\t\tif(newPos >= currPos) {\n\t\t\t\t\t\tnewPos--;\n\t\t\t\t\t}\n\t\t\t\t\ttitles.splice(newPos,0,title);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\treturn titles;\n\t}\n};\n\nexports.getSubTiddler = function(title,subTiddlerTitle) {\n\tvar bundleInfo = this.getPluginInfo(title) || this.getTiddlerDataCached(title);\n\tif(bundleInfo && bundleInfo.tiddlers) {\n\t\tvar subTiddler = bundleInfo.tiddlers[subTiddlerTitle];\n\t\tif(subTiddler) {\n\t\t\treturn new $tw.Tiddler(subTiddler);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRetrieve a tiddler as a JSON string of the fields\n*/\nexports.getTiddlerAsJson = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\tvar fields = Object.create(null);\n\t\t$tw.utils.each(tiddler.fields,function(value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\treturn JSON.stringify(fields);\n\t} else {\n\t\treturn JSON.stringify({title: title});\n\t}\n};\n\n/*\nGet the content of a tiddler as a JavaScript object. How this is done depends on the type of the tiddler:\n\napplication/json: the tiddler JSON is parsed into an object\napplication/x-tiddler-dictionary: the tiddler is parsed as sequence of name:value pairs\n\nOther types currently just return null.\n\ntitleOrTiddler: string tiddler title or a tiddler object\ndefaultData: default data to be returned if the tiddler is missing or doesn't contain data\n\nNote that the same value is returned for repeated calls for the same tiddler data. The value is frozen to prevent modification; otherwise modifications would be visible to all callers\n*/\nexports.getTiddlerDataCached = function(titleOrTiddler,defaultData) {\n\tvar self = this,\n\t\ttiddler = titleOrTiddler;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler) {\n\t\treturn this.getCacheForTiddler(tiddler.fields.title,\"data\",function() {\n\t\t\t// Return the frozen value\n\t\t\tvar value = self.getTiddlerData(tiddler.fields.title,undefined);\n\t\t\t$tw.utils.deepFreeze(value);\n\t\t\treturn value;\n\t\t}) || defaultData;\n\t} else {\n\t\treturn defaultData;\n\t}\n};\n\n/*\nAlternative, uncached version of getTiddlerDataCached(). The return value can be mutated freely and reused\n*/\nexports.getTiddlerData = function(titleOrTiddler,defaultData) {\n\tvar tiddler = titleOrTiddler,\n\t\tdata;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler && tiddler.fields.text) {\n\t\tswitch(tiddler.fields.type) {\n\t\t\tcase \"application/json\":\n\t\t\t\t// JSON tiddler\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse(tiddler.fields.text);\n\t\t\t\t} catch(ex) {\n\t\t\t\t\treturn defaultData;\n\t\t\t\t}\n\t\t\t\treturn data;\n\t\t\tcase \"application/x-tiddler-dictionary\":\n\t\t\t\treturn $tw.utils.parseFields(tiddler.fields.text);\n\t\t}\n\t}\n\treturn defaultData;\n};\n\n/*\nExtract an indexed field from within a data tiddler\n*/\nexports.extractTiddlerDataItem = function(titleOrTiddler,index,defaultText) {\n\tvar data = this.getTiddlerDataCached(titleOrTiddler,Object.create(null)),\n\t\ttext;\n\tif(data && $tw.utils.hop(data,index)) {\n\t\ttext = data[index];\n\t}\n\tif(typeof text === \"string\" || typeof text === \"number\") {\n\t\treturn text.toString();\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nSet a tiddlers content to a JavaScript object. Currently this is done by setting the tiddler's type to \"application/json\" and setting the text to the JSON text of the data.\ntitle: title of tiddler\ndata: object that can be serialised to JSON\nfields: optional hashmap of additional tiddler fields to be set\n*/\nexports.setTiddlerData = function(title,data,fields) {\n\tvar existingTiddler = this.getTiddler(title),\n\t\tnewFields = {\n\t\t\ttitle: title\n\t};\n\tif(existingTiddler && existingTiddler.fields.type === \"application/x-tiddler-dictionary\") {\n\t\tnewFields.text = $tw.utils.makeTiddlerDictionary(data);\n\t} else {\n\t\tnewFields.type = \"application/json\";\n\t\tnewFields.text = JSON.stringify(data,null,$tw.config.preferences.jsonSpaces);\n\t}\n\tthis.addTiddler(new $tw.Tiddler(this.getCreationFields(),existingTiddler,fields,newFields,this.getModificationFields()));\n};\n\n/*\nReturn the content of a tiddler as an array containing each line\n*/\nexports.getTiddlerList = function(title,field,index) {\n\tif(index) {\n\t\treturn $tw.utils.parseStringArray(this.extractTiddlerDataItem(title,index,\"\"));\n\t}\n\tfield = field || \"list\";\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\treturn ($tw.utils.parseStringArray(tiddler.fields[field]) || []).slice(0);\n\t}\n\treturn [];\n};\n\n// Return a named global cache object. Global cache objects are cleared whenever a tiddler change occurs\nexports.getGlobalCache = function(cacheName,initializer) {\n\tthis.globalCache = this.globalCache || Object.create(null);\n\tif($tw.utils.hop(this.globalCache,cacheName)) {\n\t\treturn this.globalCache[cacheName];\n\t} else {\n\t\tthis.globalCache[cacheName] = initializer();\n\t\treturn this.globalCache[cacheName];\n\t}\n};\n\nexports.clearGlobalCache = function() {\n\tthis.globalCache = Object.create(null);\n};\n\n// Return the named cache object for a tiddler. If the cache doesn't exist then the initializer function is invoked to create it\nexports.getCacheForTiddler = function(title,cacheName,initializer) {\n\tthis.caches = this.caches || Object.create(null);\n\tvar caches = this.caches[title];\n\tif(caches && caches[cacheName]) {\n\t\treturn caches[cacheName];\n\t} else {\n\t\tif(!caches) {\n\t\t\tcaches = Object.create(null);\n\t\t\tthis.caches[title] = caches;\n\t\t}\n\t\tcaches[cacheName] = initializer();\n\t\treturn caches[cacheName];\n\t}\n};\n\n// Clear all caches associated with a particular tiddler, or, if the title is null, clear all the caches for all the tiddlers\nexports.clearCache = function(title) {\n\tif(title) {\n\t\tthis.caches = this.caches || Object.create(null);\n\t\tif($tw.utils.hop(this.caches,title)) {\n\t\t\tdelete this.caches[title];\n\t\t}\n\t} else {\n\t\tthis.caches = Object.create(null);\n\t}\n};\n\nexports.initParsers = function(moduleType) {\n\t// Install the parser modules\n\t$tw.Wiki.parsers = {};\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(\"parser\",function(title,module) {\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\t$tw.Wiki.parsers[f] = module[f]; // Store the parser class\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nParse a block of text of a specified MIME type\n\ttype: content type of text to be parsed\n\ttext: text\n\toptions: see below\nOptions include:\n\tparseAsInline: if true, the text of the tiddler will be parsed as an inline run\n\t_canonical_uri: optional string of the canonical URI of this content\n*/\nexports.parseText = function(type,text,options) {\n\ttext = text || \"\";\n\toptions = options || {};\n\t// Select a parser\n\tvar Parser = $tw.Wiki.parsers[type];\n\tif(!Parser && $tw.utils.getFileExtensionInfo(type)) {\n\t\tParser = $tw.Wiki.parsers[$tw.utils.getFileExtensionInfo(type).type];\n\t}\n\tif(!Parser) {\n\t\tParser = $tw.Wiki.parsers[options.defaultType || \"text/vnd.tiddlywiki\"];\n\t}\n\tif(!Parser) {\n\t\treturn null;\n\t}\n\t// Return the parser instance\n\treturn new Parser(type,text,{\n\t\tparseAsInline: options.parseAsInline,\n\t\twiki: this,\n\t\t_canonical_uri: options._canonical_uri\n\t});\n};\n\n/*\nParse a tiddler according to its MIME type\n*/\nexports.parseTiddler = function(title,options) {\n\toptions = $tw.utils.extend({},options);\n\tvar cacheType = options.parseAsInline ? \"inlineParseTree\" : \"blockParseTree\",\n\t\ttiddler = this.getTiddler(title),\n\t\tself = this;\n\treturn tiddler ? this.getCacheForTiddler(title,cacheType,function() {\n\t\t\tif(tiddler.hasField(\"_canonical_uri\")) {\n\t\t\t\toptions._canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t}\n\t\t\treturn self.parseText(tiddler.fields.type,tiddler.fields.text,options);\n\t\t}) : null;\n};\n\nexports.parseTextReference = function(title,field,index,options) {\n\tvar tiddler,text;\n\tif(options.subTiddler) {\n\t\ttiddler = this.getSubTiddler(title,options.subTiddler);\n\t} else {\n\t\ttiddler = this.getTiddler(title);\n\t\tif(field === \"text\" || (!field && !index)) {\n\t\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\t\treturn this.parseTiddler(title,options);\n\t\t}\n\t}\n\tif(field === \"text\" || (!field && !index)) {\n\t\tif(tiddler && tiddler.fields) {\n\t\t\treturn this.parseText(tiddler.fields.type || \"text/vnd.tiddlywiki\",tiddler.fields.text,options);\t\t\t\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t} else if(field) {\n\t\tif(field === \"title\") {\n\t\t\ttext = title;\n\t\t} else {\n\t\t\tif(!tiddler || !tiddler.hasField(field)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\ttext = tiddler.fields[field];\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text.toString(),options);\n\t} else if(index) {\n\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\ttext = this.extractTiddlerDataItem(tiddler,index,undefined);\n\t\tif(text === undefined) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text,options);\n\t}\n};\n\n/*\nMake a widget tree for a parse tree\nparser: parser object\noptions: see below\nOptions include:\ndocument: optional document to use\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.makeWidget = function(parser,options) {\n\toptions = options || {};\n\tvar widgetNode = {\n\t\t\ttype: \"widget\",\n\t\t\tchildren: []\n\t\t},\n\t\tcurrWidgetNode = widgetNode;\n\t// Create set variable widgets for each variable\n\t$tw.utils.each(options.variables,function(value,name) {\n\t\tvar setVariableWidget = {\n\t\t\ttype: \"set\",\n\t\t\tattributes: {\n\t\t\t\tname: {type: \"string\", value: name},\n\t\t\t\tvalue: {type: \"string\", value: value}\n\t\t\t},\n\t\t\tchildren: []\n\t\t};\n\t\tcurrWidgetNode.children = [setVariableWidget];\n\t\tcurrWidgetNode = setVariableWidget;\n\t});\n\t// Add in the supplied parse tree nodes\n\tcurrWidgetNode.children = parser ? parser.tree : [];\n\t// Create the widget\n\treturn new widget.widget(widgetNode,{\n\t\twiki: this,\n\t\tdocument: options.document || $tw.fakeDocument,\n\t\tparentWidget: options.parentWidget\n\t});\n};\n\n/*\nMake a widget tree for transclusion\ntitle: target tiddler title\noptions: as for wiki.makeWidget() plus:\noptions.field: optional field to transclude (defaults to \"text\")\noptions.mode: transclusion mode \"inline\" or \"block\"\noptions.children: optional array of children for the transclude widget\noptions.importVariables: optional importvariables filter string for macros to be included\noptions.importPageMacros: optional boolean; if true, equivalent to passing \"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\" to options.importVariables\n*/\nexports.makeTranscludeWidget = function(title,options) {\n\toptions = options || {};\n\tvar parseTreeDiv = {tree: [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"div\",\n\t\t\tchildren: []}]},\n\t\tparseTreeImportVariables = {\n\t\t\ttype: \"importvariables\",\n\t\t\tattributes: {\n\t\t\t\tfilter: {\n\t\t\t\t\tname: \"filter\",\n\t\t\t\t\ttype: \"string\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tisBlock: false,\n\t\t\tchildren: []},\n\t\tparseTreeTransclude = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {\n\t\t\t\t\tname: \"tiddler\",\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: title}},\n\t\t\tisBlock: !options.parseAsInline};\n\tif(options.importVariables || options.importPageMacros) {\n\t\tif(options.importVariables) {\n\t\t\tparseTreeImportVariables.attributes.filter.value = options.importVariables;\n\t\t} else if(options.importPageMacros) {\n\t\t\tparseTreeImportVariables.attributes.filter.value = \"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\";\n\t\t}\n\t\tparseTreeDiv.tree[0].children.push(parseTreeImportVariables);\n\t\tparseTreeImportVariables.children.push(parseTreeTransclude);\n\t} else {\n\t\tparseTreeDiv.tree[0].children.push(parseTreeTransclude);\n\t}\n\tif(options.field) {\n\t\tparseTreeTransclude.attributes.field = {type: \"string\", value: options.field};\n\t}\n\tif(options.mode) {\n\t\tparseTreeTransclude.attributes.mode = {type: \"string\", value: options.mode};\n\t}\n\tif(options.children) {\n\t\tparseTreeTransclude.children = options.children;\n\t}\n\treturn $tw.wiki.makeWidget(parseTreeDiv,options);\n};\n\n/*\nParse text in a specified format and render it into another format\n\toutputType: content type for the output\n\ttextType: content type of the input text\n\ttext: input text\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderText = function(outputType,textType,text,options) {\n\toptions = options || {};\n\tvar parser = this.parseText(textType,text,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : container.textContent;\n};\n\n/*\nParse text from a tiddler and render it into another format\n\toutputType: content type for the output\n\ttitle: title of the tiddler to be rendered\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderTiddler = function(outputType,title,options) {\n\toptions = options || {};\n\tvar parser = this.parseTiddler(title,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : (outputType === \"text/plain-formatted\" ? container.formattedTextContent : container.textContent);\n};\n\n/*\nReturn an array of tiddler titles that match a search string\n\ttext: The text string to search for\n\toptions: see below\nOptions available:\n\tsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\n\texclude: An array of tiddler titles to exclude from the search\n\tinvert: If true returns tiddlers that do not contain the specified string\n\tcaseSensitive: If true forces a case sensitive search\n\tliteral: If true, searches for literal string, rather than separate search terms\n\tfield: If specified, restricts the search to the specified field\n*/\nexports.search = function(text,options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tt,\n\t\tinvert = !!options.invert;\n\t// Convert the search string into a regexp for each term\n\tvar terms, searchTermsRegExps,\n\t\tflags = options.caseSensitive ? \"\" : \"i\";\n\tif(options.literal) {\n\t\tif(text.length === 0) {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + $tw.utils.escapeRegExp(text) + \")\",flags)];\n\t\t}\n\t} else {\n\t\tterms = text.split(/ +/);\n\t\tif(terms.length === 1 && terms[0] === \"\") {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [];\n\t\t\tfor(t=0; t<terms.length; t++) {\n\t\t\t\tsearchTermsRegExps.push(new RegExp(\"(\" + $tw.utils.escapeRegExp(terms[t]) + \")\",flags));\n\t\t\t}\n\t\t}\n\t}\n\t// Function to check a given tiddler for the search term\n\tvar searchTiddler = function(title) {\n\t\tif(!searchTermsRegExps) {\n\t\t\treturn true;\n\t\t}\n\t\tvar tiddler = self.getTiddler(title);\n\t\tif(!tiddler) {\n\t\t\ttiddler = new $tw.Tiddler({title: title, text: \"\", type: \"text/vnd.tiddlywiki\"});\n\t\t}\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type] || $tw.config.contentTypeInfo[\"text/vnd.tiddlywiki\"],\n\t\t\tmatch;\n\t\tfor(var t=0; t<searchTermsRegExps.length; t++) {\n\t\t\tmatch = false;\n\t\t\tif(options.field) {\n\t\t\t\tmatch = searchTermsRegExps[t].test(tiddler.getFieldString(options.field));\n\t\t\t} else {\n\t\t\t\t// Search title, tags and body\n\t\t\t\tif(contentTypeInfo.encoding === \"utf8\") {\n\t\t\t\t\tmatch = match || searchTermsRegExps[t].test(tiddler.fields.text);\n\t\t\t\t}\n\t\t\t\tvar tags = tiddler.fields.tags ? tiddler.fields.tags.join(\"\\0\") : \"\";\n\t\t\t\tmatch = match || searchTermsRegExps[t].test(tags) || searchTermsRegExps[t].test(tiddler.fields.title);\n\t\t\t}\n\t\t\tif(!match) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t};\n\t// Loop through all the tiddlers doing the search\n\tvar results = [],\n\t\tsource = options.source || this.each;\n\tsource(function(tiddler,title) {\n\t\tif(searchTiddler(title) !== options.invert) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\t// Remove any of the results we have to exclude\n\tif(options.exclude) {\n\t\tfor(t=0; t<options.exclude.length; t++) {\n\t\t\tvar p = results.indexOf(options.exclude[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tresults.splice(p,1);\n\t\t\t}\n\t\t}\n\t}\n\treturn results;\n};\n\n/*\nTrigger a load for a tiddler if it is skinny. Returns the text, or undefined if the tiddler is missing, null if the tiddler is being lazily loaded.\n*/\nexports.getTiddlerText = function(title,defaultText) {\n\tvar tiddler = this.getTiddler(title);\n\t// Return undefined if the tiddler isn't found\n\tif(!tiddler) {\n\t\treturn defaultText;\n\t}\n\tif(tiddler.fields.text !== undefined) {\n\t\t// Just return the text if we've got it\n\t\treturn tiddler.fields.text;\n\t} else {\n\t\t// Tell any listeners about the need to lazily load this tiddler\n\t\tthis.dispatchEvent(\"lazyLoad\",title);\n\t\t// Indicate that the text is being loaded\n\t\treturn null;\n\t}\n};\n\n/*\nCheck whether the text of a tiddler matches a given value. By default, the comparison is case insensitive, and any spaces at either end of the tiddler text is trimmed\n*/\nexports.checkTiddlerText = function(title,targetText,options) {\n\toptions = options || {};\n\tvar text = this.getTiddlerText(title,\"\");\n\tif(!options.noTrim) {\n\t\ttext = text.trim();\n\t}\n\tif(!options.caseSensitive) {\n\t\ttext = text.toLowerCase();\n\t\ttargetText = targetText.toLowerCase();\n\t}\n\treturn text === targetText;\n}\n\n/*\nRead an array of browser File objects, invoking callback(tiddlerFieldsArray) once they're all read\n*/\nexports.readFiles = function(files,options) {\n\tvar callback;\n\tif(typeof options === \"function\") {\n\t\tcallback = options;\n\t\toptions = {};\n\t} else {\n\t\tcallback = options.callback;\n\t}\n\tvar result = [],\n\t\toutstanding = files.length,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tresult.push.apply(result,tiddlerFieldsArray);\n\t\t\tif(--outstanding === 0) {\n\t\t\t\tcallback(result);\n\t\t\t}\n\t\t};\n\tfor(var f=0; f<files.length; f++) {\n\t\tthis.readFile(files[f],Object.assign({},options,{callback: readFileCallback}));\n\t}\n\treturn files.length;\n};\n\n/*\nRead a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFile = function(file,options) {\n\tvar callback;\n\tif(typeof options === \"function\") {\n\t\tcallback = options;\n\t\toptions = {};\n\t} else {\n\t\tcallback = options.callback;\n\t}\n\t// Get the type, falling back to the filename extension\n\tvar self = this,\n\t\ttype = file.type;\n\tif(type === \"\" || !type) {\n\t\tvar dotPos = file.name.lastIndexOf(\".\");\n\t\tif(dotPos !== -1) {\n\t\t\tvar fileExtensionInfo = $tw.utils.getFileExtensionInfo(file.name.substr(dotPos));\n\t\t\tif(fileExtensionInfo) {\n\t\t\t\ttype = fileExtensionInfo.type;\n\t\t\t}\n\t\t}\n\t}\n\t// Figure out if we're reading a binary file\n\tvar contentTypeInfo = $tw.config.contentTypeInfo[type],\n\t\tisBinary = contentTypeInfo ? contentTypeInfo.encoding === \"base64\" : false;\n\t// Log some debugging information\n\tif($tw.log.IMPORT) {\n\t\tconsole.log(\"Importing file '\" + file.name + \"', type: '\" + type + \"', isBinary: \" + isBinary);\n\t}\n\t// Give the hook a chance to process the drag\n\tif($tw.hooks.invokeHook(\"th-importing-file\",{\n\t\tfile: file,\n\t\ttype: type,\n\t\tisBinary: isBinary,\n\t\tcallback: callback\n\t}) !== true) {\n\t\tthis.readFileContent(file,type,isBinary,options.deserializer,callback);\n\t}\n};\n\n/*\nLower level utility to read the content of a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFileContent = function(file,type,isBinary,deserializer,callback) {\n\tvar self = this;\n\t// Create the FileReader\n\tvar reader = new FileReader();\n\t// Onload\n\treader.onload = function(event) {\n\t\tvar text = event.target.result,\n\t\t\ttiddlerFields = {title: file.name || \"Untitled\", type: type};\n\t\tif(isBinary) {\n\t\t\tvar commaPos = text.indexOf(\",\");\n\t\t\tif(commaPos !== -1) {\n\t\t\t\ttext = text.substr(commaPos + 1);\n\t\t\t}\n\t\t}\n\t\t// Check whether this is an encrypted TiddlyWiki file\n\t\tvar encryptedJson = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedJson) {\n\t\t\t// If so, attempt to decrypt it with the current password\n\t\t\t$tw.utils.decryptStoreAreaInteractive(encryptedJson,function(tiddlers) {\n\t\t\t\tcallback(tiddlers);\n\t\t\t});\n\t\t} else {\n\t\t\t// Otherwise, just try to deserialise any tiddlers in the file\n\t\t\tcallback(self.deserializeTiddlers(type,text,tiddlerFields,{deserializer: deserializer}));\n\t\t}\n\t};\n\t// Kick off the read\n\tif(isBinary) {\n\t\treader.readAsDataURL(file);\n\t} else {\n\t\treader.readAsText(file);\n\t}\n};\n\n/*\nFind any existing draft of a specified tiddler\n*/\nexports.findDraft = function(targetTitle) {\n\tvar draftTitle = undefined;\n\tthis.forEachTiddler({includeSystem: true},function(title,tiddler) {\n\t\tif(tiddler.fields[\"draft.title\"] && tiddler.fields[\"draft.of\"] === targetTitle) {\n\t\t\tdraftTitle = title;\n\t\t}\n\t});\n\treturn draftTitle;\n}\n\n/*\nCheck whether the specified draft tiddler has been modified.\nIf the original tiddler doesn't exist, create a vanilla tiddler variable,\nto check if additional fields have been added.\n*/\nexports.isDraftModified = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(!tiddler.isDraft()) {\n\t\treturn false;\n\t}\n\tvar ignoredFields = [\"created\", \"modified\", \"title\", \"draft.title\", \"draft.of\"],\n\t\torigTiddler = this.getTiddler(tiddler.fields[\"draft.of\"]) || new $tw.Tiddler({text:\"\", tags:[]}),\n\t\ttitleModified = tiddler.fields[\"draft.title\"] !== tiddler.fields[\"draft.of\"];\n\treturn titleModified || !tiddler.isEqual(origTiddler,ignoredFields);\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\nhistoryTitle: title of history tiddler (defaults to $:/HistoryList)\n*/\nexports.addToHistory = function(title,fromPageRect,historyTitle) {\n\tvar story = new $tw.Story({wiki: this, historyTitle: historyTitle});\n\tstory.addToHistory(title,fromPageRect);\n};\n\n/*\nInvoke the available upgrader modules\ntitles: array of tiddler titles to be processed\ntiddlers: hashmap by title of tiddler fields of pending import tiddlers. These can be modified by the upgraders. An entry with no fields indicates a tiddler that was pending import has been suppressed. When entries are added to the pending import the tiddlers hashmap may have entries that are not present in the titles array\nReturns a hashmap of messages keyed by tiddler title.\n*/\nexports.invokeUpgraders = function(titles,tiddlers) {\n\t// Collect up the available upgrader modules\n\tvar self = this;\n\tif(!this.upgraderModules) {\n\t\tthis.upgraderModules = [];\n\t\t$tw.modules.forEachModuleOfType(\"upgrader\",function(title,module) {\n\t\t\tif(module.upgrade) {\n\t\t\t\tself.upgraderModules.push(module);\n\t\t\t}\n\t\t});\n\t}\n\t// Invoke each upgrader in turn\n\tvar messages = {};\n\tfor(var t=0; t<this.upgraderModules.length; t++) {\n\t\tvar upgrader = this.upgraderModules[t],\n\t\t\tupgraderMessages = upgrader.upgrade(this,titles,tiddlers);\n\t\t$tw.utils.extend(messages,upgraderMessages);\n\t}\n\treturn messages;\n};\n\n})();\n\n",
"type": "application/javascript",
"module-type": "wikimethod"
},
"$:/palettes/Blanca": {
"title": "$:/palettes/Blanca",
"name": "Blanca",
"description": "A clean white palette to let you focus",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #66cccc\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ffffff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #7897f3\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ccc\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #ffffff\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #7897f3\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #eeeeee\ntab-border-selected: #cccccc\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffeedd\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: #eee\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #ff9900\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/Blue": {
"title": "$:/palettes/Blue",
"name": "Blue",
"description": "A blue theme",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333353\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ddddff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #5959c0\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: #ccccdd\ntab-border-selected: #ccccdd\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #eeeeff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #666666\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #ffffff\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #ffffff\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #5959c0\ntoolbar-new-button: #5eb95e\ntoolbar-options-button: rgb(128, 88, 165)\ntoolbar-save-button: #0e90d2\ntoolbar-info-button: #0e90d2\ntoolbar-edit-button: rgb(243, 123, 29)\ntoolbar-close-button: #dd514c\ntoolbar-delete-button: #dd514c\ntoolbar-cancel-button: rgb(243, 123, 29)\ntoolbar-done-button: #5eb95e\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/Muted": {
"title": "$:/palettes/Muted",
"name": "Muted",
"description": "Bright tiddlers on a muted background",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #6f6f70\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #29a6ee\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #c2c1c2\nsidebar-foreground-shadow: rgba(255,255,255,0)\nsidebar-foreground: #d3d2d4\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #6f6f70\nsidebar-tab-background: #666667\nsidebar-tab-border-selected: #999\nsidebar-tab-border: #515151\nsidebar-tab-divider: #999\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: #999\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #d1d0d2\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #d5ad34\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/ContrastLight": {
"title": "$:/palettes/ContrastLight",
"name": "Contrast (Light)",
"description": "High contrast and unambiguous (light version)",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #000\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #000\ntag-foreground: #fff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n"
},
"$:/palettes/ContrastDark": {
"title": "$:/palettes/ContrastDark",
"name": "Contrast (Dark)",
"description": "High contrast and unambiguous (dark version)",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #000\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #fff\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #fff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n"
},
"$:/palettes/DarkPhotos": {
"title": "$:/palettes/DarkPhotos",
"created": "20150402111612188",
"description": "Good with dark photo backgrounds",
"modified": "20150402112344080",
"name": "DarkPhotos",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: \nbutton-foreground: \nbutton-border: \ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #ddd\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #336438\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #ccf\nsidebar-controls-foreground: #fff\nsidebar-foreground-shadow: rgba(0,0,0, 0.5)\nsidebar-foreground: #fff\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #eee\nsidebar-tab-background-selected: rgba(255,255,255, 0.8)\nsidebar-tab-background: rgba(255,255,255, 0.4)\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: rgba(255,255,255, 0.2)\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #aaf\nsidebar-tiddler-link-foreground: #ddf\nsite-title-foreground: #fff\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/Rocker": {
"title": "$:/palettes/Rocker",
"name": "Rocker",
"description": "A dark theme",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #000\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #cc0000\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.0)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #000\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #ffbb99\nsidebar-tiddler-link-foreground: #cc0000\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffbb99\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #cc0000\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/SolarFlare": {
"title": "$:/palettes/SolarFlare",
"name": "Solar Flare",
"description": "Warm, relaxing earth colours",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": ": Background Tones\n\nbase03: #002b36\nbase02: #073642\n\n: Content Tones\n\nbase01: #586e75\nbase00: #657b83\nbase0: #839496\nbase1: #93a1a1\n\n: Background Tones\n\nbase2: #eee8d5\nbase3: #fdf6e3\n\n: Accent Colors\n\nyellow: #b58900\norange: #cb4b16\nred: #dc322f\nmagenta: #d33682\nviolet: #6c71c4\nblue: #268bd2\ncyan: #2aa198\ngreen: #859900\n\n: Additional Tones (RA)\n\nbase10: #c0c4bb\nviolet-muted: #7c81b0\nblue-muted: #4e7baa\n\nyellow-hot: #ffcc44\norange-hot: #eb6d20\nred-hot: #ff2222\nblue-hot: #2298ee\ngreen-hot: #98ee22\n\n: Palette\n\n: Do not use colour macro for background and foreground\nbackground: #fdf6e3\n download-foreground: <<colour background>>\n dragger-foreground: <<colour background>>\n dropdown-background: <<colour background>>\n modal-background: <<colour background>>\n sidebar-foreground-shadow: <<colour background>>\n tiddler-background: <<colour background>>\n tiddler-border: <<colour background>>\n tiddler-link-background: <<colour background>>\n tab-background-selected: <<colour background>>\n dropdown-tab-background-selected: <<colour tab-background-selected>>\nforeground: #657b83\n dragger-background: <<colour foreground>>\n tab-foreground: <<colour foreground>>\n tab-foreground-selected: <<colour tab-foreground>>\n sidebar-tab-foreground-selected: <<colour tab-foreground-selected>>\n sidebar-tab-foreground: <<colour tab-foreground>>\n sidebar-button-foreground: <<colour foreground>>\n sidebar-controls-foreground: <<colour foreground>>\n sidebar-foreground: <<colour foreground>>\n: base03\n: base02\n: base01\n alert-muted-foreground: <<colour base01>>\n: base00\n code-foreground: <<colour base00>>\n message-foreground: <<colour base00>>\n tag-foreground: <<colour base00>>\n: base0\n sidebar-tiddler-link-foreground: <<colour base0>>\n: base1\n muted-foreground: <<colour base1>>\n blockquote-bar: <<colour muted-foreground>>\n dropdown-border: <<colour muted-foreground>>\n sidebar-muted-foreground: <<colour muted-foreground>>\n tiddler-title-foreground: <<colour muted-foreground>>\n site-title-foreground: <<colour tiddler-title-foreground>>\n: base2\n modal-footer-background: <<colour base2>>\n page-background: <<colour base2>>\n modal-backdrop: <<colour page-background>>\n notification-background: <<colour page-background>>\n code-background: <<colour page-background>>\n code-border: <<colour code-background>>\n pre-background: <<colour page-background>>\n pre-border: <<colour pre-background>>\n sidebar-tab-background-selected: <<colour page-background>>\n table-header-background: <<colour base2>>\n tag-background: <<colour base2>>\n tiddler-editor-background: <<colour base2>>\n tiddler-info-background: <<colour base2>>\n tiddler-info-tab-background: <<colour base2>>\n tab-background: <<colour base2>>\n dropdown-tab-background: <<colour tab-background>>\n: base3\n alert-background: <<colour base3>>\n message-background: <<colour base3>>\n: yellow\n: orange\n: red\n: magenta\n alert-highlight: <<colour magenta>>\n: violet\n external-link-foreground: <<colour violet>>\n: blue\n: cyan\n: green\n: base10\n tiddler-controls-foreground: <<colour base10>>\n: violet-muted\n external-link-foreground-visited: <<colour violet-muted>>\n: blue-muted\n primary: <<colour blue-muted>>\n download-background: <<colour primary>>\n tiddler-link-foreground: <<colour primary>>\n\nalert-border: #b99e2f\ndirty-indicator: #ff0000\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nmessage-border: #cfd6e6\nmodal-border: #999999\nsidebar-controls-foreground-hover:\nsidebar-muted-foreground-hover:\nsidebar-tab-background: #ded8c5\nsidebar-tiddler-link-foreground-hover:\nstatic-alert-foreground: #aaaaaa\ntab-border: #cccccc\n modal-footer-border: <<colour tab-border>>\n modal-header-border: <<colour tab-border>>\n notification-border: <<colour tab-border>>\n sidebar-tab-border: <<colour tab-border>>\n tab-border-selected: <<colour tab-border>>\n sidebar-tab-border-selected: <<colour tab-border-selected>>\ntab-divider: #d8d8d8\n sidebar-tab-divider: <<colour tab-divider>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-border: #dddddd\ntiddler-subtitle-foreground: #c0c0c0\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/Vanilla": {
"title": "$:/palettes/Vanilla",
"name": "Vanilla",
"description": "Pale and unobtrusive",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #f4f4f4\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #aaaaaa\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #f4f4f4\nsidebar-tab-background: #e0e0e0\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: #e4e4e4\nsidebar-tab-foreground-selected:\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #999999\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/core/readme": {
"title": "$:/core/readme",
"text": "This plugin contains TiddlyWiki's core components, comprising:\n\n* JavaScript code modules\n* Icons\n* Templates needed to create TiddlyWiki's user interface\n* British English (''en-GB'') translations of the localisable strings used by the core\n"
},
"$:/library/sjcl.js/license": {
"title": "$:/library/sjcl.js/license",
"type": "text/plain",
"text": "SJCL is open. You can use, modify and redistribute it under a BSD\nlicense or under the GNU GPL, version 2.0.\n\n---------------------------------------------------------------------\n\nhttp://opensource.org/licenses/BSD-2-Clause\n\nCopyright (c) 2009-2015, Emily Stark, Mike Hamburg and Dan Boneh at\nStanford University. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\nnotice, this list of conditions and the following disclaimer in the\ndocumentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\nIS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\nTO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n---------------------------------------------------------------------\n\nhttp://opensource.org/licenses/GPL-2.0\n\nThe Stanford Javascript Crypto Library (hosted here on GitHub) is a\nproject by the Stanford Computer Security Lab to build a secure,\npowerful, fast, small, easy-to-use, cross-browser library for\ncryptography in Javascript.\n\nCopyright (c) 2009-2015, Emily Stark, Mike Hamburg and Dan Boneh at\nStanford University.\n\nThis program is free software; you can redistribute it and/or modify it\nunder the terms of the GNU General Public License as published by the\nFree Software Foundation; either version 2 of the License, or (at your\noption) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General\nPublic License for more details.\n\nYou should have received a copy of the GNU General Public License along\nwith this program; if not, write to the Free Software Foundation, Inc.,\n59 Temple Place, Suite 330, Boston, MA 02111-1307 USA"
},
"$:/core/templates/MOTW.html": {
"title": "$:/core/templates/MOTW.html",
"text": "\\rules only filteredtranscludeinline transcludeinline entity\n<!-- The following comment is called a MOTW comment and is necessary for the TiddlyIE Internet Explorer extension -->\n<!-- saved from url=(0021)https://tiddlywiki.com --> "
},
"$:/core/templates/alltiddlers.template.html": {
"title": "$:/core/templates/alltiddlers.template.html",
"type": "text/vnd.tiddlywiki-html",
"text": "<!-- This template is provided for backwards compatibility with older versions of TiddlyWiki -->\n\n<$set name=\"exportFilter\" value=\"[!is[system]sort[title]]\">\n\n{{$:/core/templates/exporters/StaticRiver}}\n\n</$set>\n"
},
"$:/core/templates/canonical-uri-external-image": {
"title": "$:/core/templates/canonical-uri-external-image",
"text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external images.\n\nChange the `./images/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./images/<$view field=\"title\" format=\"doubleurlencoded\"/>"
},
"$:/core/templates/canonical-uri-external-raw": {
"title": "$:/core/templates/canonical-uri-external-raw",
"text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external raw files that are stored in the same directory\n\n-->\n<$view field=\"title\" format=\"doubleurlencoded\"/>"
},
"$:/core/templates/canonical-uri-external-text": {
"title": "$:/core/templates/canonical-uri-external-text",
"text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external text files.\n\nChange the `./text/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./text/<$view field=\"title\" format=\"doubleurlencoded\"/>.tid"
},
"$:/core/templates/css-tiddler": {
"title": "$:/core/templates/css-tiddler",
"text": "<!--\n\nThis template is used for saving CSS tiddlers as a style tag with data attributes representing the tiddler fields.\n\n-->`<style`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/css\">`<$view field=\"text\" format=\"text\" />`</style>`"
},
"$:/core/templates/exporters/CsvFile": {
"title": "$:/core/templates/exporters/CsvFile",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/CsvFile}}",
"extension": ".csv",
"text": "\\define renderContent()\n<$text text=<<csvtiddlers filter:\"\"\"$(exportFilter)$\"\"\" format:\"quoted-comma-sep\">>/>\n\\end\n<<renderContent>>\n"
},
"$:/core/templates/exporters/JsonFile": {
"title": "$:/core/templates/exporters/JsonFile",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/JsonFile}}",
"extension": ".json",
"text": "\\define renderContent()\n<$text text=<<jsontiddlers filter:\"\"\"$(exportFilter)$\"\"\">>/>\n\\end\n<<renderContent>>\n"
},
"$:/core/templates/exporters/StaticRiver": {
"title": "$:/core/templates/exporters/StaticRiver",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/StaticRiver}}",
"extension": ".html",
"text": "\\define tv-wikilink-template() #$uri_encoded$\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n<section class=\"tc-story-river\">\n{{$:/core/templates/exporters/StaticRiver/Content||$:/core/templates/html-tiddler}}\n</section>\n</body>\n</html>\n"
},
"$:/core/templates/exporters/StaticRiver/Content": {
"title": "$:/core/templates/exporters/StaticRiver/Content",
"text": "\\define renderContent()\n{{{ $(exportFilter)$ ||$:/core/templates/static-tiddler}}}\n\\end\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n<<renderContent>>\n</$importvariables>\n"
},
"$:/core/templates/exporters/TidFile": {
"title": "$:/core/templates/exporters/TidFile",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/TidFile}}",
"extension": ".tid",
"text": "\\define renderContent()\n{{{ $(exportFilter)$ +[limit[1]] ||$:/core/templates/tid-tiddler}}}\n\\end\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\"><<renderContent>></$importvariables>"
},
"$:/core/templates/html-div-tiddler": {
"title": "$:/core/templates/html-div-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as an HTML DIV tag with attributes representing the tiddler fields.\n\n-->`<div`<$fields template=' $name$=\"$encoded_value$\"'></$fields>`>\n<pre>`<$view field=\"text\" format=\"htmlencoded\" />`</pre>\n</div>`\n"
},
"$:/core/templates/html-tiddler": {
"title": "$:/core/templates/html-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as raw HTML\n\n--><$view field=\"text\" format=\"htmlwikified\" />"
},
"$:/core/templates/javascript-tiddler": {
"title": "$:/core/templates/javascript-tiddler",
"text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields.\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\">`<$view field=\"text\" format=\"text\" />`</script>`"
},
"$:/core/templates/json-tiddler": {
"title": "$:/core/templates/json-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as raw JSON\n\n--><$text text=<<jsontiddler>>/>"
},
"$:/core/templates/module-tiddler": {
"title": "$:/core/templates/module-tiddler",
"text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields. The body of the tiddler is wrapped in a call to the `$tw.modules.define` function in order to define the body of the tiddler as a module\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\" data-module=\"yes\">$tw.modules.define(\"`<$view field=\"title\" format=\"jsencoded\" />`\",\"`<$view field=\"module-type\" format=\"jsencoded\" />`\",function(module,exports,require) {`<$view field=\"text\" format=\"text\" />`});\n</script>`"
},
"$:/core/templates/plain-text-tiddler": {
"title": "$:/core/templates/plain-text-tiddler",
"text": "<$view field=\"text\" format=\"text\" />"
},
"$:/core/templates/raw-static-tiddler": {
"title": "$:/core/templates/raw-static-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as static HTML\n\n--><$view field=\"text\" format=\"plainwikified\" />"
},
"$:/core/save/all": {
"title": "$:/core/save/all",
"text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/empty": {
"title": "$:/core/save/empty",
"text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/lazy-all": {
"title": "$:/core/save/lazy-all",
"text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] \n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/lazy-images": {
"title": "$:/core/save/lazy-images",
"text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[!is[system]is[image]] +[sort[title]] \n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/templates/single.tiddler.window": {
"title": "$:/core/templates/single.tiddler.window",
"text": "<$set name=\"themeTitle\" value={{$:/view}}>\n\n<$set name=\"tempCurrentTiddler\" value=<<currentTiddler>>>\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$set name=\"currentTiddler\" value=<<tempCurrentTiddler>>>\n\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n\n<$transclude mode=\"block\"/>\n\n</$navigator>\n\n</$importvariables>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n"
},
"$:/core/templates/split-recipe": {
"title": "$:/core/templates/split-recipe",
"text": "<$list filter=\"[!is[system]]\">\ntiddler: <$view field=\"title\" format=\"urlencoded\"/>.tid\n</$list>\n"
},
"$:/core/templates/static-tiddler": {
"title": "$:/core/templates/static-tiddler",
"text": "<a name=<<currentTiddler>>>\n<$transclude tiddler=\"$:/core/ui/ViewTemplate\"/>\n</a>"
},
"$:/core/templates/static.area": {
"title": "$:/core/templates/static.area",
"text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawStaticContent]!has[draft.of]] ||$:/core/templates/raw-static-tiddler}}}\n{{$:/core/templates/static.content||$:/core/templates/html-tiddler}}\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\nThis file contains an encrypted ~TiddlyWiki. Enable ~JavaScript and enter the decryption password when prompted.\n</$reveal>\n"
},
"$:/core/templates/static.content": {
"title": "$:/core/templates/static.content",
"text": "<!-- For Google, and people without JavaScript-->\nThis [[TiddlyWiki|https://tiddlywiki.com]] contains the following tiddlers:\n\n<ul>\n<$list filter=<<saveTiddlerFilter>>>\n<li><$view field=\"title\" format=\"text\"></$view></li>\n</$list>\n</ul>\n"
},
"$:/core/templates/static.template.css": {
"title": "$:/core/templates/static.template.css",
"text": "{{$:/boot/boot.css||$:/core/templates/plain-text-tiddler}}\n\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n"
},
"$:/core/templates/static.template.html": {
"title": "$:/core/templates/static.template.html",
"type": "text/vnd.tiddlywiki-html",
"text": "\\define tv-wikilink-template() static/$uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n{{$:/core/ui/PageTemplate||$:/core/templates/html-tiddler}}\n</body>\n</html>\n"
},
"$:/core/templates/static.tiddler.html": {
"title": "$:/core/templates/static.tiddler.html",
"text": "\\define tv-wikilink-template() $uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n`<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"`{{$:/core/templates/version}}`\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<link rel=\"stylesheet\" href=\"static.css\">\n<title>`<$view field=\"caption\"><$view field=\"title\"/></$view>: {{$:/core/wiki/title}}`</title>\n</head>\n<body class=\"tc-body\">\n`{{$:/StaticBanner||$:/core/templates/html-tiddler}}`\n<section class=\"tc-story-river\">\n`<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n<$view tiddler=\"$:/core/ui/ViewTemplate\" format=\"htmlwikified\"/>\n</$importvariables>`\n</section>\n</body>\n</html>\n`"
},
"$:/core/templates/store.area.template.html": {
"title": "$:/core/templates/store.area.template.html",
"text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n`<div id=\"storeArea\" style=\"display:none;\">`\n<$list filter=<<saveTiddlerFilter>> template=\"$:/core/templates/html-div-tiddler\"/>\n`</div>`\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n`<!--~~ Encrypted tiddlers ~~-->`\n`<pre id=\"encryptedStoreArea\" type=\"text/plain\" style=\"display:none;\">`\n<$encrypt filter=<<saveTiddlerFilter>>/>\n`</pre>`\n</$reveal>"
},
"$:/core/templates/tid-tiddler": {
"title": "$:/core/templates/tid-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers in TiddlyWeb *.tid format\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>`\n`<$view field=\"text\" format=\"text\" />"
},
"$:/core/templates/tiddler-metadata": {
"title": "$:/core/templates/tiddler-metadata",
"text": "<!--\n\nThis template is used for saving tiddler metadata *.meta files\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>"
},
"$:/core/templates/tiddlywiki5.html": {
"title": "$:/core/templates/tiddlywiki5.html",
"text": "\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n{{$:/core/templates/MOTW.html}}<html>\n<head>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\">\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"application-name\" content=\"TiddlyWiki\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"copyright\" content=\"{{$:/core/copyright.txt}}\" />\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\n\n<!--~~ Raw markup ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/core/wiki/rawmarkup]] [all[shadows+tiddlers]tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified]] ||$:/core/templates/raw-static-tiddler}}}\n</head>\n<body class=\"tc-body\">\n<!--~~ Static styles ~~-->\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<!--~~ Static content for Google and browsers without JavaScript ~~-->\n<noscript>\n<div id=\"splashArea\">\n{{$:/core/templates/static.area}}\n</div>\n</noscript>\n<!--~~ Ordinary tiddlers ~~-->\n{{$:/core/templates/store.area.template.html}}\n<!--~~ Library modules ~~-->\n<div id=\"libraryModules\" style=\"display:none;\">\n{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/javascript-tiddler}}}\n</div>\n<!--~~ Boot kernel prologue ~~-->\n<div id=\"bootKernelPrefix\" style=\"display:none;\">\n{{ $:/boot/bootprefix.js ||$:/core/templates/javascript-tiddler}}\n</div>\n<!--~~ Boot kernel ~~-->\n<div id=\"bootKernel\" style=\"display:none;\">\n{{ $:/boot/boot.js ||$:/core/templates/javascript-tiddler}}\n</div>\n</body>\n</html>\n"
},
"$:/core/templates/version": {
"title": "$:/core/templates/version",
"text": "<<version>>"
},
"$:/core/templates/wikified-tiddler": {
"title": "$:/core/templates/wikified-tiddler",
"text": "<$transclude />"
},
"$:/core/ui/AboveStory/tw2-plugin-check": {
"title": "$:/core/ui/AboveStory/tw2-plugin-check",
"tags": "$:/tags/AboveStory",
"text": "\\define lingo-base() $:/language/AboveStory/ClassicPlugin/\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]limit[1]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n<ul>\n\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]]\">\n\n<li>\n\n<$link><$view field=\"title\"/></$link>\n\n</li>\n\n</$list>\n\n</ul>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/AdvancedSearch/Filter": {
"title": "$:/core/ui/AdvancedSearch/Filter",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Filter/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n<<lingo Filter/Hint>>\n\n<div class=\"tc-search tc-advanced-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch/FilterButton]!has[draft.of]]\"><$transclude/></$list>\n</div>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\n<div class=\"tc-search-results\">\n<<lingo Filter/Matches>>\n<$list filter={{$:/temp/advancedsearch}} template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$set>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button popup=<<qualify \"$:/state/filterDeleteDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/delete-button}}\n</$button>\n</$reveal>\n\n<$reveal state=<<qualify \"$:/state/filterDeleteDropdown\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<div class=\"tc-dropdown-item-plain\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\nAre you sure you wish to delete <<resultCount>> tiddler(s)?\n</$set>\n</div>\n<div class=\"tc-dropdown-item-plain\">\n<$button class=\"tc-btn\">\n<$action-deletetiddler $filter={{$:/temp/advancedsearch}}/>\nDelete these tiddlers\n</$button>\n</div>\n</div>\n</div>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/filterDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</span>\n\n<$reveal state=<<qualify \"$:/state/filterDropdown\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Filter]]\"><$link to={{!!filter}}><$transclude field=\"description\"/></$link>\n</$list>\n</div>\n</div>\n</$linkcatcher>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/export": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/export",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$macrocall $name=\"exportButton\" exportFilter={{$:/temp/advancedsearch}} lingoBase=\"$:/language/Buttons/ExportTiddlers/\"/>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Shadows": {
"title": "$:/core/ui/AdvancedSearch/Shadows",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Shadows/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Shadows/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[all[shadows]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo Shadows/Matches>>\n\n<$list filter=\"[all[shadows]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$set>\n\n</$list>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Standard": {
"title": "$:/core/ui/AdvancedSearch/Standard",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Standard/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Standard/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$set name=\"searchTiddler\" value=\"$:/temp/advancedsearch\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude/>\n</$list>\n\"\"\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}}/>\n</$list>\n</$set>\n</$list>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/System": {
"title": "$:/core/ui/AdvancedSearch/System",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/System/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo System/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[is[system]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo System/Matches>>\n\n<$list filter=\"[is[system]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$set>\n\n</$list>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
},
"$:/AdvancedSearch": {
"title": "$:/AdvancedSearch",
"icon": "$:/core/images/advanced-search-button",
"color": "#bbb",
"text": "<div class=\"tc-advanced-search\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch]!has[draft.of]]\" \"$:/core/ui/AdvancedSearch/System\">>\n</div>\n"
},
"$:/core/ui/AlertTemplate": {
"title": "$:/core/ui/AlertTemplate",
"text": "<div class=\"tc-alert\">\n<div class=\"tc-alert-toolbar\">\n<$button class=\"tc-btn-invisible\"><$action-deletetiddler $tiddler=<<currentTiddler>>/>{{$:/core/images/delete-button}}</$button>\n</div>\n<div class=\"tc-alert-subtitle\">\n<$view field=\"component\"/> - <$view field=\"modified\" format=\"date\" template=\"0hh:0mm:0ss DD MM YYYY\"/> <$reveal type=\"nomatch\" state=\"!!count\" text=\"\"><span class=\"tc-alert-highlight\">({{$:/language/Count}}: <$view field=\"count\"/>)</span></$reveal>\n</div>\n<div class=\"tc-alert-body\">\n\n<$transclude/>\n\n</div>\n</div>\n"
},
"$:/core/ui/BinaryWarning": {
"title": "$:/core/ui/BinaryWarning",
"text": "\\define lingo-base() $:/language/BinaryWarning/\n<div class=\"tc-binary-warning\">\n\n<<lingo Prompt>>\n\n</div>\n"
},
"$:/core/ui/Components/plugin-info": {
"title": "$:/core/ui/Components/plugin-info",
"text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define popup-state-macro()\n$(qualified-state)$-$(currentTiddler)$\n\\end\n\n\\define tabs-state-macro()\n$(popup-state)$-$(pluginInfoType)$\n\\end\n\n\\define plugin-icon-title()\n$(currentTiddler)$/icon\n\\end\n\n\\define plugin-disable-title()\n$:/config/Plugins/Disabled/$(currentTiddler)$\n\\end\n\n\\define plugin-table-body(type,disabledMessage,default-popup-state)\n<div class=\"tc-plugin-info-chunk tc-small-icon\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\" default=\"\"\"$default-popup-state$\"\"\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\" default=\"\"\"$default-popup-state$\"\"\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<plugin-icon-title>>>\n<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\n</$transclude>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<h1>\n''<$view field=\"description\"><$view field=\"title\"/></$view>'' $disabledMessage$\n</h1>\n<h2>\n<$view field=\"title\"/>\n</h2>\n<h2>\n<div><em><$view field=\"version\"/></em></div>\n</h2>\n</div>\n\\end\n\n\\define plugin-info(type,default-popup-state)\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info\">\n<<plugin-table-body type:\"$type$\" default-popup-state:\"\"\"$default-popup-state$\"\"\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info tc-plugin-info-disabled\">\n<<plugin-table-body type:\"$type$\" default-popup-state:\"\"\"$default-popup-state$\"\"\" disabledMessage:\"<$macrocall $name='lingo' title='Disabled/Status'/>\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>> default=\"\"\"$default-popup-state$\"\"\">\n<div class=\"tc-plugin-info-dropdown\">\n<div class=\"tc-plugin-info-dropdown-body\">\n<$list filter=\"[all[current]] -[[$:/core]]\">\n<div style=\"float:right;\">\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"yes\" tooltip={{$:/language/ControlPanel/Plugins/Disable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Disable/Caption}}>\n<<lingo Disable/Caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"no\" tooltip={{$:/language/ControlPanel/Plugins/Enable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Enable/Caption}}>\n<<lingo Enable/Caption>>\n</$button>\n</$reveal>\n</div>\n</$list>\n<$set name=\"tabsList\" filter=\"[<currentTiddler>list[]] contents\">\n<$macrocall $name=\"tabs\" state=<<tabs-state-macro>> tabsList=<<tabsList>> default={{{ [enlist<tabsList>] }}} template=\"$:/core/ui/PluginInfo\"/>\n</$set>\n</div>\n</div>\n</$reveal>\n</$set>\n\\end\n\n<$macrocall $name=\"plugin-info\" type=<<plugin-type>> default-popup-state=<<default-popup-state>>/>\n"
},
"$:/core/ui/Components/tag-link": {
"title": "$:/core/ui/Components/tag-link",
"text": "<$link>\n<$set name=\"backgroundColor\" value={{!!color}}>\n<span style=<<tag-styles>> class=\"tc-tag-label\">\n<$view field=\"title\" format=\"text\"/>\n</span>\n</$set>\n</$link>"
},
"$:/core/ui/ControlPanel/Advanced": {
"title": "$:/core/ui/ControlPanel/Advanced",
"tags": "$:/tags/ControlPanel/Info",
"caption": "{{$:/language/ControlPanel/Advanced/Caption}}",
"text": "{{$:/language/ControlPanel/Advanced/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Advanced]!has[draft.of]]\" \"$:/core/ui/ControlPanel/TiddlerFields\">>\n</div>\n"
},
"$:/core/ui/ControlPanel/Appearance": {
"title": "$:/core/ui/ControlPanel/Appearance",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Appearance/Caption}}",
"text": "{{$:/language/ControlPanel/Appearance/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Appearance]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Theme\">>\n</div>\n"
},
"$:/core/ui/ControlPanel/Basics": {
"title": "$:/core/ui/ControlPanel/Basics",
"tags": "$:/tags/ControlPanel/Info",
"caption": "{{$:/language/ControlPanel/Basics/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Basics/\n\n\\define show-filter-count(filter)\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $value=\"\"\"$filter$\"\"\"/>\n<$action-setfield $tiddler=\"$:/state/tab--1498284803\" $value=\"$:/core/ui/AdvancedSearch/Filter\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n''<$count filter=\"\"\"$filter$\"\"\"/>''\n{{$:/core/images/advanced-search-button}}\n</$button>\n\\end\n\n|<<lingo Version/Prompt>> |''<<version>>'' |\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/status/UserName\"><<lingo Username/Prompt>></$link> |<$edit-text tiddler=\"$:/status/UserName\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/AnimationDuration\"><<lingo AnimDuration/Prompt>></$link> |<$edit-text tiddler=\"$:/config/AnimationDuration\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\" class=\"tc-edit-texteditor\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n|<$link to=\"$:/config/NewJournal/Title\"><<lingo NewJournal/Title/Prompt>></$link> |<$edit-text tiddler=\"$:/config/NewJournal/Title\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/NewJournal/Text\"><<lingo NewJournal/Text/Prompt>></$link> |<$edit tiddler=\"$:/config/NewJournal/Text\" tag=\"textarea\" class=\"tc-edit-texteditor\" default=\"\"/> |\n|<$link to=\"$:/config/NewJournal/Tags\"><<lingo NewJournal/Tags/Prompt>></$link> |<$edit-text tiddler=\"$:/config/NewJournal/Tags\" default=\"\" tag=\"input\"/> |\n|<<lingo Language/Prompt>> |{{$:/snippets/minilanguageswitcher}} |\n|<<lingo Tiddlers/Prompt>> |<<show-filter-count \"[!is[system]sort[title]]\">> |\n|<<lingo Tags/Prompt>> |<<show-filter-count \"[tags[]sort[title]]\">> |\n|<<lingo SystemTiddlers/Prompt>> |<<show-filter-count \"[is[system]sort[title]]\">> |\n|<<lingo ShadowTiddlers/Prompt>> |<<show-filter-count \"[all[shadows]sort[title]]\">> |\n|<<lingo OverriddenShadowTiddlers/Prompt>> |<<show-filter-count \"[is[tiddler]is[shadow]sort[title]]\">> |\n"
},
"$:/core/ui/ControlPanel/EditorTypes": {
"title": "$:/core/ui/ControlPanel/EditorTypes",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/EditorTypes/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/EditorTypes/\n\n<<lingo Hint>>\n\n<table>\n<tbody>\n<tr>\n<th><<lingo Type/Caption>></th>\n<th><<lingo Editor/Caption>></th>\n</tr>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/config/EditorTypeMappings/]sort[title]]\">\n<tr>\n<td>\n<$link>\n<$list filter=\"[all[current]removeprefix[$:/config/EditorTypeMappings/]]\">\n<$text text={{!!title}}/>\n</$list>\n</$link>\n</td>\n<td>\n<$view field=\"text\"/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ControlPanel/Info": {
"title": "$:/core/ui/ControlPanel/Info",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Info/Caption}}",
"text": "{{$:/language/ControlPanel/Info/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Info]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Basics\">>\n</div>\n"
},
"$:/core/ui/ControlPanel/KeyboardShortcuts": {
"title": "$:/core/ui/ControlPanel/KeyboardShortcuts",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/KeyboardShortcuts/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/KeyboardShortcuts/\n\n\\define new-shortcut(title)\n<div class=\"tc-dropdown-item-plain\">\n<$edit-shortcut tiddler=\"$title$\" placeholder={{$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt}} style=\"width:auto;\"/> <$button>\n<<lingo Add/Caption>>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"[{$title$}]\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"$title$\"\n/>\n</$button>\n</div>\n\\end\n\n\\define shortcut-list-item(caption)\n<td>\n</td>\n<td style=\"text-align:right;font-size:0.7em;\">\n<<lingo Platform/$caption$>>\n</td>\n<td>\n<div style=\"position:relative;\">\n<$button popup=<<qualify \"$:/state/dropdown/$(shortcutTitle)$\">> class=\"tc-btn-invisible\">\n{{$:/core/images/edit-button}}\n</$button>\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutTitle)$}} prefix=\"<kbd>\" separator=\"</kbd> <kbd>\" suffix=\"</kbd>\"/>\n\n<$reveal state=<<qualify \"$:/state/dropdown/$(shortcutTitle)$\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown tc-popup-keep\">\n<$list filter=\"[list[$(shortcutTitle)$!!text]sort[title]]\" variable=\"shortcut\" emptyMessage=\"\"\"\n<div class=\"tc-dropdown-item-plain\">\n//<<lingo NoShortcuts/Caption>>//\n</div>\n\"\"\">\n<div class=\"tc-dropdown-item-plain\">\n<$button class=\"tc-btn-invisible\" tooltip=<<lingo Remove/Hint>>>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"+[remove<shortcut>]\"\n/>\n×\n</$button>\n<kbd>\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts=<<shortcut>>/>\n</kbd>\n</div>\n</$list>\n<hr/>\n<$macrocall $name=\"new-shortcut\" title=<<qualify \"$:/state/new-shortcut/$(shortcutTitle)$\">>/>\n</div>\n</div>\n</$reveal>\n</div>\n</td>\n\\end\n\n\\define shortcut-list(caption,prefix)\n<tr>\n<$list filter=\"[all[tiddlers+shadows][$prefix$$(shortcutName)$]]\" variable=\"shortcutTitle\">\n<<shortcut-list-item \"$caption$\">>\n</$list>\n</tr>\n\\end\n\n\\define shortcut-editor()\n<<shortcut-list \"All\" \"$:/config/shortcuts/\">>\n<<shortcut-list \"Mac\" \"$:/config/shortcuts-mac/\">>\n<<shortcut-list \"NonMac\" \"$:/config/shortcuts-not-mac/\">>\n<<shortcut-list \"Linux\" \"$:/config/shortcuts-linux/\">>\n<<shortcut-list \"NonLinux\" \"$:/config/shortcuts-not-linux/\">>\n<<shortcut-list \"Windows\" \"$:/config/shortcuts-windows/\">>\n<<shortcut-list \"NonWindows\" \"$:/config/shortcuts-not-windows/\">>\n\\end\n\n\\define shortcut-preview()\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutPrefix)$$(shortcutName)$}} prefix=\"<kbd>\" separator=\"</kbd> <kbd>\" suffix=\"</kbd>\"/>\n\\end\n\n\\define shortcut-item-inner()\n<tr>\n<td>\n<$reveal type=\"nomatch\" state=<<dropdownStateTitle>> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<<dropdownStateTitle>>\n\t$value=\"open\"\n/>\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<dropdownStateTitle>> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<<dropdownStateTitle>>\n\t$value=\"close\"\n/>\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n''<$text text=<<shortcutName>>/>''\n</td>\n<td>\n<$transclude tiddler=\"$:/config/ShortcutInfo/$(shortcutName)$\"/>\n</td>\n<td>\n<$list filter=\"$:/config/shortcuts/ $:/config/shortcuts-mac/ $:/config/shortcuts-not-mac/ $:/config/shortcuts-linux/ $:/config/shortcuts-not-linux/ $:/config/shortcuts-windows/ $:/config/shortcuts-not-windows/\" variable=\"shortcutPrefix\">\n<<shortcut-preview>>\n</$list>\n</td>\n</tr>\n<$set name=\"dropdownState\" value={{$(dropdownStateTitle)$}}>\n<$list filter=\"[<dropdownState>prefix[open]]\" variable=\"listItem\">\n<<shortcut-editor>>\n</$list>\n</$set>\n\\end\n\n\\define shortcut-item()\n<$set name=\"dropdownStateTitle\" value=<<qualify \"$:/state/dropdown/keyboardshortcut/$(shortcutName)$\">>>\n<<shortcut-item-inner>>\n</$set>\n\\end\n\n<table>\n<tbody>\n<$list filter=\"[all[shadows+tiddlers]removeprefix[$:/config/ShortcutInfo/]]\" variable=\"shortcutName\">\n<<shortcut-item>>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ControlPanel/LoadedModules": {
"title": "$:/core/ui/ControlPanel/LoadedModules",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/LoadedModules/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n<<lingo LoadedModules/Hint>>\n\n{{$:/snippets/modules}}\n"
},
"$:/core/ui/ControlPanel/Modals/AddPlugins": {
"title": "$:/core/ui/ControlPanel/Modals/AddPlugins",
"subtitle": "{{$:/core/images/download-button}} {{$:/language/ControlPanel/Plugins/Add/Caption}}",
"text": "\\define install-plugin-button()\n<$button>\n<$action-sendmessage $message=\"tm-load-plugin-from-library\" url={{!!url}} title={{$(assetInfo)$!!original-title}}/>\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"installedVersion\" emptyMessage=\"\"\"{{$:/language/ControlPanel/Plugins/Install/Caption}}\"\"\">\n{{$:/language/ControlPanel/Plugins/Reinstall/Caption}}\n</$list>\n</$button>\n\\end\n\n\\define popup-state-macro()\n$:/state/add-plugin-info/$(connectionTiddler)$/$(assetInfo)$\n\\end\n\n\\define display-plugin-info(type)\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<div class=\"tc-plugin-info\">\n<div class=\"tc-plugin-info-chunk tc-small-icon\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<$list filter=\"[<assetInfo>has[icon]]\" emptyMessage=\"\"\"<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\"\"\">\n<img src={{$(assetInfo)$!!icon}}/>\n</$list>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<h1><$view tiddler=<<assetInfo>> field=\"description\"/></h1>\n<h2><$view tiddler=<<assetInfo>> field=\"original-title\"/></h2>\n<div><em><$view tiddler=<<assetInfo>> field=\"version\"/></em></div>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<<install-plugin-button>>\n</div>\n</div>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>>>\n<div class=\"tc-plugin-info-dropdown\">\n<div class=\"tc-plugin-info-dropdown-message\">\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"installedVersion\" emptyMessage=\"\"\"{{$:/language/ControlPanel/Plugins/NotInstalled/Hint}}\"\"\">\n<em>\n{{$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint}}\n</em>\n</$list>\n</div>\n<div class=\"tc-plugin-info-dropdown-body\">\n<$transclude tiddler=<<assetInfo>> field=\"readme\" mode=\"block\"/>\n</div>\n</div>\n</$reveal>\n</$set>\n\\end\n\n\\define load-plugin-library-button()\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-load-plugin-library\" url={{!!url}} infoTitlePrefix=\"$:/temp/RemoteAssetInfo/\"/>\n{{$:/core/images/chevron-right}} {{$:/language/ControlPanel/Plugins/OpenPluginLibrary}}\n</$button>\n\\end\n\n\\define display-server-assets(type)\n{{$:/language/Search/Search}}: <$edit-text tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" default=\"\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n<div class=\"tc-plugin-library-listing\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]search{$:/temp/RemoteAssetSearch/$(currentTiddler)$}sort[description]]\" variable=\"assetInfo\">\n<<display-plugin-info \"$type$\">>\n</$list>\n</div>\n\\end\n\n\\define display-server-connection()\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/ServerConnection]suffix{!!url}]\" variable=\"connectionTiddler\" emptyMessage=<<load-plugin-library-button>>>\n\n<<tabs \"[[$:/core/ui/ControlPanel/Plugins/Add/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Add/Themes]] [[$:/core/ui/ControlPanel/Plugins/Add/Languages]]\" \"$:/core/ui/ControlPanel/Plugins/Add/Plugins\">>\n\n</$list>\n\\end\n\n\\define close-library-button()\n<$reveal type='nomatch' state='$:/temp/ServerConnection/$(PluginLibraryURL)$' text=''>\n<$button class='tc-btn-big-green'>\n<$action-sendmessage $message=\"tm-unload-plugin-library\" url={{!!url}}/>\n{{$:/core/images/chevron-left}} {{$:/language/ControlPanel/Plugins/ClosePluginLibrary}}\n<$action-deletetiddler $filter=\"[prefix[$:/temp/ServerConnection/$(PluginLibraryURL)$]][prefix[$:/temp/RemoteAssetInfo/$(PluginLibraryURL)$]]\"/>\n</$button>\n</$reveal>\n\\end\n\n\\define plugin-library-listing()\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/PluginLibrary]]\">\n<div class=\"tc-plugin-library\">\n\n!! <$link><$transclude field=\"caption\"><$view field=\"title\"/></$transclude></$link>\n\n//<$view field=\"url\"/>//\n\n<$transclude/>\n\n<$set name=PluginLibraryURL value={{!!url}}>\n<<close-library-button>>\n</$set>\n\n<<display-server-connection>>\n</div>\n</$list>\n\\end\n\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n\n<div>\n<<plugin-library-listing>>\n</div>\n\n</$importvariables>\n"
},
"$:/core/ui/ControlPanel/Palette": {
"title": "$:/core/ui/ControlPanel/Palette",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Palette/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Palette/\n\n{{$:/snippets/paletteswitcher}}\n\n<$reveal type=\"nomatch\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"yes\"><<lingo ShowEditor/Caption>></$button>\n\n</$reveal>\n\n<$reveal type=\"match\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"no\"><<lingo HideEditor/Caption>></$button>\n{{$:/snippets/paletteeditor}}\n\n</$reveal>\n\n"
},
"$:/core/ui/ControlPanel/Parsing": {
"title": "$:/core/ui/ControlPanel/Parsing",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/Parsing/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Parsing/\n\n\\define toggle(Type)\n<$checkbox\ntiddler=\"\"\"$:/config/WikiParserRules/$Type$/$(rule)$\"\"\"\nfield=\"text\"\nchecked=\"enable\"\nunchecked=\"disable\"\ndefault=\"enable\">\n<<rule>>\n</$checkbox>\n\\end\n\n\\define rules(type,Type)\n<$list filter=\"[wikiparserrules[$type$]]\" variable=\"rule\">\n<dd><<toggle $Type$>></dd>\n</$list>\n\\end\n\n<<lingo Hint>>\n\n<dl>\n<dt><<lingo Pragma/Caption>></dt>\n<<rules pragma Pragma>>\n<dt><<lingo Inline/Caption>></dt>\n<<rules inline Inline>>\n<dt><<lingo Block/Caption>></dt>\n<<rules block Block>>\n</dl>"
},
"$:/core/ui/ControlPanel/Plugins/Add/Languages": {
"title": "$:/core/ui/ControlPanel/Plugins/Add/Languages",
"caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[language]]\"/>)",
"text": "<<display-server-assets language>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Add/Plugins": {
"title": "$:/core/ui/ControlPanel/Plugins/Add/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[plugin]]\"/>)",
"text": "<<display-server-assets plugin>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Add/Themes": {
"title": "$:/core/ui/ControlPanel/Plugins/Add/Themes",
"caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[theme]]\"/>)",
"text": "<<display-server-assets theme>>\n"
},
"$:/core/ui/ControlPanel/Plugins/AddPlugins": {
"title": "$:/core/ui/ControlPanel/Plugins/AddPlugins",
"text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n<$button message=\"tm-modal\" param=\"$:/core/ui/ControlPanel/Modals/AddPlugins\" tooltip={{$:/language/ControlPanel/Plugins/Add/Hint}} class=\"tc-btn-big-green\" style=\"background:blue;\">\n{{$:/core/images/download-button}} <<lingo Add/Caption>>\n</$button>\n"
},
"$:/core/ui/ControlPanel/Plugins/Installed/Languages": {
"title": "$:/core/ui/ControlPanel/Plugins/Installed/Languages",
"caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[language]]\"/>)",
"text": "<<plugin-table language>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Installed/Plugins": {
"title": "$:/core/ui/ControlPanel/Plugins/Installed/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[plugin]]\"/>)",
"text": "<<plugin-table plugin>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Installed/Themes": {
"title": "$:/core/ui/ControlPanel/Plugins/Installed/Themes",
"caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[theme]]\"/>)",
"text": "<<plugin-table theme>>\n"
},
"$:/core/ui/ControlPanel/Plugins": {
"title": "$:/core/ui/ControlPanel/Plugins",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Plugins/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define plugin-table(type)\n<$set name=\"plugin-type\" value=\"\"\"$type$\"\"\">\n<$set name=\"qualified-state\" value=<<qualify \"$:/state/plugin-info\">>>\n<$list filter=\"[!has[draft.of]plugin-type[$type$]sort[description]]\" emptyMessage=<<lingo \"Empty/Hint\">> template=\"$:/core/ui/Components/plugin-info\"/>\n</$set>\n</$set>\n\\end\n\n{{$:/core/ui/ControlPanel/Plugins/AddPlugins}}\n\n<<lingo Installed/Hint>>\n\n<<tabs \"[[$:/core/ui/ControlPanel/Plugins/Installed/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Installed/Themes]] [[$:/core/ui/ControlPanel/Plugins/Installed/Languages]]\" \"$:/core/ui/ControlPanel/Plugins/Installed/Plugins\">>\n"
},
"$:/core/ui/ControlPanel/Saving/DownloadSaver": {
"title": "$:/core/ui/ControlPanel/Saving/DownloadSaver",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/DownloadSaver/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/DownloadSaver/\n\n<<lingo Hint>>\n\n!! <$link to=\"$:/config/DownloadSaver/AutoSave\"><<lingo AutoSave/Hint>></$link>\n\n<$checkbox tiddler=\"$:/config/DownloadSaver/AutoSave\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <<lingo AutoSave/Description>> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Saving/General": {
"title": "$:/core/ui/ControlPanel/Saving/General",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/General/Caption}}",
"list-before": "",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n{{$:/language/ControlPanel/Saving/General/Hint}}\n\n!! <$link to=\"$:/config/AutoSave\"><<lingo AutoSave/Caption>></$link>\n\n<<lingo AutoSave/Hint>>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"yes\"> <<lingo AutoSave/Enabled/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"no\"> <<lingo AutoSave/Disabled/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Saving/TiddlySpot": {
"title": "$:/core/ui/ControlPanel/Saving/TiddlySpot",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/TiddlySpot/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/TiddlySpot/\n\n\\define backupURL()\nhttp://$(userName)$.tiddlyspot.com/backup/\n\\end\n\\define backupLink()\n<$reveal type=\"nomatch\" state=\"$:/UploadName\" text=\"\">\n<$set name=\"userName\" value={{$:/UploadName}}>\n<$reveal type=\"match\" state=\"$:/UploadURL\" text=\"\">\n<<backupURL>>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/UploadURL\" text=\"\">\n<$macrocall $name=resolvePath source={{$:/UploadBackupDir}} root={{$:/UploadURL}}>>\n</$reveal>\n</$set>\n</$reveal>\n\\end\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/UploadName\" default=\"\" tag=\"input\"/> |\n|<<lingo Password>> |<$password name=\"upload\"/> |\n|<<lingo Backups>> |<<backupLink>> |\n\n''<<lingo Advanced/Heading>>''\n\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/UploadURL\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/UploadFilename\" default=\"index.html\" tag=\"input\"/> |\n|<<lingo UploadDir>> |<$edit-text tiddler=\"$:/UploadDir\" default=\".\" tag=\"input\"/> |\n|<<lingo BackupDir>> |<$edit-text tiddler=\"$:/UploadBackupDir\" default=\".\" tag=\"input\"/> |\n\n<<lingo TiddlySpot/Hint>>"
},
"$:/core/ui/ControlPanel/Saving": {
"title": "$:/core/ui/ControlPanel/Saving",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Saving/Caption}}",
"text": "{{$:/language/ControlPanel/Saving/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Saving]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Saving/General\">>\n</div>\n"
},
"$:/core/buttonstyles/Borderless": {
"title": "$:/core/buttonstyles/Borderless",
"tags": "$:/tags/ToolbarButtonStyle",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless}}",
"text": "tc-btn-invisible"
},
"$:/core/buttonstyles/Boxed": {
"title": "$:/core/buttonstyles/Boxed",
"tags": "$:/tags/ToolbarButtonStyle",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed}}",
"text": "tc-btn-boxed"
},
"$:/core/buttonstyles/Rounded": {
"title": "$:/core/buttonstyles/Rounded",
"tags": "$:/tags/ToolbarButtonStyle",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded}}",
"text": "tc-btn-rounded"
},
"$:/core/ui/ControlPanel/Settings/CamelCase": {
"title": "$:/core/ui/ControlPanel/Settings/CamelCase",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/CamelCase/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/CamelCase/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/WikiParserRules/Inline/wikilink\" field=\"text\" checked=\"enable\" unchecked=\"disable\" default=\"enable\"> <$link to=\"$:/config/WikiParserRules/Inline/wikilink\"><<lingo Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings/DefaultSidebarTab": {
"title": "$:/core/ui/ControlPanel/Settings/DefaultSidebarTab",
"caption": "{{$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption}}",
"tags": "$:/tags/ControlPanel/Settings",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/DefaultSidebarTab/\n\n<$link to=\"$:/config/DefaultSidebarTab\"><<lingo Hint>></$link>\n\n<$select tiddler=\"$:/config/DefaultSidebarTab\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\">\n<option value=<<currentTiddler>>><$transclude field=\"caption\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/EditorToolbar": {
"title": "$:/core/ui/ControlPanel/Settings/EditorToolbar",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/EditorToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/EditorToolbar/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/TextEditor/EnableToolbar\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/TextEditor/EnableToolbar\"><<lingo Description>></$link> </$checkbox>\n\n"
},
"$:/core/ui/ControlPanel/Settings/InfoPanelMode": {
"title": "$:/core/ui/ControlPanel/Settings/InfoPanelMode",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/InfoPanelMode/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/InfoPanelMode/\n<$link to=\"$:/config/TiddlerInfo/Mode\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/TiddlerInfo/Mode\" value=\"popup\"> <<lingo Popup/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/TiddlerInfo/Mode\" value=\"sticky\"> <<lingo Sticky/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/LinkToBehaviour": {
"title": "$:/core/ui/ControlPanel/Settings/LinkToBehaviour",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/LinkToBehaviour/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/LinkToBehaviour/\n\n<$link to=\"$:/config/Navigation/openLinkFromInsideRiver\"><<lingo \"InsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromInsideRiver\">\n <option value=\"above\"><<lingo \"OpenAbove\">></option>\n <option value=\"below\"><<lingo \"OpenBelow\">></option>\n <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n\n<$link to=\"$:/config/Navigation/openLinkFromOutsideRiver\"><<lingo \"OutsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromOutsideRiver\">\n <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/MissingLinks": {
"title": "$:/core/ui/ControlPanel/Settings/MissingLinks",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/MissingLinks/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/MissingLinks/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/MissingLinks\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/MissingLinks\"><<lingo Description>></$link> </$checkbox>\n\n"
},
"$:/core/ui/ControlPanel/Settings/NavigationAddressBar": {
"title": "$:/core/ui/ControlPanel/Settings/NavigationAddressBar",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/NavigationAddressBar/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationAddressBar/\n\n<$link to=\"$:/config/Navigation/UpdateAddressBar\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permaview\"> <<lingo Permaview/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permalink\"> <<lingo Permalink/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/NavigationHistory": {
"title": "$:/core/ui/ControlPanel/Settings/NavigationHistory",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/NavigationHistory/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationHistory/\n<$link to=\"$:/config/Navigation/UpdateHistory\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation": {
"title": "$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/PerformanceInstrumentation/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Performance/Instrumentation\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Performance/Instrumentation\"><<lingo Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings/TitleLinks": {
"title": "$:/core/ui/ControlPanel/Settings/TitleLinks",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/TitleLinks/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/TitleLinks/\n<$link to=\"$:/config/Tiddlers/TitleLinks\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle": {
"title": "$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtonStyle/\n<$link to=\"$:/config/Toolbar/ButtonClass\"><<lingo \"Hint\">></$link>\n\n<$select tiddler=\"$:/config/Toolbar/ButtonClass\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ToolbarButtonStyle]]\">\n<option value={{!!text}}>{{!!caption}}</option>\n</$list>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/ToolbarButtons": {
"title": "$:/core/ui/ControlPanel/Settings/ToolbarButtons",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtons/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtons/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Icons\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Toolbar/Icons\"><<lingo Icons/Description>></$link> </$checkbox>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Text\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Toolbar/Text\"><<lingo Text/Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings": {
"title": "$:/core/ui/ControlPanel/Settings",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Settings/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n<<lingo Hint>>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings]]\">\n\n<div style=\"border-top:1px solid #eee;\">\n\n!! <$link><$transclude field=\"caption\"/></$link>\n\n<$transclude/>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/ControlPanel/StoryView": {
"title": "$:/core/ui/ControlPanel/StoryView",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/StoryView/Caption}}",
"text": "{{$:/snippets/viewswitcher}}\n"
},
"$:/core/ui/ControlPanel/Theme": {
"title": "$:/core/ui/ControlPanel/Theme",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Theme/Caption}}",
"text": "{{$:/snippets/themeswitcher}}\n"
},
"$:/core/ui/ControlPanel/TiddlerFields": {
"title": "$:/core/ui/ControlPanel/TiddlerFields",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/TiddlerFields/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n\n<<lingo TiddlerFields/Hint>>\n\n{{$:/snippets/allfields}}"
},
"$:/core/ui/ControlPanel/Toolbars/EditToolbar": {
"title": "$:/core/ui/ControlPanel/Toolbars/EditToolbar",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/EditToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/EditToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/EditToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/EditToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>"
},
"$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate": {
"title": "$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate",
"text": "\\define config-title()\n$(config-base)$$(currentTiddler)$\n\\end\n\n<$draggable tiddler=<<currentTiddler>>>\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <span class=\"tc-icon-wrapper\"><$transclude tiddler={{!!icon}}/></span> <$transclude field=\"caption\"/> -- <i class=\"tc-muted\"><$transclude field=\"description\"/></i>\n</$draggable>\n"
},
"$:/core/ui/ControlPanel/Toolbars/EditorToolbar": {
"title": "$:/core/ui/ControlPanel/Toolbars/EditorToolbar",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/EditorToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/EditorToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/EditorToolbar/Hint}}\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/EditorToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate\"/>\n"
},
"$:/core/ui/ControlPanel/Toolbars/ItemTemplate": {
"title": "$:/core/ui/ControlPanel/Toolbars/ItemTemplate",
"text": "\\define config-title()\n$(config-base)$$(currentTiddler)$\n\\end\n\n<$draggable tiddler=<<currentTiddler>>>\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <span class=\"tc-icon-wrapper\"> <$transclude field=\"caption\"/> <i class=\"tc-muted\">-- <$transclude field=\"description\"/></i></span>\n</$draggable>\n"
},
"$:/core/ui/ControlPanel/Toolbars/PageControls": {
"title": "$:/core/ui/ControlPanel/Toolbars/PageControls",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/PageControls/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/PageControlButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/PageControls/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/PageControls\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/ControlPanel/Toolbars/ViewToolbar": {
"title": "$:/core/ui/ControlPanel/Toolbars/ViewToolbar",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/ViewToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/ViewToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/ViewToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/ViewToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/ControlPanel/Toolbars": {
"title": "$:/core/ui/ControlPanel/Toolbars",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Toolbars/Caption}}",
"text": "{{$:/language/ControlPanel/Toolbars/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Toolbars]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Toolbars/ViewToolbar\" \"$:/state/tabs/controlpanel/toolbars\" \"tc-vertical\">>\n</div>\n"
},
"$:/ControlPanel": {
"title": "$:/ControlPanel",
"icon": "$:/core/images/options-button",
"color": "#bbb",
"text": "<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Info\">>\n</div>\n"
},
"$:/core/ui/DefaultSearchResultList": {
"title": "$:/core/ui/DefaultSearchResultList",
"tags": "$:/tags/SearchResults",
"caption": "{{$:/language/Search/DefaultResults/Caption}}",
"text": "\\define searchResultList()\n//<small>{{$:/language/Search/Matches/Title}}</small>//\n\n<$list filter=\"[!is[system]search:title{$(searchTiddler)$}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n//<small>{{$:/language/Search/Matches/All}}</small>//\n\n<$list filter=\"[!is[system]search{$(searchTiddler)$}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n\\end\n<<searchResultList>>\n"
},
"$:/core/ui/EditTemplate/body/preview/output": {
"title": "$:/core/ui/EditTemplate/body/preview/output",
"tags": "$:/tags/EditPreview",
"caption": "{{$:/language/EditTemplate/Body/Preview/Type/Output}}",
"text": "<$set name=\"tv-tiddler-preview\" value=\"yes\">\n\n<$transclude />\n\n</$set>\n"
},
"$:/core/ui/EditTemplate/body/editor": {
"title": "$:/core/ui/EditTemplate/body/editor",
"text": "<$edit\n\n field=\"text\"\n class=\"tc-edit-texteditor\"\n placeholder={{$:/language/EditTemplate/Body/Placeholder}}\n\n><$set\n\n name=\"targetTiddler\"\n value=<<currentTiddler>>\n\n><$list\n\n filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]]\"\n\n><$reveal\n\n type=\"nomatch\"\n state=<<config-visibility-title>>\n text=\"hide\"\n class=\"tc-text-editor-toolbar-item-wrapper\"\n\n><$transclude\n\n tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\"\n mode=\"inline\"\n\n/></$reveal></$list></$set></$edit>\n"
},
"$:/core/ui/EditTemplate/body/toolbar/button": {
"title": "$:/core/ui/EditTemplate/body/toolbar/button",
"text": "\\define toolbar-button-icon()\n<$list\n\n filter=\"[all[current]!has[custom-icon]]\"\n variable=\"no-custom-icon\"\n\n><$transclude\n\n tiddler={{!!icon}}\n\n/></$list>\n\\end\n\n\\define toolbar-button-tooltip()\n{{!!description}}<$macrocall $name=\"displayshortcuts\" $output=\"text/plain\" shortcuts={{!!shortcuts}} prefix=\"` - [\" separator=\"] [\" suffix=\"]`\"/>\n\\end\n\n\\define toolbar-button()\n<$list\n\n filter={{!!condition}}\n variable=\"list-condition\"\n\n><$wikify\n\n name=\"tooltip-text\"\n text=<<toolbar-button-tooltip>>\n mode=\"inline\"\n output=\"text\"\n\n><$list\n\n filter=\"[all[current]!has[dropdown]]\"\n variable=\"no-dropdown\"\n\n><$button\n\n class=\"tc-btn-invisible $(buttonClasses)$\"\n tooltip=<<tooltip-text>>\n\n><span\n\n data-tw-keyboard-shortcut={{!!shortcuts}}\n\n/><<toolbar-button-icon>><$transclude\n\n tiddler=<<currentTiddler>>\n field=\"text\"\n\n/></$button></$list><$list\n\n filter=\"[all[current]has[dropdown]]\"\n variable=\"dropdown\"\n\n><$set\n\n name=\"dropdown-state\"\n value=<<qualify \"$:/state/EditorToolbarDropdown\">>\n\n><$button\n\n popup=<<dropdown-state>>\n class=\"tc-popup-keep tc-btn-invisible $(buttonClasses)$\"\n selectedClass=\"tc-selected\"\n tooltip=<<tooltip-text>>\n\n><span\n\n data-tw-keyboard-shortcut={{!!shortcuts}}\n\n/><<toolbar-button-icon>><$transclude\n\n tiddler=<<currentTiddler>>\n field=\"text\"\n\n/></$button><$reveal\n\n state=<<dropdown-state>>\n type=\"popup\"\n position=\"below\"\n animate=\"yes\"\n tag=\"span\"\n\n><div\n\n class=\"tc-drop-down tc-popup-keep\"\n\n><$transclude\n\n tiddler={{!!dropdown}}\n mode=\"block\"\n\n/></div></$reveal></$set></$list></$wikify></$list>\n\\end\n\n\\define toolbar-button-outer()\n<$set\n\n name=\"buttonClasses\"\n value={{!!button-classes}}\n\n><<toolbar-button>></$set>\n\\end\n\n<<toolbar-button-outer>>"
},
"$:/core/ui/EditTemplate/body": {
"title": "$:/core/ui/EditTemplate/body",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/Body/\n\\define config-visibility-title()\n$:/config/EditorToolbarButtons/Visibility/$(currentTiddler)$\n\\end\n<$list filter=\"[is[current]has[_canonical_uri]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo External/Hint>>\n\n<a href={{!!_canonical_uri}}><$text text={{!!_canonical_uri}}/></a>\n\n<$edit-text field=\"_canonical_uri\" class=\"tc-edit-fields\"></$edit-text>\n\n</div>\n\n</$list>\n\n<$list filter=\"[is[current]!has[_canonical_uri]]\">\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\">\n\n<div class=\"tc-tiddler-preview\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n<div class=\"tc-tiddler-preview-preview\">\n\n<$transclude tiddler={{$:/state/editpreviewtype}} mode=\"inline\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/preview/output\" mode=\"inline\"/>\n\n</$transclude>\n\n</div>\n\n</div>\n\n</$reveal>\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n</$reveal>\n\n</$list>\n"
},
"$:/core/ui/EditTemplate/controls": {
"title": "$:/core/ui/EditTemplate/controls",
"tags": "$:/tags/EditTemplate",
"text": "\\define config-title()\n$:/config/EditToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title tc-tiddler-edit-title\">\n<$view field=\"title\"/>\n<span class=\"tc-tiddler-controls tc-titlebar\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$transclude tiddler=<<listItem>>/></$reveal></$list></span>\n<div style=\"clear: both;\"></div>\n</div>\n"
},
"$:/core/ui/EditTemplate/fields": {
"title": "$:/core/ui/EditTemplate/fields",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n\\define config-title()\n$:/config/EditTemplateFields/Visibility/$(currentField)$\n\\end\n\n\\define config-filter()\n[[hide]] -[title{$(config-title)$}]\n\\end\n\n\\define new-field-inner()\n<$reveal type=\"nomatch\" text=\"\" default=<<name>>>\n<$button>\n<$action-sendmessage $message=\"tm-add-field\" $name=<<name>> $value=<<value>>/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldname\"/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldvalue\"/>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" text=\"\" default=<<name>>>\n<$button>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n\\end\n\n\\define new-field()\n<$set name=\"name\" value={{$:/temp/newfieldname}}>\n<$set name=\"value\" value={{$:/temp/newfieldvalue}}>\n<<new-field-inner>>\n</$set>\n</$set>\n\\end\n\n<div class=\"tc-edit-fields\">\n<table class=\"tc-edit-fields\">\n<tbody>\n<$list filter=\"[all[current]fields[]] +[sort[title]]\" variable=\"currentField\">\n<$list filter=<<config-filter>> variable=\"temp\">\n<tr class=\"tc-edit-field\">\n<td class=\"tc-edit-field-name\">\n<$text text=<<currentField>>/>:</td>\n<td class=\"tc-edit-field-value\">\n<$edit-text tiddler=<<currentTiddler>> field=<<currentField>> placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}}/>\n</td>\n<td class=\"tc-edit-field-remove\">\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/EditTemplate/Field/Remove/Hint}} aria-label={{$:/language/EditTemplate/Field/Remove/Caption}}>\n<$action-deletefield $field=<<currentField>>/>\n{{$:/core/images/delete-button}}\n</$button>\n</td>\n</tr>\n</$list>\n</$list>\n</tbody>\n</table>\n</div>\n\n<$fieldmangler>\n<div class=\"tc-edit-field-add\">\n<em class=\"tc-edit\">\n<<lingo Fields/Add/Prompt>>\n</em>\n<span class=\"tc-edit-field-add-name\">\n<$edit-text tiddler=\"$:/temp/newfieldname\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Name/Placeholder}} focusPopup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-edit-texteditor tc-popup-handle\"/>\n</span>\n<$button popup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Field/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Field/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button>\n<$reveal state=<<qualify \"$:/state/popup/field-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$linkcatcher to=\"$:/temp/newfieldname\">\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/User>>\n</div>\n<$list filter=\"[!is[shadow]!is[system]fields[]search:title{$:/temp/newfieldname}sort[]] -created -creator -draft.of -draft.title -modified -modifier -tags -text -title -type\" variable=\"currentField\">\n<$link to=<<currentField>>>\n<<currentField>>\n</$link>\n</$list>\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/System>>\n</div>\n<$list filter=\"[fields[]search:title{$:/temp/newfieldname}sort[]] -[!is[shadow]!is[system]fields[]]\" variable=\"currentField\">\n<$link to=<<currentField>>>\n<<currentField>>\n</$link>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n<span class=\"tc-edit-field-add-value\">\n<$edit-text tiddler=\"$:/temp/newfieldvalue\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} class=\"tc-edit-texteditor\"/>\n</span>\n<span class=\"tc-edit-field-add-button\">\n<$macrocall $name=\"new-field\"/>\n</span>\n</div>\n</$fieldmangler>\n"
},
"$:/core/ui/EditTemplate/shadow": {
"title": "$:/core/ui/EditTemplate/shadow",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/Shadow/\n\\define pluginLinkBody()\n<$link to=\"\"\"$(pluginTitle)$\"\"\">\n<$text text=\"\"\"$(pluginTitle)$\"\"\"/>\n</$link>\n\\end\n<$list filter=\"[all[current]get[draft.of]is[shadow]!is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>\n\n<$list filter=\"[all[current]get[draft.of]is[shadow]is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo OverriddenWarning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>"
},
"$:/core/ui/EditTemplate/tags": {
"title": "$:/core/ui/EditTemplate/tags",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n\n\\define tag-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-body-inner(colour,fallbackTarget,colourA,colourB)\n<$vars foregroundColor=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">> backgroundColor=\"\"\"$colour$\"\"\">\n<span style=<<tag-styles>> class=\"tc-tag-label\">\n<$view field=\"title\" format=\"text\" />\n<$button message=\"tm-remove-tag\" param={{!!title}} class=\"tc-btn-invisible tc-remove-tag-button\">×</$button>\n</span>\n</$vars>\n\\end\n\n\\define tag-body(colour,palette)\n<$macrocall $name=\"tag-body-inner\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}}/>\n\\end\n\n\\define tag-picker-actions()\n<$action-listops\n\t$tiddler=<<currentTiddler>>\n\t$field=\"tags\"\n\t$subfilter=\"[<tag>] [all[current]tags[]]\"\n/>\n\\end\n\n<div class=\"tc-edit-tags\">\n<$fieldmangler>\n<$list filter=\"[all[current]tags[]sort[title]]\" storyview=\"pop\">\n<$macrocall $name=\"tag-body\" colour={{!!color}} palette={{$:/palette}}/>\n</$list>\n</$fieldmangler>\n<$macrocall $name=\"tag-picker\" actions=<<tag-picker-actions>>/>\n</div>\n"
},
"$:/core/ui/EditTemplate/title": {
"title": "$:/core/ui/EditTemplate/title",
"tags": "$:/tags/EditTemplate",
"text": "<$edit-text field=\"draft.title\" class=\"tc-titlebar tc-edit-texteditor\" focus=\"true\"/>\n\n<$vars pattern=\"\"\"[\\|\\[\\]{}]\"\"\" bad-chars=\"\"\"`| [ ] { }`\"\"\">\n\n<$list filter=\"[is[current]regexp:draft.title<pattern>]\" variable=\"listItem\">\n\n<div class=\"tc-message-box\">\n\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/BadCharacterWarning}}\n\n</div>\n\n</$list>\n\n</$vars>\n\n<$reveal state=\"!!draft.title\" type=\"nomatch\" text={{!!draft.of}} tag=\"div\">\n\n<$list filter=\"[{!!draft.title}!is[missing]]\" variable=\"listItem\">\n\n<div class=\"tc-message-box\">\n\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/Exists/Prompt}}\n\n</div>\n\n</$list>\n\n<$list filter=\"[{!!draft.of}!is[missing]]\" variable=\"listItem\">\n\n<$vars fromTitle={{!!draft.of}} toTitle={{!!draft.title}}>\n\n<$checkbox tiddler=\"$:/config/RelinkOnRename\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> {{$:/language/EditTemplate/Title/Relink/Prompt}}</$checkbox>\n\n</$vars>\n\n</$list>\n\n</$reveal>\n\n\n"
},
"$:/core/ui/EditTemplate/type": {
"title": "$:/core/ui/EditTemplate/type",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n<div class=\"tc-type-selector\"><$fieldmangler>\n<em class=\"tc-edit\"><<lingo Type/Prompt>></em> <$edit-text field=\"type\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Type/Placeholder}} focusPopup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-edit-typeeditor tc-popup-handle\"/> <$button popup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Type/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Type/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button> <$button message=\"tm-remove-field\" param=\"type\" class=\"tc-btn-invisible tc-btn-icon\" tooltip={{$:/language/EditTemplate/Type/Delete/Hint}} aria-label={{$:/language/EditTemplate/Type/Delete/Caption}}>{{$:/core/images/delete-button}}</$button>\n</$fieldmangler></div>\n\n<div class=\"tc-block-dropdown-wrapper\">\n<$reveal state=<<qualify \"$:/state/popup/type-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$linkcatcher to=\"!!type\">\n<$list filter='[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]each[group]sort[group-sort]]'>\n<div class=\"tc-dropdown-item\">\n<$text text={{!!group}}/>\n</div>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]group{!!group}] +[sort[description]]\"><$link to={{!!name}}><$view field=\"description\"/> (<$view field=\"name\"/>)</$link>\n</$list>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>"
},
"$:/core/ui/EditTemplate": {
"title": "$:/core/ui/EditTemplate",
"text": "\\define actions()\n<$action-sendmessage $message=\"tm-add-tag\" $param={{$:/temp/NewTagName}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/NewTagName\"/>\n<$action-sendmessage $message=\"tm-add-field\" $name={{$:/temp/newfieldname}} $value={{$:/temp/newfieldvalue}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldname\"/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldvalue\"/>\n<$action-sendmessage $message=\"tm-save-tiddler\"/>\n\\end\n\\define frame-classes()\ntc-tiddler-frame tc-tiddler-edit-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$\n\\end\n<div class=<<frame-classes>>>\n<$fieldmangler>\n<$set name=\"storyTiddler\" value=<<currentTiddler>>>\n<$keyboard key=\"((cancel-edit-tiddler))\" message=\"tm-cancel-tiddler\">\n<$keyboard key=\"((save-tiddler))\" actions=<<actions>>>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditTemplate]!has[draft.of]]\" variable=\"listItem\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<<listItem>>/>\n</$set>\n</$list>\n</$keyboard>\n</$keyboard>\n</$set>\n</$fieldmangler>\n</div>\n"
},
"$:/core/ui/Buttons/cancel": {
"title": "$:/core/ui/Buttons/cancel",
"tags": "$:/tags/EditToolbar",
"caption": "{{$:/core/images/cancel-button}} {{$:/language/Buttons/Cancel/Caption}}",
"description": "{{$:/language/Buttons/Cancel/Hint}}",
"text": "<$button message=\"tm-cancel-tiddler\" tooltip={{$:/language/Buttons/Cancel/Hint}} aria-label={{$:/language/Buttons/Cancel/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/cancel-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Cancel/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/delete": {
"title": "$:/core/ui/Buttons/delete",
"tags": "$:/tags/EditToolbar $:/tags/ViewToolbar",
"caption": "{{$:/core/images/delete-button}} {{$:/language/Buttons/Delete/Caption}}",
"description": "{{$:/language/Buttons/Delete/Hint}}",
"text": "<$button message=\"tm-delete-tiddler\" tooltip={{$:/language/Buttons/Delete/Hint}} aria-label={{$:/language/Buttons/Delete/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/delete-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Delete/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/save": {
"title": "$:/core/ui/Buttons/save",
"tags": "$:/tags/EditToolbar",
"caption": "{{$:/core/images/done-button}} {{$:/language/Buttons/Save/Caption}}",
"description": "{{$:/language/Buttons/Save/Hint}}",
"text": "<$fieldmangler><$button tooltip={{$:/language/Buttons/Save/Hint}} aria-label={{$:/language/Buttons/Save/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-add-tag\" $param={{$:/temp/NewTagName}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/NewTagName\"/>\n<$action-sendmessage $message=\"tm-add-field\" $name={{$:/temp/newfieldname}} $value={{$:/temp/newfieldvalue}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldname\"/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldvalue\"/>\n<$action-sendmessage $message=\"tm-save-tiddler\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/done-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Save/Caption}}/></span>\n</$list>\n</$button></$fieldmangler>\n"
},
"$:/core/ui/EditorToolbar/bold": {
"title": "$:/core/ui/EditorToolbar/bold",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/bold",
"caption": "{{$:/language/Buttons/Bold/Caption}}",
"description": "{{$:/language/Buttons/Bold/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((bold))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"''\"\n\tsuffix=\"''\"\n/>\n"
},
"$:/core/ui/EditorToolbar/clear-dropdown": {
"title": "$:/core/ui/EditorToolbar/clear-dropdown",
"text": "''{{$:/language/Buttons/Clear/Hint}}''\n\n<div class=\"tc-colour-chooser\">\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"clear\"\n\tcolour=<<colour-picker-value>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n\n</div>\n"
},
"$:/core/ui/EditorToolbar/clear": {
"title": "$:/core/ui/EditorToolbar/clear",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/erase",
"caption": "{{$:/language/Buttons/Clear/Caption}}",
"description": "{{$:/language/Buttons/Clear/Hint}}",
"condition": "[<targetTiddler>is[image]]",
"dropdown": "$:/core/ui/EditorToolbar/clear-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/editor-height-dropdown": {
"title": "$:/core/ui/EditorToolbar/editor-height-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/EditorHeight/\n''<<lingo Hint>>''\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"auto\"> {{$:/core/images/auto-height}} <<lingo Caption/Auto>></$radio>\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"fixed\"> {{$:/core/images/fixed-height}} <<lingo Caption/Fixed>> <$edit-text tag=\"input\" tiddler=\"$:/config/TextEditor/EditorHeight/Height\" default=\"100px\"/></$radio>\n"
},
"$:/core/ui/EditorToolbar/editor-height": {
"title": "$:/core/ui/EditorToolbar/editor-height",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/fixed-height",
"custom-icon": "yes",
"caption": "{{$:/language/Buttons/EditorHeight/Caption}}",
"description": "{{$:/language/Buttons/EditorHeight/Hint}}",
"condition": "[<targetTiddler>!is[image]]",
"dropdown": "$:/core/ui/EditorToolbar/editor-height-dropdown",
"text": "<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"fixed\">\n{{$:/core/images/fixed-height}}\n</$reveal>\n<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"auto\">\n{{$:/core/images/auto-height}}\n</$reveal>\n"
},
"$:/core/ui/EditorToolbar/excise-dropdown": {
"title": "$:/core/ui/EditorToolbar/excise-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Excise/\n\n\\define body(config-title)\n''<<lingo Hint>>''\n\n<<lingo Caption/NewTitle>> <$edit-text tag=\"input\" tiddler=\"$config-title$/new-title\" default=\"\" focus=\"true\"/>\n\n<$set name=\"new-title\" value={{$config-title$/new-title}}>\n<$list filter=\"\"\"[<new-title>is[tiddler]]\"\"\">\n<div class=\"tc-error\">\n<<lingo Caption/TiddlerExists>>\n</div>\n</$list>\n</$set>\n\n<$checkbox tiddler=\"\"\"$config-title$/tagnew\"\"\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"false\"> <<lingo Caption/Tag>></$checkbox>\n\n<<lingo Caption/Replace>> <$select tiddler=\"\"\"$config-title$/type\"\"\" default=\"transclude\">\n<option value=\"link\"><<lingo Caption/Replace/Link>></option>\n<option value=\"transclude\"><<lingo Caption/Replace/Transclusion>></option>\n<option value=\"macro\"><<lingo Caption/Replace/Macro>></option>\n</$select>\n\n<$reveal state=\"\"\"$config-title$/type\"\"\" type=\"match\" text=\"macro\">\n<<lingo Caption/MacroName>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/macro-title\"\"\" default=\"translink\"/>\n</$reveal>\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"excise\"\n\ttitle={{$config-title$/new-title}}\n\ttype={{$config-title$/type}}\n\tmacro={{$config-title$/macro-title}}\n\ttagnew={{$config-title$/tagnew}}\n/>\n<$action-deletetiddler\n\t$tiddler=\"$config-title$/new-title\"\n/>\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n<<lingo Caption/Excise>>\n</$button>\n\\end\n\n<$macrocall $name=\"body\" config-title=<<qualify \"$:/state/Excise/\">>/>\n"
},
"$:/core/ui/EditorToolbar/excise": {
"title": "$:/core/ui/EditorToolbar/excise",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/excise",
"caption": "{{$:/language/Buttons/Excise/Caption}}",
"description": "{{$:/language/Buttons/Excise/Hint}}",
"condition": "[<targetTiddler>!is[image]]",
"shortcuts": "((excise))",
"dropdown": "$:/core/ui/EditorToolbar/excise-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/heading-1": {
"title": "$:/core/ui/EditorToolbar/heading-1",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-1",
"caption": "{{$:/language/Buttons/Heading1/Caption}}",
"description": "{{$:/language/Buttons/Heading1/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((heading-1))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"1\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-2": {
"title": "$:/core/ui/EditorToolbar/heading-2",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-2",
"caption": "{{$:/language/Buttons/Heading2/Caption}}",
"description": "{{$:/language/Buttons/Heading2/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-2))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"2\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-3": {
"title": "$:/core/ui/EditorToolbar/heading-3",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-3",
"caption": "{{$:/language/Buttons/Heading3/Caption}}",
"description": "{{$:/language/Buttons/Heading3/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-3))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"3\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-4": {
"title": "$:/core/ui/EditorToolbar/heading-4",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-4",
"caption": "{{$:/language/Buttons/Heading4/Caption}}",
"description": "{{$:/language/Buttons/Heading4/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-4))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"4\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-5": {
"title": "$:/core/ui/EditorToolbar/heading-5",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-5",
"caption": "{{$:/language/Buttons/Heading5/Caption}}",
"description": "{{$:/language/Buttons/Heading5/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-5))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"5\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-6": {
"title": "$:/core/ui/EditorToolbar/heading-6",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-6",
"caption": "{{$:/language/Buttons/Heading6/Caption}}",
"description": "{{$:/language/Buttons/Heading6/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-6))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"6\"\n/>\n"
},
"$:/core/ui/EditorToolbar/italic": {
"title": "$:/core/ui/EditorToolbar/italic",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/italic",
"caption": "{{$:/language/Buttons/Italic/Caption}}",
"description": "{{$:/language/Buttons/Italic/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((italic))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"//\"\n\tsuffix=\"//\"\n/>\n"
},
"$:/core/ui/EditorToolbar/line-width-dropdown": {
"title": "$:/core/ui/EditorToolbar/line-width-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/LineWidth/\n\n\\define toolbar-line-width-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(line-width)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/LineWidth\"\n\t$value=\"$(line-width)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<div style=\"display: inline-block; margin: 4px calc(80px - $(line-width)$); background-color: #000; width: calc(100px + $(line-width)$ * 2); height: $(line-width)$; border-radius: 120px; vertical-align: middle;\"/>\n\n<span style=\"margin-left: 8px;\">\n\n<$text text=\"\"\"$(line-width)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/LineWidth\" type=\"match\" text=\"\"\"$(line-width)$\"\"\" tag=\"span\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n</$reveal>\n\n</span>\n\n</$button>\n\\end\n\n''<<lingo Hint>>''\n\n<$list filter={{$:/config/BitmapEditor/LineWidths}} variable=\"line-width\">\n\n<<toolbar-line-width-inner>>\n\n</$list>\n"
},
"$:/core/ui/EditorToolbar/line-width": {
"title": "$:/core/ui/EditorToolbar/line-width",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/line-width",
"caption": "{{$:/language/Buttons/LineWidth/Caption}}",
"description": "{{$:/language/Buttons/LineWidth/Hint}}",
"condition": "[<targetTiddler>is[image]]",
"dropdown": "$:/core/ui/EditorToolbar/line-width-dropdown",
"text": "<$text text={{$:/config/BitmapEditor/LineWidth}}/>"
},
"$:/core/ui/EditorToolbar/link-dropdown": {
"title": "$:/core/ui/EditorToolbar/link-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Link/\n\n\\define link-actions()\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"make-link\"\n\ttext={{$(linkTiddler)$}}\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<searchTiddler>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<linkTiddler>>\n/>\n\\end\n\n\\define external-link()\n<$button class=\"tc-btn-invisible\" style=\"width: auto; display: inline-block; background-colour: inherit;\">\n<$action-sendmessage $message=\"tm-edit-text-operation\" $param=\"make-link\" text={{$(searchTiddler)$}}\n/>\n{{$:/core/images/chevron-right}}\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<searchTiddler>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<linkTiddler>>\n/>\n</$button>\n\\end\n\n\n\\define body(config-title)\n''<<lingo Hint>>''\n\n<$vars searchTiddler=\"\"\"$config-title$/search\"\"\" linkTiddler=\"\"\"$config-title$/link\"\"\" linktext=\"\" >\n\n<$edit-text tiddler=<<searchTiddler>> type=\"search\" tag=\"input\" focus=\"true\" placeholder={{$:/language/Search/Search}} default=\"\"/>\n<$reveal tag=\"span\" state=<<searchTiddler>> type=\"nomatch\" text=\"\">\n<<external-link>>\n<$button class=\"tc-btn-invisible\" style=\"width: auto; display: inline-block; background-colour: inherit;\">\n<$action-setfield $tiddler=<<searchTiddler>> text=\"\" />\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n\n<$reveal tag=\"div\" state=<<searchTiddler>> type=\"nomatch\" text=\"\">\n\n<$linkcatcher actions=<<link-actions>> to=<<linkTiddler>>>\n\n{{$:/core/ui/SearchResults}}\n\n</$linkcatcher>\n\n</$reveal>\n\n</$vars>\n\n\\end\n\n<$macrocall $name=\"body\" config-title=<<qualify \"$:/state/Link/\">>/>"
},
"$:/core/ui/EditorToolbar/link": {
"title": "$:/core/ui/EditorToolbar/link",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/link",
"caption": "{{$:/language/Buttons/Link/Caption}}",
"description": "{{$:/language/Buttons/Link/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((link))",
"dropdown": "$:/core/ui/EditorToolbar/link-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/list-bullet": {
"title": "$:/core/ui/EditorToolbar/list-bullet",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/list-bullet",
"caption": "{{$:/language/Buttons/ListBullet/Caption}}",
"description": "{{$:/language/Buttons/ListBullet/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((list-bullet))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"*\"\n\tcount=\"1\"\n/>\n"
},
"$:/core/ui/EditorToolbar/list-number": {
"title": "$:/core/ui/EditorToolbar/list-number",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/list-number",
"caption": "{{$:/language/Buttons/ListNumber/Caption}}",
"description": "{{$:/language/Buttons/ListNumber/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((list-number))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"1\"\n/>\n"
},
"$:/core/ui/EditorToolbar/mono-block": {
"title": "$:/core/ui/EditorToolbar/mono-block",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/mono-block",
"caption": "{{$:/language/Buttons/MonoBlock/Caption}}",
"description": "{{$:/language/Buttons/MonoBlock/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((mono-block))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n```\"\n\tsuffix=\"```\"\n/>\n"
},
"$:/core/ui/EditorToolbar/mono-line": {
"title": "$:/core/ui/EditorToolbar/mono-line",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/mono-line",
"caption": "{{$:/language/Buttons/MonoLine/Caption}}",
"description": "{{$:/language/Buttons/MonoLine/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((mono-line))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"`\"\n\tsuffix=\"`\"\n/>\n"
},
"$:/core/ui/EditorToolbar/more-dropdown": {
"title": "$:/core/ui/EditorToolbar/more-dropdown",
"text": "\\define config-title()\n$:/config/EditorToolbarButtons/Visibility/$(toolbarItem)$\n\\end\n\n\\define conditional-button()\n<$list filter={{$(toolbarItem)$!!condition}} variable=\"condition\">\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\" mode=\"inline\"/> <$transclude tiddler=<<toolbarItem>> field=\"description\"/>\n</$list>\n\\end\n\n<div class=\"tc-text-editor-toolbar-more\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]] -[[$:/core/ui/EditorToolbar/more]]\">\n<$reveal type=\"match\" state=<<config-visibility-title>> text=\"hide\" tag=\"div\">\n<<conditional-button>>\n</$reveal>\n</$list>\n</div>\n"
},
"$:/core/ui/EditorToolbar/more": {
"title": "$:/core/ui/EditorToolbar/more",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/down-arrow",
"caption": "{{$:/language/Buttons/More/Caption}}",
"description": "{{$:/language/Buttons/More/Hint}}",
"condition": "[<targetTiddler>]",
"dropdown": "$:/core/ui/EditorToolbar/more-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/opacity-dropdown": {
"title": "$:/core/ui/EditorToolbar/opacity-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Opacity/\n\n\\define toolbar-opacity-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(opacity)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Opacity\"\n\t$value=\"$(opacity)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<div style=\"display: inline-block; vertical-align: middle; background-color: $(current-paint-colour)$; opacity: $(opacity)$; width: 1em; height: 1em; border-radius: 50%;\"/>\n\n<span style=\"margin-left: 8px;\">\n\n<$text text=\"\"\"$(opacity)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/Opacity\" type=\"match\" text=\"\"\"$(opacity)$\"\"\" tag=\"span\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n</$reveal>\n\n</span>\n\n</$button>\n\\end\n\n\\define toolbar-opacity()\n''<<lingo Hint>>''\n\n<$list filter={{$:/config/BitmapEditor/Opacities}} variable=\"opacity\">\n\n<<toolbar-opacity-inner>>\n\n</$list>\n\\end\n\n<$set name=\"current-paint-colour\" value={{$:/config/BitmapEditor/Colour}}>\n\n<$set name=\"current-opacity\" value={{$:/config/BitmapEditor/Opacity}}>\n\n<<toolbar-opacity>>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/EditorToolbar/opacity": {
"title": "$:/core/ui/EditorToolbar/opacity",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/opacity",
"caption": "{{$:/language/Buttons/Opacity/Caption}}",
"description": "{{$:/language/Buttons/Opacity/Hint}}",
"condition": "[<targetTiddler>is[image]]",
"dropdown": "$:/core/ui/EditorToolbar/opacity-dropdown",
"text": "<$text text={{$:/config/BitmapEditor/Opacity}}/>\n"
},
"$:/core/ui/EditorToolbar/paint-dropdown": {
"title": "$:/core/ui/EditorToolbar/paint-dropdown",
"text": "''{{$:/language/Buttons/Paint/Hint}}''\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Colour\"\n\t$value=<<colour-picker-value>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n"
},
"$:/core/ui/EditorToolbar/paint": {
"title": "$:/core/ui/EditorToolbar/paint",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/paint",
"caption": "{{$:/language/Buttons/Paint/Caption}}",
"description": "{{$:/language/Buttons/Paint/Hint}}",
"condition": "[<targetTiddler>is[image]]",
"dropdown": "$:/core/ui/EditorToolbar/paint-dropdown",
"text": "\\define toolbar-paint()\n<div style=\"display: inline-block; vertical-align: middle; background-color: $(colour-picker-value)$; width: 1em; height: 1em; border-radius: 50%;\"/>\n\\end\n<$set name=\"colour-picker-value\" value={{$:/config/BitmapEditor/Colour}}>\n<<toolbar-paint>>\n</$set>\n"
},
"$:/core/ui/EditorToolbar/picture-dropdown": {
"title": "$:/core/ui/EditorToolbar/picture-dropdown",
"text": "\\define replacement-text()\n[img[$(imageTitle)$]]\n\\end\n\n''{{$:/language/Buttons/Picture/Hint}}''\n\n<$macrocall $name=\"image-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext=<<replacement-text>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n"
},
"$:/core/ui/EditorToolbar/picture": {
"title": "$:/core/ui/EditorToolbar/picture",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/picture",
"caption": "{{$:/language/Buttons/Picture/Caption}}",
"description": "{{$:/language/Buttons/Picture/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((picture))",
"dropdown": "$:/core/ui/EditorToolbar/picture-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/preview-type-dropdown": {
"title": "$:/core/ui/EditorToolbar/preview-type-dropdown",
"text": "\\define preview-type-button()\n<$button tag=\"a\">\n\n<$action-setfield $tiddler=\"$:/state/editpreviewtype\" $value=\"$(previewType)$\"/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$transclude tiddler=<<previewType>> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<<previewType>> field=\"title\" mode=\"inline\"/>\n\n</$transclude> \n\n<$reveal tag=\"span\" state=\"$:/state/editpreviewtype\" type=\"match\" text=<<previewType>> default=\"$:/core/ui/EditTemplate/body/preview/output\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n</$reveal>\n\n</$button>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]]\" variable=\"previewType\">\n\n<<preview-type-button>>\n\n</$list>\n"
},
"$:/core/ui/EditorToolbar/preview-type": {
"title": "$:/core/ui/EditorToolbar/preview-type",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/chevron-down",
"caption": "{{$:/language/Buttons/PreviewType/Caption}}",
"description": "{{$:/language/Buttons/PreviewType/Hint}}",
"condition": "[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]butfirst[]limit[1]]",
"button-classes": "tc-text-editor-toolbar-item-adjunct",
"dropdown": "$:/core/ui/EditorToolbar/preview-type-dropdown"
},
"$:/core/ui/EditorToolbar/preview": {
"title": "$:/core/ui/EditorToolbar/preview",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/preview-open",
"custom-icon": "yes",
"caption": "{{$:/language/Buttons/Preview/Caption}}",
"description": "{{$:/language/Buttons/Preview/Hint}}",
"condition": "[<targetTiddler>]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((preview))",
"text": "<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-open}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"no\"/>\n</$reveal>\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-closed}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"yes\"/>\n</$reveal>\n"
},
"$:/core/ui/EditorToolbar/quote": {
"title": "$:/core/ui/EditorToolbar/quote",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/quote",
"caption": "{{$:/language/Buttons/Quote/Caption}}",
"description": "{{$:/language/Buttons/Quote/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((quote))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n<<<\"\n\tsuffix=\"<<<\"\n/>\n"
},
"$:/core/ui/EditorToolbar/size-dropdown": {
"title": "$:/core/ui/EditorToolbar/size-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Size/\n\n\\define toolbar-button-size-preset(config-title)\n<$set name=\"width\" filter=\"$(sizePair)$ +[first[]]\">\n\n<$set name=\"height\" filter=\"$(sizePair)$ +[last[]]\">\n\n<$button tag=\"a\">\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n\t$value=<<width>>\n/>\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n\t$value=<<height>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/presets-popup\"\"\"\n/>\n\n<$text text=<<width>>/> × <$text text=<<height>>/>\n\n</$button>\n\n</$set>\n\n</$set>\n\\end\n\n\\define toolbar-button-size(config-title)\n''{{$:/language/Buttons/Size/Hint}}''\n\n<<lingo Caption/Width>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-width\"\"\" default=<<tv-bitmap-editor-width>> focus=\"true\" size=\"8\"/> <<lingo Caption/Height>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-height\"\"\" default=<<tv-bitmap-editor-height>> size=\"8\"/> <$button popup=\"\"\"$config-title$/presets-popup\"\"\" class=\"tc-btn-invisible tc-popup-keep\" style=\"width: auto; display: inline-block; background-colour: inherit;\" selectedClass=\"tc-selected\">\n{{$:/core/images/down-arrow}}\n</$button>\n\n<$reveal tag=\"span\" state=\"\"\"$config-title$/presets-popup\"\"\" type=\"popup\" position=\"belowleft\" animate=\"yes\">\n\n<div class=\"tc-drop-down tc-popup-keep\">\n\n<$list filter={{$:/config/BitmapEditor/ImageSizes}} variable=\"sizePair\">\n\n<$macrocall $name=\"toolbar-button-size-preset\" config-title=\"$config-title$\"/>\n\n</$list>\n\n</div>\n\n</$reveal>\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"resize\"\n\twidth={{$config-title$/new-width}}\n\theight={{$config-title$/new-height}}\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n<<lingo Caption/Resize>>\n</$button>\n\\end\n\n<$macrocall $name=\"toolbar-button-size\" config-title=<<qualify \"$:/state/Size/\">>/>\n"
},
"$:/core/ui/EditorToolbar/size": {
"title": "$:/core/ui/EditorToolbar/size",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/size",
"caption": "{{$:/language/Buttons/Size/Caption}}",
"description": "{{$:/language/Buttons/Size/Hint}}",
"condition": "[<targetTiddler>is[image]]",
"dropdown": "$:/core/ui/EditorToolbar/size-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/stamp-dropdown": {
"title": "$:/core/ui/EditorToolbar/stamp-dropdown",
"text": "\\define toolbar-button-stamp-inner()\n<$button tag=\"a\">\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext={{$(snippetTitle)$}}\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$view tiddler=<<snippetTitle>> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<<snippetTitle>> field=\"title\" mode=\"inline\"/>\n\n</$view>\n\n</$button>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TextEditor/Snippet]!has[draft.of]sort[caption]]\" variable=\"snippetTitle\">\n\n<<toolbar-button-stamp-inner>>\n\n</$list>\n\n----\n\n<$button tag=\"a\">\n\n<$action-sendmessage\n\t$message=\"tm-new-tiddler\"\n\ttags=\"$:/tags/TextEditor/Snippet\"\n\tcaption={{$:/language/Buttons/Stamp/New/Title}}\n\ttext={{$:/language/Buttons/Stamp/New/Text}}\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<em>\n\n<$text text={{$:/language/Buttons/Stamp/Caption/New}}/>\n\n</em>\n\n</$button>\n"
},
"$:/core/ui/EditorToolbar/stamp": {
"title": "$:/core/ui/EditorToolbar/stamp",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/stamp",
"caption": "{{$:/language/Buttons/Stamp/Caption}}",
"description": "{{$:/language/Buttons/Stamp/Hint}}",
"condition": "[<targetTiddler>!is[image]]",
"shortcuts": "((stamp))",
"dropdown": "$:/core/ui/EditorToolbar/stamp-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/strikethrough": {
"title": "$:/core/ui/EditorToolbar/strikethrough",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/strikethrough",
"caption": "{{$:/language/Buttons/Strikethrough/Caption}}",
"description": "{{$:/language/Buttons/Strikethrough/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((strikethrough))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"~~\"\n\tsuffix=\"~~\"\n/>\n"
},
"$:/core/ui/EditorToolbar/subscript": {
"title": "$:/core/ui/EditorToolbar/subscript",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/subscript",
"caption": "{{$:/language/Buttons/Subscript/Caption}}",
"description": "{{$:/language/Buttons/Subscript/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((subscript))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\",,\"\n\tsuffix=\",,\"\n/>\n"
},
"$:/core/ui/EditorToolbar/superscript": {
"title": "$:/core/ui/EditorToolbar/superscript",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/superscript",
"caption": "{{$:/language/Buttons/Superscript/Caption}}",
"description": "{{$:/language/Buttons/Superscript/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((superscript))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"^^\"\n\tsuffix=\"^^\"\n/>\n"
},
"$:/core/ui/EditorToolbar/underline": {
"title": "$:/core/ui/EditorToolbar/underline",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/underline",
"caption": "{{$:/language/Buttons/Underline/Caption}}",
"description": "{{$:/language/Buttons/Underline/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((underline))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"__\"\n\tsuffix=\"__\"\n/>\n"
},
"$:/core/Filters/AllTags": {
"title": "$:/core/Filters/AllTags",
"tags": "$:/tags/Filter",
"filter": "[tags[]!is[system]sort[title]]",
"description": "{{$:/language/Filters/AllTags}}",
"text": ""
},
"$:/core/Filters/AllTiddlers": {
"title": "$:/core/Filters/AllTiddlers",
"tags": "$:/tags/Filter",
"filter": "[!is[system]sort[title]]",
"description": "{{$:/language/Filters/AllTiddlers}}",
"text": ""
},
"$:/core/Filters/Drafts": {
"title": "$:/core/Filters/Drafts",
"tags": "$:/tags/Filter",
"filter": "[has[draft.of]sort[title]]",
"description": "{{$:/language/Filters/Drafts}}",
"text": ""
},
"$:/core/Filters/Missing": {
"title": "$:/core/Filters/Missing",
"tags": "$:/tags/Filter",
"filter": "[all[missing]sort[title]]",
"description": "{{$:/language/Filters/Missing}}",
"text": ""
},
"$:/core/Filters/Orphans": {
"title": "$:/core/Filters/Orphans",
"tags": "$:/tags/Filter",
"filter": "[all[orphans]sort[title]]",
"description": "{{$:/language/Filters/Orphans}}",
"text": ""
},
"$:/core/Filters/OverriddenShadowTiddlers": {
"title": "$:/core/Filters/OverriddenShadowTiddlers",
"tags": "$:/tags/Filter",
"filter": "[is[shadow]]",
"description": "{{$:/language/Filters/OverriddenShadowTiddlers}}",
"text": ""
},
"$:/core/Filters/RecentSystemTiddlers": {
"title": "$:/core/Filters/RecentSystemTiddlers",
"tags": "$:/tags/Filter",
"filter": "[has[modified]!sort[modified]limit[50]]",
"description": "{{$:/language/Filters/RecentSystemTiddlers}}",
"text": ""
},
"$:/core/Filters/RecentTiddlers": {
"title": "$:/core/Filters/RecentTiddlers",
"tags": "$:/tags/Filter",
"filter": "[!is[system]has[modified]!sort[modified]limit[50]]",
"description": "{{$:/language/Filters/RecentTiddlers}}",
"text": ""
},
"$:/core/Filters/ShadowTiddlers": {
"title": "$:/core/Filters/ShadowTiddlers",
"tags": "$:/tags/Filter",
"filter": "[all[shadows]sort[title]]",
"description": "{{$:/language/Filters/ShadowTiddlers}}",
"text": ""
},
"$:/core/Filters/StoryList": {
"title": "$:/core/Filters/StoryList",
"tags": "$:/tags/Filter",
"filter": "[list[$:/StoryList]] -$:/AdvancedSearch",
"description": "{{$:/language/Filters/StoryList}}",
"text": ""
},
"$:/core/Filters/SystemTags": {
"title": "$:/core/Filters/SystemTags",
"tags": "$:/tags/Filter",
"filter": "[all[shadows+tiddlers]tags[]is[system]sort[title]]",
"description": "{{$:/language/Filters/SystemTags}}",
"text": ""
},
"$:/core/Filters/SystemTiddlers": {
"title": "$:/core/Filters/SystemTiddlers",
"tags": "$:/tags/Filter",
"filter": "[is[system]sort[title]]",
"description": "{{$:/language/Filters/SystemTiddlers}}",
"text": ""
},
"$:/core/Filters/TypedTiddlers": {
"title": "$:/core/Filters/TypedTiddlers",
"tags": "$:/tags/Filter",
"filter": "[!is[system]has[type]each[type]sort[type]] -[type[text/vnd.tiddlywiki]]",
"description": "{{$:/language/Filters/TypedTiddlers}}",
"text": ""
},
"$:/core/ui/ImportListing": {
"title": "$:/core/ui/ImportListing",
"text": "\\define lingo-base() $:/language/Import/\n\n\\define messageField()\nmessage-$(payloadTiddler)$\n\\end\n\n\\define selectionField()\nselection-$(payloadTiddler)$\n\\end\n\n\\define previewPopupState()\n$(currentTiddler)$!!popup-$(payloadTiddler)$\n\\end\n\n\\define select-all-actions()\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" variable=\"payloadTiddler\">\n<$action-setfield $field={{{ [<payloadTiddler>addprefix[selection-]] }}} $value={{$:/state/import/select-all}}/>\n</$list>\n\\end\n\n<table>\n<tbody>\n<tr>\n<th>\n<$checkbox tiddler=\"$:/state/import/select-all\" field=\"text\" checked=\"checked\" unchecked=\"unchecked\" default=\"checked\" actions=<<select-all-actions>>>\n<<lingo Listing/Select/Caption>>\n</$checkbox>\n</th>\n<th>\n<<lingo Listing/Title/Caption>>\n</th>\n<th>\n<<lingo Listing/Status/Caption>>\n</th>\n</tr>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" variable=\"payloadTiddler\">\n<tr>\n<td>\n<$checkbox field=<<selectionField>> checked=\"checked\" unchecked=\"unchecked\" default=\"checked\"/>\n</td>\n<td>\n<$reveal type=\"nomatch\" state=<<previewPopupState>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<previewPopupState>> setTo=\"yes\">\n{{$:/core/images/right-arrow}} <$text text=<<payloadTiddler>>/>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<previewPopupState>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<previewPopupState>> setTo=\"no\">\n{{$:/core/images/down-arrow}} <$text text=<<payloadTiddler>>/>\n</$button>\n</$reveal>\n</td>\n<td>\n<$view field=<<messageField>>/>\n</td>\n</tr>\n<tr>\n<td colspan=\"3\">\n<$reveal type=\"match\" text=\"yes\" state=<<previewPopupState>>>\n<$transclude subtiddler=<<payloadTiddler>> mode=\"block\"/>\n</$reveal>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ListItemTemplate": {
"title": "$:/core/ui/ListItemTemplate",
"text": "<div class=\"tc-menu-list-item\">\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</div>"
},
"$:/Manager/ItemMain/Fields": {
"title": "$:/Manager/ItemMain/Fields",
"tags": "$:/tags/Manager/ItemMain",
"caption": "{{$:/language/Manager/Item/Fields}}",
"text": "<table>\n<tbody>\n<$list filter=\"[all[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n</tbody>\n</table>\n"
},
"$:/Manager/ItemMain/RawText": {
"title": "$:/Manager/ItemMain/RawText",
"tags": "$:/tags/Manager/ItemMain",
"caption": "{{$:/language/Manager/Item/RawText}}",
"text": "<pre><code><$view/></code></pre>\n"
},
"$:/Manager/ItemMain/WikifiedText": {
"title": "$:/Manager/ItemMain/WikifiedText",
"tags": "$:/tags/Manager/ItemMain",
"caption": "{{$:/language/Manager/Item/WikifiedText}}",
"text": "<$transclude mode=\"block\"/>\n"
},
"$:/Manager/ItemSidebar/Colour": {
"title": "$:/Manager/ItemSidebar/Colour",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Colour}}",
"text": "\\define swatch-styles()\nheight: 1em;\nbackground-color: $(colour)$\n\\end\n\n<$vars colour={{!!color}}>\n<p style=<<swatch-styles>>/>\n</$vars>\n<p>\n<$edit-text field=\"color\" tag=\"input\" type=\"color\"/> / <$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/>\n</p>\n"
},
"$:/Manager/ItemSidebar/Icon": {
"title": "$:/Manager/ItemSidebar/Icon",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Icon}}",
"text": "<p>\n<div class=\"tc-manager-icon-editor\">\n<$button popup=<<qualify \"$:/state/popup/image-picker\">> class=\"tc-btn-invisible\">\n<$transclude tiddler={{!!icon}}>\n{{$:/language/Manager/Item/Icon/None}}\n</$transclude>\n</$button>\n<div class=\"tc-block-dropdown-wrapper\" style=\"position: static;\">\n<$reveal state=<<qualify \"$:/state/popup/image-picker\">> type=\"nomatch\" text=\"\" default=\"\" tag=\"div\" class=\"tc-popup\">\n<div class=\"tc-block-dropdown tc-popup-keep\" style=\"width: 80%; left: 10%; right: 10%; padding: 0.5em;\">\n<$macrocall $name=\"image-picker-include-tagged-images\" actions=\"\"\"\n<$action-setfield $field=\"icon\" $value=<<imageTitle>>/>\n<$action-deletetiddler $tiddler=<<qualify \"$:/state/popup/image-picker\">>/>\n\"\"\"/>\n</div>\n</$reveal>\n</div>\n</div>\n</p>\n"
},
"$:/Manager/ItemSidebar/Tags": {
"title": "$:/Manager/ItemSidebar/Tags",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Tags}}",
"text": "\\define tag-checkbox-actions()\n<$action-listops\n\t$tiddler=\"$:/config/Manager/RecentTags\"\n\t$subfilter=\"[<tag>] [list[$:/config/Manager/RecentTags]] +[limit[12]]\"\n/>\n\\end\n\n\\define tag-picker-actions()\n<<tag-checkbox-actions>>\n<$action-listops\n\t$tiddler=<<currentTiddler>>\n\t$field=\"tags\"\n\t$subfilter=\"[<tag>] [all[current]tags[]]\"\n/>\n\\end\n\n<p>\n<$list filter=\"[is[current]tags[]] [list[$:/config/Manager/RecentTags]] +[sort[title]] \" variable=\"tag\">\n<div>\n<$checkbox tiddler=<<currentTiddler>> tag=<<tag>> actions=<<tag-checkbox-actions>>>\n<$macrocall $name=\"tag-pill\" tag=<<tag>>/>\n</$checkbox>\n</div>\n</$list>\n</p>\n<p>\n<$macrocall $name=\"tag-picker\" actions=<<tag-picker-actions>>/>\n</p>\n"
},
"$:/Manager/ItemSidebar/Tools": {
"title": "$:/Manager/ItemSidebar/Tools",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Tools}}",
"text": "<p>\n<$button to=<<currentTiddler>>>{{$:/core/images/link}} open</$button>\n</p>\n<p>\n<$button message=\"tm-edit-tiddler\" param=<<currentTiddler>>>{{$:/core/images/edit-button}} edit</$button>\n</p>\n"
},
"$:/Manager": {
"title": "$:/Manager",
"icon": "$:/core/images/list",
"color": "#bbb",
"text": "\\define lingo-base() $:/language/Manager/\n\n\\define list-item-content-item()\n<div class=\"tc-manager-list-item-content-item\">\n\t<$vars state-title=\"\"\"$:/state/popup/manager/item/$(listItem)$\"\"\">\n\t\t<$reveal state=<<state-title>> type=\"match\" text=\"show\" default=\"show\" tag=\"div\">\n\t\t\t<$button set=<<state-title>> setTo=\"hide\" class=\"tc-btn-invisible tc-manager-list-item-content-item-heading\">\n\t\t\t\t{{$:/core/images/down-arrow}} <$transclude tiddler=<<listItem>> field=\"caption\"/>\n\t\t\t</$button>\n\t\t</$reveal>\n\t\t<$reveal state=<<state-title>> type=\"nomatch\" text=\"show\" default=\"show\" tag=\"div\">\n\t\t\t<$button set=<<state-title>> setTo=\"show\" class=\"tc-btn-invisible tc-manager-list-item-content-item-heading\">\n\t\t\t\t{{$:/core/images/right-arrow}} <$transclude tiddler=<<listItem>> field=\"caption\"/>\n\t\t\t</$button>\n\t\t</$reveal>\n\t\t<$reveal state=<<state-title>> type=\"match\" text=\"show\" default=\"show\" tag=\"div\" class=\"tc-manager-list-item-content-item-body\">\n\t\t\t<$transclude tiddler=<<listItem>>/>\n\t\t</$reveal>\n\t</$vars>\n</div>\n\\end\n\n<div class=\"tc-manager-wrapper\">\n\t<div class=\"tc-manager-controls\">\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Show/Prompt>> <$select tiddler=\"$:/config/Manager/Show\" default=\"tiddlers\">\n\t\t\t\t<option value=\"tiddlers\"><<lingo Controls/Show/Option/Tiddlers>></option>\n\t\t\t\t<option value=\"tags\"><<lingo Controls/Show/Option/Tags>></option>\n\t\t\t</$select>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Search/Prompt>> <$edit-text tiddler=\"$:/config/Manager/Filter\" tag=\"input\" default=\"\" placeholder={{$:/language/Manager/Controls/Search/Placeholder}}/>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/FilterByTag/Prompt>> <$select tiddler=\"$:/config/Manager/Tag\" default=\"\">\n\t\t\t\t<option value=\"\"><<lingo Controls/FilterByTag/None>></option>\n\t\t\t\t<$list filter=\"[!is{$:/config/Manager/System}tags[]!is[system]sort[title]]\" variable=\"tag\">\n\t\t\t\t\t<option value=<<tag>>><$text text=<<tag>>/></option>\n\t\t\t\t</$list>\n\t\t\t</$select>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Sort/Prompt>> <$select tiddler=\"$:/config/Manager/Sort\" default=\"title\">\n\t\t\t\t<optgroup label=\"Common\">\n\t\t\t\t\t<$list filter=\"title modified modifier created creator created\" variable=\"field\">\n\t\t\t\t\t\t<option value=<<field>>><$text text=<<field>>/></option>\n\t\t\t\t\t</$list>\n\t\t\t\t</optgroup>\n\t\t\t\t<optgroup label=\"All\">\n\t\t\t\t\t<$list filter=\"[all{$:/config/Manager/Show}!is{$:/config/Manager/System}fields[]sort[title]] -title -modified -modifier -created -creator -created\" variable=\"field\">\n\t\t\t\t\t\t<option value=<<field>>><$text text=<<field>>/></option>\n\t\t\t\t\t</$list>\n\t\t\t\t</optgroup>\n\t\t\t</$select>\n\t\t\t<$checkbox tiddler=\"$:/config/Manager/Order\" field=\"text\" checked=\"reverse\" unchecked=\"forward\" default=\"forward\">\n\t\t\t\t<<lingo Controls/Order/Prompt>>\n\t\t\t</$checkbox>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<$checkbox tiddler=\"$:/config/Manager/System\" field=\"text\" checked=\"\" unchecked=\"system\" default=\"system\">\n\t\t\t\t{{$:/language/SystemTiddlers/Include/Prompt}}\n\t\t\t</$checkbox>\n\t\t</div>\n\t</div>\n\t<div class=\"tc-manager-list\">\n\t\t<$list filter=\"[all{$:/config/Manager/Show}!is{$:/config/Manager/System}search{$:/config/Manager/Filter}tag:strict{$:/config/Manager/Tag}sort{$:/config/Manager/Sort}order{$:/config/Manager/Order}]\">\n\t\t\t<$vars transclusion=<<currentTiddler>>>\n\t\t\t\t<div style=\"tc-manager-list-item\">\n\t\t\t\t\t<$button popup=<<qualify \"$:/state/manager/popup\">> class=\"tc-btn-invisible tc-manager-list-item-heading\" selectedClass=\"tc-manager-list-item-heading-selected\">\n\t\t\t\t\t\t<$text text=<<currentTiddler>>/>\n\t\t\t\t\t</$button>\n\t\t\t\t\t<$reveal state=<<qualify \"$:/state/manager/popup\">> type=\"nomatch\" text=\"\" default=\"\" tag=\"div\" class=\"tc-manager-list-item-content tc-popup-handle\">\n\t\t\t\t\t\t<div class=\"tc-manager-list-item-content-tiddler\">\n\t\t\t\t\t\t\t<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Manager/ItemMain]!has[draft.of]]\" variable=\"listItem\">\n\t\t\t\t\t\t\t\t<<list-item-content-item>>\n\t\t\t\t\t\t\t</$list>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"tc-manager-list-item-content-sidebar\">\n\t\t\t\t\t\t\t<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Manager/ItemSidebar]!has[draft.of]]\" variable=\"listItem\">\n\t\t\t\t\t\t\t\t<<list-item-content-item>>\n\t\t\t\t\t\t\t</$list>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</$reveal>\n\t\t\t\t</div>\n\t\t\t</$vars>\n\t\t</$list>\n\t</div>\n</div>\n"
},
"$:/core/ui/MissingTemplate": {
"title": "$:/core/ui/MissingTemplate",
"text": "<div class=\"tc-tiddler-missing\">\n<$button popup=<<qualify \"$:/state/popup/missing\">> class=\"tc-btn-invisible tc-missing-tiddler-label\">\n<$view field=\"title\" format=\"text\" />\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/missing\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n<hr>\n<$list filter=\"[all[current]backlinks[]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n</div>\n"
},
"$:/core/ui/MoreSideBar/All": {
"title": "$:/core/ui/MoreSideBar/All",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/All/Caption}}",
"text": "<$list filter={{$:/core/Filters/AllTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Drafts": {
"title": "$:/core/ui/MoreSideBar/Drafts",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Drafts/Caption}}",
"text": "<$list filter={{$:/core/Filters/Drafts!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Explorer": {
"title": "$:/core/ui/MoreSideBar/Explorer",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Explorer/Caption}}",
"text": "<<tree \"$:/\">>\n"
},
"$:/core/ui/MoreSideBar/Missing": {
"title": "$:/core/ui/MoreSideBar/Missing",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Missing/Caption}}",
"text": "<$list filter={{$:/core/Filters/Missing!!filter}} template=\"$:/core/ui/MissingTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Orphans": {
"title": "$:/core/ui/MoreSideBar/Orphans",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Orphans/Caption}}",
"text": "<$list filter={{$:/core/Filters/Orphans!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Plugins": {
"title": "$:/core/ui/MoreSideBar/Plugins",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/ControlPanel/Plugins/Caption}}",
"text": "\n{{$:/language/ControlPanel/Plugins/Installed/Hint}}\n\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar/Plugins]!has[draft.of]]\" \"$:/core/ui/MoreSideBar/Plugins/Plugins\">>\n"
},
"$:/core/ui/MoreSideBar/Recent": {
"title": "$:/core/ui/MoreSideBar/Recent",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Recent/Caption}}",
"text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
},
"$:/core/ui/MoreSideBar/Shadows": {
"title": "$:/core/ui/MoreSideBar/Shadows",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Shadows/Caption}}",
"text": "<$list filter={{$:/core/Filters/ShadowTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/System": {
"title": "$:/core/ui/MoreSideBar/System",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/System/Caption}}",
"text": "<$list filter={{$:/core/Filters/SystemTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Tags": {
"title": "$:/core/ui/MoreSideBar/Tags",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Tags/Caption}}",
"text": "<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n{{$:/core/ui/Buttons/tag-manager}}\n\n</$set>\n\n</$set>\n\n</$set>\n\n<$list filter={{$:/core/Filters/AllTags!!filter}}>\n\n<$transclude tiddler=\"$:/core/ui/TagTemplate\"/>\n\n</$list>\n\n<hr class=\"tc-untagged-separator\">\n\n{{$:/core/ui/UntaggedTemplate}}\n"
},
"$:/core/ui/MoreSideBar/Types": {
"title": "$:/core/ui/MoreSideBar/Types",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Types/Caption}}",
"text": "<$list filter={{$:/core/Filters/TypedTiddlers!!filter}}>\n<div class=\"tc-menu-list-item\">\n<$view field=\"type\"/>\n<$list filter=\"[type{!!type}!is[system]sort[title]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}><$view field=\"title\"/></$link>\n</div>\n</$list>\n</div>\n</$list>\n"
},
"$:/core/ui/MoreSideBar/Plugins/Languages": {
"title": "$:/core/ui/MoreSideBar/Plugins/Languages",
"tags": "$:/tags/MoreSideBar/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}}",
"text": "<$list filter=\"[!has[draft.of]plugin-type[language]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>\n"
},
"$:/core/ui/MoreSideBar/Plugins/Plugins": {
"title": "$:/core/ui/MoreSideBar/Plugins/Plugins",
"tags": "$:/tags/MoreSideBar/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}}",
"text": "<$list filter=\"[!has[draft.of]plugin-type[plugin]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}>>/>\n"
},
"$:/core/ui/MoreSideBar/Plugins/Theme": {
"title": "$:/core/ui/MoreSideBar/Plugins/Theme",
"tags": "$:/tags/MoreSideBar/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}}",
"text": "<$list filter=\"[!has[draft.of]plugin-type[theme]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>\n"
},
"$:/core/ui/Buttons/advanced-search": {
"title": "$:/core/ui/Buttons/advanced-search",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/advanced-search-button}} {{$:/language/Buttons/AdvancedSearch/Caption}}",
"description": "{{$:/language/Buttons/AdvancedSearch/Hint}}",
"text": "\\define control-panel-button(class)\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/advanced-search-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/AdvancedSearch/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/AdvancedSearch]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/close-all": {
"title": "$:/core/ui/Buttons/close-all",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/close-all-button}} {{$:/language/Buttons/CloseAll/Caption}}",
"description": "{{$:/language/Buttons/CloseAll/Hint}}",
"text": "<$button message=\"tm-close-all-tiddlers\" tooltip={{$:/language/Buttons/CloseAll/Hint}} aria-label={{$:/language/Buttons/CloseAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/close-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/CloseAll/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/control-panel": {
"title": "$:/core/ui/Buttons/control-panel",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/options-button}} {{$:/language/Buttons/ControlPanel/Caption}}",
"description": "{{$:/language/Buttons/ControlPanel/Hint}}",
"text": "\\define control-panel-button(class)\n<$button to=\"$:/ControlPanel\" tooltip={{$:/language/Buttons/ControlPanel/Hint}} aria-label={{$:/language/Buttons/ControlPanel/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/options-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/ControlPanel/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/ControlPanel]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/encryption": {
"title": "$:/core/ui/Buttons/encryption",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/locked-padlock}} {{$:/language/Buttons/Encryption/Caption}}",
"description": "{{$:/language/Buttons/Encryption/Hint}}",
"text": "<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-clear-password\" tooltip={{$:/language/Buttons/Encryption/ClearPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/ClearPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/locked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Encryption/ClearPassword/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-set-password\" tooltip={{$:/language/Buttons/Encryption/SetPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/SetPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/unlocked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Encryption/SetPassword/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>"
},
"$:/core/ui/Buttons/export-page": {
"title": "$:/core/ui/Buttons/export-page",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportPage/Caption}}",
"description": "{{$:/language/Buttons/ExportPage/Hint}}",
"text": "<$macrocall $name=\"exportButton\" exportFilter=\"[!is[system]sort[title]]\" lingoBase=\"$:/language/Buttons/ExportPage/\"/>"
},
"$:/core/ui/Buttons/fold-all": {
"title": "$:/core/ui/Buttons/fold-all",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/fold-all-button}} {{$:/language/Buttons/FoldAll/Caption}}",
"description": "{{$:/language/Buttons/FoldAll/Hint}}",
"text": "<$button tooltip={{$:/language/Buttons/FoldAll/Hint}} aria-label={{$:/language/Buttons/FoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FoldAll/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/full-screen": {
"title": "$:/core/ui/Buttons/full-screen",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/full-screen-button}} {{$:/language/Buttons/FullScreen/Caption}}",
"description": "{{$:/language/Buttons/FullScreen/Hint}}",
"text": "<$button message=\"tm-full-screen\" tooltip={{$:/language/Buttons/FullScreen/Hint}} aria-label={{$:/language/Buttons/FullScreen/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/full-screen-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FullScreen/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/home": {
"title": "$:/core/ui/Buttons/home",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/home-button}} {{$:/language/Buttons/Home/Caption}}",
"description": "{{$:/language/Buttons/Home/Hint}}",
"text": "<$button message=\"tm-home\" tooltip={{$:/language/Buttons/Home/Hint}} aria-label={{$:/language/Buttons/Home/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/home-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Home/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/import": {
"title": "$:/core/ui/Buttons/import",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/import-button}} {{$:/language/Buttons/Import/Caption}}",
"description": "{{$:/language/Buttons/Import/Hint}}",
"text": "<div class=\"tc-file-input-wrapper\">\n<$button tooltip={{$:/language/Buttons/Import/Hint}} aria-label={{$:/language/Buttons/Import/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/import-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Import/Caption}}/></span>\n</$list>\n</$button>\n<$browse tooltip={{$:/language/Buttons/Import/Hint}}/>\n</div>"
},
"$:/core/ui/Buttons/language": {
"title": "$:/core/ui/Buttons/language",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/globe}} {{$:/language/Buttons/Language/Caption}}",
"description": "{{$:/language/Buttons/Language/Hint}}",
"text": "\\define flag-title()\n$(languagePluginTitle)$/icon\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/language\">> tooltip={{$:/language/Buttons/Language/Hint}} aria-label={{$:/language/Buttons/Language/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value={{$:/language}}>\n<$image source=<<flag-title>>/>\n</$set>\n</span>\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Language/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/language\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down tc-drop-down-language-chooser\">\n<$linkcatcher to=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[description]]\">\n<$link>\n<span class=\"tc-drop-down-bullet\">\n<$reveal type=\"match\" state=\"$:/language\" text=<<currentTiddler>>>\n•\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/language\" text=<<currentTiddler>>>\n \n</$reveal>\n</span>\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value=<<currentTiddler>>>\n<$transclude subtiddler=<<flag-title>>>\n<$list filter=\"[all[current]field:title[$:/languages/en-GB]]\">\n<$transclude tiddler=\"$:/languages/en-GB/icon\"/>\n</$list>\n</$transclude>\n</$set>\n</span>\n<$view field=\"description\">\n<$view field=\"name\">\n<$view field=\"title\"/>\n</$view>\n</$view>\n</$link>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>"
},
"$:/core/ui/Buttons/manager": {
"title": "$:/core/ui/Buttons/manager",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/list}} {{$:/language/Buttons/Manager/Caption}}",
"description": "{{$:/language/Buttons/Manager/Hint}}",
"text": "\\define manager-button(class)\n<$button to=\"$:/Manager\" tooltip={{$:/language/Buttons/Manager/Hint}} aria-label={{$:/language/Buttons/Manager/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/list}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Manager/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/Manager]]\" emptyMessage=<<manager-button>>>\n<<manager-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/more-page-actions": {
"title": "$:/core/ui/Buttons/more-page-actions",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
"description": "{{$:/language/Buttons/More/Hint}}",
"text": "\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/More/Caption}}/></span>\n</$list>\n</$button><$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"below\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]] -[[$:/core/ui/Buttons/more-page-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$set>\n\n</$reveal>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>"
},
"$:/core/ui/Buttons/new-image": {
"title": "$:/core/ui/Buttons/new-image",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/new-image-button}} {{$:/language/Buttons/NewImage/Caption}}",
"description": "{{$:/language/Buttons/NewImage/Hint}}",
"text": "<$button tooltip={{$:/language/Buttons/NewImage/Hint}} aria-label={{$:/language/Buttons/NewImage/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-new-tiddler\" type=\"image/jpeg\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/new-image-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewImage/Caption}}/></span>\n</$list>\n</$button>\n"
},
"$:/core/ui/Buttons/new-journal": {
"title": "$:/core/ui/Buttons/new-journal",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournal/Caption}}",
"description": "{{$:/language/Buttons/NewJournal/Hint}}",
"text": "\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournal/Hint}} aria-label={{$:/language/Buttons/NewJournal/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<now \"$(journalTitleTemplate)$\">> tags=\"$(journalTags)$\" text=\"$(journalText)$\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewJournal/Caption}}/></span>\n</$list>\n</$button>\n\\end\n<$set name=\"journalTitleTemplate\" value={{$:/config/NewJournal/Title}}>\n<$set name=\"journalTags\" value={{$:/config/NewJournal/Tags}}>\n<$set name=\"journalText\" value={{$:/config/NewJournal/Text}}>\n<<journalButton>>\n</$set></$set></$set>"
},
"$:/core/ui/Buttons/new-tiddler": {
"title": "$:/core/ui/Buttons/new-tiddler",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/new-button}} {{$:/language/Buttons/NewTiddler/Caption}}",
"description": "{{$:/language/Buttons/NewTiddler/Hint}}",
"text": "<$button message=\"tm-new-tiddler\" tooltip={{$:/language/Buttons/NewTiddler/Hint}} aria-label={{$:/language/Buttons/NewTiddler/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/new-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewTiddler/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/palette": {
"title": "$:/core/ui/Buttons/palette",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/palette}} {{$:/language/Buttons/Palette/Caption}}",
"description": "{{$:/language/Buttons/Palette/Hint}}",
"text": "<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/palette\">> tooltip={{$:/language/Buttons/Palette/Hint}} aria-label={{$:/language/Buttons/Palette/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/palette}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Palette/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/palette\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\" style=\"font-size:0.7em;\">\n{{$:/snippets/paletteswitcher}}\n</div>\n</$reveal>"
},
"$:/core/ui/Buttons/print": {
"title": "$:/core/ui/Buttons/print",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/print-button}} {{$:/language/Buttons/Print/Caption}}",
"description": "{{$:/language/Buttons/Print/Hint}}",
"text": "<$button message=\"tm-print\" tooltip={{$:/language/Buttons/Print/Hint}} aria-label={{$:/language/Buttons/Print/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/print-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Print/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/refresh": {
"title": "$:/core/ui/Buttons/refresh",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/refresh-button}} {{$:/language/Buttons/Refresh/Caption}}",
"description": "{{$:/language/Buttons/Refresh/Hint}}",
"text": "<$button message=\"tm-browser-refresh\" tooltip={{$:/language/Buttons/Refresh/Hint}} aria-label={{$:/language/Buttons/Refresh/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/refresh-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Refresh/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/save-wiki": {
"title": "$:/core/ui/Buttons/save-wiki",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/save-button}} {{$:/language/Buttons/SaveWiki/Caption}}",
"description": "{{$:/language/Buttons/SaveWiki/Hint}}",
"text": "<$button message=\"tm-save-wiki\" param={{$:/config/SaveWikiButton/Template}} tooltip={{$:/language/Buttons/SaveWiki/Hint}} aria-label={{$:/language/Buttons/SaveWiki/Caption}} class=<<tv-config-toolbar-class>>>\n<span class=\"tc-dirty-indicator\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/save-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/SaveWiki/Caption}}/></span>\n</$list>\n</span>\n</$button>"
},
"$:/core/ui/Buttons/storyview": {
"title": "$:/core/ui/Buttons/storyview",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/storyview-classic}} {{$:/language/Buttons/StoryView/Caption}}",
"description": "{{$:/language/Buttons/StoryView/Hint}}",
"text": "\\define icon()\n$:/core/images/storyview-$(storyview)$\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/storyview\">> tooltip={{$:/language/Buttons/StoryView/Hint}} aria-label={{$:/language/Buttons/StoryView/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n<$set name=\"storyview\" value={{$:/view}}>\n<$transclude tiddler=<<icon>>/>\n</$set>\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/StoryView/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/storyview\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$linkcatcher to=\"$:/view\">\n<$list filter=\"[storyviews[]]\" variable=\"storyview\">\n<$link to=<<storyview>>>\n<span class=\"tc-drop-down-bullet\">\n<$reveal type=\"match\" state=\"$:/view\" text=<<storyview>>>\n•\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/view\" text=<<storyview>>>\n \n</$reveal>\n</span>\n<$transclude tiddler=<<icon>>/>\n<$text text=<<storyview>>/></$link>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>"
},
"$:/core/ui/Buttons/tag-manager": {
"title": "$:/core/ui/Buttons/tag-manager",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/tag-button}} {{$:/language/Buttons/TagManager/Caption}}",
"description": "{{$:/language/Buttons/TagManager/Hint}}",
"text": "\\define control-panel-button(class)\n<$button to=\"$:/TagManager\" tooltip={{$:/language/Buttons/TagManager/Hint}} aria-label={{$:/language/Buttons/TagManager/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/tag-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/TagManager/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/TagManager]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/theme": {
"title": "$:/core/ui/Buttons/theme",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/theme-button}} {{$:/language/Buttons/Theme/Caption}}",
"description": "{{$:/language/Buttons/Theme/Hint}}",
"text": "<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/theme\">> tooltip={{$:/language/Buttons/Theme/Hint}} aria-label={{$:/language/Buttons/Theme/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/theme-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Theme/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/theme\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$linkcatcher to=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\" variable=\"themeTitle\">\n<$link to=<<themeTitle>>>\n<span class=\"tc-drop-down-bullet\">\n<$reveal type=\"match\" state=\"$:/theme\" text=<<themeTitle>>>\n•\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/theme\" text=<<themeTitle>>>\n \n</$reveal>\n</span>\n<$view tiddler=<<themeTitle>> field=\"name\"/>\n</$link>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>"
},
"$:/core/ui/Buttons/timestamp": {
"title": "$:/core/ui/Buttons/timestamp",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/timestamp-on}} {{$:/language/Buttons/Timestamp/Caption}}",
"description": "{{$:/language/Buttons/Timestamp/Hint}}",
"text": "<$reveal type=\"nomatch\" state=\"$:/config/TimestampDisable\" text=\"yes\">\n<$button tooltip={{$:/language/Buttons/Timestamp/On/Hint}} aria-label={{$:/language/Buttons/Timestamp/On/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-setfield $tiddler=\"$:/config/TimestampDisable\" $value=\"yes\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/timestamp-on}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Timestamp/On/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=\"$:/config/TimestampDisable\" text=\"yes\">\n<$button tooltip={{$:/language/Buttons/Timestamp/Off/Hint}} aria-label={{$:/language/Buttons/Timestamp/Off/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-setfield $tiddler=\"$:/config/TimestampDisable\" $value=\"no\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/timestamp-off}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Timestamp/Off/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>"
},
"$:/core/ui/Buttons/unfold-all": {
"title": "$:/core/ui/Buttons/unfold-all",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/unfold-all-button}} {{$:/language/Buttons/UnfoldAll/Caption}}",
"description": "{{$:/language/Buttons/UnfoldAll/Hint}}",
"text": "<$button tooltip={{$:/language/Buttons/UnfoldAll/Hint}} aria-label={{$:/language/Buttons/UnfoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-unfold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/UnfoldAll/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/PageTemplate/pagecontrols": {
"title": "$:/core/ui/PageTemplate/pagecontrols",
"text": "\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-page-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n<$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n</$set>\n</$reveal>\n</$list>\n</div>\n\n"
},
"$:/core/ui/PageStylesheet": {
"title": "$:/core/ui/PageStylesheet",
"text": "<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\n</$set>\n\n</$set>\n\n</$importvariables>\n"
},
"$:/core/ui/PageTemplate/alerts": {
"title": "$:/core/ui/PageTemplate/alerts",
"tags": "$:/tags/PageTemplate",
"text": "<div class=\"tc-alerts\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Alert]!has[draft.of]]\" template=\"$:/core/ui/AlertTemplate\" storyview=\"pop\"/>\n\n</div>\n"
},
"$:/core/ui/PageTemplate/pluginreloadwarning": {
"title": "$:/core/ui/PageTemplate/pluginreloadwarning",
"tags": "$:/tags/PageTemplate",
"text": "\\define lingo-base() $:/language/\n\n<$list filter=\"[has[plugin-type]haschanged[]!plugin-type[import]limit[1]]\">\n\n<$reveal type=\"nomatch\" state=\"$:/temp/HidePluginWarning\" text=\"yes\">\n\n<div class=\"tc-plugin-reload-warning\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<<lingo PluginReloadWarning>> <$button set=\"$:/temp/HidePluginWarning\" setTo=\"yes\" class=\"tc-btn-invisible\">{{$:/core/images/close-button}}</$button>\n\n</$set>\n\n</div>\n\n</$reveal>\n\n</$list>\n"
},
"$:/core/ui/PageTemplate/sidebar": {
"title": "$:/core/ui/PageTemplate/sidebar",
"tags": "$:/tags/PageTemplate",
"text": "<$scrollable fallthrough=\"no\" class=\"tc-sidebar-scrollable\">\n\n<div class=\"tc-sidebar-header\">\n\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\" retain=\"yes\" animate=\"yes\">\n\n<h1 class=\"tc-site-title\">\n\n<$transclude tiddler=\"$:/SiteTitle\" mode=\"inline\"/>\n\n</h1>\n\n<div class=\"tc-site-subtitle\">\n\n<$transclude tiddler=\"$:/SiteSubtitle\" mode=\"inline\"/>\n\n</div>\n\n{{||$:/core/ui/PageTemplate/pagecontrols}}\n\n<$transclude tiddler=\"$:/core/ui/SideBarLists\" mode=\"inline\"/>\n\n</$reveal>\n\n</div>\n\n</$scrollable>"
},
"$:/core/ui/PageTemplate/story": {
"title": "$:/core/ui/PageTemplate/story",
"tags": "$:/tags/PageTemplate",
"text": "<section class=\"tc-story-river\">\n\n<section class=\"story-backdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AboveStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n<$list filter=\"[list[$:/StoryList]]\" history=\"$:/HistoryList\" template=\"$:/core/ui/ViewTemplate\" editTemplate=\"$:/core/ui/EditTemplate\" storyview={{$:/view}} emptyMessage={{$:/config/EmptyStoryMessage}}/>\n\n<section class=\"story-frontdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/BelowStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n</section>\n"
},
"$:/core/ui/PageTemplate/topleftbar": {
"title": "$:/core/ui/PageTemplate/topleftbar",
"tags": "$:/tags/PageTemplate",
"text": "<span class=\"tc-topbar tc-topbar-left\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopLeftBar]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
},
"$:/core/ui/PageTemplate/toprightbar": {
"title": "$:/core/ui/PageTemplate/toprightbar",
"tags": "$:/tags/PageTemplate",
"text": "<span class=\"tc-topbar tc-topbar-right\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopRightBar]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
},
"$:/core/ui/PageTemplate": {
"title": "$:/core/ui/PageTemplate",
"text": "\\define containerClasses()\ntc-page-container tc-page-view-$(themeTitle)$ tc-language-$(languageTitle)$\n\\end\n\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n\n<$set name=\"tv-config-toolbar-icons\" value={{$:/config/Toolbar/Icons}}>\n\n<$set name=\"tv-config-toolbar-text\" value={{$:/config/Toolbar/Text}}>\n\n<$set name=\"tv-config-toolbar-class\" value={{$:/config/Toolbar/ButtonClass}}>\n\n<$set name=\"themeTitle\" value={{$:/view}}>\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$set name=\"currentTiddler\" value=\"\">\n\n<div class=<<containerClasses>>>\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n\n<$dropzone>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageTemplate]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>>/>\n\n</$list>\n\n</$dropzone>\n\n</$navigator>\n\n</div>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$importvariables>\n"
},
"$:/core/ui/PluginInfo": {
"title": "$:/core/ui/PluginInfo",
"text": "\\define localised-info-tiddler-title()\n$(currentTiddler)$/$(languageTitle)$/$(currentTab)$\n\\end\n\\define info-tiddler-title()\n$(currentTiddler)$/$(currentTab)$\n\\end\n\\define default-tiddler-title()\n$:/core/ui/PluginInfo/Default/$(currentTab)$\n\\end\n<$transclude tiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<default-tiddler-title>> mode=\"block\">\n{{$:/language/ControlPanel/Plugin/NoInfoFound/Hint}}\n</$transclude>\n</$transclude>\n</$transclude>\n</$transclude>\n"
},
"$:/core/ui/PluginInfo/Default/contents": {
"title": "$:/core/ui/PluginInfo/Default/contents",
"text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\n<<lingo Hint>>\n<ul>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" emptyMessage=<<lingo Empty/Hint>>>\n<li>\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</li>\n</$list>\n</ul>\n"
},
"$:/core/ui/PluginListItemTemplate": {
"title": "$:/core/ui/PluginListItemTemplate",
"text": "<div class=\"tc-menu-list-item\">\n<$link to={{!!title}}>\n<$view field=\"description\">\n<$view field=\"title\"/>\n</$view>\n</$link>\n</div>"
},
"$:/core/ui/SearchResults": {
"title": "$:/core/ui/SearchResults",
"text": "<div class=\"tc-search-results\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\"\"\">\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}}/>\n\n</$list>\n\n</div>\n"
},
"$:/core/ui/SideBar/More": {
"title": "$:/core/ui/SideBar/More",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/More/Caption}}",
"text": "<div class=\"tc-more-sidebar\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]\" \"$:/core/ui/MoreSideBar/Tags\" \"$:/state/tab/moresidebar\" \"tc-vertical\">>\n</div>\n"
},
"$:/core/ui/SideBar/Open": {
"title": "$:/core/ui/SideBar/Open",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Open/Caption}}",
"text": "\\define lingo-base() $:/language/CloseAll/\n\n\\define drop-actions()\n<$action-listops $tiddler=\"$:/StoryList\" $subfilter=\"+[insertbefore:currentTiddler<actionTiddler>]\"/>\n\\end\n\n<$list filter=\"[list[$:/StoryList]]\" history=\"$:/HistoryList\" storyview=\"pop\">\n<div style=\"position: relative;\">\n<$droppable actions=<<drop-actions>>>\n<div class=\"tc-droppable-placeholder\">\n \n</div>\n<div>\n<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=\"tc-btn-invisible tc-btn-mini\">×</$button> <$link to={{!!title}}><$view field=\"title\"/></$link>\n</div>\n</$droppable>\n</div>\n</$list>\n<$tiddler tiddler=\"\">\n<$droppable actions=<<drop-actions>>>\n<div class=\"tc-droppable-placeholder\">\n \n</div>\n<$button message=\"tm-close-all-tiddlers\" class=\"tc-btn-invisible tc-btn-mini\"><<lingo Button>></$button>\n</$droppable>\n</$tiddler>\n"
},
"$:/core/ui/SideBar/Recent": {
"title": "$:/core/ui/SideBar/Recent",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Recent/Caption}}",
"text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
},
"$:/core/ui/SideBar/Tools": {
"title": "$:/core/ui/SideBar/Tools",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Tools/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n\n<<lingo Basics/Version/Prompt>> <<version>>\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n\n<div style=\"position:relative;\" class={{{ [<listItem>encodeuricomponent[]addprefix[tc-btn-]] }}}>\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</div>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/SideBarLists": {
"title": "$:/core/ui/SideBarLists",
"text": "<div class=\"tc-sidebar-lists\">\n\n<$set name=\"searchTiddler\" value=\"$:/temp/search\">\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/search\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}} focusPopup=<<qualify \"$:/state/popup/search-dropdown\">> class=\"tc-popup-handle\"/>\n<$reveal state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n<$button tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" text={{$:/temp/search}}/>\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n{{$:/core/images/advanced-search-button}}\n</$button>\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\" />\n{{$:/core/images/close-button}}\n</$button>\n<$button popup=<<qualify \"$:/state/popup/search-dropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n<$list filter=\"[{$:/temp/search}minlength{$:/config/Search/MinLength}limit[1]]\" variable=\"listItem\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[!is[system]search{$(searchTiddler)$}]\"/>\"\"\">\n{{$:/language/Search/Matches}}\n</$set>\n</$list>\n</$button>\n</$reveal>\n<$reveal state=\"$:/temp/search\" type=\"match\" text=\"\">\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n{{$:/core/images/advanced-search-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown-wrapper\" state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown tc-search-drop-down tc-popup-handle\" state=<<qualify \"$:/state/popup/search-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n\n<$list filter=\"[{$:/temp/search}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n{{$:/core/ui/SearchResults}}\n\n</$list>\n\n</$reveal>\n\n</$reveal>\n\n</$set>\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\" default={{$:/config/DefaultSidebarTab}} state=\"$:/state/tab/sidebar\" />\n\n</div>\n"
},
"$:/TagManager": {
"title": "$:/TagManager",
"icon": "$:/core/images/tag-button",
"color": "#bbb",
"caption": "{{$:/language/TagManager/Caption}}",
"text": "\\define lingo-base() $:/language/TagManager/\n\\define iconEditorTab(type)\n<$list filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[sort[title]] +[$type$is[system]]\">\n<$link to={{!!title}}>\n<$transclude/> <$view field=\"title\"/>\n</$link>\n</$list>\n\\end\n\\define iconEditor(title)\n<div class=\"tc-drop-down-wrapper\">\n<$button popup=<<qualify \"$:/state/popup/icon/$title$\">> class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal state=<<qualify \"$:/state/popup/icon/$title$\">> type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$linkcatcher to=\"$title$!!icon\">\n<<iconEditorTab type:\"!\">>\n<hr/>\n<<iconEditorTab type:\"\">>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>\n\\end\n\\define qualifyTitle(title)\n$title$$(currentTiddler)$\n\\end\n\\define toggleButton(state)\n<$reveal state=\"$state$\" type=\"match\" text=\"closed\" default=\"closed\">\n<$button set=\"$state$\" setTo=\"open\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n<$reveal state=\"$state$\" type=\"match\" text=\"open\" default=\"closed\">\n<$button set=\"$state$\" setTo=\"closed\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n\\end\n<table class=\"tc-tag-manager-table\">\n<tbody>\n<tr>\n<th><<lingo Colour/Heading>></th>\n<th class=\"tc-tag-manager-tag\"><<lingo Tag/Heading>></th>\n<th><<lingo Count/Heading>></th>\n<th><<lingo Icon/Heading>></th>\n<th><<lingo Info/Heading>></th>\n</tr>\n<$list filter=\"[tags[]!is[system]sort[title]]\">\n<tr>\n<td><$edit-text field=\"color\" tag=\"input\" type=\"color\"/></td>\n<td><$macrocall $name=\"tag\" tag=<<currentTiddler>>/></td>\n<td><$count filter=\"[all[current]tagging[]]\"/></td>\n<td>\n<$macrocall $name=\"iconEditor\" title={{!!title}}/>\n</td>\n<td>\n<$macrocall $name=\"toggleButton\" state=<<qualifyTitle \"$:/state/tag-manager/\">> /> \n</td>\n</tr>\n<tr>\n<td></td>\n<td colspan=\"4\">\n<$reveal state=<<qualifyTitle \"$:/state/tag-manager/\">> type=\"match\" text=\"open\" default=\"\">\n<table>\n<tbody>\n<tr><td><<lingo Colour/Heading>></td><td><$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/></td></tr>\n<tr><td><<lingo Icon/Heading>></td><td><$edit-text field=\"icon\" tag=\"input\" size=\"45\"/></td></tr>\n</tbody>\n</table>\n</$reveal>\n</td>\n</tr>\n</$list>\n<tr>\n<td></td>\n<td>\n{{$:/core/ui/UntaggedTemplate}}\n</td>\n<td>\n<small class=\"tc-menu-list-count\"><$count filter=\"[untagged[]!is[system]] -[tags[]]\"/></small>\n</td>\n<td></td>\n<td></td>\n</tr>\n</tbody>\n</table>\n"
},
"$:/core/ui/TagTemplate": {
"title": "$:/core/ui/TagTemplate",
"text": "<span class=\"tc-tag-list-item\">\n<$set name=\"transclusion\" value=<<currentTiddler>>>\n<$macrocall $name=\"tag-pill-body\" tag=<<currentTiddler>> icon={{!!icon}} colour={{!!color}} palette={{$:/palette}} element-tag=\"\"\"$button\"\"\" element-attributes=\"\"\"popup=<<qualify \"$:/state/popup/tag\">> dragFilter='[all[current]tagging[]]' tag='span'\"\"\"/>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\" animate=\"yes\" class=\"tc-drop-down\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TagDropdown]!has[draft.of]]\" variable=\"listItem\"> \n<$transclude tiddler=<<listItem>>/> \n</$list>\n<hr>\n<$macrocall $name=\"list-tagged-draggable\" tag=<<currentTiddler>>/>\n</$reveal>\n</$set>\n</span>\n"
},
"$:/core/ui/TiddlerFieldTemplate": {
"title": "$:/core/ui/TiddlerFieldTemplate",
"text": "<tr class=\"tc-view-field\">\n<td class=\"tc-view-field-name\">\n<$text text=<<listItem>>/>\n</td>\n<td class=\"tc-view-field-value\">\n<$view field=<<listItem>>/>\n</td>\n</tr>"
},
"$:/core/ui/TiddlerFields": {
"title": "$:/core/ui/TiddlerFields",
"text": "<table class=\"tc-view-field-table\">\n<tbody>\n<$list filter=\"[all[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n</tbody>\n</table>\n"
},
"$:/core/ui/TiddlerInfo/Advanced/PluginInfo": {
"title": "$:/core/ui/TiddlerInfo/Advanced/PluginInfo",
"tags": "$:/tags/TiddlerInfo/Advanced",
"text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\n<$list filter=\"[all[current]has[plugin-type]]\">\n\n! <<lingo Heading>>\n\n<<lingo Hint>>\n<ul>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" emptyMessage=<<lingo Empty/Hint>>>\n<li>\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</li>\n</$list>\n</ul>\n\n</$list>\n"
},
"$:/core/ui/TiddlerInfo/Advanced/ShadowInfo": {
"title": "$:/core/ui/TiddlerInfo/Advanced/ShadowInfo",
"tags": "$:/tags/TiddlerInfo/Advanced",
"text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/ShadowInfo/\n<$set name=\"infoTiddler\" value=<<currentTiddler>>>\n\n''<<lingo Heading>>''\n\n<$list filter=\"[all[current]!is[shadow]]\">\n\n<<lingo NotShadow/Hint>>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]]\">\n\n<<lingo Shadow/Hint>>\n\n<$list filter=\"[all[current]shadowsource[]]\">\n\n<$set name=\"pluginTiddler\" value=<<currentTiddler>>>\n<<lingo Shadow/Source>>\n</$set>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\">\n\n<<lingo OverriddenShadow/Hint>>\n\n</$list>\n\n\n</$list>\n</$set>\n"
},
"$:/core/ui/TiddlerInfo/Advanced": {
"title": "$:/core/ui/TiddlerInfo/Advanced",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Advanced/Caption}}",
"text": "<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo/Advanced]!has[draft.of]]\" variable=\"listItem\">\n<$transclude tiddler=<<listItem>>/>\n\n</$list>\n"
},
"$:/core/ui/TiddlerInfo/Fields": {
"title": "$:/core/ui/TiddlerInfo/Fields",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Fields/Caption}}",
"text": "<$transclude tiddler=\"$:/core/ui/TiddlerFields\"/>\n"
},
"$:/core/ui/TiddlerInfo/List": {
"title": "$:/core/ui/TiddlerInfo/List",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/List/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[list{!!title}]\" emptyMessage=<<lingo List/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo/Listed": {
"title": "$:/core/ui/TiddlerInfo/Listed",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Listed/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]listed[]!is[system]]\" emptyMessage=<<lingo Listed/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo/References": {
"title": "$:/core/ui/TiddlerInfo/References",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/References/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]backlinks[]sort[title]]\" emptyMessage=<<lingo References/Empty>> template=\"$:/core/ui/ListItemTemplate\">\n</$list>\n"
},
"$:/core/ui/TiddlerInfo/Tagging": {
"title": "$:/core/ui/TiddlerInfo/Tagging",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Tagging/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]tagging[]]\" emptyMessage=<<lingo Tagging/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo/Tools": {
"title": "$:/core/ui/TiddlerInfo/Tools",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Tools/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/TiddlerInfo": {
"title": "$:/core/ui/TiddlerInfo",
"text": "<div style=\"position:relative;\">\n<div class=\"tc-tiddler-controls\" style=\"position:absolute;right:0;\">\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"sticky\">\n<$button set=<<tiddlerInfoState>> setTo=\"\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=\"tc-btn-invisible\">\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n</div>\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo]!has[draft.of]]\" default={{$:/config/TiddlerInfo/Default}}/>"
},
"$:/core/ui/TopBar/menu": {
"title": "$:/core/ui/TopBar/menu",
"tags": "$:/tags/TopRightBar",
"text": "<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"no\">\n<$button set=\"$:/state/sidebar\" setTo=\"no\" tooltip={{$:/language/Buttons/HideSideBar/Hint}} aria-label={{$:/language/Buttons/HideSideBar/Caption}} class=\"tc-btn-invisible\">{{$:/core/images/chevron-right}}</$button>\n</$reveal>\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"no\">\n<$button set=\"$:/state/sidebar\" setTo=\"yes\" tooltip={{$:/language/Buttons/ShowSideBar/Hint}} aria-label={{$:/language/Buttons/ShowSideBar/Caption}} class=\"tc-btn-invisible\">{{$:/core/images/chevron-left}}</$button>\n</$reveal>\n"
},
"$:/core/ui/UntaggedTemplate": {
"title": "$:/core/ui/UntaggedTemplate",
"text": "\\define lingo-base() $:/language/SideBar/\n<$button popup=<<qualify \"$:/state/popup/tag\">> class=\"tc-btn-invisible tc-untagged-label tc-tag-label\">\n<<lingo Tags/Untagged/Caption>>\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[untagged[]!is[system]] -[tags[]] +[sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/body": {
"title": "$:/core/ui/ViewTemplate/body",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal tag=\"div\" class=\"tc-tiddler-body\" type=\"nomatch\" state=<<folded-state>> text=\"hide\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[current]!has[plugin-type]!field:hide-body[yes]]\">\n\n<$transclude>\n\n<$transclude tiddler=\"$:/language/MissingTiddler/Hint\"/>\n\n</$transclude>\n\n</$list>\n\n</$reveal>"
},
"$:/core/ui/ViewTemplate/classic": {
"title": "$:/core/ui/ViewTemplate/classic",
"tags": "$:/tags/ViewTemplate $:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/ClassicWarning/\n<$list filter=\"[all[current]type[text/x-tiddlywiki]]\">\n<div class=\"tc-message-box\">\n\n<<lingo Hint>>\n\n<$button set=\"!!type\" setTo=\"text/vnd.tiddlywiki\"><<lingo Upgrade/Caption>></$button>\n\n</div>\n</$list>\n"
},
"$:/core/ui/ViewTemplate/import": {
"title": "$:/core/ui/ViewTemplate/import",
"tags": "$:/tags/ViewTemplate",
"text": "\\define lingo-base() $:/language/Import/\n\n<$list filter=\"[all[current]field:plugin-type[import]]\">\n\n<div class=\"tc-import\">\n\n<<lingo Listing/Hint>>\n\n<$button message=\"tm-delete-tiddler\" param=<<currentTiddler>>><<lingo Listing/Cancel/Caption>></$button>\n<$button message=\"tm-perform-import\" param=<<currentTiddler>>><<lingo Listing/Import/Caption>></$button>\n\n{{||$:/core/ui/ImportListing}}\n\n<$button message=\"tm-delete-tiddler\" param=<<currentTiddler>>><<lingo Listing/Cancel/Caption>></$button>\n<$button message=\"tm-perform-import\" param=<<currentTiddler>>><<lingo Listing/Import/Caption>></$button>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/ViewTemplate/plugin": {
"title": "$:/core/ui/ViewTemplate/plugin",
"tags": "$:/tags/ViewTemplate",
"text": "<$list filter=\"[all[current]has[plugin-type]] -[all[current]field:plugin-type[import]]\">\n<$set name=\"plugin-type\" value={{!!plugin-type}}>\n<$set name=\"default-popup-state\" value=\"yes\">\n<$set name=\"qualified-state\" value=<<qualify \"$:/state/plugin-info\">>>\n{{||$:/core/ui/Components/plugin-info}}\n</$set>\n</$set>\n</$set>\n</$list>\n"
},
"$:/core/ui/ViewTemplate/subtitle": {
"title": "$:/core/ui/ViewTemplate/subtitle",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal type=\"nomatch\" state=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-subtitle\">\n<$link to={{!!modifier}}>\n<$view field=\"modifier\"/>\n</$link> <$view field=\"modified\" format=\"date\" template={{$:/language/Tiddler/DateFormat}}/>\n</div>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/tags": {
"title": "$:/core/ui/ViewTemplate/tags",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal type=\"nomatch\" state=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-tags-wrapper\"><$list filter=\"[all[current]tags[]sort[title]]\" template=\"$:/core/ui/TagTemplate\" storyview=\"pop\"/></div>\n</$reveal>"
},
"$:/core/ui/ViewTemplate/title": {
"title": "$:/core/ui/ViewTemplate/title",
"tags": "$:/tags/ViewTemplate",
"text": "\\define title-styles()\nfill:$(foregroundColor)$;\n\\end\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title\">\n<div class=\"tc-titlebar\">\n<span class=\"tc-tiddler-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\"><$transclude tiddler=<<listItem>>/></$set></$reveal></$list>\n</span>\n<$set name=\"tv-wikilinks\" value={{$:/config/Tiddlers/TitleLinks}}>\n<$link>\n<$set name=\"foregroundColor\" value={{!!color}}>\n<span class=\"tc-tiddler-title-icon\" style=<<title-styles>>>\n<$transclude tiddler={{!!icon}}/>\n</span>\n</$set>\n<$list filter=\"[all[current]removeprefix[$:/]]\">\n<h2 class=\"tc-title\" title={{$:/language/SystemTiddler/Tooltip}}>\n<span class=\"tc-system-title-prefix\">$:/</span><$text text=<<currentTiddler>>/>\n</h2>\n</$list>\n<$list filter=\"[all[current]!prefix[$:/]]\">\n<h2 class=\"tc-title\">\n<$view field=\"title\"/>\n</h2>\n</$list>\n</$link>\n</$set>\n</div>\n\n<$reveal type=\"nomatch\" text=\"\" default=\"\" state=<<tiddlerInfoState>> class=\"tc-tiddler-info tc-popup-handle\" animate=\"yes\" retain=\"yes\">\n\n<$transclude tiddler=\"$:/core/ui/TiddlerInfo\"/>\n\n</$reveal>\n</div>"
},
"$:/core/ui/ViewTemplate/unfold": {
"title": "$:/core/ui/ViewTemplate/unfold",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal tag=\"div\" type=\"nomatch\" state=\"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar\" text=\"hide\">\n<$reveal tag=\"div\" type=\"nomatch\" state=<<folded-state>> text=\"hide\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=\"tc-fold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-up}}\n</$button>\n</$reveal>\n<$reveal tag=\"div\" type=\"nomatch\" state=<<folded-state>> text=\"show\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=\"tc-unfold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate": {
"title": "$:/core/ui/ViewTemplate",
"text": "\\define frame-classes()\ntc-tiddler-frame tc-tiddler-view-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$ $(tiddlerTagClasses)$\n\\end\n\\define folded-state()\n$:/state/folded/$(currentTiddler)$\n\\end\n<$set name=\"storyTiddler\" value=<<currentTiddler>>><$set name=\"tiddlerInfoState\" value=<<qualify \"$:/state/popup/tiddler-info\">>><$tiddler tiddler=<<currentTiddler>>><div class=<<frame-classes>>><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewTemplate]!has[draft.of]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>>/></$list>\n</div>\n</$tiddler></$set></$set>\n"
},
"$:/core/ui/Buttons/clone": {
"title": "$:/core/ui/Buttons/clone",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/clone-button}} {{$:/language/Buttons/Clone/Caption}}",
"description": "{{$:/language/Buttons/Clone/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-new-tiddler\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Clone/Hint}} aria-label={{$:/language/Buttons/Clone/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/clone-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Clone/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/close-others": {
"title": "$:/core/ui/Buttons/close-others",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/close-others-button}} {{$:/language/Buttons/CloseOthers/Caption}}",
"description": "{{$:/language/Buttons/CloseOthers/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-close-other-tiddlers\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/CloseOthers/Hint}} aria-label={{$:/language/Buttons/CloseOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/close-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/CloseOthers/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/close": {
"title": "$:/core/ui/Buttons/close",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/close-button}} {{$:/language/Buttons/Close/Caption}}",
"description": "{{$:/language/Buttons/Close/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/close-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Close/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/edit": {
"title": "$:/core/ui/Buttons/edit",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/edit-button}} {{$:/language/Buttons/Edit/Caption}}",
"description": "{{$:/language/Buttons/Edit/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-edit-tiddler\" tooltip={{$:/language/Buttons/Edit/Hint}} aria-label={{$:/language/Buttons/Edit/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/edit-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Edit/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/export-tiddler": {
"title": "$:/core/ui/Buttons/export-tiddler",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportTiddler/Caption}}",
"description": "{{$:/language/Buttons/ExportTiddler/Hint}}",
"text": "\\define makeExportFilter()\n[[$(currentTiddler)$]]\n\\end\n<$macrocall $name=\"exportButton\" exportFilter=<<makeExportFilter>> lingoBase=\"$:/language/Buttons/ExportTiddler/\" baseFilename=<<currentTiddler>>/>"
},
"$:/core/ui/Buttons/fold-bar": {
"title": "$:/core/ui/Buttons/fold-bar",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/chevron-up}} {{$:/language/Buttons/Fold/FoldBar/Caption}}",
"description": "{{$:/language/Buttons/Fold/FoldBar/Hint}}",
"text": "<!-- This dummy toolbar button is here to allow visibility of the fold-bar to be controlled as if it were a toolbar button -->"
},
"$:/core/ui/Buttons/fold-others": {
"title": "$:/core/ui/Buttons/fold-others",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/fold-others-button}} {{$:/language/Buttons/FoldOthers/Caption}}",
"description": "{{$:/language/Buttons/FoldOthers/Hint}}",
"text": "\\whitespace trim\n<$button tooltip={{$:/language/Buttons/FoldOthers/Hint}} aria-label={{$:/language/Buttons/FoldOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-other-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/FoldOthers/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/fold": {
"title": "$:/core/ui/Buttons/fold",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/fold-button}} {{$:/language/Buttons/Fold/Caption}}",
"description": "{{$:/language/Buttons/Fold/Hint}}",
"text": "\\whitespace trim\n<$reveal type=\"nomatch\" state=<<folded-state>> text=\"hide\" default=\"show\">\n<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Fold/Caption}}/>\n</span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<folded-state>> text=\"hide\" default=\"show\">\n<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Unfold/Caption}}/>\n</span>\n</$list>\n</$button>\n</$reveal>"
},
"$:/core/ui/Buttons/info": {
"title": "$:/core/ui/Buttons/info",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/info-button}} {{$:/language/Buttons/Info/Caption}}",
"description": "{{$:/language/Buttons/Info/Hint}}",
"text": "\\whitespace trim\n\\define button-content()\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/info-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Info/Caption}}/>\n</span>\n</$list>\n\\end\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"popup\">\n<$button popup=<<tiddlerInfoState>> tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"sticky\">\n<$reveal state=<<tiddlerInfoState>> type=\"match\" text=\"\" default=\"\">\n<$button set=<<tiddlerInfoState>> setTo=\"yes\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n<$reveal state=<<tiddlerInfoState>> type=\"nomatch\" text=\"\" default=\"\">\n<$button set=<<tiddlerInfoState>> setTo=\"\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n</$reveal>"
},
"$:/core/ui/Buttons/more-tiddler-actions": {
"title": "$:/core/ui/Buttons/more-tiddler-actions",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
"description": "{{$:/language/Buttons/More/Hint}}",
"text": "\\whitespace trim\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/More/Caption}}/>\n</span>\n</$list>\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"below\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]] -[[$:/core/ui/Buttons/more-tiddler-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$set>\n\n</$reveal>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>"
},
"$:/core/ui/Buttons/new-here": {
"title": "$:/core/ui/Buttons/new-here",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/new-here-button}} {{$:/language/Buttons/NewHere/Caption}}",
"description": "{{$:/language/Buttons/NewHere/Hint}}",
"text": "\\whitespace trim\n\\define newHereButtonTags()\n[[$(currentTiddler)$]]\n\\end\n\\define newHereButton()\n<$button tooltip={{$:/language/Buttons/NewHere/Hint}} aria-label={{$:/language/Buttons/NewHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-new-tiddler\" tags=<<newHereButtonTags>>/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/new-here-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/NewHere/Caption}}/>\n</span>\n</$list>\n</$button>\n\\end\n<<newHereButton>>"
},
"$:/core/ui/Buttons/new-journal-here": {
"title": "$:/core/ui/Buttons/new-journal-here",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournalHere/Caption}}",
"description": "{{$:/language/Buttons/NewJournalHere/Hint}}",
"text": "\\whitespace trim\n\\define journalButtonTags()\n[[$(currentTiddlerTag)$]] $(journalTags)$\n\\end\n\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournalHere/Hint}} aria-label={{$:/language/Buttons/NewJournalHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<now \"$(journalTitleTemplate)$\">> tags=<<journalButtonTags>>/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/NewJournalHere/Caption}}/>\n</span>\n</$list>\n</$button>\n\\end\n<$set name=\"journalTitleTemplate\" value={{$:/config/NewJournal/Title}}>\n<$set name=\"journalTags\" value={{$:/config/NewJournal/Tags}}>\n<$set name=\"currentTiddlerTag\" value=<<currentTiddler>>>\n<<journalButton>>\n</$set>\n</$set>\n</$set>"
},
"$:/core/ui/Buttons/open-window": {
"title": "$:/core/ui/Buttons/open-window",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/open-window}} {{$:/language/Buttons/OpenWindow/Caption}}",
"description": "{{$:/language/Buttons/OpenWindow/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-open-window\" tooltip={{$:/language/Buttons/OpenWindow/Hint}} aria-label={{$:/language/Buttons/OpenWindow/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/open-window}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/OpenWindow/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/permalink": {
"title": "$:/core/ui/Buttons/permalink",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/permalink-button}} {{$:/language/Buttons/Permalink/Caption}}",
"description": "{{$:/language/Buttons/Permalink/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-permalink\" tooltip={{$:/language/Buttons/Permalink/Hint}} aria-label={{$:/language/Buttons/Permalink/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/permalink-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Permalink/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/permaview": {
"title": "$:/core/ui/Buttons/permaview",
"tags": "$:/tags/ViewToolbar $:/tags/PageControls",
"caption": "{{$:/core/images/permaview-button}} {{$:/language/Buttons/Permaview/Caption}}",
"description": "{{$:/language/Buttons/Permaview/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-permaview\" tooltip={{$:/language/Buttons/Permaview/Hint}} aria-label={{$:/language/Buttons/Permaview/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/permaview-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Permaview/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/DefaultTiddlers": {
"title": "$:/DefaultTiddlers",
"text": "GettingStarted\n"
},
"$:/temp/advancedsearch": {
"title": "$:/temp/advancedsearch",
"text": ""
},
"$:/snippets/allfields": {
"title": "$:/snippets/allfields",
"text": "\\define renderfield(title)\n<tr class=\"tc-view-field\"><td class=\"tc-view-field-name\">''$title$'':</td><td class=\"tc-view-field-value\">//{{$:/language/Docs/Fields/$title$}}//</td></tr>\n\\end\n<table class=\"tc-view-field-table\"><tbody><$list filter=\"[fields[]sort[title]]\" variable=\"listItem\"><$macrocall $name=\"renderfield\" title=<<listItem>>/></$list>\n</tbody></table>\n"
},
"$:/config/AnimationDuration": {
"title": "$:/config/AnimationDuration",
"text": "400"
},
"$:/config/AutoSave": {
"title": "$:/config/AutoSave",
"text": "yes"
},
"$:/config/BitmapEditor/Colour": {
"title": "$:/config/BitmapEditor/Colour",
"text": "#444"
},
"$:/config/BitmapEditor/ImageSizes": {
"title": "$:/config/BitmapEditor/ImageSizes",
"text": "[[62px 100px]] [[100px 62px]] [[124px 200px]] [[200px 124px]] [[248px 400px]] [[371px 600px]] [[400px 248px]] [[556px 900px]] [[600px 371px]] [[742px 1200px]] [[900px 556px]] [[1200px 742px]]"
},
"$:/config/BitmapEditor/LineWidth": {
"title": "$:/config/BitmapEditor/LineWidth",
"text": "3px"
},
"$:/config/BitmapEditor/LineWidths": {
"title": "$:/config/BitmapEditor/LineWidths",
"text": "0.25px 0.5px 1px 2px 3px 4px 6px 8px 10px 16px 20px 28px 40px 56px 80px"
},
"$:/config/BitmapEditor/Opacities": {
"title": "$:/config/BitmapEditor/Opacities",
"text": "0.01 0.025 0.05 0.075 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0"
},
"$:/config/BitmapEditor/Opacity": {
"title": "$:/config/BitmapEditor/Opacity",
"text": "1.0"
},
"$:/config/DefaultSidebarTab": {
"title": "$:/config/DefaultSidebarTab",
"text": "$:/core/ui/SideBar/Open"
},
"$:/config/DownloadSaver/AutoSave": {
"title": "$:/config/DownloadSaver/AutoSave",
"text": "no"
},
"$:/config/Drafts/TypingTimeout": {
"title": "$:/config/Drafts/TypingTimeout",
"text": "400"
},
"$:/config/EditTemplateFields/Visibility/title": {
"title": "$:/config/EditTemplateFields/Visibility/title",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/tags": {
"title": "$:/config/EditTemplateFields/Visibility/tags",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/text": {
"title": "$:/config/EditTemplateFields/Visibility/text",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/creator": {
"title": "$:/config/EditTemplateFields/Visibility/creator",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/created": {
"title": "$:/config/EditTemplateFields/Visibility/created",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/modified": {
"title": "$:/config/EditTemplateFields/Visibility/modified",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/modifier": {
"title": "$:/config/EditTemplateFields/Visibility/modifier",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/type": {
"title": "$:/config/EditTemplateFields/Visibility/type",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/draft.title": {
"title": "$:/config/EditTemplateFields/Visibility/draft.title",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/draft.of": {
"title": "$:/config/EditTemplateFields/Visibility/draft.of",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/revision": {
"title": "$:/config/EditTemplateFields/Visibility/revision",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/bag": {
"title": "$:/config/EditTemplateFields/Visibility/bag",
"text": "hide"
},
"$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4": {
"title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4",
"text": "hide"
},
"$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5": {
"title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5",
"text": "hide"
},
"$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6": {
"title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6",
"text": "hide"
},
"$:/config/EditorTypeMappings/image/gif": {
"title": "$:/config/EditorTypeMappings/image/gif",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/jpeg": {
"title": "$:/config/EditorTypeMappings/image/jpeg",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/jpg": {
"title": "$:/config/EditorTypeMappings/image/jpg",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/png": {
"title": "$:/config/EditorTypeMappings/image/png",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/x-icon": {
"title": "$:/config/EditorTypeMappings/image/x-icon",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/text/vnd.tiddlywiki": {
"title": "$:/config/EditorTypeMappings/text/vnd.tiddlywiki",
"text": "text"
},
"$:/config/Manager/Show": {
"title": "$:/config/Manager/Show",
"text": "tiddlers"
},
"$:/config/Manager/Filter": {
"title": "$:/config/Manager/Filter",
"text": ""
},
"$:/config/Manager/Order": {
"title": "$:/config/Manager/Order",
"text": "forward"
},
"$:/config/Manager/Sort": {
"title": "$:/config/Manager/Sort",
"text": "title"
},
"$:/config/Manager/System": {
"title": "$:/config/Manager/System",
"text": "system"
},
"$:/config/Manager/Tag": {
"title": "$:/config/Manager/Tag",
"text": ""
},
"$:/state/popup/manager/item/$:/Manager/ItemMain/RawText": {
"title": "$:/state/popup/manager/item/$:/Manager/ItemMain/RawText",
"text": "hide"
},
"$:/config/MissingLinks": {
"title": "$:/config/MissingLinks",
"text": "yes"
},
"$:/config/Navigation/UpdateAddressBar": {
"title": "$:/config/Navigation/UpdateAddressBar",
"text": "no"
},
"$:/config/Navigation/UpdateHistory": {
"title": "$:/config/Navigation/UpdateHistory",
"text": "no"
},
"$:/config/OfficialPluginLibrary": {
"title": "$:/config/OfficialPluginLibrary",
"tags": "$:/tags/PluginLibrary",
"url": "https://tiddlywiki.com/library/v5.1.15/index.html",
"caption": "{{$:/language/OfficialPluginLibrary}}",
"text": "{{$:/language/OfficialPluginLibrary/Hint}}\n"
},
"$:/config/Navigation/openLinkFromInsideRiver": {
"title": "$:/config/Navigation/openLinkFromInsideRiver",
"text": "below"
},
"$:/config/Navigation/openLinkFromOutsideRiver": {
"title": "$:/config/Navigation/openLinkFromOutsideRiver",
"text": "top"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/manager": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/manager",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/print": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/print",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all",
"text": "hide"
},
"$:/config/Performance/Instrumentation": {
"title": "$:/config/Performance/Instrumentation",
"text": "no"
},
"$:/config/SaveWikiButton/Template": {
"title": "$:/config/SaveWikiButton/Template",
"text": "$:/core/save/all"
},
"$:/config/SaverFilter": {
"title": "$:/config/SaverFilter",
"text": "[all[]] -[[$:/HistoryList]] -[[$:/StoryList]] -[[$:/Import]] -[[$:/isEncrypted]] -[[$:/UploadName]] -[prefix[$:/state/]] -[prefix[$:/temp/]]"
},
"$:/config/Search/AutoFocus": {
"title": "$:/config/Search/AutoFocus",
"text": "true"
},
"$:/config/Search/MinLength": {
"title": "$:/config/Search/MinLength",
"text": "3"
},
"$:/config/SearchResults/Default": {
"title": "$:/config/SearchResults/Default",
"text": "$:/core/ui/DefaultSearchResultList"
},
"$:/config/ShortcutInfo/bold": {
"title": "$:/config/ShortcutInfo/bold",
"text": "{{$:/language/Buttons/Bold/Hint}}"
},
"$:/config/ShortcutInfo/cancel-edit-tiddler": {
"title": "$:/config/ShortcutInfo/cancel-edit-tiddler",
"text": "{{$:/language/Buttons/Cancel/Hint}}"
},
"$:/config/ShortcutInfo/excise": {
"title": "$:/config/ShortcutInfo/excise",
"text": "{{$:/language/Buttons/Excise/Hint}}"
},
"$:/config/ShortcutInfo/heading-1": {
"title": "$:/config/ShortcutInfo/heading-1",
"text": "{{$:/language/Buttons/Heading1/Hint}}"
},
"$:/config/ShortcutInfo/heading-2": {
"title": "$:/config/ShortcutInfo/heading-2",
"text": "{{$:/language/Buttons/Heading2/Hint}}"
},
"$:/config/ShortcutInfo/heading-3": {
"title": "$:/config/ShortcutInfo/heading-3",
"text": "{{$:/language/Buttons/Heading3/Hint}}"
},
"$:/config/ShortcutInfo/heading-4": {
"title": "$:/config/ShortcutInfo/heading-4",
"text": "{{$:/language/Buttons/Heading4/Hint}}"
},
"$:/config/ShortcutInfo/heading-5": {
"title": "$:/config/ShortcutInfo/heading-5",
"text": "{{$:/language/Buttons/Heading5/Hint}}"
},
"$:/config/ShortcutInfo/heading-6": {
"title": "$:/config/ShortcutInfo/heading-6",
"text": "{{$:/language/Buttons/Heading6/Hint}}"
},
"$:/config/ShortcutInfo/italic": {
"title": "$:/config/ShortcutInfo/italic",
"text": "{{$:/language/Buttons/Italic/Hint}}"
},
"$:/config/ShortcutInfo/link": {
"title": "$:/config/ShortcutInfo/link",
"text": "{{$:/language/Buttons/Link/Hint}}"
},
"$:/config/ShortcutInfo/list-bullet": {
"title": "$:/config/ShortcutInfo/list-bullet",
"text": "{{$:/language/Buttons/ListBullet/Hint}}"
},
"$:/config/ShortcutInfo/list-number": {
"title": "$:/config/ShortcutInfo/list-number",
"text": "{{$:/language/Buttons/ListNumber/Hint}}"
},
"$:/config/ShortcutInfo/mono-block": {
"title": "$:/config/ShortcutInfo/mono-block",
"text": "{{$:/language/Buttons/MonoBlock/Hint}}"
},
"$:/config/ShortcutInfo/mono-line": {
"title": "$:/config/ShortcutInfo/mono-line",
"text": "{{$:/language/Buttons/MonoLine/Hint}}"
},
"$:/config/ShortcutInfo/picture": {
"title": "$:/config/ShortcutInfo/picture",
"text": "{{$:/language/Buttons/Picture/Hint}}"
},
"$:/config/ShortcutInfo/preview": {
"title": "$:/config/ShortcutInfo/preview",
"text": "{{$:/language/Buttons/Preview/Hint}}"
},
"$:/config/ShortcutInfo/quote": {
"title": "$:/config/ShortcutInfo/quote",
"text": "{{$:/language/Buttons/Quote/Hint}}"
},
"$:/config/ShortcutInfo/save-tiddler": {
"title": "$:/config/ShortcutInfo/save-tiddler",
"text": "{{$:/language/Buttons/Save/Hint}}"
},
"$:/config/ShortcutInfo/stamp": {
"title": "$:/config/ShortcutInfo/stamp",
"text": "{{$:/language/Buttons/Stamp/Hint}}"
},
"$:/config/ShortcutInfo/strikethrough": {
"title": "$:/config/ShortcutInfo/strikethrough",
"text": "{{$:/language/Buttons/Strikethrough/Hint}}"
},
"$:/config/ShortcutInfo/subscript": {
"title": "$:/config/ShortcutInfo/subscript",
"text": "{{$:/language/Buttons/Subscript/Hint}}"
},
"$:/config/ShortcutInfo/superscript": {
"title": "$:/config/ShortcutInfo/superscript",
"text": "{{$:/language/Buttons/Superscript/Hint}}"
},
"$:/config/ShortcutInfo/underline": {
"title": "$:/config/ShortcutInfo/underline",
"text": "{{$:/language/Buttons/Underline/Hint}}"
},
"$:/config/SyncFilter": {
"title": "$:/config/SyncFilter",
"text": "[is[tiddler]] -[[$:/HistoryList]] -[[$:/Import]] -[[$:/isEncrypted]] -[prefix[$:/status/]] -[prefix[$:/state/]] -[prefix[$:/temp/]]"
},
"$:/config/TextEditor/EditorHeight/Height": {
"title": "$:/config/TextEditor/EditorHeight/Height",
"text": "400px"
},
"$:/config/TextEditor/EditorHeight/Mode": {
"title": "$:/config/TextEditor/EditorHeight/Mode",
"text": "auto"
},
"$:/config/TiddlerInfo/Default": {
"title": "$:/config/TiddlerInfo/Default",
"text": "$:/core/ui/TiddlerInfo/Fields"
},
"$:/config/TiddlerInfo/Mode": {
"title": "$:/config/TiddlerInfo/Mode",
"text": "popup"
},
"$:/config/Tiddlers/TitleLinks": {
"title": "$:/config/Tiddlers/TitleLinks",
"text": "no"
},
"$:/config/Toolbar/ButtonClass": {
"title": "$:/config/Toolbar/ButtonClass",
"text": "tc-btn-invisible"
},
"$:/config/Toolbar/Icons": {
"title": "$:/config/Toolbar/Icons",
"text": "yes"
},
"$:/config/Toolbar/Text": {
"title": "$:/config/Toolbar/Text",
"text": "no"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions",
"text": "show"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others",
"text": "hide"
},
"$:/config/shortcuts-mac/bold": {
"title": "$:/config/shortcuts-mac/bold",
"text": "meta-B"
},
"$:/config/shortcuts-mac/italic": {
"title": "$:/config/shortcuts-mac/italic",
"text": "meta-I"
},
"$:/config/shortcuts-mac/underline": {
"title": "$:/config/shortcuts-mac/underline",
"text": "meta-U"
},
"$:/config/shortcuts-not-mac/bold": {
"title": "$:/config/shortcuts-not-mac/bold",
"text": "ctrl-B"
},
"$:/config/shortcuts-not-mac/italic": {
"title": "$:/config/shortcuts-not-mac/italic",
"text": "ctrl-I"
},
"$:/config/shortcuts-not-mac/underline": {
"title": "$:/config/shortcuts-not-mac/underline",
"text": "ctrl-U"
},
"$:/config/shortcuts/cancel-edit-tiddler": {
"title": "$:/config/shortcuts/cancel-edit-tiddler",
"text": "escape"
},
"$:/config/shortcuts/excise": {
"title": "$:/config/shortcuts/excise",
"text": "ctrl-E"
},
"$:/config/shortcuts/heading-1": {
"title": "$:/config/shortcuts/heading-1",
"text": "ctrl-1"
},
"$:/config/shortcuts/heading-2": {
"title": "$:/config/shortcuts/heading-2",
"text": "ctrl-2"
},
"$:/config/shortcuts/heading-3": {
"title": "$:/config/shortcuts/heading-3",
"text": "ctrl-3"
},
"$:/config/shortcuts/heading-4": {
"title": "$:/config/shortcuts/heading-4",
"text": "ctrl-4"
},
"$:/config/shortcuts/heading-5": {
"title": "$:/config/shortcuts/heading-5",
"text": "ctrl-5"
},
"$:/config/shortcuts/heading-6": {
"title": "$:/config/shortcuts/heading-6",
"text": "ctrl-6"
},
"$:/config/shortcuts/link": {
"title": "$:/config/shortcuts/link",
"text": "ctrl-L"
},
"$:/config/shortcuts/list-bullet": {
"title": "$:/config/shortcuts/list-bullet",
"text": "ctrl-shift-L"
},
"$:/config/shortcuts/list-number": {
"title": "$:/config/shortcuts/list-number",
"text": "ctrl-shift-N"
},
"$:/config/shortcuts/mono-block": {
"title": "$:/config/shortcuts/mono-block",
"text": "ctrl-shift-M"
},
"$:/config/shortcuts/mono-line": {
"title": "$:/config/shortcuts/mono-line",
"text": "ctrl-M"
},
"$:/config/shortcuts/picture": {
"title": "$:/config/shortcuts/picture",
"text": "ctrl-shift-I"
},
"$:/config/shortcuts/preview": {
"title": "$:/config/shortcuts/preview",
"text": "alt-P"
},
"$:/config/shortcuts/quote": {
"title": "$:/config/shortcuts/quote",
"text": "ctrl-Q"
},
"$:/config/shortcuts/save-tiddler": {
"title": "$:/config/shortcuts/save-tiddler",
"text": "ctrl+enter"
},
"$:/config/shortcuts/stamp": {
"title": "$:/config/shortcuts/stamp",
"text": "ctrl-S"
},
"$:/config/shortcuts/strikethrough": {
"title": "$:/config/shortcuts/strikethrough",
"text": "ctrl-T"
},
"$:/config/shortcuts/subscript": {
"title": "$:/config/shortcuts/subscript",
"text": "ctrl-shift-B"
},
"$:/config/shortcuts/superscript": {
"title": "$:/config/shortcuts/superscript",
"text": "ctrl-shift-P"
},
"$:/config/WikiParserRules/Inline/wikilink": {
"title": "$:/config/WikiParserRules/Inline/wikilink",
"text": "enable"
},
"$:/snippets/currpalettepreview": {
"title": "$:/snippets/currpalettepreview",
"text": "\\define swatchStyle()\nbackground-color: $(swatchColour)$;\n\\end\n\\define swatch(colour)\n<$set name=\"swatchColour\" value={{##$colour$}}>\n<div class=\"tc-swatch\" style=<<swatchStyle>>/>\n</$set>\n\\end\n<div class=\"tc-swatches-horiz\">\n<<swatch foreground>>\n<<swatch background>>\n<<swatch muted-foreground>>\n<<swatch primary>>\n<<swatch page-background>>\n<<swatch tab-background>>\n<<swatch tiddler-info-background>>\n</div>\n"
},
"$:/snippets/download-wiki-button": {
"title": "$:/snippets/download-wiki-button",
"text": "\\define lingo-base() $:/language/ControlPanel/Tools/Download/\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-download-file\" $param=\"$:/core/save/all\" filename=\"index.html\"/>\n<<lingo Full/Caption>> {{$:/core/images/save-button}}\n</$button>"
},
"$:/language": {
"title": "$:/language",
"text": "$:/languages/en-GB"
},
"$:/snippets/languageswitcher": {
"title": "$:/snippets/languageswitcher",
"text": "{{$:/language/ControlPanel/Basics/Language/Prompt}} <$select tiddler=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[description]]\">\n<option value=<<currentTiddler>>><$view field=\"description\"><$view field=\"name\"><$view field=\"title\"/></$view></$view></option>\n</$list>\n</$select>"
},
"$:/core/macros/CSS": {
"title": "$:/core/macros/CSS",
"tags": "$:/tags/Macro",
"text": "\\define colour(name)\n<$transclude tiddler={{$:/palette}} index=\"$name$\"><$transclude tiddler=\"$:/palettes/Vanilla\" index=\"$name$\"/></$transclude>\n\\end\n\n\\define color(name)\n<<colour $name$>>\n\\end\n\n\\define box-shadow(shadow)\n``\n -webkit-box-shadow: $shadow$;\n -moz-box-shadow: $shadow$;\n box-shadow: $shadow$;\n``\n\\end\n\n\\define filter(filter)\n``\n -webkit-filter: $filter$;\n -moz-filter: $filter$;\n filter: $filter$;\n``\n\\end\n\n\\define transition(transition)\n``\n -webkit-transition: $transition$;\n -moz-transition: $transition$;\n transition: $transition$;\n``\n\\end\n\n\\define transform-origin(origin)\n``\n -webkit-transform-origin: $origin$;\n -moz-transform-origin: $origin$;\n transform-origin: $origin$;\n``\n\\end\n\n\\define background-linear-gradient(gradient)\n``\nbackground-image: linear-gradient($gradient$);\nbackground-image: -o-linear-gradient($gradient$);\nbackground-image: -moz-linear-gradient($gradient$);\nbackground-image: -webkit-linear-gradient($gradient$);\nbackground-image: -ms-linear-gradient($gradient$);\n``\n\\end\n\n\\define column-count(columns)\n``\n-moz-column-count: $columns$;\n-webkit-column-count: $columns$;\ncolumn-count: $columns$;\n``\n\\end\n\n\\define datauri(title)\n<$macrocall $name=\"makedatauri\" type={{$title$!!type}} text={{$title$}}/>\n\\end\n\n\\define if-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n\n\\define if-no-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n"
},
"$:/core/macros/colour-picker": {
"title": "$:/core/macros/colour-picker",
"tags": "$:/tags/Macro",
"text": "\\define colour-picker-update-recent()\n<$action-listops\n\t$tiddler=\"$:/config/ColourPicker/Recent\"\n\t$subfilter=\"$(colour-picker-value)$ [list[$:/config/ColourPicker/Recent]remove[$(colour-picker-value)$]] +[limit[8]]\"\n/>\n\\end\n\n\\define colour-picker-inner(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(colour-picker-value)$\"\"\">\n\n$(colour-picker-update-recent)$\n\n$actions$\n\n<div style=\"background-color: $(colour-picker-value)$; width: 100%; height: 100%; border-radius: 50%;\"/>\n\n</$button>\n\\end\n\n\\define colour-picker-recent-inner(actions)\n<$set name=\"colour-picker-value\" value=\"$(recentColour)$\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$set>\n\\end\n\n\\define colour-picker-recent(actions)\n{{$:/language/ColourPicker/Recent}} <$list filter=\"[list[$:/config/ColourPicker/Recent]]\" variable=\"recentColour\">\n<$macrocall $name=\"colour-picker-recent-inner\" actions=\"\"\"$actions$\"\"\"/></$list>\n\\end\n\n\\define colour-picker(actions)\n<div class=\"tc-colour-chooser\">\n\n<$macrocall $name=\"colour-picker-recent\" actions=\"\"\"$actions$\"\"\"/>\n\n---\n\n<$list filter=\"LightPink Pink Crimson LavenderBlush PaleVioletRed HotPink DeepPink MediumVioletRed Orchid Thistle Plum Violet Magenta Fuchsia DarkMagenta Purple MediumOrchid DarkViolet DarkOrchid Indigo BlueViolet MediumPurple MediumSlateBlue SlateBlue DarkSlateBlue Lavender GhostWhite Blue MediumBlue MidnightBlue DarkBlue Navy RoyalBlue CornflowerBlue LightSteelBlue LightSlateGrey SlateGrey DodgerBlue AliceBlue SteelBlue LightSkyBlue SkyBlue DeepSkyBlue LightBlue PowderBlue CadetBlue Azure LightCyan PaleTurquoise Cyan Aqua DarkTurquoise DarkSlateGrey DarkCyan Teal MediumTurquoise LightSeaGreen Turquoise Aquamarine MediumAquamarine MediumSpringGreen MintCream SpringGreen MediumSeaGreen SeaGreen Honeydew LightGreen PaleGreen DarkSeaGreen LimeGreen Lime ForestGreen Green DarkGreen Chartreuse LawnGreen GreenYellow DarkOliveGreen YellowGreen OliveDrab Beige LightGoldenrodYellow Ivory LightYellow Yellow Olive DarkKhaki LemonChiffon PaleGoldenrod Khaki Gold Cornsilk Goldenrod DarkGoldenrod FloralWhite OldLace Wheat Moccasin Orange PapayaWhip BlanchedAlmond NavajoWhite AntiqueWhite Tan BurlyWood Bisque DarkOrange Linen Peru PeachPuff SandyBrown Chocolate SaddleBrown Seashell Sienna LightSalmon Coral OrangeRed DarkSalmon Tomato MistyRose Salmon Snow LightCoral RosyBrown IndianRed Red Brown FireBrick DarkRed Maroon White WhiteSmoke Gainsboro LightGrey Silver DarkGrey Grey DimGrey Black\" variable=\"colour-picker-value\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$list>\n\n---\n\n<$edit-text tiddler=\"$:/config/ColourPicker/New\" tag=\"input\" default=\"\" placeholder=\"\"/> \n<$edit-text tiddler=\"$:/config/ColourPicker/New\" type=\"color\" tag=\"input\"/>\n<$set name=\"colour-picker-value\" value={{$:/config/ColourPicker/New}}>\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$set>\n\n</div>\n\n\\end\n"
},
"$:/core/macros/export": {
"title": "$:/core/macros/export",
"tags": "$:/tags/Macro",
"text": "\\define exportButtonFilename(baseFilename)\n$baseFilename$$(extension)$\n\\end\n\n\\define exportButton(exportFilter:\"[!is[system]sort[title]]\",lingoBase,baseFilename:\"tiddlers\")\n<span class=\"tc-popup-keep\"><$button popup=<<qualify \"$:/state/popup/export\">> tooltip={{$lingoBase$Hint}} aria-label={{$lingoBase$Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/export-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$lingoBase$Caption}}/></span>\n</$list>\n</$button></span><$reveal state=<<qualify \"$:/state/popup/export\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Exporter]]\">\n<$set name=\"extension\" value={{!!extension}}>\n<$button class=\"tc-btn-invisible\">\n<$action-sendmessage $message=\"tm-download-file\" $param=<<currentTiddler>> exportFilter=\"\"\"$exportFilter$\"\"\" filename=<<exportButtonFilename \"\"\"$baseFilename$\"\"\">>/>\n<$action-deletetiddler $tiddler=<<qualify \"$:/state/popup/export\">>/>\n<$transclude field=\"description\"/>\n</$button>\n</$set>\n</$list>\n</div>\n</$reveal>\n\\end\n"
},
"$:/core/macros/image-picker": {
"title": "$:/core/macros/image-picker",
"created": "20170715180840889",
"modified": "20170715180914005",
"tags": "$:/tags/Macro",
"type": "text/vnd.tiddlywiki",
"text": "\\define image-picker-thumbnail(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(imageTitle)$\"\"\">\n$actions$\n<$transclude tiddler=<<imageTitle>>/>\n</$button>\n\\end\n\n\\define image-picker-list(filter,actions)\n<$list filter=\"\"\"$filter$\"\"\" variable=\"imageTitle\">\n<$macrocall $name=\"image-picker-thumbnail\" actions=\"\"\"$actions$\"\"\"/>\n</$list>\n\\end\n\n\\define image-picker(actions,filter:\"[all[shadows+tiddlers]is[image]] -[type[application/pdf]] +[!has[draft.of]$subfilter$sort[title]]\",subfilter:\"\")\n<div class=\"tc-image-chooser\">\n<$vars state-system=<<qualify \"$:/state/image-picker/system\">>>\n<$checkbox tiddler=<<state-system>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"hide\">\n{{$:/language/SystemTiddlers/Include/Prompt}}\n</$checkbox>\n<$reveal state=<<state-system>> type=\"match\" text=\"hide\" default=\"hide\" tag=\"div\">\n<$macrocall $name=\"image-picker-list\" filter=\"\"\"$filter$ +[!is[system]]\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</$reveal>\n<$reveal state=<<state-system>> type=\"nomatch\" text=\"hide\" default=\"hide\" tag=\"div\">\n<$macrocall $name=\"image-picker-list\" filter=\"\"\"$filter$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</$reveal>\n</$vars>\n</div>\n\\end\n\n\\define image-picker-include-tagged-images(actions)\n<$macrocall $name=\"image-picker\" filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[!has[draft.of]sort[title]]\" actions=\"\"\"$actions$\"\"\"/>\n\\end\n"
},
"$:/core/macros/lingo": {
"title": "$:/core/macros/lingo",
"tags": "$:/tags/Macro",
"text": "\\define lingo-base()\n$:/language/\n\\end\n\n\\define lingo(title)\n{{$(lingo-base)$$title$}}\n\\end\n"
},
"$:/core/macros/list": {
"title": "$:/core/macros/list",
"tags": "$:/tags/Macro",
"text": "\\define list-links(filter,type:\"ul\",subtype:\"li\",class:\"\")\n<$type$ class=\"$class$\">\n<$list filter=\"$filter$\">\n<$subtype$>\n<$link to={{!!title}}>\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$link>\n</$subtype$>\n</$list>\n</$type$>\n\\end\n\n\\define list-links-draggable-drop-actions()\n<$action-listops $tiddler=<<targetTiddler>> $field=<<targetField>> $subfilter=\"+[insertbefore:currentTiddler<actionTiddler>]\"/>\n\\end\n\n\\define list-links-draggable(tiddler,field:\"list\",type:\"ul\",subtype:\"li\",class:\"\",itemTemplate)\n<$vars targetTiddler=\"\"\"$tiddler$\"\"\" targetField=\"\"\"$field$\"\"\">\n<$type$ class=\"$class$\">\n<$list filter=\"[list[$tiddler$!!$field$]]\">\n<$droppable actions=<<list-links-draggable-drop-actions>> tag=\"\"\"$subtype$\"\"\">\n<div class=\"tc-droppable-placeholder\">\n \n</div>\n<div>\n<$link to={{!!title}}>\n<$transclude tiddler=\"\"\"$itemTemplate$\"\"\">\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$transclude>\n</$link>\n</div>\n</$droppable>\n</$list>\n<$tiddler tiddler=\"\">\n<$droppable actions=<<list-links-draggable-drop-actions>> tag=\"\"\"$subtype$\"\"\">\n<div class=\"tc-droppable-placeholder\">\n \n</div>\n<div>\n \n</div>\n</$droppable>\n</$tiddler>\n</$type$>\n</$vars>\n\\end\n\n\\define list-tagged-draggable-drop-actions()\n<!-- Save the current ordering of the tiddlers with this tag -->\n<$set name=\"order\" filter=\"[<tag>tagging[]]\">\n<!-- Remove any list-after or list-before fields from the tiddlers with this tag -->\n<$list filter=\"[<tag>tagging[]]\">\n<$action-deletefield $field=\"list-before\"/>\n<$action-deletefield $field=\"list-after\"/>\n</$list>\n<!-- Assign the list field of the tag with the current ordering -->\n<$action-setfield $tiddler=<<tag>> $field=\"list\" $value=<<order>>/>\n<!-- Add the newly inserted item to the list -->\n<$action-listops $tiddler=<<tag>> $field=\"list\" $subfilter=\"+[insertbefore:currentTiddler<actionTiddler>]\"/>\n<!-- Make sure the newly added item has the right tag -->\n<$action-listops $tiddler=<<actionTiddler>> $tags=\"[<tag>]\"/>\n</$set>\n\\end\n\n\\define list-tagged-draggable(tag,itemTemplate,elementTag:\"div\")\n<$set name=\"tag\" value=\"\"\"$tag$\"\"\">\n<$list filter=\"[<tag>tagging[]]\">\n<$elementTag$ class=\"tc-menu-list-item\">\n<$droppable actions=<<list-tagged-draggable-drop-actions>>>\n<$elementTag$ class=\"tc-droppable-placeholder\">\n \n</$elementTag$>\n<$elementTag$>\n<$transclude tiddler=\"\"\"$itemTemplate$\"\"\">\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</$transclude>\n</$elementTag$>\n</$droppable>\n</$elementTag$>\n</$list>\n<$tiddler tiddler=\"\">\n<$droppable actions=<<list-tagged-draggable-drop-actions>>>\n<$elementTag$ class=\"tc-droppable-placeholder\">\n \n</$elementTag$>\n<$elementTag$ style=\"height:0.5em;\">\n</$elementTag$>\n</$droppable>\n</$tiddler>\n</$set>\n\\end\n"
},
"$:/core/macros/tabs": {
"title": "$:/core/macros/tabs",
"tags": "$:/tags/Macro",
"text": "\\define tabs(tabsList,default,state:\"$:/state/tab\",class,template,buttonTemplate)\n<div class=\"tc-tab-set $class$\">\n<div class=\"tc-tab-buttons $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\"><$set name=\"save-currentTiddler\" value=<<currentTiddler>>><$tiddler tiddler=<<currentTab>>><$button set=<<qualify \"$state$\">> setTo=<<currentTab>> default=\"$default$\" selectedClass=\"tc-tab-selected\" tooltip={{!!tooltip}}>\n<$tiddler tiddler=<<save-currentTiddler>>>\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude tiddler=\"$buttonTemplate$\" mode=\"inline\">\n<$transclude tiddler=<<currentTab>> field=\"caption\">\n<$macrocall $name=\"currentTab\" $type=\"text/plain\" $output=\"text/plain\"/>\n</$transclude>\n</$transclude>\n</$set></$tiddler></$button></$tiddler></$set></$list>\n</div>\n<div class=\"tc-tab-divider $class$\"/>\n<div class=\"tc-tab-content $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\">\n\n<$reveal type=\"match\" state=<<qualify \"$state$\">> text=<<currentTab>> default=\"$default$\">\n\n<$transclude tiddler=\"$template$\" mode=\"block\">\n\n<$transclude tiddler=<<currentTab>> mode=\"block\"/>\n\n</$transclude>\n\n</$reveal>\n\n</$list>\n</div>\n</div>\n\\end\n"
},
"$:/core/macros/tag-picker": {
"title": "$:/core/macros/tag-picker",
"tags": "$:/tags/Macro",
"text": "\\define add-tag-actions()\n<$action-sendmessage $message=\"tm-add-tag\" $param={{$:/temp/NewTagName}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/NewTagName\"/>\n\\end\n\n\\define tag-button()\n<$button class=\"tc-btn-invisible\" tag=\"a\">\n$(actions)$\n<$action-deletetiddler $tiddler=\"$:/temp/NewTagName\"/>\n<$macrocall $name=\"tag-pill\" tag=<<tag>>/>\n</$button>\n\\end\n\n\\define tag-picker(actions)\n<$set name=\"actions\" value=\"\"\"$actions$\"\"\">\n<div class=\"tc-edit-add-tag\">\n<span class=\"tc-add-tag-name\">\n<$keyboard key=\"ENTER\" actions=<<add-tag-actions>>>\n<$edit-text tiddler=\"$:/temp/NewTagName\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Tags/Add/Placeholder}} focusPopup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-edit-texteditor tc-popup-handle\"/>\n</$keyboard>\n</span> <$button popup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-btn-invisible\" tooltip={{$:/language/EditTemplate/Tags/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Tags/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button> <span class=\"tc-add-tag-button\">\n<$set name=\"tag\" value={{$:/temp/NewTagName}}>\n<$button set=\"$:/temp/NewTagName\" setTo=\"\" class=\"\">\n$actions$\n<$action-deletetiddler $tiddler=\"$:/temp/NewTagName\"/>\n{{$:/language/EditTemplate/Tags/Add/Button}}\n</$button>\n</$set>\n</span>\n</div>\n<div class=\"tc-block-dropdown-wrapper\">\n<$reveal state=<<qualify \"$:/state/popup/tags-auto-complete\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown\">\n<$list filter=\"[tags[]!is[system]search:title{$:/temp/NewTagName}sort[]]\" variable=\"tag\">\n<<tag-button>>\n</$list>\n<hr>\n<$list filter=\"[tags[]is[system]search:title{$:/temp/NewTagName}sort[]]\" variable=\"tag\">\n<<tag-button>>\n</$list>\n</div>\n</$reveal>\n</div>\n</$set>\n\\end\n"
},
"$:/core/macros/tag": {
"title": "$:/core/macros/tag",
"tags": "$:/tags/Macro",
"text": "\\define tag-pill-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-pill-inner(tag,icon,colour,fallbackTarget,colourA,colourB,element-tag,element-attributes,actions)\n<$vars foregroundColor=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">> backgroundColor=\"\"\"$colour$\"\"\">\n<$element-tag$ $element-attributes$ class=\"tc-tag-label tc-btn-invisible\" style=<<tag-pill-styles>>>\n$actions$<$transclude tiddler=\"\"\"$icon$\"\"\"/> <$view tiddler=\"\"\"$tag$\"\"\" field=\"title\" format=\"text\" />\n</$element-tag$>\n</$vars>\n\\end\n\n\\define tag-pill-body(tag,icon,colour,palette,element-tag,element-attributes,actions)\n<$macrocall $name=\"tag-pill-inner\" tag=\"\"\"$tag$\"\"\" icon=\"\"\"$icon$\"\"\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} element-tag=\"\"\"$element-tag$\"\"\" element-attributes=\"\"\"$element-attributes$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n\\end\n\n\\define tag-pill(tag,element-tag:\"span\",element-attributes:\"\",actions:\"\")\n<span class=\"tc-tag-list-item\">\n<$macrocall $name=\"tag-pill-body\" tag=\"\"\"$tag$\"\"\" icon={{$tag$!!icon}} colour={{$tag$!!color}} palette={{$:/palette}} element-tag=\"\"\"$element-tag$\"\"\" element-attributes=\"\"\"$element-attributes$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</span>\n\\end\n\n\\define tag(tag)\n{{$tag$||$:/core/ui/TagTemplate}}\n\\end\n"
},
"$:/core/macros/thumbnails": {
"title": "$:/core/macros/thumbnails",
"tags": "$:/tags/Macro",
"text": "\\define thumbnail(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<$link to=\"\"\"$link$\"\"\"><div class=\"tc-thumbnail-wrapper\">\n<div class=\"tc-thumbnail-image\" style=\"width:$width$px;height:$height$px;\"><$reveal type=\"nomatch\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" style=\"width:$width$px;height:$height$px;\">\n[img[$image$]]\n</$reveal><$reveal type=\"match\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" class=\"tc-thumbnail-background\" style=\"width:$width$px;height:$height$px;background-color:$background-color$;\"></$reveal></div><div class=\"tc-thumbnail-icon\" style=\"fill:$color$;color:$color$;\">\n$icon$\n</div><div class=\"tc-thumbnail-caption\">\n$caption$\n</div>\n</div></$link>\n\\end\n\n\\define thumbnail-right(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<div class=\"tc-thumbnail-right-wrapper\"><<thumbnail \"\"\"$link$\"\"\" \"\"\"$icon$\"\"\" \"\"\"$color$\"\"\" \"\"\"$background-color$\"\"\" \"\"\"$image$\"\"\" \"\"\"$caption$\"\"\" \"\"\"$width$\"\"\" \"\"\"$height$\"\"\">></div>\n\\end\n\n\\define list-thumbnails(filter,width:\"280\",height:\"157\")\n<$list filter=\"\"\"$filter$\"\"\"><$macrocall $name=\"thumbnail\" link={{!!link}} icon={{!!icon}} color={{!!color}} background-color={{!!background-color}} image={{!!image}} caption={{!!caption}} width=\"\"\"$width$\"\"\" height=\"\"\"$height$\"\"\"/></$list>\n\\end\n"
},
"$:/core/macros/timeline": {
"title": "$:/core/macros/timeline",
"created": "20141212105914482",
"modified": "20141212110330815",
"tags": "$:/tags/Macro",
"text": "\\define timeline-title()\n<!-- Override this macro with a global macro \n of the same name if you need to change \n how titles are displayed on the timeline \n -->\n<$view field=\"title\"/>\n\\end\n\\define timeline(limit:\"100\",format:\"DDth MMM YYYY\",subfilter:\"\",dateField:\"modified\")\n<div class=\"tc-timeline\">\n<$list filter=\"[!is[system]$subfilter$has[$dateField$]!sort[$dateField$]limit[$limit$]eachday[$dateField$]]\">\n<div class=\"tc-menu-list-item\">\n<$view field=\"$dateField$\" format=\"date\" template=\"$format$\"/>\n<$list filter=\"[sameday:$dateField${!!$dateField$}!is[system]$subfilter$!sort[$dateField$]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}>\n<<timeline-title>>\n</$link>\n</div>\n</$list>\n</div>\n</$list>\n</div>\n\\end\n"
},
"$:/core/macros/toc": {
"title": "$:/core/macros/toc",
"tags": "$:/tags/Macro",
"text": "\\define toc-caption()\n<$set name=\"tv-wikilinks\" value=\"no\">\n <$transclude field=\"caption\">\n <$view field=\"title\"/>\n </$transclude>\n</$set>\n\\end\n\n\\define toc-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<ol class=\"tc-toc\">\n <$list filter=\"\"\"[all[shadows+tiddlers]tag[$tag$]!has[draft.of]$sort$] $exclude$\"\"\">\n <$vars item=<<currentTiddler>> path=\"\"\"$path$/$tag$\"\"\" excluded=\"\"\"$exclude$ -[[$tag$]]\"\"\">\n <$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" emptyValue=\"toc-item\" value=\"toc-item-selected\">\n <li class=<<toc-item-class>>>\n <$list filter=\"[all[current]toc-link[no]]\" emptyMessage=\"<$link><$view field='caption'><$view field='title'/></$view></$link>\">\n <<toc-caption>>\n </$list>\n <$macrocall $name=\"toc-body\" tag=<<item>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\" exclude=<<excluded>> path=<<path>>/>\n </li>\n </$set>\n </$vars>\n </$list>\n</ol>\n\\end\n\n\\define toc(tag,sort:\"\",itemClassFilter:\" \")\n<<toc-body tag:\"\"\"$tag$\"\"\" sort:\"\"\"$sort$\"\"\" itemClassFilter:\"\"\"$itemClassFilter$\"\"\">>\n\\end\n\n\\define toc-linked-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<!-- helper function -->\n<$set name=\"toc-state\" value=<<qualify \"\"\"$:/state/toc$path$-$(currentTiddler)$\"\"\">>>\n <$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" emptyValue=\"toc-item\" value=\"toc-item-selected\">\n <li class=<<toc-item-class>>>\n <$link>\n <$reveal type=\"nomatch\" state=<<toc-state>> text=\"open\">\n <$button set=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible\">\n {{$:/core/images/right-arrow}}\n </$button>\n </$reveal>\n <$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n <$button set=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible\">\n {{$:/core/images/down-arrow}}\n </$button>\n </$reveal>\n <<toc-caption>>\n </$link>\n <$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n <$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\" exclude=\"\"\"$exclude$\"\"\" path=\"\"\"$path$\"\"\"/>\n </$reveal>\n </li>\n </$set>\n</$set>\n\\end\n\n\\define toc-unlinked-expandable-body(tag,sort:\"\",itemClassFilter:\" \",exclude,path)\n<!-- helper function -->\n<$set name=\"toc-state\" value=<<qualify \"\"\"$:/state/toc$path$-$(currentTiddler)$\"\"\">>>\n <$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" emptyValue=\"toc-item\" value=\"toc-item-selected\">\n <li class=<<toc-item-class>>>\n <$reveal type=\"nomatch\" state=<<toc-state>> text=\"open\">\n <$button set=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible\">\n {{$:/core/images/right-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n <$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n <$button set=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible\">\n {{$:/core/images/down-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n <$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n <$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\" exclude=\"\"\"$exclude$\"\"\" path=\"\"\"$path$\"\"\"/>\n </$reveal>\n </li>\n </$set>\n</$set>\n\\end\n\n\\define toc-expandable-empty-message()\n<<toc-linked-expandable-body tag:\"\"\"$(tag)$\"\"\" sort:\"\"\"$(sort)$\"\"\" itemClassFilter:\"\"\"$(itemClassFilter)$\"\"\" exclude:\"\"\"$(excluded)$\"\"\" path:\"\"\"$(path)$\"\"\">>\n\\end\n\n\\define toc-expandable(tag,sort:\"\",itemClassFilter:\" \",exclude,path)\n<$vars tag=\"\"\"$tag$\"\"\" sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\" excluded=\"\"\"$exclude$ -[[$tag$]]\"\"\" path=\"\"\"$path$/$tag$\"\"\">\n <ol class=\"tc-toc toc-expandable\">\n <$list filter=\"\"\"[all[shadows+tiddlers]tag[$tag$]!has[draft.of]$sort$] $exclude$\"\"\">\n <$list filter=\"[all[current]toc-link[no]]\" emptyMessage=<<toc-expandable-empty-message>> >\n <$macrocall $name=\"toc-unlinked-expandable-body\" tag=\"\"\"$tag$\"\"\" sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"itemClassFilter\"\"\" exclude=<<excluded>> path=<<path>> />\n </$list>\n </$list>\n </ol>\n</$vars>\n\\end\n\n\\define toc-linked-selective-expandable-body(tag,sort:\"\",itemClassFilter:\" \",exclude,path)\n<$set name=\"toc-state\" value=<<qualify \"\"\"$:/state/toc$path$-$(currentTiddler)$\"\"\">>>\n <$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" emptyValue=\"toc-item\" value=\"toc-item-selected\" >\n <li class=<<toc-item-class>>>\n <$link>\n <$list filter=\"[all[current]tagging[]limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button>\">\n <$reveal type=\"nomatch\" state=<<toc-state>> text=\"open\">\n <$button set=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible\">\n {{$:/core/images/right-arrow}}\n </$button>\n </$reveal>\n <$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n <$button set=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible\">\n {{$:/core/images/down-arrow}}\n </$button>\n </$reveal>\n </$list>\n <<toc-caption>>\n </$link>\n <$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n <$macrocall $name=\"toc-selective-expandable\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\" exclude=\"\"\"$exclude$\"\"\" path=\"\"\"$path$\"\"\"/>\n </$reveal>\n </li>\n </$set>\n</$set>\n\\end\n\n\\define toc-unlinked-selective-expandable-body(tag,sort:\"\",itemClassFilter:\" \",exclude,path)\n<$set name=\"toc-state\" value=<<qualify \"\"\"$:/state/toc$path$-$(currentTiddler)$\"\"\">>>\n <$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" emptyValue=\"toc-item\" value=\"toc-item-selected\">\n <li class=<<toc-item-class>>>\n <$list filter=\"[all[current]tagging[]limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button> <$view field='caption'><$view field='title'/></$view>\">\n <$reveal type=\"nomatch\" state=<<toc-state>> text=\"open\">\n <$button set=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible\">\n {{$:/core/images/right-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n <$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n <$button set=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible\">\n {{$:/core/images/down-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n </$list>\n <$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n <$macrocall $name=\"\"\"toc-selective-expandable\"\"\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\" exclude=\"\"\"$exclude$\"\"\" path=\"\"\"$path$\"\"\"/>\n </$reveal>\n </li>\n </$set>\n</$set>\n\\end\n\n\\define toc-selective-expandable-empty-message()\n<<toc-linked-selective-expandable-body tag:\"\"\"$(tag)$\"\"\" sort:\"\"\"$(sort)$\"\"\" itemClassFilter:\"\"\"$(itemClassFilter)$\"\"\" exclude:\"\"\"$(excluded)$\"\"\" path:\"\"\"$(path)$\"\"\">>\n\\end\n\n\\define toc-selective-expandable(tag,sort:\"\",itemClassFilter,exclude,path)\n<$vars tag=\"\"\"$tag$\"\"\" sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\" excluded=\"\"\"$exclude$ -[[$tag$]]\"\"\" path=\"\"\"$path$/$tag$\"\"\">\n <ol class=\"tc-toc toc-selective-expandable\">\n <$list filter=\"\"\"[all[shadows+tiddlers]tag[$tag$]!has[draft.of]$sort$] $exclude$\"\"\">\n <$list filter=\"[all[current]toc-link[no]]\" variable=\"ignore\" emptyMessage=<<toc-selective-expandable-empty-message>> >\n <$macrocall $name=toc-unlinked-selective-expandable-body tag=\"\"\"$tag$\"\"\" sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\" exclude=<<excluded>> path=<<path>> >\n </$list>\n </$list>\n </ol>\n</$vars>\n\\end\n\n\\define toc-tabbed-selected-item-filter(selectedTiddler)\n[all[current]field:title{$selectedTiddler$}]\n\\end\n\n\\define toc-tabbed-external-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$tiddler tiddler={{$selectedTiddler$}}>\n <div class=\"tc-tabbed-table-of-contents\">\n <$linkcatcher to=\"$selectedTiddler$\">\n <div class=\"tc-table-of-contents\">\n <$macrocall $name=\"toc-selective-expandable\" tag=\"\"\"$tag$\"\"\" sort=\"\"\"$sort$\"\"\" itemClassFilter=<<toc-tabbed-selected-item-filter selectedTiddler:\"\"\"$selectedTiddler$\"\"\">>/>\n </div>\n </$linkcatcher>\n <div class=\"tc-tabbed-table-of-contents-content\">\n <$reveal state=\"\"\"$selectedTiddler$\"\"\" type=\"nomatch\" text=\"\">\n <$transclude mode=\"block\" tiddler=\"$template$\">\n <h1><<toc-caption>></h1>\n <$transclude mode=\"block\">$missingText$</$transclude>\n </$transclude>\n </$reveal>\n <$reveal state=\"\"\"$selectedTiddler$\"\"\" type=\"match\" text=\"\">\n $unselectedText$\n </$reveal>\n </div>\n </div>\n</$tiddler>\n\\end\n\n\\define toc-tabbed-internal-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$linkcatcher to=\"\"\"$selectedTiddler$\"\"\">\n <$macrocall $name=\"toc-tabbed-external-nav\" tag=\"\"\"$tag$\"\"\" sort=\"\"\"$sort$\"\"\" selectedTiddler=\"\"\"$selectedTiddler$\"\"\" unselectedText=\"\"\"$unselectedText$\"\"\" missingText=\"\"\"$missingText$\"\"\" template=\"\"\"$template$\"\"\"/>\n</$linkcatcher>\n\\end\n\n"
},
"$:/core/macros/translink": {
"title": "$:/core/macros/translink",
"tags": "$:/tags/Macro",
"text": "\\define translink(title,mode:\"block\")\n<div style=\"border:1px solid #ccc; padding: 0.5em; background: black; foreground; white;\">\n<$link to=\"\"\"$title$\"\"\">\n<$text text=\"\"\"$title$\"\"\"/>\n</$link>\n<div style=\"border:1px solid #ccc; padding: 0.5em; background: white; foreground; black;\">\n<$transclude tiddler=\"\"\"$title$\"\"\" mode=\"$mode$\">\n\"<$text text=\"\"\"$title$\"\"\"/>\" is missing\n</$transclude>\n</div>\n</div>\n\\end\n"
},
"$:/core/macros/tree": {
"title": "$:/core/macros/tree",
"tags": "$:/tags/Macro",
"text": "\\define leaf-node(prefix)\n<li>\n<$list filter=\"\"\"[[$prefix$$(chunk)$]is[shadow]] [[$prefix$$(chunk)$]is[tiddler]] +[removeprefix[$prefix$]] +[limit[1]]\"\"\" \nemptyMessage=\"\"\"<$text text=\"$prefix$$(chunk)$\"/>\"\"\">\n<span>{{$:/core/images/file}}</span> <$link to=\"\"\"$prefix$$(chunk)$\"\"\">\n<$view field=\"title\"/>\n</$link> \n</$list>\n</li>\n\\end\n\n\\define branch-node(prefix)\n<$reveal type=\"nomatch\" text=\"\" default=\"\"\"$(chunk)$\"\"\">\n<li> \n<$list filter=\"\"\"[all[shadows+tiddlers]prefix[$prefix$$(chunk)$]] -[[$prefix$$(chunk)$]] +[limit[1]]\"\"\">\n<$reveal type=\"nomatch\" state=\"\"\"$:/state/tree/$prefix$$(chunk)$\"\"\" text=\"show\">\n<$button set=\"\"\"$:/state/tree/$prefix$$(chunk)$\"\"\" setTo=\"show\" class=\"tc-btn-invisible\">{{$:/core/images/folder}} <$text text=\"\"\"$(chunk)$\"\"\"/></$button>\n</$reveal>\n<$reveal type=\"match\" state=\"\"\"$:/state/tree/$prefix$$(chunk)$\"\"\" text=\"show\">\n<$button set=\"\"\"$:/state/tree/$prefix$$(chunk)$\"\"\" setTo=\"hide\" class=\"tc-btn-invisible\">{{$:/core/images/folder}} <$text text=\"\"\"$(chunk)$\"\"\"/></$button>\n</$reveal>\n</$list>\n<$list filter=\"\"\"[all[shadows+tiddlers]prefix[$prefix$$(chunk)$]] -[[$prefix$$(chunk)$]] +[limit[1]]\"\"\"><span>(<$count filter=\"\"\"[all[shadows+tiddlers]prefix[$prefix$$(chunk)$]] -[[$prefix$$(chunk)$]]\"\"\"/>)</span>\n<$reveal type=\"match\" state=\"\"\"$:/state/tree/$prefix$$(chunk)$\"\"\" text=\"show\">\n<$macrocall $name=\"tree-node\" prefix=\"\"\"$prefix$$(chunk)$\"\"\"/>\n</$reveal>\n</$list>\n</li>\n</$reveal>\n\\end\n\n\\define tree-node(prefix)\n<ol>\n<$list filter=\"[all[shadows+tiddlers]removeprefix[$prefix$]splitbefore[/]sort[title]] +[!suffix[/]]\" variable=\"chunk\">\n<<leaf-node \"\"\"$prefix$\"\"\">>\n</$list>\n<$list filter=\"[all[shadows+tiddlers]removeprefix[$prefix$]splitbefore[/]sort[title]] +[suffix[/]]\" variable=\"chunk\">\n<<branch-node \"\"\"$prefix$\"\"\">>\n</$list>\n</ol>\n\\end\n\n\\define tree(prefix)\n<div class=\"tc-tree\">\n<span><$text text=\"\"\"$prefix$\"\"\"/></span>\n<div>\n<$macrocall $name=\"tree-node\" prefix=\"\"\"$prefix$\"\"\"/>\n</div>\n</div>\n\\end\n"
},
"$:/snippets/minilanguageswitcher": {
"title": "$:/snippets/minilanguageswitcher",
"text": "<$select tiddler=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"description\"><$view field=\"name\"><$view field=\"title\"/></$view></$view></option>\n</$list>\n</$select>"
},
"$:/snippets/minithemeswitcher": {
"title": "$:/snippets/minithemeswitcher",
"text": "\\define lingo-base() $:/language/ControlPanel/Theme/\n<<lingo Prompt>> <$select tiddler=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"name\"><$view field=\"title\"/></$view></option>\n</$list>\n</$select>"
},
"$:/snippets/modules": {
"title": "$:/snippets/modules",
"text": "\\define describeModuleType(type)\n{{$:/language/Docs/ModuleTypes/$type$}}\n\\end\n<$list filter=\"[moduletypes[]]\">\n\n!! <$macrocall $name=\"currentTiddler\" $type=\"text/plain\" $output=\"text/plain\"/>\n\n<$macrocall $name=\"describeModuleType\" type=<<currentTiddler>>/>\n\n<ul><$list filter=\"[all[current]modules[]]\"><li><$link><<currentTiddler>></$link>\n</li>\n</$list>\n</ul>\n</$list>\n"
},
"$:/palette": {
"title": "$:/palette",
"text": "$:/palettes/Vanilla"
},
"$:/snippets/paletteeditor": {
"title": "$:/snippets/paletteeditor",
"text": "\\define lingo-base() $:/language/ControlPanel/Palette/Editor/\n\\define describePaletteColour(colour)\n<$transclude tiddler=\"$:/language/Docs/PaletteColours/$colour$\"><$text text=\"$colour$\"/></$transclude>\n\\end\n<$set name=\"currentTiddler\" value={{$:/palette}}>\n\n<<lingo Prompt>> <$link to={{$:/palette}}><$macrocall $name=\"currentTiddler\" $output=\"text/plain\"/></$link>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\" variable=\"listItem\">\n<<lingo Prompt/Modified>>\n<$button message=\"tm-delete-tiddler\" param={{$:/palette}}><<lingo Reset/Caption>></$button>\n</$list>\n\n<$list filter=\"[all[current]is[shadow]!is[tiddler]]\" variable=\"listItem\">\n<<lingo Clone/Prompt>>\n</$list>\n\n<$button message=\"tm-new-tiddler\" param={{$:/palette}}><<lingo Clone/Caption>></$button>\n\n<table>\n<tbody>\n<$list filter=\"[all[current]indexes[]]\" variable=\"colourName\">\n<tr>\n<td>\n''<$macrocall $name=\"describePaletteColour\" colour=<<colourName>>/>''<br/>\n<$macrocall $name=\"colourName\" $output=\"text/plain\"/>\n</td>\n<td>\n<$edit-text index=<<colourName>> tag=\"input\"/>\n<br>\n<$edit-text index=<<colourName>> type=\"color\" tag=\"input\"/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n</$set>\n"
},
"$:/snippets/palettepreview": {
"title": "$:/snippets/palettepreview",
"text": "<$set name=\"currentTiddler\" value={{$:/palette}}>\n<$transclude tiddler=\"$:/snippets/currpalettepreview\"/>\n</$set>\n"
},
"$:/snippets/paletteswitcher": {
"title": "$:/snippets/paletteswitcher",
"text": "\\define lingo-base() $:/language/ControlPanel/Palette/\n<div class=\"tc-prompt\">\n<<lingo Prompt>> <$view tiddler={{$:/palette}} field=\"name\"/>\n</div>\n\n<$linkcatcher to=\"$:/palette\">\n<div class=\"tc-chooser\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Palette]sort[description]]\"><div class=\"tc-chooser-item\"><$link to={{!!title}}><div><$reveal state=\"$:/palette\" type=\"match\" text={{!!title}}>•</$reveal><$reveal state=\"$:/palette\" type=\"nomatch\" text={{!!title}}> </$reveal> ''<$view field=\"name\" format=\"text\"/>'' - <$view field=\"description\" format=\"text\"/></div><$transclude tiddler=\"$:/snippets/currpalettepreview\"/></$link></div>\n</$list>\n</div>\n</$linkcatcher>"
},
"$:/temp/search": {
"title": "$:/temp/search",
"text": ""
},
"$:/tags/AdvancedSearch": {
"title": "$:/tags/AdvancedSearch",
"list": "[[$:/core/ui/AdvancedSearch/Standard]] [[$:/core/ui/AdvancedSearch/System]] [[$:/core/ui/AdvancedSearch/Shadows]] [[$:/core/ui/AdvancedSearch/Filter]]"
},
"$:/tags/AdvancedSearch/FilterButton": {
"title": "$:/tags/AdvancedSearch/FilterButton",
"list": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown $:/core/ui/AdvancedSearch/Filter/FilterButtons/clear $:/core/ui/AdvancedSearch/Filter/FilterButtons/export $:/core/ui/AdvancedSearch/Filter/FilterButtons/delete"
},
"$:/tags/ControlPanel": {
"title": "$:/tags/ControlPanel",
"list": "$:/core/ui/ControlPanel/Info $:/core/ui/ControlPanel/Appearance $:/core/ui/ControlPanel/Settings $:/core/ui/ControlPanel/Saving $:/core/ui/ControlPanel/Plugins $:/core/ui/ControlPanel/Tools $:/core/ui/ControlPanel/Internals"
},
"$:/tags/ControlPanel/Info": {
"title": "$:/tags/ControlPanel/Info",
"list": "$:/core/ui/ControlPanel/Basics $:/core/ui/ControlPanel/Advanced"
},
"$:/tags/ControlPanel/Plugins": {
"title": "$:/tags/ControlPanel/Plugins",
"list": "[[$:/core/ui/ControlPanel/Plugins/Installed]] [[$:/core/ui/ControlPanel/Plugins/Add]]"
},
"$:/tags/EditTemplate": {
"title": "$:/tags/EditTemplate",
"list": "[[$:/core/ui/EditTemplate/controls]] [[$:/core/ui/EditTemplate/title]] [[$:/core/ui/EditTemplate/tags]] [[$:/core/ui/EditTemplate/shadow]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/EditTemplate/body]] [[$:/core/ui/EditTemplate/type]] [[$:/core/ui/EditTemplate/fields]]"
},
"$:/tags/EditToolbar": {
"title": "$:/tags/EditToolbar",
"list": "[[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/cancel]] [[$:/core/ui/Buttons/save]]"
},
"$:/tags/EditorToolbar": {
"title": "$:/tags/EditorToolbar",
"list": "$:/core/ui/EditorToolbar/paint $:/core/ui/EditorToolbar/opacity $:/core/ui/EditorToolbar/line-width $:/core/ui/EditorToolbar/clear $:/core/ui/EditorToolbar/bold $:/core/ui/EditorToolbar/italic $:/core/ui/EditorToolbar/strikethrough $:/core/ui/EditorToolbar/underline $:/core/ui/EditorToolbar/superscript $:/core/ui/EditorToolbar/subscript $:/core/ui/EditorToolbar/mono-line $:/core/ui/EditorToolbar/mono-block $:/core/ui/EditorToolbar/quote $:/core/ui/EditorToolbar/list-bullet $:/core/ui/EditorToolbar/list-number $:/core/ui/EditorToolbar/heading-1 $:/core/ui/EditorToolbar/heading-2 $:/core/ui/EditorToolbar/heading-3 $:/core/ui/EditorToolbar/heading-4 $:/core/ui/EditorToolbar/heading-5 $:/core/ui/EditorToolbar/heading-6 $:/core/ui/EditorToolbar/link $:/core/ui/EditorToolbar/excise $:/core/ui/EditorToolbar/picture $:/core/ui/EditorToolbar/stamp $:/core/ui/EditorToolbar/size $:/core/ui/EditorToolbar/editor-height $:/core/ui/EditorToolbar/more $:/core/ui/EditorToolbar/preview $:/core/ui/EditorToolbar/preview-type"
},
"$:/tags/Manager/ItemMain": {
"title": "$:/tags/Manager/ItemMain",
"list": "$:/Manager/ItemMain/WikifiedText $:/Manager/ItemMain/RawText $:/Manager/ItemMain/Fields"
},
"$:/tags/Manager/ItemSidebar": {
"title": "$:/tags/Manager/ItemSidebar",
"list": "$:/Manager/ItemSidebar/Tags $:/Manager/ItemSidebar/Colour $:/Manager/ItemSidebar/Icon $:/Manager/ItemSidebar/Tools"
},
"$:/tags/MoreSideBar": {
"title": "$:/tags/MoreSideBar",
"list": "[[$:/core/ui/MoreSideBar/All]] [[$:/core/ui/MoreSideBar/Recent]] [[$:/core/ui/MoreSideBar/Tags]] [[$:/core/ui/MoreSideBar/Missing]] [[$:/core/ui/MoreSideBar/Drafts]] [[$:/core/ui/MoreSideBar/Orphans]] [[$:/core/ui/MoreSideBar/Types]] [[$:/core/ui/MoreSideBar/System]] [[$:/core/ui/MoreSideBar/Shadows]] [[$:/core/ui/MoreSideBar/Explorer]] [[$:/core/ui/MoreSideBar/Plugins]]",
"text": ""
},
"$:/tags/PageControls": {
"title": "$:/tags/PageControls",
"list": "[[$:/core/ui/Buttons/home]] [[$:/core/ui/Buttons/close-all]] [[$:/core/ui/Buttons/fold-all]] [[$:/core/ui/Buttons/unfold-all]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/new-tiddler]] [[$:/core/ui/Buttons/new-journal]] [[$:/core/ui/Buttons/new-image]] [[$:/core/ui/Buttons/import]] [[$:/core/ui/Buttons/export-page]] [[$:/core/ui/Buttons/control-panel]] [[$:/core/ui/Buttons/advanced-search]] [[$:/core/ui/Buttons/manager]] [[$:/core/ui/Buttons/tag-manager]] [[$:/core/ui/Buttons/language]] [[$:/core/ui/Buttons/palette]] [[$:/core/ui/Buttons/theme]] [[$:/core/ui/Buttons/storyview]] [[$:/core/ui/Buttons/encryption]] [[$:/core/ui/Buttons/timestamp]] [[$:/core/ui/Buttons/full-screen]] [[$:/core/ui/Buttons/print]] [[$:/core/ui/Buttons/save-wiki]] [[$:/core/ui/Buttons/refresh]] [[$:/core/ui/Buttons/more-page-actions]]"
},
"$:/tags/PageTemplate": {
"title": "$:/tags/PageTemplate",
"list": "[[$:/core/ui/PageTemplate/topleftbar]] [[$:/core/ui/PageTemplate/toprightbar]] [[$:/core/ui/PageTemplate/sidebar]] [[$:/core/ui/PageTemplate/story]] [[$:/core/ui/PageTemplate/alerts]]",
"text": ""
},
"$:/tags/SideBar": {
"title": "$:/tags/SideBar",
"list": "[[$:/core/ui/SideBar/Open]] [[$:/core/ui/SideBar/Recent]] [[$:/core/ui/SideBar/Tools]] [[$:/core/ui/SideBar/More]]",
"text": ""
},
"$:/tags/TiddlerInfo": {
"title": "$:/tags/TiddlerInfo",
"list": "[[$:/core/ui/TiddlerInfo/Tools]] [[$:/core/ui/TiddlerInfo/References]] [[$:/core/ui/TiddlerInfo/Tagging]] [[$:/core/ui/TiddlerInfo/List]] [[$:/core/ui/TiddlerInfo/Listed]] [[$:/core/ui/TiddlerInfo/Fields]]",
"text": ""
},
"$:/tags/TiddlerInfo/Advanced": {
"title": "$:/tags/TiddlerInfo/Advanced",
"list": "[[$:/core/ui/TiddlerInfo/Advanced/ShadowInfo]] [[$:/core/ui/TiddlerInfo/Advanced/PluginInfo]]"
},
"$:/tags/ViewTemplate": {
"title": "$:/tags/ViewTemplate",
"list": "[[$:/core/ui/ViewTemplate/title]] [[$:/core/ui/ViewTemplate/unfold]] [[$:/core/ui/ViewTemplate/subtitle]] [[$:/core/ui/ViewTemplate/tags]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/ViewTemplate/body]]"
},
"$:/tags/ViewToolbar": {
"title": "$:/tags/ViewToolbar",
"list": "[[$:/core/ui/Buttons/more-tiddler-actions]] [[$:/core/ui/Buttons/info]] [[$:/core/ui/Buttons/new-here]] [[$:/core/ui/Buttons/new-journal-here]] [[$:/core/ui/Buttons/clone]] [[$:/core/ui/Buttons/export-tiddler]] [[$:/core/ui/Buttons/edit]] [[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/permalink]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/open-window]] [[$:/core/ui/Buttons/close-others]] [[$:/core/ui/Buttons/close]] [[$:/core/ui/Buttons/fold-others]] [[$:/core/ui/Buttons/fold]]"
},
"$:/snippets/themeswitcher": {
"title": "$:/snippets/themeswitcher",
"text": "\\define lingo-base() $:/language/ControlPanel/Theme/\n<<lingo Prompt>> <$view tiddler={{$:/theme}} field=\"name\"/>\n\n<$linkcatcher to=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\"><div><$reveal state=\"$:/theme\" type=\"match\" text={{!!title}}>•</$reveal><$reveal state=\"$:/theme\" type=\"nomatch\" text={{!!title}}> </$reveal> <$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' <$view field=\"description\" format=\"text\"/></$link></div>\n</$list>\n</$linkcatcher>"
},
"$:/core/wiki/title": {
"title": "$:/core/wiki/title",
"text": "{{$:/SiteTitle}} --- {{$:/SiteSubtitle}}"
},
"$:/view": {
"title": "$:/view",
"text": "classic"
},
"$:/snippets/viewswitcher": {
"title": "$:/snippets/viewswitcher",
"text": "\\define lingo-base() $:/language/ControlPanel/StoryView/\n<<lingo Prompt>> <$select tiddler=\"$:/view\">\n<$list filter=\"[storyviews[]]\">\n<option><$view field=\"title\"/></option>\n</$list>\n</$select>"
}
}
}
{
"tiddlers": {
"Untitled": {
"title": "Untitled",
"text": "<pre class=\"r hljs\" style=\"box-sizing: border-box; overflow: auto; font-family: Monaco, Consolas, "Lucida Console", "DejaVu Sans Mono", monospace; font-size: 13px; display: block; margin-top: 1em; margin-bottom: 1em; word-break: normal; overflow-wrap: break-word; white-space: pre-wrap; background: rgb(248, 248, 248); border: 1px solid rgb(204, 204, 204); padding: 0.5em; border-radius: 3px; text-size-adjust: none; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;\"><code style=\"box-sizing: border-box; font-family: Monaco, Consolas, "Lucida Console", "DejaVu Sans Mono", monospace; font-size: 1em; color: inherit; background-color: inherit; border: none; white-space: pre-wrap; padding: 0px; border-radius: 3px;\">gp <- ggplot(df, aes(x=a,y=b)) + geom_point(size=<span class=\"hljs-number\" style=\"box-sizing: border-box; color: teal;\">3</span>) + xlab(<span class=\"hljs-string\" style=\"box-sizing: border-box; color: rgb(221, 17, 68);\">\"X [.]\"</span>) + ylab(<span class=\"hljs-string\" style=\"box-sizing: border-box; color: rgb(221, 17, 68);\">\"Y [.]\"</span>)\n\ngp + theme(plot.margin = unit(c(<span class=\"hljs-number\" style=\"box-sizing: border-box; color: teal;\">1.5</span>, <span class=\"hljs-number\" style=\"box-sizing: border-box; color: teal;\">1.5</span>, <span class=\"hljs-number\" style=\"box-sizing: border-box; color: teal;\">1.0</span>, <span class=\"hljs-number\" style=\"box-sizing: border-box; color: teal;\">1.0</span>), <span class=\"hljs-string\" style=\"box-sizing: border-box; color: rgb(221, 17, 68);\">\"cm\"</span>),\n panel.background = element_rect(fill=<span class=\"hljs-string\" style=\"box-sizing: border-box; color: rgb(221, 17, 68);\">'white'</span>, size=<span class=\"hljs-number\" style=\"box-sizing: border-box; color: teal;\">2</span>, colour=<span class=\"hljs-string\" style=\"box-sizing: border-box; color: rgb(221, 17, 68);\">'grey10'</span>),\n panel.grid.major = element_blank(),\n panel.grid.minor = element_blank(),\n axis.text=element_text(size=<span class=\"hljs-number\" style=\"box-sizing: border-box; color: teal;\">18</span>, face = <span class=\"hljs-string\" style=\"box-sizing: border-box; color: rgb(221, 17, 68);\">\"bold\"</span>, colour = <span class=\"hljs-string\" style=\"box-sizing: border-box; color: rgb(221, 17, 68);\">\"grey10\"</span>),\n axis.title=element_text(size=<span class=\"hljs-number\" style=\"box-sizing: border-box; color: teal;\">22</span>, face=<span class=\"hljs-string\" style=\"box-sizing: border-box; color: rgb(221, 17, 68);\">\"bold\"</span>, colour = <span class=\"hljs-string\" style=\"box-sizing: border-box; color: rgb(221, 17, 68);\">\"grey10\"</span>), \n axis.ticks = element_line(size = <span class=\"hljs-number\" style=\"box-sizing: border-box; color: teal;\">2</span>),\n axis.ticks.length = unit(-<span class=\"hljs-number\" style=\"box-sizing: border-box; color: teal;\">.4</span>, <span class=\"hljs-string\" style=\"box-sizing: border-box; color: rgb(221, 17, 68);\">\"cm\"</span>))</code></pre>"
}
}
}
alert-background: #ffe476
alert-border: #b99e2f
alert-highlight: #881122
alert-muted-foreground: #b99e2f
background: #ffffff
blockquote-bar: <<colour muted-foreground>>
button-background:
button-foreground:
button-border:
code-background: #f7f7f9
code-border: #e1e1e8
code-foreground: #dd1144
dirty-indicator: #ff0000
download-background: #66cccc
download-foreground: <<colour background>>
dragger-background: <<colour foreground>>
dragger-foreground: <<colour background>>
dropdown-background: <<colour background>>
dropdown-border: <<colour muted-foreground>>
dropdown-tab-background-selected: #fff
dropdown-tab-background: #ececec
dropzone-background: rgba(0,200,0,0.7)
external-link-background-hover: inherit
external-link-background-visited: inherit
external-link-background: inherit
external-link-foreground-hover: inherit
external-link-foreground-visited: #0000aa
external-link-foreground: #0000ee
foreground: #333333
message-background: #ecf2ff
message-border: #cfd6e6
message-foreground: #547599
modal-backdrop: <<colour foreground>>
modal-background: <<colour background>>
modal-border: #999999
modal-footer-background: #f5f5f5
modal-footer-border: #dddddd
modal-header-border: #eeeeee
muted-foreground: #999999
notification-background: #ffffdd
notification-border: #999999
page-background: #ffffff
pre-background: #f5f5f5
pre-border: #cccccc
primary: #7897f3
sidebar-button-foreground: <<colour foreground>>
sidebar-controls-foreground-hover: #000000
sidebar-controls-foreground: #ccc
sidebar-foreground-shadow: rgba(255,255,255, 0.8)
sidebar-foreground: #acacac
sidebar-muted-foreground-hover: #444444
sidebar-muted-foreground: #c0c0c0
sidebar-tab-background-selected: #ffffff
sidebar-tab-background: <<colour tab-background>>
sidebar-tab-border-selected: <<colour tab-border-selected>>
sidebar-tab-border: <<colour tab-border>>
sidebar-tab-divider: <<colour tab-divider>>
sidebar-tab-foreground-selected:
sidebar-tab-foreground: <<colour tab-foreground>>
sidebar-tiddler-link-foreground-hover: #444444
sidebar-tiddler-link-foreground: #7897f3
site-title-foreground: <<colour tiddler-title-foreground>>
static-alert-foreground: #aaaaaa
tab-background-selected: #ffffff
tab-background: #eeeeee
tab-border-selected: #cccccc
tab-border: #cccccc
tab-divider: #d8d8d8
tab-foreground-selected: <<colour tab-foreground>>
tab-foreground: #666666
table-border: #dddddd
table-footer-background: #a8a8a8
table-header-background: #f0f0f0
tag-background: #ffeedd
tag-foreground: #000
tiddler-background: <<colour background>>
tiddler-border: #eee
tiddler-controls-foreground-hover: #888888
tiddler-controls-foreground-selected: #444444
tiddler-controls-foreground: #cccccc
tiddler-editor-background: #f8f8f8
tiddler-editor-border-image: #ffffff
tiddler-editor-border: #cccccc
tiddler-editor-fields-even: #e0e8e0
tiddler-editor-fields-odd: #f0f4f0
tiddler-info-background: #f8f8f8
tiddler-info-border: #dddddd
tiddler-info-tab-background: #f8f8f8
tiddler-link-background: <<colour background>>
tiddler-link-foreground: #0000f3
tiddler-subtitle-foreground: #c0c0c0
tiddler-title-foreground: #ff9900
toolbar-new-button:
toolbar-options-button:
toolbar-save-button:
toolbar-info-button:
toolbar-edit-button:
toolbar-close-button:
toolbar-delete-button:
toolbar-cancel-button:
toolbar-done-button:
untagged-background: #999999
very-muted-foreground: #888888
{
"tiddlers": {
"$:/config/HighlightPlugin/TypeMappings/application/javascript": {
"title": "$:/config/HighlightPlugin/TypeMappings/application/javascript",
"text": "javascript"
},
"$:/config/HighlightPlugin/TypeMappings/application/json": {
"title": "$:/config/HighlightPlugin/TypeMappings/application/json",
"text": "json"
},
"$:/config/HighlightPlugin/TypeMappings/text/css": {
"title": "$:/config/HighlightPlugin/TypeMappings/text/css",
"text": "css"
},
"$:/config/HighlightPlugin/TypeMappings/text/html": {
"title": "$:/config/HighlightPlugin/TypeMappings/text/html",
"text": "html"
},
"$:/config/HighlightPlugin/TypeMappings/image/svg+xml": {
"title": "$:/config/HighlightPlugin/TypeMappings/image/svg+xml",
"text": "xml"
},
"$:/config/HighlightPlugin/TypeMappings/text/x-markdown": {
"title": "$:/config/HighlightPlugin/TypeMappings/text/x-markdown",
"text": "markdown"
},
"$:/plugins/tiddlywiki/highlight/highlight.js": {
"text": "var hljs = require(\"$:/plugins/tiddlywiki/highlight/highlight.js\");\n!function(e){\"undefined\"!=typeof exports?e(exports):(window.hljs=e({}),\"function\"==typeof define&&define.amd&&define(\"hljs\",[],function(){return window.hljs}))}(function(e){function n(e){return e.replace(/&/gm,\"&\").replace(/</gm,\"<\").replace(/>/gm,\">\")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}function a(e){return/^(no-?highlight|plain|text)$/i.test(e)}function i(e){var n,t,r,i=e.className+\" \";if(i+=e.parentNode?e.parentNode.className:\"\",t=/\\blang(?:uage)?-([\\w-]+)\\b/i.exec(i))return w(t[1])?t[1]:\"no-highlight\";for(i=i.split(/\\s+/),n=0,r=i.length;r>n;n++)if(w(i[n])||a(i[n]))return i[n]}function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3==i.nodeType?a+=i.nodeValue.length:1==i.nodeType&&(n.push({event:\"start\",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:\"stop\",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!=r[0].offset?e[0].offset<r[0].offset?e:r:\"start\"==r[0].event?e:r:e.length?e:r}function o(e){function r(e){return\" \"+e.nodeName+'=\"'+n(e.value)+'\"'}f+=\"<\"+t(e)+Array.prototype.map.call(e.attributes,r).join(\"\")+\">\"}function u(e){f+=\"</\"+t(e)+\">\"}function c(e){(\"start\"==e.event?o:u)(e.node)}for(var s=0,f=\"\",l=[];e.length||r.length;){var g=i();if(f+=n(a.substr(s,g[0].offset-s)),s=g[0].offset,g==e){l.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g==e&&g.length&&g[0].offset==s);l.reverse().forEach(o)}else\"start\"==g[0].event?l.push(g[0].node):l.pop(),c(g.splice(0,1)[0])}return f+n(a.substr(s))}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),\"m\"+(e.cI?\"i\":\"\")+(r?\"g\":\"\"))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(\" \").forEach(function(e){var t=e.split(\"|\");u[t[0]]=[n,t[1]?Number(t[1]):1]})};\"string\"==typeof a.k?c(\"keyword\",a.k):Object.keys(a.k).forEach(function(e){c(e,a.k[e])}),a.k=u}a.lR=t(a.l||/\\b\\w+\\b/,!0),i&&(a.bK&&(a.b=\"\\\\b(\"+a.bK.split(\" \").join(\"|\")+\")\\\\b\"),a.b||(a.b=/\\B|\\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\\B|\\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||\"\",a.eW&&i.tE&&(a.tE+=(a.e?\"|\":\"\")+i.tE)),a.i&&(a.iR=t(a.i)),void 0===a.r&&(a.r=1),a.c||(a.c=[]);var s=[];a.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push(\"self\"==e?a:e)}),a.c=s,a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var f=a.c.map(function(e){return e.bK?\"\\\\.?(\"+e.b+\")\\\\.?\":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=f.length?t(f.join(\"|\"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){for(var t=0;t<n.c.length;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!a&&r(n.iR,e)}function g(e,n){var t=N.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function h(e,n,t,r){var a=r?\"\":E.classPrefix,i='<span class=\"'+a,o=t?\"\":\"</span>\";return i+=e+'\">',i+n+o}function p(){if(!L.k)return n(y);var e=\"\",t=0;L.lR.lastIndex=0;for(var r=L.lR.exec(y);r;){e+=n(y.substr(t,r.index-t));var a=g(L,r);a?(B+=a[1],e+=h(a[0],n(r[0]))):e+=n(r[0]),t=L.lR.lastIndex,r=L.lR.exec(y)}return e+n(y.substr(t))}function d(){var e=\"string\"==typeof L.sL;if(e&&!x[L.sL])return n(y);var t=e?f(L.sL,y,!0,M[L.sL]):l(y,L.sL.length?L.sL:void 0);return L.r>0&&(B+=t.r),e&&(M[L.sL]=t.top),h(t.language,t.value,!1,!0)}function b(){return void 0!==L.sL?d():p()}function v(e,t){var r=e.cN?h(e.cN,\"\",!0):\"\";e.rB?(k+=r,y=\"\"):e.eB?(k+=n(t)+r,y=\"\"):(k+=r,y=t),L=Object.create(e,{parent:{value:L}})}function m(e,t){if(y+=e,void 0===t)return k+=b(),0;var r=o(t,L);if(r)return k+=b(),v(r,t),r.rB?0:t.length;var a=u(L,t);if(a){var i=L;i.rE||i.eE||(y+=t),k+=b();do L.cN&&(k+=\"</span>\"),B+=L.r,L=L.parent;while(L!=a.parent);return i.eE&&(k+=n(t)),y=\"\",a.starts&&v(a.starts,\"\"),i.rE?0:t.length}if(c(t,L))throw new Error('Illegal lexeme \"'+t+'\" for mode \"'+(L.cN||\"<unnamed>\")+'\"');return y+=t,t.length||1}var N=w(e);if(!N)throw new Error('Unknown language: \"'+e+'\"');s(N);var R,L=i||N,M={},k=\"\";for(R=L;R!=N;R=R.parent)R.cN&&(k=h(R.cN,\"\",!0)+k);var y=\"\",B=0;try{for(var C,j,I=0;;){if(L.t.lastIndex=I,C=L.t.exec(t),!C)break;j=m(t.substr(I,C.index-I),C[0]),I=C.index+j}for(m(t.substr(I)),R=L;R.parent;R=R.parent)R.cN&&(k+=\"</span>\");return{r:B,value:k,language:e,top:L}}catch(O){if(-1!=O.message.indexOf(\"Illegal\"))return{r:0,value:n(t)};throw O}}function l(e,t){t=t||E.languages||Object.keys(x);var r={r:0,value:n(e)},a=r;return t.forEach(function(n){if(w(n)){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}}),a.language&&(r.second_best=a),r}function g(e){return E.tabReplace&&(e=e.replace(/^((<[^>]+>|\\t)+)/gm,function(e,n){return n.replace(/\\t/g,E.tabReplace)})),E.useBR&&(e=e.replace(/\\n/g,\"<br>\")),e}function h(e,n,t){var r=n?R[n]:t,a=[e.trim()];return e.match(/\\bhljs\\b/)||a.push(\"hljs\"),-1===e.indexOf(r)&&a.push(r),a.join(\" \").trim()}function p(e){var n=i(e);if(!a(n)){var t;E.useBR?(t=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\"),t.innerHTML=e.innerHTML.replace(/\\n/g,\"\").replace(/<br[ \\/]*>/g,\"\\n\")):t=e;var r=t.textContent,o=n?f(n,r,!0):l(r),s=u(t);if(s.length){var p=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\");p.innerHTML=o.value,o.value=c(s,u(p),r)}o.value=g(o.value),e.innerHTML=o.value,e.className=h(e.className,n,o.language),e.result={language:o.language,re:o.r},o.second_best&&(e.second_best={language:o.second_best.language,re:o.second_best.r})}}function d(e){E=o(E,e)}function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll(\"pre code\");Array.prototype.forEach.call(e,p)}}function v(){addEventListener(\"DOMContentLoaded\",b,!1),addEventListener(\"load\",b,!1)}function m(n,t){var r=x[n]=t(e);r.aliases&&r.aliases.forEach(function(e){R[e]=n})}function N(){return Object.keys(x)}function w(e){return e=e.toLowerCase(),x[e]||x[R[e]]}var E={classPrefix:\"hljs-\",tabReplace:null,useBR:!1,languages:void 0},x={},R={};return e.highlight=f,e.highlightAuto=l,e.fixMarkup=g,e.highlightBlock=p,e.configure=d,e.initHighlighting=b,e.initHighlightingOnLoad=v,e.registerLanguage=m,e.listLanguages=N,e.getLanguage=w,e.inherit=o,e.IR=\"[a-zA-Z]\\\\w*\",e.UIR=\"[a-zA-Z_]\\\\w*\",e.NR=\"\\\\b\\\\d+(\\\\.\\\\d+)?\",e.CNR=\"(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\",e.BNR=\"\\\\b(0b[01]+)\",e.RSR=\"!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~\",e.BE={b:\"\\\\\\\\[\\\\s\\\\S]\",r:0},e.ASM={cN:\"string\",b:\"'\",e:\"'\",i:\"\\\\n\",c:[e.BE]},e.QSM={cN:\"string\",b:'\"',e:'\"',i:\"\\\\n\",c:[e.BE]},e.PWM={b:/\\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such)\\b/},e.C=function(n,t,r){var a=e.inherit({cN:\"comment\",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:\"doctag\",b:\"(?:TODO|FIXME|NOTE|BUG|XXX):\",r:0}),a},e.CLCM=e.C(\"//\",\"$\"),e.CBCM=e.C(\"/\\\\*\",\"\\\\*/\"),e.HCM=e.C(\"#\",\"$\"),e.NM={cN:\"number\",b:e.NR,r:0},e.CNM={cN:\"number\",b:e.CNR,r:0},e.BNM={cN:\"number\",b:e.BNR,r:0},e.CSSNM={cN:\"number\",b:e.NR+\"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?\",r:0},e.RM={cN:\"regexp\",b:/\\//,e:/\\/[gimuy]*/,i:/\\n/,c:[e.BE,{b:/\\[/,e:/\\]/,r:0,c:[e.BE]}]},e.TM={cN:\"title\",b:e.IR,r:0},e.UTM={cN:\"title\",b:e.UIR,r:0},e});hljs.registerLanguage(\"markdown\",function(e){return{aliases:[\"md\",\"mkdown\",\"mkd\"],c:[{cN:\"header\",v:[{b:\"^#{1,6}\",e:\"$\"},{b:\"^.+?\\\\n[=-]{2,}$\"}]},{b:\"<\",e:\">\",sL:\"xml\",r:0},{cN:\"bullet\",b:\"^([*+-]|(\\\\d+\\\\.))\\\\s+\"},{cN:\"strong\",b:\"[*_]{2}.+?[*_]{2}\"},{cN:\"emphasis\",v:[{b:\"\\\\*.+?\\\\*\"},{b:\"_.+?_\",r:0}]},{cN:\"blockquote\",b:\"^>\\\\s+\",e:\"$\"},{cN:\"code\",v:[{b:\"`.+?`\"},{b:\"^( {4}|\t)\",e:\"$\",r:0}]},{cN:\"horizontal_rule\",b:\"^[-\\\\*]{3,}\",e:\"$\"},{b:\"\\\\[.+?\\\\][\\\\(\\\\[].*?[\\\\)\\\\]]\",rB:!0,c:[{cN:\"link_label\",b:\"\\\\[\",e:\"\\\\]\",eB:!0,rE:!0,r:0},{cN:\"link_url\",b:\"\\\\]\\\\(\",e:\"\\\\)\",eB:!0,eE:!0},{cN:\"link_reference\",b:\"\\\\]\\\\[\",e:\"\\\\]\",eB:!0,eE:!0}],r:10},{b:\"^\\\\[.+\\\\]:\",rB:!0,c:[{cN:\"link_reference\",b:\"\\\\[\",e:\"\\\\]:\",eB:!0,eE:!0,starts:{cN:\"link_url\",e:\"$\"}}]}]}});hljs.registerLanguage(\"ruby\",function(e){var c=\"[a-zA-Z_]\\\\w*[!?=]?|[-+~]\\\\@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?\",r=\"and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor\",b={cN:\"doctag\",b:\"@[A-Za-z]+\"},a={cN:\"value\",b:\"#<\",e:\">\"},n=[e.C(\"#\",\"$\",{c:[b]}),e.C(\"^\\\\=begin\",\"^\\\\=end\",{c:[b],r:10}),e.C(\"^__END__\",\"\\\\n$\")],s={cN:\"subst\",b:\"#\\\\{\",e:\"}\",k:r},t={cN:\"string\",c:[e.BE,s],v:[{b:/'/,e:/'/},{b:/\"/,e:/\"/},{b:/`/,e:/`/},{b:\"%[qQwWx]?\\\\(\",e:\"\\\\)\"},{b:\"%[qQwWx]?\\\\[\",e:\"\\\\]\"},{b:\"%[qQwWx]?{\",e:\"}\"},{b:\"%[qQwWx]?<\",e:\">\"},{b:\"%[qQwWx]?/\",e:\"/\"},{b:\"%[qQwWx]?%\",e:\"%\"},{b:\"%[qQwWx]?-\",e:\"-\"},{b:\"%[qQwWx]?\\\\|\",e:\"\\\\|\"},{b:/\\B\\?(\\\\\\d{1,3}|\\\\x[A-Fa-f0-9]{1,2}|\\\\u[A-Fa-f0-9]{4}|\\\\?\\S)\\b/}]},i={cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",k:r},d=[t,a,{cN:\"class\",bK:\"class module\",e:\"$|;\",i:/=/,c:[e.inherit(e.TM,{b:\"[A-Za-z_]\\\\w*(::\\\\w+)*(\\\\?|\\\\!)?\"}),{cN:\"inheritance\",b:\"<\\\\s*\",c:[{cN:\"parent\",b:\"(\"+e.IR+\"::)?\"+e.IR}]}].concat(n)},{cN:\"function\",bK:\"def\",e:\"$|;\",c:[e.inherit(e.TM,{b:c}),i].concat(n)},{cN:\"constant\",b:\"(::)?(\\\\b[A-Z]\\\\w*(::)?)+\",r:0},{cN:\"symbol\",b:e.UIR+\"(\\\\!|\\\\?)?:\",r:0},{cN:\"symbol\",b:\":\",c:[t,{b:c}],r:0},{cN:\"number\",b:\"(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b\",r:0},{cN:\"variable\",b:\"(\\\\$\\\\W)|((\\\\$|\\\\@\\\\@?)(\\\\w+))\"},{b:\"(\"+e.RSR+\")\\\\s*\",c:[a,{cN:\"regexp\",c:[e.BE,s],i:/\\n/,v:[{b:\"/\",e:\"/[a-z]*\"},{b:\"%r{\",e:\"}[a-z]*\"},{b:\"%r\\\\(\",e:\"\\\\)[a-z]*\"},{b:\"%r!\",e:\"![a-z]*\"},{b:\"%r\\\\[\",e:\"\\\\][a-z]*\"}]}].concat(n),r:0}].concat(n);s.c=d,i.c=d;var o=\"[>?]>\",l=\"[\\\\w#]+\\\\(\\\\w+\\\\):\\\\d+:\\\\d+>\",u=\"(\\\\w+-)?\\\\d+\\\\.\\\\d+\\\\.\\\\d(p\\\\d+)?[^>]+>\",N=[{b:/^\\s*=>/,cN:\"status\",starts:{e:\"$\",c:d}},{cN:\"prompt\",b:\"^(\"+o+\"|\"+l+\"|\"+u+\")\",starts:{e:\"$\",c:d}}];return{aliases:[\"rb\",\"gemspec\",\"podspec\",\"thor\",\"irb\"],k:r,c:n.concat(N).concat(d)}});hljs.registerLanguage(\"makefile\",function(e){var a={cN:\"variable\",b:/\\$\\(/,e:/\\)/,c:[e.BE]};return{aliases:[\"mk\",\"mak\"],c:[e.HCM,{b:/^\\w+\\s*\\W*=/,rB:!0,r:0,starts:{cN:\"constant\",e:/\\s*\\W*=/,eE:!0,starts:{e:/$/,r:0,c:[a]}}},{cN:\"title\",b:/^[\\w]+:\\s*$/},{cN:\"phony\",b:/^\\.PHONY:/,e:/$/,k:\".PHONY\",l:/[\\.\\w]+/},{b:/^\\t+/,e:/$/,r:0,c:[e.QSM,a]}]}});hljs.registerLanguage(\"json\",function(e){var t={literal:\"true false null\"},i=[e.QSM,e.CNM],l={cN:\"value\",e:\",\",eW:!0,eE:!0,c:i,k:t},c={b:\"{\",e:\"}\",c:[{cN:\"attribute\",b:'\\\\s*\"',e:'\"\\\\s*:\\\\s*',eB:!0,eE:!0,c:[e.BE],i:\"\\\\n\",starts:l}],i:\"\\\\S\"},n={b:\"\\\\[\",e:\"\\\\]\",c:[e.inherit(l,{cN:null})],i:\"\\\\S\"};return i.splice(i.length,0,c,n),{c:i,k:t,i:\"\\\\S\"}});hljs.registerLanguage(\"xml\",function(t){var s=\"[A-Za-z0-9\\\\._:-]+\",c={b:/<\\?(php)?(?!\\w)/,e:/\\?>/,sL:\"php\"},e={eW:!0,i:/</,r:0,c:[c,{cN:\"attribute\",b:s,r:0},{b:\"=\",r:0,c:[{cN:\"value\",c:[c],v:[{b:/\"/,e:/\"/},{b:/'/,e:/'/},{b:/[^\\s\\/>]+/}]}]}]};return{aliases:[\"html\",\"xhtml\",\"rss\",\"atom\",\"xsl\",\"plist\"],cI:!0,c:[{cN:\"doctype\",b:\"<!DOCTYPE\",e:\">\",r:10,c:[{b:\"\\\\[\",e:\"\\\\]\"}]},t.C(\"<!--\",\"-->\",{r:10}),{cN:\"cdata\",b:\"<\\\\!\\\\[CDATA\\\\[\",e:\"\\\\]\\\\]>\",r:10},{cN:\"tag\",b:\"<style(?=\\\\s|>|$)\",e:\">\",k:{title:\"style\"},c:[e],starts:{e:\"</style>\",rE:!0,sL:\"css\"}},{cN:\"tag\",b:\"<script(?=\\\\s|>|$)\",e:\">\",k:{title:\"script\"},c:[e],starts:{e:\"</script>\",rE:!0,sL:[\"actionscript\",\"javascript\",\"handlebars\"]}},c,{cN:\"pi\",b:/<\\?\\w+/,e:/\\?>/,r:10},{cN:\"tag\",b:\"</?\",e:\"/?>\",c:[{cN:\"title\",b:/[^ \\/><\\n\\t]+/,r:0},e]}]}});hljs.registerLanguage(\"css\",function(e){var c=\"[a-zA-Z-][a-zA-Z0-9_-]*\",a={cN:\"function\",b:c+\"\\\\(\",rB:!0,eE:!0,e:\"\\\\(\"},r={cN:\"rule\",b:/[A-Z\\_\\.\\-]+\\s*:/,rB:!0,e:\";\",eW:!0,c:[{cN:\"attribute\",b:/\\S/,e:\":\",eE:!0,starts:{cN:\"value\",eW:!0,eE:!0,c:[a,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:\"hexcolor\",b:\"#[0-9A-Fa-f]+\"},{cN:\"important\",b:\"!important\"}]}}]};return{cI:!0,i:/[=\\/|'\\$]/,c:[e.CBCM,r,{cN:\"id\",b:/\\#[A-Za-z0-9_-]+/},{cN:\"class\",b:/\\.[A-Za-z0-9_-]+/},{cN:\"attr_selector\",b:/\\[/,e:/\\]/,i:\"$\"},{cN:\"pseudo\",b:/:(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"']+/},{cN:\"at_rule\",b:\"@(font-face|page)\",l:\"[a-z-]+\",k:\"font-face page\"},{cN:\"at_rule\",b:\"@\",e:\"[{;]\",c:[{cN:\"keyword\",b:/\\S+/},{b:/\\s/,eW:!0,eE:!0,r:0,c:[a,e.ASM,e.QSM,e.CSSNM]}]},{cN:\"tag\",b:c,r:0},{cN:\"rules\",b:\"{\",e:\"}\",i:/\\S/,c:[e.CBCM,r]}]}});hljs.registerLanguage(\"perl\",function(e){var t=\"getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when\",r={cN:\"subst\",b:\"[$@]\\\\{\",e:\"\\\\}\",k:t},s={b:\"->{\",e:\"}\"},n={cN:\"variable\",v:[{b:/\\$\\d/},{b:/[\\$%@](\\^\\w\\b|#\\w+(::\\w+)*|{\\w+}|\\w+(::\\w*)*)/},{b:/[\\$%@][^\\s\\w{]/,r:0}]},o=[e.BE,r,n],i=[n,e.HCM,e.C(\"^\\\\=\\\\w\",\"\\\\=cut\",{eW:!0}),s,{cN:\"string\",c:o,v:[{b:\"q[qwxr]?\\\\s*\\\\(\",e:\"\\\\)\",r:5},{b:\"q[qwxr]?\\\\s*\\\\[\",e:\"\\\\]\",r:5},{b:\"q[qwxr]?\\\\s*\\\\{\",e:\"\\\\}\",r:5},{b:\"q[qwxr]?\\\\s*\\\\|\",e:\"\\\\|\",r:5},{b:\"q[qwxr]?\\\\s*\\\\<\",e:\"\\\\>\",r:5},{b:\"qw\\\\s+q\",e:\"q\",r:5},{b:\"'\",e:\"'\",c:[e.BE]},{b:'\"',e:'\"'},{b:\"`\",e:\"`\",c:[e.BE]},{b:\"{\\\\w+}\",c:[],r:0},{b:\"-?\\\\w+\\\\s*\\\\=\\\\>\",c:[],r:0}]},{cN:\"number\",b:\"(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b\",r:0},{b:\"(\\\\/\\\\/|\"+e.RSR+\"|\\\\b(split|return|print|reverse|grep)\\\\b)\\\\s*\",k:\"split return print reverse grep\",r:0,c:[e.HCM,{cN:\"regexp\",b:\"(s|tr|y)/(\\\\\\\\.|[^/])*/(\\\\\\\\.|[^/])*/[a-z]*\",r:10},{cN:\"regexp\",b:\"(m|qr)?/\",e:\"/[a-z]*\",c:[e.BE],r:0}]},{cN:\"sub\",bK:\"sub\",e:\"(\\\\s*\\\\(.*?\\\\))?[;{]\",r:5},{cN:\"operator\",b:\"-\\\\w\\\\b\",r:0},{b:\"^__DATA__$\",e:\"^__END__$\",sL:\"mojolicious\",c:[{b:\"^@@.*\",e:\"$\",cN:\"comment\"}]}];return r.c=i,s.c=i,{aliases:[\"pl\"],k:t,c:i}});hljs.registerLanguage(\"cs\",function(e){var r=\"abstract as base bool break byte case catch char checked const continue decimal dynamic default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long null when object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while async protected public private internal ascending descending from get group into join let orderby partial select set value var where yield\",t=e.IR+\"(<\"+e.IR+\">)?\";return{aliases:[\"csharp\"],k:r,i:/::/,c:[e.C(\"///\",\"$\",{rB:!0,c:[{cN:\"xmlDocTag\",v:[{b:\"///\",r:0},{b:\"<!--|-->\"},{b:\"</?\",e:\">\"}]}]}),e.CLCM,e.CBCM,{cN:\"preprocessor\",b:\"#\",e:\"$\",k:\"if else elif endif define undef warning error line region endregion pragma checksum\"},{cN:\"string\",b:'@\"',e:'\"',c:[{b:'\"\"'}]},e.ASM,e.QSM,e.CNM,{bK:\"class interface\",e:/[{;=]/,i:/[^\\s:]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:\"namespace\",e:/[{;=]/,i:/[^\\s:]/,c:[{cN:\"title\",b:\"[a-zA-Z](\\\\.?\\\\w)*\",r:0},e.CLCM,e.CBCM]},{bK:\"new return throw await\",r:0},{cN:\"function\",b:\"(\"+t+\"\\\\s+)+\"+e.IR+\"\\\\s*\\\\(\",rB:!0,e:/[{;=]/,eE:!0,k:r,c:[{b:e.IR+\"\\\\s*\\\\(\",rB:!0,c:[e.TM],r:0},{cN:\"params\",b:/\\(/,e:/\\)/,eB:!0,eE:!0,k:r,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage(\"apache\",function(e){var r={cN:\"number\",b:\"[\\\\$%]\\\\d+\"};return{aliases:[\"apacheconf\"],cI:!0,c:[e.HCM,{cN:\"tag\",b:\"</?\",e:\">\"},{cN:\"keyword\",b:/\\w+/,r:0,k:{common:\"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername\"},starts:{e:/$/,r:0,k:{literal:\"on off all\"},c:[{cN:\"sqbracket\",b:\"\\\\s\\\\[\",e:\"\\\\]$\"},{cN:\"cbracket\",b:\"[\\\\$%]\\\\{\",e:\"\\\\}\",c:[\"self\",r]},r,e.QSM]}}],i:/\\S/}});hljs.registerLanguage(\"http\",function(t){return{aliases:[\"https\"],i:\"\\\\S\",c:[{cN:\"status\",b:\"^HTTP/[0-9\\\\.]+\",e:\"$\",c:[{cN:\"number\",b:\"\\\\b\\\\d{3}\\\\b\"}]},{cN:\"request\",b:\"^[A-Z]+ (.*?) HTTP/[0-9\\\\.]+$\",rB:!0,e:\"$\",c:[{cN:\"string\",b:\" \",e:\" \",eB:!0,eE:!0}]},{cN:\"attribute\",b:\"^\\\\w\",e:\": \",eE:!0,i:\"\\\\n|\\\\s|=\",starts:{cN:\"string\",e:\"$\"}},{b:\"\\\\n\\\\n\",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage(\"objectivec\",function(e){var t={cN:\"built_in\",b:\"(AV|CA|CF|CG|CI|MK|MP|NS|UI)\\\\w+\"},i={keyword:\"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required\",literal:\"false true FALSE TRUE nil YES NO NULL\",built_in:\"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once\"},o=/[a-zA-Z@][a-zA-Z0-9_]*/,n=\"@interface @class @protocol @implementation\";return{aliases:[\"mm\",\"objc\",\"obj-c\"],k:i,l:o,i:\"</\",c:[t,e.CLCM,e.CBCM,e.CNM,e.QSM,{cN:\"string\",v:[{b:'@\"',e:'\"',i:\"\\\\n\",c:[e.BE]},{b:\"'\",e:\"[^\\\\\\\\]'\",i:\"[^\\\\\\\\][^']\"}]},{cN:\"preprocessor\",b:\"#\",e:\"$\",c:[{cN:\"title\",v:[{b:'\"',e:'\"'},{b:\"<\",e:\">\"}]}]},{cN:\"class\",b:\"(\"+n.split(\" \").join(\"|\")+\")\\\\b\",e:\"({|$)\",eE:!0,k:n,l:o,c:[e.UTM]},{cN:\"variable\",b:\"\\\\.\"+e.UIR,r:0}]}});hljs.registerLanguage(\"python\",function(e){var r={cN:\"prompt\",b:/^(>>>|\\.\\.\\.) /},b={cN:\"string\",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[r],r:10},{b:/(u|b)?r?\"\"\"/,e:/\"\"\"/,c:[r],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)\"/,e:/\"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)\"/,e:/\"/},e.ASM,e.QSM]},a={cN:\"number\",r:0,v:[{b:e.BNR+\"[lLjJ]?\"},{b:\"\\\\b(0o[0-7]+)[lLjJ]?\"},{b:e.CNR+\"[lLjJ]?\"}]},l={cN:\"params\",b:/\\(/,e:/\\)/,c:[\"self\",r,a,b]};return{aliases:[\"py\",\"gyp\"],k:{keyword:\"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False\",built_in:\"Ellipsis NotImplemented\"},i:/(<\\/|->|\\?)/,c:[r,a,b,e.HCM,{v:[{cN:\"function\",bK:\"def\",r:10},{cN:\"class\",bK:\"class\"}],e:/:/,i:/[${=;\\n,]/,c:[e.UTM,l]},{cN:\"decorator\",b:/^[\\t ]*@/,e:/$/},{b:/\\b(print|exec)\\(/}]}});hljs.registerLanguage(\"java\",function(e){var a=e.UIR+\"(<\"+e.UIR+\">)?\",t=\"false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private\",c=\"\\\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+)(\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+))?|\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+))([eE][-+]?\\\\d+)?)[lLfF]?\",r={cN:\"number\",b:c,r:0};return{aliases:[\"jsp\"],k:t,i:/<\\/|#/,c:[e.C(\"/\\\\*\\\\*\",\"\\\\*/\",{r:0,c:[{cN:\"doctag\",b:\"@[A-Za-z]+\"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:\"class\",bK:\"class interface\",e:/[{;=]/,eE:!0,k:\"class interface\",i:/[:\"\\[\\]]/,c:[{bK:\"extends implements\"},e.UTM]},{bK:\"new throw return else\",r:0},{cN:\"function\",b:\"(\"+a+\"\\\\s+)+\"+e.UIR+\"\\\\s*\\\\(\",rB:!0,e:/[{;=]/,eE:!0,k:t,c:[{b:e.UIR+\"\\\\s*\\\\(\",rB:!0,r:0,c:[e.UTM]},{cN:\"params\",b:/\\(/,e:/\\)/,k:t,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},r,{cN:\"annotation\",b:\"@[A-Za-z]+\"}]}});hljs.registerLanguage(\"bash\",function(e){var t={cN:\"variable\",v:[{b:/\\$[\\w\\d#@][\\w\\d_]*/},{b:/\\$\\{(.*?)}/}]},s={cN:\"string\",b:/\"/,e:/\"/,c:[e.BE,t,{cN:\"variable\",b:/\\$\\(/,e:/\\)/,c:[e.BE]}]},a={cN:\"string\",b:/'/,e:/'/};return{aliases:[\"sh\",\"zsh\"],l:/-?[a-z\\.]+/,k:{keyword:\"if then else elif fi for while in do done case esac function\",literal:\"true false\",built_in:\"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp\",operator:\"-ne -eq -lt -gt -f -d -e -s -l -a\"},c:[{cN:\"shebang\",b:/^#![^\\n]+sh\\s*$/,r:10},{cN:\"function\",b:/\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,rB:!0,c:[e.inherit(e.TM,{b:/\\w[\\w\\d_]*/})],r:0},e.HCM,e.NM,s,a,t]}});hljs.registerLanguage(\"sql\",function(e){var t=e.C(\"--\",\"$\");return{cI:!0,i:/[<>{}*]/,c:[{cN:\"operator\",bK:\"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke\",e:/;/,eW:!0,k:{keyword:\"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes c cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle d data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration e each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract f failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function g general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http i id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists k keep keep_duplicates key keys kill l language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim m main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex n name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding p package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime t table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek\",literal:\"true false null\",built_in:\"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void\"},c:[{cN:\"string\",b:\"'\",e:\"'\",c:[e.BE,{b:\"''\"}]},{cN:\"string\",b:'\"',e:'\"',c:[e.BE,{b:'\"\"'}]},{cN:\"string\",b:\"`\",e:\"`\",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}});hljs.registerLanguage(\"nginx\",function(e){var r={cN:\"variable\",v:[{b:/\\$\\d+/},{b:/\\$\\{/,e:/}/},{b:\"[\\\\$\\\\@]\"+e.UIR}]},b={eW:!0,l:\"[a-z/_]+\",k:{built_in:\"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll\"},r:0,i:\"=>\",c:[e.HCM,{cN:\"string\",c:[e.BE,r],v:[{b:/\"/,e:/\"/},{b:/'/,e:/'/}]},{cN:\"url\",b:\"([a-z]+):/\",e:\"\\\\s\",eW:!0,eE:!0,c:[r]},{cN:\"regexp\",c:[e.BE,r],v:[{b:\"\\\\s\\\\^\",e:\"\\\\s|{|;\",rE:!0},{b:\"~\\\\*?\\\\s+\",e:\"\\\\s|{|;\",rE:!0},{b:\"\\\\*(\\\\.[a-z\\\\-]+)+\"},{b:\"([a-z\\\\-]+\\\\.)+\\\\*\"}]},{cN:\"number\",b:\"\\\\b\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}(:\\\\d{1,5})?\\\\b\"},{cN:\"number\",b:\"\\\\b\\\\d+[kKmMgGdshdwy]*\\\\b\",r:0},r]};return{aliases:[\"nginxconf\"],c:[e.HCM,{b:e.UIR+\"\\\\s\",e:\";|{\",rB:!0,c:[{cN:\"title\",b:e.UIR,starts:b}],r:0}],i:\"[^\\\\s\\\\}]\"}});hljs.registerLanguage(\"cpp\",function(t){var e={cN:\"keyword\",b:\"\\\\b[a-z\\\\d_]*_t\\\\b\"},r={cN:\"string\",v:[t.inherit(t.QSM,{b:'((u8?|U)|L)?\"'}),{b:'(u8?|U)?R\"',e:'\"',c:[t.BE]},{b:\"'\\\\\\\\?.\",e:\"'\",i:\".\"}]},s={cN:\"number\",v:[{b:\"\\\\b(\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)(u|U|l|L|ul|UL|f|F)\"},{b:t.CNR}]},i={cN:\"preprocessor\",b:\"#\",e:\"$\",k:\"if else elif endif define undef warning error line pragma ifdef ifndef\",c:[{b:/\\\\\\n/,r:0},{bK:\"include\",e:\"$\",c:[r,{cN:\"string\",b:\"<\",e:\">\",i:\"\\\\n\"}]},r,s,t.CLCM,t.CBCM]},a=t.IR+\"\\\\s*\\\\(\",c={keyword:\"int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong\",built_in:\"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf\",literal:\"true false nullptr NULL\"};return{aliases:[\"c\",\"cc\",\"h\",\"c++\",\"h++\",\"hpp\"],k:c,i:\"</\",c:[e,t.CLCM,t.CBCM,s,r,i,{b:\"\\\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\\\s*<\",e:\">\",k:c,c:[\"self\",e]},{b:t.IR+\"::\",k:c},{bK:\"new throw return else\",r:0},{cN:\"function\",b:\"(\"+t.IR+\"[\\\\*&\\\\s]+)+\"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\\w\\s\\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:\"params\",b:/\\(/,e:/\\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s]},t.CLCM,t.CBCM,i]}]}});hljs.registerLanguage(\"php\",function(e){var c={cN:\"variable\",b:\"\\\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*\"},a={cN:\"preprocessor\",b:/<\\?(php)?|\\?>/},i={cN:\"string\",c:[e.BE,a],v:[{b:'b\"',e:'\"'},{b:\"b'\",e:\"'\"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},t={v:[e.BNM,e.CNM]};return{aliases:[\"php3\",\"php4\",\"php5\",\"php6\"],cI:!0,k:\"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally\",c:[e.CLCM,e.HCM,e.C(\"/\\\\*\",\"\\\\*/\",{c:[{cN:\"doctag\",b:\"@[A-Za-z]+\"},a]}),e.C(\"__halt_compiler.+?;\",!1,{eW:!0,k:\"__halt_compiler\",l:e.UIR}),{cN:\"string\",b:/<<<['\"]?\\w+['\"]?$/,e:/^\\w+;?$/,c:[e.BE,{cN:\"subst\",v:[{b:/\\$\\w+/},{b:/\\{\\$/,e:/\\}/}]}]},a,c,{b:/(::|->)+[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*/},{cN:\"function\",bK:\"function\",e:/[;{]/,eE:!0,i:\"\\\\$|\\\\[|%\",c:[e.UTM,{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",c:[\"self\",c,e.CBCM,i,t]}]},{cN:\"class\",bK:\"class interface\",e:\"{\",eE:!0,i:/[:\\(\\$\"]/,c:[{bK:\"extends implements\"},e.UTM]},{bK:\"namespace\",e:\";\",i:/[\\.']/,c:[e.UTM]},{bK:\"use\",e:\";\",c:[e.UTM]},{b:\"=>\"},i,t]}});hljs.registerLanguage(\"coffeescript\",function(e){var c={keyword:\"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not\",literal:\"true false null undefined yes no on off\",built_in:\"npm require console print module global window document\"},n=\"[A-Za-z$_][0-9A-Za-z$_]*\",r={cN:\"subst\",b:/#\\{/,e:/}/,k:c},t=[e.BNM,e.inherit(e.CNM,{starts:{e:\"(\\\\s*/)?\",r:0}}),{cN:\"string\",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/\"\"\"/,e:/\"\"\"/,c:[e.BE,r]},{b:/\"/,e:/\"/,c:[e.BE,r]}]},{cN:\"regexp\",v:[{b:\"///\",e:\"///\",c:[r,e.HCM]},{b:\"//[gim]*\",r:0},{b:/\\/(?![ *])(\\\\\\/|.)*?\\/[gim]*(?=\\W|$)/}]},{cN:\"property\",b:\"@\"+n},{b:\"`\",e:\"`\",eB:!0,eE:!0,sL:\"javascript\"}];r.c=t;var s=e.inherit(e.TM,{b:n}),i=\"(\\\\(.*\\\\))?\\\\s*\\\\B[-=]>\",o={cN:\"params\",b:\"\\\\([^\\\\(]\",rB:!0,c:[{b:/\\(/,e:/\\)/,k:c,c:[\"self\"].concat(t)}]};return{aliases:[\"coffee\",\"cson\",\"iced\"],k:c,i:/\\/\\*/,c:t.concat([e.C(\"###\",\"###\"),e.HCM,{cN:\"function\",b:\"^\\\\s*\"+n+\"\\\\s*=\\\\s*\"+i,e:\"[-=]>\",rB:!0,c:[s,o]},{b:/[:\\(,=]\\s*/,r:0,c:[{cN:\"function\",b:i,e:\"[-=]>\",rB:!0,c:[o]}]},{cN:\"class\",bK:\"class\",e:\"$\",i:/[:=\"\\[\\]]/,c:[{bK:\"extends\",eW:!0,i:/[:=\"\\[\\]]/,c:[s]},s]},{cN:\"attribute\",b:n+\":\",e:\":\",rB:!0,rE:!0,r:0}])}});hljs.registerLanguage(\"javascript\",function(e){return{aliases:[\"js\"],k:{keyword:\"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await\",literal:\"true false null undefined NaN Infinity\",built_in:\"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise\"},c:[{cN:\"pi\",r:10,b:/^\\s*['\"]use (strict|asm)['\"]/},e.ASM,e.QSM,{cN:\"string\",b:\"`\",e:\"`\",c:[e.BE,{cN:\"subst\",b:\"\\\\$\\\\{\",e:\"\\\\}\"}]},e.CLCM,e.CBCM,{cN:\"number\",v:[{b:\"\\\\b(0[bB][01]+)\"},{b:\"\\\\b(0[oO][0-7]+)\"},{b:e.CNR}],r:0},{b:\"(\"+e.RSR+\"|\\\\b(case|return|throw)\\\\b)\\\\s*\",k:\"return throw case\",c:[e.CLCM,e.CBCM,e.RM,{b:/</,e:/>\\s*[);\\]]/,r:0,sL:\"xml\"}],r:0},{cN:\"function\",bK:\"function\",e:/\\{/,eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:\"params\",b:/\\(/,e:/\\)/,eB:!0,eE:!0,c:[e.CLCM,e.CBCM]}],i:/\\[|%/},{b:/\\$[(.]/},{b:\"\\\\.\"+e.IR,r:0},{bK:\"import\",e:\"[;$]\",k:\"import from as\",c:[e.ASM,e.QSM]},{cN:\"class\",bK:\"class\",e:/[{;=]/,eE:!0,i:/[:\"\\[\\]]/,c:[{bK:\"extends\"},e.UTM]}],i:/#/}});hljs.registerLanguage(\"ini\",function(e){var c={cN:\"string\",c:[e.BE],v:[{b:\"'''\",e:\"'''\",r:10},{b:'\"\"\"',e:'\"\"\"',r:10},{b:'\"',e:'\"'},{b:\"'\",e:\"'\"}]};return{aliases:[\"toml\"],cI:!0,i:/\\S/,c:[e.C(\";\",\"$\"),e.HCM,{cN:\"title\",b:/^\\s*\\[+/,e:/\\]+/},{cN:\"setting\",b:/^[a-z0-9\\[\\]_-]+\\s*=\\s*/,e:\"$\",c:[{cN:\"value\",eW:!0,k:\"on off true false yes no\",c:[{cN:\"variable\",v:[{b:/\\$[\\w\\d\"][\\w\\d_]*/},{b:/\\$\\{(.*?)}/}]},c,{cN:\"number\",b:/([\\+\\-]+)?[\\d]+_[\\d_]+/},e.NM],r:0}]}]}});hljs.registerLanguage(\"diff\",function(e){return{aliases:[\"patch\"],c:[{cN:\"chunk\",r:10,v:[{b:/^@@ +\\-\\d+,\\d+ +\\+\\d+,\\d+ +@@$/},{b:/^\\*\\*\\* +\\d+,\\d+ +\\*\\*\\*\\*$/},{b:/^\\-\\-\\- +\\d+,\\d+ +\\-\\-\\-\\-$/}]},{cN:\"header\",v:[{b:/Index: /,e:/$/},{b:/=====/,e:/=====$/},{b:/^\\-\\-\\-/,e:/$/},{b:/^\\*{3} /,e:/$/},{b:/^\\+\\+\\+/,e:/$/},{b:/\\*{5}/,e:/\\*{5}$/}]},{cN:\"addition\",b:\"^\\\\+\",e:\"$\"},{cN:\"deletion\",b:\"^\\\\-\",e:\"$\"},{cN:\"change\",b:\"^\\\\!\",e:\"$\"}]}});\nexports.hljs = hljs;\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/highlight/highlight.js",
"module-type": "library"
},
"$:/plugins/tiddlywiki/highlight/highlight.css": {
"text": "/*\n\nOriginal style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>\n\n*/\n\n.hljs {\n display: block;\n overflow-x: auto;\n padding: 0.5em;\n background: #f0f0f0;\n -webkit-text-size-adjust: none;\n}\n\n.hljs,\n.hljs-subst,\n.hljs-tag .hljs-title,\n.nginx .hljs-title {\n color: black;\n}\n\n.hljs-string,\n.hljs-title,\n.hljs-constant,\n.hljs-parent,\n.hljs-tag .hljs-value,\n.hljs-rule .hljs-value,\n.hljs-preprocessor,\n.hljs-pragma,\n.hljs-name,\n.haml .hljs-symbol,\n.ruby .hljs-symbol,\n.ruby .hljs-symbol .hljs-string,\n.hljs-template_tag,\n.django .hljs-variable,\n.smalltalk .hljs-class,\n.hljs-addition,\n.hljs-flow,\n.hljs-stream,\n.bash .hljs-variable,\n.pf .hljs-variable,\n.apache .hljs-tag,\n.apache .hljs-cbracket,\n.tex .hljs-command,\n.tex .hljs-special,\n.erlang_repl .hljs-function_or_atom,\n.asciidoc .hljs-header,\n.markdown .hljs-header,\n.coffeescript .hljs-attribute,\n.tp .hljs-variable {\n color: #800;\n}\n\n.smartquote,\n.hljs-comment,\n.hljs-annotation,\n.diff .hljs-header,\n.hljs-chunk,\n.asciidoc .hljs-blockquote,\n.markdown .hljs-blockquote {\n color: #888;\n}\n\n.hljs-number,\n.hljs-date,\n.hljs-regexp,\n.hljs-literal,\n.hljs-hexcolor,\n.smalltalk .hljs-symbol,\n.smalltalk .hljs-char,\n.go .hljs-constant,\n.hljs-change,\n.lasso .hljs-variable,\n.makefile .hljs-variable,\n.asciidoc .hljs-bullet,\n.markdown .hljs-bullet,\n.asciidoc .hljs-link_url,\n.markdown .hljs-link_url {\n color: #080;\n}\n\n.hljs-label,\n.ruby .hljs-string,\n.hljs-decorator,\n.hljs-filter .hljs-argument,\n.hljs-localvars,\n.hljs-array,\n.hljs-attr_selector,\n.hljs-important,\n.hljs-pseudo,\n.hljs-pi,\n.haml .hljs-bullet,\n.hljs-doctype,\n.hljs-deletion,\n.hljs-envvar,\n.hljs-shebang,\n.apache .hljs-sqbracket,\n.nginx .hljs-built_in,\n.tex .hljs-formula,\n.erlang_repl .hljs-reserved,\n.hljs-prompt,\n.asciidoc .hljs-link_label,\n.markdown .hljs-link_label,\n.vhdl .hljs-attribute,\n.clojure .hljs-attribute,\n.asciidoc .hljs-attribute,\n.lasso .hljs-attribute,\n.coffeescript .hljs-property,\n.hljs-phony {\n color: #88f;\n}\n\n.hljs-keyword,\n.hljs-id,\n.hljs-title,\n.hljs-built_in,\n.css .hljs-tag,\n.hljs-doctag,\n.smalltalk .hljs-class,\n.hljs-winutils,\n.bash .hljs-variable,\n.pf .hljs-variable,\n.apache .hljs-tag,\n.hljs-type,\n.hljs-typename,\n.tex .hljs-command,\n.asciidoc .hljs-strong,\n.markdown .hljs-strong,\n.hljs-request,\n.hljs-status,\n.tp .hljs-data,\n.tp .hljs-io {\n font-weight: bold;\n}\n\n.asciidoc .hljs-emphasis,\n.markdown .hljs-emphasis,\n.tp .hljs-units {\n font-style: italic;\n}\n\n.nginx .hljs-built_in {\n font-weight: normal;\n}\n\n.coffeescript .javascript,\n.javascript .xml,\n.lasso .markup,\n.tex .hljs-formula,\n.xml .javascript,\n.xml .vbscript,\n.xml .css,\n.xml .hljs-cdata {\n opacity: 0.5;\n}\n",
"type": "text/css",
"title": "$:/plugins/tiddlywiki/highlight/highlight.css",
"tags": "[[$:/tags/Stylesheet]]"
},
"$:/plugins/tiddlywiki/highlight/highlightblock.js": {
"title": "$:/plugins/tiddlywiki/highlight/highlightblock.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/highlight/highlightblock.js\ntype: application/javascript\nmodule-type: widget\n\nWraps up the fenced code blocks parser for highlight and use in TiddlyWiki5\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar TYPE_MAPPINGS_BASE = \"$:/config/HighlightPlugin/TypeMappings/\";\n\nvar CodeBlockWidget = require(\"$:/core/modules/widgets/codeblock.js\").codeblock;\n\nvar hljs = require(\"$:/plugins/tiddlywiki/highlight/highlight.js\");\n\nhljs.configure({tabReplace: \" \"});\t\n\nCodeBlockWidget.prototype.postRender = function() {\n\tvar domNode = this.domNodes[0],\n\t\tlanguage = this.language,\n\t\ttiddler = this.wiki.getTiddler(TYPE_MAPPINGS_BASE + language);\n\tif(tiddler) {\n\t\tlanguage = tiddler.fields.text || \"\";\n\t}\n\tif(language && hljs.listLanguages().indexOf(language) !== -1) {\n\t\tdomNode.className = language.toLowerCase() + \" hljs\";\n\t\tif($tw.browser && !domNode.isTiddlyWikiFakeDom) {\n\t\t\thljs.highlightBlock(domNode);\t\t\t\n\t\t} else {\n\t\t\tvar text = domNode.textContent;\n\t\t\tdomNode.children[0].innerHTML = hljs.fixMarkup(hljs.highlight(language,text).value);\n\t\t\t// If we're using the fakedom then specially save the original raw text\n\t\t\tif(domNode.isTiddlyWikiFakeDom) {\n\t\t\t\tdomNode.children[0].textInnerHTML = text;\n\t\t\t}\n\t\t}\n\t}\t\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/plugins/tiddlywiki/highlight/license": {
"title": "$:/plugins/tiddlywiki/highlight/license",
"type": "text/plain",
"text": "Copyright (c) 2006, Ivan Sagalaev\nAll rights reserved.\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n * Neither the name of highlight.js nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
},
"$:/plugins/tiddlywiki/highlight/readme": {
"title": "$:/plugins/tiddlywiki/highlight/readme",
"text": "This plugin provides syntax highlighting of code blocks using v8.8.0 of [[highlight.js|https://github.com/isagalaev/highlight.js]] from Ivan Sagalaev.\n\n! Usage\n\nWhen the plugin is installed it automatically applies highlighting to all codeblocks defined with triple backticks or with the CodeBlockWidget.\n\nThe language can optionally be specified after the opening triple braces:\n\n<$codeblock code=\"\"\"```css\n * { margin: 0; padding: 0; } /* micro reset */\n\nhtml { font-size: 62.5%; }\nbody { font-size: 14px; font-size: 1.4rem; } /* =14px */\nh1 { font-size: 24px; font-size: 2.4rem; } /* =24px */\n```\"\"\"/>\n\nIf no language is specified highlight.js will attempt to automatically detect the language.\n\n! Built-in Language Brushes\n\nThe plugin includes support for the following languages (referred to as \"brushes\" by highlight.js):\n\n* apache\n* bash\n* coffeescript\n* cpp\n* cs\n* css\n* diff\n* http\n* ini\n* java\n* javascript\n* json\n* makefile\n* markdown\n* nginx\n* objectivec\n* perl\n* php\n* python\n* ruby\n* sql\n* xml\n\nYou can also specify the language as a MIME content type (eg `text/html` or `text/css`). The mapping is accomplished via mapping tiddlers whose titles start with `$:/config/HighlightPlugin/TypeMappings/`.\n"
},
"$:/plugins/tiddlywiki/highlight/styles": {
"title": "$:/plugins/tiddlywiki/highlight/styles",
"tags": "[[$:/tags/Stylesheet]]",
"text": ".hljs{display:block;overflow-x:auto;padding:.5em;color:#333;background:#f8f8f8;-webkit-text-size-adjust:none}.hljs-comment,.diff .hljs-header,.hljs-javadoc{color:#998;font-style:italic}.hljs-keyword,.css .rule .hljs-keyword,.hljs-winutils,.nginx .hljs-title,.hljs-subst,.hljs-request,.hljs-status{color:#333;font-weight:bold}.hljs-number,.hljs-hexcolor,.ruby .hljs-constant{color:teal}.hljs-string,.hljs-tag .hljs-value,.hljs-phpdoc,.hljs-dartdoc,.tex .hljs-formula{color:#d14}.hljs-title,.hljs-id,.scss .hljs-preprocessor{color:#900;font-weight:bold}.hljs-list .hljs-keyword,.hljs-subst{font-weight:normal}.hljs-class .hljs-title,.hljs-type,.vhdl .hljs-literal,.tex .hljs-command{color:#458;font-weight:bold}.hljs-tag,.hljs-tag .hljs-title,.hljs-rule .hljs-property,.django .hljs-tag .hljs-keyword{color:navy;font-weight:normal}.hljs-attribute,.hljs-variable,.lisp .hljs-body,.hljs-name{color:teal}.hljs-regexp{color:#009926}.hljs-symbol,.ruby .hljs-symbol .hljs-string,.lisp .hljs-keyword,.clojure .hljs-keyword,.scheme .hljs-keyword,.tex .hljs-special,.hljs-prompt{color:#990073}.hljs-built_in{color:#0086b3}.hljs-preprocessor,.hljs-pragma,.hljs-pi,.hljs-doctype,.hljs-shebang,.hljs-cdata{color:#999;font-weight:bold}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.diff .hljs-change{background:#0086b3}.hljs-chunk{color:#aaa}"
},
"$:/plugins/tiddlywiki/highlight/usage": {
"title": "$:/plugins/tiddlywiki/highlight/usage",
"text": "! Usage\n\nFenced code blocks can have a language specifier added to trigger highlighting in a specific language. Otherwise heuristics are used to detect the language.\n\n```\n ```js\n var a = b + c; // Highlighted as JavaScript\n ```\n```\n! Adding Themes\n\nYou can add themes from highlight.js by copying the CSS to a new tiddler and tagging it with [[$:/tags/Stylesheet]]. The available themes can be found on GitHub:\n\nhttps://github.com/isagalaev/highlight.js/tree/master/src/styles\n"
}
}
}
var hljs = require("$:/plugins/tiddlywiki/highlight/highlight.js");
!function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs}))}(function(e){function n(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0===t.index}function a(e){return k.test(e)}function i(e){var n,t,r,i,o=e.className+" ";if(o+=e.parentNode?e.parentNode.className:"",t=B.exec(o))return w(t[1])?t[1]:"no-highlight";for(o=o.split(/\s+/),n=0,r=o.length;r>n;n++)if(i=o[n],a(i)||w(i))return i}function o(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3===i.nodeType?a+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!==r[0].offset?e[0].offset<r[0].offset?e:r:"start"===r[0].event?e:r:e.length?e:r}function o(e){function r(e){return" "+e.nodeName+'="'+n(e.value).replace('"',""")+'"'}s+="<"+t(e)+E.map.call(e.attributes,r).join("")+">"}function u(e){s+="</"+t(e)+">"}function c(e){("start"===e.event?o:u)(e.node)}for(var l=0,s="",f=[];e.length||r.length;){var g=i();if(s+=n(a.substring(l,g[0].offset)),l=g[0].offset,g===e){f.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g===e&&g.length&&g[0].offset===l);f.reverse().forEach(o)}else"start"===g[0].event?f.push(g[0].node):f.pop(),c(g.splice(0,1)[0])}return s+n(a.substr(l))}function l(e){return e.v&&!e.cached_variants&&(e.cached_variants=e.v.map(function(n){return o(e,{v:null},n)})),e.cached_variants||e.eW&&[o(e)]||[e]}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var o={},u=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");o[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?u("keyword",a.k):x(a.k).forEach(function(e){u(e,a.k[e])}),a.k=o}a.lR=t(a.l||/\w+/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),null==a.r&&(a.r=1),a.c||(a.c=[]),a.c=Array.prototype.concat.apply([],a.c.map(function(e){return l("self"===e?a:e)})),a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var c=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=c.length?t(c.join("|"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){var t,a;for(t=0,a=n.c.length;a>t;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!a&&r(n.iR,e)}function l(e,n){var t=N.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function p(e,n,t,r){var a=r?"":I.classPrefix,i='<span class="'+a,o=t?"":C;return i+=e+'">',i+n+o}function h(){var e,t,r,a;if(!E.k)return n(k);for(a="",t=0,E.lR.lastIndex=0,r=E.lR.exec(k);r;)a+=n(k.substring(t,r.index)),e=l(E,r),e?(B+=e[1],a+=p(e[0],n(r[0]))):a+=n(r[0]),t=E.lR.lastIndex,r=E.lR.exec(k);return a+n(k.substr(t))}function d(){var e="string"==typeof E.sL;if(e&&!y[E.sL])return n(k);var t=e?f(E.sL,k,!0,x[E.sL]):g(k,E.sL.length?E.sL:void 0);return E.r>0&&(B+=t.r),e&&(x[E.sL]=t.top),p(t.language,t.value,!1,!0)}function b(){L+=null!=E.sL?d():h(),k=""}function v(e){L+=e.cN?p(e.cN,"",!0):"",E=Object.create(e,{parent:{value:E}})}function m(e,n){if(k+=e,null==n)return b(),0;var t=o(n,E);if(t)return t.skip?k+=n:(t.eB&&(k+=n),b(),t.rB||t.eB||(k=n)),v(t,n),t.rB?0:n.length;var r=u(E,n);if(r){var a=E;a.skip?k+=n:(a.rE||a.eE||(k+=n),b(),a.eE&&(k=n));do E.cN&&(L+=C),E.skip||(B+=E.r),E=E.parent;while(E!==r.parent);return r.starts&&v(r.starts,""),a.rE?0:n.length}if(c(n,E))throw new Error('Illegal lexeme "'+n+'" for mode "'+(E.cN||"<unnamed>")+'"');return k+=n,n.length||1}var N=w(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var R,E=i||N,x={},L="";for(R=E;R!==N;R=R.parent)R.cN&&(L=p(R.cN,"",!0)+L);var k="",B=0;try{for(var M,j,O=0;;){if(E.t.lastIndex=O,M=E.t.exec(t),!M)break;j=m(t.substring(O,M.index),M[0]),O=M.index+j}for(m(t.substr(O)),R=E;R.parent;R=R.parent)R.cN&&(L+=C);return{r:B,value:L,language:e,top:E}}catch(T){if(T.message&&-1!==T.message.indexOf("Illegal"))return{r:0,value:n(t)};throw T}}function g(e,t){t=t||I.languages||x(y);var r={r:0,value:n(e)},a=r;return t.filter(w).forEach(function(n){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}),a.language&&(r.second_best=a),r}function p(e){return I.tabReplace||I.useBR?e.replace(M,function(e,n){return I.useBR&&"\n"===e?"<br>":I.tabReplace?n.replace(/\t/g,I.tabReplace):""}):e}function h(e,n,t){var r=n?L[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function d(e){var n,t,r,o,l,s=i(e);a(s)||(I.useBR?(n=document.createElementNS("http://www.w3.org/1999/xhtml","div"),n.innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ \/]*>/g,"\n")):n=e,l=n.textContent,r=s?f(s,l,!0):g(l),t=u(n),t.length&&(o=document.createElementNS("http://www.w3.org/1999/xhtml","div"),o.innerHTML=r.value,r.value=c(t,u(o),l)),r.value=p(r.value),e.innerHTML=r.value,e.className=h(e.className,s,r.language),e.result={language:r.language,re:r.r},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.r}))}function b(e){I=o(I,e)}function v(){if(!v.called){v.called=!0;var e=document.querySelectorAll("pre code");E.forEach.call(e,d)}}function m(){addEventListener("DOMContentLoaded",v,!1),addEventListener("load",v,!1)}function N(n,t){var r=y[n]=t(e);r.aliases&&r.aliases.forEach(function(e){L[e]=n})}function R(){return x(y)}function w(e){return e=(e||"").toLowerCase(),y[e]||y[L[e]]}var E=[],x=Object.keys,y={},L={},k=/^(no-?highlight|plain|text)$/i,B=/\blang(?:uage)?-([\w-]+)\b/i,M=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,C="</span>",I={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};return e.highlight=f,e.highlightAuto=g,e.fixMarkup=p,e.highlightBlock=d,e.configure=b,e.initHighlighting=v,e.initHighlightingOnLoad=m,e.registerLanguage=N,e.listLanguages=R,e.getLanguage=w,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e});hljs.registerLanguage("apache",function(e){var r={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:!0,c:[e.HCM,{cN:"section",b:"</?",e:">"},{cN:"attribute",b:/\w+/,r:0,k:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"meta",b:"\\s\\[",e:"\\]$"},{cN:"variable",b:"[\\$%]\\{",e:"\\}",c:["self",r]},r,e.QSM]}}],i:/\S/}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/\b-?[a-z\._]+\b/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,s,a,t]}});hljs.registerLanguage("shell",function(s){return{aliases:["console"],c:[{cN:"meta",b:"^\\s{0,3}[\\w\\d\\[\\]()@-]*[>%$#]",starts:{e:"$",sL:"bash"}}]}});hljs.registerLanguage("javascript",function(e){var r="[A-Za-z$_][0-9A-Za-z$_]*",t={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},a={cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},n={cN:"subst",b:"\\$\\{",e:"\\}",k:t,c:[]},c={cN:"string",b:"`",e:"`",c:[e.BE,n]};n.c=[e.ASM,e.QSM,c,a,e.RM];var s=n.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx"],k:t,c:[{cN:"meta",r:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,c,e.CLCM,e.CBCM,a,{b:/[{,]\s*/,r:0,c:[{b:r+"\\s*:",rB:!0,r:0,c:[{cN:"attr",b:r,r:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+r+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:r},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:s}]}]},{b:/</,e:/(\/\w+|\w+\/)>/,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:[{b:/<\w+\s*\/>/,skip:!0},"self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:r}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:s}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor",e:/\{/,eE:!0}],i:/#(?!!)/}});hljs.registerLanguage("ini",function(e){var b={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",r:10},{b:'"""',e:'"""',r:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[e.C(";","$"),e.HCM,{cN:"section",b:/^\s*\[+/,e:/\]+/},{b:/^[a-z0-9\[\]_-]+\s*=\s*/,e:"$",rB:!0,c:[{cN:"attr",b:/[a-z0-9\[\]_-]+/},{b:/=/,eW:!0,r:0,c:[{cN:"literal",b:/\bon|off|true|false|yes|no\b/},{cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},b,{cN:"number",b:/([\+\-]+)?[\d]+_[\d_]+/},e.NM]}]}]}});hljs.registerLanguage("coffeescript",function(e){var c={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},n="[A-Za-z$_][0-9A-Za-z$_]*",r={cN:"subst",b:/#\{/,e:/}/,k:c},i=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,r]},{b:/"/,e:/"/,c:[e.BE,r]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[r,e.HCM]},{b:"//[gim]*",r:0},{b:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{b:"@"+n},{sL:"javascript",eB:!0,eE:!0,v:[{b:"```",e:"```"},{b:"`",e:"`"}]}];r.c=i;var s=e.inherit(e.TM,{b:n}),t="(\\(.*\\))?\\s*\\B[-=]>",o={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:c,c:["self"].concat(i)}]};return{aliases:["coffee","cson","iced"],k:c,i:/\/\*/,c:i.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+n+"\\s*=\\s*"+t,e:"[-=]>",rB:!0,c:[s,o]},{b:/[:\(,=]\s*/,r:0,c:[{cN:"function",b:t,e:"[-=]>",rB:!0,c:[o]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[s]},s]},{b:n+":",e:":",rB:!0,rE:!0,r:0}])}});hljs.registerLanguage("ruby",function(e){var b="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",r={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},c={cN:"doctag",b:"@[A-Za-z]+"},a={b:"#<",e:">"},s=[e.C("#","$",{c:[c]}),e.C("^\\=begin","^\\=end",{c:[c],r:10}),e.C("^__END__","\\n$")],n={cN:"subst",b:"#\\{",e:"}",k:r},t={cN:"string",c:[e.BE,n],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{b:/<<(-?)\w+$/,e:/^\s*\w+$/}]},i={cN:"params",b:"\\(",e:"\\)",endsParent:!0,k:r},d=[t,a,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<\\s*",c:[{b:"("+e.IR+"::)?"+e.IR}]}].concat(s)},{cN:"function",bK:"def",e:"$|;",c:[e.inherit(e.TM,{b:b}),i].concat(s)},{b:e.IR+"::"},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":(?!\\s)",c:[t,{b:b}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{cN:"params",b:/\|/,e:/\|/,k:r},{b:"("+e.RSR+"|unless)\\s*",k:"unless",c:[a,{cN:"regexp",c:[e.BE,n],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(s),r:0}].concat(s);n.c=d,i.c=d;var l="[>?]>",o="[\\w#]+\\(\\w+\\):\\d+:\\d+>",u="(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>",w=[{b:/^\s*=>/,starts:{e:"$",c:d}},{cN:"meta",b:"^("+l+"|"+o+"|"+u+")",starts:{e:"$",c:d}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:r,i:/\/\*/,c:s.concat(w).concat(d)}});hljs.registerLanguage("lisp",function(b){var e="[a-zA-Z_\\-\\+\\*\\/\\<\\=\\>\\&\\#][a-zA-Z0-9_\\-\\+\\*\\/\\<\\=\\>\\&\\#!]*",c="\\|[^]*?\\|",r="(\\-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|\\-)?\\d+)?",a={cN:"meta",b:"^#!",e:"$"},l={cN:"literal",b:"\\b(t{1}|nil)\\b"},n={cN:"number",v:[{b:r,r:0},{b:"#(b|B)[0-1]+(/[0-1]+)?"},{b:"#(o|O)[0-7]+(/[0-7]+)?"},{b:"#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?"},{b:"#(c|C)\\("+r+" +"+r,e:"\\)"}]},i=b.inherit(b.QSM,{i:null}),t=b.C(";","$",{r:0}),s={b:"\\*",e:"\\*"},u={cN:"symbol",b:"[:&]"+e},d={b:e,r:0},f={b:c},m={b:"\\(",e:"\\)",c:["self",l,i,n,d]},o={c:[n,i,s,u,m,d],v:[{b:"['`]\\(",e:"\\)"},{b:"\\(quote ",e:"\\)",k:{name:"quote"}},{b:"'"+c}]},v={v:[{b:"'"+e},{b:"#'"+e+"(::"+e+")*"}]},N={b:"\\(\\s*",e:"\\)"},A={eW:!0,r:0};return N.c=[{cN:"name",v:[{b:e},{b:c}]},A],A.c=[o,v,N,l,n,i,t,s,u,f,d],{i:/\S/,c:[n,a,l,i,t,o,v,N,d]}});hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*#]/,c:[{bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment",e:/;/,eW:!0,l:/[\w\.]+/,k:{keyword:"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}});hljs.registerLanguage("java",function(e){var a="[A-?a-zA-Z_$][A-?a-zA-Z_$0-9]*",t=a+"(<"+a+"(\\s*,\\s*"+a+")*>)?",r="false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",s="\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",c={cN:"number",b:s,r:0};return{aliases:["jsp"],k:r,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{b:/\w+@/,r:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",r:0},{cN:"function",b:"("+t+"\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:r,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:r,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},c,{cN:"meta",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("http",function(e){var t="HTTP/[0-9\\.]+";return{aliases:["https"],i:"\\S",c:[{b:"^"+t,e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{b:"^[A-Z]+ (.*?) "+t+"$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0},{b:t},{cN:"keyword",b:"[A-Z]+"}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{e:"$",r:0}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},s={b:"->{",e:"}"},n={v:[{b:/\$\d/},{b:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{b:/[\$%@][^\s\w{]/,r:0}]},i=[e.BE,r,n],o=[n,e.HCM,e.C("^\\=\\w","\\=cut",{eW:!0}),s,{cN:"string",c:i,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[e.HCM,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],r:0}]},{cN:"function",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",eE:!0,r:5,c:[e.TM]},{b:"-\\w\\b",r:0},{b:"^__DATA__$",e:"^__END__$",sL:"mojolicious",c:[{b:"^@@.*",e:"$",cN:"comment"}]}];return r.c=o,s.c=o,{aliases:["pl","pm"],l:/[\w\.]+/,k:t,c:o}});hljs.registerLanguage("xml",function(s){var e="[A-Za-z0-9\\._:-]+",t={eW:!0,i:/</,r:0,c:[{cN:"attr",b:e,r:0},{b:/=\s*/,r:0,c:[{cN:"string",endsParent:!0,v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s"'=<>`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],cI:!0,c:[{cN:"meta",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},s.C("<!--","-->",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0}]},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{name:"style"},c:[t],starts:{e:"</style>",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{name:"script"},c:[t],starts:{e:"</script>",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"meta",v:[{b:/<\?xml/,e:/\?>/,r:10},{b:/<\?\w+/,e:/\?>/}]},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"name",b:/[^\/><\s]+/,r:0},t]}]}});hljs.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"meta",r:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"comment",v:[{b:/Index: /,e:/$/},{b:/={3,}/,e:/$/},{b:/^\-{3}/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+{3}/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"addition",b:"^\\!",e:"$"}]}});hljs.registerLanguage("cpp",function(t){var e={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[{b:'(u8?|U)?L?"',e:'"',i:"\\n",c:[t.BE]},{b:'(u8?|U)?R"',e:'"',c:[t.BE]},{b:"'\\\\?.",e:"'",i:"."}]},s={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],r:0},i={cN:"meta",b:/#\s*[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},c:[{b:/\\\n/,r:0},t.inherit(r,{cN:"meta-string"}),{cN:"meta-string",b:/<[^\n>]*>/,e:/$/,i:"\\n"},t.CLCM,t.CBCM]},a=t.IR+"\\s*\\(",c={keyword:"int float while private char catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and or not",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},n=[e,t.CLCM,t.CBCM,s,r];return{aliases:["c","cc","h","c++","h++","hpp"],k:c,i:"</",c:n.concat([i,{b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:c,c:["self",e]},{b:t.IR+"::",k:c},{v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:c,c:n.concat([{b:/\(/,e:/\)/,k:c,c:n.concat(["self"]),r:0}]),r:0},{cN:"function",b:"("+t.IR+"[\\*&\\s]+)+"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\w\s\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s,e]},t.CLCM,t.CBCM,i]},{cN:"class",bK:"class struct",e:/[{;:]/,c:[{b:/</,e:/>/,c:["self"]},t.TM]}]),exports:{preprocessor:i,strings:r,k:c}}});hljs.registerLanguage("json",function(e){var i={literal:"true false null"},n=[e.QSM,e.CNM],r={e:",",eW:!0,eE:!0,c:n,k:i},t={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(r,{b:/:/})],i:"\\S"},c={b:"\\[",e:"\\]",c:[e.inherit(r)],i:"\\S"};return n.splice(n.length,0,t,c),{c:n,k:i,i:"\\S"}});hljs.registerLanguage("cs",function(e){var i={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long nameof object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let on orderby partial remove select set value var where yield",literal:"null false true"},t={cN:"string",b:'@"',e:'"',c:[{b:'""'}]},r=e.inherit(t,{i:/\n/}),a={cN:"subst",b:"{",e:"}",k:i},c=e.inherit(a,{i:/\n/}),n={cN:"string",b:/\$"/,e:'"',i:/\n/,c:[{b:"{{"},{b:"}}"},e.BE,c]},s={cN:"string",b:/\$@"/,e:'"',c:[{b:"{{"},{b:"}}"},{b:'""'},a]},o=e.inherit(s,{i:/\n/,c:[{b:"{{"},{b:"}}"},{b:'""'},c]});a.c=[s,n,t,e.ASM,e.QSM,e.CNM,e.CBCM],c.c=[o,n,r,e.ASM,e.QSM,e.CNM,e.inherit(e.CBCM,{i:/\n/})];var l={v:[s,n,t,e.ASM,e.QSM]},b=e.IR+"(<"+e.IR+"(\\s*,\\s*"+e.IR+")*>)?(\\[\\])?";return{aliases:["csharp"],k:i,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"doctag",v:[{b:"///",r:0},{b:"<!--|-->"},{b:"</?",e:">"}]}]}),e.CLCM,e.CBCM,{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},l,e.CNM,{bK:"class interface",e:/[{;=]/,i:/[^\s:]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"namespace",e:/[{;=]/,i:/[^\s:]/,c:[e.inherit(e.TM,{b:"[a-zA-Z](\\.?\\w)*"}),e.CLCM,e.CBCM]},{cN:"meta",b:"^\\s*\\[",eB:!0,e:"\\]",eE:!0,c:[{cN:"meta-string",b:/"/,e:/"/}]},{bK:"new return throw await else",r:0},{cN:"function",b:"("+b+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:i,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:i,r:0,c:[l,e.CNM,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage("nginx",function(e){var r={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},b={eW:!0,l:"[a-z/_]+",k:{literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,r],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[r]},{cN:"regexp",c:[e.BE,r],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},r]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s+{",rB:!0,e:"{",c:[{cN:"section",b:e.UIR}],r:0},{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"attribute",b:e.UIR,starts:b}],r:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```w*s*$",e:"^```s*$"},{b:"`.+?`"},{b:"^( {4}| )",e:"$",r:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",t={b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{b:"@",e:"[{;]",i:/:/,c:[{cN:"keyword",b:/\w+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:c,r:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,t]}]}});hljs.registerLanguage("python",function(e){var r={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},b={cN:"meta",b:/^(>>>|\.\.\.) /},c={cN:"subst",b:/\{/,e:/\}/,k:r,i:/#/},a={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[b],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[b],r:10},{b:/(fr|rf|f)'''/,e:/'''/,c:[b,c]},{b:/(fr|rf|f)"""/,e:/"""/,c:[b,c]},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},{b:/(fr|rf|f)'/,e:/'/,c:[c]},{b:/(fr|rf|f)"/,e:/"/,c:[c]},e.ASM,e.QSM]},s={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},i={cN:"params",b:/\(/,e:/\)/,c:["self",b,s,a]};return c.c=[a,s,b],{aliases:["py","gyp"],k:r,i:/(<\/|->|\?)|=>/,c:[b,s,a,e.HCM,{v:[{cN:"function",bK:"def"},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,i,{b:/->/,eW:!0,k:"None"}]},{cN:"meta",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("objectivec",function(e){var t={cN:"built_in",b:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},_={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},i=/[a-zA-Z@][a-zA-Z0-9_]*/,n="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],k:_,l:i,i:"</",c:[t,e.CLCM,e.CBCM,e.CNM,e.QSM,{cN:"string",v:[{b:'@"',e:'"',i:"\\n",c:[e.BE]},{b:"'",e:"[^\\\\]'",i:"[^\\\\][^']"}]},{cN:"meta",b:"#",e:"$",c:[{cN:"meta-string",v:[{b:'"',e:'"'},{b:"<",e:">"}]}]},{cN:"class",b:"("+n.split(" ").join("|")+")\\b",e:"({|$)",eE:!0,k:n,l:i,c:[e.UTM]},{b:"\\."+e.UIR,r:0}]}});hljs.registerLanguage("lua",function(e){var t="\\[=*\\[",a="\\]=*\\]",r={b:t,e:a,c:["self"]},n=[e.C("--(?!"+t+")","$"),e.C("--"+t,a,{c:[r],r:10})];return{l:e.UIR,k:{literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstringmodule next pairs pcall print rawequal rawget rawset require select setfenvsetmetatable tonumber tostring type unpack xpcall arg selfcoroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},c:n.concat([{cN:"function",bK:"function",e:"\\)",c:[e.inherit(e.TM,{b:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{cN:"params",b:"\\(",eW:!0,c:n}].concat(n)},e.CNM,e.ASM,e.QSM,{cN:"string",b:t,e:a,c:[r],r:5}])}});hljs.registerLanguage("r",function(e){var r="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{c:[e.HCM,{b:r,l:r,k:{keyword:"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},r:0},{cN:"number",b:"0[xX][0-9a-fA-F]+[Li]?\\b",r:0},{cN:"number",b:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",r:0},{cN:"number",b:"\\d+\\.(?!\\d)(?:i\\b)?",r:0},{cN:"number",b:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",r:0},{cN:"number",b:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",r:0},{b:"`",e:"`",r:0},{cN:"string",c:[e.BE],v:[{b:'"',e:'"'},{b:"'",e:"'"}]}]}});hljs.registerLanguage("php",function(e){var c={b:"\\$+[a-zA-Z_-y][a-zA-Z0-9_-y]*"},i={cN:"meta",b:/<\?(php)?|\?>/},t={cN:"string",c:[e.BE,i],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},a={v:[e.BNM,e.CNM]};return{aliases:["php3","php4","php5","php6"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.HCM,e.C("//","$",{c:[i]}),e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},i,{cN:"keyword",b:/\$this\b/},c,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",c,e.CBCM,t,a]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},t,a]}});hljs.registerLanguage("vbnet",function(e){return{aliases:["vb"],cI:!0,k:{keyword:"addhandler addressof alias and andalso aggregate ansi as assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into is isfalse isnot istrue join key let lib like loop me mid mod module mustinherit mustoverride mybase myclass namespace narrowing new next not notinheritable notoverridable of off on operator option optional or order orelse overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim rem removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly xor",built_in:"boolean byte cbool cbyte cchar cdate cdec cdbl char cint clng cobj csbyte cshort csng cstr ctype date decimal directcast double gettype getxmlnamespace iif integer long object sbyte short single string trycast typeof uinteger ulong ushort",literal:"true false nothing"},i:"//|{|}|endif|gosub|variant|wend",c:[e.inherit(e.QSM,{c:[{b:'""'}]}),e.C("'","$",{rB:!0,c:[{cN:"doctag",b:"'''|<!--|-->",c:[e.PWM]},{cN:"doctag",b:"</?",e:">",c:[e.PWM]}]}),e.CNM,{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"if else elseif end region externalsource"}}]}});hljs.registerLanguage("makefile",function(e){var i={cN:"variable",v:[{b:"\\$\\("+e.UIR+"\\)",c:[e.BE]},{b:/\$[@%<?\^\+\*]/}]},r={cN:"string",b:/"/,e:/"/,c:[e.BE,i]},a={cN:"variable",b:/\$\([\w-]+\s/,e:/\)/,k:{built_in:"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value"},c:[i]},n={b:"^"+e.UIR+"\\s*[:+?]?=",i:"\\n",rB:!0,c:[{b:"^"+e.UIR,e:"[:+?]?=",eE:!0}]},t={cN:"meta",b:/^\.PHONY:/,e:/$/,k:{"meta-keyword":".PHONY"},l:/[\.\w]+/},l={cN:"section",b:/^[^\s]+:/,e:/$/,c:[i]};return{aliases:["mk","mak"],k:"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath",l:/[\w-]+/,c:[e.HCM,i,r,a,n,t,l]}});
exports.hljs = hljs;
{
"tiddlers": {
"$:/plugins/tiddlywiki/katex/katex.min.css": {
"text": ".katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:inline-block;text-align:initial}.katex{font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;white-space:nowrap;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important}.katex .katex-html{display:inline-block}.katex .katex-mathml{position:absolute;clip:rect(1px,1px,1px,1px);padding:0;border:0;height:1px;width:1px;overflow:hidden}.katex .base{position:relative}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathit{font-family:KaTeX_Math;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-weight:700;font-style:italic}.katex .amsrm,.katex .mathbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr{font-family:KaTeX_Script}.katex .mathsf{font-family:KaTeX_SansSerif}.katex .mainit{font-family:KaTeX_Main;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;vertical-align:bottom;position:relative}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;vertical-align:bottom;font-size:1px;width:2px}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{display:inline-block;width:100%}.katex .mspace{display:inline-block}.katex .mspace.negativethinspace{margin-left:-.16667em}.katex .mspace.muspace{width:.055556em}.katex .mspace.thinspace{width:.16667em}.katex .mspace.negativemediumspace{margin-left:-.22222em}.katex .mspace.mediumspace{width:.22222em}.katex .mspace.thickspace{width:.27778em}.katex .mspace.sixmuspace{width:.333333em}.katex .mspace.eightmuspace{width:.444444em}.katex .mspace.enspace{width:.5em}.katex .mspace.twelvemuspace{width:.666667em}.katex .mspace.quad{width:1em}.katex .mspace.qquad{width:2em}.katex .clap,.katex .llap,.katex .rlap{width:0;position:relative}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{display:inline-block;border:0 solid;position:relative}.katex .overline .overline-line,.katex .underline .underline-line{display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer,.katex .sizing{display:inline-block}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{width:0;position:relative}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;margin:0 -.125em;width:.25em;overflow:hidden;position:relative}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{display:block;position:absolute;width:100%;fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1}.katex svg path{stroke:none}.katex .vertical-separator svg{width:.25em}.katex .stretchy{width:100%;display:block;position:relative;overflow:hidden}.katex .stretchy:after,.katex .stretchy:before{content:\"\"}.katex .hide-tail{width:100%;position:relative;overflow:hidden}.katex .halfarrow-left{position:absolute;left:0;width:50.2%;overflow:hidden}.katex .halfarrow-right{position:absolute;right:0;width:50.2%;overflow:hidden}.katex .brace-left{position:absolute;left:0;width:25.1%;overflow:hidden}.katex .brace-center{position:absolute;left:25%;width:50%;overflow:hidden}.katex .brace-right{position:absolute;right:0;width:25.1%;overflow:hidden}.katex .x-arrow-pad{padding:0 .5em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox{box-sizing:border-box;border:.04em solid #000}.katex .fcolorbox{box-sizing:border-box;border:.04em solid}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap+.mbin,.katex .cancel-lap+.mord,.katex .cancel-lap+.msupsub,.katex .mbin+.cancel-lap,.katex .mord+.cancel-lap{margin-left:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}",
"type": "text/plain",
"title": "$:/plugins/tiddlywiki/katex/katex.min.css"
},
"$:/plugins/tiddlywiki/katex/katex.min.js": {
"text": "(function(document) {\n!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.katex=t():e.katex=t()}(this,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var a=t[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,r),a.l=!0,a.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=63)}([function(e,t,r){\"use strict\";var n=r(57),a=r.n(n),i=r(18),o=r.n(i),s=r(12),l=r(30),u=r(28),c=r(5),h=r(13),p=r(19),m=[\"\\\\imath\",\"\\u0131\",\"\\\\jmath\",\"\\u0237\",\"\\\\pounds\",\"\\\\mathsterling\",\"\\\\textsterling\",\"\\xa3\"],d=function(e,t,r){return u.a[r][e]&&u.a[r][e].replace&&(e=u.a[r][e].replace),{value:e,metrics:l.a.getCharacterMetrics(e,t,r)}},f=function(e,t,r,n,a){var i=d(e,t,r),o=i.metrics;e=i.value;var l=void 0;if(o){var u=o.italic;\"text\"===r&&(u=0),l=new s.a.symbolNode(e,o.height,o.depth,u,o.skew,o.width,a)}else\"undefined\"!=typeof console&&console.warn(\"No character metrics for '\"+e+\"' in style '\"+t+\"'\"),l=new s.a.symbolNode(e,0,0,0,0,0,a);if(n){l.maxFontSize=n.sizeMultiplier,n.style.isTight()&&l.classes.push(\"mtight\");var c=n.getColor();c&&(l.style.color=c)}return l},v=function(e,t,r,n,a){if(\"mathord\"===a){var i=g(e,t,r,n);return f(e,i.fontName,t,r,n.concat([i.fontClass]))}if(\"textord\"===a){if(\"ams\"===(u.a[t][e]&&u.a[t][e].font)){var o=x(\"amsrm\",r.fontWeight,r.fontShape);return f(e,o,t,r,n.concat(\"amsrm\",r.fontWeight,r.fontShape))}var s=x(\"textrm\",r.fontWeight,r.fontShape);return f(e,s,t,r,n.concat(r.fontWeight,r.fontShape))}throw new Error(\"unexpected type: \"+a+\" in mathDefault\")},g=function(e,t,r,n){return/[0-9]/.test(e.charAt(0))||c.a.contains(m,e)?{fontName:\"Main-Italic\",fontClass:\"mainit\"}:{fontName:\"Math-Italic\",fontClass:\"mathit\"}},y=function(e){var t=0,r=0,n=0,a=!0,i=!1,s=void 0;try{for(var l,u=o()(e.children);!(a=(l=u.next()).done);a=!0){var c=l.value;c.height>t&&(t=c.height),c.depth>r&&(r=c.depth),c.maxFontSize>n&&(n=c.maxFontSize)}}catch(e){i=!0,s=e}finally{try{!a&&u.return&&u.return()}finally{if(i)throw s}}e.height=t,e.depth=r,e.maxFontSize=n},b=function(e,t,r,n){var a=new s.a.span(e,t,r,n);return y(a),a},x=function(e,t,r){return w(e)+\"-\"+k(t,r)},w=function(e){var t=\"\";switch(e){case\"amsrm\":t=\"AMS\";break;case\"textrm\":t=\"Main\";break;case\"textsf\":t=\"SansSerif\";break;case\"texttt\":t=\"Typewriter\";break;default:throw new Error(\"Invalid font provided: \"+e)}return t},k=function(e,t){var r=\"\";return\"textbf\"===e&&(r+=\"Bold\"),\"textit\"===t&&(r+=\"Italic\"),r||\"Regular\"},M={mathbf:{variant:\"bold\",fontName:\"Main-Bold\"},mathrm:{variant:\"normal\",fontName:\"Main-Regular\"},textit:{variant:\"italic\",fontName:\"Main-Italic\"},mathbb:{variant:\"double-struck\",fontName:\"AMS-Regular\"},mathcal:{variant:\"script\",fontName:\"Caligraphic-Regular\"},mathfrak:{variant:\"fraktur\",fontName:\"Fraktur-Regular\"},mathscr:{variant:\"script\",fontName:\"Script-Regular\"},mathsf:{variant:\"sans-serif\",fontName:\"SansSerif-Regular\"},mathtt:{variant:\"monospace\",fontName:\"Typewriter-Regular\"}},S={vec:[\"vec\",.471,.714]};t.a={fontMap:M,makeSymbol:f,mathsym:function(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];return r&&r.fontFamily&&\"boldsymbol\"===r.fontFamily&&d(e,\"Main-Bold\",t).metrics?f(e,\"Main-Bold\",t,r,n.concat([\"mathbf\"])):\"\\\\\"===e||\"main\"===u.a[t][e].font?f(e,\"Main-Regular\",t,r,n):f(e,\"AMS-Regular\",t,r,n.concat([\"amsrm\"]))},makeSpan:b,makeLineSpan:function(e,t){var r=t.fontMetrics().defaultRuleThickness,n=h.a.ruleSpan(e,r,t);return n.height=r,n.style.height=5*n.height+\"em\",n.maxFontSize=1,n},makeAnchor:function(e,t,r,n){var a=new s.a.anchor(e,t,r,n);return y(a),a},makeFragment:function(e){var t=new s.a.documentFragment(e);return y(t),t},makeVList:function(e,t){var r=function(e){if(\"individualShift\"===e.positionType){for(var t=e.children,r=[t[0]],n=-t[0].shift-t[0].elem.depth,a=n,i=1;i<t.length;i++){var s=-t[i].shift-a-t[i].elem.depth,l=s-(t[i-1].elem.height+t[i-1].elem.depth);a+=s,r.push({type:\"kern\",size:l}),r.push(t[i])}return{children:r,depth:n}}var u=void 0;if(\"top\"===e.positionType){var c=e.positionData,h=!0,p=!1,m=void 0;try{for(var d,f=o()(e.children);!(h=(d=f.next()).done);h=!0){var v=d.value;c-=\"kern\"===v.type?v.size:v.elem.height+v.elem.depth}}catch(e){p=!0,m=e}finally{try{!h&&f.return&&f.return()}finally{if(p)throw m}}u=c}else if(\"bottom\"===e.positionType)u=-e.positionData;else{var g=e.children[0];if(\"elem\"!==g.type)throw new Error('First child must have type \"elem\".');if(\"shift\"===e.positionType)u=-g.elem.depth-e.positionData;else{if(\"firstBaseline\"!==e.positionType)throw new Error(\"Invalid positionType \"+e.positionType+\".\");u=-g.elem.depth}}return{children:e.children,depth:u}}(e),n=r.children,a=r.depth,i=0,l=!0,u=!1,c=void 0;try{for(var h,p=o()(n);!(l=(h=p.next()).done);l=!0){var m=h.value;if(\"elem\"===m.type){var d=m.elem;i=Math.max(i,d.maxFontSize,d.height)}}}catch(e){u=!0,c=e}finally{try{!l&&p.return&&p.return()}finally{if(u)throw c}}i+=2;var f=b([\"pstrut\"],[]);f.style.height=i+\"em\";var v=[],g=a,y=a,x=a,w=!0,k=!1,M=void 0;try{for(var S,z=o()(n);!(w=(S=z.next()).done);w=!0){var O=S.value;if(\"kern\"===O.type)x+=O.size;else{var T=O.elem,A=O.wrapperClasses||[],N=O.wrapperStyle||{},B=b(A,[f,T],void 0,N);B.style.top=-i-x-T.depth+\"em\",O.marginLeft&&(B.style.marginLeft=O.marginLeft),O.marginRight&&(B.style.marginRight=O.marginRight),v.push(B),x+=T.height+T.depth}g=Math.min(g,x),y=Math.max(y,x)}}catch(e){k=!0,M=e}finally{try{!w&&z.return&&z.return()}finally{if(k)throw M}}var q=b([\"vlist\"],v);q.style.height=y+\"em\";var C=void 0;if(g<0){var E=b([\"vlist\"],[]);E.style.height=-g+\"em\";var j=b([\"vlist-s\"],[new s.a.symbolNode(\"\\u200b\")]);C=[b([\"vlist-r\"],[q,j]),b([\"vlist-r\"],[E])]}else C=[b([\"vlist-r\"],[q])];var R=b([\"vlist-t\"],C);return 2===C.length&&R.classes.push(\"vlist-t2\"),R.height=y,R.depth=-g,R},makeOrd:function(e,t,r){var n=e.mode,a=e.value,i=[\"mord\"],o=t.fontFamily;if(o){var s=void 0,l=void 0;if(\"boldsymbol\"===o){var u=d(a,\"Math-BoldItalic\",n).metrics?{fontName:\"Math-BoldItalic\",fontClass:\"boldsymbol\"}:{fontName:\"Main-Bold\",fontClass:\"mathbf\"};s=u.fontName,l=[u.fontClass]}else if(\"mathit\"===o||c.a.contains(m,a)){var h=g(a,n,t,i);s=h.fontName,l=[h.fontClass]}else-1!==o.indexOf(\"math\")||\"math\"===n?(s=M[o].fontName,l=[o]):(s=x(o,t.fontWeight,t.fontShape),l=[o,t.fontWeight,t.fontShape]);return d(a,s,n).metrics?f(a,s,n,t,i.concat(l)):v(a,n,t,i,r)}return v(a,n,t,i,r)},makeVerb:function(e,t){var r=e.value.body;return r=e.value.star?r.replace(/ /g,\"\\u2423\"):r.replace(/ /g,\"\\xa0\")},makeGlue:function(e,t){var r=b([\"mord\",\"rule\"],[],t),n=Object(p.a)(e,t);return r.style.marginRight=n+\"em\",r},staticSvg:function(e,t){var r=a()(S[e],3),n=r[0],i=r[1],o=r[2],l=new s.a.pathNode(n),u=new s.a.svgNode([l],{width:i+\"em\",height:o+\"em\",style:\"width:\"+i+\"em\",viewBox:\"0 0 \"+1e3*i+\" \"+1e3*o,preserveAspectRatio:\"xMinYMin\"}),c=b([\"overlay\"],[u],t);return c.height=o,c.style.height=o+\"em\",c.style.width=i+\"em\",c},svgData:S,tryCombineChars:function(e){for(var t=0;t<e.length-1;t++)e[t].tryCombine(e[t+1])&&(e.splice(t+1,1),t--);return e},spacingFunctions:{\"\\\\qquad\":{size:\"2em\",className:\"qquad\"},\"\\\\quad\":{size:\"1em\",className:\"quad\"},\"\\\\enspace\":{size:\"0.5em\",className:\"enspace\"},\"\\\\;\":{size:\"0.277778em\",className:\"thickspace\"},\"\\\\:\":{size:\"0.22222em\",className:\"mediumspace\"},\"\\\\,\":{size:\"0.16667em\",className:\"thinspace\"},\"\\\\!\":{size:\"-0.16667em\",className:\"negativethinspace\"}}}},function(e,t,r){\"use strict\";var n=r(18),a=r.n(n),i=r(7),o=r.n(i),s=r(10),l=r.n(s),u=r(5),c=function(){function e(t,r){o()(this,e),this.type=t,this.attributes={},this.children=r||[]}return l()(e,[{key:\"setAttribute\",value:function(e,t){this.attributes[e]=t}},{key:\"toNode\",value:function(){var e=document.createElementNS(\"http://www.w3.org/1998/Math/MathML\",this.type);for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);var r=!0,n=!1,i=void 0;try{for(var o,s=a()(this.children);!(r=(o=s.next()).done);r=!0){var l=o.value;e.appendChild(l.toNode())}}catch(e){n=!0,i=e}finally{try{!r&&s.return&&s.return()}finally{if(n)throw i}}return e}},{key:\"toMarkup\",value:function(){var e=\"<\"+this.type;for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&(e+=\" \"+t+'=\"',e+=u.a.escape(this.attributes[t]),e+='\"');e+=\">\";for(var r=0;r<this.children.length;r++)e+=this.children[r].toMarkup();return e+=\"</\"+this.type+\">\"}},{key:\"toText\",value:function(){return\"mspace\"===this.type?\"0.16667em\"===this.attributes.width?\"\\u2006\":\" \":this.children.map(function(e){return e.toText()}).join(\"\")}}]),e}(),h=function(){function e(t){o()(this,e),this.text=t}return l()(e,[{key:\"toNode\",value:function(){return document.createTextNode(this.text)}},{key:\"toMarkup\",value:function(){return u.a.escape(this.text)}},{key:\"toText\",value:function(){return this.text}}]),e}();t.a={MathNode:c,TextNode:h}},function(e,t,r){\"use strict\";r.d(t,\"e\",function(){return h}),r.d(t,\"d\",function(){return m}),r.d(t,\"a\",function(){return f}),r.d(t,\"b\",function(){return v}),t.c=function(e,t,r){var a=f(e,r),o=new i.a.MathNode(\"mrow\",a),s=new i.a.MathNode(\"annotation\",[new i.a.TextNode(t)]);s.setAttribute(\"encoding\",\"application/x-tex\");var l=new i.a.MathNode(\"semantics\",[o,s]),u=new i.a.MathNode(\"math\",[l]);return n.a.makeSpan([\"katex-mathml\"],[u])};var n=r(0),a=r(30),i=r(1),o=r(6),s=r(9),l=r(28),u=r(5),c=r(13),h=function(e,t){return l.a[t][e]&&l.a[t][e].replace&&(e=l.a[t][e].replace),new i.a.TextNode(e)},p=function(e,t){var r=t.fontFamily;if(!r)return null;var i=e.mode;if(\"mathit\"===r)return\"italic\";if(\"boldsymbol\"===r)return\"bold-italic\";var o=e.value;if(u.a.contains([\"\\\\imath\",\"\\\\jmath\"],o))return null;l.a[i][o]&&l.a[i][o].replace&&(o=l.a[i][o].replace);var s=n.a.fontMap[r].fontName;return a.a.getCharacterMetrics(o,s,i)?n.a.fontMap[r].variant:null},m={},d={mi:\"italic\",mn:\"normal\",mtext:\"normal\"};m.mathord=function(e,t){var r=new i.a.MathNode(\"mi\",[h(e.value,e.mode)]),n=p(e,t)||\"italic\";return n!==d[r.type]&&r.setAttribute(\"mathvariant\",n),r},m.textord=function(e,t){var r=h(e.value,e.mode),n=p(e,t)||\"normal\",a=void 0;return a=\"text\"===e.mode?new i.a.MathNode(\"mtext\",[r]):/[0-9]/.test(e.value)?new i.a.MathNode(\"mn\",[r]):\"\\\\prime\"===e.value?new i.a.MathNode(\"mo\",[r]):new i.a.MathNode(\"mi\",[r]),n!==d[a.type]&&a.setAttribute(\"mathvariant\",n),a},m.bin=function(e,t){var r=new i.a.MathNode(\"mo\",[h(e.value,e.mode)]),n=p(e,t);return\"bold-italic\"===n&&r.setAttribute(\"mathvariant\",n),r},m.rel=function(e){return new i.a.MathNode(\"mo\",[h(e.value,e.mode)])},m.open=function(e){return new i.a.MathNode(\"mo\",[h(e.value,e.mode)])},m.close=function(e){return new i.a.MathNode(\"mo\",[h(e.value,e.mode)])},m.inner=function(e){return new i.a.MathNode(\"mo\",[h(e.value,e.mode)])},m.punct=function(e){var t=new i.a.MathNode(\"mo\",[h(e.value,e.mode)]);return t.setAttribute(\"separator\",\"true\"),t},m.ordgroup=function(e,t){var r=f(e.value,t);return new i.a.MathNode(\"mrow\",r)},m.supsub=function(e,t){var r=!1,n=void 0;e.value.base&&\"horizBrace\"===e.value.base.value.type&&!!e.value.sup===e.value.base.value.isOver&&(r=!0,n=e.value.base.value.isOver);var a=[v(e.value.base,t,!0)];e.value.sub&&a.push(v(e.value.sub,t,!0)),e.value.sup&&a.push(v(e.value.sup,t,!0));var o=void 0;if(r)o=n?\"mover\":\"munder\";else if(e.value.sub)if(e.value.sup){var l=e.value.base;o=l&&l.value.limits&&t.style===s.a.DISPLAY?\"munderover\":\"msubsup\"}else{var u=e.value.base;o=u&&u.value.limits&&t.style===s.a.DISPLAY?\"munder\":\"msub\"}else{var c=e.value.base;o=c&&c.value.limits&&t.style===s.a.DISPLAY?\"mover\":\"msup\"}return new i.a.MathNode(o,a)},m.spacing=function(e){var t=void 0;return\"\\\\ \"===e.value||\"\\\\space\"===e.value||\" \"===e.value||\"~\"===e.value?t=new i.a.MathNode(\"mtext\",[new i.a.TextNode(\"\\xa0\")]):(t=new i.a.MathNode(\"mspace\")).setAttribute(\"width\",n.a.spacingFunctions[e.value].size),t},m.horizBrace=function(e,t){var r=c.a.mathMLnode(e.value.label);return new i.a.MathNode(e.value.isOver?\"mover\":\"munder\",[v(e.value.base,t),r])},m.xArrow=function(e,t){var r=c.a.mathMLnode(e.value.label),n=void 0,a=void 0;if(e.value.body){var o=v(e.value.body,t);e.value.below?(a=v(e.value.below,t),n=new i.a.MathNode(\"munderover\",[r,a,o])):n=new i.a.MathNode(\"mover\",[r,o])}else e.value.below?(a=v(e.value.below,t),n=new i.a.MathNode(\"munder\",[r,a])):n=new i.a.MathNode(\"mover\",[r]);return n},m.mclass=function(e,t){var r=f(e.value.value,t);return new i.a.MathNode(\"mstyle\",r)},m.raisebox=function(e,t){var r=new i.a.MathNode(\"mpadded\",[v(e.value.body,t)]),n=e.value.dy.value.number+e.value.dy.value.unit;return r.setAttribute(\"voffset\",n),r};var f=function(e,t){for(var r=[],n=0;n<e.length;n++){var a=e[n];r.push(v(a,t))}return r},v=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!e)return new i.a.MathNode(\"mrow\");if(m[e.type]){var n=m[e.type](e,t);return r&&\"mrow\"===n.type&&1===n.children.length?n.children[0]:n}throw new o.a(\"Got group of unknown type: '\"+e.type+\"'\")}},function(e,t,r){\"use strict\";r.d(t,\"a\",function(){return i}),t.b=function(e){for(var t=e.type,r=e.names,o=e.props,s=e.handler,l=e.htmlBuilder,u=e.mathmlBuilder,c={numArgs:o.numArgs,argTypes:o.argTypes,greediness:void 0===o.greediness?1:o.greediness,allowedInText:!!o.allowedInText,allowedInMath:void 0===o.allowedInMath||o.allowedInMath,numOptionalArgs:o.numOptionalArgs||0,infix:!!o.infix,handler:s},h=0;h<r.length;++h)i[r[h]]=c;t&&(l&&(n.d[t]=l),u&&(a.d[t]=u))},r.d(t,\"c\",function(){return o});var n=r(4),a=r(2),i={};var o=function(e){return\"ordgroup\"===e.type?e.value:[e]}},function(e,t,r){\"use strict\";r.d(t,\"a\",function(){return g}),r.d(t,\"e\",function(){return w}),r.d(t,\"d\",function(){return k}),r.d(t,\"b\",function(){return M}),t.c=function(e,t){e=JSON.parse(a()(e));var r=g(e,t,!0),n=f([\"base\"],r,t),i=f([\"strut\"]),o=f([\"strut\",\"bottom\"]);i.style.height=n.height+\"em\",o.style.height=n.height+n.depth+\"em\",o.style.verticalAlign=-n.depth+\"em\";var s=f([\"katex-html\"],[i,o,n]);return s.setAttribute(\"aria-hidden\",\"true\"),s};var n=r(77),a=r.n(n),i=r(35),o=r.n(i),s=r(6),l=r(9),u=r(0),c=r(12),h=r(19),p=r(5),m=r(13),d=r(112),f=u.a.makeSpan,v={display:l.a.DISPLAY,text:l.a.TEXT,script:l.a.SCRIPT,scriptscript:l.a.SCRIPTSCRIPT},g=function(e,t,r){for(var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[null,null],a=[],i=0;i<e.length;i++){var s=e[i],l=M(s,t);l instanceof c.a.documentFragment?a.push.apply(a,o()(l.children)):a.push(l)}for(var h,m,g,w,k=[n[0]&&f([n[0]],[],t)].concat(o()(a.filter(function(e){return e&&\"mspace\"!==e.classes[0]})),[n[1]&&f([n[1]],[],t)]),S=1;S<k.length-1;S++){var z=y(k[S],\"left\");\"mbin\"===z.classes[0]&&(g=k[S-1],w=r,g?p.a.contains([\"mbin\",\"mopen\",\"mrel\",\"mop\",\"mpunct\"],b(g,\"right\")):w)&&(z.classes[0]=\"mord\");var O=y(k[S],\"right\");\"mbin\"===O.classes[0]&&(h=k[S+1],m=r,h?p.a.contains([\"mrel\",\"mclose\",\"mpunct\"],b(h,\"left\")):m)&&(O.classes[0]=\"mord\")}for(var T=[],A=0,N=0;N<a.length;N++)if(T.push(a[N]),\"mspace\"!==a[N].classes[0]&&A<k.length-1){0===A&&(T.pop(),N--);var B=b(k[A],\"right\"),q=b(k[A+1],\"left\");if(B&&q&&r){var C=x(k[A+1])?d.b[B][q]:d.a[B][q];if(C){var E=t;1===e.length&&(\"sizing\"===e[0].type?E=t.havingSize(e[0].value.size):\"styling\"===e[0].type&&(E=t.havingStyle(v[e[0].value.style]))),T.push(u.a.makeGlue(C,E))}}A++}for(var j=0;j<T.length;j++)\"\\u0338\"===T[j].value&&(T[j].style.position=\"absolute\",T[j].style.paddingLeft=\"0.8em\");return T},y=function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"right\";if((t instanceof c.a.documentFragment||t instanceof c.a.anchor)&&t.children.length){if(\"right\"===r)return e(t.children[t.children.length-1]);if(\"left\"===r)return e(t.children[0])}return t},b=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"right\";return e?(e=y(e,t),p.a.contains([\"mord\",\"mop\",\"mbin\",\"mrel\",\"mopen\",\"mclose\",\"mpunct\",\"minner\"],e.classes[0])?e.classes[0]:null):null},x=function(e){return e=y(e,\"left\"),p.a.contains(e.classes,\"mtight\")},w=function(e,t){var r=[\"nulldelimiter\"].concat(e.baseSizingClasses());return f(t.concat(r))},k={mathord:function(e,t){return u.a.makeOrd(e,t,\"mathord\")},textord:function(e,t){return u.a.makeOrd(e,t,\"textord\")},bin:function(e,t){return u.a.mathsym(e.value,e.mode,t,[\"mbin\"])},rel:function(e,t){return u.a.mathsym(e.value,e.mode,t,[\"mrel\"])},open:function(e,t){return u.a.mathsym(e.value,e.mode,t,[\"mopen\"])},close:function(e,t){return u.a.mathsym(e.value,e.mode,t,[\"mclose\"])},inner:function(e,t){return u.a.mathsym(e.value,e.mode,t,[\"minner\"])},punct:function(e,t){return u.a.mathsym(e.value,e.mode,t,[\"mpunct\"])},ordgroup:function(e,t){return f([\"mord\"],g(e.value,t,!0),t)}};k.supsub=function(e,t){if(function(e,t){if(e.value.base){var r=e.value.base;return\"op\"===r.type?r.value.limits&&(t.style.size===l.a.DISPLAY.size||r.value.alwaysHandleSupSub):\"accent\"===r.type?p.a.isCharacterBox(r.value.base):\"horizBrace\"===r.type?!e.value.sub===r.value.isOver:null}return!1}(e,t))return k[e.value.base.type](e,t);var r=M(e.value.base,t),n=void 0,a=void 0,i=t.fontMetrics(),o=void 0,s=0,h=0;e.value.sup&&(o=t.havingStyle(t.style.sup()),n=M(e.value.sup,o,t),p.a.isCharacterBox(e.value.base)||(s=r.height-o.fontMetrics().supDrop*o.sizeMultiplier/t.sizeMultiplier)),e.value.sub&&(o=t.havingStyle(t.style.sub()),a=M(e.value.sub,o,t),p.a.isCharacterBox(e.value.base)||(h=r.depth+o.fontMetrics().subDrop*o.sizeMultiplier/t.sizeMultiplier));var m=void 0;m=t.style===l.a.DISPLAY?i.sup1:t.style.cramped?i.sup3:i.sup2;var d=t.sizeMultiplier,v=.5/i.ptPerEm/d+\"em\",g=void 0;if(e.value.sup)if(e.value.sub){s=Math.max(s,m,n.depth+.25*i.xHeight),h=Math.max(h,i.sub2);var y=i.defaultRuleThickness;if(s-n.depth-(a.height-h)<4*y){h=4*y-(s-n.depth)+a.height;var x=.8*i.xHeight-(s-n.depth);x>0&&(s+=x,h-=x)}var w=[{type:\"elem\",elem:a,shift:h,marginRight:v},{type:\"elem\",elem:n,shift:-s,marginRight:v}];r instanceof c.a.symbolNode&&(w[0].marginLeft=-r.italic+\"em\"),g=u.a.makeVList({positionType:\"individualShift\",children:w},t)}else s=Math.max(s,m,n.depth+.25*i.xHeight),g=u.a.makeVList({positionType:\"shift\",positionData:-s,children:[{type:\"elem\",elem:n,marginRight:v}]},t);else{h=Math.max(h,i.sub1,a.height-.8*i.xHeight);var S=[{type:\"elem\",elem:a,marginRight:v}];r instanceof c.a.symbolNode&&(S[0].marginLeft=-r.italic+\"em\"),g=u.a.makeVList({positionType:\"shift\",positionData:h,children:S},t)}var z=b(r)||\"mord\";return f([z],[r,f([\"msupsub\"],[g])],t)},k.spacing=function(e,t){return\"\\\\ \"===e.value||\"\\\\space\"===e.value||\" \"===e.value||\"~\"===e.value?\"text\"===e.mode?u.a.makeOrd(e,t,\"textord\"):f([\"mspace\"],[u.a.mathsym(e.value,e.mode,t)],t):f([\"mspace\",u.a.spacingFunctions[e.value].className],[],t)},k.horizBrace=function(e,t){var r=t.style,n=\"supsub\"===e.type,a=void 0,i=void 0;n&&(e.value.sup?(i=t.havingStyle(r.sup()),a=M(e.value.sup,i,t)):(i=t.havingStyle(r.sub()),a=M(e.value.sub,i,t)),e=e.value.base);var o=M(e.value.base,t.havingBaseStyle(l.a.DISPLAY)),s=m.a.svgSpan(e,t),c=void 0;if(e.value.isOver?(c=u.a.makeVList({positionType:\"firstBaseline\",children:[{type:\"elem\",elem:o},{type:\"kern\",size:.1},{type:\"elem\",elem:s}]},t)).children[0].children[0].children[1].classes.push(\"svg-align\"):(c=u.a.makeVList({positionType:\"bottom\",positionData:o.depth+.1+s.height,children:[{type:\"elem\",elem:s},{type:\"kern\",size:.1},{type:\"elem\",elem:o}]},t)).children[0].children[0].children[0].classes.push(\"svg-align\"),n){var h=f([\"mord\",e.value.isOver?\"mover\":\"munder\"],[c],t);c=e.value.isOver?u.a.makeVList({positionType:\"firstBaseline\",children:[{type:\"elem\",elem:h},{type:\"kern\",size:.2},{type:\"elem\",elem:a}]},t):u.a.makeVList({positionType:\"bottom\",positionData:h.depth+.2+a.height,children:[{type:\"elem\",elem:a},{type:\"kern\",size:.2},{type:\"elem\",elem:h}]},t)}return f([\"mord\",e.value.isOver?\"mover\":\"munder\"],[c],t)},k.xArrow=function(e,t){var r=t.style,n=t.havingStyle(r.sup()),a=M(e.value.body,n,t);a.classes.push(\"x-arrow-pad\");var i=void 0;e.value.below&&(n=t.havingStyle(r.sub()),(i=M(e.value.below,n,t)).classes.push(\"x-arrow-pad\"));var o=m.a.svgSpan(e,t),s=-t.fontMetrics().axisHeight+.5*o.height,l=-t.fontMetrics().axisHeight-.5*o.height-.111;\"\\\\xleftequilibrium\"===e.value.label&&(l-=a.depth);var c=void 0;if(e.value.below){var h=-t.fontMetrics().axisHeight+i.height+.5*o.height+.111;c=u.a.makeVList({positionType:\"individualShift\",children:[{type:\"elem\",elem:a,shift:l},{type:\"elem\",elem:o,shift:s},{type:\"elem\",elem:i,shift:h}]},t)}else c=u.a.makeVList({positionType:\"individualShift\",children:[{type:\"elem\",elem:a,shift:l},{type:\"elem\",elem:o,shift:s}]},t);return c.children[0].children[0].children[1].classes.push(\"svg-align\"),f([\"mrel\",\"x-arrow\"],[c],t)},k.mclass=function(e,t){var r=g(e.value.value,t,!0);return f([e.value.mclass],r,t)},k.raisebox=function(e,t){var r=k.sizing({value:{value:[{type:\"text\",value:{body:e.value.value,font:\"mathrm\"}}],size:6}},t),n=Object(h.a)(e.value.dy.value,t);return u.a.makeVList({positionType:\"shift\",positionData:-n,children:[{type:\"elem\",elem:r}]},t)};var M=function(e,t,r){if(!e)return f();if(k[e.type]){var n=k[e.type](e,t);if(r&&t.size!==r.size){n=f(t.sizingClasses(r),[n],t);var a=t.sizeMultiplier/r.sizeMultiplier;n.height*=a,n.depth*=a}return n}throw new s.a(\"Got group of unknown type: '\"+e.type+\"'\")}},function(e,t,r){\"use strict\";var n=Array.prototype.indexOf,a=function(e,t){if(null==e)return-1;if(n&&e.indexOf===n)return e.indexOf(t);for(var r=e.length,a=0;a<r;a++)if(e[a]===t)return a;return-1},i=/([A-Z])/g,o={\"&\":\"&\",\">\":\">\",\"<\":\"<\",'\"':\""\",\"'\":\"'\"},s=/[&><\"']/g;var l=void 0;if(\"undefined\"!=typeof document){var u=document.createElement(\"span\");l=\"textContent\"in u?function(e,t){e.textContent=t}:function(e,t){e.innerText=t}}var c=function e(t){return!!t&&(\"ordgroup\"===t.type?1===t.value.length?e(t.value[0]):t:\"color\"===t.type?1===t.value.value.length?e(t.value.value[0]):t:\"font\"===t.type?e(t.value.body):t)};t.a={contains:function(e,t){return-1!==a(e,t)},deflt:function(e,t){return void 0===e?t:e},escape:function(e){return String(e).replace(s,function(e){return o[e]})},hyphenate:function(e){return e.replace(i,\"-$1\").toLowerCase()},indexOf:a,setTextContent:l,clearNode:function(e){l(e,\"\")},getBaseElem:c,isCharacterBox:function(e){var t=c(e);return\"mathord\"===t.type||\"textord\"===t.type||\"bin\"===t.type||\"rel\"===t.type||\"inner\"===t.type||\"open\"===t.type||\"close\"===t.type||\"punct\"===t.type}}},function(e,t,r){\"use strict\";var n=r(7),a=r.n(n),i=(r(14),r(27),function e(t,r){a()(this,e);var n=\"KaTeX parse error: \"+t,i=void 0,o=r&&r.loc;if(o&&o.start<=o.end){var s=o.lexer.input;i=o.start;var l=o.end;i===s.length?n+=\" at end of input: \":n+=\" at position \"+(i+1)+\": \";var u=s.slice(i,l).replace(/[^]/g,\"$&\\u0332\");n+=(i>15?\"\\u2026\"+s.slice(i-15,i):s.slice(0,i))+u+(l+15<s.length?s.slice(l,l+15)+\"\\u2026\":s.slice(l))}var c=new Error(n);return c.name=\"ParseError\",c.__proto__=e.prototype,c.position=i,c});i.prototype.__proto__=Error.prototype,t.a=i},function(e,t,r){\"use strict\";t.__esModule=!0,t.default=function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}},function(e,t){var r=e.exports={version:\"2.4.0\"};\"number\"==typeof __e&&(__e=r)},function(e,t,r){\"use strict\";var n=r(7),a=r.n(n),i=r(10),o=r.n(i),s=function(){function e(t,r,n){a()(this,e),this.id=t,this.size=r,this.cramped=n}return o()(e,[{key:\"sup\",value:function(){return l[u[this.id]]}},{key:\"sub\",value:function(){return l[c[this.id]]}},{key:\"fracNum\",value:function(){return l[h[this.id]]}},{key:\"fracDen\",value:function(){return l[p[this.id]]}},{key:\"cramp\",value:function(){return l[m[this.id]]}},{key:\"text\",value:function(){return l[d[this.id]]}},{key:\"isTight\",value:function(){return this.size>=2}}]),e}(),l=[new s(0,0,!1),new s(1,0,!0),new s(2,1,!1),new s(3,1,!0),new s(4,2,!1),new s(5,2,!0),new s(6,3,!1),new s(7,3,!0)],u=[4,5,4,5,6,7,6,7],c=[5,5,5,5,7,7,7,7],h=[2,3,4,5,6,7,6,7],p=[3,3,5,5,7,7,7,7],m=[1,1,3,3,5,5,7,7],d=[0,1,2,3,2,3,2,3];t.a={DISPLAY:l[0],TEXT:l[2],SCRIPT:l[4],SCRIPTSCRIPT:l[6]}},function(e,t,r){\"use strict\";t.__esModule=!0;var n,a=r(73),i=(n=a)&&n.__esModule?n:{default:n};t.default=function(){function e(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),(0,i.default)(e,n.key,n)}}return function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),t}}()},function(e,t,r){var n=r(52)(\"wks\"),a=r(32),i=r(16).Symbol,o=\"function\"==typeof i;(e.exports=function(e){return n[e]||(n[e]=o&&i[e]||(o?i:a)(\"Symbol.\"+e))}).store=n},function(e,t,r){\"use strict\";var n=r(18),a=r.n(n),i=r(105),o=r.n(i),s=r(7),l=r.n(s),u=r(10),c=r.n(u),h=r(42),p=r(5),m=r(111),d=function(e){for(var t=(e=e.slice()).length-1;t>=0;t--)e[t]||e.splice(t,1);return e.join(\" \")},f=function(){function e(t,r,n,a){if(l()(this,e),this.classes=t||[],this.children=r||[],this.height=0,this.depth=0,this.maxFontSize=0,this.style=o()({},a),this.attributes={},n){n.style.isTight()&&this.classes.push(\"mtight\");var i=n.getColor();i&&(this.style.color=i)}}return c()(e,[{key:\"setAttribute\",value:function(e,t){this.attributes[e]=t}},{key:\"tryCombine\",value:function(e){return!1}},{key:\"toNode\",value:function(){var e=document.createElement(\"span\");e.className=d(this.classes);for(var t in this.style)Object.prototype.hasOwnProperty.call(this.style,t)&&(e.style[t]=this.style[t]);for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&e.setAttribute(r,this.attributes[r]);for(var n=0;n<this.children.length;n++)e.appendChild(this.children[n].toNode());return e}},{key:\"toMarkup\",value:function(){var e=\"<span\";this.classes.length&&(e+=' class=\"',e+=p.a.escape(d(this.classes)),e+='\"');var t=\"\";for(var r in this.style)this.style.hasOwnProperty(r)&&(t+=p.a.hyphenate(r)+\":\"+this.style[r]+\";\");t&&(e+=' style=\"'+p.a.escape(t)+'\"');for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&(e+=\" \"+n+'=\"',e+=p.a.escape(this.attributes[n]),e+='\"');e+=\">\";for(var a=0;a<this.children.length;a++)e+=this.children[a].toMarkup();return e+=\"</span>\"}}]),e}(),v=function(){function e(t,r,n,a){l()(this,e),this.href=t,this.classes=r,this.children=n,this.height=0,this.depth=0,this.maxFontSize=0,this.style={},this.attributes={},a.style.isTight()&&this.classes.push(\"mtight\");var i=a.getColor();i&&(this.style.color=i)}return c()(e,[{key:\"setAttribute\",value:function(e,t){this.attributes[e]=t}},{key:\"tryCombine\",value:function(e){return!1}},{key:\"toNode\",value:function(){var e=document.createElement(\"a\");e.setAttribute(\"href\",this.href),this.classes.length&&(e.className=d(this.classes));for(var t in this.style)Object.prototype.hasOwnProperty.call(this.style,t)&&(e.style[t]=this.style[t]);for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&e.setAttribute(r,this.attributes[r]);for(var n=0;n<this.children.length;n++)e.appendChild(this.children[n].toNode());return e}},{key:\"toMarkup\",value:function(){var e=\"<a\";e+='href=\"'+(e+=p.a.escape(this.href))+'\"',this.classes.length&&(e+=' class=\"'+p.a.escape(d(this.classes))+'\"');var t=\"\";for(var r in this.style)this.style.hasOwnProperty(r)&&(t+=p.a.hyphenate(r)+\":\"+this.style[r]+\";\");t&&(e+=' style=\"'+p.a.escape(t)+'\"');for(var n in this.attributes)\"href\"!==n&&Object.prototype.hasOwnProperty.call(this.attributes,n)&&(e+=\" \"+n+'=\"'+p.a.escape(this.attributes[n])+'\"');e+=\">\";var i=!0,o=!1,s=void 0;try{for(var l,u=a()(this.children);!(i=(l=u.next()).done);i=!0){e+=l.value.toMarkup()}}catch(e){o=!0,s=e}finally{try{!i&&u.return&&u.return()}finally{if(o)throw s}}return e+=\"</a>\"}}]),e}(),g=function(){function e(t){l()(this,e),this.children=t||[],this.height=0,this.depth=0,this.maxFontSize=0}return c()(e,[{key:\"toNode\",value:function(){for(var e=document.createDocumentFragment(),t=0;t<this.children.length;t++)e.appendChild(this.children[t].toNode());return e}},{key:\"toMarkup\",value:function(){for(var e=\"\",t=0;t<this.children.length;t++)e+=this.children[t].toMarkup();return e}}]),e}(),y={\"\\xee\":\"\\u0131\\u0302\",\"\\xef\":\"\\u0131\\u0308\",\"\\xed\":\"\\u0131\\u0301\",\"\\xec\":\"\\u0131\\u0300\"},b=function(){function e(t,r,n,a,i,s,u,c){l()(this,e),this.value=t,this.height=r||0,this.depth=n||0,this.italic=a||0,this.skew=i||0,this.width=s||0,this.classes=u||[],this.style=o()({},c),this.maxFontSize=0;var p=Object(h.a)(this.value.charCodeAt(0));p&&this.classes.push(p+\"_fallback\"),/[\\xee\\xef\\xed\\xec]/.test(this.value)&&(this.value=y[this.value])}return c()(e,[{key:\"tryCombine\",value:function(t){if(!t||!(t instanceof e)||this.italic>0||d(this.classes)!==d(t.classes)||this.skew!==t.skew||this.maxFontSize!==t.maxFontSize)return!1;for(var r in this.style)if(this.style.hasOwnProperty(r)&&this.style[r]!==t.style[r])return!1;for(var n in t.style)if(t.style.hasOwnProperty(n)&&this.style[n]!==t.style[n])return!1;return this.value+=t.value,this.height=Math.max(this.height,t.height),this.depth=Math.max(this.depth,t.depth),this.italic=t.italic,!0}},{key:\"toNode\",value:function(){var e=document.createTextNode(this.value),t=null;this.italic>0&&((t=document.createElement(\"span\")).style.marginRight=this.italic+\"em\"),this.classes.length>0&&((t=t||document.createElement(\"span\")).className=d(this.classes));for(var r in this.style)this.style.hasOwnProperty(r)&&((t=t||document.createElement(\"span\")).style[r]=this.style[r]);return t?(t.appendChild(e),t):e}},{key:\"toMarkup\",value:function(){var e=!1,t=\"<span\";this.classes.length&&(e=!0,t+=' class=\"',t+=p.a.escape(d(this.classes)),t+='\"');var r=\"\";this.italic>0&&(r+=\"margin-right:\"+this.italic+\"em;\");for(var n in this.style)this.style.hasOwnProperty(n)&&(r+=p.a.hyphenate(n)+\":\"+this.style[n]+\";\");r&&(e=!0,t+=' style=\"'+p.a.escape(r)+'\"');var a=p.a.escape(this.value);return e?(t+=\">\",t+=a,t+=\"</span>\"):a}}]),e}(),x=function(){function e(t,r){l()(this,e),this.children=t||[],this.attributes=r||{},this.height=0,this.depth=0,this.maxFontSize=0}return c()(e,[{key:\"toNode\",value:function(){var e=document.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);for(var r=0;r<this.children.length;r++)e.appendChild(this.children[r].toNode());return e}},{key:\"toMarkup\",value:function(){var e=\"<svg\";for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&(e+=\" \"+t+\"='\"+this.attributes[t]+\"'\");e+=\">\";for(var r=0;r<this.children.length;r++)e+=this.children[r].toMarkup();return e+=\"</svg>\"}}]),e}(),w=function(){function e(t,r){l()(this,e),this.pathName=t,this.alternate=r}return c()(e,[{key:\"toNode\",value:function(){var e=document.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");return this.alternate?e.setAttribute(\"d\",this.alternate):e.setAttribute(\"d\",m.a.path[this.pathName]),e}},{key:\"toMarkup\",value:function(){return this.alternate?\"<path d='\"+this.alternate+\"'/>\":\"<path d='\"+m.a.path[this.pathName]+\"'/>\"}}]),e}(),k=function(){function e(t){l()(this,e),this.attributes=t||{}}return c()(e,[{key:\"toNode\",value:function(){var e=document.createElementNS(\"http://www.w3.org/2000/svg\",\"line\");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);return e}},{key:\"toMarkup\",value:function(){var e=\"<line\";for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&(e+=\" \"+t+\"='\"+this.attributes[t]+\"'\");return e+=\"/>\"}}]),e}();t.a={span:f,anchor:v,documentFragment:g,symbolNode:b,svgNode:x,pathNode:w,lineNode:k}},function(e,t,r){\"use strict\";var n=r(57),a=r.n(n),i=r(12),o=r(0),s=r(1),l=r(5),u={widehat:\"^\",widetilde:\"~\",utilde:\"~\",overleftarrow:\"\\u2190\",underleftarrow:\"\\u2190\",xleftarrow:\"\\u2190\",overrightarrow:\"\\u2192\",underrightarrow:\"\\u2192\",xrightarrow:\"\\u2192\",underbrace:\"\\u23b5\",overbrace:\"\\u23de\",overleftrightarrow:\"\\u2194\",underleftrightarrow:\"\\u2194\",xleftrightarrow:\"\\u2194\",Overrightarrow:\"\\u21d2\",xRightarrow:\"\\u21d2\",overleftharpoon:\"\\u21bc\",xleftharpoonup:\"\\u21bc\",overrightharpoon:\"\\u21c0\",xrightharpoonup:\"\\u21c0\",xLeftarrow:\"\\u21d0\",xLeftrightarrow:\"\\u21d4\",xhookleftarrow:\"\\u21a9\",xhookrightarrow:\"\\u21aa\",xmapsto:\"\\u21a6\",xrightharpoondown:\"\\u21c1\",xleftharpoondown:\"\\u21bd\",xrightleftharpoons:\"\\u21cc\",xleftrightharpoons:\"\\u21cb\",xtwoheadleftarrow:\"\\u219e\",xtwoheadrightarrow:\"\\u21a0\",xlongequal:\"=\",xtofrom:\"\\u21c4\",xrightleftarrows:\"\\u21c4\",xrightequilibrium:\"\\u21cc\",xleftequilibrium:\"\\u21cb\"},c={overrightarrow:[[\"rightarrow\"],.888,522,\"xMaxYMin\"],overleftarrow:[[\"leftarrow\"],.888,522,\"xMinYMin\"],underrightarrow:[[\"rightarrow\"],.888,522,\"xMaxYMin\"],underleftarrow:[[\"leftarrow\"],.888,522,\"xMinYMin\"],xrightarrow:[[\"rightarrow\"],1.469,522,\"xMaxYMin\"],xleftarrow:[[\"leftarrow\"],1.469,522,\"xMinYMin\"],Overrightarrow:[[\"doublerightarrow\"],.888,560,\"xMaxYMin\"],xRightarrow:[[\"doublerightarrow\"],1.526,560,\"xMaxYMin\"],xLeftarrow:[[\"doubleleftarrow\"],1.526,560,\"xMinYMin\"],overleftharpoon:[[\"leftharpoon\"],.888,522,\"xMinYMin\"],xleftharpoonup:[[\"leftharpoon\"],.888,522,\"xMinYMin\"],xleftharpoondown:[[\"leftharpoondown\"],.888,522,\"xMinYMin\"],overrightharpoon:[[\"rightharpoon\"],.888,522,\"xMaxYMin\"],xrightharpoonup:[[\"rightharpoon\"],.888,522,\"xMaxYMin\"],xrightharpoondown:[[\"rightharpoondown\"],.888,522,\"xMaxYMin\"],xlongequal:[[\"longequal\"],.888,334,\"xMinYMin\"],xtwoheadleftarrow:[[\"twoheadleftarrow\"],.888,334,\"xMinYMin\"],xtwoheadrightarrow:[[\"twoheadrightarrow\"],.888,334,\"xMaxYMin\"],overleftrightarrow:[[\"leftarrow\",\"rightarrow\"],.888,522],overbrace:[[\"leftbrace\",\"midbrace\",\"rightbrace\"],1.6,548],underbrace:[[\"leftbraceunder\",\"midbraceunder\",\"rightbraceunder\"],1.6,548],underleftrightarrow:[[\"leftarrow\",\"rightarrow\"],.888,522],xleftrightarrow:[[\"leftarrow\",\"rightarrow\"],1.75,522],xLeftrightarrow:[[\"doubleleftarrow\",\"doublerightarrow\"],1.75,560],xrightleftharpoons:[[\"leftharpoondownplus\",\"rightharpoonplus\"],1.75,716],xleftrightharpoons:[[\"leftharpoonplus\",\"rightharpoondownplus\"],1.75,716],xhookleftarrow:[[\"leftarrow\",\"righthook\"],1.08,522],xhookrightarrow:[[\"lefthook\",\"rightarrow\"],1.08,522],overlinesegment:[[\"leftlinesegment\",\"rightlinesegment\"],.888,522],underlinesegment:[[\"leftlinesegment\",\"rightlinesegment\"],.888,522],overgroup:[[\"leftgroup\",\"rightgroup\"],.888,342],undergroup:[[\"leftgroupunder\",\"rightgroupunder\"],.888,342],xmapsto:[[\"leftmapsto\",\"rightarrow\"],1.5,522],xtofrom:[[\"leftToFrom\",\"rightToFrom\"],1.75,528],xrightleftarrows:[[\"baraboveleftarrow\",\"rightarrowabovebar\"],1.75,667],xrightequilibrium:[[\"baraboveshortleftharpoon\",\"rightharpoonaboveshortbar\"],1.75,716],xleftequilibrium:[[\"shortbaraboveleftharpoon\",\"shortrightharpoonabovebar\"],1.75,716]},h=function(e){return\"ordgroup\"===e.type?e.value.length:1};t.a={encloseSpan:function(e,t,r,n){var a=void 0,s=e.height+e.depth+2*r;if(/fbox|color/.test(t)){if(a=o.a.makeSpan([\"stretchy\",t],[],n),\"fbox\"===t){var l=n.color&&n.getColor();l&&(a.style.borderColor=l)}}else{var u=[];/^[bx]cancel$/.test(t)&&u.push(new i.a.lineNode({x1:\"0\",y1:\"0\",x2:\"100%\",y2:\"100%\",\"stroke-width\":\"0.046em\"})),/^x?cancel$/.test(t)&&u.push(new i.a.lineNode({x1:\"0\",y1:\"100%\",x2:\"100%\",y2:\"0\",\"stroke-width\":\"0.046em\"}));var c=new i.a.svgNode(u,{width:\"100%\",height:s+\"em\"});a=o.a.makeSpan([],[c],n)}return a.height=s,a.style.height=s+\"em\",a},mathMLnode:function(e){var t=new s.a.MathNode(\"mo\",[new s.a.TextNode(u[e.substr(1)])]);return t.setAttribute(\"stretchy\",\"true\"),t},ruleSpan:function(e,t,r){var n=void 0,a=void 0,s=\"stretchy\";return\"vertical-separator\"===e?(n=new i.a.pathNode(\"vertSeparator\"),a=new i.a.svgNode([n],{width:\"0.25em\",height:\"400em\",viewBox:\"0 0 250 400000\",preserveAspectRatio:\"xMinYMin slice\"}),s=\"vertical-separator\"):(n=new i.a.pathNode(\"stdHorizRule\"),a=new i.a.svgNode([n],{width:\"400em\",height:5*t+\"em\",viewBox:\"0 0 400000 200\",preserveAspectRatio:\"xMinYMin slice\"})),o.a.makeSpan([s],[a],r)},svgSpan:function(e,t){var r=function(){var r=4e5,n=e.value.label.substr(1);if(l.a.contains([\"widehat\",\"widetilde\",\"utilde\"],n)){var s=h(e.value.base),u=void 0,p=void 0,m=void 0;if(s>5)u=\"widehat\"===n?420:312,r=\"widehat\"===n?2364:2340,m=\"widehat\"===n?.42:.34,p=(\"widehat\"===n?\"widehat\":\"tilde\")+\"4\";else{var d=[1,1,2,2,3,3][s];\"widehat\"===n?(r=[0,1062,2364,2364,2364][d],u=[0,239,300,360,420][d],m=[0,.24,.3,.3,.36,.42][d],p=\"widehat\"+d):(r=[0,600,1033,2339,2340][d],u=[0,260,286,306,312][d],m=[0,.26,.286,.3,.306,.34][d],p=\"tilde\"+d)}var f=new i.a.pathNode(p),v=new i.a.svgNode([f],{width:\"100%\",height:m+\"em\",viewBox:\"0 0 \"+r+\" \"+u,preserveAspectRatio:\"none\"});return{span:o.a.makeSpan([],[v],t),minWidth:0,height:m}}var g=[],y=a()(c[n],4),b=y[0],x=y[1],w=y[2],k=y[3],M=w/1e3,S=b.length,z=void 0,O=void 0;if(1===S)z=[\"hide-tail\"],O=[k];else if(2===S)z=[\"halfarrow-left\",\"halfarrow-right\"],O=[\"xMinYMin\",\"xMaxYMin\"];else{if(3!==S)throw new Error(\"Correct katexImagesData or update code here to support\\n \"+S+\" children.\");z=[\"brace-left\",\"brace-center\",\"brace-right\"],O=[\"xMinYMin\",\"xMidYMin\",\"xMaxYMin\"]}for(var T=0;T<S;T++){var A=new i.a.pathNode(b[T]),N=new i.a.svgNode([A],{width:\"400em\",height:M+\"em\",viewBox:\"0 0 \"+r+\" \"+w,preserveAspectRatio:O[T]+\" slice\"}),B=o.a.makeSpan([z[T]],[N],t);if(1===S)return{span:B,minWidth:x,height:M};B.style.height=M+\"em\",g.push(B)}return{span:o.a.makeSpan([\"stretchy\"],g,t),minWidth:x,height:M}}(),n=r.span,s=r.minWidth,u=r.height;return n.height=u,n.style.height=u+\"em\",s>0&&(n.style.minWidth=s+\"em\"),n}}},function(e,t,r){\"use strict\";var n=r(7),a=r.n(n),i=r(31);t.a=function e(t,r,n,o,s){a()(this,e),this.type=t,this.value=r,this.mode=n,this.loc=i.a.range(o,s)}},function(e,t,r){var n=r(22),a=r(70),i=r(71),o=Object.defineProperty;t.f=r(23)?Object.defineProperty:function(e,t,r){if(n(e),t=i(t,!0),n(r),a)try{return o(e,t,r)}catch(e){}if(\"get\"in r||\"set\"in r)throw TypeError(\"Accessors not supported!\");return\"value\"in r&&(e[t]=r.value),e}},function(e,t){var r=e.exports=\"undefined\"!=typeof window&&window.Math==Math?window:\"undefined\"!=typeof self&&self.Math==Math?self:Function(\"return this\")();\"number\"==typeof __g&&(__g=r)},function(e,t){e.exports={}},function(e,t,r){e.exports={default:r(103),__esModule:!0}},function(e,t,r){\"use strict\";r.d(t,\"b\",function(){return o}),r.d(t,\"a\",function(){return s});var n=r(6),a=(r(43),{pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:1.00375,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:1.00375}),i={ex:!0,em:!0,mu:!0},o=function(e){return\"string\"!=typeof e&&(e=e.unit),e in a||e in i||\"ex\"===e},s=function(e,t){var r=void 0;if(e.unit in a)r=a[e.unit]/t.fontMetrics().ptPerEm/t.sizeMultiplier;else if(\"mu\"===e.unit)r=t.fontMetrics().cssEmPerMu;else{var i=void 0;if(i=t.style.isTight()?t.havingStyle(t.style.text()):t,\"ex\"===e.unit)r=i.fontMetrics().xHeight;else{if(\"em\"!==e.unit)throw new n.a(\"Invalid unit: '\"+e.unit+\"'\");r=i.fontMetrics().quad}i!==t&&(r*=i.sizeMultiplier/t.sizeMultiplier)}return Math.min(e.number*r,t.maxSize)}},function(e,t){e.exports=function(e){return\"object\"==typeof e?null!==e:\"function\"==typeof e}},function(e,t){var r={}.hasOwnProperty;e.exports=function(e,t){return r.call(e,t)}},function(e,t,r){var n=r(20);e.exports=function(e){if(!n(e))throw TypeError(e+\" is not an object!\");return e}},function(e,t,r){e.exports=!r(24)(function(){return 7!=Object.defineProperty({},\"a\",{get:function(){return 7}}).a})},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,r){var n=r(16),a=r(8),i=r(47),o=r(26),s=\"prototype\",l=function(e,t,r){var u,c,h,p=e&l.F,m=e&l.G,d=e&l.S,f=e&l.P,v=e&l.B,g=e&l.W,y=m?a:a[t]||(a[t]={}),b=y[s],x=m?n:d?n[t]:(n[t]||{})[s];m&&(r=t);for(u in r)(c=!p&&x&&void 0!==x[u])&&u in y||(h=c?x[u]:r[u],y[u]=m&&\"function\"!=typeof x[u]?r[u]:v&&c?i(h,n):g&&x[u]==h?function(e){var t=function(t,r,n){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,r)}return new e(t,r,n)}return e.apply(this,arguments)};return t[s]=e[s],t}(h):f&&\"function\"==typeof h?i(Function.call,h):h,f&&((y.virtual||(y.virtual={}))[u]=h,e&l.R&&b&&!b[u]&&o(b,u,h)))};l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,e.exports=l},function(e,t,r){var n=r(15),a=r(33);e.exports=r(23)?function(e,t,r){return n.f(e,t,a(1,r))}:function(e,t,r){return e[t]=r,e}},function(e,t,r){\"use strict\";r.d(t,\"a\",function(){return l});var n=r(7),a=r.n(n),i=r(10),o=r.n(i),s=r(31),l=function(){function e(t,r){a()(this,e),this.text=t,this.loc=r}return o()(e,[{key:\"range\",value:function(t,r){return new e(r,s.a.range(this,t))}}]),e}()},function(e,t,r){\"use strict\";var n={math:{},text:{}};function a(e,t,r,a,i,o){n[e][i]={font:t,group:r,replace:a},o&&a&&(n[e][a]=n[e][i])}t.a=n;var i=\"math\",o=\"text\",s=\"main\",l=\"ams\",u=\"accent\",c=\"bin\",h=\"close\",p=\"inner\",m=\"mathord\",d=\"op\",f=\"open\",v=\"punct\",g=\"rel\",y=\"spacing\",b=\"textord\";a(i,s,g,\"\\u2261\",\"\\\\equiv\",!0),a(i,s,g,\"\\u227a\",\"\\\\prec\",!0),a(i,s,g,\"\\u227b\",\"\\\\succ\",!0),a(i,s,g,\"\\u223c\",\"\\\\sim\",!0),a(i,s,g,\"\\u22a5\",\"\\\\perp\"),a(i,s,g,\"\\u2aaf\",\"\\\\preceq\",!0),a(i,s,g,\"\\u2ab0\",\"\\\\succeq\",!0),a(i,s,g,\"\\u2243\",\"\\\\simeq\",!0),a(i,s,g,\"\\u2223\",\"\\\\mid\",!0),a(i,s,g,\"\\u226a\",\"\\\\ll\"),a(i,s,g,\"\\u226b\",\"\\\\gg\",!0),a(i,s,g,\"\\u224d\",\"\\\\asymp\",!0),a(i,s,g,\"\\u2225\",\"\\\\parallel\"),a(i,s,g,\"\\u22c8\",\"\\\\bowtie\",!0),a(i,s,g,\"\\u2323\",\"\\\\smile\",!0),a(i,s,g,\"\\u2291\",\"\\\\sqsubseteq\",!0),a(i,s,g,\"\\u2292\",\"\\\\sqsupseteq\",!0),a(i,s,g,\"\\u2250\",\"\\\\doteq\",!0),a(i,s,g,\"\\u2322\",\"\\\\frown\",!0),a(i,s,g,\"\\u220b\",\"\\\\ni\",!0),a(i,s,g,\"\\u221d\",\"\\\\propto\",!0),a(i,s,g,\"\\u22a2\",\"\\\\vdash\",!0),a(i,s,g,\"\\u22a3\",\"\\\\dashv\",!0),a(i,s,g,\"\\u220b\",\"\\\\owns\"),a(i,s,v,\".\",\"\\\\ldotp\"),a(i,s,v,\"\\u22c5\",\"\\\\cdotp\"),a(i,s,b,\"#\",\"\\\\#\"),a(o,s,b,\"#\",\"\\\\#\"),a(i,s,b,\"&\",\"\\\\&\"),a(o,s,b,\"&\",\"\\\\&\"),a(i,s,b,\"\\u2135\",\"\\\\aleph\",!0),a(i,s,b,\"\\u2200\",\"\\\\forall\",!0),a(i,s,b,\"\\u210f\",\"\\\\hbar\"),a(i,s,b,\"\\u2203\",\"\\\\exists\",!0),a(i,s,b,\"\\u2207\",\"\\\\nabla\",!0),a(i,s,b,\"\\u266d\",\"\\\\flat\",!0),a(i,s,b,\"\\u2113\",\"\\\\ell\",!0),a(i,s,b,\"\\u266e\",\"\\\\natural\",!0),a(i,s,b,\"\\u2663\",\"\\\\clubsuit\",!0),a(i,s,b,\"\\u2118\",\"\\\\wp\",!0),a(i,s,b,\"\\u266f\",\"\\\\sharp\",!0),a(i,s,b,\"\\u2662\",\"\\\\diamondsuit\",!0),a(i,s,b,\"\\u211c\",\"\\\\Re\",!0),a(i,s,b,\"\\u2661\",\"\\\\heartsuit\",!0),a(i,s,b,\"\\u2111\",\"\\\\Im\",!0),a(i,s,b,\"\\u2660\",\"\\\\spadesuit\",!0),a(o,s,b,\"\\xa7\",\"\\\\S\",!0),a(o,s,b,\"\\xb6\",\"\\\\P\",!0),a(i,s,b,\"\\u2020\",\"\\\\dag\"),a(o,s,b,\"\\u2020\",\"\\\\dag\"),a(o,s,b,\"\\u2020\",\"\\\\textdagger\"),a(i,s,b,\"\\u2021\",\"\\\\ddag\"),a(o,s,b,\"\\u2021\",\"\\\\ddag\"),a(o,s,b,\"\\u2020\",\"\\\\textdaggerdbl\"),a(i,s,h,\"\\u23b1\",\"\\\\rmoustache\"),a(i,s,f,\"\\u23b0\",\"\\\\lmoustache\"),a(i,s,h,\"\\u27ef\",\"\\\\rgroup\"),a(i,s,f,\"\\u27ee\",\"\\\\lgroup\"),a(i,s,c,\"\\u2213\",\"\\\\mp\",!0),a(i,s,c,\"\\u2296\",\"\\\\ominus\",!0),a(i,s,c,\"\\u228e\",\"\\\\uplus\",!0),a(i,s,c,\"\\u2293\",\"\\\\sqcap\",!0),a(i,s,c,\"\\u2217\",\"\\\\ast\"),a(i,s,c,\"\\u2294\",\"\\\\sqcup\",!0),a(i,s,c,\"\\u25ef\",\"\\\\bigcirc\"),a(i,s,c,\"\\u2219\",\"\\\\bullet\"),a(i,s,c,\"\\u2021\",\"\\\\ddagger\"),a(i,s,c,\"\\u2240\",\"\\\\wr\",!0),a(i,s,c,\"\\u2a3f\",\"\\\\amalg\"),a(i,s,c,\"&\",\"\\\\And\"),a(i,s,g,\"\\u27f5\",\"\\\\longleftarrow\",!0),a(i,s,g,\"\\u21d0\",\"\\\\Leftarrow\",!0),a(i,s,g,\"\\u27f8\",\"\\\\Longleftarrow\",!0),a(i,s,g,\"\\u27f6\",\"\\\\longrightarrow\",!0),a(i,s,g,\"\\u21d2\",\"\\\\Rightarrow\",!0),a(i,s,g,\"\\u27f9\",\"\\\\Longrightarrow\",!0),a(i,s,g,\"\\u2194\",\"\\\\leftrightarrow\",!0),a(i,s,g,\"\\u27f7\",\"\\\\longleftrightarrow\",!0),a(i,s,g,\"\\u21d4\",\"\\\\Leftrightarrow\",!0),a(i,s,g,\"\\u27fa\",\"\\\\Longleftrightarrow\",!0),a(i,s,g,\"\\u21a6\",\"\\\\mapsto\",!0),a(i,s,g,\"\\u27fc\",\"\\\\longmapsto\",!0),a(i,s,g,\"\\u2197\",\"\\\\nearrow\",!0),a(i,s,g,\"\\u21a9\",\"\\\\hookleftarrow\",!0),a(i,s,g,\"\\u21aa\",\"\\\\hookrightarrow\",!0),a(i,s,g,\"\\u2198\",\"\\\\searrow\",!0),a(i,s,g,\"\\u21bc\",\"\\\\leftharpoonup\",!0),a(i,s,g,\"\\u21c0\",\"\\\\rightharpoonup\",!0),a(i,s,g,\"\\u2199\",\"\\\\swarrow\",!0),a(i,s,g,\"\\u21bd\",\"\\\\leftharpoondown\",!0),a(i,s,g,\"\\u21c1\",\"\\\\rightharpoondown\",!0),a(i,s,g,\"\\u2196\",\"\\\\nwarrow\",!0),a(i,s,g,\"\\u21cc\",\"\\\\rightleftharpoons\",!0),a(i,l,g,\"\\u226e\",\"\\\\nless\",!0),a(i,l,g,\"\\ue010\",\"\\\\nleqslant\"),a(i,l,g,\"\\ue011\",\"\\\\nleqq\"),a(i,l,g,\"\\u2a87\",\"\\\\lneq\",!0),a(i,l,g,\"\\u2268\",\"\\\\lneqq\",!0),a(i,l,g,\"\\ue00c\",\"\\\\lvertneqq\"),a(i,l,g,\"\\u22e6\",\"\\\\lnsim\",!0),a(i,l,g,\"\\u2a89\",\"\\\\lnapprox\",!0),a(i,l,g,\"\\u2280\",\"\\\\nprec\",!0),a(i,l,g,\"\\u22e0\",\"\\\\npreceq\",!0),a(i,l,g,\"\\u22e8\",\"\\\\precnsim\",!0),a(i,l,g,\"\\u2ab9\",\"\\\\precnapprox\",!0),a(i,l,g,\"\\u2241\",\"\\\\nsim\",!0),a(i,l,g,\"\\ue006\",\"\\\\nshortmid\"),a(i,l,g,\"\\u2224\",\"\\\\nmid\",!0),a(i,l,g,\"\\u22ac\",\"\\\\nvdash\",!0),a(i,l,g,\"\\u22ad\",\"\\\\nvDash\",!0),a(i,l,g,\"\\u22ea\",\"\\\\ntriangleleft\"),a(i,l,g,\"\\u22ec\",\"\\\\ntrianglelefteq\",!0),a(i,l,g,\"\\u228a\",\"\\\\subsetneq\",!0),a(i,l,g,\"\\ue01a\",\"\\\\varsubsetneq\"),a(i,l,g,\"\\u2acb\",\"\\\\subsetneqq\",!0),a(i,l,g,\"\\ue017\",\"\\\\varsubsetneqq\"),a(i,l,g,\"\\u226f\",\"\\\\ngtr\",!0),a(i,l,g,\"\\ue00f\",\"\\\\ngeqslant\"),a(i,l,g,\"\\ue00e\",\"\\\\ngeqq\"),a(i,l,g,\"\\u2a88\",\"\\\\gneq\",!0),a(i,l,g,\"\\u2269\",\"\\\\gneqq\",!0),a(i,l,g,\"\\ue00d\",\"\\\\gvertneqq\"),a(i,l,g,\"\\u22e7\",\"\\\\gnsim\",!0),a(i,l,g,\"\\u2a8a\",\"\\\\gnapprox\",!0),a(i,l,g,\"\\u2281\",\"\\\\nsucc\",!0),a(i,l,g,\"\\u22e1\",\"\\\\nsucceq\",!0),a(i,l,g,\"\\u22e9\",\"\\\\succnsim\",!0),a(i,l,g,\"\\u2aba\",\"\\\\succnapprox\",!0),a(i,l,g,\"\\u2246\",\"\\\\ncong\",!0),a(i,l,g,\"\\ue007\",\"\\\\nshortparallel\"),a(i,l,g,\"\\u2226\",\"\\\\nparallel\",!0),a(i,l,g,\"\\u22af\",\"\\\\nVDash\",!0),a(i,l,g,\"\\u22eb\",\"\\\\ntriangleright\"),a(i,l,g,\"\\u22ed\",\"\\\\ntrianglerighteq\",!0),a(i,l,g,\"\\ue018\",\"\\\\nsupseteqq\"),a(i,l,g,\"\\u228b\",\"\\\\supsetneq\",!0),a(i,l,g,\"\\ue01b\",\"\\\\varsupsetneq\"),a(i,l,g,\"\\u2acc\",\"\\\\supsetneqq\",!0),a(i,l,g,\"\\ue019\",\"\\\\varsupsetneqq\"),a(i,l,g,\"\\u22ae\",\"\\\\nVdash\",!0),a(i,l,g,\"\\u2ab5\",\"\\\\precneqq\",!0),a(i,l,g,\"\\u2ab6\",\"\\\\succneqq\",!0),a(i,l,g,\"\\ue016\",\"\\\\nsubseteqq\"),a(i,l,c,\"\\u22b4\",\"\\\\unlhd\"),a(i,l,c,\"\\u22b5\",\"\\\\unrhd\"),a(i,l,g,\"\\u219a\",\"\\\\nleftarrow\",!0),a(i,l,g,\"\\u219b\",\"\\\\nrightarrow\",!0),a(i,l,g,\"\\u21cd\",\"\\\\nLeftarrow\",!0),a(i,l,g,\"\\u21cf\",\"\\\\nRightarrow\",!0),a(i,l,g,\"\\u21ae\",\"\\\\nleftrightarrow\",!0),a(i,l,g,\"\\u21ce\",\"\\\\nLeftrightarrow\",!0),a(i,l,g,\"\\u25b3\",\"\\\\vartriangle\"),a(i,l,b,\"\\u210f\",\"\\\\hslash\"),a(i,l,b,\"\\u25bd\",\"\\\\triangledown\"),a(i,l,b,\"\\u25ca\",\"\\\\lozenge\"),a(i,l,b,\"\\u24c8\",\"\\\\circledS\"),a(i,l,b,\"\\xae\",\"\\\\circledR\"),a(o,l,b,\"\\xae\",\"\\\\circledR\"),a(i,l,b,\"\\u2221\",\"\\\\measuredangle\",!0),a(i,l,b,\"\\u2204\",\"\\\\nexists\"),a(i,l,b,\"\\u2127\",\"\\\\mho\"),a(i,l,b,\"\\u2132\",\"\\\\Finv\",!0),a(i,l,b,\"\\u2141\",\"\\\\Game\",!0),a(i,l,b,\"k\",\"\\\\Bbbk\"),a(i,l,b,\"\\u2035\",\"\\\\backprime\"),a(i,l,b,\"\\u25b2\",\"\\\\blacktriangle\"),a(i,l,b,\"\\u25bc\",\"\\\\blacktriangledown\"),a(i,l,b,\"\\u25a0\",\"\\\\blacksquare\"),a(i,l,b,\"\\u29eb\",\"\\\\blacklozenge\"),a(i,l,b,\"\\u2605\",\"\\\\bigstar\"),a(i,l,b,\"\\u2222\",\"\\\\sphericalangle\",!0),a(i,l,b,\"\\u2201\",\"\\\\complement\",!0),a(i,l,b,\"\\xf0\",\"\\\\eth\",!0),a(i,l,b,\"\\u2571\",\"\\\\diagup\"),a(i,l,b,\"\\u2572\",\"\\\\diagdown\"),a(i,l,b,\"\\u25a1\",\"\\\\square\"),a(i,l,b,\"\\u25a1\",\"\\\\Box\"),a(i,l,b,\"\\u25ca\",\"\\\\Diamond\"),a(i,l,b,\"\\xa5\",\"\\\\yen\",!0),a(i,l,b,\"\\u2713\",\"\\\\checkmark\",!0),a(o,l,b,\"\\u2713\",\"\\\\checkmark\"),a(i,l,b,\"\\u2136\",\"\\\\beth\",!0),a(i,l,b,\"\\u2138\",\"\\\\daleth\",!0),a(i,l,b,\"\\u2137\",\"\\\\gimel\",!0),a(i,l,b,\"\\u03dd\",\"\\\\digamma\"),a(i,l,b,\"\\u03f0\",\"\\\\varkappa\"),a(i,l,f,\"\\u250c\",\"\\\\ulcorner\"),a(i,l,h,\"\\u2510\",\"\\\\urcorner\"),a(i,l,f,\"\\u2514\",\"\\\\llcorner\"),a(i,l,h,\"\\u2518\",\"\\\\lrcorner\"),a(i,l,g,\"\\u2266\",\"\\\\leqq\",!0),a(i,l,g,\"\\u2a7d\",\"\\\\leqslant\"),a(i,l,g,\"\\u2a95\",\"\\\\eqslantless\",!0),a(i,l,g,\"\\u2272\",\"\\\\lesssim\"),a(i,l,g,\"\\u2a85\",\"\\\\lessapprox\"),a(i,l,g,\"\\u224a\",\"\\\\approxeq\",!0),a(i,l,c,\"\\u22d6\",\"\\\\lessdot\"),a(i,l,g,\"\\u22d8\",\"\\\\lll\"),a(i,l,g,\"\\u2276\",\"\\\\lessgtr\"),a(i,l,g,\"\\u22da\",\"\\\\lesseqgtr\"),a(i,l,g,\"\\u2a8b\",\"\\\\lesseqqgtr\"),a(i,l,g,\"\\u2251\",\"\\\\doteqdot\"),a(i,l,g,\"\\u2253\",\"\\\\risingdotseq\",!0),a(i,l,g,\"\\u2252\",\"\\\\fallingdotseq\",!0),a(i,l,g,\"\\u223d\",\"\\\\backsim\",!0),a(i,l,g,\"\\u22cd\",\"\\\\backsimeq\",!0),a(i,l,g,\"\\u2ac5\",\"\\\\subseteqq\",!0),a(i,l,g,\"\\u22d0\",\"\\\\Subset\",!0),a(i,l,g,\"\\u228f\",\"\\\\sqsubset\",!0),a(i,l,g,\"\\u227c\",\"\\\\preccurlyeq\",!0),a(i,l,g,\"\\u22de\",\"\\\\curlyeqprec\",!0),a(i,l,g,\"\\u227e\",\"\\\\precsim\",!0),a(i,l,g,\"\\u2ab7\",\"\\\\precapprox\",!0),a(i,l,g,\"\\u22b2\",\"\\\\vartriangleleft\"),a(i,l,g,\"\\u22b4\",\"\\\\trianglelefteq\"),a(i,l,g,\"\\u22a8\",\"\\\\vDash\"),a(i,l,g,\"\\u22aa\",\"\\\\Vvdash\",!0),a(i,l,g,\"\\u2323\",\"\\\\smallsmile\"),a(i,l,g,\"\\u2322\",\"\\\\smallfrown\"),a(i,l,g,\"\\u224f\",\"\\\\bumpeq\",!0),a(i,l,g,\"\\u224e\",\"\\\\Bumpeq\",!0),a(i,l,g,\"\\u2267\",\"\\\\geqq\",!0),a(i,l,g,\"\\u2a7e\",\"\\\\geqslant\",!0),a(i,l,g,\"\\u2a96\",\"\\\\eqslantgtr\",!0),a(i,l,g,\"\\u2273\",\"\\\\gtrsim\",!0),a(i,l,g,\"\\u2a86\",\"\\\\gtrapprox\",!0),a(i,l,c,\"\\u22d7\",\"\\\\gtrdot\"),a(i,l,g,\"\\u22d9\",\"\\\\ggg\",!0),a(i,l,g,\"\\u2277\",\"\\\\gtrless\",!0),a(i,l,g,\"\\u22db\",\"\\\\gtreqless\",!0),a(i,l,g,\"\\u2a8c\",\"\\\\gtreqqless\",!0),a(i,l,g,\"\\u2256\",\"\\\\eqcirc\",!0),a(i,l,g,\"\\u2257\",\"\\\\circeq\",!0),a(i,l,g,\"\\u225c\",\"\\\\triangleq\",!0),a(i,l,g,\"\\u223c\",\"\\\\thicksim\"),a(i,l,g,\"\\u2248\",\"\\\\thickapprox\"),a(i,l,g,\"\\u2ac6\",\"\\\\supseteqq\",!0),a(i,l,g,\"\\u22d1\",\"\\\\Supset\",!0),a(i,l,g,\"\\u2290\",\"\\\\sqsupset\",!0),a(i,l,g,\"\\u227d\",\"\\\\succcurlyeq\",!0),a(i,l,g,\"\\u22df\",\"\\\\curlyeqsucc\",!0),a(i,l,g,\"\\u227f\",\"\\\\succsim\",!0),a(i,l,g,\"\\u2ab8\",\"\\\\succapprox\",!0),a(i,l,g,\"\\u22b3\",\"\\\\vartriangleright\"),a(i,l,g,\"\\u22b5\",\"\\\\trianglerighteq\"),a(i,l,g,\"\\u22a9\",\"\\\\Vdash\",!0),a(i,l,g,\"\\u2223\",\"\\\\shortmid\"),a(i,l,g,\"\\u2225\",\"\\\\shortparallel\"),a(i,l,g,\"\\u226c\",\"\\\\between\",!0),a(i,l,g,\"\\u22d4\",\"\\\\pitchfork\",!0),a(i,l,g,\"\\u221d\",\"\\\\varpropto\"),a(i,l,g,\"\\u25c0\",\"\\\\blacktriangleleft\"),a(i,l,g,\"\\u2234\",\"\\\\therefore\",!0),a(i,l,g,\"\\u220d\",\"\\\\backepsilon\"),a(i,l,g,\"\\u25b6\",\"\\\\blacktriangleright\"),a(i,l,g,\"\\u2235\",\"\\\\because\",!0),a(i,l,g,\"\\u22d8\",\"\\\\llless\"),a(i,l,g,\"\\u22d9\",\"\\\\gggtr\"),a(i,l,c,\"\\u22b2\",\"\\\\lhd\"),a(i,l,c,\"\\u22b3\",\"\\\\rhd\"),a(i,l,g,\"\\u2242\",\"\\\\eqsim\",!0),a(i,s,g,\"\\u22c8\",\"\\\\Join\"),a(i,l,g,\"\\u2251\",\"\\\\Doteq\",!0),a(i,l,c,\"\\u2214\",\"\\\\dotplus\",!0),a(i,l,c,\"\\u2216\",\"\\\\smallsetminus\"),a(i,l,c,\"\\u22d2\",\"\\\\Cap\",!0),a(i,l,c,\"\\u22d3\",\"\\\\Cup\",!0),a(i,l,c,\"\\u2a5e\",\"\\\\doublebarwedge\",!0),a(i,l,c,\"\\u229f\",\"\\\\boxminus\",!0),a(i,l,c,\"\\u229e\",\"\\\\boxplus\",!0),a(i,l,c,\"\\u22c7\",\"\\\\divideontimes\",!0),a(i,l,c,\"\\u22c9\",\"\\\\ltimes\",!0),a(i,l,c,\"\\u22ca\",\"\\\\rtimes\",!0),a(i,l,c,\"\\u22cb\",\"\\\\leftthreetimes\",!0),a(i,l,c,\"\\u22cc\",\"\\\\rightthreetimes\",!0),a(i,l,c,\"\\u22cf\",\"\\\\curlywedge\",!0),a(i,l,c,\"\\u22ce\",\"\\\\curlyvee\",!0),a(i,l,c,\"\\u229d\",\"\\\\circleddash\",!0),a(i,l,c,\"\\u229b\",\"\\\\circledast\",!0),a(i,l,c,\"\\u22c5\",\"\\\\centerdot\"),a(i,l,c,\"\\u22ba\",\"\\\\intercal\",!0),a(i,l,c,\"\\u22d2\",\"\\\\doublecap\"),a(i,l,c,\"\\u22d3\",\"\\\\doublecup\"),a(i,l,c,\"\\u22a0\",\"\\\\boxtimes\",!0),a(i,l,g,\"\\u21e2\",\"\\\\dashrightarrow\",!0),a(i,l,g,\"\\u21e0\",\"\\\\dashleftarrow\",!0),a(i,l,g,\"\\u21c7\",\"\\\\leftleftarrows\",!0),a(i,l,g,\"\\u21c6\",\"\\\\leftrightarrows\",!0),a(i,l,g,\"\\u21da\",\"\\\\Lleftarrow\",!0),a(i,l,g,\"\\u219e\",\"\\\\twoheadleftarrow\",!0),a(i,l,g,\"\\u21a2\",\"\\\\leftarrowtail\",!0),a(i,l,g,\"\\u21ab\",\"\\\\looparrowleft\",!0),a(i,l,g,\"\\u21cb\",\"\\\\leftrightharpoons\",!0),a(i,l,g,\"\\u21b6\",\"\\\\curvearrowleft\",!0),a(i,l,g,\"\\u21ba\",\"\\\\circlearrowleft\",!0),a(i,l,g,\"\\u21b0\",\"\\\\Lsh\",!0),a(i,l,g,\"\\u21c8\",\"\\\\upuparrows\",!0),a(i,l,g,\"\\u21bf\",\"\\\\upharpoonleft\",!0),a(i,l,g,\"\\u21c3\",\"\\\\downharpoonleft\",!0),a(i,l,g,\"\\u22b8\",\"\\\\multimap\",!0),a(i,l,g,\"\\u21ad\",\"\\\\leftrightsquigarrow\",!0),a(i,l,g,\"\\u21c9\",\"\\\\rightrightarrows\",!0),a(i,l,g,\"\\u21c4\",\"\\\\rightleftarrows\",!0),a(i,l,g,\"\\u21a0\",\"\\\\twoheadrightarrow\",!0),a(i,l,g,\"\\u21a3\",\"\\\\rightarrowtail\",!0),a(i,l,g,\"\\u21ac\",\"\\\\looparrowright\",!0),a(i,l,g,\"\\u21b7\",\"\\\\curvearrowright\",!0),a(i,l,g,\"\\u21bb\",\"\\\\circlearrowright\",!0),a(i,l,g,\"\\u21b1\",\"\\\\Rsh\",!0),a(i,l,g,\"\\u21ca\",\"\\\\downdownarrows\",!0),a(i,l,g,\"\\u21be\",\"\\\\upharpoonright\",!0),a(i,l,g,\"\\u21c2\",\"\\\\downharpoonright\",!0),a(i,l,g,\"\\u21dd\",\"\\\\rightsquigarrow\",!0),a(i,l,g,\"\\u21dd\",\"\\\\leadsto\"),a(i,l,g,\"\\u21db\",\"\\\\Rrightarrow\",!0),a(i,l,g,\"\\u21be\",\"\\\\restriction\"),a(i,s,b,\"\\u2018\",\"`\"),a(i,s,b,\"$\",\"\\\\$\"),a(o,s,b,\"$\",\"\\\\$\"),a(o,s,b,\"$\",\"\\\\textdollar\"),a(i,s,b,\"%\",\"\\\\%\"),a(o,s,b,\"%\",\"\\\\%\"),a(i,s,b,\"_\",\"\\\\_\"),a(o,s,b,\"_\",\"\\\\_\"),a(o,s,b,\"_\",\"\\\\textunderscore\"),a(i,s,b,\"\\u2220\",\"\\\\angle\",!0),a(i,s,b,\"\\u221e\",\"\\\\infty\",!0),a(i,s,b,\"\\u2032\",\"\\\\prime\"),a(i,s,b,\"\\u25b3\",\"\\\\triangle\"),a(i,s,b,\"\\u0393\",\"\\\\Gamma\",!0),a(i,s,b,\"\\u0394\",\"\\\\Delta\",!0),a(i,s,b,\"\\u0398\",\"\\\\Theta\",!0),a(i,s,b,\"\\u039b\",\"\\\\Lambda\",!0),a(i,s,b,\"\\u039e\",\"\\\\Xi\",!0),a(i,s,b,\"\\u03a0\",\"\\\\Pi\",!0),a(i,s,b,\"\\u03a3\",\"\\\\Sigma\",!0),a(i,s,b,\"\\u03a5\",\"\\\\Upsilon\",!0),a(i,s,b,\"\\u03a6\",\"\\\\Phi\",!0),a(i,s,b,\"\\u03a8\",\"\\\\Psi\",!0),a(i,s,b,\"\\u03a9\",\"\\\\Omega\",!0),a(i,s,b,\"\\xac\",\"\\\\neg\"),a(i,s,b,\"\\xac\",\"\\\\lnot\"),a(i,s,b,\"\\u22a4\",\"\\\\top\"),a(i,s,b,\"\\u22a5\",\"\\\\bot\"),a(i,s,b,\"\\u2205\",\"\\\\emptyset\"),a(i,l,b,\"\\u2205\",\"\\\\varnothing\"),a(i,s,m,\"\\u03b1\",\"\\\\alpha\",!0),a(i,s,m,\"\\u03b2\",\"\\\\beta\",!0),a(i,s,m,\"\\u03b3\",\"\\\\gamma\",!0),a(i,s,m,\"\\u03b4\",\"\\\\delta\",!0),a(i,s,m,\"\\u03f5\",\"\\\\epsilon\",!0),a(i,s,m,\"\\u03b6\",\"\\\\zeta\",!0),a(i,s,m,\"\\u03b7\",\"\\\\eta\",!0),a(i,s,m,\"\\u03b8\",\"\\\\theta\",!0),a(i,s,m,\"\\u03b9\",\"\\\\iota\",!0),a(i,s,m,\"\\u03ba\",\"\\\\kappa\",!0),a(i,s,m,\"\\u03bb\",\"\\\\lambda\",!0),a(i,s,m,\"\\u03bc\",\"\\\\mu\",!0),a(i,s,m,\"\\u03bd\",\"\\\\nu\",!0),a(i,s,m,\"\\u03be\",\"\\\\xi\",!0),a(i,s,m,\"\\u03bf\",\"\\\\omicron\",!0),a(i,s,m,\"\\u03c0\",\"\\\\pi\",!0),a(i,s,m,\"\\u03c1\",\"\\\\rho\",!0),a(i,s,m,\"\\u03c3\",\"\\\\sigma\",!0),a(i,s,m,\"\\u03c4\",\"\\\\tau\",!0),a(i,s,m,\"\\u03c5\",\"\\\\upsilon\",!0),a(i,s,m,\"\\u03d5\",\"\\\\phi\",!0),a(i,s,m,\"\\u03c7\",\"\\\\chi\",!0),a(i,s,m,\"\\u03c8\",\"\\\\psi\",!0),a(i,s,m,\"\\u03c9\",\"\\\\omega\",!0),a(i,s,m,\"\\u03b5\",\"\\\\varepsilon\",!0),a(i,s,m,\"\\u03d1\",\"\\\\vartheta\",!0),a(i,s,m,\"\\u03d6\",\"\\\\varpi\",!0),a(i,s,m,\"\\u03f1\",\"\\\\varrho\",!0),a(i,s,m,\"\\u03c2\",\"\\\\varsigma\",!0),a(i,s,m,\"\\u03c6\",\"\\\\varphi\",!0),a(i,s,c,\"\\u2217\",\"*\"),a(i,s,c,\"+\",\"+\"),a(i,s,c,\"\\u2212\",\"-\"),a(i,s,c,\"\\u22c5\",\"\\\\cdot\",!0),a(i,s,c,\"\\u2218\",\"\\\\circ\"),a(i,s,c,\"\\xf7\",\"\\\\div\",!0),a(i,s,c,\"\\xb1\",\"\\\\pm\",!0),a(i,s,c,\"\\xd7\",\"\\\\times\",!0),a(i,s,c,\"\\u2229\",\"\\\\cap\",!0),a(i,s,c,\"\\u222a\",\"\\\\cup\",!0),a(i,s,c,\"\\u2216\",\"\\\\setminus\"),a(i,s,c,\"\\u2227\",\"\\\\land\"),a(i,s,c,\"\\u2228\",\"\\\\lor\"),a(i,s,c,\"\\u2227\",\"\\\\wedge\",!0),a(i,s,c,\"\\u2228\",\"\\\\vee\",!0),a(i,s,b,\"\\u221a\",\"\\\\surd\"),a(i,s,f,\"(\",\"(\"),a(i,s,f,\"[\",\"[\"),a(i,s,f,\"\\u27e8\",\"\\\\langle\",!0),a(i,s,f,\"\\u2223\",\"\\\\lvert\"),a(i,s,f,\"\\u2225\",\"\\\\lVert\"),a(i,s,h,\")\",\")\"),a(i,s,h,\"]\",\"]\"),a(i,s,h,\"?\",\"?\"),a(i,s,h,\"!\",\"!\"),a(i,s,h,\"\\u27e9\",\"\\\\rangle\",!0),a(i,s,h,\"\\u2223\",\"\\\\rvert\"),a(i,s,h,\"\\u2225\",\"\\\\rVert\"),a(i,s,g,\"=\",\"=\"),a(i,s,g,\"<\",\"<\"),a(i,s,g,\">\",\">\"),a(i,s,g,\":\",\":\"),a(i,s,g,\"\\u2248\",\"\\\\approx\",!0),a(i,s,g,\"\\u2245\",\"\\\\cong\",!0),a(i,s,g,\"\\u2265\",\"\\\\ge\"),a(i,s,g,\"\\u2265\",\"\\\\geq\",!0),a(i,s,g,\"\\u2190\",\"\\\\gets\"),a(i,s,g,\">\",\"\\\\gt\"),a(i,s,g,\"\\u2208\",\"\\\\in\",!0),a(i,s,g,\"\\u2209\",\"\\\\notin\",!0),a(i,s,g,\"\\u0338\",\"\\\\not\"),a(i,s,g,\"\\u2282\",\"\\\\subset\",!0),a(i,s,g,\"\\u2283\",\"\\\\supset\",!0),a(i,s,g,\"\\u2286\",\"\\\\subseteq\",!0),a(i,s,g,\"\\u2287\",\"\\\\supseteq\",!0),a(i,l,g,\"\\u2288\",\"\\\\nsubseteq\",!0),a(i,l,g,\"\\u2289\",\"\\\\nsupseteq\",!0),a(i,s,g,\"\\u22a8\",\"\\\\models\"),a(i,s,g,\"\\u2190\",\"\\\\leftarrow\",!0),a(i,s,g,\"\\u2264\",\"\\\\le\"),a(i,s,g,\"\\u2264\",\"\\\\leq\",!0),a(i,s,g,\"<\",\"\\\\lt\"),a(i,s,g,\"\\u2260\",\"\\\\ne\",!0),a(i,s,g,\"\\u2260\",\"\\\\neq\"),a(i,s,g,\"\\u2192\",\"\\\\rightarrow\",!0),a(i,s,g,\"\\u2192\",\"\\\\to\"),a(i,l,g,\"\\u2271\",\"\\\\ngeq\",!0),a(i,l,g,\"\\u2270\",\"\\\\nleq\",!0),a(i,s,y,null,\"\\\\!\"),a(i,s,y,\"\\xa0\",\"\\\\ \"),a(i,s,y,\"\\xa0\",\"~\"),a(i,s,y,null,\"\\\\,\"),a(i,s,y,null,\"\\\\:\"),a(i,s,y,null,\"\\\\;\"),a(i,s,y,null,\"\\\\enspace\"),a(i,s,y,null,\"\\\\qquad\"),a(i,s,y,null,\"\\\\quad\"),a(i,s,y,\"\\xa0\",\"\\\\space\"),a(i,s,y,\"\\xa0\",\"\\\\nobreakspace\"),a(o,s,y,null,\"\\\\!\"),a(o,s,y,\"\\xa0\",\"\\\\ \"),a(o,s,y,\"\\xa0\",\"~\"),a(o,s,y,null,\"\\\\,\"),a(o,s,y,null,\"\\\\:\"),a(o,s,y,null,\"\\\\;\"),a(o,s,y,null,\"\\\\enspace\"),a(o,s,y,null,\"\\\\qquad\"),a(o,s,y,null,\"\\\\quad\"),a(o,s,y,\"\\xa0\",\"\\\\space\"),a(o,s,y,\"\\xa0\",\"\\\\nobreakspace\"),a(i,s,v,\",\",\",\"),a(i,s,v,\";\",\";\"),a(i,s,v,\":\",\"\\\\colon\"),a(i,l,c,\"\\u22bc\",\"\\\\barwedge\",!0),a(i,l,c,\"\\u22bb\",\"\\\\veebar\",!0),a(i,s,c,\"\\u2299\",\"\\\\odot\",!0),a(i,s,c,\"\\u2295\",\"\\\\oplus\",!0),a(i,s,c,\"\\u2297\",\"\\\\otimes\",!0),a(i,s,b,\"\\u2202\",\"\\\\partial\",!0),a(i,s,c,\"\\u2298\",\"\\\\oslash\",!0),a(i,l,c,\"\\u229a\",\"\\\\circledcirc\",!0),a(i,l,c,\"\\u22a1\",\"\\\\boxdot\",!0),a(i,s,c,\"\\u25b3\",\"\\\\bigtriangleup\"),a(i,s,c,\"\\u25bd\",\"\\\\bigtriangledown\"),a(i,s,c,\"\\u2020\",\"\\\\dagger\"),a(i,s,c,\"\\u22c4\",\"\\\\diamond\"),a(i,s,c,\"\\u22c6\",\"\\\\star\"),a(i,s,c,\"\\u25c3\",\"\\\\triangleleft\"),a(i,s,c,\"\\u25b9\",\"\\\\triangleright\"),a(i,s,f,\"{\",\"\\\\{\"),a(o,s,b,\"{\",\"\\\\{\"),a(o,s,b,\"{\",\"\\\\textbraceleft\"),a(i,s,h,\"}\",\"\\\\}\"),a(o,s,b,\"}\",\"\\\\}\"),a(o,s,b,\"}\",\"\\\\textbraceright\"),a(i,s,f,\"{\",\"\\\\lbrace\"),a(i,s,h,\"}\",\"\\\\rbrace\"),a(i,s,f,\"[\",\"\\\\lbrack\"),a(i,s,h,\"]\",\"\\\\rbrack\"),a(o,s,b,\"<\",\"\\\\textless\"),a(o,s,b,\">\",\"\\\\textgreater\"),a(i,s,f,\"\\u230a\",\"\\\\lfloor\"),a(i,s,h,\"\\u230b\",\"\\\\rfloor\"),a(i,s,f,\"\\u2308\",\"\\\\lceil\"),a(i,s,h,\"\\u2309\",\"\\\\rceil\"),a(i,s,b,\"\\\\\",\"\\\\backslash\"),a(i,s,b,\"\\u2223\",\"|\"),a(i,s,b,\"\\u2223\",\"\\\\vert\"),a(o,s,b,\"|\",\"\\\\textbar\"),a(i,s,b,\"\\u2225\",\"\\\\|\"),a(i,s,b,\"\\u2225\",\"\\\\Vert\"),a(o,s,b,\"\\u2225\",\"\\\\textbardbl\"),a(i,s,g,\"\\u2191\",\"\\\\uparrow\",!0),a(i,s,g,\"\\u21d1\",\"\\\\Uparrow\",!0),a(i,s,g,\"\\u2193\",\"\\\\downarrow\",!0),a(i,s,g,\"\\u21d3\",\"\\\\Downarrow\",!0),a(i,s,g,\"\\u2195\",\"\\\\updownarrow\",!0),a(i,s,g,\"\\u21d5\",\"\\\\Updownarrow\",!0),a(i,s,d,\"\\u2210\",\"\\\\coprod\"),a(i,s,d,\"\\u22c1\",\"\\\\bigvee\"),a(i,s,d,\"\\u22c0\",\"\\\\bigwedge\"),a(i,s,d,\"\\u2a04\",\"\\\\biguplus\"),a(i,s,d,\"\\u22c2\",\"\\\\bigcap\"),a(i,s,d,\"\\u22c3\",\"\\\\bigcup\"),a(i,s,d,\"\\u222b\",\"\\\\int\"),a(i,s,d,\"\\u222b\",\"\\\\intop\"),a(i,s,d,\"\\u222c\",\"\\\\iint\"),a(i,s,d,\"\\u222d\",\"\\\\iiint\"),a(i,s,d,\"\\u220f\",\"\\\\prod\"),a(i,s,d,\"\\u2211\",\"\\\\sum\"),a(i,s,d,\"\\u2a02\",\"\\\\bigotimes\"),a(i,s,d,\"\\u2a01\",\"\\\\bigoplus\"),a(i,s,d,\"\\u2a00\",\"\\\\bigodot\"),a(i,s,d,\"\\u222e\",\"\\\\oint\"),a(i,s,d,\"\\u2a06\",\"\\\\bigsqcup\"),a(i,s,d,\"\\u222b\",\"\\\\smallint\"),a(o,s,p,\"\\u2026\",\"\\\\textellipsis\"),a(i,s,p,\"\\u2026\",\"\\\\mathellipsis\"),a(o,s,p,\"\\u2026\",\"\\\\ldots\",!0),a(i,s,p,\"\\u2026\",\"\\\\ldots\",!0),a(i,s,p,\"\\u22ef\",\"\\\\@cdots\",!0),a(i,s,p,\"\\u22f1\",\"\\\\ddots\",!0),a(i,s,b,\"\\u22ee\",\"\\\\vdots\",!0),a(i,s,u,\"\\u02ca\",\"\\\\acute\"),a(i,s,u,\"\\u02cb\",\"\\\\grave\"),a(i,s,u,\"\\xa8\",\"\\\\ddot\"),a(i,s,u,\"~\",\"\\\\tilde\"),a(i,s,u,\"\\u02c9\",\"\\\\bar\"),a(i,s,u,\"\\u02d8\",\"\\\\breve\"),a(i,s,u,\"\\u02c7\",\"\\\\check\"),a(i,s,u,\"^\",\"\\\\hat\"),a(i,s,u,\"\\u20d7\",\"\\\\vec\"),a(i,s,u,\"\\u02d9\",\"\\\\dot\"),a(i,s,u,\"\\u02da\",\"\\\\mathring\"),a(i,s,m,\"\\u0131\",\"\\\\imath\",!0),a(i,s,m,\"\\u0237\",\"\\\\jmath\",!0),a(o,s,b,\"\\u0131\",\"\\\\i\",!0),a(o,s,b,\"\\u0237\",\"\\\\j\",!0),a(o,s,b,\"\\xdf\",\"\\\\ss\",!0),a(o,s,b,\"\\xe6\",\"\\\\ae\",!0),a(o,s,b,\"\\xe6\",\"\\\\ae\",!0),a(o,s,b,\"\\u0153\",\"\\\\oe\",!0),a(o,s,b,\"\\xf8\",\"\\\\o\",!0),a(o,s,b,\"\\xc6\",\"\\\\AE\",!0),a(o,s,b,\"\\u0152\",\"\\\\OE\",!0),a(o,s,b,\"\\xd8\",\"\\\\O\",!0),a(o,s,u,\"\\u02ca\",\"\\\\'\"),a(o,s,u,\"\\u02cb\",\"\\\\`\"),a(o,s,u,\"\\u02c6\",\"\\\\^\"),a(o,s,u,\"\\u02dc\",\"\\\\~\"),a(o,s,u,\"\\u02c9\",\"\\\\=\"),a(o,s,u,\"\\u02d8\",\"\\\\u\"),a(o,s,u,\"\\u02d9\",\"\\\\.\"),a(o,s,u,\"\\u02da\",\"\\\\r\"),a(o,s,u,\"\\u02c7\",\"\\\\v\"),a(o,s,u,\"\\xa8\",'\\\\\"'),a(o,s,u,\"\\u02dd\",\"\\\\H\"),a(o,s,b,\"\\u2013\",\"--\"),a(o,s,b,\"\\u2013\",\"\\\\textendash\"),a(o,s,b,\"\\u2014\",\"---\"),a(o,s,b,\"\\u2014\",\"\\\\textemdash\"),a(o,s,b,\"\\u2018\",\"`\"),a(o,s,b,\"\\u2018\",\"\\\\textquoteleft\"),a(o,s,b,\"\\u2019\",\"'\"),a(o,s,b,\"\\u2019\",\"\\\\textquoteright\"),a(o,s,b,\"\\u201c\",\"``\"),a(o,s,b,\"\\u201c\",\"\\\\textquotedblleft\"),a(o,s,b,\"\\u201d\",\"''\"),a(o,s,b,\"\\u201d\",\"\\\\textquotedblright\"),a(i,s,b,\"\\xb0\",\"\\\\degree\"),a(o,s,b,\"\\xb0\",\"\\\\degree\"),a(i,s,m,\"\\xa3\",\"\\\\pounds\"),a(i,s,m,\"\\xa3\",\"\\\\mathsterling\",!0),a(o,s,m,\"\\xa3\",\"\\\\pounds\"),a(o,s,m,\"\\xa3\",\"\\\\textsterling\",!0),a(i,l,b,\"\\u2720\",\"\\\\maltese\"),a(o,l,b,\"\\u2720\",\"\\\\maltese\"),a(o,s,y,\"\\xa0\",\"\\\\ \"),a(o,s,y,\"\\xa0\",\" \"),a(o,s,y,\"\\xa0\",\"~\");for(var x='0123456789/@.\"',w=0;w<x.length;w++){var k=x.charAt(w);a(i,s,b,k,k)}for(var M='0123456789!@*()-=+[]<>|\";:?/.,',S=0;S<M.length;S++){var z=M.charAt(S);a(o,s,b,z,z)}for(var O=\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\",T=0;T<O.length;T++){var A=O.charAt(T);a(i,s,m,A,A),a(o,s,b,A,A)}for(var N=0;N<\"\\xc7\\xd0\\xde\\xe7\\xfe\".length;N++){var B=\"\\xc7\\xd0\\xde\\xe7\\xfe\".charAt(N);a(i,s,m,B,B),a(o,s,b,B,B)}a(o,s,b,\"\\xf0\",\"\\xf0\"),a(o,s,b,\"\\u2013\",\"\\u2013\"),a(o,s,b,\"\\u2014\",\"\\u2014\"),a(o,s,b,\"\\u2018\",\"\\u2018\"),a(o,s,b,\"\\u2019\",\"\\u2019\"),a(o,s,b,\"\\u201c\",\"\\u201c\"),a(o,s,b,\"\\u201d\",\"\\u201d\")},function(e,t,r){var n=r(38);e.exports=function(e){return Object(n(e))}},function(e,t,r){\"use strict\";var n=r(42),a=r(59),i={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2]},o={\"\\xc5\":\"A\",\"\\xc7\":\"C\",\"\\xd0\":\"D\",\"\\xde\":\"o\",\"\\xe5\":\"a\",\"\\xe7\":\"c\",\"\\xf0\":\"d\",\"\\xfe\":\"o\",\"\\u0410\":\"A\",\"\\u0411\":\"B\",\"\\u0412\":\"B\",\"\\u0413\":\"F\",\"\\u0414\":\"A\",\"\\u0415\":\"E\",\"\\u0416\":\"K\",\"\\u0417\":\"3\",\"\\u0418\":\"N\",\"\\u0419\":\"N\",\"\\u041a\":\"K\",\"\\u041b\":\"N\",\"\\u041c\":\"M\",\"\\u041d\":\"H\",\"\\u041e\":\"O\",\"\\u041f\":\"N\",\"\\u0420\":\"P\",\"\\u0421\":\"C\",\"\\u0422\":\"T\",\"\\u0423\":\"y\",\"\\u0424\":\"O\",\"\\u0425\":\"X\",\"\\u0426\":\"U\",\"\\u0427\":\"h\",\"\\u0428\":\"W\",\"\\u0429\":\"W\",\"\\u042a\":\"B\",\"\\u042b\":\"X\",\"\\u042c\":\"B\",\"\\u042d\":\"3\",\"\\u042e\":\"X\",\"\\u042f\":\"R\",\"\\u0430\":\"a\",\"\\u0431\":\"b\",\"\\u0432\":\"a\",\"\\u0433\":\"r\",\"\\u0434\":\"y\",\"\\u0435\":\"e\",\"\\u0436\":\"m\",\"\\u0437\":\"e\",\"\\u0438\":\"n\",\"\\u0439\":\"n\",\"\\u043a\":\"n\",\"\\u043b\":\"n\",\"\\u043c\":\"m\",\"\\u043d\":\"n\",\"\\u043e\":\"o\",\"\\u043f\":\"n\",\"\\u0440\":\"p\",\"\\u0441\":\"c\",\"\\u0442\":\"o\",\"\\u0443\":\"y\",\"\\u0444\":\"b\",\"\\u0445\":\"x\",\"\\u0446\":\"n\",\"\\u0447\":\"n\",\"\\u0448\":\"w\",\"\\u0449\":\"w\",\"\\u044a\":\"a\",\"\\u044b\":\"m\",\"\\u044c\":\"a\",\"\\u044d\":\"e\",\"\\u044e\":\"m\",\"\\u044f\":\"r\"},s={};t.a={getFontMetrics:function(e){var t=void 0;if(!s[t=e>=5?0:e>=3?1:2]){var r=s[t]={cssEmPerMu:i.quad[t]/18};for(var n in i)i.hasOwnProperty(n)&&(r[n]=i[n][t])}return s[t]},getCharacterMetrics:function(e,t,r){if(!a.a[t])throw new Error(\"Font metrics not found for font: \"+t+\".\");var i=e.charCodeAt(0);e[0]in o&&(i=o[e[0]].charCodeAt(0));var s=a.a[t][i];if(s||\"text\"!==r||Object(n.b)(i)&&(s=a.a[t][77]),s)return{depth:s[0],height:s[1],italic:s[2],skew:s[3],width:s[4]}}}},function(e,t,r){\"use strict\";var n=r(66),a=r.n(n),i=r(7),o=r.n(i),s=r(10),l=r.n(s),u=function(){function e(t,r,n){o()(this,e),this.lexer=t,this.start=r,this.end=n,a()(this)}return l()(e,null,[{key:\"range\",value:function(t,r){return r?t&&t.loc&&r.loc&&t.loc.lexer===r.loc.lexer?new e(t.loc.lexer,t.loc.start,r.loc.end):null:t&&t.loc}}]),e}();t.a=u},function(e,t){var r=0,n=Math.random();e.exports=function(e){return\"Symbol(\".concat(void 0===e?\"\":e,\")_\",(++r+n).toString(36))}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,r){\"use strict\";var n=r(7),a=r.n(n),i=r(5);t.a=function e(t){a()(this,e),t=t||{},this.displayMode=i.a.deflt(t.displayMode,!1),this.throwOnError=i.a.deflt(t.throwOnError,!0),this.errorColor=i.a.deflt(t.errorColor,\"#cc0000\"),this.macros=t.macros||{},this.colorIsTextColor=i.a.deflt(t.colorIsTextColor,!1),this.maxSize=Math.max(0,i.a.deflt(t.maxSize,1/0))}},function(e,t,r){\"use strict\";t.__esModule=!0;var n,a=r(79),i=(n=a)&&n.__esModule?n:{default:n};t.default=function(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t<e.length;t++)r[t]=e[t];return r}return(0,i.default)(e)}},function(e,t,r){\"use strict\";var n=r(81)(!0);r(48)(String,\"String\",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,r=this._i;return r>=t.length?{value:void 0,done:!0}:(e=n(t,r),this._i+=e.length,{value:e,done:!1})})},function(e,t){var r=Math.ceil,n=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?n:r)(e)}},function(e,t){e.exports=function(e){if(void 0==e)throw TypeError(\"Can't call method on \"+e);return e}},function(e,t,r){var n=r(87),a=r(53);e.exports=Object.keys||function(e){return n(e,a)}},function(e,t,r){var n=r(49),a=r(38);e.exports=function(e){return n(a(e))}},function(e,t,r){var n=r(52)(\"keys\"),a=r(32);e.exports=function(e){return n[e]||(n[e]=a(e))}},function(e,t,r){\"use strict\";t.a=function(e){var t=!0,r=!1,n=void 0;try{for(var a,i=o()(s);!(t=(a=i.next()).done);t=!0){var l=a.value,u=!0,c=!1,h=void 0;try{for(var p,m=o()(l.blocks);!(u=(p=m.next()).done);u=!0){var d=p.value;if(e>=d[0]&&e<=d[1])return l.name}}catch(e){c=!0,h=e}finally{try{!u&&m.return&&m.return()}finally{if(c)throw h}}}}catch(e){r=!0,n=e}finally{try{!t&&i.return&&i.return()}finally{if(r)throw n}}return null},t.b=function(e){for(var t=0;t<l.length;t+=2)if(e>=l[t]&&e<=l[t+1])return!0;return!1};var n=r(35),a=r.n(n),i=r(18),o=r.n(i),s=[{name:\"latin\",blocks:[[256,591],[768,879]]},{name:\"cyrillic\",blocks:[[1024,1279]]},{name:\"brahmic\",blocks:[[2304,4255]]},{name:\"georgian\",blocks:[[4256,4351]]},{name:\"cjk\",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:\"hangul\",blocks:[[44032,55215]]}];var l=[];s.forEach(function(e){return e.blocks.forEach(function(e){return l.push.apply(l,a()(e))})})},function(e,t,r){\"use strict\";var n=r(7),a=r.n(n),i=r(10),o=r.n(i),s=r(30),l=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],u=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],c=function(e,t){return t.size<2?e:l[e-1][t.size-1]},h=function(){function e(t){a()(this,e),this.style=t.style,this.color=t.color,this.size=t.size||e.BASESIZE,this.textSize=t.textSize||this.size,this.phantom=!!t.phantom,this.fontFamily=t.fontFamily,this.fontWeight=t.fontWeight||\"\",this.fontShape=t.fontShape||\"\",this.sizeMultiplier=u[this.size-1],this.maxSize=t.maxSize,this._fontMetrics=void 0}return o()(e,[{key:\"extend\",value:function(t){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize};for(var n in t)t.hasOwnProperty(n)&&(r[n]=t[n]);return new e(r)}},{key:\"havingStyle\",value:function(e){return this.style===e?this:this.extend({style:e,size:c(this.textSize,e)})}},{key:\"havingCrampedStyle\",value:function(){return this.havingStyle(this.style.cramp())}},{key:\"havingSize\",value:function(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:u[e-1]})}},{key:\"havingBaseStyle\",value:function(t){t=t||this.style.text();var r=c(e.BASESIZE,t);return this.size===r&&this.textSize===e.BASESIZE&&this.style===t?this:this.extend({style:t,size:r})}},{key:\"withColor\",value:function(e){return this.extend({color:e})}},{key:\"withPhantom\",value:function(){return this.extend({phantom:!0})}},{key:\"withFontFamily\",value:function(e){return this.extend({fontFamily:e||this.fontFamily})}},{key:\"withFontWeight\",value:function(e){return this.extend({fontWeight:e})}},{key:\"withFontShape\",value:function(e){return this.extend({fontShape:e})}},{key:\"sizingClasses\",value:function(e){return e.size!==this.size?[\"sizing\",\"reset-size\"+e.size,\"size\"+this.size]:[]}},{key:\"baseSizingClasses\",value:function(){return this.size!==e.BASESIZE?[\"sizing\",\"reset-size\"+this.size,\"size\"+e.BASESIZE]:[]}},{key:\"fontMetrics\",value:function(){return this._fontMetrics||(this._fontMetrics=s.a.getFontMetrics(this.size)),this._fontMetrics}},{key:\"getColor\",value:function(){return this.phantom?\"transparent\":null!=this.color&&e.colorMap.hasOwnProperty(this.color)?e.colorMap[this.color]:this.color}}]),e}();h.BASESIZE=6,h.colorMap={\"katex-blue\":\"#6495ed\",\"katex-orange\":\"#ffa500\",\"katex-pink\":\"#ff00af\",\"katex-red\":\"#df0030\",\"katex-green\":\"#28ae7b\",\"katex-gray\":\"gray\",\"katex-purple\":\"#9d38bd\",\"katex-blueA\":\"#ccfaff\",\"katex-blueB\":\"#80f6ff\",\"katex-blueC\":\"#63d9ea\",\"katex-blueD\":\"#11accd\",\"katex-blueE\":\"#0c7f99\",\"katex-tealA\":\"#94fff5\",\"katex-tealB\":\"#26edd5\",\"katex-tealC\":\"#01d1c1\",\"katex-tealD\":\"#01a995\",\"katex-tealE\":\"#208170\",\"katex-greenA\":\"#b6ffb0\",\"katex-greenB\":\"#8af281\",\"katex-greenC\":\"#74cf70\",\"katex-greenD\":\"#1fab54\",\"katex-greenE\":\"#0d923f\",\"katex-goldA\":\"#ffd0a9\",\"katex-goldB\":\"#ffbb71\",\"katex-goldC\":\"#ff9c39\",\"katex-goldD\":\"#e07d10\",\"katex-goldE\":\"#a75a05\",\"katex-redA\":\"#fca9a9\",\"katex-redB\":\"#ff8482\",\"katex-redC\":\"#f9685d\",\"katex-redD\":\"#e84d39\",\"katex-redE\":\"#bc2612\",\"katex-maroonA\":\"#ffbde0\",\"katex-maroonB\":\"#ff92c6\",\"katex-maroonC\":\"#ed5fa6\",\"katex-maroonD\":\"#ca337c\",\"katex-maroonE\":\"#9e034e\",\"katex-purpleA\":\"#ddd7ff\",\"katex-purpleB\":\"#c6b9fc\",\"katex-purpleC\":\"#aa87ff\",\"katex-purpleD\":\"#7854ab\",\"katex-purpleE\":\"#543b78\",\"katex-mintA\":\"#f5f9e8\",\"katex-mintB\":\"#edf2df\",\"katex-mintC\":\"#e0e5cc\",\"katex-grayA\":\"#f6f7f7\",\"katex-grayB\":\"#f0f1f2\",\"katex-grayC\":\"#e3e5e6\",\"katex-grayD\":\"#d6d8da\",\"katex-grayE\":\"#babec2\",\"katex-grayF\":\"#888d93\",\"katex-grayG\":\"#626569\",\"katex-grayH\":\"#3b3e40\",\"katex-grayI\":\"#21242c\",\"katex-kaBlue\":\"#314453\",\"katex-kaGreen\":\"#71B307\"},t.a=h},function(e,t,r){\"use strict\";var n=r(6),a=r(9),i=r(12),o=r(0),s=r(30),l=r(28),u=r(5),c=function(e,t,r){return l.a.math[e]&&l.a.math[e].replace?s.a.getCharacterMetrics(l.a.math[e].replace,t,r):s.a.getCharacterMetrics(e,t,r)},h=function(e,t,r,n){var a=r.havingBaseStyle(t),i=o.a.makeSpan((n||[]).concat(a.sizingClasses(r)),[e],r);return i.delimSizeMultiplier=a.sizeMultiplier/r.sizeMultiplier,i.height*=i.delimSizeMultiplier,i.depth*=i.delimSizeMultiplier,i.maxFontSize=a.sizeMultiplier,i},p=function(e,t,r){var n=t.havingBaseStyle(r),a=(1-t.sizeMultiplier/n.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push(\"delimcenter\"),e.style.top=a+\"em\",e.height-=a,e.depth+=a},m=function(e,t,r,n,i,s){var l,u,c,m,d=(l=e,u=t,c=i,m=n,o.a.makeSymbol(l,\"Size\"+u+\"-Regular\",c,m)),f=h(o.a.makeSpan([\"delimsizing\",\"size\"+t],[d],n),a.a.TEXT,n,s);return r&&p(f,n,a.a.TEXT),f},d=function(e,t,r){var n=void 0;return\"Size1-Regular\"===t?n=\"delim-size1\":\"Size4-Regular\"===t&&(n=\"delim-size4\"),{type:\"elem\",elem:o.a.makeSpan([\"delimsizinginner\",n],[o.a.makeSpan([],[o.a.makeSymbol(e,t,r)])])}},f=function(e,t,r,n,i,s){var l=void 0,u=void 0,p=void 0,m=void 0;l=p=m=e,u=null;var f=\"Size1-Regular\";\"\\\\uparrow\"===e?p=m=\"\\u23d0\":\"\\\\Uparrow\"===e?p=m=\"\\u2016\":\"\\\\downarrow\"===e?l=p=\"\\u23d0\":\"\\\\Downarrow\"===e?l=p=\"\\u2016\":\"\\\\updownarrow\"===e?(l=\"\\\\uparrow\",p=\"\\u23d0\",m=\"\\\\downarrow\"):\"\\\\Updownarrow\"===e?(l=\"\\\\Uparrow\",p=\"\\u2016\",m=\"\\\\Downarrow\"):\"[\"===e||\"\\\\lbrack\"===e?(l=\"\\u23a1\",p=\"\\u23a2\",m=\"\\u23a3\",f=\"Size4-Regular\"):\"]\"===e||\"\\\\rbrack\"===e?(l=\"\\u23a4\",p=\"\\u23a5\",m=\"\\u23a6\",f=\"Size4-Regular\"):\"\\\\lfloor\"===e?(p=l=\"\\u23a2\",m=\"\\u23a3\",f=\"Size4-Regular\"):\"\\\\lceil\"===e?(l=\"\\u23a1\",p=m=\"\\u23a2\",f=\"Size4-Regular\"):\"\\\\rfloor\"===e?(p=l=\"\\u23a5\",m=\"\\u23a6\",f=\"Size4-Regular\"):\"\\\\rceil\"===e?(l=\"\\u23a4\",p=m=\"\\u23a5\",f=\"Size4-Regular\"):\"(\"===e?(l=\"\\u239b\",p=\"\\u239c\",m=\"\\u239d\",f=\"Size4-Regular\"):\")\"===e?(l=\"\\u239e\",p=\"\\u239f\",m=\"\\u23a0\",f=\"Size4-Regular\"):\"\\\\{\"===e||\"\\\\lbrace\"===e?(l=\"\\u23a7\",u=\"\\u23a8\",m=\"\\u23a9\",p=\"\\u23aa\",f=\"Size4-Regular\"):\"\\\\}\"===e||\"\\\\rbrace\"===e?(l=\"\\u23ab\",u=\"\\u23ac\",m=\"\\u23ad\",p=\"\\u23aa\",f=\"Size4-Regular\"):\"\\\\lgroup\"===e?(l=\"\\u23a7\",m=\"\\u23a9\",p=\"\\u23aa\",f=\"Size4-Regular\"):\"\\\\rgroup\"===e?(l=\"\\u23ab\",m=\"\\u23ad\",p=\"\\u23aa\",f=\"Size4-Regular\"):\"\\\\lmoustache\"===e?(l=\"\\u23a7\",m=\"\\u23ad\",p=\"\\u23aa\",f=\"Size4-Regular\"):\"\\\\rmoustache\"===e&&(l=\"\\u23ab\",m=\"\\u23a9\",p=\"\\u23aa\",f=\"Size4-Regular\");var v=c(l,f,i),g=v.height+v.depth,y=c(p,f,i),b=y.height+y.depth,x=c(m,f,i),w=x.height+x.depth,k=0,M=1;if(null!==u){var S=c(u,f,i);k=S.height+S.depth,M=2}var z=g+w+k,O=Math.ceil((t-z)/(M*b)),T=z+O*M*b,A=n.fontMetrics().axisHeight;r&&(A*=n.sizeMultiplier);var N=T/2-A,B=[];if(B.push(d(m,f,i)),null===u)for(var q=0;q<O;q++)B.push(d(p,f,i));else{for(var C=0;C<O;C++)B.push(d(p,f,i));B.push(d(u,f,i));for(var E=0;E<O;E++)B.push(d(p,f,i))}B.push(d(l,f,i));var j=n.havingBaseStyle(a.a.TEXT),R=o.a.makeVList({positionType:\"bottom\",positionData:N,children:B},j);return h(o.a.makeSpan([\"delimsizing\",\"mult\"],[R],j),a.a.TEXT,n,s)},v=function(e,t,r,n){var a=void 0;\"sqrtTall\"===e&&(a=\"M702 80H400000v40H742v\"+(r-54-80)+\"l-4 4-4 4c-.667.7\\n-2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1h-12l-28-84c-16.667-52-96.667\\n-294.333-240-727l-212 -643 -85 170c-4-3.333-8.333-7.667-13 -13l-13-13l77-155\\n 77-156c66 199.333 139 419.667 219 661 l218 661zM702 80H400000v40H742z\");var s=new i.a.pathNode(e,a),l=new i.a.svgNode([s],{width:\"400em\",height:t+\"em\",viewBox:\"0 0 400000 \"+r,preserveAspectRatio:\"xMinYMin slice\"});return o.a.makeSpan([\"hide-tail\"],[l],n)},g=[\"(\",\")\",\"[\",\"\\\\lbrack\",\"]\",\"\\\\rbrack\",\"\\\\{\",\"\\\\lbrace\",\"\\\\}\",\"\\\\rbrace\",\"\\\\lfloor\",\"\\\\rfloor\",\"\\\\lceil\",\"\\\\rceil\",\"\\\\surd\"],y=[\"\\\\uparrow\",\"\\\\downarrow\",\"\\\\updownarrow\",\"\\\\Uparrow\",\"\\\\Downarrow\",\"\\\\Updownarrow\",\"|\",\"\\\\|\",\"\\\\vert\",\"\\\\Vert\",\"\\\\lvert\",\"\\\\rvert\",\"\\\\lVert\",\"\\\\rVert\",\"\\\\lgroup\",\"\\\\rgroup\",\"\\\\lmoustache\",\"\\\\rmoustache\"],b=[\"<\",\">\",\"\\\\langle\",\"\\\\rangle\",\"/\",\"\\\\backslash\",\"\\\\lt\",\"\\\\gt\"],x=[0,1.2,1.8,2.4,3],w=[{type:\"small\",style:a.a.SCRIPTSCRIPT},{type:\"small\",style:a.a.SCRIPT},{type:\"small\",style:a.a.TEXT},{type:\"large\",size:1},{type:\"large\",size:2},{type:\"large\",size:3},{type:\"large\",size:4}],k=[{type:\"small\",style:a.a.SCRIPTSCRIPT},{type:\"small\",style:a.a.SCRIPT},{type:\"small\",style:a.a.TEXT},{type:\"stack\"}],M=[{type:\"small\",style:a.a.SCRIPTSCRIPT},{type:\"small\",style:a.a.SCRIPT},{type:\"small\",style:a.a.TEXT},{type:\"large\",size:1},{type:\"large\",size:2},{type:\"large\",size:3},{type:\"large\",size:4},{type:\"stack\"}],S=function(e,t,r,n){for(var a,i=Math.min(2,3-n.style.size);i<r.length&&\"stack\"!==r[i].type;i++){var o=c(e,\"small\"===(a=r[i]).type?\"Main-Regular\":\"large\"===a.type?\"Size\"+a.size+\"-Regular\":\"stack\"===a.type?\"Size4-Regular\":void 0,\"math\"),s=o.height+o.depth;if(\"small\"===r[i].type&&(s*=n.havingBaseStyle(r[i].style).sizeMultiplier),s>t)return r[i]}return r[r.length-1]},z=function(e,t,r,n,a,i){\"<\"===e||\"\\\\lt\"===e||\"\\u27e8\"===e?e=\"\\\\langle\":\">\"!==e&&\"\\\\gt\"!==e&&\"\\u27e9\"!==e||(e=\"\\\\rangle\");var s=void 0;s=u.a.contains(b,e)?w:u.a.contains(g,e)?M:k;var l,c,d,v,y,x,z,O,T=S(e,t,s,n);return\"small\"===T.type?(l=e,c=T.style,d=r,v=n,y=a,x=i,z=o.a.makeSymbol(l,\"Main-Regular\",y,v),O=h(z,c,v,x),d&&p(O,v,c),O):\"large\"===T.type?m(e,T.size,r,n,a,i):f(e,t,r,n,a,i)};t.a={sqrtImage:function(e,t){var r=S(\"\\\\surd\",e,M,t),n=void 0,a=t.sizeMultiplier,i=0,o=0,s=0;\"small\"===r.type?(s=1080,o=1*(a=t.havingBaseStyle(r.style).sizeMultiplier/t.sizeMultiplier),(n=v(\"sqrtMain\",i=1.08*a,s,t)).style.minWidth=\"0.853em\",n.advanceWidth=.833*a):\"large\"===r.type?(s=1080*x[r.size],o=x[r.size]/a,i=(x[r.size]+.08)/a,(n=v(\"sqrtSize\"+r.size,i,s,t)).style.minWidth=\"1.02em\",n.advanceWidth=1/a):(i=e/a+.08,o=e/a,s=Math.floor(1e3*e)+80,(n=v(\"sqrtTall\",i,s,t)).style.minWidth=\"0.742em\",n.advanceWidth=1.056/a);return n.height=o,n.style.height=i+\"em\",{span:n,ruleWidth:t.fontMetrics().sqrtRuleThickness*a}},sizedDelim:function(e,t,r,a,i){if(\"<\"===e||\"\\\\lt\"===e||\"\\u27e8\"===e?e=\"\\\\langle\":\">\"!==e&&\"\\\\gt\"!==e&&\"\\u27e9\"!==e||(e=\"\\\\rangle\"),u.a.contains(g,e)||u.a.contains(b,e))return m(e,t,!1,r,a,i);if(u.a.contains(y,e))return f(e,x[t],!1,r,a,i);throw new n.a(\"Illegal delimiter: '\"+e+\"'\")},customSizedDelim:z,leftRightDelim:function(e,t,r,n,a,i){var o=n.fontMetrics().axisHeight*n.sizeMultiplier,s=5/n.fontMetrics().ptPerEm,l=Math.max(t-o,r+o),u=Math.max(l/500*901,2*l-s);return z(e,u,!0,n,a,i)}}},function(e,t,r){var n=r(20),a=r(16).document,i=n(a)&&n(a.createElement);e.exports=function(e){return i?a.createElement(e):{}}},function(e,t,r){var n=r(25),a=r(8),i=r(24);e.exports=function(e,t){var r=(a.Object||{})[e]||Object[e],o={};o[e]=t(r),n(n.S+n.F*i(function(){r(1)}),\"Object\",o)}},function(e,t,r){var n=r(72);e.exports=function(e,t,r){if(n(e),void 0===t)return e;switch(r){case 1:return function(r){return e.call(t,r)};case 2:return function(r,n){return e.call(t,r,n)};case 3:return function(r,n,a){return e.call(t,r,n,a)}}return function(){return e.apply(t,arguments)}}},function(e,t,r){\"use strict\";var n=r(82),a=r(25),i=r(83),o=r(26),s=r(21),l=r(17),u=r(84),c=r(54),h=r(91),p=r(11)(\"iterator\"),m=!([].keys&&\"next\"in[].keys()),d=\"values\",f=function(){return this};e.exports=function(e,t,r,v,g,y,b){u(r,t,v);var x,w,k,M=function(e){if(!m&&e in T)return T[e];switch(e){case\"keys\":case d:return function(){return new r(this,e)}}return function(){return new r(this,e)}},S=t+\" Iterator\",z=g==d,O=!1,T=e.prototype,A=T[p]||T[\"@@iterator\"]||g&&T[g],N=A||M(g),B=g?z?M(\"entries\"):N:void 0,q=\"Array\"==t&&T.entries||A;if(q&&(k=h(q.call(new e)))!==Object.prototype&&(c(k,S,!0),n||s(k,p)||o(k,p,f)),z&&A&&A.name!==d&&(O=!0,N=function(){return A.call(this)}),n&&!b||!m&&!O&&T[p]||o(T,p,N),l[t]=N,l[S]=f,g)if(x={values:z?N:M(d),keys:y?N:M(\"keys\"),entries:B},b)for(w in x)w in T||i(T,w,x[w]);else a(a.P+a.F*(m||O),t,x);return x}},function(e,t,r){var n=r(50);e.exports=Object(\"z\").propertyIsEnumerable(0)?Object:function(e){return\"String\"==n(e)?e.split(\"\"):Object(e)}},function(e,t){var r={}.toString;e.exports=function(e){return r.call(e).slice(8,-1)}},function(e,t,r){var n=r(37),a=Math.min;e.exports=function(e){return e>0?a(n(e),9007199254740991):0}},function(e,t,r){var n=r(16),a=\"__core-js_shared__\",i=n[a]||(n[a]={});e.exports=function(e){return i[e]||(i[e]={})}},function(e,t){e.exports=\"constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf\".split(\",\")},function(e,t,r){var n=r(15).f,a=r(21),i=r(11)(\"toStringTag\");e.exports=function(e,t,r){e&&!a(e=r?e:e.prototype,i)&&n(e,i,{configurable:!0,value:t})}},function(e,t,r){var n=r(56),a=r(11)(\"iterator\"),i=r(17);e.exports=r(8).getIteratorMethod=function(e){if(void 0!=e)return e[a]||e[\"@@iterator\"]||i[n(e)]}},function(e,t,r){var n=r(50),a=r(11)(\"toStringTag\"),i=\"Arguments\"==n(function(){return arguments}());e.exports=function(e){var t,r,o;return void 0===e?\"Undefined\":null===e?\"Null\":\"string\"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),a))?r:i?n(t):\"Object\"==(o=n(t))&&\"function\"==typeof t.callee?\"Arguments\":o}},function(e,t,r){\"use strict\";t.__esModule=!0;var n=i(r(97)),a=i(r(18));function i(e){return e&&e.__esModule?e:{default:e}}t.default=function(){return function(e,t){if(Array.isArray(e))return e;if((0,n.default)(Object(e)))return function(e,t){var r=[],n=!0,i=!1,o=void 0;try{for(var s,l=(0,a.default)(e);!(n=(s=l.next()).done)&&(r.push(s.value),!t||r.length!==t);n=!0);}catch(e){i=!0,o=e}finally{try{!n&&l.return&&l.return()}finally{if(i)throw o}}return r}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}()},function(e,t,r){r(99);for(var n=r(16),a=r(26),i=r(17),o=r(11)(\"toStringTag\"),s=[\"NodeList\",\"DOMTokenList\",\"MediaList\",\"StyleSheetList\",\"CSSRuleList\"],l=0;l<5;l++){var u=s[l],c=n[u],h=c&&c.prototype;h&&!h[o]&&a(h,o,u),i[u]=i.Array}},function(e,t,r){\"use strict\";t.a={\"AMS-Regular\":{65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1187],8674:[-.064,.437,0,0,1167],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},\"Caligraphic-Regular\":{48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473]},\"Fraktur-Regular\":{33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},\"Main-Bold\":{33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],824:[.19444,.69444,0,0,0],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444]},\"Main-BoldItalic\":{33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],163:[0,.69444,0,0,.86853],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},\"Main-Italic\":{33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],163:[0,.69444,0,0,.76909],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],305:[0,.43056,0,.02778,.32246],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],567:[.19444,.43056,0,.08334,.38403],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},\"Main-Regular\":{32:[0,0,0,0,0],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,0],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],824:[.19444,.69444,0,0,0],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.12,0,0,1015],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,889],8617:[.011,.511,0,0,1015],8618:[.011,.511,0,0,1015],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,889],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,667],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.67,0,0,666],8800:[.215,.716,0,0,666],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,692],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,847],8942:[.03,.9,0,0,121],8943:[-.19,.31,0,0,1015],8945:[-.1,.82,0,0,1015],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,301],9137:[.244,.744,0,0,301],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,184],10223:[.244,.744,0,0,184],10229:[.011,.511,0,0,1470],10230:[.011,.511,0,0,1469],10231:[.011,.511,0,0,1748],10232:[.024,.525,0,0,1497],10233:[.024,.525,0,0,1526],10234:[.024,.525,0,0,1746],10236:[.011,.511,0,0,1498],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778]},\"Math-BoldItalic\":{47:[.19444,.69444,0,0,0],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333]},\"Math-Italic\":{47:[.19444,.69444,0,0,0],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059]},\"Math-Regular\":{65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059]},\"SansSerif-Bold\":{33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},\"SansSerif-Italic\":{33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},\"SansSerif-Regular\":{33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],176:[0,.69444,0,0,.66667],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],733:[0,.69444,0,0,.5],771:[0,.67659,0,0,.5],776:[0,.67937,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},\"Script-Regular\":{65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212]},\"Size1-Regular\":{40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},\"Size2-Regular\":{40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},\"Size3-Regular\":{40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},\"Size4-Regular\":{40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},\"Typewriter-Regular\":{33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],176:[0,.61111,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}}},function(e,t,r){\"use strict\";t.a=u;var n=r(0),a=r(3),i=r(1),o=r(5),s=r(4),l=r(2);function u(e,t,r){for(var a=s.a(e,t,!1),i=t.sizeMultiplier/r.sizeMultiplier,l=0;l<a.length;l++){var u=o.a.indexOf(a[l].classes,\"sizing\");u<0?Array.prototype.push.apply(a[l].classes,t.sizingClasses(r)):a[l].classes[u+1]===\"reset-size\"+t.size&&(a[l].classes[u+1]=\"reset-size\"+r.size),a[l].height*=i,a[l].depth*=i}return n.a.makeFragment(a)}var c=[\"\\\\tiny\",\"\\\\sixptsize\",\"\\\\scriptsize\",\"\\\\footnotesize\",\"\\\\small\",\"\\\\normalsize\",\"\\\\large\",\"\\\\Large\",\"\\\\LARGE\",\"\\\\huge\",\"\\\\Huge\"];Object(a.b)({type:\"sizing\",names:c,props:{numArgs:0,allowedInText:!0},handler:function(e,t){var r=e.breakOnTokenText,n=e.funcName,a=e.parser;a.consumeSpaces();var i=a.parseExpression(!1,r);return{type:\"sizing\",size:o.a.indexOf(c,n)+1,value:i}},htmlBuilder:function(e,t){var r=t.havingSize(e.value.size);return u(e.value.value,r,t)},mathmlBuilder:function(e,t){var r=t.havingSize(e.value.size),n=l.a(e.value.value,r),a=new i.a.MathNode(\"mstyle\",n);return a.setAttribute(\"mathsize\",r.sizeMultiplier+\"em\"),a}})},function(e,t,r){\"use strict\";r.d(t,\"a\",function(){return i}),t.b=function(e){for(var t=e.type,r=e.names,o=e.props,s=e.handler,l=e.htmlBuilder,u=e.mathmlBuilder,c={numArgs:o.numArgs||0,greediness:1,allowedInText:!1,numOptionalArgs:0,handler:s},h=0;h<r.length;++h)i[r[h]]=c;l&&(n.d[t]=l);u&&(a.d[t]=u)};var n=r(4),a=r(2),i=(r(43),r(14),{})},function(e,t,r){\"use strict\";r.d(t,\"a\",function(){return f}),r.d(t,\"b\",function(){return g});var n=r(7),a=r.n(n),i=r(10),o=r.n(i),s=r(145),l=r.n(s),u=r(6),c=r(31),h=r(27),p=\"%[^\\n]*[\\n]\",m=\"\\\\\\\\[a-zA-Z@]+\",d=\"[\\u0300-\\u036f]\",f=new RegExp(d+\"+$\"),v=new RegExp(\"([ \\r\\n\\t]+)|(\"+p+\"|[!-\\\\[\\\\]-\\u2027\\u202a-\\ud7ff\\uf900-\\uffff]\"+d+\"*|[\\ud800-\\udbff][\\udc00-\\udfff]\"+d+\"*|\\\\\\\\verb\\\\*([^]).*?\\\\3|\\\\\\\\verb([^*a-zA-Z]).*?\\\\4|\"+m+\"|\\\\\\\\[^\\ud800-\\udfff])\"),g=new RegExp(\"^\"+m),y=new RegExp(\"^\"+p),b=function(){function e(t){a()(this,e),this.input=t,this.pos=0}return o()(e,[{key:\"lex\",value:function(){var e=this.input,t=this.pos;if(t===e.length)return new h.a(\"EOF\",new c.a(this,t,t));var r=l()(v,e,t);if(null===r)throw new u.a(\"Unexpected character: '\"+e[t]+\"'\",new h.a(e[t],new c.a(this,t,t+1)));var n=r[2]||\" \",a=this.pos;this.pos+=r[0].length;var i=this.pos;return y.test(n)?this.lex():new h.a(n,new c.a(this,a,i))}}]),e}();t.c=b},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=r(64),a=(r.n(n),r(65));t.default=a.a},function(e,t){},function(e,t,r){\"use strict\";var n=r(6),a=r(34),i=r(76),o=r(113),s=r(5),l=function(e,t,r){s.a.clearNode(t);var n=u(e,r).toNode();t.appendChild(n)};\"undefined\"!=typeof document&&\"CSS1Compat\"!==document.compatMode&&(\"undefined\"!=typeof console&&console.warn(\"Warning: KaTeX doesn't work in quirks mode. Make sure your website has a suitable doctype.\"),l=function(){throw new n.a(\"KaTeX doesn't work in quirks mode.\")});var u=function(e,t){var r=new a.a(t),n=Object(o.a)(e,r);return Object(i.b)(n,e,r)};t.a={render:l,renderToString:function(e,t){return u(e,t).toMarkup()},ParseError:n.a,__parse:function(e,t){var r=new a.a(t);return Object(o.a)(e,r)},__renderToDomTree:u,__renderToHTMLTree:function(e,t){var r=new a.a(t),n=Object(o.a)(e,r);return Object(i.a)(n,e,r)}}},function(e,t,r){e.exports={default:r(67),__esModule:!0}},function(e,t,r){r(68),e.exports=r(8).Object.freeze},function(e,t,r){var n=r(20),a=r(69).onFreeze;r(46)(\"freeze\",function(e){return function(t){return e&&n(t)?e(a(t)):t}})},function(e,t,r){var n=r(32)(\"meta\"),a=r(20),i=r(21),o=r(15).f,s=0,l=Object.isExtensible||function(){return!0},u=!r(24)(function(){return l(Object.preventExtensions({}))}),c=function(e){o(e,n,{value:{i:\"O\"+ ++s,w:{}}})},h=e.exports={KEY:n,NEED:!1,fastKey:function(e,t){if(!a(e))return\"symbol\"==typeof e?e:(\"string\"==typeof e?\"S\":\"P\")+e;if(!i(e,n)){if(!l(e))return\"F\";if(!t)return\"E\";c(e)}return e[n].i},getWeak:function(e,t){if(!i(e,n)){if(!l(e))return!0;if(!t)return!1;c(e)}return e[n].w},onFreeze:function(e){return u&&h.NEED&&l(e)&&!i(e,n)&&c(e),e}}},function(e,t,r){e.exports=!r(23)&&!r(24)(function(){return 7!=Object.defineProperty(r(45)(\"div\"),\"a\",{get:function(){return 7}}).a})},function(e,t,r){var n=r(20);e.exports=function(e,t){if(!n(e))return e;var r,a;if(t&&\"function\"==typeof(r=e.toString)&&!n(a=r.call(e)))return a;if(\"function\"==typeof(r=e.valueOf)&&!n(a=r.call(e)))return a;if(!t&&\"function\"==typeof(r=e.toString)&&!n(a=r.call(e)))return a;throw TypeError(\"Can't convert object to primitive value\")}},function(e,t){e.exports=function(e){if(\"function\"!=typeof e)throw TypeError(e+\" is not a function!\");return e}},function(e,t,r){e.exports={default:r(74),__esModule:!0}},function(e,t,r){r(75);var n=r(8).Object;e.exports=function(e,t,r){return n.defineProperty(e,t,r)}},function(e,t,r){var n=r(25);n(n.S+n.F*!r(23),\"Object\",{defineProperty:r(15).f})},function(e,t,r){\"use strict\";r.d(t,\"b\",function(){return u}),r.d(t,\"a\",function(){return c});var n=r(4),a=r(2),i=r(0),o=r(43),s=(r(34),r(9)),l=function(e){return new o.a({style:e.displayMode?s.a.DISPLAY:s.a.TEXT,maxSize:e.maxSize})},u=function(e,t,r){var o=l(r),s=Object(a.c)(e,t,o),u=Object(n.c)(e,o),c=i.a.makeSpan([\"katex\"],[s,u]);return r.displayMode?i.a.makeSpan([\"katex-display\"],[c]):c},c=function(e,t,r){var a=l(r),o=Object(n.c)(e,a),s=i.a.makeSpan([\"katex\"],[o]);return r.displayMode?i.a.makeSpan([\"katex-display\"],[s]):s}},function(e,t,r){e.exports={default:r(78),__esModule:!0}},function(e,t,r){var n=r(8),a=n.JSON||(n.JSON={stringify:JSON.stringify});e.exports=function(e){return a.stringify.apply(a,arguments)}},function(e,t,r){e.exports={default:r(80),__esModule:!0}},function(e,t,r){r(36),r(92),e.exports=r(8).Array.from},function(e,t,r){var n=r(37),a=r(38);e.exports=function(e){return function(t,r){var i,o,s=String(a(t)),l=n(r),u=s.length;return l<0||l>=u?e?\"\":void 0:(i=s.charCodeAt(l))<55296||i>56319||l+1===u||(o=s.charCodeAt(l+1))<56320||o>57343?e?s.charAt(l):i:e?s.slice(l,l+2):o-56320+(i-55296<<10)+65536}}},function(e,t){e.exports=!0},function(e,t,r){e.exports=r(26)},function(e,t,r){\"use strict\";var n=r(85),a=r(33),i=r(54),o={};r(26)(o,r(11)(\"iterator\"),function(){return this}),e.exports=function(e,t,r){e.prototype=n(o,{next:a(1,r)}),i(e,t+\" Iterator\")}},function(e,t,r){var n=r(22),a=r(86),i=r(53),o=r(41)(\"IE_PROTO\"),s=function(){},l=\"prototype\",u=function(){var e,t=r(45)(\"iframe\"),n=i.length;for(t.style.display=\"none\",r(90).appendChild(t),t.src=\"javascript:\",(e=t.contentWindow.document).open(),e.write(\"<script>document.F=Object<\\/script>\"),e.close(),u=e.F;n--;)delete u[l][i[n]];return u()};e.exports=Object.create||function(e,t){var r;return null!==e?(s[l]=n(e),r=new s,s[l]=null,r[o]=e):r=u(),void 0===t?r:a(r,t)}},function(e,t,r){var n=r(15),a=r(22),i=r(39);e.exports=r(23)?Object.defineProperties:function(e,t){a(e);for(var r,o=i(t),s=o.length,l=0;s>l;)n.f(e,r=o[l++],t[r]);return e}},function(e,t,r){var n=r(21),a=r(40),i=r(88)(!1),o=r(41)(\"IE_PROTO\");e.exports=function(e,t){var r,s=a(e),l=0,u=[];for(r in s)r!=o&&n(s,r)&&u.push(r);for(;t.length>l;)n(s,r=t[l++])&&(~i(u,r)||u.push(r));return u}},function(e,t,r){var n=r(40),a=r(51),i=r(89);e.exports=function(e){return function(t,r,o){var s,l=n(t),u=a(l.length),c=i(o,u);if(e&&r!=r){for(;u>c;)if((s=l[c++])!=s)return!0}else for(;u>c;c++)if((e||c in l)&&l[c]===r)return e||c||0;return!e&&-1}}},function(e,t,r){var n=r(37),a=Math.max,i=Math.min;e.exports=function(e,t){return(e=n(e))<0?a(e+t,0):i(e,t)}},function(e,t,r){e.exports=r(16).document&&document.documentElement},function(e,t,r){var n=r(21),a=r(29),i=r(41)(\"IE_PROTO\"),o=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=a(e),n(e,i)?e[i]:\"function\"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?o:null}},function(e,t,r){\"use strict\";var n=r(47),a=r(25),i=r(29),o=r(93),s=r(94),l=r(51),u=r(95),c=r(55);a(a.S+a.F*!r(96)(function(e){Array.from(e)}),\"Array\",{from:function(e){var t,r,a,h,p=i(e),m=\"function\"==typeof this?this:Array,d=arguments.length,f=d>1?arguments[1]:void 0,v=void 0!==f,g=0,y=c(p);if(v&&(f=n(f,d>2?arguments[2]:void 0,2)),void 0==y||m==Array&&s(y))for(r=new m(t=l(p.length));t>g;g++)u(r,g,v?f(p[g],g):p[g]);else for(h=y.call(p),r=new m;!(a=h.next()).done;g++)u(r,g,v?o(h,f,[a.value,g],!0):a.value);return r.length=g,r}})},function(e,t,r){var n=r(22);e.exports=function(e,t,r,a){try{return a?t(n(r)[0],r[1]):t(r)}catch(t){var i=e.return;throw void 0!==i&&n(i.call(e)),t}}},function(e,t,r){var n=r(17),a=r(11)(\"iterator\"),i=Array.prototype;e.exports=function(e){return void 0!==e&&(n.Array===e||i[a]===e)}},function(e,t,r){\"use strict\";var n=r(15),a=r(33);e.exports=function(e,t,r){t in e?n.f(e,t,a(0,r)):e[t]=r}},function(e,t,r){var n=r(11)(\"iterator\"),a=!1;try{var i=[7][n]();i.return=function(){a=!0},Array.from(i,function(){throw 2})}catch(e){}e.exports=function(e,t){if(!t&&!a)return!1;var r=!1;try{var i=[7],o=i[n]();o.next=function(){return{done:r=!0}},i[n]=function(){return o},e(i)}catch(e){}return r}},function(e,t,r){e.exports={default:r(98),__esModule:!0}},function(e,t,r){r(58),r(36),e.exports=r(102)},function(e,t,r){\"use strict\";var n=r(100),a=r(101),i=r(17),o=r(40);e.exports=r(48)(Array,\"Array\",function(e,t){this._t=o(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,r=this._i++;return!e||r>=e.length?(this._t=void 0,a(1)):a(0,\"keys\"==t?r:\"values\"==t?e[r]:[r,e[r]])},\"values\"),i.Arguments=i.Array,n(\"keys\"),n(\"values\"),n(\"entries\")},function(e,t){e.exports=function(){}},function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},function(e,t,r){var n=r(56),a=r(11)(\"iterator\"),i=r(17);e.exports=r(8).isIterable=function(e){var t=Object(e);return void 0!==t[a]||\"@@iterator\"in t||i.hasOwnProperty(n(t))}},function(e,t,r){r(58),r(36),e.exports=r(104)},function(e,t,r){var n=r(22),a=r(55);e.exports=r(8).getIterator=function(e){var t=a(e);if(\"function\"!=typeof t)throw TypeError(e+\" is not iterable!\");return n(t.call(e))}},function(e,t,r){e.exports={default:r(106),__esModule:!0}},function(e,t,r){r(107),e.exports=r(8).Object.assign},function(e,t,r){var n=r(25);n(n.S+n.F,\"Object\",{assign:r(108)})},function(e,t,r){\"use strict\";var n=r(39),a=r(109),i=r(110),o=r(29),s=r(49),l=Object.assign;e.exports=!l||r(24)(function(){var e={},t={},r=Symbol(),n=\"abcdefghijklmnopqrst\";return e[r]=7,n.split(\"\").forEach(function(e){t[e]=e}),7!=l({},e)[r]||Object.keys(l({},t)).join(\"\")!=n})?function(e,t){for(var r=o(e),l=arguments.length,u=1,c=a.f,h=i.f;l>u;)for(var p,m=s(arguments[u++]),d=c?n(m).concat(c(m)):n(m),f=d.length,v=0;f>v;)h.call(m,p=d[v++])&&(r[p]=m[p]);return r}:l},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t){t.f={}.propertyIsEnumerable},function(e,t,r){\"use strict\";var n={stdHorizRule:\"M0 80H400000 v40H0z M0 80H400000 v40H0z\",vertSeparator:\"M100 0h50V400000h-50zM100 0h50V400000h-50z\",sqrtMain:\"M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,\\n-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,\\n-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,\\n35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,\\n-221c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467\\ns-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422\\ns-65,47,-65,47z M834 80H400000v40H845z\",sqrtSize1:\"M263,681c0.7,0,18,39.7,52,119c34,79.3,68.167,\\n158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120c340,-704.7,510.7,-1060.3,512,-1067\\nc4.7,-7.3,11,-11,19,-11H40000v40H1012.3s-271.3,567,-271.3,567c-38.7,80.7,-84,\\n175,-136,283c-52,108,-89.167,185.3,-111.5,232c-22.3,46.7,-33.8,70.3,-34.5,71\\nc-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1s-109,-253,-109,-253c-72.7,-168,-109.3,\\n-252,-110,-252c-10.7,8,-22,16.7,-34,26c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26\\ns76,-59,76,-59s76,-60,76,-60z M1001 80H40000v40H1012z\",sqrtSize2:\"M1001,80H400000v40H1013.1s-83.4,268,-264.1,840c-180.7,\\n572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,\\n-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744c-10,12,-21,25,-33,39s-32,39,-32,39\\nc-6,-5.3,-15,-14,-27,-26s25,-30,25,-30c26.7,-32.7,52,-63,76,-91s52,-60,52,-60\\ns208,722,208,722c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,\\n-658.5c53.7,-170.3,84.5,-266.8,92.5,-289.5c4,-6.7,10,-10,18,-10z\\nM1001 80H400000v40H1013z\",sqrtSize3:\"M424,2478c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,\\n-342,-109.8,-513.3,-110.5,-514c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,\\n25c-5.7,9.3,-9.8,16,-12.5,20s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,\\n-13s76,-122,76,-122s77,-121,77,-121s209,968,209,968c0,-2,84.7,-361.7,254,-1079\\nc169.3,-717.3,254.7,-1077.7,256,-1081c4,-6.7,10,-10,18,-10H400000v40H1014.6\\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185c-2,6,-10,9,-24,9\\nc-8,0,-12,-0.7,-12,-2z M1001 80H400000v40H1014z\",sqrtSize4:\"M473,2793c339.3,-1799.3,509.3,-2700,510,-2702\\nc3.3,-7.3,9.3,-11,18,-11H400000v40H1017.7s-90.5,478,-276.2,1466c-185.7,988,\\n-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,\\n-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200c0,-1.3,-5.3,8.7,-16,30c-10.7,\\n21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26s76,-153,76,-153s77,-151,\\n77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,606z\\nM1001 80H400000v40H1017z\",doubleleftarrow:\"M262 157\\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\\nm8 0v40h399730v-40zm0 194v40h399730v-40z\",doublerightarrow:\"M399738 392l\\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z\",leftarrow:\"M400000 241H110l3-3c68.7-52.7 113.7-120\\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\\n l-3-3h399890zM100 241v40h399900v-40z\",leftbrace:\"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z\",leftbraceunder:\"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z\",leftgroup:\"M400000 80\\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\\n 435 0h399565z\",leftgroupunder:\"M400000 262\\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\\n 435 219h399565z\",leftharpoon:\"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z\",leftharpoonplus:\"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\\nm0 0v40h400000v-40z\",leftharpoondown:\"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z\",leftharpoondownplus:\"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z\",lefthook:\"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\\n 71.5 23h399859zM103 281v-40h399897v40z\",leftlinesegment:\"M40 281 V428 H0 V94 H40 V241 H400000 v40z\\nM40 281 V428 H0 V94 H40 V241 H400000 v40z\",leftmapsto:\"M40 281 V448H0V74H40V241H400000v40z\\nM40 281 V448H0V74H40V241H400000v40z\",leftToFrom:\"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z\",longequal:\"M0 50 h400000 v40H0z m0 194h40000v40H0z\\nM0 50 h400000 v40H0z m0 194h40000v40H0z\",midbrace:\"M200428 334\\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z\",midbraceunder:\"M199572 214\\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z\",rightarrow:\"M0 241v40h399891c-47.3 35.3-84 78-110 128\\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\\n 151.7 139 205zm0 0v40h399900v-40z\",rightbrace:\"M400000 542l\\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z\",rightbraceunder:\"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z\",rightgroup:\"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\\n 3-1 3-3v-38c-76-158-257-219-435-219H0z\",rightgroupunder:\"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z\",rightharpoon:\"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\\n 69.2 92 94.5zm0 0v40h399900v-40z\",rightharpoonplus:\"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z\",rightharpoondown:\"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z\",rightharpoondownplus:\"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\\nm0-194v40h400000v-40zm0 0v40h400000v-40z\",righthook:\"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z\",rightlinesegment:\"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z\",rightToFrom:\"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z\",twoheadleftarrow:\"M0 167c68 40\\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z\",twoheadrightarrow:\"M400000 167\\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z\",tilde1:\"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\\n-68.267.847-113-73.952-191-73.952z\",tilde2:\"M344 55.266c-142 0-300.638 81.316-311.5 86.418\\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z\",tilde3:\"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\\n -338 0-409-156.573-744-156.573z\",tilde4:\"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\\n -175.236-744-175.236z\",vec:\"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\\nc-16-25.333-24-45-24-59z\",widehat1:\"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z\",widehat2:\"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",widehat3:\"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",widehat4:\"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",baraboveleftarrow:\"M1 500c30.67-18 59-41.833 85-71.5s45-61.17 57-94.5h23\\nc15.33 0 23 .33 23 1 0 .67-5.33 12.67-16 36-16.67 34.67-39 67.33-67 98l-10 11\\nh39904v40H96l9 10c27.33 30.67 50.67 65 70 103l14 33c0 .67-7.67 1-23 1h-22\\nC116.67 596.33 69 540.67 1 500z M96 480 H400000 v40 H96z\\nM1 147 H399905 v40 H1z M0 147 H399905 v40 H0z\",rightarrowabovebar:\"M400000 167c-70.67 42-118 97.67-142 167h-23c-15.33 0\\n-23-.33-23-1 0-1.33 5.33-13.67 16-37 18-35.33 41.33-69 70-101l7-8h-39905\\nv-40h39905c-389 0 0 0 0 0l-7-8c-28.67-32-52-65.67-70-101-10.67-23.33-16-35.67\\n-16-37 0-.67 7.67-1 23-1h23c11.33 33.33 30 64.833 56 94.5s54.67 53.83 86 72.5z\\nM0 147 H399905 v40 H0z M96 480 H400000 v40 H0z M96 480 H400000 v40 H0z\",baraboveshortleftharpoon:\"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z\",rightharpoonaboveshortbar:\"M0,241 l0,40c399126,0,399993,0,399993,0\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z\",shortbaraboveleftharpoon:\"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z\",shortrightharpoonabovebar:\"M53,241l0,40c398570,0,399437,0,399437,0\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z\"};t.a={path:n}},function(e,t,r){\"use strict\";r.d(t,\"a\",function(){return o}),r.d(t,\"b\",function(){return s});var n={number:3,unit:\"mu\"},a={number:4,unit:\"mu\"},i={number:5,unit:\"mu\"},o={mord:{mop:n,mbin:a,mrel:i,minner:n},mop:{mord:n,mop:n,mrel:i,minner:n},mbin:{mord:a,mop:a,mopen:a,minner:a},mrel:{mord:i,mop:i,mopen:i,minner:i},mopen:{},mclose:{mop:n,mbin:a,mrel:i,minner:n},mpunct:{mord:n,mop:n,mrel:i,mopen:n,mclose:n,mpunct:n,minner:n},minner:{mord:n,mop:n,mbin:a,mrel:i,mopen:n,mpunct:n,minner:n}},s={mord:{mop:n},mop:{mord:n,mop:n},mbin:{},mrel:{},mopen:{},mclose:{mop:n},mpunct:{},minner:{mop:n}}},function(e,t,r){\"use strict\";var n=r(114);t.a=function(e,t){if(!(\"string\"==typeof e||e instanceof String))throw new TypeError(\"KaTeX can only parse string typed expression\");return new n.a(e,t).parse()}},function(e,t,r){\"use strict\";var n=r(7),a=r.n(n),i=r(10),o=r.n(i),s=r(115),l=r(142),u=r(144),c=r(28),h=r(19),p=r(42),m=r(148),d=r.n(m),f=r(149),v=r(14),g=r(6),y=r(62);r(34),r(27);function b(e,t){return{type:\"arg\",result:e,token:t}}function x(e){if(\"$\"===e.type)throw new g.a(\"Unexpected $\",e.token);return e}var w=function(){function e(t,r){a()(this,e),this.mode=\"math\",this.gullet=new u.a(t,r.macros,this.mode),r.colorIsTextColor&&(this.gullet.macros[\"\\\\color\"]=\"\\\\textcolor\"),this.settings=r,this.leftrightDepth=0}return o()(e,[{key:\"expect\",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(this.nextToken.text!==e)throw new g.a(\"Expected '\"+e+\"', got '\"+this.nextToken.text+\"'\",this.nextToken);t&&this.consume()}},{key:\"consume\",value:function(){this.nextToken=this.gullet.expandNextToken()}},{key:\"switchMode\",value:function(e){this.mode=e,this.gullet.switchMode(e)}},{key:\"parse\",value:function(){this.consume();var e=this.parseInput();return e}},{key:\"parseInput\",value:function(){var e=this.parseExpression(!1);return this.expect(\"EOF\",!1),e}},{key:\"parseExpression\",value:function(t,r){for(var n=[];;){\"math\"===this.mode&&this.consumeSpaces();var a=this.nextToken;if(-1!==e.endOfExpression.indexOf(a.text))break;if(r&&a.text===r)break;if(t&&s.a[a.text]&&s.a[a.text].infix)break;var i=this.parseAtom(r);if(!i){if(!this.settings.throwOnError&&\"\\\\\"===a.text[0]){var o=this.handleUnsupportedCmd();n.push(o);continue}break}n.push(i)}return this.handleInfixNodes(n)}},{key:\"handleInfixNodes\",value:function(e){for(var t=-1,r=void 0,n=0;n<e.length;n++){var a=e[n];if(\"infix\"===a.type){if(-1!==t)throw new g.a(\"only one infix operator per group\",a.value.token);t=n,r=a.value.replaceWith}}if(-1!==t&&r){var i=void 0,o=void 0,s=e.slice(0,t),l=e.slice(t+1);i=1===s.length&&\"ordgroup\"===s[0].type?s[0]:new v.a(\"ordgroup\",s,this.mode),o=1===l.length&&\"ordgroup\"===l[0].type?l[0]:new v.a(\"ordgroup\",l,this.mode);var u=this.callFunction(r,[i,o],[]);return[new v.a(u.type,u,this.mode)]}return e}},{key:\"handleSupSubscript\",value:function(t){var r=this.nextToken,n=r.text;this.consume(),this.consumeSpaces();var a=this.parseGroup();if(!a){if(this.settings.throwOnError||\"\\\\\"!==this.nextToken.text[0])throw new g.a(\"Expected group after '\"+n+\"'\",r);return this.handleUnsupportedCmd()}var i=x(a);if(\"fn\"===i.type){if(s.a[i.result].greediness>e.SUPSUB_GREEDINESS)return this.parseGivenFunction(a);throw new g.a(\"Got function '\"+i.result+\"' with no arguments as \"+t,r)}return i.result}},{key:\"handleUnsupportedCmd\",value:function(){for(var e=this.nextToken.text,t=[],r=0;r<e.length;r++)t.push(new v.a(\"textord\",e[r],\"text\"));var n=new v.a(\"text\",{body:t,type:\"text\"},this.mode),a=new v.a(\"color\",{color:this.settings.errorColor,value:[n],type:\"color\"},this.mode);return this.consume(),a}},{key:\"parseAtom\",value:function(e){var t=this.parseImplicitGroup(e);if(\"text\"===this.mode)return t;for(var r=void 0,n=void 0;;){this.consumeSpaces();var a=this.nextToken;if(\"\\\\limits\"===a.text||\"\\\\nolimits\"===a.text){if(!t||\"op\"!==t.type)throw new g.a(\"Limit controls must follow a math operator\",a);var i=\"\\\\limits\"===a.text;t.value.limits=i,t.value.alwaysHandleSupSub=!0,this.consume()}else if(\"^\"===a.text){if(r)throw new g.a(\"Double superscript\",a);r=this.handleSupSubscript(\"superscript\")}else if(\"_\"===a.text){if(n)throw new g.a(\"Double subscript\",a);n=this.handleSupSubscript(\"subscript\")}else{if(\"'\"!==a.text)break;if(r)throw new g.a(\"Double superscript\",a);var o=new v.a(\"textord\",\"\\\\prime\",this.mode),s=[o];for(this.consume();\"'\"===this.nextToken.text;)s.push(o),this.consume();\"^\"===this.nextToken.text&&s.push(this.handleSupSubscript(\"superscript\")),r=new v.a(\"ordgroup\",s,this.mode)}}return r||n?new v.a(\"supsub\",{base:t,sup:r,sub:n},this.mode):t}},{key:\"parseImplicitGroup\",value:function(e){var t=this.parseSymbol();if(null==t)return this.parseFunction();if(\"arg\"===t.type)return this.parseGivenFunction(t);var r=t.result;if(\"$\"===r){if(\"math\"===this.mode)throw new g.a(\"$ within math mode\");var n=this.mode;this.switchMode(\"math\"),this.consume();var a=this.parseExpression(!1,\"$\");return this.expect(\"$\",!1),this.switchMode(n),this.consume(),new v.a(\"styling\",{style:\"text\",value:a},\"math\")}if(\"\\\\begin\"===r){var i=this.parseGivenFunction(t),o=i.value.name;if(!l.a.hasOwnProperty(o))throw new g.a(\"No such environment: \"+o,i.value.nameGroup);var s=l.a[o],u=this.parseArguments(\"\\\\begin{\"+o+\"}\",s),c=u.args,h=u.optArgs,p={mode:this.mode,envName:o,parser:this},m=s.handler(p,c,h);this.expect(\"\\\\end\",!1);var d=this.nextToken,f=this.parseFunction();if(!f)throw new g.a(\"failed to parse function after \\\\end\");if(f.value.name!==o)throw new g.a(\"Mismatch: \\\\begin{\"+o+\"} matched by \\\\end{\"+f.value.name+\"}\",d);return m}return this.parseGivenFunction(t,e)}},{key:\"parseFunction\",value:function(){var e=this.parseGroup();return e?this.parseGivenFunction(e):null}},{key:\"parseGivenFunction\",value:function(e,t){if(\"fn\"===(e=x(e)).type){var r=e.result,n=s.a[r];if(\"text\"===this.mode&&!n.allowedInText)throw new g.a(\"Can't use function '\"+r+\"' in text mode\",e.token);if(\"math\"===this.mode&&!1===n.allowedInMath)throw new g.a(\"Can't use function '\"+r+\"' in math mode\",e.token);var a=this.parseArguments(r,n),i=a.args,o=a.optArgs,l=e.token,u=this.callFunction(r,i,o,l,t);return new v.a(u.type,u,this.mode)}return e.result}},{key:\"callFunction\",value:function(e,t,r,n,a){var i={funcName:e,parser:this,token:n,breakOnTokenText:a},o=s.a[e];if(o&&o.handler)return o.handler(i,t,r);throw new g.a(\"No function handler for \"+e)}},{key:\"parseArguments\",value:function(e,t){var r=t.numArgs+t.numOptionalArgs;if(0===r)return{args:[],optArgs:[]};for(var n=t.greediness,a=[],i=[],o=0;o<r;o++){var l=t.argTypes&&t.argTypes[o],u=o<t.numOptionalArgs;o>0&&!u&&this.consumeSpaces(),0!==o||u||\"math\"!==this.mode||this.consumeSpaces();var c=this.nextToken,h=l?this.parseGroupOfType(l,u):this.parseGroup(u);if(!h){if(u){i.push(null);continue}if(this.settings.throwOnError||\"\\\\\"!==this.nextToken.text[0])throw new g.a(\"Expected group after '\"+e+\"'\",c);h=b(this.handleUnsupportedCmd(),c)}var p=void 0;if(\"fn\"===(h=x(h)).type){if(!(s.a[h.result].greediness>n))throw new g.a(\"Got function '\"+h.result+\"' as argument to '\"+e+\"'\",c);p=this.parseGivenFunction(h)}else p=h.result;(u?i:a).push(p)}return{args:a,optArgs:i}}},{key:\"parseGroupOfType\",value:function(e,t){return\"original\"===e&&(e=this.mode),\"color\"===e?this.parseColorGroup(t):\"size\"===e?this.parseSizeGroup(t):\"url\"===e?this.parseUrlGroup(t):this.parseGroup(t,e)}},{key:\"consumeSpaces\",value:function(){for(;\" \"===this.nextToken.text;)this.consume()}},{key:\"parseStringGroup\",value:function(e,t){if(t&&\"[\"!==this.nextToken.text)return null;var r=this.mode;this.mode=\"text\",this.expect(t?\"[\":\"{\");for(var n=\"\",a=this.nextToken,i=a;this.nextToken.text!==(t?\"]\":\"}\");){if(\"EOF\"===this.nextToken.text)throw new g.a(\"Unexpected end of input in \"+e,a.range(this.nextToken,n));n+=(i=this.nextToken).text,this.consume()}return this.mode=r,this.expect(t?\"]\":\"}\"),a.range(i,n)}},{key:\"parseStringGroupWithBalancedBraces\",value:function(e,t){if(t&&\"[\"!==this.nextToken.text)return null;var r=this.mode;this.mode=\"text\",this.expect(t?\"[\":\"{\");for(var n=\"\",a=0,i=this.nextToken,o=i;a>0||this.nextToken.text!==(t?\"]\":\"}\");){if(\"EOF\"===this.nextToken.text)throw new g.a(\"Unexpected end of input in \"+e,i.range(this.nextToken,n));if(n+=(o=this.nextToken).text,\"{\"===o.text)a+=1;else if(\"}\"===o.text){if(a<=0)throw new g.a(\"Unbalanced brace of input in \"+e,i.range(this.nextToken,n));a-=1}this.consume()}return this.mode=r,this.expect(t?\"]\":\"}\"),i.range(o,n)}},{key:\"parseRegexGroup\",value:function(e,t){var r=this.mode;this.mode=\"text\";for(var n=this.nextToken,a=n,i=\"\";\"EOF\"!==this.nextToken.text&&e.test(i+this.nextToken.text);)i+=(a=this.nextToken).text,this.consume();if(\"\"===i)throw new g.a(\"Invalid \"+t+\": '\"+n.text+\"'\",n);return this.mode=r,n.range(a,i)}},{key:\"parseColorGroup\",value:function(e){var t=this.parseStringGroup(\"color\",e);if(!t)return null;var r=/^(#[a-f0-9]{3}|#[a-f0-9]{6}|[a-z]+)$/i.exec(t.text);if(!r)throw new g.a(\"Invalid color: '\"+t.text+\"'\",t);return b(new v.a(\"color\",r[0],this.mode),t)}},{key:\"parseUrlGroup\",value:function(e){var t=this.parseStringGroupWithBalancedBraces(\"url\",e);if(!t)return null;var r=t.text.replace(/\\\\([#$%&~_^{}])/g,\"$1\");return b(new v.a(\"url\",r,this.mode),t)}},{key:\"parseSizeGroup\",value:function(e){var t=void 0;if(!(t=e||\"{\"===this.nextToken.text?this.parseStringGroup(\"size\",e):this.parseRegexGroup(/^[-+]? *(?:$|\\d+|\\d+\\.\\d*|\\.\\d*) *[a-z]{0,2} *$/,\"size\")))return null;var r=/([-+]?) *(\\d+(?:\\.\\d*)?|\\.\\d+) *([a-z]{2})/.exec(t.text);if(!r)throw new g.a(\"Invalid size: '\"+t.text+\"'\",t);var n={number:+(r[1]+r[2]),unit:r[3]};if(!Object(h.b)(n))throw new g.a(\"Invalid unit: '\"+n.unit+\"'\",t);return b(new v.a(\"size\",n,this.mode),t)}},{key:\"parseGroup\",value:function(e,t){var r=this.mode,n=this.nextToken;if(this.nextToken.text===(e?\"[\":\"{\")){t&&this.switchMode(t),this.consume();var a=this.parseExpression(!1,e?\"]\":\"}\"),i=this.nextToken;return t&&this.switchMode(r),this.expect(e?\"]\":\"}\"),\"text\"===t&&this.formLigatures(a),b(new v.a(\"ordgroup\",a,this.mode,n,i),n.range(i,n.text))}t&&this.switchMode(t);var o=e?null:this.parseSymbol();return t&&this.switchMode(r),o}},{key:\"formLigatures\",value:function(e){for(var t=e.length-1,r=0;r<t;++r){var n=e[r],a=n.value;\"-\"===a&&\"-\"===e[r+1].value&&(r+1<t&&\"-\"===e[r+2].value?(e.splice(r,3,new v.a(\"textord\",\"---\",\"text\",n,e[r+2])),t-=2):(e.splice(r,2,new v.a(\"textord\",\"--\",\"text\",n,e[r+1])),t-=1)),\"'\"!==a&&\"`\"!==a||e[r+1].value!==a||(e.splice(r,2,new v.a(\"textord\",a+a,\"text\",n,e[r+1])),t-=1)}}},{key:\"parseSymbol\",value:function(){var e,t=this.nextToken,r=t.text;if(s.a[r])return this.consume(),{type:\"fn\",result:(e=t).text,token:e};if(/^\\\\verb[^a-zA-Z]/.test(r)){this.consume();var n=r.slice(5),a=\"*\"===n.charAt(0);if(a&&(n=n.slice(1)),n.length<2||n.charAt(0)!==n.slice(-1))throw new g.a(\"\\\\verb assertion failed --\\n please report what input caused this bug\");return n=n.slice(1,-1),b(new v.a(\"verb\",{body:n,star:a},\"text\"),t)}if(\"$\"===r)return{type:\"$\",result:\"$\",token:t};f.a.hasOwnProperty(r[0])&&!c.a[this.mode][r[0]]&&(r=f.a[r[0]]+r.substr(1));var i=y.a.exec(r);i&&(\"i\"===(r=r.substring(0,i.index))?r=\"\\u0131\":\"j\"===r&&(r=\"\\u0237\"));var o=null;if(c.a[this.mode][r])o=new v.a(c.a[this.mode][r].group,r,this.mode,t);else{if(\"text\"!==this.mode||!Object(p.b)(r.charCodeAt(0)))return null;o=new v.a(\"textord\",r,this.mode,t)}if(this.consume(),i)for(var l=0;l<i[0].length;l++){var u=i[0][l];if(!d.a[u])throw new g.a(\"Unknown accent ' \"+u+\"'\",t);var h=d.a[u][this.mode];if(!h)throw new g.a(\"Accent \"+u+\" unsupported in \"+this.mode+\" mode\",t);o=new v.a(\"accent\",{type:\"accent\",label:h,isStretchy:!1,isShifty:!0,base:o},this.mode,t)}return b(o,t)}}]),e}();w.endOfExpression=[\"}\",\"\\\\end\",\"\\\\right\",\"&\",\"\\\\\\\\\",\"\\\\cr\"],w.SUPSUB_GREEDINESS=1,t.a=w},function(e,t,r){\"use strict\";var n=r(6),a=r(14),i=r(3),o=(r(116),r(117),r(118),r(119),r(120),r(121),r(122),r(123),r(124),r(125),r(126),r(127),r(128),r(129),r(130),r(131),r(60),r(132),r(133),r(137),r(138),r(139),r(140),r(141),i.a);t.a=o;var s=function(e,t,r){Object(i.b)({names:e,props:t,handler:r})};s([\"\\\\mathord\",\"\\\\mathbin\",\"\\\\mathrel\",\"\\\\mathopen\",\"\\\\mathclose\",\"\\\\mathpunct\",\"\\\\mathinner\"],{numArgs:1},function(e,t){var r=t[0];return{type:\"mclass\",mclass:\"m\"+e.funcName.substr(5),value:Object(i.c)(r)}}),s([\"\\\\stackrel\"],{numArgs:2},function(e,t){var r=t[0],n=t[1],o=new a.a(\"op\",{type:\"op\",limits:!0,alwaysHandleSupSub:!0,symbol:!1,value:Object(i.c)(n)},n.mode);return{type:\"mclass\",mclass:\"mrel\",value:[new a.a(\"supsub\",{base:o,sup:r,sub:null},r.mode)]}});var l={\"\\u222b\":\"\\\\int\",\"\\u222c\":\"\\\\iint\",\"\\u222d\":\"\\\\iiint\",\"\\u222e\":\"\\\\oint\"};s([\"\\\\arcsin\",\"\\\\arccos\",\"\\\\arctan\",\"\\\\arctg\",\"\\\\arcctg\",\"\\\\arg\",\"\\\\ch\",\"\\\\cos\",\"\\\\cosec\",\"\\\\cosh\",\"\\\\cot\",\"\\\\cotg\",\"\\\\coth\",\"\\\\csc\",\"\\\\ctg\",\"\\\\cth\",\"\\\\deg\",\"\\\\dim\",\"\\\\exp\",\"\\\\hom\",\"\\\\ker\",\"\\\\lg\",\"\\\\ln\",\"\\\\log\",\"\\\\sec\",\"\\\\sin\",\"\\\\sinh\",\"\\\\sh\",\"\\\\tan\",\"\\\\tanh\",\"\\\\tg\",\"\\\\th\"],{numArgs:0},function(e){return{type:\"op\",limits:!1,symbol:!1,body:e.funcName}}),s([\"\\\\det\",\"\\\\gcd\",\"\\\\inf\",\"\\\\lim\",\"\\\\max\",\"\\\\min\",\"\\\\Pr\",\"\\\\sup\"],{numArgs:0},function(e){return{type:\"op\",limits:!0,symbol:!1,body:e.funcName}}),s([\"\\\\int\",\"\\\\iint\",\"\\\\iiint\",\"\\\\oint\",\"\\u222b\",\"\\u222c\",\"\\u222d\",\"\\u222e\"],{numArgs:0},function(e){var t=e.funcName;return 1===t.length&&(t=l[t]),{type:\"op\",limits:!1,symbol:!0,body:t}}),s([\"\\\\overbrace\",\"\\\\underbrace\"],{numArgs:1},function(e,t){var r=t[0];return{type:\"horizBrace\",label:e.funcName,isOver:/^\\\\over/.test(e.funcName),base:r}}),s([\"\\\\xleftarrow\",\"\\\\xrightarrow\",\"\\\\xLeftarrow\",\"\\\\xRightarrow\",\"\\\\xleftrightarrow\",\"\\\\xLeftrightarrow\",\"\\\\xhookleftarrow\",\"\\\\xhookrightarrow\",\"\\\\xmapsto\",\"\\\\xrightharpoondown\",\"\\\\xrightharpoonup\",\"\\\\xleftharpoondown\",\"\\\\xleftharpoonup\",\"\\\\xrightleftharpoons\",\"\\\\xleftrightharpoons\",\"\\\\xlongequal\",\"\\\\xtwoheadrightarrow\",\"\\\\xtwoheadleftarrow\",\"\\\\xtofrom\",\"\\\\xrightleftarrows\",\"\\\\xrightequilibrium\",\"\\\\xleftequilibrium\"],{numArgs:1,numOptionalArgs:1},function(e,t,r){var n=r[0],a=t[0];return{type:\"xArrow\",label:e.funcName,body:a,below:n}}),s([\"\\\\over\",\"\\\\choose\",\"\\\\atop\"],{numArgs:0,infix:!0},function(e){var t=void 0;switch(e.funcName){case\"\\\\over\":t=\"\\\\frac\";break;case\"\\\\choose\":t=\"\\\\binom\";break;case\"\\\\atop\":t=\"\\\\\\\\atopfrac\";break;default:throw new Error(\"Unrecognized infix genfrac command\")}return{type:\"infix\",replaceWith:t,token:e.token}}),s([\"\\\\\\\\\",\"\\\\cr\"],{numArgs:0,numOptionalArgs:1,argTypes:[\"size\"]},function(e,t,r){return{type:\"cr\",size:r[0]}}),s([\"\\\\begin\",\"\\\\end\"],{numArgs:1,argTypes:[\"text\"]},function(e,t){var r=t[0];if(\"ordgroup\"!==r.type)throw new n.a(\"Invalid environment name\",r);for(var a=\"\",i=0;i<r.value.length;++i)a+=r.value[i].value;return{type:\"environment\",name:a,nameGroup:r}}),s([\"\\\\raisebox\"],{numArgs:2,argTypes:[\"size\",\"text\"],allowedInText:!0},function(e,t){var r=t[0],n=t[1];return{type:\"raisebox\",dy:r,body:n,value:Object(i.c)(n)}})},function(e,t,r){\"use strict\";var n=r(3),a=r(0),i=r(12),o=r(1),s=r(44),l=r(9),u=r(4),c=r(2);Object(n.b)({type:\"sqrt\",names:[\"\\\\sqrt\"],props:{numArgs:1,numOptionalArgs:1},handler:function(e,t,r){var n=r[0];return{type:\"sqrt\",body:t[0],index:n}},htmlBuilder:function(e,t){var r=u.b(e.value.body,t.havingCrampedStyle());0===r.height&&(r.height=t.fontMetrics().xHeight),r instanceof i.a.documentFragment&&(r=a.a.makeSpan([],[r],t));var n=t.fontMetrics().defaultRuleThickness,o=n;t.style.id<l.a.TEXT.id&&(o=t.fontMetrics().xHeight);var c=n+o/4,h=(r.height+r.depth+c+n)*t.sizeMultiplier,p=s.a.sqrtImage(h,t),m=p.span,d=p.ruleWidth,f=m.height-d;f>r.height+r.depth+c&&(c=(c+f-r.height-r.depth)/2);var v=m.height-r.height-c-d;r.style.paddingLeft=m.advanceWidth+\"em\";var g=a.a.makeVList({positionType:\"firstBaseline\",children:[{type:\"elem\",elem:r,wrapperClasses:[\"svg-align\"]},{type:\"kern\",size:-(r.height+v)},{type:\"elem\",elem:m},{type:\"kern\",size:d}]},t);if(e.value.index){var y=t.havingStyle(l.a.SCRIPTSCRIPT),b=u.b(e.value.index,y,t),x=.6*(g.height-g.depth),w=a.a.makeVList({positionType:\"shift\",positionData:-x,children:[{type:\"elem\",elem:b}]},t),k=a.a.makeSpan([\"root\"],[w]);return a.a.makeSpan([\"mord\",\"sqrt\"],[k,g],t)}return a.a.makeSpan([\"mord\",\"sqrt\"],[g],t)},mathmlBuilder:function(e,t){return e.value.index?new o.a.MathNode(\"mroot\",[c.b(e.value.body,t),c.b(e.value.index,t)]):new o.a.MathNode(\"msqrt\",[c.b(e.value.body,t)])}})},function(e,t,r){\"use strict\";var n=r(3),a=r(0),i=r(1),o=r(6),s=r(4),l=r(2),u=function(e,t){var r=s.a(e.value.value,t.withColor(e.value.color),!1);return new a.a.makeFragment(r)},c=function(e,t){var r=l.a(e.value.value,t),n=new i.a.MathNode(\"mstyle\",r);return n.setAttribute(\"mathcolor\",e.value.color),n};Object(n.b)({type:\"color\",names:[\"\\\\textcolor\"],props:{numArgs:2,allowedInText:!0,greediness:3,argTypes:[\"color\",\"original\"]},handler:function(e,t){var r=t[0],a=t[1];return{type:\"color\",color:r.value,value:Object(n.c)(a)}},htmlBuilder:u,mathmlBuilder:c}),Object(n.b)({type:\"color\",names:[\"\\\\blue\",\"\\\\orange\",\"\\\\pink\",\"\\\\red\",\"\\\\green\",\"\\\\gray\",\"\\\\purple\",\"\\\\blueA\",\"\\\\blueB\",\"\\\\blueC\",\"\\\\blueD\",\"\\\\blueE\",\"\\\\tealA\",\"\\\\tealB\",\"\\\\tealC\",\"\\\\tealD\",\"\\\\tealE\",\"\\\\greenA\",\"\\\\greenB\",\"\\\\greenC\",\"\\\\greenD\",\"\\\\greenE\",\"\\\\goldA\",\"\\\\goldB\",\"\\\\goldC\",\"\\\\goldD\",\"\\\\goldE\",\"\\\\redA\",\"\\\\redB\",\"\\\\redC\",\"\\\\redD\",\"\\\\redE\",\"\\\\maroonA\",\"\\\\maroonB\",\"\\\\maroonC\",\"\\\\maroonD\",\"\\\\maroonE\",\"\\\\purpleA\",\"\\\\purpleB\",\"\\\\purpleC\",\"\\\\purpleD\",\"\\\\purpleE\",\"\\\\mintA\",\"\\\\mintB\",\"\\\\mintC\",\"\\\\grayA\",\"\\\\grayB\",\"\\\\grayC\",\"\\\\grayD\",\"\\\\grayE\",\"\\\\grayF\",\"\\\\grayG\",\"\\\\grayH\",\"\\\\grayI\",\"\\\\kaBlue\",\"\\\\kaGreen\"],props:{numArgs:1,allowedInText:!0,greediness:3},handler:function(e,t){var r=t[0];return{type:\"color\",color:\"katex-\"+e.funcName.slice(1),value:Object(n.c)(r)}},htmlBuilder:u,mathmlBuilder:c}),Object(n.b)({type:\"color\",names:[\"\\\\color\"],props:{numArgs:1,allowedInText:!0,greediness:3,argTypes:[\"color\"]},handler:function(e,t){var r=e.parser,n=e.breakOnTokenText,a=t[0];if(!a)throw new o.a(\"\\\\color not followed by color\");var i=r.parseExpression(!0,n);return{type:\"color\",color:a.value,value:i}},htmlBuilder:u,mathmlBuilder:c})},function(e,t,r){\"use strict\";var n=r(3),a=r(0),i=r(1),o=r(4),s=r(2),l={\"\\\\text\":void 0,\"\\\\textrm\":\"textrm\",\"\\\\textsf\":\"textsf\",\"\\\\texttt\":\"texttt\",\"\\\\textnormal\":\"textrm\"},u={\"\\\\textbf\":\"textbf\"},c={\"\\\\textit\":\"textit\"};Object(n.b)({type:\"text\",names:[\"\\\\text\",\"\\\\textrm\",\"\\\\textsf\",\"\\\\texttt\",\"\\\\textnormal\",\"\\\\textbf\",\"\\\\textit\"],props:{numArgs:1,argTypes:[\"text\"],greediness:2,allowedInText:!0},handler:function(e,t){var r=t[0];return{type:\"text\",body:Object(n.c)(r),font:e.funcName}},htmlBuilder:function(e,t){var r=e.value.font,n=void 0;n=l[r]?t.withFontFamily(l[r]):u[r]?t.withFontWeight(u[r]):t.withFontShape(c[r]);var i=o.a(e.value.body,n,!0);return a.a.tryCombineChars(i),a.a.makeSpan([\"mord\",\"text\"],i,n)},mathmlBuilder:function(e,t){for(var r=e.value.body,n=[],a=null,o=0;o<r.length;o++){var l=s.b(r[o],t);\"mtext\"===l.type&&null!=a?Array.prototype.push.apply(a.children,l.children):(n.push(l),\"mtext\"===l.type&&(a=l))}return 1===n.length?n[0]:new i.a.MathNode(\"mrow\",n)}})},function(e,t,r){\"use strict\";var n=r(3),a=r(0),i=r(1),o=r(5),s=r(13),l=r(4),u=r(2),c=function(e,t){var r=l.b(e.value.body,t),n=e.value.label.substr(1),i=t.sizeMultiplier,u=void 0,c=0,h=/color/.test(n);if(\"sout\"===n)(u=a.a.makeSpan([\"stretchy\",\"sout\"])).height=t.fontMetrics().defaultRuleThickness/i,c=-.5*t.fontMetrics().xHeight;else{r.classes.push(/cancel/.test(n)?\"cancel-pad\":\"boxpad\");var p=0;p=/box/.test(n)?\"colorbox\"===n?.3:.34:o.a.isCharacterBox(e.value.body)?.2:0,u=s.a.encloseSpan(r,n,p,t),c=r.depth+p,h&&(u.style.backgroundColor=e.value.backgroundColor.value,\"fcolorbox\"===n&&(u.style.borderColor=e.value.borderColor.value))}var m=void 0;return m=h?a.a.makeVList({positionType:\"individualShift\",children:[{type:\"elem\",elem:u,shift:c},{type:\"elem\",elem:r,shift:0}]},t):a.a.makeVList({positionType:\"individualShift\",children:[{type:\"elem\",elem:r,shift:0},{type:\"elem\",elem:u,shift:c,wrapperClasses:/cancel/.test(n)?[\"svg-align\"]:[]}]},t),/cancel/.test(n)?a.a.makeSpan([\"mord\",\"cancel-lap\"],[m],t):a.a.makeSpan([\"mord\"],[m],t)},h=function(e,t){var r=new i.a.MathNode(\"menclose\",[u.b(e.value.body,t)]);switch(e.value.label){case\"\\\\cancel\":r.setAttribute(\"notation\",\"updiagonalstrike\");break;case\"\\\\bcancel\":r.setAttribute(\"notation\",\"downdiagonalstrike\");break;case\"\\\\sout\":r.setAttribute(\"notation\",\"horizontalstrike\");break;case\"\\\\fbox\":r.setAttribute(\"notation\",\"box\");break;case\"\\\\colorbox\":r.setAttribute(\"mathbackground\",e.value.backgroundColor.value);break;case\"\\\\fcolorbox\":r.setAttribute(\"mathbackground\",e.value.backgroundColor.value),r.setAttribute(\"notation\",\"box\");break;default:r.setAttribute(\"notation\",\"updiagonalstrike downdiagonalstrike\")}return r};Object(n.b)({type:\"enclose\",names:[\"\\\\colorbox\"],props:{numArgs:2,allowedInText:!0,greediness:3,argTypes:[\"color\",\"text\"]},handler:function(e,t,r){var n=t[0],a=t[1];return{type:\"enclose\",label:e.funcName,backgroundColor:n,body:a}},htmlBuilder:c,mathmlBuilder:h}),Object(n.b)({type:\"enclose\",names:[\"\\\\fcolorbox\"],props:{numArgs:3,allowedInText:!0,greediness:3,argTypes:[\"color\",\"color\",\"text\"]},handler:function(e,t,r){var n=t[0],a=t[1],i=t[2];return{type:\"enclose\",label:e.funcName,backgroundColor:a,borderColor:n,body:i}},htmlBuilder:c,mathmlBuilder:h}),Object(n.b)({type:\"enclose\",names:[\"\\\\cancel\",\"\\\\bcancel\",\"\\\\xcancel\",\"\\\\sout\",\"\\\\fbox\"],props:{numArgs:1},handler:function(e,t,r){var n=t[0];return{type:\"enclose\",label:e.funcName,body:n}},htmlBuilder:c,mathmlBuilder:h})},function(e,t,r){\"use strict\";var n=r(3),a=r(0),i=r(1),o=r(4),s=r(2);Object(n.b)({type:\"overline\",names:[\"\\\\overline\"],props:{numArgs:1},handler:function(e,t){return{type:\"overline\",body:t[0]}},htmlBuilder:function(e,t){var r=o.b(e.value.body,t.havingCrampedStyle()),n=a.a.makeLineSpan(\"overline-line\",t),i=a.a.makeVList({positionType:\"firstBaseline\",children:[{type:\"elem\",elem:r},{type:\"kern\",size:n.height},{type:\"elem\",elem:n}]},t);return a.a.makeSpan([\"mord\",\"overline\"],[i],t)},mathmlBuilder:function(e,t){var r=new i.a.MathNode(\"mo\",[new i.a.TextNode(\"\\u203e\")]);r.setAttribute(\"stretchy\",\"true\");var n=new i.a.MathNode(\"mover\",[s.b(e.value.body,t),r]);return n.setAttribute(\"accent\",\"true\"),n}})},function(e,t,r){\"use strict\";var n=r(3),a=r(0),i=r(1),o=r(4),s=r(2);Object(n.b)({type:\"underline\",names:[\"\\\\underline\"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){return{type:\"underline\",body:t[0]}},htmlBuilder:function(e,t){var r=o.b(e.value.body,t),n=a.a.makeLineSpan(\"underline-line\",t),i=a.a.makeVList({positionType:\"top\",positionData:r.height,children:[{type:\"elem\",elem:n},{type:\"kern\",size:5*n.height},{type:\"elem\",elem:r}]},t);return a.a.makeSpan([\"mord\",\"underline\"],[i],t)},mathmlBuilder:function(e,t){var r=new i.a.MathNode(\"mo\",[new i.a.TextNode(\"\\u203e\")]);r.setAttribute(\"stretchy\",\"true\");var n=new i.a.MathNode(\"munder\",[s.b(e.value.body,t),r]);return n.setAttribute(\"accentunder\",\"true\"),n}})},function(e,t,r){\"use strict\";var n=r(0),a=r(3),i=r(1),o=r(19);Object(a.b)({type:\"rule\",names:[\"\\\\rule\"],props:{numArgs:2,numOptionalArgs:1,argTypes:[\"size\",\"size\",\"size\"]},handler:function(e,t,r){var n=r[0],a=t[0],i=t[1];return{type:\"rule\",shift:n&&n.value,width:a.value,height:i.value}},htmlBuilder:function(e,t){var r=n.a.makeSpan([\"mord\",\"rule\"],[],t),a=0;e.value.shift&&(a=Object(o.a)(e.value.shift,t));var i=Object(o.a)(e.value.width,t),s=Object(o.a)(e.value.height,t);return r.style.borderRightWidth=i+\"em\",r.style.borderTopWidth=s+\"em\",r.style.bottom=a+\"em\",r.width=i,r.height=s+a,r.depth=-a,r.maxFontSize=1.125*s*t.sizeMultiplier,r},mathmlBuilder:function(e,t){return new i.a.MathNode(\"mrow\")}})},function(e,t,r){\"use strict\";var n=r(3),a=r(0),i=r(1),o=r(19),s=r(6);Object(n.b)({type:\"kern\",names:[\"\\\\kern\",\"\\\\mkern\",\"\\\\hskip\",\"\\\\mskip\"],props:{numArgs:1,argTypes:[\"size\"],allowedInText:!0},handler:function(e,t){var r=\"m\"===e.funcName[1],n=\"mu\"===t[0].value.unit;if(r){if(n||\"undefined\"!=typeof console&&console.warn(\"In LaTeX, \"+e.funcName+\" supports only mu units, not \"+t[0].value.unit+\" units\"),\"math\"!==e.parser.mode)throw new s.a(\"Can't use function '\"+e.funcName+\"' in text mode\")}else n&&\"undefined\"!=typeof console&&console.warn(\"In LaTeX, \"+e.funcName+\" does not support mu units\");return{type:\"kern\",dimension:t[0].value}},htmlBuilder:function(e,t){return a.a.makeGlue(e.value.dimension,t)},mathmlBuilder:function(e,t){var r=new i.a.MathNode(\"mspace\"),n=Object(o.a)(e.value.dimension,t);return r.setAttribute(\"width\",n+\"em\"),r}})},function(e,t,r){\"use strict\";var n=r(3),a=r(0),i=r(1),o=r(4),s=r(2);Object(n.b)({type:\"phantom\",names:[\"\\\\phantom\"],props:{numArgs:1},handler:function(e,t){var r=t[0];return{type:\"phantom\",value:Object(n.c)(r)}},htmlBuilder:function(e,t){var r=o.a(e.value.value,t.withPhantom(),!1);return new a.a.makeFragment(r)},mathmlBuilder:function(e,t){var r=s.a(e.value.value,t);return new i.a.MathNode(\"mphantom\",r)}}),Object(n.b)({type:\"hphantom\",names:[\"\\\\hphantom\"],props:{numArgs:1},handler:function(e,t){var r=t[0];return{type:\"hphantom\",value:Object(n.c)(r),body:r}},htmlBuilder:function(e,t){var r=a.a.makeSpan([],[o.b(e.value.body,t.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(var n=0;n<r.children.length;n++)r.children[n].height=0,r.children[n].depth=0;return r=a.a.makeVList({positionType:\"firstBaseline\",children:[{type:\"elem\",elem:r}]},t)},mathmlBuilder:function(e,t){var r=s.a(e.value.value,t),n=new i.a.MathNode(\"mphantom\",r);return n.setAttribute(\"height\",\"0px\"),n}}),Object(n.b)({type:\"vphantom\",names:[\"\\\\vphantom\"],props:{numArgs:1},handler:function(e,t){var r=t[0];return{type:\"vphantom\",value:Object(n.c)(r),body:r}},htmlBuilder:function(e,t){var r=a.a.makeSpan([\"inner\"],[o.b(e.value.body,t.withPhantom())]),n=a.a.makeSpan([\"fix\"],[]);return a.a.makeSpan([\"mord\",\"rlap\"],[r,n],t)},mathmlBuilder:function(e,t){var r=s.a(e.value.value,t),n=new i.a.MathNode(\"mphantom\",r);return n.setAttribute(\"width\",\"0px\"),n}})},function(e,t,r){\"use strict\";var n=r(3),a=r(0),i=r(1),o=r(9),s=r(4),l=r(2),u=function(e,t){var r=[];if(\"bmod\"===e.value.modType?t.style.isTight()?r.push(a.a.makeSpan([\"mspace\",\"thickspace\"],[],t)):r.push(a.a.makeSpan([\"mspace\",\"muspace\"],[],t)):t.style.size===o.a.DISPLAY.size?r.push(a.a.makeSpan([\"mspace\",\"quad\"],[],t)):\"mod\"===e.value.modType?r.push(a.a.makeSpan([\"mspace\",\"twelvemuspace\"],[],t)):r.push(a.a.makeSpan([\"mspace\",\"eightmuspace\"],[],t)),\"pod\"!==e.value.modType&&\"pmod\"!==e.value.modType||r.push(a.a.mathsym(\"(\",e.mode)),\"pod\"!==e.value.modType){var n=[a.a.mathsym(\"m\",e.mode),a.a.mathsym(\"o\",e.mode),a.a.mathsym(\"d\",e.mode)];\"bmod\"===e.value.modType?(r.push(a.a.makeSpan([\"mbin\"],n,t)),t.style.isTight()?r.push(a.a.makeSpan([\"mspace\",\"thickspace\"],[],t)):r.push(a.a.makeSpan([\"mspace\",\"muspace\"],[],t))):(Array.prototype.push.apply(r,n),r.push(a.a.makeSpan([\"mspace\",\"sixmuspace\"],[],t)))}return e.value.value&&Array.prototype.push.apply(r,s.a(e.value.value,t,!1)),\"pod\"!==e.value.modType&&\"pmod\"!==e.value.modType||r.push(a.a.mathsym(\")\",e.mode)),a.a.makeFragment(r)},c=function(e,t){var r=[];if(\"pod\"!==e.value.modType&&\"pmod\"!==e.value.modType||r.push(new i.a.MathNode(\"mo\",[l.e(\"(\",e.mode)])),\"pod\"!==e.value.modType&&r.push(new i.a.MathNode(\"mo\",[l.e(\"mod\",e.mode)])),e.value.value){var n=new i.a.MathNode(\"mspace\");n.setAttribute(\"width\",\"0.333333em\"),r.push(n),r=r.concat(l.a(e.value.value,t))}return\"pod\"!==e.value.modType&&\"pmod\"!==e.value.modType||r.push(new i.a.MathNode(\"mo\",[l.e(\")\",e.mode)])),new i.a.MathNode(\"mo\",r)};Object(n.b)({type:\"mod\",names:[\"\\\\bmod\"],props:{numArgs:0},handler:function(e,t){return{type:\"mod\",modType:\"bmod\",value:null}},htmlBuilder:u,mathmlBuilder:c}),Object(n.b)({type:\"mod\",names:[\"\\\\pod\",\"\\\\pmod\",\"\\\\mod\"],props:{numArgs:1},handler:function(e,t){var r=t[0];return{type:\"mod\",modType:e.funcName.substr(1),value:Object(n.c)(r)}},htmlBuilder:u,mathmlBuilder:c})},function(e,t,r){\"use strict\";var n=r(3),a=r(0),i=r(12),o=r(1),s=r(5),l=r(9),u=r(4),c=r(2),h=function(e,t){var r=void 0,n=void 0,o=!1;\"supsub\"===e.type&&(r=e.value.sup,n=e.value.sub,e=e.value.base,o=!0);var c=t.style,h=!1;c.size===l.a.DISPLAY.size&&e.value.symbol&&!s.a.contains([\"\\\\smallint\"],e.value.body)&&(h=!0);var p=void 0;if(e.value.symbol){var m=h?\"Size2-Regular\":\"Size1-Regular\";p=a.a.makeSymbol(e.value.body,m,\"math\",t,[\"mop\",\"op-symbol\",h?\"large-op\":\"small-op\"])}else if(e.value.value){var d=u.a(e.value.value,t,!0);1===d.length&&d[0]instanceof i.a.symbolNode?(p=d[0]).classes[0]=\"mop\":p=a.a.makeSpan([\"mop\"],d,t)}else{for(var f=[],v=1;v<e.value.body.length;v++)f.push(a.a.mathsym(e.value.body[v],e.mode));p=a.a.makeSpan([\"mop\"],f,t)}var g=0,y=0;if(p instanceof i.a.symbolNode&&(g=(p.height-p.depth)/2-t.fontMetrics().axisHeight,y=p.italic),o){p=a.a.makeSpan([],[p]);var b=void 0,x=void 0;if(r){var w=u.b(r,t.havingStyle(c.sup()),t);x={elem:w,kern:Math.max(t.fontMetrics().bigOpSpacing1,t.fontMetrics().bigOpSpacing3-w.depth)}}if(n){var k=u.b(n,t.havingStyle(c.sub()),t);b={elem:k,kern:Math.max(t.fontMetrics().bigOpSpacing2,t.fontMetrics().bigOpSpacing4-k.height)}}var M=void 0;if(x&&b){var S=t.fontMetrics().bigOpSpacing5+b.elem.height+b.elem.depth+b.kern+p.depth+g;M=a.a.makeVList({positionType:\"bottom\",positionData:S,children:[{type:\"kern\",size:t.fontMetrics().bigOpSpacing5},{type:\"elem\",elem:b.elem,marginLeft:-y+\"em\"},{type:\"kern\",size:b.kern},{type:\"elem\",elem:p},{type:\"kern\",size:x.kern},{type:\"elem\",elem:x.elem,marginLeft:y+\"em\"},{type:\"kern\",size:t.fontMetrics().bigOpSpacing5}]},t)}else if(b){var z=p.height-g;M=a.a.makeVList({positionType:\"top\",positionData:z,children:[{type:\"kern\",size:t.fontMetrics().bigOpSpacing5},{type:\"elem\",elem:b.elem,marginLeft:-y+\"em\"},{type:\"kern\",size:b.kern},{type:\"elem\",elem:p}]},t)}else{if(!x)return p;var O=p.depth+g;M=a.a.makeVList({positionType:\"bottom\",positionData:O,children:[{type:\"elem\",elem:p},{type:\"kern\",size:x.kern},{type:\"elem\",elem:x.elem,marginLeft:y+\"em\"},{type:\"kern\",size:t.fontMetrics().bigOpSpacing5}]},t)}return a.a.makeSpan([\"mop\",\"op-limits\"],[M],t)}return g&&(p.style.position=\"relative\",p.style.top=g+\"em\"),p},p=function(e,t){var r=void 0;if(e.value.symbol)r=new o.a.MathNode(\"mo\",[c.e(e.value.body,e.mode)]);else{if(!e.value.value){r=new o.a.MathNode(\"mi\",[new o.a.TextNode(e.value.body.slice(1))]);var n=new o.a.MathNode(\"mo\",[c.e(\"\\u2061\",\"text\")]);return new i.a.documentFragment([r,n])}r=new o.a.MathNode(\"mo\",c.a(e.value.value,t))}return r},m={\"\\u220f\":\"\\\\prod\",\"\\u2210\":\"\\\\coprod\",\"\\u2211\":\"\\\\sum\",\"\\u22c0\":\"\\\\bigwedge\",\"\\u22c1\":\"\\\\bigvee\",\"\\u22c2\":\"\\\\bigcap\",\"\\u22c3\":\"\\\\bigcap\",\"\\u2a00\":\"\\\\bigodot\",\"\\u2a01\":\"\\\\bigoplus\",\"\\u2a02\":\"\\\\bigotimes\",\"\\u2a04\":\"\\\\biguplus\",\"\\u2a06\":\"\\\\bigsqcup\"};Object(n.b)({type:\"op\",names:[\"\\\\coprod\",\"\\\\bigvee\",\"\\\\bigwedge\",\"\\\\biguplus\",\"\\\\bigcap\",\"\\\\bigcup\",\"\\\\intop\",\"\\\\prod\",\"\\\\sum\",\"\\\\bigotimes\",\"\\\\bigoplus\",\"\\\\bigodot\",\"\\\\bigsqcup\",\"\\\\smallint\",\"\\u220f\",\"\\u2210\",\"\\u2211\",\"\\u22c0\",\"\\u22c1\",\"\\u22c2\",\"\\u22c3\",\"\\u2a00\",\"\\u2a01\",\"\\u2a02\",\"\\u2a04\",\"\\u2a06\"],props:{numArgs:0},handler:function(e,t){var r=e.funcName;return 1===r.length&&(r=m[r]),{type:\"op\",limits:!0,symbol:!0,body:r}},htmlBuilder:h,mathmlBuilder:p}),Object(n.b)({type:\"op\",names:[\"\\\\mathop\"],props:{numArgs:1},handler:function(e,t){var r=t[0];return{type:\"op\",limits:!1,symbol:!1,value:Object(n.c)(r)}},htmlBuilder:h,mathmlBuilder:p})},function(e,t,r){\"use strict\";var n=r(18),a=r.n(n),i=r(3),o=r(0),s=r(1),l=r(12),u=r(4),c=r(2);Object(i.b)({type:\"operatorname\",names:[\"\\\\operatorname\"],props:{numArgs:1},handler:function(e,t){var r=t[0];return{type:\"operatorname\",value:Object(i.c)(r)}},htmlBuilder:function(e,t){var r=[];if(e.value.value.length>0){var n=\"\",i=\"\",s=!0,c=!1,h=void 0;try{for(var p,m=a()(e.value.value);!(s=(p=m.next()).done);s=!0){var d=p.value;-1!==\"*-/:\".indexOf(d.value)&&(d.type=\"textord\")}}catch(e){c=!0,h=e}finally{try{!s&&m.return&&m.return()}finally{if(c)throw h}}var f=u.a(e.value.value,t.withFontFamily(\"mathrm\"),!0),v=!0,g=!1,y=void 0;try{for(var b,x=a()(f);!(v=(b=x.next()).done);v=!0){var w=b.value;w instanceof l.a.symbolNode?(n=(n=(n=w.value).replace(/\\u2212/,\"-\")).replace(/\\u2217/,\"*\"),i=/[\\u0391-\\u03D7]/.test(n)?\"math\":\"text\",r.push(o.a.mathsym(n,i))):r.push(w)}}catch(e){g=!0,y=e}finally{try{!v&&x.return&&x.return()}finally{if(g)throw y}}}return o.a.makeSpan([\"mop\"],r,t)},mathmlBuilder:function(e,t){var r=[];if(e.value.value.length>0){var n=c.a(e.value.value,t.withFontFamily(\"mathrm\")).map(function(e){return e.toText()}).join(\"\");n=(n=n.replace(/\\u2212/g,\"-\")).replace(/\\u2217/g,\"*\"),r=[new s.a.TextNode(n)]}var a=new s.a.MathNode(\"mi\",r);a.setAttribute(\"mathvariant\",\"normal\");var i=new s.a.MathNode(\"mo\",[c.e(\"\\u2061\",\"text\")]);return new l.a.documentFragment([a,i])}})},function(e,t,r){\"use strict\";var n=r(3),a=r(0),i=r(44),o=r(1),s=r(9),l=r(4),u=r(2);Object(n.b)({type:\"genfrac\",names:[\"\\\\dfrac\",\"\\\\frac\",\"\\\\tfrac\",\"\\\\dbinom\",\"\\\\binom\",\"\\\\tbinom\",\"\\\\\\\\atopfrac\"],props:{numArgs:2,greediness:2},handler:function(e,t){var r=t[0],n=t[1],a=void 0,i=null,o=null,s=\"auto\";switch(e.funcName){case\"\\\\dfrac\":case\"\\\\frac\":case\"\\\\tfrac\":a=!0;break;case\"\\\\\\\\atopfrac\":a=!1;break;case\"\\\\dbinom\":case\"\\\\binom\":case\"\\\\tbinom\":a=!1,i=\"(\",o=\")\";break;default:throw new Error(\"Unrecognized genfrac command\")}switch(e.funcName){case\"\\\\dfrac\":case\"\\\\dbinom\":s=\"display\";break;case\"\\\\tfrac\":case\"\\\\tbinom\":s=\"text\"}return{type:\"genfrac\",numer:r,denom:n,hasBarLine:a,leftDelim:i,rightDelim:o,size:s}},htmlBuilder:function(e,t){var r=t.style;\"display\"===e.value.size?r=s.a.DISPLAY:\"text\"===e.value.size&&(r=s.a.TEXT);var n=r.fracNum(),o=r.fracDen(),u=void 0;u=t.havingStyle(n);var c=l.b(e.value.numer,u,t);u=t.havingStyle(o);var h=l.b(e.value.denom,u,t),p=void 0,m=void 0,d=void 0;e.value.hasBarLine?(m=(p=a.a.makeLineSpan(\"frac-line\",t)).height,d=p.height):(p=null,m=0,d=t.fontMetrics().defaultRuleThickness);var f=void 0,v=void 0,g=void 0;r.size===s.a.DISPLAY.size?(f=t.fontMetrics().num1,v=m>0?3*d:7*d,g=t.fontMetrics().denom1):(m>0?(f=t.fontMetrics().num2,v=d):(f=t.fontMetrics().num3,v=3*d),g=t.fontMetrics().denom2);var y=void 0;if(p){var b=t.fontMetrics().axisHeight;f-c.depth-(b+.5*m)<v&&(f+=v-(f-c.depth-(b+.5*m))),b-.5*m-(h.height-g)<v&&(g+=v-(b-.5*m-(h.height-g)));var x=-(b-.5*m);y=a.a.makeVList({positionType:\"individualShift\",children:[{type:\"elem\",elem:h,shift:g},{type:\"elem\",elem:p,shift:x+2*m},{type:\"elem\",elem:c,shift:-f}]},t)}else{var w=f-c.depth-(h.height-g);w<v&&(f+=.5*(v-w),g+=.5*(v-w)),y=a.a.makeVList({positionType:\"individualShift\",children:[{type:\"elem\",elem:h,shift:g},{type:\"elem\",elem:c,shift:-f}]},t)}u=t.havingStyle(r),y.height*=u.sizeMultiplier/t.sizeMultiplier,y.depth*=u.sizeMultiplier/t.sizeMultiplier;var k=void 0;k=r.size===s.a.DISPLAY.size?t.fontMetrics().delim1:t.fontMetrics().delim2;var M=void 0,S=void 0;return M=null==e.value.leftDelim?l.e(t,[\"mopen\"]):i.a.customSizedDelim(e.value.leftDelim,k,!0,t.havingStyle(r),e.mode,[\"mopen\"]),S=null==e.value.rightDelim?l.e(t,[\"mclose\"]):i.a.customSizedDelim(e.value.rightDelim,k,!0,t.havingStyle(r),e.mode,[\"mclose\"]),a.a.makeSpan([\"mord\"].concat(u.sizingClasses(t)),[M,a.a.makeSpan([\"mfrac\"],[y]),S],t)},mathmlBuilder:function(e,t){var r=new o.a.MathNode(\"mfrac\",[u.b(e.value.numer,t),u.b(e.value.denom,t)]);if(e.value.hasBarLine||r.setAttribute(\"linethickness\",\"0px\"),null!=e.value.leftDelim||null!=e.value.rightDelim){var n=[];if(null!=e.value.leftDelim){var a=new o.a.MathNode(\"mo\",[new o.a.TextNode(e.value.leftDelim)]);a.setAttribute(\"fence\",\"true\"),n.push(a)}if(n.push(r),null!=e.value.rightDelim){var i=new o.a.MathNode(\"mo\",[new o.a.TextNode(e.value.rightDelim)]);i.setAttribute(\"fence\",\"true\"),n.push(i)}return new o.a.MathNode(\"mrow\",n)}return r}})},function(e,t,r){\"use strict\";var n=r(3),a=r(0),i=r(1),o=r(4),s=r(2);Object(n.b)({type:\"lap\",names:[\"\\\\mathllap\",\"\\\\mathrlap\",\"\\\\mathclap\"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){var r=t[0];return{type:\"lap\",alignment:e.funcName.slice(5),body:r}},htmlBuilder:function(e,t){var r=void 0;\"clap\"===e.value.alignment?(r=a.a.makeSpan([],[o.b(e.value.body,t)]),r=a.a.makeSpan([\"inner\"],[r],t)):r=a.a.makeSpan([\"inner\"],[o.b(e.value.body,t)]);var n=a.a.makeSpan([\"fix\"],[]);return a.a.makeSpan([\"mord\",e.value.alignment],[r,n],t)},mathmlBuilder:function(e,t){var r=new i.a.MathNode(\"mpadded\",[s.b(e.value.body,t)]);if(\"rlap\"!==e.value.alignment){var n=\"llap\"===e.value.alignment?\"-1\":\"-0.5\";r.setAttribute(\"lspace\",n+\"width\")}return r.setAttribute(\"width\",\"0px\"),r}})},function(e,t,r){\"use strict\";var n=r(3),a=r(0),i=r(1),o=r(4),s=r(2);Object(n.b)({type:\"smash\",names:[\"\\\\smash\"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:function(e,t,r){var n=!1,a=!1,i=r[0];if(i)for(var o=\"\",s=0;s<i.value.length;++s)if(\"t\"===(o=i.value[s].value))n=!0;else{if(\"b\"!==o){n=!1,a=!1;break}a=!0}else n=!0,a=!0;return{type:\"smash\",body:t[0],smashHeight:n,smashDepth:a}},htmlBuilder:function(e,t){var r=a.a.makeSpan([\"mord\"],[o.b(e.value.body,t)]);if(!e.value.smashHeight&&!e.value.smashDepth)return r;if(e.value.smashHeight&&(r.height=0,r.children))for(var n=0;n<r.children.length;n++)r.children[n].height=0;if(e.value.smashDepth&&(r.depth=0,r.children))for(var i=0;i<r.children.length;i++)r.children[i].depth=0;return a.a.makeVList({positionType:\"firstBaseline\",children:[{type:\"elem\",elem:r}]},t)},mathmlBuilder:function(e,t){var r=new i.a.MathNode(\"mpadded\",[s.b(e.value.body,t)]);return e.value.smashHeight&&r.setAttribute(\"height\",\"0px\"),e.value.smashDepth&&r.setAttribute(\"depth\",\"0px\"),r}})},function(e,t,r){\"use strict\";var n=r(0),a=r(3),i=r(44),o=r(1),s=r(6),l=r(5),u=r(4),c=r(2),h={\"\\\\bigl\":{mclass:\"mopen\",size:1},\"\\\\Bigl\":{mclass:\"mopen\",size:2},\"\\\\biggl\":{mclass:\"mopen\",size:3},\"\\\\Biggl\":{mclass:\"mopen\",size:4},\"\\\\bigr\":{mclass:\"mclose\",size:1},\"\\\\Bigr\":{mclass:\"mclose\",size:2},\"\\\\biggr\":{mclass:\"mclose\",size:3},\"\\\\Biggr\":{mclass:\"mclose\",size:4},\"\\\\bigm\":{mclass:\"mrel\",size:1},\"\\\\Bigm\":{mclass:\"mrel\",size:2},\"\\\\biggm\":{mclass:\"mrel\",size:3},\"\\\\Biggm\":{mclass:\"mrel\",size:4},\"\\\\big\":{mclass:\"mord\",size:1},\"\\\\Big\":{mclass:\"mord\",size:2},\"\\\\bigg\":{mclass:\"mord\",size:3},\"\\\\Bigg\":{mclass:\"mord\",size:4}},p=[\"(\",\")\",\"[\",\"\\\\lbrack\",\"]\",\"\\\\rbrack\",\"\\\\{\",\"\\\\lbrace\",\"\\\\}\",\"\\\\rbrace\",\"\\\\lfloor\",\"\\\\rfloor\",\"\\\\lceil\",\"\\\\rceil\",\"<\",\">\",\"\\\\langle\",\"\\u27e8\",\"\\\\rangle\",\"\\u27e9\",\"\\\\lt\",\"\\\\gt\",\"\\\\lvert\",\"\\\\rvert\",\"\\\\lVert\",\"\\\\rVert\",\"\\\\lgroup\",\"\\\\rgroup\",\"\\\\lmoustache\",\"\\\\rmoustache\",\"/\",\"\\\\backslash\",\"|\",\"\\\\vert\",\"\\\\|\",\"\\\\Vert\",\"\\\\uparrow\",\"\\\\Uparrow\",\"\\\\downarrow\",\"\\\\Downarrow\",\"\\\\updownarrow\",\"\\\\Updownarrow\",\".\"];function m(e,t){if(l.a.contains(p,e.value))return e;throw new s.a(\"Invalid delimiter: '\"+e.value+\"' after '\"+t.funcName+\"'\",e)}Object(a.b)({type:\"delimsizing\",names:[\"\\\\bigl\",\"\\\\Bigl\",\"\\\\biggl\",\"\\\\Biggl\",\"\\\\bigr\",\"\\\\Bigr\",\"\\\\biggr\",\"\\\\Biggr\",\"\\\\bigm\",\"\\\\Bigm\",\"\\\\biggm\",\"\\\\Biggm\",\"\\\\big\",\"\\\\Big\",\"\\\\bigg\",\"\\\\Bigg\"],props:{numArgs:1},handler:function(e,t){var r=m(t[0],e);return{type:\"delimsizing\",size:h[e.funcName].size,mclass:h[e.funcName].mclass,value:r.value}},htmlBuilder:function(e,t){var r=e.value.value;return\".\"===r?n.a.makeSpan([e.value.mclass]):i.a.sizedDelim(r,e.value.size,t,e.mode,[e.value.mclass])},mathmlBuilder:function(e){var t=[];\".\"!==e.value.value&&t.push(c.e(e.value.value,e.mode));var r=new o.a.MathNode(\"mo\",t);return\"mopen\"===e.value.mclass||\"mclose\"===e.value.mclass?r.setAttribute(\"fence\",\"true\"):r.setAttribute(\"fence\",\"false\"),r}}),Object(a.b)({type:\"leftright\",names:[\"\\\\left\",\"\\\\right\"],props:{numArgs:1},handler:function(e,t){var r=m(t[0],e);if(\"\\\\left\"===e.funcName){var n=e.parser;++n.leftrightDepth;var a=n.parseExpression(!1);--n.leftrightDepth,n.expect(\"\\\\right\",!1);var i=n.parseFunction();if(!i)throw new s.a(\"failed to parse function after \\\\right\");return{type:\"leftright\",body:a,left:r.value,right:i.value.value}}return{type:\"leftright\",value:r.value}},htmlBuilder:function(e,t){for(var r=u.a(e.value.body,t,!0,[null,\"mclose\"]),a=0,o=0,s=!1,l=0;l<r.length;l++)r[l].isMiddle?s=!0:(a=Math.max(r[l].height,a),o=Math.max(r[l].depth,o));a*=t.sizeMultiplier,o*=t.sizeMultiplier;var c=void 0;if(c=\".\"===e.value.left?u.e(t,[\"mopen\"]):i.a.leftRightDelim(e.value.left,a,o,t,e.mode,[\"mopen\"]),r.unshift(c),s)for(var h=1;h<r.length;h++){var p=r[h];p.isMiddle&&(r[h]=i.a.leftRightDelim(p.isMiddle.value,a,o,p.isMiddle.options,e.mode,[]))}var m=void 0;return m=\".\"===e.value.right?u.e(t,[\"mclose\"]):i.a.leftRightDelim(e.value.right,a,o,t,e.mode,[\"mclose\"]),r.push(m),n.a.makeSpan([\"minner\"],r,t)},mathmlBuilder:function(e,t){var r=c.a(e.value.body,t);if(\".\"!==e.value.left){var n=new o.a.MathNode(\"mo\",[c.e(e.value.left,e.mode)]);n.setAttribute(\"fence\",\"true\"),r.unshift(n)}if(\".\"!==e.value.right){var a=new o.a.MathNode(\"mo\",[c.e(e.value.right,e.mode)]);a.setAttribute(\"fence\",\"true\"),r.push(a)}return new o.a.MathNode(\"mrow\",r)}}),Object(a.b)({type:\"middle\",names:[\"\\\\middle\"],props:{numArgs:1},handler:function(e,t){var r=m(t[0],e);if(!e.parser.leftrightDepth)throw new s.a(\"\\\\middle without preceding \\\\left\",r);return{type:\"middle\",value:r.value}},htmlBuilder:function(e,t){var r=void 0;return\".\"===e.value.value?r=u.e(t,[]):(r=i.a.sizedDelim(e.value.value,1,t,e.mode,[])).isMiddle={value:e.value.value,options:t},r},mathmlBuilder:function(e,t){var r=new o.a.MathNode(\"mo\",[c.e(e.value.middle,e.mode)]);return r.setAttribute(\"fence\",\"true\"),r}})},function(e,t,r){\"use strict\";var n=r(3),a=r(1),i=r(9),o=r(60),s=r(2),l={display:i.a.DISPLAY,text:i.a.TEXT,script:i.a.SCRIPT,scriptscript:i.a.SCRIPTSCRIPT};Object(n.b)({type:\"styling\",names:[\"\\\\displaystyle\",\"\\\\textstyle\",\"\\\\scriptstyle\",\"\\\\scriptscriptstyle\"],props:{numArgs:0,allowedInText:!0},handler:function(e,t){var r=e.breakOnTokenText,n=e.funcName,a=e.parser;a.consumeSpaces();var i=a.parseExpression(!0,r);return{type:\"styling\",style:n.slice(1,n.length-5),value:i}},htmlBuilder:function(e,t){var r=l[e.value.style],n=t.havingStyle(r);return Object(o.a)(e.value.value,n,t)},mathmlBuilder:function(e,t){var r={display:i.a.DISPLAY,text:i.a.TEXT,script:i.a.SCRIPT,scriptscript:i.a.SCRIPTSCRIPT}[e.value.style],n=t.havingStyle(r),o=s.a(e.value.value,n),l=new a.a.MathNode(\"mstyle\",o),u={display:[\"0\",\"true\"],text:[\"0\",\"false\"],script:[\"1\",\"false\"],scriptscript:[\"2\",\"false\"]}[e.value.style];return l.setAttribute(\"scriptlevel\",u[0]),l.setAttribute(\"displaystyle\",u[1]),l}})},function(e,t,r){\"use strict\";var n=r(134),a=r.n(n),i=r(3),o=r(14),s=r(4),l=r(2),u=function(e,t){var r=e.value.font;return s.b(e.value.body,t.withFontFamily(r))},c=function(e,t){var r=e.value.font;return l.b(e.value.body,t.withFontFamily(r))},h={\"\\\\Bbb\":\"\\\\mathbb\",\"\\\\bold\":\"\\\\mathbf\",\"\\\\frak\":\"\\\\mathfrak\",\"\\\\bm\":\"\\\\boldsymbol\"};Object(i.b)({type:\"font\",names:[\"\\\\mathrm\",\"\\\\mathit\",\"\\\\mathbf\",\"\\\\boldsymbol\",\"\\\\mathbb\",\"\\\\mathcal\",\"\\\\mathfrak\",\"\\\\mathscr\",\"\\\\mathsf\",\"\\\\mathtt\",\"\\\\Bbb\",\"\\\\bold\",\"\\\\frak\",\"\\\\bm\"],props:{numArgs:1,greediness:2},handler:function(e,t){var r=t[0],n=e.funcName;return n in h&&(n=h[n]),{type:\"font\",font:n.slice(1),body:r}},htmlBuilder:u,mathmlBuilder:c});var p={\"\\\\rm\":\"mathrm\",\"\\\\sf\":\"mathsf\",\"\\\\tt\":\"mathtt\",\"\\\\bf\":\"mathbf\",\"\\\\it\":\"mathit\"};Object(i.b)({type:\"font\",names:a()(p),props:{numArgs:0,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=e.breakOnTokenText;r.consumeSpaces();var i=r.parseExpression(!0,a);return{type:\"font\",font:p[n],body:new o.a(\"ordgroup\",i,r.mode)}},htmlBuilder:u,mathmlBuilder:c})},function(e,t,r){e.exports={default:r(135),__esModule:!0}},function(e,t,r){r(136),e.exports=r(8).Object.keys},function(e,t,r){var n=r(29),a=r(39);r(46)(\"keys\",function(){return function(e){return a(n(e))}})},function(e,t,r){\"use strict\";var n=r(3),a=r(0),i=r(1),o=r(5),s=r(13),l=r(4),u=r(2),c=function(e,t){var r=e.value.base,n=void 0;if(\"supsub\"===e.type){var i=e;r=(e=i.value.base).value.base,i.value.base=r,n=l.b(i,t)}var u=l.b(r,t.havingCrampedStyle()),c=0;if(e.value.isShifty&&o.a.isCharacterBox(r)){var h=o.a.getBaseElem(r);c=l.b(h,t.havingCrampedStyle()).skew}var p=Math.min(u.height,t.fontMetrics().xHeight),m=void 0;if(e.value.isStretchy)m=s.a.svgSpan(e,t),m=a.a.makeVList({positionType:\"firstBaseline\",children:[{type:\"elem\",elem:u},{type:\"elem\",elem:m,wrapperClasses:[\"svg-align\"],wrapperStyle:c>0?{width:\"calc(100% - \"+2*c+\"em)\",marginLeft:2*c+\"em\"}:void 0}]},t);else{var d=void 0,f=void 0;\"\\\\vec\"===e.value.label?(d=a.a.staticSvg(\"vec\",t),f=a.a.svgData.vec[1]):((d=a.a.makeSymbol(e.value.label,\"Main-Regular\",e.mode,t)).italic=0,f=d.width);var v=-f/2;v+=c,(m=a.a.makeSpan([\"accent-body\"],[d])).style.left=v+\"em\",m=a.a.makeVList({positionType:\"firstBaseline\",children:[{type:\"elem\",elem:u},{type:\"kern\",size:-p},{type:\"elem\",elem:m}]},t)}var g=a.a.makeSpan([\"mord\",\"accent\"],[m],t);return n?(n.children[0]=g,n.height=Math.max(g.height,n.height),n.classes[0]=\"mord\",n):g},h=function(e,t){var r=void 0;r=e.value.isStretchy?s.a.mathMLnode(e.value.label):new i.a.MathNode(\"mo\",[u.e(e.value.label,e.mode)]);var n=new i.a.MathNode(\"mover\",[u.b(e.value.base,t),r]);return n.setAttribute(\"accent\",\"true\"),n},p=new RegExp([\"\\\\acute\",\"\\\\grave\",\"\\\\ddot\",\"\\\\tilde\",\"\\\\bar\",\"\\\\breve\",\"\\\\check\",\"\\\\hat\",\"\\\\vec\",\"\\\\dot\",\"\\\\mathring\"].map(function(e){return\"\\\\\"+e}).join(\"|\"));Object(n.b)({type:\"accent\",names:[\"\\\\acute\",\"\\\\grave\",\"\\\\ddot\",\"\\\\tilde\",\"\\\\bar\",\"\\\\breve\",\"\\\\check\",\"\\\\hat\",\"\\\\vec\",\"\\\\dot\",\"\\\\mathring\",\"\\\\widehat\",\"\\\\widetilde\",\"\\\\overrightarrow\",\"\\\\overleftarrow\",\"\\\\Overrightarrow\",\"\\\\overleftrightarrow\",\"\\\\overgroup\",\"\\\\overlinesegment\",\"\\\\overleftharpoon\",\"\\\\overrightharpoon\"],props:{numArgs:1},handler:function(e,t){var r=t[0],n=!p.test(e.funcName),a=!n||\"\\\\widehat\"===e.funcName||\"\\\\widetilde\"===e.funcName;return{type:\"accent\",label:e.funcName,isStretchy:n,isShifty:a,base:r}},htmlBuilder:c,mathmlBuilder:h}),Object(n.b)({type:\"accent\",names:[\"\\\\'\",\"\\\\`\",\"\\\\^\",\"\\\\~\",\"\\\\=\",\"\\\\u\",\"\\\\.\",'\\\\\"',\"\\\\r\",\"\\\\H\",\"\\\\v\"],props:{numArgs:1,allowedInText:!0,allowedInMath:!1},handler:function(e,t){var r=t[0];return{type:\"accent\",label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:c,mathmlBuilder:h})},function(e,t,r){\"use strict\";var n=r(3),a=r(0),i=r(1),o=r(13),s=r(4),l=r(2);Object(n.b)({type:\"accentUnder\",names:[\"\\\\underleftarrow\",\"\\\\underrightarrow\",\"\\\\underleftrightarrow\",\"\\\\undergroup\",\"\\\\underlinesegment\",\"\\\\utilde\"],props:{numArgs:1},handler:function(e,t){var r=t[0];return{type:\"accentUnder\",label:e.funcName,base:r}},htmlBuilder:function(e,t){var r=s.b(e.value.base,t),n=o.a.svgSpan(e,t),i=\"\\\\utilde\"===e.value.label?.12:0,l=a.a.makeVList({positionType:\"bottom\",positionData:n.height+i,children:[{type:\"elem\",elem:n,wrapperClasses:[\"svg-align\"]},{type:\"kern\",size:i},{type:\"elem\",elem:r}]},t);return a.a.makeSpan([\"mord\",\"accentunder\"],[l],t)},mathmlBuilder:function(e,t){var r=o.a.mathMLnode(e.value.label),n=new i.a.MathNode(\"munder\",[l.b(e.value.body,t),r]);return n.setAttribute(\"accentunder\",\"true\"),n}})},function(e,t,r){\"use strict\";var n=r(3),a=r(0),i=r(1),o=r(6);Object(n.b)({type:\"verb\",names:[\"\\\\verb\"],props:{numArgs:0,allowedInText:!0},handler:function(e,t,r){throw new o.a(\"\\\\verb ended by end of line instead of matching delimiter\")},htmlBuilder:function(e,t){for(var r=a.a.makeVerb(e,t),n=[],i=t.havingStyle(t.style.text()),o=0;o<r.length;o++)if(\"\\xa0\"===r[o]){var s=a.a.makeSpan([\"mord\",\"rule\"],[],i);s.style.marginLeft=\"0.525em\",n.push(s)}else n.push(a.a.makeSymbol(r[o],\"Typewriter-Regular\",e.mode,i,[\"mathtt\"]));return a.a.tryCombineChars(n),a.a.makeSpan([\"mord\",\"text\"].concat(i.sizingClasses(t)),n,i)},mathmlBuilder:function(e,t){var r=new i.a.TextNode(a.a.makeVerb(e,t)),n=new i.a.MathNode(\"mtext\",[r]);return n.setAttribute(\"mathvariant\",a.a.fontMap.mathtt.variant),n}})},function(e,t,r){\"use strict\";var n=r(3),a=r(0),i=r(1),o=r(4),s=r(2);Object(n.b)({type:\"href\",names:[\"\\\\href\"],props:{numArgs:2,argTypes:[\"url\",\"original\"]},handler:function(e,t){var r=t[1];return{type:\"href\",href:t[0].value,body:Object(n.c)(r)}},htmlBuilder:function(e,t){var r=o.a(e.value.body,t,!1),n=e.value.href;return new a.a.makeAnchor(n,[],r,t)},mathmlBuilder:function(e,t){var r=s.a(e.value.body,t),n=new i.a.MathNode(\"mrow\",r);return n.setAttribute(\"href\",e.value.href),n}})},function(e,t,r){\"use strict\";var n=r(3),a=r(0),i=r(1),o=r(9),s=r(4),l=r(2),u=function(e,t){var r=t.style;return r.size===o.a.DISPLAY.size?e.value.display:r.size===o.a.TEXT.size?e.value.text:r.size===o.a.SCRIPT.size?e.value.script:r.size===o.a.SCRIPTSCRIPT.size?e.value.scriptscript:e.value.text};Object(n.b)({type:\"mathchoice\",names:[\"\\\\mathchoice\"],props:{numArgs:4},handler:function(e,t){return{type:\"mathchoice\",display:Object(n.c)(t[0]),text:Object(n.c)(t[1]),script:Object(n.c)(t[2]),scriptscript:Object(n.c)(t[3])}},htmlBuilder:function(e,t){var r=u(e,t),n=s.a(r,t,!1);return new a.a.makeFragment(n)},mathmlBuilder:function(e,t){var r=u(e,t),n=l.a(r,t,!1);return new i.a.MathNode(\"mrow\",n)}})},function(e,t,r){\"use strict\";var n=r(61),a=(r(143),n.a);t.a=a},function(e,t,r){\"use strict\";var n=r(0),a=r(61),i=r(1),o=r(6),s=r(14),l=r(19),u=r(5),c=r(13),h=r(4),p=r(2);function m(e,t,r){for(var n=[],a=[n],i=[];;){var l=e.parseExpression(!1,void 0);l=new s.a(\"ordgroup\",l,e.mode),r&&(l=new s.a(\"styling\",{style:r,value:[l]},e.mode)),n.push(l);var u=e.nextToken.text;if(\"&\"===u)e.consume();else{if(\"\\\\end\"===u){var c=a[a.length-1];a.length>1&&1===c.length&&0===c[0].value.value[0].value.length&&a.pop();break}if(\"\\\\\\\\\"!==u&&\"\\\\cr\"!==u)throw new o.a(\"Expected & or \\\\\\\\ or \\\\end\",e.nextToken);var h=e.parseFunction();if(!h)throw new o.a(\"Failed to parse function after \"+u);i.push(h.value.size),n=[],a.push(n)}}return t.body=a,t.rowGaps=i,new s.a(t.type,t,e.mode)}function d(e){return\"d\"===e.substr(0,1)?\"display\":\"text\"}var f=function(e,t){var r=void 0,a=void 0,i=e.value.body.length,s=0,p=new Array(i),m=1/t.fontMetrics().ptPerEm,d=5*m,f=12*m,v=3*m,g=u.a.deflt(e.value.arraystretch,1)*f,y=.7*g,b=.3*g,x=0;for(r=0;r<e.value.body.length;++r){var w=e.value.body[r],k=y,M=b;s<w.length&&(s=w.length);var S=new Array(w.length);for(a=0;a<w.length;++a){var z=h.b(w[a],t);M<z.depth&&(M=z.depth),k<z.height&&(k=z.height),S[a]=z}var O=0;e.value.rowGaps[r]&&(O=Object(l.a)(e.value.rowGaps[r].value,t))>0&&(M<(O+=b)&&(M=O),O=0),e.value.addJot&&(M+=v),S.height=k,S.depth=M,x+=k,S.pos=x,x+=M+O,p[r]=S}var T=x/2+t.fontMetrics().axisHeight,A=e.value.cols||[],N=[],B=void 0,q=void 0;for(a=0,q=0;a<s||q<A.length;++a,++q){for(var C=A[q]||{},E=!0;\"separator\"===C.type;){if(E||((B=n.a.makeSpan([\"arraycolsep\"],[])).style.width=t.fontMetrics().doubleRuleSep+\"em\",N.push(B)),\"|\"!==C.separator)throw new o.a(\"Invalid separator type: \"+C.separator);var j=c.a.ruleSpan(\"vertical-separator\",.05,t);j.style.height=x+\"em\",j.style.verticalAlign=-(x-T)+\"em\",N.push(j),C=A[++q]||{},E=!1}if(!(a>=s)){var R=void 0;(a>0||e.value.hskipBeforeAndAfter)&&0!==(R=u.a.deflt(C.pregap,d))&&((B=n.a.makeSpan([\"arraycolsep\"],[])).style.width=R+\"em\",N.push(B));var H=[];for(r=0;r<i;++r){var I=p[r],D=I[a];if(D){var L=I.pos-T;D.depth=I.depth,D.height=I.height,H.push({type:\"elem\",elem:D,shift:L})}}H=n.a.makeVList({positionType:\"individualShift\",children:H},t),H=n.a.makeSpan([\"col-align-\"+(C.align||\"c\")],[H]),N.push(H),(a<s-1||e.value.hskipBeforeAndAfter)&&0!==(R=u.a.deflt(C.postgap,d))&&((B=n.a.makeSpan([\"arraycolsep\"],[])).style.width=R+\"em\",N.push(B))}}return p=n.a.makeSpan([\"mtable\"],N),n.a.makeSpan([\"mord\"],[p],t)},v=function(e,t){return new i.a.MathNode(\"mtable\",e.value.body.map(function(e){return new i.a.MathNode(\"mtr\",e.map(function(e){return new i.a.MathNode(\"mtd\",[p.b(e,t)])}))}))},g=function(e,t){var r={type:\"array\",cols:[],addJot:!0};r=m(e.parser,r,\"display\");var n=void 0,a=0,i=new s.a(\"ordgroup\",[],e.mode);if(t[0]&&t[0].value){for(var l=\"\",u=0;u<t[0].value.length;u++)l+=t[0].value[u].value;n=Number(l),a=2*n}var c=!a;r.value.body.forEach(function(e){for(var t=1;t<e.length;t+=2){e[t].value.value[0].value.unshift(i)}if(c)a<e.length&&(a=e.length);else{var r=e.length/2;if(n<r)throw new o.a(\"Too many math in a row: expected \"+n+\", but got \"+r,e)}});for(var h=0;h<a;++h){var p=\"r\",d=0;h%2==1?p=\"l\":h>0&&c&&(d=1),r.value.cols[h]={type:\"align\",align:p,pregap:d,postgap:0}}return r};Object(a.b)({type:\"array\",names:[\"array\",\"darray\"],props:{numArgs:1},handler:function(e,t){var r=t[0],n={type:\"array\",cols:(r=r.value.map?r.value:[r]).map(function(e){var t=e.value;if(-1!==\"lcr\".indexOf(t))return{type:\"align\",align:t};if(\"|\"===t)return{type:\"separator\",separator:\"|\"};throw new o.a(\"Unknown column alignment: \"+e.value,e)}),hskipBeforeAndAfter:!0};return n=m(e.parser,n,d(e.envName))},htmlBuilder:f,mathmlBuilder:v}),Object(a.b)({type:\"array\",names:[\"matrix\",\"pmatrix\",\"bmatrix\",\"Bmatrix\",\"vmatrix\",\"Vmatrix\"],props:{numArgs:0},handler:function(e){var t={matrix:null,pmatrix:[\"(\",\")\"],bmatrix:[\"[\",\"]\"],Bmatrix:[\"\\\\{\",\"\\\\}\"],vmatrix:[\"|\",\"|\"],Vmatrix:[\"\\\\Vert\",\"\\\\Vert\"]}[e.envName],r={type:\"array\",hskipBeforeAndAfter:!1};return r=m(e.parser,r,d(e.envName)),t&&(r=new s.a(\"leftright\",{body:[r],left:t[0],right:t[1]},e.mode)),r},htmlBuilder:f,mathmlBuilder:v}),Object(a.b)({type:\"array\",names:[\"cases\",\"dcases\"],props:{numArgs:0},handler:function(e){var t={type:\"array\",arraystretch:1.2,cols:[{type:\"align\",align:\"l\",pregap:0,postgap:1},{type:\"align\",align:\"l\",pregap:0,postgap:0}]};return t=m(e.parser,t,d(e.envName)),t=new s.a(\"leftright\",{body:[t],left:\"\\\\{\",right:\".\"},e.mode)},htmlBuilder:f,mathmlBuilder:v}),Object(a.b)({type:\"array\",names:[\"aligned\"],props:{numArgs:0},handler:g,htmlBuilder:f,mathmlBuilder:v}),Object(a.b)({type:\"array\",names:[\"gathered\"],props:{numArgs:0},handler:function(e){var t={type:\"array\",cols:[{type:\"align\",align:\"c\"}],addJot:!0};return t=m(e.parser,t,\"display\")},htmlBuilder:f,mathmlBuilder:v}),Object(a.b)({type:\"array\",names:[\"alignedat\"],props:{numArgs:1},handler:g,htmlBuilder:f,mathmlBuilder:v})},function(e,t,r){\"use strict\";var n=r(35),a=r.n(n),i=r(7),o=r.n(i),s=r(10),l=r.n(s),u=r(62),c=r(27),h=r(146),p=r(6),m=r(147),d=r.n(m),f=function(){function e(t,r,n){o()(this,e),this.lexer=new u.c(t),this.macros=d()({},h.a,r),this.mode=n,this.stack=[]}return l()(e,[{key:\"switchMode\",value:function(e){this.mode=e}},{key:\"future\",value:function(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}},{key:\"popToken\",value:function(){return this.future(),this.stack.pop()}},{key:\"pushToken\",value:function(e){this.stack.push(e)}},{key:\"pushTokens\",value:function(e){var t;(t=this.stack).push.apply(t,a()(e))}},{key:\"consumeSpaces\",value:function(){for(;;){if(\" \"!==this.future().text)break;this.stack.pop()}}},{key:\"consumeArgs\",value:function(e){for(var t=[],r=0;r<e;++r){this.consumeSpaces();var n=this.popToken();if(\"{\"===n.text){for(var a=[],i=1;0!==i;){var o=this.popToken();if(a.push(o),\"{\"===o.text)++i;else if(\"}\"===o.text)--i;else if(\"EOF\"===o.text)throw new p.a(\"End of input in macro argument\",n)}a.pop(),a.reverse(),t[r]=a}else{if(\"EOF\"===n.text)throw new p.a(\"End of input expecting macro argument\");t[r]=[n]}}return t}},{key:\"expandOnce\",value:function(){var e=this.popToken(),t=e.text;if(\"\\\\\"===t.charAt(0)&&u.b.test(t)&&this.consumeSpaces(),!this.macros.hasOwnProperty(t))return this.pushToken(e),e;var r=this._getExpansion(t),n=r.tokens,i=r.numArgs,o=n;if(i)for(var s=this.consumeArgs(i),l=(o=o.slice()).length-1;l>=0;--l){var c=o[l];if(\"#\"===c.text){if(0===l)throw new p.a(\"Incomplete placeholder at end of macro body\",c);if(\"#\"===(c=o[--l]).text)o.splice(l+1,1);else{if(!/^[1-9]$/.test(c.text))throw new p.a(\"Not a valid argument number\",c);var h;(h=o).splice.apply(h,[l,2].concat(a()(s[+c.text-1])))}}}return this.pushTokens(o),o}},{key:\"expandAfterFuture\",value:function(){return this.expandOnce(),this.future()}},{key:\"expandNextToken\",value:function(){for(;;){var e=this.expandOnce();if(e instanceof c.a){if(\"\\\\relax\"!==e.text)return this.stack.pop();this.stack.pop()}}throw new Error}},{key:\"_getExpansion\",value:function(e){var t=this.macros[e],r=\"function\"==typeof t?t(this):t;if(\"string\"==typeof r){var n=0;if(-1!==r.indexOf(\"#\"))for(var a=r.replace(/##/g,\"\");-1!==a.indexOf(\"#\"+(n+1));)++n;for(var i=new u.c(r),o=[],s=i.lex();\"EOF\"!==s.text;)o.push(s),s=i.lex();o.reverse();var l={tokens:o,numArgs:n};return\"function\"!=typeof t&&(this.macros[e]=l),l}return r}}]),e}();t.a=f},function(e,t){e.exports=function(e,t,r){if(e.global||e.sticky)throw new Error(\"matchAt(...): Only non-global regexes are supported\");var n=function(e){if(!e.__matchAtRelocatable){var t=e.source+\"|()\",r=\"g\"+(e.ignoreCase?\"i\":\"\")+(e.multiline?\"m\":\"\")+(e.unicode?\"u\":\"\");e.__matchAtRelocatable=new RegExp(t,r)}return e.__matchAtRelocatable}(e);n.lastIndex=r;var a=n.exec(t);return null==a[a.length-1]?(a.length=a.length-1,a):null}},function(e,t,r){\"use strict\";var n=r(59),a=r(28),i=r(5),o=(r(27),{});function s(e,t){o[e]=t}t.a=o,s(\"\\\\@firstoftwo\",function(e){return{tokens:e.consumeArgs(2)[0],numArgs:0}}),s(\"\\\\@secondoftwo\",function(e){return{tokens:e.consumeArgs(2)[1],numArgs:0}}),s(\"\\\\@ifnextchar\",function(e){var t=e.consumeArgs(3),r=e.future();return 1===t[0].length&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}}),s(\"\\\\@ifstar\",\"\\\\@ifnextchar *{\\\\@firstoftwo{#1}}\"),s(\"\\\\TextOrMath\",function(e){var t=e.consumeArgs(2);return\"text\"===e.mode?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}}),s(\"\\\\bgroup\",\"{\"),s(\"\\\\egroup\",\"}\"),s(\"\\\\begingroup\",\"{\"),s(\"\\\\endgroup\",\"}\"),s(\"\\\\lq\",\"`\"),s(\"\\\\rq\",\"'\"),s(\"\\\\lbrack\",\"[\"),s(\"\\\\rbrack\",\"]\"),s(\"\\\\aa\",\"\\\\r a\"),s(\"\\\\AA\",\"\\\\r A\"),s(\"\\u2102\",\"\\\\mathbb{C}\"),s(\"\\u210d\",\"\\\\mathbb{H}\"),s(\"\\u2115\",\"\\\\mathbb{N}\"),s(\"\\u2119\",\"\\\\mathbb{P}\"),s(\"\\u211a\",\"\\\\mathbb{Q}\"),s(\"\\u211d\",\"\\\\mathbb{R}\"),s(\"\\u2124\",\"\\\\mathbb{Z}\"),s(\"\\xb7\",\"\\\\cdotp\"),s(\"\\\\llap\",\"\\\\mathllap{\\\\textrm{#1}}\"),s(\"\\\\rlap\",\"\\\\mathrlap{\\\\textrm{#1}}\"),s(\"\\\\clap\",\"\\\\mathclap{\\\\textrm{#1}}\"),s(\"\\\\varGamma\",\"\\\\mathit{\\\\Gamma}\"),s(\"\\\\varDelta\",\"\\\\mathit{\\\\Delta}\"),s(\"\\\\varTheta\",\"\\\\mathit{\\\\Theta}\"),s(\"\\\\varLambda\",\"\\\\mathit{\\\\Lambda}\"),s(\"\\\\varXi\",\"\\\\mathit{\\\\Xi}\"),s(\"\\\\varPi\",\"\\\\mathit{\\\\Pi}\"),s(\"\\\\varSigma\",\"\\\\mathit{\\\\Sigma}\"),s(\"\\\\varUpsilon\",\"\\\\mathit{\\\\Upsilon}\"),s(\"\\\\varPhi\",\"\\\\mathit{\\\\Phi}\"),s(\"\\\\varPsi\",\"\\\\mathit{\\\\Psi}\"),s(\"\\\\varOmega\",\"\\\\mathit{\\\\Omega}\"),s(\"\\\\overset\",\"\\\\mathop{#2}\\\\limits^{#1}\"),s(\"\\\\underset\",\"\\\\mathop{#2}\\\\limits_{#1}\"),s(\"\\\\boxed\",\"\\\\fbox{\\\\displaystyle{#1}}\"),s(\"\\\\iff\",\"\\\\DOTSB\\\\;\\\\Longleftrightarrow\\\\;\"),s(\"\\\\implies\",\"\\\\DOTSB\\\\;\\\\Longrightarrow\\\\;\"),s(\"\\\\impliedby\",\"\\\\DOTSB\\\\;\\\\Longleftarrow\\\\;\");var l={\",\":\"\\\\dotsc\",\"\\\\not\":\"\\\\dotsb\",\"+\":\"\\\\dotsb\",\"=\":\"\\\\dotsb\",\"<\":\"\\\\dotsb\",\">\":\"\\\\dotsb\",\"-\":\"\\\\dotsb\",\"*\":\"\\\\dotsb\",\":\":\"\\\\dotsb\",\"\\\\DOTSB\":\"\\\\dotsb\",\"\\\\coprod\":\"\\\\dotsb\",\"\\\\bigvee\":\"\\\\dotsb\",\"\\\\bigwedge\":\"\\\\dotsb\",\"\\\\biguplus\":\"\\\\dotsb\",\"\\\\bigcap\":\"\\\\dotsb\",\"\\\\bigcup\":\"\\\\dotsb\",\"\\\\prod\":\"\\\\dotsb\",\"\\\\sum\":\"\\\\dotsb\",\"\\\\bigotimes\":\"\\\\dotsb\",\"\\\\bigoplus\":\"\\\\dotsb\",\"\\\\bigodot\":\"\\\\dotsb\",\"\\\\bigsqcup\":\"\\\\dotsb\",\"\\\\implies\":\"\\\\dotsb\",\"\\\\impliedby\":\"\\\\dotsb\",\"\\\\And\":\"\\\\dotsb\",\"\\\\longrightarrow\":\"\\\\dotsb\",\"\\\\Longrightarrow\":\"\\\\dotsb\",\"\\\\longleftarrow\":\"\\\\dotsb\",\"\\\\Longleftarrow\":\"\\\\dotsb\",\"\\\\longleftrightarrow\":\"\\\\dotsb\",\"\\\\Longleftrightarrow\":\"\\\\dotsb\",\"\\\\mapsto\":\"\\\\dotsb\",\"\\\\longmapsto\":\"\\\\dotsb\",\"\\\\hookrightarrow\":\"\\\\dotsb\",\"\\\\iff\":\"\\\\dotsb\",\"\\\\doteq\":\"\\\\dotsb\",\"\\\\mathbin\":\"\\\\dotsb\",\"\\\\bmod\":\"\\\\dotsb\",\"\\\\mathrel\":\"\\\\dotsb\",\"\\\\relbar\":\"\\\\dotsb\",\"\\\\Relbar\":\"\\\\dotsb\",\"\\\\xrightarrow\":\"\\\\dotsb\",\"\\\\xleftarrow\":\"\\\\dotsb\",\"\\\\DOTSI\":\"\\\\dotsi\",\"\\\\int\":\"\\\\dotsi\",\"\\\\oint\":\"\\\\dotsi\",\"\\\\iint\":\"\\\\dotsi\",\"\\\\iiint\":\"\\\\dotsi\",\"\\\\iiiint\":\"\\\\dotsi\",\"\\\\idotsint\":\"\\\\dotsi\",\"\\\\DOTSX\":\"\\\\dotsx\"};s(\"\\\\dots\",function(e){var t=\"\\\\dotso\",r=e.expandAfterFuture().text;return r in l?t=l[r]:\"\\\\not\"===r.substr(0,4)?t=\"\\\\dotsb\":r in a.a.math&&i.a.contains([\"bin\",\"rel\"],a.a.math[r].group)&&(t=\"\\\\dotsb\"),t});var u={\")\":!0,\"]\":!0,\"\\\\rbrack\":!0,\"\\\\}\":!0,\"\\\\rbrace\":!0,\"\\\\rangle\":!0,\"\\\\rceil\":!0,\"\\\\rfloor\":!0,\"\\\\rgroup\":!0,\"\\\\rmoustache\":!0,\"\\\\right\":!0,\"\\\\bigr\":!0,\"\\\\biggr\":!0,\"\\\\Bigr\":!0,\"\\\\Biggr\":!0,$:!0,\";\":!0,\".\":!0,\",\":!0};s(\"\\\\dotso\",function(e){return e.future().text in u?\"\\\\ldots\\\\,\":\"\\\\ldots\"}),s(\"\\\\dotsc\",function(e){var t=e.future().text;return t in u&&\",\"!==t?\"\\\\ldots\\\\,\":\"\\\\ldots\"}),s(\"\\\\cdots\",function(e){return e.future().text in u?\"\\\\@cdots\\\\,\":\"\\\\@cdots\"}),s(\"\\\\dotsb\",\"\\\\cdots\"),s(\"\\\\dotsm\",\"\\\\cdots\"),s(\"\\\\dotsi\",\"\\\\!\\\\cdots\"),s(\"\\\\dotsx\",\"\\\\ldots\\\\,\"),s(\"\\\\DOTSI\",\"\\\\relax\"),s(\"\\\\DOTSB\",\"\\\\relax\"),s(\"\\\\DOTSX\",\"\\\\relax\"),s(\"\\\\thinspace\",\"\\\\,\"),s(\"\\\\medspace\",\"\\\\:\"),s(\"\\\\thickspace\",\"\\\\;\"),s(\"\\\\TeX\",\"\\\\textrm{T\\\\kern-.1667em\\\\raisebox{-.5ex}{E}\\\\kern-.125emX}\");var c=n.a[\"Main-Regular\"][\"T\".charCodeAt(0)][1]-.7*n.a[\"Main-Regular\"][\"A\".charCodeAt(0)][1]+\"em\";s(\"\\\\LaTeX\",\"\\\\textrm{L\\\\kern-.36em\\\\raisebox{\"+c+\"}{\\\\scriptsize A}\\\\kern-.15em\\\\TeX}\"),s(\"\\\\KaTeX\",\"\\\\textrm{K\\\\kern-.17em\\\\raisebox{\"+c+\"}{\\\\scriptsize A}\\\\kern-.15em\\\\TeX}\"),s(\"\\\\hspace\",\"\\\\@ifstar\\\\kern\\\\kern\"),s(\"\\\\ordinarycolon\",\":\"),s(\"\\\\vcentcolon\",\"\\\\mathrel{\\\\mathop\\\\ordinarycolon}\"),s(\"\\\\dblcolon\",\"\\\\vcentcolon\\\\mathrel{\\\\mkern-.9mu}\\\\vcentcolon\"),s(\"\\\\coloneqq\",\"\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}=\"),s(\"\\\\Coloneqq\",\"\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}=\"),s(\"\\\\coloneq\",\"\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\mathrel{-}\"),s(\"\\\\Coloneq\",\"\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\mathrel{-}\"),s(\"\\\\eqqcolon\",\"=\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon\"),s(\"\\\\Eqqcolon\",\"=\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon\"),s(\"\\\\eqcolon\",\"\\\\mathrel{-}\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon\"),s(\"\\\\Eqcolon\",\"\\\\mathrel{-}\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon\"),s(\"\\\\colonapprox\",\"\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\approx\"),s(\"\\\\Colonapprox\",\"\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\approx\"),s(\"\\\\colonsim\",\"\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\sim\"),s(\"\\\\Colonsim\",\"\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\sim\"),s(\"\\u2254\",\"\\\\coloneqq\"),s(\"\\u2255\",\"\\\\eqqcolon\"),s(\"\\u2a74\",\"\\\\Coloneqq\"),s(\"\\\\ratio\",\"\\\\vcentcolon\"),s(\"\\\\coloncolon\",\"\\\\dblcolon\"),s(\"\\\\colonequals\",\"\\\\coloneqq\"),s(\"\\\\coloncolonequals\",\"\\\\Coloneqq\"),s(\"\\\\equalscolon\",\"\\\\eqqcolon\"),s(\"\\\\equalscoloncolon\",\"\\\\Eqqcolon\"),s(\"\\\\colonminus\",\"\\\\coloneq\"),s(\"\\\\coloncolonminus\",\"\\\\Coloneq\"),s(\"\\\\minuscolon\",\"\\\\eqcolon\"),s(\"\\\\minuscoloncolon\",\"\\\\Eqcolon\"),s(\"\\\\coloncolonapprox\",\"\\\\Colonapprox\"),s(\"\\\\coloncolonsim\",\"\\\\Colonsim\"),s(\"\\\\simcolon\",\"\\\\sim\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon\"),s(\"\\\\simcoloncolon\",\"\\\\sim\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon\"),s(\"\\\\approxcolon\",\"\\\\approx\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon\"),s(\"\\\\approxcoloncolon\",\"\\\\approx\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon\"),s(\"\\\\notni\",\"\\\\not\\\\ni\"),s(\"\\\\limsup\",\"\\\\DOTSB\\\\mathop{\\\\operatorname{lim\\\\,sup}}\\\\limits\"),s(\"\\\\liminf\",\"\\\\DOTSB\\\\mathop{\\\\operatorname{lim\\\\,inf}}\\\\limits\")},function(e,t,r){\"use strict\";var n=Object.getOwnPropertySymbols,a=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String(\"abc\");if(e[5]=\"de\",\"5\"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},r=0;r<10;r++)t[\"_\"+String.fromCharCode(r)]=r;if(\"0123456789\"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(\"\"))return!1;var n={};return\"abcdefghijklmnopqrst\".split(\"\").forEach(function(e){n[e]=e}),\"abcdefghijklmnopqrst\"===Object.keys(Object.assign({},n)).join(\"\")}catch(e){return!1}}()?Object.assign:function(e,t){for(var r,o,s=function(e){if(null===e||void 0===e)throw new TypeError(\"Object.assign cannot be called with null or undefined\");return Object(e)}(e),l=1;l<arguments.length;l++){r=Object(arguments[l]);for(var u in r)a.call(r,u)&&(s[u]=r[u]);if(n){o=n(r);for(var c=0;c<o.length;c++)i.call(r,o[c])&&(s[o[c]]=r[o[c]])}}return s}},function(e,t){e.exports={\"\\u0301\":{text:\"\\\\'\",math:\"\\\\acute\"},\"\\u0300\":{text:\"\\\\`\",math:\"\\\\grave\"},\"\\u0308\":{text:'\\\\\"',math:\"\\\\ddot\"},\"\\u0303\":{text:\"\\\\~\",math:\"\\\\tilde\"},\"\\u0304\":{text:\"\\\\=\",math:\"\\\\bar\"},\"\\u0306\":{text:\"\\\\u\",math:\"\\\\breve\"},\"\\u030c\":{text:\"\\\\v\",math:\"\\\\check\"},\"\\u0302\":{text:\"\\\\^\",math:\"\\\\hat\"},\"\\u0307\":{text:\"\\\\.\",math:\"\\\\dot\"},\"\\u030a\":{text:\"\\\\r\",math:\"\\\\mathring\"},\"\\u030b\":{text:\"\\\\H\"}}},function(e,t,r){\"use strict\";t.a={\"\\xe1\":\"a\\u0301\",\"\\xe0\":\"a\\u0300\",\"\\xe4\":\"a\\u0308\",\"\\u01df\":\"a\\u0308\\u0304\",\"\\xe3\":\"a\\u0303\",\"\\u0101\":\"a\\u0304\",\"\\u0103\":\"a\\u0306\",\"\\u1eaf\":\"a\\u0306\\u0301\",\"\\u1eb1\":\"a\\u0306\\u0300\",\"\\u1eb5\":\"a\\u0306\\u0303\",\"\\u01ce\":\"a\\u030c\",\"\\xe2\":\"a\\u0302\",\"\\u1ea5\":\"a\\u0302\\u0301\",\"\\u1ea7\":\"a\\u0302\\u0300\",\"\\u1eab\":\"a\\u0302\\u0303\",\"\\u0227\":\"a\\u0307\",\"\\u01e1\":\"a\\u0307\\u0304\",\"\\xe5\":\"a\\u030a\",\"\\u01fb\":\"a\\u030a\\u0301\",\"\\u1e03\":\"b\\u0307\",\"\\u0107\":\"c\\u0301\",\"\\u010d\":\"c\\u030c\",\"\\u0109\":\"c\\u0302\",\"\\u010b\":\"c\\u0307\",\"\\u010f\":\"d\\u030c\",\"\\u1e0b\":\"d\\u0307\",\"\\xe9\":\"e\\u0301\",\"\\xe8\":\"e\\u0300\",\"\\xeb\":\"e\\u0308\",\"\\u1ebd\":\"e\\u0303\",\"\\u0113\":\"e\\u0304\",\"\\u1e17\":\"e\\u0304\\u0301\",\"\\u1e15\":\"e\\u0304\\u0300\",\"\\u0115\":\"e\\u0306\",\"\\u011b\":\"e\\u030c\",\"\\xea\":\"e\\u0302\",\"\\u1ebf\":\"e\\u0302\\u0301\",\"\\u1ec1\":\"e\\u0302\\u0300\",\"\\u1ec5\":\"e\\u0302\\u0303\",\"\\u0117\":\"e\\u0307\",\"\\u1e1f\":\"f\\u0307\",\"\\u01f5\":\"g\\u0301\",\"\\u1e21\":\"g\\u0304\",\"\\u011f\":\"g\\u0306\",\"\\u01e7\":\"g\\u030c\",\"\\u011d\":\"g\\u0302\",\"\\u0121\":\"g\\u0307\",\"\\u1e27\":\"h\\u0308\",\"\\u021f\":\"h\\u030c\",\"\\u0125\":\"h\\u0302\",\"\\u1e23\":\"h\\u0307\",\"\\xed\":\"i\\u0301\",\"\\xec\":\"i\\u0300\",\"\\xef\":\"i\\u0308\",\"\\u1e2f\":\"i\\u0308\\u0301\",\"\\u0129\":\"i\\u0303\",\"\\u012b\":\"i\\u0304\",\"\\u012d\":\"i\\u0306\",\"\\u01d0\":\"i\\u030c\",\"\\xee\":\"i\\u0302\",\"\\u01f0\":\"j\\u030c\",\"\\u0135\":\"j\\u0302\",\"\\u1e31\":\"k\\u0301\",\"\\u01e9\":\"k\\u030c\",\"\\u013a\":\"l\\u0301\",\"\\u013e\":\"l\\u030c\",\"\\u1e3f\":\"m\\u0301\",\"\\u1e41\":\"m\\u0307\",\"\\u0144\":\"n\\u0301\",\"\\u01f9\":\"n\\u0300\",\"\\xf1\":\"n\\u0303\",\"\\u0148\":\"n\\u030c\",\"\\u1e45\":\"n\\u0307\",\"\\xf3\":\"o\\u0301\",\"\\xf2\":\"o\\u0300\",\"\\xf6\":\"o\\u0308\",\"\\u022b\":\"o\\u0308\\u0304\",\"\\xf5\":\"o\\u0303\",\"\\u1e4d\":\"o\\u0303\\u0301\",\"\\u1e4f\":\"o\\u0303\\u0308\",\"\\u022d\":\"o\\u0303\\u0304\",\"\\u014d\":\"o\\u0304\",\"\\u1e53\":\"o\\u0304\\u0301\",\"\\u1e51\":\"o\\u0304\\u0300\",\"\\u014f\":\"o\\u0306\",\"\\u01d2\":\"o\\u030c\",\"\\xf4\":\"o\\u0302\",\"\\u1ed1\":\"o\\u0302\\u0301\",\"\\u1ed3\":\"o\\u0302\\u0300\",\"\\u1ed7\":\"o\\u0302\\u0303\",\"\\u022f\":\"o\\u0307\",\"\\u0231\":\"o\\u0307\\u0304\",\"\\u0151\":\"o\\u030b\",\"\\u1e55\":\"p\\u0301\",\"\\u1e57\":\"p\\u0307\",\"\\u0155\":\"r\\u0301\",\"\\u0159\":\"r\\u030c\",\"\\u1e59\":\"r\\u0307\",\"\\u015b\":\"s\\u0301\",\"\\u1e65\":\"s\\u0301\\u0307\",\"\\u0161\":\"s\\u030c\",\"\\u1e67\":\"s\\u030c\\u0307\",\"\\u015d\":\"s\\u0302\",\"\\u1e61\":\"s\\u0307\",\"\\u1e97\":\"t\\u0308\",\"\\u0165\":\"t\\u030c\",\"\\u1e6b\":\"t\\u0307\",\"\\xfa\":\"u\\u0301\",\"\\xf9\":\"u\\u0300\",\"\\xfc\":\"u\\u0308\",\"\\u01d8\":\"u\\u0308\\u0301\",\"\\u01dc\":\"u\\u0308\\u0300\",\"\\u01d6\":\"u\\u0308\\u0304\",\"\\u01da\":\"u\\u0308\\u030c\",\"\\u0169\":\"u\\u0303\",\"\\u1e79\":\"u\\u0303\\u0301\",\"\\u016b\":\"u\\u0304\",\"\\u1e7b\":\"u\\u0304\\u0308\",\"\\u016d\":\"u\\u0306\",\"\\u01d4\":\"u\\u030c\",\"\\xfb\":\"u\\u0302\",\"\\u016f\":\"u\\u030a\",\"\\u0171\":\"u\\u030b\",\"\\u1e7d\":\"v\\u0303\",\"\\u1e83\":\"w\\u0301\",\"\\u1e81\":\"w\\u0300\",\"\\u1e85\":\"w\\u0308\",\"\\u0175\":\"w\\u0302\",\"\\u1e87\":\"w\\u0307\",\"\\u1e98\":\"w\\u030a\",\"\\u1e8d\":\"x\\u0308\",\"\\u1e8b\":\"x\\u0307\",\"\\xfd\":\"y\\u0301\",\"\\u1ef3\":\"y\\u0300\",\"\\xff\":\"y\\u0308\",\"\\u1ef9\":\"y\\u0303\",\"\\u0233\":\"y\\u0304\",\"\\u0177\":\"y\\u0302\",\"\\u1e8f\":\"y\\u0307\",\"\\u1e99\":\"y\\u030a\",\"\\u017a\":\"z\\u0301\",\"\\u017e\":\"z\\u030c\",\"\\u1e91\":\"z\\u0302\",\"\\u017c\":\"z\\u0307\",\"\\xc1\":\"A\\u0301\",\"\\xc0\":\"A\\u0300\",\"\\xc4\":\"A\\u0308\",\"\\u01de\":\"A\\u0308\\u0304\",\"\\xc3\":\"A\\u0303\",\"\\u0100\":\"A\\u0304\",\"\\u0102\":\"A\\u0306\",\"\\u1eae\":\"A\\u0306\\u0301\",\"\\u1eb0\":\"A\\u0306\\u0300\",\"\\u1eb4\":\"A\\u0306\\u0303\",\"\\u01cd\":\"A\\u030c\",\"\\xc2\":\"A\\u0302\",\"\\u1ea4\":\"A\\u0302\\u0301\",\"\\u1ea6\":\"A\\u0302\\u0300\",\"\\u1eaa\":\"A\\u0302\\u0303\",\"\\u0226\":\"A\\u0307\",\"\\u01e0\":\"A\\u0307\\u0304\",\"\\xc5\":\"A\\u030a\",\"\\u01fa\":\"A\\u030a\\u0301\",\"\\u1e02\":\"B\\u0307\",\"\\u0106\":\"C\\u0301\",\"\\u010c\":\"C\\u030c\",\"\\u0108\":\"C\\u0302\",\"\\u010a\":\"C\\u0307\",\"\\u010e\":\"D\\u030c\",\"\\u1e0a\":\"D\\u0307\",\"\\xc9\":\"E\\u0301\",\"\\xc8\":\"E\\u0300\",\"\\xcb\":\"E\\u0308\",\"\\u1ebc\":\"E\\u0303\",\"\\u0112\":\"E\\u0304\",\"\\u1e16\":\"E\\u0304\\u0301\",\"\\u1e14\":\"E\\u0304\\u0300\",\"\\u0114\":\"E\\u0306\",\"\\u011a\":\"E\\u030c\",\"\\xca\":\"E\\u0302\",\"\\u1ebe\":\"E\\u0302\\u0301\",\"\\u1ec0\":\"E\\u0302\\u0300\",\"\\u1ec4\":\"E\\u0302\\u0303\",\"\\u0116\":\"E\\u0307\",\"\\u1e1e\":\"F\\u0307\",\"\\u01f4\":\"G\\u0301\",\"\\u1e20\":\"G\\u0304\",\"\\u011e\":\"G\\u0306\",\"\\u01e6\":\"G\\u030c\",\"\\u011c\":\"G\\u0302\",\"\\u0120\":\"G\\u0307\",\"\\u1e26\":\"H\\u0308\",\"\\u021e\":\"H\\u030c\",\"\\u0124\":\"H\\u0302\",\"\\u1e22\":\"H\\u0307\",\"\\xcd\":\"I\\u0301\",\"\\xcc\":\"I\\u0300\",\"\\xcf\":\"I\\u0308\",\"\\u1e2e\":\"I\\u0308\\u0301\",\"\\u0128\":\"I\\u0303\",\"\\u012a\":\"I\\u0304\",\"\\u012c\":\"I\\u0306\",\"\\u01cf\":\"I\\u030c\",\"\\xce\":\"I\\u0302\",\"\\u0130\":\"I\\u0307\",\"\\u0134\":\"J\\u0302\",\"\\u1e30\":\"K\\u0301\",\"\\u01e8\":\"K\\u030c\",\"\\u0139\":\"L\\u0301\",\"\\u013d\":\"L\\u030c\",\"\\u1e3e\":\"M\\u0301\",\"\\u1e40\":\"M\\u0307\",\"\\u0143\":\"N\\u0301\",\"\\u01f8\":\"N\\u0300\",\"\\xd1\":\"N\\u0303\",\"\\u0147\":\"N\\u030c\",\"\\u1e44\":\"N\\u0307\",\"\\xd3\":\"O\\u0301\",\"\\xd2\":\"O\\u0300\",\"\\xd6\":\"O\\u0308\",\"\\u022a\":\"O\\u0308\\u0304\",\"\\xd5\":\"O\\u0303\",\"\\u1e4c\":\"O\\u0303\\u0301\",\"\\u1e4e\":\"O\\u0303\\u0308\",\"\\u022c\":\"O\\u0303\\u0304\",\"\\u014c\":\"O\\u0304\",\"\\u1e52\":\"O\\u0304\\u0301\",\"\\u1e50\":\"O\\u0304\\u0300\",\"\\u014e\":\"O\\u0306\",\"\\u01d1\":\"O\\u030c\",\"\\xd4\":\"O\\u0302\",\"\\u1ed0\":\"O\\u0302\\u0301\",\"\\u1ed2\":\"O\\u0302\\u0300\",\"\\u1ed6\":\"O\\u0302\\u0303\",\"\\u022e\":\"O\\u0307\",\"\\u0230\":\"O\\u0307\\u0304\",\"\\u0150\":\"O\\u030b\",\"\\u1e54\":\"P\\u0301\",\"\\u1e56\":\"P\\u0307\",\"\\u0154\":\"R\\u0301\",\"\\u0158\":\"R\\u030c\",\"\\u1e58\":\"R\\u0307\",\"\\u015a\":\"S\\u0301\",\"\\u1e64\":\"S\\u0301\\u0307\",\"\\u0160\":\"S\\u030c\",\"\\u1e66\":\"S\\u030c\\u0307\",\"\\u015c\":\"S\\u0302\",\"\\u1e60\":\"S\\u0307\",\"\\u0164\":\"T\\u030c\",\"\\u1e6a\":\"T\\u0307\",\"\\xda\":\"U\\u0301\",\"\\xd9\":\"U\\u0300\",\"\\xdc\":\"U\\u0308\",\"\\u01d7\":\"U\\u0308\\u0301\",\"\\u01db\":\"U\\u0308\\u0300\",\"\\u01d5\":\"U\\u0308\\u0304\",\"\\u01d9\":\"U\\u0308\\u030c\",\"\\u0168\":\"U\\u0303\",\"\\u1e78\":\"U\\u0303\\u0301\",\"\\u016a\":\"U\\u0304\",\"\\u1e7a\":\"U\\u0304\\u0308\",\"\\u016c\":\"U\\u0306\",\"\\u01d3\":\"U\\u030c\",\"\\xdb\":\"U\\u0302\",\"\\u016e\":\"U\\u030a\",\"\\u0170\":\"U\\u030b\",\"\\u1e7c\":\"V\\u0303\",\"\\u1e82\":\"W\\u0301\",\"\\u1e80\":\"W\\u0300\",\"\\u1e84\":\"W\\u0308\",\"\\u0174\":\"W\\u0302\",\"\\u1e86\":\"W\\u0307\",\"\\u1e8c\":\"X\\u0308\",\"\\u1e8a\":\"X\\u0307\",\"\\xdd\":\"Y\\u0301\",\"\\u1ef2\":\"Y\\u0300\",\"\\u0178\":\"Y\\u0308\",\"\\u1ef8\":\"Y\\u0303\",\"\\u0232\":\"Y\\u0304\",\"\\u0176\":\"Y\\u0302\",\"\\u1e8e\":\"Y\\u0307\",\"\\u0179\":\"Z\\u0301\",\"\\u017d\":\"Z\\u030c\",\"\\u1e90\":\"Z\\u0302\",\"\\u017b\":\"Z\\u0307\",\"\\u03ac\":\"\\u03b1\\u0301\",\"\\u1f70\":\"\\u03b1\\u0300\",\"\\u1fb1\":\"\\u03b1\\u0304\",\"\\u1fb0\":\"\\u03b1\\u0306\",\"\\u03ad\":\"\\u03b5\\u0301\",\"\\u1f72\":\"\\u03b5\\u0300\",\"\\u03ae\":\"\\u03b7\\u0301\",\"\\u1f74\":\"\\u03b7\\u0300\",\"\\u03af\":\"\\u03b9\\u0301\",\"\\u1f76\":\"\\u03b9\\u0300\",\"\\u03ca\":\"\\u03b9\\u0308\",\"\\u0390\":\"\\u03b9\\u0308\\u0301\",\"\\u1fd2\":\"\\u03b9\\u0308\\u0300\",\"\\u1fd1\":\"\\u03b9\\u0304\",\"\\u1fd0\":\"\\u03b9\\u0306\",\"\\u03cc\":\"\\u03bf\\u0301\",\"\\u1f78\":\"\\u03bf\\u0300\",\"\\u03cd\":\"\\u03c5\\u0301\",\"\\u1f7a\":\"\\u03c5\\u0300\",\"\\u03cb\":\"\\u03c5\\u0308\",\"\\u03b0\":\"\\u03c5\\u0308\\u0301\",\"\\u1fe2\":\"\\u03c5\\u0308\\u0300\",\"\\u1fe1\":\"\\u03c5\\u0304\",\"\\u1fe0\":\"\\u03c5\\u0306\",\"\\u03ce\":\"\\u03c9\\u0301\",\"\\u1f7c\":\"\\u03c9\\u0300\",\"\\u038e\":\"\\u03a5\\u0301\",\"\\u1fea\":\"\\u03a5\\u0300\",\"\\u03ab\":\"\\u03a5\\u0308\",\"\\u1fe9\":\"\\u03a5\\u0304\",\"\\u1fe8\":\"\\u03a5\\u0306\",\"\\u038f\":\"\\u03a9\\u0301\",\"\\u1ffa\":\"\\u03a9\\u0300\"}}]).default});\n})(!$tw.browser ? $tw.fakeDocument : window.document)\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/katex/katex.min.js",
"module-type": "library"
},
"$:/plugins/tiddlywiki/katex/fonts/KaTeX_AMS-Regular.woff": {
"text": "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",
"title": "$:/plugins/tiddlywiki/katex/fonts/KaTeX_AMS-Regular.woff",
"type": "application/font-woff"
},
"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Caligraphic-Bold.woff": {
"text": "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",
"title": "$:/plugins/tiddlywiki/katex/fonts/KaTeX_Caligraphic-Bold.woff",
"type": "application/font-woff"
},
"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Caligraphic-Regular.woff": {
"text": "d09GRgABAAAAAC5cAA8AAAAAShAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAuQAAAABwAAAAcacggM09TLzIAAAHMAAAAUgAAAGBFh1ihY21hcAAAArgAAACGAAABYvbYsmpjdnQgAAAJaAAAABsAAAAqAH0KVWZwZ20AAANAAAAFpwAAC5fYFNvwZ2FzcAAALjgAAAAIAAAACAAAABBnbHlmAAAJ4AAAILUAADC8kQDqg2hlYWQAAAFYAAAAMwAAADYQqNlmaGhlYQAAAYwAAAAgAAAAJAfFAuZobXR4AAACIAAAAJgAAACwY9sExWxvY2EAAAmEAAAAWgAAAFoEtvgmbWF4cAAAAawAAAAgAAAAIAFjAeFuYW1lAAAqmAAAAykAAAf7kNzPkXBvc3QAAC3EAAAAdAAAAJrSViLzcHJlcAAACOgAAAB9AAAAio6I4MZ42mNgZGBgAOKtd2d+jue3+cogz/wCKMJwbaK3Eoz+/+i/BkshsyiQy8HABBIFAIbmDREAeNpjYGRgYBb9r8EQxbLx/6N/D1gKGYAiKEAHAJ4lBrEAAQAAACwAdAADAAAAAAACACIAMgB3AAAAmgE5AAAAAHjaY2BiSmScwMDKwMDUxbSHgYGhB0IzPmAwZGRiQAINDAzvBRjevIXxA9JcUxgcGBTe/2dW+G/BEMUsynBDgYGhP44ZJMu0GkgoMDACAA7EELgAAHjaY/jFYMQABIy+QOIXkP7CoA7EYUCsA8RaQCwDxEZQtjkQa4PYzHIMckwTGRSY+Bl4mJkZhJkEgPzzDEJMwQw6zL5AWvH/I6ZlDPpMv4BqNjEosGxkkGE2+f+UWYbBimkHgzCzIUMRcwBQXxxILYMSU9H/90ypDJLMdxgkmU4ymDDNYZBnusqgCnaTDgQzpDAwAADotyPmeNpjYGBgZoBgGQZGBhCIAfIYwXwWBgcgzcPAwcAEZCswWDJEMSx4////f6CoAoMBgyOQ9xfIffz/yv+z/zsEdKAmwAEjGwNciJEJSDAxoCmAWI0MWFjZ2Dk4ubh5eKECfPwCgkLCIqJi4hKSUtIysnLyCopKyiqqauoM9AUaZOkCAIQzFdwAAHjarVb5c9NGFJZ8JE5CjpKDFvVYsXGa2iuTUggGTAiSZRfcw7laCUorxU56H9Ayw9/gv+bJtDP0N/60fm9lm0CSdoZpJqP37e6nffeTyVCCjL3AD4VoPTNmtlo0tnMvoMsWrYbRoejtBZQpxn8XjILR6ch9y7bJCMnwZL1vmIYXuQ6ZikR06FBGia6g523Krdzrr5qTnt/xt+8HtrStXiCo3Q5s2gwtQVVG1TAUSUqKu7SKrcFK0BqfrzHzeTsQMKIXC5psBxF2BJ9NMlpntB5ZURiGFpnlMJRktIODMHQoqwTuyRVjGJT32gHlpUtj0oX5IZmRQzklYZfoJvl9V/BJqpyfOPc7lC3Z2PdET/Rwd7KWL8KtrSBqW/F2GMgQp5s7AY4sdmqg2aG8onGv3DcyaWjGsJSuRIilG1Nm/5DMDu6nfMmhcSXYyCmv8yxn7Au+gTajkClRXRtZUP3xKcPz3ZI9CvaEejn4k+ktZhkmePA4En5PxpwIHSnD4miSsGDk0ErKFmVcT1VMnfI6LeMtw3rh2tGXzijtUH9qMusHtiXtsGQ7NK2STManblx3aEaBKASd8e7y6wDSDWmaV9tYTWPl0CyumdMhEYhAB3ppxotELxI0g6A5NKdau0GS69bDZZo+kE8cekO1toLWTrpp2dif1/tnVWLMentBMjuL/MUuzZa5SFG6bnKGH9N4kLmETGSL7SDh4MFbt4f0stqSLfHaEFvpOb+C2uedEJ40YX8Tuy+n6pQEJoYxLxEtj4yNvmmaOlfzykiMjL8b0Kx0hU9TKMpJKI5cEUH9X3NzpjFjuG4vSs6Olelx2bqAMC3At/myQ4sqMVkuIc4sz6kky/JNleRYvqWSPMvzKhljaalknOXbKimwfEclEyw/UKJC5gOHSho8dKiswSOH3lUGTZdfw8b3YOO7uFvARpY2bGR5ATaylLCR5TJsZFmEjSxXYCPL92Ejy1XYyFIpUdOl5iionYuExyZ4Oh1oH8X1VlHklMlBJ11EETfFKZmQcVXyGPtXBkrJobVReswlulhK8uaiH2AMsYMfHo3M8eNLSlzR9n4EnukfV4IOO1E57xtLfxr8V9+Q1eSSuQiPLsN/GHyyvSjsuOrQFVU5V3No/b+oKMIO6FeREmOpKCqiyc2LUN7p9ZqyiW4PMNYxFtHR66a5uAD9VUyZJTQI/jWFJrzyQa8ihaj1cNe1F8eikt5BOdwJlqCI+31zK3iaEVlhPc2sZM+HLs/AAqap1GzZQPd5r7ZSxHMoHfYZL+pKynpxF8cZL7aAI55Br74TwyQMZtlADiU0NOAXhNaC+05QItNpl0ODI/Z5FFT+2K24kT0qaiPwbKdT7oUupPw6x0BgJ78yiIGsITQ39DYV0DxCNGSTlXG2ajpk7MAgosZuUBE1fBvZ4sGmYFuGIR8rYnXn6Nc3TdRJFTzIjOQyvjmwwBumJuLP86suDlO5oaSocNQaGMy1sJJUzAU04K3Rdvvo9ubL7BM5txVVyyde6iq6Vu5BMRcLrD3OQVoqVAHVG1XYMLpcXBKlXkGTpNfVMTQww1+jFJv/V/Wx+TxfahIj5Ei+7XBgo8/BGPrfYP9tOQjAwI+Ry024vJg2J77u6MP5Cl1GL358yv4dzFxzYZ6uAN9VdBWixVHzEVfRwKdsGKdPFJcjtQA/VX3MGYDPAEwGn6u+qXfaAHpnizk+wDZzGOwwh8EucxjsMec2wBfMYfAlcxgEzGEQMscDuMccBveZw+Ar5jB4wJwGwNfMYfANcxhEzGEQM8cF2GcOgw5zGHSZw+BA0fVRmA95QRtA32p0C+g7XU9YbGLxvaIbI/YPvNDsHzVi9k8aMfVnRbUR9RdeaOqvGjH1N42Y+lDRzRH1ES809XeNmPqHRkx9rJ5O5DLDH09umQoHlF1uPxl+U5x/ACtxTWMAeNpj8N7BcCIoYiMjY1/kBsadHAwcDMkFGxnYnDYxMDJogRibuVkYOSAsQSYwi91pFzMDUJoTyOZw2sXgAGEzM7hsVGHsCIzY4NARsZE5xWWjGoi3i6OBgZHFoSM5JAKkJBIINvOyMPJo7WD837qBpXcjE1Afa4oLAGgRJKMAAAB42mNgwAApQOjK4Mp08P8rJlEGBhgNAFF6BtkAAAAAFgAWABYAFgBkAMIBQAHgAmAC8AOOBAAEkgUeBgAG8gdoB+QIhAmECiQLJgvIDGQNLg3IDo4PMA+0EEQRDBHsEowTLhQwFKoVXBY0FvIYKBgoGDwYUBheAAB42pV7eXAk13nfe69fv76POXvu+wJmBgPMiRuDXWBxLoDdBRcLYskld5fkklxCu0tT4lEiJdGSTNMqU1IkU7JpK5Js2VKVRFtWpeJEieiSYzlyFEeuipw4KUdOfISsSlxOYid/mJvvdc8AkCKlaAyAxXS/19PvO37f7/e9XkRQEyH0LRJCApKQ/DVGMSLj1Zav5Su3fPnmJ683myT0d2818a8jgsp338S/j7+JFFRGI/2SiJGACUXkGqIUHyCMTbyJUTYd9NsWo0jBCmPBaqAZDgXzuU6767THhHyulM8xCV5JHAw74VZzXpjDf3370e/+4fXvC7ozkqYqSU0osoidkUA6W3N0gr/59HveeuvWC98t1ppRH04EfQ11bfzUaZ8UjE/XqzpCGF2EX1/Ev4PGUKff1DDCY6NIEFEZE1FYh/P4DixUJEi8RjEhwmUkCLawWS78RLmQYyxWDXR7rW4PXq2mEwo67p3BfTO43xz/BbffavLzc5hJ+fJFSiKjkXZFpaJMKPP1IzLVAg+uPxDQqBzp+2QBO+sxCX+cCliUIoy98Q0iEZH5bIkQyfYxkTLy2i+oRIJ7q8G9vwH3fhrN92dmGBFpDsNNriOREiqSW4hgSvAhLICKiF4DQwsH3v2fWpyeHCllUrEwLCJUDfCbhFsPBSWTSiaRTBxs8XXNY36cSUEJllIe78Byeu5qO21wh8T4FJYr9R5f371tgk+DgXI4xgI6kR+78aQiyZQZuijECfvayw24M/yrfauzvdhJEdGJVmJ4a3pubo75Q8yX9DuaLigM03lCtJRPJNIHCIa3mNgWEW5X9XpjvJfi5wLRGKx99G4Ffwtiahed62+VMRUW4ONh6VQgAuVLRwJBhxI4UEBgAhEJVBTABIzhPTAEu4wYZjsYbZ/tdeq1UsEJGhraxbsyRJ7jetAaxBlfbLlULlUxX32z22uCWTptWH4Ku6uHo/PYDQBuQJjnpLAzsCaWIAjKPApuRLMxvxhXRxvJSMeOjbGREmN0UWBqqrg/3YzEM+MZQVlu+awL7XlfekUFf5N3hwkxrizbwadmw1kpHwllRSwExKCVuz6VG5cJ03xEwsxab16rSdGok0lFLX1kWhPylX4xN58WMXyVH5RDYXn+Hp1sZYvJDIQDWCdxdx5/D/8BmkLzaLO/NpMiAsnnCBYMMNnUxDiiDNH1EBbwGoJTdyBp4YMQe0CRiSDgAwoXtvHm9PT0/PS8b6kU8o9OnlNZour0WtO425ynC7jDg6Y0hxcwt88MdnytsBOCNPASZQbDOynPAylf7vnAcG+wJDUkVZQgerHw/MNJQvSVlVeoEAiwPSoIdA8TzV/0U0HSps9c9Wns4ebs4acZXyUhhH4IiyQQ8F29+ruUsLevU5IjdPE0USA8aAYSiL2Jx5d2X+V534T4+QbkzgY639+eqEO2tzHBsEpZ4EFE70DyyJjIt5CMsIwOAehEJojXEEOYMHwNIUlCe2BK6QAQUNoulcv5Qj1XKSksWXWCsEg3dnikgA14rnhxAN8tN1Q8VGg1k5ifySVx9yiETAxHxnDZzcpfSoYkcWQnHh1JWcFYfqcsWT7IJAZhLiytlSOVnEKVsx9o2DjqL5T2e+OZ+PXZsDO5TpOxSKrmxImypIW2z8wshKKnFUa/kNzRuhgnRGZRv3Eg33MxJPtWZnZnO7UZ0b5nLplN8/gYBcz+FvkUaqNV9GhfTWOBQvKIZH3jdXXnUj8H+QRmugEjIeMAWwAkGRIfRJBfA0SP9/PeIHTr/zNqv6+Wu6P5kTpYKF4NcMDhsQEgL7loz63m5o9rnaAHqb3uAm57VoVXD1LThFSEtBtYvFz6WWeq2qpMJEOi3qx27EjAWq/NbC51J19QEhEnaaqW6AsmfNHZdJy+xBy13tKVTnYkETJFA18vVaK56YlpvxOcadc1Kpin7vulm5+tF2/GsqmwY6oUC6omBRa6jwew9NDKxUK6GgvNry1VziAeWz2IrT/D/xpsd6Z/OhQEXBIworkYERCvKQTzbIIYQ8ItgOPbiFBK9hDE7wEC4N7GaKyWTfttTUFt3OalsAd51IY1tyCJwjx5vNRxDcQhxw0tD5e7uTzzTmwA8uYwFUVRl4rlV5+lwsqa0FIFopZHVUx3k3MNXDn/qihr8PF/QyT6O4RiiZpwYyR7/1XxwkcKqwVaLouRT358/PwcgepBF0KAqvAloOrdtyA+Po1G0SzaQe3+xGorp4miQPA6lBsMSyXXAKuEoZ/n52rVuZ35nepsbTbqZN2qc1R0mBR2MZN7nQe/63HuZO579+8c48tOY6/2QHIITQ+Wx3AD5zw7hJ9tbixfNXEkOqublbzfJ9qH21tPmKSSbSlW3Iio/t8c24zIy5Nq2ycTdbE2eyGtr5l5WRadKVu8SG40z0wxf61YKMpKLJcrl3Xb198935fD/bFyQlR9RiScL61Ot6qZmFIvSNm6L+6XSxN/97mV8XJObyhhUfSPzIatqW0vhyr49wBjOmgdLfUXFywiMTAPRUyi7JqMIVYIAigBdkHEKwAow/KM0dKpqd5EowCUSFclhjq4owwLE3e3Bx9z+Dg/BiWIm7TFTQmVSRrwjwBPFDdBTtSz90ASGCpT4qOna2VW3bTNhbFm2OrGywViUtEkm5c0ttafmprdTn0nmB9JRHQs2PF2Od7waxPpkGMazF6ceZ+kLBF9enZvtp7smSGM1fffX2nd+IfVwkwnmsL/zIrFFlfK+kxsNNF4+Fou6tae1N3vCC3yR2gJXUDf2Xi9DHhirC4nBZmMFomIyXrce68M3+9vvB6GQTWoRLLAMZkXb4RvKYDMDMnsOlQjKE/SFTCfsYFE0RQ3496FR4AHCADmMrnz42d5E/qNwVgFxsoKU+QbwylAXRlSfnjG/n7fvHB+pnCmMlYCG6uA/D2O2R4QdXkAt3iYujRKcu2fIvCLOyrETuIbvDr5sve+VIQ38KeJLdyCK6TSBiTtSEihxc2fP/TJUMfklmNjA5BKErHo13KWjak+Eg/5g1mLKiYj+MUXjbx1uZfvklHKtFP3iFGVYF19o5roBkIJYj/+77+fg5SX7Yz9kc++tjUnJoKCJjHbhEOOyViE5aYbAcCtQNv/3s7frP2LudCHfkou2ZRS5GJc5u6b5FXyBnoSvdYPzGJMq0AVdhaAdmWhalIoEw5Yv4F46cUc53ghOORiQZZuKCqgCD0QMaXgLlkmlxnUb4i5eH/8R8xAknzrx07Z78cxun3rkYeuPnj53jNLM1PjY5m034eexE9qkDI4N6SsPF84YnhFw3uZR6ehbPTacCQ3TCXuI8ihYO+4LrMBuTtB7HpewfKy0aWJoFLwhJE2axX5bDwlhWadYKvl842XTKdkGmMpdSwyHoca4I9b/jS7KimCyimucuW9cvSqIxDFGdsxjN6SFvn8g4HEZtMkdMqRzNH+Vqsi+uu1vpjDFzVfSLEskozFRiXTHBGZeTaSv+8TvYV9y3J0Gr73+hu/JVmUCqqBdX9QnAAKp7MbsqA+4sdbqk9Vi+lujYn+C1Pp7OodQ2iasq9gjo6NLui21Y7FBO5j/e5fkBD4eAqd7vcjXEsAeMGVqOsdgPhDhl1tdAjFy827YzXXbderuYzjlxmawlMSeKLYHFIbT0UMrOwZ9siex9rChXS3oOPvW8Hmp1ZPNTZ95fs6H15mCglvEqlsJKK2pFGiRUwxGm/UN7uN89vrLaPxJU2Nnz5XnPzQ9KlXH+guSVC65qk9uhqNylSm4dqIz3QCofLTNx86uHU2mOKYFIBfb5MvoXFQU2P9KuEaFSqZIALvuwUxyWUE6AdRJAewWJtslqqb1Yu2KwG5Ru3AclonChp/DVa6QLqBbn48D2t0v0WXunhSwdOOnaJfCL/+eDIVfvCwfU3JvPzSF9OXzlLJDkY1+UpUEIT+mgH3oNXJA49vXjOs/JZZfPqBTyZF/Mc6UYXlGxIOpOefyY28fOMRBxATct4MyDT4V1iI0fwogRCLnnlqMkesK9/+Zk5obH0yEvLyOAV53AYfL6Pn+yrgN5nCIuMsz3ABFwo5wTcQo6A7RTcnmQA8jhB0ANNdn3MCLJkS5G7dGw7R8U7G7/e1Yr5cKJXKKzLohsCgiDVPsmBuPldqueXfaR6Z9ig2WsOo8oLqT7YzxZ9eA4m0F5Ai2jjIZvnCvRmjWlmIWKlaKbFTMM/OneuqzaBtt37x7PLVUO0Ofqyy1Kz1tiQ8YpjxohnVJNUy60uRxHgyJuiqmRKwkd7LRcamt+yUJoeXdlcmi7XrS9x+/rv/SZiDuLmAg30tABgYoVx6rnsVa5zHEcDYDaTIkqxIt8AeWJSpeE1TyYAcuXB2ZMSN10swr300T2QyE4+nYz7PjURgEWDjB39wbhPmdgZz6a2/1+T+9N9nHmj7vcFsWdreh0oYBP9eQOdWV5yur3SmUHx3Vod6yMWN59dp0m2C/Au7HL7TBajMS543g5zNhj1oyJ/AAtehPKGGYqk3T9p5bFQytmifb+FYtXMm+z15VJiN2lj13biK5UBKJ889p3B6PhHQ6W8KK6POUp6FtjNUS5eAn/pzlkJpqHihQVR2hjyc06iernAxK8diI5YGdIPizNZ9JRB5VPH54hp7fSFVl3BflhQtK1CtoIost/uPf0sbjRPeg7n7Etkj30CX0Kn+wvYiYVIKeDJZB44HywDmwAkDcnswAu/BcNwknOuJB5ALhrRZHR0Zna6Uc24OBI9W6gW2RxE4PeC2aHHi757vHHGH4+bDCdY3ONjxNBLY85XVlVJuOkc1cTJixkbHlm/HyhuzwCHSBVmbWZEdXyHrF8XV837/Sm3KSP7qe+rjo1KlJOJeKFOwDDNJsBqZ35jonqV4fuchp7Sj5H1FTb3yqc07SUlIaiJPEzHlL+/WIOPbBqn1Hqu33v2VlI6laITK8YNQStUs/4QmMFsP5PKf2kNe/vyBkIf8eQz98cbrOQhffxyreAb07RSmbA2LlAId/KGDEhzc9xhGCSGVqIgAqyMyZqD7IUolmAaEWlXxgQCuNVSeGzkX0Aaj4TBSEVavnZwminQPUSoeuPO34/3WcDiSANAk8UdPk4bTEJ8FqWBfv3r/5dVypZYo9Yq2BmkQyA1Y4KA6QMhzD3G4G3jZJKHgwPfdozo5h7s9KBL5AVfhjp0fSKCBSOq65cWDSP4qBuK1T1yeMCXFSrznaSl0WtZqgYAyWS1rwDmKcp5p8WJIc24vBVlFLQq+dx1K8UKQGWN+W9BYoSSNFQxKEsFAKkILY5PJWESSM1BlrGJ/J2cavsXbuziy/nXdimFNiHz8tZ+5roR0oSAGtLhITCU42iZ2Vb31MeBwkYMHepIdhQBI+u9/wQEBKVKixlUFY/vlnXzIVzMVqL347p9C7f0AxMA9aK1/pgejdAyVhLcxQb66KUR5CkFGUZHRa6ATYMKgDGO0uX5qttupldOJkF9T0T34Hi6VitxKnj29CsG/j0Cl2xpQwgUwKhh2yAeHbHAae0rbxSJpeNrCeP1xwAoiqimo2Nq5VrD8K78tSEY8E9gIRAKRXDiYKgl9oxwWZsOqLGrJQoBGHpm5n7S2iz+nCuAeaWHBcpxk0kqNysvgEizrWlLQRTk3o/NuHZU0IyqRSG3yw/uzByPwaaJKI5YWp5qkbFQiFDNGmR4Djh/ozD31ZOViXeF51Lj7krACNjyDrn8NGDjFAwaeAMwmyOuIwsddEUB1igdQhEQDAejnhqfhCG9SiAiKNayQtyN4dSJ4e7/vg0w9g5bnZ9vNkXK9JLFwFQ8r9Akq7YqXgYV5DA9qtAdnC8dGhmFD+ifMK0TuhANmp5nMyHJwrPr0TCDU2Q5YkVQ6SMjZuWJqIUHMkd2+urTuXC6A3gmlkkFRDo7+8qXgIfmSAgzNnzbGP3Hx+UJkodNeUYSxUiHTDEYFYhBVDs8uhUYvsfYX/mhBwczZ1xlc285lVh5yo8jVMf8B+E8B3Y/e37cqUULoaaBAPjC8ADZMgQ0rRzZkRCSMwwAnNFzAD1gvMEyv5TV2bG6O9BC0cH8uExJ+1IT9vt4oFsZCkWo1yxuHuHsM+0cEiL/KJ6SJmCv1PI7sRrXb+OIlsnuSDrmtkXL7qD64vWpeyG2mx6vjKSx3gpbaqhYMgwbjtidF8Guaim2dCbXPjYcMJ/NAUdNHZxSWCfhp4IUdQ2g3KjsizlS/vlFLJ7Mp8s+JmZ585MZnfnKL+FI6jb/46eevnpMUcyg6nlIUy7Cw9uh4KKgXVq5/zi/mMz7HkpXJs9jenPq9KUjmfLn9wZSPpBOx1LG2fAV8soV2+md59zUFBL4JyS8AIwe+gWSwp4xlAfMtDqC7nKFztBCvDRmNscFAKZp0c2vz9GK+UC7mRgsKi1dx+wRYunKOtxuHOzgnhF251MDHHvBQ10OOptun8tyD/5b2EmZjJJb0+cISi/UOLjdMQ5bjxagl2I/NWk4qkt/v1i3VbvotwpxCMTRWy1b3HiE6nYOLGL4GiD9JTMhnjNF3rdxeGm1oCo5EiBF2/BGV6OMXDYGKjiVgxY5phOlOYe/cVy4t1i8quGX69HhE94Vh9Ym736G3wWY3eTd/ukRENJEC+c5R1O0vcUshvhnkCplD3n58kknEDUhBMHnPaf/S5vrpU/GIz9I1dBPf5Fsh2AtHwuk3z+UTrGTYmO0AiHo4eQQBblfuKNkHmOA1dodafEBYPHIH7wPwQzc1YER1RlUmh2NmyAgXk6IaswwQFXKWiCysfGEre69EGXh5JGaPGkZhqlMpZgU51mMkJUuiGCjrcn55McrUaEEkUJBzbdMKiWQr8NxfpYCYveH4rX797f/zwRW/QW3d8GtagGHLqKTiUlz8ha8roOjU375Q2KOA60tnxz/Tm3z1Ey8v9BSctGSplgJUA6h0vvnrv5FRE1jQ0v/kNyZKU1vBF3GygL3eyN0/u/sd4Q+FELrIOSHUM1JUiCByVwD3E0EeceODz3hv6xrDJ32wtrK40KgnYiEfuogvSp4HXCu5vU83Dt0mn9sHZMdqqNyG317vFPIegve4wXTUPT82P2jqPUsQJ5a7bTGYLo41nPZFYguGnFD83UKciv5KrwsQJZWhjOljY5WxkkzE7HSzEYtkJv26DD4IlUwplD0XpVSukDckIfTlr/2DfWX72Q9+/icjbQWrZjWlCH5TUXrv++6/MfgGDSZWgvnXH7z59LMhLKS/+IVX6pFcxF/XPaOaV//iTzKyGXExYPrum4Li6tKZ/mQCLIs5H+CbeGA+ig4IG8bucc9hbqbdHK3Eo5qClvGyZ7wTu3Bj+KgV1BwGMj81iG2PMQ93mT357g0ne5fujeRev720PFVfOIP1xurL8RCRwGBK8vyhji82z0x2Z647obXNUMRXTStaOmuIVE23dm4GyRvPXt9Yf+JrI9Fw8vl7M8qNcy/s+kSsU+bzjf/KDSXzM4vFWPK960tL+0/ovup6UEtCpDvrU5f9XF8E7v4u+Y9Q18+i6X4vBGWHug12b/MAAhziiHHrcGlBiLAHBuHUSCDb604lXP+k7W6rDDsUfGcu7MmwYZtiSIs8Oupqhio+qj88c/2BedIpScP2hderIKlqqZoi75lzZIkonUh0/he3w5TEK9HdpxKBwtxLSRK7NKKp444oG+/KYb4vO2xiHDctsDwTiQNymqcXk6H2vACMWk34MVuaKWbHs5Paf/vbJ21fHPRyFgewJZUSnCEN+hlerbhz971CAOLkAH2Y629MZhtEkrn+HnX7j9yGBOqELEiCzLUsrxy8kQNKll3hsuwAuS3FgQqe+H9mSKIgiYc/biLiNbxUGhsbKQYqObeGH7evBsKVN3uPGl8ntop58Fl4iIBHzP+4KexVHyD4g9Qnn7t+cPnsckSulxbq444ZxHriA+1a5sG93mfOpdKnOw9g4/n9xSVDWH3glBOSRDlZCgr2zWnbKVUbD1+eyBl+K5hQi3vtdrl1KTGCP/Pgc2eX70vmt+ugCrCh6KmyXX/uqVur10wxv/jRjHrzq7M1hwmRrC9sKkmRGKI6cVYVZLWYYVTXjKACmkjXgtFL3V3kxuubwjL5IrqOPt3XoORIUyHiNZR4P6QL9ZtJiAGTEiUGVuW2hWokEEkgh4hQidBDBUvSoDMie0U83m+/k4kIw1SEpWuDafv90H2XL5xfW1mYneyN1UqFVGLSVoG9HuUDsPzm0U59eFiOBtV+UOqOOvSlcq4zT3rNwQMQbhPvmKmVejxTOifTxPfM+eb53b0bxbpgvnCBCL74iC+S8qdt3U74LX9q+b54UqOltC+bjvqCNomXHBoQlsc6ufbPOYSkHgiLwNIklWhPx8QfTJ7eQdC0ookpw9p8OkvFaP9BJ2/ZVtCSsW5k1hyGlVZyZyvuE0wt6oesUSoTy2PhPDat//W/e5ovpYhCDBdAEf5QPvmBe30A8sntZ2zCJwLcDDMCCBaQMMghjA7YkMu6j8S4tWthbqIxUg4FVAVdGtauIcq4WOpu3B018050So+7PW5XlLDQDzx5US4dt4zdHiv+rwv3iqCuSgqVwNPmmdy9UbEY763lpwS9GY89/v53L4Rq1VZYtGJAv0EpPfT+skH8j606EyohSqL43IogcIHwjfqEEQ5oSVDytgHCQA+s+YzRfDSWSzXmDXOmHfWtnY8X5mpVQVPEsCZothONnDofTfulfjvnL9ZZwC9X8mOLDPP9PJS7+0+FRfKv0Cz62b5aA/vF3edSPDGW4juj2FUH5LbbD+XtiYEcw7xJMepJtuNRri7jMphvnruSrQACDt35oTFwlT1+FbfhIWLehTBhwiyaGZ2plbMSiw61hcvUciHv34H1PeMSbt/BVuEAhoZ4Rf58POaz7ZmE88hVSUrqHTFWDHQ0w5ILQTI9RYlCrj1hWEFBqgcN2Yqn7/S0t8iXcooZDOQY0Jx47CfG/q3/vo2Sn2qieX5VfvNPZTA/FSsBUTLSTLQLpdopzkeBP/33u/+FfIX3A7C98boCFrGyWMJTmKDxKggwYX2wtzc4TI8O/8ARBkf2970LFHkTDrDhloxdHnwI1uO64dBtD21wy3lbhtxL1RODKXwDWeamPkQ/egq/kxwclPAd/iTIHT6L+4fwZ0hEcmc4sl/6cYMYuYMYMzeGu4r7fQejC+dOL3ZajXomHfRL4rCt4TaSTrDwYRt8wOoggQZeDR5vM3pVvH284XhMhAZbLVHf6enZTtzKz1lqvuDkVr+6EDaSVB0L+qlst+bCwPHUlGWL9wX94WhDYLcfX56yTZ9cKGuBhTFL0axwMEmW9Eg+086fqez89HQ2V22Hx//yvaOF86IdJZqdLj/7Py8sWxIVTTNdYpHwyq9hKn1suQoJqS6MZUdPvfJoIxW0oaTwPIre/X3yMYiBSdCAkEcEcCiJ0arnoSgSeD3mrSHe1TgcphNPjwB/OuEOnBTuuI9awLlH9/vqZLdacUI5OnzabQD6re6Q95VzHk12t/dOZob3QAlH++h4fKa6r8K9xAOPvxKk9Yw/bFF9rEvDH928fl+YUIMo1nR6xGfZ5Bk7V7nw9vYjihH2XflqX9NTVRIJNRVCl9pa4sUvX7q0o+IIM6tfnvv2Xl0V3TV/m6qw5nvR/f+oX9AFvuE2XDCXMoRy7nsbwgRBmnP+y8Mqc/IcPwyn99zTvCOJxG2Agnsvnd3stBv1VOL4eT8PgC2gfcKwoPWGj9+k8Yn4aJ/YARXAKgNuAqpQOOqYddpjBAw0kVwsh6yYDVSfKRp7Yn8RpJtYD+qCGF62sJDqPRmn6bgeshiz9TaJfuMwYjEsyFN+QaCf/s9hxWSy4TNS0xWLPOPPtCKVnTvXH/MTDCGmfPTn3yULTBbtJJM2vv/Xfpo7+9krhp0sNusKYZFdv/35t9/+uKWa4uqff2+dsbf/3dv/I44dyx+98sz9k/fvjoONgUgIZbDxo+in+naUEkRGAyCWz7rdhUH+qwpoFR5at8CGmG9v8t4CHWS+BOSCHcgYVsA4HMNRCDM+B/FnDDg2gz/u/MCw/T4vr4+iG5cubm/NzXTbE+PZdCJezGq8lzZs7Xi25xvMTnPgkpz7/OjR5vPxMxy9Zvgom6E6cut7eMBHh0/siPHreJI8j5dylQDWr06nAmFVUnhS1T+mk6g1k4zGA3Z29aWorIpGWZTTBU3GWra5HrLSQcYbt1h6/lAmCQFYsTbuRBMjscLcR+qyrCaIRsjDZaJTYaRp+yqJ59UQY4n74tTIUN0eycZTkXBiZteC2vSMf1JOE0kpBouSvb6hMmW+cmEtRI0CBJbqi2fjpZFYrHExjl/szWs8t1H67m3yL8Ffq+jXNl4fA++oZ8A1BhYRf0wE3pDBm8F+QAwcQMEBbja4InGwB4A4VvMLZE6OENyqvcdHeJoSo21AasbFOeE7vyKF7DocDIWwcIdyhYUJL7IBiKhWvZaGNQJIr+JV6QRIO2FfkIWax3Sx0z75kN9JXdo9UuedAelpwMkL/mBrabd5kZDKyw0t7GTNgM6kTLQmJz76+OYrFSqH/bmJeESw1jRWPWcz6j+IjKhKgqwbWrCz/NTbf2msKvXXXsnZ8UgoGioxEsyfSWVuvnVz6xGGmb5YcarhJXCwcgqI6PXTtbfOBEWsDLhgESFyF2x/E0/1zRbcTxbISB+WLwzo/CaQcsokbkqQbpyO82ckIV0IEwGVddVQdYPvzCAVSOs1DUznpQQwR8uyN5BhoAPTBifZaFh9t97RNeEiEmZ7cEWA43uOPuFHXLV/7h1dEFkGMiz0Yy988prg9zJGj914+Pru+Z2t9bWlU3OzzYlGvVrOpKNOKGCZisQbaD6IhZYn4XCeU9gF3HL/9h4TGe44dI+3vdP4SHZYONgKezt6Ljtu4JPtyqGKPObPPP9bZuyXX46MN7SC/EzmoYgZHTl9NlHMq1IyFQ/4lNz75nFAqi8vhUI1M4CJ/+B6zGzopOBTiTrqi7xwR8zPPrLbCmVV1ogxXaaU+jMLB2qu9/CNRioWUnXnIx+MYCY7Fs0+nraxqjnpUCBENKmoN1ZErCkYhzB/dDn8xCMJTMJMsOMAHwxIrPPsVYpVWaiNBLJQOkRrsrIdIKqm6rwPzwOuBqrR+/8Eovf/CSY6rVALfq57X+98HObjYBQfx74KgOGN4ef+LwrpXYkAAAB42q1UwU7bQBAdBwhqKiJyqUSlqitOREqcONADASFFoEhREIgEIW5oSTbxQmJH9iaBey/9gEpVL/2EHvoJ/YZ+QsVv9Hm9FAKUCIpX9r4dz7yZnZldInpjpcmi+NmlrwZblLFeG5ygeStv8AxlrU8Gz9KSdWXwHL1PVAxO0lLis8EL1trcksFpepv8aPAiZZI/Dc7QfPI3mK3ZV1h90V4ibNEyXRmcoLT1zuAZalgfDJ6lkvXD4DnaSlgGJ6mU4AYvJNzEd4PTtJbcM3iRlpPfDM5QOvmLtsmnAV1SQJK65JIiRivUoizmEhUx1imvkYOX0Q4JCrWuh1UTmhISD7OgHCQ1jW1KTWV2aA2ojj9cc1Xwj1MbPH1Y0bY/uAxk11VspZVlpWJxPV8qOkW2I0LZ9VizJYXXEjlW81p26q6ys8bqLvdYpcXbog+2OqgPQX1MJwiMU08HFQANEICEa6rzQ3F8ss17shvwgSshasCiS0Noc+hSQ3SHPQ5QxdY8bCiaA2gIvSVbJ6isNzXNW/4ud9X3VNUPuoKV7CIrs3vR5P96fwb7I2xH0Ax0SX1dBgf7cGgDSGF0YD/E7GtmzxRxpLVWUUo6EkEofY85trPBlOrwofJd6aEQI8dezb50tE9r19wTGjbi2aSxHjZakIPbpTPMF1jHdd6Cn/9t7Ek/50aLT+jc9peDxzE8RdEwnalQV2yEbxuS615ktAeGvu7F6TmPDmgKOtEqnGBpAnWAxroWEVus0dN2UeZC43kI3NaxMB2d0NY1XKmM9uFJ6N3fMO9OMES5f7j37InIJv0yRDXCK3WvnOIbyW7yw7XHCh1orHAaU7pCCvGUqYARgi2q3ACyEL5CzXWd8QIiryLSf10/uQfvH7ayOR6P7T5X7hm/sHGMt7LT7iRjcw4RjyWxXS41lsplDRGKYCTaLLoY2B7vi/tXgp1KHboyjFWafkeNeSAYBD3ZEl4I46HXFgFTrmDN2i7bHwgvVt6NFXLs1vG1YzJjy/iIyx4/7Qmm4+GsWjlgXJVTrlKDcqEQtgI5UKEdyl4UeGG/iqw9K9WPEb7ovf0HmDGZxgAAAHjabYxJDoJAFAXrNxoPgIoISwdQlBachwUJ9F3YsPMEHhxaw9JKXmpTeSh+tB8y/pHYCQoHlzETpnjM8JkTELJgyYo1ETEbtrbesSdFc7B/OUdOnLlw5cadB09eosSRgQxH76bWutBfV8aUvavepgNBrREyAAEAAf//AA8AAAABAAAAAMw9os8AAAAAxvkyTwAAAADWkUsU",
"title": "$:/plugins/tiddlywiki/katex/fonts/KaTeX_Caligraphic-Regular.woff",
"type": "application/font-woff"
},
"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Fraktur-Bold.woff": {
"text": "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",
"title": "$:/plugins/tiddlywiki/katex/fonts/KaTeX_Fraktur-Bold.woff",
"type": "application/font-woff"
},
"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Fraktur-Regular.woff": {
"text": "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",
"title": "$:/plugins/tiddlywiki/katex/fonts/KaTeX_Fraktur-Regular.woff",
"type": "application/font-woff"
},
"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Bold.woff": {
"text": "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",
"title": "$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Bold.woff",
"type": "application/font-woff"
},
"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-BoldItalic.woff": {
"text": "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",
"title": "$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-BoldItalic.woff",
"type": "application/font-woff"
},
"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Italic.woff": {
"text": "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",
"title": "$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Italic.woff",
"type": "application/font-woff"
},
"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Regular.woff": {
"text": "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",
"title": "$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Regular.woff",
"type": "application/font-woff"
},
"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Math-Italic.woff": {
"text": "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",
"title": "$:/plugins/tiddlywiki/katex/fonts/KaTeX_Math-Italic.woff",
"type": "application/font-woff"
},
"$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Bold.woff": {
"text": "d09GRgABAAAAAErkAA8AAAAAhPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAABKyAAAABwAAAAcac8AME9TLzIAAAHMAAAAVwAAAGBG4GF+Y21hcAAAA2wAAAFXAAACInKbVIBjdnQgAAAK7AAAAC8AAAA6AwEQCmZwZ20AAATEAAAFpwAAC5fYFNvwZ2FzcAAASsAAAAAIAAAACAAAABBnbHlmAAAMHAAAOlkAAGhMDqhY72hlYWQAAAFYAAAAMwAAADYQaJkFaGhlYQAAAYwAAAAgAAAAJAdPA6RobXR4AAACJAAAAUUAAAH4GC4clGxvY2EAAAscAAAA/gAAAP7ppNAsbWF4cAAAAawAAAAgAAAAIAGKAY5uYW1lAABGeAAAAyAAAAeqnxxUc3Bvc3QAAEmYAAABJQAAAX0tsMB+cHJlcAAACmwAAAB+AAAAipKM/Mp42mNgZGBgAOJ1C/rE4/ltvjLIM78AijBcm6EtBqP/7/zPxuLN9A6ojoOBCSQKAE/0DAQAeNpjYGRgYHr3n40hisXn/87/l1m8GYAiKKAOAKNrBvkAAQAAAH4AdAAFAAAAAAACACIAMgB3AAAAbQDmAAAAAHjaY2Bi3M20h4GVgYGpC0gzMPRAaMYHDIaMTEA+AwcDBDQwMLwXYHjzFsplCEhzTWFQYFB4/59Z4b8FQxTTO4ZfCgwM/XHMQN2nmLYBlSgwMAIAWJYS9gB42k2RvUoDQRSFz8xGbBQRLUIk0SbBP1Y2mFRuUoggGDEWEsF0sRFCbHwCS21Nb2XlC6TyHawsTK+1VkGI350EceHbM3Nnzsy9dzRSWXzumN8IvVbPxypGfaW+pCQzozSqa8eV1XTPOgGL70fnSkPsWnOmxCy+BQ2Ip6xC8d88EHxgZ/hZGAY2oe1fuC+H3kIHhpO5O9IZe2P/Q+xA7egVcoEanj/Fk+BZD/uGWsksKIsWIesfyblFDS3GJXVBfp4cE1XdJ3sSFd1YBddUnrVF5hUn8i2MB35JdcbVqKOKxVlfM1/w3OB/wvegZea77ls5/6EsauTde+hD2/qLXvgrDdA37ry3M8P5k3y60/5Zfw7J+ct80As197VHz2rUscFaPK0/tZjVb/1EE6sr0+AtyzoNbxPrzt6UXOS2eedL6Re+r1CoAAAAeNpjYGBgZoBgGQZGIMnAKAPkMYL5LGABGwYFBhYgz5rBliGaIZ6hiqGOYQHDCoYNDFsYdjAaMpkzHWc6yXSL6S7zFOYZzLOZ5zEvYF7MvIx5pYKIgqSC7Pv///8DTVEA6rZniGVIxNB9DKj7BtMd5slIupcyr1AQVpBQkHn/F6j98f9H/x/+f/D//v87/3f/3/J/7f9V/5f/1/+n9XfO39l/e//2/Ln+58qfS38u/Dn/5+yfM39OP0h6EP8gVqAO4iPyASMbA9wIRiYgwYSuABh0LKxs7BycXNw8vHz8AoJCwiKiYuISklLSMrJyDPIMCopKyiqqauoamlraOrp6+gaGRsYmpmbmFpZW1jYMtnb2DA6OTs4urm7uHp5e3j6+fv4BgUHBIaFh4RGRQAuiCDsyFs6Ki0GXK0HmRIPJ0rLKqvIKAmYmJGUwpKalx2cyJAMAhIJtjAB42q1W+XPTRhSWfCROQo6Sgxb1WLFxmtork1IIBkwIkmUX3MO5WglKK8VOeh/QMsPf4L/mybQz9Df+tH5vZZtAknaGaSaj9+3up333k8lQgoy9wA+FaD0zZrZaNLZzL6DLFq2G0aHo7QWUKcZ/F4yC0enIfcu2yQjJ8GS9b5iGF7kOmYpEdOhQRomuoOdtyq3c66+ak57f8bfvB7a0rV4gqN0ObNoMLUFVRtUwFElKiru0iq3BStAan68x83k7EDCiFwuabAcRdgSfTTJaZ7QeWVEYhhaZ5TCUZLSDgzB0KKsE7skVYxiU99oB5aVLY9KF+SGZkUM5JWGX6Cb5fVfwSaqcnzj3O5Qt2dj3RE/0cHeyli/Cra0galvxdhjIEKebOwGOLHZqoNmhvKJxr9w3MmloxrCUrkSIpRtTZv+QzA7up3zJoXEl2Mgpr/MsZ+wLvoE2o5ApUV0bWVD98SnD892SPQr2hHo5+JPpLWYZJnjwOBJ+T8acCB0pw+JokrBg5NBKyhZlXE9VTJ3yOi3jLcN64drRl84o7VB/ajLrB7Yl7bBkOzStkkzGp25cd2hGgSgEnfHu8usA0g1pmlfbWE1j5dAsrpnTIRGIQAd6acaLRC8SNIOgOTSnWrtBkuvWw2WaPpBPHHpDtbaC1k66adnYn9f7Z1VizHp7QTI7i/zFLs2WuUhRum5yhh/TeJC5hExki+0g4eDBW7eH9LLaki3x2hBb6Tm/gtrnnRCeNGF/E7svp+qUBCaGMS8RLY+Mjb5pmjpX88pIjIy/G9CsdIVPUyjKSSiOXBFB/V9zc6YxY7huL0rOjpXpcdm6gDAtwLf5skOLKjFZLiHOLM+pJMvyTZXkWL6lkjzL8yoZY2mpZJzl2yopsHxHJRMsP1CiQuYDh0oaPHSorMEjh95VBk2XX8PG92Dju7hbwEaWNmxkeQE2spSwkeUybGRZhI0sV2Ajy/dhI8tV2MhSKVHTpeYoqJ2LhMcmeDodaB/F9VZR5JTJQSddRBE3xSmZkHFV8hj7VwZKyaG1UXrMJbpYSvLmoh9gDLGDHx6NzPHjS0pc0fZ+BJ7pH1eCDjtROe8bS38a/FffkNXkkrkIjy7Dfxh8sr0o7Ljq0BVVOVdzaP2/qCjCDuhXkRJjqSgqosnNi1De6fWasoluDzDWMRbR0eumubgA/VVMmSU0CP41hSa88kGvIoWo9XDXtRfHopLeQTncCZagiPt9cyt4mhFZYT3NrGTPhy7PwAKmqdRs2UD3ea+2UsRzKB32GS/qSsp6cRfHGS+2gCOeQa++E8MkDGbZQA4lNDTgF4TWgvtOUCLTaZdDgyP2eRRU/tituJE9Kmoj8GynU+6FLqT8OsdAYCe/MoiBrCE0N/Q2FdA8QjRkk5Vxtmo6ZOzAIKLGblARNXwb2eLBpmBbhiEfK2J15+jXN03USRU8yIzkMr45sMAbpibiz/OrLg5TuaGkqHDUGhjMtbCSVMwFNOCt0Xb76Pbmy+wTObcVVcsnXuoqulbuQTEXC6w9zkFaKlQB1RtV2DC6XFwSpV5Bk6TX1TE0MMNfoxSb/1f1sfk8X2oSI+RIvu1wYKPPwRj632D/bTkIwMCPkctNuLyYNie+7ujD+QpdRi9+fMr+Hcxcc2GergDfVXQVosVR8xFX0cCnbBinTxSXI7UAP1V9zBmAzwBMBp+rvql32gB6Z4s5PsA2cxjsMIfBLnMY7DHnNsAXzGHwJXMYBMxhEDLHA7jHHAb3mcPgK+YweMCcBsDXzGHwDXMYRMxhEDPHBdhnDoMOcxh0mcPgQNH1UZgPeUEbQN9qdAvoO11PWGxi8b2iGyP2D7zQ7B81YvZPGjH1Z0W1EfUXXmjqrxox9TeNmPpQ0c0R9REvNPV3jZj6h0ZMfayeTuQywx9PbpkKB5Rdbj8ZflOcfwArcU1jAHjaY/DewXAiKGIjI2Nf5AbGnRwMHAzJBRsZ2Jw2STAyaIEYm7k5GDkgLFE2MIvdaRczAwMjAyeQzeG0i8EBwmZmcNmowtgRGLHBoSNiI3OKy0Y1EG8XRwMDI4tDR3JIBEhJJBBs5uVg5NHawfi/dQNL70YmoD7WFBcAd1kkywAAeNpjYMAA04EwiiGKaRsDA9M2xlsMDP/tmESB7DP/XzEdZLz1/9t/YxAfAOy2DRUAAAAAFgAWABYAFgB+AQAB6AKCAxoEDARiBJgE0gVYBaYF/AYoBmIGlgcuB6wIRgkKCYYKNgsEC2oMJgzcDUgN1g4cDq4PQA+2EEQQpBEIEZgSDhJ2EuYTIhOCE/QUSBToFVoVyhYuFvoXghhAGKYZEhlqGgAaihr2G3QbuBv6HEAcah0SHa4eCB6oHwIfrCBWIM4hUCHiImoipiM8I8IkCCS4JSQlpiYiJqonQieoKDgowCk4KaQp9Cn0KlQqnirgKworUCukK+osKixeLKIs6C0yLZAt9i4sLnYuxi8OL5IvzjAoMJAxEDGQMgoyNjJeMqYy/DNuM/A0BDQYNCYAAHja7b0JlFxXfSd8l/fue69eba+217XvVd1d3dXdtfai7q6WWt2SWrIsS7bUlmxZC94XWbaMbQwejAHbkAAmgQTCkhMGPkLCZkvCEJsPCB62OfDNsAVmCR5OIMR4HAbDhNil+d/73quqlmRDzsycM3POZ8vtqntvV737X3//5V4hgmoIoa+QMKJIQeppJmFEJit1o26U60a+9q7jtRoJv/QPNfwpRNCtCMH0GWSgIrr0TNYklOAda5/MX3qgE4GPwQcljLFnDRFC1xGlXrozPjDh600YdOd6x4tQOhEKwIf5IzILV4IRkyhenCuV4d9mo92q01bNjJiRkMIUli+XJjAM/pNM3DL1XuKlVGEyXZqUrpCCMiEsII9VwgwTmZxRWLeuyBjL0t9/NRCi5KUfECIH2D4WlAhWg5UKC8JDwX6K+LP4Q7CfITSFbu0EprKZ6JAKZCBoPEQwIbA3HfYWgqcnBF8nw090kGKEPGRn3Np3kM/hOzZOXTjqIzvX1zva0NCWoaElxmKVYKvemsMRMyw2l+M7XsSN/ARuv9xEiUp4aYlK5RIliTQlgaDPx35+sUHyCYYl+ob2NCYMWFQdJ5g9eOGQRYP5c4t0P9DgenQHelvH3S4RST5ICcLE5mxJZUTyavBbEj3qcxHi0QlIAT6iYFn2rLn9BKEAgk2/4kJfb+F6p4zRydtuvuH4kfX9e/fs3L66tTPfrE+MFXKp5FA4aLg1dD2+3mChipnjgrCAOQEsQtQXSdN52W4BrWqRcAikxodDc/iCARNe+3AeKBmu918DVXsfW8F8ADfzOfidUH0R/yho5tSALO3enY2zg4dC4RMn4MVvikXqigWHckpQkrdvz4zKnggsVIKw8FI5njl0KBTCP4IXr31t1p5TA7ByG3+HJ7dtx7i8fVvoC1FDuSu64PMRrKeSLopXtlHr1esfkM1oQDk1tOT1kZPvVAKw0npDXcmEBxZiar2yJ62P4W8Ippi+leAVzk+Kps59Bf+UPIdW0GVoP5rvzPowwvtX80iSyN5mY0yiEt0BfJcQkU4gicKfW0Gr4TMOw++baGdnoTZRyQ/JzKwEq5grYhsEsgmUTWKujiaQUQhmOVfKl8N8RJAWyM4pW27muQY3BC/43Bw2GkBeFg6ZkXot2Go2yj9ZO1xPjaR8VM5PyMubAlhTVcrc1UkQTpLxpoe2vscfk32hIFEObvHjAKaq7Gotu0GnFI8R9Ep4f6mEM747LjnWTHtcrlJZxVpRl+XJmuoqahj/sYv5I1uOP5mkWkrFgZDLP6ZL0nWEaRN+gt+34DEyqaC3++FQeyKJZNCBr9CngWYulECTaAntRls7m8GAILBv9BgQCzGCjiGGVI2px5EmSdp+pGnSQcVFJE3anUqu7VjesrTYrg+XkpOpyVJxS1ZnQxUcyueAgDWghBIOpXC91ubbL+VzXhwOCilsIUdmGVJY0VpsivecnMGSTTnxm/jDj515H/HLp5+RwmFNyeUULRyWJgJDQLY0cweMqEt66RlZx4fehwPSlspKxhMd65x5xr1ZkWVls1smha9+7TN+/LVgJpeU/Iev9kupXOalR6OGrknkW4rbDPg87KW6rH4VViXH7z8wEfEnsXsya3SWjOxkYGpSyNjEuZ9RTL6BVtE6ugF9vOO/7mAp6FHBxEyUwVA6liOqYElCBxnYv/AakBMTsIWERITxHNm4wBxYEBULqtyrwCCMYHJ4YKUEtiYJr2AII+mYLIzz/t6vY7J7HWytuX0bRq86tm19+3qjNjaaz6JVvKqCUcEWtcFAmJE0BjGd4hRPYVOQvB7hUtpumWHb/E5wC5GzXVJ7gbT5K/gtMyf4Eo5w/Wg2YAEtM84r8QGLuFzCB7ff6E3fE8gXxrVrxxlR8WTZC8Q8rmOcCqZnx3Q30+caQ/5tq7J//1W7bzZY01dQ/JrE0se2+9XkcIBhZSISDPvYPYpEzbBf1fJ1d3iBfOPYjmims9sjj1fH1QPvCjCPS2Zq9vevc2NdDsnaTYz6iatM1FG6Oh+MrdZ8EdnFiOfSXZef1Mj+RrnV9mPKstl0JlFVafcNLiqZ9dSETLw0vMQ9NroUfxY9I3zjoY6He0WJoBDuO0UDCZ+IuIdDgx7Rj7jrGxw/b0j4wtPgByk3MS/n7vb8rp4NnnX3OQXfCvobRwbACrB3J+FrbtgeICxSkUNKniMKYcfEd1m6FfabEXyrsl37k5yq5v4EjEYhr+iHI+pr9eckRXnwualHp55/QMEalb2nvjR/TffL7/FyusyfY/gQfFdKfBcMnEQY3zAyyb8r2JrDNmLxkZ7MtBoWotlCC3nn2/JJnRLP3pjXG9vrIc8SVXzfcw8qmICdlo3rPrT7+d1/doNBFf4VW3ARPwPfuRNNdaoM7NJqVqgZzFHEJV/CBCT/GFfOg6CfdHciXknEcwJoNLh9SYIUh0F8cVtIf44p3MawfBVP4BDMhizitxutJgNPqAjbVGtZwl5P4TQuV0Gkv5eLDJU9ntBQ0dATxSF8Et85VEzoRnEsVlI9ZYOR2EXmMFGohzwVTCZC8twsDkZyHlxKpD0FXPSkEyXsyY3gOzFLe0jKo8Griy1Q1KRn1qL/W2mM3IDyaLIz7gZeJ0EigBRgCvB+wBsyphKiR4Ap0kEYknYXQsVQKcBJ0W60sxZHuIlN4qyNCbhAwObnMQjKfBYXwOe6/CkALwXw6I8+SrQFjTz6aPY3Mf/b38G8zJVi73i75YzhfTIJ77Db0plz70LPoEd/q84A7loHbfCerzMD4+cNGYM60/4X6cxbLob8MHKjz+IpbAD8HuqEYQADWuBInavP7tZmLs7thvBNpoWo+Be5Y9KdV6UUw1CSV90px/4upxAsuWNxNwiggiwawE9OAz+aOeumhMIn2+7ATcBECwvg5XCx/9bgoNAFL/zI06QQCrRhb7YC8b3Wf0gliS41DO6OYYePSvRBSgHf06Ul8ANcJhSBeYIo3Ul4OHjFO4QZAHlAN2CkayiIg7SHKDc63euCJpB6P3HFAlEsdz8muf4pajDK6DslM2bI1P/i7ZIhsHLl3M/wb8jXURRNozc7cQ+3apJwcRDZcPrhCHYcXH/W7M1GxWyNxw6gquDeDvcXccZH+SugG6gz7JHut3+PYuHWAM1VxxJxrxtFcVQW7ixFQZMdd1VuCPe0gE1AGSzPFMsnhcG/cb8GBqAhIAhWFw40ky4s5dsPP9TOS3goax64M5QHL5Xz6xAnEW8oGB0KhryEx1RfL84fv3abf0q+Z/nGG5fvkaf8N725Vhg7mcBq0VzNXGsuq1cshYLB0NIV6rL5qtzlQhZ2wnb/BnBCET3U8fowN1IIp0AcqS0SMYQZx54ArgjhGIFS6UpAql7JQQAbVpj9FQZHATGILsjJ3orBSSBVEKNsJhYNBrweUMUiLipALkBdZWECHDMQxfUUAUnIVvE8oIF6s5Fnd0UCxJQjx2o+TVLGGNmna0q8+xm/pgQPkgSZDESyYB2kKS9wk3W/0/0OU/2erEvxRgKG+otf6HzvVfjxHOx9Ht13drpVAdTt6EGSw21g6AkuUwfFxoHH0vqGfV+wyOwtEluP9+YBnWKOTvuz6+tnZ24aC+VkFq3gRomDb1s4HDxvAZ6IYolHvWZD9XA/1G4KAuG9rYqLLUVllxxRpYzE8puqnclqZyfFU9GlUem2BxObWZrZAfjnnwyqWPqT5UQC/8fpZaxfYSQ0uawS2bWaiPpjt+/YtpCeLkjHwVhAOJ5Ki3ichZMZ9UPbJmqcZqBfvwaazaD/fLY2FaasZzsqMAuenp1ATII/tyJJhj+3DlBQlrnroxHq6N5v+RWz9ytR6hB9+GV+RUZUFuGR9ZvcelVfZqnDDZlSeb/9DTIVqusq5sojpRBwI95nC7fevbDV8sm5wfCpxrHlBIXwawHDH7wQLYTZXE53x2NY33Xi2luOuu983Z0374tAxCvJkm/lQKs8VJoYZZKEZ3GySOLDGewe9ZSKTHbtuvLKY/Py8GtuPzXtk+gVVHE1aHNh05wKbNjOMFM6Vk4gDT8YYL9JsHP7Oi4TfCtoL3JwfYTJBDiHsISOA/08a6DmXsxzPRsnfHzCwDzXMzU1NT3VLr+m1IRdRyvFEKtgJ8bh6GgeW/8H8QyA4IFEzmKx/xT4dyBOuVkOAWQ3CQsXYkQOSuVhnvY5dUrmsvcDnbkk6vYHXVtUpkg4Vgh/Hy9u9659MR9stUEyRf6n3eI/iyUZf1gHvyVTTZn88DeDwY98MPbmt8S4HymC/D0H+55Gf9XxuajIXiisgGXJMVjjKgxI8B0QOsvMYjhTCDuGbF/muYgk/tZf8m2Qxc7oy663BdH5NczNnB9eTaPpYr5UaM4UNRCuYKlsgPxk+irNiV23RSocsiCDbQXqNTskhXW3RCTVALkRRIUfx48BDGDRw83Zl45uKWciTGP+zdXZnKJnm2nNj2NqCB8PKVyd5XgCfpCty2DnmrOnfrlU9NJWzleszl+yL5KeMRQuV45+j4JV/LuO1wC3C7E9SQx4hAwomHCToNLg9DlN/Jw6VuwXQZymxcF15sXWRZFD+xRYSUmm0rGB9RtXcU8c762SYUJGh3uruUfO8qynwNe9VQgJ7RafIyOu3sLftJvVSiYVNf1eNIpHub+Rc1XCab2IayDGQHFw1DlObqaEbQ4IFnkxLYkklEiTtKw8ATaXD9dCLPNjSinR6XxckWQtnZ9ZVpTcjl3VQtznGsruLsthtx6Lqd7ZjDcksUj7+rt3r4z8s4Fx/BDDcmDHDbo2PV5a3702lkuO5PGHsOzZPbW50MF+8/rO5LiF26rnXgDenEUVtKOjZ4PgWDm0clQekCsWxs+zRm3K9cd8zth6x0NQasjvQhUyKnG45aTaQKc5HMn1IzFBDCGgIJ8UzN533cNxrFy7HsCPpJaVDLNkUJp0HR19GvSWUO3zario+7OG/tA/HeewGkYXuHJDzBSU41Gv6792/79yAJhkydnXUQYs2Gb06dM6KLvjSbhAgD7Lx5xwNLwGAFk6D7hdsMrsr+oDuLizCubA6NlIDtlALod6OK63CqKS/c4HSRaiC9SmZqenNtc2j1eK+Qh3D2EraHOU17RTbLbaLvBQrNgolS1pEdmKJoVYrQHjItGWkuavOzauf3RLwAPQjY5FCz++qrn3RkZxtYnjsXLcG/JGq00XW5kaIopUjM+4QIdVX5ywa16Fw588UHaBiwbTnarueKbYftP9w6ANvm1rI2kis2J1djTjrXcvry5uCwcjI+Ft8XjG40KD+j2OOugvO94FMJxJTOUQAD/aAz9gw4hMjyGezxHkd3StT/0LFpm9RRbxLWToLOLJaqC9s5bDowy84B75WH8RCMx++1OIRXnNHC+PlbJ2Or4WjIRDjj9y0CEn7iLOiWEeADcbCwCN5JKT0DStjF4V37HpVV8xpduWr1qe9AWYnNepJCuFsfl0CMgujayO53MNl4qxC1PDnHErHk8+7G5g4iZ/2O6+2Nr0zP560uVV1M06VTLjqZVhZdZvbB8rrGmmT9qvGxPJy24xo5TF7464W+OwZRFn4a8hD0qh2ztej8ThYMzwQ8jFlTbdq8kA0fxrEkBjoav9mDMESs9h85ENcxcZFrFnx+31elPe+HQpIDLDTIF4syFSwxGTnhevPUOlB5kVn1FJ2Ri84UUisaWmn1cJut/cGMlxGRIxtNhXCf1pJ2jtqxQJeyWJ5DAVnli3dA8+97r+FuFJBzB0WkgILL/j5VZwGgxZK3jABTsenH+ZKYGu188ODS1zOkTPp8PLBeYbCPKOi0XpG8jylYsWawh4zatpDL8bYvcYmuiMgYiDUCMMTwesulxU1yAGInSXxwNIJOaJhQOw1l1n3KRwuzuCRawjWynMEVEgUa7OpmS8C+/SXXrmpePZgIe/2ynHM3jZvUkjTDX0hOfv3ElfhFrVCPtZEP4q+QIaRpvQzR09AwHqdJXIkuMxCr0AhedjpEHcLUnyOjhPrwxk/u3LDBn8ijZdqZRzIqFlQ2ehkBaKse2kEuJJCl58sIKXi5UPcS2U3TPhUeE5M/Hte6+7tbEnANT1lkteXqJUwtsDt1xYUZwomM2ARA5Q1Vte3btzeGG7Xsy5gJ8YD9diey8Ldn/vIhVGXlt7gXyA/L9oCq0Cjt6TwAodxzIjOxCDT2XyCV51ValyDKkAuFXC7d0gSNEst4rR4kKzPjpSLmbTsaFQQGVoCk+5BLpwgFzEAXui4gAjaVziMMMIWenoukgBKixoxx3cdkXqbQdofPhTnzl58O01fbEyHfHh6FPfL9Vfn2GuYE6N/Ghm5tT2ee+6oq4eTUouNjRkKhhrZU8go+iZmks//akvXL2CtUTliplbZ92f+ck107sxSbhJ9xdvXN0SkzVJVjcHFfwCCQ01XJe4VgKqSrX8lSdNxmk0Cj8+DZi7gBpo5fQwd6Q7HAMlge5J5KiA1WAlrCBjcNgnhkWIoU1Wm5HpjMzLLhbjA31zPoGzIRHr2pl8iDHMUrPMR3yAgJswiPPS70umi34nQBtNOaJLfn/31zniCrDxko9p35b0qyVC1JQyrB89qmgd8jiwPCS99HtaSAAVZXKKHCOAU0BgVLeLnJRCH/Qy1T18deS+DA7H/hp4fQhczwdETr2EmuiuTgBAJaB4mVYhdgMHJUn21tM2ZDjSS6OvKQI1MIcKF6zwDawQBImMlhFqTJWbo810MhGFLzWbKk+uWdFBPSKgp5UIFioCYUM+LHJEXCRovbZA27yuAaOvhhUh+u735y69Zucm7x+Pjl+T+fgJZdtyfTk63gybr5NHR2cSEdKaVi5Zw5JJ7g+Aq5P1Azvn1zw08+DOyZZXIpdg/CRVGpV4NNxNEy1YiLdmQIm+b+FPritvFroy3CkOgHVKrdyY0INMKh51qVz65b7020lKM+QjNrsBanJcxMs1i7glNsoRNv7I42cyi++rbNq8Vofo2Q2xlAxiMzRyy+Gjt27aMk4ZcFjSQbhxYHonyPV1ux5Ku3RDU5T5jkTVUV259/nXhLNgojGwXKLXSrIrbfcScN7+B+BtGOV5zMw5CxylvZi5z0me0FuXHEZG+gzsTVgxM0KJWNSEDwyeknt8cyJjyegzzai37CKU4BOwNFEMPBnCqQNbX+t///3q2srqZYm7A1KPNSTeffIvD2z2YM6Tbggz88Hh6h0nBR8OwWb2ksfAvt/W8SfC4H/qAONCGnhB2oPQEuLZjiPIRgieNe688bqTB7hgga+/QOwtKKNNM5PVsVzUDPjQvDzPQ6UiT0NFavXBRNR5gWyO5fK5Ks7lhaRuiG9xWP5lQNVlDCrIbfd//k9BFWQW/4VsGXMsuzU2t2tHNKY8+EYnwH3jg/dSzAIs4+SiyH2cPBDJJlNgz4EV+M/4u+gQD25PO/RpAH3G0NGOL58gSIJfwHHudp2ypx0uHpFhz7wIIQmei26YC+cE20VDjMHlOxoxvDJFY3iE8eTuhft8ecoQ1JXthAj8OHWKU6FRt6jwJ30qkE30E/09PfDAxXfe08l3go+fQkudhVGQexn2KVUwAziPuGPE4MKA0VSWjvQDJdgPO4gYi7Kd5WYhnx8VGa+W33JT4KQtPeXBilDTdm0e5ycIj2w4eDIs8DT/xOO3XwNRsUzdAKUlf3F15pajx26ZjJNiEZwyje6/GQAakW+667GP4uOPV1UZ+3MGqKmvkLnvufvURh2z6gSVAUl1nwcpnrJ59xToaBVd2vFEVA5zqxlCe5glzKtIANeP8LqBRySbBdc2jPvEuOCY1owMFyM1K4Bw3HAS20Um8c5vJ/l4iivbZ94hFiKNGmcKTvMo91rJDnfFi+6PHN6R91pcYffBP04i66WHnFePPPzwIzb/OL941v1XsL8AmjobENtzfKluWR5bP3XL3FjK+Ph0zapdOhvwOw95ee8hL3gceATna+287cfge7Noz5kEqF/va/3W14I1P7QhwPNbD2CP85iu47HCuGv4DOLFrtGRSV7swvZTGX67BmWl701h31uGHzBdSZqqcbJh7fieo7u82OWiujuzJTXKE83CTwdY9793X1BWdg0zWW3NUT3QNkMyVgCMBWy5eBKev4k2ddz18WwkrCMF9XrbPNzce9YwtitX4r1PvOelqzPzzU05CXBHMaSIByQ533l6auuwyfsHrFjBblLCEfJkYGaaqfq3ycSkwJyjXGNJZZTnPPA7cjuHse6TNs16CX1Dp4N1avoVQjRcmqgeOujorjDqsl9908Nvy20vY5Vir4aZ/PqFxe5bZdSz6xHYYxytddwRL3gnj0hw9hI8Tm4HX+mIidHL7YgxYbk9GAX9uoriOCoJmw3RzkW2GsXAl5+FfBo3RV/4vNiSJUrRB1/t8qdEzaD/5MCf57r/lccy/DnpXfCcy+iWjnt5ergYdyOFComKwHMGMLZ9qBeC2sF4lrcwEgj2T1grnMmN4z4xbke0mxenJnOZoUhNtB/2np3nAWrNRr9ENKjFUUDRlPXecmiZC/sH1Jqu7vQYinZ8O1k97Ff9nl0rtkWWLhE6HnhTEqt+7yVeQ3HvXwH8w5k+XLZ1iymGv/vCFyOUBr/QzfpVtlHfMfyrb+t+dCeGKVgb+YfP1sm57m8GbIBj45poFuyT6eY16J4gW6ShDmk8FkmoTZKz9cnp8ZokujKcnQfSuMaVbNCcWUFWlQCSVkIbN985wCJe7UeyOrBj2P/awpDmU5VXn8Aq2bBfQkOebsYTAs1n55k3SXFrL/03EiDby+8c2CHHWgvnfkZ+SL6BghA9rDvcH/Q/5+WTLjIpbE5gsABrpe3W18+MFMtHuDoH/YBI5rBdAGdZvuuiyNxaqR/LAol66gIeI0OMvfNf+ySt1n32wT+N+fBvjPdu2ed2+cJjI82RlUAZgN0V+EgIv/st6eZq9dcnb5n+5FNri5VDRxuriXguOXOLXHQ3HCyJyOuBhyYqoj0dF+/y4CVqR1eHAF5hIuFjAhw7JlZw9IIpYWUFc7ONZqkmchYW+rdwQ76vvbhUIQ7+L3Fmvut9uceeiF69z7H++Kr0TGXT3BWxQioouIflzGfPJiV8222OISr6f6W6mlOTkzaf3gWY+BuAiNfQUx3vCkQ5bng6UQmGvWiwlyySKQT611vdDvZDi+CfHEJOrxjfdI4vBKBx4hVXVn+Hlby9rJPZuMgKKY/3FtOdIkF4fbQ4W9kj/DsXhnrGEJ1jgnaWL+INNErOUomikxbktdU5XGqK/M8soJpZnJLSONLuiQq+bGcooazRwPIWWdFVNzMlpawKuXm2+LojYynZvTTv85EZamha0lNSNI2qgIQiLBS2xKj70McORoPytbIM/gAiFldILWACUvXi7fs3PbBa3HapTtd5460CEq5KPjlJJqdP3dSTr98H+RpHM+hwx8frdQGwwuMmwQMoVgaayOSIk1cdCMEvmBuIw73tZmOqMpzPJWMnmWVX+9U8u/Mu4LSUWAZ0QAaRHXDyiOYQD2XCsZzxl5EPlb3XRwLSuxWqMqM67VLopZdcxcWyPgVi+ZbCBNu5bXWnUrVsiv+mYvmOCZXh7gtembkZbyJUpHe8/aGHbTHFH7xmTMH4axgrwjdOgT0pgpwuo0+d9uC+40/x/D0l6IRjNXiLgo3bI1K/VnDeKrO/Ktor6MedVWIOSYd7q6moFTifYTedwiqg7X7ng5AkMtYQItSnSoVsOhRAy3iZCQ/cFP1lIj3t1PUiPaBdwQJoW0IpAn4rRC6DIC4Sy6jjyeuxZ9Q1XxtLXq7jmU33z15WN3rI25vb2rx+QbpTXr3yvlPD+f27gtaUrLo2reWvvcKQRgKyV/cFZg/L3msbc6GoothQ3FtIrdXDOEEi92677Q7mGdMdkK7NBDULlwyDLD5OPgnx1JaOXgHIgxIDps6guF9YtW1cf6xn3M7c2bx7UtjsVjbTz4SBPkJ03HNQ1MgzqwqVr+Jmu7WF4mFcFu5ZzdFKeGcq0TN1idTOcIUqgA/BKZNPOJFRFJPuL7r/6MiRH/sJzxpmUwHhe0GOPgh6NYr2neZFWkeODCuegCF6aENl2LACCmdCVH+9Vjf2NWKKI+EzlfZIzdpcD0lGTKubuN1oDwwmsZN3tuMLDiGxOrdwMiAJnDFWV2WZh7XZ7q/KzEbzfvXv/1GanVw3n/+p6pcJhzfB8K7X/NT17b9K3ix4FAcj+QXYVxHVz5j6AL5322jM5ozbwhM2U05HFybtFk87P5nGrWAPVYVDlHAHxDtnCW9Mb7Yk000vudwlkSO7sduUq+M0cPttkh79w5gu3Xa7QPIR+Ye/GHebeOiHJMzhQkjp/pvul6WgqgYlMLQzCq9fDAGG5HHQDrT57FKA1+CcB/bJEqUbwLw90ofzHZ7f3oG2LU4vTjOeTQRVcuF+q0IZcE/YSibaI2QgBxsIh9oDm+QjZtgZoM8E8dp+RQ+x+S26W5Vqqwr2bJ5k7jCdm2UhnXwkROs5GnZLk7uoujYswcq5Rd2tSfVVZq77ZZcplcgZl1/p/rj7+RQILmNe9YvYU5fwthef0iGkAbTFyCkpxJ1zSP1M97s5V3ARZ97t4Ytln/p095eT7A68Z9ET4rYFA08ROQO02o4WOtq2QhTi5R57ee+XhaXtQNga8IkBKwJe2VqtHhnhWdd2sGFVyGx7D394/wYx7WYrO+ghIcv65y2jJYH79ArqgiSAJXv25luBGZLsNcIuX07XPYocWKhsHYGQTmGdxYBErzv2G4KNlRWPLF3iMwNuQJSaNuzfocj6m3wZvAe/7Z2UEXB7WFKU2L7545t8VMNE10GZ3/EW0v2UxE+pYFmSTkVyccMNX+edj92hSJKuU8smgfyQvwaa1NBMx1Wt5LMJ+XeU+bPlYtSsUVHCtVCWFfi1mi2rCt5q23VdHwmDJ7ROO80L0z3ko4sLimnotxVBQ2ORG5k7rjRb1C9p996PNaM+bqgKJa9/PSHkA37GI4eg+6ObeP1bruTezyDYgj0HGfM8/rnXvTbEMFEVTX7NfU89Kdn7mod9XS9ig/0dd9AFe6pmCSW9HCXPswqfZJ3hOtg7w9Wb8PUmBPt9FI2Wk1GfGzVpU3QjSmB1c5Z57bWZ8e3igi0QvaMNdj0VQmL83u5LYc3DsAFBa4j+/FlZ9cGmcPfDODikeqgUYiKK+NWvrQny8b8g2yiY3VScGzDsU2kww0gXHhOkn+evZCJGQ3km/eoX1t53n2N4gTyHkjy/HMX85BoSvVqAlXn5bL+9MUJ3l7Il25k4RfgKNpyXlspDRHSDtH61ZhhqKZ0uqYahXX3ACvTIs0TmLbHyi09b/+cxDf1zFrBlC55DgedI8OcAbIbEc4Drv7BGnS1Ni7wCF6XB6Mvy8nPY4C+HYtKnnZzf+lX2A2WlGPliXhHh1ItX8HDKehQ6SxR4hptJFD8hcgG108EBP8VbcpFoOvY4HbrWW+6HTq+WNwtz3uhzNgQSXM5NiAI5d7E330xJq0nwqxhV8gWMKxX+h3fWkxJ7M+8puF+VVFDNYqFQ5OgL5Orco6R47u9fqQ85fEEfckz65ZemeRty+0u/lGObrTbkeMxqQyYofe4F/H38QzSFFtF7Ol4dPqoNCg/4WObwNsQrLAwGiCSTEwP1YQgQDtINSYX8xZbBgl7TkXDZL7PKGFwF6M1br9UW64vlcntCdME5lUwmuuwbPDc0ePanSuaxtV1RrW3XlVprnih2+ImX4uV9izp1gXGjIHW7jz4V5NZfGouGTDZ0eWWmPL5pbMsN3iuHa57bgqTAcLNaXtCJutdFZZ6DxqU3ae9+l4i11VDAyIyNjm+tzHkj7Ntzo2aWaHOqazJAebzQOvcrogt5GUZPWHkYcImUhLFMhxOwcQ0wgSTtiF84zGta69avJESKyel0E+RGBwFcOY1YTvvXhjUQcVgLnYYtscS3cYmxYYnVilUuppNR0+dWJBTHcasVq3yxlBy8CoeKkf7ZLAUvLbaUoDwxLtJW4xUBo7T5vf9P9wvp8nzY7wluyoy5KjF5Q+7t1fey4Z//46n0SPqyPZlyTPhWkMOvghxW0Uin5ALR9glo6/Tv+XvGFOSjMjO+mSt72zkClsYh4RkFfvdScbBoDtdE8lMUtEBEit8kprK9XpEpeAYm+9P1SjQf1KmRMoKutSU3BhVWcWDtymd/+rcBHArKjI2W+MmTeNBnjgynFjZ71Ql4fBc9IMlqTpyJhWf+Z+B1DrTnzy1dCZpglzxYxiPDwNQctlh9/ii1OB2yYh2Li33Fso7B9hmdPn8JT+g54aTgc9rhc3+FMbiCx+f50nTZauApsn5XYxqfn4AXc2VRbGjaBfAwPj6/sj7RiE2e2DrjAnAsHXBy8ONVKfaRfG2slBqeGPLJbLjenrvv6vZVBeXuUxwhDySplPhHlhZKL5hDfjOyLGLr1Llf4b/FP0BZVOE9GjmwDGDhZV4uwb14eQPn84VKsTllH1Dpexz7JNkGfpeKVouXEq6nvmdU1I/E5EceiQYSlctWmQy8hsDr0itf+wa8RS5Vk0Mx16d/8mMfNp8qMUILS95QE57YRfdSWSnec7o2HoxskoRPSsKP15IvoGn0qU4ggClOiqYMGTUwkyW7mygpAlYiTnjzE71WWRZ2AhiUOWyNS/xcnsyQfGxgeW9J9WWW+PgSg3GuD8yKcbuCaNoreBSsF5qlQmVzCNQzUQkCrKoLftdadk+hcNMlu6c1PEjRfnt7Ppck/pDOkm/FKvNJo3nup1XqSo6O6wSn8i7DcGWTPGYaH4NwUBvGfxoOkLHZ6K0a5mfCpgDkETWZZgvzlmv98z+3g8KP/YU4I2mcq5EI/g7aJE5JXtbZDbOMF/vZbBwkqIlVKnG5IGCMj8HewBRa5KRUPYhUNbqGFEXkEGLSzv37dq0tb16Yr47l0rGhYFbjBZsG7MzBmFZXadlBKNZh24iNvlivW8Y60AU/IqKvPM/PMNKBg6n8UC8s/taBlrsxp1CJMaJRl7mQ6DQOrzTBhx+8Vl3b6WE37w1M3bklN5xPMU9IGfnwFWZ0ohSpjLWHD6QizD2t7L9MHsJjH82wGNiFQpYphLq0Ume9kjfd0oiHR6UTkwFzaYtCUv7pQnnOrceS+aw6Fq20wHHVW91vpLJa1Ii53TEIZYiVp2nCjxfBNtXR3o5/aoSIZCcaTg6krSJWudVO6Pr7OauIVWvdMMETVmebM6PTWSsv6oCMXmTXLJUdOWIXreh8ZfHoyqqIuqTquCTCbeZxm+lEVhYBd9+H8HrHm3a3F7X3vcdKdPvV935ADipyMDYuv/51Gys5Afaw6KeEJ/0WOYtiaBzd1fGEDECr4/k4tSB70mnxW+9du+B3Cs0DlzKsv9ylDOsXXsogug4qw5kkfGUkJcoiKTkUCVmpYqu/j4d3dXphtfA0cRGFl8Gl0C0h2IzuU9W4Z623e0eXyFkwU6A7MkTASc3tcrnlfC5Mcfe/O6WgO/vJfnLuiXN19FOgQRC10L1nfDKx4GrSOhuE+z0VVn/fIUth4k63Kcc5FHDZYBapt+jCed/g/Pr62cr0yHDGEo5+M5nTxUwjdrZ8INofyMFw0HbNeZVdIt81Gi/rlsSMTamyzM8t4+Abty94eSv8ae5c5AXZKoXwFy++GA6ps//m11xoeGomEN73wAvamzKKQpeIXdtbhB/Pg17MoqMdP2gcadaKPChTUK8X1KrvCTI5qY/Bwp9IfPdyIlbhrzdmiCxUtblpr1Xl9OFRXMHibDQAlFesdFrG14dD3BLh5/2qFtWzMS/pLDCTcYko5ISCFAtCeebceYO4PcpMm7no+3cfUIkZkLCO9+9jEXnT3Pnlzo98bFbP+cGSghH1KNJ78U1367yG2AKqfPV/XR28daEMX7wODvaJToDNX4X4OrB1gXdGoPnaSCrsYqTXCRTm7QPooMIzKf413nJk1ykvHOcZhY5enCnNlKbBOHJvJ+DNBkPF2XChkbrYmNU/JPjz5blbb4nSueu3rbCenQI51CqTCVDFlx+RI6NjAg4/cNmauq/dUd7/HpsA7/+AnM7FUn1TdsEA/mO/zjv1o31bjr8NvHpVx+tSuLC1KkHap1OgJ3/+gUpv7SIzhrhyRcTQ+/koOdgr8p6dGZ0dydlVL6c/o9cx9jvY+qaz4yHv1OaJVjgtvbKxx6ftTZpJfdQdTM68sr236n2Zcy8QBphRR+nB7jf/ed1viVjQUGSkY93qfuMWxlKwcqNKrdpTxD7miQO/uPE2Y1x7+t3EFS7GF30utz88Vgn73fqzr75XxUN/++wvC+WxsHcqtTbX9oXDvrb1LK1zC0QHGc6C9/n3nVCIHyEoFgjjhpfxZJdkV+JTKoBAIDU4IyJQIJddeFKuTwFReh3ixTjOCv8aX+vEaxdZmRZlu/5Cnl+82MpO7uXmgWTr1iKOEKN5iFJGyrlqvhqPmhHDBwKWxQCbRBR4oUL0zqPwKZpTwqYdD5bwlq21vvCPjcthpm3dASh6e3n0jxLzxRGWKEzFzJI+dvSoY54uBxFgKQCc07NveDot4zcMvSDHhou7tu4S8dUC/megbwk1+O0shgpGfHICIqiMaG5nAlnbUNDJHvDtBcjOcrncKNeHh2dKBZ4+sCPFNO6nnw3/4JE661XQvnml3aySfPExoktbplyGOlWR++EOyLLaWq6OXPsP+0KhiWrJ40uGn/2egSc0t53A6v777rcdOT5+nTIWnMSL7jevlkcq3wr4PZbNxcdhXwX0to4vFASCywQVogPpxRBvwwC8e6IHdL29k5cXzhnUUfchZ85SiYH5C6f6SGb9zHRoLGeXTRzNFxcgtKxTWDy27ktCS46MiEBfCXZK2E2ZS3O1dlp6LSIAW6+TCVd6XMbKtQzTmRH5lpsG7T+P/d4KeryENnVmeE9DFIMZ38FbMIiETvT1mqfenfAPo4VNzXo66fOgJbzES3rtmjhS0utvt27d6ScDrPaDlDKQkOzl5H6wVKL75KktpZH9db1VV4lIDHjT7UoqnmU52VQNxau52erJyOih3dbdOkzKLl02lnBjA7x+A34VqyZVrEyBHgv7InEXlTHvpJNlRaruuT8ij6gyv06H5Qt83yHY9ymyC82hY2dCbp667cWM/IC2pPBTsQc54hZn9NghqzuQn2Lm85Sn6gmS+SHv/ux6JwxSBUFJNh01Da9LRXN4TrWOcDftikKzPdB2Nxjo8fKY6BIDyOYldsvKPN4cA64obsUfwODTR4e5CkxNq4ahTgMWc/tKKZekahqlGohQfVKR8B3hqE92M9po2B6/VrPivev/VdLvplFw18W0OPZanG6m/9XtQg4a514A3/Y1VEPv7rgrGQ8AdglbWCxi3RlmQ3V0CIOW2GiMQ1rTmuLy4RW9Kod6Z57yzjQ6eOH04IwxOGNXjYeLiVjApzJUw5NcxHgzS1Ph939YmL5fV7SOPJHGec1PefxHsTBWW8cWV1wSJ151XOAASR0NKw0/Py4Y4JbEtiljgahP20RGJ0J/+X4brP3rT2hu4p11vfVhJ4cCQD/ACyuIJ8v+Bug1iradiTr1xbRTa/GvbTi3xMcIOjlYf7HeWndkzK4VBrPUvJ/LabqzQBPz4d7VPlUaczOpWJbCbryuj2ZklymP+P0eRubTad2UFhYlU/e4C8Uofkzx8KbvEO7+l/ybrneHwSoCqtO+fuSoqEOGh0fuuGu/XTv6JuxlAV3VcQGiCRDZKj8m++XH8zG4NYzIyfOqkvaIwN+iLLmANg1PL7adsiQZqEoKfl68KslTJA4tGlYVqk4+F8Q3UleYzW8GvM2GEuBSU0OSarKRURZ20RtDNFOREtqKuiDptZhkatJaqUxcQ1IRf83lZ91Xs5CoKLqP3Djj8lTvuZpZ9ViGH5LBXBKW7v4q9w9aHIbU7rP49x6RAOBa9ME/BPp00GUdrT0xpEl98ojGyvOJIwYHgpOB9xZhtGZ9tDQxJQF4L4Z4XCJ6crzUOt1hH5okZac6yQWBlyX7NUkWFokS/MNUaULVfMUxQjSXRympimuqRn0Y77kEnhDkjU6m4x6ij8S2Y8XVnjCkdwwPX0aoaVIamlmm1OMP6wu6wq/tAMGWrj+O8ZVXS5T5GMQwvlbmOJWY7paVJ/BU7VoqW7m3c3Uh+y20vaONxg0i4R49Ag64wqKvD/SEN63xQXHtRW9wvcPvn2mhxszIKD+dx3flteqqViTatBpm+VlGO0nqVCZD4VrvNgz8dHDXPhy6ZNIf2ya74PdTpXJY07WrrjLo6Kgc1v2VIpjqloeCGJRADALSz7u0vqpLvqt4xc3jCqfc+cS3v6d6NJ6zMYZuP1Jm2N38WJmJajPfbxp+fBb2O4wOWJsMb6iZ9IqO9vWK9gG8YxvqkReMCo9/prG9LOp2uJcLHuiQJ2HnpFh/Erv/zGMyg6p+infKiuJm+Mef9sRDMfkTH5djMvHtwHcT5kpqmpfxu+dc0bBCuj/AJBgrKISoxbBGgkec/tqn8VfxAcA/Y50RxG8m2w9ugYpmDnGO9RA8sCSObRZQoTCcLwgQx9W4d2pFsSvC4pSvpbAiAYy/yPBizetNFxNeMPRM3B5F2Nz4UMRMWEP4gMpal1A1ERp1MX6JlEK91c2qFgmNairH9QfJXvx1chaFUQW1zhhOHsXWMJ7+EE0q2NIw5z2/YuBMZdOwXQ/l/fkhy4ZalWsgo9m3tPZJ9jw/DyvXpiIQuvunRvyKBiiIfUP3SZMTzIBQWFIVY2TS7yaniceH/bIZ5HcIME2alHxjkQgT/iIYYarCjxiERFzyBInhT4iYPommexHihvZNcdfY+YP8trEzhXJpj1PRjQxWcpuNiJ0GheF/m52mHqkWH96j5hrp4c8kM+lUIpsn70lgb3BswQc/x2O1Sa/PHPIJnn+fRPFXxXmuSds38dE7RNKbE7L/ltNRXHE0hMIrvD3A7gC3kYl1Rr7Gz87iLyoYv4/iXAJ4LLE9/HpHvEzOaPzQ0UOY32pKZFm7m9+lwz/+Lec6eOHcT4EuQdFW74RBw3WezegxR2SB+VnV0luukmkuT9kCxbRRl+jj7G2i25Y+KnJhkpM/AR0NoK0D+ZOknT/xO/mTfkqlf/Sn946nVP5FORX8iYvk/7CV/4NnKaK69Qh+p34iIE4Mi7uybAjgDK2fjlfO6z0ayMsJWvNiWsvO3t16firOrTEms2Razqg8VYe/cn7qLRvXsRSghjrHM3Po/7Ca+s34l/As74AYHkIkXfQY8MYdCjSi9IaVleyS1VbAG1MjtTmc5mXFeu9YQq874+awKbs0sHRjve+k7FWYNFuEXA8W6I1uXCjCl8JXyOr9/ALGBxiXn51kEv8N+QPwz8OdoscFcsxv5OI7R/yONivXitFucfeXt2npAz9Cnod922fI8b/j57ufuuUKIqQSf578Ab+yhkIcAs5IHCdDl5Jh/F1Bc1v/7N65w8KUoX4z3WGnme5MoVTKWpsXWuFY2IZVBrYk5NJyBByYP7hzLejHmjtU2VNe21XcQ95W1jRe5+elfk0rrpq6bgod3Eb2oZ+JPH37dAgP3HgmlEGYA2SZA/utz7nxLIaG0qJbKKWEIv0su4W+v0kUwgQeoCxwc5Cfa/PLTXIW83BDlpiiyQHNzxQfi4RlHy+kgxr8N7CTf/8/ayfxK9pJrPyLDCX4RlIQdrKAVpxufUl4w2t45+NB7iepMJgXGffZZyH/t3hNcuYVvSan562g11+BZ4+gcbRgw3UiDjPyBnKbsxtGBHMDJoiGOW5WMmn41dAQc2w+vxmy7Nw/3Ieg543Wsc7KI4TkC1TmIoDBwy//5sIh2IDENm/lbQWUuaeNvMb9xMXG+meAHkMpxB6LUTwpDLODkMTh+Y0Ns/wQAH6dlScKhGh1aO9oqXcU7I/65wW9Oibd57vPD9Rt0CaE6AFxJqyK1NPwqZhMVrCTeEVmSMmPEjYqlXgtAQJ61GyZ7RpRQtZx7DJ+rbxtNqL7dH5GKuDWR1rL2/ZesnfbcmtEdwcINn0QAnww/PhjePbymGgNVQz5pXd5wvzi77BObiNDb6TdPxgHOj345KJ1N/LCuZ/RKPkGUpAJT+U6W4h6wb5ToIM/mzHgv+LAZUhc1u0rBDakiUE3F/BN+ET3nd1H8a13HB5r3LG/kTbMQ5L0bO/w5V3WK7wP3919uPuHB9/4hj9c2VVNjM3e/Mgj+LCIfkcrzoGXyqhoDsNoBAjHzz6NAX/8GPiD27OU13HFWXb7+BtvQBX9pwPoIQBYVtHduVQugqMu+oTGjEqTDrmk8T0u1ljRiVfWJwtepj1BXeQ0J5Dy0jt1r4BXYeW92NyvzX72pYjsBXsjK16d3KLwY1NVeJ6Pk08CZm+jy4Fea9PjWQMBvUDfxJmHnFMTHGi7VkYxkzdeKGff6d5uUW5Vzjvlmy1aVzO0W+SO8Lc634xobhmHKeGtgDiB4/2Tq90o/e53HBJ/52NT/FJjELfI0/nM9yKap3f0t/sfu/9JXNwAUgoKg1WDlUo2uCgUWYDhB8TrfEHcHiRTpo0XA92fwlImVli3OBRL/JBa/0zVYygDfPFu0Btj8GRYdqPmkJL8Moc6/8hBOl/uPt072hXCwe7Pu88O5hN5v+Z/EPeRscfyPvjeYuEC2ongtukQePBIMPAhX7SQH96Mt0Z1P+tR6N92vxmn5NV3NhZvh1n+sEcdOjPD3X37X6mhlfuso9FZ8URKQmPy7z1MZlbucWmFxIazwvSbmk+P77XioAVQtCj5OtoCz1xVOK3sSwdtIMZDTWGmrdsH8iX71qKNtasmROvNXjlGOeDTy1Pr3qh/az7gJjQwHB4vzE2WW7rvSAzjVDhq5K0Gd9G7z8tW09TllbMEx4iqeIPNckMnvu25OvGtjUaCZmhlNOhVvOFgyMif8n7pCZvo3zhxBDON3u0Bsx4Ney2bYfNgFm1De0EHdq5tmstym4EHEo8p3ONJzovP6zSB/Tk+vcYvmARB9/eu+uLpmVLZ4FkZfg/HlWRqgjOC8ozoPfOzs/P3EEXClO9tapJfr0hcMD4zA+MucALAPCkwkg9GJlT8XaM8xm8H1kDDuUSVSoDJO4tHDi91vBiXSvYmy8N8uHPN0QU+PDwc6A7hMcW/eX4xX+ToNODTu9/2TFS1FVfbkkEag/3vBX4umdwm9S9csf7ND+7WzkVZ8tjqsz1iueXBXKPpJB6AIH9t5hMxlV/4yBLvdZVYb7++LyfA1TGqcotAlMDUrDvvArAre8cM+B9EEUAwnohkm3xg+RX3hERO+pJZDXvNHYu5j45KSrls73x4hOS/lJ7ZbnrBJMg+H78RIDCd2beW2JX2/uQndp7yv/yEJq6Oru3LLPO+UTQF/P8p+Iw9sP+Sl+/fzr87p0zKjvkCuszh3t9eke1d7caUCy/YdDCeVWN66/o+zVUpebwx+d67efJMDsIjDxuXhhpF7wzN4LG3X9aYTYen28alxrAUdC7cvPduQyURPd1QyF5yate+Qn70qn3VyUqW0yOcFneo4dLyZHj/paHgdyZTN26Znx/dvj274f5NLws0FjMrt7Zc2cvXLB1G6HlSxKuv1JNr/JaeXJzY2JTrfK60Bp/rvdjnNnPO52bsA5cZ/qGSV47F5Jf+6aXf2B9KlBzvbOZxzh78OXFHeQQtdzwgzCgU5Mf4eqeHvMi6Pf5q1A8HegMCpvFwNYIiQybPHgbLzQ09C+IqJ6bsZ+Byezc1AcST8OfYg+1273YmiT4IEc7/VXemE/QI/hxRbVx7sBMoegHCVkajQ5yEap+EAdA+RWZc+a6mTlR1/qAgZdhGvOPD5XTKIqr68kStX3z47RfQ+obfifoX48f///e7cBpwBfslv45V/P0+svX3+0w16+Es/Hccjx3n/9jrxi62rs7XWf9YOoxgFV/HHgO1tdbwuf8BMRqSaQAAAHjapVTdShtBFD4bY2pDtQrSQi/sFEpJINlkozdGEaISGgyKRsSbVsbNxF1NdsPOJNGLPkIvS0tfpi/Rmz5BX6Pfzo5oxGqtGbLzzZlzvvPNmR8iemHNkEXJr0nfDbboufXE4BSlrTcGT9Bbq29wmuatHwZP0uvUvMEZmk99NHjaqqR/GTxDrzLrBs/S88wng+confkKZiv9FKNvOkuMLVqg3wanaMp6afAEvbfeGZymnPXF4Elas34anKFcasng6VQ7JQ2eoaXMM4NnaSHzweA5msp8pg0KqU8XFJFPJ+SRIkY5cimPvkJltGUqauTgz2iTBEntG2DUgqcPS4BeUAGWhsY2Ze9ldmgJaAszXHPVMMepDZ4eomgj7F9E/omnWM7Ns0q5vFyslJ0y2xTSPwlYy/VF4IoCawSunb3p7CyxLY8HrObytuiBbQvU+6A+pCOIjhNK9EKL62Ca74vDoxYPZEtEPgzrEN+FGFoPu/jWMQywgriPsBqh12DrilT1Ku6iL17R1cNA1cPoRLCKXWZVdiNxMUn3z3S3hx9o13iXQl1ZB0odWgFSaB0QDtCHqLyvVxXvy1B7LWJ36EBE0g8D5tjOClOqwwcq9PwAtR069mL+0fIeduQKDzh0Mc8qjXSzcYw4uD06RX+OcbJ1a8jz2MM5nufMePExn+v5Csg4QqZYDaM9vZq4XEN827BcHi9G22Do6eN1d5HjC5bFfLyFcoyhBdQBGiEm0kyJRxe9q6smTdYBcFszMq1M6OgGnkRGO6iO0Cu/Ym6OMcR1v/2g2WPKxvMyqBri78PO6Rjf2HZVG64z1mhXY4XLldW7o6CnSiU0Cba4Bn3YJHJJzXVZ7RKU16H0b89H4db3g+VWR6OR3ePKO+XnNu7nWv6+N8XEnMHEE0sSV8iOfOWxPSFFNBRtFt94ts174uZdt7PZfc+XiUMr7KgRjwSDoeu7IpAIHQRtETHlCdZqNNlOXwSJczNxKLBrN9VOyEws40Pud/lxVzCthrN6bZdxVc16SvWrpZJ0I7+vpC39biy7tFNHzf6r0HcRPu7V/QN8pYF9eNptzckuQ2EAxfH/d9vb27k1zyLmWbWomqJ0MBSlLTUtrhC9iZakbG265hVsrY2PgpjiSajq0klOfquTg0Qh3znc/JfzfAUSOvTIGFAwYsKMBSs27DhwUkIpZZRTQSVVVFNDLXXU00AjTTTTQitttNNBJ11000MvffQzgIvB/K+HIYYZwcsoPsYYZ4JJppjGzwwBgoQIM8c8CywSYYllVoiyyhox4iRYZ4Mkm2yxzQ67qELikhwXfPAkdDzzJfS88sY7L3wKmWthEIowCpMwC4uwChtX3HDLA4/ccS/swiGcyllGc7n8roJuj/fPWZ8cVtNpVY6nDk5VQ0RN7+2rUlKTopoc0w7TqpI4yWpHxxldNKXpolntdxYMhQJFg0VDPxndPugAAAAAAQAB//8ADwAAAAEAAAAAzD2izwAAAADG+TJPAAAAANaYKxE=",
"title": "$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Bold.woff",
"type": "application/font-woff"
},
"$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Italic.woff": {
"text": "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",
"title": "$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Italic.woff",
"type": "application/font-woff"
},
"$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Regular.woff": {
"text": "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",
"title": "$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Regular.woff",
"type": "application/font-woff"
},
"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Script-Regular.woff": {
"text": "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",
"title": "$:/plugins/tiddlywiki/katex/fonts/KaTeX_Script-Regular.woff",
"type": "application/font-woff"
},
"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size1-Regular.woff": {
"text": "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",
"title": "$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size1-Regular.woff",
"type": "application/font-woff"
},
"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size2-Regular.woff": {
"text": "d09GRgABAAAAABocAA8AAAAAMHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAaAAAAABwAAAAcacggPk9TLzIAAAHMAAAATgAAAGBFYlu6Y21hcAAAApgAAADKAAAB2orXF4RjdnQgAAAJdAAAAAsAAAAMAAAAAGZwZ20AAANkAAAFqAAAC5fVFNvwZ2FzcAAAGfgAAAAIAAAACAAAABBnbHlmAAAJ2AAADEsAABaoDunJb2hlYWQAAAFYAAAAMgAAADYQJNkbaGhlYQAAAYwAAAAgAAAAJAl8AYJobXR4AAACHAAAAHoAAACsfckCBmxvY2EAAAmAAAAAWAAAAFhqbHAgbWF4cAAAAawAAAAgAAAAIADIAN5uYW1lAAAWJAAAAx0AAAePHshTGXBvc3QAABlEAAAAsgAAAUK6cFolcHJlcAAACQwAAABoAAAAf+LQSDp42mNgZGBgAGIWp9Jj8fw2XxnkmV8ARRiuTfRWgtF/hP8sYt/DGgDkcjAwgUQBPbULpAAAeNpjYGRgYA34s4ghis3ij/C/GvY9DEARFKANAJIcBgUAAQAAACsAvQAFAAAAAAACAAAAEAB3AAAAIAAPAAAAAHjaY2BitmecwMDKwMDUxbSHgYGhB0IzPmAwZGRiQAINDAzvBRjevIXxA9JcUxgcGBTe/2dW+G/BEMUawBynwMDQH8cM16LAwAgA+i0PsAAAeNpj+MVgxAAEjL5A4hcDA1MowxYgVmbWZrBgvMHwAEibA2kBptkM5SAMUsP84v9v5hcgXX+EgViC5R+DBQizLmEwB4rnM+kwmLPYMJizWTCYg9nhqJhJgOEBEAvA6WSGAiAOY30ONAOKYWoZdYBuA2KGFAYGAINOIi4AAHjaY2BgYGaAYBkGRgYQuALkMYL5LAw7gLQWgwKQxQUkNRn0GWIZqhlqGRYwHWO6w8ysJKgkpaSndFiZW/2lFpMWixbb+////wP1KDBoANVGI6llUuIHqtVWOqDMof5CiwGs9i9Q8eP/d/5f/7/mf///vv85f93/Gv3lvcd099fdV3cj74resLymfE3pmqKANtRtRAJGNga4BkYmIMGErgDiZRBgYQVTbCQYz87BiVeei4GbgVwgLMggCmOLQCgeErTz8sFYAO5wM9cAAHjarVZpc9NWFJW8JE5ClpKFFnV54sVpaj+ZlEIwYEKQLLvgLs7WSlBaKXbSfYGWGX6Df82VaWfoN35az32yTSBJO8OUYXzPuzp6d78KGUqQsRf4oRCtZ8bMVovGdu4FdNmi1TA6FL29gDLF+O+CUTA6Hblv2TYZIRmerPcN0/Ai1yFTkYgOHcoo0RX0vE25lXv9VXPS8zv+9v3AlrbVCwS124FNm6ElqMqoGoYiSUlxl1ahGpwErfHzNWY+bwcCTvRiQZPtIIJG8LNJRuuM1iMrCsPQIrMchpKMdnAQhg5llcA9uWIMh/JeO6C8dGlMunA/JDNyKKck/BLdJL/vCn6SGudfMiK/Q9mSDb0neqKHu5O1fBFhbQVR24q3w0CGeLq5E+CRxUENLDuUVzTulftGJk3NGI7SlUixdGPK7B+S2YF9ypccGleCnZzyOs9yxr7gG2gzCpkS1bWTBdUfnzI83y3Zo2RPqJeTP5neYpbhgoeII+H3ZMyF0JkyLM4mCQtODr2kbFHG9dTE1Cmv0zLeMqwXoR196YzSAfWnJrN+YFvSDku2Q9MqyWR86sZ1h2YUiELQGe8uvw4g3ZCm+bSN0zRODs3imjmdEoEMdGCXZrxI9CJBM0iaQ3OqtRskuW49XKbpA/nEoTdUayto7aRKy4Z+XuvPqsSY9faCZHbWIzN2abbMTYrWdZMz/DONHzKXUIlssR0knDxE6/ZQXjZbsiVeG2Irfc6voPdZEyKSJvxvQvtyqU4pYGIY8xLZQjdt9E3T1LWaV0ZiZPzdgGalK3yaQlNOIr+RKyKY/2tuzjRmDNftRcnZsTI9LlsXkKYFxDZfdmhRJSbLJeSZ5TmVZFm+qZIcy7dUkmd5XiVjLC2VjLN8WyUFlu+oZILlB0pUyHzgUEmDhw6VNXjk0LvKoOnya/j4Hnx8F3cL+MjSho8sL8BHlhI+slyGjyyL8JHlCnxk+T58ZLkKH1kqJWq61RwFs3OR8FCfyNPlwPgo7reKIqdMDibpIpq4KU6phIyrktfYvzLQSg6tjcpjLtHFUpI3F/0Aa4gD/PBoZo4/vqTEFe3vR+CZ/nEjmLATjbPeWPrT4H/1DVlNLpmLiOgy4ofDJ/uLxo6rDl1RlXM1h9b/i4om7IB+FSUxloqiIpo8vEjlnV6vKZuY9gBrHWsRE71umosLsF/FllnCgOC/ptCEVz7oVaQQtR7uuvbisaikd1AOd4IlKOJ539wKnmZEVlhPMyvZ86HLO7CAbSo1WzYwfd6roxTxHkqXfcaLupKyXtzF44wXW8AR76BX34nhEhazbKCGEhYaiAtCW8F9JxiR6bbLYcCR+zwaKn/sVtzIERW1E/htp1vuhS2U/DrnQECTXxnkQNaQmhtaTQUMjxAN2WRjXK2aThkHMMiosRtURA3fRvZ4oBTsyzDlY0Wc7hz9+qaFOqmDB5WR3MY3Bx54w9JE/Hl+NcRhKTeUFBXOWgOLuRZWkoq5gAG8NVK3j6o3X2afyLmtqFo+8VJX0bVyD4a5WeDtcQ7KUqEKqN6ow4bZ5eaSaPUKhiS9ro6lgR3+Gq3Y/L+6j93n/VKTWCFH6m2HAx99TsYw/gbHb8tBAgZxjEJuIuTFdDjxdccczlfoMmbx41P0d7BzzYV5ugJ8V9FViBZnzUdeRQOfsmGePlHcjtQC/FT1sWcAPgMwGXyu+qbWtAG0Zos5PsA2cxjsMIfBLnMY7DHnNsAXzGHwJXMYBMxhEDLHA7jHHAb3mcPgK+YweMCcBsDXzGHwDXMYRMxhEDPHBdhnDoMOcxh0mcPgQNH1UZoP+UAbQN9qdAvoO91POGzi8L2iGyP2D3zQ7B81YvZPGjH1Z0W1EfUXPmjqrxox9TeNmPpQ0c0R9REfNPV3jZj6h0ZMfayeTuQywz+e3DIVDii73H4y/KY4/wARbE1geNpj8N7BcCIoYiMjY1/kBsadHAwcDMkFGxnYnDYyMGhBaA4UeicDAwMnMouZwWWjCmNHYMQGh46IjcwpLhvVQLxdHA0MjCwOHckhESAlkUCwkYFHawfj/9YNLL0bmYC6WFNcAJhIJBt42mNgQAAAAAwAAQAAAAAWABYAFgAWAEoAgACgALQA1gDqAWQB2AHYAgQCVAKAAtADDANMA7ID6ARKBQYGHAbSBwgHPAeMB94H8ggGCBgILAheCI4JBgmWCjwK0gseCzILRgtUeNrVWAlwG+UV3vf/e0grraTVsWtbslaHvZJjW7a1OpLYsWIS4iTEkJALwg0ZmCSEeEiI24FACBB6TEjDkbYTCqUN0HaAAk6aHmHoQJmE6UFb6LRQhqPTkoFCJ1DaJsTa9P0rOXG4SmFaBtvr1f56+3/vfe/tO5YjXJ7juP0kwlFO4ly7RR440t1uqZaasdR0fvvyfJ5Eqn/Nw0MccLuqI6SHv5qLceKol0B3O4SldA4yZrFQDpYtLRKWREmkYiSsB3WN9Iixi7/WVigsejomKvHE/UmXy3xFqW6k4tIj23/y0ouPgLVbpLwvmX3N3jJ0xfoh+/RDPg5x0tUR+CbixBFHYTihQqkX4qAzBCKlU2axVC6FSsVChmTMjJl2KUodSfFJ4H3FdLmS9yfiXv5yF8+wXn7hEfuXu3kX+A7BA0PrrxiCta+1JRysyWjTW4ilIJbIMSy0hiuXmDWcJJ6qkS2Uqlp1LaUoqXnE31OZaPLhLJU5dv9LqOs+vF/C+8G5X7UiaTxeOrAL+ZIk6/B5FsqV6zg+lHODw106lTG5jFmy8rrGkbf0AEKsBfB7vCIlW6pbG2RefE7w+GV6uM3BClRHuH/VsSjbI1REJ+EROHBgF3+KdeiwJd6FciOIlUa501Cu1cGSGFYmB13EdM4F5K9cqpACI7LoXPSCHgmLzIF+Eo7giR1+5FwPsyNigIbnOERIWlQU76jBAwARpNQKmeflFSlJIAA8RM5u73V5fCJ1mcagH5co6KssUfbuiONHIP5Bw3TR6gaRr6xTJz31lqfBv9iiUoOLWov9jZ43W6bs8FEYmtKoEdGnCNSv5wflNydVbvIBnHFSI6Vi/3oA302VSQc9g3ndTwXF4Wbc5rloc0s9Zhix7DcS1uu61wxE28K1MwulQj8p90O5FHT+VyBTo6j2L0dHBL+i9OcWhASQiu1FN6XuRNNSDwihBbl+RfGJPO/lC/NlIODNtbd1edyXd4bcjByQ5xfwO55f6RcEzSjP0Q6+Ks0stzfwglcReH94YJn06kFtTtnQBNHndlOe6AssLzyr5AeMeIjnewZjCXXSr96SrAU64akb7Tx6hBTp65TnNLTTxaOdNI9q83pYTDP/QkrygR9SpgB/eKcV3hY8xDCumfIP+vcp1xgG8ZCzZi9SvgM07Xal/DNm+FMud9rhjyMX0QPkb1wX7qurLGasPHvidM3KY3j0QwU0A3BzJ5LYQ5dCAhmW2QUsfqBbzZ6c6Ti722ueOn9aNxUJoYKrZemNQ109seK5XScuz+8bIG94vP6kSJojDSwyXO5AsL1TkUInLmXDEabfWIgUOX6i3fD+do+F/hvDYayBXHT06Cexuzr7f2k3N9nu55+gP+BaUb+EY7fWC5Fk0cpXQE2qoQlXLGbboZiMoIp8KrRZtgPyhiZqe+DYZ09jo1mW+S3ydZr95OJSaZ6b31PdWb279vGiWNzjL5UWTcTNIG7w3bgTkShq8R7kI2uPo8FBRAP4x4SrcexxQFRhJ//DY+gMv2z3C5cifi/iZ51cV2oDPU70dM0NGbM1qXO6JkHYSpSdDFa2MF8JCVaOKoDBwWUKqBhkCn2ULCPLpioJP81KqGN2+Bc99m/s513wFCao6sGn4bupL869ZWEknKV9U6v3Vu9Bd6VTmwdAhpO2TbH/CXQXudGYlxJ8bYg6U6Hgqd4oEr56DxAp2HJhtFPcuQMIkQifyX59DqZZOHPfqbDaX/Phmup6Ooa5KTpeYyCvs+LSDmgGRaXNDEs8oSZSLtFXVVL9U1BSvUQo3uUPJtzBxmxL4deL7Lu8In91kD88rywJ4b2kIxjJuILxnkl91RxI1ISjKZnxNvYt+qAwn+tHrGKY8RaWWDBrDkPBUD/F2pbX2HPDcl/ZyXROTLNfQsfTYoalT+3eIuFDTYrPKsbal23W9JxlJA2rnzbH9ESRUpn6gwJJJJPZeOP5GxNaa0fn9M4KiUf1RDXa7qM0DIr1zqZDJEgaF51+wwKt4aSe5mSiod3HUxeRwX3Wsp/fvKP6x6p9zYzhqZWZ3bFkgiPMBuGnjg0bsCdZt7AYJp/QDuHTIYEE/v/8NXxc3injXdpb530vJ+8ZvZlxTz9N7j97joOxz47PP1msOHlmAXcxtx5jZc2KC5fMjr8rVkKmMxtgLrZwQHCS9Ad6jzqNGlZWKY09/kQ3AjZoaVbfJREbOQPyuGFrIYNVmEhW3unajns61z3UmsslVs+Q3UsmdVoZi7rel/vueWYuZ1yGYqd3dlrHveeSmkJEaOnIDXhFMXyqBoQ2Qu4adyNb570NM85RyAQ//Ra6zN4ZCxfM6pkudsDGL9x2UsEN7yVwq/2COXXWgoUzegbEDnv7jttm1oik9xkbzxI0bX5en64vtRSfen375tktW+ObzhLEwMWzA+O1kDewFrL6Ea7NXSJrR4Crd7DlEptY2Biha7wRC8d9vH2pvYoq8XAzNhSPE68R8xF4goC9JhSPivzWI2v4aHNY4t2Cxjc20Hf+IlHu/bHqfTQ4CM6I56A6o0s5GjEUEW6Gr4K/ORwDYvcSJdbsJ/Y0CvT6kNHkPbKev5U0xUMSld75C21ookJEpsdwdnM5xPFztb7L6dHxLxRAZ6P3TTWAIVJ3vXps0Ykk4tIK3m3Dcy/wCdhp01gqii23/Oedc2Zd9mUXDiLRVAw7KWj4yka6GwKLy3ec2bzQ3mhP4VVdU3nYC4/K237XlN01LNsD9kxe1XRc3Qf7PY+PrKjxUHF46D42T/QDi11NDaCG9bBTA3hyFsn4PDE+OdDAZBINqrGaVnNnrZ6olSdzyi2rRjqMJd+Yen4E9adbA0wre6Y9MK4VPAp7mVYBwZ5iT/Ysm7d1jiV4F1ZW3ti8EDbCvvHZ8yj2FcLx2RNbMPUlMF6vTZ4d3PjcCF11ufrcmFTTagAMy5kaxWc47gP2s9gkaznbHe6w3ncvlEkWxyz75er3xGdwBK3tNYzzmAflmlAuIqJcuRhiExZyKEUo65+jENGcQKLDD98eFd2y1wej2fM0bXQU/LLfE739bR98H9ad7HH7Zck+7cI/l0r2kD1f8vjDJ8M6xFiCurCZWmfvIxx9U2a5GIWCDPWxGjEoumZYDsDo6MOjBHyegAR7du/eA1J1JCBL8CCMAtwHuyRZVcAetE/x2XPtQcChkmIPXBEewBht5vpwrpT3nFzJGSpgjoMJo2XN8WhGi5PrMDSFYzkNB082S9QnCZy0CwSfWnygnFGUJTiT3B7P9XquW/n86rnm9Fu/sb9lOD1qvzoPL267E5Z6rC7toc1X9cZPm/32ncHmePCyCy6+Y1LH3VeP2AeK2RbLyiS7XAQTMfjylzx3693rhn985XVNgtDw1PbaxQ2zgNcvX7Xz7PPv3HLVt32EyJ1d96xcs/ZeUOcNVndnLZLPZPOZZi+HHj1ubxs3hRvkFnP+6d55c3qn5jqNuArCfzI8pKZxhTC7k2CmM2oyMQ1yUGSPBA4riWZAu53hCgptoNZJwWf5Qzg4SDrMh8cMAUKwLciLeAoBKFdddK19wH7DfoN9Xn7DfeQmdiGuOgfZafQKH0ZI9RaS4d1Z+9CjcS8QfLSrz2Ln7qIbnj3lvCOXkMz4xXKVtLLv5A4krDIYP4GfLq7CzeeWM37OXTQ4MC0/yfgI/Ag4JDmREcEqVoECy+CZVD1QWNEsIWs4DnA6Cxj2esukWg70FBcJO5vW4ug/hUzI67r3hralqx577LG2TfbLtr1JzCYiHafJTQ38JhpzwxkrHwNSX2xcLe7bL4C9oRD4/FeDfcHtVwasD48nUM6P8Wfg7o/zsbOrPwL+2r6CtWbtHVtCLelryQYvfmWPja+1j70oPrlftK8CYspDGH++IdnkWI9/LL8uxx5/yGoh5GPkWKjf0MyqB3uonILYXnvR4whOw/rhZJliwXnJVSz8F3kZfsY3OrIrLqUBPaoYkhVZAYI/1oxVZ0XEkgwlqgfopSs+RgK3v8luwXuBRlVDkWDlkpi7qckdW7ISJMVQoxRRT6zJpXfXokZIjtMTiREtxosxaAY0PdlqZop9xOzjS31QnFy3grYwS1mhlAzBLtqluOtY7al+qfplcgVZjyprajg8eM7nNmzbvG3D584ZDIcNCamJnrjIfMiU60D/1d4dC7V3xz1FK2Lhsbz289HlgMmhFJOr15+e2vfcvwGbwXQGAHjapVTBTttAEB2HENQgIhASh/bQlZAQaYMTBy4EhBRBIyEQCIIQh1ZocTbxQmJH9iYBfqLXqj/SL+ipH9If6L19Xi8lQWkpxSt7345n3szOzC4RLVg5sih59umzwRZN00+DUzRlvTJ4ghatK4PTNG99MXiSXqemDc7QfKpu8Ixlp78anKOXmTcGz9J05oPBczSVuQGzlX6B1SftJcYWLdB3g1OUs6YNnqCatWhwmpasjwZP0pb1zeAMLaXeGjyTep9qGZyjtckfBs/SQuadwXOUy0japoC6dEMhSWqRR4oYLZNLecxlKmGs04pGDl5GOyQo0ro+VnVoSkh8zIIKkOxqbFP2UWaH1oD28Idrrir+cWqApwMr2g66N6FseYotu3lWLpXWV8olp8R2RCRbPqu7UviuKLBd37WzD5WdNbbncZ9VXd4QHbDtgfoE1Gd0jqAl3QKXIeYn4uy8Lm8FFseQtahHbeiGWIpWr80BatiIj/DjOYSG0BuwdToqegvjuFce8tUCX9WCsCVY2S6xChvyvfLb1z9yjbU9hU6oixPohDqI0aENIIXRhGUPc4CES72fuBx9rbWKotCpCCMZ+MyxnQ2mVJP3VOBJHyntO/Zq/nmxPa3NCk9otJhnkwZ62GgdDm6PLjFfY51UbAt+ntuQo36ujBYf0Rn2V4DHATzF0TCdo0jXp49vA5K7rmJ0AIaO7qrxGY4PUxbyuG7RiGUdqAk00JmPGRKNNmZXZysy3nrADe2f6YiEtt7F9cfoEFkResf3zPsjDHG+x3eXPRLZqF+GqPp4pe6MC3xj2X1OuPZYpSONFc5SVldFIZ4KFTEisMXV6kIWwVekue6yXETkNUT6p6uiMPauYMubg8HA7nDlXfJrGwdyK//Y/WFsriDiiSSxK2QHUnnsWEQi7IsGi484O+AdMXy47Wz2xJNR8rMeNNWAh4JB0Jau8COY9fyGCJnyBKvv7rPDrvAT5f1EocCGjqadkBlbxvtctvlFWzAdCWe16hHjqpL1lOpWisXIDWVXRXYk23HIxcMa8vVfSf4b4TNu11+L2HpeAAAAeNptybcNwlAYBOA7kzE5wwo0z8+I0ADG2GMgRCgsERqYgClAtOwE0xDsv+Sk0yfdwUCY9wUa/9L9ljAQg4kcKhhjgikWWNLAEy/GGMeNCVzxwJ1JpphmhlmazDHPAossscwKq6yxzgabbLHNTup8CJRyVKitdOYU7Dbb9XG/+i1aWypSu+Jc9CJd+V1L1KIdaquhOBIdcRY68IZi9DtKiZaoxZ7Y/+n5/lz0RP8Dxh1BegAAAAEAAf//AA8AAAABAAAAAMw9os8AAAAAxvkyTwAAAADWkUsf",
"title": "$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size2-Regular.woff",
"type": "application/font-woff"
},
"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size3-Regular.woff": {
"text": "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",
"title": "$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size3-Regular.woff",
"type": "application/font-woff"
},
"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size4-Regular.woff": {
"text": "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",
"title": "$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size4-Regular.woff",
"type": "application/font-woff"
},
"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Typewriter-Regular.woff": {
"text": "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",
"title": "$:/plugins/tiddlywiki/katex/fonts/KaTeX_Typewriter-Regular.woff",
"type": "application/font-woff"
},
"$:/plugins/tiddlywiki/katex/katex-logo": {
"title": "$:/plugins/tiddlywiki/katex/katex-logo",
"text": "$$\\KaTeX$$\n"
},
"$:/plugins/tiddlywiki/katex/latex-parser.js": {
"title": "$:/plugins/tiddlywiki/katex/latex-parser.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/katex/latex-parser.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for LaTeX. For example:\n\n```\n\t$$latex-goes-here$$\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except latex-parser \n\\rules only latex-parser \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"latex-parser\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\$\\$(?!\\$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar reEnd = /\\$\\$/mg;\n\t// Look for the end marker\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext,\n\t\tdisplayMode;\n\t// Process the text\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tdisplayMode = text.indexOf('\\n') != -1;\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tdisplayMode = false;\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\treturn [{\n\t\ttype: \"latex\",\n\t\tattributes: {\n\t\t\ttext: {\n\t\t\t\ttype: \"text\",\n\t\t\t\tvalue: text\n\t\t\t},\n\t\t\tdisplayMode: {\n\t\t\t\ttype: \"text\",\n\t\t\t\tvalue: displayMode ? \"true\" : \"false\"\n\t\t\t}\n\t\t}\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/plugins/tiddlywiki/katex/readme": {
"title": "$:/plugins/tiddlywiki/katex/readme",
"text": "This is a TiddlyWiki plugin for mathematical typesetting based on [[KaTeX from Khan Academy|http://khan.github.io/KaTeX/]].\n\nIt is completely self-contained, and doesn't need an Internet connection in order to work. It works both in the browser and under Node.js.\n\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/katex]]\n"
},
"$:/plugins/tiddlywiki/katex/snippets/logo": {
"title": "$:/plugins/tiddlywiki/katex/snippets/logo",
"tags": "$:/tags/KaTeX/Snippet",
"text": "$$\\KaTeX$$\n"
},
"$:/plugins/tiddlywiki/katex/styles": {
"title": "$:/plugins/tiddlywiki/katex/styles",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n/* KaTeX styles */\n\n{{$:/plugins/tiddlywiki/katex/katex.min.css}}\n\n/* Force text-rendering (see https://github.com/Jermolene/TiddlyWiki5/issues/2500) */\n\n.katex {\n text-rendering: auto;\n}\n\n/* Override font URLs */\n\n@font-face {\n\tfont-family: KaTeX_AMS;\n\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_AMS-Regular.woff'>>) format('woff');\n\tfont-weight: 400;\n\tfont-style: normal;\n}\n\n@font-face {\n\tfont-family: KaTeX_Caligraphic;\n\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Caligraphic-Bold.woff'>>) format('woff');\n\tfont-weight: 700;\n\tfont-style: normal;\n}\n\n@font-face {\n\tfont-family: KaTeX_Caligraphic;\n\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Caligraphic-Regular.woff'>>) format('woff');\n\tfont-weight: 400;\n\tfont-style: normal;\n}\n\n@font-face {\n\tfont-family: KaTeX_Fraktur;\n\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Fraktur-Bold.woff'>>) format('woff');\n\tfont-weight: 700;\n\tfont-style: normal;\n}\n\n@font-face {\n\tfont-family: KaTeX_Fraktur;\n\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Fraktur-Regular.woff'>>) format('woff');\n\tfont-weight: 400;\n\tfont-style: normal;\n}\n\n@font-face {\n\tfont-family: KaTeX_Main;\n\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Bold.woff'>>) format('woff');\n\tfont-weight: 700;\n\tfont-style: normal;\n}\n\n@font-face {\n\tfont-family: KaTeX_Main;\n\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-BoldItalic.woff'>>) format('woff');\n\tfont-weight: 700;\n\tfont-style: italic;\n}\n\n@font-face {\n\tfont-family: KaTeX_Main;\n\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Italic.woff'>>) format('woff');\n\tfont-weight: 400;\n\tfont-style: italic;\n}\n\n@font-face {\n\tfont-family: KaTeX_Main;\n\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Regular.woff'>>) format('woff');\n\tfont-weight: 400;\n\tfont-style: normal;\n}\n\n@font-face {\n\tfont-family: KaTeX_Math;\n\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Math-Italic.woff'>>) format('woff');\n\tfont-weight: 400;\n\tfont-style: italic;\n}\n\n@font-face {\n\tfont-family: KaTeX_SansSerif;\n\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Bold.woff'>>) format('woff');\n\tfont-weight: 700;\n\tfont-style: normal;\n}\n\n@font-face {\n\tfont-family: KaTeX_SansSerif;\n\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Italic.woff'>>) format('woff');\n\tfont-weight: 400;\n\tfont-style: italic;\n}\n\n@font-face {\n\tfont-family: KaTeX_SansSerif;\n\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Regular.woff'>>) format('woff');\n\tfont-weight: 400;\n\tfont-style: normal;\n}\n\n@font-face {\n\tfont-family: KaTeX_Script;\n\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Script-Regular.woff'>>) format('woff');\n\tfont-weight: 400;\n\tfont-style: normal;\n}\n\n@font-face {\n\tfont-family: KaTeX_Size1;\n\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size1-Regular.woff'>>) format('woff');\n\tfont-weight: 400;\n\tfont-style: normal;\n}\n\n@font-face {\n\tfont-family: KaTeX_Size2;\n\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size2-Regular.woff'>>) format('woff');\n\tfont-weight: 400;\n\tfont-style: normal;\n}\n\n@font-face {\n\tfont-family: KaTeX_Size3;\n\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size3-Regular.woff'>>) format('woff');\n\tfont-weight: 400;\n\tfont-style: normal;\n}\n\n@font-face {\n\tfont-family: KaTeX_Size4;\n\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size4-Regular.woff'>>) format('woff');\n\tfont-weight: 400;\n\tfont-style: normal;\n}\n\n@font-face {\n\tfont-family: KaTeX_Typewriter;\n\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Typewriter-Regular.woff'>>) format('woff');\n\tfont-weight: 400;\n\tfont-style: normal;\n}\n\n"
},
"$:/plugins/tiddlywiki/katex/ui/EditorToolbar/katex-dropdown": {
"title": "$:/plugins/tiddlywiki/katex/ui/EditorToolbar/katex-dropdown",
"text": "\\define toolbar-button-stamp-inner()\n<$button tag=\"a\">\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext={{$(snippetTitle)$}}\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$view tiddler=<<snippetTitle>> field=\"caption\" mode=\"inline\">\n\n<$transclude tiddler=<<snippetTitle>> mode=\"inline\"/>\n\n</$view>\n\n</$button>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/KaTeX/Snippet]!has[draft.of]sort[caption]]\" variable=\"snippetTitle\">\n\n<<toolbar-button-stamp-inner>>\n\n</$list>\n\n----\n\n<$button tag=\"a\">\n\n<$action-sendmessage\n\t$message=\"tm-new-tiddler\"\n\ttags=\"$:/tags/KaTeX/Snippet\"\n\ttext=\"\"\"$$snippet$$\"\"\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<em>\n\n<$text text={{$:/language/Buttons/Stamp/Caption/New}}/>\n\n</em>\n\n</$button>\n\n[ext[KaTeX functions catalogue|https://khan.github.io/KaTeX/function-support.html]]\n"
},
"$:/plugins/tiddlywiki/katex/ui/EditorToolbar/katex": {
"title": "$:/plugins/tiddlywiki/katex/ui/EditorToolbar/katex",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/plugins/tiddlywiki/katex/katex-logo",
"caption": "katex",
"description": "create and insert preconfigured KaTeX snippets",
"condition": "[<targetTiddler>!is[image]]",
"dropdown": "$:/plugins/tiddlywiki/katex/ui/EditorToolbar/katex-dropdown",
"text": ""
},
"$:/plugins/tiddlywiki/katex/usage": {
"title": "$:/plugins/tiddlywiki/katex/usage",
"text": "The usual way to include ~LaTeX is to use `$$`. For example:\n\n```\n$$\\displaystyle f(x) = \\int_{-\\infty}^\\infty\\hat f(\\xi)\\,e^{2 \\pi i \\xi x}\\,d\\xi$$\n```\n\nSingle line equations will render in inline mode. If there are newlines between the `$$` delimiters, the equations will be rendered in display mode.\n\nThe underlying widget can also be used directly, giving more flexibility:\n\n```\n<$latex text=\"f(x) = \\int_{-\\infty}^\\infty\\hat f(\\xi)\\,e^{2 \\pi i \\xi x}\\,d\\xi\" displayMode=\"true\"></$latex>\n```\n\nThe KaTeX widget is provided under the name `<$latex>` and is also available under the alias `<$katex>`. It's better to use the generic `<$latex>` name unless you are running multiple ~LaTeX plugins and wish to specifically target KaTeX.\n"
},
"$:/plugins/tiddlywiki/katex/wrapper.js": {
"title": "$:/plugins/tiddlywiki/katex/wrapper.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/katex/wrapper.js\ntype: application/javascript\nmodule-type: widget\n\nWrapper for `katex.min.js` that provides a `<$latex>` widget. It is also available under the alias `<$katex>`\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar katex = require(\"$:/plugins/tiddlywiki/katex/katex.min.js\"),\n\tWidget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar KaTeXWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nKaTeXWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nKaTeXWidget.prototype.render = function(parent,nextSibling) {\n\t// Housekeeping\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Get the source text\n\tvar text = this.getAttribute(\"text\",this.parseTreeNode.text || \"\");\n\tvar displayMode = this.getAttribute(\"displayMode\",this.parseTreeNode.displayMode || \"false\") === \"true\";\n\t// Render it into a span\n\tvar span = this.document.createElement(\"span\"),\n\t\toptions = {throwOnError: false, displayMode: displayMode};\n\ttry {\n\t\tif(!this.document.isTiddlyWikiFakeDom) {\n\t\t\tkatex.render(text,span,options);\n\t\t} else {\n\t\t\tspan.innerHTML = katex.renderToString(text,options);\n\t\t}\n\t} catch(ex) {\n\t\tspan.className = \"tc-error\";\n\t\tspan.textContent = ex;\n\t}\n\t// Insert it into the DOM\n\tparent.insertBefore(span,nextSibling);\n\tthis.domNodes.push(span);\n};\n\n/*\nCompute the internal state of the widget\n*/\nKaTeXWidget.prototype.execute = function() {\n\t// Nothing to do for a katex widget\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nKaTeXWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.text) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.latex = KaTeXWidget;\nexports.katex = KaTeXWidget;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "widget"
}
}
}
{
"tiddlers": {
"$:/core/ui/ViewTemplate/classic": {
"title": "$:/core/ui/ViewTemplate/classic",
"tags": "$:/tags/ViewTemplate $:/tags/EditTemplate",
"type": "text/vnd.tiddlywiki",
"text": "\n\n"
},
"$:/core/modules/widgets/classictransclude.js": {
"title": "$:/core/modules/widgets/classictransclude.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/classictransclude.js\ntype: application/javascript\nmodule-type: widget\n\nTransclude widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\nvar sliceSeparator = \"::\";\nvar sectionSeparator = \"##\";\n\nfunction getsectionname(title) {\n\tif(!title)\n\t\treturn \"\";\n\tvar pos = title.indexOf(sectionSeparator);\n\tif(pos != -1) {\n\t\treturn title.substr(pos + sectionSeparator.length);\n\t}\n\treturn \"\";\n}\nfunction getslicename(title) { \n\tif(!title)\n\t\treturn \"\";\n\tvar pos = title.indexOf(sliceSeparator);\n\tif(pos != -1) {\n\t\treturn title.substr(pos + sliceSeparator.length);\n\t}\n\treturn \"\";\n};\nfunction gettiddlername(title) {\n\tif(!title)\n\t\treturn \"\";\n\tvar pos = title.indexOf(sectionSeparator);\n\n\tif(pos != -1) {\n\t\treturn title.substr(0,pos);\n\t}\n\tpos = title.indexOf(sliceSeparator);\n\tif(pos != -1) {\n\t\treturn title.substr(0,pos);\n\t}\n\treturn title;\n}\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TranscludeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTranscludeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTranscludeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTranscludeWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.rawTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.transcludeTitle = gettiddlername(this.rawTitle);\n\tthis.section = getsectionname(this.rawTitle);\n\tthis.slice = getslicename(this.rawTitle);\n\t// Check for recursion\n\tvar recursionMarker = this.makeRecursionMarker();\n\tif(this.parentWidget && this.parentWidget.hasVariable(\"transclusion\",recursionMarker)) {\n\t\tthis.makeChildWidgets([{type: \"text\", text: $tw.language.getString(\"Error/RecursiveTransclusion\")}]);\n\t\treturn;\n\t}\n\t// Check for correct type\n\tvar existingTiddler = this.wiki.getTiddler(this.transcludeTitle);\n\t// Check if we're dealing with a classic tiddler\n\tif(existingTiddler && existingTiddler.hasField(\"type\") && existingTiddler.fields.type !== \"text/x-tiddlywiki\") {\n\t\tthis.makeChildWidgets([{type: \"text\", text: \"Tiddler not of type 'text/x-tiddlywiki'\"}]);\n\t\treturn;\n\t}\n\tif(existingTiddler && !existingTiddler.hasField(\"type\")) {\n\t\tthis.makeChildWidgets([{type: \"text\", text: \"Tiddler not of type 'text/x-tiddlywiki'\"}]);\n\t\treturn;\n\t}\t\t\n\t// Set context variables for recursion detection\n\tthis.setVariable(\"transclusion\",recursionMarker);\n\t// Parse \n\tvar text = this.wiki.getTiddlerText(this.transcludeTitle);\n\tif (!!this.section||!!this.slice) {\n\t\ttext =this.refineTiddlerText(text, this.section, this.slice);\n\t}\n\n\tthis.options ={};\n\tthis.options.parseAsInline = false;\n\tvar parser = this.wiki.parseText(\"text/x-tiddlywiki\",text,{});\n\tvar\tparseTreeNodes = parser ? parser.tree : this.parseTreeNode.children;\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n/*\nCompose a string comprising the title, field and/or index to identify this transclusion for recursion detection\n*/\nTranscludeWidget.prototype.makeRecursionMarker = function() {\n\tvar output = [];\n\toutput.push(\"{\");\n\toutput.push(this.getVariable(\"currentTiddler\",{defaultValue: \"\"}));\n\toutput.push(\"|\");\n\toutput.push(this.transcludeTitle || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeField || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeIndex || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.section || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.slice || \"\");\n\toutput.push(\"}\");\n\treturn output.join(\"\");\n};\n\nTranscludeWidget.prototype.slicesRE = /(?:^([\\'\\/]{0,2})~?([\\.\\w]+)\\:\\1[\\t\\x20]*([^\\n]*)[\\t\\x20]*$)|(?:^\\|([\\'\\/]{0,2})~?([\\.\\w]+)\\:?\\4\\|[\\t\\x20]*([^\\|\\n]*)[\\t\\x20]*\\|$)/gm;\n\nTranscludeWidget.prototype.calcAllSlices = function(text)\n{\n\tvar slices = {};\n\tthis.slicesRE.lastIndex = 0;\n\tvar m = this.slicesRE.exec(text);\n\twhile(m) {\n\t\tif(m[2])\n\t\t\tslices[m[2]] = m[3];\n\t\telse\n\t\t\tslices[m[5]] = m[6];\n\t\tm = this.slicesRE.exec(text);\n\t}\n\treturn slices;\n};\n\n// Returns the slice of text of the given name\nTranscludeWidget.prototype.getTextSlice = function(text,sliceName)\n{\n\treturn (this.calcAllSlices(text))[sliceName];\n};\n\nTranscludeWidget.prototype.refineTiddlerText = function(text,section,slice)\n{\n\tvar textsection = null;\n\tif (slice) {\n\t\tvar textslice = this.getTextSlice(text,slice);\n\t\tif(textslice)\n\t\t\treturn textslice;\n\t}\n\tif(!section)\n\t\treturn text;\n\tvar re = new RegExp(\"(^!{1,6}[ \\t]*\" + $tw.utils.escapeRegExp(section) + \"[ \\t]*\\n)\",\"mg\");\n\tre.lastIndex = 0;\n\tvar match = re.exec(text);\n\tif(match) {\n\t\tvar t = text.substr(match.index+match[1].length);\n\t\tvar re2 = /^!/mg;\n\t\tre2.lastIndex = 0;\n\t\tmatch = re2.exec(t); //# search for the next heading\n\t\tif(match)\n\t\t\tt = t.substr(0,match.index-1);//# don't include final \\n\n\t\treturn t;\n\t}\n\treturn \"\";\n}\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTranscludeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler ||changedTiddlers[this.transcludeTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.classictransclude = TranscludeWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/macros/tiddlywiki/entry.js": {
"title": "$:/macros/tiddlywiki/entry.js",
"text": "/*\\\ntitle: $:/macros/tiddlywiki/entry.js\ntype: application/javascript\nmodule-type: macro\n\\*/\n(function(){\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n/*\nInformation about this macro\nreturns value of key in a data json tiddler\nnote that macros are not connected with the refresh mechanism -use with caution.\n*/\nexports.name = \"entryof\";\n\nexports.params = [\n\t{ name: \"key\" }, { name: \"map\" }\n];\n/*\nRun the macro\n*/\nexports.run = function(key,map) {\n\ttry{\n\t\treturn JSON.parse(map)[key];\n\t} catch(e) {\n\t\treturn \"\";\n\t}\n}\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/plugins/tiddlywiki/tw2parser/image-css": {
"title": "$:/plugins/tiddlywiki/tw2parser/image-css",
"tags": "$:/tags/Stylesheet",
"type": "text/plain",
"text": ".classic-image-left{\n float: left;\n}\n\n.classic-image-right{\n float: right;\n}\n"
},
"$:/plugins/tiddlywiki/tw2parser/macrodefs": {
"title": "$:/plugins/tiddlywiki/tw2parser/macrodefs",
"text": "\\define tiddler(tiddler)\n<$classictransclude tiddler = \"$tiddler$\"/>\n\\end\n\n\\define slider(chkUniqueCookieName tiddler label tooltip)\n<span title=$tooltip$><$button popup=\"$chkUniqueCookieName$\" class=\"tc-btn-invisible tc-slider\">$label$</$button>\n<$reveal type=\"nomatch\" text=\"\" default=\"\" state=\"$chkUniqueCookieName$\" animate=\"yes\">\n<$classictransclude tiddler = \"$tiddler$\"/>\n</$reveal></span>\n\\end\n\n\\define __system_tabinstance(state, currentTab, prompts, labels)\n\t\t<span title=<<entryof \"$currentTab$\" \"\"\"$prompts$\"\"\">> ><$button set=<<qualify \"$state$\">> setTo=\"$currentTab$\" selectedClass=\"tc-tab-selected\">\n\t\t<<entryof \"$currentTab$\" \"\"\"$labels$\"\"\" >>\n\t\t</$button></span>\n\\end\n\n\\define __system_tabs(tabsList,prompts,labels,state:\"$:/state/tab\")\n<div class=\"tc-tab-buttons\">\n\t<$list filter=\"$tabsList$\" variable=\"currentTab\">\n\t\t<$macrocall $name=\"__system_tabinstance\" state=\"$state$\" prompts=\"\"\"$prompts$\"\"\" labels=\"\"\"$labels$\"\"\" currentTab=<<currentTab>>/>\n\t</$list>\n</div>\n<div class=\"tc-tab-divider\"/>\n<div class=\"tc-tab-content\">\n\t<$list filter=\"$tabsList$\" variable=\"currentTab\">\n\t\t<$reveal type=\"match\" state=<<qualify \"$state$\">> text=<<currentTab>> default=\"$default$\">\n\t\t\t<$classictransclude tiddler=<<currentTab>> />\n\t\t</$reveal>\n\t</$list>\n</div>\n\\end\n"
},
"$:/macros/classic/macroadapter.js": {
"title": "$:/macros/classic/macroadapter.js",
"text": "/*\\\ntitle: $:/macros/classic/macroadapter.js\ntype: application/javascript\nmodule-type: module\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n/*\nInformation about this module:\nrename macros and\nre-jig macro params from tw2 to tw5 style\nnew macros created as a result of adapting tw2 should be \nprepended \"__system\" to distinguish them from the actual used name\n*/\nvar sliceSeparator = \"::\";\nvar sectionSeparator = \"##\";\n\nfunction getsectionname(title) {\n\tif(!title)\n\t\treturn \"\";\n\tvar pos = title.indexOf(sectionSeparator);\n\tif(pos != -1) {\n\t\treturn title.substr(pos + sectionSeparator.length);\n\t}\n\treturn \"\";\n}\nfunction getslicename(title) { \n\tif(!title)\n\t\treturn \"\";\n\tvar pos = title.indexOf(sliceSeparator);\n\tif(pos != -1) {\n\t\treturn title.substr(pos + sliceSeparator.length);\n\t}\n\treturn \"\";\n};\nfunction gettiddlername(title) {\n\tif(!title)\n\t\treturn \"\";\n\tvar pos = title.indexOf(sectionSeparator);\n\n\tif(pos != -1) {\n\t\treturn title.substr(0,pos);\n\t}\n\tpos = title.indexOf(sliceSeparator);\n\tif(pos != -1) {\n\t\treturn title.substr(0,pos);\n\t}\n\treturn title;\n}\n\nvar parserparams = function(paramString) {\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn params;\n}\nvar tabshandler = function(paramstring) {\n\tvar params = parserparams(paramstring);\n\tvar cookie = params[0].value;\n\tvar numTabs = (params.length-1)/3;\n\tvar t;\n\tvar tabslist = \"\";\n\tvar labelarray = {};\n var promptarray = {};\n\tfor(t=0; t<numTabs; t++) {\n\t\tvar contentName = params[t*3+3].value;\n\t\ttabslist = tabslist+\" \" + contentName;\n\t\tlabelarray[contentName] = params[t*3+1].value;\n\t\tpromptarray[contentName] = params[t*3+2].value;\n\t} \n\t//Create a list of names (tiddlers, tiddler/sections, tiddler/slices), and create maps from name -> label and name -> prompt\n\t//Use json to implement maps \n\treturn '\"\"\"'+tabslist +'\"\"\" \"\"\"'+JSON.stringify(promptarray)+'\"\"\" \"\"\"'+JSON.stringify(labelarray)+'\"\"\" \"\"\"'+cookie+'\"\"\"';\n};\nvar namedapter = {tabs:'__system_tabs'};\nvar paramadapter = {\n\ttabs: tabshandler\n}\nexports.name = 'macroadapter';\nexports.namedapter = namedapter;\nexports.paramadapter = paramadapter;\n})();\n",
"type": "application/javascript",
"module-type": "module"
},
"$:/plugins/tiddlywiki/tw2parser/readme": {
"title": "$:/plugins/tiddlywiki/tw2parser/readme",
"text": "This experimental plugin provides support for parsing and rendering tiddlers written in TiddlyWiki Classic format (`text/x-tiddlywiki`).\n\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/tw2parser]]\n"
},
"$:/plugins/tiddlywiki/tw2parser/wikitextparser.js": {
"title": "$:/plugins/tiddlywiki/tw2parser/wikitextparser.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/tw2parser/wikitextparser.js\ntype: application/javascript\nmodule-type: parser\n\nParses a block of tiddlywiki-format wiki text into a parse tree object. This is a transliterated version of the old TiddlyWiki code. The plan is to replace it with a new, mostly backwards compatible parser built in PEGJS.\n\nA wikitext parse tree is an array of objects with a `type` field that can be `text`,`macro` or the name of an HTML element.\n\nText nodes are represented as `{type: \"text\", value: \"A string of text\"}`.\n\nMacro nodes look like this:\n`\n{type: \"macro\", name: \"view\", params: {\n\tone: {type: \"eval\", value: \"2+2\"},\n\ttwo: {type: \"string\", value: \"twenty two\"}\n}}\n`\nHTML nodes look like this:\n`\n{type: \"div\", attributes: {\n\tsrc: \"one\"\n\tstyles: {\n\t\t\"background-color\": \"#fff\",\n\t\t\"color\": \"#000\"\n\t}\n}}\n`\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreates a new instance of the wiki text parser with the specified options. The\noptions are a hashmap of mandatory members as follows:\n\n\twiki: The wiki object to use to parse any cascaded content (eg transclusion)\n\nPlanned:\n\n\tenableRules: An array of names of wiki text rules to enable. If not specified, all rules are available\n\textraRules: An array of additional rule handlers to add\n\tenableMacros: An array of names of macros to enable. If not specified, all macros are available\n\textraMacros: An array of additional macro handlers to add\n*/\n\nvar WikiTextParser = function(type,text,options) {\n\tthis.wiki = options.wiki;\n\tthis.autoLinkWikiWords = true;\n\tthis.installRules();\n\ttext = text || \"no text\";\n\tthis.source = text;\n\tthis.nextMatch = 0;\n\tthis.children = [];\n\tthis.tree =[];\n\tthis.output = null;\n\tthis.subWikify(this.children);\n\t// prepend tw2 macros locally to the content\n\tvar parser = $tw.wiki.parseTiddler(\"$:/plugins/tiddlywiki/tw2parser/macrodefs\",{parseAsInline:false});\n\tthis.tree = [{\n\t\ttype: \"element\",\n\t\ttag: \"div\",\n\t\tchildren:this.children\n\t}];\n\t// clone the output of parser \n\tvar root = JSON.parse(JSON.stringify(parser.tree));\n\t// macros are defined in a linear tree; walk down the tree and append the source's parsed content \n\tvar baseroot = root;\n\twhile (root[0] && root[0].children && root[0].children.length !== 0 ){ \n\t\troot = root[0].children;\n\t}\n\troot[0].children[0] = this.tree[0];\n\tthis.tree = baseroot;\n};\n\n\nWikiTextParser.prototype.installRules = function() {\n\tvar rules = require(\"./wikitextrules.js\").rules,\n\t\tpattern = [];\n\tfor(var n=0; n<rules.length; n++) {\n\t\tpattern.push(\"(\" + rules[n].match + \")\");\n\t}\n\tthis.rules = rules;\n\tthis.rulesRegExp = new RegExp(pattern.join(\"|\"),\"mg\");\n};\n\n\nWikiTextParser.prototype.outputText = function(place,startPos,endPos) {\n\tif(startPos < endPos) {\n\t\tplace.push({type: \"text\",text:this.source.substring(startPos,endPos)});\n\t}\n};\n\nWikiTextParser.prototype.subWikify = function(output,terminator) {\n\t// Handle the terminated and unterminated cases separately, this speeds up wikifikation by about 30%\n\tif(terminator)\n\t\tthis.subWikifyTerm(output,new RegExp(\"(\" + terminator + \")\",\"mg\"));\n\telse\n\t\tthis.subWikifyUnterm(output);\n};\n\nWikiTextParser.prototype.subWikifyUnterm = function(output) {\n\t// subWikify can be indirectly recursive, so we need to save the old output pointer\n\tvar oldOutput = this.output;\n\tthis.output = output;\n\t// Get the first match\n\tthis.rulesRegExp.lastIndex = this.nextMatch;\n\tvar ruleMatch = this.rulesRegExp.exec(this.source);\n\twhile(ruleMatch) {\n\t\t// Output any text before the match\n\t\tif(ruleMatch.index > this.nextMatch)\n\t\t\tthis.outputText(this.output,this.nextMatch,ruleMatch.index);\n\t\t// Set the match parameters for the handler\n\t\tthis.matchStart = ruleMatch.index;\n\t\tthis.matchLength = ruleMatch[0].length;\n\t\tthis.matchText = ruleMatch[0];\n\t\tthis.nextMatch = this.rulesRegExp.lastIndex;\n\t\t// Figure out which rule matched and call its handler\n\t\tvar t;\n\t\tfor(t=1; t<ruleMatch.length; t++) {\n\t\t\tif(ruleMatch[t]) {\n\t\t\t\tthis.rules[t-1].handler(this);\n\t\t\t\tthis.rulesRegExp.lastIndex = this.nextMatch;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t// Get the next match\n\t\truleMatch = this.rulesRegExp.exec(this.source);\n\t}\n\t// Output any text after the last match\n\tif(this.nextMatch < this.source.length) {\n\t\tthis.outputText(this.output,this.nextMatch,this.source.length);\n\t\tthis.nextMatch = this.source.length;\n\t}\n\t// Restore the output pointer\n\tthis.output = oldOutput;\n};\n\nWikiTextParser.prototype.subWikifyTerm = function(output,terminatorRegExp) {\n\t// subWikify can be indirectly recursive, so we need to save the old output pointer\n\tvar oldOutput = this.output;\n\tthis.output = output;\n\t// Get the first matches for the rule and terminator RegExps\n\tterminatorRegExp.lastIndex = this.nextMatch;\n\tvar terminatorMatch = terminatorRegExp.exec(this.source);\n\tthis.rulesRegExp.lastIndex = this.nextMatch;\n\tvar ruleMatch = this.rulesRegExp.exec(terminatorMatch ? this.source.substr(0,terminatorMatch.index) : this.source);\n\twhile(terminatorMatch || ruleMatch) {\n\t\t// Check for a terminator match before the next rule match\n\t\tif(terminatorMatch && (!ruleMatch || terminatorMatch.index <= ruleMatch.index)) {\n\t\t\t// Output any text before the match\n\t\t\tif(terminatorMatch.index > this.nextMatch)\n\t\t\t\tthis.outputText(this.output,this.nextMatch,terminatorMatch.index);\n\t\t\t// Set the match parameters\n\t\t\tthis.matchText = terminatorMatch[1];\n\t\t\tthis.matchLength = terminatorMatch[1].length;\n\t\t\tthis.matchStart = terminatorMatch.index;\n\t\t\tthis.nextMatch = this.matchStart + this.matchLength;\n\t\t\t// Restore the output pointer\n\t\t\tthis.output = oldOutput;\n\t\t\treturn;\n\t\t}\n\t\t// It must be a rule match; output any text before the match\n\t\tif(ruleMatch.index > this.nextMatch)\n\t\t\tthis.outputText(this.output,this.nextMatch,ruleMatch.index);\n\t\t// Set the match parameters\n\t\tthis.matchStart = ruleMatch.index;\n\t\tthis.matchLength = ruleMatch[0].length;\n\t\tthis.matchText = ruleMatch[0];\n\t\tthis.nextMatch = this.rulesRegExp.lastIndex;\n\t\t// Figure out which rule matched and call its handler\n\t\tvar t;\n\t\tfor(t=1; t<ruleMatch.length; t++) {\n\t\t\tif(ruleMatch[t]) {\n\t\t\t\tthis.rules[t-1].handler(this);\n\t\t\t\tthis.rulesRegExp.lastIndex = this.nextMatch;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t// Get the next match\n\t\tterminatorRegExp.lastIndex = this.nextMatch;\n\t\tterminatorMatch = terminatorRegExp.exec(this.source);\n\t\truleMatch = this.rulesRegExp.exec(terminatorMatch ? this.source.substr(0,terminatorMatch.index) : this.source);\n\t}\n\t// Output any text after the last match\n\tif(this.nextMatch < this.source.length) {\n\t\tthis.outputText(this.output,this.nextMatch,this.source.length);\n\t\tthis.nextMatch = this.source.length;\n\t}\n\t// Restore the output pointer\n\tthis.output = oldOutput;\n};\n\nexports[\"text/x-tiddlywiki\"] = WikiTextParser;\n\n})();\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/plugins/tiddlywiki/tw2parser/wikitextrules.js": {
"title": "$:/plugins/tiddlywiki/tw2parser/wikitextrules.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/tw2parser/wikitextrules.js\ntype: application/javascript\nmodule-type: module\n\nRule modules for the wikitext parser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\nvar macroadapter = require(\"$:/macros/classic/macroadapter.js\");\nvar textPrimitives = {\n\tupperLetter: \"[A-Z\\u00c0-\\u00de\\u0150\\u0170]\",\n\tlowerLetter: \"[a-z0-9_\\\\-\\u00df-\\u00ff\\u0151\\u0171]\",\n\tanyLetter: \"[A-Za-z0-9_\\\\-\\u00c0-\\u00de\\u00df-\\u00ff\\u0150\\u0170\\u0151\\u0171]\",\n\tanyLetterStrict: \"[A-Za-z0-9\\u00c0-\\u00de\\u00df-\\u00ff\\u0150\\u0170\\u0151\\u0171]\",\n\tsliceSeparator: \"::\",\n\tsectionSeparator: \"##\",\n\turlPattern: \"(?:file|http|https|mailto|ftp|irc|news|data):[^\\\\s'\\\"]+(?:/|\\\\b)\",\n\tunWikiLink: \"~\",\n\tbrackettedLink: \"\\\\[\\\\[([^\\\\]]+)\\\\]\\\\]\",\n\ttitledBrackettedLink: \"\\\\[\\\\[([^\\\\[\\\\]\\\\|]+)\\\\|([^\\\\[\\\\]\\\\|]+)\\\\]\\\\]\"\n};\n\ntextPrimitives.wikiLink = \"(?:(?:\" + textPrimitives.upperLetter + \"+\" +\n\t\t\t\t\t\t\ttextPrimitives.lowerLetter + \"+\" +\n\t\t\t\t\t\t\ttextPrimitives.upperLetter +\n\t\t\t\t\t\t\ttextPrimitives.anyLetter + \"*)|(?:\" +\n\t\t\t\t\t\t\ttextPrimitives.upperLetter + \"{2,}\" +\n\t\t\t\t\t\t\ttextPrimitives.lowerLetter + \"+))\";\n\ntextPrimitives.cssLookahead = \"(?:(\" + textPrimitives.anyLetter +\n\t\"+)\\\\(([^\\\\)\\\\|\\\\n]+)(?:\\\\):))|(?:(\" + textPrimitives.anyLetter + \"+):([^;\\\\|\\\\n]+);)\";\n\ntextPrimitives.cssLookaheadRegExp = new RegExp(textPrimitives.cssLookahead,\"mg\");\n\ntextPrimitives.tiddlerForcedLinkRegExp = new RegExp(\"(?:\" + textPrimitives.titledBrackettedLink + \")|(?:\" +\n\ttextPrimitives.brackettedLink + \")|(?:\" +\n\ttextPrimitives.urlPattern + \")\",\"mg\");\n\ntextPrimitives.tiddlerAnyLinkRegExp = new RegExp(\"(\"+ textPrimitives.wikiLink + \")|(?:\" +\n\ttextPrimitives.titledBrackettedLink + \")|(?:\" +\n\ttextPrimitives.brackettedLink + \")|(?:\" +\n\ttextPrimitives.urlPattern + \")\",\"mg\");\n\n// Helper to add an attribute to an HTML node\nvar setAttr = function(node,attr,value) {\n\tif(!node.attributes) {\n\t\tnode.attributes = {};\n\t}\n\tnode.attributes[attr] ={type: \"string\", value:value} ;\n};\n\nvar inlineCssHelper = function(w) {\n\tvar styles = [];\n\ttextPrimitives.cssLookaheadRegExp.lastIndex = w.nextMatch;\n\tvar lookaheadMatch = textPrimitives.cssLookaheadRegExp.exec(w.source);\n\twhile(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {\n\t\tvar s,v;\n\t\tif(lookaheadMatch[1]) {\n\t\t\ts = lookaheadMatch[1];\n\t\t\tv = lookaheadMatch[2];\n\t\t} else {\n\t\t\ts = lookaheadMatch[3];\n\t\t\tv = lookaheadMatch[4];\n\t\t}\n\t\tif(s==\"bgcolor\")\n\t\t\ts = \"backgroundColor\";\n\t\tif(s==\"float\")\n\t\t\ts = \"cssFloat\";\n\t\tstyles.push({style: s, value: v});\n\t\tw.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n\t\ttextPrimitives.cssLookaheadRegExp.lastIndex = w.nextMatch;\n\t\tlookaheadMatch = textPrimitives.cssLookaheadRegExp.exec(w.source);\n\t}\n\treturn styles;\n};\n\nvar applyCssHelper = function(e,styles) {\n\n\tif(styles.length > 0) {\n\n\t\tfor(var t=0; t< styles.length; t++) {\n\t\t\t$tw.utils.addStyleToParseTreeNode(e,$tw.utils.roundTripPropertyName(styles[t].style),styles[t].value);\n\t\t}\n\t}\n\t\n};\n\nvar enclosedTextHelper = function(w) {\n\tthis.lookaheadRegExp.lastIndex = w.matchStart;\n\tvar lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n\tif(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n\t\tvar text = lookaheadMatch[1];\n\t\tw.output.push({type:\"element\",tag:this.element,\n\t\t\tchildren:[{type: \"text\",text: lookaheadMatch[1]}]});\n\t\tw.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n\t}\n};\n\nvar insertMacroCall = function(w,output,macroName,paramString) {\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\toutput.push({\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params,\n\t\tisBlock: false\n\t});\n}\n\n\nvar isLinkExternal = function(to) {\n\tvar externalRegExp = /(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s'\"]+(?:\\/|\\b)/i;\n\treturn externalRegExp.test(to);\n};\nvar rules = [\n{\n\tname: \"table\",\n\tmatch: \"^\\\\|(?:[^\\\\n]*)\\\\|(?:[fhck]?)$\",\n\tlookaheadRegExp: /^\\|([^\\n]*)\\|([fhck]?)$/mg,\n\trowTermRegExp: /(\\|(?:[fhck]?)$\\n?)/mg,\n\tcellRegExp: /(?:\\|([^\\n\\|]*)\\|)|(\\|[fhck]?$\\n?)/mg,\n\tcellTermRegExp: /((?:\\x20*)\\|)/mg,\n\trowTypes: {\"c\":\"caption\", \"h\":\"thead\", \"\":\"tbody\", \"f\":\"tfoot\"},\n\thandler: function(w)\n\t{\n\t\tvar table = {type:\"element\",tag:\"table\",attributes: {\"class\": {type: \"string\", value:\"table\"}},\n\t\t\t\t\tchildren: []};\n\t\t\n\t\tw.output.push(table);\n\t\tvar prevColumns = [];\n\t\tvar currRowType = null;\n\t\tvar rowContainer;\n\t\tvar rowCount = 0;\n\t\tw.nextMatch = w.matchStart;\n\t\tthis.lookaheadRegExp.lastIndex = w.nextMatch;\n\t\tvar lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n\t\twhile(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {\n\t\t\tvar nextRowType = lookaheadMatch[2];\n\t\t\tif(nextRowType == \"k\") {\n\t\t\t\ttable.attributes[\"class\"] = lookaheadMatch[1];\n\t\t\t\tw.nextMatch += lookaheadMatch[0].length+1;\n\t\t\t} else {\n\t\t\t\tif(nextRowType != currRowType) {\n\t\t\t\t\trowContainer = {type:\"element\",tag:this.rowTypes[nextRowType],children: []};\n\t\t\t\t\ttable.children.push(rowContainer);\n\t\t\t\t\tcurrRowType = nextRowType;\n\t\t\t\t}\n\t\t\t\tif(currRowType == \"c\") {\n\t\t\t\t\t// Caption\n\t\t\t\t\tw.nextMatch++;\n\t\t\t\t\t// Move the caption to the first row if it isn't already\n\t\t\t\t\tif(table.children.length !== 1) {\n\t\t\t\t\t\ttable.children.pop(); // Take rowContainer out of the children array\n\t\t\t\t\t\ttable.children.splice(0,0,rowContainer); // Insert it at the bottom\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\trowContainer.attributes={};\n\t\t\t\t\trowContainer.attributes.align = rowCount === 0 ? \"top\" : \"bottom\";\n\t\t\t\t\tw.subWikifyTerm(rowContainer.children,this.rowTermRegExp);\n\t\t\t\t} else {\n\t\t\t\t\tvar theRow = {type:\"element\",tag:\"tr\",\n\t\t\t\t\t\tattributes: {\"class\": {type: \"string\", value:rowCount%2 ? \"oddRow\" : \"evenRow\"}},\n\t\t\t\t\t\tchildren: []};\n\t\t\t\t\t\n\t\t\t\t\trowContainer.children.push(theRow);\n\t\t\t\t\tthis.rowHandler(w,theRow.children,prevColumns);\n\t\t\t\t\trowCount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.lookaheadRegExp.lastIndex = w.nextMatch;\n\t\t\tlookaheadMatch = this.lookaheadRegExp.exec(w.source);\n\t\t}\n\t},\n\trowHandler: function(w,e,prevColumns)\n\t{\n\t\tvar col = 0;\n\t\tvar colSpanCount = 1;\n\t\tvar prevCell = null;\n\t\tthis.cellRegExp.lastIndex = w.nextMatch;\n\t\tvar cellMatch = this.cellRegExp.exec(w.source);\n\t\twhile(cellMatch && cellMatch.index == w.nextMatch) {\n\t\t\tif(cellMatch[1] == \"~\") {\n\t\t\t\t// Rowspan\n\t\t\t\tvar last = prevColumns[col];\n\t\t\tif(last) {\n\t\t\t\tlast.rowSpanCount++;\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"rowspan\",last.rowSpanCount);\n\t\t\t\tvar vAlign = $tw.utils.getAttributeValueFromParseTreeNode(last.element,\"valign\",\"center\");\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"valign\",vAlign);\n\t\t\t\tif(colSpanCount > 1) {\n\t\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"colspan\",colSpanCount);\n\t\t\t\t\tcolSpanCount = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\tw.nextMatch = this.cellRegExp.lastIndex-1;\n\t\t\t} else if(cellMatch[1] == \">\") {\n\t\t\t\t// Colspan\n\t\t\t\tcolSpanCount++;\n\t\t\t\tw.nextMatch = this.cellRegExp.lastIndex-1;\n\t\t\t} else if(cellMatch[2]) {\n\t\t\t\t// End of row\n\t\t\t\tif(prevCell && colSpanCount > 1) {\n\t\t\t\t\tprevCell.attributes.colspan = colSpanCount;\n\t\t\t\t}\n\t\t\t\tw.nextMatch = this.cellRegExp.lastIndex;\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\t// Cell\n\t\t\t\tw.nextMatch++;\n\t\t\t\tvar styles = inlineCssHelper(w);\n\t\t\t\tvar spaceLeft = false;\n\t\t\t\tvar chr = w.source.substr(w.nextMatch,1);\n\t\t\t\twhile(chr == \" \") {\n\t\t\t\t\tspaceLeft = true;\n\t\t\t\t\tw.nextMatch++;\n\t\t\t\t\tchr = w.source.substr(w.nextMatch,1);\n\t\t\t\t}\n\t\t\t\tvar cell;\n\t\t\t\tif(chr == \"!\") {\n\t\t\t\t\tcell = {type:\"element\",tag:\"th\",children: []};\n\t\t\t\t\te.push(cell);\n\t\t\t\t\tw.nextMatch++;\n\t\t\t\t} else {\n\t\t\t\t\tcell = {type:\"element\",tag:\"td\",children: []};\n\t\t\t\t\te.push(cell);\n\t\t\t\t}\n\t\t\t\tprevCell = cell;\n\t\t\t\tprevColumns[col] = {rowSpanCount:1,element:cell};\n\t\t\t\tif(colSpanCount > 1) {\n\t\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"colspan\",colSpanCount);\n\t\t\t\t\tcolSpanCount = 1;\n\t\t\t\t}\n\t\t\t\tapplyCssHelper(cell,styles);\n\t\t\t\tw.subWikifyTerm(cell.children,this.cellTermRegExp);\n\t\t\t\tif (!cell.attributes) cell.attributes ={};\n\t\t\t\tif(w.matchText.substr(w.matchText.length-2,1) == \" \") // spaceRight\n\t\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",spaceLeft ? \"center\" : \"left\");\n\t\t\t\telse if(spaceLeft)\n\t\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",\"right\");\n\t\t\t\tw.nextMatch--;\n\t\t\t}\n\t\t\tcol++;\n\t\t\tthis.cellRegExp.lastIndex = w.nextMatch;\n\t\t\tcellMatch = this.cellRegExp.exec(w.source);\n\t\t}\n\t}\n},\n\n{\n\tname: \"heading\",\n\tmatch: \"^!{1,6}\",\n\ttermRegExp: /(\\n)/mg,\n\thandler: function(w)\n\t{\n\t\tvar e = {type:\"element\",tag:\"h\" + w.matchLength,children: []};\n\t\tw.output.push(e);\n\t\tw.subWikifyTerm(e.children,this.termRegExp);\n\t}\n},\n\n{\n\tname: \"list\",\n\tmatch: \"^(?:[\\\\*#;:]+)\",\n\tlookaheadRegExp: /^(?:(?:(\\*)|(#)|(;)|(:))+)/mg,\n\ttermRegExp: /(\\n)/mg,\n\thandler: function(w)\n\t{\n\t\tvar stack = [w.output];\n\t\tvar currLevel = 0, currType = null;\n\t\tvar listLevel, listType, itemType, baseType;\n\t\tw.nextMatch = w.matchStart;\n\t\tthis.lookaheadRegExp.lastIndex = w.nextMatch;\n\t\tvar lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n\t\twhile(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {\n\t\t\tif(lookaheadMatch[1]) {\n\t\t\t\tlistType = \"ul\";\n\t\t\t\titemType = \"li\";\n\t\t\t} else if(lookaheadMatch[2]) {\n\t\t\t\tlistType = \"ol\";\n\t\t\t\titemType = \"li\";\n\t\t\t} else if(lookaheadMatch[3]) {\n\t\t\t\tlistType = \"dl\";\n\t\t\t\titemType = \"dt\";\n\t\t\t} else if(lookaheadMatch[4]) {\n\t\t\t\tlistType = \"dl\";\n\t\t\t\titemType = \"dd\";\n\t\t\t}\n\t\t\tif(!baseType)\n\t\t\t\tbaseType = listType;\n\t\t\tlistLevel = lookaheadMatch[0].length;\n\t\t\tw.nextMatch += lookaheadMatch[0].length;\n\t\t\tvar t,e;\n\t\t\tif(listLevel > currLevel) {\n\t\t\t\tfor(t=currLevel; t<listLevel; t++) {\n\t\t\t\t\tvar target = stack[stack.length-1];\n\t\t\t\t\tif(currLevel !== 0 && target.children) {\n\t\t\t\t\t\ttarget = target.children[target.children.length-1];\n\t\t\t\t\t}\n\t\t\t\t\te = {type:\"element\",tag:listType,children: []};\n\t\t\t\t\ttarget.push(e);\n\t\t\t\t\tstack.push(e.children);\n\t\t\t\t}\n\t\t\t} else if(listType!=baseType && listLevel==1) {\n\t\t\t\tw.nextMatch -= lookaheadMatch[0].length;\n\t\t\t\treturn;\n\t\t\t} else if(listLevel < currLevel) {\n\t\t\t\tfor(t=currLevel; t>listLevel; t--)\n\t\t\t\t\tstack.pop();\n\t\t\t} else if(listLevel == currLevel && listType != currType) {\n\t\t\t\tstack.pop();\n\t\t\t\te = {type:\"element\",tag:listType,children: []};\n\t\t\t\tstack[stack.length-1].push(e);\n\t\t\t\tstack.push(e.children);\n\t\t\t}\n\t\t\tcurrLevel = listLevel;\n\t\t\tcurrType = listType;\n\t\t\te = {type:\"element\",tag:itemType,children: []};\n\t\t\tstack[stack.length-1].push(e);\n\t\t\tw.subWikifyTerm(e.children,this.termRegExp);\n\t\t\tthis.lookaheadRegExp.lastIndex = w.nextMatch;\n\t\t\tlookaheadMatch = this.lookaheadRegExp.exec(w.source);\n\t\t}\n\t}\n},\n\n{\n\tname: \"quoteByBlock\",\n\tmatch: \"^<<<\\\\n\",\n\ttermRegExp: /(^<<<(\\n|$))/mg,\n\telement: \"blockquote\",\n\thandler: function(w) {\n\t\tvar e = {type:\"element\",tag:this.element,children: []};\n\t\tw.output.push(e);\n\t\tw.subWikifyTerm(e.children,this.termRegExp);\n\t}\n},\n\n{\n\tname: \"quoteByLine\",\n\tmatch: \"^>+\",\n\tlookaheadRegExp: /^>+/mg,\n\ttermRegExp: /(\\n)/mg,\n\telement: \"blockquote\",\n\thandler: function(w)\n\t{\n\t\tvar stack = [];\n\t\tvar currLevel = 0;\n\t\tvar newLevel = w.matchLength;\n\t\tvar t,matched,e;\n\t\tdo {\n\t\t\tif(newLevel > currLevel) {\n\t\t\t\tfor(t=currLevel; t<newLevel; t++) {\n\t\t\t\t\tvar f = stack[stack.length-1];\n\t\t\t\t\te = {type:\"element\",tag:this.element,children: []};\n\t\t\t\t\tstack.push(e);\n\t\t\t\t\tif (t ===0){\n\t\t\t\t\t\tw.output.push(e);\n\t\t\t\t\t}else {\n\t\t\t\t\t\tf.children.push(e);\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if(newLevel < currLevel) {\n\t\t\t\tfor(t=currLevel; t>newLevel; t--)\n\t\t\t\t\tstack.pop();\n\t\t\t}\n\t\t\tcurrLevel = newLevel;\n\t\t\tw.subWikifyTerm(stack[stack.length-1].children,this.termRegExp);\n\t\t\tstack[stack.length-1].children.push({type:\"element\",tag:\"br\"});\n\t\t\t//e.push({type:\"element\",tag:\"br\"});\n\n\t\t\tthis.lookaheadRegExp.lastIndex = w.nextMatch;\n\t\t\tvar lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n\t\t\tmatched = lookaheadMatch && lookaheadMatch.index == w.nextMatch;\n\t\t\tif(matched) {\n\t\t\t\tnewLevel = lookaheadMatch[0].length;\n\t\t\t\tw.nextMatch += lookaheadMatch[0].length;\n\t\t\t}\n\t\t} while(matched);\n\t}\n},\n\n{\n\tname: \"rule\",\n\tmatch: \"^----+$\\\\n?|<hr ?/?>\\\\n?\",\n\thandler: function(w)\n\t{\n\t\tw.output.push({type:\"element\",tag:\"hr\"});\n\t}\n},\n\n{\n\tname: \"monospacedByLine\",\n\tmatch: \"^(?:/\\\\*\\\\{\\\\{\\\\{\\\\*/|\\\\{\\\\{\\\\{|//\\\\{\\\\{\\\\{|<!--\\\\{\\\\{\\\\{-->)\\\\n\",\n\telement: \"pre\",\n\thandler: function(w)\n\t{\n\t\tswitch(w.matchText) {\n\t\tcase \"/*{{{*/\\n\": // CSS\n\t\t\tthis.lookaheadRegExp = /\\/\\*\\{\\{\\{\\*\\/\\n*((?:^[^\\n]*\\n)+?)(\\n*^\\f*\\/\\*\\}\\}\\}\\*\\/$\\n?)/mg;\n\t\t\tbreak;\n\t\tcase \"{{{\\n\": // monospaced block\n\t\t\tthis.lookaheadRegExp = /^\\{\\{\\{\\n((?:^[^\\n]*\\n)+?)(^\\f*\\}\\}\\}$\\n?)/mg;\n\t\t\tbreak;\n\t\tcase \"//{{{\\n\": // plugin\n\t\t\tthis.lookaheadRegExp = /^\\/\\/\\{\\{\\{\\n\\n*((?:^[^\\n]*\\n)+?)(\\n*^\\f*\\/\\/\\}\\}\\}$\\n?)/mg;\n\t\t\tbreak;\n\t\tcase \"<!--{{{-->\\n\": //template\n\t\t\tthis.lookaheadRegExp = /<!--\\{\\{\\{-->\\n*((?:^[^\\n]*\\n)+?)(\\n*^\\f*<!--\\}\\}\\}-->$\\n?)/mg;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\t\tenclosedTextHelper.call(this,w);\n\t}\n},\n\n{\n\tname: \"typedBlock\",\n\t\tmatch: \"^\\\\$\\\\$\\\\$(?:[^ >\\\\r\\\\n]*)\\\\r?\\\\n\",\n\tlookaheadRegExp: /^\\$\\$\\$([^ >\\r\\n]*)\\n((?:^[^\\n]*\\r?\\n)+?)(^\\f*\\$\\$\\$\\r?\\n?)/mg,\n\t//match: \"^\\\\$\\\\$\\\\$(?:[^ >\\\\r\\\\n]*)(?: *> *([^ \\\\r\\\\n]+))?\\\\r?\\\\n\",\n\t//lookaheadRegExp: /^\\$\\$\\$([^ >\\r\\n]*)(?: *> *([^ \\r\\n]+))\\n((?:^[^\\n]*\\n)+?)(^\\f*\\$\\$\\$$\\n?)/mg,\n\thandler: function(w)\n\t{\n\t\tthis.lookaheadRegExp.lastIndex = w.matchStart;\n\t\tvar lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n\t\tif(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n\t\t\t// The wikitext parsing infrastructure is horribly unre-entrant\n\t\t\tvar parseType = lookaheadMatch[1],\n\t\t\t\trenderType ,//= this.match[2],\n\t\t\t\ttext = lookaheadMatch[2],\n\t\t\t\toldOutput = w.output,\n\t\t\t\toldSource = w.source,\n\t\t\t\toldNextMatch = w.nextMatch,\n\t\t\t\toldChildren = w.children;\n\t\t\t// Parse the block according to the specified type\n\t\t\tvar parser = $tw.wiki.parseText(parseType,text.toString(),{defaultType: \"text/plain\"});\n\n\t\t\tw.output = oldOutput;\n\t\t\tw.source = oldSource;\n\t\t\tw.nextMatch = oldNextMatch;\n\t\t\tw.children = oldChildren;\n\t\t\tfor (var i=0; i<parser.tree.length; i++) {\n\t\t\t\tw.output.push(parser.tree[i]);\n\t\t\t}\n\t\t\tw.nextMatch = this.lookaheadRegExp.lastIndex;\n\t\t}\n\t}\n},\n\n{\n\tname: \"wikifyComment\",\n\tmatch: \"^(?:/\\\\*\\\\*\\\\*|<!---)\\\\n\",\n\thandler: function(w)\n\t{\n\t\tvar termRegExp = (w.matchText == \"/***\\n\") ? (/(^\\*\\*\\*\\/\\n)/mg) : (/(^--->\\n)/mg);\n\t\tw.subWikifyTerm(w.output,termRegExp);\n\t}\n},\n\n{\n\tname: \"macro\",\n\tmatch: \"<<\",\n\tlookaheadRegExp: /<<(?:([!@£\\$%\\^\\&\\*\\(\\)`\\~'\"\\|\\\\\\/;\\:\\.\\,\\+\\=\\-\\_\\{\\}])|([^>\\s]+))(?:\\s*)((?:[^>]|(?:>(?!>)))*)>>/mg,\n\thandler: function(w)\n\t{\n\t\tthis.lookaheadRegExp.lastIndex = w.matchStart;\n\t\tvar lookaheadMatch = this.lookaheadRegExp.exec(w.source),\n\t\t\tname;\n\t\tif(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n\t\t\tname = lookaheadMatch[1] || lookaheadMatch[2];\n\t\t\tvar params = lookaheadMatch[3], nameold =name;\n\t\t\tif (name) {\n\t\t\t\tif (!!macroadapter.paramadapter[name]) {\n\t\t\t\t\tparams=macroadapter.paramadapter[name](params);\n\t\t\t\t\t//alert(\"going out as \"+params);\n\t\t\t\t}\n\t\t\t\tif (!!macroadapter.namedapter[name]) {\n\t\t\t\t\tname=macroadapter.namedapter[name];\n\t\t\t\t}\n\t\t\t\tw.nextMatch = this.lookaheadRegExp.lastIndex;\n\t\t\t\tinsertMacroCall(w,w.output,name,params);\n\t\t\t}\n\t\t}\n\t}\n},\n\n\n{\n\tname: \"prettyLink\",\n\tmatch: \"\\\\[\\\\[\",\n\tlookaheadRegExp: /\\[\\[(.*?)(?:\\|(~)?(.*?))?\\]\\]/mg,\n\thandler: function(w)\n\t{\n\t\tthis.lookaheadRegExp.lastIndex = w.matchStart;\n\t\tvar lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n\t\tif(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n\t\t\tvar text = lookaheadMatch[1],\n\t\t\t\tlink = text;\n\t\t\tif(lookaheadMatch[3]) {\n\t\t\t\t// Pretty bracketted link\n\t\t\t\tlink = lookaheadMatch[3];\n\t\t\t}\n\tif(isLinkExternal(link)) {\n\t\tw.output.push({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: link},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t});\n\t} else {\n\t\tw.output.push({\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: link}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t});\n\t}\n\n\t\t\tw.nextMatch = this.lookaheadRegExp.lastIndex;\n\t\t}\n\t}\n},\n{\n\tname: \"wikiLink\",\n\tmatch: textPrimitives.unWikiLink+\"?\"+textPrimitives.wikiLink,\n\thandler: function(w)\n\t{\n\t\tif(w.matchText.substr(0,1) == textPrimitives.unWikiLink) {\n\t\t\tw.outputText(w.output,w.matchStart+1,w.nextMatch);\n\t\t\treturn;\n\t\t}\n\t\tif(w.matchStart > 0) {\n\t\t\tvar preRegExp = new RegExp(textPrimitives.anyLetterStrict,\"mg\");\n\t\t\tpreRegExp.lastIndex = w.matchStart-1;\n\t\t\tvar preMatch = preRegExp.exec(w.source);\n\t\t\tif(preMatch.index == w.matchStart-1) {\n\t\t\t\tw.outputText(w.output,w.matchStart,w.nextMatch);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif(w.autoLinkWikiWords) {\n\t\t\tw.output.push({\n\t\t\t\ttype: \"link\",\n\t\t\t\tattributes: {\n\t\t\t\t\tto: {type: \"string\", value: w.matchText}\n\t\t\t\t},\n\t\t\t\tchildren: [{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: w.source.substring(w.matchStart,w.nextMatch)\n\t\t\t\t}]\n\t\t\t});\n\t\t} else {\t\n\t\t\tw.outputText(w.output,w.matchStart,w.nextMatch);\n\t\t}\n\t}\n},\n\n{\n\tname: \"urlLink\",\n\tmatch: textPrimitives.urlPattern,\n\thandler: function(w)\n\t{\n\t\t\tw.output.push({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: w.matchText},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: w.source.substring(w.matchStart,w.nextMatch)\n\t\t\t}]\n\t\t});\n\n\t}\n},\n\n{\n\tname: \"image\",\n\tmatch: \"\\\\[[<>]?[Ii][Mm][Gg]\\\\[\",\n\t// [<] sequence below is to avoid lessThan-questionMark sequence so TiddlyWikis can be included in PHP files\n\tlookaheadRegExp: /\\[([<]?)(>?)[Ii][Mm][Gg]\\[(?:([^\\|\\]]+)\\|)?([^\\[\\]\\|]+)\\](?:\\[([^\\]]*)\\])?\\]/mg,\n\thandler: function(w)\n\t{\n\t\tvar node = {\n\t\t\ttype: \"image\",\n\t\t\tattributes: {}\n\t\t};\n\t\tthis.lookaheadRegExp.lastIndex = w.matchStart;\n\t\tvar lookaheadMatch = this.lookaheadRegExp.exec(w.source),\n\t\t\timageParams = {},\n\t\t\tlinkParams = {};\n\t\tif(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n\t\t\tif(lookaheadMatch[1]) {\n\t\t\t\tnode.attributes.class = {type: \"string\", value: \"classic-image-left\"};\n\t\t\t} else if(lookaheadMatch[2]) {\n\t\t\t\tnode.attributes.class = {type: \"string\", value: \"classic-image-right\"};\n\t\t\t}\n\t\t\tif(lookaheadMatch[3]) {\n\t\t\t\tnode.attributes.tooltip = {type: \"string\", value: lookaheadMatch[3]};\n\t\t\t}\n\t\t\tnode.attributes.source = {type: \"string\", value: lookaheadMatch[4]};\n\t\t\tif(lookaheadMatch[5]) {\n\t\t\t\tif(isLinkExternal(lookaheadMatch[5])) {\n\t\t\t\t\tw.output.push({\n\t\t\t\t\t\ttype: \"element\",\n\t\t\t\t\t\ttag: \"a\",\n\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\thref: {type: \"string\", value:lookaheadMatch[5]},\n\t\t\t\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\t\t\t\ttarget: {type: \"string\", value: \"_blank\"}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tchildren: [node]\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tw.output.push({\n\t\t\t\t\t\ttype: \"link\",\n\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\tto: {type: \"string\", value: lookaheadMatch[5]}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tchildren: [node]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tw.output.push(node);\n\t\t\t}\n\t\t\tw.nextMatch = this.lookaheadRegExp.lastIndex;\n\t\t}\n\t}\n},\n\n{\n\tname: \"html\",\n\tmatch: \"<[Hh][Tt][Mm][Ll]>\",\n\tlookaheadRegExp: /<[Hh][Tt][Mm][Ll]>((?:.|\\n)*?)<\\/[Hh][Tt][Mm][Ll]>/mg,\n\thandler: function(w)\n\t{\n\t\tthis.lookaheadRegExp.lastIndex = w.matchStart;\n\t\tvar lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n\t\tif(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n\t\t\tw.output.push({\ttype:\"raw\", html:lookaheadMatch[1]});\n\t\t\tw.nextMatch = this.lookaheadRegExp.lastIndex;\n\t\t}\n\t}\n},\n\n{\n\tname: \"commentByBlock\",\n\tmatch: \"/%\",\n\tlookaheadRegExp: /\\/%((?:.|\\n)*?)%\\//mg,\n\thandler: function(w)\n\t{\n\t\tthis.lookaheadRegExp.lastIndex = w.matchStart;\n\t\tvar lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n\t\tif(lookaheadMatch && lookaheadMatch.index == w.matchStart)\n\t\t\tw.nextMatch = this.lookaheadRegExp.lastIndex;\n\t}\n},\n\n{\n\tname: \"characterFormat\",\n\tmatch: \"''|//|__|\\\\^\\\\^|~~|--(?!\\\\s|$)|\\\\{\\\\{\\\\{|`\",\n\thandler: function(w)\n\t{\n\t\tvar e,lookaheadRegExp,lookaheadMatch;\n\t\tswitch(w.matchText) {\n\t\tcase \"''\":\n\t\t\te = {type:\"element\",tag:\"strong\",children: []};\n\t\t\tw.output.push(e);\n\t\t\tw.subWikifyTerm(e.children,/('')/mg);\n\t\t\tbreak;\n\t\tcase \"//\":\n\t\t\te = {type:\"element\",tag:\"em\",children: []};\n\t\t\tw.output.push(e);\n\t\t\tw.subWikifyTerm(e.children,/(\\/\\/)/mg);\n\t\t\tbreak;\n\t\tcase \"__\":\n\t\t\te = {type:\"element\",tag:\"u\",children: []};\n\t\t\tw.output.push(e);\n\t\t\tw.subWikifyTerm(e.children,/(__)/mg);\n\t\t\tbreak;\n\t\tcase \"^^\":\n\t\t\te = {type:\"element\",tag:\"sup\",children: []};\n\t\t\tw.output.push(e);\n\t\t\tw.subWikifyTerm(e.children,/(\\^\\^)/mg);\n\t\t\tbreak;\n\t\tcase \"~~\":\n\t\t\te = {type:\"element\",tag:\"sub\",children: []};\n\t\t\tw.output.push(e);\n\t\t\tw.subWikifyTerm(e.children,/(~~)/mg);\n\t\t\tbreak;\n\t\tcase \"--\":\n\t\t\te = {type:\"element\",tag:\"strike\",children: []};\n\t\t\tw.output.push(e);\n\t\t\tw.subWikifyTerm(e.children,/(--)/mg);\n\t\t\tbreak;\n\t\tcase \"`\":\n\t\t\tlookaheadRegExp = /`((?:.|\\n)*?)`/mg;\n\t\t\tlookaheadRegExp.lastIndex = w.matchStart;\n\t\t\tlookaheadMatch = lookaheadRegExp.exec(w.source);\n\t\t\tif(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n\t\t\t\tw.output.push({type:\"element\",tag:\"code\",\n\t\t\t\t\tchildren:[{type: \"text\",text: lookaheadMatch[1]}]});\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"{{{\":\n\t\t\tlookaheadRegExp = /\\{\\{\\{((?:.|\\n)*?)\\}\\}\\}/mg;\n\t\t\tlookaheadRegExp.lastIndex = w.matchStart;\n\t\t\tlookaheadMatch = lookaheadRegExp.exec(w.source);\n\t\t\tif(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n\t\t\t\tw.output.push({type:\"element\",tag:\"code\",\n\t\t\t\t\tchildren:[{type: \"text\",text: lookaheadMatch[1]}]});\n\t\t\t\tw.nextMatch = lookaheadRegExp.lastIndex;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n},\n\n{\n\tname: \"customFormat\",\n\tmatch: \"@@|\\\\{\\\\{\",\n\thandler: function(w)\n\t{\n\t\tswitch(w.matchText) {\n\t\tcase \"@@\":\n\t\t\tvar e = {type:\"element\",tag:\"span\",children: []};\n\t\t\tw.output.push(e);\n\t\t\tvar styles = inlineCssHelper(w);\n\t\t\tif(styles.length === 0)\n\t\t\t\tsetAttr(e,\"class\",\"marked\");\n\t\t\telse\n\t\t\t\tapplyCssHelper(e,styles);\n\t\t\tw.subWikifyTerm(e.children,/(@@)/mg);\n\t\t\tbreak;\n\t\tcase \"{{\":\n\t\t\tvar lookaheadRegExp = /\\{\\{[\\s]*([\\-\\w]+[\\-\\s\\w]*)[\\s]*\\{(\\n?)/mg;\n\t\t\tlookaheadRegExp.lastIndex = w.matchStart;\n\t\t\tvar lookaheadMatch = lookaheadRegExp.exec(w.source);\n\t\t\tif(lookaheadMatch) {\n\t\t\t\tw.nextMatch = lookaheadRegExp.lastIndex;\n\t\t\t\te = {type:\"element\",tag:lookaheadMatch[2] == \"\\n\" ? \"div\" : \"span\",\n\t\t\t\t\tattributes: {\"class\": {type: \"string\", value:lookaheadMatch[1]}},children: []};\n\t\t\t\tw.output.push(e);\n\t\t\t\tw.subWikifyTerm(e.children,/(\\}\\}\\})/mg);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n},\n\n{\n\tname: \"mdash\",\n\tmatch: \"--\",\n\thandler: function(w)\n\t{\n\t\tw.output.push({type: \"entity\", entity: \"—\"});\n\t}\n},\n\n{\n\tname: \"lineBreak\",\n\tmatch: \"\\\\n|<br ?/?>\",\n\thandler: function(w)\n\t{\n\t\tw.output.push({type:\"element\",tag:\"br\"});\n\t}\n},\n\n{\n\tname: \"rawText\",\n\tmatch: \"\\\"{3}|<nowiki>\",\n\tlookaheadRegExp: /(?:\\\"{3}|<nowiki>)((?:.|\\n)*?)(?:\\\"{3}|<\\/nowiki>)/mg,\n\thandler: function(w)\n\t{\n\t\tthis.lookaheadRegExp.lastIndex = w.matchStart;\n\t\tvar lookaheadMatch = this.lookaheadRegExp.exec(w.source);\n\t\tif(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n\t\t\tw.output.push({type: \"text\",text: lookaheadMatch[1]\n\t\t\t});\n\t\t\tw.nextMatch = this.lookaheadRegExp.lastIndex;\n\t\t}\n\t}\n},\n\n{\n\tname: \"htmlEntitiesEncoding\",\n\tmatch: \"&#?[a-zA-Z0-9]{2,8};\",\n\thandler: function(w)\n\t{\n\t\tw.output.push({type: \"entity\", entity: w.matchText});\n\t}\n}\n\n];\n\nexports.rules = rules;\n\n})();\n",
"type": "application/javascript",
"module-type": "module"
}
}
}
$:/core/ui/AdvancedSearch/Filter
$:/themes/tiddlywiki/vanilla/themetweaks
$:/core/ui/ControlPanel/Basics
$:/core/ui/ControlPanel/Plugins/Installed/Plugins
$:/core/ui/ControlPanel/TiddlerFields
$:/core/ui/ControlPanel/Saving
$:/core/ui/ControlPanel/Saving/TiddlySpot
$:/core/ui/MoreSideBar/Tags
$:/core/ui/SideBar/Recent
$:/core/ui/ControlPanel/Toolbars/PageControls
流体力学 連続の式 ナビエ・ストークス方程式 ナビエ・ストークス方程式の導出 フィックの法則
{
"tiddlers": {
"$:/info/browser": {
"title": "$:/info/browser",
"text": "yes"
},
"$:/info/node": {
"title": "$:/info/node",
"text": "no"
},
"$:/info/url/full": {
"title": "$:/info/url/full",
"text": "file:///C:/Users/S.S/OneDrive%20-%20The%20University%20of%20Western%20Australia%20(1)/91_Notes/Tiddlywiki/tiddlywiki.html"
},
"$:/info/url/host": {
"title": "$:/info/url/host",
"text": ""
},
"$:/info/url/hostname": {
"title": "$:/info/url/hostname",
"text": ""
},
"$:/info/url/protocol": {
"title": "$:/info/url/protocol",
"text": "file:"
},
"$:/info/url/port": {
"title": "$:/info/url/port",
"text": ""
},
"$:/info/url/pathname": {
"title": "$:/info/url/pathname",
"text": "/C:/Users/S.S/OneDrive%20-%20The%20University%20of%20Western%20Australia%20(1)/91_Notes/Tiddlywiki/tiddlywiki.html"
},
"$:/info/url/search": {
"title": "$:/info/url/search",
"text": ""
},
"$:/info/url/origin": {
"title": "$:/info/url/origin",
"text": "file://"
}
}
}
$:/themes/tiddlywiki/vanilla
{
"tiddlers": {
"$:/themes/tiddlywiki/snowwhite/base": {
"title": "$:/themes/tiddlywiki/snowwhite/base",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n.tc-sidebar-header {\n\ttext-shadow: 0 1px 0 <<colour sidebar-foreground-shadow>>;\n}\n\n.tc-tiddler-info {\n\t<<box-shadow \"inset 1px 2px 3px rgba(0,0,0,0.1)\">>\n}\n\n@media screen {\n\t.tc-tiddler-frame {\n\t\t<<box-shadow \"1px 1px 5px rgba(0, 0, 0, 0.3)\">>\n\t}\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\t<<box-shadow none>>\n\t}\n}\n\n.tc-page-controls button svg, .tc-tiddler-controls button svg, .tc-topbar button svg {\n\t<<transition \"fill 150ms ease-in-out\">>\n}\n\n.tc-tiddler-controls button.tc-selected,\n.tc-page-controls button.tc-selected {\n\t<<filter \"drop-shadow(0px -1px 2px rgba(0,0,0,0.25))\">>\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tc-edit-tags {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tc-tiddler-frame .tc-edit-tags input.tc-edit-texteditor {\n\t<<box-shadow \"none\">>\n\tborder: none;\n\toutline: none;\n}\n\ntextarea.tc-edit-texteditor {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\n}\n\ncanvas.tc-edit-bitmapeditor {\n\t<<box-shadow \"2px 2px 5px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-drop-down {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-block-dropdown {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-modal {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n}\n\n.tc-modal-footer {\n\tborder-radius: 0 0 6px 6px;\n\t<<box-shadow \"inset 0 1px 0 #fff\">>;\n}\n\n\n.tc-alert {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.6)\">>\n}\n\n.tc-notification {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n\ttext-shadow: 0 1px 0 rgba(255,255,255, 0.8);\n}\n\n.tc-sidebar-lists .tc-tab-set .tc-tab-divider {\n\tborder-top: none;\n\theight: 1px;\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%\">>\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%\">>\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%\">>\n}\n\n.tc-message-box img {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n\n.tc-plugin-info {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n"
}
}
}
{
"tiddlers": {
"$:/themes/tiddlywiki/vanilla/themetweaks": {
"title": "$:/themes/tiddlywiki/vanilla/themetweaks",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ThemeTweaks/ThemeTweaks}}",
"text": "\\define lingo-base() $:/language/ThemeTweaks/\n\n\\define replacement-text()\n[img[$(imageTitle)$]]\n\\end\n\n\\define backgroundimage-dropdown()\n<div class=\"tc-drop-down-wrapper\">\n<$button popup=<<qualify \"$:/state/popup/themetweaks/backgroundimage\">> class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal state=<<qualify \"$:/state/popup/themetweaks/backgroundimage\">> type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$macrocall $name=\"image-picker\" actions=\"\"\"\n\n<$action-setfield\n\t$tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\"\n\t$value=<<imageTitle>>\n/>\n\n\"\"\"/>\n</div>\n</$reveal>\n</div>\n\\end\n\n\\define backgroundimageattachment-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\" default=\"scroll\">\n<option value=\"scroll\"><<lingo Settings/BackgroundImageAttachment/Scroll>></option>\n<option value=\"fixed\"><<lingo Settings/BackgroundImageAttachment/Fixed>></option>\n</$select>\n\\end\n\n\\define backgroundimagesize-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\" default=\"scroll\">\n<option value=\"auto\"><<lingo Settings/BackgroundImageSize/Auto>></option>\n<option value=\"cover\"><<lingo Settings/BackgroundImageSize/Cover>></option>\n<option value=\"contain\"><<lingo Settings/BackgroundImageSize/Contain>></option>\n</$select>\n\\end\n\n<<lingo ThemeTweaks/Hint>>\n\n! <<lingo Options>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><<lingo Options/SidebarLayout>></$link> |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><option value=\"fixed-fluid\"><<lingo Options/SidebarLayout/Fixed-Fluid>></option><option value=\"fluid-fixed\"><<lingo Options/SidebarLayout/Fluid-Fixed>></option></$select> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"><<lingo Options/StickyTitles>></$link><br>//<<lingo Options/StickyTitles/Hint>>// |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"><option value=\"no\">{{$:/language/No}}</option><option value=\"yes\">{{$:/language/Yes}}</option></$select> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/codewrapping\"><<lingo Options/CodeWrapping>></$link> |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/codewrapping\"><option value=\"pre\">{{$:/language/No}}</option><option value=\"pre-wrap\">{{$:/language/Yes}}</option></$select> |\n\n! <<lingo Settings>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"><<lingo Settings/FontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\"><<lingo Settings/CodeFontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\"><<lingo Settings/EditorFontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\"><<lingo Settings/BackgroundImage>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\" default=\"\" tag=\"input\"/> |<<backgroundimage-dropdown>> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\"><<lingo Settings/BackgroundImageAttachment>></$link> |<<backgroundimageattachment-dropdown>> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\"><<lingo Settings/BackgroundImageSize>></$link> |<<backgroundimagesize-dropdown>> | |\n\n! <<lingo Metrics>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\"><<lingo Metrics/FontSize>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\"><<lingo Metrics/LineHeight>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\"><<lingo Metrics/BodyFontSize>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\"><<lingo Metrics/BodyLineHeight>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\"><<lingo Metrics/StoryLeft>></$link><br>//<<lingo Metrics/StoryLeft/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\"><<lingo Metrics/StoryTop>></$link><br>//<<lingo Metrics/StoryTop/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\"><<lingo Metrics/StoryRight>></$link><br>//<<lingo Metrics/StoryRight/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\"><<lingo Metrics/StoryWidth>></$link><br>//<<lingo Metrics/StoryWidth/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"><<lingo Metrics/TiddlerWidth>></$link><br>//<<lingo Metrics/TiddlerWidth/Hint>>//<br> |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\"><<lingo Metrics/SidebarBreakpoint>></$link><br>//<<lingo Metrics/SidebarBreakpoint/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\"><<lingo Metrics/SidebarWidth>></$link><br>//<<lingo Metrics/SidebarWidth/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\" default=\"\" tag=\"input\"/> |\n"
},
"$:/themes/tiddlywiki/vanilla/base": {
"title": "$:/themes/tiddlywiki/vanilla/base",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\define custom-background-datauri()\n<$set name=\"background\" value={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}>\n<$list filter=\"[<background>is[image]]\">\n`background: url(`\n<$list filter=\"[<background>!has[_canonical_uri]]\">\n`\"`<$macrocall $name=\"datauri\" title={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}/>`\"`\n</$list>\n<$list filter=\"[<background>has[_canonical_uri]]\">\n`\"`<$view tiddler={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}} field=\"_canonical_uri\"/>`\"`\n</$list>\n`) center center;`\n`background-attachment: `{{$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment}}`;\n-webkit-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-moz-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-o-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\nbackground-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;`\n</$list>\n</$set>\n\\end\n\n\\define if-fluid-fixed(text,hiddenSidebarText)\n<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\" type=\"match\" text=\"fluid-fixed\">\n$text$\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">\n$hiddenSidebarText$\n</$reveal>\n</$reveal>\n\\end\n\n\\define if-editor-height-fixed(then,else)\n<$reveal state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"fixed\">\n$then$\n</$reveal>\n<$reveal state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"auto\">\n$else$\n</$reveal>\n\\end\n\n\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\n\n/*\n** Start with the normalize CSS reset, and then belay some of its effects\n*/\n\n{{$:/themes/tiddlywiki/vanilla/reset}}\n\n*, input[type=\"search\"] {\n\tbox-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n}\n\nhtml button {\n\tline-height: 1.2;\n\tcolor: <<colour button-foreground>>;\n\tbackground: <<colour button-background>>;\n\tborder-color: <<colour button-border>>;\n}\n\n/*\n** Basic element styles\n*/\n\nhtml {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/fontfamily}};\n\ttext-rendering: optimizeLegibility; /* Enables kerning and ligatures etc. */\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n\nhtml:-webkit-full-screen {\n\tbackground-color: <<colour page-background>>;\n}\n\nbody.tc-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/fontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/lineheight}};\n\tword-wrap: break-word;\n\t<<custom-background-datauri>>\n\tcolor: <<colour foreground>>;\n\tbackground-color: <<colour page-background>>;\n\tfill: <<colour foreground>>;\n}\n\nh1, h2, h3, h4, h5, h6 {\n\tline-height: 1.2;\n\tfont-weight: 300;\n}\n\npre {\n\tdisplay: block;\n\tpadding: 14px;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n\tword-break: normal;\n\tword-wrap: break-word;\n\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\n\tbackground-color: <<colour pre-background>>;\n\tborder: 1px solid <<colour pre-border>>;\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\ncode {\n\tcolor: <<colour code-foreground>>;\n\tbackground-color: <<colour code-background>>;\n\tborder: 1px solid <<colour code-border>>;\n\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\nblockquote {\n\tborder-left: 5px solid <<colour blockquote-bar>>;\n\tmargin-left: 25px;\n\tpadding-left: 10px;\n\tquotes: \"\\201C\"\"\\201D\"\"\\2018\"\"\\2019\";\n}\n\nblockquote.tc-big-quote {\n\tfont-family: Georgia, serif;\n\tposition: relative;\n\tbackground: <<colour pre-background>>;\n\tborder-left: none;\n\tmargin-left: 50px;\n\tmargin-right: 50px;\n\tpadding: 10px;\n border-radius: 8px;\n}\n\nblockquote.tc-big-quote cite:before {\n\tcontent: \"\\2014 \\2009\";\n}\n\nblockquote.tc-big-quote:before {\n\tfont-family: Georgia, serif;\n\tcolor: <<colour blockquote-bar>>;\n\tcontent: open-quote;\n\tfont-size: 8em;\n\tline-height: 0.1em;\n\tmargin-right: 0.25em;\n\tvertical-align: -0.4em;\n\tposition: absolute;\n left: -50px;\n top: 42px;\n}\n\nblockquote.tc-big-quote:after {\n\tfont-family: Georgia, serif;\n\tcolor: <<colour blockquote-bar>>;\n\tcontent: close-quote;\n\tfont-size: 8em;\n\tline-height: 0.1em;\n\tmargin-right: 0.25em;\n\tvertical-align: -0.4em;\n\tposition: absolute;\n right: -80px;\n bottom: -20px;\n}\n\ndl dt {\n\tfont-weight: bold;\n\tmargin-top: 6px;\n}\n\ntextarea,\ninput[type=text],\ninput[type=search],\ninput[type=\"\"],\ninput:not([type]) {\n\tcolor: <<colour foreground>>;\n\tbackground: <<colour background>>;\n}\n\n.tc-muted {\n\tcolor: <<colour muted-foreground>>;\n}\n\nsvg.tc-image-button {\n\tpadding: 0px 1px 1px 0px;\n}\n\n.tc-icon-wrapper > svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\nkbd {\n\tdisplay: inline-block;\n\tpadding: 3px 5px;\n\tfont-size: 0.8em;\n\tline-height: 1.2;\n\tcolor: <<colour foreground>>;\n\tvertical-align: middle;\n\tbackground-color: <<colour background>>;\n\tborder: solid 1px <<colour muted-foreground>>;\n\tborder-bottom-color: <<colour muted-foreground>>;\n\tborder-radius: 3px;\n\tbox-shadow: inset 0 -1px 0 <<colour muted-foreground>>;\n}\n\n/*\nMarkdown likes putting code elements inside pre elements\n*/\npre > code {\n\tpadding: 0;\n\tborder: none;\n\tbackground-color: inherit;\n\tcolor: inherit;\n}\n\ntable {\n\tborder: 1px solid <<colour table-border>>;\n\twidth: auto;\n\tmax-width: 100%;\n\tcaption-side: bottom;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n}\n\ntable th, table td {\n\tpadding: 0 7px 0 7px;\n\tborder-top: 1px solid <<colour table-border>>;\n\tborder-left: 1px solid <<colour table-border>>;\n}\n\ntable thead tr td, table th {\n\tbackground-color: <<colour table-header-background>>;\n\tfont-weight: bold;\n}\n\ntable tfoot tr td {\n\tbackground-color: <<colour table-footer-background>>;\n}\n\n.tc-csv-table {\n\twhite-space: nowrap;\n}\n\n.tc-tiddler-frame img,\n.tc-tiddler-frame svg,\n.tc-tiddler-frame canvas,\n.tc-tiddler-frame embed,\n.tc-tiddler-frame iframe {\n\tmax-width: 100%;\n}\n\n.tc-tiddler-body > embed,\n.tc-tiddler-body > iframe {\n\twidth: 100%;\n\theight: 600px;\n}\n\n/*\n** Links\n*/\n\nbutton.tc-tiddlylink,\na.tc-tiddlylink {\n\ttext-decoration: none;\n\tfont-weight: normal;\n\tcolor: <<colour tiddler-link-foreground>>;\n\t-webkit-user-select: inherit; /* Otherwise the draggable attribute makes links impossible to select */\n}\n\n.tc-sidebar-lists a.tc-tiddlylink {\n\tcolor: <<colour sidebar-tiddler-link-foreground>>;\n}\n\n.tc-sidebar-lists a.tc-tiddlylink:hover {\n\tcolor: <<colour sidebar-tiddler-link-foreground-hover>>;\n}\n\nbutton.tc-tiddlylink:hover,\na.tc-tiddlylink:hover {\n\ttext-decoration: underline;\n}\n\na.tc-tiddlylink-resolves {\n}\n\na.tc-tiddlylink-shadow {\n\tfont-weight: bold;\n}\n\na.tc-tiddlylink-shadow.tc-tiddlylink-resolves {\n\tfont-weight: normal;\n}\n\na.tc-tiddlylink-missing {\n\tfont-style: italic;\n}\n\na.tc-tiddlylink-external {\n\ttext-decoration: underline;\n\tcolor: <<colour external-link-foreground>>;\n\tbackground-color: <<colour external-link-background>>;\n}\n\na.tc-tiddlylink-external:visited {\n\tcolor: <<colour external-link-foreground-visited>>;\n\tbackground-color: <<colour external-link-background-visited>>;\n}\n\na.tc-tiddlylink-external:hover {\n\tcolor: <<colour external-link-foreground-hover>>;\n\tbackground-color: <<colour external-link-background-hover>>;\n}\n\n/*\n** Drag and drop styles\n*/\n\n.tc-tiddler-dragger {\n\tposition: relative;\n\tz-index: -10000;\n}\n\n.tc-tiddler-dragger-inner {\n\tposition: absolute;\n\ttop: -1000px;\n\tleft: -1000px;\n\tdisplay: inline-block;\n\tpadding: 8px 20px;\n\tfont-size: 16.9px;\n\tfont-weight: bold;\n\tline-height: 20px;\n\tcolor: <<colour dragger-foreground>>;\n\ttext-shadow: 0 1px 0 rgba(0, 0, 0, 1);\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour dragger-background>>;\n\tborder-radius: 20px;\n}\n\n.tc-tiddler-dragger-cover {\n\tposition: absolute;\n\tbackground-color: <<colour page-background>>;\n}\n\n.tc-dropzone {\n\tposition: relative;\n}\n\n.tc-dropzone.tc-dragover:before {\n\tz-index: 10000;\n\tdisplay: block;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <<colour dropzone-background>>;\n\ttext-align: center;\n\tcontent: \"<<lingo DropMessage>>\";\n}\n\n.tc-droppable > .tc-droppable-placeholder {\n\tdisplay: none;\n}\n\n.tc-droppable.tc-dragover > .tc-droppable-placeholder {\n\tdisplay: block;\n\tborder: 2px dashed <<colour dropzone-background>>;\n}\n\n.tc-draggable {\n\tcursor: move;\n}\n\n/*\n** Plugin reload warning\n*/\n\n.tc-plugin-reload-warning {\n\tz-index: 1000;\n\tdisplay: block;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <<colour alert-background>>;\n\ttext-align: center;\n}\n\n/*\n** Buttons\n*/\n\nbutton svg, button img, label svg, label img {\n\tvertical-align: middle;\n}\n\n.tc-btn-invisible {\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n cursor: pointer;\n}\n\n.tc-btn-boxed {\n\tfont-size: 0.6em;\n\tpadding: 0.2em;\n\tmargin: 1px;\n\tbackground: none;\n\tborder: 1px solid <<colour tiddler-controls-foreground>>;\n\tborder-radius: 0.25em;\n}\n\nhtml body.tc-body .tc-btn-boxed svg {\n\tfont-size: 1.6666em;\n}\n\n.tc-btn-boxed:hover {\n\tbackground: <<colour muted-foreground>>;\n\tcolor: <<colour background>>;\n}\n\nhtml body.tc-body .tc-btn-boxed:hover svg {\n\tfill: <<colour background>>;\n}\n\n.tc-btn-rounded {\n\tfont-size: 0.5em;\n\tline-height: 2;\n\tpadding: 0em 0.3em 0.2em 0.4em;\n\tmargin: 1px;\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour muted-foreground>>;\n\tcolor: <<colour background>>;\n\tborder-radius: 2em;\n}\n\nhtml body.tc-body .tc-btn-rounded svg {\n\tfont-size: 1.6666em;\n\tfill: <<colour background>>;\n}\n\n.tc-btn-rounded:hover {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour background>>;\n\tcolor: <<colour muted-foreground>>;\n}\n\nhtml body.tc-body .tc-btn-rounded:hover svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-btn-icon svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-btn-text {\n\tpadding: 0;\n\tmargin: 0;\n}\n\n.tc-btn-big-green {\n\tdisplay: inline-block;\n\tpadding: 8px;\n\tmargin: 4px 8px 4px 8px;\n\tbackground: <<colour download-background>>;\n\tcolor: <<colour download-foreground>>;\n\tfill: <<colour download-foreground>>;\n\tborder: none;\n\tfont-size: 1.2em;\n\tline-height: 1.4em;\n\ttext-decoration: none;\n}\n\n.tc-btn-big-green svg,\n.tc-btn-big-green img {\n\theight: 2em;\n\twidth: 2em;\n\tvertical-align: middle;\n\tfill: <<colour download-foreground>>;\n}\n\n.tc-sidebar-lists input {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-sidebar-lists button {\n\tcolor: <<colour sidebar-button-foreground>>;\n\tfill: <<colour sidebar-button-foreground>>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini {\n\tcolor: <<colour sidebar-muted-foreground>>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini:hover {\n\tcolor: <<colour sidebar-muted-foreground-hover>>;\n}\n\nbutton svg.tc-image-button, button .tc-image-button img {\n\theight: 1em;\n\twidth: 1em;\n}\n\n.tc-unfold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 100%;\n\twidth: calc(100% + 2px);\n\tmargin-left: -43px;\n\ttext-align: center;\n\tborder-top: 2px solid <<colour tiddler-info-background>>;\n\tmargin-top: 4px;\n}\n\n.tc-unfold-banner:hover {\n\tbackground: <<colour tiddler-info-background>>;\n\tborder-top: 2px solid <<colour tiddler-info-border>>;\n}\n\n.tc-unfold-banner svg, .tc-fold-banner svg {\n\theight: 0.75em;\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tc-unfold-banner:hover svg, .tc-fold-banner:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n.tc-fold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 23px;\n\ttext-align: center;\n\tmargin-left: -35px;\n\ttop: 6px;\n\tbottom: 6px;\n}\n\n.tc-fold-banner:hover {\n\tbackground: <<colour tiddler-info-background>>;\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-unfold-banner {\n\t\tposition: static;\n\t\twidth: calc(100% + 59px);\n\t}\n\n\t.tc-fold-banner {\n\t\twidth: 16px;\n\t\tmargin-left: -16px;\n\t\tfont-size: 0.75em;\n\t}\n\n}\n\n/*\n** Tags and missing tiddlers\n*/\n\n.tc-tag-list-item {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin-right: 7px;\n}\n\n.tc-tags-wrapper {\n\tmargin: 4px 0 14px 0;\n}\n\n.tc-missing-tiddler-label {\n\tfont-style: italic;\n\tfont-weight: normal;\n\tdisplay: inline-block;\n\tfont-size: 11.844px;\n\tline-height: 14px;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n}\n\nbutton.tc-tag-label, span.tc-tag-label {\n\tdisplay: inline-block;\n\tpadding: 0.16em 0.7em;\n\tfont-size: 0.9em;\n\tfont-weight: 400;\n\tline-height: 1.2em;\n\tcolor: <<colour tag-foreground>>;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour tag-background>>;\n\tborder-radius: 1em;\n}\n\n.tc-untagged-separator {\n\twidth: 10em;\n\tleft: 0;\n\tmargin-left: 0;\n\tborder: 0;\n\theight: 1px;\n\tbackground: <<colour tab-divider>>;\n}\n\nbutton.tc-untagged-label {\n\tbackground-color: <<colour untagged-background>>;\n}\n\n.tc-tag-label svg, .tc-tag-label img {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour tag-foreground>>;\n\tvertical-align: text-bottom;\n}\n\n.tc-tag-manager-table .tc-tag-label {\n\twhite-space: normal;\n}\n\n.tc-tag-manager-tag {\n\twidth: 100%;\n}\n\n/*\n** Page layout\n*/\n\n.tc-topbar {\n\tposition: fixed;\n\tz-index: 1200;\n}\n\n.tc-topbar-left {\n\tleft: 29px;\n\ttop: 5px;\n}\n\n.tc-topbar-right {\n\ttop: 5px;\n\tright: 29px;\n}\n\n.tc-topbar button {\n\tpadding: 8px;\n}\n\n.tc-topbar svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-topbar button:hover svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-sidebar-header {\n\tcolor: <<colour sidebar-foreground>>;\n\tfill: <<colour sidebar-foreground>>;\n}\n\n.tc-sidebar-header .tc-title a.tc-tiddlylink-resolves {\n\tfont-weight: 300;\n}\n\n.tc-sidebar-header .tc-sidebar-lists p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-sidebar-header .tc-missing-tiddler-label {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tc-advanced-search input {\n\twidth: 60%;\n}\n\n.tc-search a svg {\n\twidth: 1.2em;\n\theight: 1.2em;\n\tvertical-align: middle;\n}\n\n.tc-page-controls {\n\tmargin-top: 14px;\n\tfont-size: 1.5em;\n}\n\n.tc-page-controls button {\n\tmargin-right: 0.5em;\n}\n\n.tc-page-controls a.tc-tiddlylink:hover {\n\ttext-decoration: none;\n}\n\n.tc-page-controls img {\n\twidth: 1em;\n}\n\n.tc-page-controls svg {\n\tfill: <<colour sidebar-controls-foreground>>;\n}\n\n.tc-page-controls button:hover svg, .tc-page-controls a:hover svg {\n\tfill: <<colour sidebar-controls-foreground-hover>>;\n}\n\n.tc-menu-list-item {\n\twhite-space: nowrap;\n}\n\n.tc-menu-list-count {\n\tfont-weight: bold;\n}\n\n.tc-menu-list-subitem {\n\tpadding-left: 7px;\n}\n\n.tc-story-river {\n\tposition: relative;\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-sidebar-header {\n\t\tpadding: 14px;\n\t\tmin-height: 32px;\n\t\tmargin-top: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t}\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tpadding: 0;\n\t}\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-message-box {\n\t\tmargin: 21px -21px 21px -21px;\n\t}\n\n\t.tc-sidebar-scrollable {\n\t\tposition: fixed;\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\n\t\tbottom: 0;\n\t\tright: 0;\n\t\toverflow-y: auto;\n\t\toverflow-x: auto;\n\t\t-webkit-overflow-scrolling: touch;\n\t\tmargin: 0 0 0 -42px;\n\t\tpadding: 71px 0 28px 42px;\n\t}\n\n\thtml[dir=\"rtl\"] .tc-sidebar-scrollable {\n\t\tleft: auto;\n\t\tright: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\n\t}\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/storywidth}};\n\t\tpadding: 42px 42px 42px 42px;\n\t}\n\n<<if-no-sidebar \"\n\n\t.tc-story-river {\n\t\twidth: calc(100% - {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}});\n\t}\n\n\">>\n\n}\n\n@media print {\n\n\tbody.tc-body {\n\t\tbackground-color: transparent;\n\t}\n\n\t.tc-sidebar-header, .tc-topbar {\n\t\tdisplay: none;\n\t}\n\n\t.tc-story-river {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\n\t.tc-story-river .tc-tiddler-frame {\n\t\tmargin: 0;\n\t\tborder: none;\n\t\tpadding: 0;\n\t}\n}\n\n/*\n** Tiddler styles\n*/\n\n.tc-tiddler-frame {\n\tposition: relative;\n\tmargin-bottom: 28px;\n\tbackground-color: <<colour tiddler-background>>;\n\tborder: 1px solid <<colour tiddler-border>>;\n}\n\n{{$:/themes/tiddlywiki/vanilla/sticky}}\n\n.tc-tiddler-info {\n\tpadding: 14px 42px 14px 42px;\n\tbackground-color: <<colour tiddler-info-background>>;\n\tborder-top: 1px solid <<colour tiddler-info-border>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-border>>;\n}\n\n.tc-tiddler-info p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-tiddler-info .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour tiddler-info-tab-background>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-tab-background>>;\n}\n\n.tc-view-field-table {\n\twidth: 100%;\n}\n\n.tc-view-field-name {\n\twidth: 1%; /* Makes this column be as narrow as possible */\n\ttext-align: right;\n\tfont-style: italic;\n\tfont-weight: 200;\n}\n\n.tc-view-field-value {\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\tpadding: 14px 14px 14px 14px;\n\t}\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -14px 0 -14px;\n\t}\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\tpadding: 28px 42px 42px 42px;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth}};\n\t\tborder-radius: 2px;\n\t}\n\n<<if-no-sidebar \"\n\n\t.tc-tiddler-frame {\n\t\twidth: 100%;\n\t}\n\n\">>\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -42px 0 -42px;\n\t}\n}\n\n.tc-site-title,\n.tc-titlebar {\n\tfont-weight: 300;\n\tfont-size: 2.35em;\n\tline-height: 1.2em;\n\tcolor: <<colour tiddler-title-foreground>>;\n\tmargin: 0;\n}\n\n.tc-site-title {\n\tcolor: <<colour site-title-foreground>>;\n}\n\n.tc-tiddler-title-icon {\n\tvertical-align: middle;\n}\n\n.tc-system-title-prefix {\n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-titlebar h2 {\n\tfont-size: 1em;\n\tdisplay: inline;\n}\n\n.tc-titlebar img {\n\theight: 1em;\n}\n\n.tc-subtitle {\n\tfont-size: 0.9em;\n\tcolor: <<colour tiddler-subtitle-foreground>>;\n\tfont-weight: 300;\n}\n\n.tc-tiddler-missing .tc-title {\n font-style: italic;\n font-weight: normal;\n}\n\n.tc-tiddler-frame .tc-tiddler-controls {\n\tfloat: right;\n}\n\n.tc-tiddler-controls .tc-drop-down {\n\tfont-size: 0.6em;\n}\n\n.tc-tiddler-controls .tc-drop-down .tc-drop-down {\n\tfont-size: 1em;\n}\n\n.tc-tiddler-controls > span > button,\n.tc-tiddler-controls > span > span > button,\n.tc-tiddler-controls > span > span > span > button {\n\tvertical-align: baseline;\n\tmargin-left:5px;\n}\n\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img,\n.tc-search button svg, .tc-search a svg {\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img {\n\theight: 0.75em;\n}\n\n.tc-search button svg, .tc-search a svg {\n height: 1.2em;\n width: 1.2em;\n margin: 0 0.25em;\n}\n\n.tc-tiddler-controls button.tc-selected svg,\n.tc-page-controls button.tc-selected svg {\n\tfill: <<colour tiddler-controls-foreground-selected>>;\n}\n\n.tc-tiddler-controls button.tc-btn-invisible:hover svg,\n.tc-search button:hover svg, .tc-search a:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n@media print {\n\t.tc-tiddler-controls {\n\t\tdisplay: none;\n\t}\n}\n\n.tc-tiddler-help { /* Help prompts within tiddler template */\n\tcolor: <<colour muted-foreground>>;\n\tmargin-top: 14px;\n}\n\n.tc-tiddler-help a.tc-tiddlylink {\n\tcolor: <<colour very-muted-foreground>>;\n}\n\n.tc-tiddler-frame .tc-edit-texteditor {\n\twidth: 100%;\n\tmargin: 4px 0 4px 0;\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor,\n.tc-tiddler-frame textarea.tc-edit-texteditor,\n.tc-tiddler-frame iframe.tc-edit-texteditor {\n\tpadding: 3px 3px 3px 3px;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tbackground-color: <<colour tiddler-editor-background>>;\n\tline-height: 1.3em;\n\t-webkit-appearance: none;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\n}\n\n.tc-tiddler-frame .tc-binary-warning {\n\twidth: 100%;\n\theight: 5em;\n\ttext-align: center;\n\tpadding: 3em 3em 6em 3em;\n\tbackground: <<colour alert-background>>;\n\tborder: 1px solid <<colour alert-border>>;\n}\n\ncanvas.tc-edit-bitmapeditor {\n\tborder: 6px solid <<colour tiddler-editor-border-image>>;\n\tcursor: crosshair;\n\t-moz-user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n\tmargin-top: 6px;\n\tmargin-bottom: 6px;\n}\n\n.tc-edit-bitmapeditor-width {\n\tdisplay: block;\n}\n\n.tc-edit-bitmapeditor-height {\n\tdisplay: block;\n}\n\n.tc-tiddler-body {\n\tclear: both;\n}\n\n.tc-tiddler-frame .tc-tiddler-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/bodylineheight}};\n}\n\n.tc-titlebar, .tc-tiddler-edit-title {\n\toverflow: hidden; /* https://github.com/Jermolene/TiddlyWiki5/issues/282 */\n}\n\nhtml body.tc-body.tc-single-tiddler-window {\n\tmargin: 1em;\n\tbackground: <<colour tiddler-background>>;\n}\n\n.tc-single-tiddler-window img,\n.tc-single-tiddler-window svg,\n.tc-single-tiddler-window canvas,\n.tc-single-tiddler-window embed,\n.tc-single-tiddler-window iframe {\n\tmax-width: 100%;\n}\n\n/*\n** Editor\n*/\n\n.tc-editor-toolbar {\n\tmargin-top: 8px;\n}\n\n.tc-editor-toolbar button {\n\tvertical-align: middle;\n\tbackground-color: <<colour tiddler-controls-foreground>>;\n\tfill: <<colour tiddler-controls-foreground-selected>>;\n\tborder-radius: 4px;\n\tpadding: 3px;\n\tmargin: 2px 0 2px 4px;\n}\n\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-adjunct {\n\tmargin-left: 1px;\n\twidth: 1em;\n\tborder-radius: 8px;\n}\n\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-start-group {\n\tmargin-left: 11px;\n}\n\n.tc-editor-toolbar button.tc-selected {\n\tbackground-color: <<colour primary>>;\n}\n\n.tc-editor-toolbar button svg {\n\twidth: 1.6em;\n\theight: 1.2em;\n}\n\n.tc-editor-toolbar button:hover {\n\tbackground-color: <<colour tiddler-controls-foreground-selected>>;\n\tfill: <<colour background>>;\n}\n\n.tc-editor-toolbar .tc-text-editor-toolbar-more {\n\twhite-space: normal;\n}\n\n.tc-editor-toolbar .tc-text-editor-toolbar-more button {\n\tdisplay: inline-block;\n\tpadding: 3px;\n\twidth: auto;\n}\n\n.tc-editor-toolbar .tc-search-results {\n\tpadding: 0;\n}\n\n/*\n** Adjustments for fluid-fixed mode\n*/\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n<<if-fluid-fixed text:\"\"\"\n\n\t.tc-story-river {\n\t\tpadding-right: 0;\n\t\tposition: relative;\n\t\twidth: auto;\n\t\tleft: 0;\n\t\tmargin-left: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\n\t\tmargin-right: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n\t}\n\n\t.tc-tiddler-frame {\n\t\twidth: 100%;\n\t}\n\n\t.tc-sidebar-scrollable {\n\t\tleft: auto;\n\t\tbottom: 0;\n\t\tright: 0;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n\t}\n\n\tbody.tc-body .tc-storyview-zoomin-tiddler {\n\t\twidth: 100%;\n\t\twidth: calc(100% - 42px);\n\t}\n\n\"\"\" hiddenSidebarText:\"\"\"\n\n\t.tc-story-river {\n\t\tpadding-right: 3em;\n\t\tmargin-right: 0;\n\t}\n\n\tbody.tc-body .tc-storyview-zoomin-tiddler {\n\t\twidth: 100%;\n\t\twidth: calc(100% - 84px);\n\t}\n\n\"\"\">>\n\n}\n\n/*\n** Toolbar buttons\n*/\n\n.tc-page-controls svg.tc-image-new-button {\n fill: <<colour toolbar-new-button>>;\n}\n\n.tc-page-controls svg.tc-image-options-button {\n fill: <<colour toolbar-options-button>>;\n}\n\n.tc-page-controls svg.tc-image-save-button {\n fill: <<colour toolbar-save-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-info-button {\n fill: <<colour toolbar-info-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-edit-button {\n fill: <<colour toolbar-edit-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-close-button {\n fill: <<colour toolbar-close-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-delete-button {\n fill: <<colour toolbar-delete-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-cancel-button {\n fill: <<colour toolbar-cancel-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-done-button {\n fill: <<colour toolbar-done-button>>;\n}\n\n/*\n** Tiddler edit mode\n*/\n\n.tc-tiddler-edit-frame em.tc-edit {\n\tcolor: <<colour muted-foreground>>;\n\tfont-style: normal;\n}\n\n.tc-edit-type-dropdown a.tc-tiddlylink-missing {\n\tfont-style: normal;\n}\n\n.tc-edit-tags {\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tpadding: 4px 8px 4px 8px;\n}\n\n.tc-edit-add-tag {\n\tdisplay: inline-block;\n}\n\n.tc-edit-add-tag .tc-add-tag-name input {\n\twidth: 50%;\n}\n\n.tc-edit-add-tag .tc-keyboard {\n\tdisplay:inline;\n}\n\n.tc-edit-tags .tc-tag-label {\n\tdisplay: inline-block;\n}\n\n.tc-edit-tags-list {\n\tmargin: 14px 0 14px 0;\n}\n\n.tc-remove-tag-button {\n\tpadding-left: 4px;\n}\n\n.tc-tiddler-preview {\n\toverflow: auto;\n}\n\n.tc-tiddler-preview-preview {\n\tfloat: right;\n\twidth: 49%;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tmargin: 4px 0 3px 3px;\n\tpadding: 3px 3px 3px 3px;\n}\n\n<<if-editor-height-fixed then:\"\"\"\n\n.tc-tiddler-preview-preview {\n\toverflow-y: scroll;\n\theight: {{$:/config/TextEditor/EditorHeight/Height}};\n}\n\n\"\"\">>\n\n.tc-tiddler-frame .tc-tiddler-preview .tc-edit-texteditor {\n\twidth: 49%;\n}\n\n.tc-tiddler-frame .tc-tiddler-preview canvas.tc-edit-bitmapeditor {\n\tmax-width: 49%;\n}\n\n.tc-edit-fields {\n\twidth: 100%;\n}\n\n\n.tc-edit-fields table, .tc-edit-fields tr, .tc-edit-fields td {\n\tborder: none;\n\tpadding: 4px;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(odd) {\n\tbackground-color: <<colour tiddler-editor-fields-odd>>;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(even) {\n\tbackground-color: <<colour tiddler-editor-fields-even>>;\n}\n\n.tc-edit-field-name {\n\ttext-align: right;\n}\n\n.tc-edit-field-value input {\n\twidth: 100%;\n}\n\n.tc-edit-field-remove {\n}\n\n.tc-edit-field-remove svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n\tvertical-align: middle;\n}\n\n.tc-edit-field-add-name {\n\tdisplay: inline-block;\n\twidth: 15%;\n}\n\n.tc-edit-field-add-value {\n\tdisplay: inline-block;\n\twidth: 40%;\n}\n\n.tc-edit-field-add-button {\n\tdisplay: inline-block;\n\twidth: 10%;\n}\n\n/*\n** Storyview Classes\n*/\n\n.tc-storyview-zoomin-tiddler {\n\tposition: absolute;\n\tdisplay: block;\n\twidth: 100%;\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-storyview-zoomin-tiddler {\n\t\twidth: calc(100% - 84px);\n\t}\n\n}\n\n/*\n** Dropdowns\n*/\n\n.tc-btn-dropdown {\n\ttext-align: left;\n}\n\n.tc-btn-dropdown svg, .tc-btn-dropdown img {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-drop-down-wrapper {\n\tposition: relative;\n}\n\n.tc-drop-down {\n\tmin-width: 380px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\ttext-shadow: none;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-drop-down {\n\tmargin-left: 14px;\n}\n\n.tc-drop-down button svg, .tc-drop-down a svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-drop-down button.tc-btn-invisible:hover svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-drop-down p {\n\tpadding: 0 14px 0 14px;\n}\n\n.tc-drop-down svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-drop-down img {\n\twidth: 1em;\n}\n\n.tc-drop-down-language-chooser img {\n\twidth: 2em;\n\tvertical-align: baseline;\n}\n\n.tc-drop-down a, .tc-drop-down button {\n\tdisplay: block;\n\tpadding: 0 14px 0 14px;\n\twidth: 100%;\n\ttext-align: left;\n\tcolor: <<colour foreground>>;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-tab-set .tc-tab-buttons button {\n\tdisplay: inline-block;\n width: auto;\n margin-bottom: 0px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.tc-drop-down .tc-prompt {\n\tpadding: 0 14px;\n}\n\n.tc-drop-down .tc-chooser {\n\tborder: none;\n}\n\n.tc-drop-down .tc-chooser .tc-swatches-horiz {\n\tfont-size: 0.4em;\n\tpadding-left: 1.2em;\n}\n\n.tc-drop-down .tc-file-input-wrapper {\n\twidth: 100%;\n}\n\n.tc-drop-down .tc-file-input-wrapper button {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-drop-down a:hover, .tc-drop-down button:hover, .tc-drop-down .tc-file-input-wrapper:hover button {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tc-drop-down .tc-tab-buttons button {\n\tbackground-color: <<colour dropdown-tab-background>>;\n}\n\n.tc-drop-down .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour dropdown-tab-background-selected>>;\n\tborder-bottom: 1px solid <<colour dropdown-tab-background-selected>>;\n}\n\n.tc-drop-down-bullet {\n\tdisplay: inline-block;\n\twidth: 0.5em;\n}\n\n.tc-drop-down .tc-tab-contents a {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tc-block-dropdown-wrapper {\n\tposition: relative;\n}\n\n.tc-block-dropdown {\n\tposition: absolute;\n\tmin-width: 220px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\tz-index: 1000;\n\ttext-shadow: none;\n}\n\n.tc-block-dropdown.tc-search-drop-down {\n\tmargin-left: -12px;\n}\n\n.tc-block-dropdown a {\n\tdisplay: block;\n\tpadding: 4px 14px 4px 14px;\n}\n\n.tc-block-dropdown.tc-search-drop-down a {\n\tdisplay: block;\n\tpadding: 0px 10px 0px 10px;\n}\n\n.tc-drop-down .tc-dropdown-item-plain,\n.tc-block-dropdown .tc-dropdown-item-plain {\n\tpadding: 4px 14px 4px 7px;\n}\n\n.tc-drop-down .tc-dropdown-item,\n.tc-block-dropdown .tc-dropdown-item {\n\tpadding: 4px 14px 4px 7px;\n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-block-dropdown a:hover {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tc-search-results {\n\tpadding: 0 7px 0 7px;\n}\n\n.tc-image-chooser, .tc-colour-chooser {\n\twhite-space: normal;\n}\n\n.tc-image-chooser a,\n.tc-colour-chooser a {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\ttext-align: center;\n\tposition: relative;\n}\n\n.tc-image-chooser a {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tpadding: 2px;\n\tmargin: 2px;\n\twidth: 4em;\n\theight: 4em;\n}\n\n.tc-colour-chooser a {\n\tpadding: 3px;\n\twidth: 2em;\n\theight: 2em;\n\tvertical-align: middle;\n}\n\n.tc-image-chooser a:hover,\n.tc-colour-chooser a:hover {\n\tbackground: <<colour primary>>;\n\tpadding: 0px;\n\tborder: 3px solid <<colour primary>>;\n}\n\n.tc-image-chooser a svg,\n.tc-image-chooser a img {\n\tdisplay: inline-block;\n\twidth: auto;\n\theight: auto;\n\tmax-width: 3.5em;\n\tmax-height: 3.5em;\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n\tmargin: auto;\n}\n\n/*\n** Modals\n*/\n\n.tc-modal-wrapper {\n\tposition: fixed;\n\toverflow: auto;\n\toverflow-y: scroll;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 900;\n}\n\n.tc-modal-backdrop {\n\tposition: fixed;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 1000;\n\tbackground-color: <<colour modal-backdrop>>;\n}\n\n.tc-modal {\n\tz-index: 1100;\n\tbackground-color: <<colour modal-background>>;\n\tborder: 1px solid <<colour modal-border>>;\n}\n\n@media (max-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 1em;\n\t\tleft: 1em;\n\t\tright: 1em;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n@media (min-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 2em;\n\t\tleft: 25%;\n\t\twidth: 50%;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n.tc-modal-header {\n\tpadding: 9px 15px;\n\tborder-bottom: 1px solid <<colour modal-header-border>>;\n}\n\n.tc-modal-header h3 {\n\tmargin: 0;\n\tline-height: 30px;\n}\n\n.tc-modal-header img, .tc-modal-header svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-modal-body {\n\tpadding: 15px;\n}\n\n.tc-modal-footer {\n\tpadding: 14px 15px 15px;\n\tmargin-bottom: 0;\n\ttext-align: right;\n\tbackground-color: <<colour modal-footer-background>>;\n\tborder-top: 1px solid <<colour modal-footer-border>>;\n}\n\n/*\n** Notifications\n*/\n\n.tc-notification {\n\tposition: fixed;\n\ttop: 14px;\n\tright: 42px;\n\tz-index: 1300;\n\tmax-width: 280px;\n\tpadding: 0 14px 0 14px;\n\tbackground-color: <<colour notification-background>>;\n\tborder: 1px solid <<colour notification-border>>;\n}\n\n/*\n** Tabs\n*/\n\n.tc-tab-set.tc-vertical {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tab-buttons {\n\tfont-size: 0.85em;\n\tpadding-top: 1em;\n\tmargin-bottom: -2px;\n}\n\n.tc-tab-buttons.tc-vertical {\n\tz-index: 100;\n\tdisplay: block;\n\tpadding-top: 14px;\n\tvertical-align: top;\n\ttext-align: right;\n\tmargin-bottom: inherit;\n\tmargin-right: -1px;\n\tmax-width: 33%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n}\n\n.tc-tab-buttons button.tc-tab-selected {\n\tcolor: <<colour tab-foreground-selected>>;\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-left: 1px solid <<colour tab-border-selected>>;\n\tborder-top: 1px solid <<colour tab-border-selected>>;\n\tborder-right: 1px solid <<colour tab-border-selected>>;\n}\n\n.tc-tab-buttons button {\n\tcolor: <<colour tab-foreground>>;\n\tpadding: 3px 5px 3px 5px;\n\tmargin-right: 0.3em;\n\tfont-weight: 300;\n\tborder: none;\n\tbackground: inherit;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-right: 1px solid <<colour tab-border>>;\n\tborder-top-left-radius: 2px;\n\tborder-top-right-radius: 2px;\n\tborder-bottom-left-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n\n.tc-tab-buttons.tc-vertical button {\n\tdisplay: block;\n\twidth: 100%;\n\tmargin-top: 3px;\n\tmargin-right: 0;\n\ttext-align: right;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tborder-right: none;\n\tborder-top-left-radius: 2px;\n\tborder-bottom-left-radius: 2px;\n\tborder-top-right-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n\n.tc-tab-buttons.tc-vertical button.tc-tab-selected {\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-right: 1px solid <<colour tab-background-selected>>;\n}\n\n.tc-tab-divider {\n\tborder-top: 1px solid <<colour tab-divider>>;\n}\n\n.tc-tab-divider.tc-vertical {\n\tdisplay: none;\n}\n\n.tc-tab-content {\n\tmargin-top: 14px;\n}\n\n.tc-tab-content.tc-vertical {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-top: 0;\n\tpadding-left: 14px;\n\tborder-left: 1px solid <<colour tab-border>>;\n\t-webkit-flex: 1 0 70%;\n\tflex: 1 0 70%;\n}\n\n.tc-sidebar-lists .tc-tab-buttons {\n\tmargin-bottom: -1px;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tcolor: <<colour sidebar-tab-foreground-selected>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border-selected>>;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button {\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tcolor: <<colour sidebar-tab-foreground>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border>>;\n}\n\n.tc-sidebar-lists .tc-tab-divider {\n\tborder-top: 1px solid <<colour sidebar-tab-divider>>;\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\n\tdisplay: block;\n\twidth: 100%;\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tborder-top: none;\n\tborder-left: none;\n\tborder-bottom: none;\n\tborder-right: 1px solid #ccc;\n\tmargin-bottom: inherit;\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tborder: none;\n}\n\n/*\n** Manager\n*/\n\n.tc-manager-wrapper {\n\t\n}\n\n.tc-manager-controls {\n\t\n}\n\n.tc-manager-control {\n\tmargin: 0.5em 0;\n}\n\n.tc-manager-list {\n\twidth: 100%;\n\tborder-top: 1px solid <<colour muted-foreground>>;\n\tborder-left: 1px solid <<colour muted-foreground>>;\n\tborder-right: 1px solid <<colour muted-foreground>>;\n}\n\n.tc-manager-list-item {\n\n}\n\n.tc-manager-list-item-heading {\n display: block;\n width: 100%;\n text-align: left;\t\n\tborder-bottom: 1px solid <<colour muted-foreground>>;\n\tpadding: 3px;\n}\n\n.tc-manager-list-item-heading-selected {\n\tfont-weight: bold;\n\tcolor: <<colour background>>;\n\tfill: <<colour background>>;\n\tbackground-color: <<colour foreground>>;\n}\n\n.tc-manager-list-item-heading:hover {\n\tbackground: <<colour primary>>;\n\tcolor: <<colour background>>;\n}\n\n.tc-manager-list-item-content {\n\tdisplay: flex;\n}\n\n.tc-manager-list-item-content-sidebar {\n flex: 1 0;\n background: <<colour tiddler-editor-background>>;\n border-right: 0.5em solid <<colour muted-foreground>>;\n border-bottom: 0.5em solid <<colour muted-foreground>>;\n white-space: nowrap;\n}\n\n.tc-manager-list-item-content-item-heading {\n\tdisplay: block;\n\twidth: 100%;\n\ttext-align: left;\n background: <<colour muted-foreground>>;\n\ttext-transform: uppercase;\n\tfont-size: 0.6em;\n\tfont-weight: bold;\n padding: 0.5em 0 0.5em 0;\n}\n\n.tc-manager-list-item-content-item-body {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tc-manager-list-item-content-item-body > pre {\n\tmargin: 0.5em 0 0.5em 0;\n\tborder: none;\n\tbackground: inherit;\n}\n\n.tc-manager-list-item-content-tiddler {\n flex: 3 1;\n border-left: 0.5em solid <<colour muted-foreground>>;\n border-right: 0.5em solid <<colour muted-foreground>>;\n border-bottom: 0.5em solid <<colour muted-foreground>>;\n}\n\n.tc-manager-list-item-content-item-body > table {\n\tborder: none;\n\tpadding: 0;\n\tmargin: 0;\n}\n\n.tc-manager-list-item-content-item-body > table td {\n\tborder: none;\n}\n\n.tc-manager-icon-editor > button {\n\twidth: 100%;\n}\n\n.tc-manager-icon-editor > button > svg,\n.tc-manager-icon-editor > button > button {\n\twidth: 100%;\n\theight: auto;\n}\n\n/*\n** Alerts\n*/\n\n.tc-alerts {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tmax-width: 500px;\n\tz-index: 20000;\n}\n\n.tc-alert {\n\tposition: relative;\n\tmargin: 28px;\n\tpadding: 14px 14px 14px 14px;\n\tborder: 2px solid <<colour alert-border>>;\n\tbackground-color: <<colour alert-background>>;\n}\n\n.tc-alert-toolbar {\n\tposition: absolute;\n\ttop: 14px;\n\tright: 14px;\n}\n\n.tc-alert-toolbar svg {\n\tfill: <<colour alert-muted-foreground>>;\n}\n\n.tc-alert-subtitle {\n\tcolor: <<colour alert-muted-foreground>>;\n\tfont-weight: bold;\n}\n\n.tc-alert-highlight {\n\tcolor: <<colour alert-highlight>>;\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-static-alert {\n\t\tposition: relative;\n\t}\n\n\t.tc-static-alert-inner {\n\t\tposition: absolute;\n\t\tz-index: 100;\n\t}\n\n}\n\n.tc-static-alert-inner {\n\tpadding: 0 2px 2px 42px;\n\tcolor: <<colour static-alert-foreground>>;\n}\n\n/*\n** Control panel\n*/\n\n.tc-control-panel td {\n\tpadding: 4px;\n}\n\n.tc-control-panel table, .tc-control-panel table input, .tc-control-panel table textarea {\n\twidth: 100%;\n}\n\n.tc-plugin-info {\n\tdisplay: block;\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground-colour: <<colour background>>;\n\tmargin: 0.5em 0 0.5em 0;\n\tpadding: 4px;\n}\n\n.tc-plugin-info-disabled {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n\tbackground: repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n}\n\n.tc-plugin-info-disabled:hover {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n\tbackground: repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n}\n\na.tc-tiddlylink.tc-plugin-info:hover {\n\ttext-decoration: none;\n\tbackground-color: <<colour primary>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour foreground>>;\n}\n\na.tc-tiddlylink.tc-plugin-info:hover .tc-plugin-info > .tc-plugin-info-chunk > svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-plugin-info-chunk {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n\n.tc-plugin-info-chunk h1 {\n\tfont-size: 1em;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk h2 {\n\tfont-size: 0.8em;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk div {\n\tfont-size: 0.7em;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info:hover > .tc-plugin-info-chunk > img, .tc-plugin-info:hover > .tc-plugin-info-chunk > svg {\n\twidth: 2em;\n\theight: 2em;\n\tfill: <<colour foreground>>;\n}\n\n.tc-plugin-info > .tc-plugin-info-chunk > img, .tc-plugin-info > .tc-plugin-info-chunk > svg {\n\twidth: 2em;\n\theight: 2em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-plugin-info.tc-small-icon > .tc-plugin-info-chunk > img, .tc-plugin-info.tc-small-icon > .tc-plugin-info-chunk > svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-plugin-info-dropdown {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tmargin-top: -8px;\n}\n\n.tc-plugin-info-dropdown-message {\n\tbackground: <<colour message-background>>;\n\tpadding: 0.5em 1em 0.5em 1em;\n\tfont-weight: bold;\n\tfont-size: 0.8em;\n}\n\n.tc-plugin-info-dropdown-body {\n\tpadding: 1em 1em 1em 1em;\n}\n\n/*\n** Message boxes\n*/\n\n.tc-message-box {\n\tborder: 1px solid <<colour message-border>>;\n\tbackground: <<colour message-background>>;\n\tpadding: 0px 21px 0px 21px;\n\tfont-size: 12px;\n\tline-height: 18px;\n\tcolor: <<colour message-foreground>>;\n}\n\n.tc-message-box svg {\n\twidth: 1em;\n\theight: 1em;\n vertical-align: text-bottom;\n}\n\n/*\n** Pictures\n*/\n\n.tc-bordered-image {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tpadding: 5px;\n\tmargin: 5px;\n}\n\n/*\n** Floats\n*/\n\n.tc-float-right {\n\tfloat: right;\n}\n\n/*\n** Chooser\n*/\n\n.tc-chooser {\n\tborder: 1px solid <<colour table-border>>;\n}\n\n.tc-chooser-item {\n\tborder: 8px;\n\tpadding: 2px 4px;\n}\n\n.tc-chooser-item a.tc-tiddlylink {\n\tdisplay: block;\n\ttext-decoration: none;\n\tcolor: <<colour tiddler-link-foreground>>;\n\tbackground-color: <<colour tiddler-link-background>>;\n}\n\n.tc-chooser-item a.tc-tiddlylink:hover {\n\ttext-decoration: none;\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n}\n\n/*\n** Palette swatches\n*/\n\n.tc-swatches-horiz {\n}\n\n.tc-swatches-horiz .tc-swatch {\n\tdisplay: inline-block;\n}\n\n.tc-swatch {\n\twidth: 2em;\n\theight: 2em;\n\tmargin: 0.4em;\n\tborder: 1px solid #888;\n}\n\n/*\n** Table of contents\n*/\n\n.tc-sidebar-lists .tc-table-of-contents {\n\twhite-space: nowrap;\n}\n\n.tc-table-of-contents button {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tc-table-of-contents svg {\n\twidth: 0.7em;\n\theight: 0.7em;\n\tvertical-align: middle;\n\tfill: <<colour sidebar-foreground>>;\n}\n\n.tc-table-of-contents ol {\n\tlist-style-type: none;\n\tpadding-left: 0;\n}\n\n.tc-table-of-contents ol ol {\n\tpadding-left: 1em;\n}\n\n.tc-table-of-contents li {\n\tfont-size: 1.0em;\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li a {\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li li {\n\tfont-size: 0.95em;\n\tfont-weight: normal;\n\tline-height: 1.4;\n}\n\n.tc-table-of-contents li li a {\n\tfont-weight: normal;\n}\n\n.tc-table-of-contents li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n\tline-height: 1.5;\n}\n\n.tc-table-of-contents li li li a {\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n}\n\n.tc-tabbed-table-of-contents {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents {\n\tz-index: 100;\n\tdisplay: inline-block;\n\tpadding-left: 1em;\n\tmax-width: 50%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n\tbackground: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a,\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tdisplay: block;\n\tpadding: 0.12em 1em 0.12em 0.25em;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a {\n\tborder-top: 1px solid <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-background>>;\n\tborder-bottom: 1px solid <<colour tab-background>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a:hover {\n\ttext-decoration: none;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tbackground: <<colour tab-border>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tbackground: <<colour background>>;\n\tmargin-right: -1px;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a:hover {\n\ttext-decoration: none;\n}\n\n.tc-tabbed-table-of-contents .tc-tabbed-table-of-contents-content {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-left: 1.5em;\n\tpadding-right: 1.5em;\n\tborder: 1px solid <<colour tab-border>>;\n\t-webkit-flex: 1 0 50%;\n\tflex: 1 0 50%;\n}\n\n/*\n** Dirty indicator\n*/\n\nbody.tc-dirty span.tc-dirty-indicator, body.tc-dirty span.tc-dirty-indicator svg {\n\tfill: <<colour dirty-indicator>>;\n\tcolor: <<colour dirty-indicator>>;\n}\n\n/*\n** File inputs\n*/\n\n.tc-file-input-wrapper {\n\tposition: relative;\n\toverflow: hidden;\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n\n.tc-file-input-wrapper input[type=file] {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tfont-size: 999px;\n\tmax-width: 100%;\n\tmax-height: 100%;\n\tfilter: alpha(opacity=0);\n\topacity: 0;\n\toutline: none;\n\tbackground: white;\n\tcursor: pointer;\n\tdisplay: inline-block;\n}\n\n/*\n** Thumbnail macros\n*/\n\n.tc-thumbnail-wrapper {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin: 6px;\n\tvertical-align: top;\n}\n\n.tc-thumbnail-right-wrapper {\n\tfloat:right;\n\tmargin: 0.5em 0 0.5em 0.5em;\n}\n\n.tc-thumbnail-image {\n\ttext-align: center;\n\toverflow: hidden;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-image svg,\n.tc-thumbnail-image img {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n\tmin-width: 100%;\n\tmin-height: 100%;\n\tmax-width: 100%;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image img {\n\tfilter: alpha(opacity=0.8);\n\topacity: 0.8;\n}\n\n.tc-thumbnail-background {\n\tposition: absolute;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-icon svg,\n.tc-thumbnail-icon img {\n\twidth: 3em;\n\theight: 3em;\n\t<<filter \"drop-shadow(2px 2px 4px rgba(0,0,0,0.3))\">>\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon img {\n\tfill: #fff;\n\t<<filter \"drop-shadow(3px 3px 4px rgba(0,0,0,0.6))\">>\n}\n\n.tc-thumbnail-icon {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tdisplay: -webkit-flex;\n\t-webkit-align-items: center;\n\t-webkit-justify-content: center;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.tc-thumbnail-caption {\n\tposition: absolute;\n\tbackground-color: #777;\n\tcolor: #fff;\n\ttext-align: center;\n\tbottom: 0;\n\twidth: 100%;\n\tfilter: alpha(opacity=0.9);\n\topacity: 0.9;\n\tline-height: 1.4;\n\tborder-bottom-left-radius: 3px;\n\tborder-bottom-right-radius: 3px;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-caption {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n}\n\n/*\n** Errors\n*/\n\n.tc-error {\n\tbackground: #f00;\n\tcolor: #fff;\n}\n\n/*\n** Tree macro\n*/\n\n.tc-tree div {\n \tpadding-left: 14px;\n}\n\n.tc-tree ol {\n \tlist-style-type: none;\n \tpadding-left: 0;\n \tmargin-top: 0;\n}\n\n.tc-tree ol ol {\n \tpadding-left: 1em; \n}\n\n.tc-tree button { \n \tcolor: #acacac;\n}\n\n.tc-tree svg {\n \tfill: #acacac;\n}\n\n.tc-tree span svg {\n \twidth: 1em;\n \theight: 1em;\n \tvertical-align: baseline;\n}\n\n.tc-tree li span {\n \tcolor: lightgray;\n}\n"
},
"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize",
"text": "15px"
},
"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/bodylineheight",
"text": "22px"
},
"$:/themes/tiddlywiki/vanilla/metrics/fontsize": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/fontsize",
"text": "14px"
},
"$:/themes/tiddlywiki/vanilla/metrics/lineheight": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/lineheight",
"text": "20px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storyleft": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storyleft",
"text": "0px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storytop": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storytop",
"text": "0px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storyright": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storyright",
"text": "770px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storywidth": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storywidth",
"text": "770px"
},
"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth",
"text": "686px"
},
"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint",
"text": "960px"
},
"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth",
"text": "350px"
},
"$:/themes/tiddlywiki/vanilla/options/stickytitles": {
"title": "$:/themes/tiddlywiki/vanilla/options/stickytitles",
"text": "no"
},
"$:/themes/tiddlywiki/vanilla/options/sidebarlayout": {
"title": "$:/themes/tiddlywiki/vanilla/options/sidebarlayout",
"text": "fixed-fluid"
},
"$:/themes/tiddlywiki/vanilla/options/codewrapping": {
"title": "$:/themes/tiddlywiki/vanilla/options/codewrapping",
"text": "pre-wrap"
},
"$:/themes/tiddlywiki/vanilla/reset": {
"title": "$:/themes/tiddlywiki/vanilla/reset",
"type": "text/plain",
"text": "/*! normalize.css v3.0.0 | MIT License | git.io/normalize */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n * user zoom.\n */\n\nhtml {\n font-family: sans-serif; /* 1 */\n -ms-text-size-adjust: 100%; /* 2 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n margin: 0;\n}\n\n/* HTML5 display definitions\n ========================================================================== */\n\n/**\n * Correct `block` display not defined in IE 8/9.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; /* 1 */\n vertical-align: baseline; /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9.\n * Hide the `template` element in IE, Safari, and Firefox < 22.\n */\n\n[hidden],\ntemplate {\n display: none;\n}\n\n/* Links\n ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n background: transparent;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n outline: 0;\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9, Safari 5, and Chrome.\n */\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.\n */\n\nb,\nstrong {\n font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari 5 and Chrome.\n */\n\ndfn {\n font-style: italic;\n}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari 5, and Chrome.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9.\n */\n\nimg {\n border: 0;\n}\n\n/**\n * Correct overflow displayed oddly in IE 9.\n */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari 5.\n */\n\nfigure {\n margin: 1em 40px;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n * Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; /* 1 */\n font: inherit; /* 2 */\n margin: 0; /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10.\n */\n\nbutton {\n overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8+, and Opera\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n * and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n * `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; /* 2 */\n cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome\n * (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; /* 2 */\n box-sizing: content-box;\n}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n border: 0; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n\noptgroup {\n font-weight: bold;\n}\n\n/* Tables\n ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n"
},
"$:/themes/tiddlywiki/vanilla/settings/fontfamily": {
"title": "$:/themes/tiddlywiki/vanilla/settings/fontfamily",
"text": "\"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", \"DejaVu Sans\", sans-serif"
},
"$:/themes/tiddlywiki/vanilla/settings/codefontfamily": {
"title": "$:/themes/tiddlywiki/vanilla/settings/codefontfamily",
"text": "Monaco, Consolas, \"Lucida Console\", \"DejaVu Sans Mono\", monospace"
},
"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment": {
"title": "$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment",
"text": "fixed"
},
"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize": {
"title": "$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize",
"text": "auto"
},
"$:/themes/tiddlywiki/vanilla/sticky": {
"title": "$:/themes/tiddlywiki/vanilla/sticky",
"text": "<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\" type=\"match\" text=\"yes\">\n``\n.tc-tiddler-title {\n\tposition: -webkit-sticky;\n\tposition: -moz-sticky;\n\tposition: -o-sticky;\n\tposition: -ms-sticky;\n\tposition: sticky;\n\ttop: 0px;\n\tbackground: ``<<colour tiddler-background>>``;\n\tz-index: 500;\n}\n``\n</$reveal>\n"
}
}
}
;新規テキストの追加
システムにインストールされているいずれかのフォントを使用して、新規のテキストを PDF に追加できます。
1. TouchUp テキストツールを選択します。
2. テキストを追加する場所を Ctrl キーを押しながらクリックします。
3. 新規テキストのフォントダイアログボックスで、フォントおよびモードを選択して、「OK」をクリックします。
4. 新規のテキストを入力します。
5. フォントサイズおよびその他の属性を変更するには、テキストを選択して右クリックし、「プロパティ」を選択します。
;単一文書内のテキストの認識
1. スキャンした PDF を開きます。
2. 文書/OCR テキスト認識/OCR を使用してテキストを認識を選択します。
3. テキスト認識ダイアログボックスで、「ページ」のオプションを選択します。
4. 必要に応じて「編集」をクリックし、テキスト認識 - 設定ダイアログボックスを開いてオプションを指定します。
注意: 電子署名された PDF を保存すると、署名は無効になります。
{{{
例えば数値が0、-1、-2、3、5、-7とあって、「最小の数値を返しなさい」と言うのなら、Schemeでは
(min 0 -1 -2 3 5 -7)
と書きます。これは良い。
では、リスト(0 -1 -2 3 5 -7)があって「リスト内の最小値を返せ」と言った場合どうするか?
(min '(0 -1 -2 3 5 -7))
これじゃ動かないんですね。こう言う時使うのがapplyです。
(apply min '(0 -1 -2 3 5 -7))
}}}
[[1338. Tech talk: Gauche Scheme | http://www.shido.info/gb/guestbook.php?id=1338]] より
* [[Aptana Studioを使い始めるに際して - 最初の設定|http://kenichinakatsu.air-nifty.com/main/2009/11/aptana-studio-9.html]]
; jQuery プラグイン
* [[ EclipseにAptanaプラグインを入れたのにjQueryのコード補完ができない|http://satomacoto.blogspot.com/2009/11/eclipseaptanajquery.html]]
* [[崖っぷちWEBデザイナーブログ - javascript開発環境をとりあえず作っておく。|http://www.y-tti.com/blog/2009/03/javascript.php]]
ビンガム流体のせん断速度は、塑性応力(yield stress)のところで不連続に変化する。
:$$ 0 < \tau < \tau_0 $$ の時は、 $$ \gamma = 0 $$ 【式A】
であり、
:$$\tau_0 \leq \tau $$ の時は、 $$ \gamma = \dfrac{\tau - \tau_0}{\mu} $$ 【式B】
である。
そのため、([[キャピラリー粘度計]] での)【式3】は成り立たず、以下のように考える必要がある。
:$$ \displaystyle Q = \pi \dfrac{R^3}{\tau_w^3} \left( \int_0^{\tau_0} \gamma_t \tau^2 d\tau + \int_{\tau_0}^{\tau_w} \gamma_t \tau^2 d\tau \right) $$
この式に、【式A】・【式B】を代入し、式を変形すると、
: $$ \displaystyle \dfrac{Q}{\pi R^3} = \dfrac{1}{\tau_w^3} \int_{\tau_0}^{\tau_w} \left( \dfrac{\tau-\tau_0}{\mu_t} \right) \tau^2 d\tau $$
となる。積分計算を行うと、
:$$ \dfrac{Q}{\pi R^3} = \dfrac{1}{\tau_w^3 \mu_t} \left[ \dfrac{1}{4}\tau^4 - \dfrac{\tau_0}{3} \tau^3 \right]_{\tau_0}^{\tau_w} = \dfrac{1}{\tau_w^3 \mu_t} \left( \dfrac{1}{4}\tau_w^4 - \dfrac{\tau_0}{3} \tau_w^3 - \dfrac{1}{4}\tau_0^4 + \dfrac{\tau_0}{3} \tau_0^3 \right) $$
となり、式を変形すると、、
:$$ Q = \dfrac{\pi R^3}{\mu_t} \dfrac{\tau_w}{4} \left(1 - \dfrac{4\tau_0}{3\tau_w} - \dfrac{\tau_0^4}{\tau_w^4} \right) = \dfrac{\pi D^3 \tau_w}{32 \mu} \left[ 1 - \dfrac{4}{3} \left( \dfrac{\tau_0}{\tau_w} \right) + \dfrac{1}{3} \left( \dfrac{\tau_0}{\tau_w} \right)^4 \right] $$
となる。
この式は、以下のように式変形されることもあるかもしれない。
:$$Q = \dfrac{\pi R^3}{\mu_t} (\dfrac{R}{2} \dfrac{\Delta p}{L}) \dfrac{1}{4}(1 - \dfrac{4\tau_0}{3\tau_w} - \dfrac{\tau_0^4}{\tau_w^4}) = \dfrac{\pi R^4}{8\mu_t} \dfrac{\Delta p}{L} (1 - (\dfrac{4}{3})(\dfrac{\tau_0}{\tau_w}) - (\dfrac{\tau_0}{\tau_w})^4) $$
----
! Herschel-Bulkley の場合
Herschel-Bulkley でも頑張れば計算できるらしい。。
[[Rheological Methods in Food Process Engineering (2nd Edition)|http://phariyadi.staff.ipb.ac.id/files/2013/02/STEFFE-Rheology-Book.pdf]]
; 演算子のオーバーロード
* [[演算子のオーバーロード: 日々此精進|http://murakan.cocolog-nifty.com/blog/2009/04/c-4b42.html]]
* [[FrontPage - 自分用メモとか|http://www.tom.sfc.keio.ac.jp/%7Efjedi/wiki/index.php?FrontPage]]
! 継承を用いる場合
; 注意点
* オーバーライドするメソッドには、 ''virtual'' をつける
** virtual をつけないと、メソッドを呼び出すクラス変数の型によって呼び出されるメソッドが変わってしまう
* ので、ポリモーフィズムを使いたい場合は、デストラクタも ''virtual'' にしておく
* 抽象メソッドは、こんな感じ (クラス定義の中に書く)
** ''virtual bool initialize() = 0;''
** イコール0が大事
! テンプレートを用いる場合
* [[C++ のテンプレートでダックタイピング - bkブログ | http://0xcc.net/blog/archives/000053.html]]
;calc-custom.l
{{{
(provide "calc-custom")
;;; load "calc-mode".
(eval-when (:compile-toplevel :load-toplevel :execute)
(require "calc"))
(in-package :user)
;; 三角形が成り立つかどうか?
(defun triangle-inequality(a b c)
(and (= (count-if #'plusp (list a b c)) 3)
(< (abs (- b a)) c)
(< c (+ b a))))
;; 三角形の面積
(defun heron(a b c)
(unless (triangle-inequality a b c)
(error "与えられた辺の長さでは三角形が作れません: ~F ~F ~F" a b c))
(let ((s (/ (+ a b c) 2)))
(sqrt (* s (- s a) (- s b) (- s c)))))
;; 円の面積
(defun circle(r)
(when (minusp r)
(error 'range-error :datum r))
(* r r calc::pi))
;; アニュラス(ドーナッツみたいな形)の面積
(defun ring(or ir)
(when (< or ir)
(error "外側の円より内側の円が大きいです: or:~F ir:~F" or ir))
(- (circle or) (circle ir)))
;;;; ----------------------------------------
;;; pipe 計算
;; 断面積
(defun cross-section(diameter)
(circle (/ diameter 2)))
;; アニュラスの面積
(defun annulus(od id) (ring (/ od 2) (/ id 2)))
;; 単位変換
(defun inch2cm(inch) (* inch 2.54))
(defun cm2inch(cm) (/ cm 2.54))
(defun knot2mh(knot) (* knot 1852))
;;;; ----------------------------------------
;; 計算結果を小数で表示
(setq ed::*calc-ratio* 'float)
(add-hook 'ed::*calc-mode-hook*
#'(lambda()
(setf (symbol-function 'calc::heron) #'heron)
(setf (symbol-function 'calc::circle) #'circle)
(setf (symbol-function 'calc::ring) #'ring)
(setf (symbol-function 'calc::annulus) #'annulus)
(setf (symbol-function 'calc::pcs) #'cross-section)
;; 単位変換
(setf (symbol-function 'calc::inch2cm) #'inch2cm)
(setf (symbol-function 'calc::cm2inch) #'cm2inch)
(setf (symbol-function 'calc::knot2mh) #'knot2mh)
))
;; タブ補完
(define-key *calc-mode-map* #\Tab 'lisp-complete-symbol)
;;;; ----------------------------------------
;; calc の履歴
(require "calc-ext")
(define-key *calc-mode-map* #\PageDown 'calc-complete-next)
(define-key *calc-mode-map* #\PageUp 'calc-complete-previous)
}}}
↑
↓
←
→
Ctrl + P
Ctrl + N
Ctrl + B
Ctrl + F
Ctrl + L
Return
{{{
(defvar-local calc-curr-line)
(define-key *calc-mode-map* #\RET
#'(lambda()
(calc-eval-line-add-history)
(setq calc-curr-line (current-line-number))))
}}}
* The Bothy Band
* [[銀河(初回盤): 原田郁子|http://www.amazon.co.jp/%E9%8A%80%E6%B2%B3-%E5%88%9D%E5%9B%9E%E7%9B%A4-%E5%8E%9F%E7%94%B0%E9%83%81%E5%AD%90/dp/B001F4RWH4/ref=sr_1_1?ie=UTF8&s=music&qid=1234107838&sr=8-1]]
** ジャケットよかった
** 曲はまあ普通
** と思ったけど意外とよかった
** ちょっと違うけど<br />[[アルバム『ケモノと魔法』発売記念 8週間集中連載『原田郁子秘宝館 ドキッ! ~めくるめく感嘆符と溜め息の世界~』 第1回 - CDJournal.com|http://www.cdjournal.com/main/special/harada.php?no=1]]
* The Shaggs
** [[My Pal Foot Foot|http://www.shaggs.com/]]
* Grandma Lo-Fi
** [[【伝説のおばあちゃんミュージシャン】70歳で宅録デビュー | http://youpouch.com/2015/02/04/250145/]]
** http://www.grandmalofi.is/music/
* [[My Get Up And Go Just Got Up And Went : Ass |http://www.amazon.co.jp/My-Get-Up-Just-Got/dp/B001672L8K/ref=sr_1_5?ie=UTF8&s=music&qid=1251531522&sr=8-5]]
** 結構よいかも
・ktermインストール
xtermと競合するので、
yum remove xterm
yum remove utempter
rpm -ivh utempter-0.5.2-5.i386.rpm
rpm -ivh kterm-6.2.0-23.i386.rpm
rpm -ivh xterm-215-5.el5.i386.rpm
* [[Create Link |https://chrome.google.com/webstore/detail/gcmghdmnkfdbncmnmlkkglmnnhagajbm#]]
** Makelink みたいなやつ
* [[Neat Bookmarks |https://chrome.google.com/webstore/detail/nnancliccjabjjmipbpjkfbijifaainp?hl=ja]]
** [[ツールバーのボタン1つでブックマークを楽々管理できるChromeの拡張機能「Neat Bookmarks」|http://www.lifehacker.jp/2011/05/110510neat_bookmarks.html]]
* [[ChromeやIEでブックマークのセパレータを実現する『Separete This』 | 100SHIKI|http://www.100shiki.com/archives/2011/04/separate_this.html]]
! Clapeyron Equation
相境界の傾きを表す式。厳密に成り立つ。
$$ \dfrac{dp(T)}{dT} = \dfrac{H_{vap}(T;N)}{T(V_G(T;N)-V_L(T;N))} = \dfrac{h_{vap}(T)}{T(v_G(T)-v_L(T))} $$
($$h_{vap}, v$$ は、1 mol あたりの蒸発エンタルピーと体積)
! Clausius-Clapeyron equation
Clapeyron Equation にいくつかの近似を適用し、使いやすくした式。
$$ \dfrac{d}{dT} \ln(p) = \dfrac{h_{vap}(T)}{RT^2} $$
$$\ln(\dfrac{P(T_2)}{P(T_1)}) = - \dfrac{h_{vap}}{R} (\dfrac{1}{T_2} - \dfrac{1}{T_1})$$
```
- 気体のモル体積を求めるのに、理想気体の式を使っている
- 液体のモル体積を無視している
- 気化熱 ΔH が温度に対して一定であると仮定している
```
http://science.shinshu-u.ac.jp/~tiiyama/?page_id=6948
! アントワンの式 (Antoine equation)
蒸気圧 $$(p^{sat})$$ に関する semi-empirical correlations 。式中の A, B, C は、物質ごとに決められる定数。
$$ \log_{10} p^{sat} = A - \dfrac{B}{T + C}$$
$$T = \dfrac{B}{A - \log_{10} p^{sat}} - C $$
----
! 導出
!! Helmholtz Energy から導く場合
相境界において、等温等圧で「液体 ⇒ 気体」にする準静操作。
$$ F[T; V_L(T;N), N] - F[T; V_G(T;N), N] = p_v(T) (V_G(T;N) - V_L(T;N)) $$
この式の両辺を T で微分すると、
$$ -S(T; V_L(T;N), N) - \dfrac{\partial V_L (T;N)}{\partial T} p(T; V_L(T;N), N) + S(T; V_G(T;N), N) + \dfrac{\partial V_G (T;N)}{\partial T} p(T; V_G(T;N), N) $$
$$ = \dfrac{dP_v(T)}{dT} (V_G(T;N) - V_L(T;N)) + p_v (T) (\dfrac{\partial V_G(T; N)}{\partial T} - \dfrac{\partial V_L(T; N)}{\partial T})$$
となる。
$$ p(T; V_L(T;N), N) = p(T; V_G(T;N), N) = p_v(T) $$ なので、上の式は、
$$ \dfrac{dp_v(T)}{dT} = \dfrac{S(T;V_G(T;N),N) - S(T;V_L(T;N),N)}{V_G(T;N) - V_L(T;N)} $$
と変形できる。さらに [[蒸発のエンタルピー|エンタルピー]] を用いて書き直すと、
$$ \dfrac{dp_v(T)}{dT} = \dfrac{H_{vap}(T;N)}{T (V_G(T;N) - V_L(T;N))} $$
となる。
----
! Clausius-Clapeyron equation について
Clausius-Clapeyron equation は、いくつかの仮定を置いている。
!! 近似1: 液体のモル体積を無視する
臨界温度よりも十分に低い温度であれば、液体のモル体積は小さいので、 $$v_L \simeq 0$$ とみなす。
$$ \dfrac{dp(T)}{dT} = \dfrac{H_{vap}(T;N)}{T(V_G(T;N)-V_L(T;N))} \simeq \dfrac{H_{vap}(T;N)}{TV_G(T;N)}$$ 【式1】
!! 近似2: 気体のモル体積を求めるのに、理想気体の式を使う
$$V_G$$ の計算に理想気体の状態方程式を使うと、【式1】は以下のように変形できる。
$$ \dfrac{dp(T)}{dT} \simeq \dfrac{H_{vap}(T;N)}{TV_G(T;N)} \simeq \dfrac{H_{vap}(T;N)}{T} \dfrac{p(T)}{NRT} = \dfrac{p(T)h_{vap}(T)}{RT^2}$$ 【式2】
さらに、$$ \dfrac{d}{dp} ln(p) = \dfrac{1}{p} $$ なので、$$p(T)$$ 左辺を移動させて、式変形すると、
$$ \dfrac{1}{p(T)} \dfrac{dp(T)}{dT} = \dfrac{d}{dp} ln(p) \dfrac{d}{dT}p(T) = \dfrac{d}{dT}ln(P)$$
となるため、【式2】は以下のようにも表される。
$$ \dfrac{d}{dT}ln(P) = \dfrac{h_{vap}(T)}{RT^2}$$ 【式3】
!! 近似3: 気化熱 ΔH が温度に対して一定であるとする。
気化熱 ΔH が温度に対して一定であるとすると、$$h_{vap}(T)$$ は定数と見なせる。
この仮定の下で【式3】の両辺を T で不定積分すると、
$$ln(P) = - \dfrac{h_{vap}}{R} \dfrac{1}{T} + C$$ 【式4】
となる(Cは積分定数)。
なお、$$T_1$$から$$T_2$$まで積分したときは、
$$log(\dfrac{P(T_2)}{P(T_1)}) = - \dfrac{h_{vap}}{R} (\dfrac{1}{T_2} - \dfrac{1}{T_1})$$ 【式5】
となる。
----
! Antoine
クラウジウス-クラペイロンの式は、実測値との一致はあまりよくない。そのため、実際的な応用には、semi-empirical な Antoine が使われる。
!! 式について
【式4】は二つの定数 A, B を用いて、以下のように単純化して表すことができる。
$$log_{10}(P) = A - \dfrac{B}{T}$$
しかしながら、この式は、実測値との一致はあまりよくない。そのため、補正項を入れ、ABCを実験的に決めた。
$$log_{10}(P) = A - \dfrac{B}{T+C}$$
```
つまり、AntoineのCは曲率の解消の為必要で、AntoineのBは傾きを示し、AntoineのAは切片を示すことがわかる。
```
https://www.pirika.com/JP/ChemEng/AntoineTheory.html
----
$$log_{10}(P) = - \dfrac{1}{2.303} \dfrac{h_{vap}}{R} \dfrac{1}{T} + C$$
! Colebrook equation
管壁の粗さを考慮した摩擦係数を求めるための Correlation
: $$\dfrac{1}{f_D} = - 2 \log_{10} {\left (\dfrac{\epsilon / D}{3.71} + \dfrac{2.51}{Re \sqrt{f_D}} \right)}$$
---
!! [[ニュートン法]] での解き方
陽には解けないが、ニュートン法が使える。
$$F(f_D) = \dfrac{1}{f_D} + 2 \log_{10} {\left (\dfrac{\epsilon / D}{3.71} + \dfrac{2.51}{Re \sqrt{f_D}} \right)}$$
$$\dfrac{dF}{df_D} = - f_D^{-3/2} \left[ \dfrac{1}{2} +\dfrac{2.51}{\ln(10) (\dfrac{2.51}{Re \sqrt{f_D}} + \dfrac{\epsilon}{3.7 D}) Re} \right] $$
[[THE NEWTON-RAPHSON ITERATION TECHNIQUE APPLIED TO THE COLEBROOK EQUATION|http://www.pumpfundamentals.com/download-free/appendix%20B.pdf]]
!! Sample Code
```r
# Darcy friction factor
colebrook_ <- function(roughness, D, Re, tol=1e-8, warn=TRUE) {
core_ <- function(roughness, D, Re) {
if (Re <= 4000 && (warn == TRUE)) { warning("Re <= 4000 !") }
fun <- function(fD) {
(1 / sqrt(fD)) + 2 * log10( roughness / D / 3.71 + 2.51 / Re / sqrt(fD))
}
# Derivative of fun().
dFun <- function(fD) {
- fD^(-3/2) * (1/2 + 2.51 / log(10) / (2.51 / Re / sqrt(fD) + roughness / 3.71 / D) / Re)
}
fD_n <- FCP$fD.Blasius(Re)
d <- fun(fD_n) / dFun(fD_n)
# Newton–Raphson method
while (abs(d) >= tol) {
d <- fun(fD_n) / dFun(fD_n)
fD_n <- fD_n - d
}
fD_n
}
mapply(core_, roughness, D, Re)
}
```
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
; cons
(cons X Y)
「X を car」 「Y を cdr」 として、コンスセルを新しく作り、この新しいコンスセルへのポインタを返します。
(通常はリストですが) Y が特定のあるタイプでなくてはならないという制限はありません。
; list
(list X Y Z ...)
=> (X Y Z ...)
単純に、引数を要素とするリストを作成する。
結果として返されるリストは(常に) nil でターミネート(訳注:終端)されています。
引数 が与えられない場合、 empty リストを返します。
(empty リストは、評価されると nil になる?)
{{{
(list 1 2 3)
=>(1 2 3)
(list 1 '(20 30) 4 '(50 60 (700 800)))
=> (1 (20 30) 4 (50 60 (700 800)))
(cdr (list 1 2))
=> (2)
(cdr (cdr (list 1 2)))
=> nil
}}}
; append
[R5RS] 渡されたリストの要素を繋げたリストを返します。
''最後の引数の部分以外は''新しいセルがアロケートされて使われます。
最後の引数は正規のリストである必要がありません。
その場合、結果は正規でないリストとなります。
{{{
(append '(1 2 3) '(4 5))
=> (1 2 3 4 5)
(append (list 1 2 3 4) 5)
=> (1 2 3 4 . 5)
(append (list 1 2 3 4) (list 5))
=> (1 2 3 4 5)
}}}
* [[appendによるconsセル操作方法 - 睡眠不足?! | http://d.hatena.ne.jp/sleepy_yoshi/20080608/p2]]
** appendは新しくコピーをつくるイメージがあったけれど,どうやら第1引数のリストはコピーして,最後のcdrに2引数の先頭へのポインタを格納する省コスト操作をしているらしい.
<<tag Covid-19>>
----
! ''統計情報へのリンク''
{{コロナの統計情報!!text}}
! ''あれこれ情報''
<$reveal type="nomatch" state="$:/state/Covid-19_Links" text="show"><$button set="$:/state/Covid-19_Links" setTo="show">Show</$button></$reveal>
<$reveal type="match" state="$:/state/Covid-19_Links" text="show">
<$button set="$:/state/Covid-19_Links" setTo="hide">Hide</$button>
<<<
{{Covid-19_Links!!text}}
<<<
</$reveal>
----
! ''感染拡大の基本的な考え方''
!! ''新規感染者''
新規感染者数は、「''感染者数と非感染者の接触数''」と「''(接触において) 感染する確率''」の掛け算になる。
:新規感染者数 = ''感染者数と非感染者の接触数'' × ''感染する確率''
もう少し細かい話は [[コロナの新規感染者数の計算]] を参照。
- - - - - - - - - -
!! ''感染対策''
ワクチン以前の全ての感染対策は「感染者数と非感染者の接触数」もしくは「(接触において) 感染する確率」の値を下げるためのものである。
!!! 接触数を減らす対策
* ロックダウン
* 検査 + 感染者の隔離
* 国境の封鎖
!!! 感染する確率を下げる対策
* マスク
* 距離を保つ
* ワクチン
* 換気
* ...
ワクチン以降は、ワクチンが重症化の確率も大幅に下げる (らしい) ので、今後は対策の仕方が変化していくはず。
- - - - - - - - - -
!! ''感染対策としての検査''
検査は必ず感染者の隔離とセットで考える必要がある。
* ''コロナでは無症状の感染者も他人にウィルスを感染させる''
* 無症状なので、検査をしない限り感染しているかは分からない
* 感染が分かった段階で隔離することにより、(検査をしていなければ起こったであろう) ''感染者数と非感染者の接触数'' を減らすことができる
つまり、検査だけでは十分ではなく、''「検査後の感染者の隔離」がなければ感染対策にはならない''。
; 偽陽性の話
* 適切にサンプリング・検査が行われていれば、ほぼほぼ起こりえない
* 基本的には「''PCR検査で偽陽性になった人を、陰性だと断定する方法が無くね?''」で済む話だと思う
* もし偽陽性が起こるのであれば、ニュージーランドなどの長期間感染者がゼロという状況は起こりえない
- - - - - - - - - -
!! ''感染者数の減少''
当たり前のことだが、感染者数が減少するのは、回復した人と死亡した人の合計数が新規感染者数を上回った時。
:新規感染者数 < 回復した人数 + 死亡数
----
! ''感染のプロセス''
* 最初は飛沫感染が主要な感染経路と考えられていたが、
** 飛沫感染: 感染者から出る __5 um 以上のウィルスを含む液滴__ を吸い込むことによる感染
** 距離を取るのは、飛沫感染に対しては有効な手段
* 空気感染も起きるらしい
** 空気感染: ほとんど水がない __5 um 以下の飛沫核__ を吸い込むことによる感染
** 飛沫核はサイズが非常に小さく長時間空気中を漂うため、距離を取る効果は小さくなる
* あとは、ウィルスが付着した場所を触った手で、食べ物を食べるとか、顔を触るとか
; 空気感染
* [[飛沫(ひまつ)感染と空気感染の違いって何だろう?|https://www.showa-u.ac.jp/albums/abm.php?d=755&f=abm00002848.pdf&n=%E8%96%AC%E3%81%A8%E5%AD%A6%E3%81%B6_2015%E5%B9%B4%E5%A4%8F%E5%8F%B7%E3%80%8C%E3%81%AA%E3%82%93%E3%81%A7%E3%81%A0%E3%82%8D%E3%81%86%EF%BC%9F%E3%80%8D%E3%81%AE%E8%A7%A3%E8%AA%AC.pdf]]
** 感染は別の言い方で飛沫核感染といいます。飛沫核とは、飛沫の水分が蒸発した小さな粒子のことで、これを吸いこむことで感染するのが飛沫核感染、つまり空気感染ということになります。
* https://www.science.org/doi/10.1126/science.abd9149
; ワクチン
* [[COVID-19 vaccination – AstraZenecaに関する情報|https://www.health.gov.au/sites/default/files/documents/2021/08/covid-19-vaccination-astrazeneca-updated-astrazeneca-information_10.pdf]]
** TTS は稀な症例です。最新の推計では、~AstraZeneca 社製COVID-19 ワクチン接種者10万人につき1~2 人の割合で発症すると考えられています。この割合は、60 歳未満の人ではやや高くなり、10万人につき2~3 症例とされています。今後、情報の蓄積に伴ってこれらの推計は変更される可能性があります。
; イギリス
* [[デルタ株とワクチン集団免疫の夢と現実(小野昌弘) - 個人 - Yahoo!ニュース|https://news.yahoo.co.jp/byline/onomasahiro/20210814-00253177]]
* [[【解説】 イギリス政府はパンデミックとどう闘ったか 1年間の舞台裏 - BBCニュース|https://www.bbc.com/japanese/features-and-analysis-56507062]]
- - - - -
; ニュースとか
* [[オーストラリアでデルタ株拡大 「新たな局面」に入ったと豪財務相 - BBCニュース|https://www.bbc.com/japanese/57633630]]
; font プロパティでまとめて設定
```css
h3 {
font-style: normal;
font-variant: small-caps;
font-weight: bold;
font-size: x-large;
line-height: 1.5;
font-family: sans-serif;
}
```
は
```css
h3 {
font: normal small-caps bold x-large/1.5 sans-serif;
}
```
となる。
省略可能なプロパティ
* font-style
* font-variant
* font-weight
* line-height
らしい
実在気体を表現する状態方程式で、3次方程式の形をしているもの。ファンデルワールスの EOS から派生した様々な式が存在する。
三次方程式なので、解の個数が場合によって異なるが、それぞれの解は次のように扱う。
* 解が1つ (⇒ 単相の流体)
* 解が3つ (⇒ 二相の流体)
** 最小のモル体積を与える解: 液相
** 最大のモル体積を与える解: 気相
** 中間の値: 使わない
! Generalized Cubic EOS
$$ p = \dfrac{RT}{v - b} - \dfrac{a\alpha(T_r, \omega)}{v^2 + ubv + wb^2}$$
$$ a = \Omega_a \dfrac{(RT^C)^2}{p^C}, b = \Omega_b\dfrac{RT^C}{p^C}$$
| EOS | u | w | Ωa | Ωb | α | 補足 |h
|vdW | 0 | 0 | 27/64 | 1/8 | 1 | |
|RK | 1 | 0 | 0.42748 | 0.08664 | $$1/\sqrt{T_r}$$ | |
|SRK | 1 | 0 | 0.42748 | 0.08664 | $$(1 + m(1 - \sqrt{T_r}))^2$$ |m = 0.48508 + 1.55171*Ω - 0.15613*Ω^2 |
|PR | 2 | -1 | 0.45724 | 0.07780 | $$(1 + m(1 - \sqrt{T_r}))^2$$ | m = 0.37464 + 1.54226*Ω - 0.26992*Ω^2 |
!! Fugacity Coefficient
$$\ln \phi_k = \dfrac{b_k}{b} (Z-1) - \ln(Z-B) + \dfrac{A}{ B\sqrt{u^2+4w^2}} \left(\dfrac{b_k}{b} - \dfrac{2 \sum_i x_i a_{ik}}{a} \right) \ln \left[ \dfrac{2Z+B(u+\sqrt{u^2-4w^2})}{2Z+B(u-\sqrt{u^2-4w^2})} \right]$$
* $$Z = \dfrac{pV_m}{RT}$$
---
! [[ファンデルワールス状態方程式]] (van der Waals EOS)
$$\left( p + \dfrac{a}{V_m^2} \right) \left(V_m - b \right) = RT$$
理想気体に対して、「''分子間に働く引力'' (第1項)」と「''分子が占める体積'' (第2項)」の影響を考慮した式。
理想気体からのずれは、2つの係数 a, b によって表現される。
$$ a = \dfrac{27 (RT^C)^2}{64 p^C}, b = \dfrac{RT^C}{8p^C}$$
- - - - -
; 式を圧力で整理した場合
$$ p = \dfrac{RT}{V_m - b} - \dfrac{a}{V_m^2}$$
; 式をモル体積で整理した場合
---
! Redlich-Kwong (RK)
ファンデルワールス状態方程式では定数だった、係数 ''a'' を温度の関数で表すようにした。
* Pvap の予測精度が悪い (分子を球と仮定していることによる)
* $$Z^C (= 1/3)$$ の値が大きすぎる (実際は、 $$\approx 0.27$$)
* vliq の予測精度が悪い
---
! Soave Redlich-Kwong (SRK)
Acentric Factor (ω) の導入。 (⇒ Pvap の予測精度が向上)
$$ p = \dfrac{RT}{V_m - b} - \dfrac{a \alpha}{V_m (V_m + b)}$$
・ $$ a = \dfrac{0.42748 R^2 T_c^2}{p_c} $$
・ $$ b = \dfrac{0.08664 R T_c}{p_c} $$
・ $$\alpha = ( 1 + m (1 - T_r^{0.5}) )^2$$
・ $$m = 0.48508 + 1.55171 \omega - 0.15613 \omega^2 $$
!! Polynomial Form:
$$Z^3 - Z^2 + (A - B - B^2) Z - AB = 0$$
・ $$A = a \dfrac{\alpha p}{R^2 T^2} = \dfrac{0.42748 R^2 T_c^2}{p_c} \dfrac{\alpha p}{R^2 T^2} = 0.42748 \dfrac{\alpha p_r}{T_r^2}$$
・ $$B = b \dfrac{p}{RT} = \dfrac{0.08664 R T_c}{p_c} \dfrac{p}{RT} = 0.08664 \dfrac{p_r}{T_r}$$
・
!! Mixing Rule
・ $$\displaystyle a = \sum_i \sum_j x_i x_j (1 - \delta_{ij}) \sqrt{a_i a_j} $$
・ $$\displaystyle b = \sum_i x_i b_i $$
---
{{Peng-Robinson!!text}}
---
---
メモ
間違ってるかも
$$Z^3 - (1 - B^* - uB^*) Z^2 + (A^* + w B^{*2} - u B^* + u B^{*2}) Z - A^* B^* - w B^{*2} - w B^{*3} = 0$$
・ $$A^* = \dfrac{ap}{RT^2}$$
・ $$B^* = \dfrac{bp}{RT}$$
https://www.slideshare.net/UKCCSRC/g-romanos-co2questfp714april2014
バルブ等のフローデバイスに関しては、ベンダーは 通常 Equivalent Length や Loss Coefficient の代わりに、 Cv (あるいは Kv)値 を提供する。
$$ C_v = Q \sqrt{\dfrac{\dfrac{\rho}{\rho_v}}{\Delta P}} $$
($$\rho_v:$$ 60 °F の水の密度)
```
In more practical terms, the flow coefficient Cv is the volume (in US gallons) of water at 60° F that will flow per minute through a valve with a pressure drop of 1 psi across the valve.
```
- - - - - - - - - -
! K との関係
K を代入した Darcy Weisbach Equation は、
$$ Q = \left( A \sqrt{\dfrac{2}{K \rho_v}} \right) \sqrt{\dfrac{\Delta P}{\dfrac{\rho}{\rho_v}}} $$
と変形できる。
これより、
$$ C_v = A \sqrt{\dfrac{2}{K \rho_v}} $$
; 言語仕様
* <<slider tocSlider 右シフト演算 右シフト演算>>
* <<slider tocSlider 予約済み識別子 予約済み識別子>>
* [[ 可変長マクロ (C99のみ) | http://seclan.dll.jp/c99d/c99d02.htm ]]
* [[C 言語での名前空間の違いの: uyota 匠の一手 | http://uyota.asablo.jp/blog/2006/08/24/497407 ]]
* [[8 参考となる文献 | http://www.bk.tsukuba.ac.jp/~makimura/JohoShori/node275.html ]]
; 実装
* [[c言語における数値表現|http://www.isc.meiji.ac.jp/~deptec/cmanapdx1.html]]
; ライブラリ
*[[Programming UNIX Sockets in C|http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja.html]]
*[[pthread_*|http://www.saiin.net/~silphire/pthread/pthread.html]]
*[[トークン解析|http://www.nurs.or.jp/~sug/soft/super/ungetch.htm]]
; コンパイル
* <<slider tocSlider Makefile雛形 Makefile雛形>>
* [[冗長インクルードガード | http://www.02.246.ne.jp/~torutk/cxx/file/includeguard.html]]
** よほど大きなコードでなければ、気にしなくてもよさげ
; Electric Fence
* [[Free Software from Bruce Perens|http://perens.com/FreeSoftware/]]
* [[メモリ破壊検出ツール electric fenceの使い方|http://www.phactory.jp/blog/pyblosxom.cgi/tech/081026.html]]
* [[Electric Fence - 初学者の箸置|http://d.hatena.ne.jp/tkuro/20081015/1224053506]]
; その他
* [[C99じゃないコンパイラで、可変引数付きデバッグ用マクロを定義する例 | http://d.hatena.ne.jp/Wacky/20060611/1150007606 ]]
* [[Super Technique 講座~ザ・レトロ・アルゴリズム「バイナリサーチ」徹底解説! | http://www.nurs.or.jp/~sug/soft/super/bsearch.htm ]]
* [[Cygwinのstackdumpファイル - hat-tunの日記|http://d.hatena.ne.jp/hat-tun/20090724/1248448233]]
* HelloWorld
* [[gcc のデバッグ術|http://www-or.amp.i.kyoto-u.ac.jp/algo-eng/db/debug.html]]
* [[mallocで取ったメモリのサイズを確認する方法 | http://blog.miraclelinux.com/asianpen/2007/08/malloc_0e94.html ]]
* [[3つのプログラミング言語での getopt の使い方メモ - Sleepless geek in Seattle | http://d.hatena.ne.jp/yoshifumi1975/20090624/p1 ]]
* [[Manpage of GETOPT | http://www.linux.or.jp/JM/html/LDP_man-pages/man3/getopt.3.html ]]
* [[ヅラずれなるままに(2003-04-01) - 指定したディレクトリ内のファイルを表示するプログラム | http://www.nilab.info/zurazure/20030401.html ]]
* [[プロファイラ gprof の使い方 | http://blog.majide.com/2009/03/usage-of-gprof/ ]]
* [[メモリーリークの検出:mtrace , valgrind:プログラマー社長のブログ:ITmedia オルタナティブ・ブログ | http://blogs.itmedia.co.jp/komata/2009/10/mtrace-valgrind.html ]]
円管での摩擦損失を計算する式。
:$$ \dfrac{\Delta P}{L} = f_D \dfrac{\rho v^2}{2 D} $$
なお、体積流量を用いて表した場合は、次のようになる。
:$$\dfrac{\Delta P}{L} = f_D \dfrac{8 \rho Q^2}{\pi^2 D^5}$$
---
! 摩擦係数 (Darcy Friction Factor)
!! Laminar Flow ([[Hagen-Poiseuille流れ]])
$$f_D = \dfrac{64}{Re}$$
!! Blasius (乱流・スムーズな管)
$$ f_D = 0.316 Re^{-0.25}$$
$$\ \ \ \ \Rightarrow \dfrac{\Delta P}{L} \propto \left(\dfrac{\mu}{vD\rho}\right)^{0.25} \dfrac{\rho v^2}{D} = D^{(-5/4)} \rho^{(3/4)} v^{(7/4)} \mu^{(1/4)}$$
!! Colebrook Equation
$$\dfrac{1}{f_D} = - 2 \log_{10} {\left (\dfrac{\epsilon / D}{3.71} + \dfrac{2.51}{Re \sqrt{f_D}} \right)}$$
* $$\epsilon$$: roughness
---
! その他
!! 体積流量を用いた表現
$$Q = v \left( \pi \dfrac{D^2}{4} \right) $$ なので、$$v = \dfrac{4Q}{\pi D^2}$$
これを、ダルシー・ワイスバッハの式に代入すると、
:$$\dfrac{\Delta P}{L} = f_D \dfrac{\rho}{2 D} \dfrac{16 Q^2}{\pi^2 D^4} = f_D \dfrac{8 \rho Q^2}{\pi^2 D^5}$$
となる。
また、摩擦係数を $$f_D \propto Re^{-0.25}$$ とすると (Blasius の式)、
:$$\dfrac{\Delta P}{L} \propto D^{(-19/4)} \rho^{(3/4)} \mu^{(1/4)} Q^{(7/4)}$$
となる。層流の場合は $$f_D \propto Re^{-1}$$ なので、
:$$\dfrac{\Delta P}{L} \propto D^{-4} \mu Q$$
となる。
- - - - -
!! せん断応力との関係
力のつり合いは、
: $$\pi \left( \dfrac{D}{2} \right)^2 \left( \dfrac{\Delta P}{L} \right) = \tau_{w} \pi \dfrac{D}{2} $$
と表せるので、この式を整理すると、以下の関係が得られる。
:$$\tau_w = \dfrac{D}{4} \dfrac{\Delta P}{L} = f_D \dfrac{\rho v^2}{8} $$
<<<
In thermodynamics, a departure function is defined for any thermodynamic property as the difference between the property as computed for an ideal gas and the property of the species as it exists in the real world, for a specified temperature T and pressure P. Common departure functions include those for enthalpy, entropy, and internal energy.
<<<
[[Departure function - Wikipedia|https://en.wikipedia.org/wiki/Departure_function]]
---
* https://www.youtube.com/watch?v=sOEXW5qzMr8
! 発散 (divergence) の定義
ある点(微小領域)を出入りする流束の正味の量。連続で微分可能なベクトル場 ''A'' の 点 p における発散は、次のように定義される([[らしい|https://en.wikipedia.org/wiki/Divergence]])。
物理では、$$\Delta x \Delta y \Delta z$$ で表されるコントロールボリュームにおける流出入の収支を表すのによく使う。
:$$\displaystyle \mathrm{div} \mathbf{A}|_p = \lim_{V \to p} \iint_{S(V)} \dfrac{\mathbf{A} \cdot \mathbf{n}}{|V|} dS$$
同様にして、二階のテンソル場 ''T'' の発散は、次のように定義される。
:$$\displaystyle \mathrm{div} \mathbf{T}|_p = \lim_{V \to p} \iint_{S(V)} \dfrac{\mathbf{T} \cdot \mathbf{n}}{|V|} dS = \lim_{V \to p} \iint_{S(V)} \dfrac{\mathbf{T} ( \mathbf{n} )}{|V|} dS$$
''T''(''n'') はベクトルなので (Tをベクトルの線形写像とみなせばよい)、二階のテンソルの発散はベクトルになる。
- - - - -
!! 三次元の正規直交座標
三次元の正規直交座標では、次のように表すことができる。
:$$\displaystyle \mathrm{div} \mathbf{A}|_p = \dfrac{\partial A_x}{\partial x} + \dfrac{\partial A_y}{\partial y} + \dfrac{\partial A_z}{\partial z} = \sum_i \dfrac{\partial A_i}{\partial x_i}$$
厳密ではないが、次のような形で考えればよい。
:$$\displaystyle \lim_{\Delta x, \Delta y, \Delta z \to 0}\dfrac{\Delta y \Delta z \left[e_x \cdot A(x+\Delta x,y,z) - e_x \cdot A(x,y,z)\right] }{\Delta x \Delta y \Delta z} = \lim_{\Delta x \to 0} \dfrac{\left[A_x(x+\Delta x,y,z) - A_x(x,y,z)\right] }{\Delta x} = \dfrac{\partial A_x}{\partial x}$$
また、三次元の正規直交座標では、次のようになる。
:$$\displaystyle \mathrm{div} \mathbf{T}|_p = \begin{pmatrix} \dfrac{\partial T_{xx}}{\partial x} + \dfrac{\partial T_{yx}}{\partial y} + \dfrac{\partial T_{zx}}{\partial z} \\ \\ \dfrac{\partial T_{xy}}{\partial x} + \dfrac{\partial T_{yy}}{\partial y} + \dfrac{\partial T_{zy}}{\partial z} \\ \\ \dfrac{\partial T_{xz}}{\partial x} + \dfrac{\partial T_{yz}}{\partial y} + \dfrac{\partial T_{zz}}{\partial z} \end{pmatrix} = \sum_i \dfrac{\partial T_{jj}}{\partial x_i}$$
----
!! ∇ 演算子
発散は、div の代わりに ∇ 演算子を使って表すことも多い。この場合、ドット付きの ∇ 演算子 (''∇⋅'') を、左からベクトルに作用させる。
正規直交直交座標上で、三次元のベクトル $$v = v_x i + v_y j + v_z k $$ に作用させた場合、以下のようになる。
$$\nabla \cdot v = \begin{pmatrix} \dfrac{\partial}{\partial x} & \dfrac{\partial}{\partial y} & \dfrac{\partial}{\partial z} \end{pmatrix} \cdot \begin{pmatrix} v_x & v_y & v_z \end{pmatrix} = \dfrac{\partial v_x}{\partial x} + \dfrac{\partial v_y}{\partial y} + \dfrac{\partial v_z}{\partial z} $$
* http://sekatsu-kagaku.sub.jp/colloid.htm
* https://www.ms-scientific.com/atoz/atoz3
---
疎水コロイド(hydrophobic colloid)
親水コロイド(hydrophilic colloid)
* [[Let’s use doxygen! | http://www.fides.dti.ne.jp/~oka-t/doxygen.html]]
; 設定ファイルについて
* [[Doxygenの使い方 - HongoWiki | http://ceres.phys.s.u-tokyo.ac.jp/~yuasa/wiki/index.php/Doxygen%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9]]
; 細かい使い方
* [[グループ化 | http://www.fides.dti.ne.jp/~oka-t/doxygen-manual/html/grouping.html ]]
* [[コメント規約例 | http://www.02.246.ne.jp/~torutk/cxx/doxygen/doxygenstyles.html]]
* [[コメントサンプル |http://d.hatena.ne.jp/ymotongpoo/20071208/1197104363]]
; ほか
* [[Windowsでdoxygenを使ってみる: よしなしごと | http://trivia.cocolog-nifty.com/blog/2007/12/doxygen_4f97.html ]]
$$v_g = C_0 v_{mix} + V_{gj}$$
----
! Drift Velocity
局所的な、混相流と気相(or 液相)の速度差。
!! 実験で求める場合
$$ \dfrac{v_{sg}}{\alpha} = C_0 (v_{sg} + v_{sl}) + V_{gj} $$
$$ v_{sg}, v_{sl}, \alpha$$ が分かれば、実験で得られたデータが直線で近似できれば、傾きから $$C_0$$ が、切片から $$V_{gj}$$ が求まる。
* [[【コラム】イマドキのIDE事情 (34) Eclipseのショートカットを使いこなそう |http://journal.mycom.co.jp/column/ide/034/index.html]]
* [[インクリメンタルサーチ|http://www.confrage.com/eclipse/edit/search_next_inc/search_next_inc.html]]
* [[eclipse エディタの文字コード設定 |http://www.deftrash.com/blog/archives/2006/09/eclipse_encoding.html]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
; プラグイン
* [[Easy Explorer - discypus|http://discypus.jp/wiki/?eclipse%2Fplugin%2FEasy%20Explorer]]
** 「パッケージ」や「ナビゲータ」ビューで、ポップアップメニューに「Explorerで開く」機能を追加するプラグイン。
* [[Checkstyle Plug-in for Eclipse|http://eclipse-cs.sourceforge.net/]]
* [[FindBugs|http://findbugs.sourceforge.net/index.html]]
* [[JadClipse|http://sourceforge.net/projects/jadclipse/]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
! ショートカット
; カーソル移動
|Ctrl + Left |前の単語へ |
|Ctrl + Right |次の単語へ |
|Home |行頭へ |
|End |行末へ |
; 検索
|Ctrl + f |検索 |
|Ctrl + j |インクリメンタルサーチ |
|Ctrl + Shift + j |インクリメンタルサーチ(逆方向) |
|Ctrl + k |次を検索 (検索する文字列は、マウスで選択した範囲になる) |
|Ctrl + Shift + k |1つ前を検索 |
; ソースを読む
|F3 |カーソルを合わせている要素の宣言部にジャンプする |
|Ctrl + t |編集中のインタフェースを実装しているクラスを、表示する |
|F4 |型階層を開く |
|Ctrl + Alt + h |メソッドの呼び出し元を表示する<br>(「右クリック -> 呼び出し階層を開く」でもよい) |
; ソースを書く
|Ctrl + Shift + f |インデントを直す |
|Ctrl + o |インポート編成 |
|Ctrl + space |クラスメンバの補完 |
! Javadoc
* [[Eclipse 上で UTF-8 のソースから javadoc を生成する方法 - Be an Idealistic Realist|http://d.hatena.ne.jp/beyondseeker/20080515/1210779274]]
! CVS
;文字コードの設定
# 「ウィンドウ -> ビューの表示 -> その他 -> CVSリポジトリー」 でCVSリポジトリーのウィンドウを出す。
# リポジトリ上で右クリック
# 「プロパティー -> サーバー・エンコード -> その他」に、指定したいエンコーディングタイプをセット
; リモートとの比較
# 比較したファイルの上で右クリック
# 「比較 -> ヒストリー」
# ヒストリーのビューが表示されるので、比較したいバージョンの上で右クリック
# 「現在をX.Xと比較」
! 逆コンパイル
* [[@IT:Java TIPS -- Eclipseで逆コンパイルを行う|http://www.atmarkit.co.jp/fjava/javatips/073eclipse025.html]]
* [[Emacs Lisp プログラミング:|http://www.bookshelf.jp/texi/elisp-intro/jp/emacs-lisp-intro.html]]
* [[Programming in Emacs Lisp: Table of Contents|http://www.math.s.chiba-u.ac.jp/~matsu/lisp/emacs-lisp-intro-jp_toc.html]]
* [[[elisp][emacs] ヘルプ機能を使いこなすために - goinger的日記|http://d.hatena.ne.jp/goinger/20070717/1184680410]]
* [[【メモ】Emacs/xyzzyのいやなところ - Yet Another Decent Diary|http://d.hatena.ne.jp/wasisan/20081204/p1]]
* [[Emacs Lisp|http://www.mew.org/~kazu/doc/elisp/index.html]]
* [[Emacs Lisp TIPS|http://homepage.mac.com/zenitani/elisp-j.html]]
<<tag "EnglishVocabulary">>
<<list-links filter:[tag[EnglishVocabulary]] >>
エルボー等の部分では、直管よりも圧力損失が大きくななる。この大きくなった分の圧力損失に関しては、Equivalent Length という概念を導入することで、Darcy Weisbach Equation で計算することが可能になる。
$$ L_e = \dfrac{L}{D} $$
と定義し、これを Darcy Weisbach Equation に代入すると、
$$ \Delta P = \left( \dfrac{L}{D} \right) f_D \dfrac{\rho v^2}{2} = L_e f_D \dfrac{\rho v^2}{2} $$
となる。
コンポーネントごとの Equivalent Length の値は、配管関係の本をみれば、大抵載っている。
* [[Pressure Loss from Fittings – Equivalent Length Method – Neutrium|https://neutrium.net/fluid_flow/pressure-loss-from-fittings-equivalent-length-method/]]
[[オーストラリア 学生ビザ申請方法 1/2(2017年版) - MY FIRST STEP|https://www.myfirststep.com.au/%E3%82%AA%E3%83%BC%E3%82%B9%E3%83%88%E3%83%A9%E3%83%AA%E3%82%A2%E7%95%99%E5%AD%A6%E3%81%AE%E6%B5%81%E3%82%8C/%E5%87%BA%E7%99%BA%E5%89%8D%E6%BA%96%E5%82%99/%E5%AD%A6%E7%94%9F%E3%83%93%E3%82%B6%E7%94%B3%E8%AB%8B%E6%96%B9%E6%B3%95-part-1/]]
[[Student Visa|http://japan.embassy.gov.au/tkyo/studentvisa.html]]
! 必要なものなど
* Identity
** 多分、パスポート
* Evidence of intended study
** a Confirmation of Enrolment (CoE) for all intended courses if applying outside Australia.
** a CoE or letter of offer for all intended courses if applying in Australia (a CoE must be provided before the visa can be granted).
* Health insurance
** Overseas Student Health Cover (OSHC).
* Genuine Temporary Entrant requirement
* Employment history
* Migration Agent
----
!! Genuine Temporary Entrant requirement
```
Evidence to show that you meet the Genuine Temporary Entrant requirement for a student visa. This must include a statement in your application form that you intend to stay in Australia temporarily and/or documentation to support claims. The statement must be written by the applicant even if using an agent.
You can include evidence such as:
- Proof of employment – your current or most recent employment which includes payslips or a contract. You can also attach your most recent curriculum vitae or résumé. Your curriculum vitae or résumé should include employment and educational history.
- Qualifications - a certified copy of your academic transcripts, Educational Certificate (Degree, Diploma etc.) or letter/statement from your overseas Education Institution.
- Australian qualifications - a certified copy of your academic transcripts, Educational Certificate (Degree, Diploma etc.) or letter/statement from your Australian Education Institution.
We will consider your circumstances, your immigration history, if you are a minor and the intentions of a parent, legal guardian or spouse, and any other relevant matter.
```
[[Documentary Evidence List | http://www.border.gov.au/Trav/Visa-1/500-]]
----
! Health
* [[My health declarations|https://www.border.gov.au/Trav/Visa/Heal/meeting-the-health-requirement/health-examinations/my-health-declarations]]
----
* [[オーストラリアの学生ビザ - オーストラリア留学のことなら、オーストラリア留学センター|https://www.wavenetwork.com.au/aus-visa/st.html]]
; 健康診断
* [[ビザ申請用の健康診断について|http://japan.embassy.gov.au/tkyojapanese/healthexam_jp.html]]
----
* [[オーストラリア大使館指定病院リスト シドニー留学センター|https://sydney-study.com/visa/panel-doctors/]]
* [[Australian Government Department of Immigration and Border Protection|http://www.border.gov.au/]]
* https://future-students.uq.edu.au/files/3234/UQ_GTE_Statement_of_Purpose.pdf
----
```
①以前の勉強とこれからの勉強はどのようなつながりがあるのか
②今後の将来のプランとどのようなつながりがあるのか
③何故この学校のこのコースに申し込む必要があるのか
④オーストラリアを選ぶ理由
つまり"オーストラリアのこの学校のこのコースに通学したい理由"をまとめるものです。
```
[[学生ビザのルール変更に伴う追加書類(GTEとは?)|オーストラリアでお困りのことはございませんか?|http://ameblo.jp/ssa-australia/entry-12178514295.html]]
```
質問の内容を読んでも、具体的に何を書くのかが分かりません。しかし、答えるべき内容の質問はこちら。
・なぜ留学をしたいのか
・なぜその学校およびコースを選んだのか
・なぜ日本で10年も英語を勉強しているのに、またオーストラリアで英語を学びたいのか?
・なぜ日本で勉強するのではなくオーストラリアで勉強する必要があるのか?
・英語の勉強が過去の自分の勉強や就労とどのように関係するのか
・英語の勉強が自分の将来やキャリアにどのように影響を与えるのか
・オーストラリア留学費用の支弁方法
・コースが終了したら日本に帰る理由(なぜ学生終了後に日本に帰るのか正当な理由)
これらの答えを踏まえて、文章を作るようにしてください。
```
[[新しい「学生ビザ」申請のコツ!知っておくべきGTE関連の質問の答え方 留学準備マニュアル2017年版|http://blog.aus-ryugaku.com/how-to-answer-gte-questions/]]
!文字修飾
|!修飾|!例|!書式|
|太文字|''Bold''|’'Bold’'|
|打消線|--Strike--|--Strike--|
|アンダーライン|__Underline__|__Underline__|
|イタリック|//Italic//|//Italic//|
|上付き文字|2^^3^^=8|2^^3^^=8|
|下付き文字|a~~ij~~ = -a~~ji~~|a~~ij~~ = -a~~ji~~|
|ハイライト|@@highlight@@|@@highlight@@|
|カラー|@@color(green):green colored@@|@@color(green):green colored@@|
|バックグランドカラー|@@bgcolor(#a0ffa0):カラー@@|@@bgcolor(#a0ffa0):カラー@@|
|固定ピッチ|{{{Monospaced text}}}|{{{Monospaced text}}}|
|リンク|http://www.tiddlywiki.com/|http://www.tiddlywiki.com/|
|タイトル指定|[[TiddlyWiki本家|http://www.tiddlywiki.com/]]|[[TiddlyWiki本家|http://www.tiddlywiki.com/]]|
|イメージ表示|[img[http://www.tiddlywiki.com/favicon.ico]]|[img[http://www.tiddlywiki.com/favicon.ico]]|
|Slider|<<slider chkSliderHelp MainMenu 'MainMenu ≫' 'Open MainMenu'>>|<<slider 'cookie name' 'tiddler name' 'title text' 'tooltip'>>|
|tabs|<<tabs chkTabHelp 'Menu Main' 'Display MainMenu' MainMenu 'Menu Side' 'Display SideBarOp' SideBarOptions >>|<<tabs chkTabHelp 'Menu Main' 'Display MainMenu' MainMenu 'Menu Side' 'Display SideBarOp' SideBarOptions>>|
|WikiName|大文字アルファベット2文字か→|[[リンクページ名]]|
!横線
----
書式
----
!ヘッダ
!Header 1
!!Header 2
!!!Header 3
!!!!Header 4
!!!!!Header 5
書式
!Header 1
!!Header 2
!!!Header 3
!!!!Header 4
!!!!!Header 5
!箇条書き
!!!!オーダーなし
*箇条書き1
**箇条書き1-1
**箇条書き1-2
***箇条書き1-2-1
*箇条書き2
**箇条書き2-1
**箇条書き2-2
**箇条書き2-3
書式
*箇条書き1
**箇条書き1-1
**箇条書き1-2
***箇条書き1-2-1
*箇条書き2
**箇条書き2-1
**箇条書き2-2
**箇条書き2-3
!!!!オーダーあり
#箇条書き1
##箇条書き1-1
##箇条書き1-2
###箇条書き1-2-1
#箇条書き2
##箇条書き2-1
##箇条書き2-2
##箇条書き2-3
書式
#箇条書き1
##箇条書き1-1
##箇条書き1-2
###箇条書き1-2-1
#箇条書き2
##箇条書き2-1
##箇条書き2-2
##箇条書き2-3
!引用
!!!!その1
<<<
引用内容1
引用内容2
引用内容3
引用内容4
<<<
書式
<<<
引用内容1
引用内容2
引用内容3
引用内容4
<<<
!!!!その2
>level 1
>level 1
>>level 2
>>level 2
>>>level 3
>>>level 3
>>level 2
>level 1
書式
>level 1
>level 1
>>level 2
>>level 2
>>>level 3
>>>level 3
>>level 2
>level 1
!テーブル
|!1111111|!2222222|
|>| colspan |
| rowspan |左|
|~| 右|
|bgcolor(#a0ffa0):colored| 中央 |
|caption|c
書式
|!1111111|!2222222|
|>| colspan |
| rowspan |左|
|~| 右|
|bgcolor(#a0ffa0):colored| 中央 |
|caption|c
!!!!文字寄せ
|の左に文字を付けて記述すると左寄せ
|の左を空けて、右に寄せて記述すると右寄せ
|の左右を空けて記述すると中央寄せ
!!!!セル結合
|>|で列の結合表示
|~|でそのセルの行を結合して表示
!Special Tags
|excludeSearch|excludes a tiddler from search results|
|excludeLists|excludes a tiddler from the lists in the sidebar tabs|
|systemConfig|marks tiddlers that contain JavaScript that should be executed once TiddlyWiki has loaded|
|excludeMissing|excludes a tiddler from the processing that generates the MissingTiddlers list. Use it when you have a tiddler that contains links to missing tiddlers and you don't want those missing links to appear in the `MissingTiddlers list.|
NOTE: Missing tiddlers are ones that have been linked to, but don't have anything in them yet. Just as likely you used WikiWords without de-wikifing them like this ~WikiWords. They can be found under the More>Missing tab in the right sidebar. What ever you do don't worry about them.
!メンテ用
GettingStarted
DefaultTiddlers
MainMenu
SiteTitle
SiteSubtitle
[[Macros]]
!各種設定
[[Default]]
ColorPalette
StyleSheetLayout
!文字修飾
|!修飾|!例|!書式|
|太文字|''Bold''|’'Bold’'|
|打消線|~~Strike~~|~~Strike~~|
|アンダーライン|__Underline__|__Underline__|
|イタリック|//Italic//|//Italic//|
|上付き文字|2^^3^^=8|2^^3^^=8|
|下付き文字|a~~ij~~ = -a~~ji~~|a~~ij~~ = -a~~ji~~|
|ハイライト|@@highlight@@|@@highlight@@|
|カラー|@@color(green):green colored@@|@@color(green):green colored@@|
|バックグランドカラー|@@bgcolor(#a0ffa0):カラー@@|@@bgcolor(#a0ffa0):カラー@@|
|固定ピッチ|{{{Monospaced text}}}|{{{Monospaced text}}}|
|リンク|http://www.tiddlywiki.com/|http://www.tiddlywiki.com/|
|タイトル指定|[[TiddlyWiki本家|http://www.tiddlywiki.com/]]|[[TiddlyWiki本家|http://www.tiddlywiki.com/]]|
|イメージ表示|[img[http://www.tiddlywiki.com/favicon.ico]]|[img[http://www.tiddlywiki.com/favicon.ico]]|
|Slider|<<slider chkSliderHelp MainMenu 'MainMenu ≫' 'Open MainMenu'>>|<<slider 'cookie name' 'tiddler name' 'title text' 'tooltip'>>|
|tabs|<<tabs chkTabHelp 'Menu Main' 'Display MainMenu' MainMenu 'Menu Side' 'Display SideBarOp' SideBarOptions >>|<<tabs chkTabHelp 'Menu Main' 'Display MainMenu' MainMenu 'Menu Side' 'Display SideBarOp' SideBarOptions>>|
|WikiName|大文字アルファベット2文字か→|[[リンクページ名]]|
!横線
----
書式
----
!ヘッダ
!Header 1
!!Header 2
!!!Header 3
!!!!Header 4
!!!!!Header 5
書式
!Header 1
!!Header 2
!!!Header 3
!!!!Header 4
!!!!!Header 5
!箇条書き
!!!!オーダーなし
*箇条書き1
**箇条書き1-1
**箇条書き1-2
***箇条書き1-2-1
*箇条書き2
**箇条書き2-1
**箇条書き2-2
**箇条書き2-3
書式
*箇条書き1
**箇条書き1-1
**箇条書き1-2
***箇条書き1-2-1
*箇条書き2
**箇条書き2-1
**箇条書き2-2
**箇条書き2-3
!!!!オーダーあり
#箇条書き1
##箇条書き1-1
##箇条書き1-2
###箇条書き1-2-1
#箇条書き2
##箇条書き2-1
##箇条書き2-2
##箇条書き2-3
書式
#箇条書き1
##箇条書き1-1
##箇条書き1-2
###箇条書き1-2-1
#箇条書き2
##箇条書き2-1
##箇条書き2-2
##箇条書き2-3
!引用
!!!!その1
<<<
引用内容1
引用内容2
引用内容3
引用内容4
<<<
書式
<<<
引用内容1
引用内容2
引用内容3
引用内容4
<<<
!!!!その2
>level 1
>level 1
>>level 2
>>level 2
>>>level 3
>>>level 3
>>level 2
>level 1
書式
>level 1
>level 1
>>level 2
>>level 2
>>>level 3
>>>level 3
>>level 2
>level 1
!テーブル
|!1111111|!2222222|
|>| colspan |
| rowspan |左|
|~| 右|
|bgcolor(#a0ffa0):colored| 中央 |
|caption|c
書式
|!1111111|!2222222|
|>| colspan |
| rowspan |左|
|~| 右|
|bgcolor(#a0ffa0):colored| 中央 |
|caption|c
!!!!文字寄せ
|の左に文字を付けて記述すると左寄せ
|の左を空けて、右に寄せて記述すると右寄せ
|の左右を空けて記述すると中央寄せ
!!!!セル結合
|>|で列の結合表示
|~|でそのセルの行を結合して表示
!Special Tags
|excludeSearch|excludes a tiddler from search results|
|excludeLists|excludes a tiddler from the lists in the sidebar tabs|
|systemConfig|marks tiddlers that contain JavaScript that should be executed once TiddlyWiki has loaded|
|excludeMissing|excludes a tiddler from the processing that generates the MissingTiddlers list. Use it when you have a tiddler that contains links to missing tiddlers and you don't want those missing links to appear in the `MissingTiddlers list.|
NOTE: Missing tiddlers are ones that have been linked to, but don't have anything in them yet. Just as likely you used WikiWords without de-wikifing them like this ~WikiWords. They can be found under the More>Missing tab in the right sidebar. What ever you do don't worry about them.
!メンテ用
GettingStarted
DefaultTiddlers
MainMenu
SiteTitle
SiteSubtitle
[[Macros]]
!各種設定
[[Default]]
ColorPalette
StyleSheetLayout
; セルの絶対参照
```
セル参照の列と行の前に「$」を付けておくと、数式をコピーしてもセル参照は変更されません。このようなセル参照の形式を「絶対参照」といいます。
```
[[Excelでセル参照を固定したまま数式をコピーするには Excel関数 できるネット|https://dekiru.net/article/4464/]]
; 数式で名前を定義し使用する
```
[新しい名前] ダイアログ ボックスを使って名前を定義する
1. [数式] タブの [定義された名前] で [名前の定義] をクリックします。
2. [新しい名前] ダイアログ ボックスの [名前] ボックスに、参照時に使用する名前を入力します。
3. [新しい名前] ダイアログ ボックスを使って名前を定義する
4. 必要に応じて、[コメント] ボックスに半角で最大 255 文字の説明文を入力できます。
5. [参照範囲] ボックスで、次のいずれかの操作を行います。
- セル参照を入力するには、そのセル参照を入力します。
- 定数を入力するには、「=」(等号) を入力し、定数値を入力します。
- 数式を入力するには、「=」を入力し、数式を入力します。
6. 終了してワークシートに戻るには、[OK] をクリックします。
```
[[数式で名前を定義し使用する - Excel|https://support.office.com/ja-jp/article/%E6%95%B0%E5%BC%8F%E3%81%A7%E5%90%8D%E5%89%8D%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%97%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B-4d0f13ac-53b7-422e-afd2-abd7ff379c64]]
----
; FORECAST 関数
```
説明
既存の値を使用して将来の値を計算または予測します。 予測する値は、指定した x の値に対する y の値です。 既存の x と既存の y から得られる回帰直線上で、x の値に対する従属変数 (y) の値を予測します。 この関数を使うと、将来の売上高、商品在庫量、消費動向などを予測できます。
構文
FORECAST(x, 既知の y, 既知の x)
FORECAST 関数の書式には、次の引数があります。
X 必ず指定します。予測する従属変数の値に対する独立変数の値を、数値で示します。
既知の y 必ず指定します。 既知の従属変数の値が入力されているセル範囲または配列を指定します。
既知の x 必ず指定します。 既知の独立変数の値が入力されているセル範囲または配列を指定します。
```
```
注: Excel 2016 では、この関数が新しい Forecasting 関数の一部として、FORECAST.LINEAR に置き換えられました。下位互換性のために引き続き利用できますが、Excel 2016 の新しい関数の使用を検討してください。
```
[[FORECAST 関数 - Office サポート|https://support.office.com/ja-jp/article/forecast-%E9%96%A2%E6%95%B0-50ca49c9-7b40-4892-94e4-7ad38bbeda99]]
----
; VSTO アドイン
* http://ser1zw.hatenablog.com/entry/2018/12/12/182142
# Tools -> [[advanced search|$:/AdvancedSearch]] -> Filter
# 出力したい Tiddler を指定
#* 例: [tag[R言語]] [tag[微分]]
# Form の右に表示される出力ボタンをクリック
----
; sample
```
熱力学 熱力学第一法則 熱力学第二法則 [tag[熱力学第二法則]] Maxwellの関係式 熱力学の物理量 熱容量 表面張力 ギブスの自由エネルギー エンタルピー ヘルムホルツの自由エネルギー
流体力学 連続の式 ナビエ・ストークス方程式 ナビエ・ストークス方程式の導出 フィックの法則 粘度 流体の変形・回転
```
! $$e^x$$の定義
$$f(x) = e^x$$ は、次のように定義される。
$$e^x = \displaystyle \lim_{n \to \infty}{ \left(1+\dfrac{x}{n} \right)^n}$$
この定義に x = 0 を代入すると、 $$f(0) = 1$$ であることが分かる。また、 $$e^x$$ の微分では、 $$f'(x) = f(x)$$ の関係が成り立つ。
なお、この2つの性質を定義として用いることもある(らしい)。
* $$f(0) = 1$$
* $$f(x) = f'(x) $$
f(x) を x=0 の周りで [[Taylor展開]] してみると、
$$f(x) = f(0) + f'(0) (x - 0) + \dfrac{1}{2!} f''(0) (x-0)^2 + \dfrac{1}{3!} f'''(0) (x-0)^3 + ... $$
$$ = 1 + x + \dfrac{1}{2!} x^2 + \dfrac{1}{3!} x^3 + ... $$
$$\displaystyle = \lim_{n \to \infty}\sum_{k=0}^n \dfrac{x^k}{k!} $$
となるが、これは最初の定義と一致する(説明は以下に記載)。
---
$$\displaystyle s_n = \sum_{k=0}^n \dfrac{x^k}{k!}, t_n = \left(1+\dfrac{x}{n} \right)^n$$ とする。
まず、$$t_n$$ は次のように展開できる。
$$\displaystyle t_n = \left(1+\dfrac{x}{n} \right)^n = 1 + \sum_{k=1}^{n} {}_n \mathrm{C} _k \dfrac{x^k}{n^k}$$
$$\displaystyle = 1 + {}_n \mathrm{C} _1 \dfrac{1}{n} x + {}_n \mathrm{C}_2 \dfrac{1}{n^2} x^2 + {}_n \mathrm{C}_3 \dfrac{1}{n^3} x^3 + ...$$
$$\displaystyle = 1 + x + \dfrac{1}{2!} (1 - \dfrac{1}{n}) x^2 + \dfrac{1}{3!} (1 - \dfrac{1}{n}) (1 - \dfrac{n-2}{n})x^3 + ...$$
これと $$s_n$$ を比べると、 $$t_n \leq s_n$$ なのは明らかなので、
$$\displaystyle e^x = \lim\inf_{n \to \infty} t_n \leq \lim\inf_{n \to \infty} s_n $$
という関係が得られる。
ここで 自然数 m (2 < m < n) を用いて $$\displaystyle s_m = \sum_{k=0}^m \dfrac{x^k}{k!}$$ を定義すると、 $$\displaystyle s_m \leq \lim\sup_{n \to \infty} t_n = e^x$$ である。
さらに、 m を無限大に近づけることを考えれば、$$\displaystyle \lim\sup_{n \to \infty} s_m \leq \lim\sup_{n \to \infty} t_n = e^x$$ である。
https://en.wikipedia.org/wiki/Characterizations_of_the_exponential_function
<<tag>>
! コマンドの形
```
ffmpeg [入力オプション] -i 入力ファイル名 [出力オプション] 出力ファイル名
```
[[ffmpegの基本的な使い方 Gnzo Labo|https://gnzo.com/labo/archives/100]]
- -
https://tech.recruit-mp.co.jp/infrastructure/auto_video_editing_with_ffmpeg/
----
! 基本的な使い方
!! 動画/音声の情報を得る
```
$ ffmpeg -i 確認したいファイル
```
- - - - - -
!! 早送り・スローモーション
<<<
;入力オプションとしての r
入力ファイルの前に指定する。総フレーム数はそのままに1秒あたりのフレームレートを指定するので、オリジナルよりフレームレートが少なければ映像時間が長く、多ければ映像時間が短くなる
コマンド例
```
ffmpeg -r 30 -i input.mkv -vcodec utvideo output.mkv
```
<<<
https://nico-lab.net/setting_fps_with_ffmpeg/
- - - - - -
!! 動画から連番画像を作成
<<<
```
$ ffmpeg -i input.mp4 -vcodec png image_%03d.png
```
この場合は、入力動画のfpsが保たれる形でpng画像が出力されます。例えば、30秒で10fpsの動画ならば300枚のpng画像が出力されます。
...
```
$ ffmpeg -i input.mp4 -vcodec mjpeg image_%03d.jpg
```
jpgの連番画像を出力させたいときは "-vcodec mjpeg" にします。
"-f image2" を書く例も良くみられるのですが、無くても問題なく連番画像の出力はできました。また、-vcodec オプションを書かなくても大丈夫でした。推測ですが、拡張子から自動で画像フォーマットを判断しているようなので、これらのオプションは無くても問題ないのかもしれません。
<<<
[[ffmpegで連番画像から動画生成 / 動画から連番画像を生成 ~コマ落ちを防ぐには~ - Qiita|https://qiita.com/livlea/items/a94df4667c0eb37d859f]]
- - - - - -
!! 時間を指定して動画の一部分を切り出す
```
# n.mpg の9分20秒の位置から5分58秒間の間の動画を m.mpg に切り出す
ffmpeg -i n.mpg -ss 00:09:20 -t 00:05:58 -acodec copy -vcodec copy m.mpg
```
[[ffmpeg に関する覚え書き – dyama's page|https://dyama.org/ffmpeg/]]
- - - - - -
!! 動画の画面の一部分を切り出す
```
# m.mpg を上から50ピクセル、左から140ピクセル、下から40ピクセル、
# 右から12ピクセル切り詰めた動画を a.mpg に切り出す
ffmpeg -i m.mpg -croptop 50 -cropleft 140 -cropbottom 40 -cropright 12 -sameq a.mpg
最近の ffmpeg では、-crop*オプションが廃止され、フィルタとして動作させるようになったようです。
# m.mpg を上から10ピクセル、左から20ピクセル切り詰めた 320x240 サイズの動画を a.mpg に切り出す
ffmpeg -i m.mpg -vf crop=320:240:10:20 -sameq a.mpg
一部のバージョンでは、W:H:X:Y の順序ではなく X:Y:W:H の場合もあるようです。
```
[[ffmpeg に関する覚え書き – dyama's page|https://dyama.org/ffmpeg/]]
- - - - - -
!! 動画をタイル配置する
<<<
次のコマンドでは、4つの入力動画(1.avi,2.avi,3.avi,4.avi)を左上に1.avi、右上に2.avi、左下に3.avi、右下に4.aviの配置でタイル上に並べた動画をoutput.mkvとして出力する[1]。
```
ffmpeg -i 1.avi -i 2.avi -i 3.avi -i 4.avi
-filter_complex "
nullsrc=size=640x480 [base];
[0:v] setpts=PTS-STARTPTS, scale=320x240 [upperleft];
[1:v] setpts=PTS-STARTPTS, scale=320x240 [upperright];
[2:v] setpts=PTS-STARTPTS, scale=320x240 [lowerleft];
[3:v] setpts=PTS-STARTPTS, scale=320x240 [lowerright];
[base][upperleft] overlay=shortest=1 [tmp1];
[tmp1][upperright] overlay=shortest=1:x=320 [tmp2];
[tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3];
[tmp3][lowerright] overlay=shortest=1:x=320:y=240
"
-c:v libx264 output.mkv
```
-filter_complexオプションの引数は全体をダブルクオーテーションで囲む。
<<<
[[ffmpegで動画をタイル配置する - Akionux-wiki|http://ja.akionux.net/wiki/index.php/ffmpeg%E3%81%A7%E5%8B%95%E7%94%BB%E3%82%92%E3%82%BF%E3%82%A4%E3%83%AB%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B]]
- - - - - -
!! 動画に別録りした音声をつける
<<<
```
ffmpeg -i input.mp4 -i audio.mp3 -c:v copy -c:a aac -strict experimental -map 0:v -map 1:a output.mp4
```
;解説
ffmpeg では -i オプションを繰り返し指定することで、複数の入力ファイルを指定できる。最初の -i オプションで指定したファイルは 0 番目のファイル、次の -i オプションで指定したファイルは 1 番目のファイルとなる。
この例では、前述の -map オプションを用いて、input.mp4 ファイルの動画ストリームと audio.mp3 の音声ストリームを合わせて output.mp4 として出力している。
<<<
http://moriyoshi.hatenablog.com/entry/2015/12/17/224127
; 公式ドキュメント
* [[ffmpeg Documentation|https://www.ffmpeg.org/ffmpeg.html]]
---
! FFmpeg に関する情報の表示
|''-decoders'' |Show available decoders. |
|''-encoders'' |Show available encoders. |
! 入力オプション
|オプション |説明 |h
|''-i'' 入力ファイル |読み込みファイルの指定。複数のソースを読み込むことが可能 |
複数のファイルを読み込んだ場合には、映像とオーディオにどのファイルを使うかを、指定する必要がある。
* https://www.ffmpeg.org/ffmpeg.html#Examples
! 出力オプション
!! 時間の指定
|オプション |説明 |h
|''-ss'' 時間 |動画の再生開始位置 |
!! コーデック
|オプション |説明 |h
|''-acodec'' コーデック名 |オーディオの圧縮コーデックを指定 |
|''-c:a'' コーデック名 |~|
|''-an'' |出力にオーディオを含めない |
|''-vcodec'' コーデック名 |映像の圧縮コーデックを指定 |
|''-c:v'' コーデック名 |~|
|''-vn'' |出力に映像を含めない |
利用可能なコーデックは ''./ffmpeg -encoders'' で確認可能
----
----
! コマンドオプション
!! -vcodec
```
-vcodec rawvideo
```
----
* [[ffmpeg に関する覚え書き – dyama's page|https://dyama.org/ffmpeg/]]
* [[ffmpegでよくつかうやつ - Qiita|https://qiita.com/hirorock/items/2c500c2d46981d8087d9]]
* [[最新ffmpeg/ビデオオプション - MobileHackerz Knowledgebase Wiki|http://mobilehackerz.jp/archive/wiki/index.php?%BA%C7%BF%B7ffmpeg%2F%A5%D3%A5%C7%A5%AA%A5%AA%A5%D7%A5%B7%A5%E7%A5%F3]]
----
```
# rgb8888 -> bmp
ffmpeg -vcodec rawvideo -f rawvideo -pix_fmt rgb32 -s 640x480 -i fb.raw -f image2 -vcodec bmp fb.bmp
# rgb565 -> bmp
ffmpeg -vcodec rawvideo -f rawvideo -pix_fmt rgb565 -s 640x480 -i fb.raw -f image2 -vcodec bmp fb.bmp
# bmp -> rgb8888
ffmpeg -vcodec bmp -i fb.bmp -vcodec rawvideo -f rawvideo -pix_fmt rgb32 fb.raw
# bmp -> rgb565
ffmpeg -vcodec bmp -i fb.bmp -vcodec rawvideo -f rawvideo -pix_fmt rgb565 fb.raw
```
[[BMPとRAWデータ(RGB8888/RGB565)の相互変換メモ - Qiita|https://qiita.com/koara-local/items/0b750355b1a9135ff53f]]
* [[find コマンドの -mtime は +1 でも2日前のファイルが対象|http://sonic64.com/2005-07-06.html]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
; コマンドのフォーマット
''find [検索するパス] [オプション...]''
; 検索条件の指定
''-name [pattern]''
ファイル名の条件
( * などのシェルのパターンを使用する場合は、patternを "" で囲む)
''-mtime [n]''
ファイルの最終更新日時の条件
n : n日前に更新されたファイル
+n: n+1日以上前に更新されたファイル
-n : n-1日以内に更新されたファイル
''-mmin [n]''
ファイルの最終更新日時の条件
n : n分前に更新されたファイル
+n: n+1分以上前に更新されたファイル
-n : n-1分以内に更新されたファイル
; -exec オプションについて
-exec オプションをつけることで、検索で見つかったファイルに対して処理を行うことが可能である。
-execオプションの指定方法は、
-exec command ;
となる。
find のコマンドラインで指定されたこれ以降の引き数は、 `;' を含む引き数にいた る まで、
すべて command の引き数とみなされる。文字列 `{}' は現在処理しているファイル名に置き換えられる。
これらの文字はシェルによって展開されないよう、 `\' によってエスケープするか引用符で囲む必要がある。
コマンドはfind を実行したディレクトリから実行される。
使用例
''find . -name "*.h" -exec grep define {} \;''
----
NYACUS の find では、
どうも、'';'' を ''";"'' としないとだめみたい。
こんな感じ、
''find . -name *.h -exec grep define {} ";"''
* [[All-in-One Gestures|https://addons.mozilla.org/ja/firefox/addon/12]]
* [[Firebug|https://addons.mozilla.org/ja/firefox/addon/1843]]
* [[Web Developer|https://addons.mozilla.org/ja/firefox/addon/60]]
* [[Make Link|https://addons.mozilla.org/en-US/firefox/addon/142]]
* [[Flashblock|https://addons.mozilla.org/ja/firefox/addon/433]]
* [[Page Saver Basic|http://pearlcrescent.com/products/pagesaver/]]
* [[Live HTTP Headers|https://addons.mozilla.org/ja/firefox/addon/3829]]
* [[Zoom toolbar|https://addons.mozilla.org/ja/firefox/addon/6118/]]
* [[FoxClocks|https://addons.mozilla.org/ja/firefox/addon/1117/]] 世界時計機能
* [[PrintPDF |https://addons.mozilla.org/en-US/firefox/addon/printpdf/]] ページをPDFで保存
* [[ColorZilla | https://addons.mozilla.org/ja/firefox/addon/colorzilla/]] ページの色をピックアップ
* [[FireMath | https://addons.mozilla.org/en-US/firefox/addon/firemath/]] ~MathML のエディタ
(シンプルな) 気液二相でのフラッシュ計算について、説明する。
* $$F_{feed}, F_{vap}, F_{liq}$$ の単位は モル数
* $$x_i, y_i, z_i$$ はモル分率
---
! Vapor Liquid Equilibrium (VLE)
!! ''Properties''
; Specified:
* $$F_{feed}$$
* $$z_i$$
* two of $$\{P, T, F_{liq}\}$$
; Unknowns:
Number of unknowns: ''2N + 2''
* $$F_{vap}$$
* $$x_i$$
* $$y_i$$
* one of $$\{P, T, F_{liq}\}$$
!! ''Equations''
Number of equations: ''2N + 2''
* $$z_i F_{feed} = x_i F_{liq} + y_i F_{vap}$$ $$\ \ \ $$ Eq. (1)
* $$\displaystyle \sum x_i = 1$$ $$\ \ \ $$ Eq. (2)
* $$\displaystyle \sum y_i = 1$$
* $$\mu_i^{vap} = \mu_i^{liq}$$
---
! Flash Calculation
!! ''Properties''
; The Equilibrium Ratio:
* $$K_i \equiv \dfrac{y_i}{x_i}$$
; Molar fractions of liquid phase and vapor phase:
* $$\alpha \equiv \dfrac{F_{liq}}{F_{feed}}, \ \ \beta \equiv \dfrac{F_{vap}}{F_{feed}} $$
* $$\alpha + \beta= 1$$
- - - - -
!! ''Calculation''
Divide Eq. (1) by $$F_{feed}$$.
$$z_i = x_i \dfrac{F_{liq}}{F_{feed}} + y_i \dfrac{F_{vap}}{F_{feed}} = x_i (1 - \beta) + y_i \beta$$
Substitute "$$y_i = x_i K_i$$".
$$z_i = x_i (1 - \beta) + (K_i x_i) \beta$$
Then, transform the above equation.
$$x_i = \dfrac{z_i}{1 + (K_i - 1) \beta}$$
---
! Nomenclature
|Symbol|Property |h
| P |Pressure |
| T |Temperature|
| $$x_i$$ |Molar fractions of component i in liquid |
| $$y_i$$ |Molar fractions of component i in vapor |
| $$z_i$$ |Molar fractions of component i in feed |
| $$F_{feed}$$ |Molar flow rate at feed (or the total number of moles) |
| $$F_{vap}$$ |Molar flow rate at vapor stream (or number of moles in vapor) |
| $$F_{liq}$$ |Molar flow rate at liquid stream (or number of moles in liquid) |
<<tag ''Fortran''>>
----
! 言語仕様
* 固定形式と自由形式がある
** どうやって判別するかは、コンパイラ次第っぽい
* 大文字小文字の区別は無い
* プリプロセッサに関しては、公式な仕様は無い
* 関数の引数は参照渡し
** 変更しない引数には ''intent(in)'' をつけておく
* ポインタ的なものは存在するが、ポインタ演算は無い
** 基本的には、双方向リストとか使うためっぽい
* 静的型付け言語だが、暗黙の型宣言をサポートしている
** 暗黙の型宣言は使うべきではない (''Implicit none'' でオフにできる)
* sprintf() 的なことは write() でする
* 名前空間的なことは [[module|Fortran_Module]] でする
* 構造体は ''type'' を使って定義できる
** コンストラクタ的なものもある (らしい)
* 文字列の扱いが [[C言語]] とはだいぶ違う
** null 終端ではない
** 使っていない部分はホワイトスペースで埋める (?)
* 一部のキーワードの間のホワイトスペースは省略可能 (っぽい)
** 例えば、''END MODULE'' と ''ENDMODULE'' はどちらでもよいみたい
** [[White space - IBM Documentation|https://www.ibm.com/docs/en/openxl-fortran-aix/17.1.0?topic=form-white-space]]
!! 詳細
* [[Fortran_変数]]
* [[Fortran_配列]]
* [[Fortran_Module]]
* [[Fortran_文字列]]
* [[Fortran_入出力]]
----
! 参考サイト
{{Fortran_リンク!!text}}
----
-
* [[gfortran の出力バッファリング - Qiita|https://qiita.com/chirimen/items/da96a80d6002f3185858]]
Fortran で sprintf() 的なことをしたい時は ''write()'' を使う。
: write(出力先, フォーマット) [フォーマットで使う変数達]
この関数を sprintf() 的に使うときは、出力先に変数を指定する。
```
CHARACTOR(LEN=100) :: buff
write (buff, "(I5, I3)") i, j
print *, buff
```
For array
```
real, dimension(3) :: a
write(buff, "(' a={', 3e10.3, '} [Pa]'") a(1), a(2), a(3)
```
; Reference
* https://amanotk.github.io/fortran-resume-public/chap06.html
* http://wwr7.ucom.ne.jp/fortranprog3/g0/
----
! Format
|整数型 | I |i6 |6桁で出力する.|
|~|~|i8.6 |8桁で出力する. ただし6桁に満たない部分は0で埋められる. |
|実数 | F |f12.5 |12桁で出力,うち5桁が小数点以下. |
|~|~|f0.5 |左寄せ、小数点以下5桁で出力する. |
|~| E |e20.7 |科学的表記 2 の20桁で出力,うち7桁が小数点以下 |
|文字型 | A |a |与えられた文字型の字数に対応する桁数を確保して出力. |
|~|~|a30 |30桁で右寄せの出力. |
|空白 | X |5X |指定された数だけ空白を出力.この場合は5桁. |
|改行 | / |/ ||
<<<
```
print '(I5)', i
write (*,'(I5)') i ! この上の print 文と全く同じ意味です
print "(I5,I3)", i, j ! 複数の編集記述子はカンマで区切る
write (*, "(I5, I3)") i, j ! この上の print 文と全く同じ意味です
print "('value is ',i0)", i ! i0 は整数の左寄せを意味します
```
```
program fmt_output
implicit none
integer :: i = 1234
real :: a = 1.234
double precision :: d = 9.87654321d0
complex :: c = (1.5,2.345)
character(len=4) :: s = "abcd"
print '(i10)', i ! 幅 10、右寄せ
print '(i0)', i ! 左寄せ
print '(1x,i0)', i ! 1 文字空けて左寄せ
print '(i1)', i ! 幅が足りない場合はアスタリスクが出力される
print '("x = ", f5.2)', 99999.0 ! 幅が足りない場合のもう1つの例
write (*,'(i10.7)') i ! 幅 10、右寄せ、最低出力桁数 7 (満たない場合は 0 を出力)
print '(f10.2)', a ! 幅 10、右寄せ、小数点以下 2 桁
print '(f0.2)', a ! 左寄せ、小数点以下 2 桁
write (*,'(e10.3, f15.5)') a, d ! 複数の書式指定をカンマで区切る例
write (*,'(e10.3e1)') a ! 指数部の桁数まで指定する例
write (*,'(e10.4, f10.4)') c ! 複素数は2つの実数の書式を指定する
write (*,'(2f10.4)') c ! 複素数を反復数 2 で指定する
print '("(real=",f0.2," imag=",f0.2,")")', c ! 文字定数表現を書式指定に含める例
print '(a)', s ! 幅を指定しないと、宣言時の長さ(ここでは 4)が使われる例
print '(a2)', s ! 幅が足りない場合は切り捨てられる
end program fmt_output
出力例:
1234
1234
1234
*
x = *****
0001234
1.23
1.23
0.123E+01 9.87654
0.123E+1
0.1500E+01 2.3450
1.5000 2.3450
(real=1.50 imag=2.35)
abcd
ab
```
<<<
https://www.nag-j.co.jp/fortran/FI_14.html#_14
! Module
* 名前空間を実現するための機能
* クラス的な機能は無いっぽい
** Module を元に新しいインスタンスを作る機能は無さそう
----
```
module モジュール名
use インポートするモジュール
implicit none
! モジュールに属する変数の定義
interger(4), parameter :: CONST_1 ! 定数
logical :: flug_1
character (len=256), private :: buff ! プライベートな変数
contains
! モジュールに属する関数・サブルーチンの定義
subroutine sub_1()
...
endsubroutine
end module
```
デファクトスタンダード的なものはなさそうなので、あくまで個人的なルール
; 注意
* 言語仕様的には、大文字・小文字は区別されない
----
! 基本的なルール
* ''implicit none'' を必ず使う
* 基本的には、変数名・関数名には''スネークケース'' を用いた方がよい
** Fortran の言語仕様的に大文字・小文字は区別されないから
! ファイル
* パブリックなモジュールごとにファイルを分ける
** 特定のモジュールからしか参照されないようなモジュールを含むのはOK (に今のところしてる)
* モジュール名と同じ名前にしておくのがいい気がする
! Type名
! 関数名 (サブルーチン名)
* モジュールが名前空間として機能するので、(C言語でやるような) プレフィックスは無くても大丈夫なはず
** でも、IDE があまり強力じゃないので、(モジュールがぱっと識別できる) プレフィックスついてた方が分かりやすいかも
** とりあえず、 ''大文字 + _'' のプレフィックスにしてみた
** (他のコードとの兼ね合いで) 関数名は全て大文字で表記
! 変数名
* ''ローカル変数'': 全て小文字のスネークケース (アンダーバー区切り)
* ''関数の引数'':(他のコードとの兼ね合いから) 全て大文字にしている (区切り無し)
** ローカル変数と同じにした方がよさそうな気がする
* ''モジュール変数'': 関数名と同様のプレフィックスをつけている
** (明確な理由はないけど) XXX_yyy_zzz 形式にしてる
** IDE 次第な気がする
** 基本的に全てのグローバル変数はどこかのモジュールに属するようにする
; 公式的なやつ
* [[Fortran Working Group (WG5)|https://wg5-fortran.org/]]
* [[Home - Fortran Programming Language|https://fortran-lang.org/]]
; 言語仕様
* [[Fortran 入門|https://www.nag-j.co.jp/fortran/index.html]]
** このサイトがすごく分かりやすい
* [[Fortran演習 (地球惑星物理学演習) — Fortran演習(地球惑星物理学演習)|https://amanotk.github.io/fortran-resume-public/index.html]]
* [[第 2 章 Fortran 95 組み込み関数 (Sun Studio 12: Fortran ライブラリ・リファレンス)|https://docs.oracle.com/cd/E19205-01/820-1201/aetja/index.html]]
* [[Fortran - Basic Syntax|https://www.tutorialspoint.com/fortran/fortran_basic_syntax.htm]]
* https://arakik10.hatenadiary.org/entry/20100203/p1
; セットアップ・インストール
* [[Intel oneAPI Base Toolkit + HPC Toolkit (Intel Fortran)のインストール(Windows版) - Qiita|https://qiita.com/implicit_none/items/620b440ba6d6167a1b73]]
; ほか
* https://techpubs.jurassic.nl/manuals/0650/developer/Ftn_LRM_V3/sgi_html/pr01.html
! 概要・ポイント
基本的な考え方は、一般的なファイル読み書きと同じだが、''open() 関数の第一引数が装置番号 となっており、任意の数字を渡すことができてしまうインタフェースになっている''。
このインタフェースの大きな問題は、
: 標準入力・出力などにも装置番号が割り当てられており、これらの番号を指定すると問題が起こる可能性が高い
という点にある。
ただし、この問題に関しては、
: open() の引数に 'newunit=u' を指定すると、システム側で空いている装置番号を自動で割り当ててくれる (みたい)
という対処方法がある (みたい)。
- - - - -
<<<
Fortranは,その歴史的経緯から,ファイルやその他入出力機器を装置と称し,各装置に番号をふって管理します.
例えば,標準出力には5番,標準入力には6番という装置番号が使われることが多くありました.現在は,''output_unit'', ''input_unit''という既定の定数が設けられています.
...
装置を開くにはopen文,装置を閉じるにはclose文を用います.装置番号は,ファイルを開く際にユーザ側で決める必要があり,結構面倒だったのですが,''Fortran 2008''からは空いている番号に割り振る機能が追加されました.''newunit'' 指定子がそれに相当します.
<<<
https://qiita.com/implicit_none/items/840e4de49f8e8dae15a3
; リファレンス
* https://www.nag-j.co.jp/fortran/tips/tips_ReadBinaryFileUsingUnformattedStream.html
---
! ファイルへの書き込み
* https://www.nag-j.co.jp/fortran/FI_15.html
```
program test_io_buffering
implicit none
integer :: u, i
open(newunit=u, file='test.log', status='replace')
do i = 1, 20
write(u, '(*(g0))') 'i = ', i
call sleep(1) ! SLEEP is GNU extension
end do
close(u)
call exit(0) ! EXIT_OK
end program test_io_buffering
```
! 宣言
配列宣言時に、(要素の)型・次元・名前 の3つを指定する。具体的な書き方は次のようになる。
* ''配列要素の型, 配列の次元 :: 配列の名前''
* ''配列要素の型 :: 配列の名前 ( 配列の次元 )''
以下は、宣言の具体例。
```
integer, dimension(5) :: a = (/1,2,3,4,5/)
integer, dimension(2,3) :: a2 = (/1,2,3,4,5,6/)
integer :: a(5) = (/1,2,3,4,5/)
integer :: a2(2,3) = (/1,2,3,4,5,6/)
real :: x(5), y(6), z(7)
```
なお、2次元配列を行列として使う場合、次元は ''dimension(行, 列)'' と指定するらしい。
<<<
補足:
Fortran の多次元配列は列優先 (Column Major) です。 (C/C++ 言語では行優先) 例えば 3 行 4 列の 2 次元整数配列は integer a(3,4) のように宣言され、メモリ上には以下の順番で数値が格納されます。
```
a(1,1) a(2,1) a(3,1) a(1,2) a(2,2) a(3,2)
a(1,3) a(2,3) a(3,3) a(1,4) a(2,4) a(3,4)
```
<<<
[[Fortran 入門: 配列 - 12.1 配列の宣言|https://www.nag-j.co.jp/fortran/FI_12.html#ArrayDeclarations]]
----
! 一括代入・計算
<<<
配列全体への代入や算術を行うことが可能です。 例えば 1 次元配列 a のすべての成分を 10 にする場合には以下のように行います。
```
integer a(3)
a = 10
```
...
a のすべての成分に 1 を足す場合には以下のように記述します。
```
a = a + 1
```
同様に配列 a と b のそれぞれの成分を足しあわせる場合には以下のように行うことが可能です。
```
integer,dimension(3) :: a, b, c
...
c = a + b
```
<<<
[[Fortran 入門: 配列 - 12.4 配列全体の代入や算術|https://www.nag-j.co.jp/fortran/FI_12.html#WholeArrayOperations]]
----
! 部分アクセス
<<<
Fortran には配列の一部分を指定する強力な機能があります。 これにより、例えば 2 次元配列のある列だけ、あるいはある部分だけへのアクセスが容易に行えます。 配列の一部分を指定するには、各次元の添字を以下の書式で指定します。
```
[下限]:[上限][:きざみ]
```
(補足) 下限を省略した場合は配列の下限が設定される
(補足) 上限を省略した場合は配列の上限が設定される
(補足) きざみを省略した場合は 1 が設定される
```
上限、下限のより正確な表現は以下のようになります。
[初期値]:[終了値][:きざみ]
※ a(5:1:-1) のように 初期値 > 終了値 といった記述も可能です。
```
<<<
[[Fortran 入門: 配列 - 12.8 部分配列|https://www.nag-j.co.jp/fortran/FI_12.html#ArraySections]]
!! 2 次元配列の例
例えば、二次元配列の各行の値をまとめて設定することができる。
```
integer :: B(3,3)
B(1,1:3) = (/ 1, 2, 3 /) 1 2 3
B(2,1:3) = (/ 4, 5, 6 /) B = 4 5 6
B(3,:) = (/ 7, 8, 9 /) 7 8 9
```
参考: [[Fortran90 PROGRAMMING_Sec6|https://www.str.ce.akita-u.ac.jp/~gotou/zyouhou/f90/sec6.html]]
----
! 配列の基本情報
Fortran には、配列の基本情報を得るための関数が用意されている。
```
integer :: a(3)
sum(a) ! 合計
max(a) ! 最大値
min(a) ! 最小値
size(a) ! 配列の大きさ (要素の数)
```
!! lbound, ubound
<<<
lbound(配列変数名,次元) と ubound(配列変数名,次元) はそれぞれ指定の配列の指定の次元の下限と上限を求めます。
```
program array_intrinsics2
implicit none
integer a(3), b(3:5), c(8,5:10)
print *, "a(", lbound(a,1), ":", ubound(a,1), ")"
print *, "b(", lbound(b,1), ":", ubound(b,1), ")"
print *, "c(", lbound(c,1), ":", ubound(c,1), ",", lbound(c,2), ":", ubound(c,2), ")"
end program array_intrinsics2
```
<<<
----
! 配列の動的割付け
<<<
動的割付けを行うには、まず動的割付けを行いたい配列の宣言時に allocatable 属性を指定し、更に配列の大きさの指定にはコロンを指定します。 実際に配列領域を割付ける際には、allocate 文を用います。 領域の解放は自動的に行われますが、もしも明示的に領域を解放したい場合には deallocate 文が利用可能です。
...
```
program array_alloc
implicit none
integer n, i
integer,allocatable,dimension(:) :: a
print *, "Enter number of data:"
read *, n
allocate( a(n) )
do i = 1, n
print *, "Enter item(", i, "):"
read *, a(i)
end do
print *, "Total=", sum(a)
deallocate(a) ! 特に指定しなくても自動的に領域が解放されます、このように指定することも可能
end program array_alloc
```
...
```
program array_res2
implicit none
real a(3)
a = myfunc(3)
print *, a
contains
function myfunc(n)
integer,intent(in) :: n
real myfunc(n) ! ここで入力引数 n の値を用いて、結果を配列として宣言
myfunc = 99
end function myfunc
end program array_res2
```
<<<
----
----
<<<
配列の利用にはまず宣言が必要です。 以下に 1 次元、2 次元、3 次元の場合の配列の宣言例を示します。 配列の大きさを括弧内に記述するかもしくは dimension 属性を指定します。
```
real,dimension(5) :: a ! dimension 属性で指定する例。1 次元配列 5 つの成分を持つ配列 a を宣言
real a(5), b(6), c(7) ! このように記述することも可能です
integer,dimension(3,3) :: d ! 2 次元配列 3x3 を持つ整数配列 d を宣言
complex,dimension(2,2,2) :: e ! 3 次元配列 2x2x2 を持つ複素数配列 e を宣言
```
Fortran ではデフォルトで 1 ~ 指定した大きさ のインデックスが使われます。 (C や Java などのように 0 ~ 指定した大きさ-1 ではありません。)
1 からではなく任意の下限値を用いたい場合には下記の例のように宣言時に下限を指定することも可能です。
```
real a(0:4) ! C や Java のように 0 から始まり 4 まで合計で 5 つの成分を持つ配列を宣言する例
real,dimension(3:5) :: b ! dimension 属性で指定する例。1 次元配列 3 つの成分(3 ~ 5)を持つ配列を宣言する例
```
<<<
[[Fortran 入門: 配列|https://www.nag-j.co.jp/fortran/FI_12.html#ArrayDeclarations]]
- - - - -
* IACHAR(C)
** 文字のアスキーコードを返す
* CHAR(I)
** アスキーコードから文字を取得
! C言語との文字列のやり取り
C言語から渡される文字列には null が含まれていることがあるが、Fortran ではこれを終端とは認識しない。
```
! null の位置を得る
i = scan(str, char(0))
```
引用・参考元: [[Fortran 入門: 定数と変数|https://www.nag-j.co.jp/fortran/FI_4.html]]
----
! データ型
!! 組み込み型
| 型 | 記述方法 |h
|整数型 |integer |
|実数型 |real |
|倍精度実数型 |double precision |
|複素数型 |complex |
|倍精度複素数型 | complex(kind(0d0)) |
|論理型 |logical |
|文字型 |character |
; 属性
|属性 |意味 |用例 |h
|dimension |形状(寸法と次元)の指定 |integer,dimension(10,3) :: a |
|parameter |定数であることの宣言 |real,parameter :: pi = 3.14 |
|allocatable |変数が割付け(動的な領域確保)可能であることの宣言 |real,allocatable :: a(:) |
|pointer |ポインタであることの宣言 |integer, pointer, dimension(:,:) :: z |
| |||
|intent(in) |関数・サブルーチンの入力引数 |real,intent(in) :: a |
|intent(out) |関数・サブルーチンの出力引数 ||
|intent(inout) |関数・サブルーチンの入出力引数 ||
| |||
|private |モジュールのprivate変数であることの宣言 ||
|public |モジュールのpublic変数であることの宣言 ||
; その他の指定
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! 構造型
C言語の構造体に相当する機能が、Fortran にもある
```
type point
real :: x, y
end type point
type line
type(point) :: p1, p2
end type line
type(line) m
```
---
! 変数の宣言
* 変数名は英字で始まる任意の英数字とアンダースコア "_" の組み合わせで、最大 31 文字
** Fortran 90/95 の標準規格
* 変数には属性を付加することが可能
** 変数型, 属性1 [, 属性2, ...] :: 変数名
* 宣言時に初期化することも可能 (しなくてもよい)
** [例] integer :: a = 99
** 初期化は data 文でも可能 (後述)
---
! 型変換
通常演算結果の型は演算対象の型と同じになりますが、異なる型の演算対象が含まれる演算においては、以下に示す型の強い方の型(種別も含む)が使用されます。
: 整数 < 実数 < 複素数
!! 明示的な型変換
明示的に型変換を行う組込み関数が用意されている
*int(x)
*int(x, kind=k)
* nint(x)
*real(x)
*real(x, kind=k)
*dble(i)
*cmplx(x)
*cmplx(x, y)
*cmplx(x, y, kind=k)
https://amanotk.github.io/fortran-resume-public/chap03.html
---
! 定数の表現
!! 実数
実数には ''単精度実数'' と ''倍精度実数'' の二種類がある。
普通に実数を書いた場合は ''単精度実数'' として扱われる。また、指数部と仮数部の間を ''f'' で区切った形式を用いることも可能。
```
1.23
1.23e0
-1.23e3
1.23e-3
```
''倍精度実数'' を表すときは、指数部と仮数部の間を ''d'' で区切った形式を用いる。
```
1.23d0
-1.23d3
1.23d-3
```
!! 複素数
複素数 a+bi を表すには ''(a,b)'' とする。
!! 論理定数
大文字小文字は関係ない
```
.true.
.false.
.TRUE.
.FALSE.
```
!! 構造型
```
a = student("Sato",20)
```
----
! その他
<<<
;補足情報
本テキストに示された方法以外にも、良く見られる型の記述方法があります。 それぞれの記述方法について、なぜ推奨されていないのか、理由を述べたいと思います。
型 推奨 記述 説明
* 単精度実数 〇 real 単精度はこの記述方法が推奨されます
* 単精度実数 × real(4) 種別番号 4 の意味がコンパイラによって異なります(4 バイトを意味するとは限らない)
* 単精度実数 × real*4 Fortran 標準に準拠していません
* 倍精度実数 〇 double precision 倍精度はこの記述方法が推奨されます
* 倍精度実数 × real(8) 種別番号 8 の意味がコンパイラによって異なります(8 バイトを意味するとは限らない)
* 倍精度実数 × real*8 Fortran 標準に準拠していません
* 単精度複素数 〇 complex 単精度複素数はこの記述方法が推奨されます
* 単精度複素数 × complex(4) コンパイラにより種別番号 4 の意味が異なります
* 単精度複素数 × complex*8 Fortran 標準に準拠していません
* 倍精度複素数 〇 complex(kind(0d0)) 倍精度複素数はこの記述方法が推奨されます
* 倍精度複素数 × complex(8) 種別番号 8 の意味がコンパイラによって異なります
* 倍精度複素数 × complex*16 Fortran 標準に準拠していません
* 倍精度複素数 × double complex Fortran 標準に準拠していません
変数は初期値を指定することが可能です。 初期値の指定は変数名に続き =初期値 とします。 また初期値を指定する場合には型名と変数名の間に ::(コロンが2つ)が必要です。
<<<
https://www.nag-j.co.jp/fortran/FI_4.html
! フラクタル次元の定義
:$$D = - \dfrac{d [\log N]}{d [\log \epsilon]} \approx - \dfrac{\Delta [\log N]}{\Delta [\log \epsilon]}$$
N: the number of the auto-similar parts in which an object can be subdivided
ϵ: scaling
- -
$$N = \epsilon^{-D}$$
----
$$D = - \dfrac{\log 1 - \log{N_p}}{ \log{d_A} - \log{d_p}} \ \Rightarrow \ \dfrac{1}{N_p} = \left( \dfrac{d_A}{d_p} \right)^{-D}$$
$$\dfrac{\phi_{eff}}{\phi} = \dfrac{{d_A}^3}{N_p {d_p}^3} = \left( \dfrac{d_A}{d_p} \right)^{3-D}$$
----
! 画像解析
* ボックスカウンティング法
* ピクセルカウンティング法
https://web.ma.utexas.edu/users/davis/375/popecol/lec3/fracdim.html
<<tag 'ggplot2'>>
https://www.web-dev-qa-db-ja.com/ja/r/ggplot-scalecontinuous-expand%E5%BC%95%E6%95%B0%E3%81%AF%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E6%A9%9F%E8%83%BD%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F/832416887/
---
* オブジェクト指向っぽい感じで書ける
** コンストラクタに相当するのが ''ggplot()''
** 実体は list で、class 名は ''ggplot'', ''gg''
* 描画に使うデータは、データフレームで渡す
** 描画したい(データフレームの)列は、''ggplot(df, aes(x=a,y=b))'' の第二引数で指定する
* グラフのパーツはそれぞれオブジェクトになっていて、それを追加していく
** 実体は environment みたい
** [['+' 演算子はオーバーロードされてる|https://ggplot2.tidyverse.org/reference/gg-add.html]]
; 簡単な例:
```r
df <- data.frame(a=1:5, b=c(3,7,2,9,1))
g <- ggplot(df, aes(x=a,y=b))
g + geom_point() # 散布図
g + geom_line(colour='red', size=3, linetype=2) # 折れ線グラフ
g + geom_step() + xlab("X") + ylab("Y") # 折れ線 (ステップ)
```
; 論文っぽいフォーマット
```r
gp <- g + geom_line(size=2, colour='#00000033', linetype=2) + geom_point(size=5)
gp <- gp + xlim(0, NA) + ylim(0, 10) + xlab("X [.]") + ylab("Y [.]")
gp + theme(plot.margin = unit(c(1.5, 1.5, 1.0, 1.0), "cm"),
panel.background = element_rect(fill='white', size=2, colour='grey10'),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.text=element_text(size=18, face = "bold", colour = "grey10"),
axis.title=element_text(size=22, face="bold", colour = "grey10"),
axis.ticks = element_line(size = 2),
axis.ticks.length = unit(-.4, "cm"))
```
axis.ticks.length.x = unit(-.25, "cm")
---
; Reference
* [[Function reference - ggplot2|https://ggplot2.tidyverse.org/reference/]]
** [[Polygons — geom_polygon|https://ggplot2.tidyverse.org/reference/geom_polygon.html]]
** [[Rectangles — geom_raster|https://ggplot2.tidyverse.org/reference/geom_tile.html]]
* [[R CHARTS - A collection of charts and graphs made with the R programming language|https://r-charts.com/]]
* https://data-viz-lab.com/ggplot2
[[2D contours of a 3D surface — geom_contour • ggplot2|https://ggplot2.tidyverse.org/reference/geom_contour.html]]
ggplot2 でカラーマップっぽいグラフを作る方法は二種類ある。
データの間を補完する
* geom_contour_filled()
* geom_contour()
小さなタイルを敷き詰める
* geom_tile()
* geom_rect()
---
; geom_contour_filled()
```r
g_contour <- ggplot(df, aes(x=x, y=y, z=z)) + geom_contour_filled(bins=20)
# 色の設定
g_contour + scale_colour_manual( aesthetics = 'fill', drop = FALSE, values = colorRampPalette(c('blue','white','red'))(20) )
```
---
; geom_rect()
```r
g_tile <- ggplot(df, aes(width=w, height=h)) + geom_tile(aes(x=x, y=y, fill=z), linetype = 0)
g_tile + scale_fill_gradient(low = "white", high = "red")
```
<<<
geom_rect() and geom_tile() do the same thing, but are parameterised differently: geom_rect() uses the locations of the four corners (xmin, xmax, ymin and ymax), while geom_tile() uses the center of the tile and its size (x, y, width, height). geom_raster() is a high performance special case for when all the tiles are the same size.
<<<
$$U(T;V,N) = F[T;V,N] - T \dfrac{\partial F[T;V,N]}{\partial T} = - T^2 \dfrac{\partial}{\partial T} \left[ \dfrac{F[T;V,N]}{T} \right]
<<tag "Git">>
! 基本的な概念
* 各コミットは、コミットする前の状態(コミット)に対するリンク(parent)を持っている。
** 最初のコミットを除く
** 先端のコミットは、他のコミットの parent から参照されていない
** 各コミットには、40文字のID (ハッシュ値) が割り当てられる。
* 複数の開発に分岐させたいときは、(branch コマンドを用いて)ブランチを作る。
** 実体としては、''ブランチはあるコミットを指すリンクである''。
** 新しく作成するブランチには、名前を付ける
** 最初のブランチには、(自動的に) master という名前が割り当てられている。
* 現在の位置は ''HEAD'' と呼ばれるポインタによって管理されている。
** ''HEAD はブランチに対するリンクである'' (HEAD が直接コミットを指し示すことはない)。
** HEAD が指すブランチの切り替えるには、''checkout'' コマンドを用いる。
* まだコミットしていない変更には、「''インデックス''」と「''ワークツリー (作業ディレクトリ)''」という2つのステージがあり、どちらも git から参照できる。
** ''インデックス'': 次のコミットに含めることが予約されている変更(予約には add コマンドを用いる)。
** ''ワークツリー'': インデックスに追加されていない変更。
* コミットは ID (ハッシュ値) によって識別されるが、特定のコミットに対するエイリアスを作成することもできる。このエイリアスは ''タグ'' と呼ばれる。
!! リファレンス
このサイトをみれば、大体の疑問は解決すると思う。
* [[Git - Book|https://git-scm.com/book/ja/v2]]
---
! 基本的な作業
!! 1. コミット
コミット作業は、大きく分けて2つのステップがある。
# (ワークツリーのファイルを) ''インデックスへの追加'' (add)
# ''インデックスのファイルをコミットする'' (commit)
このコミット作業により、新しいコミットが現在作業しているブランチに追加される。
;Tips:
* ''コミットの履歴(ログ)を見る'' 時は、 log コマンドを使う。オプションを上手く使うことにより、必要な情報だけを抽出することが可能。
* コミットの取り消しには、''reset'' もしくは ''revert'' を使う
** [[Git コミットの取り消し]]
** [[Git - リセットコマンド詳説|https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E3%81%95%E3%81%BE%E3%81%96%E3%81%BE%E3%81%AA%E3%83%84%E3%83%BC%E3%83%AB-%E3%83%AA%E3%82%BB%E3%83%83%E3%83%88%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E8%A9%B3%E8%AA%AC]]
!! 2. ブランチ
!! 3. 設定の確認・変更
''git config'' を使う。
```bash
# 設定の一覧を表示 (必要に応じて --system, --global, --local を付ける)
git config -l
# 設定を追加・変更する場合は git config (--system/global/local) <name> <value>
git config --global user.email example@example.com
```
---
! 基本的なコマンド
コマンドの基本的な形式は、以下のようになる。
```
git [コマンド名] [オプション]
```
非常に基本的なコマンドだけ、以下に列挙する。オプションによって挙動が大きく変わるものもあるので注意。
|コマンド |処理 |h
|init |リポジトリの初期化 |
|clone |既存のリポジトリの複製を作る |
| | |
|add "ファイル名" |インデックスへの追加 |
|add -u |~|
|commit |コミット |
|diff |「インデックス」と「ワークツリー」の比較。オプションによって比較対象は変えられる。 |
|log |コミットログの表示 |
|status |コミットに含まれる変更の確認 |
| | |
|branch |ブランチ情報の表示 (今いるブランチも分かる) |
|branch "新しいブランチの名前" |新しいブランチを作成する |
|checkout "ブランチ名" |ブランチを切り替える |
|reset "コミット名" |現在のブランチの先頭である「HEAD」を強制的に指定したコミットに移動させる。 |
|reset "コミット名" "ファイル名" |指定したファイルのインデックスの状態を、指定したコミットの内容で上書きする。(コミット名を省略した場合は HEAD の内容で上書きされる) |
| | |
|pull ||
|push ||
* [[Gitを使いこなすための20のコマンド|http://sourceforge.jp/magazine/09/03/16/0831212]]
----
* [[TortoiseGit日本語言語ファイル プロジェクト日本語トップページ - SourceForge.JP|http://sourceforge.jp/projects/tortoisegit/]]
* [[Gitの使い方メモ - sotarokのお勉強 |http://d.hatena.ne.jp/strkpy/20090508/1241760724 ]]
* [[Git導入 - blog.paz-para.com |http://blog.paz-para.com/?p=1119 ]]
* [[git/コミットログを修正する方法 - TOBY SOFT wiki|http://tobysoft.net/wiki/index.php?git%2F%A5%B3%A5%DF%A5%C3%A5%C8%A5%ED%A5%B0%A4%F2%BD%A4%C0%B5%A4%B9%A4%EB%CA%FD%CB%A1 ]]
* [[これからGitを始める人が読むべき記事のまとめ : akiyan.com |http://www.akiyan.com/blog/archives/2009/05/posts-for-git-beginne.html ]]
コミットの取り消しには、''reset'' もしくは ''revert'' を使う。
ざっとりとした使い分けとしては、次のようになる。
* ''reset'': 取り消しをログに残したくない場合
* ''revert'': 取り消しをログに残す場合
----
! reset による取り消し
感覚的な説明としては、戻りたいコミットを指定すると、リポジトリが指定されたコミットまで戻る。
実際の動作はこの説明とは少し異なる。それについては後述。
```bash
git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]
```
* --soft
** HEADの参照先をだけを変える
** インデックス と ワークツリー (作業ディレクトリ) の内容はそのまま
* --mixed
** インデックスは変更後のHEADの内容で上書きされる
** ワークツリー (作業ディレクトリ) の内容はそのまま
** ''デフォルトになっているオプション''
* --hard
** インデックス と ワークツリー (作業ディレクトリ) の両方が、HEADの内容で上書きされる
----
! reset と checkout
reset と checkout コマンドは二つの機能を持っているが、その機能が一見非常に似ている。
!! reset
# ''HEADが指しているブランチの参照先'' を、''指定したコミット'' に変更する。
# インデックス や ワークツリー (作業ディレクトリ) の内容を、''指定したコミットの内容で置き換える''。
!! checkout
# ''HEADの参照先''を、''指定したブランチ'' に変更する。
# インデックス や ワークツリー (作業ディレクトリ) の内容を、''指定したブランチの内容で置き換える''。
この違いを理解するためには、''HEAD, ブランチ, コミット'' の違いをきちんと理解する必要がある。
* [[Git - ブランチとは|https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E6%A9%9F%E8%83%BD-%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%81%A8%E3%81%AF]]
* [[Git - リセットコマンド詳説|https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E3%81%95%E3%81%BE%E3%81%96%E3%81%BE%E3%81%AA%E3%83%84%E3%83%BC%E3%83%AB-%E3%83%AA%E3%82%BB%E3%83%83%E3%83%88%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E8%A9%B3%E8%AA%AC]]
<<<
''reset'' の場合は ''HEAD'' が指し示すブランチの方が移動するのに対し、''checkout'' の場合は ''HEAD'' そのものが移動するのです。
<<<
---
* http://www-creators.com/archives/1097
こんな感じで、 ''rebase'' コマンドを使う。
```bash
git rebase -i HEAD~2
```
----
; 使い方
''rebase -i'' コマンドをたたくと、以下のような画面が出るので、残すコミット・まとめるコミットを指定する。
```bash
pick 333333 さらに一つ前のコミットのログ
pick 222222 一つ前のコミットのログ
pick 111111 最新のコミットのログ
# Rebase xxx
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
```
* 111111 と 222222 のコミットをまとめたい時は、''s 111111'' とする
; 注意
* 一番古いコミット (例だと 333333) は、squash してはならない
* [[詳細検索の使用 - Gmail ヘルプ|http://mail.google.com/support/bin/answer.py?answer=7190]]
* [[Gmail 検索TIPS: IT備忘録|http://nofx2.txt-nifty.com/it/2010/03/gmail-tips-d77e.html]]
* [[Gmailの添付ファイル操作に関するTipsあれこれ |http://www.popxpop.com/archives/2007/01/gmail.html]]
* [[ITmedia Biz.ID:メール振り分けの基本|http://bizmakoto.jp/bizid/articles/0608/07/news017.html]]
; 添付ファイルつき
* has:attachment "拡張子"
* from: 送信者のアドレス (名前の一部を指定して検索)
* to: 宛先のアドレス (名前の一部を指定して検索)
* [[gnuplotの初歩|http://graph.pc-physics.com/]]
* [[yebo blog: GnuplotでPDF出力|http://yebo-blog.blogspot.com/2008/05/gnuplotpdf.html]]
* [[GNUPLOTの使い方|http://tortoise1.math.ryukoku.ac.jp/~takataka/gnuplot/]]
* [[gnu plot 入門|http://www.suri.it.okayama-u.ac.jp/~niitsuma/j/lecture/gnuplot_nyuumon.html]]
* [[gnuplot|http://albatross.dip.jp/blog/archives/165]]
; ヒストリーをファイルへ出力
{{{
history "outputFile"
}}}
----
<<list filter [tag[gnuplot]]>>
初期設定は、 ''gnuplot.ini'' を作って、そこに書けばよいみたい
{{{
# User Functions.
tax(amount) = amount * 0.05
# unit conversion
inch2mm(inch) = inch * 25.4
inch2cm(inch) = inch * 2.54
inch2m(inch) = inch * 0.254
mm2inch(mm) = mm / 25.4
sample(x, y) = (x > y) ? x : y
}}}
; 2D のデータプロット
''> load "plotbat.txt"''
{{{
<plotbat.txt>
set autoscale
# デフォルトでは、 1行目をX, 2行目をY
set terminal wxt 1
plot "plotData.txt"
set terminal wxt 2 title "Temperature" size 400,600
set yrange [] reverse
plot "plotData.txt" using 2:1 with lines ti "avg", \
"plotData.txt" using 3:1 with lines ti "max", \
"plotData.txt" using 4:1 with lines ti "min"
}}}
{{{
<plotData.txt>
# 深度 平均水温 最大水温 最小水温 サンプル数 標準偏差
0 21.63 30.56 13.00 7679 3.76
10 21.46 30.10 12.93 7457 3.66
20 20.92 29.44 10.91 8385 3.57
30 20.46 29.60 10.14 8585 3.46
50 19.52 29.20 10.50 8611 3.28
75 18.41 27.47 9.29 8462 3.08
100 17.40 26.13 9.10 8233 2.91
125 16.44 24.59 8.15 8076 2.78
150 15.51 23.49 7.40 7950 2.74
200 13.90 21.80 5.90 7722 2.75
250 12.46 20.12 4.43 6766 2.78
300 11.24 19.12 2.80 5376 2.82
400 9.26 16.77 2.72 4092 2.57
500 7.25 12.91 3.40 1825 1.91
600 5.65 9.12 2.23 1485 1.16
700 4.74 6.98 3.00 1330 0.76
800 4.13 5.72 3.09 1196 0.53
900 3.68 4.81 2.89 1034 0.39
1000 3.33 4.18 2.71 903 0.28
1100 3.04 3.68 2.57 518 0.22
1200 2.83 3.39 2.30 460 0.19
1300 2.65 3.08 2.32 361 0.15
1400 2.49 2.82 2.15 337 0.12
1500 2.37 2.66 2.09 303 0.10
1750 2.12 2.39 1.93 131 0.09
2000 1.93 2.11 1.78 186 0.07
}}}
{{{
# 組み込み関数を描画
plot sin(x)
# ユーザ定義した関数を描画
f(x) = x ** 2 + 5
plot f(x)
# 直接関数を書くことも可能みたい
plot 3 * x
}}}
; 2D のデータプロット
''> load "plot3d_bat.txt"''
{{{
<plot3d_bat.txt>
splot "3Ddata.txt"
# 等高線を書く場合
set dgrid3d 6, 10 # 縦横のデータ数に合わせて、メッシュを切る
# (Y軸のデータ数, X軸のデータ数)
splot "3Ddata.txt" with lines # 線で描画
# カラーの等高線
set pm3d
splot "3Ddata.txt"
# plot した元データを非表示にする場合
splot "3Ddata.txt" with pm3d
# 等高線を2次元で表示
set pm3d map
splot "3Ddata.txt"
# レンジの設定
# set xrange [273.15:274.050001]
# set yrange [10:15]
set cbrange[0:0.20] # 2次元カラーマップの範囲指定は、これで行うらしい
replot
# カラーパレットの変更
set palette rgbformulae 22,13,-31
}}}
{{{
# 別のサンプルだが...
set dgrid3d 141, 180
set cbrange[0:0.18] # set zrange[0:0.20] ??
set palette rgbformulae 22,13,-31
set pm3d map
splot "methane.txt"
# splot[273.15:291.050001][10:150] "methane.txt"
}}}
{{{
<3Ddata.txt">
# X Y Z
273.15 10 0.01944
273.25 10 0.01939
273.35 10 0.01934
273.45 10 0.01929
273.55 10 0.01924
273.65 10 0.01919
273.75 10 0.01914
273.85 10 0.01909
273.95 10 0.01904
274.05 10 0.01899
273.15 11 0.02129
273.25 11 0.02124
273.35 11 0.02118
273.45 11 0.02113
273.55 11 0.02107
273.65 11 0.02102
273.75 11 0.02096
273.85 11 0.02091
273.95 11 0.02086
274.05 11 0.0208
273.15 12 0.02313
273.25 12 0.02307
273.35 12 0.02301
273.45 12 0.02295
273.55 12 0.02289
273.65 12 0.02284
273.75 12 0.02278
273.85 12 0.02272
273.95 12 0.02266
274.05 12 0.0226
273.15 13 0.02496
273.25 13 0.02489
273.35 13 0.02483
273.45 13 0.02477
273.55 13 0.0247
273.65 13 0.02464
273.75 13 0.02457
273.85 13 0.02451
273.95 13 0.02445
274.05 13 0.02439
273.15 14 0.02677
273.25 14 0.0267
273.35 14 0.02663
273.45 14 0.02656
273.55 14 0.02649
273.65 14 0.02642
273.75 14 0.02636
273.85 14 0.02629
273.95 14 0.02622
273.15 15 0.02856
273.25 15 0.02849
273.35 15 0.02841
273.45 15 0.02834
273.55 15 0.02827
273.65 15 0.0282
273.75 15 0.02812
273.85 15 0.02805
273.95 15 0.02798
274.05 15 0.02791
}}}
; PDF へ書き出し
{{{
set terminal pdf
set output "test.pdf"
plot cos(x)
set output
}}}
;リファレンス
* [[Google Static Maps API - Google Code | http://code.google.com/intl/ja/apis/maps/documentation/staticmaps/ ]]
* [[Google Maps API リファレンス - Google Maps API - Google Code|http://code.google.com/intl/ja/apis/maps/documentation/reference.html]]
*[[本当はすごい、知られざるGoogle Maps APIたち!!(1/3)-@IT|http://www.atmarkit.co.jp/fwcr/rensai2/google_int_03/01.html]]
*[[Google Code Playground|http://code.google.com/apis/ajax/playground/?exp=search#map_simple]]
; 日本語リファレンス
* [[Google Maps JavaScript API V3 リファレンス - Google Maps JavaScript API V3 - Google Code|http://code.google.com/intl/ja/apis/maps/documentation/javascript/reference.html]]
* [[Google Maps API version 3 リファレンス - Google Maps API Version3 日本語ドキュメント(非公式)|http://sites.google.com/site/gmapsapi3/Home/v3_reference]]
* [[Google Maps Hacks -- API概説|http://www.marlin-arms.com/support/gmh/appendix-intro.html]]
* [[Google Maps API リファレンス|http://www.openspc2.org/Google/Maps/]]
** サンプルが書いてある
; URL間違ってるかも
http://www.google.com/apis/maps
http://groups.google.com/group/Google-Maps
http://groups.google.com/group/API-Japan
* [[Nishiaki's Log: Google Maps APIメモ(v2) #4 オリジナルの画像をタイルレイヤーで表示|http://nishiaki.probo.jp/2008/12/google-magoogle-mps-apiv2-4.html]]
* [[Google Maps Javascript API V3 Demo Gallery - Google Maps JavaScript API V3 - Google Code|http://code.google.com/intl/en/apis/maps/documentation/javascript/demogallery.html]]
Google Mapki
----
; 地図の表示
* ポイントのセット
* 画像の表示
* JavaScriptを呼び出すリンク
----
衛星写真を絵として見せるようなインタフェース
* ケフラビーク
* センターピボット
* バフィン島
* チャド湖
* ミピア湖
* キリバス
* 塩田 ニジェール
* 国立太陽熱実験所
* マンダレー
----
; その他メモ
* [[Y.A.M の 雑記帳: Geo Tech Talk に行ってきました。 | http://y-anz-m.blogspot.com/2011/03/geo-tech-talk.html]]
* [[Google Maps Hacks -- API概説 | http://www.marlin-arms.com/support/gmh/appendix-intro.html]]
* [[グラウンドオーバーレイの表示(GGroundOverlayクラス) - オーバーレイ画像(GGroundOverlay, GScreenOverlay) - Google Maps入門 | http://www.ajaxtower.jp/googlemaps/ggroundoverlay/index1.html]]
* [[地図とWebサービス: Google Earth APIの高度⇔Maps APIのズームレベル | http://webmapper.seesaa.net/article/153382237.html]]
* [[Google Earth Plugin - Interactive Samples | http://earth-api-samples.googlecode.com/svn/trunk/demos/interactive/index.html]]
* [[Google Maps のパラメータ | http://imakoko.didit.jp/imakoko_html/memo/parameters_google.html]]
* [[用途拡大 - Google Places API - Seis Pesos | http://japonyol.net/editor/archives/2011/05/google-places-api.html]]
* [[Google AJAX Local Search API + Maps API v3 demo | http://gmaps-samples-v3.googlecode.com/svn/trunk/localsearch/places.html]]
* [[Google Maps入門(Google Maps JavaScript API V3) | http://www.ajaxtower.jp/googlemaps/]]
! 勾配ベクトル (gradient) の定義
!! スカラー関数の gradient
「''任意の単位ベクトル v とのドット積が、v 方向の [[方向微分]] と一致するベクトル''」を与えるベクトル場のことを ''gradient'' といい、数式では、''grad'' もしくは [[∇演算子|ナブラ・ラプラシアン]] で表す。
計量ベクトル空間上のある点を x とすると、x における スカラー関数 $$f$$ の gradient は次のように表せる。
:$${\big (}\nabla f(x){\big )}\cdot \mathbf {v} = D_{\mathbf {v} }f(x) ~~~~~~~~~$$ 【式1】
より一般的なケースを考えると、$$\nabla f$$ は共変ベクトルになることを踏まえて、縮約で書いた方がよいような気もする。
:$${(\nabla_i f)} v^i = D_{\mathbf {v} }f(x)$$
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! ベクトル関数の gradient
話が簡単なので、まずは正規直交系について説明する。
【式1】の $$f$$ をベクトル関数 $$\mathbf{F}$$ に置き換え、ドット積を (内積ではなく) [[Dyadic のドット積|二項積]] だとすると、
:$$\displaystyle {\big (}\nabla \mathbf{F}(x){\big )}\cdot \mathbf {v} = \left[ \dfrac{\partial \mathbf{F_i}}{\partial x_j} (e_i \otimes e_j) \right] \cdot \left[ v_j e_j \right]= D_u \mathbf{F}(\mathbf{x}) $$
という関係を考えることができる。つまり、
:$$\nabla \mathbf{F}(x) = \dfrac{\partial \mathbf{F_i}}{\partial x_j} (e_i \otimes e_j)$$
と定義することで、スカラー関数の gradient を、ベクトル関数に拡張できる。
このように定義した gradient は共変微分になっており (証明の仕方はよく知らない)、 ''F'' が反変ベクトル場であれば $$\nabla \mathbf{F}$$ は ''1階反変1階共変テンソル'' になる。
$$\ \ \ \ \ \ \ \ \ \ \nabla \mathbf{F} = \nabla_j \mathrm{F}^i = \dfrac{\partial \mathrm{F^i}}{\partial x_j} $$
$$\ \ \ \ \ \ \ \ \ \ (\nabla_j \mathrm{F}^i) v^j = D_v \mathbf{F}(\mathbf{x}) $$
(''F'' が共変ベクトル場ならば、∇F は2階共変テンソルになる)
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! テンソル関数の gradient
$$f$$ がベクトル関数やテンソル関数の場合でも方向微分が定義できるので、ベクトル関数やテンソル関数の gradient も (スカラー関数の場合と) 同様に定義することができる。
:$${\big (}\nabla \mathbf{F}(x){\big )} (\mathbf {v}) =D_{\mathbf {v} } \mathbf{F}(x)$$
----
! スカラー関数の gradient
スカラー関数 $$f$$ の gradient は、''ベクトル (x,,i,,) を引数とし、ベクトルを返す関数''になる。
そして、 $$\mathrm{grad} \left( f(x_i) \right)$$ は、それが零ベクトルでない時、
# その向きは、点 $$(x_i)$$ における任意の [[方向微分]] の中で、方向微分係数が最大になる向きである
# その長さは、点 $$(x_i)$$ における任意の [[方向微分]] の中で、最大の方向微分係数の値である
# 点 $$(x_i)$$ を通る等高線の接線に直行する
# grad() は、共変ベクトルを返す ([[直線座標系の座標変換]] 参照)
#* この性質から、 grad は共変微分を用いて一般化することができる
という性質を持つ。
なお、4 の性質は少しややこしい。反変成分を用いて $$\displaystyle \mathrm{grad}(f) = \sum_i \dfrac{\partial f(x^i)}{\partial x^i} $$ と表されていても、これは共変ベクトルである。
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! 正規直交座標の場合
$$\mathrm{grad} \left( f(x_i) \right)$$ は、x,,i,, が n次元の正規直交座標の成分であれば、次のように計算できる。
:$$\displaystyle \mathrm{grad} = \nabla = \sum_{i=1}^n e_i \dfrac{\partial}{\partial x_i}$$
3次元の場合を例にして書くと、次のようになる。
:$$\nabla = e_x \dfrac{\partial}{\partial x} + e_y \dfrac{\partial}{\partial y} + e_z \dfrac{\partial}{\partial z} $$
- - - - - - - - - - - - - - - - - - - -
!! 曲線直交座標の場合
[[直交する曲線座標|曲線座標系]] (異なる基底同士の内積が0) の場合も同様であるが、大抵の場合、[[自然基底|曲線座標の基底]]ではなく、長さ(ノルム)を正規化した基底を用いる。
:$$\displaystyle \nabla = \sum_{n=1}^n \dfrac{1}{h_i} e'_i \dfrac{\partial}{\partial u_i}$$
e',,i,,, u,,i,, は、直交曲線座標の基底と成分である。h,,i,, は基底の長さを意味し、
:$$\displaystyle h_i = |e'_i| = \sum_{j=1}^n \sqrt{\left(\dfrac{\partial x_j}{\partial u_i}\right)^2}$$
で計算できる。なお、正規直交座標では ''h,,i,, = 1'' である。
3次元の場合を例にして書くと、次のようになる。
:$$\nabla = \dfrac{1}{h_u} e'_u \dfrac{\partial}{\partial u} + \dfrac{1}{h_v} e'_v \dfrac{\partial}{\partial v} + \dfrac{1}{h_w} e'_w \dfrac{\partial}{\partial w}$$
- - - - -
; 具体例
球座標の場合では、その自然基底の長さは、
* $$|e_r| = 1$$
* $$|e_{\theta}| = r$$
* $$|e_{\phi}| = r \sin{\theta} $$
なので、
$$\nabla = e_r \dfrac{\partial}{\partial r} + \dfrac{1}{r} e_{\theta} \dfrac{\partial}{\partial \theta} + \dfrac{1}{r \sin{\theta}} e_{\phi} \dfrac{\partial}{\partial \phi}$$
となる。
----
! ベクトル関数の gradient
方向微分を行列を用いて表すと、
:$$\displaystyle D_u \mathbf{F}(\mathbf{x}) = \begin{pmatrix} \dfrac{\partial \mathbf{F_1}}{\partial x_1} & \ldots & \dfrac{\partial \mathbf{F_1}}{\partial x_m} \\ \\ \vdots & \ddots & \vdots \\ \\ \dfrac{\partial \mathbf{F_n}}{\partial x_1} & \ldots & \dfrac{\partial \mathbf{F_n}}{\partial x_m} \end{pmatrix} \begin{pmatrix} \Delta u_1 \\ \\ \vdots \\ \\ \Delta u_m \end{pmatrix} = \begin{pmatrix} \mathbf{F_1} \\ \\ \vdots \\ \\ \mathbf{F_n} \end{pmatrix} \begin{pmatrix} \dfrac{\partial}{\partial x_1} & \cdots & \dfrac{\partial}{\partial x_m} \end{pmatrix} \begin{pmatrix} \Delta u_1 \\ \\ \vdots \\ \\ \Delta u_m \end{pmatrix} $$
なので、これを (Dyadics の) ドット積を用いて表すと、次のようになる。
:$$\displaystyle D_u \mathbf{F}(\mathbf{x}) = \dfrac{\partial \mathbf{F_i}}{\partial x_j} \Delta u_j = \mathbf{ \dfrac{\partial F}{\partial x} } \cdot \mathbf{v}$$
!! 正規直交座標の場合
ベクトル場 ''A'' の gradient は、''A'' の次元と基底を m, e' とすると $$\bm{A} = a_1 e'_1 + \cdots + a_m e'_m$$ なので、次のように計算できる。
:$$\displaystyle \mathrm{grad} \bm{A} = \nabla \bm{A} = \sum_{j=1}^n e_j \dfrac{\partial}{\partial x_j} \bm{A} = \sum_{j=1}^n \sum_{i=1}^m e_j \dfrac{\partial a_i}{\partial x_j} e'_i$$
2種類の基底の組み合わせが発生するので、 $$\mathrm{grad} \bm{A}$$ は (n x m) 個の項を持つことになる。そして、この「''基底の組み合わせ''」をテンソル積で表したものが、ベクトル関数の gradient になる(らしい)。(基底の順番には任意性があるような気がするが...) ベクトル関数の gradient は、(共変微分の定義と同じように) 次のように定義される (らしい)。
: $$\displaystyle \nabla \bm{A} = \sum_{i=1}^n \sum_{j=1}^n \dfrac{\partial A_i}{\partial x_j} e_i \otimes e_j $$
3次元の場合を例にして書くと、次のようになる。
: $$\displaystyle \nabla \bm{A} = \dfrac{\partial A_1}{\partial x_1} e_1 \otimes e_1 + \dfrac{\partial A_1}{\partial x_2} e_1 \otimes e_2 +
$$
https://en.wikipedia.org/wiki/Tensor_derivative_(continuum_mechanics)
----
----
!! [[∇ 演算子|ナブラ・ラプラシアン]]
変数が3つの場合を例にして書くと、以下のようになる。
$$\nabla = e_x \dfrac{\partial}{\partial x} + e_y \dfrac{\partial}{\partial y} + e_z \dfrac{\partial}{\partial z} $$
[[直交する曲線座標|曲線座標系]] (異なる基底同士の内積が0) の場合も同様である。ただし、大抵の場合、自然基底ではなく、長さ(ノルム)を正規化した基底を用いる。
$$\nabla = \dfrac{1}{h_u} e_u \dfrac{\partial}{\partial u} + \dfrac{1}{h_v} e_v \dfrac{\partial}{\partial v} + \dfrac{1}{h_w} e_w \dfrac{\partial}{\partial w}$$
式中の記号の意味は、次の通りである。
* e,,u,,, e,,v,,, e,,w,, : 直交曲線座標の [[自然基底|曲線座標の基底]]
* u, v, w : 直交曲線座標の各基底の成分
* h,,u,,, h,,v,,, h,,w,, : 各基底の長さ
- - - - -
- - - - - - - - - - - - - - - - - - - -
!! 幾何学的な意味
grad は、 ''二つ以上の変数を持つスカラー関数''の、ある点における''最大の勾配を表すベクトル'' (「スカラー ⇒ ベクトル」という関係に注意)を意味する。
例えば、 あるスカラー関数を $$f(x,y)$$ とするとき、点 $$(x_1, y_1)$$ での最大の勾配は、
$$ \mathrm{grad} f(x_1, y_1) = e_x \dfrac{\partial f}{\partial x} (x_1, y_1) + e_y \dfrac{\partial f}{\partial y} (x_1, y_1)$$
というベクトルで表すことができる ($$e_x, e_y$$ は、それぞれ正規直交座標における X軸・Y軸方向の基底)。
なお、勾配ベクトルは ''共変ベクトル (テンソル)'' である。
----
ベクトル関数の方向微分がヤコビ行列とベクトルv の行列の積として表せることを踏まえると、ヤコビ行列を返す演算になる (と思う)。
* 「''任意の単位ベクトル v との (行列の) 積が、v 方向の [[方向微分]] と一致する二階のテンソル (行列?)''」?
* ヤコビ行列の転置?
** https://en.wikipedia.org/wiki/Gradient
:$${\big (}\nabla \mathbf{F}(x){\big )} \mathbf {v} =D_{\mathbf {v} }\mathbf{F}(x)$$
後で消す。
----
また、[[ヤコビ行列]] を各基底方向への方向微分を並べた行列だと考えれば、$$f$$ はスカラー関数なので、''J'' は、
:$$\displaystyle \mathbf {J} = \begin{pmatrix} \dfrac{\partial f}{\partial x^1} & \ldots \dfrac{\partial f}{\partial x^n} \end{pmatrix} $$
という 1行n列の行列 になる。よって、「''ベクトルは縦ベクトルで表す''」とするならば、 「''ヤコビ行列の転置は gradient''」 ということもできる。
- - - -
なお、ベクトル関数の gradient は、[[ヤコビ行列]] の転置になっている。
:$$J_{ij} = \dfrac{\partial \mathbf{F_j}}{\partial x_i} $$
! 基本事項
!! シンボル
|τ |せん断応力 |shear stress |N/m2 |
|μ |粘度 |dynamic viscosity | |
|γ |せん断速度 |shear rate | |
|u |速度 |velocity |m/sec |
|r |円管の中心からの距離 | |m |
|R |円管の半径 |radius of circular pipe |m |
|p |圧力 |pressure |Pa |
|x |流れ方向にとった軸(座標) | |m |
|y |流れに垂直にとった軸(座標) | |m |
!! ニュートンの粘性法則
$$ \tau = \mu \gamma = \mu \dfrac{\delta u}{\delta y} = \mu \left( - \dfrac{\delta u}{\delta r} \right) $$
!!! 壁せん断応力
$$ \tau_w = - \mu \dfrac{\delta u}{\delta r} |_{r=R} $$
----
! ハーゲンポアズイユ流れ
!! 圧力勾配と摩擦力のつり合い
管と同じ向きに、半径rの円柱を、円管の中心設けた場合、この円柱にかかる「流れ方向(x方向)の圧力勾配」と「摩擦力」は釣り合うので、
$$ - \pi r^2 \dfrac{dp}{dx}dx = (2 \pi r dx) \tau $$
となる。この式を整理すると、
$$ \tau = - \dfrac{r}{2} \dfrac{dp}{dx} $$
この式の τ に、ニュートンの粘性法則の式を代入し、式を整理すると、
$$ \dfrac{\delta u}{\delta r} = \dfrac{r}{2\mu} \dfrac{dp}{dx} $$
となり、この式をrで積分すると、以下の式を得る。
$$ u = \dfrac{r^2}{4\mu} \dfrac{dp}{dx} + C $$ (積分定数)
!! 壁での条件
壁で滑りなしの条件(r = R の時 u = 0) を使うと、上の式の積分定数が求まる。
$$ C = - \dfrac{R^2}{4\mu} \dfrac{dp}{dx} $$
!! 速度分布と最大速度
$$ u = - \dfrac{R^2}{4\mu} \dfrac{dp}{dx} (1 - (\dfrac{r}{R})^2) $$
速度分布の式はrの関数であり、 r = 0 の時最大になる。
$$ u_0 = - \dfrac{R^2}{4\mu} \dfrac{dp}{dx} $$
!! 流量
管の中心からrの距離の流量は u(r)・2πr で表せるので、これを積分すれば流量になる。
:$$\displaystyle Q = \int_0^R 2\pi ru dr = \left[\dfrac{\pi}{8\mu} \dfrac{dp}{dx} (-2R^2r^2+r^4) \right]_0^R = \dfrac{\pi R^4}{8\mu} (- \dfrac{dp}{dx}) $$
この式は、流量が圧力損失に比例することを意味する。
:$$- \dfrac{dp}{dx} = \dfrac{8 \mu}{\pi R^4} Q = \dfrac{128 \mu}{ \pi D^4} Q \ \left( = \dfrac{32 \mu}{D^2} v\right)$$
!! 平均流速
流量を管の断面積で割れば、平均流速になる。
$$ v = \dfrac{Q}{\pi R^2} = \dfrac{R^2}{8\mu} (-\dfrac{dp}{dx}) = \dfrac{u_0}{2} $$
----
! [[ダルシーワイスバッハの式|Darcy-Weisbach]]との関係
流量の式を変形すると、
$$ \dfrac{\Delta p}{L} = \left( \dfrac{64\mu}{2rv\rho} \right) \dfrac{\rho v^2}{4r} = \left( \dfrac{64}{Re} \right) \dfrac{\rho v^2}{2D} $$
となる。
----
! power law 流体の場合
* [[Hagen-Poiseuille流れ_PowerLaw]]
基本的なアプローチは、[[Hagen-Poiseuille流れ]] と同じ。
$$
u(r) =
\begin{cases}
\dfrac{R^2}{4 \mu} \dfrac{dp}{dx} \left( \dfrac{4}{R^2} \dfrac{dx}{dp} \tau_0 r - \dfrac{r^2}{R^2} - \dfrac{4\tau_0}{R} \dfrac{dx}{dp} +1 \right) \ \ \ \ \ (r \geq R_0) \\
\dfrac{R^2}{4 \mu} \dfrac{dp}{dx} \left( \dfrac{R_0}{R} - 1 \right)^2 \ \ \ \ \ (r < R_0)
\end{cases}
$$
----
! 導出
!! 局所速度
ビンガム流体の定義
:$$\tau = \mu \left( - \dfrac{du}{dr} \right) + \tau_0 \ \ \ \ (\tau > \tau_0)$$
に対して、管内の流れにおける $$\tau = \dfrac{r}{2} \dfrac{dp}{dx}$$ の関係を代入すると、
:$$\dfrac{du}{dr} = \dfrac{1}{\mu} \left( \tau_0 - \dfrac{r}{2} \dfrac{dp}{dx} \right)$$
という関係が得られ、これを r で積分すると、
:$$u(r) = \dfrac{1}{\mu} \left( \tau_0 r - \dfrac{1}{4} \dfrac{dp}{dx} r^2 \right) + C$$
となる。積分定数 C は、no-slip 条件を使って求めることができる (u(R) = 0)。
:$$C = \dfrac{1}{\mu} \left( - \tau_0 R + \dfrac{1}{4} \dfrac{dp}{dx} R^2 \right) $$
そして、上記の2つの式を組み合わせると、
:$$\begin{aligned} u(r) &= \dfrac{1}{\mu} \left( \tau_0 r - \dfrac{1}{4} \dfrac{dp}{dx} r^2 - \tau_0 R + \dfrac{1}{4} \dfrac{dp}{dx} R^2 \right) \\ &= \dfrac{R^2}{4 \mu} \dfrac{dp}{dx} \left( \dfrac{4}{R^2} \dfrac{dx}{dp} \tau_0 r - \dfrac{r^2}{R^2} - \dfrac{4\tau_0}{R} \dfrac{dx}{dp} +1 \right) \end{aligned} \ \ \ \ \ $$ 【式1】
となる ($$\tau > \tau_0$$ でのみ成り立つ点に注意)。
- - - - -
!! 最大速度
また、応力の値が降伏応力となる場所(半径) R,,0,, は、
:$$\tau_0 = \dfrac{R_0}{2} \dfrac{dp}{dx}$$
でなので、
:$$R_0 = 2 \tau_0 \dfrac{dx}{dp} \ \ \ \ \ \ $$ 【式2】
であり、これを【式1】に代入すると、
:$$u(r) = \dfrac{R^2}{4 \mu} \dfrac{dp}{dx} \left( \dfrac{2R_0}{R^2} r - \dfrac{r^2}{R^2} - \dfrac{2 R_0}{R} +1 \right) $$
という式が得られ、これに $$r = R_0$$ を代入すれば、最大(局所)速度が求まる。
:$$u_{max} = u(R_o) = \dfrac{R^2}{4 \mu} \dfrac{dp}{dx} \left( \dfrac{R_0^2}{R^2} - \dfrac{2 R_0}{R} +1 \right) = \dfrac{R^2}{4 \mu} \dfrac{dp}{dx} \left( \dfrac{R_0}{R} - 1 \right)^2$$ 【式3】
- - - - -
!! 流速分布
式1-3を組み合わせると、流速分布の式が得られる。
:$$ u(r) = \begin{cases} \dfrac{R^2}{4 \mu} \dfrac{dp}{dx} \left( \dfrac{4}{R^2} \dfrac{dx}{dp} \tau_0 r - \dfrac{r^2}{R^2} - \dfrac{4\tau_0}{R} \dfrac{dx}{dp} +1 \right) \ \ \ \ \ (r \geq R_0) \\ \dfrac{R^2}{4 \mu} \dfrac{dp}{dx} \left( \dfrac{R_0}{R} - 1 \right)^2 \ \ \ \ \ (r < R_0) \end{cases} $$
- - - - -
!! 流量
流速を管の中心から管壁まで積分すれば、流量が得られる。
:$$\displaystyle Q = \int_0^R (2 \pi r) u(r) dr = \int_0^{R_0} (2 \pi r) u(r) dr + \int_{R_0}^R (2 \pi r) u(r) dr$$
複雑な式変形だが、計算すれば [[Buckingham-Reiner]] Equation が出てくる (はず)。
:$$Q = \dfrac{\pi D^3 \tau_w}{32 \mu} \left[ 1 - \dfrac{4}{3} \left( \dfrac{\tau_0}{\tau_w} \right) + \dfrac{1}{3} \left( \dfrac{\tau_0}{\tau_w} \right)^4 \right]$$
! power law 流体の場合
!! 圧力勾配とせん断応力の釣り合い
$$ \tau = K \gamma^n = K \left( - \dfrac{\delta u}{\delta r} \right)^n $$ なので、 $$\tau = - \dfrac{r}{2} \dfrac{dp}{dx}$$ の関係を使うと、
$$- \dfrac{r}{2} \dfrac{dp}{dx} = K \left( - \dfrac{\delta u}{\delta r} \right)^n$$
$$\dfrac{\delta u}{\delta r} = - \left[ \dfrac{1}{2K} \left(- \dfrac{dp}{dx} \right) \right]^{\frac{1}{n}} r^{\frac{1}{n}} $$
となる。
---
!! 速度のプロファイル
この式をrで積分すると、
$$\displaystyle u = \int \left(\dfrac{\delta u}{\delta r} \right) dr = - \dfrac{n}{n+1} \left[ \dfrac{1}{2K} (- \dfrac{dp}{dx}) \right]^{\frac{1}{n}} r^{\frac{n+1}{n}} + C $$
となる。壁で滑りなしの条件(r = R の時 u = 0) を使い、Cを求めると、
$$ u = - \dfrac{n}{n+1} (\dfrac{1}{2K} (- \dfrac{dp}{dx}) )^{\frac{1}{n}} r^{\frac{n+1}{n}} + \dfrac{n}{n+1} (\dfrac{1}{2K} (- \dfrac{dp}{dx}) )^{\frac{1}{n}} R^{\frac{n+1}{n}} $$
$$ u = \dfrac{n}{n+1} (\dfrac{1}{2K} (- \dfrac{dp}{dx}) )^{\frac{1}{n}} (R^{\frac{n+1}{n}} - r^{\frac{n+1}{n}}) $$
となる。
----
!! 流量
流量は、
$$\displaystyle Q = \int_0^R 2\pi r u(r) dr = \dfrac{2\pi n}{n+1} \left( \dfrac{1}{2K} (- \dfrac{dp}{dx}) \right) ^{\frac{1}{n}} (R^{\frac{n+1}{n}}r - r^{\frac{2n+1}{n}}) $$
$$ Q = \dfrac{2\pi n}{n+1} (\dfrac{1}{2K} (- \dfrac{dp}{dx}))^{\frac{1}{n}} \left[R^{\frac{n+1}{n}} \dfrac{1}{2} r^2 - \dfrac{n}{3n+1}r^{\frac{3n+1}{n}} \right]_0^R $$
$$ Q = \pi (\dfrac{n}{3n+1}) (\dfrac{1}{2K} (- \dfrac{dp}{dx}))^{\frac{1}{n}} R^{\frac{3n+1}{n}}$$
となる。
----
!! 壁せん断速度
上式に、 $$ K = \dfrac{\tau_w}{(\gamma_w)^n} $$ と $$ - \dfrac{dp}{dx} = \dfrac{2\tau_w}{R} $$
を代入すると、
$$ Q = \pi (\dfrac{n}{3n+1}) \left( \dfrac{(\gamma_w)^n}{2\tau_w} \dfrac{2\tau_w}{R} \right)^{\frac{1}{n}}R^{\frac{3n+1}{n}}$$
となり、この式を整理すると、
$$ \gamma_w = \dfrac{3n+1}{4n} \dfrac{4Q}{\pi R^3} = \dfrac{3n+1}{4n} \dfrac{8 \bar{u}}{D} $$
となる (D は管の直径)。
---
!! n (behavior index) の求め方
$$ \tau_w = K (\gamma_w)^n$$ より、
$$\left( - \dfrac{D}{4} \dfrac{dp}{dx} \right) = K \left( \dfrac{3n+1}{4n} \dfrac{8 \bar{u}}{D} \right)^n$$
両辺の対数を取ると、
$$\ln \left( - \dfrac{D}{4} \dfrac{dp}{dx} \right) = n \ln \left( \dfrac{8 \bar{u}}{D} \right) + n \ln \left( \dfrac{3n+1}{4n} \right) + \ln (K)$$
となるので、 n は $$\ln \left( \dfrac{8 \bar{u}}{D} \right)$$ と $$\ln \left( - \dfrac{D}{4} \dfrac{dp}{dx} \right)$$ のプロットの傾きから求めることが可能である。
!! K (consistency index) の求め方
$$ \tau_w = K (\gamma_w)^n$$ より、 $$\ln \left( - \dfrac{D}{4} \dfrac{dp}{dx} \right) \propto \left( \dfrac{3n+1}{4n} \dfrac{8 \bar{u}}{D} \right)^n $$ なので、
K は $$\left( \dfrac{3n+1}{4n} \dfrac{8 \bar{u}}{D} \right)^n $$ と $$\ln \left( - \dfrac{D}{4} \dfrac{dp}{dx} \right)$$ の傾きから求めることが可能である。
---
---
$$ \tau_w = \mu \gamma_w = \mu_a \gamma_a $$
$$ \mu = \dfrac{\gamma_a}{\gamma_w} \mu_a = \dfrac{4n}{3n+1} \mu_a $$
---
($$ \gamma_a (= \gamma_N) $$ は、見かけせん断速度)。
($$ \gamma_a (= \gamma_N) $$ は、見かけせん断速度)。
HDD 上のデータであれば、''cipher'' コマンドで完全消去できる
: C:\Windows\System32>cipher /w:Q:
- - - - -
<<<
なお、cipher.exeによるデータ削除が有効なのはHDDの場合のみで、SSDには効果がない。よって以降はHDDで行うことを前提としている。
<<<
[[【解析不能化】cipher.exeでデータほぼ完全削除!ストレージ廃棄の必須事項解説 - Kibekin BLOG.|https://linkskibe.com/storage_all_delete_cmd_cipher/]]
;Heat Transfer Coefficient (熱伝達率)
* ''h = q / (A ・ΔT)''
** h : heat transfer coefficient, ( W/(m2K) )
** q : heat flow in input or lost heat flow , (J/s = W)
** A : heat transfer surface area, (m2)
** ΔT : difference in temperature between the solid surface and surrounding fluid area, (K)
; Over-all Heat Transfer Coefficient (総括伝熱係数 ・ 熱貫流係数)
こんな感じらしいが...
```
Uの内部構造は、1/U=1/h1+1/hs1+L/kav.+1/hs2+1/h2と表現され、hを見積もる事が大変難しいのです。
h:伝熱面の境膜伝熱係数、内外2種類有る。
hs:伝熱面の汚れ係数、内外2種類有る。
L:伝熱面厚み
kav:伝熱面の熱伝導率の異種温度の平均、熱伝面内外で温度が異なり、温度によって変化する熱伝導率を平均して用いる。
```
対数平均温度差
* [[伝熱 前編(平板の場合) : 蒸気のお話 - TLV|http://www.tlv.com/ja/steam_story/0810dennetu_2nd.html]]
* [[Heat transfer coefficient - Wikipedia, the free encyclopedia|http://en.wikipedia.org/wiki/Heat_transfer_coefficient]]
{{{
#include <stdio.h>
int main(int argc, char **argv){
printf("Hello, World!\n");
return 0;
}
}}}
* [[html のスキーマ| http://www.w3.org/2002/08/xhtml/ ]]
* [[低スペックPCでも使える! Webブラウザでサイト作成(3/3) - @IT | http://www.atmarkit.co.jp/fwcr/rensai/freeauthoring03/freeauthoring03_3.html ]]
* [[Jakob Nielsen博士のAlertbox|http://www.usability.gr.jp/alertbox/]]
* [[CSS記述規則「プロパティ別整理法」の提案 : akiyan.com | http://www.akiyan.com/css_every_propaty_order_system ]]
* [[少しのコードで実装可能な20のCSS小技集 Webクリエイターボックス | http://www.webcreatorbox.com/tech/css-tips20/]]
; サンプル
* [[POSTフォーム]]
<<tag "IELTS">>
---
<<tree prefix:"IELTS/">>
---
! 役立つサイト
* [[ielts-simon.com|http://ielts-simon.com ]]
* [[IELTS Liz|http://ieltsliz.com/]]
* [[IELTS Liz - YouTube|https://www.youtube.com/user/ieltsliz?annotation_id=annotation_3326620631&feature=iv&src_vid=2TAhwbB8GKM]]
* [[IELTSライティング対策 ~6.0を取るための9つのコツとポイント~ IELTS対策講座 目標スコアを突破し留学・移住を実現する方法|http://ielts.xsightplus.com/2016/12/05/writing60/]]
----
!! ライティング
* [[IELTS agree or disagree essay - band 9 guide|http://ielts-up.com/writing/agree-disagree-essay.html]]
!! スピーキング
* [[IELTS Exam Preparation - IELTS Speaking - Part 1|http://www.ielts-exam.net/ielts-speaking/ielts-speaking-part-one.html]]
* [[Speaking Sample|http://www.ielts-mentor.com/speaking-sample]]
!! リーディング
* [[半年でIELTS Reading5.5→8.5達成の僕が思う英語の勉強法と参考書|http://dent-sweden.com/english/ielts/ielts-reading/reading8-5]]
* [[効果バッチリ★スラッシュリーディングによる英語の音読 |http://naminorism.com/listening_methods/slash_reading/]]
----
; その他
* http://soto.aikotoba.jp/mother/mother02.htm
* http://ネイティブイングリッシュ.biz/entry243.html
* [[mytutor | http://www.mytutor-jpn.com/ielts.html#writing ]]
* [[IELTS対策 | http://connect-nory.com/category/ielts/page/3/ ]]
<<tag "IELTS Speaking">>
----
! Part2
!! 基本的なポイント
* 全部の質問の内容に答える(Cover every point)。
** 1つのポイントについての説明を2~3文で構成するのがベストです。
* 答えとその理由(Reason)や例(Example)
** Use personal experience
** Make use of your senses (touch, sight, hearing, smell, taste, ...)
* トピックからは離れない (Off topic にならない)
* 文全体の構成
* [[IELTS: Speaking Testの構成-IELTS(対策)ガイド | http://www.ncc-g.com/site/ielts/ielts_sp-1.html]]
* [[IELTSスピーキング Part2のコツ - IELTS対策・勉強法&TipsのIELTS4U.jp | http://www.ielts4u.jp/tips/ielts%E3%82%B9%E3%83%94%E3%83%BC%E3%82%AD%E3%83%B3%E3%82%B0-part2%E3%81%AE%E3%82%B3%E3%83%84/]]
* [[IELTS Speaking (Part 2対策): (2) IELTS Speaking Section 7.0(Academic)越えまでの軌跡 | http://ielts7.seesaa.net/category/7221350-2.html]]
!! Sample Questions
* [[IELTS対策!Speakingで最も聞かれやすい8つのトピック | http://thank.red/topic.html]]
!! Sample Answers
* [[IELTS スピーキング Part2 対策&攻略テクニック - YouTube | https://www.youtube.com/watch?v=oW4yiYobEKE]]
* [[Dr.KatのIELTS6.5スピーキング模範解答 - YouTube | https://www.youtube.com/watch?v=flXADBLfSVY]]
<<tabs "IETLS_Speaking_part2.a1 IETLS_Speaking_part2.a2" "IETLS_Speaking_part2.a1" "$:/state/tab1">>
----
* [[瞬間英作文用おすすめ教材とそのレビュー || http://www.yukihy.com/entry/2014/12/10/%E5%83%95%E3%81%8CTOEIC%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AB%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%8D%E3%81%9F%E7%9E%AC%E9%96%93%E8%8B%B1%E4%BD%9C%E6%96%87%E3%81%AE%E6%9C%AC%E3%81%A8%E3%81%9D%E3%81%AE ]]
* http://www.usingenglish.com/files/pdf/101-ielts-speaking-part-two-tasks-about-sports-and-hobbies.pdf
* YouTube
** https://www.youtube.com/watch?v=-OAHhzY50yY
! Free time
|appreciate |絵を鑑賞する |
|Occasionally |たまに、時たま |
|perspective (view) of the world |世界観 |
|a way of thinking |ものの考え方 |
|one's sense of value |~の価値観 |
```
I often go to museums to appreciate art works. Occasionally, some marvelous art works shakes my perspective of the world. It changes my sense of value. But, it is very rare. These experiences are important for me because it stimulates and broadens my way of thinking.
```
----
! Food
|cuisine ||
|Once in a while |たまには |
|authentic |本格的な |
|buckwheat |蕎麦 |
|aroma |匂い (味として体に取り込めるものから漂う香りに対して使うことの多い) |
```
It's a traditional cuisine of Japan. It's a kind of noodle made from buckwheat. I often eat it at standing restaurants in train stations. Once in a while, I go to authentic Soba restaurants. Ingredients of the noodle are buckwheat powder, salt, and water. At first, they are mixed well, and formed into a plate. The plate is cut up into narrow strips. Finally, the strips are boiled. (A lump of noodle is put in a soup.)
For making the noodle, skill or special machine is required. Unfortunately, I have neither. So, I can't cook it. Soba has a little bit unique aroma compared to other noodles made from wheat and rice. I like this aroma. And, it is one of fast food in Japan. It's convenient when I don't have much time.
```
----
! Book (Story)
|biography |伝記 |
|autobiography |自叙伝 |
|awful |ひどい |
|political measure |政策 |
|famine |飢饉 |
|historically significant |歴史的に重要な |
| | |
|a communist party |共産党 |
|strike a chord in one’s heart |心を打つ |
```
This book is a biography of a Chinese woman and her mother and grandmother who lived in China in 20 centuries. Until I read it, I hadn't known really terrible situation in China during 20 centuries caused by two awful political measures which are Great Leap Forward and cultural revolution. By these political measures, over 10 million people were killed mainly by famine. And, high culture and historically significant architecture and art works were beaten and destroyed. I was shocked by these facts.
Author's family was involved in this tragedy. They encountered troubles and sad events. (They were purged to back-country) Despite of the hopeless situation, they lived through with a bond of family.
It strikes a chord with me.
```
* [[Mao Zedong - definition of Mao Zedong in English from the Oxford dictionary | http://www.oxforddictionaries.com/definition/english/mao-zedong?q=Mao+Zedong]]
----
|活躍する |renowned ○○、 be active |
|originality and ingenuity |創意工夫 |
|hanging scroll |掛け軸 |
```
He is a renowned painter in the middle of Edo period in Japan. He learned traditional method of Japanese painting at first. But, he wasn't satisfied it. He updated these techniques with his originality and ingenuity, and applied them to his paintings. Motifs of his paintings are mostly creatures such as animals, plants and insects. It is considered that he used to observe them for a long time. In his pictures, there are excellent and amazing techniques, his emotion for painting, and unique view of the world. Probably it was achieved from the observation.
Furthermore, his perspective of the world was unique.
These new techniques and his unique view points to the worlds
(He invented new techniques for painting)
There are many originality and ingenuity in his paintings.
He was active in the middle of Edo period.
```
! A thing I own
|garment | |
```
I found it while I was traveling to western Japan. I was interested in it, but, I didn't buy it because I hate to gain my baggage at that time. After the trip, I knew a shop selling shoes of the maker.
I wear it on a daily basis.
This shoes is suitable for both casual garments and semi-formal outfits. It is convenient for business trip to have meetings. Soles of this shoes are softer than general lather shoes. It eases me to walk for a long time during the trip. For example, transit in a large airport.
```
----
! Person
|卒業研究 |graduation research |
|指導教官 |research supervisor |
```
The person is a research supervisor when I was a 4th-year university student.
It was first time for me to develop a concrete research plan including objectives, schedule, required data, and equipment and experimental system for data acquisition. I had to organize them by myself. It was a big challenge, and I could not do it at first. But, he did not give direct answers. Instead of them, he give hints and examples similar to my research. They helped me. but more important fact is they made me think about rational solutions of work items from logical thinking. Through the process, I understood strategy to approach a difficult challenge. It is, of course, useful for research But it's also helpful for current my tasks containing technically difficult aspects.
問題の解決方法、難しい問題への取り組み方
それは、研究だけでなく他の場面でも helpful.
solve each work items logically.
```
----
! 自分の意見
* I think ...
* I believe ...
* I feel ...
* in my opinion / in my view
* I agree/disagree
* I argue ...
! 前置き
* in general / generally speaking
* strictly speaking
* frankly speaking
* to be honest
* it depends (on X)
* X can be divided into Y and Z
! 予測・展望
* in the (near) future
* 「要追加」
! 他のものとの比較
* prefer X to Y
* prefer to do rather than do
* favor X over Y
* compared to/with
* similar (X) to Y
* same (X) as Y / equally
----
! 自信が無い時
* some people say/claim/believe that ...
* I sometimes hear/see ...
! 言い訳
* it is a difficult question.
* although I have never though about X, ...
* I am not particular about X, but ...
* I do not have any clear answers (for X) ...
! 困った時
* could you rephrase the question?
|in the past decade |過去10年間 |
|two decades |20年 |
|a book entitled A |Aというタイトルの本 |
|be serialized in A |Aで連載されてる |
|natural history |博物学 |
|taxonomy |分類学 |
|old-time |昔の |
|acoustic echo, reverberating echo |反響音 |
|footstep |足音 |
|whisper |ささやき声 |
```
Distinctive shape of the facility makes strange acoustic echos from sounds of footsteps and whispers of visitors.
```
Ongoing series
[[英会話でスピーキング力を数倍に伸ばす方法 | http://ielts.xsightplus.com/2014/10/13/expression-db/]]
----
|(私が)働いていた頃は... |when I was working in a/the company, ... |
|on weekdays |平日に |
|on weekends |週末(通常の土日休み)に |
|on my days off |休みの日に |
|mentally / mental |副詞:精神的に / 形容詞:精神的な |
|typical |典型的な |
|repeated rhythm in music ||
|good |excellent, stunning, amazing |
|food ||
|clothes |wear, apparel, garment |
----
|3 |let go of |~を解き放つ、~を取り除く [Phrase] |[[Ref.1 | http://www.eigowithluke.com/2011/05/let-go/]] |
|3 |outlook on |~に対する考え方、...観 ||
|4 |regardless of |~にかかわらず ||
|6 |lean against |~にもたれかかる ||
|7 |pass by |~のそばを通り過ぎる |Ref: pass through ~を通り過ぎる |
|11 |combine A with B |AとBを組み合わせる ||
|14 |quote from |~から引用する ||
|15 |be familiar with |よく知っている、なじみの |⇔ be unfamiliar with |
----
* [[英語で論文を書くときに知っておくと便利な単語やフレーズを激選してみた | http://naninishiyoukana.com/?p=2346]]
; 名詞
|目的 |objective, purpose, aim, |motive, motivation |
|理由 |reason, |cause, basis |
|thank |appreciate |
|墓 |grave, cemetery, burial |
|unique |distinctive |
|香辛料 |spice, condiment, seasoning |
||useful, handy |
|understand, comprehend ||
* [[英語で「素晴らしい」というための表現22選 | http://upgradeourenglish.com/vocabulary/excellent/]]
----
* [[仕事の話をする時に使う英語例文集 | https://ja.speaklanguages.com/%E8%8B%B1%E8%AA%9E/%E3%83%95%E3%83%AC%E3%83%BC%E3%82%BA/%E4%BB%95%E4%BA%8B]]
* [[when I was working - 日本語翻訳 – Linguee辞書 | http://www.linguee.jp/%E8%8B%B1%E8%AA%9E-%E6%97%A5%E6%9C%AC%E8%AA%9E/%E7%BF%BB%E8%A8%B3/when+i+was+working.html]]
|She had seen such incidents herself when she was working as an interpreter at a Japanese trading company. |日本の商社で通訳の仕事をし ていたときもそのことを体験した。 |
When I was working in a company, ...
! 図の説明の言い換え
; Graph / Table
* show
** illustrate
** give information about
** represent
* from A to B
** between A and B
** over the period given
* the number(s) of
** how many
* the amount of
** how much
[[[Grammar] "number of" or "numbers of"?|https://www.usingenglish.com/forum/threads/146116-quot-number-of-quot-or-quot-numbers-of-quot]]
----
; Diagram
* show
** illustrate
* the X cycle
** the stages (steps) in the X cycle
** the different stages involved in
- - - - -
* [[IELTS Diagram: Introduction and Overview|http://ieltsliz.com/ielts-diagram-introduction-overview-paragraphs/]]
* [[IELTS Task 1 Diagrams (www.ibest.edu.vn) - YouTube|https://www.youtube.com/watch?v=LyNjmg4jn5s]]
- - - - -
* [[IELTS Writing Task 1 Diagram Structure & Organisation|http://ieltsliz.com/ielts-writing-task-1-diagram-structure/]]
* [[IELTS task 1 writing diagram example with structure part 2 of 2 - YouTube|https://www.youtube.com/watch?v=UqKZLpAJ_kk]]
----
* In terms of
** with regard to
* about
** around
** approximately
[[IELTS Task 1 Maps Vocabulary (www.ibest.edu.vn) - YouTube|https://www.youtube.com/watch?v=kgA07fDTeKo]]
! Vocabulary for Accurate Data
* http://ieltsliz.com/ielts-line-graph-vocabulary/
* [[サンプル表現集 - IELTS対策・勉強法&TipsのIELTS4U.jp|http://www.ielts4u.jp/tips/category/sample-sentences/]]
* [[ネイティブが教える!ビジネス英語テクニック トレンドの説明の仕方 - 外資・海外転職に役立つ情報満載!<グローバル転職NAVI>|http://www.daijob.com/skillup/businessenglish/20150310.html]]
- - - - - - - - - -
!! 値を修飾する表現
* A smaller amount of
** under
** below
** less than
** [adverb: just, slightly, well, considerably]
* A larger amount of
** over
** above
** more than
* A little bit different
** almost
** nearly
** close to
** just below (above)
** slightly under (over)
* Quite under (over)
** well under (over)
** considerably less (more) than
- - - - - - - - - -
!! 比較を表す表現
[[英文法_比較]]
* 原級比較
** 等しい 「as ~ as ...」
** 倍数表現 「〇 times as ~ as ...」
* 比較級
** 大小関係 「~er than ...」
** 最大・最小の表現 「~er than other ...」
** 倍数表現 「〇 times ~er than ...」
* 最上級
** 最大・最小の表現 「the ~est in/of ...」
* 比較級を使わない表現
** 大小関係 「compared to ...」
** 倍数表現 「〇 times the ~ of ...」 (例: twice the size of ...)
; respectively との組み合わせ
```
A is more expensive than B ($XX and $YY respectively).
A is more expensive than B, with $XX and $YY respectively.
A ($XX) is over twice as expensive as B, which is $YY.
A is more expensive than B, with $XX and $YY in turn.
```
- - - - - - - - - -
!! 変化を表す表現
[[IELTS Writing Task 1: Vocabulary to Describe Large Increases and Decreases - YouTube|https://www.youtube.com/watch?v=k8eg64zFino]]
* Increase
** rise / raise [自動詞 / 他動詞]
** grow
** go up (to)
** jump to
** [adverb: slowly, gradually, significantly, considerably, slightly, dramatically]
* Increase rapidly
** soar [自動詞]
** rocket [自動詞]
* Decrease
** drop
** fall
** decline
** go down (to)
* Decrease rapidly
```
Sales decreased gradually from 750,000 in January to 500,000 units in March.
```
[[英語メモ (increase/decrease)]]
- - - - - - - - - -
!! 範囲を表す表現
* 値の範囲
** Item A range(d) from X to Y in groups.
* 期間
** across these five years
** from 19xx to 19yy
** between 19xx to 19yy
```
The amount of A was (accounted for) X in 19xx, and then this increased (decreased) to Y in 19yy.
The amount of A rose (dropped) from X in 19xx to Y in 19yy.
X is more than twice Y. (XはYの2倍よりも大きい)
```
! 具体例 1 (Bar chart)
[[IELTS Model Bar Chart Band Score 9|http://ieltsliz.com/ielts-model-bar-chart-band-score-9/]]
[[IELTS Bar Chart: Tips for a High Score|http://ieltsliz.com/ielts-bar-chart-tips-and-techniques-for-a-high-score/]]
* [[IELTS Writing Task 1: How to Describe a Bar Chart - YouTube|https://www.youtube.com/watch?v=E3U1Y1jgGls]]
* [[Model Answer | http://ieltsliz.com/tag/model-task-1/ ]]
* [[IELTS Writing Task 1: How to organise your writing - YouTube|https://www.youtube.com/watch?v=TzLyARGcTEA&index=2&list=PLOSo0A8ngEXWhD3_yisOF0qBB4e6sWx01]]
* [[IELTS Writing Task 1: Vocabulary for Accurate Data - YouTube|https://www.youtube.com/watch?v=MYjUEFeQv7w&list=PLOSo0A8ngEXWhD3_yisOF0qBB4e6sWx01&index=3]]
!! 1. Introdcution
* 問題文の文章を、自分の言葉で言い換える。
** graph / chart / table などの言葉を、無理に言い換える必要は無い
** Paraphrase verb: show ⇒ illustrate
** Paraphrase : expenditure ⇒ the amount of money spend on
* 説明文を分かりやすくするため、グラフからいくつかの情報をピックアップして追加。
** add number: 'five' consumer goods
** goods の具体名: ⇒ (cars, computers, books, perfume and cameras)
*** bracket は上手に使うと、便利。
** 具体的な country 名: ⇒ in France and the UK
** グラフの単位: Units are measured in pounds sterling
*** 使われている通貨単位が、ややユニークであることも、ここに入れた方がよい理由の一つ。
!! 2. Overview
Highlight key features.
# Total: UK > France
# Max: UK = cars, France = cars
# Min: UK = perfume, France = cameras
* Overall, the expenditure of the UK was higher than that of France.
** Overall, .. という表現から始めることで、ここがoverviewであることを読み手に分かりやすく示している。
* 比較表現を効果的に使用する。
** overviews often and usually have comparatives.
* whereas という対比を表す接続詞を使って、複文にしている。
** whereas の代わりに、while を使ってもよい
** [[対比・対照の副詞節を導く接続詞:while / whereas|http://www.ravco.jp/cat/view.php?cat_id=4800&PHPSESSID=]]
!! 3. 4. Detailed information
Body paragraph should be divided into two paragraphs.
!!! パラグラフの分け方
* 例1: 「最大・最小の値を持つ項目」 と 「それ以外」
** Cars, perfume, cameras - 「最大・最小の値を持つ項目」
** Computers, books
* 例2: 大小関係に着目 「UKの方が値が大きいもの」・ 「France の方が値が大きいもの」
** Cars, books, cameras - [UK > France]
** Computers, perfume - [UK < France]
!!! 具体的な内容
* In terms of cars, ...
** このように書きだすことで、何について説明しているかが、分かりやすい。
* 各項目の値についての説明をする。
* 各センテンスの説明では、必ず具体的な数値によるサポートをすること。
** グラフからは、正確な値は読み取れないので、その表現方法には、気を使うこと。
*** around £450,000
* The expenditure on books in the UK was higher than in France (about £400,000 and £300,000 respectively).
** 具体的な数字は、ブラケットを使って補う方法もあり。
** respectively という表現は便利。
** ここでも、比較表現は有効。
* 単位の対して、シンボルを使うのはあり。
** 通貨: $, ..
** 温度: ℃, ..
! 具体例 2 (Table)
[[IELTS Table Band Score 9 Model Answer|http://ieltsliz.com/ielts-table-band-9-model-answer/]]
!! 1. Introdcution
!! 言い換え
* give information about ⇒ illustrate
* information about consumer spending on different items ⇒ the proportion of national expenditure
** "proportion of" にすることで、割合での表記であることの説明を追加している。
* five countries ⇒ Ireland, Italy, ...
** 具体的な国名へ
* different items ⇒ three categories of items
** グラフの3つのカテゴリについての情報を追加。
!! 2. Overview
!!! Key Features
# 最大の項目: Food/Drinks/Tobacco
# 最小の項目: Leisure/Education
# Totalが一番大きい国: Turkey
* Overall, .. から書き出す
* The lowest .. in five countries (最上級)
* The expenditure of Turkey .. was higher than the other countries.
** 比較級を使って、最上を表す
** 受け身
* twice は副詞だが、"the amount of .." や "the number of .." などの名詞を修飾することができる
!! 3. Paragraph A (Food/Drinks/Tobacco)
* In terms of .., ..
* the most, the least を代名詞として使う。
** Turkey spent the most at ..
** Sweden which spent the least..
* 具体的な数字を at 32.18% の形で補足。
** [[前置詞 at のイメージ(意味と使い方) |https://phrase-phrase.me/ja/keyword/preposition-at]]
* compared to ...
** which ... という形で補足説明を入れている。
* respectively の使用
!! 4. Paragraph B (Clothing/Footwear)
* Italy spent more than the other .. (比較級を使って、最上を表す)
* as opposite to ..
** 〜とは対照的に
* which could be seen in
** 関係代名詞を使った表現にしている。
* The other three .. on average around 6.5%.
** ざっくりまとめている。
!! 5. Paragraph C (Leisure/Education)
* 二度目の the lowest だが、ここでは形容詞として使っている。
* which account for under ..
** .. を占める (occupy)
* which is around double ..
----
* spend - use
* spend most on
** [[NOVA200校閉鎖へ!&NOVA VOICE HOPPING ( 習いごと ) - COSMO'S DIARY - Yahoo!ブログ|http://blogs.yahoo.co.jp/hokeypokeyyoudothe/36505911.html]]
! 具体例 3 (line chart)
http://ieltsliz.com/ielts-writing-task-1-line-graph-model-score-9/
----
!! 1. Introdcution
!! 言い換え
* The graph below ⇒ The line graph
* shows ⇒ illustrates
* the consumption of 3 spreads ⇒ the amount of three kinds of spreads (margarine, ..) which were consumed ...
* from 1981 to 2007 ⇒ over 26 years from 1981 to 2007
- - - - -
* consumed amount - 消費量
* between 1981 and 2007
----
!! 2. Overview
!!! Key Features
* 全体の傾向として、margarine と butter は減少している。
* 全体の傾向として、low fat and reduced spreads は増加している。
* 消費量が最大の項目の変化
** butter ⇒ margarine ⇒ low fat and reduced spreads
- - - - -
* over period given while
** over のニュアンスは、 during に近い
** for とはちょっと違う
*** [[英訳:(66)これまでに~した最も|http://www1.odn.ne.jp/xenom/douihyougen.box/eiyaku66.html]]
*** [[over Meaning in the Cambridge English Dictionary|http://dictionary.cambridge.org/dictionary/english/over]]
* (the largest) consumption ⇒ the most popular, the most widely used
* 順位の交代を、 replace で表現。
----
!! 3. Paragraph A (Butter & Margarine)
; butter
* with regard to (に関して)
* 最初の状態の説明
** it began at ... in 19XX
* その次の状態の説明を "and then" をつなぐ
* 最大値になった時を "peak" を使って説明
** peak at ... in 19xx
* さらに、before でつないで、一つの文章で説明をする
** before falling dramatically to X in the last year.
*** fall to X in 19xx.
; margarine
* Likewise, .. (..と同様に)
* "after which" でつないで、その後の状態も含めて、一つの文章で説明する。
!! 4. Paragraph A (Low fats & reduced spreads)
* 最初の状態の説明
** it began in 19XX at ...
* Figure
* 最大値の表現 "reached a high of X in 19xx"
[[IELTS Line Graph and Bar Chart Model Answer (Band 9)|http://ieltsliz.com/ielts-line-graph-and-bar-chart-model-answer-band-9/]]
----
! 1. Introdcution
!! 言い換え
* shows = illustrates / gives information about
* visits to and from the UK ⇒ the number of UK residents going abroad from the UK and overseas residents visiting the UK
** イギリスのような島国であれば、overseas も使える?
* while で2つのグラフの説明文章を、つないで1つの文にしている。
グラフの単位の情報を追加。
! 2. Overview
!! Key Features
* from UK > to UK [over the period given]
* most popular country to visit by UK residents was France in 1999
* from/to UK、どちらも単調増加している。
more visits abroad by UK residents
! 3. Paragraph A (上のグラフについて)
* 最初の状態の説明
** begin at 値 in 開始時期.
** ... before climbing steadily to ...
* そこからの変化
** rose significantly to reach X in Y.
*** reach (や peak) というのをうまく使って、時期も含めて、うまく説明する。
!! メモ
* increase
** rise
** climb
! 4. Paragraph B (下のグラフについて)
* France
* Spain
** "follow" という表現
** "at" を使って、数字を補足
* USA and Greece
** respectively
* Turkey
** least といってよいのか?
** less than other four くらい?
[[IELTS Diagram: Model Answer Band Score 9|http://ieltsliz.com/ielts-diagram-model-answer-score-9/]]
----
! Introduction
!! 言い換え
* shows
** illustrates
* XX-making process
** the way in which ...
** how ...
!!プロセスの概要
* Limestone & Cray ⇒ (four stages) ⇒ Cement
* Cement is one of ingredients of concrete
* 使用する機器への言及
** the process of XX uses a number of tools (machines?)
!! その他
* ready の後置修飾
! Paragraph A (セメントの製造)
* 一連のプロセスの説明
** In the first stage, ...
** then, before
** afterward
* pass into (次のプロセスへ移行する)
* ground は、grind の過去分詞。
* grind - ground - ground
! Paragraph B (コンクリートの製造)
* Regarding
[[IELTS Writing Task 1: Life Cycle Diagram|http://ieltsliz.com/ielts-writing-task-1-life-cycle-diagram/]]
----
! Life Cycle & Anatomy
! 1. Introduction
!! 問題文の言い換え
* the life cycle of ... ⇒ the stages in the life of ...
* anatomy ⇒ body structure
!! overview
* 4つのステージ
** "from egg to adult insect " と簡単に済ませている
* 大きな特徴として、赤い羽根を上げている
** is characterized by ...
** elytron の複数形が elytra
!! Paragraph A (Life Cycle)
* 話は、卵のところから
** eggs are laid on ...
* 孵化
** emerge from the eggs という表現を使っている
** 孵化というならば、 "the eggs hatch into " か。
*** hatch は、自動詞・他動詞どちらにもなる。
* 幼虫 (larva, 複: larvae)
** continue in that form
*** 能動的に書くなら "keep (maintain) that form" くらいな感じ?
* 蛹 (pupa)
** At the end of ... という言い方は、ステージに区分した説明と相性がよい。
*** "After ..." という言い方も使える。
** "stage" という言葉・区分けは、begin/start といった言葉と相性がよい。
** ここでは、 last (続く) という表現を使用。
*** this lasts for 7 days
* 成虫
** At the end of
** emerge
* サイクル(繰り返されること)の表現
** life cycle starts again
** the cycle starts anew
!! Paragraph B
[[IELTS Writing Task 1: life cycle essay - ielts-simon.com|http://ielts-simon.com/ielts-help-and-english-pr/2013/01/ielts-writing-task-1-life-cycle-essay.html]]
[[IELTS Writing Task 1: life cycle diagram - ielts-simon.com|http://ielts-simon.com/ielts-help-and-english-pr/2013/01/ielts-writing-task-1-life-cycle-diagram.html]]
----
! Introduction
!! 言い換え
* illustrate
* life cycle of ⇒ the various stages in the life of
** "a" honey bee
!! Overview
* サイクルの期間: the complete life cycle lasts between 34 and 36 days.
** complete cycle (全サイクル)
** lasts
** We can see that ...
* 5つのステージ
** there are five main stages in the development of the honey bee, from egg to mature adult insect.
!! Paragraph A
* 話は、「卵を産む」ところから、始めている。
** The life cycle of the honey bee begins when ...
*** "cycle begin when"
** Between 9 and 10 days later,
** later, after, end
!! Paragraph B
* 脱皮
** During the third stage of the life cycle,
** ... takes place ... 〔事前に計画されたことが〕行われる (= occur)
```
金銭的なサポート:
subsidize O
(financially) support O
fund
invest
allocate O
spend O on X
問題に対処する(解決しようと努力する):
deal with X
tackle O
cope with X
禁止する:
prohibit O (from X)
ban O
forbid O
廃止する:
abolish O
制限や条件を設ける:
restric
limit
control
regulate
新しい事柄を導入する:
introduce
develop
implement
obligate (義務づける)
change (the rule/regulation)
物事を推し進める:
promote
encourage
facilitate
accelerate
help O (to do / with X)
改善する or よりよくする:
improve
enhance
解決する:
solve
enable O to do
allow O to do
(状況を)維持する:
maintain
sustain
continue
support
評価する:
assess
measure
保護する:
protect
save
prevent
-----
問題:
problem
issue
cause (原因)
対策・解決策:
measure
countermeasure
solution
way/method
影響:
affect O
Effect
Influence
Impact
-----
O: 他動詞の目的語
```
<<tag "IELTS Writting Task1">>
! Structure of Document
[[IELTS Writing Task 1: How to organise your writing - YouTube|https://www.youtube.com/watch?v=TzLyARGcTEA&index=2&list=PLOSo0A8ngEXWhD3_yisOF0qBB4e6sWx01]]
# Introduction - [ What the graph (figure) shows ]
# Overview - [ key features ]
# Paragraph A - [ Detailed information]
# Paragraph B - [ Detailed information]
!! 1. Introduction
* 問題文に示されている説明文を基に、paraphrase を使って言い換える
* 説明文を分かりやすくするため、グラフからいくつかの情報をピックアップして追加。
* Don't copy!
!! 2. Overview
* .. usually looking at 2-4 key features .. , occasionally 5 ..
* critical and very important part (25% score)
* It contains all key features of charts/graphs
** e.g. highest points / lowest points
* Overview を最後に持っていくのもありだが、この位置の方がベター。
!! 3. 4. Detailed information
----
! よく使う表現
* shows (示す、説明する)
** illustrates
** gives information about
** represent
* in terms of ... (...に関していえば)
** with regard to
** regarding
* account for A (of B) [(Bの)A(という量)を占める]
** occupy A (of B)
** make up A (of B)
** be動詞
* while (対比の表現)
** whereas
** ; (セミコロン)
* about (だいたい)
** around
** approximately
----
{{IELTS/W1/Vocabulary!!text}}
----
! Paraphrase
|proportion, ration, (percentage) | |割合、比率 |
|category, class, division | | |
|country, nation | |国 |
|expenditure |the amount of money spent |出費、支出[支払]額、費用 |
|variation | |(値の)ばらつき |
|in terms of, in relation to | | |
----
* [[採点基準からIELTS Writing Task1対策を考える〜Task Achievement編|http://dent-sweden.com/english/ielts/ielts-writing/ielts-task1-ta]]
* http://connect-nory.com/ielts/writing/task2/ielts-writing-task2の攻略法%E3%80%80その5/
! Vocabulary
* [[LinkingWords]]
<<list-links filter: "[tag[IELTS Writting Task2]]" >>
----
!Structure of Document
* [[IELTS Writing Task 2 strategies and example essay PART 1 FULL - YouTube|https://www.youtube.com/watch?v=ydfevLmcN9c]]
* [[IELTS Writing Task 2 strategies and example essay PART 2 FULL - YouTube|https://www.youtube.com/watch?v=5qm8_SmU4yQ]]
* [[IELTS Writing Task 2: How to write an introduction - YouTube|https://www.youtube.com/watch?v=YngqHl_BLOU&index=2&list=PLOSo0A8ngEXUNqNesQ6cFtmtsL95UZWYh]]
```
- Introduction
- Paragraph A
- Paragraph B
...
- Conclusion
```
----
! Introduction
文字数的には、35~50 words。
* (hook)
** 無くても大丈夫。
* Background statement
** 基本的には、問題文をアレンジして書く。
* Thesis statement
** 問題文に対して、自分の立ち位置を表明する。
*** answer
*** introduction to my answer
*** 1つのアイデアだけで、250 words 書くのは厳しいので、2~3のトピックを示した方が、書きやすい。
** In my opinion, ...
! Paragraph A, B, ...
* Topic sentence
** Introduction で述べた Thesis のどの部分を、扱うかを述べる。
* Explanation
** Topic Sentence を分かりやすく説明する。
* Example
** 自分の意見を補強する、具体例。
* (Connection)
** 次のパラグラフとうまく繋ぐためのセンテンス。
** 最後のパラグラフでは不要。
! Conclusion
これは導入部分で言及した「本記事で伝えたいこと(Thesis Statement)」に、ボディ部分で言及してきたことを織り交ぜ、より深くしたものと考えるのが良いでしょう。
* Summary of points
** In conclusion, ...
* Opinion emphasized
* Take home message
* [[How to write a perfect IELTS essay conclusion - YouTube|https://www.youtube.com/watch?v=FDpZmmqRTfo]]
* [[第1回 エッセイライティングのポイント : ETS公認トレーナーと勉強しよう! TOEFL iBT®テスト Web準備講座|TOEFL Web Magazine|TOEFLテスト日本事務局|http://www.cieej.or.jp/toefl/webmagazine/ibt-class/1407/]]
----
* [[英語のエッセイライティングで覚えておきたい定番表現24選!|http://unique-experience.xyz/?p=1129]]
* [[英語エッセイに学ぶ、説得型文章5つのポイント!|http://unique-experience.xyz/?p=1254]]
<<tag "ImageJ">>
[[画像処理のアルゴリズム]]
<div class="tc-table-of-contents">
<<toc-selective-expandable '画像処理のアルゴリズム'>>
</div>
- - - - -
<<tree prefix:"ImageJ/">>
----
! 仕様など
; 基本的な情報
* [[ImageJ公式サイトの日本語訳 - ImageJ日本語情報|http://seesaawiki.jp/w/imagej/d/ImageJ%b8%f8%bc%b0%a5%b5%a5%a4%a5%c8%a4%ce%c6%fc%cb%dc%b8%ec%cc%f5]]
** [[ImageJマニュアル:Process(処理)メニュー - ImageJ日本語情報|http://seesaawiki.jp/w/imagej/d/ImageJ%A5%DE%A5%CB%A5%E5%A5%A2%A5%EB%A1%A7Process%A1%CA%BD%E8%CD%FD%A1%CB%A5%E1%A5%CB%A5%E5%A1%BC]]
- - - - -
; メモリ不足と言われた時 (~OutOfMemoryError)
<<<
Edit ▶ Options ▶ Memory & Threads
<<<
https://imagej.net/Troubleshooting#OutOfMemoryError
- - - - -
;動画ファイル
<<<
AVI (Audio Video Interleave)は、多くの異なった方法でエンコード(符号化)されたデータを格納できる形式である。ImageJ は、非圧縮 AVI、様々な YUV 4:2:2 圧縮形式、そして PNG または JPEG エンコードされた個別のフレームのみをサポートする。ほとんどの MJPG(motion-JPEG) は、正しく読み込めないことに注意。他の形式の AVI を開こうとしても失敗する。
...
ImageJ は AVI 1.0 のみをサポートする。AVI 1.0 は 2.0 GB が上限である。
<<<
[[ImageJマニュアル:File(ファイル)メニュー - ImageJ日本語情報|http://seesaawiki.jp/w/imagej/d/ImageJ%a5%de%a5%cb%a5%e5%a5%a2%a5%eb%a1%a7File%a1%ca%a5%d5%a5%a1%a5%a4%a5%eb%a1%cb%a5%e1%a5%cb%a5%e5%a1%bc]]
- - - - -
; スタックについて
* [[ImageJ/Stack]]
! 処理の記録
!! バッチ処理
入力先と出力先を指定した上で、各ファイルにマクロ処理を実行する。
https://www.slideshare.net/yshimahara/imagej-53277076
!! ファイル処理
;<~BatchExample.ijm>
```cpp
PREFIX = "p";
inputDirectory = getDirectory("Choose a Directory of Input Files");
outputDirectory = getDirectory("Choose a Directory for Output Files");;
print("inputDirectory: " + inputDirectory);
print("outputDirectory: " + outputDirectory);
inputFiles = getFileList(inputDirectory);
//for (i=0; i < 2; i++) {
for (i=0; i < inputFiles.length; i++) {
filepath = inputDirectory + inputFiles[i];
print(filepath);
print(outputDirectory + PREFIX + inputFiles[i]);
open(filepath);
// 画像の処理
proc()
saveAs("Png", outputDirectory + PREFIX + inputFiles[i]);
close();
}
function proc(){
run("8-bit");
setAutoThreshold("Yen");
setOption("BlackBackground", false);
run("Convert to Mask");
run("Fill Holes");
run("Erode");
run("Dilate");
}
```
[[Built-in Macro Functions|https://imagej.nih.gov/ij/developer/macro/functions.html]]
----
! Basic
* ''run(string_command)''
** Executes an ImageJ menu command.
* ''print(string)''
** Outputs a string to the "Log" window
* waitForUser(title, message)
** Halts the macro and displays string in a dialog box
! For an image currently open
!! Get image properties
* getHeight()
* getWidth()
* getPixel(x, y)
!! Add changes to an image
* Overlay.drawLine(x1, y1, x2, y2)
- - - -
! For selection
Functions to create a selection
* makeLine(x1, y1, x2, y2, lineWidth)
- - - -
! Math
* PI
* pow(base, exponent)
* log(n)
** Returns the natural logarithm (base e) of n
** Note that log10(n) = log(n)/log(10). See also: Math.log10.
!! Scale bar を画像に追加する
* Analyze -> Set Scale
* Analyze -> Tools -> Scale bar
----
!! 解析項目
Analyzeメニュー>Measure(Analyzeメニュー>Set Measurements
<<<
Set Measurements(計測の設定)...
このダイアログボックスを使うと、Analyzeメニュー>Measure (計測)や Analyzeメニュー>Analyze Particles (粒子解析)でどの数値を計測したいかを指定できる。
<<<
[[ImageJマニュアル:Analyze(解析)メニュー - ImageJ日本語情報|http://seesaawiki.jp/w/imagej/d/ImageJ%a5%de%a5%cb%a5%e5%a5%a2%a5%eb%a1%a7Analyze%a1%ca%b2%f2%c0%cf%a1%cb%a5%e1%a5%cb%a5%e5%a1%bc#set]]
; 選択枠
<<<
選択枠(selections)とは、画像内でユーザーが決める領域または線のこと。一度に選択できる領域または線は1つである。領域を選択するときは、長方形、楕円形、多角形またはフリーハンド選択ツールを用いる。領域を選択すると、計測したり( Analyzeメニュー>Measure )、フィルタ処理したり、中を塗りつぶしたり( Editメニュー>Fill )、その形の輪郭を描いたりできる( Editメニュー>Draw )。線を選択するときは、直線、折れ線、フリーハンドの線選択ツールを用いる。Editメニュー>Draw で現在指定されている色で線を描ける。選択された線の長さは Analyzeメニュー>Measure で計測できる。
<<<
[[ImageJマニュアル:基本的な概念 - ImageJ日本語情報|https://seesaawiki.jp/w/imagej/d/ImageJ%a5%de%a5%cb%a5%e5%a5%a2%a5%eb%a1%a7%b4%f0%cb%dc%c5%aa%a4%ca%b3%b5%c7%b0]]
----
; 画像の白黒反転
<<<
Edit > Invert で白黒が反転する。Intensityの値も反転することに注意。定量する際には反転が必要な場合もある。なお、カーソル位置のintensityはImage Jウィンドウに数値が表示されている。
<<<
[[20170513_ImageJの使い方|http://www.iam.u-tokyo.ac.jp/chem/IMCB-8ken-HP/Lab_Manuals/entori/2017/6/26_ImageJ_files/20170513_ImageJ%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9.pdf]]
! メニュー
!! Type
画像のタイプを指定。各タイプの意味は、次の通り。
|Type |処理 |h
|8-bit |8ビットグレイスケール画像に変換 |
|16-bit |16ビットグレイスケール画像に変換 |
|32-bit |32ビットグレイスケール画像に変換 |
|8-bit Color |8ビットインデックスカラーに変換<br>使用する色数(2~256色)をダイアログボックスで指定できる |
|RGB Color |32ビット RGB カラーに変換する |
|RGB Stack |スライス3枚(赤 red、緑 green、青 blue)の [[スタック|ImageJ/Stack]] に変換 |
|HSB Stack |3枚のスライス(色相 hue、彩度 saturation、明度 brightness)の [[スタック|ImageJ/Stack]] に変換 |
|Lab Stack ||
参考: [[ImageJマニュアル:Image(画像)メニュー - ImageJ日本語情報|https://seesaawiki.jp/w/imagej/d/ImageJ%A5%DE%A5%CB%A5%E5%A5%A2%A5%EB%A1%A7Image%A1%CA%B2%E8%C1%FC%A1%CB%A5%E1%A5%CB%A5%E5%A1%BC]]
- - - - -
!! Adjust → Threshold
; Auto Threshold
<<<
Try all
Which method segments your data best? One can attempt to answer this question using the ''Try all'' option.
<<<
[[Auto Threshold - ImageJ|https://imagej.net/Auto_Threshold]]
- - - - -
!! Adjust → Brightness/Contrast
<<<
このツールではアクティブな画像のbrightness(明るさ)と contrast(コントラスト)を、補正結果をみながら変更できる。8ビット画像で明るさとコントラストを変更するには、画像のルックアップテーブル(LUT)を変えることで行われる。したがって、pixel value(ピクセル値)は変更されない。
...
スライダーバーが4つある。Minimum(最小値)、Maximum(最大値)は、表示される明るさ範囲の上限と下限を制御する。Brightness (明るさ)は、表示される明るさの範囲を移動させることで、画像を明るくしたり暗くしたりする。Contrast (コントラスト)は、表示される明るさの範囲の幅を変化させることでコントラストを増減させる。表示される明るさの範囲が狭いほどコントラストが高くなる。
<<<
[[ImageJマニュアル:Image(画像)メニュー - ImageJ日本語情報|https://seesaawiki.jp/w/imagej/d/ImageJ%A5%DE%A5%CB%A5%E5%A5%A2%A5%EB%A1%A7Image%A1%CA%B2%E8%C1%FC%A1%CB%A5%E1%A5%CB%A5%E5%A1%BC]]
フィルターをかけるなど、いわゆる画像処理にあたることを行う。
画像演算もこのメニューに含まれている。
----
! フィルター
!! [[ノイズ除去]]
線形なものと非線形なものがある点に注意。
* Filters -> Mean
** Smooth (= 3x3 Mean)
* Filters -> Gaussian Blur
* Filters -> Median
"Bilateral filter" は Fiji の Plug-in には入っている。
- - - - -
!! 二値化した画像の処理
!!! [[モルフォロジー処理]]
* Binary -> Erode
* Binary -> Dilate
* Binary -> Open
* Binary -> Close
- - - - -
!! くっついた粒子の分離
* Binary -> Watershed
- - - - -
!! コントラストの調整
* Enhance Contrast
** Saturated Pixels
** Normalize
** Equalize Histogram
<<<
よく使う機能。マニュアルでコントラストを調整する場面はあまりなく、たいていの場合はこのEnhance Contrastで良い。この方法では、何%のピクセルがsaturationするか(100分位)を基準にコントラストが決まる。そのため、intensityの強いノイズでコントラストが決まるようなことはない。基本的に、saturationはあまりしないほうが良いので、0.1%や0.05%を指定してEnhance Contrastするのが良い。なお、saturationしているピクセルはImage > LUT > ~HiLoで確認できる(戻すにはGray + Invert LUT)。
<<<
[[20170513_ImageJの使い方|http://www.iam.u-tokyo.ac.jp/chem/IMCB-8ken-HP/Lab_Manuals/entori/2017/6/26_ImageJ_files/20170513_ImageJ%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9.pdf]]
* https://en.wikipedia.org/wiki/Histogram_equalization
----
! 画像演算
* Image Calculator
<<<
2つの画像をポップアップメニューで指定し、その画像間で、画像の算術演算や論理演算を行う。Image1 または Image1 と Image2 の両方はスタックでもよい。もしどちらもスタックの場合、スライス数が同じでなければならない。Image1 と Image2 は、同じデータ型でなければならないが、画像サイズは同じでなくともよい。
<<<
https://seesaawiki.jp/w/imagej/d/ImageJ%A5%DE%A5%CB%A5%E5%A5%A2%A5%EB%A1%A7Process%A1%CA%BD%E8%CD%FD%A1%CB%A5%E1%A5%CB%A5%E5%A1%BC#calculator
! スタックの基本的な概念
<<<
ImageJ では、空間的あるいは時間的な変化を示す複数の画像を1つのウィンドウに表示できる。この画像のセットをスタック(stacks)と呼ぶ。スタックを構成している1枚1枚の画像をスライス(slice)と呼ぶ。すべてのスライス画像は、同じサイズで、同じビット数(階調数、色深度)のものでなければいけない。スクロールバー(scroll bar)を使うと、スライスを次々と表示できる。ImageJ のほとんどのフィルタ処理では、オプションで、スタック内のすべてのスライスを対象にできる。
<<<
[[ImageJマニュアル:基本的な概念 - ImageJ日本語情報|http://seesaawiki.jp/w/imagej/d/ImageJ%A5%DE%A5%CB%A5%E5%A5%A2%A5%EB%A1%A7%B4%F0%CB%DC%C5%AA%A4%CA%B3%B5%C7%B0]]
----
! 基本的な操作
<<<
Image->Stacks->Add Sliceによってスライスを増やすことが出来ます。
Image->Stacks->Set Sliceで特定のスライスに移動することが出来ます。
<<<
[[画像解析入門③ 動態解析 - IMACEL Academy -人工知能・画像解析の技術応用に向けて- LPixel(エルピクセル) (page 2)|https://lp-tech.net/articles/6GwHT?page=2]]
```
また、ImageJにおけるフィルタ処理などは、スタックのすべてのスライスに対して実行されます。
次の図は、モンタージュを表示した例です。スタック処理は〈lmage/Stacks/_〉の下に基本処理が用意されています。
```
```
ImageJは複数画像を一挙に計測する機能を多く有しています。
次の図は、スタックした画像群のうちの1画像にROIを設定し、そのROIと同じ位置の平均値をすべての画像について自動計算しプロットする“Z-axis Profle”機能(lmage/Stack/Plot Z-axis Profile_)を施工した例です。
```
[[Re - ImageJで学ぶ!: 第26回 連続画像処理で学ぶ!|https://re-imagej.blogspot.com.au/2015/09/26.html]]
----
! Virtual Stack
```
画像を修正不可の Virtual Stack(仮想的スタック)として扱うには Use Virtual Stack(仮想的スタックを使う)をチェックする。これには Virtual Stack Opener(仮想的スタック利用)プラグインのバージョンを利用する。この方法を使うと、RAM メモリで扱うには大きすぎる画像シークエンスを開けるが、アクセス時間が遅くなり、スタック内の他の画像に切り替えると、画像に加えた変更が失われる。Process Virtual Stack(仮想的スタックの処理)マクロに、仮想的スタックの全画像を処理する方法の実例がある。
```
[[ImageJマニュアル:File(ファイル)メニュー - ImageJ日本語情報|http://seesaawiki.jp/w/imagej/d/ImageJ%a5%de%a5%cb%a5%e5%a5%a2%a5%eb%a1%a7File%a1%ca%a5%d5%a5%a1%a5%a4%a5%eb%a1%cb%a5%e1%a5%cb%a5%e5%a1%bc]]
! グレースケール画像の表示
ImageJ のウィンドウに表示されるグレースケール画像 (と8-bit color) は、ピクセル情報とカラーテーブルの2つの情報を基に決められる。これは、表示されている画像が必ずしもピクセル情報と一致しないことを意味する。
* 8-bit grayscale
* 8-bit color
* 16-bit grayscale
* 32-bit grayscale
- - -
!! カラーテーブル (ルックアップテーブル)
画像のピクセルの値に対し、ウィンドウに表示する際に使う色を割り当てる色を定義するもの。''LUT'' (Look Up Table) と略されていることもある。
: ピクセルの値 ''⇒ [ルックアップテーブル] ⇒'' 画面での表示
なので、例えば LUT を虹色にすれば、グレースケール画像もカラー画像のように表示される。
!! テーブルの確認・編集
以下のコマンドから可能。
* Image > Color > Show LUT
* Image > Color > Edit LUT
!! LUT に割り当てるピクセルの値のレンジ
ImageJ の仕組み上、どのピクセルの値にどのLUTの色を割り当てるかが、指定(定義)されている。 この割り当て(対応関係)は、変更することができる。ただ、この仕組みのせいで、「''LUTだけが変わっていて、ピクセルの値が変わっていない''」みたいなことが起こるので注意が必要。
<<tag "画像処理アルゴリズム">>
! 基本的な手順
!! Pre-process
# Open an image file.
# Image → Type → 8-bit
# Image → Adjust → Threshold
# Process → Binary → Fill Holes (if required)
# Save the processed image as a different file.
!! 分析に関するパラメータの設定
# Analyze → Set Scale
#* Distance in pixels
#* Known distance
#* Pixel aspect ratio
#* Unit of length
#* (Global)
# Analyze → Set Measurements
#* Area: ''on''
#* Perimeter: ''on''
#* Fit ellipse: ''on''
#* Shape descriptors: ''on''
# [Results window] Edit → Clear.
!! 粒子の分析
# Open a pre-processed file.
# Analyze → Analyze Particles
#* Exclude on edges
#* Clear results: off
# Close the image without saving
!! くっついた粒子の分離
# Binary → Watershed
----
; Circularity (円形度)
Sを投影面積、Lを周囲長としたとき、4πS/L^^2^^ で定義される。円の円形度は1であり、図形が複雑になるほど円形度は1より小さくなる。
[[iTunes でバックアップをする(Windows® パソコンでの操作方法) ソフトバンク|http://www.softbank.jp/mobile/support/iphone/data-itunes/backup/]]
* [[Arugoworksの開発日記 - iPod touch のワイヤレスLAN (Wifi)が利用できなくなったときの対処法 | http://www.arugoworks.net/blog/?p=705]]
* [[iPad2を手に入れたらまずDropbox系アプリ - W&R : Jazzと読書の日々 | http://d.hatena.ne.jp/wineroses/20110429]]
* [[葉っぱを調べられるアプリ Leafsnap を使ってみた - HIROSHiSM|http://hiroshism.com/2011/05/leafsnap.html#more]]
iup.xxx
; iup.label {...}
* title : string
* alignment : "ALEFT:ACENTER"
** "ALEFT", "ACENTER" , "ARIGHT"
** "ATOP", "ACENTER" , "ABOTTOM"
* size: string "[number]x[number]" (ex. 80x80)
* image :
; iup.text {...}
* value: string
* size: string "[number]x[number]" (ex. 80x80)
* multiline :"YES" or "NO"
* readonly:
; iup.multiline {...}
multiline = "YES" の iup.text
; iup.toggle {...}
----
; iup.hbox {...}
; iup.vbox {...}
element のグルーピング
; iup.frame {...}
<<tag Java>>
----
! ドキュメント
<<tiddler "Java ドキュメント">>
! 言語仕様
<<tiddler "Java 言語仕様">>
! 標準ライブラリ
<<tiddler "Java 標準ライブラリ">>
! ツール
<<tiddler "Java ツール">>
! ライブラリ
<<tiddler "Java ライブラリ">>
! フレームワーク
<<tiddler "Java フレームワーク">>
; ~FindBugs
* [[FindBugsで片っ端からバグつぶし|http://journal.mycom.co.jp/articles/2006/09/23/findbugs2/index.html]]
* [[FindBugsのフィルタファイルを作る|http://d.hatena.ne.jp/ykhr-kokko/20080713#1215937357]]
; ~JUnit
* [[Javadoc (JUnit API)|http://junit.org/junit/javadoc/4.5/]]
* [[getter/setterメソッドがないprivate属性フィールドの内容をテストする|http://www.alles.or.jp/~torutk/oojava/maneuver/2000/6-3.html#SEC17]]
* [[JUnit 実践講座 - オブジェクトの文字列表現を活用しよう|http://www.morijp.com/masarl/homepage3.nifty.com/masarl/article/junit/to-string.html]]
; Log4j
* [[LayoutLog4J|http://www.techscore.com/tech/ApacheJakarta/Log4J/7.html]]
; Javadoc
こんな感じ
javadoc -sourcepath . -d doc sample -encoding UTF-8
* [[Javadocメモ(Hishidama's Javadoc Memo)|http://www.ne.jp/asahi/hishidama/home/tech/java/javadoc.html]]
; Jad
* クラスファイルを逆コンパイルする
* [[Home Page of Jad - the fast Java decompiler|http://web.archive.org/web/20080214075546/http://www.kpdus.com/jad.html#download]]
;jsonic
* [[jsonicを使って文字配列を取得 - akJとackeyシリーズ 開発日記 | http://d.hatena.ne.jp/xucker/20080122]]
;ドキュメント
* [[Java言語規定|http://www.y-adagio.com/public/standards/tr_javalang/]]
* [[JDK 6 ドキュメント|http://java.sun.com/javase/ja/6/docs/ja/]]
;Javadoc
* [[Java SE 6|http://java.sun.com/javase/ja/6/docs/ja/api/overview-summary.html]]
* [[Java SE 6 (英語)|http://java.sun.com/javase/6/docs/api/overview-summary.html]] こっちだけマイナーバージョンアップしている
* [[Java EE 1.3.1|http://sdc.sun.co.jp/java/docs/j2ee/sdk_1.3/ja/techdocs/api/index.html]]
* [[Java EE 5|http://java.sun.com/javaee/5/docs/api/]]
; こまごました話
* [[ネットワークのプロパティ|http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/net/properties.html]]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; ダウンロード
* [[古いJDKを落とす|http://java.sun.com/products/archive/]]
; Seasar2
* [[Seasar2 入門|http://snowhiro.web.fc2.com/seasar2/seasar2_index.html]]
* [[S2Container|http://s2container.seasar.org/2.4/ja/DIContainer.html]]
* [[Seasar2 - Seasar2|http://s2container.seasar.org/2.4/ja/]]
* [[S2AOP|http://s2container.seasar.org/2.4/ja/aop.html]]
; ほか
* [[アスペクトの利用方法 - アスペクト指向なWiki|http://netail.net/aosdwiki/index.php?%A5%A2%A5%B9%A5%DA%A5%AF%A5%C8%A4%CE%CD%F8%CD%D1%CA%FD%CB%A1]]
; ROME
* [[JavaでRSSフィードを取得(ROME)|http://ueblog.natural-wave.com/2007/12/02/java%E3%81%A7rss%E3%83%95%E3%82%A3%E3%83%BC%E3%83%89%E3%82%92%E5%8F%96%E5%BE%97%EF%BC%88rome%EF%BC%89/]]
; CLI
* [[commons CLI|http://programamemo2.blogspot.com/2007/07/java-jakarta-commons-cli.html]]
; Jericho
* [[Jericho|http://jericho.htmlparser.net/docs/index.html]]
; ~ToStringBuilder
* [[ToStringBuilder (Core Language Utilities (Version 1.0.1)) | http://www.jajakarta.org/commons/lang-1.0.1/ja/withPrimary/org/apache/commons/lang/builder/ToStringBuilder.html ]]
; スプリアスウェイクアップ
* [[waitについてのまとめ|http://blogs.wankuma.com/nagise/archive/2007/08/22/91406.aspx]]
; シリアライズ
* [[Java オブジェクト直列化仕様:1 - システムアーキテクチャー|http://e-class.center.yuge.ac.jp/jdk_docs/ja/platform/serialization/spec/serial-arch.html]]
; Generics
* [[【コラム】ライトニングJava (22) Generic Java(3) - 逆コンパイルで探るGeneric Javaの裏側|http://journal.mycom.co.jp/column/java/022/index.html]]
* [[Javaの理論と実践: Generics のワイルドカードを使いこなす、第 1 回|http://www.ibm.com/developerworks/jp/java/library/j-jtp04298.html]]
;ほか
* [[doubleでの0.05の表し方|http://gihyo.jp/dev/serial/01/java-calculation/0012]]
* [[【コラム】ライトニングJava (17) 拡張for構文(2) - 逆コンパイルで探る拡張for構文の裏側 |http://journal.mycom.co.jp/column/java/017/index.html]]
* [[Java列挙型メモ(Hishidama's Java enum Memo)|http://www.ne.jp/asahi/hishidama/home/tech/java/enum.html]]
* [[実行中のメソッド名 - 教えて!goo|http://oshiete1.goo.ne.jp/qa613476.html]]
; Web Service
* [[Spring Web ServicesによるWebサービスの作成|http://www.okisoft.co.jp/esc/spring/spring_web01.html]]
* [[「Java SE 6完全攻略」第81回 JAX-WS|http://itpro.nikkeibp.co.jp/article/COLUMN/20080801/311972/?ST=techskill]]
* [[HTTPについて|http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/net/http-keepalive.html]]
* [[JSR 224: JavaTM API for XML-Based Web Services (JAX-WS) 2.0 |http://jcp.org/en/jsr/detail?id=224]]
** ''Maintenance Release 2'' jaxws-2_1-mrel2-spec.pdf
** ''Final Release'' jaxws-2_0-fr-spec.pdf
* [[[WebServices] - なんとなくな Developer のメモ|http://d.hatena.ne.jp/fits/searchdiary?word=*[WebServices%5d]]
* [[JAX-WSによるメッセージ指向プログラミング|http://download.boulder.ibm.com/ibmdl/pub/software/dw/jp/websphere/was/was61_soa_ws/fpws_02jaxws.pdf]]
; RMI
* [[FAQ:RMIとオブジェクト直列化|http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/rmi/faq.html]]
; JAXP
* [[DocumentBuilderで日本語のパスを渡すとエラーになる不具合 - lottzの日記|http://d.hatena.ne.jp/lottz/20090207/1234022367]]
; Swing
* [[Swingのスレッド処理を理解する|http://www.atmarkit.co.jp/fjava/rensai3/swing06/swing06_01.html]]
* [[Swingでファイルダイアログを生成する|http://homepage2.nifty.com/ann/Swing/Learning/SwingChooser.htm]]
* [[Visual Editorを使おう|http://allabout.co.jp/internet/java/closeup/CU20070420A/]]
* [[Java Swing Tips|http://terai.xrea.jp/Swing.html]]
; CLI
* [[PushbackReader|http://d.hatena.ne.jp/bowez/searchdiary?word=*[C%2B%2B%5D]]
* Readline的な機能は、~PushbackInputStream, ~PushbackReader 辺りを使えばよさそう
; Proxy
*[[デザインパターン第12回「Proxyパターン」 - Bug Catharsis|http://d.hatena.ne.jp/zecl/20071119/p1]]
*[[ダイナミックプロキシの活用|http://blogs.wankuma.com/kacchan6/archive/2007/04/10/70885.aspx]]
*[[アスペクトを織り込むユーティリティを書いた。 - うなの日記|http://d.hatena.ne.jp/unageanu/20080519/1211190663]]
; ほか
* [[外部プロセス起動|http://www.ne.jp/asahi/hishidama/home/tech/java/process.html#Process_waitFor]]
* [[CSVTokenizer & CSVLine|http://www.wakhok.ac.jp/~tomoharu/Java/csv/]]
* [[「Java SE 6完全攻略」第78回 JAXB その6:ITpro|http://itpro.nikkeibp.co.jp/article/COLUMN/20080704/310147/?ST=develop&P=2]]
* [[Java 再帰的にファイルを検索 | http://sattontanabe.blog86.fc2.com/blog-entry-55.html]]
! 言語仕様
* [[JavaScriptの言語仕様]]
* [[JavaScript: 世界で最も誤解されたプログラミング言語 | http://d.hatena.ne.jp/brazil/20050829/1125321936]]
* [[Core JavaScript 1.5 ガイド - MDC | https://developer.mozilla.org/ja/Core_JavaScript_1.5_Guide ]]
* [[Under Translation of ECMA-262 3rd Edition | http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/ ]]
!ライブラリ
* [[jQuery|jQuery]]
* [[Google Maps API]]
* [[JavaScriptで複雑なURLをパースできるライブラリ「parseUri」:phpspot開発日誌|http://phpspot.org/blog/archives/2007/07/javascripturlpa.html]]
* [[プログラムのコードに色を付けるライブラリ「google-code-prettify」を導入 - シングスブログ | http://blog.thingslabo.com/archives/000004.html]]
!プロトタイプ
* [[関数一発でプロトタイプチェーンに繋げて、オブジェクトをクローンする。 - IT戦記 | http://d.hatena.ne.jp/amachang/20061019/1161201903]]
! ほか
* <<slider tocSlider JavaScriptの実装 JavaScriptの実装>>
* <<slider tocSlider JSON JSON>>
* <<slider tocSlider Aptana Aptana >>
* [[Window Object 1.0 | http://www.w3.org/TR/Window/ ]]
* [[例のあれ(仮題)- JavaScriptでStringBuffer。|http://reiare.net/blog/2010/11/15/javascript-de-stringbuffer/]]
* [[画像を使う - MDN|https://developer.mozilla.org/ja/Canvas_tutorial/Using_images]]
new より、こういう感じの方がしっくりくる。
{{{
var createStringBuffer = (function() {
var constructorFunction= (function() {
var f = function() {
this.buf = []
}
f.prototype = {
append: function(s) {
this.buf.push(s)
},
toString: function() {
return this.buf.join('<br />')
},
clear: function() {
this.buf = []
}
}
return f
})()
return function() {
var o = new constructorFunction()
return o
}
})()
}}}
* [[例のあれ(仮題)- JavaScriptでStringBuffer。|http://reiare.net/blog/2010/11/15/javascript-de-stringbuffer/]]
* _proto_ は非標準
* クロージャの変数束縛のタイミングが微妙
** 親(定義もと)関数が抜けた後に、束縛が行われる
** [[初心者でも使えてプログラマでも困惑するJavaScript - 檜山正幸のキマイラ飼育記 | http://d.hatena.ne.jp/m-hiyama/20050803/1123041897 ]]
!データ型
!!基本型の種類
*数値
*文字列
*論理値
!!型変換
~JavaScriptは、コンテキストに合う型に暗黙的に(可能な限り)変換する。
*頑張り過ぎな気がする。
*「基本型 ⇔ 参照型」の暗黙的な変換も行う。
!分かりにくい仕様
* ブロックスコープがない
** [[プログラマのためのJavaScript (12):不思議な宣言と奇妙なスコープ - 檜山正幸のキマイラ飼育記 | http://d.hatena.ne.jp/m-hiyama/20051209/1134086113 ]]
* 関数はオブジェクト型だが、typeof 演算子では特別扱いされる
** [[11 式 (Expressions) | http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/11_Expressions.html#UnaryExpression ]]
* addEventListener のuseCapture
** [[JavaScript addEventListener() - とみぞーノート|http://wiki.bit-hive.com/tomizoo/pg/JavaScript%20addEventListener%28%29]]
* オブジェクトのdeepコピーができない
* sprintf() に相当するものが無い
* ~ECMAScript 3.0の仕様には「末尾再帰の最適化」は含まれていない
* [[FAQ形式によるJavaScriptの本質がわかる超入門 - 風と宇宙とプログラム|http://d.hatena.ne.jp/mindcat/20091004/1254653934]]
* [[call メソッド : Function オブジェクト : JavaScript リファレンス - Web/DB プログラミング徹底解説|http://keicode.com/jsref/function.call.php]]
* firefox
** [[DOM - MDC | https://developer.mozilla.org/Ja/DOM ]]
* ~SpiderMonkey
** [[Downloading Source Archives - MDC | https://developer.mozilla.org/en/Download_Mozilla_Source_Code ]]
** [[WindowsでSpiderMonkeyをビルドする | endflow.net blog | http://blog.endflow.net/?p=55 ]]
* Google V8
* [[jQuery 1.3.2 日本語リファレンス|http://semooh.jp/jquery/]]
* [[Martin Fowler's Bliki in Japanese - 流れるようなインターフェース|http://capsctrl.que.jp/kdmsnr/wiki/bliki/?FluentInterface]]
; プラグイン
* [[jQueryの日本語の解説サイトと国産のプラグイン集 コリス|http://coliss.com/articles/build-websites/operation/javascript/jquery-for-japanese.html]]
* [[Plugins/Authoring - プラグインを作る | http://docs.jquery.com/Plugins/Authoring]]
* <<slider tocSlider "jQuery Plugins" Plugins>>
* code 色
** http://digital-nb.com/wp/archives/378
; コードを読む
* [[特集:jquery.jsを読み解く gihyo.jp … 技術評論社|http://gihyo.jp/dev/feature/01/jquery]]
* [[jQueryコードリーディング:セレクタを渡した場合の挙動について - $('a') は何を返すか - | http://d.hatena.ne.jp/gnarl/20110226/1298731211]]
----
* [[はじめてのjQuery | http://higashizm.sakura.ne.jp/jquery_first/ ]]
* [[Prototyperに贈るjQuerystからの手紙 | http://tech.kayac.com/data/jquery-to-prototype/index.html ]]
* [[plugin : tech.kayac.com - KAYAC engineers' blog | http://tech.kayac.com/?tag=plugin ]]
* [[目的を持ってAjaxを使うためにjQueryの文法を知ろう (1/3) ─ @IT|http://www.atmarkit.co.jp/fwcr/rensai2/jquery02/01.html]]
* [[ASCII.jp:40分で覚える!jQuery速習講座|http://ascii.jp/elem/000/000/498/498710/index-3.html]]
* [[jQueryを読むために知っておきたい6つの知識 tech.kayac.com - KAYAC engineers' blog|http://tech.kayac.com/archive/jquery-codereading-tips.html]]
! 画像を大きく表示
* [[Fancybox | http://fancybox.net ]]
** これがよいかな
* [[Lightbox | http://lokeshdhakar.com/projects/lightbox2/]]
* [[Slimbox 2 | http://www.digitalia.be/software/slimbox2]]
* [[Magnific Popup | http://dimsemenov.com/plugins/magnific-popup/]]
* [[RSlider | http://www.egrappler.com/full-screen-responsive-jquery-image-and-content-sliderrslider/]] ちょっと毛色が違う
** [[フルスクリーンのコンテンツイメージスライダーのjQueryプラグイン | http://sterfield.co.jp/designer/%E3%83%95%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%80%E3%83%BC.html]]
! 画像(サムネイル)のレイアウト
; Pinterest風
* Wookmark
** [[Pinterest風のレイアウトが出来るWookmark jQuery pluginを使ってみた | http://bosssato.hatenablog.com/entry/20120701/1341121636]]
* [[Masonry | http://masonry.desandro.com]]
** http://naoyu.net/jquery/jquery-masonry-tips/285/
** http://webdrawer.net/javascript/jquerymasonry.html
* [[Nested | http://suprb.com/apps/nested/]]
** これがいいかな..
** http://www.xmisao.com/2013/12/14/jquery-nested.html
* http://vestride.github.io/Shuffle/
* http://isotope.metafizzy.co
* [[Galleriffic | http://www.twospy.com/galleriffic/example-2.html]]
* [[MixItUp | http://mixitup.io/#Demos]]
** [[多機能でスタイリッシュなギャラリーを簡単に実装できる!jQueryプラグイン「MixItUp」|http://liginc.co.jp/web/js/jquery/40478]]
NailThumb
MyThumbnail
! スライドショー
* [[jQuery.popeye 2.0 - an inline lightbox alternative | http://dev.herr-schuessler.de/jquery/popeye/demo.html]]
* [[Nivo Slider - The Most Awesome jQuery Image Slider|http://nivo.dev7studios.com/]]
! ポップアップ
* [[Simpletip - A simple jQuery tooltip plugin|http://craigsworks.com/projects/simpletip/]]
jCaption
http://www.newmediacampaigns.com/blog/jcaption-a-jquery-plugin-for-simple-image-captions
* [[RFC4627|http://www.rfc-editor.org/rfc/rfc4627.txt]]
* [[JSON|http://www.json.org/]]
* [[もう一度、ちゃんとJSON入門 - 檜山正幸のキマイラ飼育記|http://d.hatena.ne.jp/m-hiyama/20080728/1217205390]]
; 探したけど...
JSON のトップ要素は、配列でもよい。 ようである。
* なんで、RFCまで見に行かないと、情報が見つからない??
{{{
[ { "x": 1, "y": 2}, { "x": 10, "y": 20} ]
}}}
ローカルで、 ~XMLHttpRequest を使って JSON を取得した際に、firefox が、 ''構文エラーです。'' と言う
* これは、''~HttpRequest'' なのに file スキームを使う方が悪い
** 情報はさっぱり見つからなかった
** どうも、 JSONテキストを取得して、コールバックが走る前にエラーがでてるっぽい。
** 勝手にXMLだと解釈して、パースしようとしてエラー??
; その他メモ
* コメントは使えない。
** [[XJSON - JSON - 檜山正幸のキマイラ飼育記|http://d.hatena.ne.jp/m-hiyama/20100616/1276648245]]
; 未知数
* 速度 x 3
* 温度
* 圧力
* 乱流運動エネルギー
* 乱流エネルギー散逸量
*...
--
* https://knowledge.autodesk.com/ja/support/cfd/learn-explore/caas/CloudHelp/cloudhelp/2017/JPN/SimCFD-Learning/files/GUID-61C4EB55-362C-48A0-8B22-20F9148D190D-htm.html
<<tag>>
---
基本的には、このサイトをみればよい。
* [[Function Support in KaTeX|https://khan.github.io/KaTeX/docs/supported.html]]
; 注意
* \langle, \rangle のコマンドが間違っている。
** $$\langle \rangle$$
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Tiddlywiki での使い方については、このサイトも役に立つかも。
* https://tiddlywiki.com/plugins/tiddlywiki/katex/
---
! [[基本的な書式|KaTex書式]]
・ 分数: $$\dfrac{2}{3}$$
・ 指数: $$e^{3x}$$
・ sin や log などの関数: $$\sin, \cos, \tan, \log ...$$
・ コマンドが用意されていない関数: $$\mathrm{erf}, \mathrm{grad}, \mathrm{Ker}, \mathrm{Im}, ...$$
・ 太字にする (ベクトル等): $$\mathbf{v}$$
・ ディスプレイスタイル: $$\displaystyle \lim_{x \to \infty} f(x)$$
・ 矢印の上の添え字: $$A \xleftarrow{abc} B \stackrel{c}{\to} C$$
・ 矢印の下の添え字: $$X \underset{under}{\to} Y$$
・ 矢印の上下の添え字: $$X \xrightarrow[under]{over} Y$$
<$reveal type="nomatch" state="$:/state/KaTex_f1" text="show"><$button set="$:/state/KaTex_f1" setTo="show">コードの表示</$button></$reveal>
<$reveal type="match" state="$:/state/KaTex_f1" text="show">
<$button set="$:/state/KaTex_f1" setTo="hide">隠す</$button>
```
・ 分数: $$\dfrac{2}{3}$$
・ 指数: $$e^{3x}$$
・ sin や log などの関数: $$\sin, \cos, \tan, \log ...$$
・ コマンドが用意されていない関数: $$\mathrm{erf}, \mathrm{grad}, \mathrm{Ker}, \mathrm{Im}, ...$$
・ 太字にする (ベクトル等): $$\mathbf{v}$$
・ ディスプレイスタイル: $$\displaystyle \lim_{x \to \infty} f(x)$$
・ 矢印の上の添え字: $$A \xleftarrow{abc} B \stackrel{c}{\to} C$$
・ 矢印の下の添え字: $$X \underset{under}{\to} Y$$
・ 矢印の上下の添え字: $$X \xrightarrow[under]{over} Y$$
```
</$reveal>
! [[複雑な書式|KaTex複雑な書式]]
等号を揃える:
$$\begin{aligned}
a&=b+c \\
d+e&=f
\end{aligned}$$
場合分け:
$$
\tilde{f}(x,y) =
\begin{cases}
f(x,y) \ \ \ \ \ ((x,y) \in D)\\
0 \ \ \ \ \ \ \ \ \ ((x,y) \in I \backslash D )
\end{cases}
$$
行列:
$$ A = \begin{pmatrix}
a_{11} & a_{12} & \ldots & a_{1n} \\
a_{21} & a_{22} & \ldots & a_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{m1} & a_{m2} & \ldots & a_{mn}
\end{pmatrix} $$
$$ \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} \begin{pmatrix} 5 & 6 \\ 7 & 8 \end{pmatrix} =
\begin{pmatrix}
\begin{pmatrix} 1 2 \end{pmatrix} \begin{pmatrix} 5 \\ 7 \end{pmatrix} &
\begin{pmatrix} 1 2 \end{pmatrix} \begin{pmatrix} 6 \\ 8 \end{pmatrix} \\
\begin{pmatrix} 3 4 \end{pmatrix} \begin{pmatrix} 5 \\ 7 \end{pmatrix} &
\begin{pmatrix} 3 4 \end{pmatrix} \begin{pmatrix} 6 \\ 8 \end{pmatrix}
\end{pmatrix} $$
<$reveal type="nomatch" state="$:/state/KaTex_f2" text="show"><$button set="$:/state/KaTex_f2" setTo="show">~KaTex コードの表示</$button></$reveal>
<$reveal type="match" state="$:/state/KaTex_f2" text="show">
<$button set="$:/state/KaTex_f2" setTo="hide">隠す</$button>
```
等号を揃える:
$$\begin{aligned}
a&=b+c \\
d+e&=f
\end{aligned}$$
場合分け:
$$
\tilde{f}(x,y) =
\begin{cases}
f(x,y) \ \ \ \ \ ((x,y) \in D)\\
0 \ \ \ \ \ \ \ \ \ ((x,y) \in I \backslash D )
\end{cases}
$$
行列:
$$ A = \begin{pmatrix}
a_{11} & a_{12} & \ldots & a_{1n} \\
a_{21} & a_{22} & \ldots & a_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{m1} & a_{m2} & \ldots & a_{mn}
\end{pmatrix} $$
$$ \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} \begin{pmatrix} 5 & 6 \\ 7 & 8 \end{pmatrix} =
\begin{pmatrix}
\begin{pmatrix} 1 2 \end{pmatrix} \begin{pmatrix} 5 \\ 7 \end{pmatrix} &
\begin{pmatrix} 1 2 \end{pmatrix} \begin{pmatrix} 6 \\ 8 \end{pmatrix} \\
\begin{pmatrix} 3 4 \end{pmatrix} \begin{pmatrix} 5 \\ 7 \end{pmatrix} &
\begin{pmatrix} 3 4 \end{pmatrix} \begin{pmatrix} 6 \\ 8 \end{pmatrix}
\end{pmatrix} $$
```
</$reveal>
---
! 記号
|記号 | コマンド |h
|$$\times$$ |\times |
|$$\div$$ |\div |
|$$\ \cdot$$ |\cdot |
| ||
|$$\pm$$ |\pm |
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{{数学の記号!!text}}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! 大型演算子
{{数学の大型演算子!!text}}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! [[ギリシャ文字]]
{{ギリシャ文字!!text}}
---
; 関連リンク
<<list-links filter:"[tag[KaTex]]">>
---
---
! その他の参考サイト
* [[TiddlyWiki5で数式を表示したい|https://water2litter.net/bourbon/?p=576]]
* [[Qiitaの数式チートシート - Qiita|http://qiita.com/PlanetMeron/items/63ac58898541cbe81ada]]
* [[LaTeXコマンド - 数学記号(等号、不等号、演算子、集合)|https://medemanabu.net/latex/operators/]]
* http://www.storange.jp/2017/02/katex.html
* http://tera-kun.hatenadiary.com/entry/2017/05/13/004456
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
! 基本的な書式
!! 分数
コマンド : ''\dfrac{2}{3}'' 表示: $$\dfrac{2}{3}$$
- - - - -
!! 指数
コマンド : ''e^{3x}'' 表示: $$e^{3x}$$
- - - - -
!! ディスプレイスタイル (displaystyle)
極限や積分の式などが小さくて見づらい時は、ディスプレイスタイルにする。
コマンド : ''\displaystyle \lim_{x \to \infty} f(x)'' 表示: $$\displaystyle \lim_{x \to \infty} f(x)$$
; 分数の場合
分数については、''\dfrac'' コマンドをだけで ディスプレイ表示ができる。
(''\displaystyle'' コマンドを使う必要が無い)
; ディスプレイスタイル ( \dfrac{3}{4} ):
$$\dfrac{3}{4}$$
; インラインスタイル ( \frac{3}{4} ):
$$\frac{3}{4}$$
- - - - -
!! sin や log などの関数
コマンドが用意されているので、その書式で書く。
''\sin'', ''\cos'', ''\tan'', ''\log'' ...
$$\sin, \cos, \tan, \log$$ ...
- - - - -
!! コマンドが用意されていない関数の場合
\mathrm コマンドを使う。
''\mathrm{erf}, \mathrm{grad}, \mathrm{Ker}, \mathrm{Im}, ...''
$$\mathrm{erf}, \mathrm{grad}, \mathrm{Ker}, \mathrm{Im}, ...$$
- - - - -
!! 矢印の上の添え字
Tiddlywiki 上だと、どういう訳か \overleftarrow などのコマンドを認識してくれない。どうしてもの時は、 ''\stackrel'' を使えば表現可能 (\overset もダメっぽい)。
$$A \stackrel{z}{\to} B$$
$$A \overset{z}{\to} B$$
$$\overleftarrow{a}$$
! 等号を揃える
$$
\begin{aligned}
a&=b+c \\
d+e&=f
\end{aligned}
$$
```
\begin{aligned}
a&=b+c \\
d+e&=f
\end{aligned}
```
! 場合分け
$$
\tilde{f}(x,y) =
\begin{cases}
f(x,y) \ \ \ \ \ ((x,y) \in D)\\
0 \ \ \ \ \ \ \ \ \ ((x,y) \in I \backslash D )
\end{cases}
$$
```
$$
\tilde{f}(x,y) =
\begin{cases}
f(x,y) \ \ \ \ \ ((x,y) \in D)\\
0 \ \ \ \ \ \ \ \ \ ((x,y) \in I \backslash D )
\end{cases}
$$
```
---
! 行列
$$ A = \begin{pmatrix}
a_{11} & a_{12} & \ldots & a_{1n} \\
a_{21} & a_{22} & \ldots & a_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{m1} & a_{m2} & \ldots & a_{mn}
\end{pmatrix} $$
```
$$ A = \begin{pmatrix}
a_{11} & a_{12} & \ldots & a_{1n} \\
a_{21} & a_{22} & \ldots & a_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{m1} & a_{m2} & \ldots & a_{mn}
\end{pmatrix} $$
```
入れ子にすることも可能。
$$ \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}
\begin{pmatrix} 5 & 6 \\ 7 & 8 \end{pmatrix}
=
\begin{pmatrix}
\begin{pmatrix} 1 2 \end{pmatrix} \begin{pmatrix} 5 \\ 7 \end{pmatrix} &
\begin{pmatrix} 1 2 \end{pmatrix} \begin{pmatrix} 6 \\ 8 \end{pmatrix} \\
\begin{pmatrix} 3 4 \end{pmatrix} \begin{pmatrix} 5 \\ 7 \end{pmatrix} &
\begin{pmatrix} 3 4 \end{pmatrix} \begin{pmatrix} 6 \\ 8 \end{pmatrix}
\end{pmatrix} $$
```
$$ \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}
\begin{pmatrix} 5 & 6 \\ 7 & 8 \end{pmatrix}
=
\begin{pmatrix}
\begin{pmatrix} 1 2 \end{pmatrix} \begin{pmatrix} 5 \\ 7 \end{pmatrix} &
\begin{pmatrix} 1 2 \end{pmatrix} \begin{pmatrix} 6 \\ 8 \end{pmatrix} \\
\begin{pmatrix} 3 4 \end{pmatrix} \begin{pmatrix} 5 \\ 7 \end{pmatrix} &
\begin{pmatrix} 3 4 \end{pmatrix} \begin{pmatrix} 6 \\ 8 \end{pmatrix}
\end{pmatrix} $$
```
---
! ディスプレイスタイル (\displaystyle)
極限や積分の式などが小さくて見づらい時は、ディスプレイスタイルにしてやればよい。
インラインでディスプレイ数式と同じように出力したい時は、 ''\displaystyle'' コマンドを使用する。
!! 具体例
; ディスプレイスタイル:
$$\displaystyle \lim_{x \to \infty} f(x)$$
```
$$\displaystyle \lim_{x \to \infty} f(x)$$
```
; インラインスタイル:
$$\lim_{x \to \infty} f(x)$$
```
$$\lim_{x \to \infty} f(x)$$
```
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
! 文献からの引用
<<<
Kolmogorov ^^28)^^ は、彼の理論の大前提として、乱流の エネルギー減衰率、
:$$\displaystyle \epsilon = \nu \sum_{i,j=1}^3 \langle \left( \dfrac{\partial u_i (x, t)}{\partial x_j} \right)^2 \rangle$$
が、非粘性の極限において 0 でない値をとること、
:$$\epsilon(x,t) > 0, \ \nu \to 0$$
を要請した。この関係式は、パラメター ε(x,t)/ν が非粘性発散を引き起こすことを意味する。このことは、数学的には証明されていないが、多くの数値計算例によって支持されている。
...
高 Reynolds 数の乱流においては、大規模すなわち小波数の「エネルギー保有領域」と、小規模すなわち大波 数の「粘性散逸領域」との間に、中間波数の「準平衡領 域」が現れ、そこでは、エネルギー保有領域からのεに 比例する「エネルギー供給」と、粘性散逸領域へのν に 比例する「エネルギー損失」が釣り合った定常状態が実 現すると考えられる。この定常状態は、ε とν の二つの パラメターのみに依存するから、エネルギー · スペクト ルE(k, t) は、次元解析によって次の形に表わされる。
さらに高いReynolds 数の場合を考えると、E(k, t) は粘性 ν に依らなくなるから、F ∼ ν- 5/4 となり、
と決定される。ここに、C は無次元定数を表わす。
<<<
[[第2章 乱流の統計理論 - ながれ|http://www.nagare.or.jp/download/noauth.html?d=33-1rensai.pdf&dir=88]]
<<<
この発想を数式的に表現するには、波数空間におけるエネルギー · スペクトル方程式 (2.21) を、波数 0 から、 大規模渦と小規模渦の中間のある波数k> 0 までにわ たって積分した、次のような方程式を考えるのが便利で ある。
<<<
----
<<<
''局所一様等方性の仮説''
十分高Reynolds数乱流の,境界などから十分離れた十分小さい領域において,速度差
$$w(y,s) = u(x_0 + y, t_0 + s) - u(x_0, t_0)$$
の統計は一様等方である.
''第1仮説''
一様等方性乱流において,その統計は $$\nu$$と $$\epsilon$$ によって決定される.
''第2仮説''
$$|y|, |y - y'| >> \eta$$ なら,統計は $$\nu$$ に依らず$$\epsilon$$ のみで決定される.
Kolmogorov長さスケール: $$\eta = \left( \dfrac{\nu^3}{\epsilon} \right)^{1/4}$$
<<<
http://www.u.tsukuba.ac.jp/~yoshida.kyo.fu/presentation/elecom050223.pdf
* http://www.jspf.or.jp/Journal/PDF_JSPF/jspf2009_11/jspf2009_11-783.pdf
---
http://www.bakker.org/dartmouth06/engs150/09-kolm.pdf
http://fluid.mech.kogakuin.ac.jp/~iida/Lectures/master/measure10.pdf
http://www.scaithebathhouse.com/ja/
* [[ミュージアムデータベース|美術館・アート情報 artscape | http://artscape.jp/mdb/index.html"]]
* [[ニュース:CINRA.NET | http://www.cinra.net/news/index_4.php"]]
* [[3331 Arts Chiyoda:アーツ千代田 3331:3331 ARTS CYD | http://www.3331.jp/"]]
! 順接
* and
* so
* therefore
* thus
* for this reason
* this (/it) means
! 逆接・対比
* but / yet
* however (/ nevertheless)
* although / though
* while / whereas
* on the other hand
* in contrast [to X] / by contrast
* in spite of / despite
* or
! 順序・順番
* (and) then
* before / after / once
* firstly / first of all
* next / secondly
* finally
* eventually
* another / other / remaining X (きちんと順序を説明するには不向き)
! 追加・補足
* in addition [to X]
* additionally / furthermore / besides
* also (文中の副詞として)
* another/other X is ...
* or
* as well / too
! 理由
* since / as / because
* because of / due to / owing to
* thanks to
* the reason [why S V] / the cause
* according to
* considering X [ / S V ...]
! 例
* for example / for instance
* take X for instance
* X is a good example
* such as / like
! つまり・言い換えると
* in other words
* in short
* to sum up
* in a nutshell (口語)
! ~に関しては
* about / regarding
* in terms of / as for
* with respect to
! まとめ・結論
* in conclusion
* to conclude
* to sum up
----
[[翻訳コラム 35: 「したがって」は therefore だけじゃない|http://www.kunishiro.sakura.ne.jp/column/30/c35.shtml]]
[[Documents Library|http://www.pinkdragon.net/doc_lib/]]
; コマンド
* <<slider tocSlider 時刻の設定 時刻の設定>>
* <<slider tocSlider findコマンド findコマンド>>
* <<slider tocSlider 重複行の表示 重複行の表示>>
* <<slider tocSlider 重複行の削除 重複行の削除>>
* [[sed |http://www.ab.auone-net.jp/~for_test/pc/sed_01.html]]
* [[diffで標準入力を比較する|http://x68000.q-e-d.net/~68user/unix/pickup?diff]]
* [[.rhostsについて|http://x68000.q-e-d.net/~68user/unix/pickup?~%2F.rhosts]]
* [[Linux の nice / renice コマンドを覚えた :: Drk7jp|http://www.drk7.jp/MT/archives/001333.html]]
* [[UNIX の設定ファイル|http://uguisu.skr.jp/Windows/setting.html]]
* [[updatedb をチューニング。locate コマンド|http://www.drk7.jp/MT/archives/000912.html]]
* [[pgrep, pkill を使用してプロセスを殺す - 技術メモ帳|http://d.hatena.ne.jp/lurker/20061102/1162427170]]
; シェルスクリプト
* [[makimono|http://www.makimono.jp/shell/]]
* [[Bシェルスクリプトのすすめ|http://chaichan.web.infoseek.co.jp/src/BSH.htm]]
* [[Shell: script|http://homepage1.nifty.com/~tetsu/linux/cmd/sh.html]]
* [[シェルスクリプトの基礎 | http://www.syns.net/10/]]
; ターミナル
* [[ANSI/VT100 Terminal Control|http://www.termsys.demon.co.uk/vtansi.htm]]
* [[mltermを使う|http://www.seeds-man.com/%7Enari/v2/people/nari/comp/linux/mlterm1.shtml]]
* [[mlterm|http://www12.atwiki.jp/linux2ch/pages/194.html]]
* [[Linux Backspace/Delete mini-HOWTO|http://www.linux.or.jp/JF/JFdocs/BackspaceDelete/index.html]]
; Vim
* [[Vimのキーバインド|http://gigazine.jp/img/2006/03/31/vi_vim_graphical_cheat_sheet/vi-vim-cheat-sheet.gif]]
* [[vimで効率的にコードを書くための小技 - bonar note|http://d.hatena.ne.jp/bonar/20070415/1176651778]]
* [[vimの使い方 - 備忘録(チラシの裏) | http://wiki.livedoor.jp/yoynizi9691/d/vim%A4%CE%BB%C8%A4%A4%CA%FD# ]]
; Emacs
* [[GNU Emacsマニュアル|http://www.bookshelf.jp/texi/emacs-man/21-3/jp/emacs.html]]
* [[GNU Emacs Lispリファレンス|http://www.geocities.co.jp/SiliconValley-Bay/9285/ELISP-JA/elisp.html]]
* [[Delete and BackSpace in GNU Emacs 21.3.50|http://homepage.mac.com/nand/macosx/emacs_delete.html]]
; C言語
* [[pthread_*|http://www.saiin.net/~silphire/pthread/pthread.html]]
* [[Programming UNIX Sockets in C|http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja.html]]
; Samba
* [[SAMBAの小技|http://tomo.ac/goodstream/linux/samba/smbtips.htm]]
* [[Sambaサーバに名前でアクセスできない問題解決 - ヒビノキロク|http://d.hatena.ne.jp/nozom/20070526/1180191496]]
; ~SELinux
* [[ [Fedora core] vsFTPdの設定|http://vertex.air-nifty.com/blog/2006/09/fedora_core_vsf_20b9.html]]
* [[onLisp|http://www.komaba.utmc.or.jp/~flatline/]]
* [[iota と tabulate|http://www.geocities.jp/m_hiroi/clisp/clispb09.html]]
* [[Scheme:マクロの危険|http://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3a%a5%de%a5%af%a5%ed%a4%ce%b4%ed%b8%b1&l=jp]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
* [[ちょっと変わったLisp入門 | http://www.atmarkit.co.jp/fcoding/articles/gauche/01/gauche01e.html ]]
* [[プログラミング言語の進化を追え: 第4回 大人のためのブラックボックス読解講座 | http://www.ibm.com/developerworks/jp/opensource/library/itm-progevo4/ ]]
* [[なぜ関数プログラミングは重要か | http://www.sampou.org/haskell/article/whyfp.html ]]
* [[[Common Lisp]JavaやC++、etcな人向けに説明するCommon Lispの利点 | http://d.hatena.ne.jp/t2ru/20080912/1221250077 ]]
* [[「Lisp脳」の謎に迫る - Schemeプログラマの発想|http://karetta.jp/book-node/gauche-hacks/023107]]
** ~JavaScript や Lua でもこういう時があるけど...
* [[Gaucheクックブック|http://d.hatena.ne.jp/rui314/]]
! xyzzy
<<tiddler "xyzzy-Lisp">>
! Emacs
<<tiddler "Emacs Lisp">>
! Scheme
<<tiddler "Scheme">>
! LMTD (logarithmic mean temperature difference)
LMTD は、次のように定義される。
$$\Delta T_{LM} = \dfrac{\Delta T_{in} - \Delta T_{out}}{\ln (\Delta T_{in}) - \ln (\Delta T_{out})} \ \ \ \ \ $$ 【式1】
* $$\Delta T_{in} = T_{A,in} - T_{B,in}$$
* $$\Delta T_{out} = T_{A,out} - T_{B,out}$$
そして、これを使うと、長さ L の区間における、二本の管(管A, 管B)の間での熱交換を、表すことができる。 $$\dot{Q}_{A \to B}$$ を管Aから管Bへの熱の移動速度 (J/sec) とすると、$$\dot{Q}_{A \to B}$$ は次のように表される。
$$\dot{Q}_{A \to B} = h_{overall} A_{wall} \Delta T_{LM} \ \ \ \ \ $$ 【式2】
円管の場合には、【式2】は次のように書ける。
$$\dot{Q}_{A \to B} = h_{overall} (\pi D L) \Delta T_{LM} \ \ \ \ \ $$ 【式3】
導出方法については、下の方に書いた。
!! 仮定する条件
* 流体の比熱が一定
* 熱通過率が一定
* 定常状態
* 運動エネルギーの変化を無視できる
* ポテンシャルエネルギーの変化を無視できる
---
! 外界の温度が一定な場合
基本的には、LMTD の考え方は二本の管の間での熱交換で用いるものであるが、外界の温度が一定な状況における(一本の管の) 流れ方向の温度プロファイルの計算にも用いることができる。
$$T_{x} = (T_{in} - T_{amb}) \exp \left( - \dfrac{h \pi D}{\dot{m} c_{p}} x \right) + T_{amb} = (T_{in} - T_{amb}) \exp \left( - \dfrac{4 h}{\rho v c_{p} D} x \right) + T_{amb} \ \ \ \ \ $$ 【式4】
!! 導出
この場合には、片方の管の温度が一定とみなしてやればよい。
$$T_{amb} = T_{B,in} = T_{B,out}$$
とすると、【式1】は次のように書ける。
$$\Delta T_{LM} = \dfrac{\Delta T_{in} - \Delta T_{out}}{\ln (\Delta T_{in}) - \ln (\Delta T_{out})} = \dfrac{T_{A,in} - T_{A,out}}{\ln \left( \dfrac{T_{A,in} - T_{amb}}{T_{A,out} - T_{amb}} \right) } = \dfrac{T_{A,out} - T_{A,in}}{\ln \left( \dfrac{T_{A,out} - T_{amb}}{T_{A,in} - T_{amb}} \right) } \ \ \ \ \ $$ 【式5】
また、ある区間で管内を流れる流体が放出する熱の移動速度は、次のようにも表せる。
$$\dot{Q} = \dot{m_A} c_{p,A} (T_{A,in} - T_{A,out})$$
この式と【式3】,【式5】から、
$$ h (\pi D L) \dfrac{T_{A,out} - T_{A,in}}{\ln \left( \dfrac{T_{A,out} - T_{amb}}{T_{A,in} - T_{amb}} \right) } = \dot{m_A} c_{p,A} (T_{A,in} - T_{A,out})$$
$$\ln \left( \dfrac{T_{A,out} - T_{amb}}{T_{A,in} - T_{amb}} \right) = - \dfrac{h \pi D L}{\dot{m_A} c_{p,A}} $$
という関係が得られる。
ここで、inlet から x だけ離れた地点の温度を T,,x,, とし、(管が実質1本なので) A を省略すると、
$$\ln \left( \dfrac{T_{x} - T_{amb}}{T_{in} - T_{amb}} \right) = - \dfrac{h \pi D x}{\dot{m} c_{p}} $$
と書き替えられる。そしてこの式を整理すれば、
$$T_{x} = (T_{in} - T_{amb}) \exp \left( - \dfrac{h \pi D}{\dot{m} c_{p}} x \right) + T_{amb}$$
【式4】が得られる。
----
! LMTDの導出
まず、二本の管内の流体の温度差が一定とみなせるくらいの短い領域について考える。この場合、単位長さ辺りの熱伝達率 ($$\dot{q}_{A \to B}$$) は、2つの形式で表すことができる。
$$\dot{q}_{A \to B} = - \dot{m_A} c_{p,A} \dfrac{dT_A}{dx} = h_A a_A (T_A - T_B) \ \ \ $$ 【式6-1】
$$\dot{q}_{A \to B} = \dot{m_B} c_{p,B} \dfrac{dT_B}{dx} = h_B a_B (T_A - T_B) \ \ \ $$ 【式6-2】
なお、A から B への熱の移動を正とする。また、2つの式の関係から $$h_A a_A = h_B a_B $$ であることが分かる。各シンボルの意味は、以下のとおり。
* $$\dot{m}$$ : 質量流量 ( = ρ,,A,, v,,A,, (π D^^2^^/4) )
* c,,p,, : 定圧比熱
* h : 熱伝達率
* a,,A,,, a,,B,, : 単位長さ辺りの管の表面積
これらの式を $$\dfrac{dT}{dx}$$ について整理すると、
$$\dfrac{dT_A}{dx} = - \dfrac{\dot{q}_{A \to B}}{\dot{m_A} c_{p,A}} = - \dfrac{h_A a_A}{\dot{m_A} c_{p,A}} (T_A - T_B)$$
$$\dfrac{dT_B}{dx} = \dfrac{\dot{q}_{A \to B}}{\dot{m_B} c_{p,B}} = \dfrac{h_B a_B}{\dot{m_B} c_{p,B}} (T_A - T_B)$$
となる。ここで、$$\Delta T = T_A - T_B$$ とし、2つの式の差を取ると、
$$\dfrac{d \Delta T}{dx} = \dfrac{dT_A}{dx} - \dfrac{dT_B}{dx} = - \left( \dfrac{h_A a_A}{\dot{m_A} c_{p,A}} + \dfrac{h_B a_B}{\dot{m_B} c_{p,B}} \right) \Delta T $$
という関係が得られ、これを整理すると、
$$\dfrac{d \Delta T}{\Delta T} = - \left(\dfrac{h_A a_A}{\dot{m_A} c_{p,A}} + \dfrac{h_B a_B}{\dot{m_B} c_{p,B}} \right) dx $$
となる。これを x,,in,, から x,,out,, までの区間で積分する。
$$\displaystyle \int_{\Delta T_{in}}^{\Delta T_{out}} \dfrac{d \Delta T}{\Delta T} = \int_{x_{in}}^{x_{out}} - \left(\dfrac{h_A a_A}{\dot{m_A} c_{p,A}} + \dfrac{h_B a_B}{\dot{m_B} c_{p,B}} \right) dx$$
$$\displaystyle \ln |\Delta T_{out}| - \ln |\Delta T_{in}| = - \left(\dfrac{h_A a_A}{\dot{m_A} c_{p,A}} + \dfrac{h_B a_B}{\dot{m_B} c_{p,B}} \right) (x_{out} - x_{in})$$
さらに、 $$h_A a_A = h_B a_B $$ なので、この式は、次のように変形できる。
$$\displaystyle \ln |\Delta T_{out}| - \ln |\Delta T_{in}| = - \left(\dfrac{1}{\dot{m_A} c_{p,A}} + \dfrac{1}{\dot{m_B} c_{p,B}} \right) h_A a_A (x_{out} - x_{in}) \ \ \ $$【式7】
ここで、区間 [x,,in,,, x,,out,,] におけるトータルの熱伝達率を $$\dot{Q}_{A \to B}$$ とすると、【式6】の関係を用いて、次のように表せる。
$$\displaystyle \dot{Q}_{A \to B} = \int_{x_{in}}^{x_{out}} \dot{q}_{A \to B} = - \dot{m_A} c_{p,A} (T_{A,out} - T_{A,in}) = \dot{m_B} c_{p,B} (T_{B,out} - T_{B,in}) $$
よって、【式7】は次のように変形できる。
$$\displaystyle \ln |\Delta T_{out}| - \ln |\Delta T_{in}| = \left( - (T_{A,out} - T_{A,in}) + (T_{B,out} - T_{B,in}) \right) \dfrac{h_A a_A (x_{out} - x_{in})}{\dot{Q}_{A \to B}} $$
$$\displaystyle \dot{Q}_{A \to B} = \dfrac{\Delta T_{in} - \Delta T_{out}}{\ln |\Delta T_{out}| - \ln |\Delta T_{in}|} h_A a_A (x_{out} - x_{in})$$
----
* http://shimaphoto03.com/science/heat-trans/
* https://web.mit.edu/16.unified/www/FALL/thermodynamics/notes/node131.html
Equivalent Length と似たアプローチであるが、 Loss Coefficient を
$$ K = f_D \dfrac{L}{D} $$
と定義し、Darcy Weisbach Equation に代入する方法もある。この場合は、
$$ \Delta P = \left( f_D \dfrac{L}{D} \right) \dfrac{\rho v^2}{2} = K \dfrac{\rho v^2}{2} = K \dfrac{\rho}{2} \left( \dfrac{Q}{A} \right)^2 $$
となる $$(v = \dfrac{Q}{A})$$。
! Law of the unconscious statistician (LOTUS)
!! 離散型確率変数の場合
$$g(x)$$ を全単射な関数とすると、以下が成り立つ。
$$\ \ \ \ \ \ \displaystyle E[g(X)] = \sum_{x_k \in R_x} g(x_k) P_X (x_k)$$
!! 連続型確率変数の場合
$$g(x)$$ を微分可能で全単射な関数とすると、以下が成り立つ。
$$\ \ \ \ \ \ \displaystyle E[g(X)] = \int_{-\infty}^{\infty} g(x) f_X (x) dx$$
- - - - -
!! 導出
$$y = g(x)$$ と表すとすると $$x = g^{-1}(y)$$ である。
離散型確率変数の場合、これを用いてYの確率質量関数 を表すと、
:$$\begin{aligned} P_Y(y) &= P(Y = y) \\ &= P(g(X) = g(x)) \\ &= P(g^{-1}\{g(X)\} = g^{-1}\{g(x)\}) \\ &= P(X=x) = P_X(x) \end{aligned}$$
であることが分かる。よって、
$$\ \ \ \ \ \ \displaystyle E[g(X)] = E[Y] = \sum_{y_k \in R_y} y_k P_Y(y_k) = \sum_{x_k \in R_x} g(x_k) P_X (x_k) $$
となる。
-
微分の逆関数の公式から、
: $$\dfrac{dx}{dy} = \dfrac{1}{g'(g^{-1}(y))} $$
であり、
$$F_X(g^{-1}(y))$$
; 開発に必要なもの
* [[Lua: download | http://www.lua.org/download.html]]
! ドキュメント
<<tiddler "Lua ドキュメント">>
! ライブラリ
<<tiddler "Lua ライブラリ">>
! メモ
<<tiddler "Lua メモ">>
```lua
for line in io.stdin:lines() do
-- 1行ずつ処理する (lineには改行コードがついていない)
...
end
```
* [[Luaに興味が出てきたのでコンパイルしてみる - サタケ家|http://d.hatena.ne.jp/satakesatake/20090304/1236156560]]
* [[IUP (and CD, and IM, etc)|http://angg.twu.net/iup.html]]
* [[Microsoft Visual C++]]
----
MD を MT にすれば、単体動作可能
{{{
@rem Script to build Lua under "Visual Studio .NET Command Prompt".
@rem Do not run from this directory; run it from the toplevel: etc\luavs.bat .
@rem It creates lua51.dll, lua51.lib, lua.exe, and luac.exe in src.
@rem (contributed by David Manura and Mike Pall)
@setlocal
@set MYCOMPILE=cl /nologo /MT /O2 /W3 /c /D_CRT_SECURE_NO_DEPRECATE
@set MYLINK=link /nologo
@set MYMT=mt /nologo
cd src
@rem %MYCOMPILE% /DLUA_BUILD_AS_DLL l*.c
%MYCOMPILE% l*.c
del lua.obj luac.obj
lib /out:lua51.lib l*.obj
%MYCOMPILE% lua.c
%MYLINK% /out:lua.exe lua.obj lua51.lib
@rem %MYMT% -manifest _lua.exe.manifest -outputresource:lua.exe
%MYCOMPILE% l*.c print.c
del lua.obj linit.obj lbaselib.obj ldblib.obj liolib.obj lmathlib.obj^
loslib.obj ltablib.obj lstrlib.obj loadlib.obj
%MYLINK% /out:luac.exe *.obj
del *.obj *.manifest
cd ..
}}}
;言語仕様
* [[Lua 5.1 Reference Manual - contents | http://www.lua.org/manual/5.1/ ]]
* [[Lua 5.1 リファレンスマニュアル | http://sugarpot.sakura.ne.jp/yuno/html/lua51_manual_ja.html ]]
* [[Programming in Lua (first edition) | http://www.lua.org/pil/index.html ]]
; API
* [[Lua言語 関数リファレンス | http://f49.aaa.livedoor.jp/~lunacied/lua/lua_function.xml ]]
* [[関数 - Lua組み込みWiki | http://tgws.fromc.jp/wiki/lua/index.php?%B4%D8%BF%F4 ]]
* [[スタック(C言語 ⇔ Lua)について | http://tomotech.blog31.fc2.com/blog-entry-13.html ]]
* module + class
** Java風コンストラクタ
** 継承
* 読み取り専用テーブル
; 言語仕様
* [[三項演算子 | http://hammm.blog21.fc2.com/blog-entry-74.html ]]
; C言語とのやりとり
* [[スタックについて | http://tomotech.blog31.fc2.com/blog-category-4.html ]]
* [[LuaからC言語の関数を呼び出す | http://d.hatena.ne.jp/smeghead/20080817/sleep ]]
; クラス
* [[クラスもどきを作る|http://www.tom.sfc.keio.ac.jp/~fjedi/wiki/index.php?Lua#ic2f320c]]
* [[LuaでOOP | http://akazero.hp.infoseek.co.jp/OOP.html ]]
; 入門サイト
* [[Lua を使ってみよう | http://www.geocities.jp/sanpontze/lua.html]]
* [[Lua - 自分用メモとか | http://www.tom.sfc.keio.ac.jp/~fjedi/wiki/index.php?Lua]]
; パフォーマンス
* [[Lua Performance Tips |http://d.hatena.ne.jp/KZR/20090712/p1]]
* [[lua-users wiki: Ordered Table | http://lua-users.org/wiki/OrderedTable ]]
* [[Lua 1行ずつ読み込む処理]]
; 使ってみた
* [[LuaLogging|http://www.keplerproject.org/lualogging/]]
* [[LuaDoc|http://luadoc.luaforge.net/]]
** ~LuaFileSystem
** ~LuaLogging
* [[IUP (and CD, and IM, etc)|http://angg.twu.net/iup.html]]
; 未使用
* [[LuaDate|http://luaforge.net/projects/date/]]
** 日付・時刻 のライブラリ
* [[RemDebug|http://www.keplerproject.org/remdebug/]]
** ~LuaFileSystem と ~LuaSocket が必要
* [[LuaFileSystem|http://www.keplerproject.org/luafilesystem/index.html]]
* [[LuaSocket|http://luaforge.net/projects/luasocket/]]
* [[LuaSQL | http://www.keplerproject.org/luasql/ ]]
* [[bitlib |http://luaforge.net/projects/bitlib/]]
* [[stdlib |http://luaforge.net/projects/stdlib/]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
* [[Lua for Windows に含まれるライブラリ | http://nyaos.org/d/index.cgi?p=(2009.03.06) ]]
```lua
-- from the end backwards
function _ripairs(t)
local function ripairs_it(t,i)
i=i-1
local v=t[i]
if v==nil then return v end
return i,v
end
return ripairs_it, t, #t+1
end
--
ripairs = (function()
local function ripairs_it(_t, i)
i = i - 1
local v = _t[i]
if v == nil then return v end
return i, v
end
return function(t)
return ripairs_it, t, #t+1
end
end)()
t1 = {'a', 'b', 'd', 'e', false}
for k,v in ripairs(t1) do print(k,v) end
```
* [[iPad、iPhone、iPod touchの写真や動画をMacに取り込む方法 | http://www.crossroad.gr.jp/lab/view/64]]
** 「イメージキャプチャ」を使うのが手軽
; アンチウィルス
* ClamXav
* Sophos Anti-Virus
; 画像管理
* [[Lyn | http://www.lynapp.com/index.html]]
* PictPicker
* 絵箱
; Main
* [[難しい算数]]
* [[熱力学]]
* [[流体力学]]
* [[R言語]]
* [[伝熱工学]]
- - - - - - - - - - - - - - - - - - - -
; Info
* KaTex
* [[更新順]]
* [[TW5 メモ]]
* StartPage
; Memo
* [[英語]]
* [[英文法]]
- - - - - - - - - -
; Other
* [[しようかな]]
* [[気になったもの]]
* [[IELTS]]
* [[MainMenu.old.bkup]]
* [[しようかな]]
* [[気になったもの]]
----
* [[出かける]]
* [[調べる]]
* [[お気にいり|お気に入りページ]]
* [[メモ]]
** [[URLs]]
** [[ツール]]
** [[本]]
** [[面白かったページ|ちょっと面白かったページ]]
** [[見たページリスト]]
----
* [[英語]]
** [[IELTS]]
** [[英文法]]
----
* [[仕事]]
** [[R言語]]
** [[流体]]
----
* [[絵]]
* [[記憶の隅]]
* [[サイトデザイン]]
* [[コンピュータ言語]]
[[更新順]]
[[$:/themes/tiddlywiki/vanilla/themetweaks]]
小さなプログラムを作成する場合用
{{{
CC = gcc
RM = rm -f
CFLAGS = -g -Wall
LDLIBS =
INCLUDES =
TARGET = sample
SRC = src1.c src2.c src.3
OBJ = $(SRC:%.c=%.o)
all: $(TARGET)
$(TARGET): $(OBJ)
$(CC) $(CFLAGS) -o $@ $^ $(LDLIBS)
.c.o:
$(CC) $(CFLAGS) $(INCLUDES) -o $@ -c $<
clean:
$(RM) $(TARGET) $(OBJ)
}}}
----
release, debug ビルド (なんかいまいちだが、とりあえず)
{{{
# GNU Make Only
MAKE = gmake
CC = gcc
AR = ar
RM = rm -f
DEBUG_OBJ_DIR = debug_obj
RELEASE_OBJ_DIR = release_obj
ifdef DEBUG_FLAG
OBJ_DIR = $(DEBUG_OBJ_DIR)
CFLAGS = -g -Wall -D_DEBUG
LDLIBS =
INCLUDES =
else
OBJ_DIR = $(RELEASE_OBJ_DIR)
CFLAGS = -O2 -Wall
LDLIBS =
INCLUDES =
endif
# --------------------------------------------
TARGET = sample
SRC = src1.c src2.c src.3
OBJ = $(SRC:%.c=$(OBJ_DIR)/%.o)
CFLAGS := $(CFLAGS)
LDLIBS := $(LDLIBS) $(LIB)
INCLUDES :=
$(OBJ_DIR)/%.o: %.c
$(CC) $(CFLAGS) $(INCLUDES) -o $@ -c $<
all: debug
release:
$(MAKE) build
debug:
$(MAKE) build DEBUG_FLAG=1
build: $(OBJ_DIR) $(OBJ_DIR)/$(TARGET)
$(OBJ_DIR):
mkdir $@
$(OBJ_DIR)/$(TARGET): $(LIB) $(OBJ)
$(CC) $(CFLAGS) -o $@ $(OBJ) $(LDLIBS)
clean:
$(RM) -r $(RELEASE_OBJ_DIR) $(DEBUG_OBJ_DIR)
}}}
Mass Transfer from a solid sphere (no-slip at the interface)
$$Sh = Sh _0 + C Re^m Sc^{1/3} $$
* $$Sh$$: [[Sherwood number|無次元数]]
* Re: Reynolds number
* $$Sh_0$$: Sherwood number due only to natural convection and not forced convection
* C and m are correlating constants.
<<list-links filter:"[tag[Mathematics]]">>
* [[Web Equation | http://webdemo.visionobjects.com/equation.html]]
** 手書きで書いた数式を認識してくれる
{{{
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
<title>MathML Sample</title>
</head>
<body>
Firefox じゃないと、表示できない。 <br /><br />
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mstyle displaystyle="true">
<mi> P </mi>
<mi> V </mi>
<mo> = </mo>
<mi> n </mi>
<mi> R </mi>
<mi> T </mi>
</mstyle>
</math>
<br />
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mstyle displaystyle="true">
<mi> n </mi>
<mo> = </mo>
<mfrac>
<mrow>
<mi> P </mi>
<mi> V </mi>
</mrow>
<mrow>
<mi> R </mi>
<mi> T </mi>
</mrow>
</mfrac>
</mstyle>
</math>
</body>
</html>
}}}
! 分子の速度の確率密度関数
!! (速度の) 各成分の確率密度関数
''分子の速度'' (u) の x 成分 を $$v_x$$ とすると、$$v_x$$ の確率密度関数 $$p(v_x)$$ は、
$$p(v_x) = \sqrt{\dfrac{m}{2\pi k_B T}} \exp \left(- \dfrac{m v_x^2}{2k_B T} \right)$$
と表せる。なお、''空間の対称性'' を前提条件としているので、$$v_y, v_z$$ (速度の y 成分, z成分) も同様に表せる。
* m: 分子の質量
* $$k_B$$: ボルツマン定数
* T: 温度
!! 速さの確率密度関数
速度の各成分の密度分布は独立なので、速度の確率密度関数($$p(u)$$) は、次のようになる。
$$P(u) = p(v_x)p(v_y)p(v_z) = \left( \dfrac{m}{2\pi k_B T} \right)^{2/3} \exp \left(- \dfrac{(m v_x^2 + m v_y^2 + m v_z^2)}{2k_B T} \right)$$
となる。よって、''分子の速さ'' (v) の確率密度関数($$g(v)$$) は、次のようになる。
$$p(v) = 4\pi \left( \dfrac{m}{2\pi k_B T} \right)^{2/3} v^2 \exp \left(- \dfrac{m v^2}{2k_B T} \right)$$
---
! 導かれる速度
マクスウェル分布からは3種類の速度が導出される。
!!最大確率速度 (The most probable speed)
マクスウェル分布の最頻値であり、グラフのピークを求めれば良いので、$$ \dfrac{d}{dv}p(v_{mp}) = 0$$ より、
$$v_{mp} = \sqrt{\dfrac{2\pi T}{m}}$$
!! 平均速度
これはマクスウェル分布の期待値なので、
$$\bar{v} = \int_0^{\infty} v p(v) dv = \sqrt{\dfrac{8k_B T}{\pi m}} = \dfrac{2}{\sqrt{\pi}} v_{mp} $$
!! 根二乗平均速度
! 対象とする系
対象として、質量mの分子が温度Tの熱平衡下で運動している分子系を考える。また、''空間の対称性'' を前提とする。
; 空間の対称性から言えること
* x,y,z の三方向は等価
* x,y,z の三方向について、速度の密度分布は独立
! 速度分布の確率密度関数
!! 求める確率密度関数
ある一個の分子に注目する。この分子の速度の x 成分 vx が、$$v_x \sim v_x + dv_x$$ の値を持つ確率が $$p(v_x)dv_x$$ になるような関数 $$p(v_x)$$ が、(x方向の)求める確率密度関数である。さらに、空間の対称性より、関数 p は $$v_y, v_z$$ でも同じ形になる。
; $$p(v_x)$$ の性質:
1. $$p(v_x) = p(-v_x)$$:
* 熱平衡状態だから、$$v_x$$ での確率密度と $$-v_x$$ での確率密度は同じなはずなので ''偶関数'' になる。
2. $$p(v_x) \geq 0$$
* $$p(v_x)$$ は確率密度関数だから、''全定義域で非負''
3. $$\displaystyle \int_{-\infty}^{\infty} p(v_x) dv_x = 1$$
* 積分すれば 1 になる(規格化条件)
4. $$p(v_x) \to 0 (v_x \to \pm \infty)$$
*±∞で積分 が発散しないため
(x,y,z の三方向について) 速度の密度分布は独立なので、速度ベクトル ($$u = (v_x, v_y, v_z)$$) の確率分布は、
$$P(u) dv_x dv_y dv_z = p(v_x)p(v_y)p(v_z) dv_x dv_y dv_z $$
である。よって、
$$P(u) = P(v_x, v_y, v_z) = p(v_x)p(v_y)p(v_z) $$
である。
!! 密度関数の求め方
空間が対称だから、$$p(u)$$ は u の方向には拠らないはずである(でないと、座標軸の取り方によって分布が変わってしまうことになって空間の対称性に矛盾する)。よって、u の大きさ (v) もしくはその 2乗 の関数として表されるはずである。
$$v = \sqrt{v_x^2 + v_y^2 + v_z^2}$$
$$P(u) = P(v_x, v_y, v_z) = P(v^2) = p(v_x)p(v_y)p(v_z)$$ 式 [1]
この式に $$v_y = 0, v_z = 0$$ を代入すると $$v^2 = v_x^2$$ となるので、 $$p(0) = a$$ とおけば、
$$P(v_x^2) = a^2 p(v_x)$$
となり、この式を変形すると、
$$p(v_x) = \dfrac{P(v_x^2)}{a^2}$$
となる。$$v_y, v_z$$ も同様に計算し、式[1] に代入すれば、
$$P(v_x^2 + v_y^2 + v_z^2) = \dfrac{1}{a^6} p(v_x^2) p(v_y^2) p(v_z^2) $$
が得られ、これを解くと、
$$P(u) = A^3 e^{-\alpha (v_x^2 + v_y^2 + v_z^2)} $$
* $$p(v_x) = Ae^{-\alpha v_x^2}$$ , $$p(v_y) = Ae^{-\alpha v_y^2}$$ , $$p(v_z) = Ae^{-\alpha v_z^2}$$
が得られる(α, A は定数 (α > 0))。
---
https://staff.aist.go.jp/y-komeiji/memoranda/20170613MBdist.pdf
! 熱力学との関係
!! 定数(α, A) の決め方
$$\displaystyle 1 = \int_{-\infty}^{\infty} p(v_x) dv_x = \int_{-\infty}^{\infty} Ae^{-\alpha v_x^2} dv_x = A \sqrt{\dfrac{\pi}{\alpha}}$$
より、
$$A = \sqrt{\dfrac{\alpha}{\pi}}$$
! [[Maxwellの関係式]]
$$ \left( \dfrac{\partial T}{\partial V} \right)_S = - \left( \dfrac{\partial p}{\partial S} \right)_V $$
$$ \left( \dfrac{\partial T}{\partial p} \right)_S = \left( \dfrac{\partial V}{\partial S} \right)_p $$
$$ \left( \dfrac{\partial p}{\partial T} \right)_V = \left( \dfrac{\partial S}{\partial V} \right)_T $$
$$ \left( \dfrac{\partial V}{\partial T} \right)_p = - \left( \dfrac{\partial S}{\partial p} \right)_T $$
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! 導出
[[熱力学の基本関係式|熱力学恒等式]] から導出する。
$$dU = T dS - p dV = \left( \dfrac{\partial U}{\partial S} \right)_V dS + \left( \dfrac{\partial U}{\partial V} \right)_S dV $$
$$dH = T dS + V dp = \left( \dfrac{\partial H}{\partial S} \right)_p dS + \left( \dfrac{\partial H}{\partial p} \right)_S dp $$
$$dF = - S dT - p dV = \left( \dfrac{\partial F}{\partial T} \right)_p dT + \left( \dfrac{\partial F}{\partial V} \right)_T dV $$
$$dG = - S dT + V dp = \left( \dfrac{\partial G}{\partial T} \right)_p dT + \left( \dfrac{\partial G}{\partial p} \right)_T dp $$
それぞれの式において、各項の係数の対応関係を偏微分することで、4つの式が得られる。
$$\left( \dfrac{\partial^2 U}{\partial V \partial S} \right) = \left( \dfrac{\partial T}{\partial V} \right)_S = - \left( \dfrac{\partial p}{\partial S} \right)_V $$
$$\left( \dfrac{\partial^2 H}{\partial p \partial S} \right) = \left( \dfrac{\partial T}{\partial p} \right)_S = \left( \dfrac{\partial V}{\partial S} \right)_p $$
$$\left( \dfrac{\partial^2 F}{\partial V \partial T} \right) = - \left( \dfrac{\partial S}{\partial V} \right)_T = - \left( \dfrac{\partial p}{\partial T} \right)_V $$
$$\left( \dfrac{\partial^2 G}{\partial p \partial T} \right) = - \left( \dfrac{\partial S}{\partial p} \right)_T = \left( \dfrac{\partial V}{\partial T} \right)_p$$
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! 具体的な説明
エネルギーの関数からの導出を例に説明する。
内部エネルギーは、熱力学第一法則を使って、
$$dU = T dS - p dV $$
と表せる一方で、ポテンシャル関数を使うと以下のようにも書ける。
$$dU = \left( \dfrac{\partial U}{\partial S} \right)_V dS + \left( \dfrac{\partial U}{\partial V} \right)_S dV $$
この2つの式から、
$$T = \left( \dfrac{\partial U}{\partial S} \right)_V, - p = \left( \dfrac{\partial U}{\partial V} \right)_S $$
の関係が得られるが、この式をさらに V と S で偏微分すると、
$$\left( \dfrac{\partial T}{\partial V} \right)_S = \left( \dfrac{\partial^2 U}{\partial V \partial S} \right), - \left( \dfrac{\partial p}{\partial S} \right)_V = \left( \dfrac{\partial^2 U}{\partial S\partial V} \right) $$
という関係が得られる。2つの式の右辺が等しいことから、1つ目の関係式が得られる。
$$ \left( \dfrac{\partial T}{\partial V} \right)_S = - \left( \dfrac{\partial p}{\partial S} \right)_V $$
- - - - - - - - - -
他の3つの式も、同様に導出することができる。
```
In general, what friends are for?
How did you get acquainted with each other?
What influence do you have over your friends?
I like to communnicate with them.
How do you choose your friends?
Is friendship important in your culture?
Are friends more important than family?
```
What is the most important thing your culture has given to the world?
* [["Mercurial: The Definitive Guide" 日本語訳の公開 | http://d.hatena.ne.jp/flying-foozy/20090731/1249046206 ]]
; ブランチ・マージ
* [[multiple heads での changeset 間移動 | http://d.hatena.ne.jp/dayflower/20080314/1205395287 ]]
* [[Mercurialのブランチとマージ | http://d.hatena.ne.jp/cubicdaiya/20081110/1226323426 ]]
* [[Mercurialではじめる分散構成管理:第2回 「マージ」は怖くない ~ 分散した成果の集約 | http://gihyo.jp/dev/feature/01/mercurial/0002?page=2 ]]
* [[分散バージョン管理系Mercurial:rename って何の意味があるの? | http://d.hatena.ne.jp/m-hiyama/20091217/1261035562 ]]
* [[mercurial - metabo346の日記 | http://d.hatena.ne.jp/metabo346/20090213 ]]
* [[mercurial: branchで行ったバグフィックスをtrunkに適用する - tkrdの日記 (rails や ubuntu のことなど) | http://d.hatena.ne.jp/tkrd/20090414/1239714126 ]]
* [[Mercurial以前と以後のチケット駆動開発: プログラマの思索 | http://forza.cocolog-nifty.com/blog/2009/12/mercurial-b9a5.html ]]
* [[Mercurial hosting — bitbucket.org | http://bitbucket.org/ ]]
! Metzner-Reed Reynolds Number
The authors introduced a modifie Reynolds number for Power-law fluid:
: $$Re_{MR} = \dfrac{D v \rho}{K} \left( \dfrac{4n}{3n + 1} \right)^n \left( \dfrac{8v}{D} \right)^{1-n}$$
where n and K are flow behaviour index and fluid consistency coefficient, used in the definition of Power-law fluid ($$\tau = \dot{\gamma} K^n$$).
This equation is sometimes written as follows for convenience:
: $$Re_{MR} = \dfrac{D^n v^{2-n} \rho}{8^{n-1} K'}$$
where $$K' = K \left( \dfrac{3n +1}{4n} \right)^n$$.
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! Deviation
In [[Rabinowitsch-Mooney]] equation, wall shear rate and wall shear stress are expressed by velocity, pipe diameter, and pressure drop:
$$\ \ \ \ \ \dot{\gamma}_w = \left( \dfrac{3n' + 1}{4n'} \right) \left( \dfrac{8v}{D} \right)$$
$$\ \ \ \ \ n' = \dfrac{d[\ln D \Delta P / (4L)]}{d[\ln 8v/D]}$$
$$\ \ \ \ \ \tau_w = \dfrac{D}{4} \dfrac{\Delta P}{L}$$
From these, the relation between wall shear rate and wall shear stress of Power-law fluids can be expressed by
$$\ \ \ \ \ \ \tau_w = K {\dot{\gamma}_w}^n $$
$$\ \ \ \ \ \ \dfrac{D}{4} \dfrac{\Delta P}{L} = K \left( \dfrac{3n +1}{4n} \right)^n \left( \dfrac{8v}{D} \right)^n = K' \left( \dfrac{8v}{D} \right)^n$$
$$\ \ \ \ \ \ K' = K \left( \dfrac{3n +1}{4n} \right)^n$$
where n and K are flow behavior index and flow consistency index, respectively.
Substituting this to the definition of Darcy Friction factor, you get
:$$f_D = \dfrac{2D}{\rho v^2} \dfrac{\Delta P}{L} = \dfrac{8}{\rho v^2} \dfrac{D \Delta P}{4L} = \dfrac{K' 8^{n+1}}{D^n v^{2-n} \rho}$$
As $$f_D = 64 / Re$$ in laminar flow, a new Reynolds number may be defined
:$$Re_{MR} = \dfrac{D^n v^{2-n} \rho}{K' 8^{n-1}}$$
<<tag>>
----
* [[Microsoft® Visual C++® 既定のキーバインド | http://msdn.microsoft.com/ja-jp/vstudio/dd183141.aspx]]
* [[VC++ プロジェクト設定]]
* <<slider tocSlider "VC++ CRT" "VC++ CRT">>
* <<slider tocSlider "VC++ pragma" "VC++ pragma">>
* [[Lua コンパイル]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
* [[VC++,glut,コンソール非表示 |http://d.hatena.ne.jp/gnarl/20071012/1192197418]]
* [[VS2008SP1 マニフェストに関する不具合の回避方法 « nabehide’s sol-log|http://nabehide.jp/sollog/?p=22]]
* [[snprintf|http://blogs.wankuma.com/shannon/archive/2008/09/05/155662.aspx]]
* [[DUMPBIN のオプション | http://www.xlsoft.com/jp/products/intel/cvf/docs/vf-html/pg/pg26_10_02.htm ]]
* [[4.2.2. Makefileプロジェクト - ROOT解体新書|http://hep.planet-koo.com/index.php?g=root&sid=rt_cxx_win_makefile]]
! Cubic EOS
!! van der Waals one fluid (vdW-1) mixing rule
$$\displaystyle a = \sum_i \sum_j x_i x_j (1 - k_{ij}) \sqrt{a_i a_j} $$
$$\displaystyle b = \sum_i x_i b_i $$
b に関しては、以下のような式もあった。
$$\displaystyle b = \sum_i \sum_j x_i x_j \dfrac{b_{ii} + b_{jj}}{2} $$
$$\displaystyle b = \sum_i \sum_j x_i x_j \dfrac{b_{ii} + b_{jj}}{2} (1 - l_{ij})$$
* [[状態方程式の係数の計算 – now♯|http://nowsharp.com/wiki/flash/%e7%8a%b6%e6%85%8b%e6%96%b9%e7%a8%8b%e5%bc%8f%e3%81%ae%e4%bf%82%e6%95%b0%e3%81%ae%e8%a8%88%e7%ae%97]]
* http://www.scielo.br/scielo.php?script=sci_arttext&pid=S0104-66322004000400015
* http://www.scielo.br/scielo.php?script=sci_arttext&pid=S0100-40422008000600009
---
! Kay's Rules
make のようなツール。ただし、設定ファイルの形式は XML。
!! 大まかな話
; Task
コマンド的なもの。コンパイル とか ファイル削除 とか ディレクトリ作成 とか ...
* https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-task-reference?view=vs-2022
; Target
makefile ターゲットと同じようなもの。ターゲット間の依存関係も規定できる。
ある程度のターゲットは、デフォルトで定義されているっぽい。
* https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-dot-targets-files?view=vs-2022
|Compile |プロジェクトのコンパイル |
|Build |プロジェクトのビルド |
|Rebuild |プロジェクトのリビルド |
|Clean |プロジェクトのクリーン。すべての中間ファイルおよびビルド出力ファイルを削除する |
|Publish |プロジェクトのClickOnce発行 |
|Run |.EXEファイルの場合、最終的な出力ファイルを実行する |
https://atmarkit.itmedia.co.jp/fdotnet/special/msbuild01/msbuild01_02.html
; Properties and Items
- - - - -
!! タグ
|~ItemGroup, |入力ファイル |
|~PropertyGroup |マクロ変数の定義 |
|Target |具体的なビルド処理の指示 |
|Import |他のファイルの読み込み |
https://docs.microsoft.com/ja-jp/visualstudio/msbuild/walkthrough-creating-an-msbuild-project-file-from-scratch?view=vs-2022
Pythonに対して型付きの多次元配列オブジェクト (numpy.ndarray) と、その配列に対する多数の演算関数や操作関数を提供する。
R的な感じでベクトルや行列の計算ができるようになるっぽい。
* 要素のデータ型は全て同じになっている
** データ型の情報は ''dtype'' に格納されている
** データ型を変更したい時は ''astype()'' を使う
* 演算子のオーバーライド
** + でベクトルや行列 同士の足し算ができる
** 同じサイズじゃないとエラーが出る
* ユニバーサル関数
** 配列を入れると各要素に対して関数適用した結果の配列を返すような、ベクトル化された関数が用意されている
** np.sin(), np.abs() とか
** +, -, *, / などの基本的な演算子はオーバーライドされている
** 自分で定義した関数fをユニバーサル関数にしたいときは、''np.vectorize(f)'' とする
; API Reference
* https://numpy.org/devdocs/reference/index.html
----
! ndarray
基本となるのは ''ndarray'' クラス。numpy では、(多次元) 配列は、すべてこのクラスのインスタンス。
!! インスタンスの作成
基本的には ''numpy.array()'' を使う。
```python
import numpy as np
a1 = np.array([1, 2, 3], dtype=np.int64) # 1D arrray
a2 = np.array([[1, 2, 3], [4, 5, 6]], np.int32) # 2D (2 x 3)
```
また、指定したサイズの配列を作りたい時は、 ''numpy.zero()'' や ''numpy.empty()'' を使えばよい。
```python
np.zeros((2,3)) # 2x3の2次元配列を生成 (要素の値は0に初期化される)
np.full((2, 3), 100) # 2x3の2次元配列を生成 (要素の値は100に初期化される)
```
ほかにも、よくある形式のベクトルや行列を作成するための関数も用意されており、知っていると便利なものもある。
例:
* zeros_like(), ones_like()
* arange()
* linspace(), logspace()
* diag()
!! 配列要素の型
ndarray の要素は全て同じ型でなければならない。
* 型の確認: dtype
* 型の変更: astype()
; ~NumPyの主要なデータ型dtype一覧
* [[NumPyのデータ型dtype一覧とastypeによる変換(キャスト)- note.nkmk.me|https://note.nkmk.me/python-numpy-dtype-astype/]]
- - - - -
!! Indexing
; 1D Array
<<<
The basic slice syntax is ''i:j:k'' where ''i'' is the starting index, ''j'' is the stopping index, and ''k'' is the step (k ≠ 0).
```python
x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
x[1:7:2] # array([1, 3, 5])
```
Negative i and j are interpreted as n + i and n + j where n is the number of elements in the corresponding dimension. Negative k makes stepping go towards smaller indices.
```python
x[-2:10] # array([8, 9])
x[-3:3:-1] # array([7, 6, 5, 4])
```
Assume n is the number of elements in the dimension being sliced. Then, ''if i is not given it defaults to 0 for k > 0 and n - 1 for k < 0. If j is not given it defaults to n for k > 0 and -n-1 for k < 0 . If k is not given it defaults to 1''. Note that :: is the same as : and means select all indices along this axis.
```python
x[5:] # array([5, 6, 7, 8, 9])
```
<<<
; 2D Array
<<<
```python
x = np.array([[[1],[2],[3]], [[4],[5],[6]]])
x.shape # (2, 3, 1)
x[1:2] # array([[[4], [5], [6]]])
x[...,0] # array([[1, 2, 3], [4, 5, 6]])
```
<<<
[[Indexing — NumPy v1.19 Manual|https://numpy.org/doc/stable/reference/arrays.indexing.html]]
----
*https://qiita.com/nakasan/items/12ab3445a4f8c771f64e
----
* ndarray
** matrix
<<<
MATLAB has a function called imfill that allows you to fill holes, and you can use it in the following way.
```
% MATLAB code for filling holes in a binary image.
im = imfill(im,'holes');
```
;imfill in ~OpenCV
There is no imfill function in OpenCV, but we can surely write one! The idea is rather simple. We know the pixel (0,0) is connected to the background. So we can extract the background, by simply doing a floodfill operation from pixel (0, 0). Pixels that are not affected by the floodfill operation are necessarily inside the boundary. The flood-filled image when inverted and combined with the thresholded image gives the foreground mask!
...
```python
import cv2;
import numpy as np;
# Read image
im_in = cv2.imread("nickel.jpg", cv2.IMREAD_GRAYSCALE);
# Threshold.
# Set values equal to or above 220 to 0.
# Set values below 220 to 255.
th, im_th = cv2.threshold(im_in, 220, 255, cv2.THRESH_BINARY_INV);
# Copy the thresholded image.
im_floodfill = im_th.copy()
# Mask used to flood filling.
# Notice the size needs to be 2 pixels than the image.
h, w = im_th.shape[:2]
mask = np.zeros((h+2, w+2), np.uint8)
# Floodfill from point (0, 0)
cv2.floodFill(im_floodfill, mask, (0,0), 255);
# Invert floodfilled image
im_floodfill_inv = cv2.bitwise_not(im_floodfill)
# Combine the two images to get the foreground.
im_out = im_th | im_floodfill_inv
# Display images.
cv2.imshow("Thresholded Image", im_th)
cv2.imshow("Floodfilled Image", im_floodfill)
cv2.imshow("Inverted Floodfilled Image", im_floodfill_inv)
cv2.imshow("Foreground", im_out)
cv2.waitKey(0)
```
<<<
[[Filling holes in an image using OpenCV ( Python / C++ ) - LearnOpenCV|https://learnopencv.com/filling-holes-in-an-image-using-opencv-python-c/]]
https://docs.opencv.org/master/modules.html
----
! 基本的な処理
画像の情報は [[ndarray|Numpy]] に格納される。
そのため、多次元配列の要素を指定すれば、各ピクセルの情報へアクセスできる。なお、 ndarray は (複数のチャンネルに対応する必要があるため) 3次元配列である点に注意すること 。
; 画像の読み込み
```python
import cv2
i_ndarray = cv2.imread(filename [, flags])
```
''imread()'' でカラー画像を読み込んだ場合、BGRになっているので注意。あと、どうやら gif はサポートしていないみたい...
RGB への変換には、cvtColor() を使う。
```python
converted = cv2.cvtColor(i_ndarray, cv2.COLOR_BGR2RGB)
```
; ビット数の変更
画像を格納している ndarray の dtype を、astype() を使って変更すればよい。
; トリミング
必要な部分を ndarray の操作を使って取り出せばいいみたい。
```python
# i_ndarray[top : bottom, left : right]
trimmed = i_ndarray[0 : 50, 0: 50]
trimmed2 = i_ndarray[50 : 150, 100 : 250]
```
; 二値化
''threshold()'' を使う。
```python
ret, bi_ndarray = cv2.threshold(i_ndarray, threshold, maxval, cv2.THRESH_BINARY)
```
第4引数の意味は、[[Image Thresholding — OpenCV-Python Tutorials 1 documentation|https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_thresholding/py_thresholding.html]] を参照。
----
{{OpenCV-Python 輪郭処理!!text}}
! 輪郭検出
''findContours()'' を使う。~OpenCV のバージョンによって戻り値の数が違うので注意。
```python
import cv2
# in: 検出処理を行う画像, 処理方法, 検出した輪郭の保存方法
# out: 輪郭情報,
contours, hierarchy = cv2.findContours(i_ndarray, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
# contours には、検出した輪郭がリスト形式で格納されている
for c in contours:
# 各輪郭ごとの処理 (この例では area を取得)
print(cv2.contourArea(c))
```
!! [[輪郭のプロパティ|検出した領域のプロパティ]]
検出した輪郭を処理する関数はそれなりに用意されているが、欲しい機能が無い場合は、自分で処理を書かなきゃいけないケースもありそう。
* cv2.moments()
* cv2.contourArea()
* cv2.arcLength()
* cv2.approxPolyDP(),
* ...
; リファレンス
* [[領域(輪郭)の特徴 — OpenCV-Python Tutorials 1 documentation|http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_imgproc/py_contours/py_contour_features/py_contour_features.html]]
* [[contourArea gives area very different to pixel count|https://github.com/opencv/opencv/issues/17210]]
; 関数が用意されていない例:
```python
# Circularity = 4πA / S^2
circularity = 4 * pi * cv2.contourArea(c) / ( cv2.arcLength(c)^2 )
```
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
! 輪郭の描画
''drawContours()'' を使う。
```python
ci_ndarray = cv2.drawContours(i_ndarray, contours, -1, color, lwd)
# transparent contour
cti_ndarray = cv2.addWeighted(i_ndarray, alpha, ci_ndarray, 1-alpha, 0)
```
!! Fill contours
```python
for i in range(len(contours)):
# draw a (filled) region of ith contour.
i_ndarray = cv2.drawContours(i_ndarray, contours, i, color, -1)
```
https://cran.r-project.org/web/packages/openxlsx/openxlsx.pdf
----
```r
library(openxlsx)
excel <- createWorkbook("Creator of the workbook")
addWorksheet(excel, "sheetName_1")
addWorksheet(excel, "sheetName_2")
writeData(excel, "sheetName_1", stats_21_06)
writeData(excel, 2, stats_21_13, rowNames = TRUE)
saveWorkbook(excel, "test.xlsx", overwrite = TRUE)
```
* add oscillatory __strain__
* measure __stress__
---
! Mathmatical Handling
!! Oscillatory strain
$$\gamma = \gamma_0 \sin(\omega t)$$
!! Shear rate
$$\dot{\gamma} = \dfrac{d\gamma}{dt} = \omega \gamma_0 \cos(\omega t) = \omega \gamma_0 \sin(\omega t + \dfrac{\pi}{2})$$
!! Stress
$$\tau = \tau_0 \sin(\omega t + \delta)$$
This equation can be divided into two terms representing elastic behavior and viscous behavior by using addition theorem.
$$\tau = G' \gamma + G'' \dfrac{1}{\omega} \dot{\gamma} $$
$$\ \ \ \ \cdot \ G' = \dfrac{\tau_0}{\gamma_0} \cos(\delta)$$
$$\ \ \ \ \cdot \ G'' = \dfrac{\tau_0}{\gamma_0} \sin(\delta)$$
- - -
; Details of the transformation of the equation
加法定理を使う。
$$\begin{aligned} \tau &= \tau_0 \sin(\omega t + \delta) \\ &= \tau_0 [ \cos(\delta) \sin(\omega t) + \sin(\delta) \cos(\omega t) ] \\ &= \dfrac{\tau_0}{\gamma_0} \cos(\delta) [ \gamma_0 \sin(\omega t) ] + \dfrac{\tau_0}{\gamma_0} \sin(\delta) \dfrac{1}{\omega} [ \omega \gamma_0 \sin(\omega t + \dfrac{\pi}{2}) ] \\ &= \dfrac{\tau_0}{\gamma_0} \cos(\delta) \gamma + \dfrac{\tau_0}{\gamma_0} \sin(\delta) \dfrac{1}{\omega} \dot{\gamma} \end{aligned} $$
https://cdn.technologynetworks.com/TN/Resources/PDF/WP160620BasicIntroRheology.pdf
;
;フラグの付いたメールの検索
検索のフォームに ''~IsFlagged:yes'' と入力する。
https://support.microsoft.com/ja-jp/office/outlook-on-the-web-%E3%81%A7%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%84%E9%80%A3%E7%B5%A1%E5%85%88%E3%82%92%E6%A4%9C%E7%B4%A2%E3%81%97%E3%81%BE%E3%81%99%E3%80%82-b27e5eb7-3255-4c61-bf16-1c6a16bc2e6b
pandas には、一次元データのための ''pandas.Series'' と 二次元データのための''pandas.~DataFrame'' の二種類のデータ構造が用意されている。
; API Reference
* [[pandas.DataFrame — pandas 1.1.2 documentation|https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html]]
----
! pandas.Series
!! Create
<<<
```python
class pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
```
One-dimensional ndarray with axis labels (including time series).
Labels need not be unique but must be a hashable type. The object supports both integer- and label-based indexing and provides a host of methods for performing operations involving the index. Statistical methods from ndarray have been overridden to automatically exclude missing data (currently represented as ~NaN).
Operations between Series (+, -, /, , *) align values based on their associated index values– they need not be the same length. The result index will be the sorted union of the two indexes.
;Parameters:
* ''data '': array-like, Iterable, dict, or scalar value
** Contains data stored in Series.
** Changed in version 0.23.0: If data is a dict, argument order is maintained for Python 3.6 and later.
* ''index'' : array-like or Index (1d)
** Values must be hashable and have the same length as data. Non-unique index values are allowed. Will default to RangeIndex (0, 1, 2, …, n) if not provided. If both a dict and index sequence are used, the index will override the keys found in the dict.
* ''dtype'' : str, numpy.dtype, or ExtensionDtype, optional
** Data type for the output Series. If not specified, this will be inferred from data. See the user guide for more usages.
* ''name'' : str, optional
** The name to give to the Series.
* ''copy'' bool, default False
** Copy input data.
<<<
[[pandas.Series — pandas 1.1.2 documentation|https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.html#pandas.Series]]
----
! pandas.~DataFrame
!! Create
<<<
```python
class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
```
Two-dimensional, size-mutable, potentially heterogeneous tabular data.
Data structure also contains labeled axes (rows and columns). Arithmetic operations align on both row and column labels. Can be thought of as a dict-like container for Series objects. The primary pandas data structure.
;Parameters:
* ''data '': ndarray (structured or homogeneous), Iterable, dict, or DataFrame
** Dict can contain Series, arrays, constants, or list-like objects.
** Changed in version 0.23.0: If data is a dict, column order follows insertion-order for Python 3.6 and later.
** Changed in version 0.25.0: If data is a list of dicts, column order follows insertion-order for Python 3.6 and later.
* ''index'' : Index or array-like
** Index to use for resulting frame. Will default to RangeIndex if no indexing information part of input data and no index provided.
* ''columns'' : Index or array-like
** Column labels to use for resulting frame. Will default to RangeIndex (0, 1, 2, …, n) if no column labels are provided.
* ''dtype'' : dtype, default None
** Data type to force. Only a single dtype is allowed. If None, infer.
* ''copy'' bool, default False
** Copy data from inputs. Only affects DataFrame / 2d ndarray input.
<<<
[[pandas.DataFrame — pandas 1.1.2 documentation|https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html#pandas.DataFrame]]
- - - - -
!!! ''Sample codes''
```python
import pandas as pd
import numpy as np
# Constructing DataFrame from a list.
df0 = pd.DataFrame( [1,2,3,4,5] )
# Constructing DataFrame from a dictionary.
df1 = pd.DataFrame( {'c0': [1, 2], 'c1': [3, 4], 'c2': [5, 6]} )
df1_i8 = pd.DataFrame( {'c0': [1, 2], 'c1': [3, 4], 'c2': [5, 6]}, dtype=np.int8 )
df1_idx = pd.DataFrame( {'c0': [1, 2], 'c1': [3, 4], 'c2': [5, 6]}, index=['idx0', 'idx1'] )
# Constructing DataFrame from numpy ndarray:
df2 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns=['a', 'b', 'c'])
```
!! Names of columns & indexes
```python
df1.columns # get names of columns
df1.index # get names of indexes
df1_i8.index = ['i0', 'i1'] # change the index names
df1_i8.index
```
- - - - - - - - - - - - - - - - - - - -
!! Access
* ''pandas.loc[row, column]'' : primarily label based indexing. Integers may be used but they are interpreted as a label.
* ''pandas.iloc[row, column]'' : primarily integer based indexing
```python
# get column(s)
df1['c1'] # An argument is regarded as COLUMN NAME when it is a string.
df1[['c1', 'c3']] # An arguments is regarded as COLUMN NAMEs when it is a list of strings
df1.c1 # Another expression when you specify single column
df1.loc[:, 'c1'] # specify ROW NAME and COLUMN NAME (':' is wildcard)
df1.iloc[:, 2] # specify indexes of ROW and COLUMN (':' is wildcard)
# get row(s)
df2[1:3] # An argument is regarded as ROW NUMBERs in this format
df2[:2] # Select the first 2 rows
df2[-1:] # Select the last element in the list
df1_idx.loc['idx0']
df1_idx.iloc[1]
df1_idx.iloc[0:2]
# get element(s)
df2.a[1]
df2.c[0:2]
df1_idx['c1', 'idx1'] # access column 'c1'
df1_idx['idx1']
df1.loc['c1', 1]
df1.c1 # access column 'c1'
```
----
! データフレームの連結
データフレームの連結には縦方向と横方向があり、多くの関数のデフォルト動作は縦方向の連結である。
あと、キーやインデックスが連結の際に意味を持つので、注意が必要 (無視したい時は ignore_index = True にする)。
!! df.append()
```python
df1.append([df2, df4]) # 縦方向の連結
```
;横方向の連結
<<<
横方向に連結したい場合は axis=1 を指定。このとき 直前の例とは逆に 紐付けは 連結方向でないラベル = index について行われる。 連結方向のラベルにあたる columns はそのまま維持される。
```python
pd.concat([df1, df4], axis=1)
```
<<<
http://sinhrks.hatenablog.com/entry/2015/01/28/073327
!! ソート
<<<
```python
# 1種類の場合
df = df.sort_values(['データ種別'])
# 1 -> 2の順で昇順にソート
df = df.sort_values(['データ種別1', 'データ種別2'])
```
<<<
https://qiita.com/koara-local/items/0e56bc1e58b11e4d7a32
!! 現在のデータ順でindexの振り直し
```python
df = df.reset_index(drop=True)
```
----
! データフレームの操作
https://pythondatascience.plavox.info/python%E3%81%A8r%E3%81%AE%E9%81%95%E3%81%84/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0
*[[熱力学]]
*[[熱力学第一法則]]
*[[熱力学第二法則]]
*[[Maxwellの関係式]]
*[[エントロピー]]
*[[カルノーサイクル]]
*[[ヘルムホルツの自由エネルギー]]
*[[理想気体の熱力学]]
*[[理想気体の混合エントロピー]]
*[[理想気体の化学ポテンシャル]]
*[[ドルトンの法則]]
*[[ラウールの法則]]
! Peng-Robinson (PR)
Zc の予測精度の向上。
$$ p = \dfrac{RT}{V_m - b} - \dfrac{a \alpha}{V_m^2 + 2bV_m - b^2}$$
・ $$ a = \dfrac{0.45724 R^2 T_c^2}{p_c} $$
・ $$ b = \dfrac{0.07780 R T_c}{p_c} $$
・ $$\alpha = ( 1 + m (1 - T_r^{0.5}) )^2$$
・ $$m = 0.37464 + 1.54226 \omega - 0.26992 \omega^2 $$
・ $$T_r = \dfrac{T}{T_c}$$
!! Polynomial Form:
$$Z^3 - (1 - B) Z^2 + (A - 2B - 3B^2) Z - (AB - B^2 - B^3) = 0$$
・ $$A = a \dfrac{\alpha p}{R^2 T^2} = \dfrac{0.45724 R^2 T_c^2}{p_c} \dfrac{\alpha p}{R^2 T^2} = 0.45724 \dfrac{\alpha p_r}{T_r^2}$$
・ $$B = b \dfrac{p}{RT} = \dfrac{0.07780 R T_c}{p_c} \dfrac{p}{RT} = 0.07780 \dfrac{p_r}{T_r}$$
* https://www.e-education.psu.edu/png520/m16_p6.html
!! Mixing Rule:
* $$\displaystyle a = \sum_i \sum_j x_i x_j (1 - \delta_{ij}) \sqrt{a_i a_j} $$
* $$\displaystyle b = \sum_i x_i b_i $$
$$\delta_{ij}$$: an empirically determined binary interaction coefficient characterizing the binary formed by component i and component j
- - - - - - - - - -
!! Fugacity Coefficient
The mixing rule, shown above, is used to determine the values of $$a$$ and $$b$$.
$$\displaystyle \ln \phi_k = \dfrac{b_k}{b} (Z-1) - \ln(Z-B) + \dfrac{A}{B2\sqrt{2}} \left( \dfrac{b_k}{b} - \dfrac{2}{a} \sum_i x_i (1 - \delta_{ik}) \sqrt{a_i a_k} \right) \ln \left[ \dfrac{Z+B(1+\sqrt{2})}{Z+B(1-\sqrt{2})} \right]$$
https://pubs.acs.org/doi/abs/10.1021/i160057a011
---
!! Flash Calculation
* [[第9章 文字列とディレクトリの操作|http://www.kent-web.com/perl/chap9.html]]
* [[Perlでよく使用する関数・標準モジュール一覧 | http://d.hatena.ne.jp/perlcodesample/20091025/1252196591 ]]
* <<slider tocSlider "Perl ワンライナー" "Perl ワンライナー">>
* [[簡易ソケットクライアント]]
; モジュール
* ~Regexp-Common
** よく使う正規表現がまとめてある
** [[Abigail / Regexp-Common-2010010201 - search.cpan.org | http://search.cpan.org/~abigail/Regexp-Common-2010010201/ ]]
** 参考サイト
*** [[Regexp::Commonによる正規表現で数値やurlの書式チェック - end0tknrのkipple | http://d.hatena.ne.jp/end0tknr/20080901/1220272146 ]]
こんな感じ
;perl -w -e ' while (<>) { print; } ' file1 file2
もう少し長くなる場合は、こんな感じにするかなぁ...
{{{
cat file1 file2 | perl filter_sample.pl
}}}
{{{
<filter_sample.pl>
# 単純なwhileテストの場合、 <> の内容は、$_ に入る.
while (<>) {
# $. には、最後に入力を行ったファイルハンドルの現時点でのレコード番号(行番号)が入っている
print $.;
# print の引数を省略した場合、$_ の内容を出力する.
print; # print $_ と等価
}
}}}
* [[Adobe Photoshop CS5自動化作戦 | http://www.openspc2.org/book/PhotoshopCS5/]]
* [[そらかぜ工場 Photoshop Scripting 覚書き | http://www016.upp.so-net.ne.jp/sorakaze/script/script1.html#dialogdesigner]]
* [[omino pixel blog | http://testing.omino.com/pixelblog/?s=ominoDialogMaker]]
----
* [[フォルダ内のJPEG画像をレイヤーに格納する|http://www.ka-net.org/other/ot04.html]]
;レイヤ
{{{
var currLayer = activeDocument.activeLayer // 現在のレイヤ
var linkedLayers = currLayer.linkedLayers // 選択レイヤにリンクされているレイヤ (レイヤセットも含まれる)
$.writeln( currLayer.name + " is activeLayer(" + currLayer.typename + ").")
for (i = 0; i < linkedLayers.length; i++) {
var linkedLayer = linkedLayers[i]
if (linkedLayer.typename == "ArtLayer") {
// 普通のレイヤ・調整レイヤの場合
$.writeln( linkedLayer.name + " is 'ArtLayer'.")
if (linkedLayer.kind === LayerKind.NORMAL) {
// 普通のレイヤのkind は、LayerKind.NORMAL
$.writeln(" normal layer")
}
} else if (linkedLayer.typename == "LayerSet") {
// レイヤセットの場合
$.writeln( linkedLayer.name + " is 'LayerSet'.")
} else {
throw "unreachable point."
}
}
}}}
|activeDocument.activeLayer |現在のレイヤ |
「イメージ」→「色調補正」→「チャンネルミキサー」
断熱準静操作でわずかに体積を変化させた場合は、
* 系と外界での熱のやり取りは無く (dQ = 0)
* 物質量(N)の変化は無い (dN = 0)
である。この時のエネルギーの変化は、
$$ dU = dW = P(T; V, N) \Delta V $$
となる。ゆえに、断熱準静操作によるエネルギーの変化は、
$$ dU = \dfrac{\partial U}{\partial T} \Delta T + \dfrac{\partial U}{\partial V} \Delta V = P(T; V, N) \Delta V$$
と表せる。
ここで、理想気体では、
・ $$ \dfrac{\partial U}{\partial V} = 0 $$
・ $$ \dfrac{\partial U}{\partial T} = C_v = cNR $$
となるため([[熱容量]] 参照)、
$$dU = cNR \Delta T = P(T; V, N) \Delta V = \dfrac{NRT}{V} \Delta V $$
という関係が得られる。この式を整理すると、
$$ \dfrac{\Delta V}{V} = - \dfrac{c\Delta T}{T} $$
となる。これを積分して整理すると、
$$ \ln(V) + c \ln(T) = const.$$
となるので、
$$ T^c V = const. $$
となる。
* [[リレーショナル・データベースの世界 | http://www.geocities.jp/mickindex/database/idx_database.html ]]
* [[SQL -TECHSCORE-|http://www.techscore.com/tech/sql/index.html]]
* [[select結果をファイルに出力|http://blog.fideli.com/kenfideli/archive/7/0]]
{{{
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
<title>POST Form Simple</title>
</head>
<body>
<!-- Please add URL to action attribute -->
<form method="post" action="">
<input type="text" name="data" size="100" />
<input type="submit" name="submit" value="OK" />
</form>
</body>
</html>
}}}
! ビデオの埋め込み
!! Motion JPEG
XMedia Recode で パワポ用に Motion JPEG 出力する際は、Color mode の指定に注意する必要がある。
理由は不明だが、以下の設定でないと、映像の再生がバグる。
* Video -> Color mode
** YUV 4:2:2 Planar 16 bpp
---
! フォントの埋め込み
スライドファイルのサイズが妙に大きいときは、フォントが埋め込まれてしまっているかもしれない。
<<<
;要約
フォントを埋め込みつつ、ファイルサイズを極力抑えたい場合は、以下のうちどれかを利用しましょう。
# 「使用されている文字だけを埋め込む」設定にする
# 「すべての文字を埋め込む」かつ、フォント置換を活用する
# 「すべての文字を埋め込む」かつ、スライドマスターを活用する
1が最も簡単で、3が最も応用の利く方法です。
...
解決策1:「使用されている文字だけを埋め込む」設定
こっちは簡単。自由にフォントを使ってスライドを作成して、「オプション」→「保存」→「次のプレゼンテーションを共有する時に再現性を保つ」の項を変えるだけ。
<<<
[[Powerpointで不要なフォントが埋め込まれないようにする - HIATLI|https://weblog.shak.jp/2018/08/powerpoint%E3%81%A7%E4%B8%8D%E8%A6%81%E3%81%AA%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E3%81%8C%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BE%E3%82%8C%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B/]]
<<tag 'Python'>>
<div class="tc-table-of-contents">
<<toc-selective-expandable 'Python'>>
</div>
----
! インストール
!! ハマったところ
;なぜか Program Files へインストールされない...
* /c/Users/ユーザー名/~AppData/Local/Programs/Python/Python38-32
;Windows アプリが邪魔をする。
<<<
環境はWindows 10。たったさっきまで動いていたPython・・・。もう一度実行すると、今度はMicrosoft Storeが起動した。感覚的に PATH が通ってないような感じ。でもそうであればコマンドが見つかりません的なメッセージを出すはず。そこで、まずPATHを確認してみたら・・・
C:\Users\ユーザー名\~AppData\Local\Microsoft\~WindowsApps
という見慣れないディレクトリを参照していた。エクスプローラーで中を確認すると、0バイトの実行ファイル。中にPython.exeもあった。間違いなくこいつが原因だ。
更新日時を見てもついさっき、2,3時間前にできたようだ。そもそもWindowsAppsフォルダって何者?と調べてみたけど、どうもストアからインストールしたアプリが入るっぽい。
...
Windowsの設定からアプリの項目を開く。「アプリと機能」の中に「アプリ実行エイリアス」があって、そこをさらに開くとこうです。
全部「オフ」にしました。
WindowsAppsフォルダの中のファイルを移動したり削除しようとしても、アクセス権限か何かでエラーになったけど、これをオフにするだけで該当ファイル、python.exeもきれいさっぱりです。
<<<
[[Pythonが起動しないのはアプリ実行エイリアスのせい!? – 吉田のブログ|https://yoshida.blog.itsrv.net/archives/354.html]]
; ~MinGW から起動できない
<<<
以下のような alias を ~/.bashrc あたりに書いておく。
(そして source ~/.bashrc して読み込ませる)
```bash
alias python='winpty python.exe'
```
<<<
https://qiita.com/cointoss1973/items/a0da81df10f8cc04c83e
----
!! パッケージ
* numpy
* matplotlib
-
* opencv-python
アスペクト志向っぽいことができる機能っぽい。
<<<
以下のコード:
```python
with EXPRESSION as TARGET:
SUITE
```
これは次と等価です:
```python
manager = (EXPRESSION)
enter = type(manager).__enter__
exit = type(manager).__exit__
value = enter(manager)
hit_except = False
try:
TARGET = value
SUITE
except:
hit_except = True
if not exit(manager, *sys.exc_info()):
raise
finally:
if not hit_except:
exit(manager, None, None, None)
```
<<<
<<<
複数の要素があるとき、コンテキストマネージャは複数の with 文がネストされたかのように進行します:
```python
with A() as a, B() as b:
SUITE
```
これは次と等価です:
```python
with A() as a:
with B() as b:
SUITE
```
<<<
https://docs.python.org/ja/3/reference/compound_stmts.html#the-with-statement
[[Normal QQ plot and general QQ plot—ArcMap - Documentation|https://desktop.arcgis.com/en/arcmap/latest/extensions/geostatistical-analyst/normal-qq-plot-and-general-qq-plot.htm]]
<<<
result=nls(population~a/(1+exp(-(b0+b1*year))), start=list(a=400,b0=-49,b1=0.025),data= USPop, trace=TRUE)
<<<
* http://user.keio.ac.jp/~nagakura/R/R_NLOLS.pdf
! Basic Type
R には、以下のような Basic Type が用意されている。
# Vector objects:
# List objects:
# Language objects:
# Expression objects:
# Function objects:
# NULL object:
# Builtin objects and special forms:
# Promise objects:
# Dot-dot-dot:
# Environment objects:
# Pairlist objects:
# Any-type:
- - - - -
!! 1. Vector
ざっくりこんな感じらしい。
* 一次元配列的なもの。
* 各要素には、添え字でアクセス可能。
** 例: x[5]
* Rにはスカラー型はなく、代わりに要素数1のベクトルを用いて扱う。
* ベクトルの要素は、6つのタイプに分類される。
** 要素のタイプは全て同じでなければならない。
** c() を使うと、自動的に同じタイプに揃えられる。<br>(例: c(TRUE, 1, "a") は、 ["TRUE", "1", "a"] に変換される)
|typeof |mode |storage.mode |h
|logical |logical |logical |
|integer |numeric |integer |
|double |numeric |double |
|complex |complex |complex |
|character |character |character |
|raw |raw |raw |
!! 2. List
一見ベクトルに似ているけど、結構違う。
* List には、異なるタイプの要素を入れることができる
** どんなタイプの Rオブジェクトを含んでもよい。
* List や Vector を要素に入れることによって、多次元配列や構造体のようなものを、作ることができる。
* 各要素へのアクセス方法は、3種類ある。
!! 3. Language objects
(まだ評価されていない) ''構文木'' 的なもの。
* 構文木の各要素には List と同じような感じでアクセスできる
* eval() に渡すと、評価してくれる。
Language objects は、3つのオブジェクトに分類される。らしい。(意味がよくわからない)
* call
* expression
* name
** おそらく symbol のことなのでは...
```r
e3 <- quote(plot(x = age, y = weight))
typeof(e3)
e3[[1]]
typeof( e3[[1]] )
e3$x
e3$y
```
!! 4. Expression objects
(まだ評価されていない) ''構文木'' 。
Language objects の一種であるらしい。
<<<
In R one can have objects of type "expression". An expression contains one or more statements. A statement is a syntactically correct collection of tokens. Expression objects are special language objects which contain parsed but unevaluated R statements. The main difference is that an expression object can contain several such expressions. Another more subtle difference is that objects of type "expression" are only evaluated when explicitly passed to eval, whereas other language objects may get evaluated in some unexpected cases.
An expression object behaves much like a list and its components should be accessed in the same way as the components of a list.
<<<
[[R Language Definition - Expression-objects|https://cran.r-project.org/doc/manuals/r-release/R-lang.html#Expression-objects]]
!! 5. Function objects
関数オブジェクト。 typeof() の戻り値は "closure" になるっぽい。
```r
typeof(plot)
```
!! 6. NULL
「''オブジェクトが無い''」ことを示す(指定する)ために使う、特別なオブジェクト
* NULL に属性をセットすることはできない
!! 7. Builtin objects and special forms
builtin functions of R
!! 8. Promise objects
遅延評価で使うみたい。
!! 9. Dot-dot-dot
可変長引数のことらしい。
* sprintf(fmt, ...)
!! 10. Environments
関数のローカル変数とかがアサインされるところ。
* きちんとした話は結構めんどくさそうなので、後でまとめる。
!! 11. Pairlist objects
!! 12. The “Any” type
---
! Attributes
NULL 以外の Object には、 Attribute (属性) を付加することができる。
* 基本型に見える Matrix や Data Frame は、Vector や List に Attribute を付加することで実現している。
* Object の 属性は、attributes() 関数で確認できる。
```r
> mat <- matrix(1:12, 3)
> attributes(mat)
$dim
[1] 3 4
```
!! Matrix
* ''Matrix は Basic Type ではない''。
* Vector に dim という Attribute (属性) を付加することで、実現している。
!! Array
Array と Matrix は、基本的に同じもの。
* Array も dim を Attribute (属性) 付加された Vector。
* 二次元の Array を Matrix と扱っている。
<<<
Matrices and arrays are simply vectors with the attribute dim and optionally dimnames attached to the vector.
<<<
https://cran.r-project.org/doc/manuals/r-release/R-lang.html#Attributes
!! Data Frame
一言でいうと、「(同じ要素数の) Vector の List」。
* ''Data Frame も Basic Type ではない''。
* list に Attribute (属性) を付加することで、実現している。
** $names
** $row.names
** $class
* ただし、 list とは違い、各要素の長さは同じでなければならない。
<<<
Data frames are the R structures which most closely mimic the SAS or SPSS data set, i.e. a “cases by variables” matrix of data.
A data frame is a list of vectors, factors, and/or matrices all having the same length (number of rows in the case of matrices). In addition, a data frame generally has a names attribute labeling the variables and a row.names attribute for labeling the cases.
A data frame can contain a list that is the same length as the other components. The list can contain elements of differing lengths thereby providing a data structure for ragged arrays. However, as of this writing such arrays are not generally handled correctly.
<<<
[[R Language Definition - Data-frame-objects|https://cran.r-project.org/doc/manuals/r-release/R-lang.html#Data-frame-objects]]
!! Factor
* ''Factor も Basic Type ではない''。
* 実体は Vector。
* Factor 自体の説明
** http://m-hiyama.hatenablog.com/entry/20151215/1450140312
!! スカラーについて
<<<
スカラー型がない所とか。numeric(integerとかdouble)とかcomplex(複素数値)とかlogical(論理値)とかcharacter(文字というか文字列)といった型名があるのですが、全部ベクトル型なので0個以上複数の値を保持できます。
スカラー型がないところというよりは一見スカラー型に見える場合があるところが引っかかりの元なんでしょうね。単に 1 と書くとスカラーのように見えますが実際には要素数(長さ)1のベクトルを書いたことになっているという。型名も vector <numeric> とか numeric[1] とかではなく numeric だけで数値ベクトル型を表すので、最初 mode(1) と mode(c(1,2,3)) が同じ型名 numeric になっているのを見てびっくりするわけです。
ベクトルを作るとされている c 関数も作るというと語弊があって、ベクトルを合成(combine)する関数だっりします。 c(1,2,3) は要素数1のベクトル3つを合成して要素数3のベクトル1つを返すというように。
<<<
[[Rのお勉強 - Misohena Blog|http://misohena.jp/blog/2017-10-31-studying-r-language.html]]
---
! リファレンス
* [[R Language Definition - Basic-types|https://cran.r-project.org/doc/manuals/r-release/R-lang.html#Basic-types]]
| ~ |従属変数とモデルを区切る |
| + |モデルに含まれる変数を加える |
| - | |
| : | |
| * | |
| %in% | |
| ^ | |
----
<<<
Tilde operator is used to define the relationship between dependent variable and independent variables in a statistical model formula. The variable on the left-hand side of tilde operator is the dependent variable and the variable(s) on the right-hand side of tilde operator is/are called the independent variable(s).
<<<
https://www.tutorialspoint.com/what-is-the-use-of-tilde-operator-in-r
----
* http://m884.hateblo.jp/entry/20091112/1259855233
-
* https://ill-identified.hatenablog.com/entry/2017/04/30/004258
-
* https://tomoecon.github.io/R_for_graduate_thesis/Ttest.html
! 概要
Rでの処理結果を、HTMLやPDFに埋め込んで出力することができる。Rのグラフ描画処理は、Markdown 内に埋め込んで書くことができる。Markdownの出力には、いくつかのモジュールのインストールが必要。
Markdown の構成は大体こんな感じになる。
* Header (YAML形式)
* CSS (optional)
* Body
** 普通の Markdown
** 埋め込まれた R コード
** 数式 (Tex形式)
; ざっくりした解説
* [[R Markdown Basics|https://k-metrics.github.io/cabinet/basics_rmd.html#r_markdown%E3%81%A8%E3%81%AF]]
---
! インストール
RStudio であれば、「 Package → install 」 から ''rmarkdown'' をインストールするだけでよい。
!! PDF も出力したい場合
~TinyTex もインストールする。
```
install.packages("tinytex")
tinytex::install_tinytex() # install TinyTeX
```
[[Chapter 1 Installation - R Markdown: The Definitive Guide|https://bookdown.org/yihui/rmarkdown/installation.html]]
---
! ヘッダー
出力フォーマットや体裁を、[[YAML]] 形式で定義する。データは(ハッシュを用いた)入れ子の構造になっている。
; 注意点
エラーが出る場合は、以下の点をチェックする。スペースが大事だったりするみたい。
<<<
Try adding an empty line between the YAML header and the <style> tag and indenting your YAML this way
```
---
output:
html_document:
---
```
Again hard to help you any further without a reproducible example (BTW a screen capture is not a reproducible example and is not a good thing to do here)
<<<
[[Error in RMarkdown knit yaml - R Markdown - RStudio Community|https://community.rstudio.com/t/error-in-rmarkdown-knit-yaml/21833/7]]
- - - - - - - - - - -
<$reveal type="nomatch" state="$:/state/rmarkdownHeader" text="show"><$button set="$:/state/rmarkdownHeader" setTo="show">詳細</$button> [[Edit|R/Markdown/Header]]</$reveal>
<$reveal type="match" state="$:/state/rmarkdownHeader" text="show">
<$button set="$:/state/rmarkdownHeader" setTo="hide">隠す</$button> [[Edit|R/Markdown/Header]]
- - - - - - - - - - -
{{R/Markdown/Header!!text}}
</$reveal>
---
! Body
!! Rチャンク
;オプション
|オプション |役割 |補足 |h
|eval |コードを評価するか |TRUE or FALSE |
|echo |コード実行時の出力を表示するか|基本は TRUE/FALSE <br>ただし、 echo=2:3等とも書けて、この場合2・3番目のコードのみ出力。<br>逆にecho=-4だと4番目のコード以外出力|
|warning |コード実行時の警告を表示するか |~|
|error |コード実行時のエラーを表示するか |~|
|include |レポートに組み込むかどうか |FALSE にしても、コードは評価される。前処理やパッケージ読み込みに使う |
|collapse |出力をまとめるかどうか ||
[[R markdown(knitr)パッケージのchunk optionまとめ - My Life as a Mock Quant|https://teramonagi.hatenablog.com/entry/20130615/1371303616]] を参考・引用している
; デフォルト設定の変更
''opts_chunk$set()'' を使って、デフォルト設定を変更することもできる。
```r
opts_chunk$set(prompt=TRUE, message=FALSE)
```
!! 数式
* [[R/Markdown/数式]]
```
$$a_i = b_i$$
```
; インライン
```
$a_i = b_i$
```
---
* https://bookdown.org/yihui/rmarkdown/html-document.html#mathjax-equations
* https://kazutan.github.io/kazutanR/Rmd_intro.html
; 基本的なコマンド
```r
#パッケージのインストール:install.packagesコマンド
#パッケージが収録されているサーバーを選択:reposオプション
install.packages("パッケージ名", repos = "http://cran.us.r-project.org")
#インストールされているパッケージの更新:update.packagesコマンド
update.packages()
#インストールされているパッケージの情報を表示:installed.packagesコマンド
installed.packages()
#パッケージファイルを作業フォルダにダウンロード:download.packagesコマンド
#パッケージファイルの保存先:destdirオプション
download.packages("パッケージ名", destdir = getwd())
#パッケージのアンインストール:remove.packagesコマンド
remove.packages("パッケージ名")
#パッケージの読み込み:libraryコマンド
#パッケージがなければエラーになります
library("パッケージ名")
#パッケージの読み込み:requireコマンド
#パッケージがなければFALSEを返します
require("パッケージ名")
```
https://www.karada-good.net/analyticsr/r-240
; パッケージがどこにインストールされているのかを確認する
```r
パッケージがどこにインストールされているのかわからなくて困った。
そういう時は.libPaths()を実行すればOK。
```
https://teramonagi.hatenablog.com/entry/20100513/1273781172
----
* [[Rのパッケージ開発について(R) |https://sites.google.com/site/scriptofbioinformatics/r-tong-ji-guan-xi/rnopakkeji-kai-fanitsuite-r]]
* [[Rパッケージを作ってCRANで公開する - Thinking Blog |http://tkdmah.hatenablog.com/entry/2013/02/16/132610]]
* [[Rでの自作パッケージの作り方 - iAnalysis ~おとうさんの解析日記~|http://d.hatena.ne.jp/isseing333/20110117/1295197018]]
* [[私的パッケージ作成法 - RjpWiki|http://www.okada.jp.org/RWiki/?%BB%E4%C5%AA%A5%D1%A5%C3%A5%B1%A1%BC%A5%B8%BA%EE%C0%AE%CB%A1]]
* [[R の拡張を書く (Writing R Extensions) |http://cran.r-project.org/doc/contrib/manuals-jp/R-exts.jp.pdf]]
<<tiddlerList tags:"R言語,グラフ">>
だいたいはこれで分かるはず。
* [[R によるグラフィックスの作成 |http://www.cwk.zaq.ne.jp/fkhud708/files/R-graphics.pdf]]
---
! サンプル
; 空のグラフを作成
```r
xRange <- c(1,5)
yRange <- c(10,60)
plot(xRange, yRange, type = 'n', main="title", xlab="xx", ylab="yy")
```
; 細かな設定
```r
# 格子の線を引く場合 (大雑把で良ければ、grid(5,5) みたいな感じでよい)
abline(v = 1:5, h = 1:6*10, col = "gray", lty = 2, lwd = 0.7)
# 線を書く
lines( c(1,4,5,2), c(13,46,22,58), lwd = 2, col="red" )
# 点を打つ (透明度も設定可能)
points( c(1,4,5,2), c(13,46,22,58), cex=1.2, pch=21, bg="#C3FFFF80")
# 説明テキストを入れる
text( 1.37, 13, "start point", font=2, cex=0.9, col="#0080FF" )
text( 2, 58, "end point", adj=c(-0.2, -0.2), font=2, cex=0.9, col="#0080FF" )
# 凡例を入れる
legend("topright", c("A", "B", "C"), lty=c(3, 2, 1),
col=c("red", "blue", "black"), lwd=2, bg="white")
legend(2, 20, inset=.05, title="Number of Cylinders",
c("4","6","8"), fill=c("#FF0000", "#0080FF", "#9DB9EB"), horiz=TRUE)
```
; 範囲をきっちり合わせたい時
```r
plot(c(1,4,5,2), c(13,46,22,58), xaxs="i", yaxs="i", xaxt="n", yaxt="n", type="l")
axis(1); axis(2)
```
---
! グラフパラメータ
!! plot() 関数
|main |グラフのタイトル |
|xlab, ylab |X軸・Y軸の名前を指定する | |
|xlim, ylim |X軸・Y軸の最小値・最大値の指定 |xlim=c(0,100) |
|log |対数軸を使うかどうかの指定 ("x", "y" or "xy") |log="x" |
|las |軸のラベルのスタイル |y軸のラベルを縦にしたい時は "las=1"|
|tck |目盛りのヒゲの長さ (負の値だと外向きになる) |0にするとヒゲがなくなる |
|mgp |[[軸ラベル・軸メモリ・軸線の位置を指定する|http://uncorrelated.hatenablog.com/entry/20130708/1373256551]] |par(mgp=c(3, 1, 0)) [単位はmex] |
|font.axis |軸のフォントサイズ ||
!! lines(), points() でも使えるパラメータ
|col |色の指定 ( # R, G, B, alpha) |
|lwd |線の太さ |
|lty |線のタイプ |
|pch |プロットのマーカーの種類 |
|pt.bg |マーカの背景色 |
|cex |文字の拡大率 (標準の大きさが 1 ) |
|ps |テキストと記号の大きさをポイント単位で指定 |
---
! リンク
* [[scratch-R: graphical parameters|http://eau.uijin.com/advgraphs/parameters.html]]
* [[scratch-R: axes and text|http://eau.uijin.com/advgraphs/axes.html]]
* [[凡例・フォントの設定 | http://www7.atwiki.jp/hayatoiijima/pages/19.html#id_bea2abd2]]
* [[誤差範囲 R言語で棒グラフや折れ線に誤差範囲,エラーバーをつける | http://r.livedocs.net/graph/errorbar.html]]
* [[複数座標軸 - R言語,同じグラフ上に複数の座標軸を表示させる|http://r.livedocs.net/graph/axis.html]]
* [[複数ウィンドウ - 複数のウィンドを起動して、グラフを描画する|http://r.livedocs.net/graph/devset.html]]
* [[Rプログラム (TAKENAKA's Web Page) | http://takenaka-akio.cool.ne.jp/doc/r_auto/chapter_06.html]]
S3クラスは、''オブジェクトのクラス属性'' (実態はただの文字列) と ''総称関数'' によって実現されている。
----
! クラス属性 (class attribute)
* ''S3クラス'' は ''"class" という名前の属性が与えられたオブジェクト'' にすぎない
* ''クラス名'' は ''"class" に代入された文字列''
```r
> x <- 1
> class(x) <- "foo" # "foo" という名前のクラスとして振る舞うようになる
> attribute(x) # class という属性に "foo" という文字列が入るだけ
$class
[1] "foo"
```
---
! 総称的関数 (generic function)
基本的には ~UseMethod() 関数を使うのだが、この関数の仕様がややこしい。
!! ~UseMethod()
; ~UseMethod(generic, object)
* ''generic'': a character string naming a function (and not a built-in operator). Required for ~UseMethod.
* ''object'': for ~UseMethod: an object whose class will determine the method to be dispatched. Defaults to the first argument of the enclosing function.
大雑把にいうと、
* ''generic'' の値が ''"foo"''、''object'' のクラス名が ''"bar"'' だとすると、''foo.bar()'' という名前の関数が呼び出される
* foo.bar() という関数が存在しない場合は、 ''foo.default()'' が呼び出される
* ''object'' を省略した場合は、~UseMethod() をコールした関数の第一引数のクラス名がチェックされる
* ~UseMethodはある関数の内部からだけ呼び出すことができる (らしい)
* ~UseMethod が呼び出した関数は、~UseMethod を呼び出した関数の環境にはアクセスできるっぽい (コピーしてる??)
<<<
メソッドが一旦決定されるとRはそれを特殊な方法で起動する。新しい評価環境をつくり出す代わりにRは現在の関数呼び出し(総称的関数への呼び出し)の環境を使う。UseMethodの呼び出しに先立って行われた如何なる代入・評価も無効になる。総称的関数への呼び出しに使われた引数は選ばれたメソッドの形式的引数と再照合される。
メソッドが起動されると、それは総称的関数への呼び出しにおけるのと同じ個数・名前を持つ引数でよびだされる。それらはメソッドの引数とRの標準的照合手順にしたがって照合される。しかしながら、オブジェクト、つまり最初の引数は既に評価済みである。
...
UseMethodへの呼び出しに先だって評価された総称的関数への任意の引数は評価済みとされるであろう。
<<<
https://cran.r-project.org/doc/contrib/manuals-jp/R-lang.jp.v110.pdf
上記の記述は、「R の Help に書かれた詳細」と少し食い違うような気もする。
<<<
Now for some obscure details that need to appear somewhere. These comments will be slightly different than those in Chambers(1992). (See also the draft ‘R Language Definition’.) UseMethod creates a new function call with arguments matched as they came in to the generic. Any local variables defined before the call to UseMethod are retained (unlike S). Any statements after the call to UseMethod will not be evaluated as UseMethod does not return. UseMethod can be called with more than two arguments: a warning will be given and additional arguments ignored. (They are not completely ignored in S.) If it is called with just one argument, the class of the first argument of the enclosing function is used as object: unlike S this is the first actual argument passed and not the current value of the object of that name.
<<<
!! 総称関数の利用例
```r
g <- function(x) {
x <- 10
y <- 10
UseMethod("g")
}
g.default <- function(x) c(x = x, y = y)
x <- 1
y <- 1
g(x)
#> x y
#> 1 10
```
https://adv-r.hadley.nz/s3.html
!! ~NextMethod
この例が比較的分かりやすいと思う。
<<<
```r
# I create an object with 2 classes attributes (inheritance) 'first' and 'second'.
x <- 1
attr(x,'class') <- c('first','second')
# Then I create a generic method Cat to print my object
Cate <- function(x,...)UseMethod('Cate')
# I define Cate method for each class.
Cate.first <- function(x,...){
print(match.call())
print(paste('first:',x))
print('---------------------')
NextMethod() ## This will call Cate.second
}
Cate.second <- function(x,y){
print(match.call())
print(paste('second:',x,y))
}
# Now you can can check Cate call using this example:
Cate(x,1:3)
# Cate.first(x = x, 1:3)
# [1] "first: 1"
# [1] "---------------------"
# Cate.second(x = x, y = 1:3)
# [1] "second: 1 1" "second: 1 2" "second: 1 3"
```
<<<
https://stackoverflow.com/questions/20932491/the-inner-workings-of-nextmethod
----
https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/UseMethod
<<<
The following table describes the possible values returned by ''typeof'' and what they are.
```
"NULL" NULL
"symbol" a variable name
"pairlist" a pairlist object (mainly internal)
"closure" a function
"environment" an environment
"promise" an object used to implement lazy evaluation
"language" an R language construct
"special" an internal function that does not evaluate its arguments
"builtin" an internal function that evaluates its arguments
"char" a ‘scalar’ string object (internal only) ***
"logical" a vector containing logical values
"integer" a vector containing integer values
"double" a vector containing real values
"complex" a vector containing complex values
"character" a vector containing character values
"..." the special variable length argument ***
"any" a special type that matches all types: there are no objects of this type
"expression" an expression object
"list" a list
"bytecode" byte code (internal only) ***
"externalptr" an external pointer object
"weakref" a weak reference object
"raw" a vector containing bytes
"S4" an S4 object which is not a simple object
```
Users cannot easily get hold of objects of types marked with a ‘***’.
Function ''mode ''gives information about the mode of an object in the sense of Becker, Chambers & Wilks (1988), and is more compatible with other implementations of the S language. Finally, the function ''storage.mode'' returns the storage mode of its argument in the sense of Becker et al. (1988). It is generally used when calling functions written in another language, such as C or FORTRAN, to ensure that R objects have the data type expected by the routine being called. (In the S language, vectors with integer or real values are both of mode "numeric", so their storage modes need to be distinguished.)
<<<
[[R Language Definition - Objects|https://cran.r-project.org/doc/manuals/r-release/R-lang.html#Objects]]
標本データから確率密度関数を推定する方法。
この方法では、ある点 x における確率密度は、x と各標本データ(X,,i,,) の距離(ノルム)を基に推定される。また、通常、距離に対して何らかの重みづけを加える。
関数 K() を重み付けの処理、h を重み付けにおけるチューニングパラメータとすると、上記の推定は次のような式で表すことができる。
:$$\displaystyle \hat{f} (x) = \dfrac{1}{n} \sum_{i=1}^n K_h (x - X_i; h) = \dfrac{1}{n} \dfrac{1}{h}\sum_{i=1}^n K \left( \dfrac{x - X_i}{h} \right)$$
K(), h の具体的な形式については、以下にいくつかの例を示す。
; Gaussian kernel
$$\ \ \ \ \ \ K_h(y;h) \propto \exp(- \dfrac{y^2}{2h^2})$$
; Tophat kernel
$$\ \ \ \ \ \ K_h(y;h) \propto 1$$ if $$y < h$$
[[2.8. Density Estimation — scikit-learn 0.23.2 documentation|https://scikit-learn.org/stable/modules/density.html]]
----
----
$$\displaystyle \hat{f} (x) = \dfrac{1}{n} \cdot \dfrac{1}{h} \sum_{i=1}^n K \left( \dfrac{x - X_i}{h} \right) $$
; バンド幅の選び方
バンド幅の選び方に絶対的な方法はないが,ひとつの目安として:
$$ h = \dfrac{0.9 \sigma}{n^{1/5}}$$
が用いられる。ここで,$$\sigma$$ は標準偏差と四分位範囲のいずれか小さい方である。
[[カーネル密度推定 アイデアと計算方法|http://www.agu.ac.jp/~nomura/lecture/archive/kd.pdf]]
----
* [[第九回目「ノンパラメトリック密度推定法」|http://www.is.titech.ac.jp/~s-taiji/lecture/2015/dataanalysis/L9.pdf]]
* https://qiita.com/donmai/items/c3a5adaf1cbab4512ccb
* [[カーネル密度推定からその後:ksパッケージ|http://kusanagi.hatenablog.jp/entry/2015/06/12/234951]]
<<list-links filter:[tag[R_データ]] >>
<<tag 'R言語'>>
! R での定義
内部的な取り扱いは、決められた属性 (''names, row.names, class'') が付加されたリスト (List) だが、多くの場面では「ラベルの付いた全ての要素がスカラーである二次元配列」と見なして問題ないと思う。
内部的には、''class 属性に "data.frame" という値が割り当てられ''、このクラスに対する (言語側が用意した) 総称関数によって、データフレームの動作は実現されている
* なので、正確に言えば Data Frame 型 というのは存在しない。
** typeof() の戻り値は "list"
* より正確に言うならば、 「''a list of vectors of equal length''」となる。
** ゆえに、 Matrix とは異なり、列 (Column) ごとにデータのプリミティブ型が異なってもよい。
```r
d <- data.frame(x=7:10, y=c("a", "b", "c", "d"))
typeof(d) ## list
attributes(d)
## $names
## [1] "x" "y"
## $class
## [1] "data.frame"
## $row.names
## [1] 1 2 3 4
```
----
! 操作
!! 添字操作
データフレーム (Data Frame) の添字操作は、リスト (list) の場合と少し異なる。これは、 [ や $ が総称関数となっており、データフレームとリストでは、実際の処理が異なるためである。
* 実体が List なのに Matrix っぽく扱えるのは、この仕組みをおかげ。
```r
d['x']; d[2,'y']; d[3,2:3]
d$x
```
<<<
3.4.3 他の構造の添字操作
演算し [ は総称的な関数であり、クラス毎にメソッドを加えることができ、演算し $ と [[ も同様である。任意の構造に対しユーザー定義の添字演算子を定義することができる。そうした関数、例えば [.foo、は幾つかの引数を持ち、その最初は添字処理される構造であり、残りは添字である。$ の場合は添字引数は x$"abc" 形式を使う場合もモード "symbol" を持つ。
ユーザー定義の添字演算の最も重要な例はデータフレームに対するものである。ここで詳しく述べることはしないが、広い意味で、基本的に同じ長さのベクトルからなるリストである構造に対する行列風の添字操作を定義できる。
<<<
https://cran.r-project.org/doc/contrib/manuals-jp/R-lang.jp.v110.pdf
!! 要素の追加
; 列の追加 (破壊的)
```r
d$a = 1:4
d$b = c("A", "B", "C", "D")
d
```
!! cbind(), rbind()
cbind(), rbind() は データフレームを引数に取ることができる。
内部的には、cbind(), rbind() は総称関数で、 cbind.data.frame(), rbind.data.frame() という関数が用意されている。
---
```r
# 欠損値を除去します
na.omit(df)
```
[[欠損値 Rの非数値の取り扱い方,NULL,NA,NaN,Infの除外と置換|https://stats.biopapyrus.jp/r/basic/nan.html]]
----
; 指定した列(column)の値に従って、データを並び替える。
```r
orderBy = function(df, colName, decreasing=FALSE) {
df[order(df[,colName], decreasing=decreasing),]
}
```
! リファレンス
* [[Welcome! - R Packages|https://r-pkgs.org/index.html]]
* [[R package workshop|https://combine-australia.github.io/r-pkg-dev/]]
-
* [[Chapter 4 Package structure and state - R Packages|https://r-pkgs.org/package-structure-state.html]]
* https://bookdown.org/yutannihilation/practical-r-package-development-ja/
-----
! ファイル・ディレクトリ構成
* ''DESCRIPTION''
** モジュールの基本情報が書かれたファイル
** (見た目に反して) きちんと書かないとビルドできなかったりする
** 他のモジュールへの依存関係などもここに書かれる
* ''NAMESPACE''
** メソッドのインポート・エクスポートの設定
** devtool を使っている場合は、ソースコードのコメントから自動生成される
* ''R/''
** モジュールのソースコード (*.R) をいれるディレクトリ
** devtool を使っている場合は、Roxygen2形式で (exportする)メソッドのコメントを書く必要がある
* ''man/*.Rd''
** モジュールのヘルプの元となるファイル
** devtool を使っている場合は、ソースコードのコメントから自動生成される
* ''src/''
** cpp のコードがある場合は、ここに入れる
* ''data/''
* ''data-raw/''
* .Rbuildignore
** devtool::document() で無視するファイルやフォルダを指定するファイル
* test/testthat/
** テストコード (*.R) を入れるディレクトリ
* LICENSE
----
! コマンド例
以下のコマンドは、RStudio 上で devtool を使う場合を想定したもの。
!! プロジェクトの作成
<<<
{devtools}パッケージにはパッケージのテンプレート(ひな形)が同梱されています。これをコピーするために、作業ディレクトリで ''devtools::create(".")'' もしくは ''devtools::setup()'' を実行してください。
<<<
https://qiita.com/wakuteka/items/54f81f32baf50e243461
!! ビルド
```r
devtools::document() # R/*.R から NAMESPACE や man/*.Rd などを自動生成する
devtools::check()
devtools::build()
install.packages("package_0.1.0.tar.gz", repos = NULL, type = "source")
library("package")
```
!! Help の確認
Help はソースコード中の Roxygen2 形式のコメントから自動生成される。
* [[Roxygen2]]
```r
help(method_name)
?method_name
```
!! Test
テストコードのフォルダとテンプレートを自動生成する。
```r
usethis::use_test("package_name")
```
```r
usethis::use_testthat()
```
* https://combine-australia.github.io/r-pkg-dev/testing.html
* https://r-pkgs.org/tests.html
!! Vignette
```r
usethis::use_vignette("my-vignette")
devtools::build_vignettes()
devtools::clean_vignettes()
```
[[Chapter 11 Vignettes: long-form documentation - R Packages|https://r-pkgs.org/vignettes.html]]
- - -
https://qiita.com/wakuteka/items/54f81f32baf50e243461
----
! Github
```r
# install a package from Github
# install.packages("remotes")
remotes::install_github("username/repositoryname")
```
https://github.com/r-lib/remotes#installation)%EF%BC%8E
https://blog.atusy.net/2019/02/07/stand-alone-remotes-install-github/
----
* https://stats.biopapyrus.jp/r/devel/packging.html
* https://sites.google.com/site/scriptofbioinformatics/r-tong-ji-guan-xi/rnopakkeji-kai-fanitsuite-r
* http://blog.hackingisbelieving.org/2012/01/r-devtools-testthat-roxygen.html
---
<<<
Warning: The existing 'NAMESPACE' file was not generated by roxygen2, and will not be overwritten.
<<<
```
Just keep the # Generated by roxygen2: do not edit by hand line at the top then.
```
https://github.com/r-lib/devtools/issues/1466
----
```r
devtools::document()
devtools::load_all()
help(PACKAGE_NAME)
```
<<tag 'R言語'>>
! R での定義
プログラミング言語的な言い方をすると、「''全ての要素がスカラーである一次元配列''」といった感じ。
* 要素が Boolean や String が要素でも、ベクトルとして扱われる。
* 要素数が一つでも、ベクトルとして扱われる。
```r
# 全て TRUE が返ってくる
is.vector(1:3)
is.vector( c(TRUE, FALSE) )
is.vector("a")
```
''ベクトルの構成要素'' として次の 6つの atomic タイプが定義されており、ベクトルには 「''構成要素の全てが「同じ型」でなければならない''」 という制約がある。また、 [[typeof()|R_typeof]] 関数は、この ''構成要素の型'' を返す。
# logical (TRUE or FALSE)
# integer
# double
# complex
# character
# raw
ただ、c() 関数で複数の型を混在させて指定した場合、自動的に型変換が行われるので、この制約に気づかないことがある。
; 自動的な型変換の注意点
* Boolean だと ''「TRUE = 1, FALSE =0」に暗黙的に変換される''。
* String を要素に含むベクトルを四則演算しようとすると、エラーが発生する。
!! リファレンス
* https://www.datamentor.io/r-programming/vector/
----
! ベクトルの操作
!! ベクトルの作成
; 最も基本的な方法
```r
c(-4 , TRUE, "a", FALSE, 5, "bbbb")
```
; 要素が数字の場合
```r
1:10*0.2 # 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0
1:10*3+1 # 4 7 10 13 16 19 22 25 28 31
seq(1, 20, by=5) # 等差数列 1 6 11 16
seq(1,5, length.out=9) # 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 (N-1 等分される)
rep(1:3, times=3) # c(1,2,3) 全体を 3 回繰り返す
rep(1:3, each=3) # c(1,2,3) の各要素を 3 回ずつ繰り返す
```
* [[ベクトルの自動生成 - R言語と統計処理を勉強する日記 |http://d.hatena.ne.jp/rynak/20110201/1296533920]]
; ラベルの追加
```r
p <- c(3, 5, 8)
names( p ) <- c("x", "y", "z")
p["x"] # 3
```
- - - - -
!! 基本的なアクセス方法
; 必要な項目だけ取り出す
```r
x <- c(10, 20, 30, 40, 50, 60)
x[3:5] # 30 40 50
x[3:length(x)] # 30 40 50 60 (最後の要素まで)
x[c(1,3,4)] # 10 30 40
head(x, 3) # 10 20 30
tail(x, 2) # 50 60 (指定した数の要素を末尾から)
x[x %% 3 == 0] # 30 60 (条件に合う要素)
```
; 条件に合う要素の位置を取り出す
```r
y <- c(11, 12, 13, 14, 15, 16)
which(y > 12) # 3 4 5 6
which.max(y) # 6
which.min(y) # 1
```
- - - - -
!! ベクトルの編集 (非破壊的)
; いらない要素を取り除く
```r
c(11, 12, 13, 14, 15, 16)[-1] # 12 13 14 15 16 (最初の要素を取り除く)
c(11, 12, 13, 14, 15, 16)[-2:-4] # 11 15 16
c(11, 12, 13, 14, 15, 16)[c(-2,-5)] # 11 13 14 16
```
; ベクトルの連結
```r
x1 <- c(1, 2)
x2 <- c(30, 40, 50)
n <- 600
c(x1, x2, n, 7000) # 1 2 30 40 50 600 7000
append(x1, x2) # 1 2 30 40 50 (単純に連結)
append(x1, x2, after=1) # 1 30 40 50 2 (ベクトルの途中に値を挿入)
```
; 値の変更 (非破壊的)
```r
z <- c(10, 20, 30, 40, 50, 60)
replace( z, 2:4, 0 ) # 10 0 0 0 50 60
replace( z, 2:4, c(2,3,4) ) # 10 2 3 4 50 60
replace( z, 1:4, c(11,22) ) # 11 22 11 22 50 60
replace( z, z<50, c(11, 12, 13, 14) ) # 11 12 13 14 50 60
```
; ベクトルの反転
```r
rev( c(10, 20, 30) ) # 30 20 10
```
; ソート
```r
sort( c(3,5,2,1,4) ) # 1 2 3 4 5
sort( c(3,5,2,1,4), decreasing=TRUE ) # 5 4 3 2 1
```
; 重複する要素を取り除く
```r
unique( c(10:5, 6:12)) # 10 9 8 7 6 5 11 12
```
- - - - -
!! ベクトルの編集 (破壊的)
; 値の変更 (破壊的)
```r
z <- c(10, 20, 30, 40, 50, 60)
z[2:4] <- 0 # 10 0 0 0 50 60
z[2:4] <- c(2,3,4) # 10 2 3 4 50 60
z[1:4] <- c(1,2) # 1 2 1 2 50 60
z[z<50] <- c(11, 12, 13, 14) # 11 12 13 14 50 60
```
----
! ベクトルの計算
```r
# 足し算
1:3 + c(10, 20, 30) # 11 22 33
# 定数倍
100 * 4:6 # 400 500 600
# 内積
mat <- 1:3 %*% c(1, 10, 100)
mat # 結果は行列で返ってくるので注意
drop(mat) # ベクトルへの変換
```
```r
# テンソル積
1:3 %o% c(1, 10, 100)
# [,1] [,2] [,3]
# [1,] 1 10 100
# [2,] 2 20 200
# [3,] 3 30 300
# 直積
grid.expand(1:3, 7:9)
```
----
! 統計量などの計算
```r
sum(X) # 総和
prod(X) # 総乗
mean(X) # 算術平均
median(X) # 中間値
max(X) # 最大
min(X) # 最小
var(X) # 分散 (the denominator 'n-1' is used)
sd(X) # 標準偏差 (the denominator 'n-1' is used)
```
; 累積和を求める
```r
cumsum( c(1, 2, 30, 40, 50) ) # 1 3 33 73 123
cummax(X)
cummin(X)
cumsum(X)
cumprod(X)
```
; 高階関数
```r
sapply(v, f)
```
! R での定義
プログラミング言語的な言い方をすると、「''参照(ポインタ)を要素として持つことができる一次元配列''」といった感じ。
* 要素として他の list への参照を持つことができるので、list の list といったデータを作成することもできる。
* ベクトル (Vector) とは異なり、''リスト (list) では構成要素の型は同じでなくてよい''。
** [[R/言語仕様/BasicType]]
---
! 要素へのアクセス
参照を含むリストの場合、要素へのアクセス方法が行列やArrayの場合とは異なる。
```r
l <- list(a = 1:3, b=c("a", "b", "c"))
l[1,2] # error
l[[1,3]] # error
l[1][2] # error
l[[2]][1]
l$b[2]
```
特に、一重括弧と二重括弧の挙動の違いに注意。
* 一重括弧の場合 (例: l[1:3]) 、返ってくるのはリストになる (この例の場合 要素数 3 のリストが返ってくる)。
<<<
For lists, one generally uses [[ to select any single element, whereas [ returns a list of the selected elements.
The [[ form allows only a single element to be selected using integer or character indices, whereas [ allows indexing by vectors. Note though that for a list or other recursive object, the index can be a vector and each element of the vector is applied in turn to the list, the selected component, the selected component of that component, and so on. The result is still a single element.
The form using $ applies to recursive objects such as lists and pairlists. It allows only a literal character string or a symbol as the index. That is, the index is not computable: for cases where you need to evaluate an expression to find the index, use x[[expr]]. Applying $ to a non-recursive object is an error.
<<<
https://cran.r-project.org/doc/manuals/r-release/R-lang.html#Indexing
----
! 要素の追加
''c() 関数を使うのが、最もシンプル''。 c() はベクトルだけでなく、リストにも対応している。
<<<
;Details
The output type is determined from the highest type of the components in the hierarchy ''NULL < raw < logical < integer < double < complex < character < list < expression''. Pairlists are treated as lists, whereas non-vector components (such names and calls) are treated as one-element lists which cannot be unlisted even if recursive = TRUE.
<<<
```r
## append to a list:
ll <- list(A = 1, c = "C")
## do *not* use
c(ll, d = 1:3) # which is == c(ll, as.list(c(d = 1:3)))
## but rather
c(ll, d = list(1:3)) # c() combining two lists
c(list(A = c(B = 1)), recursive = TRUE)
```
リストにリストを追加する際は、追加する要素を list() 関数で囲む必要あり。
```r
x <- list(1:10) # 要素がひとつ(整数 10 個のベクトル)のリスト
y <- 11:20 # 整数が10個のベクトル
x <- c(x, list(y)) # リスト x の後ろに y を追加したリストを x に上書き
```
http://takenaka-akio.org/doc/r_auto/list.html
http://www.r-tutor.com/r-introduction/list
要素型
<<<
;Description
The function ''factor'' is used to encode a vector as a factor (the terms ‘category’ and ‘enumerated type’ are also used for factors). If argument ordered is TRUE, the factor levels are assumed to be ordered. For compatibility with S there is also a function ordered.
;Usage
```r
factor(x = character(), levels, labels = levels,
exclude = NA, ordered = is.ordered(x), nmax = NA)
```
|x |a vector of data, usually taking a small number of distinct values. |
|levels |an optional vector of the unique values (as character strings) that x might have taken. The default is the unique set of values taken by as.character(x), sorted into increasing order of x. Note that this set can be specified as smaller than sort(unique(x)). |
|labels |either an optional character vector of labels for the levels (in the same order as levels after removing those in exclude), or a character string of length 1. Duplicated values in labels can be used to map different values of x to the same factor level. |
|exclude |a vector of values to be excluded when forming the set of levels. This may be factor with the same level set as x or should be a character. |
|ordered |logical flag to determine if the levels should be regarded as ordered (in the order given). |
|nmax |an upper bound on the number of levels; see ‘Details’. |
|... |(in ordered(.)): any of the above, apart from ordered itself. |
|ifany |only add an NA level if it is used, i.e. if any(is.na(x)). |
<<<
----
! データの作成
factor() を使って、文字列のベクトルから作成する。
```r
group_str <- c("A","A","A","A","B","B","B","B","C","C","C","C","D","A")
group <- factor(group_str)
```
- - - - - - - - - - - - - - - - - - - -
!! 順序つき因子
'''ordered = TRUE''' を付けると、要素に順序をつけることができる。
```r
group_o <- factor(group_str, ordered = TRUE)
group_o <= "B"
# [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE TRUE
```
- - - - - - - - - - - - - - - - - - - -
!! levels, labels の使い方
作成するデータに含まれないラベルも定義しておきたい時は、 ''levels'' を使う。
```r
group2 <- factor(group_str, levels = c("A","B","C","D","Z"))
group2[1] <- "Z"
```
異なるラベルを同じものとしてまとめたい時は、''labels'' を使う。
```r
x <- c("Man", "Male", "Man", "Lady", "Female")
## Map from 4 different values to only two levels:
(xf <- factor(x, levels = c("Male", "Man" , "Lady", "Female"),
labels = c("Male", "Male", "Female", "Female")))
xf
levels(xf)
```
----
! データの確認方法
```r
group # A A A A B B B B C C C C D A
levels(group) # "A" "B" "C" "D"
summary(group)
# A B C D
# 5 4 4 1
class(group) # "factor"
```
; 内部のデータ構造
実体は整数のベクトルで、整数の値と要素名の対応付けを行うための属性 (levels) を持っている。
```r
typeof(group)
# [1] "integer"
as.integer(group)
# [1] 1 1 1 1 2 2 2 2 3 3 3 3 4 1
attributes(group)
# $levels
# [1] "A" "B" "C" "D"
# $class
# [1] "factor"
```
----
* [[R言語のファクターの異常な分かり難さは、冗談か嫌がらせか - 檜山正幸のキマイラ飼育記 (はてなBlog)|http://m-hiyama.hatenablog.com/entry/20151215/1450140312]]
! 演算子
<<<
```
- Minus, can be unary or binary
+ Plus, can be unary or binary
! Unary not
~ Tilde, used for model formulae, can be either unary or binary
? Help
: Sequence, binary (in model formulae: interaction)
* Multiplication, binary
/ Division, binary
^ Exponentiation, binary
%x% Special binary operators, x can be replaced by any valid name
%% Modulus, binary
%/% Integer divide, binary
%*% Matrix product, binary
%o% Outer product, binary
%x% Kronecker product, binary
%in% Matching operator, binary (in model formulae: nesting)
< Less than, binary
> Greater than, binary
== Equal to, binary
>= Greater than or equal to, binary
<= Less than or equal to, binary
& And, binary, vectorized
&& And, binary, not vectorized
| Or, binary, vectorized
|| Or, binary, not vectorized
<- Left assignment, binary
-> Right assignment, binary
$ List subset, binary
```
<<<
https://cran.r-project.org/doc/manuals/r-release/R-lang.html#Operators
----
; %in% の使い方
ベクトル a の各要素が、ベクトル b に含まれているかを調べる。
```r
# sequence of numbers 1:
a <- seq(1, 5)
# sequence of numbers 2:
b <- seq(3, 12)
# using the %in% operator to check matching values in the vectors
a %in% b
```
https://www.marsja.se/how-to-use-in-in-r/
<div class="tc-table-of-contents">
<<toc-selective-expandable 'R_言語仕様'>>
</div>
----
! リファレンス
<<tag 'R言語''>>
! R での定義
内部的な取り扱いは、次元に関する属性 (''dim'') が付加されたベクトル (Vector) だが、多くの場面では「''全ての要素がスカラーである二次元配列''」と見なして問題ないと思う。
* なので、正確に言えば Matrix 型 というのは存在しない。
* ベクトルと同様、 ''構成要素の全てが「同じ型」でなければならない'' ことには注意
```r
m <- matrix(1:12, 3)
attributes(m) # $dim 3 4
class(m) # "matrix"
typeof(m) # "integer"
c(is.matrix(m), is.vector(m)) # TRUE FALSE
c(is.integer(m), is.double(m)) # TRUE FALSE
```
---
! 基本的な操作
!! ''行列の作成''
```r
matrix(1:12, 3)
matrix(1:12, ncol=4)
cbind(1:3, 4:6, 7:9, 10:12)
rbind(c(1,4,7,10), c(2,5,8,11), c(3,6,9,12))
```
| 1 | 4 | 7 | 10 |
| 2 | 5 | 8 | 11 |
| 3 | 6 | 9 | 12 |
```r
matrix(1:12, ncol=4, byrow=TRUE)
matrix(1:12, 3, byrow=TRUE)
```
| 1 | 2 | 3 | 4 |
| 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 |
```r
f <- function(x, y) {
x_ <- x
f_ <- function(y) { x_ * y }
sapply(y, function(y) { sapply(y, f_) } )
}
f(5:7, 1:4)
# contour(5:7, 1:4, f(5:7, 1:4))
```
| 5 | 10 | 15 | 20 |
| 6 | 12 | 18 | 24 |
| 7 | 14 | 21 | 28 |
!! ''必要な項目を取り出す''
```r
mat <- matrix(1:12, 3)
mat[2,3] # 8 (2行目3列目)
mat[1,] # 1 4 7 10 (1行目)
mat[2:3,] # (2行目 と 3行目)
mat[c(1,3),] # (1行目 と 3行目)
mat[2:nrow(mat),] # (2行目から最後の行まで)
mat[, 1:3] # (1列目 ~ 3列目)
mat[,2:ncol(mat)] # (2列目から最後の列まで)
mat[2:3, c(2,4)] # (2行目・3行目 の 2列目と4列目の要素)
```
!! ''行列の編集''
; 行列の結合
```r
cbind( matrix(1:6,2), matrix(7:10*10,2) ) # 横方向に結合
rbind(( matrix(1:6,2), matrix(7:10*10,2) ) # 縦方向に結合
```
; 転置行列 (行と列の入れ替え)
```r
mat <- matrix(1:12, 3)
t(mat)
```
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |
| 10 | 11 | 12 |
; 行列を反転
```r
mat <- matrix(1:12, 3)
mat[nrow(mat):1,]
mat[,ncol(mat):1]
```
----
; 足し算
```r
mat <- matrix(1:12, 3)
# 列単位の足し算
f2 <- function(x) { x + c(100, 200, 300) }
apply(mat, 2, f2)
```
; 行列の積
```r
matrix(1:4, 2) %*% matrix(c(1, 10, 100, 1000), 2)
```
| 1 | 3 | ・ | 1 | 100 | = | 1+30 | 100+3000 |
| 2 | 4 |~| 10 | 1000 |~| 2+40 | 200+4000 |
----
;値の変更 (破壊的)
```r
m <- matrix(1:12, 3)
bm <- cbind(c(T,T,T), c(T,T,T), c(T,F,F), c(T,F,T))
m[which(bm)] <- 99
```
<<slider tocSlider 行列 行列>>
; 行の統計量
```r
mat <- matrix(1:12, 3)
# 基本的なものについては、専用の関数が用意されている
rowSums(mat) # 合計 22 26 30
rowMeans(mat) # 算術平均 5.5 6.5 7.5
# 専用の関数が無いものについては、高階関数を使用する
apply(mat,1,max) # 最大値 10 11 12
apply(mat,1,var) # 不偏分散 (n-1 で割る) 15 15 15
apply(mat,1,sd) # 不偏標準偏差 (n-1 で割る) 3.872983346207417 3.872983346207417 3.872983346207417
```
| 1 | 4 | 7 | 10 |
| 2 | 5 | 8 | 11 |
| 3 | 6 | 9 | 12 |
R の標準ライブラリには、以下の高階関数が含まれている。
<<<
The apply() functions form the basis of more complex combinations and helps to perform operations with very few lines of code. More specifically, the family is made up of the ''apply()'', ''lapply()'' , ''sapply()'', ''vapply()'', ''mapply()'', ''rapply()'', and ''tapply()'' functions.
<<<
https://www.datacamp.com/tutorial/r-tutorial-apply-family#family
- - - - -
; ざっくりした区分け
* Array・行列
** apply()
* ベクトル・リスト
** lapply(), sapply(), vapply()
* ベクトル・リスト (multivariate version of sapply)
** mapply()
* tapply()
*
----
! apply()
''Array・行列 に対する高階関数''。データフレームに対しても利用可能。
3つの引数を取り、各引数の意味は以下の通り。
```r
# X: Array または 行列
# MARGIN: 適用する関数へのデータの渡し方 (行列の場合: 1 - 各行のデータ, 2 - 各列のデータ)
# FUN: 適用する関数
apply(X, MARGIN, FUN)
```
!! 補足
第一引数 ''X'' は、dim(X) が正しく次元を返すオブジェクトであれば、Array・行列でなくても実行可能。
第二引数の ''MARGIN'' は、正確には、テンソルの添え字の位置を指定する。
* 行列 $$A_{ij}$$ を例にすると、 "MARGIN = 1" なら $$(A_{i1} \ \cdots \ A_{ij})$$ のデータを引数にして FUN を (i回) 呼び出す。
第三引数 ''FUN'' は、ベクトル (要素数が2以上) を返す関数でもよい。
''関数の戻り値'' のフォーマットは、 ''X'' と ''FUN''(の戻り値) によって変わる。
!!関数の処理:
* 第二引数 (MARGIN) が 1 なら各行を、第二引数が 2 なら各列を、引数にして、指定した関数 (FUN) を呼び出す。
** 関数は複数回呼び出される。
* FUN の戻り値をまとめて、呼び出しもとに返す。
!! サンプルコード:
```r
mat <- matrix(1:12, ncol=4)
apply(mat,1,max) # 10 11 12 (各行の最大値)
apply(mat,2,max) # 3 6 9 12 (各列の最大値)
apply(mat,1,cumsum) # ベクトルを返す関数を指定した場合
apply(mat,2,cumsum)
```
| 1 | 4 | 7 | 10 |
| 2 | 5 | 8 | 11 |
| 3 | 6 | 9 | 12 |
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
! mapply()
[[Colebrook Equation]] 参照
! lapply()
''リスト・データフレーム・ベクトルに対する高階関数''。
指定したデータの各要素を引数にして関数を呼び出す。リストの場合には任意のオブジェクトを要素に取れるので、関数に渡される引数には自由度がある (データフレームはリストの拡張)。
```r
# X: リスト・データフレーム・ベクトル など
# FUN: 適用する関数
lapply(X, FUN, ...)
```
戻り値の形式は、リストになる。
行列を引数にした場合は、1次元のベクトルとして扱われるみたい (結果は、行×列の長さのリストで返ってくる)。
!! サンプルコード:
```r
x <- list(a = 1:10, beta = exp(-3:3), logic = c(TRUE,FALSE,FALSE,TRUE))
# compute the list mean for each list element
lapply(x, mean)
```
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
! sapply()
''lapply() のラッパー関数''。情報の損失が発生しない範囲で、戻りの型を(リストから)行列・ベクトルに自動で変換する。
* リストの各要素数が同じ場合: ⇒ 行列に変換
* 要素数が1の場合: ⇒ ベクトルに変換
<<<
sapply関数から返ってくるデータ型はベクトルか行列もしくはリストで、状況に応じて変わるよ。可能なら、ベクトルか行列を優先して返す仕様みたいだよ。
<<<
https://momonoki2017.blogspot.com/2018/05/r012-sapply.html
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-----
----
; 行列になっていない場合
```r
# 複数のベクトルの場合であれば、 cbind, rbind で結合してから apply を適用
mat <- cbind(1:3, 4:6, 7:9, 10:12)
apply(mat,1,mean) # 5.5 6.5 7.5 (各行の平均値)
```
----
; ベクトルの各要素を引数にとる場合
```r
mapply(sum, 1:3, 1:3*10) # 11, 22, 33
```
----
https://www.guru99.com/r-apply-sapply-tapply.html
```r
f <- function(x) { if (x > 10) { return (x*10) }; return (x) }
sapply(c(3, 10, 15, 20), f) # 3 10 150 200
```
Rには日付(date)を表すためのクラス ''Date'' と,日付時分秒(date-time)を表すためのクラス ''POSIXct'', ''POSIXlt'' がある。
* Date (日付のみ、時刻は扱えない)
** 1970-1-1からの日数
** 内部的には実数で表現されるが,表示の際は整数値とされる
* POSIXct
** エポック秒
** 内部では秒単位の整数
* POSIXlt
** 日付の各項目を名前つきリストで持っている
ただし、 Date クラスが扱えるのは日付だけで、時刻は扱えない。そのため、時刻を扱う際は、''POSIXct'', ''POSIXlt'' を用いる。
----
! POSIXct
実体が整数なので、まとめてデータを処理する際は、POSIXlt よりも圧倒的に扱いやすい。
!! オブジェクトの作成
as.POSIXct() を用いるのが、一般的みたい。フォーマットを指定する場合は、''locale を設定していないとうまく変換できないことがある'' ので注意。理由はおそらくこれだと思う。
* [[Rを日本語Windowsで使うときにアクセント付きのローマ字を扱う方法 - Colorless Green Ideas|https://id.fnshr.info/2015/05/03/r-windows-accent/]]
```r
# 文字列 ⇒ POSIXct
as.POSIXct("2011-03-20 12:34:56")
# タイムゾーンの指定
as.POSIXct("2011-03-20 12:34:56", tz="America/Los_Angeles")
# デフォルトと異なる場合は、変換する文字列のフォーマットを指定する
# locale を設定しないと、何故か as.POSIXct() の戻り値が NA になってしまう
Sys.setlocale(locale="C")
as.POSIXct("2008-04-06 10:11:01 PM", format = "%Y-%m-%d %I:%M:%S %p")
# Sys.time() が返すのも POSIXct オブジェクト
Sys.time()
```
!! オブジェクトのフォーマット
仕様に関するドキュメントが見つからないが、実装としてはこんな感じみたい。
* attributes() で確認すると、POSIXct は ''class'' と ''tzone'' の属性を持っている。
** ''class'' には ''POSIXct'' と ''POSIXlt'' の両方が設定されている
** ''tzone'' に有効な値が設定されていない場合は、必要に応じて Sys.timezone() が使われているみたい
* 実体に関しては、typeof() だと double が返る (小数を扱うことはあるのか??)。
```r
attributes(as.POSIXct("2011-03-20 12:34:56"))
# $class
# [1] "POSIXct" "POSIXt"
# $tzone
# [1] ""
typeof(as.POSIXct("2011-03-20 12:34:56"))
# [1] "double"
```
- - - - -
! POSIXlt
!! オブジェクトの作成
```r
# 文字列をPOSIXltオブジェクトへ変換 (読み込む文字列のフォーマットを、第2引数で指定)
strptime("1990/1/2 10:20'30", "%Y/%m/%d %H:%M'%S", tz="")
# もしくは
as.POSIXlt("2011-03-20 12:34:56")
```
----
* [[POSIXctとPOSIXltの違い|http://d.hatena.ne.jp/kkobayashi_a/20080807/p1]]
* [[時系列データのプロット[R] (「おんどとり」を例にした解説)|http://anchoret.seesaa.net/article/110002044.html]]
* [[日付、時間関数Tips大全 - RjpWiki |http://www.okadajp.org/RWiki/?%E6%97%A5%E4%BB%98%E3%80%81%E6%99%82%E9%96%93%E9%96%A2%E6%95%B0Tips%E5%A4%A7%E5%85%A8]]
* http://biostat.mc.vanderbilt.edu/wiki/pub/Main/ColeBeck/datestimes.pdf
----
aperm
```
as.POSIXct(100, origin="1970-01-01", tz="GMT") # in UTC
```
lm() 関数を使う。
```r
x <- 1:5
y <- c(2,5,7,10,11)
result <- lm(y~x)
plot(x,y, xlim=c(0,5), ylim=c(0, 15))
abline(result)
summary(result)
```
戻り値はリストになっており、分析結果の情報が入っている。
|coefficients |切片, 傾き |
|residuals |残差 |
; ref
```r
slope <- result$coefficients[2]; intercept <- result$coefficients[1]
# Residual standard error
N <- length(x)
err <- y - (intercept + slope * x)
var_err <- sum(err^2) / (N - 2)
sprintf("Residual standard error: %f", sqrt(var_err))
```
----
! 信頼区間と予測区間
predict() 関数を使う。
```r
# 区間を計算する点(x軸の値)を指定するためのリスト
# (リストで渡さないとダメみたい)
nd <- list(x= seq(1, 5, 0.2))
# 予測区間
rp <- predict(result, newdata=nd, interval="prediction")
lines(nd$x, rp[,"lwr"], lty=3)
lines(nd$x, rp[,"upr"], lty=3)
# 信頼区間
rc <- predict(result, newdata=nd, interval="confidence")
lines(nd$x, rc[,"lwr"], lty=4, col="red")
lines(nd$x, rc[,"upr"], lty=4, col="red")
ci_95 <- confint(result)
```
```r
# 傾きの分散
Sxx <- sum( (x - mean(x))^2 )
Var_slope <- var_err / Sxx
# 信頼区間の手計算 (95%)
c1 <- qt(1-0.025, N-2)
c2 <- 1 / length(x) + (nd$x - mean(x))^2 / Sxx
fit_ <- (intercept + slope * nd$x)
cbind(fit_,
lwr_ = fit_ - c1 * sqrt(var_err * c2),
gwr_ = fit_ + c1 * sqrt(var_err * c2))
rc
```
なお、信頼区間と予測区間は、別の概念なので注意。
<<<
;疑問:それって「何の」信頼区間?
上記の例で信頼区間が散布図のバラツキと合っていないのは実は当然です。上で描かれている信頼区間は「回帰直線の信頼区間」であるからです。
「回帰直線の信頼区間」というのは、「もし上記のような測定・解析を全く同じやり方で100回繰り返したら、100回のうち95回は回帰直線はこの範囲を通ると考えられますよ」という区間という意味です。
...
そこで、回帰直線のまわりの残差によるバラツキも考慮した「(平均値ではなく)個々のTOCの予測値」の予測範囲を考えましょう。そのような値は「新たな測定を行ったときに予測される値」として解釈でき*7、その値の範囲は「予測区間」と呼ばれます。
<<<
[[おっと危ない:信頼区間と予測区間を混同しちゃダメ - Take a Risk:林岳彦の研究メモ|http://takehiko-i-hayashi.hatenablog.com/entry/20110204/1296773267]]
<<tag>>
----
! [[基本的な統計量]]
```r
x <- c(2,3,4,5,1)
sum(x) # 15 - 総和
prod(x) # 120 - 総乗
mean(x) # 3 - 平均値
median(x) # 3 - 中間値
max(x) # 5 - 最大値
min(x) # 1 - 最小値
var(x) # 2.5 - 分散 (the denominator 'n-1' is used)
sd(x) # 1.58 - 標準偏差 (the denominator 'n-1' is used)
range(x) # 1, 5
```
https://stats.biopapyrus.jp/r/basic/math-function.html
----
! 基本的な分布
!! [[正規分布]]
* dnorm: value → density
* pnorm: value → (cumulative) probability
* qnorm: (cumulative) probability → value
* rnorm: 第一引数は個数を受けて、正規分布に従う乱数を返す
```r
# 例として偏差値を使う (平均 = 50, 標準偏差 = 10)
# 累積頻度 - 偏差値 30 以下の人の割合は、約2.3%
pnorm(30, mean=50, sd=10)
> [1] 0.02275013
# Quantile - 約97.7%の人は、偏差値 70 以下
qnorm(0.977, mean=50, sd=10)
> 69.99077
# 確率密度と累積頻度 - 偏差値の分布のあるべき形をプロット
plot(0:100, dnorm(0:100, mean=50, sd=10), type="l")
plot(0:100, pnorm(0:100, mean=50, sd=10), type="l")
```
!!! ''正規性の確認''
```r
x <- rnorm(50, mean=50, sd=10)
# QQ plot を書いてみる
qqnorm(x); qqline(x, col="red")
# コルモゴロフ・スミルノフ検定 - 帰無仮説は「標本分布が正規分布に従う」
ks.test(x, "pnorm", mean=mean(x), sd=sd(x))
# Shapiro-Wilk 検定 - 帰無仮説は「標本分布が正規分布に従う」
shapiro.test(x)
```
- - - - - - - - - - - - - - - - - - - -
!! [[対数正規分布]]
対数正規分布に関しても、似たような関数が用意されている。
引数の ''meanlog'', ''sdlog'' は、対数正規分布における ''μ'', ''σ'' を指定するパラメータである。
```r
# μ = 10, σ = 2 の対数正規分布を例として用いる
# 確率密度分布
plot((1:3000*10), dlnorm(1:3000*10, meanlog=10, sdlog=2))
abline(v = exp(10 - 2^2)) # 最頻値 (= exp(μ - σ^2))
# 確率密度分布 (x軸を対数スケール)
plot((1:3000*10), dlnorm(1:3000*10, meanlog=10, sdlog=2), log="x")
abline(v = exp(10 - 2^2)) # 最頻値 (= exp(μ - σ^2))
# 累積頻度
plot((1:3000*100), plnorm(1:3000*100, meanlog=10, sdlog=2))
abline(v=exp(10)); abline(h=0.5) # 中間値 (= μ)
```
```r
# y = log(x) の分布
x <- rlnorm(500, meanlog=10, sdlog=2); y <- log(x)
plot(density(y))
plot(ecdf(y)); abline(v=10, h=0.5)
lines(40:160/10, plnorm(exp(40:160/10),meanlog=10, sdlog=2), col="red")
```
- - - - - - - - - - - - - - - - - - - -
!! t分布
```r
dt(x, df, ncp, log = FALSE)
pt(q, df, ncp, lower.tail = TRUE, log.p = FALSE)
qt(p, df, ncp, lower.tail = TRUE, log.p = FALSE)
rt(n, df, ncp)
# t分布表
data.frame(df=1:10, b_95=qt(1-0.025, 1:10))
```
! コマンド
グループ名 と 値 の列を持つデータフレーム形式にする必要がある。
```r
a1<- c(63,58,64,58,77,66,52,64,49,66)
a2<- c(64,64,68,61,56,71,64,65,85,75)
a3<- c(59,87,79,71,65,65,65,71,74,58)
a4<- c(83,79,65,67,80,72,80,75,72,84)
bunsan1<- data.frame(A=factor(c(rep("a1",10),rep("a2",10),rep("a3",10),rep("a4",10))),y=c(a1,a2,a3,a4))
bunsan1
boxplot(y~A,data=bunsan1,col="lightblue")
summary(aov(y~A,data=bunsan1))
```
https://www1.doshisha.ac.jp/~mjin/R/Chap_13/13.html
[[分散分析]]
! 例外に関する関数
!! 例外を投げる
基本的には、例外を投げるたい時は ''stop()'' 関数を使う。
* stop()
* warning()
設定によっては、''warning()'' 関数で例外を投げることもできる ('warn' オプションに2以上の値をセットすると、warning() 関数は error() と同様に振る舞う)。
```r
# このオプションの値によって、warning() 関数の挙動が変わる
# 負の値: 警告を無視
# 0: top-level function の実行が終わった後に、警告メッセージを表示
# 1: warning() 関数実行時に、警告メッセージを表示
# 2以上: warning() 関数は error() と同様に振る舞う
getOption("warn")
```
https://cran.r-project.org/doc/manuals/r-release/R-lang.html#Exception-handling
! ヘッダーの項目
!! 第一階層
主なもの。output については、次以降のセクションで説明。
<<<
```
---
title: "タイトル" #ページのタイトルで,h1要素としてbodyに入ります
subtitle: "サブタイトル" #ページのサブタイトルで,h1.titleのすぐ下にh2として入ります
title-prefix: "タイトルプリフィックス" #ウィンドウ上部枠に出てくるページ名タイトルの前に入ってきます
pagetitle: "ページタイトル" #ウィンドウ上部枠に出てくるページ名タイトルです
author: "オーサー" #著者で,複数名の時は'c("kosaki", "chitoge")'とすればOK
author-meta: "オーサーメタ" #head要素のmeta情報に書き込まれます
date: "2017/01/17" #日付です。決め打ちでもいいですし,rのコードでやる方法も
abstract: "このドキュメントのアブストラクト。" #本文のすぐ上にアブストラクトとして差し込まれます
output:
html_document:
...
---
```
<<<
[[R Markdownのhtml_documentで指定できるyamlヘッダ項目について - Qiita|https://qiita.com/kazutan/items/726e03dfcef1615ae999]]
!! output
まず出力形式を指定した上で、出力の設定をその要素内で指定する。出力形式は、複数指定することも可能。
出力タイプとしては、以下のようなものがある。
* html_document
* pdf_document
* word_document
* ioslides_presentation
* slidy_presentation
* beamer_presentation
!!! ''HTML 出力''
```
# tocまわり
toc: FALSE #toc(table of contents)を自動生成するかどうか。論理値。
toc_depth: 2 #tocで拾う見出しレベルを指定。数値。
toc_float: FALSE #tocをページ冒頭ではなくサイドメニューとして浮かせて表示させるかどうか
number_sections: FALSE #見出しに通し番号をつけるかどうか
# figまわり
fig_width: 7 #図の大きさ。確かインチ
fig_height: 5 #図の高さ。確かインチ
fig_retina: 2 #retinaディスプレイに対応させていくかどうか
fig_caption: TRUE #図にキャプションを付与していくかどうか
dev: "png" #グラフィックデバイスを指定。この場合png形式。
# dfの処理
df_print: "default" #data.frameを表示させる際,kableとかtiblleとかpagedを指定。
# codeまわり
code_folding: "show" #デフォ値はc("none", "show", "hide") #デフォルトでRコード部分を表示させるかどうか。
code_download: FALSE #Rmdソースコードをhtmlに埋め込んでDLできるようにするかどうか。論理値。
highlight: "default" #シンタックスハイライトのテーマを指定。
# mathjax
mathjax: "default" #mathjaxをどう含めるか。
# テーマ・書式まわり
smart: TRUE #出力のタイポグラフィを変換するかどうか。ハイフンをem-dashesにするかなど。論理値。
theme: "default" #htmlのテーマを指定。NULLだとテーマ無し(プレーンなhtml)になる。
css: NULL #カスタムなcssを指定。
# ドキュメントまわり
templete: "default" #(Pandoc用)htmlテンプレートを指定。
include: #ドキュメントにhtmlを差し込むかどうか。
- in_header: NULL #<head>内に差し込む内容。htmlファイルを指定。通常はメタデータやjsコードなど
- before_body: NULL #<body>の一番最初に差し込む内容。htmlファイルを指定。通常はheader的な要素など
- after_body: NULL #<body>の一番最後に差し込む内容。htmlファイルを指定。通常はfooter的な要素など
# 拡張関連
extra_dependencies: NULL #新たに追加したいような要素や,拡張要素を指定。
lib_dir: NULL #jqueryとか依存するHTMLライブラリをコピーするディレクトリを指定。デフォは(ファイル名)_filesってディレクトリへ。
# 出力制御関連
md_extentions: NULL #Pandoc Markdown拡張で追加するand/or削除する要素を指定
pandoc_args: NULL #Pandocに送る引数を指定。
keep_md: FALSE #.mdファイルを残すかどうかを指定。論理値
self_contained: TRUE #jsやcss,画像データなどをbase64でhtmlファイルに埋め込み,単一ファイルにするかどうかを指定。論理値
```
[[R Markdownのhtml_documentで指定できるyamlヘッダ項目について - Qiita|https://qiita.com/kazutan/items/726e03dfcef1615ae999]] から引用
https://bookdown.org/yihui/rmarkdown/html-document.html
----
!! テーマ
"cerulean", "journal", "flatly", "readable", "spacelab", "united", and "cosmo"
http://www.rstudio.com/wp-content/uploads/2015/03/rmarkdown-reference.pdf
!! コードのハイライト
"tango", "pygments", "kate", "zenburn", and
https://qiita.com/kazutan/items/ca20f26fba3f6fba81c5
LATEX 形式で記述することが可能。$ で囲むとその部分は、LATEX の構文として解釈される。
; ブロック
```
$$a_i = \frac{1}{2} b_j$$
```
; インライン
```
$a_i = \frac{1}{2} b_j$
```
* https://qiita.com/kazutan/items/8441693e77e9cb6fd833
<<tag "R/Tips">>
<<list-links filter:[tag[R/Tips]] >>
----
! R の GUI
!! MDI SDI の変更
''etc/Rconsole'' の 5~8行目の style を変更する
```
## Style
# This can be `yes' (for MDI) or `no' (for SDI).
MDI = yes
# MDI = no
```
* [[R (or S) 言語入門 |http://infoshako.sk.tsukuba.ac.jp/~jgoto/wma/intro_to_R.pdf]]
* [[Google's R Style Guide (tentatively translated in Japanese) |http://www13.atpages.jp/t6s5/docs/r-style-guide-j.html]]
; 使い方
* ''library(Rcmdr)'' とすれば、必要なパッケージを勝手にダウンロードして、使えるようになるはず
* 再起動したいときは、 ''Commander()''
; 参考
* [[Rコマンダーのインストール|http://plaza.umin.ac.jp/~takeshou/R/Rcmdrinst.html]]
* [[R コマンダーによる分散分析|http://www.ic.nanzan-u.ac.jp/~kamiya/r/content/rcmdranova.html]]
! 線形補間
基本的には、''approxfun()'' 関数を使えばよい。
```r
> f <- approxfun(x, y)
```
https://teramonagi.hatenablog.com/entry/20120301/1330608400
----
! スプライン補間
(間違いがあるかも...)
* 回帰スプライン
* 平滑化スプライン
* [[補間法(ラグランジュ補間とスプライン補間)|http://akita-nct.jp/yamamoto/lecture/2006/5E/interpolation/interpolation.pdf]]
* [[グラフ作成の一般的な注意事項|http://denki.nara-edu.ac.jp/~yabu/soft/graph/graph-common.pdf]]
```r
x <- c(1, 2, 5, 7, 10)
y <- c(6, 10, 2, 1, 6)
# 3次の平滑化スプライン関数を当てはめる (df は、いくつの節点に区切るかということか?)
sp <- smooth.spline(x, y, df=5)
pred <- predict(sp, seq(0, 10, length=100))
plot(x, y)
lines(sp, col="#ff000088", lwd=2)
lines(pred, col="#0000ff88", lwd=2)
```
外部コマンド
{{{
shell("echo hello")
shell("dir")
}}}
{{{
cnv <- (function() {
list(
inch2mm = function(inch) { inch * 25.4 },
inch2cm = function(inch) { inch * 2.54 },
inch2m = function(inch) { inch * 0.0254 },
mm2inch = function(mm) { mm / 25.4 },
cf_m3 = function(cf){ 0.0283168 * cf },
usbbl_l = function(usbbl) { 158.987 * usbbl }
)
})()
inch2mm <- function(inch) { inch * 25.4 }
inch2cm <- function(inch) { inch * 2.54 }
inch2m <- function(inch) { inch * 0.0254 }
mm2inch <- function(mm) { mm / 25.4 }
cf_m3 <- function(cf){ 0.0283168 * cf }
usbbl_l <- function(usbbl) { 158.987 * usbbl }
# ----------------------
annulus <- function(id, od) { (id * id - od * od) * pi / 4.0 }
ch4_m3daykgsec <- function(volume) {
volume / 1000 / 22.4 * 16 / 60 / 60 / 24 * 1000
}
ch4_kgsecm3day <- function(mass) {
mass * 1000 * 22.4 / 16 * 60 * 60 * 24 / 1000
}
# ----------------------
read_excel_3d_csv <- function( filename ) {
csv <- read.table(filename, header=F, sep=",")
f <- function(l, x) {
res <- numeric(0); for (i in 2:x) res <- c(res, l[[i]][[1]]); res
}
rows <- csv[[1]]
cols <- f(csv, length(csv))
mat <- as.matrix(csv)
mat <- mat[c(2:length(rows)), c(2:length(csv))]
rows <- rows[2:length(rows)]
list( x = cols, y = rows, z = t(mat) )
}
}}}
! テキストデータの出力
テキストの出力として使える関数には、以下のようなものがある。
* cat()
** 出力先は "file = " で指定
* write(), write.table(), writeLines()
** 出力先は "file = " で指定
* sink() + print()
** sink() で標準出力先を変更し、print() で出力する
http://takenaka-akio.org/doc/r_auto/output_func.html
----
! クリップボードとのやり取り
; クリップボードから読み込む (Excel のセルをコピーした状態で実行)
{{{
# read clipboard as table.
read.cb <- function(header, ...) {
if (missing(header)) { header = FALSE }
utils::read.table(file="clipboard", header=header, ...)
}
# read clipboard as matrix.
read.cb.mat <- function(header, ...) {
as.matrix( read.cb(header, ...) )
}
t1 <- read.cb() # ヘッダーなし
t2 <- read.cb(T) # ヘッダーあり
m1 <- read.cb.mat() # ヘッダーなし
m2 <- read.cb.mat(T) # ヘッダーあり
}}}
* [[ちょっとしたRのこと|http://ofmind.net/doc/r-tips]]
; クリップボードへ出力
{{{
# エラーが起きる時には、128 の部分の値を大きくする
write.cb.mat <- function(mat) { write(t(mat), "clipboard-128", ncolumns=ncol(mat), sep=",") }
}}}
; assign 関数
変数を割り当てる場合、通常 "=" か "<-" を使うが、 assign() 関数を使って割り当てることもできる。
また、引数の envir で割り当て場所を指定すれば、特定の関数に変数を割り当てることも可能である。
```R
a <- 1
f <- function(x) { x + a }
f(1) # -> 2
assign("a", 5, envir = environment(f))
f(1) # -> 6
```
---
; 変数名
変数名にはドットを使わない方がよい。
<<<
ドットつなぎがだめな理由
上の引用に書いてあるように、S3オブジェクトの仕組みとぶつかるからです。
<<<
https://notchained.hatenablog.com/entry/2014/06/19/223135
''uniroot'' () を使う。
```r
cb_old <- function(roughness, D, Re, interval=c(0, 5), warn=TRUE) {
core_ <- function(roughness, D, Re, interval) {
if (Re <= 4000 && (warn == TRUE)) { warning("Re <= 4000 !") }
fun <- function(f) {
(1 / sqrt(f)) + 2 * log10( roughness / D / 3.71 + 2.51 / Re / sqrt(f))
}
f <- uniroot(fun, interval, tol=1e-8) # newton.method
f$root
}
wrap_ <- function(roughness_, D_, Re_){
core_(roughness_, D_, Re_, interval)
}
mapply(wrap_, roughness, D, Re)
}
```
<<tag R/グラフ>>
<<list-links filter:[tag[R/グラフ]] >>
* http://id.fnshr.info/2011/10/22/ggplot2/
* [[ggplot2でグラフ書きはじめた話 - @soh335 memo|http://soh335.hatenablog.com/entry/20111218/1324191494]]
----
; 複数のグラフをきれいに並べる
```
# ggp2List には、ggplot2 のグラフオブジェクトの list を渡す。
# (list の長さは、2~4までしか対応していない)
#
library(ggplot2)
library(reshape2)
library(RColorBrewer)
library(grid)
library(gridExtra)
library(scales)
library(gtable)
ggp2LayoutGraphs <- function(ggp2List, filename, tRange=NULL) {
fWidth <- function(ggp2){
gt <- ggplot_gtable(ggplot_build(ggp2))
gt$widths
}
# Check maxWidth
maxWidth <- fWidth(ggp2List[[1]])
for (i in 1:length(ggp2List)) {
maxWidth <- unit.pmax(maxWidth, fWidth(ggp2List[[i]]))
}
fGt <- function(ggp2, maxWidth) {
if (!is.null(tRange)) {
ggp2 <- ggp2 + xlim(tRange)
}
gt <- ggplot_gtable(ggplot_build(ggp2))
gt$widths <- maxWidth
gt
}
gtList <- mapply(fGt, ggp2List, list(maxWidth))
ggp2DrawGtList(gtList, filename)
gtList
}
ggp2DrawGtList <- function(gtList, filename) {
if (!missing(filename) && !is.null(filename) ) {
pdf(file=filename, width=600, height=800)
on.exit(dev.off())
}
if (length(gtList) == 2) {
grid.arrange(gtList[[1]], gtList[[2]])
} else if (length(gtList) == 3) {
grid.arrange(gtList[[1]], gtList[[2]], gtList[[3]])
} else if (length(gtList) == 4) {
grid.arrange(gtList[[1]], gtList[[2]], gtList[[3]], gtList[[4]], ncol=1)
}
}
```
; とりあえず描いてみる
* [[グラフィックス参考実例集:イメージ図 - RjpWiki | http://www.okada.jp.org/RWiki/?%A5%B0%A5%E9%A5%D5%A5%A3%A5%C3%A5%AF%A5%B9%BB%B2%B9%CD%BC%C2%CE%E3%BD%B8%A1%A7%A5%A4%A5%E1%A1%BC%A5%B8%BF%DE]]
** とりあえず描いてみるには、 ''filled.contour()'' が便利
** 等高線を重ねるという手もある
; きちんと描く場合
* [[カラーマップ image関数で行列データを二次元座標にプロット | http://r.livedocs.net/graph/image.html]]
```r
dummyData <- rnorm(1000)
hist(dummyData) # ヒストグラム作成
hist(dummyData, col = "orange", main = "Title")
hist(dummyData, break = -3:3*2) # 分割間隔の指定
hist(dummyData, freq=FALSE) # 頻度ではなく、密度表示
```
; 累積量も表示
```r
hist_withCum <- function(x, ratio=FALSE) {
oldpar <- par(no.readonly = TRUE)
on.exit(par(oldpar))
par(oma=c(2,1,2,3))
h <- hist(x)
par(new=T)
y <- c(0, cumsum(h$count))
if (ratio) { y <- y / tail(y, n=1) }
plot(h$breaks, y, type="l", xaxt="n", yaxt="n", xlab="", ylab="")
axis(4)
mtext("Cum.Frequency", side=4, line=3)
}
hist_withCum(dummyData)
hist_withCum(dummyData, TRUE) # 累積量を割合で表示
```
; 統計量を重ねる
```r
hist(dummyData)
abline(v = mean(dummyData), col = "red") # 平均値
```
; 密度関数を重ねる
```r
# 密度関数
hist(dummyData, freq = FALSE)
lines(density(dummyData), col = "orange", lwd = 2)
# 頻度のまま重ねる
hist(dummyData, probability=TRUE)
lines(density(dummyData), col = "orange", lwd = 2)
```
* http://stat.biopapyrus.net/graph/hist.html
* http://d.hatena.ne.jp/hoxo_m/20111121/p1
軸の無いグラフを用意し、後から軸を書き足す
; axis.~POSIXct() という関数がある
```r
x <- as.POSIXct( c("2012-02-12 10:0:0", "2012-02-12 12:30:0", "2012-02-12 15:0:0", "2012-02-12 20:0:0") )
y <- c(2, 5, 7, 3)
xRange <- c( x[1], tail(x, 1) )
yRange <- c( 0, 10 )
plot(xRange, yRange, type = 'n', xaxt = "n")
axis.POSIXct(1, at=seq(xRange[1], xRange[2], by="2 hour"), format="%H:%M")
points(x, y)
```
; ウィンドウ出力
{{{
windows() # 新しい出力ウィンドウ(デバイス) を作成し、
plot(1:10) # 作成したウィンドウにグラフをプロット
windows() # もう一つ出力ウィンドウ(デバイス) を作成
dev.list() # 今存在するデバイスのリストを表示
dev.cur() # 今アクティブなデバイスを表示 => windows 3
plot(sin) # グラフは今アクティブな新しく作成したウィンドウに描画される
# 描画を行っても、アクティブなデバイスは変わらない
dev.cur() # => windows 3
plot(cos, xlim=c(0,4*pi))
dev.set(2) # デバイスを変更すれば、
plot(sin, xlim=c(0,2*pi)) # 出力先が変わる
dev.off(2) # 明示的にデバイス2を閉じる (GUI からウィンドウを閉じても構わない)
dev.off() # 引数を省略すると、カレントデバイスを閉じる
}}}
{{{
windows(2, 3) # ウィンドウサイズを指定する場合 (単位はinch ??)
}}}
; PDF 出力
{{{
pdf(file="graphfile.pdf", width=4, height=4)
plot(1:5, c(3,6,4,9,2))
dev.off()
}}}
* [[対話的作図関数 R-Source | http://cse.naro.affrc.go.jp/takezawa/r-tips/r/54.html ]]
{{{
plot(sin, xlim=c(-2*pi, 2*pi))
# グラフの任意の位置の座標を取得する
locator()
locator(1) # 1点だけとる場合
# グラフの任意の位置にテキストを追加
text(locator(1), "addText", adj=0)
# stdin からテキストを入力
plot(sin)
f <- function(n = 512) {
for (i in 1:n) {
l <- locator(1)
t <- readline()
if (nchar(t) < 1) {
break
}
text(l, t, adj=0)
}
}
f()
}}}
; 1 つの画面に 4 コマのグラフを配置
```
x <- 1:3
y <- 11:14
z <- rbind(c(1,4,29,40), c(2,5,18,41), c(3,6,9,45))
oldpar <- par()
par(mfrow=c(2,2),oma=c(2,2,2,2),mar=c(2,2,2,2))
contour(x, y, z,main="Left Top")
image(x, y, z, xlim=c(1,3), main="Right Top")
image(x, y, z, xlim=c(1,3), main="Left Bottom")
contour(x, y, z, add=TRUE)
persp(x, y, z,main="Right Bottom", theta = 30, phi = 30, expand = 0.5, col = rainbow(50))
par(oldpar)
```
----
oldpar <- par(no.readonly = TRUE)
on.exit(par(oldpar))
----
; 二軸のグラフの場合
```
x <- 1:10
y1 <- 1:10*2
y2 <- 31:40
# First graph
par(mfrow=c(2,1))
plot(x, y1, ylim=c(0,100))
par(new=T)
plot(x, y2, xaxt="n", yaxt="n", xlab="", ylab="")
axis(4)
# Second graph
plot(x, y2)
```
; 外部リンク
* [[scratch-R |http://eau.uijin.com/index.html]] (見やすい)
* [[R-Tips |http://cse.naro.affrc.go.jp/takezawa/r-tips/r.html]]
* [[Quick-R|http://www.statmethods.net/index.html]]
* [[RjpWiki |http://www.okada.jp.org/RWiki/]]
* [[Advanced R|https://adv-r.hadley.nz/index.html]]
* http://rstudio-pubs-static.s3.amazonaws.com/85463_ab84b5964c4c4c129d8601dc495b4e51.html#%E4%BB%A3%E5%85%A5
;未分類
* [[ R でグラフ中にプロットされてない値を予測してみる |http://d.hatena.ne.jp/hoxo_m/20110408/p1 ]]
* [[ R で 平滑化スプラインを描く|http://d.hatena.ne.jp/fai_fx/20110508/1304783818 ]]
* [[私的パッケージ作成法 - RjpWiki|http://www.okada.jp.org/RWiki/?%BB%E4%C5%AA%A5%D1%A5%C3%A5%B1%A1%BC%A5%B8%BA%EE%C0%AE%CB%A1]]
$$\dot{\gamma}_w = \dfrac{3}{4} \Gamma + \dfrac{\tau_w}{4} \dfrac{d \Gamma}{d \tau_w} = \left( \dfrac{3n' + 1}{4n'} \right) \Gamma$$
$$\ \ \ \ \ \Gamma = \dfrac{4Q}{\pi R^3} = \dfrac{8v}{D}$$
$$\ \ \ \ \ \tau_w = \dfrac{D}{4} \dfrac{\Delta P}{L}$$
$$\ \ \ \ \ n' = \dfrac{d(\ln \tau_w)}{d(\ln \Gamma)}$$
* $$\dot{\gamma}_w$$: Shear rate at wall
* $$\Gamma$$: Apparent wall shear rate
** (a nominal shear rate obtained by using the formula appropriate to the Newtonian fluid)
* n' : Slope of $$\ln \tau_w$$ versus $$\ln \Gamma$$
* Q: Volumetric flow
* R: Pipe radius
* D: Pipe diameter
* v: Velocity
If the fluid behaves as a power law material, the slope of the derivative is a straight line and ''n' = n''.
* n: flow behavior index
$$\eta_a = K \dot{\gamma}^{n-1}$$
* K: Consistency
https://www.youtube.com/watch?v=J0PjN50l3D4
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! Required Assumptions
* Laminar flow
* Steady flow
* no-slip at the wall of tube
* fluid is incompressible.
* end effects are negligible.
* radial and tangential velocity components are zero.
* properties are not a function of pressure or time
* temperature is constant
---
! 式の導出
!! せん断応力と圧力勾配の釣り合い
層流では、せん断応力はr方向に線形に変化するので、
$$ \tau = - \dfrac{r}{2} \dfrac{dp}{dx} $$
$$ \dfrac{\tau}{\tau_w} = \dfrac{r}{R} $$ ⇒
$$ r = \dfrac{R}{\tau_w} \tau $$ 【式1】
という関係が成り立ち、微小な dr に関しては、
$$ dr = \dfrac{R}{\tau_w} d\tau $$ 【式2】
となる。
!! (真の)せん断速度を使って流量を表現
[[Hagen-Poiseuille流れ]]での流量は、
$$ \displaystyle Q = \int_0^R 2\pi r u(r) dr $$
と表せ、部分積分の公式を使って変形すると、
$$ \displaystyle Q = \left[ \pi r^2 u(r) \right]_0^R - \int_0^R \pi r^2 \dfrac{du}{dr} dr $$
となる。この流量の式に r, dr (【式1】・【式2】)を代入すると、
$$ \displaystyle Q = \left[\pi r^2 u(r) \right]_0^R - \int_0^{\tau_w} \pi \left( \dfrac{R}{\tau_w} \tau \right)^2 \dfrac{du}{dr} \left( \dfrac{R}{\tau_w} d\tau \right) $$
となる。この式を整理すると、
$$ \displaystyle Q = - \pi \dfrac{R^3}{\tau_w^3} \int_0^{\tau_w} \dfrac{du}{dr} \tau^2 d\tau $$
となる(すべり無し(u(R)=0)なので、右辺の第一項は0になる)。さらにこの式に、(本当の)せん断速度( $$\dot{\gamma}_t = - \dfrac{du}{dr} $$ ) 代入すると、
$$ \displaystyle Q = \pi \dfrac{R^3}{\tau_w^3} \int_0^{\tau_w} \dot{\gamma}_t \tau^2 d\tau $$ 【式3】
となる。
!! Rabinowitsch-Mooney Equation
せん断速度をせん断応力の関数とみなすと、【式3】は
$$ \displaystyle \dfrac{Q}{\pi R^3} \tau_w^3 = \int_0^{\tau_w} \tau^2 \dot{\gamma}_t(\tau) d\tau $$
と表せる。この式の両辺を $$\tau_w$$ で微分すると、
$$ \displaystyle 3 {\tau_w}^2 \dfrac{Q}{\pi R^3} + \tau_w^3 \left( \dfrac{d}{d \tau_w} \dfrac{Q}{\pi R^3} \right) = {\tau_w}^2 \cdot \dot{\gamma}_t(\tau_w)$$
となる。この式を整理すると、 ''Rabinowitsch-Mooney の式'' が得られる。
$$\dot{\gamma}_w = \dot{\gamma}_t(\tau_w) = \dfrac{3Q}{\pi R^3} + \tau_w \left( \dfrac{d}{d \tau_w} \dfrac{Q}{\pi R^3} \right) = \dfrac{3}{4} \Gamma + \dfrac{\tau_w}{4} \dfrac{d \Gamma}{d \tau_w}$$ 【式4】
$$ \Gamma = \dfrac{4Q}{\pi R^3} = \dfrac{8\bar{u}}{D}$$ 【式5】
なお、この式に出てくる $$\Gamma$$ は、 ''見かけ壁せん断速度'' (ニュートン流体を仮定した場合の壁せん断速度) と呼ばれることもある。
!! [[弾力性]] を用いた形式
【式4】の ''Rabinowitsch-Mooney の式'' は、 さらに ''弾力性'' を用いた形式に変形することができる。
$$\dot{\gamma}_w = \dfrac{\Gamma}{4} (3 + \dfrac{d\Gamma}{d\tau_w} \dfrac{\tau_w}{\Gamma}) = \dfrac{\gamma_{w,a}}{4} (3 + \dfrac{d \ln \Gamma}{d \ln \tau_w} ) $$ 【式6】
となる。
なお、この式は、弾性力を $$ n' = \dfrac{d \ln \tau_w}{d \ln \Gamma} $$ と定義し、
$$\dot{\gamma}_w = \dfrac{\Gamma}{4} (3 + n') = \dfrac{3n' + 1}{4n'} \Gamma$$
と言う形で表されることが多い。
''弾力性'':
http://www.agu.ac.jp/~nomura/lecture/archive/math.pdf
; GMPLS
* [[RFC4202: Routing Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)|http://www.ietf.org/rfc/rfc4202.txt]]
* [[RFC4206: Label Switched Paths (LSP) Hierarchy with Generalized Multi-Protocol Label Switching (GMPLS) Traffic Engineering (TE).|http://www.ietf.org/rfc/rfc4206.txt]] FAトンネル
; ~OSPF-TE
* [[RFC2370: The OSPF Opaque LSA Option|http://www.ietf.org/rfc/rfc2370.txt]]
* [[RFC3630: Traffic Engineering (TE) Extensions to OSPF Version 2|http://www.ietf.org/rfc/rfc3630.txt]]
* [[RFC4203: OSPF Extensions in Support of Generalized Multi-Protocol Label Switching (GMPLS)|http://www.ietf.org/rfc/rfc4203.txt]]
; ~RSVP-TE
* [[RFC3209: RSVP-TE: Extensions to RSVP for LSP Tunnels|http://www.ietf.org/rfc/rfc3209.txt]]
* [[RFC3471: Generalized Multi-Protocol Label Switching (GMPLS) Signaling Functional Description|http://www.ietf.org/rfc/rfc3471.txt]] 帯域値のIEEEフォーマット
* [[RFC3473: Generalized Multi-Protocol Label Switching (GMPLS) Signaling Resource ReserVation Protocol-Traffic Engineering (RSVP-TE) Extensions|http://www.ietf.org/rfc/rfc3473.txt]] ラベルについて
* [[RFC3477: Signalling Unnumbered Links in Resource ReSerVation Protocol - Traffic Engineering (RSVP-TE)|http://www.ietf.org/rfc/rfc3477.txt]]
* ~RFC4090
* ~RFC4124 - ~RFC4127 (MPLS ~DiffServ よく分からない...)
* ~RFC4328
* ~RFC4872
; PCEP
[[Pce Status Pages|http://tools.ietf.org/wg/pce/]]
* [[draft-ietf-pce-pcep-p2mp-extensions|http://tools.ietf.org/wg/pce/draft-ietf-pce-pcep-p2mp-extensions/]] ~P2MP用の~END-POINTオブジェクトとか
; ROADM/WXC
* [[draft-ietf-ccamp-gmpls-g-694-lambda-labels|http://tools.ietf.org/wg/ccamp/draft-ietf-ccamp-gmpls-g-694-lambda-labels/]]
* [[draft-ietf-ccamp-wavelength-switched-framework|http://tools.ietf.org/wg/ccamp/draft-ietf-ccamp-wavelength-switched-framework/]]
* [[draft-ietf-ccamp-rwa-info|http://tools.ietf.org/wg/ccamp/draft-ietf-ccamp-rwa-info/]]
* [[draft-bernstein-ccamp-wson-encode-00|http://tools.ietf.org/id/draft-bernstein-ccamp-wson-encode-00.txt]]
** [[Modeling WDM Wavelength Switching Systems for use in Automated Path Computation|http://www.grotto-networking.com/wson/ModelingWSONswitchesV2a.pdf]]
; SONET/SDH
* [[RFC4257: Framework for Generalized Multi-Protocol Label Switching (GMPLS)-based Control of Synchronous Digital Hierarchy/Synchronous Optical Networking (SDH/SONET) Networks|http://www.ietf.org/rfc/rfc4257.txt]]
* [[RFC4397: A Lexicography for the Interpretation of Generalized Multiprotocol Label Switching (GMPLS) Terminology within the Context of the ITU-T's Automatically Switched Optical Network (ASON) Architecture|http://www.ietf.org/rfc/rfc4397.txt]]
* [[RFC4606: Generalized Multi-Protocol Label Switching (GMPLS) Extensions for Synchronous Optical Network (SONET) and Synchronous Digital Hierarchy (SDH) Control|http://www.ietf.org/rfc/rfc4606.txt]]
* [[RFC4652: Evaluation of Existing Routing Protocols against Automatic Switched Optical Network (ASON) Routing Requirements|http://www.ietf.org/rfc/rfc4652.txt]]
! 定義
https://lecture.ecc.u-tokyo.ac.jp/~nkiyono/kiyono/simo11-08.pdf より抜粋。
- - - - -
!! 0. 面積について
面積に関しては、次の前提のみを使用する。
* 面積を知っている図形は長方形だけ
* 分割してできたそれぞれの図形の面積を足すとものと図形の面積に一致する
- - - - -
!! 1. 分割について
関数 $$f$$ を有界閉区間 $$[a,b]$$ 上の連続関数とし、$$[a,b]$$ の分割を
$$ \Delta : (a=) x_0 < x_1 < ... < x_n (=b) $$
とする。各 $$x_i$$ のことを ''分割 $$\Delta$$ の分点'' といい、その分割における小区間の幅の最大値
$$ \| \Delta \| = \max \{x_i - x_{i-1}; i = 1,2, \cdots, n\} $$
のことを ''$$\Delta$$ の幅'' という。
また、分割 $$\Delta$$ に対し、$$x_{i-1} \leq \xi_i \leq x_i$$ を満たす $$\xi_i$$ のことを、''小区間 $$[x_{i-1}, x_i]$$ の代表点'' という。
- - - - -
!! 2. リーマン和
関数 $$f$$、有界閉区間 $$[a, b]$$ の分割 $$\Delta$$、およびその代表点の列 $$\xi = (\xi_1, \xi_2, ... , \xi_n) $$ に対し、
$$\displaystyle R[f, \Delta, \xi] = \sum_{i=0}^n f(\xi_i)(x_i - x_{i-1}) $$
を、''$$(\Delta, \xi)$$ に関する関数 $$f$$ のリーマン和''という。
- - - - -
!! 3. Riemann 積分可能
$$\displaystyle \lim_{\|\Delta\| \to 0} R[f, \Delta, \xi] = \alpha$$
を満たす実数 $$\alpha$$ が存在する時、 「''$$f$$ は $$[a,b]$$ でリーマン積分可能である''」という。
また、$$\alpha$$ を 「''$$f$$ の $$[a,b]$$ での定積分''」といい、
$$\displaystyle \alpha = \int_a^b f(x) dx$$
と書く。
; $$\|\Delta\| \to 0$$ の意味
どんなに小さな正実数 $$\epsilon$$ を与えられても、十分小さな実数 $$\delta > 0$$ を取れば、$$\|\Delta\| < \delta$$を満たす任意の分割 $$\Delta$$ とその任意の代表点の列 $$\xi$$ に対して
$$|R[f, \Delta, \xi] - \alpha| < \epsilon $$
が成り立つ。
----
! [[区分求積法]]
区間 [a, b] の 任意の分割 Δ,,n,, と (その分割の) 代表点の列 $$\xi_n$$ に対して、 |Δ,,n,,| → 0 とすると、''区分求積法'' が出てくる。
$$\displaystyle \ \ \ \ \ \lim_{n \to \infty} \sum_{i=0}^n f(\xi_i)(x_i - x_{i-1}) = \int_a^b f(x) dx $$
----
---
有界閉区間上の連続な関数は積分可能である。
- - - - - - - -
!! 証明
任意の $$ \xi \in [x_{i-1},x_i] $$ に対し、$$ \| \Delta \| \to 0 $$ のときに
$$\displaystyle \sum_{i=0}^n f(\xi_i)(x_i - x_{i-1}) $$
がある値に近づくとき、「リーマン積分可能である」という。
----
各区間 $$[x_{i-1},x_i]$$ での $$f$$ の最大値・最小値を、それぞれ $$ l_i, m_i $$ とし、
$$ \displaystyle s(\Delta) = \sum_{i=0}^n l_i(x_i - x_{i-1}), S(\Delta) = \sum_{i=0}^n m_i(x_i - x_{i-1}) $$
とおく。
----
!!! ''基本的な考え方''
任意の $$ \xi \in [x_{i-1},x_i] $$ に対し $$ l_i \leqq f(\xi) \leqq m_i $$ であるから、
$$ \displaystyle s(\Delta) \leqq \sum_{i=0}^n f(\xi_i)(x_i - x_{i-1}) \leqq S(\Delta) $$
となる。
そのため、 $$ \| \Delta \| \to 0 $$ のときに $$ s(\Delta), S(\Delta) $$ が共にある数 (= α) に近づくならば、 $$ \displaystyle \sum_{i=0}^n f(\xi_i)(x_i - x_{i-1}) $$ も α に近づくことになるので、定義から $$f$$ は積分可能になる。
($$ \| \Delta \| \to 0 $$ は、分点が増え、分割が一様に細かくなることを意味する)
- - - -
!!! ''α へ近づくことの説明''
!!!! ①
任意の2つの分割 $$ \Delta_1, \Delta_2 $$ の分点を合わせて新たな分割 $$ \Delta_3 $$ を作ることを考えると、
$$ s(\Delta_1) \leqq s(\Delta_3) \leqq S(\Delta_3) \leqq S(\Delta_2) $$
ということが言える。
(ざっくり言うと、どういう分割の仕方をしても $$s \leq S$$ になる)
!!!! ②
次に、任意の正の数 ε に対し、 $$ p = \epsilon / (b-a) $$ とおくと、このpに対し、一様連続で定まる δ (>0)が存在する。
このとき、$$ \| \Delta \| \leqq \delta $$ を満たす分割では、すべての i で $$ 0 \leqq m_i-l_i < p $$ となるから、
$$ S(\Delta) - s(\Delta) = \sum_{i=1}^n (m_i-l_i)(x_i-x_{i-1}) < p \sum_{i=1}^n (x_i-x_{i-1}) = p(b-a) = \epsilon
$$
!!!! ③
①, ② から
$$ \sup(s(\Delta);\Delta) = \inf(S(\Delta);\Delta)
$$
となる。
物理での話としては、渦度に対応するもの。
http://irobutsu.a.la9.jp/PhysTips/divrotgrad.html
---
! 定義
一般的な定義としては、ベクトル場 ''F'' 内の点 p の ''回転'' $$ (\nabla \times \mathbf {F} )$$ は、次の関係を満たすものとして定義される。
: $${\displaystyle (\nabla \times \mathbf {F} )(p)\cdot \mathbf {\hat {u}} \ {\overset {\underset {\mathrm {def} }{}}{{}={}}}\lim _{A\to 0}{\frac {1}{|A|}}\oint _{C}\mathbf {F} \cdot \mathrm {d} \mathbf {r} }$$
$$\hat {u}$$ は任意の単位ベクトルで、右辺の経路積分は $$\hat {u}$$ に直交する面上の 点p 近傍の領域の境界を経路とし、$$|A|$$ はその領域の面積である。
- - - - -
ただ、どうせ三次元でしか使わないので、以下の定義で十分だと思う。
:$$\displaystyle \nabla \times \mathbf{F} = \mathrm{rot} \mathbf{F} = \begin{pmatrix} \frac{\partial}{\partial x} \\ \frac{\partial}{\partial y} \\ \frac{\partial}{\partial z} \end{pmatrix} \times \begin{pmatrix} F_x \\ F_y \\ F_z \end{pmatrix} = \left({\dfrac {\partial F_{z}}{\partial y}}-{\dfrac {\partial F_{y}}{\partial z}}\right) e_x +\left({\dfrac {\partial F_{x}}{\partial z}}-{\dfrac {\partial F_{z}}{\partial x}}\right) e_y +\left({\dfrac {\partial F_{y}}{\partial x}} - {\dfrac {\partial F_{x}}{\partial y}}\right) e_z$$
---
! 渦度 (Vorticity)
流体力学や電磁気学などでは、上記の回転を ''渦度'' という。
基底を回転軸としたときの角速度に関する情報をベクトルの形でまとめたもの (x成分であればx軸と平行なベクトルを中心とする回転)。ただし、各成分は角速度の2倍の値になっている点に注意。
:$$\mathbb{\omega} = \nabla \times \mathbf{v} = \left( \dfrac{\partial v_z}{\partial y} - \dfrac{\partial v_y}{\partial z}, \ \ \dfrac{\partial v_x}{\partial z} - \dfrac{\partial v_z}{\partial x}, \ \ \dfrac{\partial v_y}{\partial x} - \dfrac{\partial v_x}{\partial y} \right) $$
(渦度テンソルとの関係などの) より詳細については、[[流体の変形・回転]] 参照
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! 導出
三次元で考えるものであるが、まずは、xy平面上の 円運動を考える。その上で、同じ議論を xz 平面・yz平面ですればよい。
- - - - - - - - - -
!! xy 平面上の渦度 (回転)
ある点 ''P(x, y, z)'' から Δxだけ離れた点を ''P',,x,, (x+Δx, y, z)'' とする。このとき、点P と 点P',,x,, の y軸方向の相対速度 ''Δv,,y,,'' は、
:$$\Delta v_y = v_y (x+\Delta x, y, z) - v_y (x, y, z)$$
と表せる。そのため、 __''点P を中心とする 点P',,x,, の (xy平面上の) 回転運動の[[角速度]]''__ を ''ω,,z,,''' とすると、
:$$\displaystyle \omega_{z}' = \dfrac{v_y (x+\Delta x, y, z) - v_y (x, y, z)}{\Delta x}$$
となる (Δx が半径になっている)。 Δx を微小量として微分すれば、次の関係が得られる。
:$$\displaystyle \omega'_z = \lim_{\Delta x \to 0}\dfrac{v_y (x+\Delta x, y, z) - v_y (x, y, z)}{\Delta x} = \dfrac{\partial v_y}{\partial x}$$
同様にして、点P と 点 ''P',,y,, (x, y+Δy, z)'' と の相対速度を用いて、点P と 点P',,y,, の x軸方向の相対速度を考えると、
:$$\Delta v_x = v_x (x, y+\Delta y, z) - v_x (x, y, z)$$
なので、''点P を中心とする 点P',,y,, の (xy平面上の) 回転運動の[[角速度]]'' ω,,z,,' ' は、
:$$\displaystyle \omega''_z = - \lim_{\Delta z \to 0}\dfrac{v_x (x, y+\Delta y, z) - v_x (x, y, z)}{\Delta y} = - \dfrac{\partial v_x}{\partial y}$$
となる(反時計回りを正とする)。
そして、$$\omega'_z$$ と $$\omega''_z$$ の和を、__''z軸まわりの渦度''__ (ω,,z,,) といい、この値は z軸まわりの回転[[角速度]]の2倍となる。
:$$\omega_z = \dfrac{\partial v_y}{\partial x} - \dfrac{\partial v_x}{\partial y}$$
- - - - -
!! 3次元での回転
同様にして、x軸まわりの渦度, y軸まわりの渦度 は、
$$\omega_x = \dfrac{\partial v_z}{\partial y} - \dfrac{\partial v_y}{\partial z}$$
$$\omega_y = \dfrac{\partial v_x}{\partial z} - \dfrac{\partial v_z}{\partial x}$$
と求められる。
- - - - - - - - - -
!! 参考
* [[rot(rotation,回転)の定義と意味~図解有り~【数学 物理学 ベクトル解析】 - YouTube|https://www.youtube.com/watch?v=MXML4GHtYdA]]
- - - - -
---
---
イメージとしては、まず、 における、点P を中心とする xy平面上の 円運動を考えてみるとよい。
あるベクトル場のプロパティ ''A'' を、ある点 p を中心とした微小な面の縁に沿って線積分することを考える。このときその線積分は、
$$\displaystyle (\nabla \times \mathbf{F}) (p) \cdot \mathbf{\hat{n}} = \lim_{A \to 0} \dfrac{1}{|A|} \oint_C \mathbf{F} \cdot dr $$
と表せる。この線積分は、面の向きによって値が変化する。また、$$\mathbf{\hat{n}}$$ は、面の法線ベクトルである。
rot は、基底ベクトルを法線ベクトルとする面についての線積分を各成分とするベクトルとなる (規定ベクトルの数だけ、線積分をする面が存在することになる)。
Doxygen みたいなやつ。
! 書き方
!! パッケージ
```r
#' Title (single line)
#'
#' Description (multiple lines are acceptable)
#'
#' Details (省略可能)
#'
#' @docType package
#' @name PackageName
#' @rdname RdFileName
#'
#' @import requiredPackage
#' @md
NULL
```
<<<
* roxygen2 では roxygen と違い、上から順に空行で区切って、''\title'' フィールド、''\description'' フィールド、''\details'' フィールドの三つを @ 無しで略記できます。
* ''@name testRefclassPkg'': \name フィールドを指定します。パッケージの roxygen2 コメントを書く場合、最後に続けて関数定義やクラス定義などを記入できないため、NULL や {} などを記入します。この場合、関数名やクラス名が存在しないため、\name フィールドを自動的に作成できずエラーが発生してしまいますが、自分で指定しておけば問題ありません。
* ''@aliases testRefclassPkg'': help("keyword") や ?keyword でヘルプを検索するための検索ワードを指定しています。いちいち -package を付けるのが面倒なので、個人的にパッケージ名を検索ワードとして登録しています。
* ''@rdname testRefclassPkg-package'': Rd ファイル名を指定します、好きな名前を指定して問題ありません。
* ''@docType package'': \docType フィールドにパッケージ用の Rd ファイルであることを指定します。
* @keywords documentation: \keyword フィールドを指定します。
* @author: \author フィールドを指定します。
* @seealso: \seealso フィールドを指定します。ヘルプ間でリンクを張って、参考情報をたどれるようにするために指定しておきます。
* @exportPattern '^[^\\.]': NAMESPACE ファイルを自動生成するために、すべてにマッチする directive を書いておきます。
<<<
[[Reference class に roxygen2 用のコメントを入れる方法 - Triad sou.|https://triadsou.hatenablog.com/entry/20110917/1316228817]]
!! メソッド
```r
#' Title (single line)
#'
#' Description (multiple lines are acceptable)
#'
#' Details (省略可能)
#'
#' @usage func(arg1, arg2, ...)
#'
#' @param arg1 description of arg1
#' @param arg2 description of arg2
#' @parame ... description of ...
#'
#' @return description of return
#'
#' @note additional information (必要なら入れる)
#'
#' @reference (必要なら入れる)
#' * reference 1
#' * reference 2
#'
#' @examples
#' func(10, 29)
#' func(10, 29, option1=TRUE)
#'
#' @seealso [func2()]
#'
#' @export
#' @md
f_provided_by_package <- function(arg1, arg2, ...)
```
* ''@export'': Export する関数につけるタグ
* ''@md'': コメントにマークダウンの書式を使いたい時につける
* ''@usage, @note, @reference'' は省略可能
* ''@seealso'': 他のヘルプページへのリンクなど
----
; コメント例
* ''Title, @param, @return'' あたりは必須っぽい
* ''@export'' は、Package 内の Export する関数につけるタグ
----
```r
#' @format A data frame with 53940 rows and 10 variables:
#' \describe{
#' \item{price}{price, in US dollars}
#' \item{carat}{weight of the diamond, in carats}
#' ...
#' }
```
* [[RSS の dc:date のフォーマット : NDO::Weblog|http://naoya.dyndns.org/~naoya/mt/archives/001126.html]]
* [[RFC2822|http://www.ietf.org/rfc/rfc2822.txt]]
* [[RSS 2.0 Specification 日本語訳 - futomi's CGI Cafe|http://www.futomi.com/lecture/japanese/rss20.html]]
* [[RSS Validator RSS/RDF の構文・妥当性と文法チェック|http://sonic64.com/2004-12-19.html]]
* [[未読・既読状態をネットワーク共有できるRSSリーダー「RSS Bandit」 :教えて君.net|http://www.oshiete-kun.net/archives/2009/01/rssrss_bandit_1.html]]
* [[RSS作成ソフトを使ってRSSを自動生成しよう - [ホームページ作成]All About|http://allabout.co.jp/internet/hpcreate/closeup/CU20051111A/]]
* [[muzin » RSSのContent-Type|http://www.muzin.org/wp/webprogramming/rss-content-type_20/]]
----
* [[Feed Icons - Home of the free Standard RSS Icon|http://www.feedicons.com/]]
* [[RSSを表示させるPHPスクリプト(RSS2HTML) - Proust Cafe|http://www.proustcafe.com/2005/01/rssphprss2html.html]]
** [[運行情報サイト更新状況 - 鉄道コム|http://www.tetsudo.com/traffic/]]
! Default Directory
!! .Rprofile
* https://rstats.wtf/r-startup.html
* https://support.rstudio.com/hc/en-us/articles/360047157094-Managing-R-with-Rprofile-Renviron-Rprofile-site-Renviron-site-rsession-conf-and-repos-conf
----
! Packages
RStudio から利用するパッケージの置き場所は ''.libPath()'' で確認できる。また、参照する置き場所を変更したい時は、変更後のファイルパス (のベクトル) を引数として渡す。
```r
.libPaths(c("D:/some_local_directory/win-library/4.0", "C:/Program Files/R/R-4.0.2/library"))
```
!! rmarkdown
理由は省略するが、パッケージの置き場所がネットワークフォルダだと rmarkdown が動かないので注意。
根本的な解決方法は見つからなかったので、以下のような形で対処している。
```r
.libPaths()
libpath_rmarkdown <- function() {
.libPaths(c("D:/some_local_directory/win-library/4.0", "C:/Program Files/R/R-4.0.2/library"))
}
```
---
! GIT
For configuration of ''user.name'' and ''user.address'', put ''.gitconfig'' in ''/c/Users/<username>''
<<tag>>
<div class="tc-table-of-contents">
<<toc-selective-expandable 'R言語'>>
</div>
----
! 基本的な考え方
R言語は、使用時の感覚と実際の実装の間にずれがあるように思う。
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! 便宜的な考え方 (使用時の感覚)
[[言語仕様上のデータ型の定義とは異なるが|R_BasicType]]、以下のオブジェクトを基本型と考えるのが、コードを書く上ではよさそう。
|''vector'' |[[ベクトル|R_ベクトル]] |要素が全て同じ型の一次元配列 - 「c(1,2,3)」 |
|''matrix'' |[[行列|R_行列]] |要素が全て同じ型の二次元配列<br>「matrix(c(...),n)」、ベクトルをcbind, rbindで行列化できる |
|''array'' |配列 |要素が全て同じ型の多次元配列 |
|''data.frame'' |[[データフレーム|R_データフレーム]] |列ごとに異なるデータ型の要素を持つことができる二次元配列 |
|''list'' |[[リスト|R_リスト]] |異なるデータ型を含む配列<br> (他のリストや配列のポインタも要素として含むことができる) |
|''factor'' |因子型 (順序なし) |[[R_因子型]]|
|''orderd'' |因子型 (順序あり) |~|
|''function'' |関数 ||
このページのテーブルが分かりやすい。
* http://tkdmah.hatenablog.com/entry/2013/10/05/144434
* http://www.f.waseda.jp/sakas/R/Rdata.html
''ベクトル・行列・Array'' については、「''構成要素の全てが「同じ型」でなければならない''」 という制約がある。ただ、この制約のおかげで、[[(数学的な意味での) ベクトル|ベクトル]] のような感覚で、これらのデータを扱うことができる。構成要素の型は、以下の 6 種類。
# logical (TRUE or FALSE)
# integer
# double
# complex
# character
# raw
''データフレーム'' の場合は、「''列ごとに構成要素の型が同じでなければならない''」。構成要素の型は [[typeof()|R_typeof]] で確認できる。暗黙的に型変換されることがあるので、動作が変な時は、型チェックをした方がよい。
関数オブジェクトの取り扱い方は、JavaScript に似ているように思う。ただ、R言語の方が、関数と環境を結びつける操作をより明示的に行うことができる。
* environment()
また、[[高階関数が標準ライブラリに含まれている|R_高階関数]]。
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! [[言語仕様|R_言語仕様]]に沿った考え方
言語仕様上は、「''ベクトル と リストが基本型''」で、「''行列とArrayはベクトルの拡張''」で「''データフレームはリストの拡張''」である。なお、拡張はオブジェクトに属性を追加することで実現している。
<$reveal type="nomatch" state="$:/state/R_f1" text="show"><$button set="$:/state/R_f1" setTo="show">データ型の詳細説明</$button></$reveal>
<$reveal type="match" state="$:/state/R_f1" text="show">
<$button set="$:/state/R_f1" setTo="hide">隠す</$button>
{{R/言語仕様/BasicType!!text}}
</$reveal>
----
! グラフ
Rは標準でグラフを描く機能を備えている。
* [[散布図: plot()|R_plot]]
* [[ヒストグラム: hist()|R/グラフ/ヒストグラム]]
<<list filter [tag[SampleCode]]>>
全粒子の全表面積に対する全粒子の全体積と同じ表面積対体積率を有する粒子径を指す
$$ \displaystyle d_{32} = 6 \dfrac{V_p}{A_p} = \dfrac{d_1^3 + d_2^3 + ... + d_n^3}{d_1^2 + d_2^2 + ... + d_n^2} = \dfrac{\sum_{i=1}^n d_i^3}{\sum_{i=1}^n d_i^2} $$
- - - - - - - - - - - - - - - - - - - -
$$ V_p = \dfrac{4}{3} \pi \left( \dfrac{d_1}{2} \right)^3 + \dfrac{4}{3} \pi \left( \dfrac{d_2}{2} \right)^3 + ... + \dfrac{4}{3} \pi \left( \dfrac{d_n}{2} \right)^3 = \dfrac{\pi}{6} (d_1^3 + d_2^3 + ... + d_n^3) $$
$$ A_p = 4 \pi \left( \dfrac{d_1}{2} \right)^2 + 4 \pi \left( \dfrac{d_2}{2} \right)^2 + ... + 4 \pi \left( \dfrac{d_n}{2} \right)^2 = \pi(d_1^2 + d_2^2 + ... + d_n^2) $$
* [[なんでも継続 | http://practical-scheme.net/docs/cont-j.html ]]
* [[SICP関数型言語の勉強に「計算機プログラムの構造と解釈」を読もう|http://d.hatena.ne.jp/higepon/19700103/1145105233]]
* [[Lisp/Scheme のスクリプト集、解説|http://www.shido.info/lisp/index.html]]
* [[Gauche ユーザリファレンス: Top | http://practical-scheme.net/gauche/man/gauche-refj.html ]]
bookmarks <<today "YYYY年MM月DD日">>
! Solid-Liquid Equilibria
$$\hat{f}^L_i = \hat{f}^S_i$$
$$x^L_i \gamma^L_i f^L_{i,pure} = x^S_i \gamma^S_i f^S_{i,pure}$$
固体が 成分 i の純物質として析出すると仮定すると、$$x^S_i = 1, \gamma^S_i = 1$$ なので、上式は次のように簡略化できる。
$$x^L_i \gamma^L_i f^L_{i,pure} = f^S_{i,pure}$$
さらに、液相が理想溶液($$\gamma^L_i = 0$$)だと仮定すると、
$$x^L_i f^L_{i,pure} = f^S_{i,pure}$$
となる。
---
* [[Section 2 : Solid-Liquid Equilibria|http://nptel.ac.in/courses/103101004/76]]
* https://www.youtube.com/watch?v=h5dwpTqacqc
---
* homogeneous solid solution
** supersaturated solid solution
https://www.careerride.com/mchoice/what-is-homogeneous-solid-solution-10176.aspx
! 非言語
https://www.youtube.com/watch?v=nOsFZJrdwR8&list=PLTG3Ridc5CbQ1eKb9oXbtATPIxA4hvSpX&index=4
!! 損益算
* ''原価'' (仕入れ値)
* ''売値''
* ''利益'' = 売値 - 原価
* ''割引率''
* ''売値'' = ''定価'' * (1 - 割引率)
!! 料金の割引
* 一律割引適用
!! 精算
* ''合計金額''
* ''一人当たりの金額''
!! 分割払い
基本的に、割合の問題
!! 割合
* 100% の値・数字
!! 旅人算
* 出会い算
* 追いかけ算
* [[Karappo web design room » SSIの使い方 | http://labs.karappo.net/kwdr/index.php?itemid=238]]
<$reveal type="nomatch" state="$:/state/StartPage_AT" text="show"><$button set="$:/state/StartPage_AT" setTo="show">All Tidders</$button></$reveal>
<$reveal type="match" state="$:/state/StartPage_AT" text="show">
<$button set="$:/state/StartPage_AT" setTo="hide">Hide</$button>
{{更新順!!text}}
</$reveal>
---
<div class="tc-table-of-contents">
<<toc-selective-expandable 'StartPage'>>
</div>
---
!! Memo
; [[Windows]]
:<div class="tc-table-of-contents">
<<toc-selective-expandable 'Windows'>>
</div>
- - - - -
* [[伝熱工学]]
* [[画像処理]]
- - - - -
* [[英語]]
** EnglishVocabulary
** [[英文法]]
** [[IELTS]]
** [[英語メモ]]
* [[しようかな]]
* [[更新順]]
----
* パスポート
* スーツ・靴
* 服 (暖かい恰好)
* コンセントの形は同じっぽい
* iPhone の充電器
* 旅行保険
* 眼鏡
---
! TODO
; 弾力性
[[弾力性と回帰係数 - 未来はキミドリイロ|http://arca821.hatenablog.com/entry/2014/12/14/233818]]
----
! DONE
* [[SlayTheReport|https://slaythereport.kojim.net/help]]
* [[SpireStars - Slay the Spire Statistics|https://spirestars.web.app/]]
;A20
* クリア: 10 / 108
** 神=4,
* ボ4: 7 / 108
* エ4: 3 / 108
* ボ3: 14 / 108
** エナ3, 5
/***
@@タグ@@
***/
/*{{{*/
.tagging, .tagged, .selected .tagged, .selected .tagging {
background-color:#DDD;
}
.tagging {
float: right;
}
.viewer pre{margin:0;} /* IE6 bug */
.viewer pre {
padding:1em;
font-size:1em;
}
/*}}}*/
* [[Subversion メモ | http://www-aos.eps.s.u-tokyo.ac.jp/~takagi/subversion.html ]]
* [[Subclipseでブランチの変更を本流にマージする。 - うなの日記 | http://d.hatena.ne.jp/unageanu/20070829/1188382336 ]]
! Step.0 最大(小)値の定理
関数が有界閉区間で連続ならば、値域に最大値と最小値がある。
----
! Step.1 Rolle の定理
関数 $$\displaystyle f $$ は [a,b] で連続、(a,b)で微分可能とする。
$$\displaystyle f(a) = f(b) $$ ならば、ある c $$\displaystyle (a < c < b) $$ で $$\displaystyle f'(c) = 0 $$ が成り立つ。
!! 証明
最大(小)値の定理より、f はある $$x_1$$ で最小値、ある $$x_2$$ で最大値をとる。
$$\displaystyle f(x_1) < f(a) $$ または $$\displaystyle f(x_2) > f(a) $$
$$\displaystyle f(x_1) < f(a) $$ のとき $$\displaystyle c = x_1 $$ とおく。
a < c < b であり、$$\displaystyle f $$ は c で微分可能である。
:$$\displaystyle f'(c) = \lim_{x \to c, x < c} \frac{f(x)-f(c)}{x-c} \leqq 0 $$
かつ
:$$\displaystyle f'(c) = \lim_{x \to c, x > c} \frac{f(x)-f(c)}{x-c} \geqq 0 $$
よって、$$\displaystyle f'(c) = 0 $$ となる。
$$\displaystyle f(x_2) > f(a) $$ についても同様に証明できる。
----
! Step.2 平均値の定理
関数 $$\displaystyle f $$ は [a,b] で連続、(a,b)で微分可能とする。
ある c $$\displaystyle (a < c < b) $$ で $$\displaystyle \frac{f(b)-f(a)}{b-a} = f'(c) $$ が成り立つ。
!! 証明
関数 $$\displaystyle F(x) = (b-a) f(x) - (x-a) (f(b)-f(a)) $$ を定義する。
関数 $$\displaystyle f(x) $$ が[a,b] で連続、(a,b)で微分可能であることから、
$$\displaystyle F(x) $$ も[a,b] で連続、(a,b)で微分可能。
関数の定義から、
$$\displaystyle
F(a) = F(b) = (b-a) f(a)
$$
なので、Rolle の定理を使うと、ある c $$\displaystyle (a < c < b) $$ で
$$\displaystyle
F'(c) = (b-a) f'(c) - (f(b)-f(a)) = 0
$$
が成り立つ。
----
! Step.3 Taylor の定理
関数 $$\displaystyle f $$ は [a,b] で $$\displaystyle C^{n-1} $$ 級で、(a,b)でn回微分可能とすると、
$$\displaystyle \ \ \ \ f(b) = \sum_{k=0}^{n-1} \frac{f^{(k)}(a)}{k!} (b-a)^k + R_n $$
のように定めた R,,n,, は、ある c $$\displaystyle (a < c < b) $$ を用いて、
$$\displaystyle \ \ \ \ R_n= \frac{f^{(n)}(c)}{n!} (b-a)^n$$
と表せる($$\displaystyle R_n $$ は、''剰余項'' と呼ばれる)。
!! 証明
補助関数 $$\displaystyle F(x) = f(b) - \sum_{k=0}^{n-1} \frac{f^{(k)}(x)}{k!} (b-x)^k - \frac{R_n}{(b-a)^n}(b-x)^n $$ を定義する。
$$\displaystyle f(b) = \sum_{k=0}^{n-1} \frac{f^{(k)}(a)}{k!} (b-a)^k + R_n $$ なので、 $$\displaystyle F(a)=F(b)=0 $$ である。
f の仮定から、$$\displaystyle F $$ は [a,b] で連続、(a,b)で微分可能である。Rolleの定理より、ある c $$\displaystyle (a < c < b) $$ で $$\displaystyle F'(c) = 0 $$ である。
$$\displaystyle F $$ を微分して整理した式は、
$$\displaystyle
F'(x) = - \frac{1}{(n-1)!} f^{(n)}(x) (b-x)^{n-1} + \frac{nR_n}{(b-a)^n} (b-x)^{n-1}
$$
となる。
(Σの中の部分を、 $$\displaystyle (f(x)g(x))' = f(x)'g(x) + f(x)g(x)' $$ を使って展開すると、ほとんどの項が打ち消しあってなくなる)
よって、 $$\displaystyle F'(c) = 0 $$ より、 $$\displaystyle R_n= \frac{f^{(n)}(c)}{n!} (b-a)^n $$ となる。
!! ラグランジェの余剰項
$$\theta = \dfrac{c-a}{b-a}$$ とすると、余剰項 R,,n,, と c は
$$R_n= \dfrac{f^{(n)}(c)}{n!} (b-a)^n = \dfrac{f^{(n)}(a + \theta (b-a))}{n!} (b-a)^n \ \ \ \ \ \ [0 < \theta < 1] $$
と変形できる。このように表した余剰項を、''ラグランジュの剰余項'' という。
----
! Cauchy の平均値の定理
関数 $$\displaystyle f, g $$ は [a,b] で連続、(a,b)で微分可能とする。
$$ g'(x) \neq 0 (a < x < b) $$ ならば、ある c $$\displaystyle (a < c < b) $$ により、
$$ \frac{f(b)-f(a)}{g(b)-g(a)} = \frac{f'(c)}{g'(c)}
$$
が成り立つ。
!! 証明
$$\displaystyle F(x) = (f(b)-f(a)) (g(x)-g(a)) - (g(b)-g(a)) (f(x)-f(a)) $$ と定義すると、
$$ F(a) = F(b) = 0 $$ である。
そのため、Rolle の定理から、 ある c $$\displaystyle (a < c < b) $$ で
$$ F'(c) = (f(b)-f(a)) g'(c) - (g(b)-g(a))f'(c) =0 $$
である。 $$ g'(x) \neq 0 $$ という前提条件があるので、この式は、
$$ \frac{f(b)-f(a)}{g(b)-g(a)} = \frac{f'(c)}{g'(c)}
$$
と変形できる。
----
区間 $$\displaystyle I $$ 上の関数を $$\displaystyle f $$ とし、$$\displaystyle a \in I $$ とする。
2点 a, a+h $$\displaystyle (\in I) $$ を端点とする区間を考えると、$$\displaystyle (b=)a+h<a $$ の場合でもTaylorの定理が成り立つので、次のように表せる。
! Taylor 級数
a を含む区間で定義された $$\displaystyle C^{\infty} $$ 級関数 $$\displaystyle f(x) $$ に対し、無限級数
$$\displaystyle \ \ \ \ \ \ \sum_{n=0}^{\infty} \frac{f^{(n)}(a)}{n!} (x-a)^n $$
のことを、a を中心とした $$\displaystyle f(x) $$ のTaylor 級数という。
分かりやすさを優先した書き方をすると、
$$ \ \ \ \ \ \ f(x) = f(a) + f'(a) (x - a) + \dfrac{1}{2!} f''(a) (x-a)^2 + \dfrac{1}{3!} f'''(a) (x-a)^3 + ... $$
といった感じになる。
!! Taylor の定理との関係
[[Taylorの定理]] より、
:$$\displaystyle f(x) = \sum_{k=0}^{n-1} \frac{f^{(k)}(a)}{k!} (x-a)^k + R_n$$
なので、
:$$\displaystyle \lim_{n \to \infty} R_n = \lim_{n \to \infty} \dfrac{f^{(n)}(c)}{n!} (b-a)^n =0$$
ならば、 $$f(x)$$ は ($$\displaystyle n \rightarrow \infty $$ の時に) Taylor 級数の形と一致する。
----
! Taylor 展開
$$f(x)$$ の a を中心としたテイラー級数が、
* a を含むある開区間で収束し、
* その極限が $$f(x)$$ に一致する
時、「$$f(x)$$ は x=a のまわりでTaylor展開可能である」という。
!! Taylor 展開に必要な条件
$$\displaystyle f(x) = \sum_{n=0}^{\infty} \frac{f^{(n)}(a)}{n!} (x-a)^n $$ となる条件、つまり $$\displaystyle \lim_{n \to \infty} R_n = 0$$ については、それぞれの問題ごとに確認する必要がある。
ただし、多項式であれば 微分を繰り返せば全ての項は消えてしまうし、三角関数や指数関数についても R,,n,, は 0 に収束することが知られている。
* http://www.maroon.dti.ne.jp/koten-kairo/works/fft/euler3.html
* http://www.maroon.dti.ne.jp/koten-kairo/works/fft/euler4.html
$$\displaystyle \sum_{n=0}^{\infty} \frac{f^{(n)}(a)}{n!} (x-a)^n $$ が収束する条件については、多くの場合、ダランベールの判定法を用いて判定することができる。
* $$\displaystyle c_n = \dfrac{f^{(n)}(a)}{n!} $$ とおく
!! テイラー展開可能性
https://risalc.info/src/taylor-series.html
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! ダランベールの判定法
$$\displaystyle \sum_{n=0}^{\infty} c_n (x-a)^n $$ の収束半径は、 $$\displaystyle L = \lim_{n \to \infty} \left| \dfrac{c_{n+1}}{c_n} \right|$$ が存在するならば、 $$\dfrac{1}{L}$$ になる。
!! 収束半径
$$\displaystyle \ \ \ \ \ \ \sum_{n=0}^{\infty} c_n (x-a)^n $$
$$\displaystyle \ \ \ \ \ \ c_n = \dfrac{f^{(n)}(a)}{n!} $$
http://physics.thick.jp/Physical_Mathematics/Section1/1-11.html
----
----
$$\displaystyle \ \ \ \ \ \ R_n= $$
*「 $$\displaystyle n \rightarrow \infty $$ の時に $$\displaystyle R_n \rightarrow 0 $$ 」
[[Taylorの定理]] から、余剰項は $$\displaystyle R_n = f(x) - \sum_{k=0}^{n-1} \frac{f^{(k)}(a)}{k!} (x-a)^k$$ なので、
上式の条件は、$$\displaystyle \lim_{n \to \infty} \sum_{i=1}^n R_i$$ が有限の値に収束す。
$$ = \lim_{n \to \infty} \sum_{i=1}^n \dfrac{f^{(n)}(c)}{n!} (b-a)^n =0$$
; 面白かった
* [[Catherine Mohr: 地球に優しい建築 | https://www.ted.com/talks/catherine_mohr_builds_green]] [[text|TED: Catherine Mohr]]
* [[マーチン・ヤクボスキー:文明の設計図をオープンソース化する試みについて | http://www.ted.com/talks/lang/jpn/marcin_jakubowski.html]]
* [[Dennis Hong: Making a car for blind drivers | http://www.ted.com/talks/lang/eng/dennis_hong_making_a_car_for_blind_drivers.html]]
* [[Suzanne Lee: Grow your own clothes | http://www.ted.com/talks/lang/eng/suzanne_lee_grow_your_own_clothes.html]]
* [[Nathan Myhrvold: Cooking as never seen before | http://www.ted.com/talks/nathan_myhrvold_cut_your_food_in_half.html]]
* [[Catherine Mohr builds green | http://www.ted.com/talks/catherine_mohr_builds_green.html]]
; ふつう
* [[Theo Jansen creates new creatures | http://www.ted.com/talks/theo_jansen_creates_new_creatures.html]]
* [[Martin Hanczyc: The line between life and not-life Video on TED.com | http://www.ted.com/talks/lang/en/martin_hanczyc_the_line_between_life_and_not_life.html]]
* [[Lisa Harouni: A primer on 3D printing | http://www.ted.com/talks/lisa_harouni_a_primer_on_3d_printing.html?utm_source=twitterfeed&utm_medium=twitter&utm_campaign=Feed%3A+TEDTalks_video+%28TEDTalks+Main+%28SD%29+-+Site%29]]
* [[ジェニファー・パルカ「コーディングでより良い政府を作る」 | http://www.ted.com/talks/lang/ja/jennifer_pahlka_coding_a_better_government.html]]
; いまいちか..
* [[Camille Seaman: Haunting photos of polar ice | http://www.ted.com/talks/camille_seaman_haunting_photos_of_ice.html]]
* [[Rob Harmon: How the market can keep streams flowing | http://www.ted.com/talks/rob_harmon_how_the_market_can_keep_streams_flowing.html]]
; まだ
* [[Dan Ariely on our buggy moral code Video on TED.com | http://www.ted.com/talks/dan_ariely_on_our_buggy_moral_code.html]]
* [[Bill Ford: A future beyond traffic gridlock | http://www.ted.com/talks/bill_ford_a_future_beyond_traffic_gridlock.html]]
First of all, I'm a geek. I'm an organic food-eating, carbon footprint-minimizing, robotic surgery geek. And I really want to build green, but I'm very suspicious of all of these well-meaning articles, people long on moral authority and short on data, telling me how to do these kinds of things. And so I have to figure this out for myself. For example: Is this evil? I have dropped a blob of organic yogurt from happy self-actualized local cows on my counter top, and I grab a paper towel and I want to wipe it up. But can I use a paper towel? (Laughter)
The answer to this can be found in embodied energy. This is the amount of energy that goes into any paper towel or embodied water, and every time I use a paper towel, I am using this much virtual energy and water. Wipe it up, throw it away. Now, if I compare that to a cotton towel that I can use a thousand times, I don't have a whole lot of embodied energy until I wash that yogurty towel. This is now operating energy. So if I throw my towel in the washing machine, I've now put energy and water back into that towel ... unless I use a front-loading, high-efficiency washing machine, (Laughter) and then it looks a little bit better. But what about a recycled paper towel that comes in those little half sheets? Well, now a paper towel looks better. Screw the paper towels. Let's go to a sponge. I wipe it up with a sponge, and I put it under the running water, and I have a lot less energy and a lot more water. Unless you're like me and you leave the handle in the position of hot even when you turn it on, and then you start to use more energy. Or worse, you let it run until it's warm to rinse out your towel. And now all bets are off.
(Laughter)
So what this says is that sometimes the things that you least expect -- the position in which you put the handle -- have a bigger effect than any of those other things that you were trying to optimize. Now imagine someone as twisted as me trying to build a house. (Laughter) That's what my husband and I are doing right now. And so, we wanted to know, how green could we be? And there's a thousand and one articles out there telling us how to make all these green trade-offs. And they are just as suspect in telling us to optimize these little things around the edges and missing the elephant in the living room. Now, the average house has about 300 megawatt hours of embodied energy in it; this is the energy it takes to make it -- millions and millions of paper towels.
We wanted to know how much better we could do. And so, like many people, we start with a house on a lot, and I'm going to show you a typical construction on the top and what we're doing on the bottom. So first, we demolish it. It takes some energy, but if you deconstruct it -- you take it all apart, you use the bits -- you can get some of that energy back. We then dug a big hole to put in a rainwater catchment tank to take our yard water independent. And then we poured a big foundation for passive solar. Now, you can reduce the embodied energy by about 25 percent by using high fly ash concrete. We then put in framing. And so this is framing -- lumber, composite materials -- and it's kind of hard to get the embodied energy out of that, but it can be a sustainable resource if you use FSC-certified lumber.
We then go on to the first thing that was very surprising. If we put aluminum windows in this house, we would double the energy use right there. Now, PVC is a little bit better, but still not as good as the wood that we chose. We then put in plumbing, electrical and HVAC, and insulate. Now, spray foam is an excellent insulator -- it fills in all the cracks -- but it is pretty high embodied energy, and, sprayed-in cellulose or blue jeans is a much lower energy alternative to that. We also used straw bale infill for our library, which has zero embodied energy. When it comes time to sheetrock, if you use EcoRock it's about a quarter of the embodied energy of standard sheetrock.
And then you get to the finishes, the subject of all of those "go green" articles, and on the scale of a house they almost make no difference at all. And yet, all the press is focused on that. Except for flooring. If you put carpeting in your house, it's about a tenth of the embodied energy of the entire house, unless you use concrete or wood for a much lower embodied energy. So now we add in the final construction energy, we add it all up, and we've built a house for less than half of the typical embodied energy for building a house like this.
But before we pat ourselves too much on the back, we have poured 151 megawatt hours of energy into constructing this house when there was a house there before. And so the question is: How could we make that back? And so if I run my new energy-efficient house forward, compared with the old, non-energy-efficient house, we make it back in about six years. Now, I probably would have upgraded the old house to be more energy-efficient, and in that case, it would take me more about 20 years to break even. Now, if I hadn't paid attention to embodied energy, it would have taken us over 50 years to break even compared to the upgraded house. So what does this mean? On the scale of my portion of the house, this is equivalent to about as much as I drive in a year, it's about five times as much as if I went entirely vegetarian. But my elephant in the living room flies. Clearly, I need to walk home from TED. But all the calculations for embodied energy are on the blog.
And, remember, it's sometimes the things that you are not expecting to be the biggest changes that are.
Thank you. (Applause)
- - - -
さて 私はギークです 有機食品を食べることや 二酸化炭素排出量の最小化や ロボット外科手術に傾倒しています ぜひ 地球に優しいものをつくりたいのですが 実践方法の説明というのは いつも 善意に基づいてはいますが 道徳的理由に重きをおいて データを軽んじているので とても疑わしく思えるのです だから 自分で検討するしかありません 例えば これは悪い事でしょうか? 自己実現を果たした幸せな地元の牛から作られた -- 有機ヨーグルトを 調理台に少し落としちゃった 紙タオルをつかんで ふきたいけど 紙タオルを使ってもいいのかしら?(笑)
その答えは内包エネルギーにあります 紙タオルを作るのにかかった -- エネルギーや水のことです 紙タオルを使うたびに 仮想的には このくらい 水とエネルギーを使っています 拭いたら 捨てるものです これに対して 1000回使える -- 木綿のタオルなら ヨーグルトの付いたタオルを洗うまでは 内包エネルギー量が比較的少ないのです こちらは運用エネルギーを示しています タオルを洗濯機にかければ エネルギーと水を タオルに費やすことになります 前入れ方式の省エネ洗濯機なら 少しは ましですね その半分の大きさの 再生紙タオルはどうかしら? 紙タオルの方が良さそうですね 紙タオルは さておき スポンジは? スポンジでふいて 流水にさらすと エネルギーは激減し 水は激増しました でも 私みたいに 「温水」のまま蛇口を開ければ エネルギーが増え始めます さらに タオルを洗う前に 温まるまで流しっぱなしにしたら もう 台無しです
(笑)
つまり 時として 最適化しようとしていた どんな要素よりも 蛇口の位置みたいな 意外な要素の方が 大きな影響を与えるのです 次に 私みたいな変わり者が 家を建てようとしている としましょう (笑) 今 夫と家を建築中で どのくらいエコにできるか 知りたいと思っていました エコ実践時のトレードオフについて 説明する記事はたくさんありますが ささいな要素の最適化を勧めて 重要な問題を見逃しているような 傾向があります 平均的な家には 300メガワット時の内包エネルギーが 含まれています 建築に費やしたエネルギーのことです 何百万枚もの紙タオルを作れる量です
これを どこまで改善できるか知りたいと思いました 多くの人と同じように 敷地に 家が建っているところから始まります 上の数値は 一般的な建築の場合で 下の数値は 我が家の場合です 最初に 家を取り壊します エネルギーを費やしますが 分解して バラバラにして 残がいを再利用すれば ある程度エネルギーを取り戻せます 次に 大きな穴を掘って 雨水タンクを設置しました 庭用に水を独立してためるためです 次に 大きな基礎を構築して 太陽熱を単純利用できるようにしました 飛散灰を多く含んだコンクリートを使うと 内包エネルギー量を 25パーセントほど減らせます 次に 骨組みを構築しました この骨組みは 木材や 複合材料ですから 内包エネルギーを戻すのは大変ですが FSCの認証を受けた木材なら 環境に優しい資源だといえます
この建築にあたって 初めて 本当にビックリしたのですが アルミ窓を使うと それだけでエネルギー消費量が倍になるのです PVCなら少しは良いのですが 私たちが選んだ木材には及びません 次に 配管や 電気系統や 空調システムを設置して 断熱材を取り付けます 発泡系断熱材は高性能で すき間を全て埋められますが 内包エネルギー量がかなり高いので セルロースやジーンズの繊維を吹きつける方が エネルギーを減らせます 書斎の充てん材には わらの束を使いました わらの内包エネルギーはゼロです 石こうボードには EcoRockを使えば 内包エネルギーが 一般的な石こうボードの 4分の1になります
次は いよいよ仕上げです 「エコ」をうたった記事でよく取り上げられていますが 家屋ぐらいの規模では ほとんど影響はありません なのにマスコミは重要視しています ただし床は例外です カーペットの内包エネルギーは 家全体の10分の1ほどを占めますが コンクリートか木材に代えれば 内包エネルギーは かなり減ります 残りの建築エネルギーを追加して 合計すると 我が家の内包エネルギーは 同じような家を普通に建てた場合の 半分以下になります
でも 自画自賛する前に考えてみると 既に家があったのに この家を建築するため 151メガワット時を消費したのです そこで疑問がわきます どうすれば それを取り戻せるでしょうか? エネルギー効率の良い新しい家での これからの暮らしを エネルギー効率の悪い古い家と比べてみると 6年で元を取れます ただし 古い家を改良すれば エネルギー効率が高まります その場合と比べると 元をとるまで20年ほど かかります 内包エネルギーを考慮しなければ 改良した家と比べると 元を取るのに 50年以上かかります これに どんな意味があるのでしょう? 我が家ぐらいの規模では 一年に運転で使うエネルギー量と ほぼ同じで 完全にベジタリアンになった場合の 5倍くらいの量です ただし 飛行機に乗るのは問題です 明らかにTEDから歩いて帰らないといけません 私のブログに内包エネルギーの 計算値が載っています
覚えておいてほしいのですが 意外な要素が 一番大きな効果をもたらすことがあるのです
ありがとうございました(拍手)
* [[MinimizeToTrays|https://addons.mozilla.org/ja/thunderbird/addon/2110]] Firefoxでも使える
* [[Lightning | https://addons.mozilla.org/ja/thunderbird/addon/2313]] (Thunderbird専用)
* [[Quicktext |https://addons.mozilla.org/ja/thunderbird/addon/640]]
* [[Addressbooks Synchronizer :: Add-ons for Thunderbird | https://addons.mozilla.org/ja/thunderbird/addon/2533]]
!Description
The TiddlerListMacro lists tiddlers with ~SQL-Like features:
* List tiddlers containing a word in the title or text (case-sensitive)
* List tiddlers tagged with given tags or exclude certain tags
* Ascending and descending sorting of single fields
* Limit number of tiddlers displayed
* Specify different HTML formats for the lists
* Grouping of items in a list
* Customizable wiki templates
* Numbering and totals
!Revision History
* Original by [[Jack]] 17-Apr-2006
* Added formatting (v2.0.1 18-Apr-2006)
* Added grouping (v2.0.2 18-Apr-2006)
* Added flexible filtering (v2.0.3 19-Apr-2006)
* Added custom item templates (v2.0.4 20-Apr-2006)
* Added custom templates (v2.0.5 21-Apr-2006)
* Allow evalled parameters (v2.0.7 23-Apr-2006)
* Allow groupFooterTemplate (v2.0.9 30-Apr-2006)
* Added the customParameter (v2.0.10 2-May-2006)
!To Do
* Case-insensitive searching
* Sorting on multiple fields
!Usage
{{{<<tiddlerList parameter1:"value1" parameter2:"value2" ...>>}}}
!Examples ([[TiddlerListMacroExamples]])
List all tiddlers tagged with "Plugin"
{{{<<tiddlerList tags:Plugin>>}}}
List newest 3 plugins which are not templates:
{{{<<tiddlerList tags:"Plugin,-Template" top:3 order:"-created">>}}}
List all tiddlers containing "Jack" in their title or text (last modified first):
{{{<<tiddlerList search:"Jack" order:"-modified">>}}}
List all tiddlers starting with "T" in a table:
{{{<<tiddlerList title:"^T" format:"table" header:"Tiddlers beginning with T" footer:"%count items listed">>}}}
Group tiddlers by first letter
{{{<<tiddlerList top:"15" group:"tiddler.title.substr(0,1)" groupTemplate:"''%group''">>}}}
Show a list of all tiddlers with creation date (overrides default item template)
{{{<<tiddlerList itemTemplate:"* %link (%created)\n">>}}}
Show all tiddlers that have the host's tiddler title in their tag list
{{{<<tiddlerList filter:"tiddler.tags.contains(currentTiddler.title)">>}}}
!Parameters
|!Parameter|!Type|!Meaning|!Example|
|top|Integer|Number of tiddlers to display|"10"|
|tags|String|List tiddlers with matching tags (AND Logic). Leading - to exclude.|"~ToDo,Urgent,-Done"|
|title|~RegEx|List tiddlers with matching title|"^[Pp]"|
|text|~RegEx|List tiddlers with matching text|"Searchtext"|
|search|~RegEx|List tiddlers with matching title OR text|"Problem"|
|filter*|~JavaScript|List tiddlers according to boolean expression)|"tiddler.title.length<4 && tiddler.tags.contains('Idea')"|
|format|String (fixed list)|HTML formatting of list. list (ul, default), nlist (ol), span, stack (div), csv, table.|"list"|
|order|String|Sort order of tiddlers. - is descending, + ascending|"-created"|
|group*|~JavaScript|Grouping field|tiddler.title.substr(0,1)|
|customParameter*|~JavaScript|Custom parameter to be evalled for use in the itemTemplate|tiddler.text.match(/Version: (.*)/)[1]|
|header|String|Top caption|"Tiddlers beginning with T"|
|footer|String|Bottom caption|"End of list"|
|itemTemplate|~WikiTemplate|~WikiText with %placeholders|"%link\n%abstract\n%modified"|
|groupTemplate|~WikiTemplate|~WikiText with %placeholders for the start of each group|"!!%group"|
|groupFooterTemplate|~WikiTemplate|~WikiText with %placeholders for the end of each group|"----\n"|
|dateFormat|String|Date formatting string when displaying dates|~YYYY-MM-DD|
|separator|String|Define a string or character to be inserted between items listed|" "|
|debug|Boolean|Set to 1 or true for debug mode where only wikitext will be output|debug:1|
{{{*}}} Parameter will be evalled (do not pass with {{{{{ }} }}} unless you want it evalled twice!)
!Template Placeholders
Placeholder values for itemTemplate parameter
|!Placeholder|!Field|
|%item|List item number|
|%link|Link to Tiddler {{{[[MyTiddler]]}}}|
|%title|Tiddler Name {{{MyTiddler}}}|
|%nolink|Unlinked Tiddler Title {{{~MyTiddler}}}|
|%abstract|First 300 chars of tiddler text|
|%text|All tiddler text|
|%tags|Tags separated by space|
|%created|Creation date|
|%modified|Modified date|
|%modifier|Last modifier|
|%group|Name of group field|
|%custom|The result of your evalled customParameter|
|%count|Number of items listed (footer only)|
!Variables
{{{{{currentTiddler}} }}}refers to the current (host) tiddler in function scope (i.e. within the filter or group parameters)
{{{{{gCurrentTiddler}} }}}refers to the current (host) tiddler in global scope (i.e. within{{{ {{}} }}}evalled parameters. Example:
{{{<<tiddlerList tags:{{gCurrentTiddler.title}}>>}}}
!Style
No styles are pre-assigned to the lists. Use {{{@@}}} notation to define custom styles in the header, footer, groupTemplate and itemTemplate parameters.
Examples using the TiddlerListMacro:
!List Formatting
List all tiddlers tagged with "Plugin"
{{{<<tiddlerList tags:Plugin>>}}}
<<tiddlerList tags:Plugin>>
List top 1 plugins which are not templates:
{{{<<tiddlerList tags:"Plugin,-Template" top:1>>}}}
<<tiddlerList tags:"Plugin,-Template" top:1>>
List all tiddlers containing "Plugin" in their title and text (newest first):
{{{<<tiddlerList title:"Plugin" text:"Plugin" order:"-created">>}}}
<<tiddlerList title:"Plugin" text:"Plugin" order:"-created">>
List all tiddlers containing "Jack" in their title or text (oldest first):
{{{<<tiddlerList search:"Jack" order:"created">>}}}
<<tiddlerList search:"Jack" order:"created">>
List all tiddlers starting with "T":
{{{<<tiddlerList title:"^T">>}}}
<<tiddlerList title:"^T">>
List all tiddlers tagged with the current tiddler's title:
{{{<<tiddlerList tags:{{window.currentTiddler.title}}>>}}}
<<tiddlerList tags:{{window.currentTiddler.title}}>>
!Other Formats
Simple unnumbered list of tiddlers
{{{<<tiddlerList top:"3" format:"list">>}}}
<<tiddlerList top:"3" format:"list">>
Numbered list of tiddlers
{{{<<tiddlerList top:"3" format:"nlist">>}}}
<<tiddlerList top:"3" format:"nlist">>
Table with header and footer
{{{<<tiddlerList top:"3" format:"table" header:"Plugins" footer:"Tiddlers: %count">>}}}
<<tiddlerList top:"3" format:"table" header:"Plugins" footer:"Tiddlers: %count">>
Simple horizontal list:
{{{<<tiddlerList top:"3" format:"span">>}}}
<<tiddlerList top:"3" format:"span">>
Comma Separated list
{{{<<tiddlerList top:"3" format:"csv" header:"Plugins: [ " footer:" ]">>}}}
<<tiddlerList top:"3" format:"csv" header:"Plugins: [ " footer:" ]">>
Custom Separated list
{{{<<tiddlerList top:"10" separator:" - " format:"span">>}}}
<<tiddlerList top:"10" separator:" - " format:"span">>
!Grouping
Group tiddlers by first letter
{{{<<tiddlerList top:"7" group:"tiddler.title.substr(0,1)">>}}}
<<tiddlerList top:"7" group:"tiddler.title.substr(0,1)">>
!Custom Item Templates
List tiddlers in a custom format (title, date, abstract)
{{{<<tiddlerList tags:"News,-Template" itemTemplate:"* %link (%created)<<br>>%abstract\n" order:"-created">>}}}
<<tiddlerList tags:"News,-Template" filter:"tiddler.title!=currentTiddler.title" itemTemplate:"%link (%created)\n%abstract" order:"-created">>
!!!Beware of infinite recursion!!
!Advanced
Tiddlers created today
{{{<<tiddlerList format:table filter:"tiddler.created.formatString('YYYYMMDD')==(new Date()).formatString('YYYYMMDD')" header:{{'Tiddlers created on ' + (new Date()).formatString('DDD, DD MMM YYYY')}}>>}}}
<<tiddlerList format:table filter:"tiddler.created.formatString('YYYYMMDD')==(new Date()).formatString('YYYYMMDD')" header:{{'Tiddlers created on ' + (new Date()).formatString('DDD, DD MMM YYYY')}}>>
Fancy table with grouping on modified date
{{{<<tiddlerList top:"10" header:"|>|!Tiddlers|\n|bgcolor(#ddf):''Title''|bgcolor(#ddf):''Created''|" itemTemplate:"|%0|%4|\n" format:"table" group:"tiddler.created.formatString('DD MMM YYYY')" groupTemplate:"|>|bgcolor(#eef): ''Updated: %group'' |\n" dateFormat:"DDD, DD MM YYYY">>}}}
<<tiddlerList top:"10" header:"|>|!Tiddlers|\n|bgcolor(#ddf):''Title''|bgcolor(#ddf):''Created''|" itemTemplate:"|%0|%4|\n" format:"table" group:"tiddler.created.formatString('DD MMM YYYY')" groupTemplate:"|>|bgcolor(#eef): ''Updated: %group'' |\n" dateFormat:"DDD, DD MM YYYY">>
* ~WikiLinkの正規表現
** だいたいこんな感じ? (?:(?:[A-Z]+[a-z0-9_]+[A-Z].*)|(?:[A-Z]{2,}[a-z0-9_])) HHelloKvvvあ
{{{
(provide "my/tiddly-mode")
(in-package "my-custom")
(export '(*tiddly-mode-hook*
*tiddly-mode-syntax-table*
*tiddly-mode-map*
))
(export '(tiddly-mode
tiddly-test
tiddly-header-shift-or-clear tiddly-header-unshift
tiddly-ul-shift-or-clear tiddly-ul-unshift
tiddly-ol-shift-or-clear tiddly-ol-unshift
tiddly-quote-shift-or-clear tiddly-quote-unshift
tiddly-add-em-mark
tiddly-add-em))
;; Define hook.
(defvar *tiddly-mode-hook* nil)
(defvar *tiddly-mode-syntax-table* nil)
(unless *tiddly-mode-syntax-table*
(setq *tiddly-mode-syntax-table* (make-syntax-table))
)
;; Key Map
(defvar *tiddly-mode-map* nil)
(unless *tiddly-mode-map*
(setq *tiddly-mode-map* (make-sparse-keymap))
(define-key *tiddly-mode-map* #\C-j 'tiddly-header-shift-or-clear)
(define-key *tiddly-mode-map* #\M-j 'tiddly-header-unshift)
(define-key *tiddly-mode-map* #\C-k 'tiddly-ul-shift-or-clear)
(define-key *tiddly-mode-map* #\M-k 'tiddly-ul-unshift)
(define-key *tiddly-mode-map* #\C-l 'tiddly-ol-shift-or-clear)
(define-key *tiddly-mode-map* #\M-l 'tiddly-ol-unshift)
(define-key *tiddly-mode-map* #\C-\; 'tiddly-quote-shift-or-clear)
(define-key *tiddly-mode-map* '(#\C-z #\C-z) 'tiddly-add-em)
)
(setq tiddly-mode-max-list-depth 5)
(setq tiddly-quotation-mark "''")
(setq tiddly-header-prefix "!")
(setq tiddly-ul-prefix "*")
(setq tiddly-ol-prefix "#")
(setq tiddly-quote-prefix ">")
(setq tiddly-prefix-list
(list tiddly-header-prefix
tiddly-ul-prefix
tiddly-ol-prefix
tiddly-quote-prefix))
;; -------------------------------------------------------------
(defun get-list-depth (prefix)
""
(save-excursion
(goto-bol)
(- (progn (skip-chars-forward prefix) (point))
(progn (skip-chars-backward prefix) (point)))))
(defun get-current-line-list-prefix ()
""
(car
(remove-if-not
#'(lambda (prefix)
(save-excursion
(goto-bol)
(string= prefix (buffer-substring (point) (+ (point) 1)))))
tiddly-prefix-list)))
(defun tiddly-list-shift (prefix)
""
(save-excursion
(let ((current-line-prefix (get-current-line-list-prefix)))
(and
(< (get-list-depth prefix) tiddly-mode-max-list-depth)
(if current-line-prefix (string= current-line-prefix prefix) t)
(progn (goto-bol) (insert prefix))))))
(defun tiddly-list-unshift (prefix)
""
(save-excursion
(if (> (get-list-depth prefix) 0)
(progn (goto-bol) (delete-char 1)))))
(defun tiddly-list-shift-or-clear (prefix)
(if (/= (get-list-depth prefix) tiddly-mode-max-list-depth)
(tiddly-list-shift prefix)
(save-excursion
(goto-bol) (delete-char tiddly-mode-max-list-depth))))
(defun tiddly-add-quotation-mark (from to mark)
(if (> from to)
(rotatef from to))
(save-excursion
(goto-char to)
(insert mark)
(goto-char from)
(insert mark)))
;; -------------------------------------------------------------
; interactive function.
(defun tiddly-header-shift-or-clear ()
"" (interactive "*")
(tiddly-list-shift-or-clear tiddly-header-prefix))
(defun tiddly-header-unshift () "" (interactive "*") (tiddly-list-unshift tiddly-header-prefix))
(defun tiddly-ul-shift-or-clear ()
"" (interactive "*")
(tiddly-list-shift-or-clear tiddly-ul-prefix))
(defun tiddly-ul-unshift () "" (interactive "*") (tiddly-list-unshift tiddly-ul-prefix))
(defun tiddly-ol-shift-or-clear ()
"" (interactive "*")
(tiddly-list-shift-or-clear tiddly-ol-prefix))
(defun tiddly-ol-unshift () "" (interactive "*") (tiddly-list-unshift tiddly-ol-prefix))
(defun tiddly-quote-shift-or-clear ()
"" (interactive "*")
(tiddly-list-shift-or-clear tiddly-quote-prefix))
(defun tiddly-quote-unshift () "" (interactive "*") (tiddly-list-unshift tiddly-quote-prefix))
(defun tiddly-add-em ()
""
(interactive "*")
(cond ((selection-start-end (start end)
(tiddly-add-quotation-mark start end tiddly-quotation-mark)))
((mark t)
(tiddly-add-quotation-mark (region-beginning) (region-end) tiddly-quotation-mark))))
(defun tiddly-add-em-mark ()
"" (interactive "*") (insert tiddly-quotation-mark))
(defun tiddly-convert-to-tiddly-format ()
"" (interactive "*")
)
;; -------------------------------------------------------------
(defun tiddly-mode ()
(interactive)
(kill-all-local-variables)
(setq mode-name "Tiddly")
(setq buffer-mode 'tiddly-mode)
(use-syntax-table *tiddly-mode-syntax-table*)
(use-keymap *tiddly-mode-map*)
(make-local-variable 'auto-save)
(setq auto-save nil)
(run-hooks '*tiddly-mode-hook*))
}}}
* [[TiddlyWiki Style - Tips, Macros and FAQ|http://www.geocities.jp/wikistyle/]]
* [[JavaScript 第5版 David Flanagan (著) 村上 列 (翻訳) |http://www.amazon.co.jp/JavaScript-第5版-David-Flanagan/dp/4873113296]]
* [[特集:jquery.jsを読み解く|gihyo.jp … 技術評論社 | http://gihyo.jp/dev/feature/01/jquery]]
* [[jQueryコードリーディング:セレクタを渡した場合の挙動について - $('a') は何を返すか - | http://d.hatena.ne.jp/gnarl/20110226/1298731211]]
* [[call メソッド : Function オブジェクト : JavaScript リファレンス - Web/DB プログラミング徹底解説|http://keicode.com/jsref/function.call.php]]
* 使用しているライブラリ
** [[Lua SJIS対応版|http://hammm.dw.land.to/lua/]]
** [[IUP - Portable User Interface|http://www.tecgraf.puc-rio.br/iup/]]
** [[CD - Canvas Draw|http://www.tecgraf.puc-rio.br/cd/]]
* なんとなく、Lua はShift JIS 対応版を使った
* manifest やらの問題があるので、Cランタイムはスタティックリンクした
** [[VS2008SP1 マニフェストに関する不具合の回避方法 « nabehide’s sol-log|http://nabehide.jp/sollog/?p=22]]
** [[MSVCR80.dll/MSVCR90.dllに依存しないようにする方法 |http://d.hatena.ne.jp/hideAki/20080617/1213691492]]
* IUP や CD のライブラリはリリースビルドされているようなので、 ランタイムのオプションは ''/MT'' にする
* あと、自動でmanifestを埋め込むのをやめて、自分で作成したmanifestを埋め込んだ
* コンソール画面を隠した
** [[VC++,glut,コンソール非表示 |http://d.hatena.ne.jp/gnarl/20071012/1192197418]]
* [[A look at Lua 5.2 (work3) | Corsix.org|http://www.corsix.org/content/look-lua-52-work3]]
; レントゲン
* http://www.kunii-seikei.jp/pc/index.html
* http://www.kosaka-seikeigeka.com/doctor.html
* http://caloo.jp/hospitals/detail/2120070990/map
* http://www.kusakabe.or.jp/
|| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|柿しぶ染め| | | | | | | | | | | | |柿渋で世界でたった一つの作品づくり |
|みそづくり| | | | | | | | | | | | |
|こんにゃくづくり| | | | | | | | | | | | |
|桜の花塩漬け| | | | | | | | | | | | |
|もちつき| | | | | | | | | | | | |
|柿しぶ染め| | | | | | | | | | | | |
|みそづくり| | | | | | | | | | | | |
|こんにゃくづくり| | | | | | | | | | | | |
|桜の花塩漬け| | | | | | | | | | | | |
|もちつき| | | | | | | | | | | | |
|柿しぶ染め| | | | | | | | | | | | |
|みそづくり| | | | | | | | | | | | |
|こんにゃくづくり| | | | | | | | | | | | |
|桜の花塩漬け| | | | | | | | | | | | |
|もちつき| | | | | | | | | | | | |
|柿しぶ染め| | | | | | | | | | | | |
|みそづくり| | | | | | | | | | | | |
|こんにゃくづくり| | | | | | | | | | | | |
|桜の花塩漬け| | | | | | | | | | | | |
|もちつき| | | | | | | | | | | | |
|| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | |
|柿しぶ染め| | | | | | | | | | | | |
|みそづくり| | | | | | | | | | | | |
|こんにゃくづくり| | | | | | | | | | | | |
|桜の花塩漬け| | | | | | | | | | | | |
|もちつき| | | | | | | | | | | | |
|柿しぶ染め| | | | | | | | | | | | |
|みそづくり| | | | | | | | | | | | |
|こんにゃくづくり| | | | | | | | | | | | |
|桜の花塩漬け| | | | | | | | | | | | |
|もちつき| | | | | | | | | | | | |
|柿しぶ染め| | | | | | | | | | | | |
|みそづくり| | | | | | | | | | | | |
|こんにゃくづくり| | | | | | | | | | | | |
|桜の花塩漬け| | | | | | | | | | | | |
|もちつき| | | | | | | | | | | | |
|柿しぶ染め| | | | | | | | | | | | |
|みそづくり| | | | | | | | | | | | |
|こんにゃくづくり| | | | | | | | | | | | |
|桜の花塩漬け| | | | | | | | | | | | |
|もちつき| | | | | | | | | | | | |
|! Parameter |! Value |
| | |
| | |
| | |
TODO リストで扱うものは、
# ''しなければいけないこと (MUST)''
# ''絶対すると決めたこと''
だけにする。
さらに、 MUST であっても、
# 基本的には、1週間以内の項目だけ
# すごく、重要な項目は、1ヶ月以内くらい
ただ、2週間後に必要になるような項目については、
期限1週間になったら自動で TODO リストに追加されるようにしたい。
なので、
''月ごとに発生するような項目については、決まった日に Task が登録されるようにする''
ifttt => gmail => tood
しかし、2週間後に1回だけ行うような項目のよい登録方法が思いつかない..
とりあえず ifttt かな..
* [[ifttt | https://ifttt.com/login]]
* [[Toodledo | https://www.toodledo.com/signin.php]]
tr '[a-z]' '[A-Z]' < file
file内の小文字を大文字に変換する。
<<tag "TW5">>
<<list-links filter:"[tag[TW5]]">>
----
! Highlight.js
```
- Open https://highlightjs.org/download/
- Select the language you want and then click download
- Unzip the highlight.zip and open the highlight.pack.js in a text editor
- Paste the following line as the first line in the text editor
| var hljs = require("$:/plugins/tiddlywiki/highlight/highlight.js");
- Paste the following line as the last line in the text editor
| exports.hljs = hljs;
- Open the $:/plugins/tiddlywiki/highlight/highlight.js tiddler in your wiki and click on edit button from text editor
- Replace the content of this tiddler with the content of edited highlight.pack.js from text editor
- Save tiddler and save wiki
- Close and reopen the wiki
- Enjoy
```
[[[TW5] How to add and use highlight style?|https://groups.google.com/forum/#!topic/tiddlywiki/ufyuVgqjT9Y]]
! References
* [[TiddlyWiki|https://tiddlywiki.com/#Core%20Macros]]
----
! サンプル
!! Tag マクロ
```
<<tag>>
<<tag "出かける">>
```
<<tag>>
<<tag "出かける">>
----
!! list-links
```
<<list-links filter:"[tag[画像処理]]">>
```
<<list-links filter:"[tag[画像処理]]">>
----
!! filter の使い方
; A かつ B
```
<<list-links filter:"[tag[難しい算数]tag[積分]]">>
```
<<list-links filter:"[tag[難しい算数]tag[積分]]">>
; prefix
```
<<list-links filter:"[prefix[ベクトル]]">>
```
<<list-links filter:"[prefix[ベクトル]]">>
----
!! Table of Contents
```
<<toc "出かける">>
```
<<toc "出かける">>
---
---
```
<div class="tc-table-of-contents">
<<toc "難しい算数">>
</div>
```
<div class="tc-table-of-contents">
<<toc "難しい算数">>
</div>
---
```
{{{ [tag[出かける]] }}}
```
{{{ [tag[出かける]] }}}
----
Available character formatting includes:
```
`backticks for code`
Alternatively, ``double backticks allows `embedded` backticks``
''bold'' for bold text
//italic// for italic text
__underscore__ for underscored text
^^superscript^^ for superscript text
,,subscript,, for subscripted text
~~strikethrough~~ for strikethrough text
```
"""
`backticks for code`
Alternatively, ``double backticks allows `embedded` backticks``
''bold'' for bold text
//italic// for italic text
__underscore__ for underscored text
^^superscript^^ for superscript text
,,subscript,, for subscripted text
~~strikethrough~~ for strikethrough text
"""
----
```
{{IELTS!!text}}
```
{{IELTS!!text}}
! クラス図
; クラス間の関係
| ! | !表記 | !説明 |
|汎化 | [スーパクラス ] ◁------ [サブクラス] |
|実装 | [インタフェース] ◁ - - - [クラス ] |
|~| ○------ [クラス ] |
|集約 | [クラスA ]◇------ [クラスB] | クラスAがクラスBを持つ|
|コンポジット| [クラスA ]◆------ [クラスB] |
; クラスメンバー
| ! | !表記 | !説明 |
|public | + |
|protected | # |
|private | - |
|package | ~ | パッケージ内で可視 |
(staticなメンバーには、下線を引く)
! シーケンス図
; メッセージ
| ! | !表記 | !説明 |
|同期メッセージ | ------ ► | 黒塗りの実線矢印 |
|同期メッセージのリプライ | - - - > | 点線矢印 |
|非同期メッセージ | ------ > | 実線矢印 |
; 結合フラグメント
| !表記 | !説明 |
|opt |1つの処理を実行するかどうかを選択させる。 ( if文 ) |
|alt |処理の分岐を表す。 (if ~ else 文) |
|loop |繰り返し |
* https://physics.nist.gov/cuu/Uncertainty/
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 26/04/2016 15:09:27 | YourName | [[/|http://hikikomorigoto.tiddlyspot.com/]] | [[store.cgi|http://hikikomorigoto.tiddlyspot.com/store.cgi]] | . | [[index.html | http://hikikomorigoto.tiddlyspot.com/index.html]] | . |
| 26/04/2016 15:12:15 | ss | [[/|http://hikikomorigoto.tiddlyspot.com/]] | [[store.cgi|http://hikikomorigoto.tiddlyspot.com/store.cgi]] | . | [[index.html | http://hikikomorigoto.tiddlyspot.com/index.html]] | . | ok |
| 26/04/2016 15:13:22 | ss | [[/|http://hikikomorigoto.tiddlyspot.com/]] | [[store.cgi|http://hikikomorigoto.tiddlyspot.com/store.cgi]] | . | [[index.html | http://hikikomorigoto.tiddlyspot.com/index.html]] | . | ok |
| 26/04/2016 15:15:03 | ss | [[/|http://hikikomorigoto.tiddlyspot.com/]] | [[store.cgi|http://hikikomorigoto.tiddlyspot.com/store.cgi]] | . | [[index.html | http://hikikomorigoto.tiddlyspot.com/index.html]] | . | ok |
| 26/04/2016 15:18:30 | ss | [[/|http://hikikomorigoto.tiddlyspot.com/]] | [[store.cgi|http://hikikomorigoto.tiddlyspot.com/store.cgi]] | . | [[index.html | http://hikikomorigoto.tiddlyspot.com/index.html]] | . | ok |
| 26/04/2016 15:21:01 | ss | [[/|http://hikikomorigoto.tiddlyspot.com/]] | [[store.cgi|http://hikikomorigoto.tiddlyspot.com/store.cgi]] | . | [[index.html | http://hikikomorigoto.tiddlyspot.com/index.html]] | . | ok |
| 26/04/2016 15:24:25 | ss | [[/|http://hikikomorigoto.tiddlyspot.com/]] | [[store.cgi|http://hikikomorigoto.tiddlyspot.com/store.cgi]] | . | [[index.html | http://hikikomorigoto.tiddlyspot.com/index.html]] | . |
| 26/04/2016 15:27:19 | ss | [[/|http://hikikomorigoto.tiddlyspot.com/]] | [[store.cgi|http://hikikomorigoto.tiddlyspot.com/store.cgi]] | . | [[index.html | http://hikikomorigoto.tiddlyspot.com/index.html]] | . |
| 26/04/2016 15:47:50 | ss | [[/|http://hikikomorigoto.tiddlyspot.com/]] | [[store.cgi|http://hikikomorigoto.tiddlyspot.com/store.cgi]] | . | [[index.html | http://hikikomorigoto.tiddlyspot.com/index.html]] | . |
| 26/04/2016 16:04:49 | YourName | [[/|http://hikikomorigoto.tiddlyspot.com/]] | [[store.cgi|http://hikikomorigoto.tiddlyspot.com/store.cgi]] | . | [[index.html | http://hikikomorigoto.tiddlyspot.com/index.html]] | . |
<<tag "URLs">>
<<tabs "出かける 泳ぐ 調べる お気に入りページ" "出かける" "$:/state/tab1">>
<<tag VB.NET>>
<<tree prefix:"VB.NET/">>
<<tree prefix:".NET/">>
---
<<<
Visual Basic .NET (ヴィジュアル ベーシック ドットネット)はマイクロソフトが開発したプログラミング言語およびその処理系。VB.NETと略されて呼ばれることが多い。.NETに対応していない旧来のMicrosoft Visual Basic(バージョン6.0まで、VB6)の後継である。
<<<
[[Microsoft Visual Basic .NET - Wikipedia|https://ja.wikipedia.org/wiki/Microsoft_Visual_Basic_.NET]]
ってことらしい。Excel の [[VBA]] とは別の言語仕様 (VBA は VB6)。
! リファレンス
* [[Visual Basic の言語リファレンス 2015/07/20|https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/]]
* [[.Net API リファレンス|https://docs.microsoft.com/ja-jp/dotnet/api/?view=netframework-4.7.2]]
* [[Java屋さんからVB.netプログラマになるために - Qiita|https://qiita.com/5zm/items/44d05463875ff0e29da0]]
---
! Visual Studio
!! エントリーポイント
<<<
VB.NETでは、Mainメソッドがエントリポイントですが、 WindowsフォームアプリケーションプロジェクトにはMainメソッドが見当たりません。 エントリポイントであるMainメソッドは、コンパイラによって自動的に作成されます。 以下の様にプロジェクトのプロパティ設定で「スタートアップ オブジェクト」を Form1 に 設定すれば自動でMainメソッドが生成され、その中で Form1 を生成し、表示する様になっています。
<<<
http://rnk.mitelog.jp/oyaji/2016/04/vbnetmain-6a72.html
Visual Studio 2017 では、[[Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase|https://docs.microsoft.com/ja-jp/dotnet/api/microsoft.visualbasic.applicationservices.windowsformsapplicationbase?view=netframework-4.8]] を継承した ~MyApplication クラスのインスタンスが自動で生成されていた。
!! 規定の名前空間 (Root namespace)
特に名前空間を指定しない限りは、モジュールやクラスは既定の名前空間に属す。規定の名前空間は、「''プロジェクト ⇒ 設定 ⇒ アプリケーション ⇒ 規定の名前空間''」で行う。
* https://www.atmarkit.co.jp/ait/articles/1804/18/news019.html
!! リソースの管理
* 「Project -> Properties -> Resources」から行う
** リソースのタイプの切り替えは、表示される pane の左上のところで行う (分かりにくい)。
* 追加されたリソースは、自動的に作成される ''My.Resources'' モジュールを通して取得できる。
** モジュール内のスタティックなプロパティとして定義されているので、ただアクセスするだけでよい。
** "My Project/Resource.Designer.vb"
[[Visual Studioでリソースを管理する - .NET Tips (VB.NET,C#...)|https://dobon.net/vb/dotnet/programing/vsresource.html]]
---
! 言語の仕様
似ている部分もあるが、VB6 とはかなり異なる言語仕様になっているらしい。
* [[VB6からVB.NETへのマイグレーションは成功するか。 - To be a professional|http://torutakefusa.hatenablog.com/entry/2016/09/20/143941]]
* http://www.asahi-net.or.jp/~ef2o-inue/vbnet/sub13_99_000.html
!! [[変数|VB.NET/言語仕様/変数]]
「型の推論」により省略可能なケースもあるが、基本的には、変数の型は指定する。
* VBA とは違い、型の指定をまとめて行うこともできる。
* クラス変数は、参照である。
!! [[繰り返し処理|VB.NET/言語仕様/繰り返し]]
3タイプの構文が用意されている。
* For 文 (For Next, For Each)
* While
* Do Loop
!! 条件分岐
* If 文
** ''If''() ''Then'' ... ''~ElseIf'' () ''Then'' ... ''Else'' ... ''End If''
** VB.NET にはぶら下がり文は無い
!! [[関数|VB.NET/言語仕様/関数]]
* VB.Net には ''Sub'' (戻り値なし) と ''Function'' (戻り値あり) の2種類がある。
* 引数に対して ''~ByVal''(値渡し)や ''~ByRef''(参照渡し)の修飾子を指定できる。
* ''Optional'' の修飾子を使うと、省略可能な引数を定義できる。
* 戻り値のデータ型は、指定を省略した場合には Variant 型になる。
!! [[名前空間 (Namespace)|VB.NET/言語仕様/名前空間]]
* すべてのモジュール・クラスは、何らかの名前空間に属する。
* VB.NETではプロジェクトに既定の名前空間を指定でき、名前空間を明示しなかった場合は、その名前空間に属すことになる。
* 指定した名前空間に属するようにする場合は、''Namespace'' キーワードを使用する。
** 既定の名前空間が ''~MyProject'' の場合、宣言した名前空間は ''~MyProject'' 名前空間に属する ''~MyProject.~SampleNamespace'' 名前空間になる。
* 他の名前空間のモジュール内にあるメンバを参照するには "''名前空間.モジュール名.メンバ名''" とする。
* 長い名前空間名を毎回記述するのを回避するために、 ''Imports'' キーワードが用意されている。
!! [[モジュール (Module)|VB.NET/言語仕様/モジュール]]
次のような特徴を持った特別なクラス。
* インスタンス化はできない
** モジュール型の変数は宣言できない
* モジュール内のメンバーは、(暗黙的に) すべて ''Shared''(C#でいうstatic)になる
* 暗黙的にクラスは ~NotInheritableとなる(派生クラスを記述できない)
[[VB.NETでもクラスとモジュールの違いを知りたい - レンコン畑でつかまえて|https://jyuch.hatenablog.com/entry/2017/06/03/013829]]
!! [[クラス|VB.NET/言語仕様/クラス]]
* 多重継承はできない
* キーワード ''Partial'' を使って、クラスのコードを複数のファイルに分割することができる
* クラス型の変数は参照なので、(構造体の場合とは異なり) 変数を宣言しただけではクラスは生成されない (クラスを new する必要がある)。
!! 構造体 (Structure)
!! 例外
Java とは、例外に対するフィロソフィーが違うらしい。
* https://blogs.msdn.microsoft.com/nakama/2009/01/08/netjava/
!! [[データ型|VB.NET/言語仕様/データ型]]
* [[データ型の概要|https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/data-types/]]
|Visual Basic の型 |デフォルト値 |公称記憶域の割り当て |h
|Boolean | False |プラットフォームの実装に依存します。 |
|Byte | 0 |1 バイト |
|Char?(単一の文字) | 0 |2 バイト |
|Date | |8 バイト |
|Decimal | 0 |16 バイト |
|Double(倍精度浮動小数点数) | 0 |8 バイト |
|Integer | 0 |4 バイト |
|Long(長整数) | 0 |8 バイト |
|Object | |32 ビット プラットフォームでは 4 バイト |
|| |64 ビット プラットフォームでは 8 バイト |
|SByte | |1 バイト |
|Short(短整数型) | |2 バイト |
|Single(単精度浮動小数点数) | |4 バイト |
|String(可変長) | |プラットフォームの実装に依存します。 |
|UInteger | |4 バイト |
|ULong | |8 バイト |
|ユーザー定義(構造) | |プラットフォームの実装に依存します。 |
|UShort | |2 バイト |
!! [[LINQ|.NET/LINQ]]
* http://yohshiy.blog.fc2.com/blog-entry-274.html
!! その他
* ForEach では要素名を取得できない、っぽい。
** https://qiita.com/jun1s/items/aabb85f10c7a2ee84bc2
---
! [[プリプロセッサ|VB.NET/プリプロセッサ]]
できることはかなり限られているが、 VB.NET には、プリプロセッサの機能がある。
* 条件付きコンパイル
* 条件付き定数
----
! Attributes
カスタム属性クラス
---
; system.diagnostics.debug
基本的なデバッグ用の関数は、この名前空間の中にある。
; 条件コンパイル
書き方は、C言語と同じ。
; 領域ディレクティブ
<<<
プリプロセッサには、ソース・コードのある領域を区切って印を付けるディレクティブがある。#Regionと#End Regionで囲まれた範囲は、領域として区切られる。
...
領域を区切っても、ビルドした結果には何の影響も及ぼさない。しかし、統合開発環境では便利に使うことができる。
<<<
https://www.atmarkit.co.jp/fdotnet/vb6tonet2/vbnet2_16/vbnet2_16_02.html
* 多重継承はない
* 複数のクラスの定義を一つのファイルに書くことも可能。
** VB6 では、一つのclsファイルに一つのクラスを記述していた
* キーワード ''Partial'' を使って、クラスのコードを複数のファイルに分割することができる
* (構造体の場合とは異なり) クラス型の変数は参照なので、 変数を宣言しただけではクラスは生成されない。
---
! キーワード
|Me |自身のインスタンスを指す |
|~MyClass | |
|~MyBase |基底クラスを指す |
http://rucio.a.la9.jp/main/VBdotNet/Advance/Advance3.htm
----
! サンプル
```vbnet
Imports System
Class Account
' 共有メンバ
Private Shared Count As Integer = 0
' 非共有(インスタンス)メンバ
Public ID As Integer
Public Name As String
Public Sub New()
' インスタンスが作成される度にCountをカウントアップする
Count += 1
End Sub
' 共有メソッド
Public Shared Sub PrintCount()
Console.WriteLine(Count)
End Sub
End Class
Module Sample
Sub Main()
' インスタンスを3つ作成する
Dim alice As New Account()
Dim bob As New Account()
Dim charlie As New Account()
' インスタンスメンバの変更
alice.ID = 1
alice.Name = "Alice"
' 共有メソッドを呼び出して作成されたインスタンスの数を表示する
Account.PrintCount()
End Sub
End Module
```
https://smdn.jp/programming/vb.net/class/
!! Static 変数
VB.NET でStatic 変数したい時は、''Shared'' キーワードを使う。
---
! クラス定義の分割
<<<
.NET Framework 2.0 以降ではクラス宣言時に partial 句を追加することによりクラス定義を別ブロックや別ファイルなどに分離させることが可能です。
<<<
[[[VB.NET] 部分クラスを使用したクラス構築方法 言語: VB.NET|https://code.msdn.microsoft.com/windowsdesktop/VB-c4c7927a]]
---
|Visual Basic の型 |共通言語ランタイム型の構造 |デフォルト値 |公称記憶域の割り当て |値の範囲 |h
|''Boolean'' |Boolean | False |プラットフォームの実装に依存します。 |''True'' または ''False'' |
|Byte |Byte | 0 |1 バイト |0 ~ 255 (符号なし) |
|Char (単一の文字) |Char | |2 バイト |0 ~ 65535 (符号なし) |
|Date |DateTime | |8 バイト |0:00:00 (午前 0 時) に 9999 年 12 月 31 日の 11時 59分: 59 PM 0001 年 1 月 1日 |
|Decimal |Decimal | |16 バイト |79,228,162,514,264,337,593,543,950,335 +/-0 ~ (7.9. +/-E + 28) なしで数値には、小数点の右側の桁数が 28 +/-0 ~; 10 進数のポイント |
|~|~|~|~|0 以外の最小数は、(1 e ~ 28) +/-+/-0.0000000000000000000000000001 |
|''Double'' <br>(倍精度浮動小数点数) |Double | 0 |8 バイト |-- を 4.94065645841246544E-324 の負の値。 |
|~|~|~|~|4.94065645841246544E-324 1.79769313486231570 e + 308 ~?†正の値の |
|''Integer'' |Int32 | 0 |4 バイト |-2,147, 483,648 ~ 2,147, 483,647 (符号あり) |
|''Long'' (長整数) |Int64 | |8 バイト |9,223,372,036,854,775,807 を通じて-9,223,372,036,854,775,808 (9.2... E + 18?†) (符号あり) |
| | | | | |
|''Object'' |Object?(クラス) | |32 ビット プラットフォームでは 4 バイト |型の変数に格納できる任意の型 ''Object'' |
|~|~|~|64 ビット プラットフォームでは 8 バイト |~|
| | | | | |
|SByte |SByte | |1 バイト |-128 ~ 127 (符号あり) |
|Short(短整数型) |Int16 | |2 バイト |-32,768 ~ 32,767 (符号あり) |
|Single(単精度浮動小数点数) |Single | |4 バイト |-3.4028235 e + 38 ~ - 1.401298E-45?†の負の値。 |
| | | | | |
| | | | |1.401298E-45 3.4028235 e + 38 ~?†正の値の |
|String(可変長) |String?(クラス) | |プラットフォームの実装に依存します。 |0 ~ 約 20億 Unicode 文字 |
|UInteger |UInt32 | |4 バイト |0 ~ 4,294,967,295 (符号なし) |
|ULong |UInt64 | |8 バイト |0 ~ 18,446,744,073,709,551,615 (1.8... E + 19?†) (符号なし) |
|ユーザー定義(構造) |(継承ValueType) | |プラットフォームの実装に依存します。 |構造体の各メンバーにそのデータ型とその他のメンバーの範囲の独立したによって決定範囲 |
|UShort |UInt16 | |2 バイト |0 ~ 65535 (符号なし) |
----
! リファレンス
* [[データ型の概要|https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/data-types/]]
-
* https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/data-types/boolean-data-type
* https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/data-types/byte-data-type
* https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/data-types/integer-data-type
* https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/data-types/double-data-type
! 概要
<<<
VB.NETには、クラスと同じようにメソッドやフィールドが定義可能な「モジュール」(VB 6.0からの慣習で「標準モジュール」と呼ばれることもある)を、Moduleステートメントを用いて定義できる。このモジュールの正体は、次のような特徴を持った特別なクラスである。
* 暗黙的にすべてのメンバがShared(共有変数や共有メソッド)となる。
* 暗黙的にクラスは ~NotInheritableとなる(派生クラスを記述できない)。
* インスタンス・コンストラクタを持たないので、インスタンス化することができない(コンパイラによる自動生成もなされない。コンストラクタを記述しても、それはShared(共有)コンストラクタとなる)。
<<<
[[.NET TIPS VB.NETのモジュールの正体は? - C# - @IT|https://www.atmarkit.co.jp/fdotnet/dotnettips/248module/module.html]]
<<<
実用上で注意しないといけないのは
* モジュール内のメンバーはすべてShared(C#でいうstatic)になる
** インスタンスコンストラクターは持たないし、インスタンス化できない
***ただし、Sharedコンストラクタ(クラスコンストラクタ)は持てる
*モジュール型の変数は宣言できない
*名前空間内でのみ宣言でき、入れ子で宣言できない
*モジュールのメンバー宣言に指定できるのは、Public、Friend(C#のinternal)、またはPrivate 拡張メソッドはモジュールにしか宣言できない
* 名前空間内で一意なメンバー名であればモジュール名を省略できる
といったところです。
<<<
[[VB.NETでもクラスとモジュールの違いを知りたい - レンコン畑でつかまえて|https://jyuch.hatenablog.com/entry/2017/06/03/013829]]
----
! サンプル
<<<
VB.NETでのモジュールは、VB6以前のようにファイル自体がモジュールとなるのではなく、Moduleキーワードを使って明示的に宣言する必要があります。
```vbnet
Module MainModule
Sub Main()
Console.WriteLine("Hello, world!")
End Sub
End Module
```
...
モジュールは一つのvbファイルに複数記述できるので、次のようなコードも記述できます。
```vbnet
' 一つ目のモジュール
Module MainModule
:
End Module
' 二つ目のモジュール
Module SubModule
:
End Module
```
すでに述べたように、一つのファイルでモジュール以外にもクラスや構造体を任意個宣言することができます。
<<<
[[モジュール (Module) - Programming/Visual Basic .NET - 総武ソフトウェア推進所|https://smdn.jp/programming/vb.net/module/#ModuleVsClass]]
VB.Net の関数には ''Sub'' と ''Function'' の2種類がある。
* ''Sub'': 戻り値を返せない
* ''Function'': 戻り値を返せる。
---
! 引数
!! 値渡し と 参照渡し
関数の引数に対して ''~ByVal''(値渡し)や ''~ByRef''(参照渡し)などの修飾子を指定できる。
<<<
この、「~ByVal」「~ByRef」を省略するとどうなるかというと、既定で「~ByVal」として扱われる。*4
*4 VB6時代は「~ByRef」として扱われていた。
<<<
[[.NET開発を始めるVB6プログラマーが知るべき9のこと - @IT|https://www.atmarkit.co.jp/fdotnet/chushin/greatblogentry_01/greatblogentry_01_01.html]]
!! 省略可能な引数の定義
!!! ''Optional''
<<<
Optional キーワードを使用することで、パラメータを省略可能にすることができます。パラメータが省略された場合はあらかじめ定義しておいたデフォルト値が使用されることになり、パラメータが省略されずに与えられた場合はその値がプロシージャに渡されます。
```vbnet
Public Sub OptionalSub(ByVal p1 As Integer, Optional ByVal p2 As Integer = 0)
Console.WriteLine("p1 = " + p1.ToString())
Console.WriteLine("p2 = " + p2.ToString())
End Sub
OptionalSub(p1) ' p2 パラメータを省略
OptionalSub(p1, p2) ' パラメータを省略しない
```
<<<
[[ VB.NET入門編 ] Sub Function プロシージャと引数 ( ByVal / ByRef ) – 行け!偏差値40プログラマー|http://hensa40.cutegirl.jp/archives/2974]]
; 名前付きパラメータ
<<<
```vbnet
Named_Param(p2:=2, p1:=1, p4:=4) ' Named_Param(1,2,0,4)
' パラメーター省略可能プロシージャ―の定義
Public Sub Named_Param(ByVal p1 As Integer, ByVal p2 As Integer, _
Optional ByVal p3 As Integer = 0, _
Optional ByVal p4 As Integer = 0)
Console.WriteLine("p1 = " + p1.ToString())
Console.WriteLine("p2 = " + p2.ToString())
Console.WriteLine("p3 = " + p3.ToString())
Console.WriteLine("p4 = " + p4.ToString())
End Sub
```
<<<
[[ VB.NET入門編 ] Sub Function プロシージャと引数 ( ByVal / ByRef ) – 行け!偏差値40プログラマー|http://hensa40.cutegirl.jp/archives/2974]]
---
! 戻り値
!! 戻り値の型
Function の宣言で、戻り値の型を指定できる。
```vbnet
Function func() As Integer
Return 0
End Function
```
型の指定を省略した場合、戻り値のデータ型はVariant型になる。
[[Visual Basic プロシージャ|http://itref.fc2web.com/vb/procedure.html]]
!! 戻り値を返す
Functionプロシージャでの戻り値の返し方には2パターンある。
* ''Return'' キーワードを用いる
* プロシージャ名に戻り値を代入する
''Return'' を呼び出すと、その時点で関数内の処理は終了し、指定した戻り値が呼び出し元に返される。
[[プロシージャ (Sub, Function) - Programming/Visual Basic .NET - 総武ソフトウェア推進所|https://smdn.jp/programming/vb.net/procedure/]]
---
! Call ステートメント
* 無名の関数を呼び出す際には、Call を付ける必要があるっぽい。
* Call で関数を呼び出した場合、戻り値を受け取ることはできない。っぽい。(勝手に破棄される)
```vbnet
Sub TestCall()
Call (Sub() Console.Write("Hello"))()
Call New TheClass().ShowText()
End Sub
```
https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/statements/call-statement
---
! コールバック
イベント発生をトリガーにしてコールバックしたい時は、コールバックのトリガーを ''Handles'' キーワードの後に指定する。
```vbnet
Sub TestCallback() Handles Button.Click
...
End Sub
```
3タイプの構文が用意されている。
# ''For ''文 (For Next, For Each)
# ''While''
# ''Do Loop''
ループを途中で抜け出したい場合は (他の言語での break 処理)、''Exit'' を使う。
* Exit For
* Exit While
* Exit Do
(処理の途中で) ループの次の反復処理を開始したい場合は、 ''Continue'' を使う。
* Continue For
* Continue While
* Continue Do
----
! 1. For 文
!! For ... Next
; 簡単な例
変数 index の値は、 1 で開始し、ループの反復ごとにインクリメントされる。 index の値が 5 に達した後は、ループ内の処理を実行後に、ループを抜ける。VB.NETでは、''ループを抜ける際にもインクリメント処理が行われるため''、最終的な index の値は 6 になる。
```vbnet
Dim index As Integer
For index = 1 To 5
Console.Write(index.ToString & " ")
Next
Console.WriteLine("- " & index)
' Output: 1 2 3 4 5 - 6
```
; ループ反復時の処理の指定
ループ反復時の処理を指定したい時は ''Step'' を使う。
次の例では、変数 number は、 2 から開始し、ループの各反復処理で 0.25 ずつ値が小さくなっていく。number が 0 よりも小さくなった時点で、ループ処理は終了する。
```vbnet
Dim number As Double
For number = 2 To 0 Step -0.25
Console.Write(number.ToString & " ")
Next
Console.WriteLine("| " & number)
' Output: 2 1.75 1.5 1.25 1 0.75 0.5 0.25 0 | -0.25
```
; Exit For と Continue For
<<<
Exit Forステートメントがすぐに終了させる、 For.Next これに続くステートメントにループと転送の制御、Nextステートメント。
...
```vbnet
For index As Integer = 1 To 100000
' If index is between 5 and 7, continue
' with the next iteration.
If index >= 5 AndAlso index <= 8 Then
Continue For
End If
' Display the index.
Debug.Write(index.ToString & " ")
' If index is 10, exit the loop.
If index = 10 Then
Exit For
End If
Next
Debug.WriteLine("")
' Output: 1 2 3 4 9 10
```
<<<
[[For...Next ステートメント (Visual Basic) - Microsoft Docs|https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/statements/for-next-statement]]
- - - - - - - - - - - - - - - - - - - -
!! For ... Each 文
IEnumerable または IEnumerable<T> を実装しているクラスであれば、''For Each'' を使ってループ処理を書くことが可能。
<<<
```vbnet
' Create lists of numbers and letters
' by using array initializers.
Dim numbers() As Integer = {1, 4, 7}
Dim letters() As String = {"a", "b", "c"}
' Iterate through the list by using nested loops.
For Each number As Integer In numbers
For Each letter As String In letters
Debug.Write(number.ToString & letter & " ")
Next
Next
Debug.WriteLine("")
'Output: 1a 1b 1c 4a 4b 4c 7a 7b 7c
```
<<<
[[For Each...Next ステートメント (Visual Basic) - Microsoft Docs|https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/statements/for-each-next-statement]]
内部の実装としては、コンパイラによって、For Each 文は次のように展開されるらしい。
<<<
次にこのコード。
```vbnet
var list = new List<int> { 0, 1, 2, 3, 4 };
foreach (var item in list) {
Console.WriteLine(item);
}
```
こうなる。
```vbnet
using (List<int>.Enumerator enumerator = new List<int> { 0, 1, 2, 3, 4 }.GetEnumerator()) {
while (enumerator.MoveNext()) {
Console.WriteLine(enumerator.Current);
}
}
```
<<<
[[C#における「列挙」の意味と、LINQについて。 - graphics.hatenablog.com|http://graphics.hatenablog.com/entry/2016/03/12/140050]]
~GetEnumerator() は、IEnumerable, IEnumerable<T> に定義されているメソッド。
* https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.ienumerable?view=netframework-4.8
----
! 2. While 文
----
! 3. Do while
----
- -
VB6と異なり、''VB.NETでは配列のインデックス番号の始まりは常に0''。
! 配列の宣言と初期化
「配列の宣言と初期化」の書き方はややこしい。
<<<
; 配列の宣言
まず、配列の宣言には次のように2つの記述方法がある。配列であることを示すかっこは変数名の後ろか型の後ろに記述できる。
```vbnet
Dim arrayA() As String
Dim arrayB As String()
```
,,''2通りの配列宣言'',,
,,配列の宣言と同時に割り当てを行う場合には前者(変数名の後ろにかっこを記述)のような書き方しかできないので、前者に統一しておくのがよいだろう。
なお、宣言しただけの配列変数(ここではarrayA/arrayB)の値はNothingである。使う前に、配列オブジェクトを与えて初期化するか、メモリを割り当てる必要がある(後述する),,
ここでは文字列(String型)の配列を宣言している。このようにして宣言した配列には例えば次のようにして配列オブジェクトを作成し、その参照を代入できる。
```vbnet
arrayA = New String() {"いち", "に", "さん"}
Console.WriteLine(arrayA.Length) ' 出力:3
```
<<<
- - - - - - -
<<<
; 配列の宣言と同時に初期化
上記の例のように、配列を宣言し、初期化した配列オブジェクトを代入する場合には、それら2行のコードを次のようにして1行で記述できる。
```vbnet
Dim arrayC() As String = New String() {"いち", "に", "さん"}
```
そしてこの場合には、「New String()」部分を省略して次のように記述可能だ。
```vbnet
Dim arrayD() As String = {"いち", "に", "さん"} ' New String()を省略
```
<<<
<<<
; 型推論による初期化
...
配列の宣言と同時に初期化する場合、次のコードのように変数の型も省略できる。
```vbnet
Dim arrayX = {1, 2, 3}
Console.WriteLine(arrayX.GetType().Name) ' 出力:Int32[]
Dim arrayY = {"いち", "に", "さん"}
Console.WriteLine(arrayY.GetType().Name) ' 出力:String[]
Dim arrayZ = {1, 2, 3.0F}
Console.WriteLine(arrayZ.GetType().Name) ' 出力:Single[]
```
<<<
<<<
; 配列の宣言と同時に割り当て
配列は、その宣言時に配列の大きさを指定することにより、宣言と割り当てを同時に行える。ただしこれは、次のように変数名の後ろにかっこを記述した場合のみである。
```vbnet
Dim arrayE(3) As String
Console.WriteLine(arrayE.Length) ' 出力:4
```
...
''この場合に注意が必要なのは、割り当てられた配列の要素数は「指定した値+1」となる点だ(上記の場合には「(3)」と記述しているので、配列の要素数は4となる)''。つまりこれは配列の要素数ではなく、配列の最後の要素のインデックス番号(添字の上限値)を指定していることになる。なおVB6と異なり、VB.NETでは配列のインデックス番号の始まりは常に0である。
ちなみに、この記述方法の場合には、次のように配列の大きさの指定を変数により指定可能だ。
```vbnet
Dim num As Integer = 3
Dim arrayG(num) As String
Console.WriteLine(arrayG.Length) ' 出力:4
```
<<<
- - - - - - -
<<<
; 後から割り当て
配列を宣言しておいて、後から動的に割り当てるには次のコードのようにReDimステートメントを使う。ReDimは、その語感から既存の配列のサイズを変更するものに思えるかもしれないが、実際には配列オブジェクトを新しく作って配列変数の参照先を置換するのである。
```vbnet
Dim arrayW() As String
Console.WriteLine(arrayW Is Nothing) ' 出力:True
'arrayW = New String(3) ' コンパイルエラーとなる
ReDim arrayW(3)
Console.WriteLine(arrayW.Length) ' 出力:4
```
,,''配列を宣言した後で割り当てる例'',,
,,配列変数を宣言しただけでは、その変数の値はNothingである(2行目)。配列の要素が空(=要素数がゼロ)なのではなくて、変数の参照しているオブジェクトが何もない状態だ。
また、後から「arrayW = New String(3)」などとして配列オブジェクトを割り当てることはできない。
このようにReDimステートメントを使うか、ArrayクラスのResizeメソッドやCreateInstanceメソッドを利用する。,,
<<<
- - - - - - -
<<<
; As Newキーワードによる配列の初期化は不可
VB.NETでは、As Newキーワードにより変数の宣言とその初期化(インスタンス作成および代入)が可能だが、配列の場合にはAs Newキーワードは使用できない。
```vbnet
Dim arrayH(3) As New String ' コンパイルエラーとなる
```
As Newキーワードの場合、配列を示すかっこを変数名ではなく型の後ろに記述するとコードの意味が変わってくる。例えば次の記述はコンパイル可能だが、これはDecimal型の配列を割り当てているわけではない。
```vbnet
Dim arrayI As New Decimal(3)
Console.WriteLine(arrayI) ' 出力:3
```
これは単にDecimal構造体(System名前空間)のコンストラクタを呼び出していることになる(カッコ内の「3」はコンストラクタのパラメーターとなる)。VB.NETでは、配列のインスタンス化とコンストラクタの呼び出しを混同しやすいので注意してほしい。
<<<
引用: [[VB.NETで配列を宣言するには?:.NET TIPS - @IT|https://www.atmarkit.co.jp/ait/articles/0503/11/news124.html]]
! 変数の宣言
* VB.NET は型宣言を省略することが可能だが、型宣言を強制したい時は「Option Explicit」をOnに設定する。
* ローカル変数の宣言には、 ''Dim'' ステートメントを使用する。
** [[Visual Basic での変数宣言 - Microsoft Docs|https://docs.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/language-features/variables/variable-declaration]]
* クラス・構造体・モジュール のメンバー変数の場合は、''[アクセス修飾子] メンバー変数名 As データ型'' と書く。
!! Option Explicit の設定方法
設定方法は、 ''ソースの先頭に記述する方法'' と、''プロジェクトのプロパティで指定する方法'' の2種類がある。
* [[[VB.NET] 型宣言を強制する – .NETちょこっとリファレンス|https://dotnet.programmer-reference.com/vb-option-explicit/]]
* [[Option Strict ステートメント (Visual Basic) - Microsoft Docs|https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/statements/option-strict-statement]]
!! アクセス修飾子
| アクセス修飾子 | アクセシビリティ |h
|Public |すべての箇所から可 |
|Friend |プロジェクト内からのアクセスのみ |
|Protected |クラス内、または派生クラスからのアクセスのみ |
|Protected Friend |プロジェクト内、クラス内、または派生クラスからのアクセスのみ |
|Private |クラス内からのアクセスのみ |
!! データ型
* [[VB.NET/言語仕様/データ型]]
!! 配列の宣言と初期化
* [[VB.NET/言語仕様/配列]]
----
! その他
!! Dim について
; アクセス修飾子
<<<
Dimはローカル変数の宣言だけでなくクラス・構造体のメンバ変数を宣言する際にも指定することができます。 Dim自体はアクセス修飾子ではありませんが、Dimを使って宣言されたメンバ変数のアクセシビリティはデフォルトと同じ、つまり構造体ではPublic、クラス・モジュールではPrivateで宣言されているのと同じものとして扱われます。
<<<
[[アクセス修飾子 (Public, Protected, Friend, Private) - Programming/Visual Basic .NET - 総武ソフトウェア推進所|https://smdn.jp/programming/vb.net/accessibility/]]
<<<
;2.「Dim」の意味
本題ですが、Dimは「Dimension」の略のようです。
Dimensionは「次元」という意味があります。また「寸法、容積」といった意味もあります。
;3.変数の宣言で「Dim」を使う理由
以前のMicrosoft BASICという言語では、そもそも変数を宣言する必要はありませんでした。
ただし、配列を使いたいときは変数宣言が必要でした。理由は、サイズを明示的に指定してメモリ領域を確保する必要があったためと思われます。
2項に記したとおり、Dimensionは「次元」を意味することから、配列変数の宣言の「Dim」には「1次元配列の宣言」「2次元配列の宣言」という意味があったと思われます。
ということで、Dimを使った変数宣言は配列変数だけが対象でしたが、VBやVBAでは配列変数だけでなく、他の変数も含め、変数全体を宣言する命令に変わったようです。
<<<
[[VB/VBAの「Dim」の意味: 小粋空間|http://www.koikikukan.com/archives/2013/11/14-013333.php]]
! 名前空間 (Namespace)
''すべてのモジュール・クラスは、何らかの名前空間に属する''。
以下は、 [[名前空間 (Namespace) - Programming/Visual Basic .NET - 総武ソフトウェア推進所|https://smdn.jp/programming/vb.net/namespace/]] からの抜粋。
---
!! 1. 既定の名前空間
VB.NETではプロジェクトに既定の名前空間を指定でき、名前空間を明示しなかった場合は、その名前空間に属すことになる。
* Project ⇒ (プロジェクトの) Properties ⇒ Root namespace
- - - - - - - - - - - - - - - - - - - -
!! 2-1. 名前空間の宣言
指定した名前空間に属するようにする場合は、''Namespace'' キーワードを使用する。
```vbnet
Namespace SampleNamespace
Module MainModule
Sub Main()
Console.WriteLine("Hello, world!")
End Sub
End Module
End Namespace
```
この例において、既定の名前空間が ''~MyProject'' の場合、宣言した名前空間は ''~MyProject'' 名前空間に属する ''~MyProject.~SampleNamespace'' 名前空間になる。そのため、 ''~MainModule'' の完全修飾名は ''~MyProject.~SampleNamespace.~MainModule'' となります。
なお、同名の名前空間を複数に分割して宣言することも可能。
!! 2-2. 入れ子構造になった名前空間
次のコードのように名前空間の中に名前空間を宣言することもできます。
```vbnet
Namespace MainNamespace
Namespace SubNamespace
:
End Namespace
End Namespace
```
あるいは
```vbnet
Namespace MainNamespace.SubNamespace
:
End Namespace
```
- - - - - - - - - - - - - - - - - - - -
!! 3-1. 他の名前空間からの参照
他の名前空間のモジュール内にあるメンバを参照するには "''名前空間.モジュール名.メンバ名''" とする。
ただし、モジュールで宣言されているメンバは、名前空間から記述する場合はモジュール名を省略して参照することも出来るため、単に "''名前空間.プロシージャ名''" とする事もできます。
!! 3.2 名前空間の省略 (Imports)
長い名前空間名を毎回記述するのを回避するために、 ''Imports'' キーワードが用意されています。
```vbnet
' System.Windows.Forms名前空間をインポートします
Imports System.Windows.Forms
Module MainModule
Sub Main()
Dim frm As Form
'このコードは次のコードと等価です
'Dim frm As System.Windows.Forms.Form
End Sub
End Module
```
ただし、名前空間をインポートすることで名前の衝突が発生するおそれがあります。その場合には、限密名を指定し重複を防ぐ必要がある。
!! 3.3 名前空間のエイリアス
名前空間をインポートする際に別名(エイリアス)をつけることができます。これによって長い名前空間の名前を短くして使用することができます。
```vbnet
' System.Windows.Forms 名前空間を WinForms という名前でインポートします
Imports WinForms = System.Windows.Forms
```
- - - - - - - - - - - - - - - - - - - -
!! 4. その他
Javaのパッケージはディレクトリ構成と紐付きますが、VB.netのNamespaceはディレクトリ構成とは関係しません。
実体は整数で、実際にやっていることは定数の定義に近い。
```vbnet
Public Enum MyEnum As Byte
Zero
One
Two
End Enum
```
整数型の指定 ("As Byte") は省略が可能で、省略した場合は Integer になる。
また、列挙型の定数の値は、代入ステートメントを使って明示的に割り当てることも可能。
```vbnet
Public Enum WorkDays
Saturday
Sunday = 0
Monday
Tuesday
Wednesday
Thursday
Friday
Invalid = -1
End Enum
```
詳細については、このページを見ればよい。
* [[方法: (Visual Basic) 列挙型を宣言します。 - Microsoft Docs|https://docs.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/language-features/constants-enums/how-to-declare-enumerations]]
----
! 整数への変換
* https://blog.goo.ne.jp/pianyi/e/330638466adf317da770e18cc292f4e7
<<tag "VBA">>
見た目は似ているが、VB.NET とは別の言語と考えていた方が無難。
<div class="tc-table-of-contents">
<<toc-selective-expandable 'VBA'>>
</div>
; 仕様
* https://docs.microsoft.com/en-us/openspecs/microsoft_general_purpose_programming_languages/ms-vbal/d5418146-0bd2-45eb-9c7a-fd9502722c74?redirectedfrom=MSDN
---
! Tips
* [[昨日までJavaJavaしてた人がいきなりExcelのVBAを実装する羽目になったときのためのメモ - Qiita|https://qiita.com/opengl-8080/items/5bd8ae7fe95f5c31dfc3]]
* [[エクセルVBAコーディングガイドライン【随時更新】|https://tonari-it.com/excel-vba-coding-guide-line/]]
!! 配列を戻り値として受け取る
* https://qiita.com/ryosuke0825/items/93eb8a284eb5dba59f29
---
*[[[Excel 2007] Visual Basic for Applications (VBA) を用いる準備|http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture/vba2003/2007_01-intro00.html]]
;基本的な話
* Excel で使う必要があるから使うが、言語として覚える価値はなさげ
* ステートメントを複数行に分割する際は、行末にスペースとアンダーバー ''( _ )'' を入れる
*[[VBA基本(Functionプロシージャ)|http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_110_02.html]]
*[[Excel VBA 入門講座 If ~ ElseIf|http://excelvba.pc-users.net/fol6/6_1.html]]
* ~VB6(VBA)では、配列の初期化ができないっぽい...
; Range について
* [[Deep Decryption - Excel VBA Tips - Range オブジェクト|http://www012.upp.so-net.ne.jp/scotchegg/ExcelVBA/Range/index.htm]]
* [[Rangeオブジェクト、Areasコレクション|http://arrow3.way-nifty.com/shige/2004/08/excelvba_rangea.html]]
* [[行列]]
;Cell について
* Cell の色
**[[ColorIndexプロパティ値一覧:Excel エクセルの使い方-マクロ/VBA|http://www.relief.jp/itnote/archives/000482.php]]
**[[Excel VBA Reference ★文字色とセルの塗りつぶし設定★|http://www.big.or.jp/~seto/vbaref/vbaref4.htm]]
;ほか
```
activeCell.Offset(1, 2).Activate
```
```vbnet
Option Explicit
Sub exampleRange()
Dim sr As Range: Set sr = Selection
Debug.Print ("-----")
' The number of areas
Dim numArea As Long: numArea = sr.Areas.Count
Debug.Print ("The total number of cells included in Range:")
Debug.Print (" sr.Count: " & sr.Count)
Debug.Print ("The total number of areas included in Range:")
Debug.Print (" sr.Areas.Count: " & sr.Areas.Count)
' Some properties of Range refer to these of the first area.
Dim firstArea As Range: Set firstArea = sr.Areas.Item(1)
Debug.Print ("The numbers of row and column of the top left cell in the first area.")
Debug.Print (" .Row: range=" & sr.Row & ", firstArea=" & firstArea.Row)
Debug.Print (" .Column: range=" & sr.Column & ", firstArea=" & firstArea.Column)
Debug.Print ("The numbers of rows and columns in the first area:")
Debug.Print (" .Rows.Count: range=" & sr.Rows.Count & ", firstArea=" & firstArea.Rows.Count)
Debug.Print (" .Columns.Count: range=" & sr.Columns.Count & ", firstArea=" & firstArea.Columns.Count)
' Access the second area.
If numArea > 1 Then
Dim secondArea As Range: Set secondArea = sr.Areas.Item(2)
Debug.Print ("")
Debug.Print ("Access the second area!")
Debug.Print ("The number of rows of the second area: ")
Debug.Print (" secondArea.Row " & secondArea.Row)
Debug.Print (" secondArea.Count " & secondArea.Count)
End If
End Sub
```
! 選択範囲(Selection) を使う場合
```vbnet
' 選択範囲に含まれるセルの値の一覧表示
Sub checkSelectionSample()
Dim selectRange As Range, item As Range
' 選択範囲の取得
Set selectRange = Selection
' 選択範囲の情報
Debug.Print ("----------")
Debug.Print ("Selection")
Debug.Print (" Count : " & selectRange.Count) ' 要素数
Debug.Print (" Areas.Count: " & selectRange.Areas.Count) ' エリア数
Debug.Print ("----------")
' 選択範囲のセルを1つずつ処理する
For Each item In selectRange
Debug.Print ("(" & item.Row & ", " & item.Column & ") = " & item.Value)
'Debug.Print (item.Address)
Next
End Sub
```
---
! ユーザーダイアログを使う方法
```vbnet
Sub sample_selectRange()
Dim selectedRange As Range, singleArea As Range
Dim i As Long, numArea As Long
Dim msg As String
Set selectedRange = Application.InputBox("Select range(s))", "please select range(s)", Type:=8)
numArea = selectedRange.Areas.Count
msg = "numArea: " & numArea & vbCrLf
MsgBox (msg)
i = 0
For Each singleArea In selectedRange.Areas
Dim top, left, numRow, numCol, numCell As Long
Dim address As String
address = singleArea.address
top = singleArea.row
left = singleArea.Column
numRow = singleArea.Rows.Count '行数
numCol = singleArea.Columns.Count '列数
numCell = singleArea.Count '選択範囲に含まれるセル数
msg = msg & vbCrLf & sprintf("Area[{0}] ({1}):", i, address)
msg = msg & vbCrLf & sprintf(" top={0}, left={1}, numRow={2}, numCol={3}, numCell={4}", _
top, left, numRow, numCol, numCell)
i = i + 1
Next
MsgBox (msg)
End Sub
Function sprintf(mask As String, ParamArray tokens()) As String
Dim i As Long
For i = 0 To UBound(tokens)
mask = Replace$(mask, "{" & i & "}", tokens(i))
Next
sprintf = mask
End Function
```
! 変数宣言
<<<
1 つのステートメントで複数の変数を宣言できます。''データ型を指定するには、変数ごとにデータ型を指定する必要があります''。
次のステートメントでは、変数 intX、 intY、 intY、および intZ が ''Integer'' 型として宣言されています。
```vbnet
Dim intX As Integer, intY As Integer, intZ As Integer
```
次のステートメントでは、intX と intY が ''Variant'' 型として宣言され、intZ のみが ''Integer'' 型として宣言されています。
```vbnet
Dim intX, intY, intZ As Integer
```
<<<
[[Declaring Variables - Microsoft Docs|https://msdn.microsoft.com/ja-jp/vba/language-reference-vba/articles/declaring-variables]]
- - - - -
!! 変数の初期化
''VBA では、言語の仕様上、変数宣言と初期化を同時に行うことはできない。''ただし、コロンを使って見た目上、1行で書くことは可能。
<<<
```vbnet
' VBA の場合
'----------------------------
Dim foo As Integer: foo = 0
Dim bar As String: bar = "hogehoge"
Dim obj As Object: Set obj = WScript.CreateObject("WScript.Shell")
```
<<<
[[【VB系】変数の宣言と初期化を1行で書く(VB.NET,VBA,VBScript)- Black Everyday Company|https://kuroeveryday.blogspot.com/2014/10/Dim-Initialize.html]]
- - - - -
!! 変数宣言を MUST にする
```
Option Explicit ''←変数の宣言を強制する
```
---
! 値の代入
!! Set が必要な場合
<<<
Set ステートメントは、オブジェクトをオブジェクト変数に格納する時に使う。
<<<
[[VBA で Set が必要なときの見極め方 - Corredor|http://neos21.hatenablog.com/entry/2016/04/01/000000]]
---
! 基本型の種類
|データ型 |記憶領域サイズ |範囲|h
|バイト型 (Byte) |1 バイト |0 ~ 255|
|Boolean |2 バイト |True または False |
|Integer |2 バイト |-32,768 ~ 32,767 |
|Long (長整数) |4 バイト |-2,147, 483,648 ~ 2,147, 483,647 |
|~LongLong (~LongLong 整数) |8 バイト |-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (64 ビット プラットフォームでのみ有効) |
|~LongPtr (32 ビット システムでは Long 整数、64 ビット システムでは ~LongLong 整数) |32 ビット システムでは 4 バイト、64 ビット システムでは 8 バイト |32 ビット システムでは -2,147, 483,648 ? 2,147, 483,647、64 ビット システムでは -9,223,372,036,854,775,808 ? 9,223,372,036,854,775,807 |
|Single (単精度浮動小数点数) |4 バイト |負の値の場合は -3.402823E38 ? -1.401298E-45、正の値の場合は 1.401298E-45 ? 3.402823E38 |
|Double (倍精度浮動小数点数) |8 バイト |負の値の場合は -1.79769313486231E308 ? -4.94065645841247E-324、正の値の場合は 4.94065645841247E-324 ? 1.79769313486232E308 |
|Currency (スケーリングされた整数) |8 バイト |-922,337,203,685,477.5808 ~ 922,337,203,685,477.5807 |
|Decimal |14 バイト |小数点がない場合は +/-79,228,162,514,264,337,593,543,950,335、 小数点以下が 28桁 の場合は +/-7.9228162514264337593543950335、ゼロではない最小の値は +/-0.0000000000000000000000000001 |
|日付 |8 バイト |100 年 1 月 1 日 ~ 9999 年 12 月 31 日 |
|オブジェクト |4 バイト |任意の Object 参照 |
|文字列型(可変長) |10 バイト + 文字列の長さ |0 ~ 約 20 億 |
|文字列型(固定長) |文字列の長さ |1 ~ 約 65,400 |
|バリアント型(数値を使用) |16 バイト |最大で Double の範囲までの任意の数値 |
|バリアント型(文字を使用) |22 バイト + 文字列長 (64 ビット システムでは 24 バイト) |可変長 文字列型 と同じ範囲 |
|ユーザー定義 (Type を使用) |要素に必要な数 |各要素の範囲は、そのデータ型の範囲と同じです。 |
[[変数を宣言する|https://msdn.microsoft.com/ja-jp/vba/language-reference-vba/articles/data-type-summary]]
---
https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/range-object-excel
こんな感じかな...
```vbnet
' 列番号を列名に変換する関数 (2文字まで)
Public Function colToColumnName(colNum As Integer) As String
Dim codeA As Integer
codeA = Asc("A")
Dim num1, num2 As Integer
Dim char1, char2 As String
' \ は割り算の商, Mod 割り算の余り
num1 = colNum \ 26
If (colNum Mod 26 = 0) Then
num1 = num1 - 1
End If
If num1 > 26 Then
Debug.Print ("colNum is too big.")
colToColumnName = ""
Exit Function
End If
' 上位の文字
If num1 = 0 Then
char1 = ""
Else
char1 = Chr(codeA + num1 - 1)
End If
num2 = colNum - num1 * 26
' 下位の文字
char2 = Chr(codeA + num2 - 1)
Debug.Print (num1 & " " & char1)
Debug.Print (num2 & " " & char2)
colToColumnName = char1 & char2
End Function
```
---
---
```vbnet
' 列番号を列名に変換する関数
Public Function colToColumnName(ColNum As Integer) As String
Dim codeA As Integer
codeA = Asc("A")
'文字コードから文字をとる
Chr (文字コード)
'/ 割り算 8 / 5 1.6
'\ 割り算の商 8 \ 5 1
Mod 割り算の余り 8 Mod 5 33
MsgBox (codeA)
End Function
```
プロジェクトの設定とdllをコンパイルした時の設定が違うと、色々問題が出る。
; 参考にしたサイト
* [[適切な C ランタイム (CRT) ライブラリとリンクする方法|http://support.microsoft.com/kb/140584/ja]]
* [[exeファイルとCRT - EternalWindows|http://eternalwindows.jp/else/exe.html]]
* [[MSVCR80.dll/MSVCR90.dllに依存しないようにする方法 |http://d.hatena.ne.jp/hideAki/20080617/1213691492]]
* [[DLLとEXEの話 |http://d.hatena.ne.jp/yhabe/20080724]]
; 設定方法
# プロジェクト => ~"プロジェクト名"のプロパティ
# C/C++ => コード生成 => ランタイムライブラリ
; オプション
|!Switch |!説明 |!補足 |
|/ML |シングルスレッド ||
|/MT |マルチスレッド (スタティックリンク) ||
|/MD |マルチスレッド (ダイナミックリンク) |実行時に MSVCRT DLLが必要 |
|/~MLd |Debug シングルスレッド ||
|/~MTd |Debug マルチスレッド (スタティックリンク) ||
|/~MDd |Debug マルチスレッド (ダイナミックリンク) |実行時に MSVCRTD DLLが必要 |
; こんな感じ?
* とりあえず自分が使えればよい => /MD
* EXE単体で配布したい => DLLは使わない => /MT
* /MD で作ったものを配布したい時は、MSVCRT をEXEのフォルダに入れておく
; リンクするライブラリの指定
{{{
#pragma comment(lib, "xxx.lib")
}}}
; コンソール非表示
{{{
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
}}}
; インクルードパス
* C/C++ => 全般 => 追加のインクルードディレクトリ
; ライブラリパス
* リンカ => 全般 => 追加のライブラリディレクトリ
; リンクするライブラリ
* リンカ => 入力 => 追加の依存ファイル
* [[VC++ pragma]] で設定した方がよいかも...
<<version>>
<html>
<head>
<title>untitled</title>
</head>
<body>
<div class="viewer">
<<tdump tmp(tableSample)>>
<<tdump UML>>
</div></body></html>
! プロジェクトファイルについて
実体は [[MSBuild]] のビルドファイルらしい。
<<<
また、(1)の環境ではVisual Studio 2005(以降、VS 2005)のプロジェクト・ファイル(「*.*proj」という名前のファイル。例えば「*.csproj」や「*.vbproj」など)そのものが実はMSBuildファイルであり、IDE上でプロジェクトのビルドを実行した場合、その内部動作でMSBuildと同じビルド・エンジンが使われてビルドが実行される。
<<<
[[.NETビルド・エンジン「MSBuild」使いこなし術(1/2) - @IT|https://atmarkit.itmedia.co.jp/fdotnet/special/msbuild01/msbuild01_01.html]]
- - -
* [[Understanding the Project File - Microsoft Docs|https://docs.microsoft.com/en-us/aspnet/web-forms/overview/deployment/web-deployment-in-the-enterprise/understanding-the-project-file]]
* [[Create an MSBuild project file from scratch - MSBuild - Microsoft Docs|https://docs.microsoft.com/en-us/visualstudio/msbuild/walkthrough-creating-an-msbuild-project-file-from-scratch?view=vs-2022]]
----
<<<
ビルドシステムは
VS2005で導入されたビルドシステムはVCBuild。
それがVS2010からMSBuildに変わったとあります。
<<<
https://kage3.cocolog-nifty.com/blog/2015/06/visual-studio20.html
;VS2003
* https://www.codeproject.com/Articles/8729/Convert-a-VS-NET-2003-project-to-VS-NET-2002
----
! チームエクスプローラ ()
; Team Foundation Serviceを使ってみる
# [[Team Foundation Serviceを使ってみる(1)お一人様ご案内:IT Bootstrap:オルタナティブ・ブログ|https://blogs.itmedia.co.jp/kizawa/2013/04/team-foundation-af94.html]]
# [[Team Foundation Serviceを使ってみる(2) Visual Studioからの利用:IT Bootstrap:オルタナティブ・ブログ|https://blogs.itmedia.co.jp/kizawa/2013/04/team-foundation-ee0e.html]]
# [[Team Foundation Serviceを使ってみる(3) Visual Studioからの利用(2):IT Bootstrap:オルタナティブ・ブログ|https://blogs.itmedia.co.jp/kizawa/2013/04/team-foundation-04ec.html]]
-
* [[Visual Studio 2017 で Team Foundation Server に接続する (Visual Studioの使い方 Tips)|https://www.ipentec.com/document/visual-studio-2017-connect-team-foundation-server]]
-
* https://docs.microsoft.com/ja-jp/visualstudio/ide/reference/team-explorer-reference?view=vs-2019
! Types of VLE (Vapour-Liquid Equilibria) Calculation
気液平衡の計算は、「''Phase Behavior Calculation''」と「''Phase Equilibria Calculation''」の 大きく2つに分けられる。
!! 計算で出てくるプロパティ
| Symbol |Property |h
|p |Pressure |
|T |Temperature |
|$$F_{feed}$$ |Molar flow rate (or number of moles) in feed stream |
|$$F_{liq}$$ |Molar flow rate (or number of moles) in liquid stream |
|$$F_{vap}$$ |Molar flow rate (or number of moles) in vapour stream |
|$$z_i$$ |molar fraction of comp i in feed |
|xi |molar fraction of comp i in liquid phase |
|yi |molar fraction of comp i in vapour phase |
|N |number of component |
| ||
|Ki |Equilibrium Constant of component i (= yi / xi)|
|β |$$= F_{vap} / F_{feed}$$ |
| ||
|$$\mu_i$$ |Chemical potential of component i |
|$$f_i$$ |Partial fugacity of component i |
|$$\phi_i$$ |Fugacity coefficient of component i |
|$$\gamma_i$$ |Activity coefficient of component i |
|$$F_i$$ |Poynting Factor of component i |
---
! Phase Behavior Calculation
!! 未知のプロパティの数 (the number of unknown properties):
未知のプロパティの数は ''2N+2'' になる。
* Specified: $$F_{feed}, z_i, $$ and two of $$\{p, T, F_{liq}\}$$
* Unknown: $$F_{vap}, x_i, y_i, $$ and one of $$\{p, T, F_{liq}\}$$
!! Material Balance Equations
式の数は ''N+2'' になる。
* $$\displaystyle \sum_i x_i = 1$$ 【式1】
* $$\displaystyle \sum_i y_i = 1$$ 【式2】
* $$z_i F_{feed} = x_i F_{liq} + y_i F_{vap}$$ 【式3】
【式3】は、実際の計算では、次のように変形して使われる。
$$z_i = x_i \dfrac{F_{liq}}{F_{feed}} + y_i \dfrac{F_{vap}}{F_{feed}}$$
* $$z_i = x_i (1 - \beta) + y_i \beta$$ 【式4】
* $$\beta \equiv \dfrac{F_{vap}}{F_{feed}}$$ 【式5】
!! 化学ポテンシャルの釣り合い
Material Balance Equations だけでは、未知のプロパティの数に対して式の数が足りないので、これに化学ポテンシャルの釣り合いの式 (式の数は ''N'') を加えて、未知数を解くことになる。
$$\mu^V_i = \mu^L_i$$ ⇒ $$f^V_i = f^L_i$$
これにより、式の数は未知数と同数の ''2N+2'' になる。
!! Equilibrium Constant
気相のモル分率 (yi) を 液相のモル分率 (yi) で割った値を、''Equilibrium Constant'' と定義する。
$$K_i \equiv \dfrac{y_i}{x_i} $$
これを、【式4】に代入し、変形すると、
$$z_i = x_i (1 - \beta) + (x_i K_i) \beta , \ \ \ z_i = \dfrac{y_i}{K_i} (1 - \beta) + y_i \beta$$
となり、
・ $$x_i = \dfrac{z_i}{1 - \beta + K_i \beta}$$ 【式6】
・ $$y_i = \dfrac{K_i z_i}{1 - \beta + K_i \beta}$$ 【式7】
という式が得られる。これらを、それぞれ【式1】・【式2】に代入すると、
$$\displaystyle \sum_i \{ \dfrac{z_i}{1 + \beta (K_i - 1)} \} = 1 , \ \ \ \sum_i \{ \dfrac{K_i z_i}{1 + \beta (K_i - 1)} \} = 1$$
という式が得られる。そして、この2つの式の差を取ると、'''Rachford-Rice equation'' が得らえる (この方程式は陽には解けないで、ニュートン法などを使う)。
$$\displaystyle \sum_i \left( \dfrac{z_i (K_i - 1)}{1 + \beta (K_i - 1)} \right) = 0$$ 【式8】
- - - - - - - - - - - - - - - - - - - -
!! フラッシュ計算 (Flash Calculation)
!!! ''理想溶液の場合:''
[[ラウールの法則]] ($$y_i p = x_i p^{sat}_i$$) を使うと、Equilibrium Constant は次のように表せる。
$$K_i = \dfrac{y_i}{x_i} = \dfrac{p^{sat}_i}{p}$$ 【式9】
温度から飽和蒸気圧が求められるとすれば、Ki は【式9】を用いて計算可能である。また、Ki を 【式8】に代入すれば β も求めることができる。
そして、 β が求まれば、全ての unknown properties が計算できる。
・ $$F_{vap} = \beta F_{feed}$$ (【式5】より)
・ $$F_{liq} = F_{feed} - F_{vap}$$
・ $$x_i = \dfrac{z_i}{1 + \beta (K_i - 1)}$$ (【式6】より)
・ $$y_i = 1 - x_i$$
!!! ''実在溶液の場合:''
実在溶液の場合には、二つのアプローチがある。
# 液相にも EOS を適用する
# 液相には Activity model を使う
; 1. 液相にも EOS を適用する場合
化学ポテンシャルの釣り合いから $$f^V_i = f^L_i$$ であり、これをフガシティ係数を用いて表すと、
$$y_i (\phi^V_i p) = x_i (\phi^L_i p)$$
となり、これを整理すると、
$$K_i \equiv \dfrac{y_i}{x_i} = \dfrac{\phi^L_i}{\phi^V_i} $$ 【式10】
という関係が得られる。
【式9】中の $$\phi^L_i, \phi^V_i$$ は Mixing の効果も考慮されたパラメータであり、多くの場合、温度・圧力・コンポジションの関数となる。
$$\phi^L_i(p, T, x_i), \ \ \ \phi^V_i(p, T, y_i)$$
そして、これらの関数から求めた $$\phi^L_i, \phi^V_i$$ を【式10】を代入すれば Ki が求まり、【式8】より $$\beta$$ が求まる。
しかしながら、(理想溶液の場合とは違い) $$x_i, y_i$$ も unknown properties であるため、正しい $$K_i, x_i, y_i$$ を求めるためには、 $$f^V_i = f^L_i$$ となるまで、繰り返し計算が必要になる。
# $$x_i, y_i$$ の初期値を決める (適当でも構わないが、Whilson の経験式などが使われることが多い(らしい)) 。
# $$\phi^L_i, \phi^V_i$$ を計算し、 $$K_i, \beta$$ を求める。
# 【式6】と【式7】を使い $$x_i, y_i$$ の値を更新する。
# $$f^V_i = f^L_i$$ なら計算終了。そうでなければ Step 2 へ戻る。
なお、 $$\phi^L_i, \phi^V_i$$ の計算には、通常 [[CubicEOS]] が使われる。例えば、[[Peng-Robinson]] EOS では、フガシティ係数の計算は次のようになる。
・$$\displaystyle \ln \phi_k^L = \dfrac{b_k}{b^L} (Z^L-1) - \ln(Z^L-B^L) + \dfrac{A^L}{B^L 2\sqrt{2}} \left( \dfrac{b_k}{b^L} - \dfrac{2}{a^L} \sum_i x_i (1 - \delta_{ik}) \sqrt{a_i a_k} \right) \ln \left[ \dfrac{Z^L+B^L(1+\sqrt{2})}{Z^L+B^L(1-\sqrt{2})} \right]$$
・$$\displaystyle \ln \phi_k^V = \dfrac{b_k}{b^V} (Z^V-1) - \ln(Z^V-B^V) + \dfrac{A^V}{B^V 2\sqrt{2}} \left( \dfrac{b_k}{b^V} - \dfrac{2}{a^V} \sum_i y_i (1 - \delta_{ik}) \sqrt{a_i a_k} \right) \ln \left[ \dfrac{Z^V+B^V(1+\sqrt{2})}{Z^V+B^V(1-\sqrt{2})} \right]$$
$$a^L, b^L, A^L, B^L$$ は、 Mixing Rule を用いて $$x_i, a_i, b_i, \alpha_i$$ から計算される。同様に、 $$a^V, b^V, A^V, B^V$$ は $$y_i, a_i, b_i, \alpha_i$$ から計算される。
圧縮率因子 (Z) についても、相ごとに計算する。
・$${Z_L}^3 - (1 - B_L) {Z_L}^2 + (A_L - 2B_L - 3{B_L}^2) {Z_L} - (A_LB_L - {B_L}^2 - {B_L}^3) = 0$$
・$${Z_V}^3 - (1 - B_V) {Z_V}^2 + (A_V - 2B_V - 3{B_V}^2) {Z_V} - (A_VB_V - {B_V}^2 - {B_V}^3) = 0$$
; 2. 液相には Activity model を使う場合
化学ポテンシャルの釣り合いから $$f^V_i = f^L_i$$ であり、これをフガシティ係数(気相) と 活量係数(液相) を用いて表すと、
$$y_i \phi^V_i p = x_i \gamma_i \phi^{sat,V}_i p^{sat}_i F_i$$
となり ($$F_i$$ は Poynting Factor) を、これを整理すると、
$$K_i \equiv \dfrac{y_i}{x_i} = \dfrac{\gamma_i \phi^{sat,V}_i p^{sat}_i F_i}{\phi^V_i p} $$ 【式X】
という関係が得られる。
---
! Phase Equilibria Calculation
!! Boiling Point
!!! ''理想溶液の場合:''
Boiling Point では、ほとんど全ての流体は liquid stream を通るので ($$F_{liq} \approx F_{feed}$$) 、
$$x_i \approx z_i $$
とみなすことができる(はず)。この関係を [[ラウールの法則]] ($$y_i p = x_i p^{sat}_i$$) に代入すると、
$$y_i = \dfrac{z_i p^{sat}_i}{p}$$
という式が得られる、これを【式2】に代入し、式変形すると、
$$\displaystyle \sum_i y_i = \sum_i \dfrac{z_i p^{sat}_i}{p} = 1$$
$$\displaystyle p = \sum_i z_i p^{sat}_i$$
という関係が得られる。
- - - - - - - - - - - - - - - - - - - -
!! Dew Point
!!! ''理想溶液の場合:''
Dew Point では、ほとんど全ての流体は vapour stream を通るので ($$F_{vap} \approx F_{feed}$$) 、
$$y_i \approx z_i $$
とみなすことができる(はず)。この関係を [[ラウールの法則]] ($$y_i p = x_i p^{sat}_i$$) に代入すると、
$$x_i = \dfrac{z_i p}{p^{sat}_i}$$
という式が得られ、これを【式1】に代入し、式変形すると、
$$\displaystyle \sum_i x_i = \sum_i \dfrac{z_i p}{p^{sat}_i} = 1$$
$$\displaystyle p = \dfrac{1}{\sum_i \dfrac{z_i}{p^{sat}_i}}$$
という関係が得られる。
This document is a ~TiddlyWiki from tiddlyspot.com. A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.
@@font-weight:bold;font-size:1.3em;color:#444; //What now?// @@ Before you can save any changes, you need to enter your password in the form below. Then configure privacy and other site settings at your [[control panel|http://hikikomorigoto.tiddlyspot.com/controlpanel]] (your control panel username is //hikikomorigoto//).
<<tiddler TspotControls>>
See also GettingStarted.
@@font-weight:bold;font-size:1.3em;color:#444; //Working online// @@ You can edit this ~TiddlyWiki right now, and save your changes using the "save to web" button in the column on the right.
@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// @@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick. You can make changes and save them locally without being connected to the Internet. When you're ready to sync up again, just click "upload" and your ~TiddlyWiki will be saved back to tiddlyspot.com.
@@font-weight:bold;font-size:1.3em;color:#444; //Help!// @@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]]. Also visit [[TiddlyWiki.org|http://tiddlywiki.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help. If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].
@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// @@ We hope you like using your tiddlyspot.com site. Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions.
<<tag Windows>>
; Runtime Broker
https://ikasenmo-answer.com/windows10-runtime-broker/
----
; コマンドプロンプト
* [[Windowsコマンド一覧|http://www10.plala.or.jp/kobayan/command.html]]
* [[cp, mvコマンドとcopy, moveコマンドの微妙な違い:実例とまとめ|http://d.hatena.ne.jp/m-hiyama/20081211/1228976433]]
* [[cmd.exe のコマンドラインの仕様を解析してみた - 永遠に未完成 | http://d.hatena.ne.jp/thinca/20100210/1265813598 ]]
* [[Windowsのバッチ(bat)でsleep(wait)する方法 |http://kgo.dtiblog.com/blog-entry-23.html]]
* [[コマンドプロンプトで逆クォート]]
* [[HDDデータ消去]]
; Word
* [[変更履歴記録モードを解除する|http://www.relief.jp/itnote/archives/001803.php]]
* [[変更履歴の一括削除-すべての変更を反映|http://www.relief.jp/itnote/archives/001981.php]]
* [[グリッド線を自在に表示|http://kokoro.kir.jp/word/grid.html]]
* [[グリッドに揃えない|http://www.isc.meiji.ac.jp/~ken/word/word.html#Anchor-10802]]
* [[Wordの図表番号]]
* [[修正前後の文章を比較する | http://trendy.nikkeibp.co.jp/article/tec/word/20040311/107852/ ]]
* [[「音声認識データを保存する十分な空き領域がないため、データは失われました」の対策 | http://sato-si.at.webry.info/200607/article_3.html ]]
* [[Word セクションの区切り方 | http://www.geocities.jp/kotopara_g/oshiete01/w_section/sec_main.htm ]]
* [[Word 挿入したページ番号を削除したい | http://www.ndsu.ac.jp/1000_guid/1700_inst/1760_ce02/jkksc/sub/qanda/page/word/word.html#word5 ]]
* [[版の管理--Word・ワード|http://kokoro.kir.jp/word/han.html]]
** 新しいWordには、無いらしいが...
* [[Word 2007 で Excel 2007 または PowerPoint 2007 から図、図形、クリップ アートなどを貼り付けると 1 つのSmartArt グラフィックになり、編集できない|http://support.microsoft.com/kb/953410/ja]]
* [[ワードの変更履歴の3つの表示方法[ワード(Word)の使い方]All About|http://allabout.co.jp/gm/gc/297861/2/]]
* [[Word 2007 数式ツールでの「等号揃え」: ごんざぶログ|http://gonzaburou.cocolog-nifty.com/blog/2009/05/equation-1.html]]
; Excel
* ウィンドウ枠の固定
** 「ウィンドウ -> ウィンドウ枠の固定」
** [[ウィンドウ枠固定で行・列を固定表示|http://kokoro.kir.jp/excel/window-frame-fixation.html]]
* [[エクセルでのブック全体の両面印刷について質問です。 | http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1114529696 ]]
* [[Excel でシートを自動縮小して最適な横幅で印刷する|http://sonic64.com/2007-02-27.html]]
* [[等高線グラフ |http://homepage3.nifty.com/pcsalon/eg/eg06.htm]]
; PowerPoint
* [[行間を調節する | http://www.ppt119.com/lesson/layout/gyoukan.html]]
* [[スライド番号を使いこなすコツ - All About|http://allabout.co.jp/computer/mspowerpoint/closeup/CU20080725A/]]
* [[grafoo:blog - IllustratorファイルをPowerPointへ変換する|http://blog.grafoo.info/archives/ai2ppt]]
* [[Powerpointで不要なフォントが埋め込まれないようにする - HIATLI|https://weblog.shak.jp/2018/08/powerpoint%E3%81%A7%E4%B8%8D%E8%A6%81%E3%81%AA%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E3%81%8C%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BE%E3%82%8C%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B/]]
; Wireshark
* [[Loopback インタフェースのパケットをキャプチャする|http://www.tomoyan.net/dokuwiki/doku.php/windows/wireshark]]
* [[ホストPCにMicrosoft Loopback Adapter をインストール|http://pcarekore.blogspot.com/2008/01/pcmicrosoft-loopback-adapter.html]]
* [[Wireshark(旧Ethereal)でTCP/UDPのチェックサムがエラー - torutkの日記|http://d.hatena.ne.jp/torutk/20070616/p1]]
; その他
* [[HTML ヘルプ(.chm)が正常に表示されない |http://www.yoriki.jp/blog_2008/2005/08/html-chm.html]]
* [[知られざるバッチファイル | http://sgry.jp/pgarticles/batch.html]]
! 不要そうなアプリ
* https://arahata.life/243/how-to-remove-pre-install-apps-in-windows-10/
* https://www.atmarkit.co.jp/ait/articles/1802/28/news057.html
キーボードの言語設定がおかしい時
PC -> 右クリック -> プロパティ
デバイスマネージャー -> キーボード -> ドライバーの更新
* コンピュータを参照してドライバーソフトウェアを検索
* コンピュータ上の利用可能なドライバー一覧から選択します
; 停止したサービス
* Windows Search
* Diagnostic Policy Service
* Sys Main (Superfetch)
; 要らないかも
* WinSAT
* windows compatibility telemetry
** https://aprico-media.com/posts/3113
** https://gato.intaa.net/archives/5739
* WMI Performance Adapter
** http://tooljp.com/Windows10/doc/Service/WMI_Performance_Adapter.html
---
http://tooljp.com/Windows10/doc/Service/
<<list-links filter:[tag[WindowsSoftware]] >>
* [[NYACUS|http://www.nyaos.org/]] tcshっぽいシェル
* [[ckw改造版|http://d.hatena.ne.jp/hideden/20071123/1195822428]] cmd.exeのUIを改良したものらしい
** [[ckw 0.8.10 改造版を更に改造した(コンソール隠し)|http://blogs.wankuma.com/shuujin/archive/2008/10/15/158825.aspx]]
* [[UnixUtils|http://sourceforge.net/projects/unxutils]] UnixコマンドのWindowsバイナリ
* [[NT版UNIX-like tools|http://www.piedey.co.jp/softs/ntuxtl014.html]] 日本語(シフトJIS)を処理できる~UnixUtils。みたいなもの
* [[grep|http://gnuwin32.sourceforge.net/packages/grep.htm]] あれこれdllを入れないとだめ[[らしい|http://d.hatena.ne.jp/eclipse-a/20080326/1206514291]]
* [[vim|http://www.kaoriya.net/]]
* [[less|http://www.d2.dion.ne.jp/~imady/freesoft/lesspatch/index.html]] 未確認
https://www.library.osaka-u.ac.jp/doc/2013_MSWord_2.pdf
[[Word 2016:図表番号を挿入するには|https://www.wanichan.com/pc/word/2016/10/18.html]]
----
''「挿入 -> 参照 -> 図表番号」'' から入れることが可能。
番号のフォーマットは、番号付けで可能。
<<tag xyzzy>>
* [[xyzzy 初期化(siteinit.l)]]
* [[xyzzy-Lisp]]
- - - - - - - - - - - - - - - - - - - - -
; カスタマイズコード
* [[ユーティリティ関数 (my-common.l)]]
; 拡張ライブラリ
* [[sfiler.l |http://www003.upp.so-net.ne.jp/rex/]]
** explorer みたいなものを表示
* [[browserex |http://ohkubo.s53.xrea.com/xyzzy/#browserex]]
** ブラウザ表示が見れるようになる
** [[browser.dll が要る |http://www.osk.3web.ne.jp/~usitukai/]]
* [[outline-tree2 |http://ohkubo.s53.xrea.com/xyzzy/#outline-tree2]]
** 色々ツリーで見れる
** 個人的には、どうも合わない...
- - - - - - - - - - - - - - - - - - - - -
* [[xyzzyで文字コード指定再読み込み / 随筆 - 随筆prototype |http://6994.hito.thebbs.jp/Madam/1122125407 ]]
* [[表示しているバッファのタブを色づけ |http://d.hatena.ne.jp/octech/20080508/1210216239]]
; カーソル移動用関数
| !関数名 | !引数 | !説明 |
|''goto-char'' |POINT |指定された位置にカレントバッファのカーソルを移動 |
|''forward-char'' |&optional (ARG 1) |指定された文字数だけ右に移動 |
|''backward-char'' |&optional (ARG 1) |指定された文字数だけ左に移動 |
|''goto-bol'' | |行頭に移動 |
|''goto-eol'' | |行末に移動 |
|''skip-chars-forward''|CHARS |指定された文字群を右方向にスキップ<br>CHARSの型は文字列でよい |
|''skip-chars-backward''|CHARS |指定された文字群を左方向にスキップ<br>CHARSの型は文字列でよい |
; カーソル位置を取得
(point)
; カーソル位置の文字を取得
(char-after (point))
(string (char-after (point))) @@color(#008000):; 文字列で取得@@
; カーソル位置の前の文字を取得
(char-before (point))
(string (char-before (point))) @@color(#008000):; 文字列で取得@@
; カーソル位置から文字列を取得する
(buffer-substring (point) (+ (point) 10)) @@color(#008000):; カーソル位置から10文字取得@@
----
| !関数名 | !引数 | !説明 |
|''char-after'' |point &optional not-used |カレントバッファの POINT 位置の文字を返します。 |
|''char-before'' ||カレントバッファの POINT の前の位置の文字を返します。 |
; char-after
カレントバッファの POINT 位置の文字を返します。
; char-before
カレントバッファの POINT の前の位置の文字を返します。
!サンプルコード
!!デバッグプリント
(msgbox (format nil "string ~D ~X" int-dec int-hex))
(msgbox (format nil "~A" object))
!!mapcar
(mapcar #'+ '(1 2 3 4) '(1 3 5) '(1 4 9 16) '(1 8 27))
=> (4 17 44)
! 簡易ツール
!! ちょっとした計算
(defun cal (exp) "Ctrl+jで実行しないと結果が見えない" (format t "~D" exp))
(cal (* 1000 1000 30))
! バッファの設定
* 書き込みを禁止する
** (toggle-read-only)
* tail -f する
** (tail-f)
!割り算
| ! |!サンプル |!サンプルの結果 |!備考 |
|商 (分数) |(/ 4 3) |4/3 ||
|商 (整数) |(truncate (/ 4 3)) |1, 1/3 |truncate は、2つの値を返す関数 |
|商 (小数) |(float (/ 4 3)) |1.3333333 ||
|余り |(rem 4 3) |1 ||
!指数・対数
| ! |!サンプル |!サンプルの結果 |
|べき乗 |(expt 7 2) |49 |
|自然対数のべき乗 |(exp 1) |2.718282 |
|~|(exp 2) |7.389056 |
|対数 |(log 100 10) |2.0 |
|eを底とする対数 |(log 2.718282) |1.0 |
|~|(log (exp 1)) |0.9999999 |
!文字列の数値への変換
[[文字列<->数値やsplit - 睡眠不足?! | http://d.hatena.ne.jp/sleepy_yoshi/20080215/p2]]
(read-from-string "256") @@color(green):; ふたつ目の返り値は数値以外の文字が始まるindex@@
=> 256, 3
(parse-integer "256")
=> 256
; 多値を返す
| !関数名 | !引数 | !説明 |
|''values'' |values &rest ARGS |多値で値を返す |
|''values-list'' |values-list LIST |指定されたリストを多値として返す |
; 特殊な記号の表示・非表示
| !関数名 | !引数 | !説明 |
|''toggle-tab'' |&optional (arg nil sv) |タブの表示・非表示を切り替える<br>(t, nil を引数で渡すことで、表示・非表示を明示的に指定することも可能) |
* [[xyzzy -- 設定画面 | http://www.netlaputa.ne.jp/~henmi/lisp/xyzzy/editor/971012d.html]]
インクリメンタルサーチについては知らない
; 大文字小文字区別しない
(setq *case-fold-search* t)
; バッファの最後まで行っても、最初に戻らない
(setq *wrap-search* nil)
; 前回の検索で正規表現を使ったか
ed::*last-search-regexp-p*
; 前回の検索語
ed::*last-search-string*
; 前回の正規表現検索パターン
ed::*last-search-regexp*
try {
...
} finally {
...
}
{{{
(unwind-protect (call-interactively 'search-forward)
(setq *wrap-search* t))
}}}
try {
...
} catch{
...
}
{{{
(handler-case
(例外を発生するかもしれない処理)
(キャッチする例外1 ...)
(キャッチする例外2 ...)
...)
}}}
''M-x: describe-function'' 関数の意味を知る
''M-x: describe-variable'' 変数の意味を知る
* [[列関数 M.Hiroi's Home Page|http://www.geocities.jp/m_hiroi/xyzzy_lisp/abclisp06.html]]
! 関数の使い方
!! mapcar
''mapcar FUNCTION LIST &rest ~MORE-LISTS''
2個以上の引数(関数と1個以上のリスト、その関数の取る引数毎にリストが1個必要)を取り、その関数をそれぞれのリストの要素に先頭から適用していく。
{{{
(mapcar #'+ '(1 2 3 4) '(1 3 5) '(1 4 9 16) '(1 8 27))
=> (4 17 44)
}}}
!! remove-if
''remove-if PREDICATE SEQUENCE &key :from-end :start :end :count :key''
SEQUENCE の中で PREDICATE を満たすものを削除したシーケンスを返す。(副作用はない)
{{{
;; 10以下の値をリストから削除する
(remove-if #'(lambda (num) (<= num 10)) '(2 4 6 8 10 12 14))
=> (12 14)
; :start と :end でチェックする範囲を指定可能
(remove-if #'(lambda (num) (<= num 10)) '(2 4 6 8 10 12 14) :start 1 :end 3)
=> (2 8 10 12 14)
; from-end を t にすると、列の後ろから処理を行う らしい...
}}}
# ''site-lisp/siteinit.l'' に初期設定を書き込む。
# ''M-x: eval-buffer'' を実行し、siteinit.lの文法をチェックする。
# ''M-x: byte-compile-file'' で、''siteinit.l'' をバイトコンパイルする。(これによって、''siteinit.lc'' が作成される )
# ''siteinit.lc'' を再評価するために、''Shift + Ctrl'' を押しながらxyzzyを再起動する。
''Shift + Ctrl'' を押しながらxyzzyを再起動すると、ダンプファイル(xyzzy.w98,xyzzy.w2kなど)が削除される
* [[関数リファレンス|http://xyzzy.s53.xrea.com/wiki/index.php?%A5%EA%A5%D5%A5%A1%A5%EC%A5%F3%A5%B9#download]] の [[アーカイブページ|http://xyzzy.s53.xrea.com/reference/archive/]]
- - - - - -
* [[xyzzy Lisp プログラミング|http://homepage2.nifty.com/coin/xyzzy_lisp_prog/index.html]]
* [[Lisp のパッケージ - *Trace Output*|http://d.hatena.ne.jp/miyamuko/20080225/package]]
* [[M.Hiroi's Home Page / defstruct | http://www.geocities.jp/m_hiroi/xyzzy_lisp/abclisp09.html ]]
* [[Common Lisp Tips > 連想リスト(association list) | http://www.hokkority.com/blog/common-lisp-tips/association-list.html ]]
* [[遠い海: lispとrubyとpythonと その5 例外処理(lisp) | http://faroffsea.blogspot.com/2008/12/lisprubypython5-lisp.html ]]
- - - - - - - - - - - - - - - - - - - - -
* [[xyzzy 初期化(siteinit.l)]]
* [[xyzzy ヘルプを使う]]
* [[xyzzyのマイナーモード]]
- - - - - - - - - - - - - - - - - - - - -
関数
<<tiddlerList tags:"xyzzy-Lisp,reference">>
- - - - - - - - - - - - - - - - - - - - -
サンプルコード
<<tiddlerList tags:"xyzzy-Lisp,sample-code">>
- - - - - - - - - - - - - - - - - - - - -
カスタマイズ
<<tiddlerList tags:"xyzzy-Lisp,setting">>
[Colors]
textColor=#bfffff
backColor=#400000
ctlColor=#808080
selectionTextColor=#fffffff
selectionBackColor=#ec56a31
kwdColor1=#cd
kwdColor2=#cd00cd
kwdColor3=#cd
stringColor=#f0f000
commentColor=#b100
tagColor=#4040
cursorColor=#800080
caretColor=#bfffff
imeCaretColor=#80
linenum=#bfffff
reverse=#2984e00
unselectedModeLineFg=#13000000
unselectedModeLineBg=#10d8e9ec
modeLineFg=#15ffffff
modeLineBg=#13000000
{{{
;; マイナーモードのOn・Offを管理するバッファローカルな変数を宣言
;; (つまり、マイナーモードのOn・Off状態は、バッファごとに管理する)
(defvar-local *sample-minor-mode* nil)
;; マイナーモード用のキーマップを保持する変数を宣言
;; (defvar で宣言された変数は、グローバルなスペシャル変数になる)
(defvar *sample-minor-mode-map* nil)
;; 宣言した変数にキーマップをセットする (これはメジャーモードと同じ)
;; この処理は、1回だけ実行される
(unless *sample-minor-mode-map*
(setq *sample-minor-mode-map* (make-sparse-keymap))
(define-key *sample-minor-mode-map* #\C-z 'undo)
(define-key *sample-minor-mode-map* #\C-a 'selection-whole-buffer)
; (define-key *sample-minor-mode-map* #\C-v 'paste-rectangle-from-clipboard))
(define-key *sample-minor-mode-map* #\C-v 'overwrite-rectangle-with-clipboard))
;; マイナーモードの切り替えを行う関数
;; (Onの時に)
(defun sample-minor-mode (&optional (arg nil sv))
(interactive "p")
(ed::toggle-mode '*sample-minor-mode* arg sv)
(update-mode-line t)
(if *sample-minor-mode*
(progn
(set-minor-mode-map *sample-minor-mode-map*)
(message "[minor-mode] Set My Winkey mode."))
(progn
(unset-minor-mode-map *sample-minor-mode-map*)
(message "[minor-mode] Unset My Winkey mode.")))
t)
;; マイナーモードを有効にした時の、モードライン表示の設定
;; (この例だと、"SampleMinor" という文字列が表示されるようになる)
(pushnew '(*sample-minor-mode* . "SampleMinor") *minor-mode-alist* :key #'car)
}}}
構造化されたデータを表現するためのフォーマット。
3つのデータ形式を組み合わせて、データを表現する。
* 配列
* ハッシュ
* スカラー(文字列、数値、真偽値など)
----
```
# Array
- a
- b
- c
```
! Young の式
固体表面が液体及び気体と接触しているとき、この3相の接触する境界線において液体面が固体面と成す角度を接触角(contact angle)という。3相の接触する点の力の釣り合いを考えると、以下の関係が成り立つ。
:$$\gamma_L \cos{\theta} = \gamma_S - \gamma_{SL}$$
また、この関係は、ギブスエネルギーの変化から導ける。
固体の面に置かれた液滴のギブスエネルギーの変化は、「液滴の体積が一定である」という条件を用いると、次のように表せる。
:$$dG = (\gamma_{SL} - \gamma_S) dA_{SL} + \gamma_L dA_L = 2 \pi a (\gamma_{SL} - \gamma_S) da + 2 \pi a \gamma_L \cos{\theta} da$$
a: 半球状の液相の半径 (厳密にいうと半球ではないが.. )
平衡状態では $$\dfrac{dG}{da} = 0$$ であることから、 Young の式が得られる。
https://www.jstage.jst.go.jp/article/htsj1999/43/178/43_178_43/_pdf/-char/ja
----
! Young-Laplace の式
平衡状態において、相の境界面が曲面となっている時、相の間の圧力差は、「表面張力 $$(\gamma)$$ と 主曲率 $$(R_1, R_2)$$」 で表すことができる。
:$$\Delta P = \gamma \cdot \left( \dfrac{1}{R_1} + \dfrac{1}{R_2} \right)$$
境界面は圧力の低い側に向かって、凸の面が形成される。例えば、半径 R の球形気泡の内圧は、次のように表される。
:$$P_G = P_L + \dfrac{2 \gamma}{R}$$
また、この圧力差のことを ''ラプラス圧'' という (Capillary Pressure ともいう?)。
---
! Kelvin equation
液体表面が曲率を持つ場合に蒸気圧がどのように曲率に依存するかを表す式
:$$ \displaystyle {\ln {{P_0}^K \over P_{0}}}={\frac {\gamma V_{m}}{RT}} \left( \dfrac{1}{R_1} + \dfrac{1}{R_2} \right)$$
$${P_0}^K$$ 曲率を考慮した蒸気圧, $$P_0$$ 曲率が無い時の蒸気圧, $$V_m$$ モル体積 である。
* [[This equation will change how you see the world (the logistic map)|https://www.youtube.com/watch?v=ovJcsL7vyrk]]
* [[【無料】『本当に役に立つ』"Webサイト"19選を発表していいかい?【ダウンロード不要】|https://www.youtube.com/watch?v=nFHPwsIuwW0]]
* [[Icon Search Engine Iconfinder | http://www.iconfinder.com/]]
; フリーアイコン
* [[Free Icons, Stock Icons, Icon Pot | http://www.iconpot.com/]]
** [[無料で自由に使えるライセンスのアイコンばかりを怒涛のごとく集めた『iconPot』 100SHIKI | http://www.100shiki.com/archives/2009/03/iconpot.html]]
* [[フリーで汎用的なアイコンセット : FindxFine -Web制作に関するメモ-|http://www.findxfine.com/graphic/sozai/1878.html]]
* [[50 (More) Excellent Mini Icon Sets | http://www.hongkiat.com/blog/mini-icon-sets/]]
* [[GoSquared – Blog – 165 Vector Icons, Now in 5 Colours | http://www.gosquared.com/liquidicity/archives/122]]
* [[45 Photoshop Tutorials for Better Navigation Vandelay Design Blog|http://vandelaydesign.com/blog/design/photoshop-navigation-tutorials/]]
* [[クリエイティブコモンズにおける著作権表示[to-R]|http://blog.webcreativepark.net/2007/12/03-154350.html]]
* [[アイコン - ponnao-clip | http://ponnao.com/?s=%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3&pcview=true&img=link]]
! 反変・共変
反変ベクトルの添え字は上に付け、共変ベクトルの添え字は下に付ける、というルールがあります。
!! 具体例
; 反変ベクトル
添え字は上付き。(基底ベクトルは共変なので、添え字は下付きになる)
$$A^i = a^1 e_1 + a^2 e_2 + ... + a^i e_i$$
; 共変ベクトル
$$B_i = b_1 e^1 + a^2 e_2 + ... + a^i e_i$$
; 行列 (1階反変1階共変テンソル)
! 縮約
同じ添え字は、縮約をとる。
---
https://www.beret.co.jp/books/tachiyomi/images/638.pdf
http://d.hatena.ne.jp/rikunora/20170219/p1
; TDD
* [[僕がTDDをやめた理由 - カタチづくり | http://d.hatena.ne.jp/u_1roh/20090208/1234095960 ]]
* [[八角研究所 : TDD は新規性の高いサービス開発には適さない | http://www.hakkaku.net/articles/20080331-181 ]]
* [[満足せる豚。眠たげなポチ。:TDD は企画には使うなってことでいい? | http://blog.hacklife.net/archives/51508394.html ]]
* [[TddAntiPatterns - TDD のアンチパターン | http://www.hyuki.com/yukiwiki/wiki.cgi?TddAntiPatterns#i1 ]]
; BDD
* [[TDDはYAGNIに矛盾する? - カタチづくり | http://d.hatena.ne.jp/u_1roh/20090201/1233490739 ]]
** ~JDave
* [[XPで楽しい人生を | http://oss.timedia.co.jp/show/XP%e3%81%a7%e6%a5%bd%e3%81%97%e3%81%84%e4%ba%ba%e7%94%9f%e3%82%92 ]]
* [[リレーショナル・データベースの世界 | http://www.geocities.jp/mickindex/database/idx_database.html ]]
* [[「組み込みコラム」インデックス - @IT MONOist | http://monoist.atmarkit.co.jp/fembedded/index/column_index.html ]]
* [[DDDについて、だらだらと - みねこあ | http://d.hatena.ne.jp/minekoa/20091031/1256994075 ]]
* [[[ 技術講座 ] Domain-Driven Designのエッセンス 第1回 | http://www.ogis-ri.co.jp/otc/hiroba/technical/DDDEssence/chap1.html ]]
* [[よいコメントの書き方入門(心構え編) - 新・日々録 by TRASH BOX@Eel | http://d.hatena.ne.jp/eel3/20090811/1249977594 ]]
! ウォリスの公式
:$$\displaystyle \dfrac{\pi}{2} = \prod_{n=1}^{\infty} \dfrac{2n \cdot 2n}{(2n-1)(2n+1)} $$
次のように表すこともある。
:$$\displaystyle \sqrt{\pi} = \lim_{n \to \infty} \dfrac{2^{2n} (n!)^2}{\sqrt{n} (2n)!} $$
---
! 導出
自然数 n に対して、
$$\displaystyle I_n = \int_0^{\pi/2} \sin^n x dx$$
とおくと、
$$I_n = \dfrac{n-1}{n} I_{n-2} $$ (n ≧ 2)
である (ここの詳細は下の方に別途記載)。
また、 $$I_0 = \dfrac{\pi}{2}, I_1 = 1 $$ であるので、n が偶数の場合と奇数の場合の I はそれぞれ、
$$I_{2n} = \dfrac{2n-1}{2n} \dfrac{2n-3}{2n-2} ... \dfrac{3}{4} \dfrac{1}{2}\dfrac{\pi}{2}$$ 【式1】
$$I_{2n+1} = \dfrac{2n}{2n+1} \dfrac{2n-2}{2n-1} ... \dfrac{4}{5} \dfrac{2}{3}1$$ 【式2】
となる。ゆえに、
$$\dfrac{\pi}{2}\dfrac{I_{2n+1}}{I_{2n}} = \dfrac{2 \cdot 2}{1 \cdot 3} \dfrac{4 \cdot 4}{3 \cdot 5} \cdots \dfrac{(2n)(2n)}{(2n-1)(2n+1)}$$ 【式3】
となる。
ここで、 $$0 < x < \dfrac{\pi}{2}$$ ならば $$0 < \sin^{2n+1} x < \sin^{2n}x < \sin^{2n-1}x $$ であることを用いると、
$$0 < I_{2n+1} < I_{2n} < I_{2n-1} $$
$$1 < \dfrac{I_{2n}}{I_{2n+1}} < \dfrac{I_{2n-1}}{I_{2n+1}} = \dfrac{2n+1}{2n} $$
よって、(はさみうちの原理を用いて)
$$\displaystyle \lim_{n \to \infty} = \dfrac{I_{2n+1}}{I_{2n}} = 1$$ 【式4】
なので、
$$\displaystyle \dfrac{\pi}{2} = \prod_{i=1}^{\infty} \dfrac{2n \cdot 2n}{(2n-1)(2n+1)} $$
が得られる。
- - - - -
また、【式1】・【式2】から、
$$I_{2n} I_{2n+1} = \dfrac{1}{2n + 1} \dfrac{\pi}{2}$$
という関係を作ることもでき、これを変形すると
$$\displaystyle \sqrt{n} \cdot I_{2n+1} \sqrt{\dfrac{I_{2n}}{I_{2n+1}}} = \sqrt{\dfrac{\pi}{4 + \dfrac{2}{n}}}$$
という式を得ることができる。極限をとって、【式4】を用いて式を変形すると、
$$\displaystyle \lim_{n \to \infty} \sqrt{n} I_{2n+1} = \dfrac{\sqrt{\pi}}{2}$$
となる。そして、I,,2n+1,, に【式2】を代入すると、
$$\displaystyle \sqrt{\pi} = \lim_{n \to \infty} 2 \sqrt{n} \dfrac{2^{2n} (n!)^2}{(2n+1)!} $$ 【式5】
となるが、【式5】の右辺は、
$$\displaystyle \lim_{n \to \infty} 2 \sqrt{n} \dfrac{2^{2n} (n!)^2}{(2n+1)!} = \lim_{n \to \infty} \dfrac{2 \sqrt{n}}{2n + 1} \dfrac{2^{2n} (n!)^2}{(2n)!} = \lim_{n \to \infty} \dfrac{1}{1 + \frac{1}{2n}} \lim_{n \to \infty} \dfrac{2^{2n} (n!)^2}{\sqrt{n}(2n)!} $$
と変形できるため、最終的に、
$$\displaystyle \sqrt{\pi} = \lim_{n \to \infty} \dfrac{2^{2n} (n!)^2}{\sqrt{n} (2n)!} $$
という式が得られる。
[[ウォリスの公式の分かり易い証明 - 理数アラカルト|https://risalc.info/src/wallis-formula.html]]
---
!! $$I_n$$ の展開
$$\sin^n x = (\sin^{n-1} x) (\sin x) = (\sin^{n-1} x) (- \cos x)' $$
であるので、部分積分の公式を用いると、
$$\displaystyle I_n = \int_0^{\pi/2} \sin^n x dx = \left[ (\sin^{n-1} x)(- \cos x) \right]_0^{\pi/2} + \int_0^{\pi/2} (n - 1) (\sin^{n-2} x) (\cos^2 x) dx $$
という式変形が可能である。
ここで、 $$\cos^2 x$$ を $$1 - \sin^2 x$$ で置き換えると、
$$\displaystyle I_n = (n - 1) \int_0^{\pi/2} (\sin^{n-2} x) dx - (n - 1) \int_0^{\pi/2} (\sin^{n} x) dx $$
$$\displaystyle = (n - 1) I_{n-2} - (n - 1) I_n$$
となり、この式を整理すると、
$$I_n = \dfrac{n-1}{n} I_{n-2} $$
が得られる。
http://mathsuke.mods.jp/wallis_formula/
---
---
---
ここで、 $$\cos^2 x$$ を $$1 - \sin^2 x$$ で置き換えると、
$$\displaystyle \int \sin^n x dx = (\sin^{n-1} x)(- \cos x) + (n - 1) \int (\sin^{n-2} x) (1 - \sin^2 x) dx $$
$$\displaystyle = (\sin^{n-1} x)(- \cos x) + (n - 1) \int (\sin^{n-2} x) dx - (n - 1) \int (\sin^{n} x) dx $$
が得られるので、
$$I_n = (\sin^{n-1} x)(- \cos x) + (n - 1)(I_{n-2} - I_n) $$
$$\displaystyle \int \sin^n x dx = (\sin^{n-1} x)(- \cos x) + \int (n - 1) (\sin^{n-2} x) (\cos^2 x) dx
$$
$$\displaystyle \int \sin^n x dx = \int \sin^{n-1} x dx $$
* [[農家の嫁の事件簿 +(ぷらす) | http://kamatsuta2.exblog.jp/]]
* [[ラフォーレ原宿 | http://www.laforet.ne.jp/]]
* [[WIRED VISION - “アカルイ”未来を考えるニュースサイト | http://wiredvision.jp/]]
* [[交通のご案内茶屋日本最初毘沙門天 神峯山寺 - 大阪府高槻市の天台宗仏教寺院- | http://www.kabusan.or.jp/chaya/access.php]]
;企業サイト風
* [[株式会社IHI | http://www.ihi.co.jp/]]
* [[東京メトロ | http://www.tokyometro.jp/index.html]]
* [[羊羹(ようかん) 総本家 駿河屋 | http://www.souhonke-surugaya.co.jp/]]
* [[ヤクルト本社 | http://www.yakult.co.jp/]]
* [[黒酢はヤマシゲの福山酢 伝統の酢造り 福山酢醸造 株式会社 | http://fukuyamasu.co.jp/]]
;ショッピングサイト
* [[All About COCOMO ココロのこもった贈り物。 | http://ccm.stylestore.allabout.co.jp/mojo?language=ja]]
* [[北欧家具・雑貨のインテリア通販ショップ - morphica | http://www.morphica.jp/]]
* [[無印良品ネットストア | http://www.muji.net/store/]]
* [[ファストフードメニュー MINISTOP | http://www.ministop.co.jp/menu2/]]
* [[Decoration Quatuor: Magasin de meubles contemporain, design et décoration | http://www.quatuor.be/fr-wr/categorie.decoration/]]
* [[SELECSONIC サンエー・インターナショナルグループショッピングサイト | http://www.selecsonic.com/selecsonic/top/index.jsp]]
* [[Photoshop Vip » ショッピングサイトデザインに関する15個の間違い | http://photoshopvip.net/archives/8429]]
;小さめな団体・お店
* [[はつかいちご 広島県廿日市の温暖な気候で育った平良いちごのスペシャルスイーツ | http://www.hatsukaichigo.jp/]]
* [[B.cafe - モルドバワイン専門店 | http://www.binc.co.jp/bcafe/index.html]]
* [[テーラー・ラト LATOについて | http://www.tailor-lato.com/ja/lato/]]
* [[紀州ほそ川 | http://kishu-u.me/]]
* [[恵比寿ガーデンプレイス | http://gardenplace.jp/]]
* [[Web制作テクニック Webクリエイターボックス | http://www.webcreatorbox.com/category/tech/]]
* [[レンタルサーバー「heteml」 - 大容量・高機能のレンタルサーバー | http://heteml.jp/]]
* [[cafe andonand(カフェ アンドナンド) | http://www.andonand.jp/index.html]]
; レストランの参考にしたもの
* http://www.kiyasuya.jp/
* http://www.nhk.or.jp/jbungaku/
* [[大治将典 - Oji Masanori / Oji & Design | http://www.o-ji.jp/]]
* [[魅力的なスライドショーを使ったウェブサイトデザイン具体例30個まとめ - WEBデザインチュートリアル | http://www.buguxs.com/a/1301.html]]
; コンテナのレイアウト
* [[TasteSpotting a community driven visual potluck | http://www.tastespotting.com/]]
* [[DRAFT | http://www.draft.jp/]]
* [[プロジェクト管理ツール「Basecamp」の使い方 webのネタをアグリゲータしてみました... | http://aggregator.awazo.com/web/2011/03/08/%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E7%AE%A1%E7%90%86%E3%83%84%E3%83%BC%E3%83%AB%E3%80%8Cbasecamp%E3%80%8D%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/]]
;妙にプッシュされた
* [[伊賀の里モクモク手づくりファーム | http://www.moku-moku.com/]]
* [[Oisix 有機野菜などの食材宅配 ナチュラル&オーガニック・ネットスーパー | http://www.oisix.com/topPageG5.htm?SESSIONISNEW=TRUEID&mi2=7749]]
* [[生協の食材宅配なら【生活クラブ】安心できる食材の宅配は生協 | http://www.seikatsuclub.coop/]]
; 既存ページ
* [[レストラン | http://www7.ocn.ne.jp/~nouyusha/]]
* [[農悠舎王隠堂(自家栽培 無添加 手作りをモットーとして栽培、製造に励んでいます!) | http://www.nouyusha.com/]]
* [[農悠舎王隠堂 古民家農園館 ここきち —全国の食材と農家レストランを紹介— | http://www.cocokichi.jp/restaurant/nara3014.html]]
* [[農悠舎王隠堂 紀伊半島で手塩にかけてつくった | http://nouyusha.seesaa.net/]]
* [[農家レストラン/農悠舎王隠堂 古民家レストラン | http://www.pref.nara.jp/miryoku/nouka/nouka-restaurant/ouindo.html]]
;あんまり関係なかった
* [[i-Radio: clammbon - 胡麻みそズイ | http://clammbon.i-radio.fm/]]
* [[The White House | http://www.whitehouse.gov/]]
* [[特別寄稿『がんばろう、ニッポン! 僕らはひとりじゃない!』 - サッカーキング|世界のサッカー情報サイト | http://www.soccer-king.jp/blog_item/id=1159]]
* [[free stitch FIT AND SHOOT|http://www.freestitch.jp/match/]]
* [[表参道ヒルズOmotesando Hills | http://www.omotesandohills.com/index.php]]
* [[Catalog(カタログ)|JILL by JILLSTUART [ジルバイジルスチュアート] | http://www.jillbyjillstuart.jp/catalog/index.html]]
* http://www.kotsu.metro.tokyo.jp/bus/shitamachi/japanese/index.html
* [[London Web Designer / Web Developer - Peter Pearson | http://www.peter-pearson.com/]]
----
; すごく基本的なこと
* [[画像の角を丸くする (for Photoshop) | http://cinnamoncafe.jugem.cc/?eid=61]]
* [[オブジェクトの縁取り イラストレーターの使い方 | http://ameblo.jp/haro2015/entry-10180091964.html]]
** フォトショのレイヤー効果でもよいけど
* [[覚えておくと便利なバランスのよい縦横比とバナーサイズ :: Love & Design :: | http://sweetlovexx.seesaa.net/article/94420713.html]]
* [[地図用鉄道ラインを描く | http://roundsquaretriangle.web.fc2.com/tips/illustrator/train_line/index.html]]
;フッターについて
* [[コリス | http://coliss.com/]]
* [[Ad server solution for publishers, advertisers & networks OpenX | http://www.openx.org/]]
* [[良い相互リンクと悪い相互リンク、良いフッターリンクと悪いフッターリンク 海外SEO情報ブログ|http://www.suzukikenichi.com/blog/differences-between-good-crosslinking-and-bad-crosslinking-and-good-footerlinks-and-bad-footerlinks/]]
* [[名古屋グランパス公式サイト | http://nagoya-grampus.jp/]]
* [[フッターサイトマップのデザイン at bookslope blog | http://www.bookslope.jp/blog/2009/04/footersitemap.html]]
; ミニブログ
* [[Twitter | http://twitter.com/]]
* [[(7) はてなハイク - お絵かきも楽しめるミニブログ | http://h.hatena.ne.jp/]]
* [[Zapd: アヒルちゃんザップザップ! | http://1st.zapd.co/]]
; フリーアイコン
* [[無料で自由に使えるライセンスのアイコンばかりを怒涛のごとく集めた『iconPot』 100SHIKI | http://www.100shiki.com/archives/2009/03/iconpot.html]]
* [[フリーで汎用的なアイコンセット : FindxFine -Web制作に関するメモ-|http://www.findxfine.com/graphic/sozai/1878.html]]
* [[シンプル、ミニマルなサイトを作りたい時に役立ちそうなアイコンやフォント、ギャラリーなどのまとめ - かちびと.net|http://kachibito.net/web-design/minimal-site-resource.html]]
* [[50 (More) Excellent Mini Icon Sets | http://www.hongkiat.com/blog/mini-icon-sets/]]
* [[45 Photoshop Tutorials for Better Navigation Vandelay Design Blog|http://vandelaydesign.com/blog/design/photoshop-navigation-tutorials/]]
* [[クリエイティブコモンズにおける著作権表示[to-R]|http://blog.webcreativepark.net/2007/12/03-154350.html]]
;favicon
* [[Ganglia|http://blog.ps-ax.info/tag/ganglia/]]
; アクセス
* [[地図のブブンデザイン|Webデザインの“ブブン”を集めたブブンデザインアーカイブ 公式サイト|http://bubundesignarchive.jp/2011/01/map4004.html]]
* [[とにかくわかりやすいマップ普及推進委員会/安心の地図作成代行サービス | http://www.wakariyasui-map.com/]]
; Google Maps API v3
* [[Google Maps Javascript API V3 Examples - Google Maps JavaScript API V3 - Google Code | http://code.google.com/intl/ja/apis/maps/documentation/javascript/examples/index.html]]
* [[ユーザーがページのどこをクリックしたか解析するツール[to-R]|http://blog.webcreativepark.net/2007/08/20-223606.html]]
* [[WordPressサイトのバックアップ - 俺のメモ|http://d.hatena.ne.jp/latexcatsuit/20110502/1304283553]]
** WP sakura でバックアップ
* [[About jQuery.TinySlider - jQuery.TinySlider|http://wex.im/]]
* [[白銀比・黄金比 WEBデザインの小技 | http://viskowaza.web.fc2.com/layout/ratio/divide/index.html]]
* [[秋元 » 日本向けのウェブデザインというのはあるのか? | http://akimoto.jp/blog/2011/01/27/how-to-localize-website-for-japan/]]
* [[ゴールドプラン / Gold Plan ホームページ制作会社 ウェブバーガーデザイン ハワイ - Web-burger.com|http://www.web-burger.com/jp/C-PlanGold.htm]]
* http://www.bbc.co.uk/news/world-asia-pacific-13017282
----
; プロジェクト管理
* [[Basecampを使う理由(2) system-enablers日記|http://www.system-sekkei.com/yamauchi/?p=363]]
* [[BasecampライクなRails製プロジェクト管理「Teambox」 - MOONGIFT|オープンソース・ソフトウェア紹介を軸としたITエンジニア、Webデザイナー向けブログ|http://www.moongift.jp/r/2009/07/teambox/]]
* [[プロジェクト管理ツール「Basecamp」の使い方 Webクリエイターボックス | http://www.webcreatorbox.com/webinfo/how-to-use-basecamp/]]
----
; 写真の処理
{{{
トップの写真
選択範囲 -> 選択範囲を変更 -> 滑らかに (4px)
コンテナ
選択範囲 -> 選択範囲を変更 -> 滑らかに (6px)
コンテナ内の写真
選択範囲 -> 選択範囲を変更 -> 滑らかに (3px)
レストラン
選択範囲 -> 境界をぼかす (3px)
角の1pxだけ消しゴムで消す
}}}
! タリン
; バス
* [[市内交通 | http://soiduplaan.tallinn.ee/#bus/en]]
* [[タリン市内交通を利用する | http://4travel.jp/overseas/area/europe/estonia/tallin/travelogue/10570714/]]
; 港
* [[Port of Tallinn | http://www.ts.ee/en ]]
* [[タリンを歩こう!お勧め半日観光ルート | http://tumjpn.blog48.fc2.com/blog-entry-161.html]]
* [[ショッピング | http://blog.goo.ne.jp/maccongoo/e/d822d2bbd6f6103e868bbea662422322]]
どちらかというと、応用的な場面でよく使う。
----
! 定義
:$$ H = U + pV$$
[[熱力学第一法則]] (dU = d'Q - pdV) を組み合わせた形で表されることもよくある。
:$$d'Q = dH - V dP$$
エントロピーを使って表現する場合は、前提とする条件($$dS = \dfrac{\delta Q}{T}$$ , $$\delta W = p dV$$)に注意。
:$$dH = dU + pdV + VdP = TdS + VdP $$
- - - - -
!! 完全な関数
圧力・エントロピー・モル数の関数の時に、完全な関数になる。
$$ H[p;S,N]$$
$$dH = \dfrac{\partial H}{\partial p} dP + \dfrac{\partial H}{\partial S} dS + \dfrac{\partial H}{\partial N} =V dP + T dS + \mu dN $$
!! 温度・圧力の関数
H(T,P) で表されるときは、以下のようにも表現できる (β: compressible factor $$= \dfrac{1}{V} \left( \dfrac{\partial V}{\partial T} \right)_p$$ )。
$$ dH = C_p dT + \left[V - T \left( \dfrac{\partial V}{\partial T} \right)_p \right] dP = C_p dT + V \left[1 - \beta T \right] dP$$
("dH = T dS + V dP" の両辺を dP で割り、"T = 一定" とすると $$\left( \dfrac{\partial H}{\partial p} \right)_T = T \left( \dfrac{\partial S}{\partial p} \right)_T + V$$、これに Maxwell の式を適用すれば、上の関係が得られる)
----
! 等エントロピープロセス
$$dH = T dS + V dP $$ において ''dS = 0'' となるので、エンタルピーの変化は、次のように表せる。
$$dH = VdP$$
! 等圧過程
体積をわずかに変化させる操作での熱の移動は、エンタルピーを用いて
$$\delta Q = \Delta U + \delta W = \Delta U + p \Delta V = \Delta H - V \Delta p$$
と表すことが可能である。そのため、定圧過程($$\Delta p = 0$$)では、吸熱量とエンタルピー差が等しくなる。
$$\delta Q = \Delta H$$
また、等圧準静過程では、最大吸熱量になる。
$$ Q_{max} = \Delta H$$
! 断熱準静過程
断熱準静過程でのエネルギー変化
$$ \dfrac{\partial U[S,V,N]}{\partial V} = - P(S,V,N) $$
$$ \dfrac{\partial U[S,V,N]}{\partial V^2} = - \dfrac{\partial P(S,V,N)}{\partial V} $$
$$dU = \dfrac{\partial U[S,V,N]}{\partial S} \Delta S + \dfrac{\partial U[S,V,N]}{\partial V} \Delta V + \dfrac{\partial U[S,V,N]}{\partial N} \Delta N $$
圧力が一定の環境での最大仕事。
$$ \Delta U = Q + W = Q + P \Delta V$$
$$ \Delta H = \Delta U + P \Delta V + V \Delta P = \Delta U + P \Delta V$$
----
! 蒸発のエンタルピー
液体から気体へ移る際の最大吸熱量(等温準静操作)は、エンタルピーを用いて以下のように表せる。
$$ Q_{max}(T; (V_L(T;N), N) \to (V_G(T;N), N)) = H(T; V_G(T;N), N) - H(T; V_L(T;N), N) = H_{vap}(T;N)$$
$$\Delta S = \dfrac{\delta Q}{T} $$ の関係から、エンタルピーを用いて書き直すと、
$$ T(S(T; V_G(T;N), N) - S(T; V_L(T;N), N)) = H_{vap}(T;N) $$
----
等圧で断熱された環境におけるエネルギーのようなもの
エンタルピーは、この「外部の気体を等圧に保ってくれるもののエネルギー」という「隠れたエネルギー」pVpVpVを内部エネルギーに足したものだと考えればよい。
http://irobutsu.a.la9.jp/ykwkrTD/gibbs.html
! 便宜的な定義
厳密ではない (特に断熱の場合) が、エントロピーの定義については、次のように考えておけば、おおむね問題ない。
''等温準静操作'' と ''断熱準静操作'' におけるエントロピーの変化 (ΔS) を、次のように定義する。
!! ''等温準静操作の場合''
系の温度を T とし、「等温準静操作によって系が吸収する熱量」 を ΔQ とする。この時、等温準静操作よるエントロピーの変化は、次のように定義される。
:$$\Delta S = \dfrac{\Delta Q}{T} \ \ \ \ $$ 【式1】
!! ''断熱準静操作の場合''
断熱準静操作におけるエントロピー変化は 0 とする。
* 厳密に言えば、基準点を決め、(U,V,N) の関数としてエントロピーを与える。そして、この時に、基準点と断熱準静操作でつながる(温度の異なる)状態のエントロピーが基準点と同じに関数を調整しておく。こうすることで、基準点とつながらない断熱準静操作に関しても、エントロピー変化は 0 になることが導出できる (導出方法については省略) 。
!! 補足:
* 上記の定義では、''等温準静操作'' と ''断熱準静操作'' にしか言及していない点に注意。
** 例えば、準静でない断熱操作では、エントロピーは上昇する。
* このエントロピーの背景には、[[カルノーの定理|カルノーサイクル]] がある。
* よりスマートにエントロピーを定義する方法もあるみたい。
** http://www.ton.scphys.kyoto-u.ac.jp/~sasa/kako/sample.pdf
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
! 完全な熱力学関数 (熱力学の基本関係式)
上記の定義と [[エネルギー保存則|熱力学第一法則]] を組み合わせて考えると、「エントロピーの最も自然な表現は ''エネルギーと体積の関数''」であることが分かる。
エントロピー変化の式を、エネルギー保存則の式に代入すると、
:$$dU = \delta Q - \delta W = T dS - p dV \ \ \ \ \ \ $$【式2】
という式が得られ、この式を dS について整理すると、
: $$dS = \dfrac{1}{T} dU + \dfrac{p}{T} dV$$
となる。よって、もしエントロピーが U と V の関数であれば、
:$$dS(U,V) = \left( \dfrac{\partial S}{\partial U} \right)_{V} dU + \left( \dfrac{\partial S}{\partial V} \right)_{U} dV = \dfrac{1}{T} dU + \dfrac{p}{T} dV$$
という関係から、系の温度と圧力は、エントロピーの偏微分によって表すことができることが分かる。このような、系の平衡状態における熱力学的性質の情報を全て持つ関数は、「完全な熱力学関数」や「熱力学の基本関係式」などと呼ばれる。
化学ポテンシャルも含めて書くと、次のようになる。
:$$ dS(U, V, N) = \left( \dfrac{\partial S}{\partial U} \right)_{V,N} dU + \left( \dfrac{\partial S}{\partial V} \right)_{U,N} dV + \left( \dfrac{\partial S}{\partial N} \right)_{T,V} dN $$
$$S$$ と $$U$$ は一対一対応するので、この関係を $$U$$ についてまとめることもできる。その場合の関係は [[熱力学恒等式]] と呼ばれる。
補足:
* エネルギーの代わりにより簡単に測定できる温度を用いることも多い。
** $$S(T(U,V),V)$$
----
! [[エントロピーの性質]]
# 示量性・相加性
# エントロピーは温度の増加関数
# エントロピーは内部エネルギーの単調増加関数
# 熱容量との関係: $$C_v(T; V, N) = \dfrac{\partial U(T; V, N)}{\partial T} = T \dfrac{\partial S(T; V, N)}{\partial T}$$
# 不可逆性の尺度 (断熱系でのエントロピー増大則)
# エントロピーは状態量
----
! 数式での表現
!! [1]. エネルギー・ヘルムホルツの自由エネルギーとの関係
$$ S(T; V,N) = \dfrac{U(T;V,N)-F[T;V,N]}{T} $$ 【式1】
!! [2]. 積分形式
''等温準静操作'' と ''断熱準静操作'' の組み合わせだとみなせる操作であれば、その操作でのエントロピー変化は、次のように書ける。
:$$\displaystyle \Delta S = \int \dfrac{\delta Q}{T} $$ 【式2】
!! [3]. 理想気体のエントロピー
[[熱力学第一法則]] を組み合わせて考えると、理想気体では U は V に依存せず、P = nRT/V なので、
$$ dS(T,V) = \dfrac{d'Q}{T} = \dfrac{dU + PdV}{T} = \dfrac{1}{T}\dfrac{\partial U}{\partial T} dT + \dfrac{nR}{V} dV = \dfrac{nc_v}{T} dT + \dfrac{nR}{V} dV$$
$$\displaystyle \Delta S = n\int_{T1}^{T2} \dfrac{c_v}{T} dT + n \int_{V1}^{V2} \dfrac{R}{V} dV $$
----
!! 【式1】 の説明
!! [[Carnot定理|カルノーサイクル]] との関係
$$ T \neq T' $$ において、断熱準静操作 $$ (T;X_1) \stackrel{aq}{\leftrightarrow} (T';X_1'), (T;X_2) \stackrel{aq}{\leftrightarrow} (T';X_2') $$ が可能であるとすると、Carnotの定理から
:$$\displaystyle \dfrac{Q_{max}(T;X_1 \rightarrow X_2)}{T} = \frac{Q_{max}(T';X_1' \rightarrow X_2')}{T'} $$
が成り立つ。
等温操作での最大吸熱量は、[[ヘルムホルツの自由エネルギー]]を用いて以下のように表せ、
$$
\frac{F[T;X_1]-F[T;T_2]+U(T;X_2)-U(T;X_1)}{T} = \frac{F[T';X_1']-F[T';T_2']+U(T';X_2')-U(T';X_1')}{T'}
$$
これをエントロピーを用いて表すと
:$$S(T;X_2)-S(T;X_1) = S(T';X_2')-S(T';X_1')$$
となる。
なお、この式は、エントロピーの差が断熱準静操作において不変であることを意味する。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! 【式2】 の説明
!! クラウジウスの積分
等温準静操作と断熱準静操作の繰り返しによって、状態$$ (T_1;X_1) $$ から 状態 $$(T_n;X_n)$$ へと変化させることを考える。
$$ (T_1;X_1) \xrightarrow{iq} (T_1;X_1') \xrightarrow{aq} (T_2;X_2) \xrightarrow{iq}(T_2;X_2') \cdots (T_{n-1};X'_{n-1}) \xrightarrow{aq} (T_n;X_n) $$
この時のエントロピー変化は、エントロピーの定義より、
:$$\displaystyle S(T_n;X_n) - S(T_1;X_1) = \sum_{i=1}^{n-1}\frac{{\Delta Q}_i}{T_i} $$
と表せ、n を増やしていけば、
:$$\displaystyle S(T_n;X_n) - S(T_1;X_1) = \int\frac{{dQ}}{T}$$
となる。
[[技術計算製作所:ものづくりに必要な情報の公開と、ソフトウエア販売を行っています|http://gijyutsu-keisan.com/science/physics/thermdyn/thermdyn_4_5.php]]
```
等温でも断熱でもない操作による変化はどのように考えればよいかというと、物理の常套手段である「細かく区切って考える」をここでも使う。すなわち、等温操作と断熱操作を『ギザギザ』に使って、そのギザギザの段階を小さくすることで現実の状況に近づけていくのである。
```
[[エントロピーと熱|http://www.phys.u-ryukyu.ac.jp/~maeno/td2015/lec10.html#SandQ]]
! エントロピーの性質
# (等温準静操作では) ''状態量'' (ポテンシャル)
# ''断熱準静操作'' では変化しない $$(\Delta S = 0)$$
# 示量性・相加性
# エントロピーは温度の増加関数
# 熱容量との関係: $$C_v(T; V, N) = \dfrac{\partial U(T; V, N)}{\partial T} = T \dfrac{\partial S(T; V, N)}{\partial T}$$
# 不可逆性の尺度 (断熱系でのエントロピー増大則)
----
!! ① エントロピーは状態量
性質というよりも、定義というべきかもしれない。
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! ② 断熱準静操作におけるエントロピー
断熱準静操作 $$ (T;X) \leftrightarrow (T';X') $$ で結ばれる任意の状態 $$(T;X), (T';X') $$ について、
:$$ S(T;X) = S(T';X') $$
が成り立つ。言い換えると、断熱準静操作ではエントロピーは変化しない。
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! ③ 示量性・相加性
!!! 示量性
$$ S(T; \lambda V, \lambda N) = \lambda S(T; V, N) $$
!!! 相加性
$$ S(T; V, N) = S(T; V_1, N_1) + S(T; V_2, N_2) $$
$$ V = V_1 + V_2, N = N_1 + N_2 $$
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! ④ エントロピーは温度の増加関数
まず、任意の温度 $$T' > T$$ において、以下の断熱準静操作が可能だとする。
:$$ (T; X_2) \leftrightarrow^{aq} (T'; X_1), (T; X_1) \leftrightarrow^{aq} (T'; X_3) $$
ここで、以下の操作について考える(i' は系の温度だけを変える操作)。
:$$ (T; X_1) \rightarrow^{iq} (T; X_2) \rightarrow^{aq} (T'; X_1) \rightarrow^{i'} (T; X_1) $$ 【操作1】
このサイクルで外界にする仕事は、
:$$ W_{cyc} = W_{max}(T; X_1 \rightarrow X_2) + W_{ad}((T; X_2) \rightarrow (T';X_1)) + W((T'; X_1) \rightarrow (T;X_1)) $$
となるが、最後の温度を変えるだけの操作の仕事は 0 なので、
:$$ W_{cyc} = F[T; X_1] - F[T; X_2] + U(T; X_2) - U(T'; X_1) $$
と表せる。ここで Kelvinの原理 $$(W_{cyc} \leq 0)$$ と エントロピーの定義 $$(F = -TS + U)$$ を用いると、
:$$ -TS(T;X_1) + U(T;X_1) - \{ - TS(T;X_2) + U((T;X_2)) \} + U(T; X_2) - U(T'; X_1) \leq 0 $$
となる。さらに、 $$S(T;X_2) = S(T;X'_1)$$ の関係を用いて、この式を整理すると、
:$$ -T\{ S(T;X_1) - S(T;X_2) \} +U(T;X_1) - U(T'; X_1) \leq 0 $$
$$\ \ \ \ \ \ \ \ \ \ S(T';X_1) - S(T;X_1) \leq \dfrac{U(T';X_1) - U(T; X_1)}{T} $$ 【式1】
が得られる(エネルギーは温度の増加関数であるので、 $$U(T';X_1) - U(T; X_1)$$ は常に正の値になる)。
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! ⑤ 熱容量との関係
!!! ''エネルギーとエントロピーの関係''
【操作1】に加えて、以下のサイクルで外界にする仕事についても同様に考えると、
操作2: $$ (T'; X_1) \rightarrow^{iq} (T'; X_3) \rightarrow^{aq} (T; X_1) \rightarrow^{i'} (T'; X_1) $$
次の式が得られる。
$$ S(T';X_1) - S(T;X_1) \geq \dfrac{U(T';X_1) - U(T; X_1)}{T'} $$ 【式2】
ここで、 $$ T' = T + \Delta T $$ とすると、【式1】・【式2】から、
$$ \dfrac{U(T+\Delta T;X_1) - U(T; X_1)}{(T + \Delta T)\Delta T} \leq \dfrac{S(T+\Delta T;X_1) - S(T;X_1)}{\Delta T} \leq \dfrac{U(T+\Delta T;X_1) - U(T; X_1)}{T \Delta T} $$
が得られ、$$ U, S $$ が $$T$$ で微分可能であるとすると、$$\Delta \to 0$$ とすれば、
$$ \dfrac{\partial U(T; X)}{\partial T} = T \dfrac{\partial S(T; X)}{\partial T} $$ 【式3】
となる。
[[エントロピーの性質|http://www.phys.u-ryukyu.ac.jp/~maeno/td2015/lec9.html#S]]
!!! ''熱容量とエントロピーの関係''
【式3】は、定積熱量量の定義 $$ C_v(T; V, N) = \dfrac{\partial U(T; V, N)}{\partial T} $$ を使うと、
$$C_v(T; V, N) = T \dfrac{\partial S(T; V, N)}{\partial T}$$
とも書ける。
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! ⑤ 孤立系における不可逆性の尺度 (断熱系でのエントロピー増大則)
断熱準静操作ではエントロピーは減少しないが、''(準静でない)断熱操作'' ではエントロピーは増加する。
- - - - -
「熱平衡状態Aから状態I を経由し状態B に辿り着き、状態Bから状態IIを経由し状態Aまで戻るサイクル」を考える。ただし、過程 「A ⇒ I ⇒ B」は''不可逆過程''で, 過程 「B ⇒ II ⇒A」 は''可逆過程''であるとする。
この不可逆サイクルに対するClausius の不等式:
$$ \displaystyle \int_{A \to I \to B \to II \to A} \dfrac{\delta Q}{T} = \int_{A \to I \to B} \dfrac{\delta Q}{T} + \int_{B \to II \to A} \dfrac{\delta Q}{T} \lt 0 $$
可逆過程の部分「B ⇒ II ⇒A」は、エントロピーの差として表現できるため、上の式は、以下のように変形できる。
$$ \displaystyle S_B - S_A > \int_{A \to I \to B} \dfrac{\delta Q}{T} $$
断熱操作では δQ = 0 なので、右辺は 0 となる。つまり、準静でない断熱操作ではエントロピーは増加する。
- - - - -
なお、開放系や閉鎖系に関しても、周囲も含めた部分を孤立系とみなすことで、同様にエントロピー増大則を適用することができる。
$$ \Delta S_{total} = \Delta S_{sys} + \Delta S_{surround} > 0 $$
定数 $$t$$, 2回以上連続的微分可能な関数 $$q$$, 汎関数 $$L(t, q, q')$$ とした時に、
:$$\displaystyle \left({\frac {\partial L}{\partial q}} - {\frac {d}{dt}}{\frac {\partial L}{\partial q'}}\right) = 0$$ 【式1】
という関係が成り立ち、この関係式を ''オイラー・ラグランジュ方程式'' という。
この関係は、[[変分法]] で用いる式 $$\displaystyle I[q] = \int_{x_1}^{x_2} L dt$$ に代入し、停留条件を求めることで得られる。
解析力学の文脈では、この $$L$$ は [[ラグランジアン]] として定義される。
:$$L(t, q(t), q'(t)) = \dfrac{1}{2} m ({q'})^2 - U(q) $$ 【式2】
式中の記号は、$$t :$$ 時間、$$q :$$ 位置、$$m :$$ 質量、$$U$$ ポテンシャルエネルギー に対応する。
----
! ニュートンの運動方程式との関係
【式2】の $$L$$ を $$q, q'$$ で偏微分すると、
: $$\dfrac{\partial L}{\partial q} = - \dfrac{\partial U}{\partial q}, \ \ \ \ \dfrac{\partial L}{\partial q'} = mq'$$
という式が得られ、これを【式1】に代入すると、
: $$- \dfrac{\partial U}{\partial q} = m \dfrac{d q'}{dt} = m q''$$ 【式3】
となる ($$q'$$ は $$t$$ の関数なので)。
- - - - -
ここで、U をポテンシャル、m を質量、x を時間、y を位置だと考えると、【式3】は、''左辺が 「力」'' 、''右辺が 「質量と加速度の積」'' を表していることになる。つまり、【式3】はニュートンの運動方程式と一致する。
;注
位置エネルギーを微分してマイナスをつけると、力になる。
----
! 式の導出
まず、汎関数 $$I$$ を次のように定義する。
:$$\displaystyle I[y] = \int_{x_1}^{x_2} L(x, y(x), y'(x)) dx$$
* x,,1,,, x,,2,,: 定数
* y: 2回以上連続的微分可能な関数 (I の引数)
* L: 2回以上連続的微分可能な関数
次に、$$f$$ を $$I[f]$$ を最小値にする関数とする。
すると、「$$\eta(x_1) = \eta(x_2)$$ という条件を満たす1回以上微分可能な(任意の)関数 ''η'' 」 と 「小さな(0に近い)値をとる変数 ''ϵ'' 」を用いると、次の関係が成り立つ。
: $$I[f + \epsilon \eta] \geq I[f] $$
なお、$$\epsilon \eta$$ の項は ''the variation of the function f'' と呼ばれ、 $$\delta f$$ と表すこともある。
$$I[f + \epsilon \eta]$$ は ϵ の関数なので、
:$$\Phi (\epsilon) = I[f + \epsilon \eta]$$
という関数 Φ を、定義をすることが可能である。そして、I は "y = f" で最小値をとるので、$$\Phi(0) = I[f]$$ より、
:$$\displaystyle \Phi '(0)\equiv \left.{\frac {d\Phi }{d\varepsilon }}\right|_{\varepsilon =0}=\int _{x_{1}}^{x_{2}}\left.{\frac {dL}{d\varepsilon }}\right|_{\varepsilon =0}dx=0 \ \ \ \ \ $$ 【式1】
という式が得られる。
- - - - -
$$L(y(x), y'(x), x)$$ であることから、$$\dfrac{dL}{d\epsilon}$$ は、[[偏微分の合成関数]] のルールを用いて、
:$$ {\displaystyle {\frac {dL}{d\varepsilon }}={\frac {\partial L}{\partial y}}{\frac {dy}{d\varepsilon }}+{\frac {\partial L}{\partial y'}}{\frac {dy'}{d\varepsilon }} +{\frac {\partial L}{\partial x}}{\frac {dx}{d\varepsilon }} }$$
と変形でき、$$\dfrac{dx}{d\epsilon} = 0$$ なので、
:$$ {\displaystyle {\frac {dL}{d\varepsilon }}={\frac {\partial L}{\partial y}}{\frac {dy}{d\varepsilon }}+{\frac {\partial L}{\partial y'}}{\frac {dy'}{d\varepsilon }} }$$
となる。さらに、[[f 近傍の y については、線形近似 (y = f + ϵη) できる|微分可能の定義]]ため、
:$$\dfrac{dy}{d\epsilon} = \eta\ , \ \ \dfrac{dy'}{d\epsilon} = \eta'$$
より、次の関係が得られる。
:$$\displaystyle {\frac {dL}{d\varepsilon }} = \frac {\partial L}{\partial y} \eta + {\frac {\partial L}{\partial y'} \eta'} $$
- - - - -
よって、
:$$ {\displaystyle {\begin{aligned}\int _{x_{1}}^{x_{2}}\left.{\frac {dL}{d\varepsilon }}\right|_{\varepsilon =0}dx&=\int _{x_{1}}^{x_{2}}\left({\frac {\partial L}{\partial f}}\eta +{\frac {\partial L}{\partial f'}}\eta '\right)\,dx\\&=\int _{x_{1}}^{x_{2}}{\frac {\partial L}{\partial f}}\eta \,dx+\left.{\frac {\partial L}{\partial f'}}\eta \right|_{x_{1}}^{x_{2}}-\int _{x_{1}}^{x_{2}}\eta {\frac {d}{dx}}{\frac {\partial L}{\partial f'}}\,dx\\&=\int _{x_{1}}^{x_{2}}\left({\frac {\partial L}{\partial f}}\eta -\eta {\frac {d}{dx}}{\frac {\partial L}{\partial f'}}\right)\,dx\\\end{aligned}}}$$
であり、これを【式1】に代入すると、
: $$\displaystyle \int_{x_{1}}^{x_{2}} \eta \left({\frac {\partial L}{\partial f}} - {\frac {d}{dx}}{\frac {\partial L}{\partial f'}}\right)\,dx = 0$$
が得られる。η(x) は任意の関数であるため,右辺が恒等的に零になるには,括弧でくくってある部分が恒等的に零にならなくてはならない。つまり、
:$$\displaystyle \left({\frac {\partial L}{\partial f}} - {\frac {d}{dx}}{\frac {\partial L}{\partial f'}}\right) = 0$$
ということである。t, q を使って書き直すと、
:$$\displaystyle \left({\frac {\partial L}{\partial q}} - {\frac {d}{dt}}{\frac {\partial L}{\partial q'}}\right) = 0$$ 【式2】
となる。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! 厳密じゃないバージョン
:$$\displaystyle \delta S = \int_{t_1}^{t_2} L(x+\delta x,\dot{x} + \delta \dot{x}, t) dt - \int_{t_1}^{t_2} L(x,\dot{x}, t) dt$$
を考える。第一項をテーラー展開すると、この式は、
:$$\displaystyle \int_{t_1}^{t_2} L(x+\delta x,\dot{x} + \delta \dot{x}, t) dt - \int_{t_1}^{t_2} L(x,\dot{x}, t) dt = \int_{t_1}^{t_2}\left( \dfrac{\partial L}{\partial x} \delta x + \dfrac{\partial L}{\partial \dot{x}} \delta \dot{x} \right) dt$$
となる。そして、「Sは最小にとるように系が決められている」のであれば、 $$\delta x, \delta \dot{x}$$ を十分小さくとれば、
:$$\displaystyle \int_{t_1}^{t_2}\left( \dfrac{\partial L}{\partial x} \delta x + \dfrac{\partial L}{\partial \dot{x}} \delta \dot{x} \right) dt = 0$$
となる。さらにこの式の第二項を部分積分すると、
:$$\displaystyle \left[ \dfrac{\partial L}{\partial \dot{x}} \delta \dot{x} \right]_{t1}^{t2} +\int_{t_1}^{t_2}\left( \dfrac{\partial L}{\partial x} + \dfrac{d}{dt} \dfrac{\partial L}{\partial \dot{x}} \right) \delta x dt = 0$$
が得らえる。ここで、t1, t2 での x が同じであるとすると、第一項が消えて、
:$$\displaystyle \int_{t_1}^{t_2}\left( \dfrac{\partial L}{\partial x} + \dfrac{d}{dt} \dfrac{\partial L}{\partial \dot{x}} \right) \delta x dt = 0$$
となる。任意のδqiに対して上の式が恒等的に0になるための条件を考えると、
:$$\displaystyle\dfrac{\partial L}{\partial x} + \dfrac{d}{dt} \dfrac{\partial L}{\partial \dot{x}} = 0$$
が得らえる。この式を ''ラグランジュ方程式'' という。
https://takun-physics.net/?p=283
----
! 参考サイト
* [[Calculus of variations - Wikipedia|https://en.wikipedia.org/wiki/Calculus_of_variations]]
* http://hooktail.sub.jp/mathInPhys/variations1/
* [[FEM(有限要素法)解説~解析力学編~変分法・オイラー・ラグランジュ方程式 - YouTube|https://www.youtube.com/watch?v=adSPEmFDBrA]]
$$e^{ix} = \cos{x} + i \sin{x}$$
この式を使うと、sin, cos は次のように表せる。
$$\cos{x} = \dfrac{e^{ix} + e^{-ix}}{2}, \ \ \sin{x} = \dfrac{e^{ix} - e^{-ix}}{2i}$$
---
! 導出
基本的には、このページをみれば分かる。
* [[オイラーの公式|https://sci-tech.ksc.kwansei.ac.jp/~shimeno/math/euler/euler.html]]
** https://sci-tech.ksc.kwansei.ac.jp/~shimeno/math/euler/euler.pdf
!! ざっくりした証明
; 虚数を含む指数関数
e を底とする指数関数 f(x) = e^^kx^^ (k は実数) は、
$$f(x) = k f'(x), \ \ f(0) = 1$$
を満たす関数として特徴付けられる。ここで、指数部に虚数 i を含む g(x) = e^^ix^^ についても、e^^kx^^ の場合と同様の規則が成り立つとすると、g(x) は
$$g(x) = i g'(x), \ \ g(0) = 1$$ 【式1】
を満たす関数として特徴付けられる。
(厳密に言うと、 $$e^{ix} \Leftrightarrow g(x) = i g'(x) \ \ g(0) = 1$$ ということだと思うが、調べていない)
; 複素数の微分
複素数を返す(可能性がある)関数である g(x) の微分が、 $$g(x) = p(x) + i q(x)$$ と表した際に、
$$g'(x) = p'(x) + i q'(x)$$ 【式2】
と計算できるとする。
; 証明
$$h(x) = \cos \theta + i \sin \theta$$ とする。
この関数の微分は、【式2】を用いて、次のように計算できる。
$$h'(x) = (\cos \theta)' + i (\sin \theta)' = - \sin \theta + i \cos \theta = i (\cos \theta + i \sin \theta) = i h(x)$$
さらに、 x = 0 を代入すると、
$$h(0) = \cos(0) + \sin(0) = 1$$
となることが分かる。
これらのことから、h(x) は【式1】で示した g(x) の特徴を満たしており、$$g(x) = h(x)$$ であることが分かる。
* [[Dropbox | https://www.dropbox.com/]]
* [[N Drive | http://ndrive.naver.jp/]]
* [[SugarSync | http://www.sugarsync.jp/]]
* [[Unfuddle |http://unfuddle.com/]]
** * [[クラウドコンピューティングで遊ぼう: ネットでバージョン管理 No.1|http://www.spreadclouds.com/2009/09/no1.html]]
* [[Mercurial hosting — bitbucket.org | http://bitbucket.org/ ]]
* [[Accelerate your team with online workspaces | Home | Assembla|http://www.assembla.com/?affiliate=phize]]
* [[関西の名銭湯|http://www.sairosha.com/meisento/sento.htm]]
* [[レストラン サン・ミケ-レ日記|http://katsuji.ko-co.jp/e23023.html]]
* [[Blue Lotus: Cooking|http://blue_moon.typepad.com/blue_lotus/cooking/index.html]]
* [[掛川花鳥園 - 動画ブログ|http://www.kamoltd.co.jp/movie/kakegawa/]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
* [[阪東勲 "Poker face"|http://www.pokerface-photo.com/index.html]]
* [[七左衛門のメモ帳|http://memo7.sblo.jp/]]
期待値からのずれの度合いを判定するのに用いる分布。
分散に関する分布。
https://staff.aist.go.jp/t.ihara/chi2.html
----
! 定義
互いに独立な確率変数を Z,,1,,, Z,,2,,, ... Z,,n,, とし、これらの確率変数が属する母集団は標準正規分布に従うものとする。
このとき、
$$\displaystyle \chi^2 = \sum_1^n {Z_i}^2 $$
と定義された統計量の分布をカイ二乗分布という。
独立に標準正規分布に従う確率変数
正規分布に従う集団から、
! ガウスの公理
正規分布は、誤差 (ε) についての ''ガウスの公理'' から導くことができる。ここでいう誤差は、真値 X と 測定値 x のずれのことである $$(\epsilon = x - X)$$。
<<<
1. 平均値周りの誤差は対称に起こる。
つまり、平均値を $$\mu$$ とする 確率密度関数 $$f(x)$$ では平均値より大きい誤差の確率と 小さい誤差の確率は等しい。
$$\displaystyle \int_\mu^\infty f(x-\mu)dx=\int_{-\infty}^\mu f(x-\mu)dx $$
言い換えると、誤差の平均値はゼロである。
2. 平均値に近い誤差の確率は、平均から離れた誤差の起こる確率よりも高 い。
すなわち、確率密度関数は平均値を単一のピークとする釣鐘型、三角型になる。
3. 非常に大きな誤差は、平均値からの距離に関して著しく減少する。
この公理で (1)の対称性に関しては、対称形である必要はない。
<<<
[[誤差の三公理|http://www.comb.kokushikan.ac.jp/lecture/envmeasure/node192.html]]
!! 系統誤差 と 偶然誤差
<<<
計測における誤差の要因は多様であるが、原因がはっきりしており除去可能な ''系統誤差'' と、そうではない ''偶然誤差'' の2種類に分けることができる。
...
Gaussの誤差論は、系統誤差は除去可能であるため、誤差として偶然誤差だけを考え、さらに偶然誤差を正規分布に従う確率変数であると考えることから始まる。
<<<
[[8.1節 誤差論の基礎|https://pisan-dub.jp/doc/2012/20120215001/8_1.html]]
----
! [[正規分布]] の導出
詳しい説明は [[ガウス分布の導出|http://www.eng.niigata-u.ac.jp/~nomoto/7.html]] にあるが、ある程度はここで説明する。
真の値を X, 測定値を x とし、偶然誤差のみが発生するものとする。つまり、偶然誤差は、
:$$\epsilon = x - X$$
と表せるものとする。
さらに、
* 偶然誤差の起こる確率の確率密度関数を f(ε)
* 同一の条件で n 回の測定を行った際の各測定値を x,,1,,, x,,2,,, ... x,,n,,
とし、
: $$P = f(x_1 - X) f(x_2 - X) ... f(x_n - X)$$
という量を定義する。この P は、誤差の公理から $$x_1 = x_2 = ... = x_n = X$$ の時に、最大値を取る。
しかしながら、通常の計測では X は未知の値であり、既知なのは x,,n,, の方である。そこで、P を
:$$P(x) = f(x_1 - x) f(x_2 - x) ... f(x_n - x) $$
という関数として、定義する。ここで、 x は変数として扱う真の値を意味する。
さらに、「P(x) は 測定値の相加平均 $$\bar{x}$$ において最大値を取る」という仮定を追加する。つまり、
$$\ \ \ \ \ P'(\bar{x}) = 0$$
$$\ \ \ \ \ \bar{x} = \dfrac{1}{n} \sum x_i $$
ということである。
P(x) の式の両辺の対数を取ると、
:$$\displaystyle \log{\{P(x)\}} = \sum_n \log{f(x_i - x)} $$
であり、これを X で微分すると、
:$$\displaystyle \dfrac{P'(x)}{P(x)} = -\sum_i \dfrac{f'(x_i - x)}{f(x_i - x)}$$
となる。 ここで、$$x$$ に $$\bar{x}$$ を代入すると、$$P'(\bar{x}) = 0$$ なので、
:$$\displaystyle \sum_i \dfrac{f'(x_i - x)}{f(x_i - x)} = 0$$
が得られる。
(説明が長くなるので省略するが) $$\displaystyle \sum$$ の中の各項は $$\dfrac{f'(x_i - x)}{f(x_i - x)} = a (x_i -x)$$ の形でなければならないので、
: $$f(\epsilon) = A \exp \left(\dfrac{a\epsilon^2}{2} \right)$$
ガウスの公理の3つ目より $$\displaystyle \lim_{x \to \pm \infty} f(\epsilon) = 0$$ なので、 $$a < 0$$ である。そこで、$$a = - \dfrac{1}{\sigma^2}$$ とすると、
: $$f(x) = A \exp \left(- \dfrac{\epsilon^2}{2\sigma^2} \right)$$
と書くことができる。ここで $$f(\epsilon)$$ が確率密度関数を用いると、
:$$\displaystyle \int_{-\infty}^{\infty} f(\epsilon) = A \sqrt{2 \pi \sigma^2} = 1$$
なので、 $$A = \dfrac{1}{\sqrt{2\pi\sigma^2}}$$ となる。よって、
: $$f(\epsilon) = \dfrac{1}{\sqrt{2\pi\sigma^2}} \exp \left(- \dfrac{\epsilon^2}{2\sigma^2} \right)$$
が得られる。
- - -
ε (= x - X) とし、偶然誤差の起こる確率の確率密度関数を f(ε) とする。なお、誤差の大きさが ε と ε+dε の間にある確率は、f(ε)dε である。
ここで、同一の条件で n 回の測定を行った際の各測定値を x,,1,,, x,,2,,, ... x,,n,, とし、
: $$P(x) = f(x_1 - x) f(x_2 - x) ... f(x_n - x)$$
という関数を定義する。
誤差の公理2 より、f(ε) は X において極大値かつ最大値をとるため、 P は X において最大となる。
$$\dfrac{dP}{dX} = 0
$$
- - - -
* https://rikunora.hatenablog.com/entry/20170310/p1
* https://www.youtube.com/watch?v=P9t5q6GugZA
知らなかった
* [[動画の適切な画面サイズとは? StudioEasy -動画制作工房- | http://studioeasy.blog115.fc2.com/blog-entry-126.html]]
----
* [[Nivo Slider - The Most Awesome jQuery Image Slider|http://nivo.dev7studios.com/]]
480px x 320px
6 x 4 (block)
33cm x 22cm (B4くらい) A3がよい?
;scene1
* 色のずれ
** 23
** 24
** 25
** 28
** 29
** 30
! ざっくりした説明
「小さな系」と「大きな熱浴」からなる、エネルギーが一定の孤立系を考える。
このとき、系と熱浴のエネルギーがそれぞれE,,B,,, E,,sys,, の時の、孤立系が取りうる場合の数は、
: $$W_{tot} (E_B \cap E_{sys}) = W_{B} (E_B) W_{sys} (E_{sys}) = W_{B} (E_{tot} - E_{sys}) W_{sys} (E_{sys})$$
と表せる(E,,tot,, は孤立系全体のエネルギー)。つまり、孤立系が取りうる場合の数のトータル(W,,tot,,)は、エネルギーで表せる。
:$$\displaystyle W_{all} = \sum_{E_{sys}} W_{B} (E_{tot} - E_{sys}) W_{sys} (E_{sys}) $$
右辺の和は取り得るすべての E,,sys,, に対してとる。また,''等重率の原理'' から全系の微視的状態の一つひとつの出現確率はすべて等しい。
「系の(ある1つの)微視的状態i 」が現れる確率を Pri とする。この時、Pri は熱浴の取りうる状態の数 (Ω,,B,,) に比例する。なぜなら、孤立系(系+熱浴)が取りうる場合の数は決まっているので、状態iの時に取りうる場合の数が分かれば、確率は計算できるからである(Pr,,i,, = Ω,,B,,/Ω,,all,,)。
:$$Pr_i \propto W_{B} (E_{tot} - E_{i}) $$
E,,i,, は系の微視的状態i の時の系のエネルギーである。よって、「E,,tot,, – E,,i,, 」 は熱浴のエネルギーを意味する。上式は、[[ボルツマンの原理]] を用いて以下のように変形できる。
: $$W_{B} (E_{tot} - E_{i}) = \exp \left[ \dfrac{S_B (E_{tot} - E_i)}{k_B} \right]$$
この式のS,,B,,() の部分を、E,,tot,, の周りでテーラー展開すると、以下のようになる。
: $$W_{B} (E_{tot} - E_{i}) \approx \exp \left[ \dfrac{1}{k_B} \left( S_B (E_{tot}) - E_i {\dfrac{\partial S_B(E)}{\partial E}} |_{E=E_{tot}} \right) \right] $$
(E≡Uとみなして)ポテンシャル関数の関係から、
:$$\left( \dfrac{\partial S}{\partial E} \right)_{V,N} = \dfrac{1}{T}$$
なので、
: $$W_{B} (E_{tot} - E_{i}) \approx \exp \left[ \dfrac{S_B (E_{tot})}{k_B} \right] \exp \left[ -\dfrac{E_i}{k_B T} \right] $$
となる。比例係数を 1/Z で表すと(1つ目の指数項は状態iに依存しない定数なので,確率の規格化定数Zに含めてしまう)、
:$$Pr_i = \dfrac{1}{Q} \exp \left[ -\dfrac{E_i}{k_B T} \right] $$
となる。Pr は確率なので、
:$$\displaystyle \sum Pr_i = \sum \dfrac{1}{Z} \exp \left[ -\dfrac{E_i}{k_B T} \right] = 1$$
とすると、分配関数の形が出てくる。
:$$\displaystyle Z = \sum_{i} e^{- E_{i} / k_B T}$$
熱機関の中で最も効率の良いエンジン。現実にカルノーサイクルを持つエンジンを作ることは不可能だが、このサイクルから「熱 ⇒ 仕事」の最大変換効率に関する ''カルノーの定理'' が導かれる。
: $$\dfrac{Q_H}{Q_L} = \dfrac{T_H}{T_L}$$
カルノーの定理は、エントロピーの定義と大きく関わるものである。
----
! 前提となる話
* * 可逆熱機関(サイクル)は、最高の効率を持つ熱機関である。
** もし可逆熱機関の効率を超える熱機関、それを超熱機関と呼んでおこう、があったとすると、熱力学第二法則が破れてしまう。
* すべての可逆熱機関の効率は皆同じであることが示せる。
** つまり、可逆サイクルを行う系内の作業物質として、水を使おうが、空気を使おうが、磁石を使おうが、何を使っても効率は同じでないといけないということである。
** 二つを比較して効率に大小があれば、大きいほうを超熱機関に対応させて先ほどの議論を行えば、そのような超熱機関が存在しないことが証明されてしまうわけである。
* [[http://www.phys.keio.ac.jp/faculty/saito/saito-html/13thdyn.pdf]]
----
! カルノーサイクル
断熱準静操作 と 等温準静操作 を組み合わせた、以下のようなサイクルを考える。
:$$ (T_H; V_0') \xrightarrow{iq} (T_H; V_1') \xrightarrow{aq} (T_L; V_1) \xrightarrow{iq} (T_L; V_0) \xrightarrow{aq} (T_H; V_0') $$
なお $$T_L < T_H, V_0 < V_1, V_0' < V_1' $$ である。
このサイクルが外界に行う仕事 $$ W_{cyc} $$ は、
$$ W_{cyc} = W_{max}(T_H;V_0' \rightarrow V_1') + U(T_H;V_1') - U(T_L;V_1) + W_{max}(T_L;V_1 \rightarrow V_0) + U(T_L;V_0) - U(T_H;V_0') $$
なので、
$$ W_{cyc} = Q_{max}(T_H;V_0' \rightarrow V_1') + Q_{max}(T_L;V_1 \rightarrow V_0) = Q_{max}(T_H;V_0' \rightarrow V_1') - Q_{max}(T_L;V_0 \rightarrow V_1)$$
となる。
(W,,cyc,, は、等温サイクルではない点に注意)
----
! カルノーの定理
# (カルノーサイクルにおける) 高温時の吸熱量と低温時の放熱量の比 ($$f$$) は、その温度のみによって決まる。
#* 作業物質によらない
# __温度の単位が K ならば__、その熱量の比は、温度の比に等しい。
$$\ \ \ \ \ f(T_L, T_H) = \dfrac{Q_{max}(T_H; X_0' \rightarrow X_1')}{Q_{max}(T_L;X_0 \rightarrow X_1)} = \dfrac{T_H}{T_L}$$
なお、関数 $$f$$ のことを ''Carnot 関数'' という。
- - - - - - - - - - - - - - - - - - - -
!! 導出
まず、カルノーサイクルとその逆のサイクルを、次のように定義する。
__カルノーサイクル__:
$$\ \ (T_H; X_0') \stackrel{iq}{\rightarrow} (T_H; X_1') \stackrel{aq}{\rightarrow} (T_L; X_1) \stackrel{iq}{\rightarrow} (T_L; X_0) \stackrel{aq}{\rightarrow} (T_H; X_0') $$
* $$T_L < T_H$$
* $$X_0 < X_1, \ \ X'_0 < X'_1$$
__逆カルノーサイクル__:
$$\ \ (T_H; Y_1') \stackrel{iq}{\rightarrow} (T_H; Y_0') \stackrel{aq}{\rightarrow} (T_L; Y_0) \stackrel{iq}{\rightarrow} (T_L; Y_1) \stackrel{aq}{\rightarrow} (T_H; Y_1') $$
* $$Y_0 < Y_1, \ \ Y_0' < Y_1'$$
その上で、カルノーサイクルを行う系 と 逆カルノーサイクルを行う系をうまく連動させ、熱のやり取りがこの二つの系でのみ行われるようにする。
具体的には、逆カルノーサイクルのサイズを調節 (α倍) し、カルノーサイクルの $$ (T_L; X_1) \stackrel{iq}{\rightarrow} (T_L; X_0)$$ プロセスで発生した熱は、$$(T_L; \alpha Y_0) \stackrel{iq}{\rightarrow} (T_L; \alpha Y_1)$$ のプロセスで逆カルノーサイクルが全て吸収するようにする。
$$ \alpha = \dfrac{Q_{max}(T_L;X_0 \rightarrow X_1)}{Q_{max}(T_L;Y_0 \rightarrow Y_1)} $$
これにより、「X と αY を合わせた系」で考えると、$$(T_L; X_1, \alpha Y_0) \stackrel{q}{\rightarrow} (T_L; X_0, \alpha Y_1)$$ は断熱準静操作とみなすことができる。
そして、「X と αY を合わせた系」について次のようなサイクルを考えると、
$$(T_H; X_0', \alpha Y_1') \stackrel{iq}{\rightarrow} (T_H; X_1', \alpha Y_0') \stackrel{aq}{\rightarrow} (T_L; X_1, \alpha Y_0) \stackrel{aq}{\rightarrow} (T_L; X_0, \alpha Y_1) \stackrel{aq}{\rightarrow} (T_H; X_0', \alpha Y_1')$$
このサイクルは、「T,,H,, での等温準静操作のサイクル」とみなすことができる。よって、Kelvin の原理より、このサイクルが外界に行う仕事は 0 であることが分かる。
$$ W_{cyc} = Q_{max}(T_H; X_0' \rightarrow X_1') + \alpha Q_{max}(T_H;Y_1' \rightarrow Y_0') = 0 $$
αの定義から、式を変形すると、
$$\ \ \dfrac{Q_{max}(T_H; X_0' \rightarrow X_1')}{Q_{max}(T_L;X_0 \rightarrow X_1)} = \dfrac{Q_{max}(T_H;Y_0' \rightarrow Y_1')}{Q_{max}(T_L;Y_0 \rightarrow Y_1)} $$
が得られる。
http://www.phys.u-ryukyu.ac.jp/~maeno/td2015/lec8.html
!!! ''「カルノーサイクル」と「逆カルノーサイクル」の連動''
「$$ (T_L;X) \stackrel{iq}{\rightarrow} (T_L;X') $$ かつ $$ Q_{max}(T_L;X \rightarrow X') = 0 $$ ⇒ $$ (T_L;X) \stackrel{aq}{\rightarrow} (T_L;X') $$ が必ず存在する」ことから、
「最大吸熱量がゼロの等温準静操作には断熱準静操作を対応させられる」ため、
「2つの定温準静操作を適切に組み合わせると、断熱と見なすことができる操作が可能になる」。
* [[熱力学 ― 現代的な視点から:補足|http://www.gakushuin.ac.jp/~881791/td/comments.html]]
- - - - - - - - - - - - - - - - - - - -
!!温度の単位が K の場合について
!!! 基本的な考え方
Carnot 関数 f(T,T')は、熱力学的な系の選択によらない(熱機関の効率は作業物質によらない)ので、理想気体で具体的な計算を行えばよい。
!!! 具体的な説明
等温準静操作での最大吸熱量は、
$$ Q_{max}(T; V_0,N \rightarrow V_1,N) = F[T;V_0,N] - F[T;V_1,N] + U(T;V_1,N) - U(T;V_0,N) $$
であり、理想気体のエネルギーは体積(V)によらないため、
$$ Q_{max}(T; V_0,N \rightarrow V_1,N) = F[T;V_0,N] - F[T;V_1,N] $$
となる。
ヘルムホルツの自由エネルギーを、理想気体の状態方程式を使って表すと、
$$ \ \ \ \ Q_{max}(T; V_0,N \rightarrow V_1,N) = NRT \log \dfrac{V_1}{V_0} $$
であり、同様に
$$ \ \ \ \ Q_{max}(T'; V_0',N \rightarrow V_1',N) = NRT \log \dfrac{V_1'}{V_0'} $$
である。
Poisson の関係から、
$$ \ \ \ \ T^cV_0 = (T')^{c}V_0' , T^cV_1 = (T')^{c}V_1'$$
が成り立つので、
$$ \ \ \ \ \dfrac{Q_{max}(T'; (V_0',N) \rightarrow (V_1',N))}{Q_{max}(T;(V_0,N) \rightarrow (V_1,N))} = \dfrac{T'}{T} $$
----
! カルノーサイクルの熱効率
熱効率の定義から、
$$\eta = \dfrac{W}{Q} = \dfrac{Q_H - Q_L}{Q_H} = 1 - \dfrac{Q_L}{Q_H} = 1 - \dfrac{T_L}{T_H}$$
となる。
! カルマンの積分方程式
$$\dfrac{\tau_w}{\rho} = \dfrac{\partial}{\partial x} (v_{\infty}^2 \theta) + v_{\infty} \dfrac{d v_{\infty}}{dx} \delta^*$$
$$\delta^*$$ and $$\theta$$ are ''displacement thickness'' and ''momentum thickness'' respectively.
---
When flow is steady state, the momentum equation along x-axis of the boundary-layer equation can be simplified.
$$v_x \dfrac{\partial v_x}{\partial x} + v_y \dfrac{\partial v_x}{\partial y} = - \dfrac{1}{\rho} \dfrac{\partial p}{\partial x} + \nu \dfrac{\partial^2 v_x}{\partial y^2}$$
This equation can be integrated with respect to y from 0 to $$\infty$$.
$$\displaystyle \int_0^{\infty} v_x \dfrac{\partial v_x}{\partial x} dy + \int_0^{\infty} v_y \dfrac{\partial v_x}{\partial y} dy = - \dfrac{1}{\rho} \int_0^{\infty} \dfrac{\partial p}{\partial x} dy + \int_0^{\infty} \nu \dfrac{\partial^2 v_x}{\partial y^2} dy$$
- - - - -
By integrating the Continuity equation of the boundary-layer equation, following relationship is obtained.
$$\displaystyle \int_0^{\infty} \dfrac{\partial v_x}{\partial x} dy = \int_0^{\infty} \dfrac{\partial v_y}{\partial y} dy = [v_y]_0^{\infty} = v_y |_{y=\infty}$$
The second term of the left-hand side can be transformed by using this relationship.
$$\displaystyle \int_0^{\infty} v_y \dfrac{\partial v_x}{\partial y} dy = \int_0^{\infty} (- \int_0^{\infty} \dfrac{\partial v_x}{\partial x} dy) \dfrac{\partial v_x}{\partial y} dy $$
By using partial integration, this equation can be further transformed.
$$\displaystyle \int_0^{\infty} \dfrac{\partial v_x}{\partial x} dy =
$$
- - - - -
---
! Definition of thickness of the boundary layer
The boundary layer thickness, δ, is the distance across a boundary layer from the wall to a point where the flow velocity has essentially reached the 'free stream' velocity, v∞. However, as δ is usually unknown, other definitions are used instead of δ in practice. Frequently, the boundary is arbitrarily given as being at the point where the velocity reaches a certain percentage of the outer velocity, e.g. 99% (δ0.99).
!! Displacement thickness:
$$\displaystyle \delta^* = \dfrac{1}{v_{\infty}} \int_0^{\infty} (v_{\infty} - v) dy $$
!! Momentum thickness:
$$\displaystyle \theta= \dfrac{1}{v_{\infty}^2} \int_0^{\infty} v (v_{\infty} - v) dy $$
!! Energy thickness:
$$\displaystyle \theta^* = \dfrac{1}{v_{\infty}^3} \int_0^{\infty} v (v_{\infty}^2 - v^2) dy $$
$$ \displaystyle S dT + V dP = \sum_i N_i d \mu_i $$
定温・定圧下(dT=0, dP=0)では、$$ \displaystyle \sum_i N_i d \mu_i = 0$$ となる。
!! 導出
化学ポテンシャルを用いて表したギブスエネルギーの式の全微分は、
$$\displaystyle dG = d(\sum_i N_i \mu_i) = \sum_i N_i d \mu_i + \mu_i d N_i $$
と表せ、これをポテンシャル関数として表した式と比較すると、
$$\displaystyle dG = \sum_i N_i d \mu_i + \sum_i \mu_i d N_i = - S dT + V dP + \sum_{i=1}^n \mu_i dN_i$$
$$\displaystyle - S dT + V dP - \sum_i N_i d \mu_i = 0$$
という関係が得られる。
!! 参考サイト
* http://www.f-denshi.com/000TokiwaJPN/35chmth/100chmt.html
* https://www.tug.org/texshowcase/EulerGibbsDuhem.html
! 数式での表現
ギブスの自由エネルギーでは、温度・圧力・モル量を制御パラメータとする。
厳密な定義にはルジャンドルを用いるが、''エントロピーと体積が温度と圧力によって一意に決まる状況'' であれば、次のように書ける。
:$$ G[T,p,N] = U[S(T,p;N),V(T,p;N),N] - TS(T,p;N) + pV(T,p;N) + \mu N$$
!! 全微分
:$$\displaystyle dG = \left(\dfrac{\partial G}{\partial T}\right)_{p,N} dT + \left(\dfrac{\partial G}{\partial p}\right)_{T,N} dp + \sum_{i} \left(\dfrac{\partial G}{\partial N_i}\right)_{T,p} dN_i $$
!! 偏微分
$$\left(\dfrac{\partial G}{\partial T}\right)_{p,N} = -S(T,p;N)$$
$$\left(\dfrac{\partial G}{\partial p}\right)_{T,N} = V(T,p;N)$$
$$\left(\dfrac{\partial G}{\partial N}\right)_{T,p} = \mu(T,p;N)$$
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! [[化学ポテンシャル]]を使った表現
$$\displaystyle G[T,p;N_1, N_2, ...] = \sum_i N_i \mu_i$$
----
! 熱力学恒等式との関係
エントロピーと体積が温度と圧力によって一意に決まる状況であれば、ギブスエネルギーは、以下のように表現できる。
:$$ G[T,p,N] = U[S(T,p),V(T,p),N] - T S(T,p) + p V(T,p) $$
また、この式の全微分は、
:$$ dG = dU - d(ST) + d(pV) = (TdS - pdV + \mu N) - (SdT + TdS) + (pdV + Vdp) = - S dT + V dP + \mu N$$
となる。
---
! 化学ポテンシャルとの関係
ギブスエネルギーは、各成分の化学ポテンシャル $$( \mu_i \left(= \dfrac{\partial G}{\partial N_i} \right))$$を用いて、次のように表すことも可能である。
:$$\displaystyle G[T,p;N_1, N_2, ...] = \sum_i N_i \mu_i$$
ちなみに、純物質の場合は i = 1 なので、 $$G[T,p;N] = N \mu$$ となる。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! 導出
温度・圧力は示強変数なので、ギブスエネルギーは
:$$ G[T,p;nN_1, nN_2, ...] = n G[T,p;N_1, N_2, ...] $$
と2通りの形で表せる。これを n で微分すると、
:$$\displaystyle N_1 \left( \dfrac{\partial G}{\partial (n N_1)} \right)_{T,P,N_2,N_3,...} + N_2 \left( \dfrac{\partial G}{\partial (n N_2)} \right)_{T,P,N_1,N_3,...} + ... = G[T,p;N_1, N_2, ...]$$
となる([[偏微分の合成関数]] 参照)。この式に ''n = 1'' を代入すると、
:$$\displaystyle N_1 \left( \dfrac{\partial G}{\partial (N_1)} \right)_{T,P,N_2,N_3,...} + N_2 \left( \dfrac{\partial G}{\partial (N_2)} \right)_{T,P,N_1,N_3,...} + ... = G[T,p;N_1, N_2, ...]$$
であり、化学ポテンシャルを使って書き直すと、求めたかった式が得られる。
:$$\displaystyle G[T,p;N_1, N_2, ...] = N_1 \mu_1 + N_2 \mu_2 + ... = \sum_i N_i \mu_i$$
---
! [[ギブズ・デュエム (Gibbs-Duhem) の関係式|ギブズ・デュエムの関係式]]
{{ギブズ・デュエムの関係式!!text}}
---
! 相平衡
相平衡の状態では、全ての成分において、液相・気相の化学ポテンシャルが等しくなる。
$$\mu^V_i = \mu^L_i$$
---
---
---
! ルジャンドル変換
「関数Fの独立変数を x から ∂F/∂xに変えたい」時に、必要になる。
* [[動く!熱力学付録:ルジャンドル変換|http://irobutsu.a.la9.jp/ykwkrTD/LegendreTR.html]]
* [[ルジャンドル変換とは何か(Legendre transformation)|http://fnorio.com/0146Legendre_transformation/Legendre_transformation.html]]
---
ヘルムホルツの自由エネルギーとの関係
ギブスエネルギーでは、圧力を制御パラメータとなる。
系の体積は他の制御パラメータにより変化する値となる。
等温環境だから、S→T とルジャンドル変換。
等圧環境だから、V→p とルジャンドル変換。
話の出発点となるのは、[[Rabinowitsch-Mooney]] の導出の途中で出てきた、流量に関する方程式 (【式3】) になる。
$$ \displaystyle \dfrac{Q}{\pi R^3} \tau_w^3 = \int_0^{\tau_w} \tau^2 \dot{\gamma}(\tau) d\tau $$ 【式A】
---
! ニュートン流体の場合
ニュートン流体の定義 $$\tau = \eta \dot{\gamma}$$ より、 $$\dot{\gamma}(\tau) = \dfrac{\tau}{\mu}$$ である。
これを 【式A】に代入すると、
$$ \displaystyle \dfrac{Q}{\pi R^3} \tau_w^3 = \dfrac{1}{\mu} \int_0^{\tau_w} \tau^3d\tau = \dfrac{1}{\mu} \dfrac{1}{4} {\tau_w}^4$$
となり、この式を整理すると、粘性の計算式が得られる。
$$ \displaystyle \mu = \tau_w \dfrac{\pi R^3}{4Q} = \left( \dfrac{R}{2} \dfrac{\Delta P}{L} \right) \dfrac{\pi R^3}{4Q} = \dfrac{\pi R^4}{8Q} \dfrac{\Delta P}{L}$$
また、(この式と) ニュートン流体の定義との比較から、(ニュートン流体の) 壁せん断速度が、
$$\dot{\gamma}_w = \dfrac{4Q}{\pi R^3} = \dfrac{8\bar{u}}{D}$$
であることが分かる。
---
---
非ニュートン流体の場合は、$$ \gamma_a \neq \gamma_t $$ なので、式を整理すると、
$$ \displaystyle \gamma_a = \dfrac{4}{\tau_w^3} \int_0^{\tau_w} \gamma_t \tau^2 d\tau $$
となる。両辺を壁せん断応力(τw)で微分すると、
$$ \dfrac{d}{d\tau_w} (\dfrac{\gamma_a \tau_w^3}{4}) = \tau_w^2 \gamma_t $$
$$ \tau_w^3 \dfrac{d\gamma_a}{d\tau_w} + 3 \gamma_a \tau_w^2 = 4\tau_w^2 \gamma_t $$
$$ \gamma_t = \dfrac{3}{4} \gamma_a + \dfrac{\tau_w}{4} \dfrac{d\gamma_a}{d\tau_w} $$
さらにこの式を ''弾力性'' を用いて表すと、
$$ \gamma_t = \dfrac{\gamma_a}{4} (3 + \dfrac{d\gamma_a}{d\tau_w} \dfrac{\tau_w}{\gamma_a}) = \dfrac{\gamma_a}{4} (3 + \dfrac{d}{d ln \tau_w} ln \gamma_a ) $$ 【式6】
となる。
''弾力性'':
http://www.agu.ac.jp/~nomura/lecture/archive/math.pdf
----
! 粘度の計算 (Power law)
【式6】を、真の粘度と見かけ粘度を使って表すと、
$$ \dfrac{\tau}{\mu_t} = \dfrac{\tau}{4\mu_a}(3 + \dfrac{1}{\dfrac{d ln \tau_w}{d ln \gamma_a}}) $$
ここで $$ n = \dfrac{d ln \tau_w}{d ln \gamma_a} $$ とし、式を変形すると、
$$ \dfrac{1}{\mu_t} = \dfrac{1}{4\mu_a}(3 + \dfrac{1}{n}) = \dfrac{1}{\mu_a}(\dfrac{3n+1}{4n})$$
[[Hagen-Poiseuille流れ_PowerLaw]] での、真の粘度と見かけ粘度の関係式と同じになる。
$$ \mu_t = \dfrac{4n}{3n+1} \mu_a $$ 【式7】
つまり、Power law 流体の n は、見かけせん断速度($$\gamma_a$$ 【式4】)と壁せん断応力($$ \tau_w = - \dfrac{R}{2} \dfrac{dp}{dx} $$)から求めることが可能である。
そして、 n が求まれば、【式7】を使って真の粘度が計算でき、
$$ \gamma_t = \dfrac{3n+1}{4n} \gamma_a $$
の式を使って、真のせん断速度も計算できる。
残っているK については、$$ \tau_w = K \gamma_t^n $$ の両辺の対数を取ると、
$$ log(\tau_w) = n log(\gamma_w) + log(K) $$
という関係になっていることが分かるので、この関数の切片が K になる。
----
! ビンガム流体の場合 (Buckingham-Reiner equation)
{{Buckingham-Reiner!!text}}
---
----
!! 見かけせん断速度を使って流量を表現
下式のように定義した見かけせん断速度を用いて、
$$ \gamma_a = \gamma_N = \dfrac{\tau}{\mu_N} = \dfrac{4Q}{\pi R^3} $$ 【式4】
[[Hagen-Poiseuille流れ]]の流量を、
$$ Q_N = \dfrac{\pi R^4}{8\mu_N} (- \dfrac{dp}{dx}) = \dfrac{\pi R^4}{8\mu_N} \dfrac{2}{R} \tau = \dfrac{\pi R^3}{4} \gamma_a $$ 【式5】
と表すことが可能である。
----
!! 2つの流量の表現を比較
【式3】・【式5】から、
$$ \displaystyle \dfrac{\pi R^3}{4} \gamma_a = \pi \dfrac{R^3}{\tau_w^3} \int_0^{\tau_w} \gamma_t \tau^2 d\tau $$
となる(ニュートン流体では、$$ \gamma_a = \gamma_t $$)。
---
! 見かけの粘度・せん断速度
流体をニュートン流体と見なした時の粘度・せん断速度を「見かけの粘度・せん断速度」とする。
$$ \tau_w = \mu_t \gamma_t = \mu_a \gamma_a $$ [$$ \mu_a = \mu_N, \gamma_a = \gamma_N $$]
|大文字 |小文字 |読み方 |Tex での表現 |h
|Α |α |アルファ |\alpha |
|B |β |ベータ |\beta |
|Γ |γ |ガンマ |\gamma |
|Δ |δ |デルタ |\delta |
|Ε |ε |イプシロン |\epsilon |
|Ζ |ζ |ゼータ |\zeta |
|Η |η |イータ |\eta |
|Θ |θ |シータ |\theta |
|Ι |ι |イオタ |\iota |
|Κ |κ |カッパ |\kappa|
|Λ |λ |ラムダ |\lambda |
|Μ |μ |ミュー |\mu |
|Ν |ν |ニュー |\nu |
|Ξ |ξ |クセー |\xi|
|Τ |$$\tau$$|タウ |\tau |
|Υ |$$\upsilon$$ |ユプシロン |\upsilon |
|Φ |φ |ファイ |\phi |
|Χ |$$\chi$$ |カイ |\chi |
|Ψ |ψ |プサイ |\psi |
$$\zeta$$
$$\Kappa$$
! Watershed
基本的には、これ以外によく知られたアルゴリズムは無いと思う。
大まかな処理の流れは、次の通り。
# 背景の定義
#* 明確な背景 (sure background)
#* 明確な前景 (sure foreground)
#* 背景でも前景でもないunknownな領域
#** 例: 二値化・膨張・収縮を組み合わせる
# 明確な前景の各領域にラベルを割り当てる
#* ラベルごとに別の粒子として識別する
# 背景までの最短距離(ノルム)を、各点(ピクセル) で計算する。
#* 各点でノルムを計算しているので、この計算結果は画像のように扱える
# 前ステップの計算結果から、地形面 (topographic surface) を作成する
#* 背景までの距離が遠いほど、標高が低くなるようにする
# 作成した地形面に (疑似的な) 水面の高さを定義し、その高さを上げていく (初期の液面の高さは「明確な前景」の最大高さ)
#* 水面の高さが上がるにつれて、水のある領域が増えていく
#* 異なるラベルの水の領域のオーバーラップした箇所が、「分水嶺」となる
#** アルゴリズム上は、一度「分水嶺」となったピクセルの標高は、その後は、おそらく無限大として扱うのでは...
基本的には、ツールやライブラリのユーザーは、「背景とラベルの定義」(ステップ1-2) だけをすればよい (例: ~OpenCV だと、ステップ3-5 はライブラリが勝手にやってくれる)。ただ、背景の定義は、結果にするので、気を使う必要がある。
; 注
* ステップ1の「背景の定義」は扱う問題やソフトウェアによって、定義方法が変わる
** 例: 明確な背景の定義に 「極大値」を利用する
* ステップ3の膨張をストップする条件を変えれば、オーバーラップした粒子をより精度よく検出することができるかも。
- - - - -
; ~ImageJ の Process > Binary > Watershed の場合
# 背景までの最短距離(ノルム)を、各点(ピクセル) で計算する。
#* 画像はすでに二値化されているので、「白・黒のどちらを背景とするか?」だけ決めればよい
#* 各点でノルムを計算しているので、この計算結果は画像のように扱える
# 前ステップの計算結果の極大値の位置を調べ、それを「明確な前景」とする。
#* Find Maxima
# 元の画像の背景部分を「明確な背景」とし、前景と背景の差を「unknown領域」とする
<<<
;Watershed
Watershed segmentation is a way of automatically separating or cutting apart particles that touch. It first calculates the Euclidian distance map (EDM) and finds the ultimate eroded points (UEPs). It then dilates each of the UEPs (the peaks or local maxima of the EDM) as far as possible - either until the edge of the particle is reached, or the edge of the region of another (growing) UEP. Watershed segmentation works best for smooth convex objects that don't overlap too much.
<<<
https://imagej.nih.gov/ij/docs/menus/process.html#watershed
- - - - -
* [[The Watershed Transformation page|http://www.cmm.mines-paristech.fr/~beucher/wtshed.html]]
* [[Watershedアルゴリズムを使った画像の領域分割|http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_imgproc/py_watershed/py_watershed.html#watershed]]
* [[Watershed OpenCV - PyImageSearch|https://www.pyimagesearch.com/2015/11/02/watershed-opencv/]]
* https://qiita.com/ysdyt/items/5972c9520acf6a094d90
----
ほかのアルゴリズム
<<<
Additionally, [18] details a number of alternative watershed transform algorithms, including topological distance, shortest path algorithms, spanning trees, and marker based methods.
<<<
https://www.arxiv-vanity.com/papers/1611.08303/
----
-
-
# ノルムと極大値のラベルを紐づける
#* 具体的なアルゴリズムは、まだ調べていない
-
# 各前景の領域を膨張させていき、他の粒子の領域と接する部分を調べる
#* 他の領域と接しない場合は、背景と接した時点で膨張をストップする
# 膨張させた各前景領域が、各粒子の領域となる
#* 他の粒子とオーバーラップする部分は含まない
ケースによって、アルゴリズムを少し変更して、精度を上げることができるかも。
! クラウジウスの不等式
!! 基本的な考え方
任意の可逆サイクルが無数のカルノーサイクルの組み合わせて 置き換えることが出来ることを考えると、
:$$\displaystyle \oint \frac{dQ}{T} = 0 $$
と書ける。
[[技術計算製作所:ものづくりに必要な情報の公開と、ソフトウエア販売を行っています|http://gijyutsu-keisan.com/science/physics/thermdyn/thermdyn_4_5.php]]
!! 可逆サイクル
:$$ (T_1;X_1) \to^{iq} (T_1;X_1') \to^{aq} (T_2;X_2) \to^{iq} (T_2;X_2') \cdots (T_{n-1};X'_{n-1}) \to^{aq} (T_1;X_1) $$
という、「等温準静操作と断熱準静操作の組み合わせ」によるサイクルについて考える。
各ステップでの熱のやり取りはカルノーサイクルと同じなので、サイクルについては、
:$$\displaystyle \sum_{i=0}^{n-1} \frac{Q_i}{T_i} = 0$$
の関係が成り立つ。なお、 Qi は各ステップの等温準静操作での熱のやり取りを意味する(負の値でもよい)。
!! 不可逆サイクル
----
dQ/Tのサイクルにわたっての総和(クラウジウスの積分)が0に等しい(Qは正でも負でもよい)。
[[エントロピーとは何か 永井俊哉ドットコム|https://www.nagaitoshiya.com/ja/2014/clausius-entropy/]]
---
---
---
等温準静操作 $$ (T;X_1,\alpha Y_0) \rightarrow^{iq} (T;X_0, \alpha Y_1) $$ の最大吸熱量は、 $$ Q_{max}(T; X_1 \rightarrow X_0) + Q_{max}(T; \alpha Y_0 \rightarrow \alpha Y_1) = 0 $$
となる(最大吸熱量の相加性)。
そのため、X と αY を連動させたサイクルでは、 $$ (T';X_0',\alpha Y_1') \rightarrow^{iq} (T';X_1', \alpha Y_0') $$ 以外の操作は、断熱準静操作である(見なせる)ので、温度 T' での等温準静サイクルと考えられる。
!! もう少し具体的な説明
* 逆カルノーサイクルの $$(T'; \alpha Y_1') \stackrel{iq}{\rightarrow} (T'; \alpha Y_0')$$ プロセスで発生した熱は、$$(T'; X_0') \stackrel{iq}{\rightarrow} (T'; X_1')$$ のプロセスでカルノーサイクルが全て吸収し、
* 同様に、
閉曲線 C で囲まれた領域 D において、C^^1^^ 級関数 P(x, y), Q(x, y) について、以下が成り立つ。
:$$\displaystyle \oint _{C}(Pdx+Qdy) = \iint _{D}\left({\frac {\partial Q}{\partial x}}-{\frac {\partial P}{\partial y}}\right)dxdy$$
----
! 証明
!! シンプルな形状
領域 D は、
* $$a \leq x \leq b, \ \ \ \ y_1(x) \leq y \leq y_2(x)$$
* $$c \leq y \leq d, \ \ \ \ x_1(y) \leq x \leq x_2(y)$$
であるとする。
Q(x(y), y) であると考えると、
: $$\displaystyle \iint _{D} \left({\dfrac {\partial Q}{\partial x}}\right) dx dy = \int_c^d dy \int_{x_1(y)}^{x_2(y)} \dfrac {\partial Q}{\partial x} dx = \int_c^d dy \left[Q(x,y) \right]_{x_1(y)}^{x_2(y)} = \int_c^d \left[ Q(x_2(y),y) - Q(x_1(y),y) \right] dy $$
となるので、
: $$\displaystyle \iint _{D} \left({\dfrac {\partial Q}{\partial x}}\right) dx dy = \int_c^d \left[ Q(x_2(y),y) \right] dy + \int_d^c \left[ Q(x_1(y),y) \right] dy = \oint _{C} Q(x,y) dy$$
同様に、P についても、
$$\ \ \ \ \displaystyle - \iint _{D} \left({\dfrac {\partial P}{\partial y}}\right) dx dy = - \int_a^b dx \int_{y_1(x)}^{y_2(x)} \dfrac {\partial P}{\partial y} dy = - \int_a^b \left[ P(x,y_2(x)) - P(x,y_1(x)) \right] dx $$
$$\ \ \ \ \displaystyle - \iint _{D} \left({\dfrac {\partial P}{\partial y}}\right) dx dy = \int_a^b \left[ P(x,y_1(x)) \right] dx + \int_b^a \left[ P(x,y_2(x)) \right] dx = \oint _{C} P(x,y) dx$$
!! 一般の領域の場合
----
! ガウスの発散定理からの導出
[[(ガウスの)発散定理]] の式
$$\displaystyle \iiint_V \mathrm{div} A dV = \iint_S (A \cdot n) dS$$
において、 $$A = \phi \nabla \psi \ $$ (ϕ, ψ はスカラー関数) と表せるとする。
* http://hooktail.sub.jp/vectoranalysis/GreensSecondTheorem/
----
* https://ameblo.jp/metazatunen/entry-11410382352.html
* http://home.d09.itscom.net/den-en/oknhrk/chap6-inthob/sec61-mathematics/pdf/green.pdf
次のように定義される2変数関数。
:$$\delta_{ij} = \begin{cases} 1 \ \ \ \ \ (i = j) \\ 0 \ \ \ \ \ (i \neq j) \end{cases} $$
多くの場合、$$i, j$$ は、行列やテンソルの添え字に対応する。
- - - - -
例えば、[[単位行列|基本的な行列]] は、
:$$I = [ \delta_{ij}] $$
と表されたりする (括弧が省略されていることも多い)。
; コーシー応力
https://takun-physics.net/?p=4992
* [[真偽値を返す関数のネーミング - Qiita|https://qiita.com/yskszk/items/5a7f99c974773f03a82a]]
<<<
アクセサのメリット2:メンテナンス性
「たまに _value が変な値になることがある」という不具合が発生した場合、public変数だと、値を設定している箇所を全て調べなければなりませんが、アクセサだと setter にブレークポイントを貼るだけで犯人が特定できます。
<<<
[[publicなメンバ変数はやめよう - Qiita|https://qiita.com/yskszk/items/2045ef74396fbaf18f4d]]
よく分からないがこんな感じでいけるらしい
{{{
setlocal
For /F "delims=" %%a In ( 'cd' ) Do set CURRDIR=%%a
echo %CURRDIR%
endlocal
}}}
[[バッチファイルで逆クオート展開? - oogattaの勉強日記|http://d.hatena.ne.jp/oogatta/20060915/1158297862]]
* ファイル名を除き、どのコマンドラインデータもフラグのあとに指定する
* 特にプログラムにさまざまな目的でファイルを指定できる場合には、ファイル名ごとのフラグも提供する
* 3文字までの短い形式のフラグには、ハイフン1つのプレフィックスを使用する
* 長い形式のフラグには、ハイフン2つのプレフィックスを使用する
* フラグに値を指定する場合には、フラグと値の間にオプションとして '=' を使用できるようにする
** $ command -i=sample_data -op=normalize
* 1文字オプションはハイフンのあとに「まとめて」指定できるようにする
** $ command -i -v -l を $ command -ivl みたいに
* 1文字のフラグのフラグすべてに複数文字のフラグを用意する
* 常にハイフンを特殊なファイル名として使用できるようにする
** $ cat - みたいなこと
* 特に二重ハイフンをファイルリストマーカーとして使用できるようにする
* メタオプションを標準化する
{{{
--usage
プログラムの使用法を簡潔に表示
--help
--version
--man
プログラムの完全なドキュメントを表示する
}}}
「Perl ベストプラクティス」 より
! コロイドの分類
!! 構造による分類
<<<
コロイドは、その構造により、「高分子コロイド(polymer colloid)」や「会合コロイド(association colloid)」、「分散コロイド(dispersed colloid)」に分類することができます。高分子コロイドは、分散媒に分散した分子1個の大きさが、コロイド次元の分散系です。コロイド化学の初期には、高分子コロイドの研究がコロイドの主流でした。コロイド研究の先駆者であったトーマス・グレアムが最初に示したコロイドは、今から見るといずれも天然高分子に他なりません。現在では、「高分子化学(polymer chemistry)」という別の学問分野ができ上がっているので、高分子をコロイド化学で扱うことは、ほとんどありません。会合コロイドは、多くの分子が集まって、コロイドの大きさを持つようになった分散系のことです。洗剤などの界面活性剤分子は、溶液中である濃度以上になると、「ミセル(micelle)」と呼ばれる会合体を作ります。分散コロイドは、溶媒には本来溶解しない不溶性物質の分散系のことです。本来溶解するはずのない物質が分散しているのだから、分散コロイドは熱力学的には不安定な系です。分散コロイドは不安定な系なので、簡単に破壊することができます。
|分類 |高分子コロイド|会合コロイド|分散コロイド|h
|構造 |高分子1個 |多くの粒子の会合 |難溶性の微粒子 |
|例 |酵素、デンプンなど |セッケンなど |Fe(OH)3、Au、泥など |
<<<
[[コロイド化学|http://sekatsu-kagaku.sub.jp/colloid.htm]]
!! 疎水コロイドと親水コロイド
<<<
分散コロイドが凝集しないようにするには、2つの方法があります。''第一の方法は、コロイド粒子の表面を帯電させることです。''例えば、コロイド粒子の表面を負に帯電させたとします。このとき、溶液は電気的には中性であるから、表面電荷と同じ量の陽イオンが、コロイド粒子を取り巻いています。このような表面電荷と反対符号のイオンを「対イオン(counter ion)」といいます。そして、次の図.3のような状態を「電気二重層(electric double layer)」ができているといいます。図.3のコロイドでは、対イオンである陽イオンは、この表面電荷に引き付けられてはいるものの、液中を自由に動いて遠くまで広がっていくことができます。それ故に、2つの粒子が凝集しようと接近しても、まず外側にある対イオン同士がぶつかり合い、その結果としてクーロン力の反発が働いて、粒子の凝集を妨げるようになるのです。
''分散コロイドが凝集しないための第二の方法は、コロイド粒子の表面をべっとりと溶媒分子で覆っておくことです。''コロイド粒子が互いに接近しても、表面を覆っている溶媒分子が離れなければ、コロイド粒子間の接触を妨げることができます。
コロイド粒子のうち、主に第一の方法のみで水中で分散している場合、それを「''疎水コロイド(hydrophobic colloid)''」といいます。水に対して不溶であり、本来沈降すべき物質がコロイド粒子の大きさになった上に、何らかの理由で表面が帯電してしまったために、コロイド粒子が分散状態になっているのです。これに対して、第二の方法が主たる理由で水中に分散している場合、それを「''親水コロイド(hydrophilic colloid)''」といいます。コロイド表面に溶媒である水分子がべっとりとくっついて離れないのは、それだけ水に対して親和性が高いからです。一般的に疎水コロイドには分散コロイドが多く、その大半が無機物質です。一方で、親水コロイドには分子コロイドや会合コロイドが多く、その大半が有機物質です。
<<<
[[コロイド化学|http://sekatsu-kagaku.sub.jp/colloid.htm]]
ワクチンといっても、色んなタイプがあるらしい
;不活性化した(死んだ)ウィルスを使う
* 従来的な方法
; ウィルスのスパイクの mRNA を使う
* 細胞内に送り込むことにより、人間自身にスパイクを作らせる
感染者数が指数関数的に増加する理由のざっくりとした説明。
実際に使われているモデルはもっと複雑であるが、基本的な微分方程式の扱いは間違っていない (はず)。
----
! ''新規感染者数が指数関数になる理由''
時間 $$t$$ における感染者数を $$N_t$$ とし、回復した人や死者は考慮しないものとする。
このとき、新規感染者数は、
:$$\displaystyle N_{t+ \Delta t} - N_{t} = \Delta t \cdot \sum_{i=0}^{N_t} c_i P $$
と表すことができる ($$c_i$$ は i番目の人が単位時間当たりに非感染者と接触する回数、$$P$$ は接触において感染する確率)。
ここで、各感染者の接触回数の平均値を
:$$\displaystyle \bar{c} = \dfrac{1}{N} \sum_{i=0}^{N} c_i $$
と表すことにすると、$$\bar{c}, P$$ が一定であれば、
:$$\displaystyle \dfrac{dN}{dt} = \lim_{\Delta t \to 0} \dfrac{ N_{t+ \Delta t} - N_{t}}{\Delta t} = \lim_{\Delta t \to 0} \sum_{i=0}^{N_t} c_i P \approx \bar{c} P N_t $$
と考えることができる。つまり、これは
:$$N'(t) = \bar{c} P N(t)$$
と、[[指数関数を微分を用いて表した形式|導関数の公式]] なので、
:$$N(t) = (e^{\bar{c}P})^t $$
となる。
- - - - -
!! 実効再生産数
(おそらく...) 上の式の中では、 $$e^{\bar{c}P}$$ が実効再生産数にあたるはず。
----
! ''回復者・死亡者を考慮した場合 (まだ書きかけ)''
実際に感染者数の推移を予測する際には、新規感染者数に加えて、回復する人数と死者を考慮する必要がある。
(感染者が単位時間あたりに) 回復する確率と死亡する確率をそれぞれ $$R, D$$ という __定数__ で表すとすると、感染者数の変化は、
:$$\displaystyle N_{t+\Delta t} - N_{t} = - \Delta t(R + D) N_t + \Delta t \sum_{i=0}^{N_t} c_i P \approx \Delta t (\bar{c}P - R -D) N_t$$
となる。さらに、$$\bar{c}, P, R, D$$ を定数としたので、
:$$N(t) = [e^{(\bar{c} P-R-D)}]^t $$
と書ける。
- - - - - - - - - -
本格的なモデルの場合には状況に応じてこれらの値も変化するはずなので、指数関数への変形はできないし、さらに潜伏期間など他にも考慮する項目が色々ありそう。
* https://biostat-hokudai.jp/seirmodel/
よって、非常にざっくりと考えた場合、感染者数の予測をする際に重要なパラメータとなるのは、
* C: 感染者1人あたりの非感染者の接触数
* P: 接触があった際に感染する確率
* R: 回復する確率
* D: 死亡する確率
であり、予測結果はこれらのパラメータのチューニングに大きく左右される (はず)。
なんか、結局パラメータのチューニング次第なので、予測結果だけ見ても、あんまり参考ならないような気がしてきた...
! ''新規感染者数の計算''
ベースとなるのは、
: ''新規感染者数 = 感染者数と非感染者の接触数 × 感染する確率''
だが、この2つの要因は、それぞれさらに細かい要因に分けて考えることができる。
- - - - - - - - - -
!! ''感染者数と非感染者の接触数''
やや大雑把ではあるが、
:接触数 = 一人当たりの接触数 × 感染している人の数
と考えると、''「感染者数と非感染者の接触数」が感染者に大きく影響を受ける'' ことが推察される。
そしてこれは、(対策を取らないと) 新規感染者数が時間とともに加速的に増加することを意味している ([[数式的な扱いは別のページに書いた|コロナの新規感染者数のモデル]])。
- - - - - - - - - -
!! ''感染する確率''
これは色んな要因を含んでいるので、断定的に何か言うのは難しいと思う。
* 距離・時間
* 感染のメカニズム
** 変異株の種類
* 年齢
* 場所
* ...
ただ、飛沫感染なのか空気感染 (飛沫核感染) なのかは、この部分に大きく影響を及ぼすみたい。
*基本的には、 小さな粒子の空気中での挙動の問題として扱ってよいみたい
** [[飛沫(ひまつ)感染と空気感染の違いって何だろう?|https://www.showa-u.ac.jp/albums/abm.php?d=755&f=abm00002848.pdf&n=%E8%96%AC%E3%81%A8%E5%AD%A6%E3%81%B6_2015%E5%B9%B4%E5%A4%8F%E5%8F%B7%E3%80%8C%E3%81%AA%E3%82%93%E3%81%A7%E3%81%A0%E3%82%8D%E3%81%86%EF%BC%9F%E3%80%8D%E3%81%AE%E8%A7%A3%E8%AA%AC.pdf]]
** [[Airborne transmission of respiratory viruses|https://www.science.org/doi/10.1126/science.abd9149]]
あと、デルタ株以前・以後で、この部分のルールは大きく変わったように見える。
- - - - - - - - - -
!! ''個人的な疑問''
!!! マスクの効果
(マスクをすることで) 感染者がまき散らすウィルスの量を減らすのは間違いなさそうだが、非感染者がマスクをする効果はどのくらいなんだろ?
* マスクの種類にもよりそうだが...
* サイズ的には、コロナウィルスは、PM 2.5 の 1/10、スギ花粉の 1/100 程度らしい
** [[花粉、黄砂、PM2.5、ウイルスの大きさを比較|熊本市東区の内科医院|田中内科クリニック|https://doctor-et.com/news/247]]
!!! ワクチンの効果
* ワクチンにより、感染する確率は下がるらしい
* ただし、確率が 0 になる訳ではない
* [[COVID Live Update - Worldometer|https://www.worldometers.info/coronavirus/]]
** ざっくりした数字はこのサイトが見やすい気がする
** 各国のデータも見られる
* [[Coronavirus Pandemic (COVID-19) - Statistics and Research - Our World in Data|https://ourworldindata.org/coronavirus]]
** 詳細な情報はここにある。っぽい。
* [[WHO|https://covid19.who.int/]]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; 日本
* [[COVID-19 Japan - 新型コロナウイルス対策ダッシュボード #StopCOVID19JP|https://www.stopcovid19.jp/#ja]]
** ざっくりした数字はこのサイトが見やすい気がする
* [[厚生労働省|https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/0000164708_00001.html]]
** [[県ごとの情報はここで見られるみたい|https://covid19.mhlw.go.jp/extensions/public/index.html]]
* [[東京都|https://stopcovid19.metro.tokyo.lg.jp/]]
; オーストラリア
* [[Coronavirus (COVID-19) case numbers and statistics - Australian Government Department of Health|https://www.health.gov.au/news/health-alerts/novel-coronavirus-2019-ncov-health-alert/coronavirus-covid-19-case-numbers-and-statistics#daily-reported-cases]]
基本的には、コントラストの調整では brightness を編集する。
* brightness の最小・最大とする値を指定し、それに合わせて、brightness の分布を引き延ばす
** 指定する範囲が狭いほどコントラストは上がるが、白とび黒とびするピクセルが増える
* ヒストグラム均等化 (Histogram equalization) のアルゴリズムを使う
** https://en.wikipedia.org/wiki/Histogram_equalization
----
! ヒストグラム均等化 (Histogram equalization)
cumulative probability から brightness の割り当てを決める。
; プログラミング言語
<<tiddlerList tags:"プログラミング言語" order:"modified">>
; マークアップ言語
<<tiddlerList tags:"マークアップ言語" order:"modified">>
; DSL
<<tiddlerList tags:"DSL" order:"modified">>
<<list filter [tag[サーバサイド]]>>
<<list filter [tag[サイトデザイン]]>>
* [[ウェブデザインのユーザーインターフェースに使えるサイトまとめ DesignWalker|http://www.designwalker.com/2009/08/user-interface.html]]
* [[Showcase Konigi|http://konigi.com/showcase/latest?page=1]]
* [[印象に残る写真を撮るための10のポイント コリス|http://coliss.com/articles/build-websites/operation/design/1514.html]]
* [[シンプル、ミニマルなサイトを作りたい時に役立ちそうなアイコンやフォント、ギャラリーなどのまとめ - かちびと.net|http://kachibito.net/web-design/minimal-site-resource.html]]
* [[Photoshop で背景透過の美しい favicon (ファビコン) を作成する | http://2xup.org/log/2006/04/28-2323]]
* [[BEAMプロジェクト DTPノート レイアウト | http://www13.plala.or.jp/TeruNet/dtp03.html]]
* <<slider tocSlider "サイトデザイン (ライブラリやプラグイン)" "サイトデザイン (ライブラリやプラグイン)">>
----
;レイアウト
* [[Fotolog - Share photos. Make friends. It's easy!|http://www.fotolog.com/]]
* [[Cire Trudon : cires et bougies depuis 1643|http://www.ciretrudon.com/en/index.html]]
* [[東西新風堂|http://www.shinpudo.com/]]
* [[:: EMOTIONS by Mike :: freelance portfolio|http://www.emotionslive.co.uk/index.html]]
* [[Jumpei-kawamura.com|http://jumpei-kawamura.com/]]
;画像処理
* [[画像の角を丸くする (for Photoshop) | http://cinnamoncafe.jugem.cc/?eid=61]]
* [[覚えておくと便利なバランスのよい縦横比とバナーサイズ | http://sweetlovexx.seesaa.net/article/94420713.html]]
;フォント
* [[Hints of fonts on the web -- Introduction|http://www.tg.rim.or.jp/~hexane/ach/hfw/]]
* [[Wordで作った文書が素人臭くなる理由(その5) | http://blog.unfindable.net/archives/712]]
; 角丸 ・ ドロップシャドウ
* [[IE6/7/8のブラウザでも角丸やドロップシャドウが使えるCSS3 T's blog|http://www.ts-design-lab.jp/blog/wordpress/?p=57]]
* [[[JS]さまざまなエフェクトを持つ角丸を実装できるスクリプト -ShadedBorder | コリス|http://coliss.com/articles/build-websites/operation/javascript/548.html]]
; Sutherland's formula
$$\displaystyle \mu = \mu_0 \left( \dfrac{T}{T_0} \right)^{3/2} \dfrac{T_0 + C}{T+C} $$
* T : 温度 [K]
* T,,0,, : 基準温度 [K]、
* μ,,0,, : T,,0,, での粘度 [Pa s]
* C: サザーランド定数 [K]
-
; Constants for air
* μ,,0,, = 1.71E-5 at 273 K
* C = 110.4 K for air
---
* https://cattech-lab.com/science-tools/sutherland/
Borda Carnot の公式
* 0.5 * 0.75 ?
* [[バランスツリー]]
* ぽつぽつ馬・犬・猫を...
* Tシャツ
* 色塗りを、ある程度方法化する必要あり
* 栞 + シール + 磁石
* クリスタルパック
* 作りかけのままの[[ホームページ|http://www.ssnsk.com/index.html]]
** 無地に
* 外貨定期
** sbi証券
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
* <<slider tocSlider そのうち、しようかな そのうち、しようかな>> [[ Edit |そのうち、しようかな]]
* <<slider tocSlider だいたい終わり だいたい終わり>> [[ Edit |だいたい終わり]]
* <<slider tocSlider "だいたい終わり (-2009)" "だいたい終わり (-2009)">> [[ Edit |だいたい終わり (-2009)]]
! 入国申請 (3日前から)
オンラインで行う
* https://www.ica.gov.sg/enter-transit-depart/entering-singapore/sg-arrival-card
---
* ホーカー
** ローカルなフードコート
* ナイトサファリ
*
* [[周防大島 中村農園 | http://www.nakamura-organics.com]]
* [[スリランカ家庭料理レストラン すらさ|http://www16.plala.or.jp/sesathe/]]
* [[ハンバーガー/Rバーガー|http://www.r-burger.co.jp/]]
* [[秋葉原カレー専門店ベンガル | http://www.bengal-curry.com/]]
! 概要
スターリングの近似 (Stirling's approximation) は、精度に応じていくつかの形がある。n が十分大きい時、以下の近似が成り立つ。
!! 粗い近似
''対数表現'': $$\log(n!) \approx n \log(n) - n $$
''指数表現'': $$n! \approx \left( \dfrac{n}{e} \right)^n$$
!! 精度のよい近似
''対数表現'': $$\log(n!) \approx n \log(n) - n + \dfrac{1}{2} \log (2\pi n)$$
''指数表現'': $$n! \approx \sqrt{2\pi n} \left( \dfrac{n}{e} \right)^n$$
!! ガンマ関数
$$\Gamma(x) \approx \sqrt{2\pi x} \left( \dfrac{x}{e} \right)^x $$
!! さらに精度の高い近似
''指数表現'': $$n! \approx \sqrt{2\pi n} \left( \dfrac{n}{e} \right)^n \left( 1 + \dfrac{1}{12n} \right)$$
---
! 導出
!! 精度のよい近似
大まかな流れとしては、$$a_n = \dfrac{n! e^n}{n^n\sqrt{2\pi n}}$$ が、
$$\displaystyle \lim_{n \to \infty} a_n = \sqrt{2n}$$ であることを示す。
!! 粗い近似の導出
* https://risalc.info/src/stirling-app.html
----
! 大雑把な説明
the approximation by the trapezoid rule of the integral
$$\displaystyle \log(n!) = \sum_{i=1}^n \log(n) \approx \int_{1/2}^{n+1/2} \log(n) dn$$
---
球の周りの遅い流れを考える。
流れが十分遅ければ、ナビエ・ストークス方程式は [[ストークス近似|ナビエ・ストークス方程式]] を用いて、以下のように表せ、
:$$\dfrac{\partial}{\partial t} (\rho v) = - \nabla p + \nabla \cdot \tau + \rho F$$
さらに定常状態を仮定すると、
:$$0 = - \nabla p + \nabla \cdot \tau + \rho F$$
となる。
- -
ここで球の中心を原点とする球座標 $$(r, \theta, \phi)$$ を $$v_{\phi} = 0$$ となるような方向で取る。
非圧縮性流体を仮定すると、[[連続の式|]] は、
$$\dfrac{1}{r^2} \dfrac{\partial (r^2 v_r)}{\partial r} + \dfrac{1}{r \sin \theta} \dfrac{\partial ( v_{\theta} \sin \theta)}{\partial \theta} = 0$$
と表せる ([[曲線座標系]])。
; エネルギースペクトル (パワースペクトル)
フーリエ成分 $$\hat{F}(f)$$ の絶対値の2乗を、エネルギースペクトルという。
$$\displaystyle |\hat{F}(f)|^2, \ \ \ \ \hat{F}(f) = \dfrac{1}{\sqrt{2\pi}} \int_{-\infty}^{\infty} F(t) e^{-i 2 \pi f t} dt$$
; パワースペクトル密度 (Power Spectrum Density)
関数の周期を T とする。
$$\displaystyle P(f) = \lim_{T \to \infty} \left[ \dfrac{1}{T} |\hat{F}(f)|^2 \right] = \lim_{T \to \infty} \left[ \dfrac{1}{T} \hat{F}(f) \hat{F}^*(f) \right] $$
---
! 導出
まず、[[フーリエ変換]] $$\hat{F}$$ と フーリエ逆変換 $$F(t)$$ を、角周波数 $$(\omega)$$ と時間(t) で表す。
$$\displaystyle \ \ \cdot \ \hat{F}(\omega) = \dfrac{1}{\sqrt{2\pi}} \int_{-\infty}^{\infty} F(\omega) e^{-i \omega t} dt \ \ \ \ $$ 【式1】
$$\displaystyle \ \ \cdot \ F(t) = \dfrac{1}{\sqrt{2\pi}} \int_{-\infty}^{\infty} \hat{F}(\omega) e^{i \omega t} d\omega \ \ \ \ $$ 【式2】
ここで、角周波数の代わりに周波数 (f = ω/2$$\pi$$) を用いると、【式1】【式2】は次のように表される。
$$\displaystyle \ \ \cdot \ \hat{F}(f) = \dfrac{1}{\sqrt{2\pi}} \int_{-\infty}^{\infty} F(t) e^{-i 2 \pi f t} dt \ \ \ \ $$
$$\displaystyle \ \ \cdot \ F(t) = \dfrac{1}{\sqrt{2\pi}} \int_{-\infty}^{\infty} \hat{F}(f) e^{i 2 \pi f t} df$$
- - - - -
フーリエ成分 $$\hat{F}(f)$$ は 周期 f の波の振幅である。よって、$$|\hat{F}(f)|^2$$ はその強さ,エネルギーを表している.
---
* http://aero.me.tut.ac.jp/Lectures/Turbulence/turb04.pdf
* http://climbsd.lowtem.hokudai.ac.jp/group/shigeru/tc/dataan2012/num5.pdf
* [[スカイスキャナーによる 東京 から ソコトラ島 への格安フライト | http://www.skyscanner.jp/flights/tyoa/sct/december-2011/january-2012/cheapest-flights-per-day-from-tokyo-to-socotra-in-december-2011-and-january-2012.html]]
* [[ソコトラ島 行く人、この指と~まれっ! サナアDAY|世界のどこかで何か叫ぶ・・・ かもしれない。 | http://ameblo.jp/ok-be/entry-10592780403.html]]
* [[イーツアー 海外格安航空券 - コース一覧 | http://www.etour.co.jp/neo/discount_list.php]]
* 高い盆栽を見てみる。
* 色んな椅子に座ってみる。
* 「株」って。
* ペーパークラフトの自動生成。
** 中の絵を交換可能にする (中と外を別部品に...)
* [[ぱらぱらマンガをブラウザで]] のバージョンアップ
* 紅葉と楓
* Google Map のマイマップがとてつもなく使いにくい
* [[calc-shell]]
* デジカメ写真を安くプリント
* 火山の景色
* 室内できれいに写真を撮る方法
** まずは明るさか...
*** ちょっとした白熱球程度では、全然明るさが足りない。
<<list filter [tag[ソフトの設計]]>>
* [[意外と知らないバージョン表記・数字の豆知識 - @IT|http://www.atmarkit.co.jp/fjava/column/andoh/andoh51.html]]
<<list filter [tag[ソフト開発]]>>
! 2017/05
* 引っ越し
** 住民票
*** 年金
*** 住民税
*** 免許証
** 銀行・クレジット・保険
*** 保険会社
* 住所変更
** 免許証
* 住所変更2
** UFJ
** 郵便局
** クレジットカード
* [[eVisa]]
----
!2015/02
* パソコンの処分
** [[パソコンファーム | http://pasokonsyobun.com]]
!2011/10/22
* [[秋季雅楽演奏会の申込要領 - 宮内庁 | http://www.kunaicho.go.jp/event/ensokai.html]]
** なかなか、おもしろかった
* マイレージ
** [[お選びいただいたJALカードの種類 | https://www.jalcard.co.jp/cgi-bin/cardlist2/cardlist.cgi?c=16,17&root=34VCAKI]]
!2011/08/27
* [[神田神保町の南洋堂書店で「東京の微地形模型」-建築物を剥がした東京を再現 | http://kanda.keizai.biz/headline/101/]]
** そんなに期待してなかったけど、予想以上によかった
!2011/03/21
* [[トマトスープ]] がおいしくできた気がする
!2011/02/09
* Google Notebook が開発終了
** 全て gmail に +memo で送った
** 内容を本文に貼り付けておいたので、検索可能
** [[EvernoteをやめてGmailへ: Shu's blog 雌伏編|http://rainy.seesaa.net/article/126639753.html]]
!2010/08/08
* [[地球の肌 |http://www.ssnsk.com/earthkin/index.html?animation=true]] に移動アニメーションをつけてみた
!2010/07/03
* [[地球の肌 |http://www.ssnsk.com/earthkin/index.html]]
** とりあえずこんなもんかな...
** RSSはもうちょっとだけいじる
** マウスホイールでの拡大縮小は、早めに入れておくべきだった
!2010/06/19
* [[喋るメッセージカード|http://www.ssnsk.com/picture/messageCard_10.html]]
** ちょっと人にあげるにはいいかもしれないけど...
** 個人的にはなんか物足りない
** まあ、普通ってことかな
!2010/01/23
* サイトの構成をいじった
* [[リゾット作ってみた]]
!2010/01/09
* ホームページ
** 上の絵
** 名前
!2009/12/09
* オンラインリポジトリ
** 割とよいかも
** [[Unfuddle|http://unfuddle.com/]]
** [[クラウドコンピューティングで遊ぼう: ネットでバージョン管理 No.1|http://www.spreadclouds.com/2009/09/no1.html]]
!2009/10/25
* [[ログ用モード]]
!2009/10/20
* コンソールアプリケーションに簡易GUIを追加
** manifest やら CRT やらのせいで、配布用バイナリ作成が面倒だった
!2009/10/04
* 鳥ひき肉 + きのこ + トマトピューレ + バター + バジル + 醤油 + 牛乳
** メモ作成
!2009/09/26
* 鳥ひき肉 + きのこ + トマトピューレ + バター
** バジル + 醤油
** にんにく + (鷹の爪) + 牛乳
** ありかも...
!2009/09/21
* 羊
** あんまり派手な色にすると、線に目がいかなくなる
** 線をある程度生かすなら、そこそこの明度・彩度で
!2009/09/12
* 落語
** 近くで見たい...
** 柳家小三治
*** もっと素な感じかと思ってたが、舞台上ではちゃんと噺家
!2009/08/16
* チョウチョの眼
** あれこれ展開させられるかも...
!2009/08/04
* イノシシ塗り
** 画面で見ていたときはいまいちかなと思ったが、はがきサイズで印刷したらわりとよかった
** 派手な色のものに対しても、ブラシはありかな...
** レイヤ効果との組み合わせ
!2009/08/02
* 牛の絵
** こんな感じで頼まれた
*** 2cm x 2cm
*** 名刺の右上
*** デフォルメしすぎないように
*** 紙の色は白
*** 印刷してみて調節
*** レイヤーに分ける
** 暗い色の塗り方をあれこれと...
** 赤・青・緑... 等で塗ったレイヤをうまく組み合わせて、暗い色を作る。
** ブラシの使い方
!2009/06/13
* [[牡丹三丁目|http://www.ssnsk.com/hoka/botan_03.html]]
** ボツにした方がよいかも...
!2009/06/10
* [[鶏ミンチとキノコのスパゲッティ|http://katsuji.ko-co.jp/e34217.html#more]]
** ミンチとキノコのソースは、パスタ以外でも使えそう
!2009/05/01
* かまきりの鎌
** 絵も写真もいまいちかなぁ...
!2009/04/26
* JAXB と HTML
** いちおうJAXBのサンプルになる
** 使い道は...
!2009/04/05
* 主に動物で、はがきを作ってみた。
!2009/03/21
* 仰向けで浮く
** 力を抜いて上を向けるようになったので、とりあえずよいかな。
** [[黒柳徹子|http://www.1101.com/kuroyanagi/2008-09-09.html]] のようにはいかない...
!2009/03/16
* ある程度絵をまとめた
** いがいと生き物の絵が多かった
!2009/03/15
* メニューの作成
** ちょっと力みがある...
!2009/02/15
* 名刺をとりあえず作ってみた
** サイズ 55mm×91mm
** 載せるべき情報が足りていない気もするが...
!2009/02/09
* [[VALUE DOMAIN|http://www.value-domain.com/xrea.php]] 借りた
** ホームページは[[ここ|http://ssnsk.s326.xrea.com/]]
** ログインは[[ここ|https://www.value-domain.com/login.php]]
!2009/01/04
* [[JavaScriptの言語仕様]]をながめた
!2008/12/29
* 年賀状
** もう少し効率のよい色塗りの方法を考える必要あり
!2008/12/16
* [[カメラのキタムラ フォトブック|http://www.kitamura.co.jp/print/photobook.html]]
** ちょっとした絵本なら作れそう
!2008/12/06
* [[パトカーのフォントはかわいい|http://www.ab.auone-net.jp/~for_test/hoka/patrolCar_01.html]]
** 写真は乗用車の方がよいので、そのうち撮り直したい
!2008/11/22
* 絵をビデオで撮ってみた
** 結構明るいところでないと無理
** 動かさずにとるのは、まあいける
** カメラを動かしながら、絵の一部を撮るのは難しい
*** アップになっているため、手ぶれの影響が大きい
*** 一定の速度でカメラを動かすのが難しい
!2008/11/08
* [[ぱらぱらマンガをブラウザで]] の [[暫定版|http://www.ssnsk.com/picture/cutoffAnime_04.html]]
!2008/10/05
* 横泳ぎ
** 簡単なやつはなんとなく泳げるようになった
** あおり足 (もうちょい調べる)
!2008/09/27
* 残暑見舞いの直し
** あんまり上手くいかなかった。
** 気をつける点・上手くいかなかった点は、ノートに書いた。
!2008/09/15
* ぱらぱらマンガを作ってみる
!2008/09/13
* Googleマップの[[マイマップ|http://maps.google.co.jp/maps/ms?hl=ja&ie=UTF8&msa=0&msid=108421779437446071199.000456a8a720718ed68a8&ll=36.554878,136.856689&spn=0.747931,1.036835&z=10]] (画像をつけるのが思ったより面倒だった)
[[大数の弱法則|大数の法則]] の証明で使う。
; 詳しい説明
https://www.probabilitycourse.com/chapter6/6_2_2_markov_chebyshev_inequalities.php
----
! マルコフの不等式 (Markov's Inequality)
Let X be any positive continuous random variable.
X の期待値は、 a > 0 を用いて
:$$\displaystyle E[X] = \int_{-\infty}^{\infty} x f(x) dx = \int_{0}^{\infty} x f(x) dx \geq \int_{a}^{\infty} x f(x) dx$$
と変形できる。さらに、積分区間において x > a なので、
:$$\displaystyle E[X] \geq \int_{a}^{\infty} x f(x) dx \geq \int_{a}^{\infty} a f(x) dx = a \int_{a}^{\infty} f(x) dx = a P(X \geq a)$$
となり、次の関係が得られる。
:$$P(X \geq a) \leq \dfrac{E[X]}{a}$$
! チェビシェフの不等式 (Chebyshev's Inequality)
$$Y = (X - E[X])^2$$ という確率変数を定義する。この確率変数 Y の期待値は、X の [[分散]] となっている。
:$$E[Y] = E[(X - E[X])^2] = Var[X]$$
Y にマルコフの不等式を適用すると、b > 0 を用いて
:$$P(Y \geq b^2) \leq \dfrac{E[Y]}{b^2} = \dfrac{Var[X]}{b^2}$$
という関係が得られる。
さらに、Y は負の値を取らないことが定義から明らかなので、上式の左辺は、
:$$P(Y \geq b^2) = P(|X - E[X]| \geq b)$$
と変形できる。よって、
:$$P(|X - E[X]| \geq b) \leq \dfrac{Var[X]}{b^2}$$
という式が得られる。そしてこの式を ''チェビシェフの不等式'' という。
----
----
:$$P(X \geq a) \leq \dfrac{E[X]}{a} \ , for \ any \ a > 0$$
; タクシー
* 15% くらい
*
; レストラン
* 15% くらい
; パソコン
* [[使える GUI デザイン|http://www.emptypage.jp/translations/benroe/gui.html]]
* [[第36回 手品とインタフェース WIRED VISION|http://wiredvision.jp/blog/masui/200910/200910141340.html]]
* [[デモではものができあがっているように見せない | http://www.aoky.net/articles/kathy_sierra/dont_make_the_d.htm ]]
* [[顧客の機能要求に折れないこと! | http://www.aoky.net/articles/kathy_sierra/dont_give_in_to.htm ]]
* [[Getting Real by 37signals|http://gettingreal.37signals.com/GR_jpn.php]]
* [[実はメイリオまだ進化中! 誕生秘話を河野氏に聞いた - @IT|http://www.atmarkit.co.jp/news/201001/07/meiryo.html]]
; 画像・動画
* [[地球上でもっとも地球に見えない島、ソコトラ島 |http://www.paropunte.net/archives/116362.html]]
* [[Legoストップモーションでゲーム界を表現|http://wiredvision.jp/news/200909/2009090719.html]]
* [[ニコン顕微鏡写真コンテスト入賞作品:ギャラリー(3/18) WIRED VISION|http://wiredvision.jp/gallery/201010/20101025113404.html]]
* [[美しすぎるムクドリの群れを科学する | http://wired.jp/2011/11/14/%e7%be%8e%e3%81%97%e3%81%99%e3%81%8e%e3%82%8b%e3%83%a0%e3%82%af%e3%83%89%e3%83%aa%e3%81%ae%e7%be%a4%e3%82%8c%e3%82%92%e7%a7%91%e5%ad%a6%e3%81%99%e3%82%8b/?utm_source=twitter&utm_medium=20111216]]
** [[Islands and Rivers | http://islandsandrivers.co.uk/shop.html]]
* [[TED]]
* [[ゲームチラシコレクション | http://gamedic.jpn.org/museum/tirasi/fc_rpg/index2.html]]
* [[Paywall: The Business of Scholarship|https://paywallthemovie.com/]]
* [[This equation will change how you see the world (the logistic map) - YouTube|https://www.youtube.com/watch?v=ovJcsL7vyrk]]
; ブログ
* [[農家の嫁の事件簿|http://kamatsuta.way-nifty.com/blog/]]
* [[山中俊治の「デザインの骨格」 » 図面なんかいらない | http://lleedd.com/blog/2010/08/20/no_drafting/]]
; シンプルなサイトデザイン
<<tiddler "シンプルなサイトデザイン">>
; ほか
*[[徹子の部屋辞典-黒柳徹子さんトークショー|http://www.h4.dion.ne.jp/~giten/]]
*[[徹子の部屋辞典(巻上公一・井筒和幸)|http://www.h2.dion.ne.jp/~kinki-bc/z14-z12-12.htm]]
* [[i-Radio: clammbon - 胡麻みそズイ|http://clammbon.i-radio.fm/]]
* [[柳家小三治一門会 特別企画「公開稽古」 - 茜の とぉんと来ました|http://d.hatena.ne.jp/turarayuki/20090614/1244990412]]
* [[間違いだらけの文章を読めてしまう脳の不思議! BusinessTrend.jp ビジネストレンド|http://www.businesstrend.jp/2009/05/10/105/]]
* [[宮本茂さん、『Wii Fit』などを語る。|http://www.1101.com/miyamoto/2008-02-05.html]]
* [[とある昆虫研究者のメモ : マツモムシの中性浮力維持法|http://ghop.exblog.jp/3415346/]]
* [[Verior Interpretatio Naturae 地球潮汐現象―地面の干満とは?|http://www.cshe.nagoya-u.ac.jp/physdemo/%e5%9c%b0%e7%90%83%e6%bd%ae%e6%b1%90%e7%8f%be%e8%b1%a1/]]
* [[家具の博物館|http://kaguhaku.or.jp/]]
* [[直島銭湯|http://www.naoshimasento.jp/]]
* [[火星探査機スピリットの最後 - Radium Software|http://d.hatena.ne.jp/KZR/20100130/p1]]
* [[福島第一にはメルトダウンした核燃料よりももっと危険なものがある | http://satoshi.blogs.com/life/2011/10/pandora.html]]
!調べる
{{調べる!!text}}
!出かける
{{出かける!!text}}
! オンラインリポジトリ
{{オンラインリポジトリ!!text}}
!その他
* [[Another HTML-lint gateway|http://htmllint.itc.keio.ac.jp/htmllint/htmllint.html]]
* [[複数のブラウザ環境でのレイアウト | http://browsershots.org/]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
* [[REGex TESTER v1.5.3 | http://www.regextester.com/]]
* https://docs.qgis.org/2.14/ja/docs/gentle_gis_introduction/spatial_analysis_interpolation.html
* https://www.giken.co.jp/glossary/idwmethod/
* https://www.hulinks.co.jp/support/gs/guide/p1201.html
----
点 x における u の値を、x 近傍の点 x,,i,, における u の値を用いて推定する方法。
! 逆距離加重法 (IDW)
u の値を、距離の逆数の重み付け平均で計算する方法。
$$u(x) = \dfrac{\sum_{i=1}^N w_i(x) u(x_i)}{\sum_{j=1}^N w_j(x)} $$
$$w_i(x) = \dfrac{1}{d_p(x, x_i)}$$
$$d_p(x, x_i) = \sqrt[p]{ |x_1 - x_{i,1}|^p + |x_2 - x_{i,2}|^p + |x_3 - x_{i,3}|^p }$$
when p = 1, d,,p,, is the Manhattan distance: $$d_1 = |x_1 - x_{i,1}| + |x_2 - x_{i,2}| + |x_3 - x_{i,3}| $$
! 通常距離加重法 (NDW)
|英語|日本語|意味|h
|True value |真値 ||
|Error |誤差 |測定値 - 真値 |
|Bias |かたより ||
|Dispersion |ばらつき ||
|Trueness |真度 ||
|Accuracy |正確度 (確度) |真値からのずれ |
|Uncertainty |不確かさ ||
; 正確度
<<<
ISO/TC211^^2)^^ から、AccuracyとPrecision の定義に関する英文を引用する。Accuracy は、JPGISにおいて導入されているので、その日本語訳がつけられている。
<<<<
(英語)accuracy:closeness of agreement between a test result and the accepted reference value.
NOTE:A test result can be observations or measurements.
(日本語)正確度:品質評価の試験結果得られた値と参照値との近さ。
備考 試験結果は、観測値又は測定値として得ることができる。
(英語)precision:measure of the repeatability of a set of measurements.
NOTE:Precision is usually expressed as a statistical value based upon a set of repeated measurements such as the standard deviation from the sample mean.
<<<<
<<<
http://archive.sokugikyo.or.jp/pdf/apa93_2007_01/APA1023.pdf
----
* [[Uncertainty of Measurement]]
* [[対数グラフ上のエラーバー]]
----
<<<
''Accuracy'' is a measure of how your measured value compares with the real value.
<<<
https://web.physics.utah.edu/~sid/physics2010/Uncertainty.pdf
* [[Decorator - Strategic Choice | http://d.hatena.ne.jp/asakichy/20090311/1236760103 ]]
* [[デジカメプリント 50%ポイント還元の店 DPONE.NET ■|http://www.dpone.net/]]
* [[おぎさくネットプリント|http://www.ogisaku.com/html/netprint/index.htm]]
* [[デジカメプリント、結局どこがいいの? - くろんの風|http://d.hatena.ne.jp/klon/20071114/1195062956]]
* [[お勧め業者ランキング - デジカメプリント比較|http://www.dpe-navi.net/rank+index.htm]]
<<tag "テンソル">>
---
! テンソルとは??
# すごく大雑把にいうと、数字が多次元配列的に並んだもの
#* [[ベクトル空間]] 的な性質を満たす(はず)
#* n次元配列のnにあたる数字を ''ランク'' という
# より一般的に考える時には、線形写像として扱うことも多い
#* 行列を「写像: ベクトル → ベクトル」として扱うのと同じような感じ
#* ややこしいが、「多重線形関数: テンソル → テンソル」もテンソルになる
#** (任意の)このような写像としてのテンソルを含む空間のことを [[双対空間]] という
#* 「ランクnテンソル → ランクmテンソル」みたいな写像も考えることができる
# ベクトルの直積から、テンソルを生成することができる
#* この生成する操作が、''テンソル積'' にあたる
#* ''生成元のベクトル空間上の双線形写像は、生成したテンソル空間では線形写像になる''
#** https://manabitimes.jp/math/1845
# 物理だと基底ベクトルとセットで使うことが多い
#* 基底ベクトルの変換に対して、テンソル内の数字は機械的に変換される
#** 変換のされ方は、共変と反変で異なる
#* 球座標のような場所によって基底ベクトルが変わる場合は、それぞれの点の周りで座標を考えなきゃいけないのでややこしい (→ 自然基底)
----
! [[テンソルの定義]]
テンソルの定義の仕方は、主に3つのタイプに分けられる。
# 基底の取り換えに伴う成分の変換規則によるもの
# (双対空間を用いた) 多重線型写像としての定義
# 普遍性を用いた定義
----
! テンソルの成分表示
多重線形写像なので、座標が与えられていれば、多次元配列のような形で扱える。
(正確な表現ではないが) イメージとしては次のようになる。
* 0階のテンソル: スカラー
* 1階のテンソル: ベクトル
* n階のテンソル: n次元配列
!! ''基本的な性質''
当たり前のようなことが多いが、ざっとまとめておく。
# テンソルは [[線形性|線形代数]] を持つ
# 全ての成分が 0 であるテンソルのことを ''零テンソル'' といい、 数式中では $$O$$ で表す
# [[ベクトル]]と同様に、テンソル同士の和やスカラー倍を計算することができる
#* これらの演算は、[[ベクトル空間]]の公理を満たす
# ある行列 $$A$$ を用いて座標変換した場合、テンソルの成分は $$A$$ もしくは $$A^{-1}$$ によって変換される
#* [[直線座標系の座標変換]]
#* [[双対空間]]
- - - - -
! テンソルの生成
!! テンソル積
テンソルは複数のベクトル空間の直積から生成することができ、この操作を ''テンソル積'' という。
! [[テンソルの計算]]
!! 和とスカラー倍
同じ反変性と共変性の階数を持つ2つのテンソルについて、''和'' を定義することができる (零テンソルが単位元)。
* $${\bf S + T} = {S^i}_{jk} + {T^i}_{jk}$$
各成分の値を k倍 するような演算を、''スカラー倍'' という。
* $$k {\bf T} = k {T^i}_{jk}$$
!! [[縮約]]
有限次元のベクトル空間とその双対空間の間の自然な内積から生じる、一つ以上のテンソルに対する演算。
$$C: V^* \otimes V \to k $$
---
! 物理での使い道
[[一次変換|写像]] を基底つきで現したもの。
ベクトルのような座標とは無関係に成り立つ概念を座標上でうまく取り扱うために必要となる。なお、[[直線座標の場合|直交直線座標上でのテンソル]] と (球座標などの) 曲線座標の場合では、取り扱いが異なる部分がある。
<<<
物理量 b, c の対応は, 例えば物体に作用する外力と速度の関係などの物理現象であり, 座標系とは無関係に成立するものである. これに対して, 一次変換がマトリックスの計算として与えられるのであれば, 何らかの座標系を導入する必要があり, したがって座標系依存の関係式になってしまう. このようなベクトル同士の関係式を座標系とは無関係に記述するためにテンソルを導入する. すなわち一次変換に基底を導入するのである.
<<<
[[第3章 ベクトルとテンソル|http://www.sml.k.u-tokyo.ac.jp/members/nabe/lecture2012/No1_2012_1010.pdf]]
- - - - - - - - - - - - - - - - - - - -
!! 物理で使う場合の考え方
(双対空間を用いた) 多重線型写像として定義し、座標変換との関係性で見ていくのが分かりやすいと思う。
最初の段階では、曲線座標(自然基底) は考えなくてよいと思う。
* [[双対空間]]
* [[直線座標系の座標変換]]
* [[直交直線座標上でのテンソル]]
球座標・円筒座標も必要ならば、曲線座標(自然基底) についても知っておく必要がある。
* [[曲線座標系]]
* [[曲線座標の基底]]
* [[自然基底同士の座標変換]]
---
---
---
---
! テンソルの具体的表現
http://mathcommunication.hatenablog.com/entry/2017/03/22/014327
---
---
!! その他の補足
!! [[テンソル積]]に基づく定義
(p, q)-型テンソルはベクトル空間のテンソル積の元
$$T \in V^* \otimes \cdots \otimes V^* \otimes V \otimes \cdots \otimes V \to \mathbb{R} \ \ \ $$ (V* が p個、Vがq個)
として定義される。
[[テンソル - Wikipedia|https://ja.wikipedia.org/wiki/%E3%83%86%E3%83%B3%E3%82%BD%E3%83%AB]]
http://muneniku5656.hatenablog.com/entry/2017/12/08/135104
! 和とスカラー倍
[[ベクトル]]と同様に、テンソル同士の和やスカラー倍を計算することができる。これらの演算は、[[ベクトル空間]]の公理を満たす。
!! 和
同じ反変性と共変性の階数を持つ2つのテンソルについて、和を定義することができる。
* $${\bf S + T} = {S^i}_{jk} + {T^i}_{jk}$$
また、零テンソルが、テンソルの和の単位元となる。
!! スカラー倍
各成分の値を k倍 するような演算を、スカラー倍という。
* $$k {\bf T} = k {T^i}_{jk}$$
----
! 内積
テンソルの定義の仕方は、主に3つのタイプに分けられる。
# 基底の取り換えに伴う成分の変換規則によるもの
# (双対空間を用いた) 多重線型写像としての定義
# 普遍性を用いた定義
https://mathcommunication.hatenablog.com/entry/2017/01/22/220236
----
! 1. 基底の取り換えに伴う成分の変換規則によるもの
(あまり見ない気がするが) 基底を行列 $$A$$ で変換した際に、配列の要素の各値が $$A$$ の逆行列によって機械的に変換されるような多次元配列。
* 1階のテンソルの場合:[[直線座標系の座標変換]]
<<<
<<<
[[物理的なテンソルの定義と例 - 高校生から味わう理論物理入門|https://manabitimes.jp/physics/1756]]
----
! 2. 多重線型写像としての定義
!! 大雑把な定義
''p個のベクトルを引数に持つ実数を返す多重線形関数 $$T$$ を、p階のテンソルとする''。
:$$T: V_1 \times V_2 \times \dots \times V_p \to \mathbb{R}$$
例えば、$$T: V_1 \times V_2 \to \mathbb{R}$$ であれば、$$T$$ は二階のテンソルである。
$$T$$ は多重線形写像なので多次元配列のように扱うこともでき、物理では主にこの形で使用される。
* 配列の要素数は $$(\dim V_1) \cdot (\dim V_2) \cdot \dots \cdot (\dim V_p)$$ 個になる
- - - - - - - - - - - - - - - - - - - -
!! 双対空間を含めた定義
$$V^*$$ を $$V$$ の [[双対空間]] とする。
このとき $$(p, q)-$$ 型テンソル $$T$$ は、関数
:$$T: V^* \times \cdots \times V^* \times V \times \cdots \times V \to \mathbb{R} \ \ \ $$ (V* が p個、Vがq個)
で、各引数に関して線型であるようなものとして定義される。
このような定義を用いた場合、テンソル積は天下り的に、
:$$T \in V^* \otimes \cdots \otimes V^* \otimes V \otimes \cdots \otimes V \to \mathbb{R} \ \ \ $$ (V* が q個、Vがp個)
と定義される (ような気がする)。
----
! 3. 普遍性を用いた定義
ざっくり言うと、こういうことらしい。より詳しいことは [[テンソル積]] に書いた。
<<<
V とW を線型空間とする。このとき線型空間 T と双線型写像 κ:V×W→T の組 (T,κ) で次の性質を満たすものが ''同型を除き唯一つ'' 存在する。
(性質) 任意の線型空間 U と任意の双線型写像 $$\phi_U: V \times W \to U$$ に対して $$\phi_U = f_U \circ \kappa$$ を満たす線型写像 $$f_U: T \to U$$
が唯一つ存在する:
$$V \times W \stackrel{\kappa}{\to} T \stackrel{f_U}{\to} U$$
$$V \times W \stackrel{\phi_U}{\to} U$$
このとき組 (T,κ) を V と W の ''テンソル積''、T の元を ''テンソル'' と呼び、 T を V⊗W、 κ(v,w) を v⊗w と書く。また上記の(性質)をテンソル積 (V⊗W,κ) の ''普遍性'' と呼ぶ。
<<<
<<<
これを数学的にどう表現するかですが、もし全ての Φ,,U,,(r,F) が κ(r,F) と線型写像 f,,U,, によって
$$\phi_U = f_U( \kappa(r,F) )$$
のように分解することが出来るならば、κ(r,F) は全ての Φ,,U,,(r,F) に共通する因子であると言って良いのではないでしょうか。
<<<
[[テンソルの定義について: 普遍性と多重配列 - Rei Frontier Tech Blog|http://mathcommunication.hatenablog.com/entry/2017/02/05/193426]]
----
* https://mathwords.net/tensor
座標変換によって、テンソルがどう変化するのか?
* [[What’s the difference between a matrix and a tensor?|https://medium.com/@quantumsteinke/whats-the-difference-between-a-matrix-and-a-tensor-4505fbdc576c]]
ビデオ
* https://www.youtube.com/playlist?list=PLRlVmXqzHjUQARA37r4Qw3SHPqVXgqO6c
* https://www.youtube.com/playlist?list=PLJHszsWbB6hrkmmq57lX8BV-o-YIOFsiG
-
* http://www.math.titech.ac.jp/~kawahira/courses/kiso/01-senkei.pdf
* https://www.mynote-jp.com/entry/DualVectorSpace
- - - - -
; 本
*[[テンソル解析 (基礎数学選書 23): 田代 嘉宏|http://www.amazon.co.jp/%E3%83%86%E3%83%B3%E3%82%BD%E3%83%AB%E8%A7%A3%E6%9E%90-%E5%9F%BA%E7%A4%8E%E6%95%B0%E5%AD%A6%E9%81%B8%E6%9B%B8-23-%E7%94%B0%E4%BB%A3-%E5%98%89%E5%AE%8F/dp/4785311258]]
** これがよさげ
*[[テンソル―科学技術のために: 石原 繁|http://www.amazon.co.jp/%E3%83%86%E3%83%B3%E3%82%BD%E3%83%AB%E2%80%95%E7%A7%91%E5%AD%A6%E6%8A%80%E8%A1%93%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AB-%E7%9F%B3%E5%8E%9F-%E7%B9%81/dp/4785310685/ref=pd_sim_b_1]]
*[[物理とテンソル (物理数学One Point): 中村 純|http://www.amazon.co.jp/%E7%89%A9%E7%90%86%E3%81%A8%E3%83%86%E3%83%B3%E3%82%BD%E3%83%AB-%E7%89%A9%E7%90%86%E6%95%B0%E5%AD%A6One-Point-%E4%B8%AD%E6%9D%91-%E7%B4%94/dp/4320033035/ref=pd_sim_b_2]]
---
; テンソルの記号
http://mathcommunication.hatenablog.com/entry/2017/02/05/193426#fn-717acd4a
* [[基底の座標変換 [物理のかぎしっぽ]|http://hooktail.sub.jp/vectoranalysis/BaseTransform/]]
* 縮約
- - - - -
* http://www.f-denshi.com/000TokiwaJPN/04senke/000senke.html
* https://pineapple.blog/%E3%83%86%E3%83%B3%E3%82%BD%E3%83%AB%E8%A3%8F%E5%8F%A3%E5%85%A5%E9%96%80-1-a4d60b0a026c
[[1 ベクトル空間のテンソル積とテンソル空間|http://daisy.math.sci.ehime-u.ac.jp/users/tsuchiya/math/fem/exterior/section1.pdf]] からの引用。
(体裁等を少しだけ変えている)
---
<<<
k: 標数 0 の体(R, C と思えばよい),
$$V, W, U$$ : k 上の有限次元ベクトル空間,
$$\mathrm{Hom}(V, W)$$ := { 線形写像 v : V → W},
$$L(V, W; U)$$ := { 双線形写像 a : V × W → U}
<<<
($$\mathrm{Hom}$$ は [[凖同型]] を意味する)
---
! 普遍性
!!! __''定理 1.1''__
<<<
(1) k 上のベクトル空間 $$U_0$$ と $$\kappa \in L(V, W; U_0)$$ の対 $$(U_0, \kappa)$$ が存在し、次の 2 つを満たす:
* ⊗-1 $$U_0$$ は κ(V × W) により生成される。
* ⊗-2 任意の Φ ∈ L(V, W; U) に対してある $$F_{\phi} \in \mathrm{Hom}(U_0,U)$$ が存在し、$$\phi = F_{\phi} \circ \kappa$$ が成り立つ。
<<<< $$V \times W \stackrel{\kappa}{\to} U_0 \stackrel{F_{\phi}}{\to} U$$
$$V \times W \stackrel{\phi}{\to} U$$
<<<<
(2) $$(U_0, \kappa)$$ は次の意味で一意である:「もし、$$(U_0, \kappa), (U'_0, \kappa ')$$ が (1) を満たせば、線形同型写像 $$G: U_0 \to U'_0$$ で G ◦ κ = κ′ となるものが一意に存在する。」
<<<
: $$V \times W \stackrel{\kappa '}{\to} {U_0}' \stackrel{G}{\leftarrow} U_0 \left( \stackrel{\kappa}{\leftarrow} V \times W \right)$$
また、 ''定理 1.1 (1)'' は、次と同値である。
<<< (⊗) 任意の Φ ∈ L(V, W; U) に対してある $$F_{\phi} \in \mathrm{Hom}(U_0,U)$$ が ''一意に'' 存在して、$$\phi = F_{\phi} \circ \kappa$$ が成り立つ。
<<<
「定理 1.1 (1)」 あるいは 「それと同値の上記の (⊗)」を、''(U,,0,,, κ) の普遍性''
(universality) という。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
! 2つのベクトル空間のテンソル積
!!! __''定義 1.2''__
<<< ベクトル空間 V, W に対して、定理 1.1 の $$(U_0, \kappa)$$ を、''V, W のテンソル積 (tensor product)'' といい、$$U_0$$ を ''V ⊗ W'' と、κ(v, w) を ''v ⊗ w'' と書く。κ : V × W → V ⊗ W を ''テンソル積 V ⊗ W の標準写像'' という。
<<<
''双対空間:''
<<<
$$U_0 := L(V^*, W^*; k) $$ とする。$$v \in V, w \in W$$ を任意に取り、固定する。$$\phi \in V^*, \eta \in W^*$$ とすると、対応
$$V \otimes W$$ と $$L(V^*, W^*; U)$$ を同一視してよい
<<<
''基底・次元:''
<<<
さらに、定理 1.1 の証明から、V の基底が $$\{e_i\}_{i=1}^n$$、W の基底が $$\{f_i\}_{j=1}^m$$ の時、''$$\{e_i \otimes f_j\}$$ が V ⊗ W の基底になる'' こともすぐわかる。よって、特に
$$\dim V \otimes W = \dim V \cdot \dim W$$
<<<
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!!! __''命題 1.3''__
<<<
k 上のベクトル空間として、$$L(V, W; U)$$ と $$\mathrm{Hom}(V \otimes W, U)$$ は同型である。
$$L(V, W; U) \approxeq \mathrm{Hom}(V \otimes W, U)$$
<<<<
$$V \times W \stackrel{\kappa}{\to} V \otimes W \stackrel{F_{\phi}}{\to} U$$
$$V \times W \stackrel{\phi}{\to} U$$
<<<<
<<<
---
! 複数個のベクトル空間のテンソル積
__''定理 1.7''__
<<<
有限個の k 上のベクトル空間 $$V_1, \cdots V_m$$ に対して次が成り立つ:
(1) k 上のベクトル空間 $$U_0$$ と $$\kappa \in L(V_1, \cdots , V_m; U_0)$$ の対 $$(U_0, \kappa)$$ が存在し、次の 2 つを満たす:
# $$U_0$$ は κ(V,,1,, × ⋯ × V,,m,,) により生成される。
# 任意の $$\phi\in L(V_1, \cdots , V_m; U)$$ に対してある $$F_{\phi} \in \mathrm{Hom}(U_0,U)$$ が存在し、$$\phi = F_{\phi} \circ \kappa$$ が成り立つ。
(2) $$(U_0, \kappa)$$ は次の意味で一意である:「もし、$$(U_0, \kappa), (U'_0, \kappa ')$$ が (1) を満たせば、線形同型写像 $$G: U_0 \to U'_0$$ で G ◦ κ = κ′ となるものが一意に存在する。」
<<<
__''定義 1.8''__
<<<
ベクトル空間 $$V_1, \cdots V_m$$ に対して、定理 7 の $$(U_0, \kappa)$$ を、''$$V_1, \cdots V_m$$ のテンソル積 (tensor product)'' といい、$$U_0$$ を ''V,,1,, ⊗ ··· ⊗ V,,m,,'' と、κ(v,,1,,, ··· , v,,m,,) を ''v,,1,, ⊗ ··· ⊗ v,,m,,'' と書く。
<<<
---
! 定義から言えること
---
!! 定理 1.1 の証明
* http://daisy.math.sci.ehime-u.ac.jp/users/tsuchiya/math/fem/exterior/section1.pdf
http://tech-blog.rei-frontier.jp/entry/2017/10/12/102122
久しぶりに作ったら割とおいしくできたような気がするけど、
どうなのだろうか...
たまねぎ
にんじん
ピーマン
しめじ
豚バラ (当たり前な気がするが、牛切り落としの方がおいしかった)
ホールトマト
牛乳
バター
バジル 瓶の
コンソメのもと
----
# たまねぎをやや少なめのサラダオイルで炒める
# 辛い煙が出なくなったら、バターをひとかけ(3~4g?)加える
#ほっといてもこげない程度の弱火にして、5分ほど放置
#その間に、にんじんを乱切り
#きり終えたにんじんを、たまねぎの中に入れて、かき混ぜる
# そのまま5分ほど放置
#その間に、ピーマンを切る
# バターをひとかけ(3~4g?)加えて、混ぜる
# よく混ぜてから、ピーマンを加え、さらに混ぜる
# そのまま5分ほど放置
#鍋にオリーブオイル引き、軽く塩コショウした肉を炒める
#表面の色が大体変わったところで少なめの水をいれ、強火にする
#軽く沸騰するのを待つ (その間に、軽く灰汁取り)
#炒めた野菜とシメジを放り込む
#灰汁取り
#こしょうとバターとコンソメのもとを加える
#肉の臭いが気になるなら、バジル(瓶)と牛乳を加える
#弱火で10分ほど放置
#必要ならば、こしょうとバターとコンソメのもと
#ホールトマトを入れる
#野菜に(特ににんじん)火が通るまで、弱火
#味を整える塩・コショウ
理想気体では、系の圧力 (p) は分圧の和になる。
また、このことから、「成分 i の分圧」が''「成分 i のモル分率」 と 「系の圧力」の積'' で表せることも分かる。
---
! 式での表記
$$\displaystyle p = \sum p_i $$
$$p_i = x_i p$$
* p: 系の圧力
* $$p_i$$: (成分 i の) 分圧
* $$x_i$$: (成分 i の) モル分率
---
! 導出
気体の状態方程式から、
$$\displaystyle pV = \sum_{k=i}^i n_k RT $$ 【式A】
$$p_1 V = n_1 RT$$ 【式1】
$$p_2 V = n_2 RT$$ 【式2】
...
$$p_i V = n_i RT$$ 【式 i】
【式1】から【式 i】までを足し合わせると、
$$\displaystyle \sum_{k=i}^i p_k V = \sum_{k=i}^i n_k RT $$
となる。この式の右辺は【式A】の右辺と同じであるので、
$$\displaystyle pV = \sum p_i V$$
の関係が得られる(あとは V を消すだけ)。
- - - - -
【式1】を【式A】で割ると、
$$\displaystyle \dfrac{p_1}{p} = \frac{n_1}{\sum_{k=i}^i n_k} = x_1 $$
なので、この式を整理すると、
$$p_1 = x_1 p $$
となる。
$$p_2, x_2$$ 以降も同様に計算すればよい。
参考:
* [[混合気体(ドルトンの分圧の法則) 受験の月|http://examist.jp/chemistry/state/kongoukitai/]]
---
!! 簡単な説明
「温度: T, 体積: V」(の容器)における成分 i の圧力を $$p_i$$ とすると、モル数($$n_i$$)は次のように表せる。
$$n_i = \dfrac{V}{RT}p_i $$
ここで、全ての成分を「温度: T, 体積: V」の中に入れた時の物質量と圧力をそれぞれ n, P とすれば、以下の関係式が得られる。
$$p = \dfrac{RT}{V}n = \dfrac{RT}{V} \sum n_i = \sum p_i $$
流体の運動量保存則を表す式のことを、 ''ナビエ・ストークス方程式 (Navier–Stokes equations)'' と呼ぶ。
! 基本的な形
''非圧縮性'' と ''ニュートン流体'' を仮定した形式で表されることが多い。
:$$\dfrac{Dv}{Dt} = \dfrac{\partial v}{\partial t} + (v \cdot \nabla) v = - \dfrac{1}{\rho} \nabla p + \nu \nabla^2 v + f_b$$ 【式1】
ただし、(これらを仮定しない) より一般的な表現も可能である。
:$$\rho \dfrac{Dv}{Dt} = \rho \left[ \dfrac{\partial v}{\partial t} + (v \cdot \nabla) v \right] = - \nabla p + \nabla \cdot \tau + \rho f_b$$ 【式2】
一つの式で表されるが、運動量はベクトル量なので、次元と同じ数だけの方程式が含まれている。上の式では、左辺は運動量の変化、右辺は力積を表している。
* p: 圧力 (通常、スカラー場として扱う)
* $$\tau$$: せん断応力 (テンソル)
* f,,b,,: 単位質量当たりにかかる外力 (= 加速度)
** 最も一般的な力は重力 (f = g)
* ρ: 密度
式の導出については、 [[ナビエ・ストークス方程式の導出]] 参照。
---
! 各項の詳細
!! 移流項 (convective term)
移流項は、ベクトル解析の公式を使って以下のように変形することもある (みたい)。
:$${\displaystyle ({\boldsymbol {v}}\cdot \nabla ){\boldsymbol {v}} = (\nabla \times \mathbf {u} )\times \mathbf {u} +{\dfrac {1}{2}} \nabla \mathbf {u}^{2} = \operatorname {grad} \left({\dfrac {1}{2}}{\boldsymbol {v}}^{2}\right)-{\boldsymbol {v}}\times {\boldsymbol {\omega }}}$$
!!粘性項
ニュートン流体の場合には、粘性項は次のように表される。非圧縮性を仮定した場合には、右辺第一項は無視できる ($$\nabla \cdot v = 0$$)。
:$$\nabla \cdot \tau = \dfrac{\mu}{3 \rho} \nabla (\nabla \cdot v) + \mu \nabla^2 v$$
!! 圧力項
圧力をベクトル関数とした場合は、圧力項の部分が div になる。
$$\dfrac{\partial}{\partial t} (\rho v) + v \cdot \nabla (\rho v) = - \nabla \cdot p + \nabla \cdot \tau + \rho F$$
!! 外力項
(考える)系によっては、以下のような外力を考慮する。
* 重力: f = g
* 遠心力
* コリオリ力
---
! 無次元化
外力が保存力である場合には、「長さ・速度・時間・圧力 ・外力」を、次のように流れの代表量で無次元化すると、
$$x^* = \dfrac{x}{L}, \ \ y^* = \dfrac{y}{L}, \ \ z^* = \dfrac{z}{L},$$
$$v_x^* = \dfrac{v_x}{U}, \ \ v_y^* = \dfrac{v_y}{U}, \ \ v_z^* = \dfrac{v_z}{U},$$
$$t^* = \dfrac{t}{L/U},$$
$$\dot{p}^* = \dfrac{\dot{p}}{\rho U^2 / 2}, \ \ \dot{p} = p + \rho F $$
となる。ナビエ・ストークス方程式(【式1】)は次のように表させる。
$$\dfrac{\partial}{\partial t^*} (v^*) + v^* \cdot \nabla^* (v^*) = - \nabla \dot{p}^* + \nabla^{*2} v$$ 【式3】
---
! 近似 (approximation of Navier–Stokes equations)
!! ストークス近似 (Stokes's approximation)
慣性力が粘性力に比べて非常に小さい場合 ($$Re << 1$$)、移流項 ($$v \cdot \nabla (\rho v)$$)を省略することができる。この省略による近似を、''ストークス近似'' という。
$$\dfrac{\partial}{\partial t} (\rho v) = - \nabla p + \nabla \cdot \tau + \rho F$$
非線形項である移流項が省略されるので、線形になる(?)。
!! オイラーの式 (Euler's equation)
粘性力が慣性力に比べて非常に小さい場合、粘性項を無視できる。
$$\dfrac{\partial}{\partial t} (\rho v) + v \cdot \nabla (\rho v) = - \nabla p + \rho F$$
この粘性項を無視した式を、オイラーの式という。見た目の割に、実際に方程式を解くのは、面倒らしい。
* 非線形項が残っている
* 壁面での(流れに)水平方向の境界条件が設定できない。
<<<
その理由はまず、非線形項が相変わらず残っていること。2つめには、
粘性力があることを前提にしたナビエ・ストークスの場合は壁面に接触
する流体の速度を v、壁面の速度を V とすると、v = V という強力な
境界条件を設定できます。しかしオイラー方程式では壁面の垂直成分は
0(流体は壁を突き抜けないし、しみださない)という境界条件しかとれ
ないためです。
<<<
http://sky.geocities.jp/ima_ich/
!! 境界層近似
* [[境界層方程式]]
!! レイノルズ平均ナビエ-ストークス方程式
* [[レイノルズ平均ナビエ・ストークス方程式]]
---
----
- - -
さらに、流体に作用する面積力 ''f'' は、圧力 と せん断応力の二つに分けることができる。等方性とニュートン流体を仮定すると、
$$\mathbf{f} = f_{ij} = p \delta_{ij} + \lambda \mathrm{div} (\mathbf{v}) \delta_{ij} + 2 \mu e_{ij}$$
---
* ''力積'' = ''運動量の変化(全微分)''
** 力積 = 圧力項 + 粘性項 + 外力
** 運動量の変化(全微分) = 運動量の時間微分 + 移流項
* ''運動量の時間微分 + 移流項 = 圧力項 + 粘性項 + 外力''
** 圧力項と粘性項は、内力(面積力)
** 粘性項は拡散項ともいう?
** 移流項には、オイラーとラグランジェの話がからむっぽい
** ラグランジェ
*** 座標(位置)が時間の従属関数になる
----
* [[これで解決!大学数学 - ナビエ・ストークスの方程式|http://www.isigas.com/Navier-Stokes.html]]
$$\dfrac{\partial}{\partial t} (\rho v) + \nabla \cdot (\rho v \otimes v) = - \nabla p + \nabla \cdot \tau + \rho F$$ 【式】
''非圧縮性 (密度一定)'' を仮定した形で表されることの方が多いため、以下の形式の方がよく使われる。
$$\rho \dfrac{Dv}{Dt} = \rho \left[ \dfrac{\partial v}{\partial t} + (v \cdot \nabla) v \right] = - \nabla p + \nabla \cdot \tau + \rho F$$ 【式2】
上式の右辺第二項は、対称成分と対角成分に分けた上で、流体の対称性を用いると、次のように変形できる。
$$\mu \nabla^2 v = \mu \nabla \cdot (\nabla v) = \mu \dfrac{\partial}{\partial x_j} \dfrac{\partial u_i}{\partial x_j}$$
ここでは、(非圧縮性流体を流体を仮定した) ナビエ・ストークス方程式ではなく、より一般的な形について説明する。
: $$\rho \dfrac{Dv}{Dt} = \rho \left[ \dfrac{\partial v}{\partial t} + (v \cdot \nabla) v \right] = - \nabla p + \nabla \cdot \tau + \rho F_b$$
----
! 運動量保存則
ナビエ・ストークス方程式は、流体の運動量保存則である。そのため、Control Volume (CV) における運動量の収支から導出される。
:$$\displaystyle \dfrac{\partial}{\partial t} \iiint_{C.V.} \rho \mathbf{v} dV = - \iint_{C.S.} \mathbf{v} \rho (\mathbf{v} \cdot \mathbf{n}) dS + \left[ \iint_{C.S.} (\mathbf{F_s} \cdot \mathbf{n})dS + \iiint_{C.V.} \rho \mathbf{F_b} dV \right]$$ 【式1】
【式1】の左辺は「CV 内の運動量の増減」を、右辺第一項は「CVを出入りした運動量の差」を、右辺第二項は「CVに作用した面積力」を、右辺第三項は「CVに作用した体積力」を、それぞれ意味する。なお、各プロパティは、時間と位置の関数である。
* ''n'': CV の境界面に対する法線ベクトル
* ''F,,s,,'': CV の境界面にかかる面積力 (応力テンソル)
* ''F,,b,,'': CV にかかる単位体積当たりの体積力 (ベクトル)
この式は、ガウスの発散定理を使うと、
:$$\displaystyle \dfrac{\partial}{\partial t} \iiint_{C.V.} \rho \mathbf{v} dV = - \iiint_{C.V.} \mathrm{div}(\rho \mathbf{v} \mathbf{v}) dV + \iiint_{C.V.} \mathrm{div} (\mathbf{F_s}) dV + \iiint_{C.V.} \rho \mathbf{F_b} dV $$
と変形できる。積分し、体積で両辺を割ると、
:$$\displaystyle \dfrac{\partial}{\partial t} (\rho \mathbf{v}) + \mathrm{div}(\rho \mathbf{v} \mathbf{v}) = \mathrm{div} (\mathbf{F_s}) + \rho \mathbf{F_b} $$ 【式2】
を得る ($$\mathbf{v} \mathbf{v} = \mathbf{v} \otimes \mathbf{v}$$)。
- - -
ここで、【式2】の左辺の各項を、
・ $$\dfrac{\partial}{\partial t} (\rho \mathbf{v}) = \rho \dfrac{\partial \mathbf{v}}{\partial t} + \mathbf{v} \dfrac{\partial \rho}{\partial t}$$
・ $$\mathrm{div}(\rho \mathbf{v} \mathbf{v}) = (\nabla \rho) \cdot (\mathbf{v} \mathbf{v}) + \rho \nabla \cdot(\mathbf{v} \mathbf{v}) = \mathbf{v} (\mathbf{v} \cdot \nabla \rho) + \rho \left[ (\nabla \cdot \mathbf{v}) \mathbf{v} + \mathbf{v} \cdot \nabla \mathbf{v} \right] $$
という形に変形し (詳しくは [[ここ|https://en.wikipedia.org/wiki/Derivation_of_the_Navier%E2%80%93Stokes_equations]] を参照)、式を整理すると、
$$\ \ \ \ \ \displaystyle \rho \dfrac{\partial \mathbf{v}}{\partial t} + \mathbf{v} \dfrac{\partial \rho}{\partial t} + \mathbf{v} (\mathbf{v} \cdot \nabla \rho) + \rho (\nabla \cdot \mathbf{v}) \mathbf{v} + \rho \mathbf{v} \cdot \nabla \mathbf{v} = \mathrm{div} (\mathbf{F_s}) + \rho \mathbf{F_b} $$
$$\ \ \ \ \ \displaystyle \mathbf{v} \left[\dfrac{\partial \rho}{\partial t} + \mathbf{v} \cdot \nabla \rho + \rho (\nabla \cdot \mathbf{v}) \right] + \rho \left[ \dfrac{\partial \mathbf{v}}{\partial t} + \mathbf{v} \cdot \nabla \mathbf{v} \right] = \mathrm{div} (\mathbf{F_s}) + \rho \mathbf{F_b} $$
$$\ \ \ \ \ \displaystyle \mathbf{v} \left[\dfrac{\partial \rho}{\partial t} + \nabla \cdot(\rho \mathbf{v}) \right] + \rho \left[ \dfrac{\partial \mathbf{v}}{\partial t} + \mathbf{v} \cdot \nabla \mathbf{v} \right] = \mathrm{div} (\mathbf{F_s}) + \rho \mathbf{F_b} $$
という式が得られる。さらに、連続の式より、左辺の第一・第二項の部分は 0 になる。
$$\ \ \ \ \ \displaystyle \rho \left[ \dfrac{\partial \mathbf{v}}{\partial t} + \mathbf{v} \cdot \nabla \mathbf{v} \right] = \mathrm{div} (\mathbf{F_s}) + \rho \mathbf{F_b} $$
- - - - -
! 面積力の項について
さらに、流体に作用する面積力 ''F,,s,,'' を「圧力」と「せん断応力 (せん断速度に応じて大きさが変わる)」を分けて表すと、
:$$\displaystyle \dfrac{\partial}{\partial t} (\rho \mathbf{v}) = \mathbf{v} \rho (\nabla \cdot v) + \nabla \cdot (\mathbf{p + \bm{\tau}}) + \rho \mathbf{F_b} $$
となる。$$\mathbf{p} = p \delta_{ij}$$ であることを考慮し、微小領域での密度は一定とすると、
:$$\displaystyle \rho \dfrac{\partial}{\partial t} (\mathbf{v}) = \rho \mathbf{v} \nabla \cdot v + \nabla p + \nabla \cdot \bm{\tau} + \rho \mathbf{F_b} $$
を得る。
!! ニュートン流体の場合
ニュートン流体では、せん断応力は [[ひずみ速度テンソル|流体の変形・回転]] ($$\dot{\gamma}_{ij}$$) の線形関数になるので、せん断応力は4階のテンソル ($$C_{ijkl}$$) を用いて、
:$$\tau_{ij} = C_{ijkl} \dot{\gamma}_{kl} = C_{ijkl} \left[ \dfrac{1}{2} \left( \dfrac{\partial v_i}{\partial x_j} + \dfrac{\partial v_j}{\partial x_i}\right) \right]$$
と表せる。流体の [[等方性|等方性テンソル]] から、$$C_{ijkl}$$ は3つの項で表すことができるため、
: $$\tau_{ij} = (A \delta_{ij}\delta_{kl} + B \delta_{ik}\delta_{jl} + C \delta_{il}\delta_{jk}) \dot{\gamma}_{kl} = A \delta_{ij} \dot{\gamma}_{kk} + B \dot{\gamma}_{ij} + C \dot{\gamma}_{ji} $$
と変形できる。また、 [[ひずみ速度テンソル|流体の変形・回転]] の定義より $$\gamma_{ij} = \gamma_{ji}$$ なので、
: $$\tau_{ij} = A \delta_{ij} \dot{\gamma}_{kk} + (B + C) \dot{\gamma}_{ij} = A \mathrm{div}(v) \delta_{ij} + (B + C) \dot{\gamma}_{ij}$$
となる。定数 A は、体積粘性係数 (volume viscosity) と呼ばれ λ で表す。また、定数 (B + C) の部分は粘性の2倍に相当するので(後で示す) 、2μ に置き換える。
すると、応力の項は、
:$$\nabla \cdot \tau = \lambda \nabla \cdot (\mathrm{div}(v) \delta_{ij}) + 2 \mu (\nabla \cdot \dot{\gamma}_{ij})$$ 【式X】
- - - - -
!! 非圧縮性流体の場合
非圧縮性流体では $$\mathrm{div}(v) = 0$$ なので、直交座標であれば、【式X】は
:$$\nabla \cdot \tau = 2 \mu (\nabla \cdot \dot{\gamma}_{ij}) = \mu \dfrac{\partial}{\partial x_i} \left( \dfrac{\partial v_i}{\partial x_j} + \dfrac{\partial v_j}{\partial x_i} \right) = \mu \dfrac{\partial}{\partial x_i} \left( \dfrac{\partial v_i}{\partial x_j} \right) + \mu \dfrac{\partial^2 v_i}{\partial x_i^2} = \mu \nabla \mathrm{div}(v) + \nabla^2 v$$
と展開され、$$\mathrm{div}(v) = 0$$ をもう一度使えば、次の関係が得られる。
:$$\nabla \cdot \tau = \nabla^2 v
問題によっては、連続の式・ナビエストークス方程式の位置の項を [[フーリエ変換]] することがある。
; 速度場のフーリエ変換
$$\displaystyle u(x, t) = \int_{-\infty}^{\infty} u(k, t) e^{ikx} dk$$
逆変換
$$\displaystyle u(k, t) = \dfrac{1}{(2\pi)^3} \int_{-\infty}^{\infty} u(x, t) e^{-ikx} dx$$
3乗になるのは、3次元で考えているため。
- -
$$\displaystyle \hat{f}(k) = \dfrac{1}{\sqrt{2\pi}} \int_{-\infty}^{\infty} f(x) e^{-i k x} dx \ \ \ \ $$
$$\displaystyle f(x) = \dfrac{1}{\sqrt{2\pi}} \int_{-\infty}^{\infty} \hat{f}(k) e^{i k x} dk $$
https://www.jstage.jst.go.jp/article/nagare1982/14/4/14_4_316/_pdf/-char/ja
- -
* http://penguinitis.g1.xrea.com/study/note/turbulence_model.pdf
* https://www.jstage.jst.go.jp/article/jspf/78/8/78_8_773/_pdf/-char/ja
- -
* https://www.phys.chuo-u.ac.jp/labs/nakano/tokuron2/sec61(08).pdf
* http://www.kurims.kyoto-u.ac.jp/~kyodo/kokyuroku/contents/pdf/1823-09.pdf
----
; 周期流
http://dragonflare.blog.jp/archives/55681127.html
; 周期境界条件
* https://www.cradle.co.jp/media/column/a300
ナブラ・ラプラシアンは、''ベクトル微分演算子'' である。
ナブラは "・" や "×" などが付くと別の意味になる。
|記号|意味|h
|$$\nabla$$ |[[grad]] |
|$$\nabla \cdot$$ |div |
|$$\nabla \times$$ |rot |
|$$v \cdot \nabla$$ |[[方向微分]] |
- - - - - - - - - - - - - - - - - - - -
!! $$\nabla$$
''gradient ([[grad]])'' を意味する。
n次元の直交座標であれば、
$$\displaystyle \nabla = \sum_{i=1}^n \dfrac{1}{h_i} e_i \dfrac{\partial}{\partial x_i}$$
と表せる。h,,n,, は基底の長さを意味し、正規直交座標では ''h,,n,, = |e,,n,,| = 1'' である。また、他の直交座標 (e',,n,,) の場合には、次のように計算できる。
$$\displaystyle h_n = \sum_{i=1}^n \sqrt{\left(\dfrac{\partial x_i}{\partial u_n}\right)^2}$$
物理ではスカラー関数に対して用いることが多いが、ベクトル関数に用いることも可能である。
!! $$\nabla \cdot$$
''divergence ([[div]])'' を意味する。感覚的には、ナブラと内積を取ると考えればよい。
----
----
! 定義
x, y, z を、[[正規直交座標|正規直交系]] の基底とする。このとき、次のように定義された微分演算子 ''∇'' は、 ''ハミルトンの演算子'' と呼ばれ ''ナブラ'' と読む (3次元を例にして書いたが、任意の次元で成り立つ)。
$$\nabla = i \dfrac{\partial}{\partial x} + j \dfrac{\partial}{\partial y} + k \dfrac{\partial}{\partial z} = \left( \dfrac{\partial}{\partial x} , \dfrac{\partial}{\partial y}, \dfrac{\partial}{\partial z} \right) $$
また、 $$\nabla^2$$ の代わりに、''ラプラシアン'' もしくは ''ラプラスの演算子'' と呼ばれる演算子 Δ が用いられることもある。スカラーに作用させる場合は、次のように表せる。
$$\Delta = \nabla^2 = \nabla \cdot \nabla $$
ベクトルに作用するラプラシアンは、''直角座標系 (cartesian coordinate system) においてのみ'' 「$$ \nabla \cdot \nabla = \nabla^2$$」 が成立する.一般の座標ではベクトルラプラシアンは $$\nabla^2 = \nabla \cdot \nabla - \nabla \times \nabla \times$$
で定義される.
http://www.wave.ie.niigata-u.ac.jp/yamaguchi/education/vector/vector_analysis_formula.pdf
!! 参考サイト
* http://www.f-denshi.com/000TokiwaJPN/20vectr/020vct.html
* [[ベクトル解析 [2] – ∇(ナブラ) とその諸公式、計算練習 – 65536.tech|https://65536.tech/2010/07/_2_2/]]
* http://www.geocities.co.jp/HeartLand-Poplar/2391/denjiki/nabla.htm
* http://mathworld.wolfram.com/Nabla.html
---
! スカラーに作用させる場合 - [[grad]]
3次元座標上のスカラーに作用させる場合を例にして書くと、次のようになる(i, j, k は、各軸の単位ベクトル)。
x, y, z を変数とする関数によって表される スカラー変数 $$\phi(x,y,z)$$に作用させた場合は、
$$\nabla \phi = \dfrac{\partial \phi}{\partial x} i + \dfrac{\partial \phi}{\partial y} j + \dfrac{\partial \phi}{\partial z} k$$ $$ (= \mathrm{grad}(\phi)) $$
となり、''得られる値はベクトル'' である (i = (1,0,0), j=(0,1,0), k=(0,0,1))。
!! 正規直交座標でないの場合
ϕ が正規直交座標以外の座標の成分 u(x,y,z), v(x,y,z), w(x,y,z) として表されている場合には、
$$\nabla \phi = \dfrac{\partial \phi}{\partial x} i + \dfrac{\partial \phi}{\partial y} j + \dfrac{\partial \phi}{\partial z} k = \dfrac{\partial \phi}{\partial u} \nabla u + \dfrac{\partial \phi}{\partial v} \nabla v + \dfrac{\partial \phi}{\partial w} \nabla w = \dfrac{1}{h_u} \dfrac{\partial \phi}{\partial u} u + \dfrac{1}{h_v} \dfrac{\partial \phi}{\partial v} v + \dfrac{1}{h_w} \dfrac{\partial \phi}{\partial w} w$$
となる。 ただし、 $$h_u = \sqrt{\left(\dfrac{\partial x}{\partial u}\right)^2 + \left(\dfrac{\partial y}{\partial u}\right)^2 + \left(\dfrac{\partial z}{\partial u}\right)^2} $$ である。
!! ラプラス演算子
2回ナブラ演算子を作用させる場合には、''ラプラス演算子'' $$\Delta$$ を使うことがある。
$$\Delta \phi = \nabla^2 \phi = (\nabla \cdot \nabla) \phi = \nabla \cdot (\nabla \phi) = \dfrac{\partial}{\partial x}\dfrac{\partial \phi}{\partial x} + \dfrac{\partial}{\partial y}\dfrac{\partial \phi}{\partial y} + \dfrac{\partial}{\partial z}\dfrac{\partial \phi}{\partial z} $$ $$ (= \mathrm{div}(\mathrm{grad}(\phi))) $$
ベクトルに∇を作用させた場合に得られるのはスカラーなので、この場合は ''得られる値はスカラー'' になる。
---
! 内積のようにして (ベクトルに) 作用させる場合 - [[div]]
3次元座標上の ベクトル関数 $$A(x,y,z) = A_x(x,y,z) i + A_y(x,y,z) j + A_z(x,y,z) k$$ に作用させる場合を例にして書くと、
$$\nabla \cdot A = \left( i \dfrac{\partial}{\partial x} + j \dfrac{\partial}{\partial y} +k \dfrac{\partial}{\partial z} \right) \cdot A = \dfrac{\partial A_x}{\partial x} + \dfrac{\partial A_y}{\partial y} + \dfrac{\partial A_z}{\partial z}$$ $$ (= div(v)) $$
となり、''得られる値はスカラー'' である(i, j, k は、各軸の単位ベクトル)。
!! ラプラス演算子
2回ナブラ演算子を作用させる場合には、''ラプラス演算子'' $$\Delta$$ を使うことがある。
$$\Delta A = \nabla^2 A = \nabla (\nabla \cdot A) $$ $$ (= grad(div(\phi))) $$
スカラーに∇を作用させた場合に得られるのはベクトルなので、この場合は ''得られる値はベクトル'' になる。
---
! 外積のようにして (ベクトルに) 作用させる場合 - rot (or curl)
$$\nabla \times f = \left( \dfrac{\partial v_z}{\partial y} - \dfrac{\partial v_y}{\partial z}, \dfrac{\partial v_x}{\partial z} - \dfrac{\partial v_z}{\partial x}, \dfrac{\partial v_y}{\partial x} - \dfrac{\partial v_x}{\partial y} \right)$$
---
! 方向微分 (directional derivative)
(単位ベクトルと同じ長さを持つ) ベクトル u 方向への方向微分は、ナブラを使うと次のように表せる。
$$(u \cdot \nabla) \phi = (u_x \dfrac{\partial}{\partial y} + u_y \dfrac{\partial}{\partial y} + u_z \dfrac{\partial}{\partial z}) \phi$$
$$(u \cdot \nabla) A = (u_x \dfrac{\partial}{\partial x} + u_y \dfrac{\partial}{\partial y} + u_z \dfrac{\partial}{\partial z}) A = u_x \dfrac{\partial A}{\partial x} + u_y \dfrac{\partial A}{\partial y} + u_z \dfrac{\partial A}{\partial z}$$
* https://lecture.ecc.u-tokyo.ac.jp/~nkiyono/2010/610-03.pdf
* https://www.youtube.com/watch?v=wHTumi16I7g
---
! 公式
スカラー関数とベクトル関数の内積:
# $$\nabla(\phi \psi) = (\nabla \phi) \psi + \phi (\nabla \psi) $$
# $$\nabla \cdot (\phi A) = (\nabla \phi) \cdot A + \phi (\nabla \cdot A) $$
!! 大雑把な証明
1.
$$\nabla(\phi \psi) = \dfrac{\partial (\phi\psi)}{\partial x} i + \dfrac{\partial (\phi\psi)}{\partial y} j + \dfrac{\partial (\phi\psi)}{\partial z} k = \left( \dfrac{\partial \phi}{\partial x} i + \dfrac{\partial \phi}{\partial y} j + \dfrac{\partial \phi}{\partial z} k \right) \psi + \phi \left( \dfrac{\partial \psi}{\partial x} i + \dfrac{\partial \psi}{\partial y} j + \dfrac{\partial \psi}{\partial z} k \right) $$
2.
$$\nabla \cdot (\phi A) = i \cdot \dfrac{\partial (\phi A)}{\partial x} + j \cdot \dfrac{\partial (\phi A)}{\partial y} + k \cdot \dfrac{\partial (\phi A)}{\partial z} $$
$$= i \cdot \left( \dfrac{\partial \phi}{\partial x}A + \phi \dfrac{\partial A}{\partial x} \right) + j \cdot \left( \dfrac{\partial \phi}{\partial y}A + \phi \dfrac{\partial A}{\partial y} \right) + k \cdot \left( \dfrac{\partial \phi}{\partial z}A + \phi \dfrac{\partial A}{\partial z} \right) $$
$$= \left(i \dfrac{\partial \phi}{\partial x} + j \dfrac{\partial \phi}{\partial y} + k \dfrac{\partial \phi}{\partial z} \right) \cdot A + \phi \left(i \cdot \dfrac{\partial A}{\partial x} + j \cdot \dfrac{\partial A}{\partial y} + k \cdot \dfrac{\partial A}{\partial z} \right) $$
* ランギトト島
* Sky Tower
* オークランド博物館
* マウントビクトリア
* ほか
** オークランド美術館
** occidental (bar)
- -
** https://www.tour.ne.jp/matome/articles/248/
** ティリティリマタンギ島
** ニュージーランド・マリタイム・ミュージアム
$$x_{n+1} = x_n - \dfrac{f(x_n)}{f'(x_n)} \ \ \ \ \ \ $$ 【式1】
<<<
以上のように導関数を用いて方程式の解を求める方法は、ニュートン法(またはニュートン=ラフソン法)と呼ばれます。
この方法は、解に近いに所の値とその導関数が分かりさえすればいいので、この方法は1次元、多次元でも使用する事ができ、また複素関数でさえ使用することが出来ます。
さらに、誤差がO(Δ2)で減衰していくため、一度繰り返すごとに厳密解に一致する桁数が2倍になっていきます。
しかし問題があり、
1. 初期値を解の近傍に取らないと失敗する
2. 導関数が分からないと使えない
という大きな問題を抱えています。
また、解近傍でテーラー展開可能でなければならず、解近傍で導関数がゼロになる点があってはいけません。
<<<
[[ニュートン法(1、2次元、多次元) シキノート|http://slpr.sakura.ne.jp/qp/rootfinding/]]
---
! アルゴリズム
!! 考え方
このサイトが分かりやすい。
* https://linky-juku.com/newtons-method/
# $$x$$ の初期位置 ($$x_1$$) を適当に決める
# $$x_1$$ における $$f(x)$$ の接線の式を求める
#* 切片を $$f(x_1) = f'(x_1) x_1+ b$$ を使って計算すると、
#* $$y = f'(x_1) x + \left[ f(x_1) - f'(x_1) x_1 \right] $$ が得られる
# 接線とx軸の交点を求め、その交点の$$x$$ を $$x_2$$ とする
#* 接線の式に $$x_2$$ に代入すると $$f(x_2) = f'(x_1) x_2 + \left[ f(x_1) - f'(x_1) x_1 \right] = 0$$ となり
#* これを整理すると $$x_2 = x_1 - \dfrac{f(x_1)}{f'(x_1)}$$ が得られる
#* この式が【式1】には対応する
# 2-3 の処理を繰り返す
!! f(x) の制約
閉区間 [a,b] において、次の3つの条件を満たす必要がある
* $$f(a) < 0 < f(b)$$
* $$f'(x) > 0 \ \ \mathrm{for \ all} \ x \in [a,b]$$
* $$f''(x) > 0$$
http://www.math.ritsumei.ac.jp/yasutomi/jugyo/Numerical_Analysis/note2.pdf
! 証明
* https://risalc.info/src/newtons-method-properties.html
! cording
* https://www.geeksforgeeks.org/program-for-newton-raphson-method/
* [[Colebrook Equation]]
! 定義
''せん断応力 ($$\tau$$) が せん断速度 ($$\dot{\gamma}$$) に比例する流体''。
: $$\tau = \mu \dot{\gamma}$$
$$\mu$$ は比例定数であり、この比例定数を ''粘度'' という。
----
! [[ナビエ・ストークス方程式]] での取り扱い
ニュートン流体をナビエ・ストークス方程式で扱う際には、(暗黙的に) ''流体の等方性'' を 前提としている。
* https://en.wikipedia.org/wiki/Derivation_of_the_Navier%E2%80%93Stokes_equations
! 定義
ネイピア数 (e) は次のように定義される。
:$$ e = \displaystyle \lim_{n \to \infty}{ \left(1+\dfrac{1}{n} \right)^n}$$
また、$$m = \dfrac{1}{n}$$ とすると、 $$n \to \infty$$ のとき $$m \to 0$$なので、
:$$ e = \displaystyle \lim_{m \to 0}{ \left(1+m \right)^{1/m}}$$
と表すこともできる。
----
!! $$\left( 1+\frac{1}{n} \right)^n$$ に極限値が存在することの証明
極限値 $$\displaystyle \lim_{n \to \infty}{(1+\frac{1}{n})^n} $$ について、一般項を $$\displaystyle a_n $$ とおく。
[[二項展開]]し変形すると、
:$$\displaystyle a_n = 1 + \sum_{k=1}^{n}{\frac{n(n-1) \cdots(n-k+1)}{k!} \frac{1}{n^k}} = 1 + \sum_{k=1}^{n}{\frac{1}{k!}(1-\frac{1}{n})\cdots(1-\frac{k-1}{n})} $$
$$\displaystyle a_{n+1} $$ は、上の式のnをn+1に代えたものであり、$$\displaystyle a_n $$ より1項(>0)多い。
つまり、$$\displaystyle a_n < a_{n+1} $$ であるため、$$\displaystyle a_n $$ は''単調増加''する。
また、
:$$\displaystyle a_n = 1 + \sum_{k=1}^{n}{\frac{1}{k!}(1-\frac{1}{n})(1-\frac{2}{n})\cdots(1-\frac{k-1}{n})} \leqq 1 + \sum_{k=1}^{n}{\frac{1}{k!}} \leqq 1 + \sum_{k=1}^{n}{\frac{1}{2^{k-1}}} $$
なので、
:$$\displaystyle a_n \leqq 1 + 1 + \sum_{k=2}^{n}{\frac{1}{2^{k-1}}} < 3 $$
となり、$$a_n$$ が''有界列''であることが分かる。
----
! ネイピア数を底とする指数関数(exp) の微分
x を任意の実数とし、$$f(x) = e^x$$ とする。
この時、$$f'(x)$$ は、以下のように表せる。
$$f'(x) = \displaystyle \lim_{h \to 0} \dfrac{e^{x+h}-e^x}{h} = e^x \lim_{h \to 0} \frac{e^{h}-1}{h}$$
ここで、 $$t= e^h - 1$$ とすると、$$h = \log(t+1)$$なので
$$f'(x) = e^x \displaystyle \lim_{h \to 0} \dfrac{t}{\log(t+1)} = e^x \displaystyle \lim_{h \to 0} \dfrac{1}{\dfrac{1}{t} \log(t+1)} = e^x \displaystyle \lim_{h \to 0} \dfrac{1}{\log(t+1)^{1/t}} $$
と変形できる。
さらに、 $$h \to 0 \Rightarrow t \to 0$$ なので、
$$f'(x) = e^x \displaystyle \lim_{h \to 0} \dfrac{1}{\log(t+1)^{1/t}} = e^x$$
となる。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! $$ \displaystyle \lim_{t \to 0} \log(t+1)^{1/t} = 1$$ についての補足
e の定義式 $$ e = \displaystyle \lim_{m \to 0}{ \left(1+m \right)^{1/m}}$$ の両辺に自然対数をとると、
$$\displaystyle \log e = \log \lim_{m \to 0}{ \left(1+m \right)^{1/m}}$$
となり、さらに式を変形すると、
$$\displaystyle 1 = \lim_{m \to 0} \log \left[ (1+m)^{1/m} \right] = \lim_{m \to 0} \dfrac{\log (1+m)}{m} $$
となる。
参考: [[極限 x→0 (log(x+1))/x|http://w3e.kanazawa-it.ac.jp/math/category/other/kyokugen/syoumei/henkan-tex.cgi?target=/math/category/other/kyokugen/syoumei/kyokugen-frac(log(x_plus_1))(x).html]]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! x = 0 における $$e^x$$ の傾き
指数関数の定義 $$\displaystyle e^x = \lim_{n \to \infty}{ \left(1+\dfrac{x}{n} \right)^n}$$ より $$f(0) = e^0 = 1$$ なので、
$$\displaystyle f'(0) = \lim_{h \to 0} \frac{e^{0+h}-e^0}{h} = \lim_{h \to 0} \frac{e^{h}-1}{h} = \lim_{m \to 0} \dfrac{\log (1+m)}{m} = 1$$
ということが分かる。
つまり、「x = 0 における $$e^x$$ の傾きは 1 である」。
参考: [[指数関数・対数関数の微分|http://www.phys.u-ryukyu.ac.jp/~maeno/sizensuugaku2015/lec9.html#diffexplog]]
----
[[自然対数の底|http://aozoragakuen.sakura.ne.jp/taiwa/taiwaNch01/node15.html]]
---
https://mathwords.net/kyokugennokoushiki
! ノイズの除去
!! 1. 移動平均フィルタ
移動平均フィルタでは、フィルタの重み係数がすべて等しい 。
|1|1|1|
|1|1|1|
|1|1|1|
* ~ImageJ: Process -> Smooth
!! 2. ガウシアンフィルタ (Gaussian)
```
移動平均フィルタでは注目画素周辺の輝度値を単に平均していましが、一般的な画像では 注目画素に近い画素の輝度値は注目画素の輝度値と近い場合が多いですが、注目画素から遠くなればなるほど、注目画素の輝度値とは差が大きくなる場合が多くなります。
この事を考慮し、注目画素に近いほど、平均値を計算するときの重みを大きくし、遠くなるほど重みを小さくなるようにガウス分布の関数 を用いてレートを計算しているのがガウシアンフィルタです。
```
[[平滑化(移動平均、ガウシアン)フィルタ 画像処理ソリューション|http://imagingsolution.blog107.fc2.com/blog-entry-88.html]]
|1|2|1|
|2|4|2|
|1|2|1|
* ~ImageJ: Process -> Filters -> Gaussian Blur
!! 3. 中央値フィルタ (Median Filter)
```
平滑化フィルタでは注目画素の周辺画素の輝度値を平均し、ノイズを除去していましたが、画像の輪郭もボケてしまう欠点がありました。それに対し、メディアンフィルタでは周辺輝度値の大きさを順に並べ、メディアン(中央値)を注目画素に置き換えることでノイズを除去します。
特に周辺画素の輝度値よりも大きく異なるノイズ(ゴマ塩ノイズとかスパイクノイズという)を除去するのに効果を発揮します。
```
[[メディアンフィルタ 画像処理ソリューション|http://imagingsolution.blog107.fc2.com/blog-entry-92.html]]
''非線形なフィルタ''。 non-linear
* ~ImageJ: Process -> Filters -> Median
!! 4. バイラテラルフィルタ (bilateral filter)
<<<
この重み関数は,最初の exp の項は空間の距離に基づくガウシアン重み(通常のガウシアンフィルタと同じ),次の exp の項は色空間上の距離に基づくガウシアン重みになります.
バイラテラルフィルタでは,二つ目の exp の項による色空間上での距離に基づく重みによって,色が近い画素同士では重みが大きくなり,エッジを跨いだような色が遠い画素同士では重みが小さくなります.
<<<
[[本気だしたバイラテラルフィルタ - Qiita|https://qiita.com/ymaeda61/items/d437b1f741abd805d13a]]
* https://imagingsolution.net/imaging/bilateralfilter/
----
! 白黒画像の場合
白黒画像の場合、 [[モルフォロジー処理]] によるノイズ除去を行うこともある。
* 膨張
* 収縮
* オープニング
* クロージング
! 定義
K を実数体 R または複素数体 C (あるいは絶対値を備えた任意の位相体)とし、K 上のベクトル空間 $$V$$ を考える。
関数 $$\| \bullet \| : V \to R$$ が、以下の条件を満たすとき、この関数を ''ノルム'' という。
# $$\| v \| = 0 \Leftrightarrow v = 0$$
# $$\| a v \| = |a| \|v\|$$
# $$\|u + v \| \leq \|u\| + \|v\|$$
なお、$$\ u,v \in V, a \in K$$ である。
! ハウスドルフ距離 (Hausdorff distance)
<<<
「集合Aのどの点であっても、少なくとも距離dHだけ進めば集合Bのどれかの点に到達できる。」
同じく
「集合Bのどの点であっても、少なくとも距離dHだけ進めば集合Aのどれかの点に到達できる。」
このような距離dHをハウスドルフ距離と言う。
これはつまり、「集合Aに含まれる点から集合Bまでの最短距離を求めたもののうちの、最大値」ということになる。
<<<
* http://zellij.hatenablog.com/entry/20111206/p1
- -
<<<
When talking about distances, we usually mean the shortest : for instance, if a point X is said to be at distance D of a polygon P, we generally assume that D is the distance from X to the nearest point of P. The same logic applies for polygons : if two polygons A and B are at some distance from each other, we commonly understand that distance as the shortest one between any point of A and any point of B. Formally, this is called a minimin function, because the distance D between A and B is given by :
$$D(A, B) = \min_{a \in A} \{ \min_{b \in B} \{ d(a,b) \} \}
$$
<<<
http://www-cgrl.cs.mcgill.ca/~godfried/teaching/cg-projects/98/normand/main.html
; ~KeePass
* https://freesoft-100.com/security/keepass-password-safe.html
<<<
画像データのピクセルの値というのは、同じ条件で測定したつもりでもサンプルや光源の状態によりかなり変化します。また、上のキャプチャ画像のように画像の上の方と下の方で輝度値に差がある場合も少なくないです。そこで用いるのが Subtract Background です。
Process > Subtract Background で開けます。
<<<
[[ImageJ で米粒(細胞)を数えて解析しよう。 - バイオ系だけどプログラミング始めました|http://satoshithermophilus.hatenablog.com/entry/2017/06/12/164912]]
----
https://waku-take-a.github.io/%25E8%2583%258C%25E6%2599%25AF%25E9%2599%25A4%25E5%258E%25BB%25E3%2581%25AB%25E3%2581%25A4%25E3%2581%2584%25E3%2581%25A6.html
! メソッド
; 最低限用意すべきもの
* ''get'' (key)
* ''put'' (key, value)
* ''remove'' (key)
* clear()
* size()
* containsKey(key)
* ~ ''hash''(key)
; あると便利
* replace(key, value)
* is_empty()
* containsValue(Object value)
イテレータ (?)
* keySet()
* entrySet()
- - - - -
! 実装
* データは連結リストで管理
** ''~HashMap''
*** firstEntry
*** size
** ''Entry''
*** key
*** value
*** next
*** hash
*** (prev)
ラグランジアンをレシャンドル変換することで得られる。
* https://dora.bk.tsukuba.ac.jp/~takeuchi/?%E8%A7%A3%E6%9E%90%E5%8A%9B%E5%AD%A6%2F%E3%83%8F%E3%83%9F%E3%83%AB%E3%83%88%E3%83%8B%E3%82%A2%E3%83%B3
ざっくり言うと、系の全エネルギーを座標と運動量の関数で表したもの。
二つの項は、「運動エネルギー」と「ポテンシャルエネルギー」を表す。
$$ H = T + V $$
座標で偏微分するとポテンシャルエネルギーの変化率が、運動量で偏微分すると運動エネルギーの変化率が出てくる。
----
! 最小作用の原理 (principle of least action)
[[最小作用の原理]] をハミルトニアンを用いて表すと、次のようになる。
$$\ \ \ \ \cdot \ \ \dfrac{\partial H}{\partial q} = - \dfrac{\partial L}{\partial q} = - \dot{p}$$
$$\ \ \ \ \cdot \ \ \dfrac{\partial H}{\partial p} = \dot{q} $$
$$\ \ \ \ \cdot \ \ \dfrac{\partial H}{\partial t} = - \dfrac{\partial L}{\partial t}$$
この形式のポイントは、''運動量と位置の時間発展がハミルトニアンの偏微分から分かる'' ことである。
- - - - -
!! 大雑把な導出
$$L(q, \dot{q}, t), \ H(q, p, t)$$ の全微分形式は、
$$dL = \dfrac{\partial L}{\partial q} dq + \dfrac{\partial L}{\partial \dot{q}} d\dot{q} + \dfrac{\partial L}{\partial t} dt = \dfrac{\partial L}{\partial q} dq + p d\dot{q} + \dfrac{\partial L}{\partial t} dt$$
$$dH = \dfrac{\partial H}{\partial q} dq + \dfrac{\partial H}{\partial p} dp + \dfrac{\partial H}{\partial t} dt$$
である。また、dH は次のように表すこともできる。
$$dH = d(p\dot{q} - L) = p d\dot{q} + \dot{q} dp - dL = - \dfrac{\partial L}{\partial q} dq + \dot{q} dp - \dfrac{\partial L}{\partial t} dt$$
あとは、dH についての二つの式を恒等式であると考えて、それぞれの項を比較すればよい。(dq の比較のところでは、 [[オイラー・ラグランジュ方程式]] も使っている)。
----
ハミルトニアンは系の全エネルギー?
* https://butsurimemo.com/hamiltonian/
* https://whyitsso.net/physics/analytical_dynamics/4.html
----
ラグランジュ
---
速度の代わりに,運動量の
3
成分
p
x
;p
y
;p
z
を用いることもできる.その場合には,各瞬間瞬間の状態は,
6
個の変
数
x;y;z;p
x
;p
y
;p
z
で指定できる.これを,
正準変数
(canonical variables)
と呼ぶ.各瞬間瞬間の物理量は全て正準変
数の関数である,と古典力学では考える(下の補足参照).
* [[フィルムの形|http://www.mediajoy.com/mjc/movie_club/movie_film/p02.html]]
* [[サンプル|http://www.ab.auone-net.jp/~for_test/pc/cutoffAnime_04.html]]
** 「戻る」ボタンが使い物にならなくなる
*** location.replace(#xxx) は、IEだと履歴に残ってしまうため使えない。
*** scrollBy()か...
** 穴の位置を少しずらす必要がありそう
** 「再生の停止」が無い...
>書き込みや削除を繰り返して深さに差の出た探索二分木をバランス化する手続きを作りたい
う~む。普通は「削除を終えた直後」「挿入を終えた直後」に「バランス化を行う」のですが。
因みに「更新(書き込み)」は「更新前データを削除して、更新データを挿入する」と言う手続きで可能です。
[[探索二分木をバランス化する。 - その他(プログラミング) - 教えて!goo|http://oshiete.goo.ne.jp/qa/3731244.html]]
;これなら読めるかも
[[Balanced Binary Tree - CodeGuru|http://www.codeguru.com/cpp/cpp/algorithms/article.php/c5129]]
[[computer programming II|http://lecture.ecc.u-tokyo.ac.jp/%7Eyamaguch/pub/cp2-10/what-is-search-avl.html]]
[[AVL Tree in C - source code|http://cprogramminglanguage.net/avl-tree.aspx]]
[[Algorithms with Python / AVL 木|http://www.geocities.jp/m_hiroi/light/pyalgo13.html#update]]
[[meh/klib - GitHub|https://github.com/meh/klib]]
; data
* key
* value
* compareTo()
;avltree
* getelem()
* search()
* insert()
* key
* value
* left
* right
* balance {LEFT, RIGHT, EVEN}
* Tahoma - 4
* Corbel - 3
* Georgia - 3
* Palatino - 3
* Verdana - 3
Corbel はよさそうだが、他はどうかなぁ...
Tahoma パワポのせいかもだけど、文字間、狭くね
---
```
1. Garamond
2. Palatino
3. Verdana
4. Segoe
5. Franklin Gothic
6. Candara
7. Bodoni
8. Bell MT
9. Tahoma
10. Corbel
```
https://www.brightcarbon.com/blog/10-best-presentation-fonts/
```
1. Verdana
2. Calibri
3. Palatino
4. Tahoma
5. Georgia
6. Gill Sans
7. Corbel
8. Segoe
9. Garamond
10. Century Gothic
```
https://www.superside.com/blog/best-powerpoint-fonts
```
1. Tahoma
2. Verdana
3. Impact
4. Georgia
5. Palatino
6. Proxima Nova
7. ITC Souvenir
8. Montserrat
9. Raleway
10. Lato
```
https://buffalo7.co.uk/blog/powerpoint-presentation-fonts/
```
1. Calibri
2. Gill Sans
3. Myriad Pro
4. Cambria
5. Corbel
6. Constantia
7.Garamond
8. Caslon
9. Georgia
10. Tahoma
```
https://designshack.net/articles/typography/best-font-for-powerpoint/
- - - - -
```
versatile fonts (available on both Windows and macOS)
Arial
Calibri
Cambria
Corbel
Consolas
Constantia
Candara
Franklin Gothic
Garamond
Gill Sans
Helvetica
Rockwell
Times New Roman
Verdana
Palatino
```
https://www.goskills.com/Microsoft-Office/Resources/Best-font-for-PowerPoint-presentation
! 概要
Z factor を Taylor 展開の形で表した式。
各項の係数(B,C, ...)は ''ビリアル係数'' (virial coefficient) と呼ばれる。Pure component の場合、ビリアル係数は 温度の関数 で表される (関数は実験データなどから経験的に決められる)。
$$Z(T, \rho) = 1 + B(T) \rho + C(T) \rho^2 + \cdots $$
なお、Virial EOS が使えるのは、流体密度が低い時に限られる ($$\rho < 0.5 \rho^C$$ 程度の領域)。
!! Mixture の場合
混合流体の場合、ビリアル係数は次のような形で計算される。
* $$\displaystyle \sum_{i=1}^N \sum_{j=1}^N y_i y_j B_{ij}$$
* $$\displaystyle \sum_{i=1}^N \sum_{j=1}^N \sum_{k=1}^N y_i y_j y_k C_{ijk} $$
$$B_{ij}, C_{ijk}$$ は、「温度」、「圧力」、「各コンポーネントの臨界温度・臨界体積(密度)・Assymetric factor」などから決定される。
!! 実際の計算
$$\rho_{n+1} = \dfrac{p}{RT} \dfrac{1}{Z(T,\rho_{n})}$$
$$\rho_0 = \dfrac{p}{RT} \dfrac{1}{Z(T,0)} = \dfrac{p}{RT} $$
!! 分子間相互作用との関係
''Pairwise Additivity Approximation'' の仮定の下では、ビリアル係数は分子間相互作用を意味することになる。
* 第2ビリアル係数 (B): 2分子間相互作用
* 第3ビリアル係数 (C): 3分子間相互作用
[[クラスター展開|https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%83%BC%E5%B1%95%E9%96%8B]]
---
! 導出
気体の状態方程式を、Z について整理すると、
$$Z = \dfrac{pV}{nRT} = \dfrac{p}{RT} V_m = \dfrac{p}{RT} \dfrac{1}{\rho}$$
と書ける。
!! Z(T, ρ) とした場合 (ライデン型)
この式を、 Z を 温度 と 密度 の関数であるとみなして、T を固定して、ρ = 0 の周りで [[Taylor展開]] すると、
$$Z(T, \rho) = Z(T, 0) + \left( \dfrac{\partial Z}{\partial \rho} \right)_{T, \rho=0} \rho + \dfrac{1}{2!} \left( \dfrac{\partial^2 Z}{\partial \rho^2} \right)_{T, \rho=0} \rho^2 + \cdots $$
という式が得られる。
この式の 第二項以降の 定数部分は、それぞれ ''第nビリアル係数'' (n^^th^^ virial coefficient) と呼ばれ、次のように表される。
第2ビリアル係数: $$B = \left( \dfrac{\partial Z}{\partial \rho} \right)_{T, \rho=0}$$
第3ビリアル係数: $$C = \dfrac{1}{2!} \left( \dfrac{\partial^2 Z}{\partial \rho^2} \right)_{T, \rho=0}$$
$$\cdots$$
各ビリアル係数は、(多くの場合 実験データを基にした) 温度の関数として表される。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! Z(T, p) とした場合 (ベルリン型)
Z を 温度 と 圧力の式とみなして、
$$Z(T, p) = Z(T, 0) + \left( \dfrac{\partial Z}{\partial p} \right)_{T, p=0} p + \dfrac{1}{2!} \left( \dfrac{\partial^2 Z}{\partial p^2} \right)_{T, p=0} p^2 + \cdots $$
とすることもできる。
第2ビリアル係数: $$B_p = \left( \dfrac{\partial Z}{\partial p} \right)_{T, p=0}$$
第3ビリアル係数: $$C_p = \dfrac{1}{2!} \left( \dfrac{\partial^2 Z}{\partial p^2} \right)_{T, p=0}$$
---
! ビリアル係数の関係
$$B_p = \dfrac{B}{RT}$$
$$B = \left( \dfrac{\partial Z}{\partial \rho} \right)_{T, \rho=0} = - \dfrac{p}{RT} \dfrac{1}{\rho^2}$$
$$B_p = \left( \dfrac{\partial Z}{\partial p} \right)_{T, p=0} = - \dfrac{1}{RT} \dfrac{1}{\rho}$$
---
! 参考
* http://repo.lib.hosei.ac.jp/bitstream/10114/6899/1/%E9%96%A2%E5%8F%A3%E7%A7%80%E6%A8%B9.pdf
* http://www.chemeng.titech.ac.jp/~yshimo/2dis-2017%20PPA.pdf
* [[Lennard-Jonesポテンシャルを用いたMDシミュレーション Watanabe Laboratory|https://www.watanabe-lab.jp/blog/archives/2107]]
! 概要
ファンデルワールス状態方程式 (van der Waals EOS) は、理想気体の状態方程式に対して、次の2つの影響を考慮した式である ($$V_m = V /n$$)。
:$$\left( p + \dfrac{a}{V_m^2} \right) \left(V_m - b \right) = RT$$ 【式1】
理想気体からのずれは、(左辺の2つの項に含まれる) 2つの係数 ''a'', ''b'' によって表現される。
* [左辺 第1項]: ''分子間で働く引力 (attractive intermolecular forces)''
** 補正項は、Sutherland Potential から導かれたもの
** Sutherland Potential: $$\phi(r) = - \epsilon(\sigma/r)^6 [r \geq \sigma]$$
* [左辺 第2項]: ''分子が占める体積''
** 統計力学において、理想気体は運動エネルギーのみを持つの点粒子の系として再現される。
式を整理すると三次方程式の形になるため、ファンデルワールス状態方程式(及びその派生)は、Cubic EOS という言い方をされることもある。
---
! 数式での表現
最もよく使われるのは、【式1】のモル体積を用いた形であるが、モル数を使って表すことも可能。
:$$\left( p + \dfrac{a n^2}{V^2} \right) \left(V - nb \right) = nRT$$
さらにこの式を $$n = N / N_A , \ R = N_A k_b$$ で置き換えると、
:$$\left( p + \dfrac{N^2}{V^2} \dfrac{a}{{N_A}^2} \right) \left(V - \dfrac{N}{N_A} b \right) = \dfrac{N}{N_A} (N_A k_b) T \ \ \ ( = N k_b T)$$
となる。この式は、$$a' = a / {N_A}^2, \ b' = b / N_A$$ として、以下のように書かれることもある (らしい)。
:$$\left( p + \dfrac{a' N^2}{V^2}\right) \left(V - b' N \right) = N k_b T$$
- - - - -
式の中の ''a, b'' は理想気体からのずれを表す係数であり、臨界温度・臨界圧力から計算できる (理由は後述)。
:$$ a = \dfrac{27 (RT^C)^2}{64 p^C}, b = \dfrac{RT^C}{8p^C}$$
混合気体の場合の a, b は、多くの場合、以下の式を用いて計算する。
:$$\displaystyle a = \sum_{i=1}^N \sum_{j=1}^N (1 - k_{ij}) x_i x_j \sqrt{a_i a_j}, b = \sum_{i=1}^N x_i b_i $$
k,,ij,, は binary interaction parameter。ファンデルワールス状態方程式では、通常は0。
---
! よく出てくる形
ファンデルワールス状態方程式は、(【式1】を変形した) 以下のような形でも登場する。
!! 式を圧力で整理した場合
:$$ p = \dfrac{RT}{V_m - b} - \dfrac{a}{V_m^2}$$ 【式2】
!! 式を Z で整理した場合
:$$Z = \dfrac{pV_m}{RT} = \dfrac{V_m}{RT} \left( \dfrac{RT}{V_m - b} - \dfrac{a}{V_m^2} \right) = \dfrac{V_m}{V_m - b} - \dfrac{a}{RT V_m} $$
!! 式をモル体積で整理した場合
【式1】をモル体積で整理すると、モル体積に関する三次方程式で表すことができる。
$$p V_m^3 - (bP+RT)V_m^2 + av - ab = 0$$ 【式3】
三次方程式なので、解の個数が場合によって異なるが、それぞれの解は次のように扱う。
* 解が1つ (⇒ 単相の流体)
* 解が3つ (⇒ 二相の流体)
** 最小のモル体積を与える解: 液相
** 最大のモル体積を与える解: 気相
** 中間の値: 使わない
---
! 臨界点
P-V図上では、臨界点は定留点となる。これを式で表すと、
$$\left(\dfrac{\partial p}{\partial V} \right)_T = \left(\dfrac{\partial^2 p}{\partial V^2} \right)_T = 0 $$
となり、【式2】を微分した式と組み合わせると、
$$\left(\dfrac{\partial p}{\partial V} \right)_T = - \dfrac{RT}{(V_m - b)^2} + \dfrac{2a}{V_m^3} = 0$$ 【式4】
$$\left(\dfrac{\partial^2 p}{\partial V^2} \right)_T = - \dfrac{2RT}{(V_m - b)^3} - \dfrac{6a}{V_m^4} = 0$$ 【式5】
という関係が得られる。
"【式4】× 2 + 【式5】× (Vm−b) = 0" として、 $$V_m$$ について解けば、臨界(モル)体積が得られる。
$$V_m^C = 3b$$ 【式6】
これを【式4】に代入すれば、臨界温度が得られる。
$$T^C = \dfrac{8a}{27bR}$$ 【式7】
さらに、これらを【式2】に代入すれば、臨界圧力が得られる。
$$P^C = \dfrac{a}{27b^2} $$ 【式8】
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! 係数 a, b の計算
また逆に、【式8】を a について整理したうえで、【式7】に代入すると、
$$T^C = \dfrac{8}{27bR} (27b^2P^C) = \dfrac{8bp^C}{R} $$
であり、これを b について整理すると $$b = \dfrac{RT^C}{8 p^C} $$ が得られる。
さらに、得られた b を 【式7】に代入すれば、 $$ a = \dfrac{27 (RT^C)^2}{64 p^C}$$ が得られる。
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
! Z factor
$$Z^C = \dfrac{p^C V_m^C}{T^CR} = \dfrac{3}{8} = 0.375 $$
となるが、この値は実測される値(0.27 前後) よりも、かなり大きい。
---
! Law of Corresponding States ([[相応状態の法則]])
【式6-8】を使うと、温度・圧力・体積は、換算変数(reduced parameters) を用いて、
$$T = T^C T_r = \dfrac{8a}{27bR} T_r$$
$$p = p^C p_r = \dfrac{a}{27b^2} p_r$$
$$V_m = V_m^C V_r = 3b V_r$$
と表せる。これらを、【式2】に代入して式を整理すれば、
: $$(P_r + \dfrac{3}{V_r^2}) (V_r - \dfrac{1}{3}) = \dfrac{8}{3} T_r \ $$ あるいは $$\ (P_r + \dfrac{3}{V_r^2}) (3 V_r - 1) = 3 T_r$$
という、物質によらない状態方程式が得られる。
---
! ビリアル展開 (Virial Expansion)
$$z = pV_m / RT$$ に【式2】を代入すると、
$$z = \dfrac{V_m}{RT} \left( \dfrac{RT}{V_m - b} - \dfrac{a}{V_m^2} \right) = \dfrac{V_m}{V_m - b} - \dfrac{a}{RTV_m} $$
である。ここで、 $$\rho = 1 / V_m $$ とすると、
$$z = \dfrac{1}{1 - b\rho} - \dfrac{a}{RT} \rho $$
$$\left( \dfrac{\partial z}{\partial \rho} \right)_T = \dfrac{b}{(1 - b\rho)^2} - \dfrac{a}{RT}$$
が得られる。
よって、ビリアル展開の係数 B は、以下のように求められる。
$$B = \left( \dfrac{\partial z}{\partial \rho} \right)_{T,\rho=0} = b - \dfrac{a}{RT} $$
----
! Helmholtzの自由エネルギー
[[こんな感じになるらしい|https://en.wikipedia.org/wiki/Van_der_Waals_equation]]。
: $$F = - N k_b T \left[ 1 + \ln \left( \dfrac{ (V - Nb') T^{3/2} }{N \Phi} \right) \right] - \dfrac{a'N^2}{V} \ \ \ \ $$【式9】
$$n_Q$$ は統計力学的に次のような感じになるらしい。
:$$\Phi = T^{3/2} \Lambda^3 = \left( \dfrac{\hbar}{\sqrt{2 \pi m k_b}} \right)^{3}$$
- - - - -
!! ざっくりした説明
【式2】より、
:$$ p = \dfrac{nRT}{V - nb} - \dfrac{an^2}{V^2}$$
である。ここで、$$n, a, b$$ を $$N, a' = a/{N_A}^2, b' = b/N_A$$ に置き換えると、
:$$p = \dfrac{N k_b T}{V - (N / N_A) b} - \dfrac{a}{V^2} \dfrac{N^2}{{N_A}^2} = \dfrac{N k_b T}{V - N b'} - \dfrac{a' N^2}{V^2}$$
となる。この式を [[ヘルムホルツの自由エネルギー]] の圧力での偏微分に代入すると、
:$$\left(\dfrac{\partial F}{\partial V}\right)_{T,N} = - p = - \left[ \dfrac{N k_b T}{V - Nb'} - \dfrac{a' N^2}{V^2} \right] \ \ \ \ \ \ \ $$【式10】
が得られる。これをVについて積分すると、【式9】っぽい形が出てくる。
: $$F = - N k_b T \ln(V - Nb') - \dfrac{a'N^2}{V} + C$$
https://storytellphys.wordpress.com/2021/04/24/van-der-waals%e6%b0%97%e4%bd%93/
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
! Gibbs の自由エネルギー
$$G = F + pV$$ に【式9】と【式10】を代入すると、
:$$G = - N k_b T \left[ 1 + \ln \left( \dfrac{ (V - Nb') T^{3/2} }{N \Phi} \right) \right] - \dfrac{a'N^2}{V} + \left[ \dfrac{N k_b T}{V - Nb'} - \dfrac{a' N^2}{V^2} \right] V$$
となり、これを整理すると、
:$$G = - N k_b T \left[ 1 + \ln \left( \dfrac{ (V - Nb') T^{3/2} }{N \Phi} \right) \right] - \dfrac{2a'N^2}{V} + \dfrac{N k_b T V}{V - Nb'} $$
https://www.physics.rutgers.edu/~gersh/351/Lecture%2015.pdf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! 化学ポテンシャル
$$\mu = \left(\dfrac{\partial F}{\partial N}\right)_{T,V} = \dfrac{G}{N}$$
https://www.physics.ox.ac.uk/system/files/file_attachments/real_gases.pdf
---
! 参考サイト
* [[例題:ファンデルワースの状態方程式を用いた臨界温度,臨界体積,臨界圧力の導出 数学活用大事典|http://omm.ishikawa-nct.ac.jp/ex/exercises/62h2QAAD/]]
* [[ファンデルワールスの状態方程式 - Wikipedia|https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%83%B3%E3%83%87%E3%83%AB%E3%83%AF%E3%83%BC%E3%83%AB%E3%82%B9%E3%81%AE%E7%8A%B6%E6%85%8B%E6%96%B9%E7%A8%8B%E5%BC%8F]]
* [[ときわ台学/化学熱力学/ファンデルワールスの状態方程式|http://www.f-denshi.com/000TokiwaJPN/35chmth/apdx01chmt.html]]
* [[Critical point (thermodynamics) - Wikipedia|https://en.wikipedia.org/wiki/Critical_point_(thermodynamics)]]
* http://www.chem.tokushima-u.ac.jp/B2/TamuraLab/Lecture/Lecture12.pdf
* http://kuchem.kyoto-u.ac.jp/ubung/yyosuke/vdwfluid/vdwfluid1.htm
* https://physnotes.jp/td/cri_and_redeq/
```
At the critical point, only one phase exists. The heat of vaporization is zero. There is a stationary inflection point in the constant-temperature line (critical isotherm) on a PV diagram.
```
http://home.hiroshima-u.ac.jp/nishino/2011/toukei/toukei_10.pdf
http://kuchem.kyoto-u.ac.jp/ubung/yyosuke/vdwfluid/vdwfluid3.htm
* https://www.youtube.com/watch?v=FWsKB2vKMzc
! 第一法則 (First law)
拡散流束は濃度勾配に比例する。濃度には、通常 ''モル濃度'' か ''密度'' (質量濃度) が用いられる。
!! モル濃度を用いた場合
$$ J = - D \mathrm{grad} (c) = - D \nabla c$$ 【式1】
* J: モル平均速度(molar averaged velocity) に対するモル流束 (molar flux)
* D: ''拡散係数'' (''Diffustion Coefficient'')
* c: モル濃度
J は ''モル流束'' (N = cv) と ''モル平均速度'' ($$\bar{V}$$) を使って、次のように表すこともできる (c,,i,,, v,,i,, は成分 i のモル濃度と速度)。
$$J = N - c \bar{V} = c(v - \bar{V})$$ 【式2】
モル平均速度の定義は、以下の通り。
$$\bar{V} = \dfrac{\sum_i c_i v_i}{\sum_i c_i} = \dfrac{\sum_i c_i v_i}{c} $$
よって、J に関する2つの式から、
$$v = - \dfrac{D}{c} \nabla c + \bar{V} $$ 【式3】
という関係が得られる。この式は、第二法則の導出の際に使用する。
なお、一次元の場合は、次のように書ける。
$$ J = - D \dfrac{\partial c}{\partial x} $$
- - - - -
!! 密度を用いた場合
$$ j = - D \mathrm{grad} (\rho) = - D \nabla \rho$$
* j: 質量平均速度(mass averaged velocity) に対する質量流束 (mass flux)
* D: ''拡散係数'' (モル濃度の時とは単位が変わる点に注意)
* ρ: 密度
''質量平均速度'' ($$\bar{v}$$) の定義は、以下の通り。
$$\bar{v} = \dfrac{\sum_i \rho_i v_i}{\sum_i \rho_i} = \dfrac{\sum_i \rho_i v_i}{\rho} $$
---
! 移流拡散方程式 (Advection-diffusion equation)
連続の式 $$\dfrac{\partial \rho}{\partial t} + \nabla \cdot (\rho v) = 0$$ に、第一法則から得られた【式3】を式を代入すると、
$$\dfrac{\partial}{\partial t} (cM) + \nabla \cdot \left( cM (- \dfrac{D}{c} \nabla c + \bar{V}) \right) = 0$$
という式が得られる(ρ = cM, M: モル重量)。この式の両辺を M で割り、整理すると、
$$\dfrac{\partial c}{\partial t} + \nabla \cdot (c \bar{V}) - \nabla \cdot (D \nabla c) = 0$$ 【式4】
''移流拡散方程式'' (Advection-diffusion equation) が得られる。
生成消滅項 (R) を加えた形で用いることもある。
$$\dfrac{\partial c}{\partial t} + \nabla \cdot (c \bar{V}) - \nabla \cdot (D \nabla c) = R$$
---
! 第二法則 (Second law)
移流拡散方程式 (【式4】) に、 $$\bar{V} = 0$$ を代入すると、第二法則が得られる。
$$\dfrac{\partial c}{\partial t} = \nabla \cdot (D \nabla c) = D \nabla^2 c$$
一次元の場合は、次のように書ける。
$$ \dfrac{\partial c}{\partial t} = D \dfrac{\partial^2 c}{\partial x^2} $$
---
---
! 単位について
Mass Transfer の話では、濃度(C)に ''Mass Fraction'' (質量比)だけでなく、''Mole Fraction'' (モル分率) もよく使われる。
!! Mass Fraction の場合 (C = m/V):
濃度(C)は、「単位体積当たりの質量」つまり 「''密度'' (ρ)」 になる。
$$\dfrac{\dot{m_i}}{A} = - D_i \dfrac{\partial \rho_i}{\partial x} = - \rho D_i \dfrac{\partial w_i}{\partial x}$$ (kg/s-m2)
wi: 成分iの質量比、 ρ: bulkの密度 (= Σρi)
!! Mole Fraction の場合 (C = n/V):
濃度(C)は、「単位体積当たりのモル数」つまり 「''モル濃度'' (c)」 になる。
$$\dfrac{\dot{N_i}}{A} = - D_i \dfrac{\partial c_i}{\partial x} = - c D_i \dfrac{\partial y_i}{\partial x}$$ (mol/s-m2)
yi: 成分iのモル分率、 ρ: bulkのモル濃度 (= Σci)
モル分率に関しては、[[ラウールの法則]]・ヘンリーの法則を用いて、以下のように表すこともある。
* $$p_{i,sat} \cdot y_{i,gas} = p_{i,gas}$$
* $$H \cdot y_{i,liq} = p_{i,gas}$$
! ヘルシンキ
* http://wikitravel.org/en/Helsinki
* [[マーケット広場、ウスペンスキー寺院、キアズマ | http://amy2010.cocolog-nifty.com/blog/2011/07/2-9215.html]]
; トラム
* [[路線図 | http://www.hsl.fi/EN/timetablesandroutes/maps/Pages/tramlines.aspx]]
; お買い物
* [[マーケット広場 | http://blog.goo.ne.jp/maccongoo/e/94447089ee6a1d9ee975ad8d50c2332c]]
* [[ショッピング情報 | http://www.jtb.co.jp/kaigai/guide/ShopList.aspx?CityCD=HEL]]
* [[stockman | http://www.jtb.co.jp/kaigai/guide/ShopDetail.aspx?CityCD=HEL&ShopCode=502]]
* [[スーパーマーケット | http://ameblo.jp/fchyp--hcsyf/entry-11173247935.html]]
; フェリー
* [[Tallink Silja | http://www.tallinksilja.com/en/web/int/book-a-cruise]]
* [[乗り場 | http://www.nettravel-jp.com/cruise/silja/access.htm]]
** 9番のトラム Simonkatu => Länsiterminaali
* http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1434171824
; 世界遺産スオメンリンナ島
* http://allabout.co.jp/gm/gc/406354/3/
! フィスカルス村
* http://ameblo.jp/cafe-manmaruco/entry-11263545782.html
* http://blog.goo.ne.jp/onakagagoo_110/e/79b9b13aee7b075ab9921c2f617f63a6
----
* http://kurashinotakaramono.net/?pid=46537447
<<tag "フーリエ解析">>
In mathematics, Fourier analysis is the study of the way general functions may be represented or approximated by sums of simpler trigonometric functions. Fourier analysis grew from the study of Fourier series, and is named after Joseph Fourier, who showed that representing a function as a sum of trigonometric functions greatly simplifies the study of heat transfer.
だいたい、以下のような内容が含まれる。
# [[フーリエ級数]]
# [[複素フーリエ級数]]
# [[フーリエ積分]]
# [[フーリエ変換]]
# 離散フーリエ変換
# [[スペクトル解析]]
実関数 $$f(x)$$ は−L < x < L の範囲内で定義され, その定義域の外側では $$f(x+2L) = f(x)$$ とする (2L の周期を持つ関数)。
このとき $$f(x)$$ は、(無限個の) 三角関数の和として表せる。
$$\displaystyle f(x) = \dfrac{a_0}{2} + \sum_{n=1}^{\infty} \left( a_n \cos{\dfrac{n\pi x}{L}} + b_n \sin{\dfrac{n\pi x}{L}} \right) \ \ \ \ \ \ \ $$ 【式1】
a,,n,,, b,,n,, は Fourier 係数と呼ばれ、
$$\displaystyle a_n = \dfrac{1}{L} \int_{-L}^L f(X) \cos{\dfrac{n \pi X}{L}} dX, \ \ \ \ \ (n = 0, 1, 2, ...) \ \ \ \ \ \ \ $$ 【式2】
$$\displaystyle b_n = \dfrac{1}{L} \int_{-L}^L f(X) \sin{\dfrac{n \pi X}{L}} dX, \ \ \ \ \ (n = 1, 2, ...) \ \ \ \ \ \ \ $$ 【式3】
で与えられる。
; f(x) の定義域と a,,n,,, b,,n,, の関係
f(x) の定義域が [c, c + 2L] の場合の a,,n,,, b,,n,, は、次のようになる (c は任意の実数)。
$$\displaystyle a_n = \dfrac{1}{L} \int_{c}^{c+2L} f(X) \cos{\dfrac{n \pi X}{L}} dX, \ \ \ \ \ (n = 0, 1, 2, ...) \ \ \ \ \ \ \ $$
$$\displaystyle b_n = \dfrac{1}{L} \int_{c}^{c+2L} f(X) \sin{\dfrac{n \pi X}{L}} dX, \ \ \ \ \ (n = 1, 2, ...) \ \ \ \ \ \ \ $$
---
! Fourier 級数の収束性
【式1】の右辺が左辺に収束することの証明は大変そうなので、この式は受け入れてしまった方が楽そう。
; 詳しい説明
* http://umeken.sakura.ne.jp/kenwiki/index.php?plugin=attach&refer=%B1%E9%BD%AC%CC%E4%C2%EA%B5%DA%A4%D3%B9%D6%B5%C1%A5%CE%A1%BC%A5%C8&openfile=fourier20070615.pdf
* https://www.se.fukuoka-u.ac.jp/iwayama/teach/kisoIII/2012/chap2.pdf
** 2.7 ちょっと高度な話題~Fourier 級数の収束性~
---
! Fourier 係数の導出
!! a,,n,, (n ≠ 0)
【式1】 の両辺に $$\cos{\dfrac{m \pi x}{L}} $$ を掛けると(m ≠ 0)、
$$\displaystyle \cos{\dfrac{m \pi x}{L}} f(x) = \cos{\dfrac{m \pi x}{L}} \dfrac{a_0}{2} + \cos{\dfrac{m \pi x}{L}} \sum_{n=1}^{\infty} \left( a_n \cos{\dfrac{n\pi x}{L}} \right) + \cos{\dfrac{m \pi x}{L}} \sum_{n=1}^{\infty} \left( b_n \sin{\dfrac{n\pi x}{L}} \right)$$
-L から L まで積分すると、
$$\displaystyle \int_{-L}^L \cos{\dfrac{m \pi x}{L}} f(x) dx = \dfrac{a_0}{2} \int_{-L}^L \cos{\dfrac{m \pi x}{L}} dx + \int_{-L}^L \cos{\dfrac{m \pi x}{L}} \sum_{n=1}^{\infty} \left( a_n \cos{\dfrac{n\pi x}{L}} \right) dx + \int_{-L}^L \cos{\dfrac{m \pi x}{L}} \sum_{n=1}^{\infty} \left( b_n \sin{\dfrac{n\pi x}{L}} \right) dx$$
三角関数の直行性から、右辺のほとんどの項 (n ≠ m の部分) は 0 になる。残る項は "n = m" の部分だけなので、m を n に置き換えて書くと、
$$\displaystyle \int_{-L}^L \cos{\dfrac{n \pi x}{L}} f(x) dx = \dfrac{a_0}{2} \int_{-L}^L \cos{\dfrac{n \pi x}{L}} dx + a_n \int_{-L}^L \left( \cos{\dfrac{n \pi x}{L}} \cos{\dfrac{n\pi x}{L}} \right) dx $$
となる。$$\int_{-L}^L \cos{\dfrac{n \pi x}{L}} = 0$$ なので右辺第一項は 0 である。また、第二項は L となる ([[三角関数の直交性]] 参照)。よって、 式を整理すれば、 a,,n,, についての式が得られる。
$$\displaystyle a_n = \dfrac{1}{L} \int_{-L}^L f(x) \cos{\dfrac{n \pi x}{L}} dx$$
【式2】では、【式1】に出てくる変数としての x との混乱を避けるため、X を使用している (積分の中の記号なので、なんでもよい)。
!! b,,n,,
【式1】 の両辺に $$\sin{\dfrac{m \pi x}{L}} $$ を掛けてから -L から L まで積分し、a,,n,, と同様に式変形すると、b,,n,, が得られる。(途中の式変形では $$\int_{-L}^L \sin{\dfrac{n \pi x}{L}} = 0$$ を使う)
!! a,,0,,
f(x) の両辺を -L から L まで積分すると、
$$\displaystyle \int_{-L}^L f(x) = \int_{-L}^L \dfrac{a_0}{2} + \int_{-L}^L \sum_{n=1}^{\infty} \left( a_n \cos{\dfrac{n\pi x}{L}} + b_n \sin{\dfrac{n\pi x}{L}} \right)$$
となるが、$$\displaystyle \int_{-L}^L \cos{\dfrac{n \pi x}{L}} = \int_{-L}^L \sin{\dfrac{n \pi x}{L}} = 0$$ なので、右辺の第二項以降は全て 0 になる。
$$\displaystyle a_0 = \dfrac{1}{L} \int_{-L}^L f(x) dx$$
これは、【式2】に a = 0 を代入した時の値と一致する。
$$\displaystyle f(x) = \dfrac{1}{\pi} \int_0^{\infty} \left[ A(\omega) \cos(\omega x) + B(\omega) \sin(\omega x) \right] d\omega \ \ \ \ \ \ \ $$
$$\displaystyle \ \ \cdot \ A(\omega) = \int_{-\infty}^{\infty} f(u) \cos{(\omega u)} du \ \ \ \ \ \ \ $$ 【式2】
$$\displaystyle \ \ \cdot \ B(\omega) = \int_{-\infty}^{\infty} f(u) \sin{(\omega u)} du \ \ \ \ \ \ \ $$ 【式3】
; フーリエ積分定理
<<<
フーリエ積分の収束性については次の定理が知られている。
関数 f(x) が、以下の 2 つの条件、
# f(x) と f0 (x) が全区間 [−∞,∞] で区分的に連続
# f(x) が (−∞,∞) で絶対積分可能
を満たすならば、そのフーリエ積分は、
* f(x) が連続な点 x では f(x)
* f(x) が不連続な点 x では、$$\dfrac{1}{2} \left( f(x+0) + f(x-0) \right)$$
に収束する。
<<<
http://www.ics.kagoshima-u.ac.jp/edu/appmath2/supplement04.pdf
[[フーリエ級数]]では「有限の周期を持つ周期関数」を「三角関数の和」で表したが、''フーリエ変換では「無限の周期を持つ周期関数」を「三角関数の和」で表す''。
; Fourier 変換
$$\displaystyle \hat{f}(k) = \dfrac{1}{\sqrt{2\pi}} \int_{-\infty}^{\infty} f(x) e^{-i k x} dx \ \ \ \ $$ 【式1】
; Fourier 逆変換
$$\displaystyle f(x) = \dfrac{1}{\sqrt{2\pi}} \int_{-\infty}^{\infty} \hat{f}(k) e^{i k x} dk \ \ \ \ $$ 【式2】
[[複素フーリエ級数]] の式を [[区分求積法]] の形に変形し、その極限を取ることで $$(L \to \infty)$$ 、フーリエ変換の式が得られる。
*フーリエ級数展開に対応するのは,フーリエ変換じゃなくてフーリエ逆変換の方
*フーリエ変換は,フーリエ係数の計算の方に対応している
- - - - -
物理では、x は時間、k は角周波数に対応することになる。そのため、式の記号には、"t, ω" が使われていることもある。
---
! 導出
[[複素フーリエ級数]] の式に対して、
$$\displaystyle f(x) = \sum_{n=-\infty}^{\infty} \left[ \dfrac{1}{2L} \int_{-L}^L f(X) e^{-in\pi X/L} dX \right] e^{in\pi x/L}$$
$$k_n = \dfrac{n\pi}{L}$$ と定義し、これを代入する。
$$\displaystyle f(x) = \sum_{n=-\infty}^{\infty} \left[ \dfrac{1}{2L} \int_{-L}^L f(X) e^{-i k_n X} dX \right] e^{i k_n x}$$
ここで、 $$\Delta k = k_n - k_{n-l} = \dfrac{\pi}{L}$$ とすると、 $$\dfrac{1}{2L} = \dfrac{\Delta k}{2\pi}$$ なので、
$$\displaystyle f(x) = \dfrac{1}{2\pi} \sum_{n=-\infty}^{\infty} \Delta k \left[ \int_{-L}^L f(X) e^{-i k_n X} dX \right] e^{i k_n x}$$
と変形できる。
ここで、$$L \to \infty$$ とすると、$$\Delta k \to 0$$ なので、この式は [[区分求積法]] の形に変形できる。
$$\displaystyle f(x) = \dfrac{1}{2\pi} \lim_{L \to \infty} \sum_{n=-\infty}^{\infty} \Delta k \cdot g(\xi_i) = \dfrac{1}{2\pi} \int_{-\infty}^{\infty} g(k) dk$$
* $$\displaystyle g(\xi_n) = \left[ \int_{-L}^L f(X) e^{-i \xi_n X} dX \right] e^{i \xi_n x}$$
* $$k_{n-1} \leq \xi_n \leq k_n$$
つまり、この式は次のように書ける。
$$\displaystyle f(x) = \dfrac{1}{2\pi} \int_{-\infty}^{\infty} \left[ \int_{-\infty}^{\infty} f(X) e^{-i k X} dX \right] e^{i k x} dk$$
ここで、
$$\displaystyle \hat{f}(k) = \dfrac{1}{\sqrt{2\pi}} \int_{-\infty}^{\infty} f(X) e^{-i k X} dX $$
とおくと、$$f(x)$$ は次のように表せる。
$$\displaystyle f(x) = \dfrac{1}{\sqrt{2\pi}} \int_{-\infty}^{\infty} \hat{f}(k) e^{i k x} dk$$
なお、【式1】では、X を x に置き換えている (積分の中の記号なので、なんでもよい)。
! フガシティの導入
[[理想気体の化学ポテンシャル]] は、温度と物質量を固定した場合("dT = 0, dN = 0")、次のように表せる($$p_0$$ は基準圧力)。
$$\mu^{ig}(T,p) = \mu^{ig}(T, p_0) + RT \ln \left( \dfrac{p}{p_0} \right)$$ 【式1】
しかしながら、実在気体ではこの式は成立しない(ずれが生じる)。そこで、上の式が厳密に成立するように、p の部分を、補正した圧力と同じ次元を持つパラメータ $$f$$ で置き換えてしまう。
$$\mu^{rg}(T,p) = \mu^{rg}(T, p_0) + RT \ln \left( \dfrac{f(p)}{f(p_0)} \right)$$ 【式2】
こうすることで、実在気体を理想気体と同様に扱うことが可能になる。また、置き換えたパラメータ $$f$$ のことを、 ''フガシティ'' (fugacity) という。多成分系における成分 i のフガシティについては、理想気体の場合と同じように考えればよい。
$$\mu_i(T,p) = \mu_i(T, p^0_i) + RT \ln \left( \dfrac{f_i(p_i)}{f(p^0_i)} \right)$$
なお、この式をフガシティについて整理し、次のような形で表すこともある。
$$f_i = f^0_i \exp \left( \dfrac{\mu_i - \mu^0_i}{RT} \right)$$
* $$f^0_i$$: 基準圧力での (成分 i の) フガシティ
* $$\mu^0_i$$: 基準圧力での (成分 i の) 化学ポテンシャル $$(= \mu(T, p_0) )$$
!! 基準圧力について
基準圧力には、通常 1 気圧が使われる。なお、厳密に言えば、''基準圧力でのフガシティは、基準圧力と一致しない''。圧力とフガシティが一致するのは、あくまで $$p \to 0$$ の時である。
- - - - -
! フガシティ係数 と Residual Chemical potential
フガシティ と 圧力 の比を、''フガシティ係数'' (fugacity coefficient) という。
$$\phi_i := \dfrac{f_i}{p_i}$$
$$p \to 0$$ の時は、全てのガスが理想気体となるので、 $$\displaystyle \lim_{p \to 0} \phi = 1$$ である。
また、''Residual Chemical potential'' (実在気体と理想気体の化学ポテンシャルの差) は、フガシティ係数を用いて、次のように表せる(【式2】から【式1】を引き算する)。
$$\mu^R_i = \mu^{rg}_i - \mu^{ig}_i = RT \ln \left( \dfrac{f_i}{p_i} \right) = RT \ln ( \phi_i )$$
* [[What is Fugacity? - YouTube|https://www.youtube.com/watch?v=AMBoLiQJMFQ]]
* http://web.mit.edu/10.213/www/handouts/vle.pdf
---
! 気相でのフガシティ (単成分系)
理想気体と同様に扱えるようにフガシティを定義したので、実在気体も【式2】をベースに扱えばよい。
$$\mu(T,p) = \mu^0(T) + RT \ln \left( \dfrac{f}{f_0} \right)$$
微分形式で書くと、次のようになる。
$$d\mu = RT \cdot d \ln (f)$$
- - - - - - - - - - - - - - - - - - - -
! 飽和蒸気圧でのフガシティ(単成分)
等温の単成分の系では、相平衡時の圧力は一定であり、この圧力は ''飽和蒸気圧'' と呼ばれる。飽和蒸気圧における凝集過程 (気相 ⇒ 液相) でのギブスエネルギーの変化は実在気体でも 0 なので、
$$f^V(p_{sat}) = f^L(p_{sat})$$
が成り立つ。
!! 液相のフガシティの基準点
''液相のフガシティの基準点'' ($$f^L_0$$)は、「相平衡の時は気相と液相のフガシティが等しい ($$\mu^V = \mu^G$$ なので $$f^V = f^L$$ )」ことを利用して、飽和蒸気圧でのフガシティとすることが多い(温度によっては、飽和蒸気圧が決められない場合もあるので、絶対ではない)。
- - - - - - - - - - - - - - - - - - - -
! 液相のフガシティ (単成分)
液体のフガシティは、次のように式変形することができる。
$$f^L(p) = p_{sat} \cdot \dfrac{f^V (p_{sat})}{p_{sat}} \cdot \dfrac{f^L (p_{sat})}{f^V (p_{sat})} \cdot \dfrac{f^L(p)}{f^L (p_{sat})}$$
$$\displaystyle = p_{sat} \cdot \phi_{sat} \cdot \exp \left( \dfrac{1}{RT} \int_{p_{sat}}^p V^L_m dP \right) $$
''1つ目の分数'' は ''飽和蒸気圧におけるフガシティ係数'' ($$\phi_{sat}$$) であり、''2つ目の分数'' はどちらも飽和蒸気圧でのフガシティなので、値は ''1'' になる。
3つ目の分数の部分は ''Poynting Factor'' (F) と呼ばれ、【式2】と $$\displaystyle \int_{p_1}^{p_2} dG = \int_{p_1}^{p_2} V dp $$ の関係を使って
$$\displaystyle F := \dfrac{f^L(p)}{f^L (p_{sat})} = \exp \left( \dfrac{\mu(p) - \mu(p_{sat})}{RT} \right) = \exp \left( \dfrac{1}{RT} \int_{p_{sat}}^p V^L_m dp \right)$$
と変形される ($$V^L_m$$ は液体のモル体積)。ただ、圧力変化による $$V^L_m$$ の変化がはっきり分からないことが多く、その場合 Poynting Factor は、
$$\displaystyle F \approx \exp \left( \dfrac{V^L_{m,sat} (p - p_{sat})}{RT} \right)$$
として計算する。
!! 固相のフガシティ (単成分)
液相のフガシティの式を、固相に適用することもある。
$$\displaystyle f^S(p) = p_{sat} \cdot \phi_{sat} \cdot \exp \left( \dfrac{1}{RT} \int_{p_{sat}}^p V^S_m dP \right)
\approx p_{sat} \cdot \phi_{sat} \cdot \exp \left( \dfrac{V^S_{m,sat} (p - p_{sat})}{RT} \right)
$$
- - - - - - - - - - - - - - - - - - - -
! 溶液のフガシティ (多成分)
「''混合ギブスエネルギーが実在溶液と理想溶液では異なる''」ため、溶液のフガシティではこのギブスエネルギー (化学ポテンシャル) の差を考慮する必要がある。多くの場合、この差分は [[活量係数|活量]] を用いて取り扱う。
$$\gamma_i = \dfrac{f^{real}_i}{x_i f^{L,pure}_i} = \dfrac{f^{real}_i}{f^{id}_i} $$
---
! フガシティ係数の計算
!! フガシティの定式化
[[ギブスの自由エネルギー]]の式 $$ dG = S dT + V dP + \mu dN$$ に "dT = 0, dN = 0" を代入すると、 $$dG = V dP$$ という関係が得られ、この両辺を N で割ると、
$$d\mu = \dfrac{V}{N} dP = V_m dP$$
という式が得られる(Vm はモル体積)。この式に【式1】を代入すると、
$$ V_m dP = RT \cdot d \ln (f)$$
という関係が得られる。この式の f の部分をフガシティ係数に置き換えると、
$$V_m dP = RT \cdot d \ln(p \phi) = RT (d \ln(p) + d \ln(\phi)) = RT (\dfrac{dp}{p} + d \ln(\phi)) $$
と式を変形でき、これを整理すると、
$$RT \cdot d \ln(\phi) = (V_m - \dfrac{RT}{p}) \cdot dp $$
という関係が得られる。基準圧力からある圧力までの積分を行うと(温度一定)、
$$\displaystyle RT \int_{\phi_0}^{\phi} d \ln(\phi) = \int_{p_0}^p (V_m - \dfrac{RT}{p}) \cdot dp$$
である。
基準圧力を $$p_0 \to 0$$ とすると、 $$\phi_0 \to 1$$ なので、
$$\displaystyle \ln(\phi) = \dfrac{1}{RT} \int_{0}^p (V_m - \dfrac{RT}{p}) \cdot dp$$
という式が得られる。
---
! フラッシュ計算
Cubic EOS は $$V_m$$ に関して (最大) 3つの解を持つので、Vm = f(x) とまとめるよりも、 p = g(x) とまとめた式の方が、フラッシュ計算では扱いやすい。
$$\displaystyle RT (\ln(\phi) - \ln(\phi_0)) = \int_{p_0}^p V_m dP - RT \ln \left( \dfrac{p}{p_0} \right)$$
途中の式変形は省略。
$$\displaystyle \ln(\phi) = z - 1 - \dfrac{1}{RT} \int_{\infty}^{V_m} (p - \dfrac{RT}{V_m}) dV_m - \ln (z) $$
[[単成分系におけるフュガシティの定式化 – now♯|http://nowsharp.com/wiki/flash/%e5%8d%98%e6%88%90%e5%88%86%e7%b3%bb%e3%81%ab%e3%81%8a%e3%81%91%e3%82%8b%e3%83%95%e3%83%a5%e3%82%ac%e3%82%b7%e3%83%86%e3%82%a3%e3%81%ae%e5%ae%9a%e5%bc%8f%e5%8c%96]]
---
!Windowsでシェル
<<tiddler "Windowsでシェル">>
!ソースコード
* [[Blue Step Counter|http://bluecard.no-ip.com/freeware/bluestepcounter/]] ステップ数を調べる
* [[WinMerge 日本語版|http://www.geocities.co.jp/SiliconValley-SanJose/8165/winmerge.html]] テキスト比較 (マージ処理も可能)
* [[DF|http://www.vector.co.jp/soft/win95/util/se113286.html]] テキスト比較
* [[文字コード変換ツール「KanjiTranslator」|http://www.kashim.com/kanjitranslator/]]
** 文字コードをまとめて変換
* [[StepCounter - Project Amateras | http://amateras.sourceforge.jp/cgi-bin/fswiki/wiki.cgi?page=StepCounter ]]
** Lua のコードも数えられる
** - -[ [ - -]] 形式のコメントは未サポート
! Firefoxアドオン
<<tiddler "Firefoxアドオン">>
! Thunderbirdアドオン
<<tiddler "Thunderbirdアドオン">>
!テスト
* [[IETester |http://www.my-debugbar.com/wiki/IETester/HomePage]] いろんなバージョンのIEを同時にチェックできる
* [[soapUI | http://www.soapui.org/]]
* [[Website Explorer | http://www.umechando.com/webex/]] サイトのリンク切れをチェック
! 画像編集
* [[PictBear SE|http://sleipnir.pos.to/]] 画像編集ソフト (ベジェ以外はだいたいいけそう)
*[[ゆなカラーピッカー|http://www.uryusoft.com/software/YunaColor/]]
* [[Photoshopのプラグインとか|http://www.pentacom.jp/pentacom/products.html]] 画像の角を丸くするプラグインがある
* [[The Portable Freeware Collection - FastStone Capture | http://www.portablefreeware.com/?id=775]] スクリーンキャプチャ
** 説明 [[パソコンの操作マニュアル作成に!「FastStone Capture」 | http://plus.lunarscape.net/blog/2009/03/faststone_capture.html]]
! 動画編集ソフト
<<tiddler "動画編集ソフト">>
!ほか
* [[WinTree|http://www.hs-jp.com/aska/wintree/]] TREEコマンドの豪華なやつ
* [[DVD-RAMのフォーマッタ |http://www.csd.toshiba.com/cgi-bin/tais/support/jsp/download.jsp?soid=1134400#]]
* [[タイプ数カウンター|http://www.vector.co.jp/soft/win95/util/se399353.html]]
* [[BurnAware Free | http://www.burnaware.com/burnaware_free.html]] CDのライティングソフト
* [[Wireshark |http://sourceforge.jp/projects/wireshark/releases/]]
* [[Resource Hacker|http://angusj.com/resourcehacker/]] EXEに埋め込まれたリソースがみれる
** manifest をチェック
* [[Dependency Walker (depends.exe) |http://www.dependencywalker.com/]] EXE が必要とするDLLのチェック
* [[BunBackup|http://homepage3.nifty.com/nagatsuki/bunbackup/bunbackup.htm]]
** バックアップソフト
* [[換算君|http://www.vector.co.jp/soft/win95/business/se326048.html]]
** 単位変換
* [[CLCL|http://www.nakka.com/soft/clcl/]]
** クリップボードの複数履歴
; 無償で商用利用できるフォント
* [[出島フォント|http://code.google.com/p/dejima-fonts/]]
** 一つこういう字体が入っていてもよいかな。という感じ。
* [[Axisフォント (試用版)|http://www.typeproject.com/trial/]]
** 使える文字に制限あり
* [[青柳衡山 無料フォント集 | http://musashi.or.tv/aoyagikouzanfont.htm]]
** 未使用
* [[和田研細丸ゴシック Wiki - SourceForge.JP | http://sourceforge.jp/projects/jis2004/wiki/FrontPage]]
* [[ロールズプロジェクト | http://makufont.dip.jp/]]
** 難しい漢字 (麒麟とか,,,) は、入ってない
** 多分、、商用利用可
----
* [[freefont | http://wiki.fdiary.net/font/?freefont]]
* [[無償で商用利用できて品質の高い日本語フォント一覧 - Liner Note|http://note.openvista.jp/2007/japanese-fonts-for-free-commercial-use/]]
* [[無料で使える日本語フォント11選 DesignWalker|http://www.designwalker.com/2007/03/jp-font.html]]
* [[| ドケチなのに良質な無料漢字フォントを探している人向けフォント大全集 |http://www.yukawanet.com/archives/1520240.html]]
* [[WebFonts として利用できるフリーの和文フォント | ヨモツネット | http://www.yomotsu.net/wp/?p=565]]
; 好きに使ってよさげ
* [[ソザイヂテン|http://www.sozaijiten-business.rash.jp/index.html]]
* [[持田製薬 メディカルイラスト|http://www.mochida.co.jp/dis/material/illust/index.html]]
* [[無料素材 WEB素材-Memory|http://ao777.blog64.fc2.com/]]
* [[クリップアートファクトリー |http://www.printout.jp/clipart/]]
; 使うのはまずそう
* [[GANREF (写真検索) |http://ganref.jp/photo_searches]]
* [[羊の壁紙(羊の写真)|http://www5e.biglobe.ne.jp/~shops/photo/hitsuji/kabegami.html]]
* [[クリップアートファクトリー 全部無料で使えるテンプレート&素材集のダウンロードサイト | http://www.printout.jp/clipart/ ]]
<<list-links filter:[tag[プログラミング言語]] >>
;未確認
* [[プログラミング作法: ブライアン カーニハン, ロブ パイク, Brian Kernighan, Rob Pike, 福崎 俊博| http://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E4%BD%9C%E6%B3%95-%E3%83%96%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3-%E3%82%AB%E3%83%BC%E3%83%8B%E3%83%8F%E3%83%B3/dp/4756136494/ref=sr_1_1?ie=UTF8&s=books&qid=1264565160&sr=8-1 ]]
* [[計算機プログラムの構造と解釈 |http://www.amazon.co.jp/exec/obidos/ASIN/489471163X/higepon-22/ref=nosim/]]
* [[Linuxのブートプロセスをみる (UNIXMAGAZINE COLLECTION): 白崎 博生|http://www.amazon.co.jp/Linux%E3%81%AE%E3%83%96%E3%83%BC%E3%83%88%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%82%92%E3%81%BF%E3%82%8B-UNIXMAGAZINE-COLLECTION-%E7%99%BD%E5%B4%8E-%E5%8D%9A%E7%94%9F/dp/4756144519/ref=sr_1_3?ie=UTF8&s=books&qid=1234281630&sr=8-3]]
* [[Java RMI: ウィリアム グロッソ, William Grosso, 田和 勝|http://www.amazon.co.jp/Java-RMI-%E3%82%A6%E3%82%A3%E3%83%AA%E3%82%A2%E3%83%A0-%E3%82%B0%E3%83%AD%E3%83%83%E3%82%BD/dp/4873110866/ref=sr_1_1?ie=UTF8&s=books&qid=1243388453&sr=8-1]]
** RMI がどう実装されているかの説明が載ってるかを、そのうち確認
;よかった
* [[make 改訂版: Andrew Oram, Steve Talbott, 矢吹 道郎, 菊池 彰|http://www.amazon.co.jp/make-%E6%94%B9%E8%A8%82%E7%89%88-Andrew-Oram/dp/4900900605/ref=sr_1_8?ie=UTF8&s=books&qid=1282316819&sr=8-8]]
* [[Perlベストプラクティス: Damian Conway, クイープ | http://www.amazon.co.jp/Perl%E3%83%99%E3%82%B9%E3%83%88%E3%83%97%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3%E3%82%B9-Damian-Conway/dp/4873113008/ref=sr_1_1?ie=UTF8&s=books&qid=1263274614&sr=8-1 ]]
** Perl以外のコーディングルールを作る場合にも役に立つ
** インサイドアウトオブジェクト
* [[センス・オブ・プログラミング! 抽象的に考えること・データ構造を理解すること: 前橋 和弥|http://www.amazon.co.jp/%E3%82%BB%E3%83%B3%E3%82%B9%E3%83%BB%E3%82%AA%E3%83%96%E3%83%BB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E6%8A%BD%E8%B1%A1%E7%9A%84%E3%81%AB%E8%80%83%E3%81%88%E3%82%8B%E3%81%93%E3%81%A8%E3%83%BB%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0%E3%82%92%E7%90%86%E8%A7%A3%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8-%E5%89%8D%E6%A9%8B-%E5%92%8C%E5%BC%A5/dp/4774121738/ref=sr_1_3?s=books&ie=UTF8&qid=1282317102&sr=1-3]]
;ふつう
* [[JavaScript 第5版: David Flanagan, 村上 列|http://www.amazon.co.jp/JavaScript-%E7%AC%AC5%E7%89%88-David-Flanagan/dp/4873113296/ref=sr_1_1?ie=UTF8&s=books&qid=1230092168&sr=8-1]]
* [[Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版): Mike Mason, でびあんぐる|http://www.amazon.co.jp/Subversion%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80-%E9%81%94%E4%BA%BA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AB%E5%AD%A6%E3%81%B6%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%AE%A1%E7%90%86-%E7%AC%AC2%E7%89%88-Mike-Mason/dp/4274066800/ref=sr_1_1?ie=UTF8&s=books&qid=1282317486&sr=8-1]]
* [[組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド: MISRA‐C研究会|http://www.amazon.co.jp/%E7%B5%84%E8%BE%BC%E3%81%BF%E9%96%8B%E7%99%BA%E8%80%85%E3%81%AB%E3%81%8A%E3%81%8F%E3%82%8BMISRA%E2%80%90C-2004%E2%80%95C%E8%A8%80%E8%AA%9E%E5%88%A9%E7%94%A8%E3%81%AE%E9%AB%98%E4%BF%A1%E9%A0%BC%E5%8C%96%E3%82%AC%E3%82%A4%E3%83%89-MISRA%E2%80%90C%E7%A0%94%E7%A9%B6%E4%BC%9A/dp/4542503461/ref=sr_1_1?ie=UTF8&s=books&qid=1282317580&sr=8-1]]
** 組み込みはほとんどやってないので、なんともいえないが...
;リファレンス
* [[Web標準の教科書―XHTMLとCSSでつくる“正しい”Webサイト: 益子 貴寛|http://www.amazon.co.jp/Web%E6%A8%99%E6%BA%96%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8%E2%80%95XHTML%E3%81%A8CSS%E3%81%A7%E3%81%A4%E3%81%8F%E3%82%8B%E2%80%9C%E6%AD%A3%E3%81%97%E3%81%84%E2%80%9DWeb%E3%82%B5%E3%82%A4%E3%83%88-%E7%9B%8A%E5%AD%90-%E8%B2%B4%E5%AF%9B/dp/4798010928/ref=sr_1_2?ie=UTF8&s=books&qid=1282317381&sr=8-2]]
* [[プログラミング言語C 第2版 ANSI規格準拠: B.W. カーニハン, D.M. リッチー, 石田 晴久|http://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9EC-%E7%AC%AC2%E7%89%88-ANSI%E8%A6%8F%E6%A0%BC%E6%BA%96%E6%8B%A0-B-W-%E3%82%AB%E3%83%BC%E3%83%8B%E3%83%8F%E3%83%B3/dp/4320026926/ref=sr_1_3?ie=UTF8&s=books&qid=1282317311&sr=8-3]]
; CVS や Subversion の場合
プロジェクトの配下に、以下の3つのディレクトリを作成しておく。
* trunk
** 開発のメインライン
* branches
** ブランチがあれこれ入る
* tags
; 分散型の場合
;各プロジェクトのディレクトリ構成
|README.txt |プロジェクトの概要 |
|BUILDING.txt |ビルド・実行方法 (実行環境なども) |
|GLOSSARY.txt |専門用語 |
|doc |プロジェクトに関するドキュメント (外部ドキュメントの参照先についての情報も) |
|src |ソースコード |
|lib |プロジェクトで使用するサードパーティのライブラリなど |
|sql |データベースの初期化スクリプトなど |
|data |設定ファイル や テストデータ など |
|tools |プロジェクトで使用するユーティリティプログラム(スクリプト) |
「Subversion実践入門」 の 「9.2 プロジェクト内の構造」 を参考にした。
; JAKARTAのディレクトリ構成
* [[JAKARTA-TAGLIBS のソース配布物の使用について | http://www.jajakarta.org/taglibs/doc-ja/sourcedist.html ]]
* [[The Jakarta Site - Jakarta Directory Layout | http://jakarta.apache.org/site/dirlayout.html ]]
* [[ブロックチェーンの合意形成アルゴリズム|https://www.jstage.jst.go.jp/article/bplus/14/1/14_19/_pdf]]
二つの分子の間にはたらく力(引力と斥力)が、分子(あるいはイオン)の種類と二つの分子の間の距離だけで決まるとする単純化されたモデル。
「分子間の距離」以外に必要となるパラメータは、
* 分子の大きさ
* ポテンシャルの大きさ
であり、これらの値は、分子の種類によって異なる。
---
! Hard sphere Potential
分子を剛体の球として扱うモデル。分子間の引力は扱わない(無視する)。
$$\phi(r) = \begin{cases} \infty & (r < \sigma) \\ 0 & (r \geq \sigma) \end{cases} $$
* $$\phi$$: 分子間のポテンシャルエネルギー
* r: 分子間の距離
* $$\sigma$$: 分子の直径
2つの分子が異なる場合、σ には2つの分子の直径の算術平均を用いる。
$$\sigma_{12} = \dfrac{\sigma_1 + \sigma_2}{2} $$
! Square Well Potential
引力を考慮したモデル。
分子は剛体の球として扱い、その球の周りの一定領域でだけ引力が働くと考える。
$$\phi(r) = \begin{cases} \infty & (r < \sigma) \\ - \epsilon & (\sigma \leq r < g\sigma) \\ 0 & (r \geq g\sigma) \end{cases} $$
$$\epsilon$$ は potential well の深さを表す。g の値には 1.5 もしくは 2.0 がよく使われる。
このモデルでは、分子にかかる力 (F) は r = σ (F = ∞), r = gσ (F = -∞)を除いて 0 である。
! Lennard Jones Potential
(分子間の) 引力は距離の -6 乗に、斥力は 距離の -12 乗に比例するとした semi-empirical なモデル。
$$\displaystyle \phi(r) = 4 \epsilon \left[ \left( \dfrac{\sigma}{r} \right)^{12} - \left( \dfrac{\sigma}{r} \right)^{6} \right] $$
* $$\epsilon$$: depth of potential well
* $$\sigma$$: ポテンシャルエネルギーが0となる距離 (平均分子間距離に対応する)
!! 2つの分子が異なる場合
$$\sigma_{12} = \dfrac{\sigma_1 + \sigma_2}{2} $$
$$\epsilon_{12} = (1 - k_{12}) \sqrt{\epsilon_1 \epsilon_2}$$
この関係をローレンツ・ベルテロ Lorentz-Berthelot の組み合わせ則と呼びます。
$$k_{12}$$ は binary interaction parameter と呼ばれる。Fitting がうまくいかない時以外は、 $$k_{12} = 0$$ とする。
---
http://www.crl.nitech.ac.jp/~ida/education/MaterialsDesign/2520.html
! ベイズの定理
[[条件付き確率]] $$P(B|A)$$ は、次のように表せる。
:$$P(A|B) = \dfrac{P(B|A)P(A)}{P(B)} $$
また、ベイズ統計では、''A を原因''、''Bを結果'' と見なして考えることが多いらしい。
* $$P(A|B) : \ $$事後分布 (結果 B が与えられた時に原因 A を推定する確率 )
* $$P(B|A) : \ $$尤度関数 (カーネルと言います。原因( A )と結果(B)を紐づけている部分)
* $$P(A) : \ $$ 事前分布 (原因についての ''事前知識'' の確率分布)
* $$P(B) : \ $$ エビデンス (事後分布の規格化定数)
ベイズの定理の中では、事前分布の決め方には任意性がある。
- - - - -
!! 導出
[[条件付き確率]] の定義より $$P(B|A) = \dfrac{P(A \cap B)}{P(A)} $$ なので、
:$$P(A \cap B) = P(B|A) P(A) $$
これを $$P(A|B)$$ の定義に代入すると、ベイズの定理が得られる。
:$$P(A|B) = \dfrac{P(A \cap B)}{P(B)} = \dfrac{P(B|A)P(A)}{P(B)}$$
- - - - -
!! 例
例えば、次のように確率を割り当てる:
# 病気に罹患している確率 (''原因'') $$: P(A)$$
# 検査で陽性になる確率 (''結果'') $$: P(B)$$
# 実際に罹患している人が検査で陽性となる確率 (''真陽性率'') $$: P(B | A)$$
# 検査で陽性になった人が実際に罹患している確率 $$: P(A | B)$$
''もし 1,2,3 が分かれば'' (信頼できるデータが存在するかはまた別の問題)、''4 は推定できる''。
https://bellcurve.jp/statistics/course/6448.html
----
! ベイズ更新
事後確率を事前確率として更新
*https://yosshiblog.jp/%E3%83%99%E3%82%A4%E3%82%BA%E3%81%AE%E5%AE%9A%E7%90%86%E3%81%A8%E4%BA%8B%E5%89%8D%E5%88%86%E5%B8%83%E3%83%BB%E4%BA%8B%E5%BE%8C%E5%88%86%E5%B8%83%E3%83%BB%E3%83%99%E3%82%A4%E3%82%BA%E6%9B%B4%E6%96%B0/
*http://web.sfc.keio.ac.jp/~maunz/BS14/BS14-05_GC.pdf
----
https://obgynai.com/bayesian-update/
<<tag "ベクトル">>
----
! [[ベクトル空間]]
ざっくり言うと、以下の条件を満たすような集合。
* $$ (u + v) + w = u + (v + w) $$
* $$ u + v = v + u $$
* $$ u + 0 = 0 + u = u $$
* $$ u + (-u) = 0 $$
* $$ \alpha (\beta u) = (\alpha \beta) u $$
* $$ (\alpha + \beta) u = \alpha u + \beta u $$
* $$ \alpha (u + v) = \alpha u + \alpha v $$
* $$ 1u = u $$
!! [[ベクトルの基底と次元]]
次の2つの条件を満たすベクトル空間 V の部分集合を、''基底'' という。
# V に属する全てのベクトルは、基底に属するベクトルの ''線形結合(一次結合)'' によって表すことができる。
# その線形結合の表し方は、一通りしかない。
そして、基底に含まれるベクトルの数を '''次元'' という。
! [[計量ベクトル空間]]
[[内積]]を備えたベクトル空間。
[[内積]]が入ることで、[[ノルム]] や 直交 が定義される。
!! [[内積]]
体 F 上の ベクトル空間 V の内積は、次の性質を満たす写像として定義される。
$$\langle \cdot , \cdot \rangle : V \times V \to F $$
* ''線形性1'': $$ (u + v, w) = (u, w) + (v, w) $$
* ''線形性2'': $$ (\alpha u, v) = \overline{\alpha} (u, v), \ \ \ \ (u, \beta v) = \beta (u, v) $$
* ''エルミート対称性'': $$ (u,v) = \overline{(v,u)} $$
* ''正値性'': $$ (u, u) \geq 0 \ \ \ \ \ [ (u, u) = 0 \Rightarrow u = 0] $$
!! 直交
内積が 0 になるとき「''直交する''」という。
!! 単位ベクトル
ノルム (長さ) が 1 のベクトルのことを、''単位ベクトル'' という。
! [[外積]]
特定の次元でのみ定義可能なベクトルの積。基本的には、3次元の場合だけ考えればよい。外積は閉じた演算である。
$$A \times B = \begin{pmatrix} a_1 \\ a_2 \\ a_3 \end{pmatrix} \times \begin{pmatrix} b_1 \\ b_2 \\ b_3 \end{pmatrix} = \begin{pmatrix} a_2 b_3 - a_3 b_2 \\ a_3 b_1 - a_1 b_3 \\ a_1 b_2 - a_2 b_1 \end{pmatrix} $$
----
! 座標上のベクトル
ベクトルに「向きと距離」の意味を持たせる場合には、座標が必要になる。座標は大きく分けて ''直線座標系'' と ''曲線座標系'' の2つがあり、ベクトルの取り扱い方が異なる。
!! [[直線座標系]]
座標軸が直線で構成されている座標系。
* どの位置においても基底は同じ
* [[直線座標系の座標変換]] は、線形変換になる
* 座標軸同士が直交する場合を ''直交系'' という
!! [[曲線座標系]]
* 位置によって基底が変わる
** (ある点における) 基底はその点を通る座標曲線に接するベクトル
** このような基底を ''自然基底'' という
* (物理でよく使う) 極座標・球座標・円筒座標では、基底が常に直交する
!!! ''自然基底''
正規直交座標系 $$\sum = \{ e_x, e_y, e_z \}$$ 上で $$(x,y,z)$$ という座標で表される点Pを、別の(曲線)座標系 $$\sum' = \{ e'_u, e'_v, e'_w \}$$ の座標 $$(u,v,w)$$ で表すことを考える。成分の変換関数を $$f$$ を、
:$$(x, y, z) = (f_x(u,v,w), f_y(u,v,w), f_z(u,v,w))$$
とした時、点Pにおける曲線座標 $$\sum'$$ の ''自然基底'' は
:$$\displaystyle \ \ e'_{a} = \sum_{i=1}^{3} \dfrac{\partial f_{x^i}}{\partial u^a} e_i = A^i_a e_i$$
と表され、自然基底上のベクトル成分は、
:$$\displaystyle \ \ u^{a} = \bar{A}^a_i x^i$$
と表せる (はず) (この成分は曲線座標上での成分とは異なる点に注意)。
----
! 共変・反変ベクトル
正規直交座標系以外を扱う際に必要となる。
あるベクトル空間 V の双対空間 V* の元を ''共変ベクトル'' といい、V の元を ''反変ベクトル'' という。正規直交座標では、 V と V* は一致する。
!! [[双対空間]]
体 F 上の、任意のベクトル空間 V 上の線型汎函数 $$\phi: V \to F$$ 全体の成す空間 $$V^*$$ を、''双対空間 (dual space)'' あるいは ''双対ベクトル空間'' という。
$$V^*$$ は F上のベクトル空間となるため、加法とスカラー乗法ができる $$(\phi, \psi \in V^*, x \in V, a \in F)$$ 。
* $$(\phi + \psi) (x) = \phi(x) + \psi(x)$$
* $$(a \phi) (x) = a (\phi(x))$$
また、双対空間の基底 $$f^i$$ は、$$V$$ の基底 $$e_j$$ に対し、次の関係が成り立つように定義される。
: $$\langle f^i , e_j \rangle = f^i (e_j) = \delta^{i}_{j}$$
!! 直線座標系の座標変換
基底 $$e$$ から $$e'$$ への線形変換を行列 $${A^i}_j$$ の積で表した場合、反変ベクトルの成分変換はその逆行列 $${\bar{A}^j}_i$$ の積で表せる。
* $$e'_j = {A^i}_j e_i $$
* $${v'}^j = {\bar{A}^j}_i {v}^i$$
さらにこのとき、双対空間の基底 $$f^i$$ の変換は $${\bar{A}^j}_i$$ の積に、共変ベクトルの成分変換は $${A^i}_j$$ の積 になる。
* $${f'}^j = {\bar{A}^j}_i f^i $$
* $${w'}_j = {A^i}_j {w}_i$$
なお、共変的な成分は下付き、反変的な成分は上付きで書き、同じ添え字が上下にある場合は縮約をとる。
----
! 計算例
!! 数ベクトル空間
!!! 和
$$ \left( \begin{array}{c} x_1 \\ x_2 \\ \vdots \\ x_n \end{array} \right) +
\left( \begin{array}{c} y_1 \\ y_2 \\ \vdots \\ y_n \end{array} \right) =
\left( \begin{array}{c} x_1 + y_1 \\ x_2 + y_2 \\ \vdots \\ x_n + y_n \end{array} \right) $$
!!! スカラー倍
$$ \alpha \left( \begin{array}{c} x_1 \\ x_2 \\ \vdots \\ x_n \end{array} \right) =
\left( \begin{array}{c} \alpha x_1 \\ \alpha x_2 \\ \vdots \\ \alpha x_n \end{array} \right) $$
! ベクトル空間 (大雑把な説明)
$$\mathcal{F}$$ を「実数を複素数に結びつける関数からなる集合」とし、$$\mathcal{F}$$ の任意の2つの要素 $$(F, G \in \mathcal{F})$$ の間に、加法とスカラー倍を次のように定義する $$(x \in \mathbb{R})$$。
$$[F \dot{+} G]: x \to F(x) + G(x)$$
$$[\alpha * F]: x \to \alpha F(x)$$
ここで、「$$F, G$$ を無限個の成分を持ち、各成分が x によって対応付けられる」と考えると、この定義を含む $$\mathcal{F}$$ は、ベクトル空間になる (と思う)。
! 内積
無限次元のベクトルの [[標準内積]] は、
$$\displaystyle \sum_{n \in \mathbb{Z}} {a_n}^* b_n $$
と与えられる(*は複素共役)。
各成分 x によって対応付けられていると考えると、関数の場合には $${a_n}^* b_n$$ の部分は、積分で表せそう。
$$\displaystyle \int [F(x)]^* G(x) dx$$
! 直交性
https://sci-tech.ksc.kwansei.ac.jp/~okamura/anonymous/lecture/QM/note/vector.pdf
---
$$\dot{+}: <F(x), G(x)> \to F(x) + G(x) $$
! 基底
ベクトル空間 $$V$$ に属するベクトルの集合 $$ \{ v_1, v_2, ... , v_n \}$$で、以下の2つの条件を満たすものを、「Vの基底である」という。
!! 条件①: 一次結合
$$V$$ に属する任意のベクトル $$v$$ が、あるスカラー $$a_1, a_2, ... a_n $$ により以下のように表せる。
$$ v = a_1 v_1 + a_2 v_2 + ... + a_n v_n = (v_1, v_2, ... , v_n) \begin{pmatrix} a_1 \\ a_2 \\ \vdots \\ a_n \end{pmatrix}$$
!! 条件②: 一次独立
条件①の表し方は、一通りしかない。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!!! ''座標値''
$$R^n$$ の元 $$(a_1, a_2, ... , a_n)$$ を V の基底に関する ''座標値'' (coordinate value) という。
----
! 次元
基底のベクトルの本数 n のことを ''次元'' といい、$$\dim V$$ と表記する。
また、$$V$$を、「n次元ベクトル空間」という。
----
! 線形独立・一次独立
!! 線形結合
ベクトルの集合 $$ \{ u_1, u_2, ... , u_n \}$$ に対して、それぞれにスカラーをかけて足し上げたものを、「線形結合」あるいは「一次結合」という。
$$ \sum_{i=1}^n a_i u_i = a_1 u_1 + a_2 u_2 + ... a_n u_n $$
!! 線形従属
ベクトル $$ u_1, u_2, ... , u_n $$ について、どれか一つを他のいくつかのベクトルの線形結合で表すことができる時、これらのベクトルは「線形従属」あるいは「一次従属」であるという。
!! 線形独立
線形従属の否定を、「線形独立」あるいは「一次独立」という。
----
! 標準基底
直交座標系の各軸方向に向かう単位ベクトルからなるユークリッド空間の基底を、''標準基底''という。
$$e_x = (1,0,0), e_y = (0,1,0), e_z = (0,0,1)$$
標準基底は単位ベクトルからなる正規直交系を成すが、[[正規直交基底]] は必ずしも標準基底ではない。
---
http://www.math.titech.ac.jp/~kawahira/courses/kiso/01-senkei.pdf
ここでは、物理と関係しそうなことだけまとめる。
----
! ベクトル解析
ベクトル場・テンソル場にも、微分の概念は拡張される。
!! 1. [[勾配 (gradient)|grad]]
二つ以上の変数を持つ ''スカラー関数'' の、ある点における''最大の勾配を表すベクトル'' (「スカラー ⇒ ベクトル」という関係に注意)。例えば、あるスカラー関数 $$f(x,y)$$ の勾配は、正規直交基底 (e,,x,,, e,,y,,) を用いて次のように表わせる。
:$$\nabla f = \mathrm{grad} (f) = e_x \dfrac{\partial}{\partial x} f(x, y) + e_y \dfrac{\partial}{\partial y} f(x, y)$$
より一般的に言えば、$$\nabla f$$ は共変ベクトルであり、以下の関係を満たすものとして定義できる (''x'', ''v'' はベクトルで、D,,v,, は [[方向微分]])。
:$${\big (}\nabla f(\mathbf{x}){\big )}\cdot \mathbf {v} = {(\nabla_i f)} v^i = D_{\mathbf {v} }f(\mathbf{x})$$
!! 2. [[発散 (divergence)|div]]
ある点(微小領域)を出入りする流束の正味の量。連続で微分可能なベクトル場 ''A'' の 点 p における発散は、次のように定義される。
:$$\displaystyle \nabla \cdot \mathbf{A} = \mathrm{div} \mathbf{A}|_p = \lim_{V \to p} \iint_{S(V)} \dfrac{\mathbf{A} \cdot \mathbf{n}}{|V|} dS$$
三次元の正規直交座標では、次のように表すことができる。
:$$\displaystyle \nabla \cdot \mathbf{A} = \mathrm{div} \mathbf{A}|_p = \dfrac{\partial A_x}{\partial x} + \dfrac{\partial A_y}{\partial y} + \dfrac{\partial A_z}{\partial z} = \sum_i \dfrac{\partial A_i}{\partial x_i}$$
!! 3. [[回転 (rot)|rot]]
すごく雑に言うと、(ベクトル場 ''A'' における) 回転の向きと大きさを軸ベクトル (擬ベクトル) で表したもの。
:$$\displaystyle \nabla \times \mathbf{A} = \mathrm{rot} \mathbf{A} = \begin{pmatrix} \frac{\partial}{\partial x} \\ \frac{\partial}{\partial y} \\ \frac{\partial}{\partial z} \end{pmatrix} \times \begin{pmatrix} A_x \\ A_y \\ A_z \end{pmatrix} = \left({\dfrac {\partial A_{z}}{\partial y}}-{\dfrac {\partial A_{y}}{\partial z}}\right) e_x +\left({\dfrac {\partial A_{x}}{\partial z}}-{\dfrac {\partial A_{z}}{\partial x}}\right) e_y +\left({\dfrac {\partial A_{y}}{\partial x}} - {\dfrac {\partial A_{x}}{\partial y}}\right) e_z$$
各成分は、基底ベクトルを回転軸としたときの角速度の2倍になっている。
- - - - -
より一般的な定義としては、ベクトル場 ''F'' 内の点 p の回転 $$ (\nabla \times \mathbf {F} )$$ は、次の関係を満たすものとして定義される。
: $${\displaystyle (\nabla \times \mathbf {F} )(p)\cdot \mathbf {\hat {u}} \ {\overset {\underset {\mathrm {def} }{}}{{}={}}}\lim _{A\to 0}{\frac {1}{|A|}}\oint _{C}\mathbf {F} \cdot \mathrm {d} \mathbf {r} }$$
$$\hat {u}$$ は任意の単位ベクトルで、右辺の経路積分は $$\hat {u}$$ に直交する面上の 点p 近傍の領域の境界を経路とし、$$|A|$$ はその領域の面積である。
---
!! [[ナブラ・ラプラシアン]]
ベクトル関数が出てくるときは、この記号を使って式を表すことがある。主な使い方は次の4つ。
* grad: $$\nabla \phi$$
* div: $$\nabla \cdot A$$
* rot: $$\nabla \times A$$
* 方向微分: $$u \cdot \nabla$$
http://www.math.titech.ac.jp/~kawahira/courses/15W-kaiseki.pdf
$${\bf F}: K \to K^n$$ となるような関数を、''ベクトル関数'' という。
---
! ベクトル関数に関わる定義
!! 極限
<<<
ベクトル関数 $$ {\bf F}(t)$$ において, $$ t \to t_{0}$$ のとき, $$ {\bf F}(t) \rightarrow {\bf L}$$ ならば, $$ {\bf F}(t)$$ の極限値は $$ {\bf L}$$ であるといい,次のように表わす.
$$\displaystyle \lim_{t \rightarrow t_{0}}{\bf F}(t) = {\bf L} $$
<<<
[[ベクトル関数(vector functions)|http://www.geil.co.jp/MULTIMEDIA/calc/node40.html]]
!! 連続
<<<
$$\displaystyle \lim_{t \to t_{0}}{\bf F}(t) = {\bf F}(t_{0})$$ が成り立つとき,ベクトル関数 $$ {\bf F}(t)$$ は $$ t = t_{0}$$ で連続であるという.
また,区間 $$[a,b]$$ のすべての $$t$$ で連続なとき, $$ {\bf F}(t)$$ は区間 $$ [a,b]$$ で連続であるといい, $$ {\bf F}(t) \in C[a,b]$$ と表わす.
<<<
[[ベクトル関数(vector functions)|http://www.geil.co.jp/MULTIMEDIA/calc/node40.html]]
!! 微分可能
<<<
ベクトル関数 $$ {\bf F}(t)$$ は $$ t = t_{0}$$ において,
$$\displaystyle \lim_{t \rightarrow t_{0}}\frac{{\bf F}(t) - {\bf F}(t_{0})}{t - t_{0}} = {\bf A} $$
が存在するとき $$t = t_{0}$$ で微分可能(differentiable) であるという.
また,この極限値 $$ {\bf A}$$ を点 $$t_{0}$$ における微分係数といい, $$ {\bf F}^{\prime}(t_{0})$$ で表わす.
<<<
[[ベクトル関数(vector functions)|http://www.geil.co.jp/MULTIMEDIA/calc/node40.html]]
! 一変数関数の場合
[[ベクトル関数]] $$\mathbf{F}: \mathbb{R} \to \mathbb{R}^m $$ を、 $$\mathbf{F}(t)$$ と表すとする (t はスカラー)。
このとき、関数 $$\mathbf{F}(t)$$ の微分は、次のように定義される。
:$$\displaystyle \dfrac{d \mathbf{F}}{dt} \equiv \lim_{h \to 0} \dfrac{\mathbf{F}(t +h) - \mathbf{F}(t)}{h}$$
実際の計算は、$$\mathbf{F}$$ は m次元 のベクトルを返すので、
:$$\displaystyle \dfrac{d \mathbf{F}}{dt} = \left( \lim_{h \to 0} \dfrac{f_1(t +h) - f_1(t)}{h} \ \ldots \ \ \lim_{h \to 0} \dfrac{f_m(t +h) - f_m(t)}{h} \right)$$
という計算をすることになる。上式内の $$f$$ は、 $$\mathbf{F}(t) = (f_1(t) \ldots f_m(t))$$ を意味する。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
! 多変数関数の場合
!! 偏微分
[[ベクトル関数]] $$\mathbf{F}: \mathbb{R}^n \to \mathbb{R}^m $$ を、 $$\mathbf{F}(t_1, t_2 \ldots , t_n)$$ と表すとする。
このとき、ベクトル関数 $$\mathbf{F}$$ の偏微分は、次のように定義される ($$1 \leq i \leq n$$)。
:$$\displaystyle \dfrac{\partial \mathbf{F}}{\partial t_i} \equiv \lim_{h \to 0} \dfrac{\mathbf{F}(t_1, \ldots t_i + h, \ldots , t_n) - \mathbf{F}(t_1, \ldots t_i, \ldots , t_n)}{h}$$
実際の具体的な計算では、$$\mathbf{F}$$ は n次元 のベクトルを返すので、
:$$\displaystyle \dfrac{\partial \mathbf{F}}{\partial t_i} = \left( \lim_{h \to 0} \dfrac{f_1(t_1, \ldots t_i + h, \ldots , t_n) - f_1(t_1, \ldots t_i, \ldots , t_n)}{h} \ \ldots \ \ \lim_{h \to 0} \dfrac{f_m(t_1, \ldots t_i + h, \ldots , t_n) - f_n(t_1, \ldots t_i, \ldots , t_n)}{h} \right)$$
という計算をすることになる。
!! 全微分
: $$\displaystyle d \mathbf{F} \equiv \dfrac{d \mathbf{F}}{dt_1} \Delta t_1 + \dfrac{d \mathbf{F}}{dt_2} \Delta t_2 + \cdots + \dfrac{d \mathbf{F}}{dt_n} \Delta t_n $$
この定義は、[[ヤコビ行列]] と ベクトル Δt の積に分解できる。
: $$ d \mathbf{F} = \begin{pmatrix} d \mathbf{F_1} \\ \\ \vdots \\ \\ d \mathbf{F_m} \end{pmatrix} = \begin{pmatrix} \left( \dfrac{\partial \mathbf{F}}{\partial t_1} \right)_1& \ldots & \left( \dfrac{\partial \mathbf{F}}{\partial t_n} \right)_1\\ \\ \vdots & \ddots & \vdots \\ \\ \left( \dfrac{\partial \mathbf{F}}{\partial t_1}\right)_m & \ldots & \left( \dfrac{\partial \mathbf{F}}{\partial t_n} \right)_m \end{pmatrix} \begin{pmatrix} \Delta t_1 \\ \\ \vdots \\ \\ \Delta t_n \end{pmatrix} $$
* http://202.13.160.14/math/category/bibun/henbibun/henkan-tex.cgi?target=/math/category/bibun/henbibun/Jacobian.html
!! 方向微分
---
! 導関数の幾何学的な意味
* http://www.geil.co.jp/MULTIMEDIA/calc/node41.html#fig:sessenvector
----
----
ベクトル関数 $$\mathbf{F}$$ が、スカラー t, u の関数であるとする (つまり $$\mathbf{F}(t,u)$$)。
このとき、ベクトル関数 $$\mathbf{F}$$ の偏微分は、次のように定義される。
$$\displaystyle \dfrac{d \mathbf{F}}{dt} \equiv \lim_{\Delta t \to 0} \dfrac{\mathbf{F}(t+\Delta t, u) - \mathbf{F}(t,u)}{\Delta u}$$
$$\displaystyle \dfrac{d \mathbf{F}}{du} \equiv \lim_{\Delta u \to 0} \dfrac{\mathbf{F}(t, u+\Delta u) - \mathbf{F}(t,u)}{\Delta u}$$
!! 全微分
$$\displaystyle d \mathbf{F} \equiv \dfrac{d \mathbf{F}}{dt} \Delta t + \dfrac{d \mathbf{F}}{du} \Delta u$$
$$ d \mathbf{F} = \begin{pmatrix} \dfrac{d \mathbf{F_t}}{dt} \\ \\ \dfrac{d \mathbf{F_u}}{dt} \end{pmatrix} \Delta t + \begin{pmatrix} \dfrac{d \mathbf{F_t}}{du} \\ \\ \dfrac{d \mathbf{F_u}}{du} \end{pmatrix} \Delta u = \begin{pmatrix} \dfrac{d \mathbf{F_t}}{dt} & \dfrac{d \mathbf{F_t}}{du} \\ \\ \dfrac{d \mathbf{F_u}}{dt} & \dfrac{d \mathbf{F_u}}{du} \end{pmatrix} \begin{pmatrix} \Delta t \\ \\ \Delta u \end{pmatrix} $$
$$
aaa
\dfrac{\partial \mathbf{F_1}}{\partial t_i} e_1 + \dfrac{\partial \mathbf{F_2}}{\partial t_i} e_2 + \ldots + \dfrac{\partial \mathbf{F_n}}{\partial t_i} e_n $$
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
! ベクトル空間の公理
$$V$$ をある集合、$$K$$ を体とする。
この時、以下の条件を満たす場合に、 $$V$$ を 「$$K$$ 上のベクトル空間」と言う。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! 和の一意性
全ての $$u, v \in V$$ に対し、「和」 $$ u + v \in V $$ が一意に定まる。
!! スカラー倍の一意性
全ての $$u \in V , \alpha \in K$$ に対し、「スカラー倍」 $$ \alpha u \in V $$ が一意に定まる。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! 和の結合法則
$$ (u + v) + w = u + (v + w) $$
!! 和の交換法則
$$ u + v = v + u $$
!! ゼロベクトル (零ベクトル)
ある $$ 0 \in V $$ が存在し、$$ u + 0 = 0 + u = u $$ となる。
!! 逆ベクトル
$$ u $$ に対して、 $$ u + y = 0 $$ となるような $$ y \in V $$ が存在し、この $$y$$ を $$-u$$ と表す。
!! 積の可換性
$$ \alpha (\beta u) = (\alpha \beta) u $$
!! 分配法則1
$$ (\alpha + \beta) u = \alpha u + \beta u $$
!! 分配法則2
$$ \alpha (u + v) = \alpha u + \alpha v $$
!! スカラー倍の単位性
$$ 1u = u $$
---
! 部分空間
ベクトル空間 V と空でない [[部分集合|集合]] W が次の性質をもつとき, W は V の ''部分空間 (subspace)'' であるという。
# $$w_{1}, w_{2} $$ が W に含まれるならば, 和 $$w_1 + w_2$$も W に含まれる.
# $$w_1$$ が W に含まれるならば, スカラー倍 $$\alpha w_1$$も W に含まれる.
!! 和空間
和集合をベクトル和について閉じるように拡大した線形空間 (和集合 $$W_1 \cup W_2$$ はベクトル和に対して閉じていないことがある)。
$$W_1 + W_2 \equiv \{ w_1 + w_2 | w_1 \in W_1, w_2 \in W_2 \}$$
!!! ''和空間の次元''
$$\dim(W_1 + W_2) = \dim{W_1} + \dim{W_2} - \dim(W_1 \cap W_2)$$
!! 直和
$$W_1 \cap W_2 = \emptyset$$ である 和空間。
この場合、 $$W_1 \oplus W_2$$ と書く。
$$\dim(W_1 + W_2) = \dim{W_1} + \dim{W_2}$$
!! 交空間
https://dora.bk.tsukuba.ac.jp/~takeuchi/?%E7%B7%9A%E5%BD%A2%E4%BB%A3%E6%95%B0II%2F%E5%B0%84%E5%BD%B1%E3%83%BB%E7%9B%B4%E5%92%8C%E3%83%BB%E7%9B%B4%E4%BA%A4%E7%9B%B4%E5%92%8C
ヘルムホルツ自由エネルギーには、2つの重要な熱力学的な意味がある。
# ''定温定積過程'' における反応の方向性を示す
# ''定温過程'' において ''系が外界に対して行える仕事の最大量'' を規定する
----
! 定義
ヘルムホルツ自由エネルギー F の厳密な定義には、 [[ルジャンドル変換]] を用いる。
:$$\displaystyle F[T;V,N] \equiv \sup_{S}\,\!\left(U(S,V,N) - TS \right) $$
このようなややこしい定義が必要な理由は、ある $$T \left(= \dfrac{\partial U}{\partial S}\right)$$ を指定した際に $$\displaystyle \sup_{S} (U - TS)$$ を満たす $$S$$ が複数存在するケースがあるため (三重点)。
$$U[S,V,N]$$ は $$S$$ に対して下に凸なので、$$F[T;V,N]$$ は$$T$$ に対して上に凸になる。
----
! エネルギーとの関係
$$S$$ と $$T$$ が一対一対応している場合は、''S を温度の関数として表せるので''、よりシンプルな形で表せる。
:$$ F[T;V,N] = U(S(T;V,N),V,N) - TS(T;V,N) $$
また、エネルギーの変化量を、以下の式で表せる操作(等温準静操作など) については ([[熱力学第一法則]] 参照)
: $$ \displaystyle dU[S,V, N] = T dS - p dV + \sum_{i=1}^m \mu_i dN_i $$
ヘルムホルツ自由エネルギーを、次のように表すことができる。
:$$ \displaystyle dF[T; V, N] = - S dT - p dV + \sum_{i=1}^m \mu_i dN_i $$
!! 偏微分
・ $$ \dfrac{\partial F[T;V,N]}{\partial T} = -S(T;V,N)$$
・ $$ \dfrac{\partial F[T;V,N]}{\partial V} = - p(T;V,N)$$
・ $$ \dfrac{\partial F[T;V,N]}{\partial N} = \mu(T;V,N)$$
! 変分原理の不等式
$$V = V_1 + V_2, N = N_1 + N_2 $$ に対して、等温環境において、
:$$ F[T;V,N] \leqq F[T;V_1,N_1] + F[T;V_2,N_2]$$
が成り立つ。
----
! 前提とする条件
!! Kelvinの原理
任意の温度における任意の等温サイクルについて、 Wcyc <= 0 が成り立つ。
(等温サイクルが外界に対して正の仕事をすることはない)
!! 等温操作における吸熱量の定義
任意の等温操作 $$ (T;X) \rightarrow (T;X') $$ で系が環境から受け取る熱は、
:$$ Q = W + U(T;X') - U(T;X) $$
である(W: 系が外界に行う仕事, U: エネルギー)。
!! 圧力
力の大きさを面の面積で割った値。 $$ P = F / A $$
----
! 等温操作の場合
* ヘルムホルツの自由エネルギーは、等温操作の最大仕事と一致する
* 最大仕事になるのは、等温準静操作の時
!! 最大吸熱量との関係
ヘルムホルツの自由エネルギーは等温操作の最大仕事と一致するので、等温操作における最大吸熱量(Qmax)は、
$$ Q_{max}(T;X \rightarrow X') = W_{max}(T;X \rightarrow X') + U(T;X') - U(T;X) $$
$$ Q_{max}(T;X \rightarrow X') = F[T;X] - F[T;X'] + U(T;X') - U(T;X) $$
と書ける。
!! 圧力との関係
「p = F / A と A・ΔL = ΔV」 の関係から、(Pが一定と見なせる条件下では) P・ΔV = (F・ΔL) = ΔW なので、
:$$\displaystyle \lim_{\Delta V \to +0} \frac{W_{max}(T;(V,N) \to (V+ \Delta V,N))}{\Delta V} = p(T;V,N)$$
となるため、
:$$\displaystyle \lim_{\Delta V \to +0} \frac{F[T;V,N]-F[T;V+\Delta V,N]}{\Delta V} = p(T;V,N)$$
という関係が成り立つ。
----
! 温度依存性を含めた定義
!! Carnotの定理との関係
以下の断熱準静操作が
$$
(T;X_1) \leftrightarrow (T';X_1'), (T;X_2) \leftrightarrow (T';X_2')
$$
可能であるとすると($$ T \neq T' $$)、Carnotの定理から
$$
\frac{Q_{max}(T;X_1 \rightarrow X_2)}{T} = \frac{Q_{max}(T';X_1' \rightarrow X_2')}{T'}
$$
が成り立つ。等温操作での最大吸熱量は、以下のようにあらわせる。
$$
\frac{F[T;X_1]-F[T;T_2]+U(T;X_2)-U(T;X_1)}{T} = \frac{F[T';X_1']-F[T';T_2']+U(T';X_2')-U(T';X_1')}{T'}
$$
エントロピーを用いた形で表すと、
$$
S(T;X_2)-S(T;X_1) = S(T';X_2')-S(T';X_1')
$$
となる。この式は、エントロピーの差が断熱準静操作において不変であることを意味する。
!! エントロピーの温度依存性
基準温度(T*) と示量的な基準点(X*) を使い、基準エントロピー (S*) を、$$ S(T^*; X^*) = S^* $$ と決める。
この時、任意の (T; X)においても、基準点 $$ X_0(T) $$ をうまくとってやれば、$$ S^* = S(T; X) $$ を満たすことが可能である。
より具体的には、 基準点 $$ V_0(T) $$ を適切に取ることで、
$$ S^* = S(T; NV_0(T),N) $$
とできる。
さらに、エントロピーの温度による変化ついては、
$$ S(T;X) = S(T_0;X) + \int_{T_0}^{T}dT \frac{C_v(T';X)}{T'}
$$
という、積分計算式があるので、ヘルムホルツの自由エネルギーも決定することが可能である。
----
! 理想気体の場合
任意のT, N において、基準点 $$V_0(T,N)$$ から任意のVまでのヘルムホルツ自由エネルギーは、
$$ - \int_{V_0(T,N)}^{V} p(T;V',N) dV'
$$
である(T,Nは定数)。
ここで理想気体の状態方程式を使うと、
$$ - \int_{V_0(T,N)}^{V} \frac{NRT}{V'} dV' = -NRT log \frac{V}{V_0(T,N)}
$$
となる。
----
! V-S-U 座標上でのヘルムホルツの自由エネルギー
V-S-U 座標の平衡曲面上のある点 $$(V_0, S_0, U_0)$$ の接平面と 直線 $$(V, S) = (V_0, 0)$$ の交点がヘルムホルツの自由エネルギーとなる。
感覚的な説明としては、「接平面のS軸方向の傾き」は、点 $$(V_0, S_0, U_0)$$ でのエネルギーに対するエントロピーによる偏微分なので、下式のような感じになる。
$$ F_0 = U[S_0, V_0] + S_0 \dfrac{\partial U[S_0, V_0]}{\partial S} = U[S_0, V_0] - S_0 T_0$$
厳密には、ルジャンドル変換をする。
$$S_0 T_0 $$ の項は、$$S= 0$$ 上の点から $$(V_0, S_0, U_0)$$ までの準静等温操作での最大吸熱量と同じになる。
Fはある基準点から $$(V_0, S_0, U_0)$$ までの等温操作における最大仕事なので、基準点が $$ S= 0$$ 上にあれば、$$S_0 T_0 $$ の項はその等温操作での吸熱量を意味する。
* [[第32章 自由エネルギーと熱学の体系(ヨシア・ウィラード・ギブズ)|http://fnorio.com/0147equation_of_state/Yamamoto_Yoshitaka/history_of_thermodynamics.html#248]]
* http://fnorio.com/0147equation_of_state/equation_of_state.html#3
* http://www.amsd.mech.tohoku.ac.jp/Thermoacoustics/Chap_2.pdf
! 定義
!! ボイド率 (Void ratio)
気液二相流を瞬間的に固定したときの気相の体積割合。 ボイド率は(流れに直交する) ''断面の気相が流れる面積割合と同じ''。
:$$\alpha = \dfrac{V_G}{V} = \dfrac{A_G}{A}$$
!! ホールドアップ (Holdup)
同様に、液相の体積割合のことを、ホールドアップという。
:$$H_L = \dfrac{V_L}{V} = \dfrac{A_L}{A}$$
----
! 流速との関係
気相の体積流量 (Q,,G,,) は、見かけ速度 (v,,S,G,,) を用いて表すこともできるので、
:$$Q_G = A_G v_G = A v_{S,G}$$
ボイド率は (気相の) 速度と見かけ速度の関係を用いて、次のように表すこともできる。
: $$\alpha = \dfrac{A_G}{A} = \dfrac{v_{S,G}}{v_{G}}$$
そのため、気相の速度は、次のように計算することができる。
:$$v_{G} = \dfrac{Q_G}{A_G} = \dfrac{Q_G}{\alpha \cdot A} $$
ホールドアップに関しても、同様の関係を得ることができる。
----
* また、体積クオリティーとの関係は...
** β = α・ug / (α・ug + (1-α)・ul) = αS / (αS + (1-α)) <br> (Sは気液の速度比)
* 気液の速度比はスリップ比という
** S = ug / ul
* α = β / (β + (1-β)) なので、''スリップ比が1ならば(S = 1)、 ボイド率は体積クオリティーに等しい''
* 気液速度の関係は、スリップ比の相関式として与えることが多い
** Thom の式
** Almad の式
** Smith の式
; スリップ比 (S)
* 一般に気体は液体より速度が大きいので、''S > 1'' となる
** 重力と慣性力が密度の大きい液体に大きく作用する (重力・慣性は、質量あたりに働く力)
** 圧力勾配による力は、体積あたりの力なので、比容量の大きい気体に大きく作用する?
; ボイド率の測定方法
* 締め切り法 (バルブ)
** 配管の2ヶ所のバルブを同時に閉じて、閉じ込めた二相流の気液比を測定する
* 気液の電気抵抗の差
* 気液の光の屈折率の差
* CT
* 静電容量センサ
; ドリフトフラックス
* ug = ''C0・(jg + jl) + Jg'' = C0・{α・ug + (1 - α)ul} + Jg
** C0 : 分布定数
** j : 体積速度
** J : ドリフトフラックス
以下の条件を満たす流体を理想流体といい、理想流体の流れはポテンシャル流れになる。
* 非圧縮性
* 粘性が無視できる
* 熱伝導が無視できる
---
! 連続の式
! ボルツマンの原理
孤立系 (エネルギー・体積・粒子数が一定) のエントロピーは、''状態数'' (W) と ''ボルツマン定数'' ($$k_B$$) を用いて、以下のように定義される。
:$$S(E,V,N) = k_B \ln W(E,V,N) $$
- - - - -
!! 補足
<<<
つまり,統計力学的エントロピーは離散的な量なのです。したがって,統計力学的エントロピーS(E,N)をEで微分することは数学的には許されないはずです。ところが,以下のとおり示すように,Eによる微分を平気で行っていきます。その時の言い訳が,「Nが非常に多きいときはEも連続的に変化(分布)するとみなせる」というものです。この主張はほとんど場合正しいです。しかし,絶対的に成り立つ話ではなく,実際,重要な話題であるボース・アインシュタイン凝縮では成立しません。
<<<
引用: http://www.f-denshi.com/000okite/100tokei/t101.html
なお、この統計力学的エントロピーが微分可能であるとすると、熱力学のエントロピーのエネルギー微分の式 $$\left( \dfrac{\partial S}{\partial E} \right)_{V,N} = \dfrac{1}{T} $$ を用いて、以下の関係が得られる。
:$$\dfrac{1}{k_B T} = \dfrac{\partial lnW}{\partial E} $$
[[統計力学Iメモ(その2)|http://www.eng.hokudai.ac.jp/labo/optphys/theoretical/tsuchiya/lectures/2004/StatMechI/Note2.pdf]]
----
! ボルツマン定数
ボルツマン定数はエントロピーの次元を持ち、熱力学温度をエネルギーに関係付ける定数として位置付けられる。
:$$k_b = 1.380649 \times 10^{-23} \ \ \ [JK^{-1}]$$
!! 気体定数との関係
ボルツマン定数とアボガドロ数 (N,,A,,) が気体定数 (R) になる。
:$$R = N_A k_b$$
----
! [[微視的状態数]]
アンサンブル $$ens(E, V, N)$$ に含まれる微視的状態数 W は,
$$\displaystyle W(E, V, N) = \dfrac{1}{N!} \int_{(q,p) \in ens(E, V, N)} \dfrac{dqdp}{h^{3N}}$$ $$\displaystyle = \dfrac{1}{N!} \int \cdots \int_{(q,p) \in ens(E, V, N)} \dfrac{dq_1 dp_1}{h} \cdots \dfrac{dq_{3N} dp_{3N}}{h}$$
で与えられる。$$\dfrac{1}{N!}$$ の部分は 「''粒子を入れ替えただけの状態は同じ状態である''」ことを考慮するための項である。この式は、
$$\displaystyle W(E, V, N) = \dfrac{1}{N!} \dfrac{1}{h^{3N}} \int \cdots \int_{q \in ens(E, V, N)} dq_1 \cdots dq_{3N} \int \cdots \int_{p \in ens(E, V, N)} dp_1 \cdots dp_{3N}$$
と変形できる。さらに、''理想気体(分子間相互作用が0)の場合は''、座標積分の被積分関数が 1 なので、単純に各粒子ごとに V を与えることになるので、
$$\displaystyle W(E, V, N) = \dfrac{V^N}{N! h^{3N}} \int \cdots \int_{p \in ens(E, V, N)} dp_1 \cdots dp_{3N} $$
と変形できる。なお、積分項内の運動量には、並進運動以外の運動量(回転や振動)も含まれる。
河川などの傾きのある開水路の流速を求める経験式。
$$\ \ \ \ v = \dfrac{1}{n} {R_h}^{2/3} I^{1/2}$$
$$\ \ \ \ R_h = \dfrac{4A}{P}$$
n: マニングの粗度係数 [s / m^^1/3^^ ]
R,,h,, : 径深 (Hydraulic radius) [m]
I: 勾配 (単位長さ辺りの高さの変化) [-]
A: 流路面積 [m2]
P: Perimeter [m]
遷移確率
---
https://manabitimes.jp/math/1060
<<tag "メモ">>
; Web
<<list-links filter:[tag[メモ]tag[URLs]]>>
; もの
<<list-links filter:[tag[メモ]tag[もの]] order:"modified">>
; やりかけ
<<list-links filter:[tag[メモ]tag[やりかけ]] order:"modified">>
; 英語
<<list-links filter:[tag[メモ]tag[英語]]>>
----
; 場所
* [[うらわ美術館|http://www.uam.urawa.saitama.jp/]]
* [[東京大学総合研究博物館 The University Museum, The University of Tokyo|http://www.um.u-tokyo.ac.jp/]]
* [[東京国立博物館 HOME|http://www.tnm.go.jp/jp/servlet/Con?pageId=X00/processId=00]]
* [[D&DEPARTMENT PROJECT|http://www.d-department.com/jp/]]
* [[(社)落語協会|http://rakugo-kyokai.or.jp/]]
* [[伊豆の長八美術館 - Wikipedia|http://ja.wikipedia.org/wiki/%E4%BC%8A%E8%B1%86%E3%81%AE%E9%95%B7%E5%85%AB%E7%BE%8E%E8%A1%93%E9%A4%A8]]
* [[江戸のアルチザン伊豆長の世界 風を待ちながら・・・/ウェブリブログ|http://freeport.at.webry.info/200703/article_5.html]]
* [[秋葉原カレー専門店ベンガル | http://www.bengal-curry.com/]]
* [[蓬莱庭園及び文化財 | http://www.sunalix.co.jp/daichiji/houraiteien.html]]
* [[中近東文化センター| http://www.meccj.or.jp/museum/collection.php]]
http://www.omote3d.com/
[[軽井沢を1日でめぐる自転車ルートマップ | リゾートSTYLE|http://style.tokyu-resort.co.jp/karuizawa-bike]]
; 理解する
* understand, comprehend (理解している状態)
** http://www.wakaru-english.info/comprehend%E3%81%A8understand%E3%81%AE%E9%81%95%E3%81%84.html
* figure out, get (理解した瞬間に焦点が当たる)
** [[超便利な英語フレーズ"Figure out"をうまく使いこなそう! The English Buzz|http://theenglishbuzz.com/figure-out/]]
* know, be aware of (知る)
* find, realize, notice (気づく)
; 洗練された
[[英語の「かっこいい」をいくつ知ってる?今日から使える39選!|http://upgradeourenglish.com/vocabulary/cool-expressions/]]
* sophisticated
* polished
* refined
* elegant
* smart
; 不足
```
■ lack – – (名詞)欠乏、不足、ないこと、(他動詞)欠く、ない
私は運動不足です。
I lack exercise.
私は睡眠不足、運動不足、栄養不足です。
I have a lack of sleep, exercise and nourishment.
■ shortage – – (名詞)不足、欠如、品切れ
住宅不足は深刻だ。
The housing shortage is very acute.
人気商品が欠品している。
There is a shortage of the real popular item.
```
[[「不足」って英語で言うと? オンライン英会話Pinas Academy Pinaさんのブログ|http://pinasan.com/english/today_study/7728]]
```
3.1 (short of/on) Not having enough of (something); lacking or deficient in:
they were very short of provisions
I know you’re short on cash
3.2 [predicative] In insufficient supply:
food is short
```
[[short - definition of short in English from the Oxford dictionary|http://www.oxforddictionaries.com/definition/english/short]]
----
[[ヤバい!外国人に道を聞かれた!英語で道案内をする6つの神対応 英語学習ボックス|http://eigo-box.jp/conversation/guidance/]]
----
```
violate the law 法に触れる
```
```
The station is two miles away from here. 駅はここから 2 マイル離れている.
It is two hours away [from here] by train. 電車で 2 時間の距離の所です
infrastructure 産業や生活の基盤となる施設
```
```
get/come/begin to like .. ..が好きになる
typical 典型的な
lord 〔中世の〕封建領主、〈英〉貴族
North Europe 北欧
coexist 共存する (exist together)
```
```
ski resort スキー場
used to .. (助動詞として) .. したものだ
```
```
chain store チェーン店
large supermarket chain 大規模なスーパーマーケットチェーン
picture story book 絵本
dweller 住民 (inhabitant, resident)
expert knowledge 専門知識
specialized area 専門領域
housewares 家庭用品
have a kindly feeling toward.. ..に好感を持つ
plain field (land) 平野
hang up the laundry 洗濯物を干す
be blown away by the wind 風で飛ばされる
public service worker 公務員
run a home business 自営業を営む
```
```
pray for A A のために祈る (prayは自動詞のみ)
flour 粉 (小麦粉だけでない)
relative 親戚
have a (形容詞) time 時間を過ごす
ruin 遺跡
plaster しっくい (動詞もある)
sole 足の裏
perspective 遠近法
aged person 高齢者
vein 血管
vacuum cleaner 掃除機
opponent 対戦相手
```
```
photonic synthesis 光合成
breathing 呼吸
protein タンパク質
graduate study 卒業研究
```
! 定義
!! モーメント母関数 (Moment-generating function)
確率変数 X の モーメント母関数 (積率母関数) は次のように定義される。
:$$M_X(t) := E[e^{tX}] \ , \ \ t \in R $$
!! 確率変数のモーメント
* (確率変数 X の) n次モーメント: $$E[X^n]$$
* (確率変数 X の) n次中心モーメント: $$E[(X - E[X])^n]$$
----
! n次モーメントの生成
モーメント母関数 $$M_X(t)$$ を n 回微分して $$t=0$$ を代入すると n次のモーメント$$( E[X^n] )$$ となる。
!! 導出
$$f(t) = e^{tX}$$ とし、$$f(x)$$ を n回微分した関数を $$f^{(n)}(t) = X^{n} e^{tX}$$ とする。
$$e^{tX}$$ をマクローリン展開すると、
:$$\displaystyle e^{tX} = \sum_{n=0}^{\infty} \frac{f^{(n)}(0)}{n!} t^n = \sum_{n=0}^{\infty} \frac{X^n}{n!} t^n = 1 + tX + \dfrac{t^2}{2!} X^2 + \dfrac{t^3}{3!} X^3 + \cdots$$
となるので、期待値の線形性を用いると、
:$$\displaystyle M_X(t) = E[e^{tX}] = E[1 + tX + \dfrac{t^2}{2!} X^2 + \dots] = 1 + E[X] t + \dfrac{E[X^2]}{2!} t^2 + \cdots$$
と変形できる。さらにこの式は、$$f^{(n)}(0) = X^{n}$$ を用いて、
:$$\displaystyle M_X(t) = \sum_{n=0}^{\infty} \dfrac{E[X^n]}{n!} t^n = \sum_{n=0}^{\infty} \dfrac{f^{(n)}(0)}{n!} t^n$$
とまとめ直すことができる。つまり、
:$$E[X^n] = f^{(n)}(0)$$
である。
* スーツ
* ベルト
* ネクタイ
* 革靴
* お金 (包みは必要?)
* 航空券
* 服 (寒いのか?)
* おみやげ (ぱらぱらマンガのやつ)
スーツケースを送り返す方法
<<<
モルフォロジ処理は,”構造要素”と呼ばれる画像を移動させる要素と,”ミンコフスキー(Minkowski)和・ミンコフスキー差”と呼ばれる演算から成り立っている.モルフォロジ処理における代表的な処理は,「Erosion(エロージョン)」と「Dilation(ダイレーション)」と呼ばれる処理であり,それぞれ孤立点の除去,不連続な点の接続と穴埋めのために利用される.
<<<
[[2値画像処理|http://www.clg.niigata-u.ac.jp/~medimg/practice_medical_imaging/imgproc_scion/7binarize/index.htm]]
<<<
モルフォロジー変換は主に二値画像を対象とし,画像上に写っている図形に対して作用するシンプルな処理のことである.モルフォロジー変換には入力画像と 処理の性質を決める 構造的要素 ( カーネル )の二つを入力とする.基本的なモルフォロジー処理として,収縮(Erosion)と膨張(Dilation)が挙げられる.この他に,この二つの処理を組み合わせたオープニングとクロージングといった処理もある.
<<<
[[モルフォロジー変換 — OpenCV-Python Tutorials|http://lang.sist.chukyo-u.ac.jp/classes/OpenCV/py_tutorials/py_imgproc/py_morphological_ops/py_morphological_ops.html]]
----
! 膨張と収縮
```
膨張・収縮処理では一般的に二値化された白黒の画像に対して処理が行われ、注目画素の周辺に1画素でも白い画素があれば白に置き換える処理を膨張(Dilation)、逆に周辺に1画素でも黒い画素があれば黒に置き換える処理を収縮(Erosion)といいます。
```
[[膨張・収縮・オープニング・クロージング 画像処理ソリューション|http://imagingsolution.blog107.fc2.com/blog-entry-101.html]]
- - - - -
!! 膨張
注目画素の近傍に黒色の画素が1つでも存在すれば、注目画素を黒色に置き換える。
|□|□|□|
|□|?|□|
|■|□|□|
? は黒になる。
* ~ImageJ: Process -> Binary -> Dilate
!! 収縮
注目画素の近傍に白色の画素が1つでも存在すれば、注目画素を黒色に置き換える (? は白になる)。
* ~ImageJ: Process -> Binary -> Erode
----
! オープニングとクロージング
!! クロージング
```
膨張をN回行い、その後収縮をN回行うことをクロージングといいます。クロージングによって、図形を穴埋めしたり、切断部分を結合するなどの効果が得られます。
```
[[モフォロジー - IGUNOSS,Inc.|http://www.igunoss.co.jp/imageproc/imageproc1-6.html]]
```
同じ回数だけ膨張して収縮する処理を“クロージング”と言い、この組み合わせ処理によって小さな孔を除くことができます。またその逆で、同じ回数だけ収縮して膨張する処理を“オープニング”と言います。
どちらの処理でも、画像の小さな孤立成分を除くことができます。
以下、ImageJによる各処理結果を示します。
メニューのProcess/Binaryのプルダウンメニューに、2値化画像の各画像処理(Erode, Dilate, Open, Close)が並んでいます。
```
!! オープニング
```
オープニング処理は、外側に突き出した突起が削られて滑らかになり、図形の辺縁を滑らかにする一種の平滑化処理です。だだし、内側からの平滑化ですので、入江のような部分はそのまま残ります。また、狭い部分は図形の分離が起こります。孤立した小さな領域は消滅することから雑音除去の目的で利用することもできます。
クロージング処理はオープニング処理同様に平滑化された図形が得られます。入江のような部分や小さな穴がふさがれる効果があります。
```
[[Re - ImageJで学ぶ!: 第23回 2値画像処理の基本で学ぶ!|https://re-imagej.blogspot.com.au/2015/09/232.htm]]
----
|オープニング処理 |「収縮処理」した後に同じ回数だけ「膨張処理」をする |
|クロージング処理 |「膨張処理」した後に同じ回数だけ「収縮処理」をする |
|グラジエント処理 |「膨張処理した画像」から「収縮処理した画像」を引く |
|トップハット処理 |「元画像」から「オープニング処理した画像」を引く |
|トップハット処理 |「オープニング処理した画像」から「元画像」を引く |
[[【画像処理】膨張・収縮処理の原理・特徴・計算式 アルゴリズム雑記|https://algorithm.joho.info/image-processing/dilation-erosion-opening-closing-tophat-blackhat/]]
ざっくり言うと、多変数ベクトル関数の微分係数。
$$f: R^n \to R^m$$ の場合、 $$m \times n$$ の行列になる。
----
! 定義
多変数のベクトル関数を $$f: R^n \to R^m$$ と定義する。
関数 $$f$$ を用いて $$y_i = f(x_j) \ \ \ [1 \leq i \leq m, \ \ 1 \leq j \leq n]$$ とした時、ヤコビ行列 ''J'' は、
:$$\displaystyle \mathbf {J} = \begin{pmatrix} \dfrac{\partial y_1}{\partial x_1} & \ldots & \dfrac{\partial y_1}{\partial x_n} \\ \\ \vdots & \ddots & \vdots \\ \\ \dfrac{\partial y_m}{\partial x_1} & \ldots & \dfrac{\partial y_m}{\partial x_n} \\ \end{pmatrix} $$
と定義される。なお、行列の成分は、次のようにも表記される。
:$$ \mathbf {J}_{ij} = \dfrac{\partial y_i}{\partial x_j}$$
また、ヤコビ行列の行列式のことを ''ヤコビアン'' という。
* https://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant
- - - - -
!! 補足
上記のヤコビ行列の定義は、関数 $$f$$ の各基底方向への方向微分を並べた行列とみることもできる ($$f$$ の戻り値を、縦ベクトルだとみなす)。
:$$\displaystyle \mathbf {J} = \begin{pmatrix} \dfrac{\partial f}{\partial x_1} & \ldots \dfrac{\partial f}{\partial x_n} \end{pmatrix} , \ \ \ \ f = \begin{pmatrix} y_1 \\ \vdots \\ y_m \end{pmatrix} $$
* [[ヤコビ行列、gradient|http://nalab.mind.meiji.ac.jp/~mk/lecture/tahensuu1-2011/tahensuu1-2011-10/node2.html]]
* https://ja.wikipedia.org/wiki/%E3%83%A4%E3%82%B3%E3%83%93%E8%A1%8C%E5%88%97
----
! 全微分の定義
このヤコビ行列を用いると、[[全微分]] の定義は、次のように表せる (h がベクトルであることに注意)。
:$$ f(x_i + \Delta h_i) - f(x_i) = \dfrac{\partial y_i}{\partial x_j} h_i+ o \left( \sqrt{\Delta {h_i}^2} \right) = \mathbf {J}_{ij} h_i+ o \left( \sqrt{\Delta {h_i}^2} \right)$$
[[ベクトル関数の微分]]
! 逆関数の定理
関数は、微分可能なある点の近傍では、線形近似が可能である。
そのため、m = n (ヤコビ行列が正方行列) のとき、ある点のヤコビ行列が正則であれば、その点の近傍では可逆となる。
----
! 導出
面倒なので、二次元で。
$$\displaystyle \begin{pmatrix} y_1 \\ y_2 \end{pmatrix} = \begin{pmatrix} f_1(x_1, x_2) \\ f_2(x_1, x_2) \end{pmatrix} $$
点 (a,,1,,, a,,2,,) と その近傍の点 (a,,1,, + h,,1,,, a,,2,, + h,,2,,) の差を一次近似で表すと、ヤコビ行列が現れる。
$$\displaystyle \begin{pmatrix} f_1(a_1 + h_1, a_2 + h_2) - f_1(a_1, a_2) \\ f_2(a_1 + h_1, a_2 + h_2) - f_2(a_1, a_2) \end{pmatrix} = \begin{pmatrix} h_1 \dfrac{\partial f_1}{\partial x_1} (a_1, a_2) + h_2 \dfrac{\partial f_1}{\partial x_2}(a_1, a_2) + \epsilon_1 \\ \\ h_1 \dfrac{\partial f_2}{\partial x_1} (a_1, a_2) + h_2 \dfrac{\partial f_2}{\partial x_2}(a_1, a_2) + \epsilon_2\\ \end{pmatrix} $$
$$\displaystyle \begin{pmatrix} f_1(a_1 + h_1, a_2 + h_2) - f_1(a_1, a_2) \\ f_2(a_1 + h_1, a_2 + h_2) - f_2(a_1, a_2) \end{pmatrix} = \begin{pmatrix} \dfrac{\partial f_1}{\partial x_1} (a_1, a_2) & \dfrac{\partial f_1}{\partial x_2}(a_1, a_2) \\ \\ \dfrac{\partial f_2}{\partial x_1} (a_1, a_2) & \dfrac{\partial f_2}{\partial x_2}(a_1, a_2) \end{pmatrix} \begin{pmatrix} h_1 \\ \\ h_2 \end{pmatrix} + \begin{pmatrix} \epsilon_1 \\ \\ \epsilon_2\end{pmatrix} $$
----
https://mathtrain.jp/jacobian
----
{{{
;;;; Common Function
(provide "my-common")
(in-package "user")
(export '(iota
tabulate
bol-point
eol-point))
;;; --------------------------------------------------------------------------
;;; xyzzy に依存しないLispとしての機能
;; http://www.geocities.jp/m_hiroi/clisp/clispb09.html からもらった
(defun iota (m &optional (n 1) (step 1))
"nからmまでの値でstep間隔のリストを作成する"
(if (> n m)
nil
(cons n (iota m (+ n step) step))))
(defun tabulate (fn m &optional (n 1) (step 1))
"数列の生成"
(if (> n m)
nil
(cons (funcall fn n) (tabulate fn m (+ n step) step))))
;; http://www.geocities.jp/m_hiroi/clisp/clispb09.html からもらった
(defun tabulate (fn m &optional (n 1) (step 1))
"iota で生成した数列に関数 fn を適用した結果を返す"
(if (> n m)
nil
(cons (funcall fn n) (tabulate fn m (+ n step) step))))
;;; --------------------------------------------------------------------------
;;; exkey
;; (set-extended-key-translate-table exkey-space #\F19)
;; (set-extended-key-translate-table exkey-S-space #\S-F19)
;; (set-extended-key-translate-table exkey-C-space #\C-F19)
;; (set-extended-key-translate-table exkey-S-C-space #\S-C-F19)
;; (set-extended-key-translate-table exkey-M-space #\M-F19)
;; (set-extended-key-translate-table exkey-S-M-space #\S-M-F19)
;; (set-extended-key-translate-table exkey-C-M-space #\C-M-F19)
;; (set-extended-key-translate-table exkey-S-C-M-space #\S-C-M-F19)
;; (set-extended-key-translate-table exkey-backspace #\F20)
;; (set-extended-key-translate-table exkey-S-backspace #\S-F20)
;; (set-extended-key-translate-table exkey-C-backspace #\C-F20)
;; (set-extended-key-translate-table exkey-S-C-backspace #\S-C-F20)
;; (set-extended-key-translate-table exkey-M-backspace #\M-F20)
;; (set-extended-key-translate-table exkey-S-M-backspace #\S-M-F20)
;; (set-extended-key-translate-table exkey-C-M-backspace #\C-M-F20)
;; (set-extended-key-translate-table exkey-S-C-M-backspace #\S-C-M-F20)
;; (set-extended-key-translate-table exkey-tab #\F21)
(set-extended-key-translate-table exkey-S-tab #\S-F21)
(set-extended-key-translate-table exkey-C-tab #\C-F21)
;; (set-extended-key-translate-table exkey-S-C-tab #\S-C-F21)
;; (set-extended-key-translate-table exkey-return #\F22)
;; (set-extended-key-translate-table exkey-S-return #\S-F22)
(set-extended-key-translate-table exkey-C-return #\C-F22)
(set-extended-key-translate-table exkey-S-C-return #\S-C-F22)
;; (set-extended-key-translate-table exkey-M-return #\M-F22)
;; (set-extended-key-translate-table exkey-S-M-return #\S-M-F22)
;; (set-extended-key-translate-table exkey-C-M-return #\C-M-F22)
;; (set-extended-key-translate-table exkey-S-C-M-return #\S-C-M-F22)
;; (set-extended-key-translate-table exkey-escape #\F23)
;; (set-extended-key-translate-table exkey-S-escape #\S-F23)
;; (set-extended-key-translate-table exkey-zenkaku #\F24)
;; (set-extended-key-translate-table exkey-S-zenkaku #\S-F24)
;; (set-extended-key-translate-table exkey-C-zenkaku #\C-F24)
;; (set-extended-key-translate-table exkey-S-C-zenkaku #\S-C-F24)
;; (set-extended-key-translate-table exkey-S-M-zenkaku #\S-M-F24)
;;; --------------------------------------------------------------------------
;;; カーソル位置の取得
(defun bol-point ()
"カーソルのある行の開始位置を、ポイントで返す"
(save-excursion (progn (goto-bol) (point))))
(defun eol-point ()
"カーソルのある行の開始位置を、ポイントで返す"
(save-excursion (progn (goto-eol) (point))))
}}}
|古代 |Classical antiquity |西ローマ帝国の滅亡まで |
|中世 |middle Ages |5th and 15th centuries |
|近世 |early modern |ルネサンス~フランス革命 |
|近代 |modern |フランス革命以後 |
|現代 |contemporary |第一次世界大戦終結〜第二次世界大戦終結あたり以後 |
```
they are very similar, usually its just a matter of what is normal for what you're talking about. Length-wise it's something like age>epoch>era>period
So the stone age, the modern era...epoch doesn't come up a lot. Period is often a cultural time, the Renaissance period for example. To confuse everything there's also The Age of Enlightenment and things in europe... different fields define them a little differently, but really they are all just ways to talk about chunks of time
```
https://hinative.com/ja/questions/38682
! 概要
''成分 i の分圧'' は、「(成分 i の) ''液相のモル分率'' x ''飽和蒸気圧''」となる。
$$x_i^V p = x_i^L \cdot p_i^{sat}$$
* $$x_i^L$$: (成分 i の) 液相のモル分率
* $$x_i^V$$: (成分 i の) 気相のモル分率
* $$p$$: 系の圧力
* $$p_i^{sat}$$: 成分 i の飽和蒸気圧(vapor pressure)
[[ドルトンの法則]] を使って書き換えた場合:
$$p_i = x_i^L \cdot p_i^{sat}$$
* $$p_i$$: (成分 i の) 分圧
!! 実際の計算で使われる式
Bubble Point: $$\displaystyle p = \sum_i x_i p_i^{sat} $$
Dew Point: $$\displaystyle P = \dfrac{1}{\sum_i \frac{y_i}{p_i^{sat}}} $$
! Modified Raoult's Law
活量係数を考慮したラウールの法則を、 ''Modified Raoult's Law'' ということがある。
$$x_i^V \cdot p = \gamma_i \cdot x_i^L \cdot p_i^{sat}$$
! Gamma Phi Formulation of VLE
活量だけでなくフガシティも考慮すると、
$$x_i^V \cdot \phi_i \cdot p = \gamma_i \cdot x_i^L \cdot \phi_i^{sat} \cdot p_i^{sat}$$
となる。
!! 残っている仮定
* 気相の混合エントロピーを理想気体として扱う。
* Poynting Factor (F) は 1
** $$\displaystyle F = \exp \left( \dfrac{1}{RT} \int_{p_{sat}}^p V^L_m dP \right) $$
----
! 成立するための前提条件 (必要とする仮定)
ラウールの法則は、以下の二つの条件を仮定する時に、厳密に成立する。
!! 1. The vapor phase is an ideal gas.
''理想気体'':
基準圧力を $$p_0$$ とした時の、理想気体の化学ポテンシャル。
$$\mu^{V}(T,p) = \mu(T,p_0) + RT \ln \left( \dfrac{p}{p_0} \right)$$ 【式1】
また、$$\mu^V_{i,pure}(T,p)$$ を「純粋な成分気体 i の化学ポテンシャル」とすると、混合後の化学ポテンシャルは、[[ドルトンの法則]] を使って
$$\mu_i^{V}(T,p) = \mu^V_{i,pure}(T,p) + RT \ln \left( \dfrac{p_i}{p} \right) = \mu^V_{i,pure}(T,p) + RT \ln \left( x_i^V \right)$$ 【式2】
と表せる($$p_i$$: i の分圧)。
!!2. The liquid phase is an ideal solution.
''理想溶液'':
$$\mu_i^L(T,p,x_i) = \mu^L_{i,pure}(T,p) + RT \ln(x_i^L)$$ 【式3】
!! 3. 液相の圧力依存性は無視できる。
別な言い方をすると、Poynting Factor (F) は 1。
$$p^L_{i,pure} = p_i^{sat}$$
---
! 導出
【式1】と【式2】から、気相の化学ポテンシャルは、
$$\mu_i^{V}(T,p) = \mu(T,p_0) + RT \ln \left( \dfrac{p}{p_0} \right) + RT \ln \left( x_i^V\right)$$
と表せ、【式3】から液相の化学ポテンシャルは、
$$\mu_i^L(T,p,x_i) = \mu(T,p_0) +RT \ln \left( \dfrac{p_{sat}}{p_0} \right)+ RT \ln(x_i^L)$$
と表せる。気液平衡では $$\mu_i^V = \mu_i^L$$ が成り立つため、
$$\mu(T,p_0) + RT \ln \left( \dfrac{p}{p_0} \right) + RT \ln ( x_i^V) = \mu(T,p_0) +RT \ln \left( \dfrac{p_{sat}}{p_0} \right)+ RT \ln(x_i^L)$$
となり、この式を整理すると、
$$\ln \left( \dfrac{p}{p_0} x_i^V \right) = \ln \left( \dfrac{p_{sat}}{p_0} x_i^L \right) $$
となる。
- - - - -
!! Modified Raoult's Law
実在溶液の場合は、理想溶液からのずれを表す ''活量係数'' を導入し、''モル分率'' を ''活量'' に置き換えることで、ラウールの法則を利用することが可能になる (というより、ラウールの法則が利用できるように活量を定義している)。
$$x^V_i P = \gamma_i x^L_i p_i^{sat}$$
$$a_i = \gamma_i x^L_i$$
* $$\gamma_i$$: (成分 i の) 活量係数 (Activity Coefficient)
* $$a_i$$: (成分 i の) 活量 (Activity)
---
---
---
気液平衡では $$\mu_i^V = \mu_i^L$$ が成り立つため、気相の混合エントロピーが理想気体と同じであるとすると、
$$\phi^V_i \cdot p \cdot y_i = \gamma_i \cdot p_{sat} \cdot \phi_{sat} \cdot \exp \left( \dfrac{1}{RT} \int_{p_{sat}}^p V^L_m dP \right) $$
の関係が成り立つ。
ただし、この式は3つの仮定から次のように単純化できるので、
# 理想気体 ⇒ ''フガシティ係数が 1'' $$(\phi^V_i = \phi_{sat} = 1)$$
# 理想溶液 ⇒ ''活量係数が 1'' $$(\gamma^V_i = 1)$$
# Poynting Factor (F) は 1
$$p \cdot y_i = x_i \cdot p_{sat} $$
となる。
---
!! Vapor Liquid Equilibrium の厳密な表現
---
!! 参考サイト:
* [[「理想溶液→ラウールの法則」、「理想希薄溶液→ヘンリーの法則」|http://rikei-index.blue.coocan.jp/buturi/rahe.html]]
* http://www.tagen.tohoku.ac.jp/labo/ueda/thermodynamics111.pdf
* http://www.campus.ouj.ac.jp/~hamada/TextLib/rm/chap7/Text/Cr990702.html
! 定義
力学系の運動エネルギーを T、ポテンシャルエネルギーを U とするとき、 ''ラグランジアン'' L は次のように定義される。
:$$L = T - U $$
t を時間、q を(質点の)一般化座標とすると、
:$$L(q, \dot{q}, t) = T(\dot{q}(t)) - U(q(t), \dot{q}(t)) $$
となるが、(通常) U は保存力と考える。U は速度 $$\dot{q}$$ に依存しないため、L はよりシンプルな形式となる。
:$$L(q, \dot{q}, t) = T(\dot{q}(t)) - U(q(t)) $$
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! 一般化座標
<<<
これまで1質点を記述するのに直交座標(x,,1,,, x,,2,,, x,,3,,)や問題に応じては極座標(r, θ, φ)等を用いて問題を解くことになるが,これを3つの自由度を表現する一般の変数(q,,1,,, q,,2,,, q,,3,,)と表現した方が理論展開が便利になる。例えば直交座標とは
:$$x_1 = x_1(q_1, q_2, q_3), \ \ x_2 = x_2(q_1, q_2, q_3), \ \ x_3 = x_3(q_1, q_2, q_3) \ \ \ \ (21)$$
や逆に
:$$q_1 = q_1(x_1, x_2, x_3), \ \ q_2 = q_2(x_1, x_2, x_3), \ \ q_3 = q_3(x_1, x_2, x_3) \ \ \ \ (22)$$
のように(x,,1,,, x,,2,,, x,,3,,)と(q,,1,,, q,,2,,, q,,3,,)とが一対一に対応しているならば,質点は(q,,1,,, q,,2,,, q,,3,,)の3つの変数で表現してもよい。このような変数の組(q1, q2, q3)を ''一般化座標'' という。
さらにn個の質点からなる質点系では系の自由度は3nであるので,その一般化座標は(q,,1,,, q,,2,,,···, q,,3n,,)であわされる。しかしながら,この質点系にh個の拘束条件
:$$f_{\alpha} = f_{\alpha}(q_1, q_2, \cdots , q_{3n}) \ \ \ \ \ (\alpha = 1, 2, \cdots , h) \ \ \ \ (23)$$
あるいは時間を陽に含む
:$$f_{\alpha} = f_{\alpha}(q_1, q_2, \cdots , q_{3n}, t) \ \ \ \ \ (\alpha = 1, 2, \cdots , h) \ \ \ \ (24)$$
が存在すると質点系の自由度 $$f$$ は $$f= 3n-h$$ となる。したがってこの場合の一般化座標は $$f$$ 個の変数の組(q,,1,,, q,,2,,,···, q,,f,,)で記述できる。また(23)式や(24)式のように拘束条件が座標と時間のみの関数で表現され,速度 $$\dot{q}$$ や加速度$$\ddot{q}$$に関係しない束縛条件をホロノミック(holonomic)な束縛といい,このようなホロノミックな束縛をもつ力学系をホロノミックな力学系という。
<<<
http://www.ishikawa-nct.ac.jp/lab/E/seto/www/files/kaiseki_riki2.pdf より
!! 一般化運動量
U が保存量の場合には、T, U は それぞれ $$\dot{q}, q$$ のみの関数であるため、''一般化された運動量'' p は、L の $$\dot{q}$$ に関する偏微分で表すことができる。
:$$p= \dfrac{\partial T}{\partial \dot{q}} = \dfrac{\partial L}{\partial \dot{q}} $$
----
! [[最小作用の原理]] (principle of least action)
Lの時間積分を、''作用'' (S) と定義する (汎関数である点に注意)。
:$$\displaystyle S(q) = \int_{t_1}^{t_2} L(q(t),\dot{q}(t), t) dt $$
このとき、($$q,\dot{q}$$ によって定められる) 力学的な状態は作用Sを最小にするように実現しており、これを ''最小作用の原理'' という。
そして、最小作用の原理の停留条件から [[オイラー・ラグランジュ方程式]] が得られる。
:$$\displaystyle {\frac {\partial L}{\partial q}} - {\frac {d}{dt}}{\frac {\partial L}{\partial \dot{q}}} = 0$$
なお、この式は一般運動量を用いて、次のように書かれることもある。
:$$\displaystyle {\frac {\partial L}{\partial q}} = \dot{p}$$
----
! ラグランジアンの任意性
* https://dora.bk.tsukuba.ac.jp/~takeuchi/?%E8%A7%A3%E6%9E%90%E5%8A%9B%E5%AD%A6%2F%E3%83%8D%E3%83%BC%E3%82%BF%E3%83%BC%E3%81%AE%E5%AE%9A%E7%90%86#mcce419c
----
! 参考にしたサイト
* https://www.kitasato-u.ac.jp/sci/resea/buturi/hisenkei/sogo/physics.pdf
* http://ocw.nagoya-u.jp/files/61/3.pdf
[[ラグランジュの運動方程式 [物理のかぎしっぽ]|http://hooktail.sub.jp/analytic/equationOfLagrange/]]
$$\dfrac{DA}{Dt} = \dfrac{\partial A}{\partial t} + u \nabla A $$
* A: ベクトル
* t: 時間
* u: 速度
ラプラス方程式Δ𝑓=0は,時間𝑡が含まれていないため,𝑡によって変化しない定常状態を表す方程式である。
http://www.tsuyama-ct.ac.jp/matsuda/mathED/class/CRequation.pdf
----
<<<
ラプラシアンの意味は,微分記号を使った定義式をいくら眺めていても,絶対に理解できない。いったん連続系ではなく,離散系で考えてみると,ラプラシアンの意味がわかる。
...
すると,離散系から連続系に話を戻して,ラプラシアンを使った方程式(ラプラス方程式)
:$$\Delta U = 0 $$
の意味は,
* Uは,空間内の各点において,近傍の値の平均値に等しい
ということであるとわかる。
<<<
https://language-and-engineering.hatenablog.jp/entry/20091223/p1
<<<
ラプラス方程式は、次のような形で、熱の拡散などを表します。
: $$\nabla^2 f = 0 $$
これを差分式であらわすと
:$$\dfrac{f[x-1][y] + f[x+1][y] + f[x][y-1] + f[x][y+1] - 4f[x][y]}{\Delta x} = 0$$
ということになって、f[x][y]の値は次のようになります。
:$$f[x][y] = \dfrac{f[x-1][y] + f[x+1][y] + f[x][y-1] + f[x][y+1]}{\Delta x}$$
要するに、その場の温度は、上下左右の温度を足して4で割ったものという、簡単な式になるわけです。
すべての点についてこの方程式がみたされるようにするわけで、連立方程式を解くということになるんですが、実際のところは繰り返し計算し続ければいいということになります。
<<<
https://nowokay.hatenablog.com/entries/2008/04/20
<<<
調和関数は、変化を起こす力がつりあった結果の平衡状態を表しているとみることができる。
<<<
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1221902787
;ラプラス変換
$$\displaystyle F(s) = \int_{0}^{\infty} f(t) e^{-st} dt $$
; ラプラス逆変換
---
! 導出
まず、次のような関数 $$\dot{f}(t)$$ を定義する (t < 0 では値が 0 )。
$$
\dot{f}(t) =
\begin{cases}
\sqrt{2} \cdot f(t) \cdot e^{- \alpha t} \ \ \ \ \ (t \geq 0)\\
0 \ \ \ \ \ \ \ \ \ \ \ (t < 0)
\end{cases}
$$
$$f(t), \alpha$$ については、 $$\displaystyle \int_{-\infty}^{\infty} |f(t) \cdot e^{- \alpha t}|dt < \infty$$ を満たすものとする。
ここで、$$\dot{f}(t)$$ を[[フーリエ変換]]することを考える 。t < 0 範囲の積分は 0 になるので、
$$\displaystyle \hat{f}(k) = \dfrac{1}{\sqrt{2\pi}} \int_{-\infty}^{\infty} \dot{f}(t) e^{-i k t} dt = \int_{0}^{\infty} f(t) e^{- \alpha t} e^{-i k t} dt$$
と式変形できる。さらに、$$s = \alpha + ik$$ とすると、
$$\displaystyle F(s) = \int_{0}^{\infty} f(t) e^{- st} dt $$
と書くことができる。
$$F(s+ik) = ... $$
* http://www.bmcs.cs.tut.ac.jp/~fukumura/Control/LaplaceSuppliment1117.pdf
---
https://www.hellocybernetics.tech/entry/2017/02/04/175811
http://www.sp.u-tokai.ac.jp/~yasue/ffn/Laplace.pdf
---
https://ja.wikipedia.org/wiki/%E7%A9%8D%E5%88%86%E5%A4%89%E6%8F%9B
http://shochandas.xsrv.jp/differential-eq/diff-eq107.htm
! 概要
<<<
リーマン幾何学(Riemanian geometry)で扱う座標系は、デカルト座標系(Cartesian coordinate system)のように、座標軸が直線で直交しているような単純なものだけでなく、座標軸は直線であるが斜めに交差している直線座標系(linear coordinate system)、さらに、極座標系のように、座標軸が曲線である曲線座標系(curvilinear coordinate system)など、どんな座標系でもよい。
...
リーマン幾何学ではかなり自由な座標系を対象とするが、座標の変化に連れ、点はゆっくりと移動する、つまり連続性が保証されている空間しか対象としていない。また各点の近傍で距離が明白に定義されていることが、リーマン幾何学の大前提である。
<<<
[[座標変換|http://www.moge.org/okabe/temp/Riemann.pdf]] から引用
----
! 一般座標変換 ([[自然基底同士の座標変換]])
<<<
線形変換をもっと一般化した一般座標変換では、ベクトルxをベクトルyに変換する式を行列で表すことはできず、一般の関数形式でしか表せなくなります。
$$y = \begin{bmatrix} y_1 \\ \vdots \\ y_j \\ \vdots \\ y_m \end{bmatrix} = \begin{bmatrix} \phi_1(x) \\ \vdots \\ \phi_j(x) \\ \vdots \\ \phi_n(x) \end{bmatrix} = \phi(x) $$
このような一般座標変換は、基本的な直交座標上のベクトルxを一般的な座標系から見たベクトルyに変換します。
一般的な座標系では座標軸が直交しているとは限らず、しかも空間も平らとは限りません。
...
一般関数y=f(x)のx=xにおける非常に微小な変化をΔxとすると、それに対応するyの微小変化Δyは、その部分の関数を近似的に直線と考え、xにおける接線の傾き、つまり微分係数df/dxを用いて、
$$\Delta y \approxeq \dfrac{df}{dx} \Delta x = \dfrac{dy}{dx} \Delta x $$
と近似できます。 これと同様にして一般座標系でも、非常に微小な領域なら近似的に平らな平面座標系として扱うことができます。基本的な直交座標系で、ベクトルxの微小な変化をΔxとすると、それに対応する一般座標系でのベクトルyの微小な変化Δyは、その領域を平らな平面座標で近似してしまい、その部分に接する接平面の基底zを用いて次のように線形変換することができます。
$$z_j = \nabla \phi_j (x) = \dfrac{\partial \phi_j}{\partial x} = \begin{bmatrix} \dfrac{\partial \phi_j}{\partial x_1} \\ \vdots \\ \dfrac{\partial \phi_j}{\partial x_i} \\ \vdots \\ \dfrac{\partial \phi_j}{\partial x_n} \end{bmatrix} = \begin{bmatrix} \dfrac{\partial y_j}{\partial x_1} \\ \vdots \\ \dfrac{\partial y_j}{\partial x_i} \\ \vdots \\ \dfrac{\partial y_j}{\partial x_n} \end{bmatrix}$$
∇:ナブラ(ハミルトン演算子)
$$Z' = \begin{bmatrix} {z_1}' \\ \vdots \\ {z_j}' \\ \vdots \\ {z_m}' \end{bmatrix} = \begin{bmatrix} \dfrac{\partial y_1}{\partial x_1} & \cdots & \dfrac{\partial y_1}{\partial x_i} & \cdots \dfrac{\partial y_1}{\partial x_n} \\ \vdots & & \vdots & \vdots \\ \dfrac{\partial y_j}{\partial x_1} & \cdots & \dfrac{\partial y_j}{\partial x_i} & \cdots \dfrac{\partial y_j}{\partial x_n} \\ \vdots & & \vdots & \vdots \\ \dfrac{\partial y_m}{\partial x_1} & \cdots & \dfrac{\partial y_m}{\partial x_i} & \cdots \dfrac{\partial y_m}{\partial x_n} \end{bmatrix} $$
$$\Delta y \approx Z' \Delta x = \begin{bmatrix} \dfrac{\partial y_1}{\partial x_1} \Delta x_1 + \cdots + \dfrac{\partial y_1}{\partial x_i} \Delta x_i + \cdots + \dfrac{\partial y_1}{\partial x_n} \Delta x_n \\ \vdots \\ \dfrac{\partial y_j}{\partial x_1} \Delta x_1 + \cdots + \dfrac{\partial y_j}{\partial x_i} \Delta x_i + \cdots + \dfrac{\partial y_j}{\partial x_n} \Delta x_n \\ \vdots \\ \dfrac{\partial y_m}{\partial x_1} \Delta x_1 + \cdots + \dfrac{\partial y_m}{\partial x_i} \Delta x_i + \cdots + \dfrac{\partial y_m}{\partial x_n} \Delta x_n \end{bmatrix} $$
一般座標変換によって構成された空間は、線形なベクトル空間ではなく曲がった空間になります。 それは''ピタゴラスの定理が成り立たない非ユークリッド幾何学の世界に対応''します。
<<<
[[ベクトルと行列 リーマン空間|http://www.snap-tck.com/room04/c01/matrix/matrix13.html]] から引用
---
! リーマン (Riemann) 空間
<<<
非ユークリッド空間において、空間に沿った微小な距離Δsの平方が、
$$\displaystyle (\Delta s)^2 = \sum_{i=1}^n \sum_{j=1}^n g_{ij} \Delta x_i \Delta x_j = \Delta x' G \Delta x $$
$$= \begin{bmatrix} \Delta x_1 \cdots \Delta x_i \cdots \Delta x_n \end{bmatrix} \begin{bmatrix} g_{11} \cdots g_{1i} \cdots g_{1n} \\ \vdots \\ g_{i1} \cdots g_{ii} \cdots g_{in} \\ \vdots \\ g_{n1} \cdots g_{ni} \cdots g_{nn} \end{bmatrix} \begin{bmatrix} \Delta x_1 \\ \vdots \\ \Delta x_i \\ \vdots \\ \Delta x_n \end{bmatrix} $$
という2次形式(quadratic form、変数の2次の項から構成される式)で与えられ、しかもその係数行列Gの成分gijが座標の関数fij(x)として与えられている時、このような空間をリーマン空間(Riemann space)といいます。 Δsは線素とも呼ばれ、線素を求めることを空間の計量、その時の係数行列Gを計量行列といいます。平らなユークリッド空間では、次のように計量行列Gは単位行列 I,,n,, になります。
...
リーマン空間においても、微小領域では近似的に平らなユークリッド空間と考えることができるので、微小距離Δsは一般座標変換の前後で不変な値になります。 基本的な直交座標系における微小距離Δsを、
<<<
[[ベクトルと行列 リーマン空間|http://www.snap-tck.com/room04/c01/matrix/matrix13.html]]
!! 線素 (line element)
[[線素|線積分]] ds は、基底が e,,i,, である点からの非常に小さな変位 d''x'' を用いて、次のように表すことができる。
:$$\displaystyle ds^2 = d\mathbf{x} \cdot d\mathbf{x} = \left( \sum_{i=1}^N dx^i e_i \right) \left( \sum_{j=1}^N dx^j e_j \right) = \sum_{i=1}^N \sum_{j=1}^N dx^i dx^j (e_i \cdot e_j)$$
なお、''x'' が媒介変数 (t) により $$\mathbf{x}(t)$$ と表せ、e,,i,, が正規直交座標の基底であれば、[[線積分]] でよく用いられる形式と一致する。
: $$ds = \sqrt{{dx_1}^2 + {dx_2}^2 + \cdots + {dx_n}^2} = \sqrt{ \left( \dfrac{dx_1(t)}{dt} \right) ^2 + \left( \dfrac{dx_2(t)}{dt} \right) ^2 + \cdots + \left( \dfrac{dx_n(t)}{dt} \right) ^2 } dt$$
ちなみに、(変位を表している) ベクトル d''x'' のことを、線素ベクトル (line element vector) と言うこともある (みたい)。
!! 線積分
----
近接した二つの座標間を結ぶベクトル ds を、
$$\displaystyle ds = dx^1 e_1 + \cdots + dx^N e_N = \sum_{i=1}^N dx^i e_i$$
と定義したものを、線素ベクトルという。
http://eman-physics.net/relativity/metric.html
---
http://ziguzaku.hatenablog.com/entry/2014/01/21/102254
ここを参考に作ってみた。
* [[レストラン サン・ミケ-レ日記:リーゾ|http://katsuji.ko-co.jp/e10962.html#more]]
# オリーブオイルににんにくの香りつける
# 玉ねぎ炒める (少しバターを入れる)
# 細かく切ったにんじんを、そこに入れる
# 細かく刻んだアーモンドを入れる
# 弱火でとろとろ
# 別のフライパンで、ベーコンとエリンギを炒める
# 玉ねぎ・にんじんと一緒にし、弱火で時間をかけて火を通す
あとはこれを、ご飯と一緒にする。
* それなりにおいしくできたが、手間にあわないかな...
* 刻んだアーモンドの食感がいまいち、うんと細かく刻まないと...
<<<
関数f(x)が任意の実数x,yに対し、
$$| f(x) - f(y) | = k |x - y|$$
を満たす0以上のkがとれるとき、関数f(x)はリプシッツ連続であるといい、kをリプシッツ定数という。
<<<
http://yusuke-ujitoko.hatenablog.com/entry/2017/05/17/005434
! Subversion
<<tiddler "Subversion">>
! Mercurial
<<tiddler "Mercurial>>
! Git
<<tiddler "Git">>
* [[いろいろ hg and git | http://www.e-hdk.com/misc/hg-and-git.html ]]
<<tag ルジャンドル変換>>
熱力学や解析力学においては、(単調増加/減少する) 関数 $$f$$ から、次の関係が成り立つような関数 $$g$$ を作成する場面がある (g から f が復元できるところがポイント)。
: $$f(a, b, c) \Leftrightarrow g \left(\dfrac{\partial f}{\partial a}, b, c \right)$$
このような関数の作成/復元する際に、ルジャンドル変換 (Legendre transformation) が使用される。
----
! 定義
[[下に凸な関数|凸関数]] $$f (f' \geq 0)$$ のルジャンドル変換 は次のように定義される ($$\displaystyle \sup_{x}$$ は変数 x を動かしたときの上限)。
:$$ {\displaystyle f^{*}(p) = \sup_{x}\,\!\left(px-f(x)\right)}$$
定義から明らかなように、$$\displaystyle \sup_{x}\,\!\left(px-f(x)\right) $$ が定まる場合のみ、ルジャンドル変換によって新しい関数を与えることができる。ただし、$$f' = 0$$ となる区間がある場合には、$$px - f(x)$$ が最大となる $$x$$ は一意に定まらない点には注意。
なお、上限が定まる場合でも、もととなる関数 f(x) が凸関数でない場合、新たに定義された関数 f*(p) は逆変換してももとの関数 f(x) へは戻らない。そのため、ルジャンドル変換で扱うのは、基本的に凸関数である。
また、$$f$$ が [[上に凸な関数|凸関数]] の場合の定義は、次のようになる。
:$$ {\displaystyle f^{*}(p) = \inf_{x}\,\!\left(px-f(x)\right)}$$
- - - - -
!! 定義の別な表記
上記の定義は、任意の $$p \ (p_{inf} < p < p_{sup})$$ を用いて、次のようにまとめることもできる。
: $$f^{*}(p) \equiv p x - f(x)$$ at $$x$$ such that $$f'(x-0) \leq p \leq f'(x+0)$$ .
(かなりざっくり言うと) これは、「ある p の値を選び、p と合う $$f'(x)$$ が得られる x の値を $$p x - f(x)$$ で計算した値が $$f^*(p)$$ になる」ということを意味する。
- - - - -
!! 2つの定義の関係
(大雑把な説明としては) $$f$$ が下に凸であれば、 $$px - f(x)$$ は上に凸であり、最大になる点で微分可能であれば、
:$$\dfrac{d}{dx} \left[ (px - f(x) \right] = p - f'(x) = 0$$
となる。さらに、微分可能でない場合でも、
:$$p - f'(x-0) \geq 0 \geq p - f'(x + 0)$$
となる。
----
このことから分かるように、変換において x と p は必ずしも一対一対応するわけではない。
----
! 幾何的なイメージ
以下の説明は、厳密ではないので注意。
!! 関数の2つの表し方
点座標 と 接線座標 という2つの表し方を考える。
<<<
;(1)曲線の二つの表し方
二次元xu空間内の一つの曲線を表すのに二つの方法がある。
# 曲線が点の集合からなると考えて、関数u=u(x)によって与える方法。この場合の(x,u)の事を文献1.では ''“点座標” ''と呼んでいる。
# 曲線が、接線の集合の包絡線であると考えて、一つの接線がその曲線に接するための条件を与える。その条件とは、具体的に言うと、[接線の傾きξ]と[接線がu軸を切る切辺の値ω]です。その二つの値の集合(これも別の空間の一つの曲線を表す関数とみなすことができる)によって曲線を表す方法。 この二つの値の集合 ''(傾きの値ξ,切辺の値ω)'' を文献1.に習って ''“接線座標”'' と呼ぶことにしよう。
...
;[補足説明]
1.の方法の ''“点座標”'' の集合と2.の方法による ''“接線座標”'' の集合は、1対1で対応します。もちろん''完全に1対1で対応するためには、関数u=u(x)の勾配がxとともに単調に変化する凹関数あるいは凸関数でなければなりません''。ルジャンドル変換を適用する熱力学関数は、実際にこの条件を満たしています。
<<<
[[ルジャンドル変換とは何か(Legendre transformation)|http://fnorio.com/0146Legendre_transformation/Legendre_transformation.html]]
- - - - -
!! ルジャンドル変換
ざっくりいうと、一変数関数のルジャンドル変換は、
ある関数 u (u: x座標 → y座標) を、「U: 接線の傾き → 切片」という表現に変えること。
:$$u = u(x)$$
$$(x_0, u(x_0))$$ を通る接線の傾き ξ は、(その接線の) 切片 ω を用いて、
:$$\xi(x_0) = \dfrac{du}{dx}|_{x=x_0} = \dfrac{u(x_0) - \omega}{x_0}$$
と表せる。これを切片 ω について整理すると、
:$$\omega = u(x_0) - x_0 \xi(x_0) $$
となる。ここで、''ξ(x) が単調増加 (u" = ξ' > 0) であれば逆関数が存在するので、'' x は ξ の関数として表せ、
:$$\omega(\xi) = u[x(\xi)] - x(\xi) \xi$$ 【式A】
ω は接線の傾き (ξ) の関数となる。つまり、''「接線の傾き (ξ) → 切片 (ω)」という写像になっている''。
- - - - -
!! 変換後の関数の特徴
【式A】を ξ で微分すると、
:$$\dfrac{d \omega}{d\xi} = \dfrac{du}{dx} \dfrac{dx}{d\xi} - \xi \dfrac{dx}{d\xi} - x(\xi) = - x(\xi)$$ 【式B】
という関係が得られる ($$\xi = \dfrac{du}{dx}$$ の関係に注意) 。
x(ξ) は単調増加なので、ω は単調減少になる。
- - - - -
!! 逆ルジャンドル変換
【式A】に対して、ルジャンドル変換の操作を適用すると、
:$$W\left(\dfrac{d\omega}{d\xi}\right) = \omega \left[\xi \left(\dfrac{d\omega}{d\xi}\right) \right] - \xi \left(\dfrac{d\omega}{d\xi}\right) \cdot \dfrac{d\omega}{d\xi}$$
といった関係が得られる。この式に【式A】と【式B】の関係とを代入すると、
:$$W\left(\dfrac{d\omega}{d\xi}\right) = u \left[ x (\xi) \right] - x(\xi) \xi - \xi (-x) = u \left[ x (\xi) \right]$$
となる。これは、変換前の関数である。
レイノルズ応力輸送方程式
* http://wattandedison.com/turbulent_heat_transfer.pdf
----
* https://en.wikipedia.org/wiki/Reynolds-averaged_Navier%E2%80%93Stokes_equations
* https://www.cfd-online.com/Wiki/Introduction_to_turbulence/Turbulence_kinetic_energy
! レイノルズ分解 (Reynolds decomposition)
乱流の物理量 (f) を ''時間平均値'' ($$\overline{f}$$) と ''変動値'' ($$f'$$) に分けて表すことをレイノルズ分解という。
$$\ \ \ \ \ f = \overline{f} + f'$$
''時間平均値'' は、ある長い時間間隔 (T) を用いて、それぞれ次のように定義される。
$$\displaystyle \ \ \ \ \ \overline{f} = \lim_{T \to \infty} \dfrac{1}{T} \int_{0}^{T} f dt$$
つまり、時間平均値は、時間に依存しない。
$$\ \ \ \ \ f(x,y,z,t) = \overline{f}(x,y,z) + f'(x,y,z,t)$$
この定義により、以下のような代数操作が可能になる。
$$\ \ \ [1]\ \ \stackrel{=}{f} = \bar{f}$$
$$\ \ \ [2] \ \ \overline{f + g} = \overline{f} + \overline{g}$$
$$\ \ \ [3] \ \ \overline{f'} = 0$$
$$\ \ \ [4] \ \ \overline{\bar{f} \cdot g'} = 0$$
$$\ \ \ [5] \ \ \overline{\bar{f} \cdot g} = \overline{f} \cdot \overline{g}$$
$$\ \ \ [6] \ \ \overline{\dfrac{\partial f}{\partial s}} = \dfrac{\partial \bar{f}}{\partial s} \ \ \ \ \ $$
(∂/∂s は空間微分を意味する)
- - - - -
!! 導出
導出に関しては、計算してみればよい (みたい)。
$$\displaystyle \ \ \ [1] \ \ \stackrel{=}{f} = \lim_{T \to \infty} \dfrac{1}{T} \int_{0}^{T} \stackrel{-}{f} dt = \lim_{T \to \infty} \dfrac{\stackrel{-}{f}}{T} (T - 0) = \stackrel{-}{f} $$
$$\displaystyle \ \ \ [2] \ \ \overline{f + g} = \lim_{T \to \infty} \dfrac{1}{T} \int_{0}^{T} (f + g) dt = \lim_{T \to \infty} \dfrac{1}{T} \int_{0}^{T} f dt + \lim_{T \to \infty} \dfrac{1}{T} \int_{0}^{T} g dt = \overline{f} + \overline{g} $$
$$\displaystyle \ \ \ [3] \ \ \overline{f'} = \overline{f - \bar{f}} = \bar{f} - \stackrel{=}{f} = 0$$
$$\displaystyle \ \ \ [4] \ \ \overline{\bar{f} \cdot g'} = \lim_{T \to \infty} \dfrac{1}{T} \int_{0}^{T} (\bar{f} \cdot g') dt = \bar{f} \cdot \bar{g'} - \lim_{T \to \infty} \dfrac{1}{T} \int_{0}^{T} ( \dfrac{d\bar{f}}{dt} \cdot \bar{g'}) dt = 0$$
$$\ \ \ [5] \ \ \overline{\bar{f} \cdot g} = \overline{\bar{f} \cdot (\bar{g}+ g')} = \overline{\bar{f} \cdot \bar{g}} + \overline{\bar{f} \cdot g'} = \overline{f} \cdot \overline{g}$$
$$\ \ \ [6] \ \ \overline{\dfrac{\partial f}{\partial s}} = \overline{ \dfrac{\partial \bar{f}}{\partial s} + \dfrac{\partial f'}{\partial s} } = \dfrac{\partial \bar{f}}{\partial s}$$
; 補足
$$\displaystyle \ \ \ \ \ \overline{\dfrac{\partial f'}{\partial s}} = \lim_{T \to \infty} \dfrac{1}{T} \int_{0}^{T} \dfrac{\partial f'}{\partial s} dt = \lim_{T \to \infty} \dfrac{\partial }{\partial s} \left( \dfrac{1}{T} \int_{0}^{T} f' dt \right)= 0 $$
[[2.2.1.2.2 REYNOLDS AVERAGED NAVIER-STOKES EQUATIONS|http://daad.wb.tu-harburg.de/fileadmin/BackUsersResources/Flood_Probability/2D/Steffi-2D/pdf/Reynolds_average_Navier-Stokes_equation.pdf]] より
----
! リファレンス
* [[2.2.1.2.2 REYNOLDS AVERAGED NAVIER-STOKES EQUATIONS|http://daad.wb.tu-harburg.de/fileadmin/BackUsersResources/Flood_Probability/2D/Steffi-2D/pdf/Reynolds_average_Navier-Stokes_equation.pdf]]
* http://ring-me.eng.hokudai.ac.jp/takeda/StatisticalFM/21.pdf
* http://www.mit.edu/course/1/1.061/www/dream/SEVEN/SEVENTHEORY.PDF
* [[3.RANS - 流体解析入門|http://jikosoft.com/cae/cfd_basic03.html]]
[[ナビエ・ストークス方程式]] を [[レイノルズ分解]] した上で、時間平均を取ることによって得られる式。''RANS'' (Reynolds-Averaged Navier-Stokes) と書かれることも多い。
:$$\displaystyle \dfrac{\partial \overline{v_i}}{\partial t} + \rho \bar{v_j} \dfrac{\partial \bar{v_i}}{\partial x_j} = \rho F - \dfrac{\partial \overline{p}}{\partial x_i} + \mu \dfrac{\partial }{\partial x_j} \left( \dfrac{\partial \overline{v_i}}{\partial x_j} + \dfrac{\partial \overline{v_j}}{\partial x_i} \right) - \dfrac{\partial}{\partial x_j} ( \rho \overline{v_i' v'_j})$$
左辺第一項は、十分な時間を取れば 0 になるので、書かれないことが多い。
----
! 導出
まず、前提として、''非圧縮性流体を仮定する''。
!! 連続の式について
[[連続の式]] の各パラメータを [[レイノルズ分解]] すると、
:$$\nabla \cdot (\overline{v} + v') = \dfrac{\partial \bar{v_i}}{\partial x_i} + \dfrac{\partial v'_i}{\partial x_i} = 0 \ \ \ \ \ $$ 【式1】
となる。この式を時間平均すると、
:$$\overline{\nabla \cdot (\overline{v} + v')} = \overline{\dfrac{\partial \bar{v_i}}{\partial x_i}} + \overline{\dfrac{\partial v'_i}{\partial x_i}} = 0$$
となるが、変動値の項の時間平均 (左辺第二項) は 0 なので、
:$$\nabla \cdot (\overline{v}) = \dfrac{\partial \bar{v_i}}{\partial x_i} = 0 \ \ \ \ \ $$
となる。さらに、これを【式1】に代入すると、次の関係が得られる。
:$$\nabla \cdot (v') = \dfrac{\partial v'_i}{\partial x_i} = 0 \ \ \ \ \ $$ 【式2】
!! ナビエ・ストークス方程式について
同様に、 [[ナビエ・ストークス方程式]] の各パラメータを [[レイノルズ分解]] すると、
:$$\dfrac{\partial (\overline{v} + v')}{\partial t} + ((\overline{v} + v') \cdot \nabla) (\overline{v} + v') = - \dfrac{1}{\rho} \nabla (\overline{p} + p') + \nu \nabla^2 (\overline{v} + v') + (\bar{F} + F')$$
となる。これを時間平均すると、移流項以外の変動の時間平均は 0 なので、
:$$\dfrac{\partial \overline{v}}{\partial t} + \overline{(\overline{v} \cdot \nabla) \overline{v}} + \overline{(v' \cdot \nabla) v'} = - \dfrac{1}{\rho} \nabla \overline{p} + \nu \nabla^2 \overline{v} + \bar{F}$$
となる。また、$$ \dfrac{\partial \overline{v}}{\partial t} = 0$$ を用いて左辺第一項を消し、項を並べ替えると、次の関係が得られる。
:$$\overline{(\overline{v} \cdot \nabla) \overline{v}} = \bar{F} - \dfrac{1}{\rho} \nabla \overline{p} + \nu \nabla^2 \overline{v} - \overline{(v' \cdot \nabla) v'} \ \ \ \ $$ 【式3】
さらに、この式の右辺の最後の項は、【式2】を用いると
: $$\overline{(v' \cdot \nabla) v'} = \overline{(v' \cdot \nabla) v'} + \overline{(\nabla \cdot v') v'} = \overline{\nabla (v' v')} $$
という変形が可能である。よって、【式3】の両辺に密度を掛け、最終的に、
:$$\rho \overline{(\overline{v} \cdot \nabla) \overline{v}} = \rho \bar{F} - \nabla \overline{p} + \mu \nabla^2 \overline{v} - \overline{\nabla (\rho v' v')}$$
という式が得られる。
- -
; ナブラを使わずに表した場合
【式3】の両辺に密度を掛けた式は、
:$$\displaystyle \rho \bar{v_j} \dfrac{\partial \bar{v_i}}{\partial x_j} = \rho F - \dfrac{\partial \overline{p}}{\partial x_i} + \mu \left( \dfrac{\partial^2 \overline{v_i}}{\partial x_i \partial x_j} \right) - \rho \overline{v'_j \dfrac{\partial v'_i}{\partial x_j}}$$
となり、2階のテンソルは対角成分と対称成分に分解できるので、上の式はさらに変形できる。
:$$\displaystyle \rho \bar{v_j} \dfrac{\partial \bar{v_i}}{\partial x_j} = \rho F - \dfrac{\partial \overline{p}}{\partial x_i} + \mu \dfrac{\partial }{\partial x_j} \left( \dfrac{\partial \overline{v_i}}{\partial x_j} + \dfrac{\partial \overline{v_j}}{\partial x_i} \right) - \rho \overline{v'_j \dfrac{\partial v'_i}{\partial x_j}} $$
最後に、右辺の最後の項の変形すれば、同様の式が得られる。
:$$\displaystyle \rho \bar{v_j} \dfrac{\partial \bar{v_i}}{\partial x_j} = \rho F - \dfrac{\partial \overline{p}}{\partial x_i} + \mu \dfrac{\partial }{\partial x_j} \left( \dfrac{\partial \overline{v_i}}{\partial x_j} + \dfrac{\partial \overline{v_j}}{\partial x_i} \right) - \rho \dfrac{\partial}{\partial x_j} ( \overline{v_i' v'_j})$$
- -
; 補足
右辺の最後の項の変形は、【式2】より得られる
:$$\dfrac{\partial v'_i}{\partial x_i} = v'_i \dfrac{\partial v'_i}{\partial x_i} = \overline{v'_i \dfrac{\partial v'_i}{\partial x_i}} = 0$$
という関係を利用している (【式2】の両辺に v',,i,, を掛け、時間平均する)。
:$$\dfrac{\partial}{\partial x_j} ( \overline{v_i' v'_j}) = \overline{\dfrac{\partial}{\partial x_j} (v_i' v'_j) } = \overline{ v'_i \dfrac{\partial v'_j}{\partial x_j}} + \overline{ v'_j \dfrac{\partial v'_i}{\partial x_j}} = \overline{ v'_j \dfrac{\partial v'_i}{\partial x_j}}$$
!! 参考にしたもの
* http://www.caero.mech.tohoku.ac.jp/publicData/Daiguji/Chapter10.pdf
* [[Introduction to turbulence/Reynolds averaged equations -- CFD-Wiki, the free CFD reference|https://www.cfd-online.com/Wiki/Introduction_to_turbulence/Reynolds_averaged_equations]]
* http://www.opencae.or.jp/wp-content/uploads/2015/06/%E7%AC%AC7%E5%9B%9E_%E6%95%B0%E5%80%A4%E6%B5%81%E4%BD%93%E5%8A%9B%E5%AD%A6.pdf
----
! Boussinesq eddy-viscosity approximation (ブシネスク近似)
レイノルズ応力の項は、粘性項のアナロジーを用いて、しばしば次のように変形される。
:$$- \rho \overline{v_i' v_j'} = \nu_t \left( \dfrac{\partial \overline{v_i'}}{\partial x_j} + \dfrac{\partial \overline{v_j'}}{\partial x_i} \right) - \dfrac{2}{3} k \delta_{ij} $$
$$\nu_t, k$$ は、それぞれレイノルズ粘性、乱流運動エネルギーである。
なお、右辺第二項は、境界層のような単純せん断乱流の場合には、平均流に対する寄与が小さいとして無視されることが多い。
http://www3.dicca.unige.it/guerrero/turbulence2020/slides/5governing_equations.pdf
---
----
この式はさらに変形でき、
$$\dfrac{\partial \overline{v}}{\partial t} + (\overline{v} \cdot \nabla) \overline{v} = - \dfrac{1}{\rho} \nabla \overline{p} + \nu \nabla^2 \overline{v} + F - \overline{(v' \cdot \nabla) v'} $$
となる (はず)。そして、
$$\displaystyle \rho \dfrac{\partial \overline{v_i}}{\partial t} + \rho \bar{v_j} \dfrac{\partial \bar{v_i}}{\partial x_j} = - \dfrac{\partial \overline{p}}{\partial x_i} + \mu \left( \dfrac{\partial \overline{v_i}}{\partial x_j} + \dfrac{\partial \overline{v_j}}{\partial x_i} \right) + \rho F - \rho \overline{v_i' v_j'}$$
* lessライクな 移動と検索
* バッファを読み取り専用モードにする
** C-x C-q で解除可能
* ファイルが変更されたら自動で読み直す
* 検索にマッチした文字列をハイライト
** 他の拡張と干渉する可能性あり
* hook関数
* goto-line
** L に割り当てた
* package
** ちょっと怪しいが...
----
* ファイルのリロードを、どっかのキーに割り当てる
* mark は?
* 可能なら bracket へ移動も
* syntax-table って使わなくても作るもの?
* 入力しないので、 abbrev-table は要らない
* 複数の検索結果に色が着くとよい
{{{
(defstruct search-info word regexp cf)
(setq yyy (make-search-info :word "ERROR" :regexp nil :cf nil))
(search-info-word yyy)
(search-info-regexp yyy)
(search-info-cf yyy)
}}}
* [[外国為替相場:三菱東京UFJ銀行|http://www.bk.mufg.jp/ippan/gaitame/index.html]]
* [[過去の為替レートを調べる:ネット関連の小ネタ|http://www.relief.jp/itnote/archives/002210.php]]
{{{
アメリカ ドル USDJPY=X
オーストラリア ドル AUDJPY=X
カナダ ドル CADJPY=X
イギリス ポンド GBPJPY=X
スイス フラン CHFJPY=X
欧州 ユーロ EURJPY=X
}}}
[[【2017年版】引っ越し業者人気ランキングBEST12 - 引越し女子部|http://hikkoshi.blocube.net/entry/ranking]]
* [[職業としてのプログラミング ビットシフトの落とし穴 - 算術シフトと論理シフト|http://proger.blog10.fc2.com/blog-entry-62.html]]
* [[複雑な演算子|http://www9.plala.or.jp/sgwr-t/c/sec14.html]]
* [[c言語における数値表現|http://www.isc.meiji.ac.jp/~deptec/cmanapdx1.html]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
シフト演算の処理には、算術シフトと論理シフトの2種類がある。
それぞれの処理は、
* ''算術シフト'': シフトによって空いたビットを符号ビットで埋める
* ''論理シフト'': シフトによって空いたビットを0で埋める
となるため、算術シフトと論理シフトの場合で、右シフト演算の結果は異なる。
そして、C言語では、
* 型によって挙動(算術シフトか論理シフトか)がかわることがある
* C言語の規格として、算術シフトか論理シフトかは不定
* Nbitの算術シフトと2のN乗での除算は等価ではない
であるため、注意が必要である。
* [[helvetica | http://www.amazon.co.jp/%E3%83%98%E3%83%AB%E3%83%99%E3%83%81%E3%82%AB-~%E4%B8%96%E7%95%8C%E3%82%92%E9%AD%85%E4%BA%86%E3%81%99%E3%82%8B%E6%9B%B8-DVD-%E3%82%B2%E3%82%A4%E3%83%AA%E3%83%BC%E3%83%BB%E3%83%8F%E3%82%B9%E3%83%88%E3%82%A6%E3%82%A3%E3%83%83%E3%83%88/dp/B001DCSBYG/ref=sr_1_1?ie=UTF8&s=dvd&qid=1229958086&sr=8-1]]
** という映画があるらしい...
** 自体は、世界でいちばん有名な欧文書体らしい...
* [[EAMES FILMS:チャールズ&レイ・イームズの映像世界 [DVD]: |http://www.amazon.co.jp/EAMES-FILMS-%E3%83%81%E3%83%A3%E3%83%BC%E3%83%AB%E3%82%BA-%E3%83%AC%E3%82%A4%E3%83%BB%E3%82%A4%E3%83%BC%E3%83%A0%E3%82%BA%E3%81%AE%E6%98%A0%E5%83%8F%E4%B8%96%E7%95%8C-DVD/dp/B00005MIG1/ref=sr_1_2?ie=UTF8&s=dvd&qid=1229763476&sr=8-2]]
* [[ドキュメンタリー映画「小三冶」|http://cinema-kosanji.com/]]
;プール
* [[東京体育館|http://www.tef.or.jp/tmg/index.php]]
* [[世田谷総合運動場|http://www.se-sports.or.jp/sisetu/02sougou_onsui.php]]
* [[室内プールリンク集|http://www.asobi-map.com/onsui.htm]]
* [[東急バスナビ|http://www.busnavi.net/cgi-bin/tsection.cgi?a=k&m=TK&k=TKST010301]]
; 泳ぎ方
* [[SportsClick:水泳|http://www.sportsclick.jp/swimming/01/index.html]]
* [[神統流|http://www.gryphon.co.jp/index.php?option=com_content&task=view&id=26&Itemid=2]]
* [[泳法図解|http://www.chiba-c.ed.jp/awakou/homepage/sc/club/sports/h_t_swimming/eihouzukai.htm]]
* [[ほぼ日刊イトイ新聞 - 黒柳さんが話した、黒柳さんのこと。|http://www.1101.com/kuroyanagi/2008-09-09.html]]
* [[水中ヨガ|http://jp.youtube.com/watch?v=cU76QqT76sQ]]
* [[立ち泳ぎ【こっそり水泳マスター】|http://www.cossoriswim.com/iroiro/tachi.html]]
* [[流れの力|http://www.kiesinc.jp/swim/stream/suiei1.htm]]
** あってるかは知らないが...
■ タクシーの場所を聞く
Where can I catch a cab?
How much is it to XXX?
■ タクシー電話
- XXX taxi, May I help you?
+ I'd like a taxi, please.
- From where?
+ XXX Airport.
(場合によっては、もう少し細かい場所を聞かれるかも...)
■ 電話でタクシーを呼びたいことを伝える場合
+ I'd like to call a taxi. Can you help me?
+ I don't know how to call one.
- Certainly, ma'am. Where would you like to go?
- Where would you like to go?
+ I'd like to go to XXX. Is it far from here?
■ タクシーを呼んでおいてもらう
Could you call me a taxi.
Please get me a taxi at 7 o'clock.
■ タクシー
I'd like to go XXX.
How much is it to there?
- To where?
To XXX, please.
XXX dollars back, please.
May I have a receipt?
----
■ フロントへ電話
- Hello. How may I help you?
+ Hello. This is room 1203.
- We'll send someone to your room.
The light in the room doesn't work.
Could you please fix it?
Could you bring a new one?
We don't have enough towels. Could you bring a hand towel?
Could we have some more shampoo?
There is no hot water. お湯が出ません
I'm locked out. 締め出されてしまいました
The water is leaking. 水が漏れています。
Could you send someone up? ボーイを呼んで頂けませんか?
The toilet is blocked. トイレが詰まりました。
----
{{{
May I speak to XXX in room 315?
I'd like to leave a message for him.
Please tell him that YYY stay in room zzz.
}}}
<<tag "英語">>
<div class="tc-table-of-contents">
<<toc-selective-expandable '英語' sort[title]>>
</div>
----
* [[ビジネス英語用語集|http://www.rondely.com/zakkaya/dic2/index.shtml]]
* [[英文レターあれこれ|http://www.rondely.com/zakkaya/ltr/index.htm]]
* [[ビジネス英語表現集:スペースアルク|http://www.alc.co.jp/eng/newsbiz/expression/index.html]]
* [[大学入試の語彙力の測定テスト~英単語のボキャブラリーレベル計測試験~ - Weblio |http://uwl.weblio.jp/vt/take?bc=exam&mc=UEE]]
; Cover Letter
* [[完全にかっこいいカバーレター・改 | http://azcog.blog.shinobi.jp/がっつり/完全にかっこいいカバーレター・改]]
* http://httrksk.blogspot.jp/2010/10/blog-post_12.html
----
Rule of thumb - - - 経験則・大ざっぱなやり方
* [[英語の発音記号 | http://hatsuon.msize.net/symbol.html]]
* [[英語の発音記号 読み方と音声サンプル | http://www.linkage-club.co.jp/entry/hatsuonkigo.html]]
* [[発音ページ | http://ww5.tiki.ne.jp/~karz/sym/symbol2.htm]]
----
; ʌ
(日本語の「あ」に良く似た発音)
(どのアルファ ベットを^ と発音するのでしょうか。それはUです。)
luck, study, tunnel
; æ
(多くの場合、Aをæと発音)
(不思議なことに、CATのæだけ はほとんどの人が発音できています)
cat, bag, gal, apple
; ɑ
(基本単語のOはほとんどがこのaの音です)
(日本語の「あ」はあごを固定して発音、英語のaはあごを動かしながら慣性力で十分に開きながら、動かしながら発音します。)
body, box, got, father, heart, farm
; a
----
; ə
(あいまい母音.. らしい)
(アクセントのないほうの母音 a i u e o は全部このあいまい母音で発音して Nativeに通じます)
; əː
----
; i
(英語の i は日本語の「い」と「え」の中間の音です。)
will, tip, pity
; iː
(実際の英語では、i: はとても緊張させた音、i は日本語の「い」よりもかなりリラックスした発音になります。)
see, been
----
; u
; uː
----
; e
----
; ɔ
; ɔː
; o
* ...X, followed by Y and Z
** X に続いて Y と Z が続く
* have a Y of X
** https://www.bizengconversation.com/2019/06/01/technical-writing-have-a-y-of-x/
-
* in a more deterministic manner
; 音の連結・消失
* [[英語 リスニングのコツがつかめる7つの発音ルール(音の連結・消失) |http://enjoylifeinenglish.blog112.fc2.com/blog-entry-369.html]]
* [[英語リスニングを諦める前に確認すべきたった4つの音の変化|http://www.englishplus.jp/listening/4oto/]]
; 練習方法
* [[英語のリスニング力が伸びない理由と確実に上達する7つのコツ|http://www.berlitz-blog.com/how-to-improve-listenning]]
* [[What A is likeってどういう意味ですか? - では例文とともにご説明いたしまし | http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1329327748]]
** What A is like - Aにあたる人が(物が)いったいどのような風なのか?
* What is there to do?
** 何かすることある?
** 何か~するためのことがありますか
** [[vol.07【物語ゲーム】英語で日本旅行-「あまりやる事がない」は英語で「there isn't much to do」【沖縄編】: 【Kei式】カドを立てない英会話術辞典 | http://everydayhomework.seesaa.net/article/413465261.html]]
* What do you do (for a living)?
** 仕事は何をしているのですか。
** [[【1日1分1フレーズ!アメリカン雑談集】「どんな仕事をされているんですか?」 | http://hapaeikaiwa.com/2013/11/18/%E3%80%901%E6%97%A51%E5%88%861%E3%83%95%E3%83%AC%E3%83%BC%E3%82%BA%EF%BC%81%E3%82%A2%E3%83%A1%E3%83%AA%E3%82%AB%E3%83%B3%E9%9B%91%E8%AB%87%E9%9B%86%E3%80%91%E3%80%8C%E3%81%A9%E3%82%93%E3%81%AA/]]
* How much time do you manage to ...
** manage one's time [時間をやりくりする]
<<tag "動詞の分類">>
----
! 動詞の分類
* [[リベラル21 瞬間動詞と継続動詞|http://lib21.blog96.fc2.com/blog-entry-1954.html]]
* [[動詞の分類 ことば雑感/ウェブリブログ|http://languages.at.webry.info/201403/article_1.html]]
* [[時制を旅する(10) 動詞を分ければ時制が分かる 日本語と英語をつなぐ/ウェブリブログ|http://je.at.webry.info/201204/article_26.html]]
----
! 自動詞・他動詞
* [[ようやくわかった!自動詞と他動詞の違いを2枚の図で説明しよう | http://toeic-guru.jp/transitivity]]
* [[自動詞 他動詞 日本語と英語の違い | http://je.at.webry.info/201201/article_3.html]]
** 英語では、日本語に比べ、他動性が低い動作の場合にも文法的に他動詞が使われる。
** 例: reach, see, hear, ...
* [[コウモリは哺乳類、discussは他動詞|http://je.at.webry.info/201111/article_22.html]]
```
言語学に「他動性」という用語があります。動詞が対象物に対して与える影響の大きさを表す用語です。日本語では、対象物に与える影響が大きいような動詞には「を」という助詞をしばしばあてます。「・・を始める」「・・を進める」「・・を壊す」など。一方、対象物に与える影響が小さい動詞には「に」や「について」などをあてます。「駅に着く」「野球について話す」とか。駅も野球も、着かれても話されてもびくともしません。つまりこれら動詞は他動性が低いのです。
この他動性の大小の感覚は言語によって異なります。そこが日本語的な感覚の他動詞と英語的な他動詞の感覚のずれです。英語は他動性が低い動詞でも、他動詞として扱う傾向があります。
```
[[絵で知る英語の文型(5); 他動詞とSVOのしくみ |http://je.at.webry.info/201208/article_20.html]]
----
! 動作動詞と状態動詞
* 動作動詞:
** 現在形で使われたときは「習慣的動作」を意味し、
** 現在進行形ではじめて「今現在行われている動作」を表します。
* 状態動詞
** 事物の構成・特徴・関係など永続的なことについて述べており、その始まりや終わりも意識されないので、進行相を取ることはありません。したがって、進行形(be + ~ing)を取ることはできません。
** 状態動詞は、原則的に進行形を作ることはできませんが、以下のような場合は進行形にすることができます。
*** 意識的に一時的行為を表している場合
*** 比較級などの事態の推移を表す副詞を伴って:「(だんだん)~するようになっている」
* [[進行形にできる動詞・できない動詞 - RAVCO|http://www.ravco.jp/cat/view.php?cat_id=5222]]
* [[リベラル21 ことば (12) 現在形|http://lib21.blog96.fc2.com/blog-entry-292.html]]
----
! 句動詞
```
動詞のしろに副詞や前置詞、名詞がつき、1つの動詞としての役割を果たすものを句動詞と言います。
・ 自動詞+副詞
・ 他動詞+副詞
・ 動詞+前置詞
```
[[句動詞の使い方 | http://honmono-eigo.com/v-syurui/kudoushi.html]]
!! 句動詞 (動詞 + 前置詞)
```
「自動詞+前置詞+目的語」であれば目的語を前置詞の前に置くことはできない、一方、副詞であれば目的語の位置を変えることができる、という解説をしました。
```
* [[句動詞 (1) アルク|http://www.alc.co.jp/vocgram/article/evine/2009/05/_vs_1.html]]
* [[句動詞 (2) アルク|http://www.alc.co.jp/vocgram/article/evine/2009/05/post_353.html]]
!! 句動詞 (動詞 + 副詞)
```
「副詞」は文中の動詞とピッタリくっつけて置いたり、文末に置いたり、比較的自由に配置できます。だから、目的語の「何を」が「動詞+副詞」の直後に来ても、動詞と副詞の間に割り込んでもかまいません。こんな具合です。
⊿あたしはコートを着た。
I put on my coat.(○)
I put my coat on.(○)
ただし、気をつけなくてはいけないのは、目的語の「何を」が代名詞になったときです。名詞が代名詞化すると、意味も語数も軽くなります。それを文末に置くと、お尻が軽くなって頭でっかちな、とても不安定な英文になります。だから、目的語の「何を」が代名詞なら、必ず動詞と副詞でサンドイッチにしてやって、動詞の大きな塊にします。そうすることで、お尻が重たくなって文が安定します。
⊿あたしはそれを着た。
I put on it.(×)
I put it on.(○)
```
[[薮下研究室 › 「ヤバイ英熟語」(9)句動詞って何?・その6|http://blog.meigaku.ac.jp/yabu/2015/01/12/%E3%80%8C%E3%83%A4%E3%83%90%E3%82%A4%E8%8B%B1%E7%86%9F%E8%AA%9E%E3%80%8D%EF%BC%88%EF%BC%99%EF%BC%89%E5%8F%A5%E5%8B%95%E8%A9%9E%E3%81%A3%E3%81%A6%E4%BD%95%EF%BC%9F%E3%83%BB%E3%81%9D%E3%81%AE%EF%BC%96/]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
動詞が他動詞か自動詞かによって、目的語の有無が決まる。
```
自動詞+副詞
彼女は逃げ出した。
She ran away.
他動詞+副詞
ボリュームを下げてください。
Turn down the volume, please.
```
[[英語の文法:句動詞の使い方|http://honmono-eigo.com/v-syurui/kudoushi.html]]
----
! 助動詞
```
助動詞を使うと、「実際に起きているわけではない。そう思っているだけ。」という意味になります。
```
[[考えているだけなら、助動詞の出番です|『英語職人』時吉秀弥の英文法 最終回答!|http://ameblo.jp/eigoshokunin-finalanswer/entry-11537750598.html]]
```
英語には仮定法という、他のヨーロッパ語の接続法にちかい動詞の活用があるのに、これはただの動詞の過去形(直説法過去)と同じ形になってしまい、いわゆる「退化」を起こしています。そのかわり、助動詞がその役割の多くを担うようになったのです。
ちなみに「現実を話す直説法」「仮の世界だよ、を話す仮定法(接続法)」「いまやってないけど、これからやってね、を表す命令法」はいずれも動詞の活用の形式を分類したものです。これらの「法」は英語ではmoodと言います。英語の助動詞のなかでもdoやhave、beを除くmust, will, canなどのいわゆる助動詞は「法助動詞」というのが正確な名前で、modal verbと呼ばれます。
```
[[英語の助動詞って特殊|『英語職人』時吉秀弥の英文法 最終回答!|http://ameblo.jp/eigoshokunin-finalanswer/entry-11538783957.html]]
----
! 基本動詞
* [[EV_基本動詞]]
```
英語には数千を超える動詞が存在するが、その中でも頻繁に使われる語句は基本動詞と呼ばれる。
```
[[英語初心者必見!中学レベルの基本動詞30個をイラストで説明してみた|https://toeic-guru.jp/english-verbs]]
----
[[このままやそのままは英語で何というの? 英語 with Luke|http://www.eigowithluke.com/2010/08/%E3%81%93%E3%81%AE%E3%81%BE%E3%81%BE%E3%83%BC%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E3%83%BC%E8%8B%B1%E8%AA%9E/]]
[[第10回【似通った英単語の選択方法(後編)】 | オンライン連載 特許英語・論文英語を専門とする翻訳と教育の会社 ユー・イングリッシュ|http://www.u-english.co.jp/reading/10.html]]
! 文の構造
* [[アメリカの小学生が文の構造を見える化し英語文法を血肉化するのに使っている図の描き方|http://readingmonkey.blog45.fc2.com/blog-entry-676.html]]
* [[英語の修飾の基本的なルールを覚えよう|http://nagatuduki-eikaiwa.com/7872.html]]
** 修飾語は基本的に修飾される要素の隣に置かれる
** '前に置かれれば限定、後ろに置かれれば説明になる'
!! 前置詞・接続詞 と 句・節
* 前置詞 ⇒ 「形容詞句」・「副詞句」 のいずれか
* 接続詞 ⇒ 「形容詞節」・「副詞節」・「名詞節」 のいずれか
** [[【初心者必見】前置詞・接続詞から学ぶ、句・節という概念 |http://eigo-box.jp/grammar/basis-3/]]
!! コロンとセミコロン
* [[セミコロンの使い方 ー ネイティブの説明 英語 with Luke|http://www.eigowithluke.com/2010/12/%E3%82%BB%E3%83%9F%E3%82%B3%E3%83%AD%E3%83%B3/]]
```
コロン(:)は、その後に具体的な内容を述べるときに用います。先におおまかなことを言っておいてから、その後で具体例をリスティングする場合などに使われます。
(例) It consists of the following items: A, B, C, and D.
セミコロン(;)は、同様の内容を述べている文章の区切りに用います。この場合は、soで置き換えることができます。
(例) He failed the entrance exam; he didn’t enter the uniersity.
訳としては「つまり」「すなわち」です。
```
[[翻訳一般【和文⇒英文】|エイブス技術翻訳スクール | 株式会社エイブス|http://www.abes.co.jp/school/ge/about07.html]]
----
!! 主語の位置の there (倒置)
* 場所を表す意味ではない there、 here が文頭に使われる場合、その後の S+V が倒置されることがあります。
** [[英語リーディング:there is構文の倒置形の読み方|http://honmono-eigo.com/atama-r/tousyu-yomi.html]]
** [[倒置構文~高校英語文法|http://www.e-bunpou.net/touti.html]]
** [[第78回「考えるべきは主述関係」|http://www.up-edu.com/kenshinkan-blog/2009/01/e_82678.html]]
!! 倒置
* 文頭に否定語がある文は倒置文になる。
** Not only are you happy, but we are also satisfied. 君たちがうれしいだけでなく我々も満足だ。
** Never does she love him. けっして彼女は彼を愛さない。
** [[not only ... but also が主語を修飾したとき,そのうしろは... - Yahoo!知恵袋 |http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q107466180]]
* しかし主語をつなぐだけ(AだけでなくBも~だ)では倒置文になりません。
** Not only you but also he likes a dog. 君だけでなく彼も犬が好きだ。
----
! 前置詞
* 基本的なルール
** 前置詞の後ろには名詞がやって来る。
** 「前置詞句」は、「形容詞句」 もしくは 「副詞句」 として働く。
- - - - -
* [[英語メモ (asの使い方)]]
----
! 名詞
[[英語メモ (副詞的目的格)]]
----
! 動詞
* [[英文法_動詞]]
* 動詞の分類
** 他動詞・自動詞
** 動作動詞・状態動詞
** 完結動詞・非完結動詞
----
! 形容詞
基本的には名詞の前に置かれるが、一部後ろにくるケースもある。
```
1) -thing で終わる語を修飾するとき:
2) “形容詞+句 or 節”のかたまりが名詞を修飾する場合:
3) available
4) 一時的な関係や状態を表すもの:
```
[[限定用法における形容詞の後置 - RAVCO|http://www.ravco.jp/cat/view.php?cat_id=5465&PHPSESSID=]]
* [[英語の形容詞節:分詞の形容詞的用法 桜の英語教室|http://cosmos.nobody.jp/grammar/adjectival_participles3.html]]
!! available の位置
* [[英語の available についての質問です。|http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1483363424]]
* [[形容詞の位置について教えてください。|http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1266920207]]
!! ready の前置修飾と後置修飾
ready は、限定用法と叙述用法で意味が異なる形容詞の一つ
* 名詞の前に来ると「即座の」という意味になります。
* 後置修飾場合、"a room" を持っている、その部屋は "ready for our guests" だと、a room を説明しています。
----
;ご質問等ございましたら、お気軽にお問い合せください
{{{
Please let me know if you have any questions or comments.
Feel free to contact me if any other questions arise.
}}}
;返答(返信)が遅くなって、すみません
{{{
I'm sorry for the delayed answer.
Do apologize for the late reply.
}}}
;~なのでご注意下さい、ご留意下さい
{{{
Please note that ...
}}}
; 残念ながら(申し訳ございませんが) ~ です
{{{
I regret to inform you that ...
I am sorry to say that ...
}}}
----
;不在の通知
* I'm (wiil be) out of office from Oct.14 to Oct. 31, 2010. I may not have access to e-mail in the period.
;相手の性別が分からない場合
{{{
Dear Sir/Madame
}}}
; XXXのヒントをいただければ...
{{{
can you shed any light on XXX?
}}}
; ~という理解でよろしいでしょうか
{{{
From what I understand, ...
}}}
; XXX を添付しておきます
{{{
Please find attached XXX
}}}
; ちょっと確認したいのですが
{{{
I just want to make sure that ...
}}}
; XXXしてはいかがでしょうか
* You might want to XXX
{{{
Thank you for ...
Many thanks for ...
}}}
{{{
Please see below comments from XXX about your previous query.
I hope you have a great day!
}}}
<<list-links filter: "[tag[英語メモ]]" >>
たくさんの意味がある英語の”as”ですが、どの使い方でも共通するイメージは「イコール」です。
* [[英語「as」の使い方!同等・理由・役割を意味する単語を覚える! | 英トピ|http://eitopi.com/as-tukaikata]]
* [[「社会人のための英語回路構築トレーニング自習帖」著者のブログ : 接続詞「as」の使い方をもう少し理解するために|http://www.eigo-akahige.com/archives/1714828.html]]
! 品詞
* 副詞
* 前置詞
* 接続詞
* (疑似関係代名詞)
----
! 副詞
# (…と)同じくらい、同様に
## 通常、原級比較(as .. as ..)で用いられる
# 強調にも使われる?
## as many as twenty-two rare species may be at risk
! 前置詞
* ~のように
* ~として
** I'm working as a nurse.
* ~の時に
** he had often been ill as a child.
! 接続詞
* ~(する)ように [同じように行うこと]
** as you know = ご存知の通り
** as I say = 言った通り
* ~するのと同時に [同時に起きてること、誰が見ても明らかなこと]
** As my brother left home, I arrived home.
* ~だから [補足として理由をつける感じ]
** As I have a car, I won’t have to walk.
* ~につれて、~するのと比べて [同じように進んでいくこと]
** As he grew up, he became intelligent.
[[ぷち知識 asの使い方をマスターしよう!|今日も雑談、明日も雑談|http://ameblo.jp/fyidesign/entry-10950056592.html]]
[[~のようにという使い方だけじゃない英語「as」をまとめて見た!|http://eigo-jouhou.com/how-to-use-as/]]
[[受験生に知っておいてほしい接続詞asの5つの意味まとめ| 英語学習ボックス|http://eigo-box.jp/grammar/as/]]
----
[[楽勝英会話: わかりにくい~ASその1|http://rakueigo.seesaa.net/article/32358819.html]]
! can / could
!! can
* 能力 「~できる」
** I can run fast.
** I can see her comig.
* 許可 (口語)
** Can I sit here?
* 提案 (軽い命令を表す用法あり)
** You can call him.
* 可能性・推察 (couldの方がよく使われる)
** It can be quite cold here in winter.
** He can be sick.
```
●can/could 考えを提案する *couldの方が控えめ
You could call him. 彼に電話したっていいんじゃないかしら。
You can call him. 彼に電話すればいいんじゃない?
#canの場合軽い命令を表す用法あり (話者が権威者)彼に電話しなさい。
```
http://ameblo.jp/affectionate-ahiru/entry-10548353530.html
!! could
* 時制の一致
* 過去の能力
** I could run fast.
* 許可 (canより丁寧)
** Could you lend me this?
* 提案 (過去を表すものではない!)
** We could go out for a drink after work tomorrow, if you want.
* 推察 (過去を表すものではない!)
** We could write a letter to the doctor.
** they could have just forgotten to call.
* 仮定法
```
この推察モードでは could 単独で過去を表現できません。現在完了の have PP を伴います。したがって、過去的なニュアンス「ありえたけど」と、現在完了的な「今頃しちゃってるなんてこともありうるんだけど」の両方があります。
過去的・現在完了的のどちらかなのかは、その場の会話の状況( context )次第です。このニュアンスでは could have PP の頻度が圧倒的で、can have PP は稀です。
```
[[ありえる could|助動詞|http://grammartectonics.com/could/could_02.html#could02top]]
```
can を使った過去の推量表現は、疑問文では can S have 過去分詞?「はたして~したのかしら」、否定文では S cannot have 過去分詞 「~した/だったはずがない」と完了形を使って表します。
```
[[could :認識的用法:過去に対する控えめな推量 - RAVCO|http://www.ravco.jp/cat/view.php?cat_id=5329&PHPSESSID=]]
!! be able to
```
(1) can は潜在能力、be able to は能力の実現や改まった感じを表す
(2) could は、過去の一般的・習慣的能力を表し、 was/were able to は過去の単一の具体的な出来事の実現を表します。つまり、一回限りの個別の能力の実現(あるときどこそこで~ができた)を述べるときには、was/were able to を用います
(3) be able to は、will をつけて will be able to のかたちで未来の能力を表すことができます。
```
[[can / be able to の使い分け - RAVCO|http://www.ravco.jp/cat/view.php?cat_id=5288]]
```
「(人が)~できる」と現在形で用いる場合、canとbe able toはどちらも同じように使えますが、「(物や場所が)~できる」の場合はcanで表すのが一般的です。
```
```
「(人が)~できた」と過去形で表す場合、be able toを用いるのが無難です。couldは、「過去に(継続して)それをする能力があった」を表し、一度きりの経験に対して使うことはできません。
```
[[canとbe able toの使い分けは?|英会話|アルク|http://www.alc.co.jp/speaking/article/question/130220.html]]
----
[[「can」と「could」の違いと使い方 英語学習サイト:Hapa 英会話|http://hapaeikaiwa.com/2015/07/14/%E3%80%8Ccan%E3%80%8D%E3%81%A8%E3%80%8Ccould%E3%80%8D%E3%81%AE%E9%81%95%E3%81%84%E3%81%A8%E4%BD%BF%E3%81%84%E6%96%B9/]]
!! 能力
He can speak three languages.
! 推量
[[大人の英文法-助動詞の過去形|http://kabuse.y7.net/eigo/otona-046.htm]]
! 名詞での使用
!! 前置詞の使い方
* 「○○の増加・減少」と言いたい時の前置詞は、 in になる。
** An increase in expenditure
* 増加量・減少量の具体的な数字についての説明には of を使う。
** An increase of 28.3 per cent
このルールは、rise, fall にも当てはまる。
* a rise in energy prices
* A further rise of 0.5 per cent
growth の場合は、文脈に注意。
* The continued growth in house values across Scotland
* the growth of the city
!! ほか
‘fraud is on the increase’
----
! 動詞での使用
* 自動詞・他動詞のどちらでも使える。
** [no object] ‘car use is increasing at an alarming rate’
** [with object] ‘we are aiming to increase awareness of social issues’
* 通常、受動態では使わない。
!! 前置詞
* Houses increased in value.
* Price increased (from $X (in 1990)) to $Y (in 2000).
* 増加量・減少量の説明には、 by を使う。
** Price increased by 20%.
このルールは、rise, fall にも当てはまる。
!! その他
* 'standard' や 'level' といったものには使えない。
* 代わりに、 go up, rise, fall などを使用する。
|現在形 |過去形 |過去分詞 |進行形 | |
|lay |laid |laid |laying |[他] 横にする、~を置く、[自] 卵を産む |
|lie |lay |lain |lying |[自] 横になる、位置する |
|lie |lied |lied |lying |[自/他] 嘘をつく |
[[lieとlayの違いと覚え方|やる気のアメブロ|http://ameblo.jp/yarukisensei/entry-11207890823.html]]
most に関しては、「最上級」と「大半」の2種類の意味がある。
* 最上級: Greatest in amount or degree (the がつく)
** [代名詞]: she had the most to lose
** [adverb]: The most important thing is to keep trying.
** [determiner(形容詞)] Emi has the most CDs in our class.
* 大半: The majority of; nearly all of:
** [形容詞] Most Japanese students speak English.
** [代名詞] Most of the Japanese students speak English.
** the がつかない
- - - - -
* [[【プチ英語講座】most とmost of the - JamesとKazusaの楽しい英会話・英文法|http://blog.realizeenglish.com/?eid=97]]
* [[「社会人のための英語回路構築トレーニング自習帖」著者のブログ : 英単語の品詞別使い方③(限定詞)|http://www.eigo-akahige.com/archives/486925.html]]
; 使い分けのルール
# [Backgrounds] 主節のactionのが短く、when/while節のactionが長い場合は、どちらも使える。
# [Simultaneous long actions] 2つのactionが長いときは、 while を使用する。ただし、年齢や人生の期間などの場合は、whenを使用する。
# [Simultaneous short actions] 2つのactionが短いときは、 when を使用する。
[Reduced clauses] when/while節内の主節と重複する部分は、省略されることがある。
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
```
Somebody broke into the house when they were playing cards.
While they were playing cards, somebody broke into the house.
While you were reading the paper, I was working.
When I was a child we lived in London (NOT While I was a child …)
His parents died when he was twelve (NOT … while he was twelve)
I thought of it (just) when you opened your mouth.
While/When in Germany, he got to know a family of musicians. (=While/When he was in Germany …)
```
[[English Language Business studies And Articles: Difference between when and while | http://simplepublisher.blogspot.jp/2009/06/difference-between-when-and-while.html]]
```
When you talk about things in the past, "when" is most often followed by the verb tense Simple Past, whereas "while" is usually followed by Past Continuous. "While" expresses the idea of "during that time." Study the examples below. They have similar meanings, but they emphasize different parts of the sentence.
Examples:
I was studying when she called.
While I was studying, she called.
```
[[ENGLISH PAGE - Past Continuous|http://www.englishpage.com/verbpage/pastcontinuous.html]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
「〜しながら」と言いたい時は、 while が使える。
```
I watched TV while (I was) eating dinner.
(主語が同じ場合、while節の主語+be動詞を省略できる)
```
http://www.alc.co.jp/speaking/article/question/090721.html
# will の時制の一致
# 仮定法 (if 節が無いこともある)
# will よりも控えめな推量 (確率の低い)
# 丁寧
# 過去の習慣
----
! 仮定法
```
共通するのは「・・・だったら〜する」という想像のイメージです。
「仮定法には “would” を使う」とも習いましたが、そんな難しい分類をしなくてもこの「想像のイメージ」が掴めていると “would” がすんなり口から出てくるはずです。
```
[[“would” が使えるようになる たった一つのポイント 日刊英語ライフ|http://kiwi-english.net/1291]]
!! 架空の(想像の中の)話
if節をつけずに使われることが、多い。
```
used to refer to a situation that you can imagine happening:
I would hate to miss the show.
I'd go myself but I'm too busy.
It would have been very boring to sit through the whole speech.
```
[[would Meaning in the Cambridge English Dictionary|http://dictionary.cambridge.org/dictionary/english/would]]
```
よく使い分けられるパターンとして
What would you do if you were in Hawaii?
もしハワイに行ったらなにをしたい?
こういった、「もし~なら」という架空の会話(実際にはハワイには行く予定がない)ならWillじゃなくて、wouldを使います。
```
[[Wouldを理解して話の世界を広げる!: 生の英会話の攻略術|http://ajikarekano.seesaa.net/article/231339553.html]]
----
! 推量
```
法助動詞 will, can, may, shall は「現実世界」の事柄を述べるときに用いられ、would, could, might, should は「想像世界」の事柄を述べるときに用いられるものでしたよね。
そして、想像世界には「仮定の領域」と「推量の領域」があります。←ここ重要
```
[[もうこれで最後、would は過去形じゃあないよ! 学校で教えて欲しかった、こんな英文法! - 楽天ブログ|http://plaza.rakuten.co.jp/samito07/diary/201603200000/?scid=we_blg_pc_lastctgy_1_title]]
```
1) They would arrive soon if they caught the first train.
2) They would arrive soon if they had caught the first train.
1)彼らが始発電車に乗った可能性がある。→ もうすぐ着く可能性がある。[推量]
2)彼らが始発電車に乗らなかった。→ まだしばらく着かない。[仮定]
どちらも過去形 would を借用しているという点では仮定の世界の事柄を表します。しかし、この仮定(空想)の世界には「非現実」と「推量」が存在します。非現実とはまさに仮定法のことです。今回の問題2)がそれに当たります。
```
[[would には「推量」と「仮定」がある! 学校で教えて欲しかった、こんな英文法! - 楽天ブログ|http://plaza.rakuten.co.jp/samito07/diary/201505200000/]]
----
!過去の習慣
[[英文法 would と used to 違いは? ネイティブに教えてもらった英語たち - 楽天ブログ|http://plaza.rakuten.co.jp/tasmania7/diary/201004010001/]]
----
! 丁寧
[[英単語 would の使い方 その1 ネイティブに教えてもらった英語たち - 楽天ブログ|http://plaza.rakuten.co.jp/tasmania7/diary/201003260000/]]
[[英語表現 日本語表現 would と トミカ ネイティブに教えてもらった英語たち - 楽天ブログ|http://plaza.rakuten.co.jp/tasmania7/diary/201003260001/]]
[[Wouldの意味と使い方。口語的に考えればこんなに実は簡単! 初心者英会話ステーション|http://ajieigo.com/145.html]]
----
よくわからないときは、とりあえず、これで考えておく。がいいかな。
```
今まで いろいろ書いてきて 訳分からなくなってきた
would は ~やろ ってとりあえず訳そうっと
```
[[英文法 would の使い方 その5 | ネイティブに教えてもらった英語たち - 楽天ブログ|http://plaza.rakuten.co.jp/tasmania7/diary/201004050000/]]
[[「~年ぶり」「~ヶ月ぶり」って英語で言うと? | オンライン英会話Pinas Academy Pinaさんのブログ|http://pinasan.com/english/today_study/1848]]
; It has been a long time ...
* It's been a long time since I cried at a movie.
** [[「久しぶりに~する」 簡単ワンポイント英会話|http://onepoint.jugem.jp/?eid=55]]
* It's been a long time to come here.
** [[It's(It has) been a long time to ~=久しぶりに~をする|初心者向けオンライン英会話レッスン|http://www.jikojitsugen.net/private-lesson/reibun-03/030.html]]
```
I took a piano lesson for the first time in a while.
「しばらくぶりにピアノのレッスンを受けた」
```
[[英語でどう言う?「5年ぶりに○○した」|http://ameblo.jp/english-teacher-yohei/entry-11660513310.html]]
|e.g. |exempli gratia |例えば、例を挙げると |
|i.e. |id est |すなわち、言い換えれば |
! on
* make sure the lid is on.
* Can you remember what he had on (= was wearing)?
; 意味
# Physically in contact with and supported by a surface:
# Indicating continuation of a movement or action:
# (Of an event) taking place or being presented:
----
! off
* the man ran off.
! up
* she made her way up to bed
! down
* he put his glass down
; 貸す・借りる
* lend, borrow は、無料での貸し借り
* お金を払っての貸し借りではどちらも rent を使う。
```
実は、「賃借する」も「賃貸する」も、同じ単語「rent」を使います。 では、それをどうやって区別するのか?
それは、その後に続く「to」「from」で区別しています。
「We rent a house from them. 私達は彼らから家を賃借しています。」
「We rent a house to them. 私達は彼らに家を賃貸しています。」
```
[[【Kei式-法律英会話】vol.22 「借りる」も「貸す」も、同じ「rent」: 【Kei式】カドを立てない英会話術辞典|http://everydayhomework.seesaa.net/article/413967252.html]]
[[borrow, lend, rent, hireの違い(借りる、貸す) 英文法と瞬間添削で学ぶ英作文のフレーズフレーズミー|https://phrase-phrase.me/ja/keyword/borrow-lend-rent-hire]]
```
see
hear
```
[[look、see、watch、gaze、stare、glimpse、glance、peer、gape、glare、ogle~見る(動詞)の英単語の違い | 真剣に学びたい人のための英会話学習ブログ | http://yamamoto-english.info/%E8%A6%8B%E3%82%8B%EF%BC%88%E5%8B%95%E8%A9%9E%EF%BC%89%E3%81%AE%E9%81%95%E3%81%84%EF%BD%9Elook%E3%80%81see%E3%80%81watch%E3%80%81gaze%E3%80%81stare%E3%80%81glimpse%E3%80%81glance%E3%80%81peer%E3%80%81/]]
http://ladysatin.exblog.jp/20856431/
一部の名詞は、副詞のように振る舞うことがある。
----
```
名詞に副詞の働きをさせたいときは、前置詞を付けて副詞句にするのが原則(この場合の名詞の働きは「前置詞の目的語」)
しかし、時間、距離、数量、様態(姿、形、方法)を表す一部の名詞は前置詞を付けずに、そのままで副詞の働きをさせることができる
この名詞の働きを「副詞的目的格」という
```
[[§57 副詞的目的格 : 参考書を読みながら英語を学習するブログ|http://blog.livedoor.jp/teaching-english/archives/3648118.html]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
```
現代英語では、10語にも満たない代名詞に格の名残が観察されるだけで、名詞は Tom’s shoes というときの ’s の所有格のみが残されているだけです。かつて古代英語の時代には、英語でも名詞が格変化をし、前置詞の力を借りなくても、その名詞が文中でどのような機能をもつ語なのかがはっきりわかったのですが、現代英語ではそうした情報を表す格変化がほとんど失なわれてしまったのです。
しかし、だからといって「格そのもの」がなくなったわけではありません。格が表示されないだけなのです。通例、格変化が崩壊すると、例えばフランス語のように、その代わりの機能を果たすために前置詞がきめ細かく発達するのですが、この点英語はややルーズで、それが英文法を不備の多い(=わかりにくい)ものにしています。ですから、学習者サイドから言えば誤訳しやすい言語なのです。
さて、この「格の用法」のなかで、特に重要だと思うのが「副詞をつくる対格(=直接目的格)」です。これは英文法で「副詞的目的格」 adverbial objective と呼ばれているものです。皆さんに理解していただきたいことは、簡単にいえば、名詞の目的格は副詞になりうる、という事実です。ところが、ご存知のように、英語では、普通名詞は主格と対格(=直接目的格)は形が100% 同形ですから、学校の英語の先生はいちいち good morning, every day は目的格の名詞です、などとはコメントしません。しかし、実は英語の名詞ひとつひとつは必ず何らかの格なのです。
```
```
「時」の副詞句を作る用法例です。
1) The painter will live another ten years.
...
「距離」の副詞句の例です。
4) The refugees walked thirty miles.
...
「方向」を示す用例です。
6) Step this way, please.
...
「方法」を表す例です。
9) The Ferrari was running (at) full speed.
...
「度合」を表す例です。
12) Sales have fallen 12% since 2013.
13) You can get 20% off the list price.
...
最後に、挨拶やお礼などを言う表現も副詞的目的格であることを知っておきましょう。
14) Good morning!
```
[[第53回 副詞的目的格|猪浦道夫の「外国語とつきあう方法」|楽しく英語を学ぶ|DHC総合教育研究所|http://www.edu.dhc.co.jp/fun_study/howto/]]
----
```
名詞や名詞句が文の要素や前置詞の目的語にならず、副詞的に振る舞うことがある。このような名詞や名詞句の振る舞いを名詞の副詞的用法、または副詞的目的格(Adverbial Objectives)と言う。
副詞的目的格による動詞修飾
My aunt passed away last Thursday.
副詞的目的格による形容詞修飾
My daughter is seven years old.
```
[[副詞的目的格 - Mt. English Project|http://mep.papiko.com/index.php?%E5%89%AF%E8%A9%9E%E7%9A%84%E7%9B%AE%E7%9A%84%E6%A0%BC]]
----
* [[副詞的目的語について再び-英語が楽になるのです - English diary of a man 私の英語修行|http://blog.goo.ne.jp/goo1214_1948/e/3a3d612d9a94caa15fa14b55c18dfddb]]
! go to XXX
* XXX が there や home のような "〜へ" という意味を持つ副詞の場合は、to をつけない。
** [[めもぶろ ~目指せペラペラ!~: I go to there は間違い? | http://miffyxoxo.blogspot.jp/2014/12/i-go-to-there.html]]
** [[曜日の前に前置詞onをつけなくてもいいのでしょうか。 | 英文法Q&A | 英語研究教室 | 美誠社(英語教育図書出版) | https://www.biseisha.co.jp/lab/qa/47]]
! when と while
{{英語メモ (when と while)!!text}}
! enough to
* enough が形容詞なのか副詞なのかによって、enough の位置が変わる。
* enough が副詞の時は、形容詞/副詞の後にくる。
** easy enough for children to read
* enough が形容詞の時は、名詞の前にくることが多い(後に置くことも可?)。
** enough money to buy it.
* [[十分な意味のenough 基礎からの英語学習 | http://www.englishcafe.jp/english3rd/day23.html]]
* [[【英文法】 形容詞 enough - 大学受験ねっと英語塾 | http://seng571213.blog.fc2.com/blog-entry-152.html]]
! 名詞 + the size ~
* (which/that + be動詞) が省略されている。ということらしい。
** Sheep graze in an area the size of eight tennis courts.
** Sheep graze in an area (that is) the size of eight tennis courts.
* [[【英語】 新聞記載の英文ですが、「area」 を修飾する「the size ~」... - Yahoo!知恵袋 | http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14109544954]]
! most の意味
{{英語メモ (mostの意味)!!text}}
! turn の意味
!! 自動詞
|S turn |Sが回転する/向きを変える |the wheel was turning |
|turn to/into O |Oになる ||
!! 他動詞
|S turn O |SがOを回転させる(の向きを変える) ||
|S turn O1 to O2 |SがO1をO2に変える ||
|S turn C |SがC(形容詞)になる |leaves turn red. |
|S turn O C |||
* [[turnの自動詞、他動詞の使い分けについてThe leaves will tur... - Yahoo!知恵袋 | http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10136915700]]
----
! trip と travel
「旅行」という意味では、基本的に、tripは名詞、travelは動詞として使う。
* [[似たもの単語travelとtripの違いは? [トラベル英会話] All About | http://allabout.co.jp/gm/gc/63563/]]
----
! all の位置
* all は「代名詞」で、人称代名詞(セリフでは We)と一緒に使われるときは「人称代名詞」+「all」の語順になります。
* We all have secrets.
** [[第310回『ワイルド・スピード EURO MISSION』で味わう、代名詞 all | http://blog.moviequotes.jp/?eid=313]]
** [[第344回『赤ずきん』で味わう、代名詞 all | http://blog.moviequotes.jp/?eid=350]]
----
! could と was able to の使い分け
* [["could" と "was able to" の違いと使い分け - 英語 Boost!|http://eigoboost.com/could-was-able-to-%E9%81%95%E3%81%84/]]
* [[canとbe able toの使い分けは?|英会話|アルク|http://www.alc.co.jp/speaking/article/question/130220.html]]
----
! 「〜しながら」の表現
!! while + SV
```
I had my passport stolen while I was traveling in Italy last year.
「去年イタリアを旅行していた間に、私はパスポートを盗まれた」
while の節の主語が I で、それは主節の主語と同一なので、I was を省いて while traveling in Italy とすることができる。
```
[[while ~ingに関連する話 | http://blog.livedoor.jp/eg_daw_jaw/archives/51682199.html]]
!! during + 名詞
I watch TV during my dinner time.
during 内では動名詞は使えない。
* [[during doingはなぜだめか | http://ameblo.jp/bakumatsutaiyoudenn/entry-11662647706.html]]
----
* [[話すための英語学習: 「あと1日しかない」「まだ1日ある」を英語で | http://english-hanasitaino.seesaa.net/article/226549834.html]]
** only と still
* [[アメリカ人は「How are you?」にどう答えるか実験してみた | 英語学習サイト:Hapa 英会話 | http://hapaeikaiwa.com/2015/04/15/%E3%82%A2%E3%83%A1%E3%83%AA%E3%82%AB%E4%BA%BA%E3%81%AF%E3%80%8Chow-are-you%E3%80%8D%E3%81%AB%E3%81%A9%E3%81%86%E7%AD%94%E3%81%88%E3%82%8B%E3%81%8B%E5%AE%9F%E9%A8%93%E3%81%97%E3%81%A6%E3%81%BF/]]
----
* I'll tell you what (I think/I suggest)
** http://aoki.com/etc/55information/20support/post_434.html
* gotta - got to - have got to
* [[be found to doのもとの形はどうなりますか? - ... - 英語 | http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1043673595]]
----
* [[Epidemic と Pandemic の違い|http://blog.livedoor.jp/lisakworld/archives/50241205.html]]
```
epidemic = a large number of cases of a particular disease happening at the same time in a particular community
「同時にある特定の地域で起きる多数の人がかかる特定の病気」
pandemic = a disease that spreads over a whole country or the whole
world
「一つの国全体あるいは全世界に広がる病気」
```
! no matter what
* [[No matter what : なんであろうとも [idiom]|http://kskszk.blog.so-net.ne.jp/2014-01-31]]
** 元はというと It does not matter(問題ない) what happens(何が起きても)となるわけです。
** no matter whatのmatter は動詞です。
----
! together と with
* [[めもぶろ ~目指せペラペラ!~: with と together の違い|http://miffyxoxo.blogspot.jp/2014/09/with-together.html]]
** with は前置詞
** together は副詞
** with と together が同時に使われる場合もあります。
** together with ~と共に、~と連れ立って
----
! crash と clash と crush
[[一生覚えられる気がしない crash と clash と crush の違いを雑にまとめてみた | やわなべ.net|https://ywnb.net/p/201602/2894]]
* crash: 日本語で一番近い語感は「こわれる」でしょうか。
* clash:
* crush: 圧力をかけて押しつぶす、粉砕する」という語感のようです。
----
! 年生
* [[年生は英語で何というのでしょうか、中学1年生、高校1年生などの解説 英語 with Luke|http://www.eigowithluke.com/2012/01/english-american-student/]]
* sixth grader (6年生)
** six grade (6年)
----
! ~からの友人
a friend from ...
----
[[時制の一致② 応用編|新里式 英語超学習法|http://ameblo.jp/shinzato-english/entry-11409557691.html]]
[[英語の時制の一致|誰でも簡単に理解できる大原則のルール|http://mysuki.jp/english-sequenceoftenses-4704]]
----
! the week before + S V
```
自由堂さん(www5c.biglobe.ne.jp/~jesazuma/)の掲示板で、
The year before they got married he sent her roses twice a day.
という文中の before は接続詞だということを知りました。
いくつかの辞書で確認したところ、この場合の before は形容詞節を導く接続詞だと確かに書いてあります。
```
[[接続詞: 英語の疑問・なるほど|http://questforenglish.cocolog-nifty.com/blog/2005/09/post_07cc.html]]
* [[形容詞節を導く接続詞 as : アーリーバードの収穫|http://isyoichi.seesaa.net/article/392194871.html]]
----
! why in the world
```
疑問詞の直後に on earth / in the world / ever を付加することによって、疑問詞の意味を強調することができます。和訳では「一体~」と表現すればよいでしょう。
*注意:on the earth 「地球上で」としないように!疑問詞を強める場合は on earth です。
Why on earth didn't you go to school ?
「一体どうして学校へ行かなかったの」
Where in the world have you been ?
「一体どこへいたの?」
How ever did you escape ?
「一体どのようにして逃げ出したの?」
```
http://www.ravco.jp/cat/view.php?cat_id=5652
* [[基本動詞をマスターしよう|英単語・英文法|アルク|http://www.alc.co.jp/vocgram/article/basic/index.html]]
* [[日常英会話必須基本16動詞| http://20.pro.tok2.com/~function/verbs-16Sample/ ]]
* [[Have/Get/Take ネイティブスピーカーも知らない!英語のヒ・ミ・ツ - 楽天ブログ|https://plaza.rakuten.co.jp/leilaenglish/6005/]]
* [[イメージで覚える基本動詞 カテゴリーの記事一覧 - 猫でもわかる 秘密の英語勉強会|http://eigo-benkyo-kai.hatenadiary.jp/archive/category/%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%81%A7%E8%A6%9A%E3%81%88%E3%82%8B%E5%9F%BA%E6%9C%AC%E5%8B%95%E8%A9%9E]]
* [[英会話・英会話スクール~よく使われる動詞ベスト100~|http://www.english-style.jp/v100.html]]
----
! Get
!! 基本イメージ
AがBに達する
* 物を所有するに至る
* 「ある状態になる」、「~をある状態にする (使役)」
[[第17話 GET(その1)|基本動詞をマスターしよう|英単語・英文法|アルク|http://www.alc.co.jp/vocgram/article/basic/17.html]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
```
getの基本的な意味は「くっつく」です。
主語+get+目的語(名詞)
という文があると、目的語が主語にくっつく感じです。
```
[[魔法のように会話を楽にする『get』:日経ビジネスオンライン|http://business.nikkeibp.co.jp/article/manage/20110118/218011/?rt=nocnt]]
!! 基本用法
```
1-1「到着する」(arriveの意味)
She got to Shibuya at 5:30.
1-2「乗る、降りる」「身体を動かす」
I got on the train at Ebina station.
I will get off the train at Isehara.
I got in a taxi at the station.
機能2「物を所有する、所有するに至る」
I got a new CD.
3-1「ある状態になる」
I got sick.
3-2「使役」(~させる、~される)
I got my first book published.
She tried to get him to explain.
```
[[第17話 GET(その1)|基本動詞をマスターしよう|英単語・英文法|アルク|http://www.alc.co.jp/vocgram/article/basic/17.html]]
!!! 使役
```
(1)get+過去分詞
I got my first book published.
(2)get+不定詞
I got my boss to say yes.
(3)get+目的語+形容詞(または副詞)
I got her angry.
They got me wrong.(彼らは私を誤解した)
I was to get you there as soon as possible.
You want me to get it out?
(3)お金・時間がかかる、必要である
```
[[第22話 GET(その6)|基本動詞をマスターしよう|英単語・英文法|アルク|http://www.alc.co.jp/vocgram/article/basic/22.html]]
!! 句動詞
!! get on
* get on a train (電車に乗る)
* How is your work getting on? (お仕事の進み方はいかがですか)
!! get off
* get of at the station (その駅で降りる)
* let’s get off that topic (その話はやめよう. 話題から離れる)
ほぼ同じような意味で "get off of" という言い方をすることもあるみたいだが、"get off" を使う方が無難そう。
* http://english.stackexchange.com/questions/101683/difference-between-get-off-of-and-off
!! get out of
!! get to do
意味: Have the opportunity to do
* http://www.oxforddictionaries.com/definition/english/get?q=get
!! その他
```
Q.3 get の過去分詞には gotten と got がありますが、何か違いがあるのでしょうか?
A.3 get の正式な過去分詞形は got のほうです。イギリス英語では gotten はほとんど使いません。したがって、常に got を使っておくほうが無難でしょう。
```
[[第23話 GET(その7)|基本動詞をマスターしよう|英単語・英文法|アルク|http://www.alc.co.jp/vocgram/article/basic/23.html]]
----
! Take
!! 基本イメージ
「つかんで運ぶ」
* (一緒に)連れていく
* 取る、手に入れる
* お金・時間がかかる
[[俺たちのイングリッシュ: 動詞Takeの意味は1個だけ!|http://ore-e.blogspot.jp/2015/01/take.html]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
```
takeは、「そこにあるもの、提供されているものや状況を自分の意志で受け入れて取る、選び取る、取り上げる」という意味です。前提としてまず、「そこにある」「提供されている」ということが重要。それを取るか取らないかは「自分の意志次第」ということなのです。
```
[[Have/Get/Take ネイティブスピーカーも知らない!英語のヒ・ミ・ツ - 楽天ブログ|https://plaza.rakuten.co.jp/leilaenglish/6005/]]
!!基本用法
```
(1)持っていく、連れていく
Don't forget to take your umbrella with you.
She takes her dog to the park.
Take the A train.
(2)取る、手に入れる
She took my hand.
The army took many prisoners.(捕虜をたくさん捕まえた)
take + 名詞で、「…をする」という表現をたくさん作れます。
take a look at this(これを見てごらん)
take a walk(散歩する)
take a rest(休憩する)
take a shower(シャワーを浴びる)
(3)お金・時間がかかる、必要である
```
[[第10話 TAKE(その1)|英単語・英文法|アルク|http://www.alc.co.jp/vocgram/article/basic/10.html]]
!!句動詞
!!!take off
「脱ぐ、離陸する、(ある期間を休暇として)取る」の意味。take off your shoes は「靴をつかんで、足から離す(off)」ことです。
!!! take to
```
11. I have taken to smoking while drinking.
take to ... は「…を好きになる、…が習慣になる」の意味。take to は自分の体をつかんでその方向に運ぶというイメージです。take to smoking は、(背を向けて、やめなければいけないのに)タバコのほうに向いてしまう(=好きになる)という意味になります。
```
[[英語勉強したいだけ(英文→日本語): 基本動詞をマスターしよう(Take編)|http://gayagyagayga.blogspot.jp/2012/05/take.html]]
!!! take out
```
to remove something from somewhere: "They had to take out two of his teeth."
to get money from a bank account: "I took out some money for the weekend."
US UK take away to buy food in a restaurant and eat it somewhere else:
```
[[take sth out Meaning in the Cambridge English Dictionary|http://dictionary.cambridge.org/dictionary/english/take-sth-out?q=take+out]]
[[第10回 「日常会話でよく使われる“Take out”」 英語学習サイト:Hapa 英会話|http://hapaeikaiwa.com/2014/07/24/%E7%AC%AC10%E5%9B%9E-%E3%80%8C%E6%97%A5%E5%B8%B8%E4%BC%9A%E8%A9%B1%E3%81%A7%E3%82%88%E3%81%8F%E4%BD%BF%E3%82%8F%E3%82%8C%E3%82%8Btake-out%E3%80%8D/]]
!!! take out of
取り出す以外の意味として、「へとへとに疲れさせる」という意味がある。
[[take it out!|英語ファン!|http://ameblo.jp/funfanblog/entry-10413166945.html]]
----
! Have
!! 基本イメージ
* 所有・付属(持つ)を表す機能
* 使役(...させる)の機能
* 完了形を作る助動詞の機能
** [[EG_完了形]]
!!基本用法
```
AがBという具体的な物を持っている状態を表す場合
have は所有している「状態」を表します。
・I have a car.(車を持っている)
・I have a sister.(姉/妹がいる)
Bが抽象的な概念、感情である場合
日本語の「持つ」とは性質が異なるので、うまく使うには慣れが必要です。
・The old man had a bad memory.(その老人は記憶がよくない)[能力、性質]
・Do you have any questions?(何か質問はありますか)[考え]
・The man had a great shock.(その男は大きなショックを受けた)[感情]
・We had a wonderful time.(私たちはとても楽しく過ごした)[経験]
・I had a headache last night.(昨晩、頭痛がした)[病気にかかる]
AがBを所有するという行為を表す場合
次のような場合、have は「所有するという行為」を表現します。やはり使いこなすには慣れが必要です。
・I'll have a holiday.(休暇を取るつもりだ)
・Have a seat.(座ってください)
・May I have this?(これをくれませんか)
・I had breakfast at eight.(8時に朝食を食べた)
・He has a bath.(彼はお風呂に入る)
```
[[第2話 HAVE(その1)|英単語・英文法|アルク|http://www.alc.co.jp/vocgram/article/basic/02.html]]
----
! Put
!! 基本イメージ
* ある状態にする
```
Put the dishes on the table.
Put the calender on the wall.
I put on my coat.
```
[[薮下研究室 › 「ヤバイ英熟語」(2)putは「置く」じゃない?!|http://blog.meigaku.ac.jp/yabu/2014/12/26/%e3%80%8c%e3%83%a4%e3%83%90%e3%82%a4%e8%8b%b1%e7%86%9f%e8%aa%9e%e3%80%8d%ef%bc%88%ef%bc%92%ef%bc%89/]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
```
ここで登場するput+名詞だけのフレーズはある意味で例外となり、putの後には目的語だけではでなく、必ず位置・状態を表す語句が伴うことに注意してほしい。
例えば、「ペンをおいてください」をPut your pen.というのは誤りで、Put your pen down.と位置・状態を表す語句が伴う。この場合、downは方位副詞だが、次の例では位置・状態を表す語句が、前置詞+名詞となっている。
```
[[put の動詞フレーズ 解説|http://20.pro.tok2.com/~function/verbs-16Sample/kaisetsu/kai-put.html]]
!! 句動詞
!!! put on
* I put on my coat.
* I put it on.
; 使役動詞
* make
** make him angry
** make you go there (原型不定詞)
** make myself understood (過去分詞はあまり使われないが、慣用的に使われるものがいくつかある)
* have
* let
```
make は5文型で使用するときには、make + O + 原形 という形が圧倒的に多いのですが、まれに慣用句的に make + O + 過去分詞 という形も使われます。但し、その場合、過去分詞の部分には、 excited/interested 等の形容詞化した分詞を除けば、heard, understood , known などの限られたものしか来ません。
```
[[make + O + 過去分詞 - RAVCO|http://www.ravco.jp/cat/view.php?cat_id=4440]]
! 収入
!! 給料・賃金
|pay |給料 (最も一般的な言い回し) |
|salary |給料 (「月給・年俸」というニュアンスでよく使われる) |
|wage |給料 (アルバイトなど時給制の仕事に対して使います) |
* [[給料は英語で何というでしょうか ー 日本と英米での給料の支払い方の違い 英語 with Luke|http://www.eigowithluke.com/2014/03/salary-pay-wage/]]
!! income
```
「income」は「所得」や「収入」を意味し、「給料」という意味はありません。
「income」は雇用主や人からもらうお金に限らず、自分の手で得たお金なども含みます。
つまりは給料や自分の手で得たお金すべてを合わせたものが「income」ということです。
```
[[英語で「給料」を表す単語のまとめ|http://fromexperience.info/grm/trivia/wage.html]]
----
! 会計英語
|Revenue |収益 |
|Sales, Turnover |売上 |
|Profit |利益 |
|Cost |コスト |
|Expense |費用 |
|Expenditure |支出 |
|受取利息(Interest income) |
|受取配当金(Dividend income) |
----
!! 「Revenue (収益), Expense (費用), Profit (利益), Sales (売上) 」 の関係
```
Revenue(収益) − Expense(費用) = Profit(利益)
収益(Revenue)と売上(Sales)の違いは何でしょうか。
収益とは会社に入ってくるすべてのものを指します。その大部分は売上(Sales)ですが、厳密には受取利息(Interest income)、受取配当金(Dividend income)など、売上とはならない収益も含まれています。
```
[[紛らわしい会計英語を整理しよう|会計プロフェッショナルの英単語|ダイヤモンド・オンライン|http://diamond.jp/articles/-/46167]]
!! コストと費用の違い
```
例えば、200個の製品を作っても、その期間での販売数量が150個であれば、150個の売上に対する費用は150個分であり、残りの50個は「在庫」として、資産として計上されます。つまり、製品が販売されたとき、「売上原価」という「費用」になります。また、150個の販売にかかった販売経費やその期間にかかった管理費は全て「費用」になります。
```
[[(コストと費用の違い):管理会計を学ぼう!:So-netブログ|http://dankai1949a.blog.so-net.ne.jp/2010-10-16]]
```
コスト・・これは日本の考え方にない費用です。費用というより見積りです。経費や費用
は発生したものに対する考え方です。しかし、コストは発生する前の考え方で
す。経費や費用は売上から引くものですが、コストは逆です。こんなけの費用
がかかるからこんなけ売上が必要ですというものです。コストカッターで知ら
れるゴーン氏は、ものをつくる前の経費の削減に努めました。これに対して再
建王といわれた坪内氏は行動した後の費用を見て削減しました。これが経費(費
用)とコストの違いではないでしょうか
```
[[コスト、経費、費用の違い | 野菜日記(農健クラブ)|http://oisi-yasai.jugem.jp/?eid=195]] より
<<tag "英語表現_移動">>
! 一般的な表現
|leave (A) for B |(Aから)Bへ向けて出発する |
|depart for A |Aへ向けて出発する |
|depart from A |Aから出発する |
|take off (for A) |(Aへ向けて)出発する |
|arrive at/in A |Aに到着する |
|reach A |~|
|get to A |~|
[[arrive at, get to, reach - 英単語の正しい使い分けを勉強してすっきり英会話! | http://eitangotsukaiwake.suntomi.com/index.php?arrive%20at%2C%20get%20to%2C%20reach#ja3c07e4]]
|go to A |Aへ行く |
|head to A |Aへ向かう |
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! 距離感の表現
!!! 時間
|It takes A minutes to get to B |Bに着くまでにA分かかる |
|It takes A minutes to B |~|
|B is A away |~|
|How long does it take to go to B? |Bまでどのくらいかかりますか |
* [[簡単便利!たった1つで距離が表せる単語 日刊英語ライフ|http://kiwi-english.net/5175]]
** ”The beach is just five minutes away”
* [[英語でどう言う?「どのくらい時間かかりますか?」|http://ameblo.jp/english-teacher-yohei/entry-12085098374.html]]
!!! 地理的な距離
* The beach is 10 km away from here.
* A island is located far away from the mainland
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! 移動手段の違いによる表現の違い
|電車、バス、飛行機: |"I take a train to Osaka." |
|自転車: |"I ride my bike to school." |
|車: |"I drive to work." |
[[移動: ride, take, drive | https://mainichieigo.com/norimono-de-iku/]]
----
{{英語表現_移動_電車・バス!!text}}
----
{{英語表現_移動_自動車・タクシー!!text}}
----
! 飛行機
!! 乗る
|get on a plane/flight (for A) |(A行きへの)飛行機に乗る |
|ride ||
congestion at an airport 空港での混雑
crowded/crowded airport
----
! 自転車
|I ride a bike to A |自転車でAへ行く |
|cycle |[自] 自転車に乗る |
----
! 歩く
|walk around A |Aを歩き回る |
|wander around A |ぶらぶらとAを歩き回る |
|go for a walk / take a walk |散歩する |
|stroll about A |Aの辺りをブラブラ歩く |
[[「散歩」や「ブラブラする」を英語にすると? | 英語学習サイト:Hapa 英会話 | http://hapaeikaiwa.com/2013/11/12/%E3%80%8C%E6%95%A3%E6%AD%A9%E3%81%99%E3%82%8B%E3%80%8D%E3%81%AF%E8%8B%B1%E8%AA%9E%E3%81%A7%EF%BC%9F/]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
```
例えば、家からビーチまでが徒歩5分という場所にあなたが住んでいるとします。
「ビーチまで5分です」と誰かに言う場合、どんなふうに表しますか?
“It takes five minutes to the beach”
“It’s just five minutes walk to the beach”
と言うこともできますが、”The beach is just five minutes away” とも言えてしまうんです。
```
[[簡単便利!たった1つで距離が表せる単語 | 日刊英語ライフ|http://kiwi-english.net/5175]]
!! 階段
|go up the stairs |階段を上る |
|climb (up) stairs |~|
|Go upstairs. |階上へ行く |
|go down the stairs. |階段を下りる |
|climb down stairs |~|
```
stairs:読み方は「ステアーズ」で、通常は複数形で「階段」を表現します。単数形は「stair」になります。※建物の「階」と「階」をつなぐものを「stairs」と言います。
steps:カタカナで「ステップス」になります。単数形は「step」です。※単に「段」になっているものを「steps」で表現します。
```
[[「階段」の英語|4つある英単語と関連英語フレーズを紹介|http://mysuki.jp/english-stairs-8236]]
!! 坂道
|uphill, slope |坂道 |
|steep slope |急な坂 |
|walk up a slope |坂を歩いて上る |
[[「坂道、上り坂、下り坂」って英語で言うと? オンライン英会話Pinas Academy Pinaさんのブログ|http://pinasan.com/english/today_study/13040]]
! 自動車
* [[アメリカ日常英語:(車に)乗せてください。を英語でなんていうの?: 英語アメリカ日常英語 今回こそ覚えるぞ! | http://amerish.seesaa.net/article/400742441.html]]
* [[簡単な英会話表現 ~乗せてくれない?~|英会話の苦手意識を日本語の解説で克服! | http://ameblo.jp/eigaku-coordinator/entry-11229724503.html]]
* [[「車で送る」は英語で? | http://meacham.blog54.fc2.com/blog-entry-27.html]]
* [[英語で 車で送る、迎えに行く、乗る、降ろす、 ネイティブに教えてもらった英語たち - 楽天ブログ | http://plaza.rakuten.co.jp/tasmania7/diary/201008170000/]]
|drive A to B |AをBまで車で送る |
|take me to the station |私をその駅まで送って |
!! 道路・交通
|a traffic light turns red |信号が赤に変わる |
| | |
|the traffic is heavy |道路は混んでいます |
|the traffic is light |交通量が少ない |
|be stuck in a traffic jam |渋滞に巻き込まれる |
|traffic congestion |交通渋滞 |
|traffic jam |~|
| | |
|traffic light |信号 |
|intersection |交差点 |
|end of the road |道のつきあたり |
|rail crossing |踏切 |
[[英語で道案内をするときに役に立つ超シンプルフレーズ集 | http://blog.iknow.jp/posts/6236]]
----
! タクシー
!! 捕まえる
|get/catch a taxi |タクシーを拾う |
|call a taxi |電話でタクシーを呼ぶ |
!! 乗る
|get in a taxi/car |タクシー/車に乗る |
|climb into a taxi/car |タクシー/車に乗り込む |
|take a taxi ||
!! ほか
|Please take me/us to A |Aまでお願いします |
|at a speed of A km/h |時速Akmで |
! 電車・バス
!! 乗る
|get on a train/bus |電車/バスに乗る |
|get on the A line |A線に乗る |
|catch at train ||
|take a train (from A to B) |(AからBまで)電車に乗る (takeを使うと、乗って~まで行くという意味まで含まれる) |
|take the Chuo Line bound for Tokyo |東京行きの中央線に乗る |
|ride a train (from A to B) |電車で(AからB)へ旅行する |
|~|[[ride| http://dictionary.cambridge.org/dictionary/english/ride]]: to travel in a vehicle, such as a car, bus, or train: |
|~|例: He doesn't have a car so he rides to work on the bus. |
* [[get on a train vs take a train - Grammar Nerd's Notebook - | http://grammarnerd.blog.fc2.com/blog-entry-83.html]]
!! 降りる
|get off a train (at A) |(Aで)電車を降りる |
!! 乗り換える
|transfer/change to A (at B) |(Bで)Aに乗り換える |
|change trains |電車を乗り換える |
* [[to get on and off of transport - synonyms and related words | Macmillan Dictionary | http://www.macmillandictionary.com/thesaurus-category/british/to-get-on-and-off-of-transport]]
!! ほか
|a train/bus bound for A |A行きのバス/列車 |
|a train/bus for A |~|
| | |
|a express train |急行電車 |
|a local train |普通列車 |
|the next stop |次の駅 |
|the stop after next |次の次の駅 |
|the third stop |三つ目の駅 |
|track five |5番ホーム |
* [[「次の次の駅」は英語で何て言う? | http://englishlands.net/one-after-next/]]
|Force Majeure |不可抗力 |
|Notice |通知 |
|Governing Law |準拠法 |
|Dispute Resolution |紛争解決 |
|Conduct of the Parties |行動の制限 |
|Waiver |権利放棄 |
|Third Party Beneficiaries |第三者の権利 |
|Sovereign Immunity |主権免責 |
|Interim Payment |中間払い |
|Accounting Report |会計報告(書) |
|IP |intellectual property |知的財産、知的所有権 |
|IPR |intellectual property right |知的所有権、知的財産権 |
----
Indemnity
* 保障、免責、損害賠償、補償金
|Licensor |許諾者 (licenseを付与する側の人または組織) |
|Licensee |被許諾者 |
! 現在は・今は
* nowadays
* in recent / recently
* at present / presently
* currently
* (right) now
* in these days
* at the moment
! 昔は・以前は
* in past days
* in those days
* previously
* used to (「今はそうでない」ニュアンスが入る)
* when [past / past perfect]
----
! 「○○後に」という表現
!! 未来の話では、基本的に 'in' を用いる。
```
未来のことについては I'll see you in two weeks. のように「in+数」を用います。未来の「~後に」は after や later で表現できないので注意してくださいね。
ただし、See you later.(じゃあ、また後で)や I'll call you later.(後ほどお電話します)のように、数を伴わない場合は未来のことでも later を用いることができますよ。
```
[[「~週間後に」と英語で言いたいとき、later と after のどちらを使えばいいの?|英会話|アルク|http://www.alc.co.jp/speaking/article/question/060501.html]]
!! 過去の話では、'after' もしくは 'later' を使用する。
```
過去の話をしていて「(その)2週間後に彼と会った」と言う場合は、
I saw him after two weeks.
または
I saw him two weeks later.
。
after と later のいずれも使えますが、「after+数」「数+later」と語順が違うことに注意してください。
```
[[「~週間後に」と英語で言いたいとき、later と after のどちらを使えばいいの?|http://www.alc.co.jp/speaking/article/question/060501.html]]
```
接続詞: ~したあとで She went to Osaka after I had arrived.
副詞: 2日後に She went to Osaka two days after.
前置詞: 2日後に She went to Osaka after two days.
```
[[after, later, in - 英単語の正しい使い分けを勉強してすっきり英会話! | http://eitangotsukaiwake.suntomi.com/index.php?after%2C%20later%2C%20in]]
----
! 「○○以内に」という表現
!! 「一週間以内に」という場合は、 "within a week."
!! by the time + S V (までには)
[[時の副詞節を導く接続詞: by the time 「~するときまでには」 - RAVCO|http://www.ravco.jp/cat/view.php?cat_id=4760&PHPSESSID=]]
----
! 〇分遅れます
* I was late for ... (... に遅れた)
* I was ten minutes late for ... (... に10分遅れた)
[[[復習] I will be 10 minutes late. 加藤先生の最近ちょっと稼働ぎみ|http://keiichikato.jugem.jp/?eid=6]]
----
; ago と before
* ago は、現在を基準にし、どのくらい過去なのかを表すことばです。
** 「過去形」と一緒に使われます。
* before は、
**
The teams consist of young people from 5 to 21 years of age.
! 天候
!! 形容詞で表現する場合
|晴れ |sunny |fine, clear, calm |
|曇り |cloudy |dark, gloomy, overcast |
|雨 |rainy |showery |
|雪 |snowy ||
| | ||
|風 |windy ||
|霧 |foggy ||
天気の表現では、it が主語になる。
```
It is sunny today.
It was cloudy yesterday.
It will be rainy tomorrow.
It has been snowy since last Thursday.
```
* [[【英語コラム】Today is hot を卒業しよう! | http://school.jorudan.co.jp/eigolike/pc/columns/columns_044.php]]
!! 動詞を使う場合
rain, snow は動詞(もしくは名詞)。動作動詞なので、「今降っている」ことを表したい時は進行形にする。
```
It rains a lot in June.
It is raining.
It snowed last night.
It has been snowing since last night.
```
!!! 降り始める
```
It began to rain.
It started to rain.
```
* "Start" takes both "gerund" and "infinitive" but I've seen something in my grammer book and it says "We cannot use "Ving form" after the continiouse tense."
!!! やむ
```
It stops raining.
The rain lets up.
```
!!! rainy と raining
```
rainyは形容詞です
これは一言でいうと「雨っぽい」という意味になります
```
http://ameblo.jp/english-0001/entry-12137766257.html
!! 名詞を使う場合
```
We have a lot of rain in June.
There was rain yesterday.
```
!! 疑問文 (天候を聞く)
天気を聞くときは the weather を主語に。
```
how is the weather?
what is the weather?
```
----
! 温度
|hot |
|warm |
|cool |
|cold |
|scorching |
|chilly |
|freezing |
|comfortable |
! References
* [[誰もが始めはまちがえる「今日は雨です。」の英文 | http://yuyafuruhashi.net/everyone-rainy/]]
* [[雨が降るを英語で?rain, rainy, rainingでどう違う? | http://ajieigo.com/2206.html]]
* [[【英語コラム】Today is hot を卒業しよう! | http://school.jorudan.co.jp/eigolike/pc/columns/columns_044.php]]
! 料理
|food, dish, meal, cuisine |料理 |
| | |
|breakfast |朝食 |
|lunch |昼食 |
|dinner, supper |夕食 |
----
! 調理
!! 動作
|cook |料理する (自動詞) |
|cook, make O |Oを作る|
| | |
|cut O (into X) |O を (Xの形に) 切る [例: cut a grapefruit into slices] |
|slice O |O を薄切り(スライスに)する |
| | |
|boil O |O を茹でる |
|fry (up) O |O を炒める|
|saute O |O をソテーする (軽く炒める) |
|grill O |O を直火で焼く |
|bake O |O を(オーブンなどのような直火で無い形で)焼く |
|crisp O |O をカリカリする (炒める・焼く・揚げる) |
| | |
|pour O (into X) |OをXに注ぐ [例: pour water into a glass]
|make, brew O |
!! 調理器具
|cutting board |まな板 |
|ladle |おたま |
|turner |フライ返し |
|pot |底の深い鍋 |
|pan |底の浅い鍋 |
|kettle |やかん |
| | |
|rice cooker |炊飯器 |
* [[That's interesting!: 台所用品の英語 | http://interesting-languages.blogspot.jp/2014/01/blog-post_23.html]]
----
|cake |
|patty |
|mochi |sticky rice cake |
----
* [[「いい匂い!」は英語で何と言う? | http://mymeet-up.com/?p=1518]]
* [[匂いと香りの表現方法 : バイリンガール英会話 吉田ちか公式ブログ | http://blog.livedoor.jp/bilingirl_chika/archives/52350820.html]]
** (It) smells good.
<<tag "英文法">>
* [[ENGLISH PAGE - Verb Tense Tutorial|http://www.englishpage.com/verbpage/verbtenseintro.html]]
* [[研究論文での過去形と現在形の使い方|http://www.editage.jp/insights/using-past-and-present-tenses-in-research-writing]]
* [[アスペクト|http://plaza.harmonix.ne.jp/~sakat/aspekto.htm]]
----
<<tabs "[tag[英文法]]" "英語/文の構造" "$:/state/tab1" "tc-vertical">>
! 仮定法
!! Conditional Sentence
```
Zero Conditional: 100%
If + 動詞の原型, 動詞の原型.
If Billy doesn't eat, he is hungry.
First Conditional: 50%
If + 動詞の原型, will + 動詞の原型.
If Billy is free tomorrow, I will play rugby with him.
Second Conditional: 10%
If + 動詞の過去型, would + 動詞の原型
If Billy won the lottery, he would buy a big house in Japan.
Third Conditional: 0%
If + had + 動詞の過去型, would + have + 動詞の過去完了型
If Billy had played the important game yesterday, his team would have won.
```
[[[英語 文法]仮定法・仮定法過去|きむてつオフィシャルブログ Kimtetsu Style!|http://ameblo.jp/kimtetsu/entry-10216073605.html]]
[[【英語コラム】仮定法はConditionalsで覚えよう|http://school.jorudan.co.jp/eigolike/pc/columns/columns_047.php]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! if節の省略
* [[ifを省略した「仮定法」などについて - はてな読み|http://d.hatena.ne.jp/rhb/20100124/p1]]
----
! 仮定法現在
```
★仮定法現在:「今はまだ実現していないけど、これから仮にこうなったら」「今はまだやっていないけど、これからこうしてね」というふうに、①未来の仮定と、②依頼/命令に使われていました。「使われていた」と表現したのは、仮定法自体、英語ではかなり使われなくなった文法だからです。
```
```
他のヨーロッパ語が接続法(英語における仮定法)で表している「考えているだけの世界/仮の世界」を英語では法助動詞(will, can, must, mayなど)を使って表現するようになったからです。
```
```
英文法問題の花形「時や条件を表す副詞節には未来のことでも現在形で表し、willはつけない」の正体もここにあります。実は今でこそ現在形(直説法現在)を使いますが、大昔(すくなくともシェークスピアの頃)は、原形(仮定法現在)を使っていたのです。
```
[[仮定法現在②:それって省略じゃないよ!|『英語職人』時吉秀弥の英文法 最終回答!|http://ameblo.jp/eigoshokunin-finalanswer/entry-11555760629.html]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
命令文も「仮定法現在」。
[[003:仮定法現在?: [暗記しないで受かる英語]|http://aokishikieigo.seesaa.net/article/9704383.html]]
----
* [[仮定法を100%理解するための3つのポイント | http://eigo-box.jp/grammar/subjunctive-1/]]
* [[“as if SV” ってどうなってるの?接続詞が2つ続いた構文の謎を解く! | http://eigo-box.jp/grammar/as-if/]]
! 過去形
```
1. Completed Action in the Past (過去に完了しているアクション)
- I saw a movie yesterday.
2. A Series of Completed Actions
- I finished work, walked to the beach, and found a nice place to swim.
3. Duration in Past (アクションの期間は長期でもよい)
- I lived in Brazil for two years.
4. Habits in the Past
- I studied French when I was a child.
5. Past Facts or Generalizations (今はそうでない)
- She was shy as a child, but now she is very outgoing.
```
[[ENGLISH PAGE - Simple Past|http://www.englishpage.com/verbpage/simplepast.html]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! 助動詞の過去形
* 助動詞の過去形は、基本的に過去を表現するものではない。
** 過去のことを表したいときは、完了形と組み合わせて使う。 should have done
----
! 過去進行形
```
1. Interrupted Action in the Past
- I was watching TV when she called.
2. Specific Time as an Interruption
- Last night at 6 PM, I was eating dinner.
3. Parallel Actions (二つのアクションが同時に起こる)
- I was studying while he was making dinner.
4. Atmosphere
(In English, we often use a series of parallel actions to describe the atmosphere at a particular time in the past.)
5. Repetition and Irritation with "Always"
- She was always coming to class late.
```
[[ENGLISH PAGE - Past Continuous|http://www.englishpage.com/verbpage/pastcontinuous.html]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
```
過去進行形は、then / at that time / when S V ~ / while S V ~ などの過去の一点を表す副詞語句と共に使用し、過去のある活動の継続を表します。
```
[[過去進行形の用法:過去の活動の継続・未完了 - RAVCO|http://www.ravco.jp/cat/view.php?cat_id=5227&PHPSESSID=]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
* [[時制を旅する (14) 過去形と過去進行形の違い 日本語と英語をつなぐ/ウェブリブログ|http://je.at.webry.info/201205/article_4.html]]
* [[「進行形」の英語の使い方!「している」を表現するための英文法! | 英トピ|http://eitopi.com/shinkoukei-eigo]]
! 現在完了
!! 4つの用法 (継続・経験・完了・結果)
```
表す意味によってセットになる副詞や前置詞句がある。
継続: for, since, how long, always
経験: ever (疑問文), never, before, often, once, ~ times
完了: just, already, now, yet (疑問文「もう」・否定文「まだ~ない」)
結果: 無い
```
[[現在完了にひそむ罠!継続してたら完了しないし、完了してたら継続しないじゃん - ONE's ENGLISH DOJO | http://taruo.hatenablog.com/entry/gennzaikannryou-keizoku-kannryou-kakokei-tigai]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! 完了形のニュアンス
```
"You’ve hit me! I’ve never been hit even by my dad!" 「殴ったね!親父にもぶたれたことないのに!」
```
[[現在完了形と過去形の違い 現在完了形のニュアンスをしっかり理解(マスター)しよう! – 英語脳ネット | http://www.eigonou.net/413/]]
- - - - -
```
現在完了形を理解するのに大切なのは、これらの3つの用法のことではなく、「現在と結びついている」という意味です。
「過去と現在とが結びついている」とは、出来事が生じた時点から現在まで心理的に何らかのことが継続していることです。
したがって、疑問文で特定の過去の時点を聞く「when」を、現在完了形と一緒に使うことはできません。
```
[[現在完了形1 基本と完了・結果の用法 基礎からの英語学習|http://www.englishcafe.jp/english3rd/day64.html]]
- - - - -
```
英語の過去形は”今”という時点を含まない
```
[[過去形とは違う!「結果」の現在完了が使いこなせたら英語上級者なのだ - ONE's ENGLISH DOJO | http://taruo.hatenablog.com/entry/gennzaikannryou-kekka-kakokei]]
----
! 現在完了進行形
*[[現在完了形と現在完了進行形の意味合いの違いを教えてください。 アルク|http://www.alc.co.jp/speaking/article/question/071010.html]]
** 「継続」を表す場合、状態を表す動詞(knowやbelieveなど)は現在完了形を用います。
** 動作を表す動詞(talkやstudyなど)は現在完了進行形を用いるのが一般的です。
** work(勤務する)やlive(住む)などの日常的・習慣的なことには、どちらも使われます。
* [[現在完了形と現在完了進行形の違い!状態と動作で使い分け|エイゴリ | http://eigori.jp/cat4/post_47.html]]
* [[現在完了進行形 英語の時間的感覚Ⅱ | http://www.englishcafe.jp/tense2/6-3-1.html]]
* [[継続の用法 英語の時間的感覚Ⅱ | http://www.englishcafe.jp/tense2/3-1-2-2.html]]
----
! 未来完了
http://ameblo.jp/samantha-romain/entry-11824665125.html
----
! when 節内での使用
```
when節ではこのように単純形(現在形・過去形)も完了形(現在完了形・過去完了形)も可能であるが、whenever節においては主節と従属節の動詞は時制・相ともに一致していなければならないとのことです。
つまり、
They walked out when I [ gave / had given ] the lecture.
→They walked out whenever I gave [× had given] the lecture.
The audience claps when she [ sings / has sung ].
→The audience claps whenever she sings [× has sung].
ということです。
```
[[時の副詞節と現在完了形|http://hb8.seikyou.ne.jp/home/amtrs/present_perfect.htm]]
! 関係代名詞
* [[秒速で脳内整理!関係代名詞のthatが好まれる3つの場合| 英語学習ボックス|http://eigo-box.jp/grammar/relative-that/]]
!! that と who/which
* [[thatとwhichとwhoの違い 英語 with Luke|http://www.eigowithluke.com/2010/08/that-which-who/]]
!! who と whom
* [[‘Who’ と‘whom’の違いと正確な使い方 | http://englishlive.ef.com/ja-jp/blog/who-and-whom/]]
* [[21世紀現代英語ではwhomは退場?/アルコムワールド | http://alcom.alc.co.jp/communities/942/entries/show/230058]]
!! 先行詞 と 関係代名詞の位置関係
先行詞と関係代名詞の位置は、離れることもありえる。
```
Various drugs have now been developed that help people who are suffering from memory problems.
も
Various drugs that help people who are suffering from memory problems have now been developed.
も
基本的には同じです。
```
[[関係代名詞、離れてもいいですか!?/アルコムワールド|http://alcom.alc.co.jp/questions/show/15015]]
----
! 関係副詞
最低でもこれだけは! when, where, why, how
* [[関係代名詞・関係副詞の違いをマスターする3つのポイント 英語学習ボックス | http://eigo-box.jp/grammar/relative-1/]]
* [[どうして関係副詞を使うの?4つの関係副詞の基礎と考え方 英語学習ボックス | http://eigo-box.jp/grammar/relative-adverb/]]
!! where
* 先行詞 が 「 the place 」 など場所を表すことが明らかな場合は先行詞を省略することが多い。省略されると関係詞節は名詞節になります。
* [[関係副詞 / 英文法 | 英語学習|http://eigogakusyu-web.com/grammar/070/]]
----
! 制限用法と非制限用法の使い分け
```
先行詞を限定条件を付けて明確に規定しなければ聞き手の理解が困難なときには、制限用法で書きます。このような場合、制限用法の関係詞節を省略すると、聞き手は誰のこと・何のことを述べているのかを特定するのが困難になります。
```
[[制限か非制限か (1) ?(限定が必要か否か) - RAVCO|http://www.ravco.jp/cat/view.php?cat_id=5101&PHPSESSID=]]
```
大前提として、「カンマを打つ」とは、内容的な区切りを意味します。特に「カンマ+which」によって、カンマ以下は、その文章において必ずしも必要ないことという位置づけになります。
そして、「カンマ+which」の用法は、究極的には
1. 付加情報
2. 理由
のいずれかになります。
```
[[カンマ一つで大違い!「カンマ+which」の英作文|http://engbiz.net/comma-which/]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! 他のリンク
* [[深~いEnglish: 関係代名詞の非制限・制限用法の違い|http://yukienglish.blogspot.jp/2014/06/blog-post.html]]
* [[「財政危機を経験したギリシャ」(関係代名詞の制限用法と非制限用法):技術英語(時々クラシックと猫):So-netブログ|http://bridge2005.blog.so-net.ne.jp/2015-07-19]]
----
* [[4種類もあるって知ってた!?so that構文を完全攻略するための話| 英語学習ボックス | http://eigo-box.jp/grammar/so-that/]]
! 現在形
主に4つの使い方がある。
```
1. Repeated Actions (感覚的には習慣)
- I play tennis.
2. Facts or Generalizations
- Cats like milk.
3. Scheduled Events in the Near Future
- The train leaves tonight at 6 PM.
4. Now (状態動詞)
- I am here now.
```
[[ENGLISH PAGE - Simple Present|http://www.englishpage.com/verbpage/simplepresent.html]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! ニュアンス
```
現在形は、現在のことを表すというニュアンスよりも、「習慣としていつもすること、性質としていつもある状態」を表すときに使うというニュアンスを持っています。
ややこしいのは英語ではなく日本語です。日本語では習慣を表す表現も、今していることを表す表現も、【〜している】を使っています。そういう意識していますか?
```
[[時制を旅する (13) 現在進行形を考える 日本語と英語をつなぐ/ウェブリブログ|http://je.at.webry.info/201205/article_3.html]]
!! 現在形の未来表現
```
* 変更不可能な未来の行事・予定・計画などについて述べるときに、未来を表す現在形を使うことができます。: What time does your train start?
* まだ変更がきくような予定 (現在進行形): I am going back to my hometown this weekend.
* 現在形の未来表現は公式の事柄・公共的な事柄を表し、進行形の未来表現は個人的で確実な予定を表す。
* 現在形の未来表現は予測を表すことは不可能: It will rain.
```
[[未来表現:現在形 - RAVCO | http://www.ravco.jp/cat/view.php?cat_id=5212&PHPSESSID=]]
* [[きほんの英語 第5回 未来のことに対しても使える現在形 | http://englishcafe.main.jp/englishlounge/basicenglish_5]]
* [[近い未来の予定には現在進行形を用いる | http://e-grammar.info/tense/tense_21.html]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! リンク
* [[What do you do?で「ご職業はなんですか?」になる理由と現在形の真の意味との関係とは|http://taruo.hatenablog.com/entry/what-do-you-do-gennzaikei]]
** 状態動詞を現在形で使うときには現在のことを表すときもあると覚えておくといいですよ
* [[現在形とは〈What do you do?から分かる現在形の意味〉|http://fromexperience.info/grm/genzaikei.html]]
----
! 現在進行形
```
1. Now (今していること)
- You are learning English now.
- I am sitting.
2. Longer Actions in Progress Now ("now" は文脈によっては長い期間になる)
- I am studying to become a doctor.
3. Near Future
- I am meeting some friends after work.
4. Repetition and Irritation with "Always" (無理に使わなくてもかな)
- She is always coming to class late.
```
[[ENGLISH PAGE - Present Continuous|http://www.englishpage.com/verbpage/presentcontinuous.html]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
```
この現在進行形は「長期」にも対応できます。どういう事かというと、
Where are you working now? 今、どこで働いてるの?
I’m working at a restaurant. レストランで働いてるよ。
のような「長期的な”している”」にも使えます。
```
[[現在形と現在進行形の使い方の違い 初心者英会話ステーション|http://ajieigo.com/520.html]]
```
「習慣」はふつう、現在形で表されます。でも、進行形で示す場合もあります。現在形は「はじめりと終わりがはっきりしない」ことを表しますが、習慣の中には、時限的な(ある期間の中での)習慣という場合もあります。そんなときは現在進行形になります。
```
[[時制を旅する (13) 現在進行形を考える 日本語と英語をつなぐ/ウェブリブログ|http://je.at.webry.info/201205/article_3.html]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! リンク
* [[「現在進行形」と「現在形」の違いをイメージする - はてな読み|http://d.hatena.ne.jp/rhb/20091207/p1]]
* [[”英語を勉強している”は現在形??実はややこしい現在形と現在進行形の違い! - みんなのペラペラ英会話トレーニング道場♪|http://block-eikaiwa.top/syunkan-eisaku-reibun/post-1459]]
----
[[#947. 現代英語の前置詞一覧|http://user.keio.ac.jp/~rhotta/hellog/2011-11-30-1.html]]
! 前置詞の感覚
* [[暗記不要!感覚で理解できる前置詞の使い方総まとめ[英語] | http://toeic-guru.jp/prepositions]]
* [[もう迷わない!! toとfor 究極の使い分け感覚|http://native-eigo.com/22]]
* [[坂でもないのにgo up? go down?|中学生からの英語コラム|http://ameblo.jp/column-english/entry-10193061676.html]]
!! 基本イメージ
| | 基本イメージ | 補足 |
|in |~の中に (時間、空間、他...) |空間のイメージに近い |
|on |~に接している |面のイメージ、ライン上というイメージでも使われる (on the way) |
|at |点を指す (時間、空間、他...) |点のイメージ |
|to |~に達する | |
|for |~に向かう |まだ到達していないイメージ (対象の相手、目的、期間) |
|from |~離れていく |場所、時間、期限、...|
|of |~の一部 | |
|over |飛び越えるイメージ (過程の一部だけの場合もある) |"clouds over the mountain", "over the bridge" |
|through |通り抜ける ||
! 群前置詞
2語以上の単語が集まって前置詞の役割を果たす表現です。
* [[up to 品詞について/アルコムワールド|http://alcom.alc.co.jp/questions/show/16130]]
* [[英文法「群前置詞」|http://choidebu.com/bunpou/gunzentishi.htm]]
* [[これで十分!あなたの勉強効率を高めてくれる群前置詞16選| 英語学習ボックス|http://eigo-box.jp/grammar/group-preposition/]]
----
! Memo
* [[Let’s talk about it over dinner — 夕飯でも食べながら|http://promptbox.net/eigonojikan/20090604/]]
! 原級比較
* [[比較級(as ~ as同等(原級)比較の作り方) | http://honmono-eigo.com/kate-waho/hikaku1.html]]
* [[as ~ asは比較の基礎!2つの「as」の大きな違い 英語学習ボックス|http://eigo-box.jp/grammar/comparison-3/]]
** 1つ目の as は、副詞。 「同じくらい~」という意味。 (as well = "同じ程度に" "十分")
** 2つ目の as は、接続詞もしくは前置詞。 「~と比べて」という意味。
!! 倍数表現 (〇倍大きい)
!!! (1) 原級比較を使った表現
~ times + as ~ as … が使える。
* [[倍数表現 - RAVCO | http://www.ravco.jp/cat/view.php?cat_id=5373]]
* [[「2倍の収益」は英語で?!しっかりマスターしたい「倍数」の英語 THE RYUGAKU |http://ryugaku.ablogg.jp/788/]]
!!! (2) 比較級を使った表現
~ times + 比較級 than …
* [[4 比較 - GMAT Araijuku|http://www.araijuku.jp/4122882760436611.html]]
!!! (3) 比較級を使わない表現方法
~ times + the ... of
* [[英文法道場:倍数構文の作り方|http://blog.livedoor.jp/eg_daw_jaw/archives/52084959.html]]
** the ... of 表現は倍数や分数と共に用いることもできる。これは as...as 表現の言い換えともなる。
* [[「2倍の収益」は英語で?!しっかりマスターしたい「倍数」の英語 | THE RYUGAKU [ザ・留学]|https://theryugaku.jp/788/]]
** His office is twice the size of our house.
* [[twice what it was という倍数表現。 : 17 Skies Away -英語を愉しむ-|http://blog.livedoor.jp/yamajun1985/archives/39764016.html]]
```
(1) This dog is twice as big as that one.
(2) This dog is three times as big as that one.
(3) This dog is half the size of that one.
(3) With over 30,000 customers in the UK, TPO doesn't look huge, but that number is twice what it was five months earlier.
```
----
! 比較級
* [[比較級 (-er 優劣比較と劣勢比較の作り方) | http://honmono-eigo.com/kate-waho/hikaku2.html]]
** than は、接続詞もしくは前置詞
** [[英語の「比較」が苦手な人へ!比較級で知っておくべき6つのこと 英語学習ボックス | http://eigo-box.jp/grammar/comparison-1/]]
!! 比較対象
|than usual |いつもよりも |
|than average |平均よりも |
|than before |以前よりも |
!! 関係代名詞のthan
than は、 関係代名詞のwhoの代わりに使われることがある。(疑似関係代名詞)
* [[英語の文法:疑似関係代名詞(as,but,than)|http://honmono-eigo.com/noun-rela/gizikankei.html]]
* [[関係代名詞thanの先行詞は?|英語教師質問箱|http://ameblo.jp/bakumatsutaiyoudenn/entry-11961344564.html]]
** Don't spend more money than is needed.
!! 比較級を使った最上の表現
比較級でも、意味的な最上を表現することができる。
* This dog is bigger than other dogs.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! 比例比較級 (the + 比較級 ~, the + 比較級 ~)
* [[比例比較級: The + 比較級~, the + 比較級 …. - RAVCO | http://www.ravco.jp/cat/view.php?cat_id=5383]]
* [[例文で覚える英文法 | http://eigozuki.com/html/reibun/hikaku-the-er-the-er.shtml]]
** 「~すればするほどますます…」
!! 比較慣用表現
* [[比較英語2 比較級 よく出る慣用表現7選|受験のミカタ|http://juken-mikata.net/how-to/english/compare2-2.html]]
* [[英語の文法:難しい比較慣用表現 英語スピーキング|http://honmono-eigo.com/kate-waho/hikakukanyou.html]]
```
彼は私よりも3inch背が高い。
He is three inches taller than I.
He is taller than I by three inches.
このリンゴは、あのオレンジより2倍大きい。
This apple is twice bigger than that orange.
練習すればするほど、ますます自信がつくものだ
The more you practice, the more confident you will become.
```
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! ラテン比較級
* [[ラテン比較級 | http://www.ravco.jp/cat/view.php?cat_id=5358]]
** 現代英語の比較級には、ラテン語から借入した比較級が現在でも一部使用されています。但し、これらの比較級は、than の代わりに 前置詞の to を使います。したがって、前置詞 to の後には、名詞・代名詞の目的格を置くことになります。
!! 比較級を使わない比較表現
* compared to ~
** [[比較級を使わない比較の文 |http://onepoint.jugem.jp/?eid=3]]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! more
* 限定詞 (形容詞)
** So the good news for the company is that more customers are positive about the merger than before.
* 副詞
** (1) for them enthusiasm is more important than talent
** (2) in his experience females liked chocolate more than males did
* 代名詞
** they proved more of a hindrance than a help
!! rather の使い方
* http://nagatuduki-eikaiwa.com/8188.html
* http://okwave.jp/qa/q807847.html
** rather は、今ではほとんど使いませんが rathe「早い」「早く」の比較級です。ですから、「(より)早い話が」の感じなのです。ここから、「かなり」「むしろ」などが生まれました。比較級ですから心理的には何かと比べて言っているわけです。はっきりと、 than が示される場合もありますが、省略される場合もあるわけです。
----
! 最上級
* [[the を付けてはいけない最上級|毎日5分英文法解説 | http://e-grammar.info/comparative/comparative_32.html]]
* [[英基礎 比較級・最上級のinとofの区別が分かる方法! | http://eikiso.com/grammar/in_of.php]]
* [[英文法道場:比較級と最上級におけるtheの有無に関するウソ|http://blog.livedoor.jp/eg_daw_jaw/archives/50167777.html]]
!! 最も○○なものの1つ
```
Chess is one of the most interesting game.
「1つ」以外にも使える。
three of the most popular countries.
```
!! most
[[英語メモ (mostの意味)]]
! 基本的な話
!! 意味上の主語
* [[これで解決!「不定詞の意味上の主語」完全まとめ | http://eigo-box.jp/grammar/infinitive-1/]]
* [[不定詞の形容詞的用法・英語マスター、これが私の英文法 | http://iioyuiioyu.sakura.ne.jp/post_7.html]]
!! 名詞的用法・副詞的用法
!! 形容詞的用法
* 形容詞的用法の不定詞が名詞を修飾する場合、文頭の主語や、時には修飾されている名詞が、意味上の主語になる (どちらにもなり得る)
* 第2文型・第5文型の補語Cになる。
** He seems to be rich.
** make O C
----
! 原型不定詞
* [[使役動詞だけじゃない!原形不定詞を用いる3つの表現 英語学習ボックス|http://eigo-box.jp/grammar/bare-infinitive/]]
!! 使役動詞
* make, have, let
!! 知覚動詞
知覚動詞の時も "to" がつかない。
(全ての知覚動詞が、不定詞の形を作る訳ではないので注意)
* see, watch, notice, observe
* hear, listen to
* feel
[[ゼロから始める英文法: 動詞 - K-TAN's Website http://k-tan.info/restudy/verb.htm]]
```
■Cに来る原形不定詞と~ingの違い:
・原型不定詞:動作の一部始終を観察
・~ing:動作の一部を偶然観察
といった原則的な違いがあることを覚えておいてください。
I saw him cross the street.
「私は彼が通りを横断するのを(一部始終)見た」
I saw him crossing the street.
「私は彼が通りを横断しているのを(偶然)見た」
```
http://www.ravco.jp/cat/view.php?cat_id=4486
!! help の用法
* [[helpは、help + to 原形 と help + 原形 の形があります。|http://www.ravco.jp/cat/view.php?cat_id=5556]]
** He helped ( to ) start the car. [第3文型]
** I helped my father ( to ) wash the car. [第5文型]
* helpは、必ず「人」を目的語にし、手伝う仕事などを目的語にできません。
* 「(人)の(仕事)を手伝う」は、help + 人 + with + 仕事 と表現します。
----
!! be to do
「予定」、「命令」、「義務」、「可能」、「運命」、「意図」 の5つの意味がある。
```
名詞を修飾する形容詞的用法の不定詞には「助動詞will・should・can」の意味合いが含まれることがある、ということだ。
```
```
正直なところ、「S + be + to do」の持つ意味合いについては、「予定(will)・義務(should)・可能(can)」を押さえておけば、とりあえずOKだと思う。4つ目の「運命(~する運命だ)」については、実際のところほとんど見かけない。5つ目の「意図(~したい)」については、if節の中で「be + to」が用いられたときに、その意味になることが多いと知っておけばよい。
```
[[予備校の英語講師でも知らない!?be + to do の正体と覚え方| 英語学習ボックス | http://eigo-box.jp/grammar/infinitive-2/]]
! 独立不定詞
* 分詞の主語と主節の主語が異なる
** 原則として「文の構造上の主語が自動的に不定詞の意味上の主語として引き継がれる」のであり、「文の構造上の主語と不定詞の意味上の主語が一致しない場合は、なんらかの方法で不定詞の意味上の主語を明示する」
* 「独立不定詞」などという仰々しい文法用語を使わなくても「不定詞の慣用表現」と考えればよいのです。
* [[英語で悩むあなたのために | http://roundsquaretriangle.web.fc2.com/text/010_10.html]]
----
! 疑問詞 + to do
* [[英語の文法:不定詞(疑問詞+to不定詞、独立不定詞)|http://honmono-eigo.com/v-syurui/huteishi5.html]]
```
「分詞」という名前は「動詞と形容詞の性質を分け持つ」という意味から来ています。
```
[[そうだったのか!英文法~第31回~【分詞って…意味不明】(その1) 大人の英文法やり直し講座|英語いいね!SP版|http://school.jorudan.co.jp/eigolike/sp/grammar/grammar_031.php]]
! 現在分詞
!! 自動詞
自動詞の現在分詞は、「〜している」という意味になる。
```
I saw a flying bird.
私は飛んでいる鳥を見た。
The man standing over there is my father.
あそこに立っている男性は、私の父親です。
ここで押さえておきたいのは、「~している」という意味を持つflyingやstandingが、自動詞が姿を変えたものだということだ。
```
[[excitingは「興奮している」じゃない!?現在分詞・過去分詞の4つの意味 英語学習ボックス|http://eigo-box.jp/grammar/participle/]]
!! 他動詞
他動詞の現在分詞は、「~させるような」という意味になる。
```
That is a surprising discovery.
それは驚くべき(人を驚かせるような)発見だ。
It was an exciting game.
それはおもしろい(人を興奮させるような)試合だった。
ここでのsurprisingやexcitingを、進行(~している)の意味で訳すことができないのは明らかだ。
元になっている動詞が他動詞なら、現在分詞は能動(人を~させるような)の意味を持つことを、しっかり押さえておこう。
```
[[excitingは「興奮している」じゃない!?現在分詞・過去分詞の4つの意味 英語学習ボックス|http://eigo-box.jp/grammar/participle/]]
----
! 過去分詞
!! 自動詞
自動詞の過去分詞は、「〜し終えた」という意味になる。
!! 他動詞
他動詞の過去分詞は、「~された」という意味になる。
----
! 分詞構文
分詞構文とは、<接続詞+S+V>という節のかたちを分詞を用いて句のかたちに書き換えたもの。
一見様々な意味を持つ表現に見えるが、「主節の部分と同時もしくは連続して起こっている」と考えれば基本的に全てカバーできる。
("having + 過去分詞" は、「主節より前に起こっている」と考える)
* [[これだけは知っておきたい!分詞構文を正しく作るための3ステップ | http://eigo-box.jp/grammar/participial-construction-1/ ]]
* [[誤解してない!?独立分詞構文こそ分詞構文の本来の姿 | http://eigo-box.jp/grammar/participial-construction-3/ ]]
* [[分詞構文 - Mt. English Project|http://mep.papiko.com/index.php?%E5%88%86%E8%A9%9E%E6%A7%8B%E6%96%87#ne1cd354]]
* [[分詞構文のお話(付帯状況 - 動作の連続) : Lady Satin's English Project|http://ladysatin.exblog.jp/22523602/]]
----
!! 接続詞を残す分詞
```
分詞構文は、接続詞と主語の省略を用いているため、書き手は読み手に意味が正確に伝わっているのか、多少不安なときもあります。そんな時は、誤読を避ける保険のようなものとして、念のために接続詞を残してその意味を強調して伝えることがあります。但し、通例接続詞として残すものは、以下のようなものとほぼ決まっています。
・while , when, after, before, though , although
When living in New York, I often visited MOMA.
「ニューヨークに住んでいた時、私はよくMOMA(ニューヨーク近代美術館)を訪れた」
```
[[接続詞を残す分詞構文 - RAVCO|http://www.ravco.jp/cat/view.php?cat_id=4441&PHPSESSID=]]
!! 付帯状況のwith
アクション(動作)ではなく、(あるものの)状態を付加的に説明する場合は、基本的に、
with O C
の形を使う。
```
She was listening to the music, with her eyes closed. --- 「閉じた目の "状態"」
He was sitting, with his arms folded. --- 「組んだ腕の "状態"」
```
慣用的でない独立分詞構文以外のケースでは、 "with O C" が適切な表現になるケースが少なくない。
```
その場合は「~なので」と理由を表す付帯状況になる場合が多い
「強い風が吹いて寒かった」
It was cold, because strong winds were blowing.
It was cold, with strong winds blowing.
「彼は目を輝かせながら、その話を聞いた」
He listened to the story, while his eyes were shining.
(** he was shining his eyes にしてはいけません。「目を輝かせる」ことは自分の意志によってできることではなく、自然とそうなるものだからです)
He listened to the story, with his eyes shining.
```
[[付帯状況・with を使う付帯状況 - RAVCO|http://www.ravco.jp/cat/view.php?cat_id=4442&PHPSESSID=]]
----
!! 慣用的分詞構文・懸垂分詞
懸垂分詞とは、主語が誰か特定できない分詞構文のこと。ほとんどが慣用表現。
```
分詞構文の原則では、主語が主文と同じときに分詞構文の主語を消すことができます。しかしながら、その原則に矛盾するものに時々出会います。例えば、
「外見から判断すると、彼は50過ぎに違いない」
When we judge from his looks, he must be over fifty.
↓(原則では、we は残すはず)
We judging from his looks, he must be over fifty.
↓(一般人称 we, you, theyの時には省略するのが普通)
Judging from his looks, he must be over fifty.
以上のように、残すべき主語(主文と異なる主語)を原則に反して消してしまっている分詞構文を懸垂分詞と言います。しかし、懸垂分詞は慣用的表現以外使わないようにしましょう。慣用的でないものは非文法的と判断され減点対象となります。
```
[[慣用的分詞構文・懸垂分詞 - RAVCO|http://www.ravco.jp/cat/view.php?cat_id=4432&PHPSESSID=]]
!!! 慣用的な表現
* Strictly/Frankly/Roughly/Generally/Practically speaking,
* Talking of / Speaking of X,
* Considering X,
* Considering (that) S V ...,
! 文の要素
|S |主語 |Subject |
|V |述語動詞 |Verb |
|O |目的語 |Object |
|C |補語 |Complement |
|M |修飾語 |Modifier |
* [[Complement | http://www.grammarinenglish.com/sentencepattern/?lesson=examples]]
----
! 品詞
|名詞 |noun |
|動詞 |verb |
|形容詞 |adjective (adj.) |
|副詞 |adverb (adv.) |
|前置詞 |preposition |
|接続詞 |conjunction |
|冠詞 |article |
|疑問詞 |interrogative / interrogative word / question word|
|限定詞 |determiner |
| | |
|代名詞 |pronoun |
|間投詞 |article |
* [[限定詞(Determiners) | http://roundsquaretriangle.web.fc2.com/text/005_01.html]]
** 「限定詞」を形容詞の中の一部として扱う考え方もある。
!! 名詞
|可算名詞 |countable noun |
|不可算名詞 |uncountable noun |
|単数形 |singular |
|複数形 |plural |
!! 動詞
|自動詞 |intransitive verb |
|他動詞 |transitive verb |
| | |
|状態動詞 |state verb |
|動作動詞 |action verb |
|助動詞 |auxiliary verb |
|句動詞 |phrasal verb |
!! 形容詞
|限定用法 |attributive use |名詞を修飾して、その名詞を限定させる用法 |
|叙述用法 |predicative use |主語または目的語の性質を述べるもの (補語) |
----
! 時制 (tense)
|present |現在形 |
|past |過去形 |
|future |未来形 |
| | |
|present perfect |現在完了 |
|past perfect |過去完了 |
|future perfect |未来完了 |
http://www.alse-net.com/column/grammar-terms.htm
----
! 形式
|gerund |動名詞 |
|infinitive |不定詞 |
|comparative |比較級 |
|present participle |現在分詞 |
----
! ほか
|group preposition |群前置詞 |because of, thanks to, in front of みたいなやつ |
* [[遠近法から射影幾何学へ|http://www.math.meiji.ac.jp/files/active/0/ao2004lec.pdf]]
* [[ペインタークラシックで描く!: 立方体の3点透視法|http://spectrum488.blog112.fc2.com/blog-entry-125.html]]
ある面に作用する応力を考える際には、「面の向き」と「力の向き」の情報が必要である。
応力をベクトル (p) で面の向きを単位法線ベクトル (n) で表すとすると、この2つの情報をテンソル (P) にまとめることで、より一般的な形で表すことが可能である。
これらの量の間には、次の関係がある。
$$p_i = P_{ij} n_j$$
そして、p を ''応力ベクトル''、P を ''応力テンソル'' という。
なお、この式は、ドット積を用いて表すこともある。
$$p_i = P \cdot n$$
! CD
<<tiddler "CD">>
! その他
* [[HUUNHUURTU.COM|http://www.huunhuurtu.com/]]
** ホーミー?
T.R.Mahalingam / MALI
!定義
!! 1成分系の場合
:$$ \mu = \left( \dfrac{\partial G}{\partial N} \right)_{T,p} = \left( \dfrac{\partial H}{\partial N} \right)_{S,p} = \left( \dfrac{\partial F}{\partial N} \right)_{T,V} = \left( \dfrac{\partial U}{\partial N} \right)_{S,V} $$
1成分系では、ギブズエネルギーは物質量に比例する。
:$$G[T,p;N] = N \mu$$
- - - - -
!! 多成分系の場合
「''成分 i の化学ポテンシャル''」は、系全体の自由エネルギーを 成分 i で偏微分して得られる ''部分モルギブス自由エネルギー'' (成分 i の 1 mol あたりのギブスエネルギー) を意味する。
:$$\mu_i = \left( \dfrac{\partial G}{\partial N_i} \right)_{T,p}$$
---
! [[理想気体の化学ポテンシャル]]
理想気体の化学ポテンシャルは、温度と圧力の関数で表せる。なお、$$p_0$$ は基準圧力(通常は1 atm)である。
:$$\mu(T,p) = \mu(T, p_0) + RT \ln \left( \dfrac{p}{p_0} \right)$$
多成分系における成分 i の化学ポテンシャルは、''温度'' と ''成分 i の分圧'' ($$p_i$$) を用いて表せる。
:$$\mu_i(T,p_i) = \mu_i(T, p_0) + RT \ln \left( \dfrac{p_i}{p_0} \right)$$
! [[実在溶液の化学ポテンシャル|活量]]
混合前の 成分 i の化学ポテンシャルを $$ \mu^{pure}_i (T,p)$$ とすると、活量係数 ($$\gamma_i$$) を用いて次のように表せる。
:$$\mu^{real}_i = \mu^{id}_i + \mu^E_i = \{ \mu^{pure}_i (p,T) + RT \ln x_i \} + RT \ln(\gamma_i) = \mu^{pure}_i (p,T) + RT \ln(x_i \gamma_i)$$
---
! [[相平衡]]
相平衡の状態では、全ての成分において、液相・気相の化学ポテンシャルが等しくなる。
$$\mu^V_i = \mu^L_i$$
!! 理想気体の場合
----
! 同次関数とオイラーの定理
* http://nowsharp.com/wiki/mathematics/%E5%90%8C%E6%AC%A1%E9%96%A2%E6%95%B0%E3%81%A8%E3%82%AA%E3%82%A4%E3%83%A9%E3%83%BC%E3%81%AE%E5%AE%9A%E7%90%86
* http://web.econ.keio.ac.jp/staff/tose/cours/2017/CalcNT/CalcNT20171018slv02.pdf
ベクトル空間を一般化したような概念。
和 と スカラー乗法(スカラー倍) の二つの演算を持つ。
----
! 環上の加群
!! R-左加群
R-左加群 は、「''アーベル群'' と ''スカラー乗法''」の組として定義される。
スカラー乗法は、$$R \times M \to M$$ (R: 環, M: アーベル群) という写像として定義され 、以下の性質を満たすものでなければならない。
# $$ r(x+y) = rx + ry$$
# $$(r+s)x = rx + sx$$
# $$(rs)x = r(sx)$$
# $$1_Rx = x$$
$$r,s \in R, x,y \in M$$
!! R-右加群
基本的には R-左加群 と同じだが、スカラー乗法が満たすべき条件が少し異なる。
# $$(x+y)r = xr + yr$$
# $$x(r+s) = xr + xs$$
# $$x(rs) = (xr)s$$
# $$x1_R = x$$
!! 加群
R が可換環ならば、 $$rx = xr$$ と定義すれば、右左の差はなくなる。
<<<
R が可換環である場合には,左加群と右加群との間に本質的な違いはない.よって,可換環 R 上の左加群 (および右加群) のことを単に R 上の加群 (module) という
<<<
https://mathematics-pdf.com/pdf/module.pdf
-----
---
環の作用する加法群。環R を用いて ''R-加群'' というように呼ばれることもある。
! 定義
<<<
[R-加群の概念のプロトタイプ] 体K 上のベクトル空間は,K-加群.実際,K を(可換)環と見たときの演算は [[ベクトル空間]] の「スカラー倍」という演算に他ならない.
<<<
http://www.geocities.jp/aoirei2002/math/papers/shafa.pdf
---
http://www.math.s.chiba-u.ac.jp/~matsu/math/module.pdf
! 加法族 (Algebra)
次の3つの条件を満たすような 集合Xの部分集合族 β のことを ''加法族'' という。
# $$\emptyset \in \beta \ \ \ $$ (空集合を含む)
# $$A \in \beta \implies A^c \in \beta \ \ \ $$ (補集合に関して閉じている)
# $$A, B \in \beta \implies A \cup B \in \beta \ \ \ $$ (有限和集合に関して閉じている)
https://www.bauer.uh.edu/rsusmel/phd/sR-0.pdf
- - - - - - - - - - - - - - - - - - - -
! 集合半環 (Semiring of sets)
# $$\emptyset \in \beta \ \ \ \ \ \ \ $$ (空集合を含む)
#
! 完全加法族 (σ-algebra)
次の3つの条件を満たすような部分集合族 β のことを ''完全加法族'' という。
# $$\emptyset \in \beta \ \ \ \ \ \ \ $$ (空集合を含む)
# $$A \in \beta \implies A^c \in \beta \ \ \ \ \ \ $$ (補演算に関して閉じている)
# $$\displaystyle A_n \in \beta (n = 1,2, \dots) \implies \bigcup_{n} A_n \in \beta \ \ $$ (可算合併に関して閉じている)
完全加法族は、加法族の部分集合である (完全加法族は全て加法族だが、その逆は必ずしも成り立たない)。
; 例:
例として、1から4までの目がでる正四面体のさいころを考える。
でる目の集合を $$X = \{ 1, 2, 3, 4 \}$$ とした時、X すべての部分集合を元とする ''部分集合族'' β は、
$$\beta = \{ \emptyset, \{ 1 \}, \{ 2 \}, \{ 3 \}, \{ 4 \}, \{ 1,2 \}, \{ 1,3 \}, \{ 1,4 \}, \{ 2,3 \}, \{ 2,4 \}, \{ 3,4 \}, \{ 1,2,3 \}, \{ 1,2,4 \}, \{ 1,3,4 \}, \{ 2,3,4 \}, \{ 1,2,3,4 \} \} $$
とであり、この β は、以下に示す加法族の定義を満たしている。
他の例としては、$$\{ \emptyset, \{ 1,2 \}, \{ 3,4 \}, \{ 1,2,3,4 \} \}$$ とかでもよい (はず)。
----
! 基本的な用語・定義
ここでは厳密な定義よりも、分かりやすさを優先する。
!! 集合族
元がすべて集合であるような集合を、 ''集合族'' と言う。
なお、集合族A の元を $$A_i$$ といった書き方をされることがけっこうある。
!! 部分集合族
集合族の要素である集合がいずれもある集合Xの部分集合であるとき、その集合族を ''Xの部分集合族'' という。
; 例:
$$X = \{ 1,2,3 \}$$ に対する、以下のような集合族。
* $$\{ \{ 1 \}, \{2\}, \{ 1, 3\} \}$$
* $$\{ \emptyset, \{ 1,2 \}, \{3\}, \{ 1, 2, 3\} \}$$
!! 冪集合 (power set)
集合Xの部分集合の全体として作り出される集合を ''冪集合'' という。
$$2^X$$
- - - - - - - - - - - - - - - - - - - -
!! 集合関数
集合族 A から $$\mathbb{R} \cup \{ \pm \infty\}$$ への写像のことを,A上定義された集合関数という
----
----
この β に 「''X の部分集合をすくなくとも一つ含む''」 という条件を加えた部分集合族は、''加法族'' (or 集合体)という。加法族は,完全加法族,可算加法族,σ-加法族,集合代数,σ-代数などと呼ばれることもある。
; 補足:
* 二つの集合の和集合をとる操作を集合における「加法」と考えたとき,その「加法」について閉じた集合族を加法族と呼ぶわけです
* 空集合φは「加法」における「単位元」とみなすことができます
* Eの補集合Ecは「加法」におけるEの「逆元」と考えることができます.
https://mathematics-pdf.com/pdf/measure.pdf より
```
(8)の可算名詞‘a line’「線」は、(抽象名詞ではありますが) その切れ目を意識する必要など、全くない可算名詞で、例え、どこまでも果てしなく続いていたとしても、「1本」という概念でとらえることが許される名詞です。つまり、例え、目には見えなくとも、どこかにたどり着いて、そこが切れ目になっているのだろう、というような、想像をさせる余地があるので、それだけで、可算名詞として、OKなんですね。
```
http://blog.goo.ne.jp/emptycategory/e/9c211e9ca893f41bb68f7b9bac4073dd
----
http://eigo-jouhou.com/how-to-choose-countable/
* http://kaigaisyuccyou.haluc.net/010/
; アルゴリズム
* Nearest Neighbor
** 最速
** 引き延ばす時には隣のピクセルをコピーし、縮小する時には単にピクセルを削除するだけ
** 斜めの線にドット絵のようなカクカクが付き易い
* Pixel Mixing (Pixel Averaging, Area map)
** 縮小前のピクセルは数が多いので、それらの色の平均を使う
* Mitchell フィルタ
バイキュービック法
https://qiita.com/yoya/items/b1590de289b623f18639
----
* [[画像縮小について (株式会社ディア Dear inc.) |http://www.dear-jpn.com/main/2007/09/image_reduction.html]]
* [[きれいに縮小する方法(4) — 専用ソフトとこれまでの方法の比較 |http://pixiv.cc/freundlich/archives/50950265.html]]
<<tag "画像処理">>
<div class="tc-table-of-contents">
<<toc-selective-expandable '画像処理'>>
</div>
----
* https://lp-tech.net/articles/vxARr
* https://qiita.com/shim0mura/items/5d3cbef873f2dd81d82c
* http://navi.cs.kumamoto-u.ac.jp/~koutaki/pukiwiki/index.php?%A5%A8%A5%C3%A5%B8%B8%A1%BD%D0
* http://imagingsolution.blog107.fc2.com/blog-entry-92.html
* www.wakayama-u.ac.jp/~chen/education/image/2004/image05.ppt
* https://www.youtube.com/watch?v=eNBZI-qYhpg
* https://algorithm.joho.info/image-processing/sobel-filter/
http://nodamushi.hatenablog.com/entry/20140102/1388669333
http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_imgproc/py_filtering/py_filtering.html
http://imagingsolution.net/category/imaging/imageprocessingalgorithm/page/2/
- - -
* https://neutrium.net/
; ~OpenCV
* [[OpenCV-1.0 リファレンス マニュアル | http://opencv.jp/opencv-1.0.0/document/]]
* [[FrontPage - OpenCV@Chihara-Lab. | http://chihara.naist.jp/opencv/]]
* [[OpenCVを使った画像処理|http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_imgproc/py_table_of_contents_imgproc/py_table_of_contents_imgproc.html]]
; directshow
* [[Geekなぺーじ : DirectShowプログラミング [VC++] | http://www.geekpage.jp/programming/directshow/]]
* [[Windows/DirectShow/OpenCVとの組合せ - キャプチャ部分のみDirectShowを使って動画像処理は使い慣れたOpe... | http://www.eml.ele.cst.nihon-u.ac.jp/~momma/wiki/wiki.cgi/Windows/DirectShow/OpenCV%E3%81%A8%E3%81%AE%E7%B5%84%E5%90%88%E3%81%9B.html]]
; 参考
* [[IMAQ Vision コンセプトニュアル| http://www.ni.com/pdf/manuals/323375a.pdf]]
* [[主にコーディング: Image processing | http://mainly-coding.blogspot.com/search/label/Image%20processing]]
* [[TEOライブラリによる画像処理プログラミングガイド | http://teo.sourceforge.jp/doc/TeoProgrammingGuide/section5-2.html]]
* [[【OpenCV】IplImage構造体 画像処理ソリューション | http://imagingsolution.blog107.fc2.com/blog-entry-99.html]]
; その他
* [[MOONGIFT: » 画像用Diff「Perceptual Image Diff」:オープンソースを毎日紹介 | http://www.moongift.jp/2008/07/perceptual_image_diff/]]
* [[ロゴ・イラスト系ビットマップ画像の拡大ツール『MugenViewer』 | http://www.noids.net/mugen/]]
<<list-links filter :[tag[画像処理のアルゴリズム]]>>
---
! カーネルと畳み込み
<<<
''畳み込み''(''convolution'')とは、画像処理でよく利用される手法で、''カーネル''(または''フィルター'')と呼ばれる格子状の数値データと、カーネルと同サイズの部分画像(ウィンドウと呼ぶ)の数値データについて、要素ごとの積の和を計算することで、1つの数値に変換する処理のことである*1。この変換処理を、ウィンドウを少しずつずらして処理を行うことで、小さい格子状の数値データ(すなわちテンソル)に変換する。
*1 要素の積の和に、さらにバイアス項と呼ばれる値を加えることもある。
<<<
https://www.atmarkit.co.jp/ait/articles/1804/23/news138.html
* http://people.csail.mit.edu/sparis/bf_course/
---
; [[ノイズ除去]]
# 移動平均フィルタ
# ガウシアンフィルタ
# 中央値フィルタ
# バイラテラルフィルタ
; [[輪郭の検出]]
# 微分フィルタ
# プリューウィットフィルタ (Prewitt filter)
# ソーベルフィルタ(Sobel filter)
# ラプラシアンフィルタ
# キャニ―フィルタ
; [[モルフォロジー処理]]
# 膨張と収縮
# オープニングとクロージング
; [[くっついた粒子の分離]]
# Watershed
<<tag "解析力学">>
[[ラグランジアン]] や [[ハミルトニアン]] と呼ばれる座標変換に対して不変な量を定義し、それを基礎方程式として展開する力学。
[[変分法]] を用いて、ラグランジアンやハミルトニアンを最小化する条件を計算することで、運動方程式が得られる。
----
! 重要な定義
!! [[ラグランジアン]]
''ラグランジアン (L)'' は、力学系の運動エネルギー (T) と ポテンシャルエネルギー (U) の差として定義される。
:$$L = T - U $$
さらに、t を時間、q を(質点の)一般化座標とし、U を保存力 (位置 $$q$$ だけの関数) とみなすと、
:$$L(q, \dot{q}, t) = T(\dot{q}(t)) - U(q(t)) $$
と表せる。
!! [[ハミルトニアン]]
ラグランジアンを、速度 ($$\dot{q}$$) に関して [[ルジャンドル変換]] することで得られる。ざっくり言うと、 T と U の和である。
$$U(q)$$ が成り立つ条件下では、 L は $$\dot{q}$$ の変化に対して、下に凸である$$\left( \dfrac{\partial L}{\partial \dot{q}} > 0 \right)$$。そのため、ラグランジアンの速度による偏微分を、
:$$p = \dfrac{\partial L}{\partial \dot{q}}$$
とすると、ラグランジアンのルジャンドル変換は次のように表され、
:$$H(q, p, t) = p \dot{q} - L(q, \dot{q}, t) = T + U$$
この変換された関数 H のことをハミルトニアンという。
* http://www.phys.cs.is.nagoya-u.ac.jp/~tanimura/class/H29-tanimura-mechanics-8.pdf
- - - - -
!! 位相空間 (相空間)
* 力学系の位置と運動量を座標(直交軸)とする空間のことである。
* ハミルトン形式においては位置と運動量が力学変数となり、力学変数の関数として表される物理量は位相空間上の関数となる。
!! 正準座標 (canonical coordinates)
----
! [[最小作用の原理]]
まず、位置・速度・時間を変数とする 状態関数 (''ラグランジアン'') を定義する。
:$$L(q(t),\dot{q}(t), t)$$
次に、この関数の時間積分 (''作用'') を定義する。
:$$\displaystyle S = \int_{t_1}^{t_2} L(q(t),\dot{q}(t), t) dt $$
このとき、($$x,\dot{x}$$ によって定められる) 力学的な状態は作用Sを最小にするように実現しており、これを ''最小作用の原理'' という。
!! [[オイラー・ラグランジュ方程式]]
上記の S についての式の停留条件を、[[変分法]] を求めると、得られる式。
:$$\displaystyle \frac {\partial L}{\partial q} - {\frac {d}{dt}} \left( \frac {\partial L}{\partial \dot{q}} \right) = \frac {\partial L}{\partial q} - \dot{p}= 0$$
---
* http://www.phys.u-ryukyu.ac.jp/~maeno/cgi-bin/pukiwiki/index.php?%BA%C7%BE%AE%BA%EE%CD%D1%A4%CE%B8%B6%CD%FD%A4%CF%A4%C9%A4%B3%A4%AB%A4%E9%A4%AF%A4%EB%A4%AB%A1%A9
* http://ufcpp.net/study/physics/dynamics/action/
---
* https://repository.kulib.kyoto-u.ac.jp/dspace/bitstream/2433/137415/1/phs_5_127.pdf
----
$$L(x,\dot{x}, t) = T(\dot{x}) - V(x)$$
* x は位置
* T は運動エネルギー
* V はポテンシャル
* ドットは時間微分を表している。
* L はスカラー
!! 作用積分
ラグランジアンをある時間の範囲で積分したものを ''作用積分'' という。
$$\displaystyle I = \int L dt $$
; 前提条件
# 独立性(データそれぞれが独立)
# 誤差が正規分布に従う
# 誤差(又は被説明変数に関する観測値)の分散が均一であること
https://www.amed.go.jp/content/000048630.pdf
----
! 予測区間と信頼区間の違い
<<<
ここからは信頼区間同様に説明変数を x=x,,0,, と任意に固定して考えます。信頼区間では
:誤差項を含まない真の値: β,,0,,+β,,1,,x,,0,,
が考察の対象でしたが、予測区間では
:誤差項を含む目的変数の値: β,,0,,+β,,1,,x,,0,,+ε
が考察対象になります。
<<<
[[単回帰モデルの予測区間 - 有意に無意味な話|https://starpentagon.net/analytics/simple_linear_regression_pi/]]
----
! 二つの回帰直線の差の検定
3つのタイプのデータを用意する。
# 切片も傾きも等しい
#* すべてのカテゴリをまとめて回帰したもの
# 切片は異なるが、傾きは同じものとして行った回帰
# 切片も傾きも異なるものとして行った回帰
-
* http://www.cis.kit.ac.jp/~tomaru/pukiwiki/?R_ComparingRegressions
* [[二つの回帰直線の差の検定 - 統計ER|https://toukeier.hatenablog.com/entry/2019/01/06/120845]]
* [[おっと危ない:信頼区間と予測区間を混同しちゃダメ - Take a Risk:林岳彦の研究メモ|http://takehiko-i-hayashi.hatenablog.com/entry/20110204/1296773267]]
----
https://hitorimarketing.net/tools/normal-quantile-quantile-plot.html
; qq plot
* https://data.library.virginia.edu/understanding-q-q-plots/
* https://oshiete.goo.ne.jp/qa/8198813.html
----
! 回転行列
! 二次元の回転
二次元平面上の点 $$(x, y)$$ を θ 度回転させた後の座標は、回転行列 $$R(\theta)$$ を、左から掛けることで求められる。
$$ R(\theta) = \begin{pmatrix} cos \theta & -sin \theta \\ sin \theta & cos \theta \end{pmatrix} $$
!! 計算例
$$ \begin{pmatrix} cos \theta & -sin \theta \\ sin \theta & cos \theta \end{pmatrix} \cdot
\begin{pmatrix} x \\ y \end{pmatrix}
=
\begin{pmatrix} x cos \theta - y sin \theta \\ x sin \theta - y cos \theta \end{pmatrix} $$
!! 加法定理
http://senkei.nomaki.jp/rotation_matrix.html
----
; 出国
* [[成田空港|http://www.narita-airport.jp/jp/guide/index_t1.html]]
; 入国
* [[アメリカ入国手続き|http://www.ryokojoho.jp/usa/other/arrival.cfm]]
** 渡航目的を言えるように
** [[入国審査 - 出国&入国の英会話|http://travel.style-space.com/3tra/immigration.php]]
* [[Atlanta Hartsfield-Jackson|http://www.atlanta-airport.com/]]
** [[アトランタ空港情報|http://www.mascoenterprises.com/ATLairport.html]]
** [[アトランタ空港での乗り換え・・・その他|http://oshiete.goo.ne.jp/qa/765198.html]]
** [[アトランタ・ハーツフィールド国際空港 JALPAK | http://www.jalpak.co.jp/apo/ame/us.html]]
** [[アトランタ空港の乗り継ぎレポート|http://www.mile-tokutoku.com/travelog/travelog_058.htm]]
** [[DELTA: アトランタ空港の地図|http://ja.delta.com/delta/enja/?24;http://www.delta.com/traveling_checkin/airport_information/airport_maps/atlanta.jsp?lang=ja&loc=jp]]
* [[アメリカでの航空機乗継について教えて下さい|http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1318585288]]
*http://sandpoint.web.infoseek.co.jp/traveltips/index.html
* [[Tulsa Airport|http://www.tulsaairports.com/index.cfm?id=20]]
; 宿泊
* [[ホテルに滞在するときの英会話|http://allabout.co.jp/study/travelenglish/subject/msub_phrase03.htm]]
* [[Best Western Inn | http://eight-americann.seesaa.net/article/54432964.html]]
* [[ホテルで働く人たちの職種と役目|http://asp.hotel-story.ne.jp/concierge/001_login/mame.html]]
* [[ホテルでタクシーを呼んでほしい時の英語|http://okwave.jp/qa/q1356459.html]]
; 帰り
* [[Minneapolis Airport| http://www.mspairport.com/]]
* [[フォンカード (Phone Card) の使い方|http://friends-esl.com/american-life/how-to-use-phone-card.php]]
* http://ja.delta.com/delta/enja/?24;http://www.delta.com/traveling_checkin/airport_information/airport_maps/minneapolis.jsp?lang=ja&loc=jp
----
* 連絡先のまとめ
** 大使館
** タクシー
** ホテル
** (大学)
----
*泊まるホテルへ電話 (日本語の番号へ)
**0120-42-1234
*仕事に関することを、言えるようにする
*eチケットの確認
*時計の電池
*銀行へ行く
**クレジットカード
**トラベラーズ・チェック
*海外保険の確認
*書類などのコピーを取る
**パスポート
**トラベラーズチェック
**eチケット
**ホテルの予約
*借りる携帯を取りに行く
*パスポート用の写真2枚を撮る
*パスポートの管理方法は?
* 荷物を早めにまとめてみる
! 画像処理
<<tiddlerList tags:"絵,画像処理">>
! 描く
<<tiddlerList tags:"絵,描く">>
! フリー素材
* <<slider tocSlider フリーフォント フリーフォント>>
* <<slider tocSlider フリー素材画像 フリー素材画像>>
! 変なもの・場所など
<<tiddler "変なもの・場所など">>
! ほか
* [[オンライン画像編集ツール、ベスト5 : ライフハッカー[日本版] | http://www.lifehacker.jp/2009/07/post_997.html]]
* 熊田千佳慕
[[鳳明館 | http://www.homeikan.com/]]
[[龍名館 | http://www.ryumeikan-honten.jp/]]
http://www.sadachiyo.co.jp/
以下のような特徴を持つベクトルの二項演算。
* 双線形性を持つ
* 特定の次元でしか定義できない
** 基本的には、3次元のベクトルで使う
** 0次元・1次元・7次元でも定義できるらしい
* 内積とは異なり、閉じた演算になる。
** $$R^3 \times R^3 \to R^3$$
* 分配法則
* 交換法則は満たさないが、交代性は持つ
** $$A \times B = - (B \times A)$$
- - -
* 回転に関する物理現象を記述するのに便利
** 便利になるように定義したと言う方が適切かも
---
! 定義
A, B を三次元のベクトルとする ($$A, B \in R^3$$) 。
:$$A \times B = \begin{pmatrix} a_1 \\ a_2 \\ a_3 \end{pmatrix} \times \begin{pmatrix} b_1 \\ b_2 \\ b_3 \end{pmatrix} = \begin{pmatrix} a_2 b_3 - a_3 b_2 \\ a_3 b_1 - a_1 b_3 \\ a_1 b_2 - a_2 b_1 \end{pmatrix} $$
より一般的な定義は、行列式を用いて行う (らしい)。
----
! 外積の計算・性質
基本的に3次元でしか扱わないので、代数的な取り扱いには、あまりこだわらなくてもよいかな、と思う。
!! 外積の大きさ
扱う問題によっては、外積が返すベクトルの大きさだけに興味がある場合もある。
外積の大きさだけであれば、A と B のなす角を θ を用いて、次のように計算できる。
:$$|A \times B| = |A| |B| \sin{\theta}$$
!! 外積の向き
A, B を含む平面に垂直なベクトルになる。
:$$(A \times B) \cdot A = (A \times B) \cdot B = 0$$
<<tag "確率空間">>
----
! 確率空間 (Probability space)
[[可測空間|測度]] $$(\Omega, E)$$ に確率測度を入れた [[測度空間|測度]] $$(\Omega, E, P)$$ を、''確率空間'' という。
* $$\Omega : $$ 標本空間
* $$E : $$ ''Event space'' ($$\Omega$$ の部分集合からなる[[完全加法族|加法族]])
* $$P : $$ 確率測度($$\mathcal{F}$$ から実数への非負関数)
https://mathtrain.jp/probspace
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
! 確率測度 (probability measure)
Ω, E をそれぞれ標本空間, Event space とし、$$A \in E$$ とする。このとき次の条件を満たす写像 $$P: E \to \mathbb{R}$$ を確率[[測度]]という。
# $$P(\emptyset) = 0 \ \ \ \ \ \ $$ (空集合の測度は 0)
# $$P(\Omega) = 1 \ \ \ \ \ \ $$ (標本空間の確率測度の像は1)
# $$\displaystyle A_j \cap A_k = \emptyset \ \ [j \neq k] \implies P(\bigcup_{n=1}^{\infty} A_n) = \sum_{n=1}^{\infty} P(A_n) \ \ \ \ \ \ $$ (矢印の左側は $$A_n$$が互いに素であることを意味する)
標本空間が有限の場合、確率測度は次のように表すこともできる (|A| はAの濃度)。
:$$P(A) = \dfrac{|A|}{|\Omega|}$$
----
! 関連する概念
<<list-links filter:[tag[確率空間]] >>
convergence of random variables
[[Convergence of Random Variables|https://www.probabilitycourse.com/chapter7/7_2_0_convergence_of_random_variables.php]]
----
! 確率変数の数列 (Sequence of Random Variables)
確率変数の数列 $$X_n$$ を考える場合、$$X_n: S \to R$$ となるような 標本空間 $$S$$ を考えるみたい。
https://people.math.wisc.edu/~seppalai/notes-for-courses/prob-basics.pdf
----
! 収束の種類
<<<
There are four types of convergence that we will discuss in this section:
# Convergence in distribution
# Convergence in probability
# Convergence in mean,
# Almost sure convergence.
<<<
https://www.probabilitycourse.com/chapter7/7_2_3_different_types_of_convergence_for_sequences_of_random_variables.php
- - - -
確率変数 $$X$$ の累積分布関数 $$F_X(x)$$ と表すこととし、$$X_1, X_2, X_3, \ \dots$$ をある確率空間上の確率変数とする。
!! 分布収束 (Convergence in Distribution)
確率変数の列 $$X_1, X_2, X_3, \ \dots$$ について、
: $$\displaystyle \lim_{n \to \infty} F_{X_n} (x) = F_{X} (x) \ \ \ \mathrm{for \ all \ x}$$
であることを、分布収束といい $$X_n \xrightarrow{d} X$$ と表す。
; 例:
n回サイコロを投げた時の平均値を $$X_n$$ とした場合、平均 3.5, 分散 〇〇 の正規分布に収束する
- - -
!! 確率収束 (Convergence in probability)
: $$\displaystyle \lim_{n \to \infty} P \left( \{ s \in S : |X_n(s) - X(s) | \geq \epsilon \} \right) = 0 \ , \ \mathrm{for \ all \ \epsilon}$$
$$X_n , \ X$$ は標本空間の関数なので、標本空間の値に関わらず 0 に収束する。
- - -
: $$\displaystyle \lim_{n \to \infty} E[f(X_n)] = E[f(X)]$$
!! 概収束 (Almost Sure Convergence)
: $$\displaystyle P \left( \{ s \in S : \lim_{n \to \infty} X_n(s) = X(s) \} \right) = 0$$
$$X_n$$ がXに近づいていかない点が可算無限個しかないときはほとんど確実に収束しているといえます。
* 確率変数の収束の確率を論じているか(概収束)、確率の収束を論じているか(確率収束)
----
* [[数列の極限]]
! 定義
X を確率変数、c を定数としたときに、c に関するn次モーメント (n-th order moment) は次で定義される。
: $$\displaystyle \mu_n = E[ (X - c)^n ]$$
上式の E[] は [[期待値|基本的な統計量]] を意味する。
; X が連続変数の場合
: $$\displaystyle \mu_n = \int_{-\infty}^{\infty} (x - c)^n p(x) dx$$
; X が離散的な場合
: $$\displaystyle \mu_n = \sum_i^{\infty} (x_i - \alpha)^n Pr(X = x_i) dx$$
特に c = 0 の場合に、モーメントは m,,n,, と記される。
: $$\displaystyle m_n = E( X^n )$$
- - - - - - - - - -
<<<
統計学におけるモーメントは物理学におけるモーメントの類推である.物理学におけるモーメントが長さと力の積であるのに対し,統計学のモーメントは標本と確率の積で与えられる.
<<<
[[モーメント - データ科学便覧|https://data-science.gr.jp/theory/tbs_moment.html]]
https://staff.aist.go.jp/t.ihara/moment.html
----
! モーメントを用いた表現
一部の統計量は、モーメントを用いて表すことができる。
平均 (期待値): $$\mu = m_1$$
分散: $$\sigma^2 = m_2 - {m_1}^2$$
----
https://www.youtube.com/watch?v=4gfX0xCkLVI
! [[モーメント母関数]]
:$$M_X(t) := E[e^{tX}] \ , \ \ t \in R $$
http://racco.mikeneko.jp/Kougi/10a/IS/IS03pr.pdf
! 確率変数 (Random variable)
普通に確率を扱う場合、標本空間 $$\Omega$$ から実数への写像 X のことを、''確率変数'' という。
: $$X: \Omega \to \mathbb{R}$$
標本空間が [[可算の場合|離散型確率変数]] と [[不可算の場合|連続型確率変数]] で、確率変数の取り扱い方に違いがある。
厳密な定義はよくわからない。[[可測空間|試行]] $$ (\Omega, E)$$ から $$ (\mathbb{R}, \mathcal{B})$$ への写像 X ?
: $$X: (\Omega, E) \to (\mathbb{R}, \mathcal{B})$$
https://www.bauer.uh.edu/rsusmel/phd/sR-0.pdf
また、X の像が取りうる値の集合を ''Range'' という。例えば、X がサイコロを振った時の出た目の数字(を返す写像)であれば、
: $$\mathrm{Range}(X) = R_X = \{ 1, 2, 3, 4, 5, 6\}$$
といった感じになる。
- - - - - - - - - -
; 標本空間 (Sample space)
The set of all possible.
; 可測空間 (Measurable space)
この文脈においては、Ω と Ω の部分集合からなるσ加法族 ($$\mathcal{F}$$) のタプル。
:$$(\Omega, \mathcal{F})$$
----
! [[離散型確率変数]] の場合
標本空間と離散型確率変数をそれぞれ ''S'', ''X'' とし、$$x_k$$ という値を確率変数 X が返す事象を次のように表すことにする。
:$$ \{ X = x_k\} = \{ s \in S | X(s) = x_k \} $$
||定義 |h
|''確率質量関数'' |$$P_X(x_k) = P(X = x_k), \ \mathrm{for} \ k = 1, 2, 3, \dots$$ |
|''累積分布関数'' |$$F_X(x_k) = P(X \leq x), \ \mathrm{for \ all} \ x \in \mathbb{R}$$ |
|[[LOTUS]] |$$\displaystyle E(g(X)) = \sum_{x_k \in R_x} g(x_k) P_X (x_k)$$ |
|[[期待値]] |$$\displaystyle E[X] = \sum_{x_k \in R_x} x_k P_X(x_k) $$ |
|[[分散]] |$$\displaystyle \mathrm{Var}[X] = E[(X - E[X])^2] = \sum_{x_k \in R_x} (x_k - E[X])^2 P_X(x_k)$$ |
; 補足 :
分散の式は次のように変形することができる。
:$$\displaystyle \mathrm{Var}[X] = E[X^2] - E[X]^2 $$
- - - -
!! 独立確率変数
二つの独立変数 X, Y が次の条件を満たすとき、「''X と Y は独立である''」 という。
:$$P(X = x, Y = y) = P(X = x) P(Y = y) $$
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
! [[連続型確率変数]] の場合
確率変数が連続の場合は、総和ではなく積分を用いる。
連続型確率変数の場合は、確率質量関数は使わず ''確率密度関数 (Probability Density Function)''
: $$\displaystyle f_X(x) = \lim_{\Delta \to 0} \dfrac{P(x \leq X \leq x+\Delta)}{\Delta} $$
を用いる。なお、この関数は累積分布関数の導関数になっている。
: $$\displaystyle f_X(x) = \lim_{\Delta \to 0} \dfrac{F_X(x+\Delta) - F_X(x)}{\Delta} = {F_X}'(x)$$
|[[期待値]] |$$\displaystyle E[X] = \int_{-\infty}^{\infty} x f_X(x) dx$$ |
|''分散'' | |
----
----
! 確率変数の収束 (Convergence of Random Variables)
確率変数の収束にはいくつかの種類がある。
#
リストで上にある方の収束は、下の収束の条件を満たしている。
----
* https://www.probabilitycourse.com/chapter7/7_2_2_sequence_of_random_variables.php
https://en.wikipedia.org/wiki/Random_variable
* https://m-hiyama.hatenablog.com/entry/20150526/1432617967
-
$$S \in E$$
:$$\mathcal{P}(X \in S) = \mathcal{P}( \{ \omega \in \Omega | X(\omega) \in S \})$$
; 独立確率変数
; Law of the unconscious statistician
! 大まかな定義
(連続型) ''確率変数'' X が、区間 [a, b] 内の値をとる確率を $$\Pr(a \leq X \leq b)$$ と表すこととする。
$$\Pr(a \leq X \leq b)$$ が、ある関数 f(x) の [a, b] での定積分で表わされるとき、「関数 $$f(x)$$ を X の分布の ''確率密度関数 (Probability Density Function)'' という」。
:$$\displaystyle \Pr(a \leq X \leq b) = \int_a^b f(x) dx$$
この場合、Pr の引数はXの範囲になっている。
---
! 確率密度関数の性質
確率なので、全て足し合わせると1になる。
:$$\displaystyle \int_{-\infty}^{\infty} f(x) dx = 1 $$
!! 期待値 (平均値)
Xの期待値は(値が存在する場合は)下記の様に求められる。
:$$\displaystyle E(X) = \int_{-\infty}^{\infty} x f(x) dx$$
なお、確率密度関数では、期待値 と 平均値は同じものを表すことになる。
:$$\mu = E(X)$$
!! 分散
:$$\displaystyle \sigma^2 = V(X) = \int_{-\infty}^{\infty} (x - \mu)^2 f(x) dx $$
---
! 累積分布関数 (Cumulative distribution function)
「確率変数がある値以下となる確率」を表す関数のことを ''累積分布関数 (Cumulative distribution function)'' といい、次のように定義される。
:$$\displaystyle F(x) = \int_{\infty}^x f(u) du$$
定義から明らかなように、累積分布関数の導関数は、確率密度関数になる。
:$$\dfrac{d}{dx} F(x) = f(x)$$
- - - - - - - - - - -
!! 分位数 (quantile)
実数 q ∈ [0, 1] に対し、''q 分位数 (q-quantile)'' は、分布を q : 1 − q に分割する値である。
例えば、median の値は、 0.5 quantile となる。
* [[StatQuest: Quantiles and Percentiles, Clearly Explained!!! - YouTube|https://www.youtube.com/watch?v=IFKQLDmRK0Y]]
!! パーセンタイル (percentile)
q / 100 分位数を、''q パーセンタイル'' という。
<<<
パーセンタイルとは、一定パーセントの観察結果がそれ未満の値になる変数の値です。たとえば、95 パーセンタイルでは、95 パーセントの観察結果がこの値(またはスコア)未満になります。
<<<
https://techdocs.broadcom.com/content/broadcom/techdocs/jp/ja/ca-enterprise-software/it-operations-management/performance-management/3-5/424291969/424291979/424291984.html
----
! Q-Q プロット
ざっくり言うと、横軸に (順序統計量と仮定した累積分布関数を基に計算した) 理論上の値、縦軸に測定値をプロットしたもの。
!! 正規 Q-Q プロット
観測値が正規分布に従うと仮定した場合の Q-Q プロット。
各軸の値には、次のものを使用する。
* 横軸: 標準正規分布に変換した理論上の値
* 縦軸: 観測値
理論上の quantile。
$$
$$
* https://www.youtube.com/watch?v=X9_ISJ0YpGw
<<tag "確率論">>
; 参考サイト
* [[Probability, Statistics and Random Processes - Free Textbook|https://www.probabilitycourse.com/]]
* [[Chapter 1 – Random Variables|https://www.bauer.uh.edu/rsusmel/phd/sR-0.pdf]]
* [[確率論_Chapter1_確率(1.1-1.2)|https://www.youtube.com/watch?v=eiVrWChM1eo&list=PLlNAOVqfWaDmk8ntUZgLCkPa8bRQBupmf]]
* [[初心者のための測度論的確率論|https://qiita.com/sasakinzm/items/429a9fc629aa04880a02]]
----
! 1. [[試行]] (Experiment)
''結果''を返す手続き。
||説明 |h
|''結果'' (Outcome) |試行の結果。事前に予測できない。 |
|''標本空間'' (Sample space) |結果全体の普遍集合 (Universal set)。空集合も含む。 |
|''事象'' (Event) |発生しうる結果を含む集合。標本空間の部分集合になる。|
|''事象空間'' (Event space) |標本空間の部分集合からなる[[完全加法族|加法族]] |
----
! 2. [[確率空間]] (Probability space)
[[可測空間|測度]] $$(\Omega, E)$$ に確率測度を入れた [[測度空間|測度]] $$(\Omega, E, P)$$ を、''確率空間''という。
* $$\Omega : $$ 標本空間
* $$E : $$ Event space ($$\Omega$$ の部分集合からなる完全加法族)
* $$P : $$ 確率測度($$E$$ から実数への非負関数)
- - - - - - - - - - - - - - - - - - - -
!! 2.1 [[確率測度|確率空間]] (Probability Measure)
$$E$$ を 事象空間 (集合X の部分集合からなる [[完全加法族|加法族]]) とし、$$A, B, A_n \in E$$ とした時に、次のような条件を満たす写像 $$P: E \to \mathbb{R}$$ のことを''確率測度'' という。
# $$P(\emptyset) = 0 \ \ \ \ \ \ $$ (空集合の測度は 0)
# $$\displaystyle A_j \cap A_k = \emptyset \ \ [j \neq k] \implies P(\bigcup_{n=1}^{\infty} A_n) = \sum_{n=1}^{\infty} P(A_n) \ \ \ \ \ \ $$ (互いに素な場合にのみ成り立つ点に注意)
# $$P(\Omega) = 1 \ \ \ \ \ \ $$ (標本空間の確率測度の像は1)
!! 2.2 [[条件付き確率]]
事象Bが起こるという条件のもとで事象Aが起こる確率を ''BにおけるAの条件付き確率'' といい、これは次のように定義される。
:$$P(A|B) = \dfrac{P(A \cap B)}{P(B)}$$
!!! 重要な性質・定理
* $$A \cap B = \emptyset \implies P(A|B) = 0$$
* :$$A_1, A_2, \dots$$ が互いに素 $$\implies P(A_1 \cup A_2 \cup \dots|B) = P(A_1|B) + P(A_2|B) + \dots$$
!! 2.3 [[事象の独立|独立]]
BにおけるAの条件付き確率がAの確率に一致するとき、「''AとB は独立である''」という。
* $$P(A|B) = P(A)$$
* $$P(A\cap B)=P(A)P(B)$$
----
! 3. [[確率変数]] (Random variable)
[[標本空間|試行]] Ω から 実数への写像 X を、''確率変数'' という。
: $$X: \Omega \to \mathbb{R}$$
X の像が取りうる値の集合を ''Range'' (R,,X,,) といい、
確率変数(の像) の値がある値 (x) より小さい時の確率を返す関数を ''累積分布関数'' という。
:$$F_X(x) = P(X \leq x)$$
- - - - - - - - - - - - - - - - - - - -
標本空間が可算の場合と不可算の場合で、確率変数の取り扱い方に違いがある。
!! 3.1 [[離散型確率変数]] (可算)
・ 確率質量関数: $$P_X(x_k) = P(X = x_k), \ \mathrm{for} \ k = 1, 2, 3, \dots$$
・ [[期待値]]: $$\displaystyle E[X] = \sum_{x_k \in R_x} x_k P_X(x_k) $$
・ [[LOTUS]]: $$\displaystyle E[g(X)] = \sum_{x_k \in R_x} g(x_k) P_X (x_k)$$
・ [[分散]]: $$\displaystyle \mathrm{Var}[X] = E[(X - E[X])^2] = E[X^2] - E[X]^2$$
!! 3.2 [[連続型確率変数]] (不可算)
・ 累積分布関数: $$\displaystyle f_X(x) = \lim_{\Delta \to 0} \dfrac{F_X(x+\Delta) - F_X(x)}{\Delta} = {F_X}'(x)$$
・ [[期待値]]: $$\displaystyle E[X] = \int_{-\infty}^{\infty} x f_X(x) dx$$
!! 3.3 [[チェビシェフの不等式]]
[[大数の弱法則|大数の法則]] の証明で使う。
:$$P(|X - E[X]| \geq b) \leq \dfrac{\mathrm{Var}[X]}{b^2} \ \ \ \ \mathrm{for \ any} \ b > 0$$
----
! 4. [[同時確率分布]] (Joint Probability Distribution)
複数の確率変数を同時に考えたい場合には、同時確率質量関数・同時確率密度関数を用いる。
; 同時確率質量関数(離散型確率変数の場合):
$$\ \ \ \ \ P_{X_1, X_2, \cdots , X_n}(x_1, x_2, \cdots , x_n) = P(X _1 = x_1, X_2 = x_2, \cdots , X_n = x_n)$$
; 同時確率密度関数(連続型確率変数の場合):
$$\ \ \ \ \ \displaystyle P((X_1, X_2, \cdots , X_n) \in A) = \int \cdots \int_{A} f_{X_1, X_2, \cdots , X_n} (x_1, x_2, \cdots , x_n) \ dx_1 dx_2 \cdots dx_n$$
- - - - - - - - - - - - - - - - - - - -
!! 4.1 [[独立同分布|同時確率分布]] (Independent and Identically Distributed)
!!! ''確率変数の[[独立]] (Independence)''
:$$F_{X_1, X_2, \cdots , X_n} (x_1, x_2, \cdots , x_n) = F_{X_1}(x_1) F_{X_2}(x_2) \cdots F_{X_n}(x_n) $$
!!! ''同一分布に従う (identically distributed)''
異なる確率変数が同じ 確率質量関数/密度関数 を持つ場合、同一分布に従うという。
:$$\displaystyle P[x\geq X_1]=P[x\geq X_2] = \dots = P[x\geq X_n] ,\,\ \forall x\in \mathbb {I} $$
!! 4.2 [[期待値]]・[[分散]]
* $$E[aX+Y+b] = aE[X] + E[Y] + b$$
* $$\mathrm{Var}[X+Y] = \mathrm{Var}[X] + \mathrm{Var}[Y]$$
!! 4.3 共分散 (Covariance)
: $$Cov(X,Y) = E[ \ (X - E[X]) (Y - E[Y]) \ ] = E[XY] - E[X] E[Y]$$
----
! 5. [[大数の法則]] (Law of Large Numbers)
!! 5.1 大数の弱法則
$$X_1, X_2, \dots , X_n$$ を [[IIDな確率変数|同時確率分布]] とし、$$\mu = E[X_i] \ ( = E[\bar{X}])$$ とすると、次が成り立つ。
: $$\displaystyle \lim_{n \to \infty} P( |\bar{X} - \mu| \geq \epsilon ) = 0 \ \ \ \ (\forall \epsilon > 0)$$
!! 5.2 大数の強法則
----
! 6. [[中心極限定理]] (Central Limit Theorem)
$$\mu = E[X_i], \ \ \sigma^2 = \mathrm{Var}[X_i] , \ \bar{X} = \dfrac{X_1 + X_2 + \dots + X_n}{n} $$ とした時、
$$S_n = \dfrac{\bar{X} - E[\bar{X}]}{ (\mathrm{Var}[\bar{X}])^{0.5} } $$ は、 $$n \to \infty$$ において標準正規分布に収束する。
! 角速度
物体がある軸のまわりを回転する速さの程度を表わす量。
* 単位は ''rad/sec''
* 物体が回転運動する平面に対して時計回りか反時計回りかいずれか一つの方向を正とし、他方を負とするように定義される
* 物体の回転する速度 (v) は、角速度 (ω) と 半径 (r) の積になる
** v = rω
!! 感覚的に分かりやすい説明
<<<
物体がある直線のまわりを回転する速さの程度を表わす量。この直線を''回転軸''という。回転軸に垂直な直線が物体とともに,時間 Δt の間に角 Δθ だけ回転するとき, $$\bar{\omega} = \Delta \theta / \Delta t$$ を平均角速度といい,Δt がゼロに近づくときの の極限値を瞬間角速度または単に角速度といい,ω で表わす。
$$\displaystyle \omega = \lim_{\Delta t \to 0} \dfrac{\Delta \theta}{\Delta t} = \dfrac{d\theta}{dt}$$
<<<
[[角速度(かくそくど)とは - コトバンク|https://kotobank.jp/word/%E8%A7%92%E9%80%9F%E5%BA%A6-43706]]
!! 速度との関係
角度 θ, 半径 r の扇形の弧の長さ L は、L = r θ であるので、速度と角速度の間には、次の関係が成り立つ。
: $$v = \dfrac{dL}{dt} = \dfrac{d(r\theta)}{dt} = r \omega $$
----
! 角速度ベクトル
ある空間の中での回転を考える場合には、軸の情報が必要となる。そのため、角速度はベクトルを用いて表現されることが多い。回転軸を表す単位ベクトルを ''n'' とした時、剛体の角速度ベクトル ''ω'' は以下のように示される。
$$\displaystyle \boldsymbol{\omega} = \lim_{\Delta t \to 0} \dfrac{\Delta \theta}{\Delta t} \mathbf{n} = \dfrac{d\theta}{dt} \mathbf{n}$$
http://www.rm.mce.uec.ac.jp/lecture/mech/KaitenVec.pdf
単位ベクトル ''n'' は二通りの取り方ができるが、反時計回りを正となるな取り方を ''右手系''、時計回りを正となるな取り方を ''左手系'' という。
! [[外積]]を用いた表現
質点の位置ベクトルを r、速度ベクトルを v とし、r と v のなす角を α とする。
θ が十分小さい時には、(弧の部分を直線とみなせるので)
$$|r| \dfrac{d\theta}{dt} = |v| \sin{\alpha}$$
という関係が成り立つので、
$$\dfrac{d\theta}{dt} = \dfrac{1}{|r|^2} |r| |v| \sin{\alpha} = \dfrac{1}{|r|^2} |r \times v|$$
と表すことができる。
回転軸と回転の平面は直交するので、角速度ベクトルは、
$$\displaystyle \boldsymbol{\omega} = \dfrac{d\theta}{dt} \mathbf{n} = \dfrac{1}{|r|^2} r \times v$$
外積を用いて表すことができる。
----
---
質点の位置ベクトルを r、速度ベクトルを v とするとき、質点の原点まわりの角速度 ω は、
$$\displaystyle \boldsymbol{\omega} = \dfrac{1}{|r|^2} r \times v$$
となる。
---
r と v のなす角を α とすると、θ が十分小さい時、
$$|r| \theta = \dfrac{|v| \sin{\alpha}}{|r|}$$
$$\theta \approx \sin \theta$$
! 活量の定義
<<<
活量は,凝縮相が気相と平衡しているとき,注目する物質の蒸気圧を基準の蒸気圧で割った値,と定義されている。すなわち,
$$a_i = P_i / P^0_i \ \ \cdots\cdots\cdots$$ (2-11)
ここで, a: 活量, i: 注目している物質名, $$P_i$$: 凝縮相と平衡しているときの蒸気圧, $$P^0_i$$: 基準の蒸気圧である。$$P_i$$ は測定することができるので $$P^0_i$$ を特定な値に決めれば, $$a_i$$ は具体的に決まる。
$$P^0_i$$ の決め方は3種類あり,初めて学ぶ人にとっては面倒なことである。
...
''1) ラウール基準の活量''
(2-11) 式の $$P^0_i$$ に $$N_i=1$$ のときに示す蒸気圧 $$P_{i(p)}$$ を使用したときの $$a_i$$ である。図中の $$a_i(R)$$ 軸がこの活量に対する目盛である。ラウール基準の活量と濃度の関係を表示するときに使う濃度は,モル分率とすると,便利である。なお,単に活量といっているときには,''多くの書物ではこのラウール基準の活量をさしている''。
2) モル分率を用いたヘンリー基準の活量
ヘンリーの法則の外挿線が$$N_i=1$$ に交差するところの見かけの蒸気圧 $$P_{i(a)}$$ を (2-11) 式の $$P^0_i$$ に使用するときの $$a_i$$ である 。
...
3) 質量パーセントを用いたヘンリー基準の活量
ヘンリーの法則を示す直線が[%i]=1のときに示す分圧Pi(b)(多くの場合実際の圧力とは異なったものとなっている)を(2-11)式のP0iに使用するときのaiである。
<<<
[[材料製造プロセスのための反応速度論入門(I)|https://www.jstage.jst.go.jp/article/tetsutohagane1955/81/3/81_3_N84/_pdf]] より引用
(''強調表現'' は追加している)
---
以下は、「''ラウール基準の活量''」についての話。
! 活量の概要 (Activity)
理想気体・理想溶液の混合による化学ポテンシャルの変化は、
$$\mu_i - \mu^0_i (P,T) = RT \ln x_i $$
と表せる (この関係は [[理想気体の混合エントロピー]] から導出される)。
しかしながら、実在溶液では、この関係が厳密に成立することはなくずれが生じる。そこで、理想溶液からのずれを補正する ''活量係数'' (γ) を導入し、実在溶液の化学ポテンシャルも(見かけ上は)理想溶液と同様に扱えるようにする。
$$\mu_i - \mu^0_i (P,T) = RT \ln (\gamma_i x_i) = RT \ln a_i$$
そして、「活量係数 と モル分率 の積」 を ''活量'' (a) と呼ぶこととする。
! 活量係数 と Excess Chemical Potential
活量係数は、実在気体と理想気体の間の混合自由エネルギー(混合エントロピー) のずれを補正し、実在気体を理想気体のように扱えるようにするためのパラメータであり、次のように定義される。
$$\gamma_i := \dfrac{f^{real}_i}{x_i f^{L,pure}_i} = \dfrac{f^{real}_i}{f^{id}_i} $$
この定義から、''Excess Chemical Potential'' は次のように表せる。
$$\mu^E_i = \mu^{real}_i - \mu^{id}_i = RT \ln \left( \dfrac{f^{real}_i}{f^{id}_i} \right) = RT \ln(\gamma_i) $$
さらに、混合前の 成分 i の化学ポテンシャルを $$\mu^{pure}_i (p,T)$$ とすると、溶液中の成分 i の化学ポテンシャルは、
$$\mu^{real}_i = \mu^{id}_i + \mu^E_i = \{ \mu^{pure}_i (p,T) + RT \ln x_i \} + RT \ln(\gamma_i) = \mu^{pure}_i (p,T) + RT \ln(x_i \gamma_i)$$
と表せる。
---
! ラウールの法則
活量係数を用いれば、実在溶液でもラウールの法則を利用することが可能になる。
$$y_i p = \gamma_i x_i p_i^{sat}$$
* p: 系の圧力
* $$\gamma_i$$: (成分 i の) 活量係数 (Activity Coefficient)
!! フガシティも考慮した場合
[[フガシティ]] も考慮すると、次のようになる。
$$y_i f^V_{i,pure} = x_i \gamma_i f^L_{i,pure}$$
* $$f^V_{i,pure}$$ 成分 i が単独で気相として存在している時のフガシティ
* $$f^L_{i,pure}$$ 成分 i が単独で液相として存在している時のフガシティ
さらにこれを フガシティ係数 と Poynting Factor ($$F_i$$) を用いて表すと、
$$y_i \phi^V_i p = x_i \gamma_i \phi^{sat}_i p^{sat}_i F_i$$
となる。
* $$\phi^V_i$$: 気相のフガシティ係数
---
! フラッシュ計算
アクティビティモデルを使ったフラッシュ計算の場合は、気相にはフガシティを、液相は活量係数を用いる。そのため、気相と液相での化学ポテンシャルの釣り合いは、
$$\mu^L_i = \mu^V_i$$
$$f^L_i = f^V_i$$
$$y_i \phi^V_i p = x_i \gamma_i f^L_{i,pure}$$
と表すことになる。
この式を変形すると、Ki に関する関係式が得られる。
$$K_i = \dfrac{y_i}{x_i} = \dfrac{\gamma_i f^L_{i,pure}}{\phi^V_i p} $$
ここで、 $$f^L_{i,pure}$$ に関しては、成分 i が単独で存在している場合の話なので、
$$ f^L_{i,pure} = f^V_{i,pure} = \phi^V_{i,pure} p_{sat,i}$$
と変形することができる。そのため、Ki の式は、次のようになる。
$$K_i = \dfrac{\gamma_i \phi^V_{i,pure} p_{sat,i}}{\phi^V_i p} $$
!! 気相を理想気体とした場合
気相のフガシティ係数が 1 ($$\phi^V = \phi^V_{i,pure} = 1$$) になるので、Ki は次のように単純化できる。
$$K_i = \gamma_i \dfrac{p_{sat,i}}{p} $$
!! さらに液相を理想溶液とした場合
活量係数が 1 になるので、
$$K_i = \dfrac{p_{sat,i}}{p} $$
となる。
* ''環''は、 __整数の和と積__ を一般的に拡張した概念。
** 「交換法則は含まない」ことに注意
* ''体''は、 __実数の和と積__ を一般的に拡張した概念。
---
! 環(ring) の定義
集合 $$R$$ 上に、2つの二項演算 「加法 "+" と 乗法 "・"」 を定義し、次の性質を全て満たすとき $$R$$ は環であるという。
!! R1. 加法"+" に関して、Rは [[アーベル群|群]] (可換群)
# 結合法則
# 単位元 (+ に関する単位元を 0 と書く)
# 逆元 (+ に関する逆元を -a と書く)
# 交換法則
!! R2. 乗法"・" は結合法則を満たす
$$ (a \cdot b) \cdot c = a \cdot (b \cdot c) $$
!! R3. 乗法の単位元が存在し、加法の単位元と異なる。
すなわち、 $$\exists e \in R, \forall a \in R, a \cdot e = e \cdot a = a$$
乗法"・" に関する単位元を 1 と書く。
!! R4. 分配法則が成り立つ。
$$\forall a, \forall b, \forall c \in R$$ に対して、以下が成り立つ。
* $$ (a + b) \cdot c = a \cdot c + b \cdot c$$
* $$ a \cdot (b + c) = a \cdot b + a \cdot c$$
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
<<<
ポイントは「R は ・ に関して[[モノイド|群]]である」というところで「群」ではないということです。つまり''積に関しては逆元の存在を仮定しない''のです。整数 3 の逆数 1/3 は整数ではありませんよね?
<<<
[[Swiftで代数学入門 〜 2. 群・環・体の定義 - Qiita|https://qiita.com/taketo1024/items/733e0ecf12da359db729]]
----
! 可換環
乗法"・" で交換法則が成り立つ環を、可換環という。
!! R5. 乗法"・" の交換法則
$$ a \cdot b = b \cdot a $$
----
! 体 (field)
環の定義(R1, R2, R3, R4)に加えて、以下を満たす集合を体という。
!! K1. 乗法において、0以外の元は全て可逆元(逆元を持つ)
----
! 可換体
R1, R2, R3, R4, R5, K1 を満たす集合。
----
[[環・体 - 数学 ++C++; // 未確認飛行 C|http://ufcpp.net/study/math/group/field/]]
$$ K^{-1} = K - \{ 0 \} $$
管内の乱流は、3つの層からなるモデルで考える。
* ''粘性底層'': 管壁近傍の粘性力が支配的な領域。非常に薄い
* 遷移層: 粘性と乱流の影響が同程度に働く領域。粘性底層の外側。
* ''乱流層'': 遷移層より外側の、乱流が支配的な領域。
----
! レイノルズ応力
円管内の流れについて、主流方向を x 、壁から円管の中心に向かう軸を r とすると、
:$$- \rho \overline{v_i' v_j'} = - \rho (\overline{v_x' v_x'} + \overline{v_x' v_r'} + \overline{v_r' v_x'} + \overline{v_r' v_r'})$$
である。
ここで、レイノルズ応力に [[ブシネスク近似|レイノルズ平均ナビエ・ストークス方程式]] を適用すると、
:$$- \rho \overline{v_i' v_j'} = \nu_t \left( \dfrac{\partial \overline{v_i'}}{\partial x_j} + \dfrac{\partial \overline{v_j'}}{\partial x_i} \right) - \dfrac{2}{3} k \delta_{ij}$$
であり、
$$\ \ \ \ \ \ \dfrac{\partial \overline{v_x'}}{\partial x} = \dfrac{\partial \overline{v_r'}}{\partial x} = 0$$
$$\ \ \ \ \ \ \overline{v_r'} = 0 , \ \dfrac{\partial \overline{v_r'}}{\partial r} = 0$$
なので、乱流運動エネルギーの項を無視すると、レイノルズ応力は、
:$$- \rho \overline{v_i' v_j'} = - \rho \overline{v_x' v_r'}$$
と単純化できる (本当は回転方向の速度もあるけど、話を省略した)。
!! 混合長モデル
乱流による運動の混合が (r軸方向に) $$l$$ だけ移動すると完了する、と仮定すると、速度変動は、
:$$v_r' = l \left| \dfrac{\partial \overline{v_x}}{\partial r} \right|, \ v_x' \approx v_r'$$
程度であると考えることができる。これを用いると、レイノルズ応力は、
: $$- \rho \overline{v_x' v_r'} = \rho l ^2\left| \dfrac{\partial \overline{v_x}}{\partial r} \right| \dfrac{\partial \overline{v_x}}{\partial r}$$
と表すことができる。$$l$$ は ''プラントルの混合長'' と呼ばれ、管壁に近い領域では、壁からの距離 (y) に比例する。
:$$l = \kappa y$$
比例定数 κ は ''カルマン定数'' と呼ばれ、実験的に 0.4 程度であることが分かっている。
----
! 壁法則
!! 対数法則
一般的には、[[壁法則]] は壁に比較的近いところでしか成り立たないが、管内の流れの場合にはかなり広範囲で成り立つことが実験的に分かっている (らしい)。
: $$U(y) = \dfrac{u_*}{\kappa} \ln{y} + C$$
!! 速度欠損則
ちょっと荒っぽいが、管の中心での条件を壁法則の式に代入すると、積分定数は
: $$C = U(R) - \dfrac{u_*}{\kappa} \ln{R}$$
となる。管の中心で速度は最大になるので、最大速度を U,,0,, とすると、
: $$\dfrac{U(y)}{u_*} = \dfrac{1}{\kappa} \ln{y} + \dfrac{U_0}{u_*} - \dfrac{1}{\kappa} \ln{R}$$
となる。ここで、カルマン定数に 0.4 を代入して変形すると、
: $$\dfrac{U_0 - U(y)}{u_*} = 2.5 \ln{\dfrac{R}{y}} = 5.75 \log_{10} {\dfrac{R}{y}}$$
となる。U,,0,, は分からないが、実験データを用いて定数を決めると、上式は
:$$\dfrac{U(y)}{u_*} = 5.75 \log_{10} {\dfrac{R}{y}} + 5.5$$
となる。
これは ''速度欠損則'' と呼ばれる。
!! 平均流速
体積流量は、速度の積分で表せる。
:$$\displaystyle Q = \int_0^R 2 \pi y \cdot U(y) dy = \int_0^R 2 \pi y \left[ 5.5 + 5.75 u_* \log_{10} {\dfrac{y}{R}} \right] dy$$
ややこしいが、この積分を計算して式を整理すると、平均流速 (v) について、
:$$v = u_* \left( 1.75 + 5.75 \log_{10} {\dfrac{u_* R}{\nu}} \right) \ \ \ \ \ $$ 【式1】
という式が得られる ([[計算の詳細|https://sites.google.com/view/senmitsu/%E6%B0%B4%E5%B7%A5%E7%B3%BB/5-2-%E4%B9%B1%E6%B5%81%E3%81%AE%E6%B5%81%E9%80%9F%E5%88%86%E5%B8%83]]) 。
!! 管摩擦係数
:$$\tau_w = - \dfrac{D}{4} \dfrac{dP}{dL} = \dfrac{1}{8} f_D \rho v^2$$
この関係を用いると、摩擦速度は
:$$u_* = \sqrt{\tau_w / \rho} = v \sqrt{\dfrac{f_D }{8}}$$
となり、これを【式1】に代入すると、
:$$\dfrac{1}{\sqrt{f_D}} = 2.035 \log {(Re \sqrt{f_D})} - 0.91$$
となるが、実験データとの比較から係数を補正した式が用いられる。
:$$\dfrac{1}{\sqrt{f_D}} = 2.0 \log {(Re \sqrt{f_D})} - 0.8$$
----
(粘性底層・遷移層は非常に薄いので) 壁せん断応力は
乱流でも圧力勾配とせん断応力の釣り合いの式は成り立つ。
* http://web.iaa.ncku.edu.tw/~aeromems/BL/Ch6.pdf
<<list-links filter:[tag[管内の流れ]] >>
----
! 二相流
ここでは気相二相流を例にして書く。
!! 見かけ速度 (Superficial velocity)
ある相の体積流量を流路面積で割ったもの。
$$\ \ \ \ v_{S,G} = Q_{G} \ / \ A $$
$$\ \ \ \ v_{S,L} = Q_{L} \ / \ A $$
$$\ \ \ \ v = (Q_{G} + Q_{L}) \ / \ A = v_{S,G} + v_{S,L}$$
!! [[ボイド率・Holdup]]
気液二相流を瞬間的に固定したときの気相・液相の体積割合。
$$\ \ \ \ \alpha = \dfrac{V_G}{V} = \dfrac{A_G}{A} = \dfrac{v_{S,G}}{v_G}$$
$$\ \ \ \ H_L = \dfrac{V_L}{V} = \dfrac{A_L}{A} = \dfrac{v_{S,L}}{v_L}$$
これらの値が分かると、体積流量から各相の実速度が計算できる。
$$\ \ \ \ v_{G} = \dfrac{Q_G}{\alpha \cdot A} \ , \ \ v_{L} = \dfrac{Q_L}{H_L \cdot A}$$
!! スリップ速度
気液の速度差
$$v_{slip} = v_G - v_L$$
作りかけ
{{{
use strict;
use warnings;
use Socket;
### クライアント
# 1. ソケットの作成
my $sock;
socket( $sock, PF_INET, SOCK_STREAM, getprotobyname('tcp' ) )
or die "Cannot create socket: $!";
# 2. ソケット情報の作成
# 接続先のホスト名
my $remote_host = 'localhost';
my $packed_remote_host = inet_aton( $remote_host )
or die "Cannot pack $remote_host: $!";
# 接続先のポート番号
my $remote_port = 7;
# ホスト名とポート番号をパック
my $sock_addr = sockaddr_in( $remote_port, $packed_remote_host )
or die "Cannot pack $remote_host:$remote_port: $!";
# 3. ソケットを使って接続
connect( $sock, $sock_addr )
or die "Cannot connect $remote_host:$remote_port: $!";
# 4. データの書き込み
# 書き込みバッファリングをしない。
my $old_handle = select $sock;
$| = 1;
select $old_handle;
my $char = pack("H*", "0102030405060780FFFFFFFFFFFFFFFFFFFFFFFFFFF");
print $sock $char;
#print $sock "Hello World!";
shutdown $sock, 1; # 書き込みを終了する。
# 5. データの読み込み
while( my $line = <$sock> ){
print $line;
}
# 6. ソケットを閉じる
close $sock;
__END__
}}}
基本的には、この資料を参考にしている。
* http://www.cs.tsukuba.ac.jp/~kam/lecture/discrete2015/text/4.pdf
* http://www.math.aoyama.ac.jp/~masuda/algebra/lec-alg.pdf
---
! 関係 (relation)
$$A_1, A_2, \cdots A_n$$ を集合とするとき、$$A_1 \times A_2 \cdots \times A_n$$ の部分集合 $$(R)$$ を $$A_1, A_2, \cdots A_n$$ 上の n項関係 という。
: $$R \subset A_1 \times A_2 \cdots \times A_n$$
また、$$A_1 = A_2 = \cdots A_n$$ のとき,単に「$$A_1$$ 上の n 項関係」という。
---
! 二項関係
上記の関係において、$$n = 2, \ A_1 = A_2$$ の場合を、 $$A_1$$ 上の''二項関係''という。
! 二項関係の性質
$$a, b, c \in A$$ とする。
!! 反射律
:$$a R a \ \ (\forall a)$$
!! 対称律
:$$a R b \Rightarrow b R a \ \ (\forall a, \forall b)$$
!! 推移律
:$$a R b \land b R c \Rightarrow a R c \ \ (\forall a, \forall b, \forall c)$$
!! 反対称律
:$$a R b \land a R b \Rightarrow a = b \ \ (\forall a, \forall b)$$
| |反射律|対称律|推移律|反対称律|h
| = | 〇 | 〇 | 〇 | 〇 |
| ≤ | 〇 | × | 〇 | 〇 |
| < | × | × | 〇 | 〇 |
| ≠ | × | 〇 | × | × |
---
! 同値関係
「反射律、対称律、推移律」を満たす二項関係を、''同値関係'' という。式中では $$\sim$$ と表されることも多い。
雑に言うと、「等しい」という概念を一般化したもの。
! 同値類
$$R$$ を集合 $$A$$ 上の同値関係とする。$$x \in A$$ なる x に対して,$$x$$ の ''同値類'' とは,以下の集合のことである.
:$$C(x) = \{ a \in A | \ a \sim x\}$$
表記の話であるが、以下のような書き方をする場合もある (っぽい)。
:$$[x] = \{ a \ | \ a \in A \land x R a \}$$
そして、同値類 $$C(x)$$ に属する元のひとつを $$C(x)$$ の ''代表元'' という。
同値関係 $$R$$ を「等しい」という概念と見なしたとき,$$R$$ に関する同値類は $$x$$ と等しい要素を全て集めた集合である。
; 具体例:
<<<
〜という同値関係を、
:$$a \sim b \Rightarrow$$ $$a$$ と $$b$$ は3で割ったときの余りが等しい
と、定義しましょう。この関係演算子には、$$1 \sim 4$$ や $$5 \sim 8$$ などが成立します。
それでは、自然数 N の集合を考えましょう。
この集合の中で、$$1 \sim 4$$ となるようなには、何があるでしょうか?
例えば、$$\{ 1,4,7,10, \cdots \}$$ が考えられます。
なぜなら、これらの数は、みんな3で割った余りが1となりますので、〜に関して同値関係となります。
このように、1と同値関係が成り立つ元を全て集めた集合のことを、1の〜に関する同値類と言います。または、1の ''同値類'' とも言います。
<<<
http://proofcafe.org/k27c8/math/math/relation/page/equivalent_class/
! 同値類別
同値類は、「異なる同値類は共通な元を持たない」という性質を持つ。
: $$C(a_1) \neq C(a_2) \ \Rightarrow \ C(a_1) \cap C(a_2) = \emptyset $$
これは、対偶 $$(C(a_1) \cap C(a_2) \neq \emptyset \ \Rightarrow \ C(a_1) = C(a_2))$$ を考えると分かりやすい。
: $$C(a_1) \cap C(a_2) \neq \emptyset \ $$ であれば $$\ a_1 = a_2$$ となる $$A$$ の元が存在するので $$C(a_1) = C(a_2)$$
この性質を用いると、 集合 $$A$$ を [[分割|集合の操作]] (共通部分のない和集合として表す) できる。
:$$A =\coprod C(a_i)$$
そして、これを $$A$$ の ∼ による''同値類別''という。
! 商集合
集合 $$A$$ 上の同値関係 $$R$$ に対して,商集合 $$A/R$$ は,同値類 $$C(x)$$ をすべて集めた集合である。
:$$A/R =\{ C(x) \ | \ x \in A \}$$
!! 具体例 :
$$A$$ を自然数、同値関係 $$R$$ を「3で割ったときの余りが等しい」とすると、 $$A/R$$ は次の3つの集合を含む集合になる。
* 余り 0 : {3, 6, 9, ...}
* 余り 1 : {1, 4, 7, ...}
* 余り 2 : {2, 5, 8, ...}
$$A$$ をある高校の学生、$$R$$ を「学年が等しい」とすると、$$A/R$$ は次の3つの集合を含む集合になる。
* 1年生
* 2年生
* 3年生
---
! 順序
集合 A 上の二項関係で,反射的かつ推移的かつ反対称的であるものを,A 上の順序 (order) という.なお,後で定義する全順序と区別するため,一般の順序のことを特に半順序 (partial order) ということがある
! 閉包 (closure)
閉包というのは,「何らかの性質に関して閉じたもの」という意味である.p を関係に関する性
質とする. 関係 R の p に関する閉包とは,R を含み, p の性質を満たす最小の関係のことである.
(ただし,p によっては,そのような最小の関係が存在しないこともある.)
---
---
!! 定義
集合 $$A$$ 上の二項関係 $$R$$ は、次のような集合を意味する ($$T$$は真であることを示す記号)。
:$$R := \{ (x,y) \in A \times A | R(x,y) = T \} $$
https://mathrelish.com/mathematics/equivalence-relation
! 連続の定義
$$A$$ を定義域とする実数値関数を $$f$$ とする。 $$a \in A$$ において、
$$\displaystyle \lim_{x \to a} f(x) = f(a)$$
が成り立つとき、「''関数 $$f$$ は 点 $$a$$ で連続である''」という。
また、$$A$$ のすべての点で連続であるとき、「''$$A$$ で連絡な関数''」という。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!「ε-δ論法」を使った連続の定義
!!ある点での連続 : 「$$f(x)$$ は $$x = a$$ で連続である」
$$\forall \epsilon > 0 \ \exists \delta> 0 \ \forall x \ |x -a| < \delta \Rightarrow |f(x) - f(a)| < \epsilon $$
```
もう少し日本語っぽく書き下すとこうです:
「どんな ε > 0 に対しても、 δ > 0 を上手く取れば、a との距離が δ 未満のどんな x も、f(a) との距離が ε 未満の f(x) に移るようにできる」
```
[[ε と δ 〜 無限小の代理人 - 31歳からの数学修士人|http://taketo1024.hateblo.jp/entry/epsilon-delta]]
!!ある定義域での連続 : 「$$f(x)$$ は 定義域 $$A$$ で連続である」
$$\forall a \in A \ \forall \epsilon > 0 \ \exists \delta> 0 \ \forall x \in A \ |x -a| < \delta \Rightarrow |f(x) - f(a)| < \epsilon $$
----
! 一様連続の定義
$$\forall \epsilon, \ \exists \delta > 0 \ \forall x, x' \in A \ |x - x'| < \delta \Rightarrow |f(x) - f(x')| < \epsilon $$
```
「どんな小さな ε>0 に対しても、δ>0 をうまく取れば、定義域内のどんな x,x′ に対してもその距離が δ 未満であれば、 f(x) と f(x′) の差は ε より小さくできる 」
```
[[一様連続と一様収束 〜 木を見て森も見る - 31歳からの数学修士|http://taketo1024.hateblo.jp/entry/uniform]]
- - - - -
```
定義域が有界閉区間であれば、その区間上連続な関数は一様連続である事が知られている(ハイネ・カントールの定理)。
```
https://www.cck.dendai.ac.jp/math/support/ch5-supp/%E5%9F%BA%E5%BA%95%E3%81%AE%E5%A4%89%E6%8F%9B.pdf
http://www.math.s.chiba-u.ac.jp/~yasuda/Chiba/Lec/LA2014b-3.pdf
いまいち簡潔ではないが、、 次のような写像のこと。
共通の体 F 上の二つのベクトル空間 V, W に対して、「''V, W の基底の直積を取る''」ことにより、新しいベクトル空間を生み出す操作。なお、 V, W は、同じ空間 (V = W)でもよい。
ポイントとなるのは、
* テンソル積がベクトル空間を返す
* テンソル積は多重線形性を持つ
こと。
直接使うことは少ない気がするが、[[ガウスの発散定理とか|力学で使う積分の定理]] で使われている (みたい)。
----
V の基底を $$\{ \xi_1, \xi_2, ... \xi_i \}$$、W の基底を $$\{ \eta_1, \eta_2, ... \eta_j \}$$ とすると、''VとWのテンソル積はこれらの基底を用いて次のように定義できる''。
$$V \otimes W := \mathrm{span}( (\xi_i, \eta_j), | 1 \leq i \leq n, 1 \leq j \leq m) $$
なお、順序対 (ξi, ηj) を記号 "⊗" を用いて ξi ⊗ ηj と書くことにすれば、V × W の任意の元は適当な有限個のスカラー cij を用いて
$$\displaystyle v \otimes w := \sum_{i, j} c_{ij} (\xi_i \otimes \eta_j)$$
と表せる。また、任意の V, W の元 $$v \in V, w \in W$$ に対するテンソル積は、
$$\displaystyle v \otimes w := \sum_{i, j} a_i b_j (\xi_i \otimes \eta_j)$$
と書ける。
---
! テンソル積 と 直積 の違い
<<<
With that image in mind let’s see how that is done. For the sake of generality we’ll talk about two arbitrary finite-dimensional vector spaces V, W of dimensions n, m. Recall that the direct product $$V \times W$$ is the vector space of pairs $$(v,w)$$ where v comes from V and w from W. Recall that addition in this vector space is defined componentwise $$((v_1,w_1) + (v_2, w_2) = (v_1 + v_2, w_1 + w_2))$$ and scalar multiplication scales both components $$\lambda (v,w) = (\lambda v, \lambda w)$$.
To get the tensor product space $$V \otimes W$$, we make the following modifications. First, we redefine what it means to do scalar multiplication. In this brave new tensor world, scalar multiplication of the whole vector-pair is declared to be the same as scalar multiplication of any component you want. In symbols,
$$\lambda (v,w) = (\lambda v, w) = (v, \lambda w)$$
for all choices of scalars $$\lambda$$ and vectors $$v, w$$. Second, we change the addition operation so that it only works if one of the two components are the same. In symbols, we declare that
$$(v, w) + (v', w) = (v + v', w)$$
only works because $$w$$ is the same in both pieces, and with the same rule applying if we switch the positions of v,w above. All other additions are simply declared to be new vectors. I.e. $$(x,y) + (z,w)$$ is simply itself. It’s a valid addition — we need to be able to add stuff to be a vector space — but you just can’t combine it any further unless you can use the scalar multiplication to factor out some things so that $$y=w$$ or $$x=z$$. To say it still one more time, a general element of the tensor $$V \otimes W$$ is a sum of these pairs that can or can’t be combined by addition (in general things can’t always be combined).
Finally, we rename the pair $$(v,w)$$ to $$v \otimes w$$, to distinguish it from the old vector space $$V \times W$$ that we’ve totally butchered and reanimated, and we call the tensor product space as a whole $$V \otimes W$$. Those familiar with this kind of abstract algebra will recognize quotient spaces at work here, but we won’t use that language except to note that we cover quotients and free spaces elsewhere on this blog, and that’s the formality we’re ignoring.
<<<
<<<
As an example, say we’re taking the tensor product of two copies of $$\mathbb{R}$$. This means that our space $$\mathbb{R} \otimes \mathbb{R}$$ is comprised of vectors like $$3 \otimes 5$$, and moreover that the following operations are completely legitimate.
$$3 \otimes 5 + 1 \otimes (-5) = 3 \otimes 5 + (-1) \otimes 5 = 2 \otimes 5$$
$$6 \otimes 1 + 3 \pi \otimes \pi = 3 \otimes 2 + 3 \otimes \pi^2 = 3 \otimes (2 + \pi^2)$$
<<<
[[How to Conquer Tensorphobia – Math ∩ Programming|https://jeremykun.com/2014/01/17/how-to-conquer-tensorphobia/]]
! ゼロ行列
全ての成分が 0 である行列。
:$$ O = \begin{pmatrix} 0 & 0 & \ldots & 0 \\ 0 & 0 & \ldots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \ldots & 0 \end{pmatrix} $$
行列の和の [[単位元|群]] となる。
: $$A + O = O + A = A$$
----
! 正方行列
行数と列数が同じである行列。行数と列数がどちらも n である行列を ''n次正方行列'' という。
!! 対角行列
対角成分以外が 0 の行列を ''対角行列'' という。
:$$ \begin{pmatrix} c_1 & 0 & \ldots & 0 \\ 0 & c_2 & \ldots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \ldots & c_n \end{pmatrix} $$
!! 三角行列
* 上三角行列 : 対角成分より左下にある成分が全て 0 である正方行列
* 下三角行列 : 対角成分より右上にある成分が全て 0 である正方行列
!! 単位行列
対角成分だけが 1 で残りは 0 の n次正方行列を、''n次単位行列'' という。対角行列の特殊例の1つである。
$$ I = \begin{pmatrix}
1 & 0 & \ldots & 0 \\
0 & 1 & \ldots & 0 \\
\vdots & \vdots & \ddots & \vdots \\
0 & 0 & \ldots & 1
\end{pmatrix} $$
$$I$$ の代わりに $$E$$ を使うこともある。次元を明示する場合は、$$I_n, E_n$$ と書く。
以下に示す定理から明らかなように、「''単位行列はベクトルの恒等写像''」だと考えることができる。また、同じサイズの正方行列だけを扱う場合には、積の[[単位元|群]]になる。
!!! ''定理''
$$I$$ を n 次単位行列、 $$A$$ を $$(p, n)$$ 行列、 $$B$$ を $$(n, q)$$ 行列、 $$C$$ をn次正方行列とすると、以下が成り立つ。
# $$A \cdot I = A$$
# $$I \cdot B = B$$
# $$C \cdot I = I \cdot C = C $$
!! 正方行列の相似
$$A' = P^{-1} A P$$
----
! 逆行列
n 次正方行列 $$A$$ に対して、
$$A^{-1} \cdot A = A \cdot A^{-1} = I $$
となる n次正方行列 $$A^{-1}$$ を ''Aの逆行列'' という。
* 逆行列は存在しないこともある。
** 逆行列が存在する時、「正方行列 A は''正則''である」という。
* 行列をベクトルの線形写像だと考えれば、逆行列は [[逆写像|線形写像]] にあたる。
* 同じサイズの正方行列だけを扱う場合、逆行列は [[逆元|群]] になる。
** 同じサイズの正方行列は環をなす
** (感覚的に言えば、実数での $$\dfrac{1}{a} \cdot a = a \dfrac{1}{a} \cdot = 1$$ と同じようなもの)
! 直交行列
転置行列と逆行列が等しくなる正方行列のこと。
----
! n次の基本行列
<<<
以下の3種類のn次行列を,n次の基本行列とよぶ.
# $$P_n(i;c)$$ : 単位行列 I,,n,, の $$(i; i)$$ 成分の1をcで置き換えた行列 (ただし $$c \neq 0$$)
# $$P_n(i, j)$$ : 単位行列 I,,n,, の $$(i; i)$$ 成分と $$(j; j)$$ 成分の1を0で置き換え,$$(i; j)$$ 成分と $$(j; i)$$ 成分の0を1で置き換えた行列 (ただしi ≠ j)
# $$P_n(i, j;c)$$ : 単位行列 I,,n,, の $$(i; j)$$ 成分の0をcで置き換えた行列(ただしi ≠ j)
<<<
[[基本行列と行列の基本変形|https://www.cck.dendai.ac.jp/math/support/ch3-supp/%E5%9F%BA%E6%9C%AC%E8%A1%8C%E5%88%97%E3%81%A8%E8%A1%8C%E5%88%97%E3%81%AE%E5%9F%BA%E6%9C%AC%E5%A4%89%E5%BD%A2.pdf]] より
これらの行列は、正則である。
- - - - - - - - - - - - - - - - - - - -
!! 具体例
$$ P_3(2; 6) = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 6 & 0 \\ 0 & 0 & 1 \end{pmatrix} $$
$$ P_3(2,3) = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 0 & 1 \\ 0 & 1 & 0 \end{pmatrix} $$
$$P_n(2, 3; 6) = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 6 \\ 0 & 0 & 1 \end{pmatrix} $$
||統計量|<|数式での表現 |補足|h
| $$N$$ |母集団のサイズ |size of population| |含まれるデータ数 |
| $$x_i$$ |各データの値 | |||
| $$\mu$$ |母平均 |population mean |$$\displaystyle \dfrac{1}{N} \sum_{i=1}^N x_i$$ |正確に言うと、[[相加平均|平均値]]。 |
| $$\sigma^2$$ |母分散 |population variance |$$\displaystyle \dfrac{1}{N} \sum_{i=1}^N (x_i - \mu)^2$$ | |
| |||||
| $$n$$ |標本数 | |||
| $$X_i$$ |標本の値 (観測値) || ||
| $$\bar{X}$$ |標本平均 |(sample) mean |$$\displaystyle \dfrac{1}{n} \sum_{i=1}^n X_i$$ ||
| $$s^2$$ |不偏分散 |Sample variance |$$\displaystyle \dfrac{1}{n-1} \sum_{i=1}^n (X_i - \bar{X})^2$$ |$$V$$ や $$u^2$$と表すこともある |
| $$s$$ |標本標準偏差 |sample standard deviation |$$\sqrt{s^2}$$ または $$\sqrt{u^2}$$ ||
| |||||
|$$p_i$$ |確率 |probability |||
|$$f(x)$$ |確率密度関数 |Probability Density Function |||
|$$F(x)$$ |累積分布関数 |Cumulative Distribution Function |$$\displaystyle F(x) = \int_{-\infty}^{x} f(t) dt$$||
|$$E$$|[[期待値]] |expected value |$$\displaystyle \sum_{i=1}^N x_i p_i $$ |データが離散的な場合 |
|~|~|~|$$\displaystyle \int_{-\infty}^{\infty} x f(x) dx$$|連続変数の場合|
| $$S$$ |偏差平方和 |$$\displaystyle \sum_{i=1}^n (X_i - \mu)^2$$||
; 注意
* 日本語では、「標本分散」という言葉を $$\displaystyle \dfrac{1}{n} \sum_{i=1}^n (X_i - \bar{X})^2$$ に対して使うことが多いみたい
----
* 母集団: population
! 定義
前提として、[[確率変数]] X の像は実数であるとする。
!! 離散的な場合
X の像の数が有限な場合、各像を $$x_1, x_2, \dots , x_n$$ と表し、その各像の確率を $$p_1, p_2, \dots, p_n$$ とすると、期待値は、
:$$\displaystyle E[X] = \sum_{i=1}^n p_i x_i $$
と定義される。
ちなみに、丸括弧を使わないのは、汎関数であることを強調するためらしい。
!! 連続な場合
X が連続確率変数の場合、期待値は次のように定義される。
:$$\displaystyle E[X] = \int_{- \infty}^{\infty} x f_X (x) dx$$
----
! 性質
!! 線形性
* $$E[aX] = aE[X]$$
* $$E[X+Y] = E[X] + E[Y]$$
; 導出
$$\displaystyle E[aX] = \sum_{i=1}^n p_i (a x_i) = a \sum_{i=1}^n p_i x_i = a E[X]$$
$$\displaystyle \begin{aligned} E[X+Y] &= \sum_{x_i \in R_{X}} \sum_{y_j \in R_{Y}} (x_i + y_j) P_{XY} (x_i, y_j) \\ &= \sum_{x_i \in R_{X}} \sum_{y_j \in R_{Y}} x_i P_{XY} (x_i, y_j) + \sum_{x_i \in R_{X}} \sum_{y_j \in R_{Y}} y_j P_{XY} (x_i, y_j) \\ &= E[X] + E[Y] \end{aligned}$$
- - - - -
!! [[LOTUS]]
$$g(x)$$ を全単射な関数とすると、以下が成り立つ。
$$\ \ \ \ \ \ \displaystyle E[g(X)] = \sum_{x_k \in R_x} g(x_k) P_X (x_k)$$ (離散的な場合)
$$\ \ \ \ \ \ \displaystyle E[g(X)] = \int_{-\infty}^{\infty} g(x) f_X (x) dx$$ (連続的な場合)
ここから導かれるもの
* $$E[aX+b] = aE[X] + b$$
----
! Moment
n^^th^^ moment of random variable X:
: $$E[X^n]$$
n^^th^^ central moment of random variable X:
: $$E[(X - E[X])^n]$$
----
- - - - -
----
! Expectation of various distributions
Bernoulli(p)
Geometric
*https://ml4a.github.io/ml4a/jp/how_neural_networks_are_trained/
*https://ml4a.github.io/ml4a/jp/convnets/
; CNN
* [[畳み込みネットワークの「基礎の基礎」を理解する ~ディープラーニング入門|第2回 - アイマガジン|i Magazine|IS magazine|https://www.imagazine.co.jp/%E7%95%B3%E3%81%BF%E8%BE%BC%E3%81%BF%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%AE%E3%80%8C%E5%9F%BA%E7%A4%8E%E3%81%AE%E5%9F%BA%E7%A4%8E%E3%80%8D%E3%82%92%E7%90%86%E8%A7%A3%E3%81%99/]]
* パスポート
* ワクチン証明書
* 質問票 (厚生労働省)
* E-チケット
* ホテルの予約情報
- - -
* キャッシュカード
* 免許証
* ノートパソコンのコネクタ形状変換
* マスク
- - -
* スキー
* 大都映画
*グラミン銀行
* [[オルゴールカー|http://www.kinonukumori.com/Shouhin/PullToy.shousai/OrgelTruck.html]]
* 熊田千佳慕
* [[PASTA MARTELLI Lari (PI) |http://www.famigliamartelli.it/index.htm]]
** パスタ
** たっぷりのお湯できっちり茹でないと、ポテンシャルが出ない感じだった...
* 鉄道ダイヤ作成・牛田貢平 3月9日(火)
** [[お知らせ NHK プロフェッショナル 仕事の流儀|http://www.nhk.or.jp/professional/info/index.html]]
* 美しすぎるムクドリの群れを科学する
** DVDがあるらしい
** [[Islands and Rivers | http://islandsandrivers.co.uk/shop.html]]
** どうも支払いが、PayPal みたい..
----
* [[現在の気温・湿度を確認するなら気象庁 : akiyan.com | http://www.akiyan.com/blog/archives/2010/03/real-time-moisture-at-jma.html ]]
* [[ビジネス英語表現集:スペースアルク|http://www.alc.co.jp/eng/newsbiz/expression/index.html]]
* [[樹の上の秘密基地 | http://www.1101.com/nintendo/nin11/]]
* [[asahi.com : 朝日新聞社 - 細密画家 プチファーブル熊田千佳慕展|http://www.asahi.com/kumadachikabo/]]
** 微妙に遠いけど...
*[[「五百羅漢―幕末の絵師・狩野一信」展 |http://www.nikkei.com/life/culture/article/g=96958A9C93819495E2E4E2E0968DE2E4E2E4E0E2E3E39091EAE2E2E2;p=9694E0E3E3E0E0E2E2EBE0E5E6E2]]
** 行きそびれた
* [[江戸のアルチザン伊豆長の世界 風を待ちながら・・・/ウェブリブログ | http://freeport.at.webry.info/200703/article_5.html]]
* [[手と心の触感──向京の「この世界は良くなるのか?」展と「手で触れる」展:フォーカス|美術館・アート情報 artscape | http://artscape.jp/focus/10014123_1635.html]]
* [[深川不動堂 | http://yumechigai.exblog.jp/tags/%E6%B7%B1%E5%B7%9D%E4%B8%8D%E5%8B%95/ ]]
* [[動く!光る?魔法の芸術 キネティック・アート|http://www.bloglovin.com/blog/post/8785157/2767114111]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
; Web
<<tiddlerList tags:"気になったもの,URLs">>
; もの
<<tiddlerList tags:"気になったもの,もの" order:"modified">>
* 鉄管と銅管はつないではいけない。
*生パスタ
** 明星食品 生フィットチーネ
; 場所
* 昼会った
** ''ヒサモト''というケーキ屋
** [[着物を楽しむ! 玉川屋呉服店へようこそ|http://www.tamagawaya.info/]]
* チェコセンター
** ぶらぶらしていたらあった
* [[うらわ美術館|http://www.uam.urawa.saitama.jp/]]
* [[絵本の店 トムズボックス|http://www.tomsbox.co.jp/index.html]]
** キャベツくん
**ゴムあたまポンたろう
**チンプンカンプントンチンカ
; もの・人
* もたいたけし
* 長新太
*ますむらひろし
**コスモス楽園記
*記号と再帰
** この本ってだれが評価できるんだろ?
; その他
* [[エルファディンク 草刈り機|http://www.elfferding.de/jizoku/hitsuji.html]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
* ~FindBugs (定義ファイルの書き方とか)
* [[「売り切ったらフリー化」出版モデル - Radium Software | http://d.hatena.ne.jp/KZR/20090711/p1 ]]
* [[regex.hの使い方 | http://sometime.minidns.net/programming/c/posix_regex.html ]]
* [[便利そうなフリーのアイコン作成ツール6種類:phpspot開発日誌 | http://phpspot.org/blog/archives/2009/10/post_408.html ]]
* [[TCHARとかLPCTSTR、LPTSTRって何???(UsefullCode.net) | http://www.usefullcode.net/2006/11/tcharlpctstrlptstr.html ]]
* [[suicaは実はたまに落ちている - 紅茶屋くいっぱのあれこれ日記 | http://d.hatena.ne.jp/kuippa/20100205/1265389603 ]]
関数 y = f (x) は区間 $$I$$ で微分可能でかつ狭義単調であるとする.さらに,導関数について $$I$$ で常に $$f'(x) \neq 0$$
とする.このとき,逆関数 $$x = f^{-1}(y)$$ は $$f(I)$$ で微分可能であって
:$$\dfrac{d}{dy} f^{-1}(y) = \dfrac{1}{f'(x)}$$
が成り立つ。
- - - - -
任意の点 $$b \in f(I)$$ に対して $$a \in I $$ で $$b = f(a)$$ となるものがただ一つ存在する。
狭義単調なので
:$$a \neq x \ \Leftrightarrow \ b \neq f(x)$$
であるから,$$y \neq b$$ のとき
:$$\dfrac{f^{-1}(y) - f^{-1}(b)}{y - b} = \dfrac{f^{-1}(f(x)) - f^{-1}(f(a))}{f(x) - f(a)} = \dfrac{x - a}{f(x) - f(a)}$$
となる.このことと y → b のとき x → a であることから
:$$\displaystyle \lim_{y \to b} \dfrac{f^{-1}(y) - f^{-1}(b)}{y - b} = \lim_{x \to a} \dfrac{x - a}{f(x) - f(a)}$$
が成り立つ.
- - - - -
$$I$$ において $$f$$ は、
; 一変数関数の場合
C,,1,, 級関数 f の __点 a における微分係数が0でないとき__、f は a の近傍で可逆となり、この逆関数 f^^−1^^ もまた C,,1,, 級となる。このとき f^^−1^^ は次の式を満たす。
$${\displaystyle \qquad \left(f^{-1}\right)'{\Bigl (}f(a){\Bigr )}={\frac {1}{f'(a)}}} $$
; 多変数の場合
U ⊂ R^^n^^ を開集合、F : U → R^^n^^ を C,,1,, 級関数とすると、__F の点 p ∈ U におけるヤコビ行列__ J,,F,, (p) __が正則であるとき__、F は p の近傍で可逆となり、この逆関数 F^^−1^^ もまた C,,1,, 級となる。
このとき F^^−1^^ は次の式を満たす。ここで $${\displaystyle [A]^{-1}} $$ は A の逆行列、 $${\displaystyle J_{F}(p)} $$は F の点 p におけるヤコビ行列である。
$${\displaystyle (2)\qquad J_{F^{-1}}{\Bigl (}F(p){\Bigr )}={\Bigl [}J_{F}(p){\Bigr ]}^{-1}}$$
より基本的な考え方は [[曲線座標の基底]] 参照。
---
! 正規直交座標との変換
正規直交座標上で $$(x,y,z)$$ あるいは $$x^a$$ と表されるベクトルに対し、次のような対応関係を持つ3つの数字の組 $$(r,\theta,\phi)$$ (あるいは $$r^i$$) が球座標である。
* $$x = f_x(r,\theta,\phi) = r \sin{\theta} \cos{\phi}$$
* $$y = f_y(r,\theta,\phi) = r \sin{\theta} \sin{\phi}$$
* $$z = f_z(r,\theta,\phi) = r \cos{\theta} $$
この関係には逆の対応関係が存在し、$$(x,y,z)$$ から $$(r,\theta,\phi)$$ を求めることもできる。
: $$r = \sqrt{x^2 + y^2 + z^2}, \theta = \tan^{-1} \dfrac{\sqrt{x^2 + y^2}}{z}, \phi = \tan^{-1} \dfrac{y}{x}$$
! 自然基底
球座標の自然基底を求める際には、以下のような 関数行列 $$\dfrac{\partial f_{x^a}}{\partial r^i} (= A^a_i)$$ を用いた行列計算をする。
:$$\begin{pmatrix} e_r \\ \\ e_{\theta} \\ \\ e_{\phi} \end{pmatrix} = \begin{pmatrix} \dfrac{\partial f_x}{\partial r} & \dfrac{\partial f_y}{\partial r} & \dfrac{\partial f_z}{\partial r} \\ \\ \dfrac{\partial f_x}{\partial \theta} & \dfrac{\partial f_y}{\partial \theta} & \dfrac{\partial f_z}{\partial \theta} \\ \\ \dfrac{\partial f_x}{\partial \phi} & \dfrac{\partial f_y}{\partial \phi} & \dfrac{\partial f_z}{\partial \phi} \end{pmatrix} \begin{pmatrix} e_x \\ \\ e_y \\ \\e_z \end{pmatrix} = \begin{pmatrix} \sin{\theta} \cos{\phi} & \sin{\theta} \sin{\phi} & \cos{\theta} \\ \\ r\cos{\theta} \cos{\phi} & r \cos{\theta} \sin{\phi} & - r \sin{\theta} \\ \\ - r\sin{\theta} \sin{\phi} & r \sin{\theta} \cos{\phi} & 0 \end{pmatrix} \begin{pmatrix} e_x \\ \\ e_y \\ \\e_z \end{pmatrix} $$
テンソルの形式でまとめて書くと $$e_{r_i} = \dfrac{\partial f_{x^a}}{\partial r^i} e_{x_a}$$ となる (はず)。
また、この自然基底上での成分は、$$A^i_a$$ の逆行列 $$\dfrac{\partial f_{r^i}}{\partial x^a} (= \bar{A})$$を使って、正規直交座標上の成分から計算できる。
:$$\begin{pmatrix} r \\ \\ \theta \\ \\ \phi \end{pmatrix} = \begin{pmatrix} \dfrac{\partial f_r}{\partial x} & \dfrac{\partial f_r}{\partial y} & \dfrac{\partial f_r}{\partial z} \\ \\ \dfrac{\partial f_{\theta}}{\partial y} & \dfrac{\partial f_{\theta}}{\partial y} & \dfrac{\partial f_{\theta}}{\partial y} \\ \\ \dfrac{\partial f_{\phi}}{\partial z} & \dfrac{\partial f_{\phi}}{\partial z} & \dfrac{\partial f_{\phi}}{\partial z} \end{pmatrix} \begin{pmatrix} x \\ \\ y \\ \\ z \end{pmatrix} = \begin{pmatrix} \sin{\theta} \cos{\phi} & \sin{\theta} \sin{\phi} & \cos{\theta} \\ \\ \dfrac{1}{r} \cos{\theta} \cos{\phi} & \dfrac{1}{r} \cos{\theta} \sin{\phi} & - \dfrac{1}{r} \sin{\theta} \\ \\ - \dfrac{\sin{\phi}}{r \sin{\theta}} & \dfrac{\cos{\phi}}{r \sin{\theta}} & 0 \end{pmatrix} \begin{pmatrix} x \\ \\ y \\ \\ z \end{pmatrix} $$
テンソルの形式でまとめて書くと $$r_i = \dfrac{\partial f_{r^i}}{\partial x^a} x_a$$ となる (はず)。
! 自然基底の正規化
! 大まかな説明
無限数列{$$a_n$$}の各項を+で結んだ式を、''無限級数'' (infinite series) あるいは単に ''級数'' (series) という。
$$\displaystyle \sum_{i=1}^{\infty} a_n = \lim_{n \to \infty} \sum_{i=1}^{n} a_n $$
* http://www.geocities.co.jp/HeartLand-Himawari/3613/engine/mp0801.html
---
! 部分和を用いた表現
!! 部分和
n を任意の自然数とするとき、与えられた無限数列 {$$a_n$$} に対し、初項から第 n 項までの有限項の和を、数列 {$$a_n$$} あるいは級数 $$\sum a_n$$ の ''第n部分和'' (英: partial sum) と呼ぶ。また、 n に依らず総称して ''部分和'' と呼ぶ。
$$\displaystyle S_n := a_1 + a_2 + ... + a_n = \sum_{i=1}^n a_n$$
この部分和を用いると、級数は次のように表せる。
$$\displaystyle \sum_{i=1}^{\infty} a_n = \lim_{n \to \infty} S_n $$
---
! 級数の収束
!! 比較判定法
!! 比判定法
!! 根判定法
http://www2.math.kyushu-u.ac.jp/~tanahashi/pdf/complex-analysis/note_7.pdf
<<tag 境界層方程式>>
! 境界層方程式
''境界層近似'' を用いることで、境界層内の「連続の式」と「ナビエストークス方程式」は、次のように簡略化できる。この簡略化した式を ''境界層方程式'' という。
$$\dfrac{\partial v_x}{\partial x} + \dfrac{\partial v_x}{\partial y} = 0$$
$$\dfrac{\partial v_x}{\partial t} + v_x \dfrac{\partial v_x}{\partial x} + \dfrac{\partial v_x}{\partial y} = - \dfrac{1}{\rho} \dfrac{\partial p}{\partial x} + \nu \dfrac{\partial^2 v_x}{\partial y^2}$$
$$\dfrac{\partial p}{\partial y} = 0$$
主流方向をx軸、主流に直行する方向をy軸としている。なお、''境界層の厚さは x軸方向の代表長さに比べて非常に小さいものとする''。
---
! 境界層近似 と 境界層方程式の導出
「主流方向がx軸、主流と直交する方向がy軸」となる座標を設定した上で、次のように変数を定義する。
* L: x軸方向の代表長さ
* δ: 境界層の厚さ
* $$v_x$$: x軸方向の速度
* $$v_y$$: y軸方向の速度
* $$v_\infty$$: 境界層の外側の速度
そして、$$x, y, v_x$$ のオーダーは、それぞれ
* $$x \sim L$$
* $$y \sim \delta$$
* $$v_x \sim v_\infty$$
であると、仮定する。
- - - - -
これらを連続の式に代入すると、
$$\dfrac{\partial v_x}{\partial x} + \dfrac{\partial v_y}{\partial y} \sim \dfrac{v_\infty}{L} + \dfrac{v_y}{\delta} = 0$$
というオーダーに関する関係が得られる。ただし、y軸方向の速度($$v_y$$) のオーダーが不明なため、$$v_y$$ はそのまま残している。
仮に「$$\dfrac{v_\infty}{L}$$ と $$\dfrac{v_y}{\delta}$$ のオーダーが異なる」とすると、「境界層が下流方向に減速しながら肥大化していく」という実験事実と矛盾が生じる。ゆえに、 $$\dfrac{v_\infty}{L}$$ と $$\dfrac{v_y}{\delta}$$ のオーダーは等しくなければならない。そして、同じオーダーになる条件を考えると、
$$v_y \sim \dfrac{v_\infty \delta}{L}$$
であることが分かる。
- - - - -
ここで 「''境界層の厚さは x軸方向の代表長さに比べて非常に小さい''」と仮定すると、$$\delta << L$$ であり、 $$v_y << v_\infty \sim v_x$$ である。
そのため、y軸方向のナビエストークス方程式は、
$$\dfrac{\partial v_y}{\partial t} + v_x \dfrac{\partial v_y}{\partial x} + v_y \dfrac{\partial v_y}{\partial y} = - \dfrac{1}{\rho} \dfrac{\partial p}{\partial y} + \nu (\dfrac{\partial^2 v_y}{\partial x^2} + \dfrac{\partial^2 v_y}{\partial y^2}) $$
圧力項以外の項のオーダーは、x軸方向のナビエストークス方程式
$$\dfrac{\partial v_x}{\partial t} + v_x \dfrac{\partial v_x}{\partial x} + v_y \dfrac{\partial v_x}{\partial y} = - \dfrac{1}{\rho} \dfrac{\partial p}{\partial x} + \nu (\dfrac{\partial^2 v_x}{\partial x^2} + \dfrac{\partial^2 v_x}{\partial y^2}) $$
のオーダーよりも小さいことが分かる。よって、圧力項以外を省略した
$$\dfrac{1}{\rho} \dfrac{\partial p}{\partial y} = 0 $$
が得られる。
一方、x軸方向のナビエストークス方程式については、粘性項の第一項のオーダーが第二項に比べて小さいため省略可能である。
$$\dfrac{\partial v_x}{\partial t} + v_x \dfrac{\partial v_x}{\partial x} + v_y \dfrac{\partial v_x}{\partial y} = - \dfrac{1}{\rho} \dfrac{\partial p}{\partial x} + \nu \dfrac{\partial^2 v_x}{\partial y^2} $$
---
! Blasius solution
''層流境界層'' に関しては、次の仮定を設けることで厳密解が得られる。
* 定常流
* x軸方向の圧力勾配はゼロ
ここでの境界層の厚さ ($$\delta_{0.99}$$) は、「主流速度の99%になる位置」を意味する。
$$\delta_{0.99} = 5 \sqrt{\dfrac{\nu x}{v_\infty}} = 5 \sqrt{\dfrac{\mu x}{\rho v_\infty}}$$
$$\tau_w = \mu \dfrac{\partial v_x}{\partial y}|_{y=0} = \mu \left( 0.332 v_\infty \sqrt{\dfrac{v_\infty}{\nu x}} \right) $$
---
! その他
一般的に境界層方程式は剥離点の近くまでしか計算できない。なぜならば、剥離点付近では境界層近似が成立しなくなるためである。
曲率を考慮した場合:
https://www3.chubu.ac.jp/documents/faculty/nakamura_yoshiaki/content/626/626_154b044e9e59b2825b653b42ddc947b4.pdf
---
! ある点における曲線座標
ある領域 D では、領域内の各点 $$(x, y, z)$$ に対し、3つの数の組 $$(u, v, w)$$ が一対一対応しているものとする。また、$$(x, y, z)$$ は正規直交基底の成分とする。
領域 D 内の 1点を P,,0,, (∈ D) に対する数の組を (u,,0,,, v,,0,,, w,,0,,) とするとき、次の3つの式は、どれも P,,0,, を通る曲線を表す。
* $$(x, y, z) = (f_x(u,v_0,w_0), f_y(u,v_0,w_0), f_z(u,v_0,w_0))$$
* $$(x, y, z) = (f_x(u_0,v,w_0), f_y(u_0,v,w_0), f_z(u_0,v,w_0))$$
* $$(x, y, z) = (f_x(u_0,v_0,w), f_y(u_0,v_0,w), f_z(u_0,v_0,w))$$
そして、この式で表される曲線を ''座標曲線'' という。
----
! 座標曲線の基底 (自然基底)
P,,0,, における $$\sum'$$ の基底は、P,,0,, を通り (P,,0,,の)曲線座標に接するベクトルという形で定義される。そして、この基底は ''P,,0,, における自然基底'' と呼ばれる。
座標曲線は3本あるので、基底となるベクトルの数も3つである。(線形結合が可能な) 正規直交座標 $$\sum$$ を用いれば、これらのベクトルは、P,,0,, における
$$\ \ \cdot \ \ e_u = \left( \dfrac{\partial f_x}{\partial u} \ \ \dfrac{\partial f_y}{\partial u} \ \ \dfrac{\partial f_z}{\partial u} \right)$$
$$\ \ \cdot \ \ e_v = \left( \dfrac{\partial f_x}{\partial v} \ \ \dfrac{\partial f_y}{\partial v} \ \ \dfrac{\partial f_z}{\partial v} \right)$$
$$\ \ \cdot \ \ e_w = \left( \dfrac{\partial f_x}{\partial w} \ \ \dfrac{\partial f_y}{\partial w} \ \ \dfrac{\partial f_z}{\partial w} \right)$$
によって定められる。
この関係は、行列にまとめることもできる。
:$$\begin{pmatrix} e_u \\ \\ e_v \\ \\ e_w \end{pmatrix} = \begin{pmatrix} \dfrac{\partial f_x}{\partial u} & \dfrac{\partial f_y}{\partial u} & \dfrac{\partial f_z}{\partial u} \\ \\ \dfrac{\partial f_x}{\partial v} & \dfrac{\partial f_y}{\partial v} & \dfrac{\partial f_z}{\partial v} \\ \\ \dfrac{\partial f_x}{\partial w} & \dfrac{\partial f_y}{\partial w} & \dfrac{\partial f_z}{\partial w} \end{pmatrix} \begin{pmatrix} e_x \\ \\ e_y \\ \\e_z \end{pmatrix} $$
この行列の行列式が 0 でないなら $$\left( \det \dfrac{\partial f_{x^i}}{\partial u^{j}} \neq 0 \right) $$ 、逆関数が存在するので、逆変換が可能である。
- - - - -
なお、P,,0,, を始点に持つ任意のベクトル v を
:$$v = v^1 e_u (P_0) + v^2 e_v (P_0) + v^3 e_w (P_0) $$
と表すとき、$$(v^i) = (v^1, v^2, v^3)$$ をベクトル v の ''曲線座標系に関する成分'' という。
----
! 基底の正規化 (直交曲線座標の単位ベクトル)
''上記の自然基底は、正規直交座標系 (デカルト座標系) におけるノルムは1ではない。''
そのため、正規直交基底からの基底変換を考える場合には、自然基底のノルムを正規直交基底のノルムで正規化した、直交基底を使用した方が便利である。
基底の各成分の長さは内積を用いて表現できる。
$$|e_u| = \sqrt{e_u \cdot e_u}, \ \ |e_v| = \sqrt{e_v \cdot e_v}, \ \ |e_w| = \sqrt{e_w \cdot e_w}$$
同じ基底同士の内積は、
$$e_u \cdot e_u = \left( \dfrac{\partial x}{\partial u} e_x + \dfrac{\partial y}{\partial u} e_y + \dfrac{\partial z}{\partial u} e_z \right) \cdot \left( \dfrac{\partial x}{\partial u} e_x + \dfrac{\partial y}{\partial u} e_y + \dfrac{\partial z}{\partial u} e_z \right) $$
と表せ、e,,x,,, e,,y,,, e,,z,,, が互いに直交するノルム(長さ)1のベクトルであることを考慮すると、
$$e_u \cdot e_u = \left( \dfrac{\partial x}{\partial u} \right)^2 e_x \cdot e_x + \left( \dfrac{\partial y}{\partial u} \right)^2 e_y \cdot e_y + \left( \dfrac{\partial z}{\partial u} \right)^2 e_z \cdot e_z = \left( \dfrac{\partial x}{\partial u} \right)^2 + \left( \dfrac{\partial y}{\partial u} \right)^2 + \left( \dfrac{\partial z}{\partial u} \right)^2 $$
となる。よって、
$$h_a = \sqrt{ \left( \dfrac{\partial x}{\partial a} \right)^2 + \left( \dfrac{\partial y}{\partial a} \right)^2 + \left( \dfrac{\partial z}{\partial a} \right)^2 }$$
と定義すると、正規化した直交基底 $$\bar{\sum} = (a_u, a_v, a_w)$$は、
$$\ \ \cdot \ \ a_u = \dfrac{e_u}{|e_u|} = \dfrac{e_u}{\sqrt{e_u \cdot e_u}} = \dfrac{1}{h_u} e_u$$
$$\ \ \cdot \ \ a_v = \dfrac{e_v}{|e_v|} = \dfrac{e_v}{\sqrt{e_v \cdot e_v}} = \dfrac{1}{h_v} e_v$$
$$\ \ \cdot \ \ a_w = \dfrac{e_w}{|e_w|} = \dfrac{e_w}{\sqrt{e_w \cdot e_w}} \dfrac{1}{h_w} e_w$$
と表せる。なお、h のことを ''スケール因子'' ということがある。
なお、極座標や球座標は、この正規化された直交基底になっている。
* [[ベクトルの極座標変換 - Qiita|https://qiita.com/u_1roh/items/5836fb9b0064f89e6b7f]]
----
! 直交曲線座標系における単位ベクトルの微分
* http://jjoo.sakura.ne.jp/igblog/?page_id=876
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! 具体例
-
* $$e_r = \left( \dfrac{\partial f_x}{\partial r} \ \ \dfrac{\partial f_y}{\partial r} \ \ \dfrac{\partial f_z}{\partial r} \right)= \left( \sin{\theta} \cos{\phi} \ \ \sin{\theta} \sin{\phi} \ \ \cos{\theta} \right) $$
* $$e_{\theta} = \left( \dfrac{\partial f_x}{\partial \theta} \ \ \dfrac{\partial f_y}{\partial \theta} \ \ \dfrac{\partial f_z}{\partial \theta} \right)= \left( r\cos{\theta} \cos{\phi} \ \ r \cos{\theta} \sin{\phi} \ \ - r \sin{\theta} \right) $$
* $$e_{\phi} = \left( \dfrac{\partial f_x}{\partial \phi} \ \ \dfrac{\partial f_y}{\partial \phi} \ \ \dfrac{\partial f_z}{\partial \phi} \right)= \left( - r\sin{\theta} \sin{\phi} \ \ r \sin{\theta} \cos{\phi} \ \ 0 \right) $$
自然基底上での成分表示:
* $$r = \dfrac{\partial f_r}{\partial x} x + $$ ????
(球座標の) 正規化された基底:
$$|e_r| = 1, \ \ |e_{\theta}| = r, |e_{\phi}| = r \sin{\theta} $$ なので、
* $$a_r = \left( \sin{\theta} \cos{\phi} \ \ \sin{\theta} \sin{\phi} \ \ \cos{\theta} \right)$$
* $$a_{\theta} = \left(\cos{\theta} \cos{\phi} \ \ \cos{\theta} \sin{\phi} \ \ - \sin{\theta} \right) $$
* $$a_{\phi} = \left( - \sin{\phi} \ \ \cos{\phi} \ \ 0 \right) $$
<div class="tc-table-of-contents">
<<toc-selective-expandable '曲線座標系'>>
</div>
---
! 直交曲線座標
任意の次元で成り立つ話だが、三次元を例にして書く。
正規直交座標系 $$\sum = \{ e_x, e_y, e_z \}$$ 上で $$(x,y,z)$$ という座標で表される点Pを、別の座標系 $$\sum' = \{ e'_u, e'_v, e'_w \}$$ の座標 $$(u,v,w)$$ で表すことを考える。このときに、$$\sum'$$ が以下に示す3つの条件を満たす場合、$$\sum'$$ を''直交曲線座標(系)'' という。
; 条件1
$$\sum'$$ での座標のそれぞれの値が、
$$(u, v, w) = (f_u(x,y,z), f_v(x,y,z), f_w(x,y,z)) \ \ \ $$ 【式1】
と、$$\sum$$ での座標の値の関数で求まり (これらの関数は線形写像でなくてもよい)、その逆変換も一意に求まる。
$$(x, y, z) = (f_x(u,v,w), f_y(u,v,w), f_z(u,v,w)) \ \ \ $$ 【式2】
; 条件2
$$\{ e'_u, e'_v, e'_w \}$$ は、点の位置によって変わり得る,つまり,点(=位置)[u, v, w]の関数(あるいは(x, y, z)の関数)であるとする。
; 条件3
$$\{ e'_u, e'_v, e'_w \}$$ は互いに直交している。
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! 注意点
* 曲線座標では、位置によって単位ベクトルが異なる。
* 直線座標では任意のベクトルを単位ベクトルの線形結合で表せるが、曲線座標ではそのような基本ベクトルは存在しない。
http://www.yamamo10.jp/yamamoto/study/electromagnetics/coodinate_transform/html/node3.html
---
! [[曲線座標の基底]]
!! 座標曲線
座標 $$\sum'$$ について、ある点 (u,,0,,, v,,0,,, w,,0,,) を指定し、その点の2つの成分を【式2】に代入し、1成分だけを動かすと、その軌道は線になる。そして、この軌道(線) のことを、''座標曲線'' という。3次元の座標では成分が3つあるので、座標曲線の数は3本である。
* $$(x(u,v_0,w_0), y(u,v_0,w_0), z(u,v_0,w_0))$$
* $$(x(u_0,v,w_0), y(u_0,v,w_0), z(u_0,v,w_0))$$
* $$(x(u_0,v_0,w), y(u_0,v_0,w), z(u_0,v_0,w))$$
!! 自然基底
(ある点 P,,0,, における) ''曲線座標の自然基底は、その点を通る座標曲線に接するベクトルという形で定義される''。P,,0,, の自然基底 e',,a,, は、成分の変換関数 $$f_{x^i}(u^a)$$ (の偏微分) と 正規直交基底 e,,i,, から計算できる。
$$\displaystyle \ \ e'_{a} = \sum_{i=1}^{3} \dfrac{\partial f_{x^i}}{\partial u^a} e_i$$
!! 自然基底の正規化
正規直交基底からの基底変換を考える場合には、自然基底のノルムを正規直交基底のノルムで正規化した基底の方が便利である。この正規化した直交基底 $$\bar{\sum} = \{ a_u, a_v, a_w \}$$ は、次のように定義される。
$$\bar{\sum} = \left( \dfrac{e'_u}{|e'_u|}, \dfrac{e'_v}{|e'_v|}, \dfrac{e'_w}{|e'_w|} \right) = \left( \dfrac{1}{h_u} e'_u, \ \dfrac{1}{h_v} e'_v, \ \dfrac{1}{h_w} e'_w \right)$$
* $$h_a = \sqrt{ \left( \dfrac{\partial f_x}{\partial a} \right)^2 + \left( \dfrac{\partial f_y}{\partial a} \right)^2 + \left( \dfrac{\partial f_z}{\partial a} \right)^2 }$$
極座標・円筒座標・球座標などの実用的な座標では、この正規化がされている。例えば、球座標の基底は、次のように計算できる。
* $$a_r = \dfrac{1}{h_r} \left( \dfrac{\partial x}{\partial r} e_x + \dfrac{\partial y}{\partial r} e_y + \dfrac{\partial z}{\partial r} e_z \right) = (\sin{\theta} \cos{\phi}) e_x + (\sin{\theta} \sin{\phi}) e_y + (\cos{\theta}) e_z $$
* $$a_{\theta} = \dfrac{1}{h_{\theta}} \left( \dfrac{\partial x}{\partial \theta} e_x + \dfrac{\partial y}{\partial \theta} e_y + \dfrac{\partial z}{\partial \theta} e_z \right) = (r \cos{\theta} \cos{\phi}) e_x + (r \cos{\theta} \sin{\phi}) e_y + (- r \sin{\theta}) e_z $$
* $$a_{\phi} = \dfrac{1}{h_{\phi}} \left( \dfrac{\partial x}{\partial \phi} e_x + \dfrac{\partial y}{\partial \phi} e_y + \dfrac{\partial z}{\partial \phi} e_z \right) = ( - r\sin{\theta} \sin{\phi}) e_x + (r \sin{\theta} \cos{\phi}) e_y + 0 e_z $$
!! 微分変数の交換
* $$\dfrac{\partial f_u}{\partial x} = \dfrac{1}{{h_u}^2} \dfrac{\partial f_x}{\partial u}, \ \ \dfrac{\partial f_v}{\partial x} = \dfrac{1}{{h_v}^2} \dfrac{\partial f_x}{\partial v}, \ \ \dfrac{\partial f_w}{\partial x} = \dfrac{1}{{h_w}^2} \dfrac{\partial f_x}{\partial w}$$
- -
* http://jjoo.sakura.ne.jp/igblog/?page_id=924
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
! [[自然基底同士の座標変換]]
!! 成分の変換
成分が u^^i^^ と u'^^a^^ と表される2つの曲線座標の間での座標変換では、各成分の値は次のように計算できる。
: $$\displaystyle u'^a = \sum_i \dfrac{\partial u'^a}{\partial u^i} u^i ~~~~~ \left( = \sum_i{A^a}_i u^i \right)$$
!! 基底の変換
基底が e,,i,, と e',,a,, と表される2つの曲線座標の間での座標変換では、変換後の基底は次のように計算できる。
:$$\displaystyle e'_a = \sum_i \dfrac{\partial u^i}{\partial u'^a} e_i ~~~~~ \left( = \sum_i \bar{A^i}_a e_i \right)$$
!! 座標変換が可能となる条件
$$\sum$$ と $$\sum'$$ が一対一対応する (座標変換可能) ということは、変換関数の関数行列が 0 でないということである。
$$\ \ \ \ \det \begin{pmatrix} \dfrac{\partial f_u}{\partial x} & \dfrac{\partial f_u}{\partial f_y} & \dfrac{\partial f_u}{\partial z} \\ & & & \\ \dfrac{\partial f_v}{\partial x} & \dfrac{\partial f_v}{\partial y} & \dfrac{\partial f_v}{\partial z} \\ & & & \\ \dfrac{\partial f_w}{\partial x} & \dfrac{\partial f_w}{\partial y} & \dfrac{\partial f_w}{\partial z} \end{pmatrix} \neq 0$$
---
! 自然基底を用いた微小変位の表現
以下は、どちらかというと物理の話だと思う。
位置ベクトル r の微小変位 dr を、座標 (u,,1,,, u,,2,,, u,,3,,) で表すことを考える。
---
---
曲線座標 u^^i^^ 上でのベクトル ''v'' の表現は、
$$v = u'^1 \dfrac{\partial x^1}{\partial u'^a} e_1 + u'^2 e'_2 + u'^3 e'_3$$
!! 座標曲線の基底の大きさ
ベクトルの各成分は、
$$\dfrac{\partial f_x}{\partial u} = \dfrac{\partial f_x}{\partial x} \dfrac{\partial x}{\partial u}
$$
が、ベクトル(基底)の大きさについては、これでは定まらない。
- -
このベクトルを求めるには、(u, v, w) の微小変化に対する P,,0,, の位置ベクトルの変化 (dr) を知る必要があるが、曲線座標では、
$$dr \neq \dfrac{\partial r}{\partial u} du + \dfrac{\partial r}{\partial v} dv + \dfrac{\partial r}{\partial w} dw$$
であることに注意する必要がある。
そのため、まず、正規直交系である $$\sum = \{ e_x, e_y, e_z \}$$ での、dr について考える。
$$dr = \dfrac{\partial r}{\partial x} dx + \dfrac{\partial r}{\partial y} dy + \dfrac{\partial r}{\partial z} dz $$
では、このようなベクトルは、
-
* http://physics-note.hatenablog.com/entry/2016/02/20/192646
---
- -
$$u^i = u^i(x^1, x^2, x^3)$$
$$\det \left( \dfrac{\partial u^i}{\partial x^a} \right) \neq 0$$
---
---
【式2】で表される領域を D とし、D に含まれるある点を P,,0,, = (u,,0,,, v,,0,,, w,,0,,) ∈ Dとする。
<<list-links filter:[tag[極限]] >>
----
<<tabs "[tag[極限]]" "数列の極限" "$:/state/tab1">>
https://manabitimes.jp/math/1207
関数 $$f$$ が 有界閉区間 $$[a,b]$$ で積分可能ならば、分割の幅 $$| \Delta |$$ が、|Δ| → 0 となるように $$[a,b]$$ を分割してやると、
:$$\displaystyle \sum_{i=0}^n f(\xi_i)(x_i - x_{i-1}) \to \int_a^b f(x) dx$$
となる($$x_i$$ は 「分割 $$\Delta$$ の分点」、$$\xi_i$$ は「分割の代表点」)。
* $$\Delta : (a=) x_0 < x_1 < ... < x_n (=b) $$
* $$| \Delta | = \max \{x_i - x_{i-1}; i = 1,2, \cdots, n\} $$
そして、これを式で表すと以下のようになる。
$$\displaystyle \ \ \ \ \ \lim_{n \to \infty} \sum_{i=0}^n f(\xi_i)(x_i - x_{i-1}) = \int_a^b f(x) dx $$
なお、分割は n等分されることが多いが、(|Δ| → 0 でありさえすればよく) ''n等分でなくても構わない'' 。
積分可能の詳しい説明については、[[Riemann積分可能]] 参照。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! n等分した場合の式
(n等分でなくても構わないが) よく出てくるのは、n等分された形式である。
: $$\displaystyle \lim_{n \to \infty} \sum_{k=1}^n \dfrac{1}{n} f(\dfrac{k}{n}) = \int_0^1 f(x) dx $$
---
! 背景にある定理
f が [a; b] で積分可能ならば、|Δn| → 0 となる任意の分割列 $$\Delta_1, \Delta_2, \cdots$$
とその任意の「代表点の列」 $$\xi_1 = (\xi_{1,1}, \xi_{1,2,} ... , \xi_{1,m1}), \ \ \xi_2 = (\xi_{2,1}, \xi_{2,2,} ... , \xi_{2,m2}) \ ... $$ に対し
$$\displaystyle \lim_{n \to \infty} R[f, \Delta_n, \xi_n] = \int_a^b f(x) dx$$
が成り立つ。
!! 定理の証明
<<<
f が積分可能とは、ある実数J が存在して、どんなに小さな正実数 ϵ が与えられても十分小さな正実数 δ を取れば|Δ| < δ を満たす任意の分割とその任意の代表点の取り方 ξ に対して
$$\displaystyle | R[f, \Delta, \xi] - J| < \epsilon \ \ \ \ \ \ \ (2)$$
が成り立つことで、このとき $$\int_a^b f(x) dx = J$$ と書くのでした。
今 |Δn| → 0 なのですから、十分大きな N を取れば、この δ に対して
$$n > N \Rightarrow |\Delta| < \delta$$
が成り立ちます。これと式(2) を組み合わせれば、
$$\displaystyle n > N \Rightarrow \left| R[f, \Delta_n, \xi_n] - \int_a^b f(x) dx \right| < \epsilon$$
となります。
<<<
<<<
しつこいようですが繰り返しますと、
[a; b] 上の関数f は積分可能かもしれないしそうでないかもしれないが、積分可能だった
場合のその積分値 $$\int_a^b f(x) dx $$ は、|Δn| → 0 を満たすように好き勝手に選んだ分割列と好き勝手に選んだ代表点の取り方の列 ξ,,1,,, ξ,,2,,, ... に対するリーマン和の列 R[f;Δ,,n,,; ξ,,n,,] の収束先である。
というわけです。これを使って積分値を計算する方法を''区分求積法''といいます。
<<<
https://lecture.ecc.u-tokyo.ac.jp/~nkiyono/kiyono/simo11-08.pdf
<<<
集合 G とその集合上の[[二項演算|集合の操作]] f の組がとある条件を満たすときに,そのペア (G,f) を群と言う。
<<<
[[群の定義といろんな具体例 - 高校数学の美しい物語|https://mathtrain.jp/group]]
---
! 群の公理
$$G$$ を空でない集合,$$*$$ を $$G$$ の二項演算とする。
この時、組 $$(G, *)$$ が群となるには、以下の3つが成り立つ必要がある。
!! G1. 結合法則
$$ \forall a, \forall b, \forall c \in G $$ に対して、 $$ (a * b) * c = a * (b * c) $$ が成り立つ。
!! G2. 単位元が存在する
すなわち、$$ \forall a \in G $$ に対して、 $$ a * e = e * a = a $$ が成り立つ $$ e \in G $$ が存在する。
!! G3. 逆元が存在する
すなわち、$$ \forall a \in G $$ に対して、 $$ a^{-1} * a = a * a^{-1} = e $$ が成り立つ $$ a^{-1} \in G $$ が存在する。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! 公理から導かれる性質
<<<
* ''単位元は一つしか存在しません''
* ''逆元は一つしか存在しません''
* 与えられた $$ a, b \in G $$ に対して $$ a * x = b, x * a = b $$を満たす $$x$$ がただ一つ存在し、それぞれ $$ x = a^{-1} * b, x = b * a^{-1} $$ である。
<<<
[[応用数学III (12)群・環・体の定義|http://www.rs.noda.tus.ac.jp/skimura/AppMath3/AppMathIII-12.pdf]]
---
! アーベル群の公理(可換群)
G1, G2, G3 に加えて、「G4. 交換法則」を満たす集合。
* アーベル群は、"+" で表されることが多い。
* 「加法群」・「加群」とも言う?
!! G4. 交換法則
任意の $$ a, b \in G $$ に対して、$$ a * b = b *a $$ が成り立つ。
---
! 関連する構造
!! 半群
G1 を満たす集合。
!! モノイド
G1 と G2 を満たす集合。
!! 有限群
有限個の要素のみで構成される群
!! 無限群
無限個の要素を持つ群
----
! 位数
群の元の数を ''位数'' といい、絶対値の記号を用いて表す。さらに、位数が有限の群を ''有限群''、位数が無限の群を ''無限群'' という。
例えば、G = { 1, i, -1, -i } について、 (G, 複素数の掛け算 ) という群を考えた場合、その位数は 4 である。
:$$|G| = 4$$
---
[[これから群論を学ぶ方のための入門講座 – びりあるの研究ノート|https://blog.visvirial.com/articles/315]]
! [[群]]の同型写像
ざっくり言うと、ある群 G を別の群 H に写した時に、「群の構造が等しい」ことを意味する (らしい)。
* 2つの群の演算子が一対一対応する
* G と H 元の数が等しい
!! ''定義''
<<<
2つの群 (G, ∗) と (H, ⊙) が与えられたとき、(G, ∗) から (H, ⊙) への群同型写像 (group isomorphism) はG から H への全単射群準同型である。説明すると、これが意味するのは、群同型写像は全単射関数 $${\displaystyle f:G\rightarrow H}$$ であってすべての u, v ∈ G に対して
$$f(u*v) = f(u) \odot f(v) $$
が成り立つということである。
2つの群 (G, ∗) と (H, ⊙) が同型 (isomorphic) であるとは、一方から他方への同型写像が存在するということである。これは
$$(G, *) \approxeq (H, \odot)$$
と書かれる。
<<<
[[群同型 - Wikipedia|https://ja.wikipedia.org/wiki/%E7%BE%A4%E5%90%8C%E5%9E%8B]]
!! ''性質''
# ''(準)同型写像は、単位元を単位元に移す。''
# ''(準)同型写像は、逆元を逆元に移す。''
# ''(G, ∗) が (H, ⊙) に同型で G が可換群であれば H も可換である。''
# ''同型写像では、2つの群の位数(元の数)が同じ。''
!!! ''証明 1''
e, e' を H, G の単位元 とする。
$$f(e * e) = f(e) \odot f(e) = f(e)$$
上の式に $$f^{-1}(e)$$ を加えると、
$$f(e) \odot f(e) \odot f^{-1}(e) = f(e) \odot f^{-1}(e)$$
$$f(e) = e'$$
!!! ''証明 2''
証明 1 の結果を使うと、e' は次のように変形できる。
$$e' = f(e) = f(v * v^{-1}) = f(v) \odot f(v^{-1})$$
----
! [[群]]の準同型写像
大まかに言うと、同型写像の定義から、全単射の条件を削ったもの。
A,Bをともに群または環としたときに、AからBへの凖同型写像の集合を次のように記号で表す。
:$$\mathrm{Hom} (A,B)$$
!! ''定義''
[[群]] の構造を保つ写像。
<<<
群 G, G' に対して、写像 $$f: G \to G'$$ 次の性質を満たすとき、写像 $$f$$ を ''凖同型写像'' という。
$$f(a \circ b) = f(a) \circ f(b), \forall a,b \in G $$
<<<
<<<
* これは素直に納得できますね。
* 二項演算をして写像しても、写像した後に二項演算しても結果が同じ。
*これならば、元の群の構造を写像された群でも保っていると思えます
<<<
[[応用数学III (13)群・環・体の定義|http://www.rs.noda.tus.ac.jp/skimura/AppMath3/AppMathIII-13.pdf]]
---
!! 補足
<<<
ψが 群G1から G2への同型写像であるとは、以下の2つの条件をみたすことである。
* $$\forall x, y \in G_1, \psi(x) \psi(y) = \psi(xy) $$
* ψは全単写
一つ目の条件 $$ \psi(x) \psi(y) = \psi(xy) $$ は、演算子の振る舞いが同じだよ、ということを表しています。
二つ目の条件ψが全単写とは、2つの群の位数(元の数)が同じだよ、ということを表しています。
<<<
[[同型と準同型|http://proofcafe.org/k27c8/math/math/group/page/isomorphism_and_homomorphism/]]
<div class="tc-table-of-contents">
<<toc-selective-expandable '群論'>>
</div>
----
! [[群の定義|群]]
以下の三条件を満たす二項演算 $$*$$ が 集合 $$G$$ に定義されている時、組 $$(G, *)$$ を ''群'' という。
# 結合法則
# 単位元が存在する
# 逆元が存在する
また、$$G$$ の元の数のことを ''位数'' といい、 $$|G|$$ と表記する。
!! [[対称群]]
全単射写像 $$\sigma : \{ 1, 2, \dots , n \} \to \{ 1, 2, \dots , n \}$$ のことを [[(n次の)置換|対称群]] といい、このような全単射写像全体の集合 $$S_n$$ (と 写像合成の二項演算の組) のことを ''n次対称群'' という。
---
! [[群の同型写像]]
二つの群を $$(A, *), \ (B, \odot)$$ とする。 写像 $$f: A \to B$$ が次の条件を満たすとき、''群の同型写像'' という。
# $$f(u*v) = f(u) \odot f(v) $$
#* 2つの群の演算子が一対一対応する
# $$f$$ は全単射写像
#* 元の数が等しい
また、一つ目の条件だけを満たす場合は、''群の準同型写像'' という。
---
! [[部分群]]
群 $$(G,*)$$ の (空でない) 部分集合 $$H$$ が以下の条件を満たすとき、$$H$$ を $$G$$ の ''部分群'' という。
* 二項演算 $$*$$ について、結合法則が成り立ち、単位元・逆元が存在する
* 二項演算 $$*$$ が $$H$$ に関して閉じている
!! 重要な性質
* $$H$$ と $$G$$ の単位元は一致する
* $$H$$ と $$G$$ の逆元は一致する
* 部分群の判定定理
** $$H$$ は $$G$$ の部分群 $$\ \Leftrightarrow \ a * b^{-1} \in H \ \ \ \ (a, b \in H)$$
!! [[正規部分群|部分群]]
$$H \subset G , \ g \in G , \ h \in H$$ とする。
このとき、以下のいずれかを満たすとき、$$H$$ を $$G$$ の''正規部分群''といい $$H \triangleleft G$$ と表す (これらは同値なのでどれを定義としてもよい)。
# $$g H = H g$$
# $$g H g^{-1} = H$$
# $$g h g^{-1} \in H$$
---
! [[剰余類]]
群 $$G$$ の部分群を $$H$$ とする。このとき、$$g \in G$$ に対し、
: $$g H = \{ g * h \ | h \in H \} \subset G$$
を $$G$$ における $$H$$ の ''左剰余類'' といい、
: $$Hg = \{ h * g \ | h \in H \} \subset G$$
を $$G$$ における $$H$$ の ''右剰余類'' という。
!! 性質
* $$H$$ も剰余類
* 剰余類は[[同値類|関係]]
** ゆえに、異なる剰余類は共通な元を持たない
* 剰余類の濃度は全て等しい
** $$|g_i H| = |g_j H|$$
* $$G$$ が [[アーベル群|群]] の時には、 左も右も同じ。
! 剰余集合
剰余類は同値類なので、群は剰余類を使って[[同値類別|関係]]することができる。
群 $$G$$ を $$H$$ の左剰余類で類別した集合を ''左剰余集合'' といい、以下のように書く。
:$$G / H = \{ g_i H | i \in I \}$$
同様に、$$G$$ を $$H$$ で右剰余類で類別した集合を ''右剰余集合''という。
:$$G \ \backslash \ H = \{ H g_i | i \in I \}$$
----
! 剰余群 (商群)
大雑把に言うと、剰余類の集合 $$G / H$$ に次のような二項演算を追加して群にしたもの。
:$$x H * y H = xy H \in G / H \ \ \ \ (x, y \in G)$$
ただ、このような二項演算は常に定義できる訳ではなく、$$H$$ が正規部分群でなければならない。
上記の剰余集合において、$$H$$ が正規部分群である場合、''剰余群'' (あるいは ''商群'') という。
; 違う言い方
$$N$$ を $$G$$ の正規部分群とする。$$G / N = \{ g_i N | i \in I \}$$ に対して、$$(g_i N) (g_j N) = (g_i g_j N)$$ という演算を定義すると、$$G / N$$ は群となり、この群を $$G$$ の $$N$$ に関する ''剰余群'' (''商群'')という。
; well-defined
https://www.youtube.com/watch?v=HuxW6GqPXJQ
---
! 準同型定理
*[[金融日記|http://blog.livedoor.jp/kazu_fujisawa/]]
*[[先物日記|http://akiyama.net-trader.jp/diary/]]
* [[lecture7.ppt | http://www.logopt.com/mikiokubo/lecture/lecture7.ppt]]
* [[lecture8.ppt | http://www.logopt.com/mikiokubo/lecture/lecture8.ppt]]
; ~Bellman-Ford法
* [[lecture6.ppt | http://www.logopt.com/mikiokubo/lecture/lecture6.ppt]]
* [[bellman-ford-screen.pdf | http://www.cs.rpi.edu/~musser/gp/algorithm-concepts/bellman-ford-screen.pdf]]
* [[week12.pdf | http://www.ecf.utoronto.ca/apsc/courses/ece242s/2004spring/section2/week12.pdf]]
; ~Warshall-Floyd法
* [[Warshall-Floyd|http://www.infor.kanazawa-it.ac.jp/~koblab/home/d1504310/acm/dochtml/48_.html]]
* [[C2_FW.pdf|http://www.lab2.kuis.kyoto-u.ac.jp/~itohiro/lecture/C2_FW.pdf]]
* [[notes_8.pdf | http://www.mcs.vuw.ac.nz/courses/MATH214/2007T1/Notes/notes_8.pdf]]
* [[WF-GT.pdf | http://www.lab2.kuis.kyoto-u.ac.jp/~itohiro/lecture/WF-GT.pdf]]
[[内積]] は、[[対称双線型形式|双線形性]] の双線形写像である。
そのため、内積を写像 g とすると、g は二階のテンソルで表現できる。
:$$\displaystyle u \cdot v = g(u, v) = u^T g v = \sum_{i} \sum_{j} g_{ij} u^i v^j$$
そして、このテンソルとして表現した写像 g を、''計量テンソル'' (基本テンソル) という。
また、「内積はベクトルの対をスカラーに写す写像」であることと 「[[双対空間]]の定義」から、
* u,v が反変ベクトルであれば、g は共変テンソル
* u,v が共変ベクトルであれば、g は反変テンソル
になる。
----
! 座標系による違い
!! 正規直交基底の場合
g の u, v に [[正規直交基底|直線座標系]] の成分を代入した場合、
:$$\displaystyle g(e_i, e_j) = \sum_{i} \sum_{j} g_{ij} x^i x^j = \begin{cases} 1 \ \ \ \ \ \ \ \ (i = j)\\ 0 \ \ \ \ \ \ \ \ (i \neq j) \end{cases}$$
である。つまり、
:$$g_{ij} = \begin{cases} 1 \ \ \ \ \ \ \ \ (i = j) \\ 0 \ \ \ \ \ \ \ \ (i \neq j) \end{cases}$$
である。
!! 一般的な座標の場合
正規直交座標以外の基底 e' においても、内積の線形性から、
:$$\displaystyle u \cdot v = \sum_i \sum_j u^i v^i (e'_i \cdot e'_j)$$
は成り立つ。この式の各項を最初の式と比べると、
:$$e'_i \cdot e'_j = g_{ij}$$
であることが分かる。
- - - - -
!! 曲線座標の基底の場合
曲線座標においても計量テンソルを考えることができるが、基底が位置によって異なることを考慮する必要がある。自然基底を位置の関数だと考えれば、''曲線座標における (反変ベクトルの対に対する) 計量テンソルは、2階の共変テンソル場と考えることができる''。
---
----
そこで、内積を写像を g とすると、g は [[縮約]] を用いて次のように表せる。
$$g_{ij} ( e^i \otimes e^j)$$
---
$$g_{ij} = e_i \cdot e_j$$
''計量テンソルは 2 階の共変テンソルの変換則に従う。''
---
http://eman-physics.net/relativity/metric.html
[[内積]] を備えたベクトル空間を、''計量ベクトル空間'' という。
内積が入ることで、ノルムや角度が定義できるようになる。
----
! ノルム
内積を用いて、以下のように定義される。
$$ \|u\| = \sqrt{(a,a)} \geq 0 $$
! 角度・直交性
! 圏の定義
''圏'' (''category'') は以下の要素からなる。
|要素 |意味|補足|h
|$$\mathrm{ob} (C)$$ |''対象'' (object) を要素に持つクラス |クラスは集合みたいなものだが、集合でないものも含む |
|$$\mathrm{mor} (C)$$|''射'' (''morphism'') を要素に持つクラス |$$f: a \to b$$ や $$\hom(a,b)$$ は 対象 a から 対象 b への射を意味する|
|~|~|各射には ''恒等射'' が必ず存在する |
|$$\mathrm{dom} : \ \mathrm{mor}(C) \to \mathrm{ob}(C)$$ |射 mor(C) の ''始域'' (domain) が得られる写像 |$$f: a \to b$$ とした時 $$\mathrm{dom}(f) = a$$ |
|$$\mathrm{com} : \ \mathrm{mor}(C) \to \mathrm{ob}(C)$$ |射 mor(C) の ''終域'' (domain) が得られる写像 |$$f: a \to b$$ とした時 $$\mathrm{com}(f) = b$$ |
|$$\circ : \hom(X,Y) \times \hom(Y,Z) \to \hom(X,Z)$$ |(射の) ''合成'' (composite) |''結合律'' を必ず満たさなければならない |
!! ''結合律'' (associativity)
:$$f: A \to B, g: B \to C, h: C \to D$$ とすると、 $$f \circ (g \circ h) = (f \circ g) \circ h$$
!! ''恒等射'' (identity)
任意の射 $$f \in \mathrm{mor}(c)$$ に対し、$$X = \mathrm{dom}(f), \ Y = \mathrm{com}(f)$$ とする。
このとき、次の関係が成り立つ射 $$1_X$$ を ''恒等射'' という ($$\mathrm{id}_X$$ と書くこともある)。
: $$f \circ 1_X = f = 1_X \circ f$$
!! クラス
<<<
(1.5). 圏の理論においてはその性格上, 集合全体のなす族のような概念を扱わざるを得ない。そのため数学基礎論で問題になるような議論が必要になるが, ここではそのような議論は省略することにする。ただし何も用語を用意しないと記述が面倒になるので, 集合全体のなす集まりや群全体のなす集まりなどを表す言葉として''クラス''という用語を使用する。集合全体からなるクラスを考えればわかるように, クラス自身は集合とは限ら
ない。
<<<
https://www.math.s.chiba-u.ac.jp/~matsu/math/category.pdf
!! その他
$$X, Y \in \mathrm{ob}(C)$$ に対して、$$\mathrm{dom}(f) = X , \mathrm{com}(f) = Y$$ となる $$f \in \mathrm{mor}(C)$$ 全体のなすクラスを $$\mathrm{hom}_C (X,Y)$$ といった書き方をする。
---
! 関連する定義
!! 空圏
Ob(C) もMor(C) も空集合である圏を ''空圏'' (empty category) という。
!! 小圏
__Ob(C) やMor(C) が集合である場合__、C を ''小圏'' (small category) という。また,任意のX, Y ∈ C に対しHom(X, Y ) が集合である場合, C は ''局所小'' (locally small) であるという。
!! 同型
$$f : X \to Y$$ が ''同型射'' (isomorphism) であるとは, $$f$$ の ''逆射'' (inverse), 即ち $$g : Y \to X$$ なる射で, f ◦ g = 1Y , g ◦ f = 1X なるものが存在することである。またこのときX, Y は ''同型'' である(isomorphic) という。
!! 双対圏
射の向きを逆にした圏を ''双対圏'' (dual category) ないしは ''逆圏'' (opposite category) という。
- - -
; 参考
* https://www.math.s.chiba-u.ac.jp/~matsu/math/category.pdf
* https://en.wikipedia.org/wiki/Category_(mathematics)
----
<<tag "圏論">>
! [[圏]]
圏 (category) は、''対象''、''射''、''合成''、''恒等射'' から成る代数的構造であり、''交換方法'' と ''結合法則'' を満たす。
---
* [[第1回「ベーシック圏論」定義1.1.1(圏の定義)~例1.1.5(Setの同型射) - YouTube|https://www.youtube.com/watch?v=aK7ok-bNUww&list=PLoL1AR075Obcn58-ETTduWwMpp0q2LczR]]
* https://www.youtube.com/watch?v=D2GU4cmm3Ys
* https://qiita.com/norkron/items/f90d851daf05a2efa567
検出した領域のプロパティ (Region Properties) について。
! List of Properties
# Aspect Ratio
# Extent
# Solidity
# Circularity
# Equivalent Diameter
# Orientation
# Mask and Pixel Points
# Maximum Value, Minimum Value and their locations
# Mean Color or Mean Intensity
# Extreme Points
;参考ページ
* [[Contour Properties — OpenCV-Python Tutorials 1 documentation|https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_contours/py_contour_properties/py_contour_properties.html]]
* [[図形の輪郭座標と面積から円形度を計算する · kamatari|https://kamatari.github.io/2014/10/07/calculate-degree-of-circularity/]]
* https://www.materials-talks.jp/wp-particle-analysis-basic-guide-3-3-html/
----
! Detailed Explanation
!! 1. Aspect Ratio
It is the ratio of width to height of bounding rect of the object.
:$$= \dfrac{Width}{Height} $$
```python
x,y,w,h = cv2.boundingRect(cnt)
aspect_ratio = float(w)/h
```
!! 2. Extent
Extent is the ratio of contour area to bounding rectangle area.
:$$= \dfrac{Object \ Area}{Bounding \ Rectangle \ Area} $$
```python
area = cv2.contourArea(cnt)
x,y,w,h = cv2.boundingRect(cnt)
rect_area = w*h
extent = float(area)/rect_area
```
!! 3. Solidity (面積包絡度)
:$$ = \dfrac{Contour \ Area}{Convex \ Hull \ Area }$$
```python
area = cv2.contourArea(cnt)
hull = cv2.convexHull(cnt)
hull_area = cv2.contourArea(hull)
solidity = float(area)/hull_area
```
;凸包(convex hull):
与えられた点をすべて包含する最小の凸多角形(凸多面体)のこと.
!! 4. Circularity
:$$ = \dfrac{4\pi \times Object \ Area}{(Perimeter)^2 }$$
```python
arc = cv2.arcLength(c, True)
circularity = 4 * np.pi * area / (arc**2)
```
; ブログ
* [[大関日馬富士ブログ「真っ向勝負!」|http://blog.goo.ne.jp/harumafuji/]]
; ほか
* [[トゥバ共和国関連サイト|http://www.geocities.jp/mongol_link/Tuva.html]]
* [[(社)落語協会 プロフィール|http://www.rakugo-kyokai.or.jp/Profiles.aspx?code=8]]
* [[「沖縄熱水海底下生命圏掘削」2010 特設ページ|http://www.jamstec.go.jp/okinawa2010/j/?jn]]
----
; 後で読むかも...
* ソースコードリーディング
** [[ソース・コードの読み方、教えます。【導入編】 - ITアーキテクト [IT Architect] | http://www.itarchitect.jp/beginners/-/39361.html]]
* [[bear.mini : Wireshark 用 Lua プラグインの書き方 | http://bearmini.net/blog/View.aspx?bid=1&aid=148]]
* [[WIRESHARK - 簡単なチュートリアル - プラットフォーム | http://openmaniak.com/ja/wireshark_use.php]]
* [[遠い海: lispとrubyとpythonと その5 例外処理(lisp) | http://faroffsea.blogspot.com/2008/12/lisprubypython5-lisp.html ]]
* [[はじめてのカーネル・ソース---目次 - はじめてのカーネル・ソース:ITpro|http://itpro.nikkeibp.co.jp/article/COLUMN/20071023/285284/?ST=oss]]
----
; ちょっと気になった
* [[革新的発明と製品情報 » 2009 » 4月|http://www.j-tokkyo.com/2009/04/page/3]]
* [[立川談志と柳家小三治(広瀬和生:第1回)|http://waga.nikkei.co.jp/enjoy/play.aspx?i=MMWAe4000002102008]]
* [[Life is beautiful: UIE Japan、今度は「組み込みエンジニア」募集 | http://satoshi.blogs.com/life/2006/04/uie_japan.html ]]
* [[ミクロ・マクロ・時々風景 : ビタミンCナトリウム塩|http://mmlnp.exblog.jp/11629920/]]
* [[POLAR BEAR BLOG: 第二次世界大戦中のライフハック「仕事を進まなくさせる8ヵ条」|http://akihitok.typepad.jp/blog/2008/06/8-411f.html]]
* [[なぜ関数プログラミングは重要か|http://www.sampou.org/haskell/article/whyfp.html]]
* [[FBI暗号解読捜査官の憂鬱(その1) « WIRED.jp 世界最強の「テクノ」ジャーナリズム | http://wired.jp/2011/07/19/fbi%E6%9A%97%E5%8F%B7%E8%A7%A3%E8%AA%AD%E6%8D%9C%E6%9F%BB%E5%AE%98%E3%81%AE%E6%86%82%E9%AC%B1%E3%81%9D%E3%81%AE1/]]
* [[なぜ,/var や /etc が /etc や /cfg というディレクトリ名ではないのか?| http://d.hatena.ne.jp/ytakano/20100715/1279219401]]
* [[対数正規分布の仕組み - 悪魔の妄想|http://d.hatena.ne.jp/rikunora/20100418/p1]]
* [[「電力網の再発明」を狙う、少壮の天才女性科学者|http://wired.jp/2012/07/05/danielle-fong/]]
----
; 割とどうでもよい
* [[見積もり2億円のIP電話を820万円で構築した秋田県大館市から学べること - 記者の眼:ITpro | http://itpro.nikkeibp.co.jp/article/OPINION/20090209/324420/?ST=oss&P=1]]
* [[Netscapeをダウンロードする方法 | http://blog.magical-remix.net/kotalog/archives/134]]
* [[Gmailにとっても便利な「送信取り消し機能」が! - IDEA*IDEA ~ 百式管理人のライフハックブログ | http://www.ideaxidea.com/archives/2009/03/gmail_send_undo.html]]
* [[rplaca関数とrplacd関数 - 2^{¥aleph_0} = ¥aleph_1 | http://d.hatena.ne.jp/pgf2/20080117/1200560342 ]]
* [[The Sheep Market|http://www.thesheepmarket.com/]]
* [[世界飛び地領土研究会(飛地)|http://www.geocities.co.jp/SilkRoad-Lake/2917/]]
* [[流体と固体の境にある「流れる砂」 ハイスピード映像 - (*゚∀゚)ゞカガクニュース隊|http://scienceplus2ch.blog108.fc2.com/blog-entry-565.html]]
* [[アップルのロゴの美しさの秘密 - DTP Transit | http://www.dtp-transit.jp/misc/post_1046.html]]
* [[システムの納期とは確率分布だ - Publickey|http://www.publickey1.jp/blog/09/post_56.html]]
* [[「似た」フォントって(2) : デザインの現場 小林章の「タイプディレクターの眼」 | http://blog.excite.co.jp/t-director/10585955/"]]
http://www.thewildernessdowntown.com/
* [[INAX 種子のデザイン‐旅するかたち‐ 展Seed Design | http://inax.lixil.co.jp/gallery/exhibition/detail/d_001949.html]]
* [[神田淡路町に「錯覚美術館」-数学で導き出した「錯覚」を体験 - 神田経済新聞 | http://kanda.keizai.biz/headline/85/]]
; 1. 線形性
$$\displaystyle \int (h f(x) + k g(x)) dx = h \int f(x) dx + k \int g(x) dx$$
; 2. 置換積分法
$$\displaystyle \int f(x) dx = \int f( g(t) ) \dfrac{dx}{dt} dt$$
; 3. 部分積分法
$$\displaystyle \int f(x) g'(x) dx = f(x) g(x) - \int f'(x) g(x) dx $$
---
;べき関数
・ $$\displaystyle \int x^a dx = \dfrac{1}{a + 1} x^{a+1} $$ (a ≠ -1)
; 対数関数
・ $$\displaystyle \int \dfrac{1}{x} dx = \log|x| $$
・ $$\displaystyle \int \log x dx = x \log x - x $$
; 三角関数
・ $$\displaystyle \int \cos ax dx = \dfrac{1}{a} \sin ax $$
・ $$\displaystyle \int \sin ax dx = - \dfrac{1}{a} \cos ax $$
<<<
方向を変えないベクトルはあるか?
その倍率は?
<<<
https://www.youtube.com/watch?v=_TgBFx0jwRQ
----
! 定義
<<<
線形空間 V(有限次元とは限らない)上の線形変換 A に対して、次の方程式
:$$\displaystyle A{\boldsymbol {x}}=\lambda {\boldsymbol {x}}$$
満たす零ベクトルでないベクトル x とスカラー λ が存在するとき、x を A の固有ベクトル(右固有ベクトル)、λ を A の固有値と呼ぶ。
<<<
https://ja.wikipedia.org/wiki/%E5%9B%BA%E6%9C%89%E5%80%A4
! 屈折率 (Refractive index)
屈折率n は、真空中の光速度c を媒質中の光速度v(より正確には位相速度)で割った値で表される。
:$$n = \dfrac{c}{v}$$
! スネルの法則 (Snell's law)
<<<
媒質Aにおける波の速度を v,,A,, 、媒質Bにおける波の速度を v,,B,, 、媒質Aから媒質Bへの入射角(またはBからAへの屈折角)を θ,,A,,、媒質Bから媒質Aへの入射角(またはAからBへの屈折角)を θ,,B,,とすると、以下の関係が成立する。
:$$\displaystyle {\sin \theta _{\mathrm {A} } \over {\sin \theta _{\mathrm {B} }}}={v_{\mathrm {A} } \over {v_{\mathrm {B} }}}$$
<<<
! 全反射 (Total internal reflection)
----
! 反射
!! フレネルの式
ざっくり言うと、定積分の条件であった
* 積分区間が有界閉区間
* 被積分関数が有界な関数
を満たさない場合も扱える、拡張した意味の積分。
---
! 定義
!! 非有界な区間
非有界な区間 $$[a,\infty)$$ 上の関数 f の ''広義積分'' は、つぎのように定義する。
$$\displaystyle \int_a^{\infty} f(x) dx = \lim_{t \to \infty} \int_a^{t} f(x) dx $$
$$(- \infty,\infty)$$ の場合は、適宜な点 c で2つの半開区間に分ける。
$$\displaystyle \int_{-\infty}^{\infty} f(x) dx = \int_{-\infty}^c f(x) dx + \int_c^{\infty} f(x) dx$$
!! 有界な半開区間
有界な半開区間 $$(a,b], [a,b)$$ 上の関数の場合は、それぞれ、
$$\displaystyle \int_a^b f(x)dx = \lim_{t \to a+0} \int_t^b f(x)dx $$
$$\displaystyle \int_a^b f(x)dx = \lim_{t \to b-0} \int_a^t f(x)dx $$
と定義する。
---
! ガウス積分
ガウス関数 $$e^{-ax^2}$$ の実数全体での広義積分のことを ''ガウス積分'' という。
ガウス積分では、 a > 0 のとき、次の式が成り立つ。
$$\displaystyle \int_{-\infty}^{\infty} e^{-ax^2} dx = \sqrt{\dfrac{\pi}{a}} $$
!! 証明
$$\displaystyle I = \int_{-\infty}^{\infty} e^{-ax^2} dx$$ とおく。
$$\displaystyle I^2 = \int_{-\infty}^{\infty} e^{-ax^2} dx \int_{-\infty}^{\infty} e^{-ay^2} dy = \int_{-\infty}^{\infty} e^{-a(x^2 + y^2)} dx$$
$$x = r \cos \theta, y = r \sin \theta $$ と置換すると、
$$\displaystyle I^2 = \int_0^{\infty} \int_0^{2\pi} e^{-ar^2} r d\theta dr = 2 \pi \int_0^{\infty} e^{-ar^2} dr = \dfrac{\pi}{a}$$
* https://mathtrain.jp/gauss
* https://phys-and-program.com/entry/gaussintegration
---
! ガンマ関数
$$\displaystyle \Gamma(p) = \int_0^{\infty} e^{-x} x^{p-1} dx$$ $$(p > 0)$$
!! 性質・特徴
* 積分される関数が常に正の値を取っているので、任意の p に対して $$\Gamma(p) > 0$$
* 階乗 n! の拡張になっている
** $$\Gamma(1) = 1 $$
** $$\Gamma(p+1) = p \Gamma(p) $$
https://lecture.ecc.u-tokyo.ac.jp/~nkiyono/2006/miya-gamma.pdf
<<timeline limit:1000 format:YYYY/MM/DD>>
<<tag "行列">>
<<<
行列とは何なのかといわれると、いろいろな表現の仕方があるのですが、 大まかに言うと以下の2つになります。
* 行列 = 1次方程式を表現するための便法、数の一般化
* 行列 = 線形写像
<<<
https://ufcpp.net/study/math/linear/matrix/
; 特徴・性質
# 行列の和とスカラー倍は [[ベクトル空間の公理|ベクトル空間]] を満たす。
# 行列は、1階反変1階共変テンソル である
# 行列は、代数 (環 + スカラー倍) を構成する。
# ベクトルの線形写像は、行列で表すことができる
# ベクトルの線形写像の合成写像は、行列の積で表すことができる。
----
! 大まかな定義
:$$ A = \begin{pmatrix} a_{11} & a_{12} & \ldots & a_{1n} \\ a_{21} & a_{22} & \ldots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \ldots & a_{mn} \end{pmatrix} $$
* ''m''行''n''列の行列 と言った場合、縦に''m''個、横に''n''個の行列を指す。
* 横書き文化から来た言葉なので、横に1列に並んだ数字を1行と数える、と考える。
** 行 ・・・ row
** 列 ・・・ col
[[線形代数I/要点/2章A-行列 - ShigekawaLab|http://dora.bk.tsukuba.ac.jp/~takeuchi/?%E7%B7%9A%E5%BD%A2%E4%BB%A3%E6%95%B0%EF%BC%A9%2F%E8%A6%81%E7%82%B9%2F%EF%BC%92%E7%AB%A0A-%E8%A1%8C%E5%88%97]]
!! サンプル
3行4列の行列 (row=3, col=4)
| 1行1列 | 1行2列 | 1行3列 | 1行4列 |
| 2行1列 | 2行2列 | 2行3列 | 2行4列 |
| 3行1列 | 3行2列 | 3行3列 | 3行4列 |
---
! [[行列の基本演算]]
!! 和
:$$ \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} + \begin{pmatrix} 5 & 6 \\ 7 & 8 \end{pmatrix} = \begin{pmatrix} 1 + 5 & 2 + 6 \\ 3 + 7 & 4 + 8 \end{pmatrix} = \begin{pmatrix} 6 & 8 \\ 10 & 12 \end{pmatrix} $$
!! スカラー倍
:$$ 5 \cdot \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} = \begin{pmatrix} 5 & 10 \\ 15 & 20 \end{pmatrix} $$
!! 積
交換法則は成り立たない。
:$$ \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} \begin{pmatrix} 5 & 6 \\ 7 & 8 \end{pmatrix} = \begin{pmatrix} 1 \cdot 5 + 2 \cdot 7 & 1 \cdot 6 + 2 \cdot 8 \\ 3 \cdot 5 + 4 \cdot 7 & 3 \cdot 6 + 4 \cdot 8 \end{pmatrix} = \begin{pmatrix} 19 & 22 \\ 43 & 50 \end{pmatrix} $$
!! Frobenius inner product
https://en.wikipedia.org/wiki/Frobenius_inner_product
- - - - - - - - - - - - - - - - - - - - - - - - -
! 計算法則
!! 和とスカラー倍
# $$(A+B) + C = A + (B+C)$$
# $$A+B = B+A$$
# $$O+A = A$$
# $$A + (-A) = (-A) + A = O$$
# $$\beta (\alpha A) = (\beta \alpha) A$$
# $$(\alpha + \beta)A = \alpha A + \beta$$
# $$\alpha (A + B) = \alpha A + \alpha B$$
# $$1A = A$$
!! 積
# $$C(BA) = (CB)A$$
# $$B(\alpha A) = (\alpha B)A = \alpha (BA)$$
# $$B (A_1 + A_2) = B A_1 + B A_2$$
# $$(B_1 + B_2) A = B_1 A + B_2 A$$
---
! [[基本変形|行列の基本変形]]
!! 行基本変形
「連立方程式の計算での加減法」に対応する操作。
# ある行を何倍かする。 (ただし、0倍することは許さないものとする)
# ある二つの行を入れ替える。
# ある行に別な行の何倍かを足す。
!! 列基本変形
---
! [[基本的な行列]]
!! ゼロ行列
全ての成分が 0 である行列。行列の和の [[単位元|群]] となる。
$$A + O = O + A = A$$
!! 転置行列
成分を対角線で折り返した行列。正方行列でなくても定義できる。
行列の A の各成分を a,,ij,, とすると、転置行列 A^^T^^ の各成分は a,,ji,, になる。
!! 正方行列
行数と列数が同じである行列。
!! 対角行列・三角行列
* ''対角行列'' : 対角成分以外が 0 の正方行列
* ''上三角行列'' : 対角成分より左下にある成分が全て 0 である正方行列
* ''下三角行列'' : 対角成分より右上にある成分が全て 0 である正方行列
!! 単位行列
対角成分だけが 1 で残りは 0 の正方行列。式では、 $$E$$ または $$I$$ と書かれる。
なお、「''単位行列はベクトルの恒等写像''」であると考えることができ、正方行列だけを扱う場合には、単位元になる。
* $$AI = IA = A$$
!! 逆行列
n 次正方行列 $$A$$ に対して $$\ \ A^{-1} \cdot A = A \cdot A^{-1} = I $$ となる n次正方行列 $$A^{-1}$$ を、 ''Aの逆行列'' という。
行列をベクトルの線形写像だと考えれば、逆行列は 逆写像 にあたる。
!! 直交行列
転置行列と逆行列が等しくなる正方行列のこと。
:$$A^{T} = A^{-1}$$
直交行列の場合、元の行列と転置行列の積は、単位行列になる。
:$$A^{T} A = A^{-1} A = I$$
---
! [[線形写像としての行列]]
数ベクトル空間から数ベクトル空間への線形写像 $$f: K^m \to K^n$$ は、n行m列行列 $$A$$ を用いて、次のように表すことができる(ベクトルは縦ベクトルで表す必要がある)。
:$$f(x) = A x = \begin{pmatrix} a_{11} & a_{12} & \ldots & a_{1m} \\ a_{21} & a_{22} & \ldots & a_{2m} \\ \vdots & \vdots & \ddots & \vdots \\ a_{n1} & a_{n2} & \ldots & a_{nm} \end{pmatrix} \left( \begin{array}{c} x_1 \\ x_2 \\ \vdots \\ x_m \end{array} \right)$$
また、2つの線形写像 $$f: K^l \to K^m, g: K^m \to K^n$$ を表す行列をそれぞれ $$A, B$$ とすると、合成写像 $$f \circ g: K^l \to K^n$$ は、行列の積 $$BA$$ で表すことができる。
$$(g \circ f) (x) = g(f(x)) = B(Ax) = (BA)x$$
つまり、行列の積は、線形写像の合成写像と考えることができる。
! [[双対空間]]
ベクトル空間 $$V$$ を縦ベクトルで表すと、双対空間 $$V^*$$ は横ベクトルで表せる。
!! 反変ベクトル・共変ベクトル
厳密なルールがある訳ではなさそうだが、反変ベクトルは縦ベクトルで、共変ベクトルは横ベクトルで表されることが多い。この場合、縮約を行列の積で表現できる。
:$$ \begin{pmatrix} a_1 \cdots a_m \end{pmatrix} \begin{pmatrix} x^1 \\ \vdots \\ x^m \end{pmatrix}$$
!! 2階のテンソルの行列表記
反変ベクトルを縦ベクトルとした場合、反変ベクトルの線形な座標変換は、行列を左から掛けることで表せる。
$$e_i = \begin{pmatrix} e_1 \\ e_2 \\ \vdots \\ e_n \end{pmatrix}= \begin{pmatrix} {a^1}_1 & {a^1}_2 & \ldots & {a^1}_m \\ a_{21} & a_{22} & \ldots & a_{2m} \\ \vdots & \vdots & \ddots & \vdots \\ a_{n1} & a_{n2} & \ldots & a_{nm} \end{pmatrix} \left( \begin{array}{c} x^1 \\ x^2 \\ \vdots \\ x^m \end{array} \right)$$
2階のテンソルを行列表記で表すことがある。ただし、直交しない座標空間では、行列は一階反変一階共変テンソルであることに注意。
$$\begin{pmatrix} e_{1} \otimes e_{1} & e_{1} \otimes e_{2} & \ldots & e_{1} \otimes e_{m} \\ e_{2} \otimes e_{1} & e_{2} \otimes e_{2} & \ldots & e_{2} \otimes e_{m} \\ \vdots & \vdots & \ddots & \vdots \\ e_{n} \otimes e_{1} & e_{n} \otimes e_{2} & \ldots & e_{n} \otimes e_{m} \end{pmatrix} $$
----
<<tabs "基本的な行列 行列の基本変形 R/データ型/行列" "基本的な行列" "$:/state/tab1">>
----
; 高さ・幅との対応関係
* 行数 (row) ・・・ 高さ (height)
* 列数 (col) ・・・ 幅 (width)
; 行ベクトルと列ベクトル
1行だけからなる行列のことを、 ''行ベクトル'' ともいう
1列だけからなる行列のことを、 ''列ベクトル'' ともいう
; 内積
ベクトルの内積は、行ベクトル と 列ベクトル の内積で表現可能
; ベクトルの転置
* n次元列ベクトル の転置は、 n次元行ベクトル (逆も成り立つ)
* 転置を2 度繰り返すと、元に戻る
** ''t(tA) = A''
* http://web.econ.keio.ac.jp/staff/tose/cours/2005/lin/trans.pdf
! 和
行列 A と 行列 B の和は、各成分が次の式で表される行列 C を返す演算である。なお、行列 A・B は、行数・列数が同じでなければならない。
$$\ \ c_{ij} = a_{ij} + b_{ij} $$
より具体的に書くと、次のようになる。
$$\ \ \begin{pmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{pmatrix} \begin{pmatrix} b_{11} & b_{12} \\ b_{21} & b_{22} \end{pmatrix} = \begin{pmatrix} a_{11} + b_{11} & a_{12} + b_{12} \\ a_{21} + b_{21} & a_{22} + b_{22} \end{pmatrix} $$
!! 計算の例
$$ \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} +
\begin{pmatrix} 5 & 6 \\ 7 & 8 \end{pmatrix}
=
\begin{pmatrix} 1 + 5 & 2 + 6 \\ 3 + 7 & 4 + 8 \end{pmatrix}
=
\begin{pmatrix} 6 & 8 \\ 10 & 12 \end{pmatrix}
$$
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
! スカラー倍
$$ 5 \cdot \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}
=
\begin{pmatrix} 5 & 10 \\ 15 & 20 \end{pmatrix}
$$
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
! 積
i × k 行列 A と k × j 行列 B の積は、各成分が次の式で表される i × j 行列 C を返す演算である。なお、''行列の積では、交換法則が成り立たない''。
$$\displaystyle \ \ c_{ij} = \sum_{n=1}^k a_{in} b_{nj}$$
より具体的に書くと、次のようになる。
$$\ \ \begin{pmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{pmatrix} \begin{pmatrix} b_{11} & b_{12} \\ b_{21} & b_{22} \end{pmatrix} = \begin{pmatrix} a_{11} \cdot b_{11} + a_{12} \cdot b_{21} & a_{11} \cdot b_{12} + a_{12} \cdot b_{22} \\ a_{21} \cdot b_{11} + a_{22} \cdot b_{21} & a_{21} \cdot b_{12} + a_{22} \cdot b_{22} \end{pmatrix} $$
!! 計算の例
以下のように計算する。
$$ \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}
\begin{pmatrix} 5 & 6 \\ 7 & 8 \end{pmatrix}
=
\begin{pmatrix}
\begin{pmatrix} 1 2 \end{pmatrix} \begin{pmatrix} 5 \\ 7 \end{pmatrix} &
\begin{pmatrix} 1 2 \end{pmatrix} \begin{pmatrix} 6 \\ 8 \end{pmatrix} \\
\begin{pmatrix} 3 4 \end{pmatrix} \begin{pmatrix} 5 \\ 7 \end{pmatrix} &
\begin{pmatrix} 3 4 \end{pmatrix} \begin{pmatrix} 6 \\ 8 \end{pmatrix}
\end{pmatrix}
=
\begin{pmatrix}
1 \cdot 5 + 2 \cdot 7 & 1 \cdot 6 + 2 \cdot 8 \\
3 \cdot 5 + 4 \cdot 7 & 3 \cdot 6 + 4 \cdot 8
\end{pmatrix}
=
\begin{pmatrix} 19 & 22 \\ 43 & 50 \end{pmatrix} $$
---
! 計算法則
!! 和とスカラー倍
$$A, B, C$$ 行列。 $$O$$ はゼロ行列。 $$\alpha , \beta$$ はスカラーとする。
# $$(A+B) + C = A + (B+C)$$
# $$A+B = B+A$$
# $$O+A = A$$
# $$A + (-A) = (-A) + A = O$$
# $$\beta (\alpha A) = (\beta \alpha) A$$
# $$(\alpha + \beta)A = \alpha A + \beta$$
# $$\alpha (A + B) = \alpha A + \alpha B$$
# $$1A = A$$
!! 積
# $$C(BA) = (CB)A$$
# $$B(\alpha A) = (\alpha B)A = \alpha (BA)$$
# $$B (A_1 + A_2) = B A_1 + B A_2$$
# $$(B_1 + B_2) A = B_1 A + B_2 A$$
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; 参考
[[「行列」ってなに? おもしろいの?|https://lecture.ecc.u-tokyo.ac.jp/~nkiyono/gocho/omiyage2015.pdf]]
! 行基本変形
# ある行を何倍かする。 (ただし、0倍することは許さないものとする)
# ある二つの行を入れ替える。
# ある行に別な行の何倍かを足す。
!! 用途
* 「行基本変形」は、「加減法」と同じことをしている
** 連立方程式の計算
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! 変形の意味
行基本変形は [[n次の基本行列|基本的な行列]] を左からかけることに対応しています。
!!! ''1. ある行を何倍かする''
単位行列の ii 成分を c とした行列 $$P_n(i;c)$$ を左からかけることに対応しています。
例えば、
$$ P_3(2; 6) = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 6 & 0 \\ 0 & 0 & 1 \end{pmatrix} $$
を左からかけると、2行目が6倍される。
$$ \begin{pmatrix} 1 & 0 & 0 \\ 0 & 6 & 0 \\ 0 & 0 & 1 \end{pmatrix} \cdot
\begin{pmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \end{pmatrix}
=
\begin{pmatrix}
a_{11}+0+0 & a_{12}+0+0 & a_{13}+0+0 \\
0+6 \cdot a_{21}+0 & 0+6 \cdot a_{22}+0 & 0+6 \cdot a_{23}+0 \\
0+0+a_{31} & 0+0+a_{32}& 0+0+a_{33}
\end{pmatrix} $$
!!! ''2. 行の入れ替え''
単位行列の i 行と j 行を交換した行列 $$P_n(i,j)$$ を左からかけることに対応しています。
例えば、
$$ P_3(2,3) = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 0 & 1 \\ 0 & 1 & 0 \end{pmatrix} $$
を左からかけると、2行目と3行目が交換される。
$$ \begin{pmatrix} 1 & 0 & 0 \\ 0 & 0 & 1 \\ 0 & 1 & 0 \end{pmatrix} \cdot
\begin{pmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \end{pmatrix}
=
\begin{pmatrix}
a_{11}+0+0 & a_{12}+0+0 & a_{13}+0+0 \\
0+0+a_{31} & 0+0+a_{32} & 0+0+a_{33} \\
0+a_{21}+0 & 0+a_{22}+0 & 0+a_{23}+0
\end{pmatrix} $$
!!! ''3. ある行に別な行の何倍かを足す。''
単位行列の ij 成分を c とした行列 $$P_n(i,j;c)$$ を左からかけることに対応しています。
$$P_n(2, 3; 6) = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 6 \\ 0 & 0 & 1 \end{pmatrix} $$
$$ \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 6 \\ 0 & 0 & 1 \end{pmatrix}
\cdot
\begin{pmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \end{pmatrix}
=
\begin{pmatrix}
a_{11}+0+0 & a_{12}+0+0 & a_{13}+0+0 \\
0+a_{21}+6 \cdot a_{31} & 0+a_{22}+6 \cdot a_{32} & 0+a_{23}+6 \cdot a_{33} \\
0+0+a_{31} & 0+0+a_{32} & 0+0+a_{33}
\end{pmatrix} $$
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[[行列の基本変形とrank,行列式の求め方|https://mathtrain.jp/kihonhenkei]]
----
! 列基本変形
# 1 つの列に 0 でない定数を掛ける.
# 2 つの列を入れ替える.
# 1 つの列の定数倍を他の列に加える.
----
基本行列が正則であることは,行列の行基本変形や列基本変形が可逆な変形で
あることと対応している.
名前とは裏腹に、行列とはだいぶ異なるもの。以下のような計算をする際に出てくる。
# 連立一次方程式の解の有無を調べる
# 逆行列を求める
# 写像適用後の(任意の次元の)体積の拡大率
! 定義
$$\displaystyle \det A = {\sum _{\sigma \in \operatorname {Aut} (n)}\!\!\!\operatorname {sgn} (\sigma )\prod _{i=1}^{n}a_{i\,\sigma (i)}}$$
!! 2 x 2 行列 の場合
$$A = \begin{pmatrix} a & b \\ c & d \end{pmatrix} $$ とすると、行列式は次のように表せる。
$$\det A = ad - bc$$
!! 3 x 3 行列 の場合
$$A = \begin{pmatrix} a & b & c \\ d & e & f \\ g & h & i \end{pmatrix} $$ とすると、行列式は次のように表せる。
$$\det A = aei + bfg + cdh - ceg - fha - ibd$$
---
! 性質
* 転置不変性
* 交代性
* 多重線形性
---
! 連立一次方程式の解の有無を調べる
連立一次方程式は、行列を使って表せる。
$$\begin{pmatrix} a_{11} & a_{12} & \ldots & a_{1m} \\ a_{21} & a_{22} & \ldots & a_{2m} \\ \vdots & \vdots & \ddots & \vdots \\ a_{n1} & a_{n2} & \ldots & a_{nm} \end{pmatrix} \left( \begin{array}{c} x_1 \\ x_2 \\ \vdots \\ x_m \end{array} \right) = \left( \begin{array}{c} b_1 \\ b_2 \\ \vdots \\ b_m \end{array} \right) $$
---
*余因子展開
! 公式
<<<
関数 $$y = f(x)$$ は点aにおいて微分可能,関数$$z=g(y)$$は点
$$b=f(a)$$において微分可能とする.このとき,合成関数 $$z=(g \circ f)(x)$$ は点aにおいて微分可能となり
:$$\dfrac{d}{dx}(g \circ f)(a) = \dfrac{d}{dy} g(b) \dfrac{d}{dx} f(a) = g'(f(a))f'(a)$$
が成り立つ.
<<<
http://www.f.waseda.jp/ksuga/2005chap12.pdf
- - - - -
二変数の場合は、話がかなり複雑になる。
* [[偏微分の合成関数]]
----
! 証明
$$y=f(x)$$ は a において微分可能だから、
$$f(x) = f(a)+ f'(a) (x-a) + \epsilon_1(x, a)$$ ''【式1】''
である。
また、$$z=g(y)$$ は $$b=f(a)$$ において微分可能だから、
$$g(y) = g(b)+ g'(b) (y-b) + \epsilon_2(y, b)$$ ''【式2】''
が成り立つ。ただし、
$$\displaystyle \lim_{x \to a} \dfrac{\epsilon_1(x, a)}{|x-a|} = 0$$ ''【式3】''
$$\displaystyle \lim_{y \to b} \dfrac{\epsilon_2(y, b)}{|y-b|} = 0$$ ''【式4】''
である。
- - - - -
したがって $$(g \circ f)(x)$$ は、''【式2】''を代入すると、
$$(g \circ f)(x) = g(f(x)) = g(b) + g'(b) (f(x) - b) + \epsilon_2(y, b) $$
となる。ここに【式1】を代入すると、
$$(g \circ f)(x) = g(b) + g'(b) (f(a)+ f'(a) (x-a) + \epsilon_1(x, a) - b) + \epsilon_2(y, b)$$
となる。さらに $$b = f(a)$$ なので、
$$(g \circ f)(x) = g(f(a)) + g'(f(a)) f'(a) (x-a) + g'(f(a)) \epsilon_1(x, a) - \epsilon_2(y, f(a))$$ ''【式5】''
となる。
- - - - -
ここで $$(g \circ f)(a) = g(f(a))$$ なので、''【式5】''は
$$ (g \circ f)(x) - (g \circ f)(a) = g'(f(a)) f'(a) (x-a) + g'(f(a)) \epsilon_1(x, a) - \epsilon_2(y, f(a))$$
と変形できる。
よって、[[微分可能の定義]] (定義2)から、
$$\displaystyle \lim_{x \to a} \left( \dfrac{g'(f(a)) \epsilon_1(x, a)}{|x-a|} - \dfrac{\epsilon_2(y, f(a))}{|x-a|} \right)= 0$$
を示せれば、証明は完了する。
- - - - -
まず、''【式3】'' より、
$$\left| g'(f(a)) \dfrac{\epsilon_1(x, a)}{|x-a|} \right| \leq | g'(f(a)) | \left| \dfrac{\epsilon_1(x, a)}{|x-a|} \right| \to 0$$ $$(x \to a)$$
である。
次に、補助関数 $$M(y)$$ を、
$$ M(y) = \{
\begin{array}{cc}
\dfrac{\epsilon_2 (y,b)}{|y -b|} & (y \neq b)\\
0& (t =b)
\end{array}
$$
とすると、 以下のことが成り立つ。
* $$\displaystyle \lim_{y \to b} M(y) = 0$$
* $$\epsilon_2 (y) = |y-b| \cdot M(y) = |f(x)-f(a)| \cdot M(f(x))$$
ここで ''【式1】'' より、
$$|f(x) - f(a)| = |f'(a) (x-a) + \epsilon_1(x, a)| \leq |f'(a)| |x-a| + |\epsilon_1(x, a)|$$
なので、
$$\dfrac{|\epsilon_2 (y)|}{|x - a|} = \dfrac{|M(f(x))|}{|x - a|} \cdot |f(x) - f(a)| \leq |M(f(x))| \cdot (|f'(a)| + \dfrac{|\epsilon_1(x,a)|}{|x-a|}) \to 0$$ $$(x \to a)$$
となる。
- - - - -
!! 参考にしたサイト
* http://nalab.mind.meiji.ac.jp/~mk/tahensuu1/tahensuu1-2013-09.pdf
----
<<<
さて、 V ⊗ V における座標変換に対して、 V^^∗^^ ⊗ V^^∗^^ の振る舞いが反変的であることが分かった。これで議論は全て終わったように思えるが、実はそうではない。2階以上のテンソルの場合、さらに混合テンソルというものが存在する。すなわち、V⊗V∗という空間を考えることができるのである。実際の計算はせずとも、偏微分係数が共変的なものと反変的なものが入り交じることになるのは、ここまでの議論で容易に想像できるだろう。テンソル積はとにかく自由な双1次形式なのだ。
実は、前回の記事でクロネッカーのδをδjiと書いていたのは、これを混合テンソルと考えていたからである。例えば双対基底の性質からϕj(ei)=δjiが成立していたが、ここでは共変テンソルeiと反変テンソルϕjからクロネッカーのδが得られるので、混合テンソルとして表現しているのだろう。
さて、そうなるとV∗⊗V
というテンソル積も考えたくなるのが人間というものだが、これは考える必要がない。なぜなら、V∗⊗V≅V⊗V∗という同型が成立するからである。この事実の証明については文献[2]を参照のこと。この同型により、テンソル積は全て共変的なものを前に、反変的なものを後ろに書くという、ある種の標準形のようなものだけを考えれば良いことが分かる。
<<<
http://peng225.hatenablog.com/entry/2017/04/23/232834
! ラグランジュ形式
位置・速度・時間 ($$q, \dot{q}, t$$) を変数とする 状態関数 ''L'' (''ラグランジアン'') を定義したうえで、$$L, q, \dot{q}, t$$ を用いて、次のような汎関数 ''S'' を定義する。
:$$\displaystyle S = \int_{t_1}^{t_2} {L(q(t), \dot{q}(t), t)} dt$$
そして、この関数を [[変分法]] を用いて、停留点で満たすべき条件を求めると、 [[オイラー・ラグランジュ方程式]] が得られる。
:$$\displaystyle \left({\frac {\partial L}{\partial q}} - {\frac {d}{dt}}{\frac {\partial L}{\partial \dot{q}}}\right) = 0$$
なお、($$q,\dot{q}$$ によって定められる) 力学的な状態は作用Sを最小にするように実現しており、これを ''最小作用の原理'' という。
<<<
時刻 t,,1,, における座標値 q,,k,,(t,,1,,) と、時刻 t,,2,, における座標値 q,,k,,(t,,2,,) が与えられたとすると、 その間での系の運動 q,,k,,(t) は「作用」と呼ばれる値(ラグランジアンの積分値として与えられる)
:$$\displaystyle S = \int_{t_1}^{t_2} {L} dt$$
を最小にするようなものとなる。
...
本来ラグランジュの運動方程式自体は作用が「最小」となることを保証しない。作用が「停留値」を取ることのみを与える。ラグランジュの運動方程式を解いて得られた軌道の近傍で小刻みに振動するような軌道を考えれば、ポテンシャルエネルギーをほとんど変えないまま運動エネルギーを増加させることがいつでも可能である。したがって、求まる停留値が極大値である可能性はない。ただもし「極小値」であったとしてもそれが真の「最小値」であるのか、についてはここまでの議論からは判然としない。
<<<
[[解析力学/ラグランジアン - 武内@筑波大|https://dora.bk.tsukuba.ac.jp/~takeuchi/?%E8%A7%A3%E6%9E%90%E5%8A%9B%E5%AD%A6%2F%E3%83%A9%E3%82%B0%E3%83%A9%E3%83%B3%E3%82%B8%E3%82%A2%E3%83%B3]]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! ニュートンの運動方程式
ラグランジアン L を、
:$$L = T - U = \dfrac{1}{2} m \dot{q}^2 - U(q) $$
とし、これを [[オイラー・ラグランジュ方程式]] に代入すると、
:$$\displaystyle \left({\frac {\partial L}{\partial q}} - {\frac {d}{dt}}{\frac {\partial L}{\partial \dot{q}}}\right) = \dfrac{\partial U}{\partial q} - m \ddot{q} = 0 $$
ニュートンの運動方程式が得られる。
<<tag>>
----
! 大まかな定義
<<<
x 軸の正の部分を原点中心に反時計回りに θ だけ回転させた半直線と単位円の交点の座標を(cosθ,sinθ) と定義する。
<<<
[[三角関数の3通りの定義とメリットデメリット|https://mathtrain.jp/sincostan]]
!! 基本的な性質
* $$\cos^2 \theta + \sin^2 \theta = 1$$
* $$\cos(-\theta) = \cos \theta $$
* $$\sin(-\theta) = - \sin \theta $$
* $$\sin(\theta \pm \frac{\pi}{2}) = \pm \cos \theta$$
* $$\cos(\theta \pm \frac{\pi}{2}) = \mp \sin \theta$$
----
! 加法定理 (addition theorem)
# $$\sin(\alpha \pm \beta) = \sin \alpha \cdot \cos \beta \pm \cos \alpha \cdot \sin \beta $$
# $$\cos(\alpha \pm \beta) = \cos \alpha \cdot \cos \beta \mp \sin \alpha \cdot \sin \beta $$
# $$\tan(\alpha \pm \beta) = \dfrac{\tan \alpha \pm \tan \beta}{1 \mp \tan \alpha \cdot \tan \beta} $$
[[加法定理の証明(一般角に対する厳密な方法)|https://mathtrain.jp/kahouteiri]]
!! 積和公式
$$\sin \alpha \cdot \cos \beta = \dfrac{1}{2} \{ \sin(\alpha + \beta) + \sin(\alpha - \beta) \}$$
$$\sin \alpha \cdot \sin \beta = \dfrac{1}{2} \{ \cos(\alpha - \beta) - \cos(\alpha + \beta) \}$$
$$\cos \alpha \cdot \cos \beta = \dfrac{1}{2} \{ \cos(\alpha - \beta) + \cos(\alpha + \beta) \}$$
異なる三角関数は直交している。
$$n, m \in \mathbb{N}$$ とし、$$\delta_{nm}$$ はクロネッカーのデルタとする。
$$\displaystyle \int_0^{2\pi} \sin{(nx)} \cos{(mx)} dx = 0$$
$$\displaystyle \int_0^{2\pi} \sin{(nx)} \sin{(mx)} dx = \pi \delta_{nm}$$
$$\displaystyle \int_0^{2\pi} \cos{(nx)} \cos{(mx)} dx = \pi \delta_{nm}$$
! 記号について
三角形 ABC の各辺の長さを
* a = BC
* b = AC
* c = AB
とし、それぞれの角の角度を、
* α = ∠BAC
* β = ∠ABC
* γ = ∠ACB
とする。
----
! 正弦定理
三角形 ABC に外接する円の半径を R とすると、
$$ \dfrac{a}{sin \alpha} = \dfrac{b}{sin \beta} = \dfrac{c}{sin \gamma} = 2R $$
----
! 余弦定理
$$ a^2 = b^2 + c^2 - 2bc \cdot cos \alpha $$
!! 証明
; 角Aが90°より小さい場合
点Cから直線ABに垂線を引き、その垂線とABの交点をDとする。
∠CDB は直角なので、三角形 CDA に注目すると、辺CDと辺ADは三角比の定義から
* $$CD = AC \cdot sin \alpha = b \cdot sin \alpha $$
* $$AD = AC \cdot cos\alpha = b \cdot cos \alpha $$
と表せる。
ここで今度は、三角形 CDB に注目すると、(直角三角形なので)三平方の定理が成り立つ。
$$ BC^2 = BD^2 + CD^2 $$
$$BD = AB - AD$$ なので、上式を辺の長さを用いて表すと、
$$a^2 = (c - b \cdot cos \alpha)^2 + (b \cdot sin \alpha)^2 $$
となり、この式を整理すると、
$$a^2 = c^2 - 2bc \cdot cos \alpha + b^2 (cos^2 \alpha + sin^2 \alpha ) $$
余弦定理が得られる $$( cos^2 \alpha + sin^2 \alpha = 1 )$$。
; 角Aが90°より大きい場合
省略
- - - - -
* [[余弦定理の公式と証明|https://juken-mikata.net/how-to/mathematics/yogen.html]]
* [[余弦定理|http://w3e.kanazawa-it.ac.jp/math/category/sankakukansuu/henkan-tex.cgi?target=/math/category/sankakukansuu/yogenteiri.html]]
<<list filter [tag[仕事]]>>
https://xseek-qm.net/Matrix_complex.htm
! 指数関数 (exponential function)
!! [[expの定義]] ($$e^x$$)
$$f(x) = e^x$$ は、次のように定義される。
$$e^x = \displaystyle \lim_{n \to \infty}{ \left(1+\dfrac{x}{n} \right)^n}$$
この定義に x = 0 を代入すると、 $$f(0) = 1$$ であることが分かる。また、 $$e^x$$ の微分では、 $$f'(x) = f(x)$$ の関係が成り立つ。
!! $$a^x$$の定義
---
!! 基本的な性質
# $$a^0 = 1$$
# $$(e^x)' = e^x$$
!! 指数法則の公式
a>0 , b>0 , r , s は実数とするとき
# $$a^r a^s = a^{r+s}$$
# $$\dfrac{a^r}{a^s} = a^{r-s}$$
# $$(a^r)^s = a^{rs}$$
# $$(ab)^r =a^r b^r$$
# $$(\dfrac{a}{b})^r = \dfrac{a^r}{b^r}$$
! 対数関数
https://mathtrain.jp/category/explog
---
また、[[ネイピア数]] の定義との比較から、 $$f(1) = e $$ であることも分かる。
- - -
$$f(x) = e^x$$ は、次のように定義される。
$$\displaystyle e^x = \lim_{n \to \infty}\sum_{k=0}^n \dfrac{x^k}{k!}$$ の証明:
となり、 x = 1 を代入すると、
[[ネイピア数]] の定義と一致するので、f(1) = e であることが分かる。
- - - - -
!!! 定義の補足説明
http://www.phys.u-ryukyu.ac.jp/~maeno/sizensuugaku2015/lec5.html
http://math.cs.kitami-it.ac.jp/~kouno/kougi/jr14_10.pdf
http://tsujimotter.hatenablog.com/entry/2013/11/18/025219
一方、最初の定義は、
$$\displaystyle e^x = \displaystyle \lim_{n \to \infty} { \left(1+\dfrac{x}{n} \right)^n} = \lim_{n \to \infty} \left( 1 + \sum_{k=1}^{n} {}_n \mathrm{C} _k \dfrac{x^k}{n^k} \right) $$
$$\displaystyle = \lim_{n \to \infty} \left( 1 + {}_n \mathrm{C} _1 \dfrac{1}{n} x + {}_n \mathrm{C}_2 \dfrac{1}{n^2} x^2 + {}_n \mathrm{C}_3 \dfrac{1}{n^3} x^3 + ... \right)$$
$$\displaystyle = \lim_{n \to \infty} \left( 1 + x + \dfrac{1}{2!} (1 - \dfrac{1}{n}) x^2 + \dfrac{1}{3!} (1 - \dfrac{1}{n}) (1 - \dfrac{n-2}{n})x^3 + ...\right)$$
と展開することが可能である。
$$\displaystyle = \lim_{n \to \infty} \sum_{k=0}^n \dfrac{x^k}{k!}
$$
厳密な説明ではないが、ニュアンスはこんな感じ。
(きちんとした説明 )
$$ = 1 + x + \dfrac{1}{2!} x^2 + \dfrac{1}{3!} x^3 + ... $$
A判: 841 mm - 1189 mm:ISO, JIS
A0 841×1189
A1 594×841
A2 420×594
A3 297×420
A4 210×297
A5 148×210
B判: 1030 mm - 1456 mm :JIS
B0 1030×1456
B1 728×1030
B2 515×728
B3 364×515
B4 257×364
B5 182×257
B判: 1000 mm - 1414 mm:ISO
B0 1000×1414
B1 707×1000
B2 500×707
B3 353×500
B4 250×353
B5 176×250
(A0版の縦横比は1:√2で、面積は1平方メートルになる)
(B0版ISOはA0版の√2倍の面積、B0版JISはA0版の1.5倍の面積)
! 試行 (Random Experiment)
以下のような特徴を持つ、''結果'' を返す手続き。
# 帰ってくる結果は、''事前に予測できない''
# 帰ってくる可能性のある結果 (''標本空間'') は、分かっている
結果と標本空間は元と集合のような関係にあり、確率測度は、これを基に [[集合の操作]] を用いて導入される。
||説明 |h
|''結果 (Outcome)'' |試行の結果。事前に予測できない。 |
|''標本空間 (Sample space)'' |Outcome 全体の普遍集合 (Universal set)。空集合も含む。 |
|''事象 (Event)'' |発生しうる結果を含む集合。Sample space の部分集合になる。|
|''事象空間 (Event space)'' |標本空間の部分集合からなる[[完全加法族|加法族]] |
- - - - - - - - - - - - - - - - - - - -
; 具体例を用いた説明
<<<
Before rolling a die you do not know the result. This is an example of a ''random experiment''. In particular, a random experiment is a process by which we observe something uncertain. After the experiment, the result of the random experiment is known. An ''outcome'' is a result of a random experiment. The set of all possible outcomes is called the ''sample space''. Thus in the context of a random experiment, the sample space is our universal set.
...
When we repeat a random experiment several times, we call each one of them a ''trial''. Thus, a trial is a particular performance of a random experiment. In the example of tossing a coin, each trial will result in either heads or tails. Note that the sample space is defined based on how you define your random experiment.
...
Our goal is to assign probability to certain ''events''. For example, suppose that we would like to know the probability that the outcome of rolling a fair die is an even number. In this case, our event is the set E = {2,4,6}.
<<<
[[Random Experiments - Sample Space - Trials - Events|https://www.probabilitycourse.com/chapter1/1_3_1_random_experiments.php]]
----
! 標本空間 (Sample space)
結果(Outcome)の部分集合からなる[[完全加法族|加法族]] のことを、''標本空間'' という。
大まかに言えば、標本空間は、試行の結果全体の普遍集合 (空集合も含む)であり、S, Ω, U といった記号で表される。
標本空間 (Sample space) は、ざっくり次の3つに分けられる。
* 有限可算集合
* 無限可算集合
* 無限不可算集合
- - - - - - - - - - - - - - - - - - - -
!! Finite Sample Spaces with Equally Likely Outcomes
どの結果(outcome) の確率も同じである有限標本空間。
:$$S = \{ s_1, s_2, \dots , s_N \}, \ \mathrm{where} \ P(s_i) = P(s_j) \ \mathrm{for \ all} \ i, j \in \{ 1,2, \cdots , N\} $$
この場合には、次のようなことが成り立つ。
:$$P(s_i) = \dfrac{1}{N} $$
! 事象 (Event)
A subset of the sample space (a set of outcomes of an experiment) to which we assign a probability.
事象は [[集合]] であるため、[[集合の操作]] を適用することができる。
! 事象空間 (Event space)
厳密な説明は難しいので、具体例を使って説明する。
4面体のサイコロを一回振る場合、標本空間 $$\Omega$$ は、
:$$\Omega = \{ 1, 2, 3, 4$$ (の目が出る) $$\}$$
となるが、これでは ''「1 または 3 の目が出る確率」みたいなことを考えることができない''。
この問題を解決するために、 ''事象空間'' $$\beta$$ と呼ばれる次のような集合を定義する。
:$$\beta = \{ \emptyset, \{ 1 \}, \{ 2 \}, \{ 3 \}, \{ 4 \}, \{ 1,2 \}, \{ 1,3 \}, \{ 1,4 \}, \{ 2,3 \}, \{ 2,4 \}, \{ 3,4 \}, \{ 1,2,3 \}, \{ 1,2,4 \}, \{ 1,3,4 \}, \{ 2,3,4 \}, \{ 1,2,3,4 \} \} $$
そして、$$\beta$$ の元が事象である。
-----
---
<<<
与えらえた試行において起こり得る個々の結果を標本点(sample point)と呼び、試行において起こり得るすべての標本点からなる集合を標本空間(sample space)と呼ばれる集合として定式化します。多くの場合、標本空間をΩで表し、標本空間に属する個々の標本点をωで表します。ω∈Ωです。
標本空間は考察の対象となる試行に応じて有限集合、可算集合、非可算集合など様々な形式をとり得ます。
<<<
https://wiis.info/math/probability/probability/sample-space-and-events/
まずは、キーワードを...
; とりあえず後で、googleで調べてみる.
*理屈・屁理屈
**効率的市場仮説
**ハリー・マーコビッツの規準
**ハイリスク・ハイリターンの法則
**効率的フロンティア
**アセットアロケーション
*投資先
**インデックスファンド
***MSCI KOSUSAI
**アクティブファンド
* [[臆病者のための株入門 (文春新書): 橘 玲: 本|http://www.amazon.co.jp/%E8%87%86%E7%97%85%E8%80%85%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E6%A0%AA%E5%85%A5%E9%96%80-%E6%96%87%E6%98%A5%E6%96%B0%E6%9B%B8-%E6%A9%98-%E7%8E%B2/dp/4166605143/ref=sr_1_1?ie=UTF8&s=books&qid=1232158070&sr=8-1]]
* [[金融工学の挑戦―テクノコマース化するビジネス (中公新書): 今野 浩: 本|http://www.amazon.co.jp/%E9%87%91%E8%9E%8D%E5%B7%A5%E5%AD%A6%E3%81%AE%E6%8C%91%E6%88%A6%E2%80%95%E3%83%86%E3%82%AF%E3%83%8E%E3%82%B3%E3%83%9E%E3%83%BC%E3%82%B9%E5%8C%96%E3%81%99%E3%82%8B%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9-%E4%B8%AD%E5%85%AC%E6%96%B0%E6%9B%B8-%E4%BB%8A%E9%87%8E-%E6%B5%A9/dp/4121015274/ref=sr_1_1?ie=UTF8&s=books&qid=1232158167&sr=8-1]]
* [[なぜ投資のプロはサルに負けるのか?― あるいは、お金持ちになれるたったひとつのクールなやり方: 藤沢 数希: 本|http://www.amazon.co.jp/%E3%81%AA%E3%81%9C%E6%8A%95%E8%B3%87%E3%81%AE%E3%83%97%E3%83%AD%E3%81%AF%E3%82%B5%E3%83%AB%E3%81%AB%E8%B2%A0%E3%81%91%E3%82%8B%E3%81%AE%E3%81%8B-%E2%80%95-%E3%81%82%E3%82%8B%E3%81%84%E3%81%AF%E3%80%81%E3%81%8A%E9%87%91%E6%8C%81%E3%81%A1%E3%81%AB%E3%81%AA%E3%82%8C%E3%82%8B%E3%81%9F%E3%81%A3%E3%81%9F%E3%81%B2%E3%81%A8%E3%81%A4%E3%81%AE%E3%82%AF%E3%83%BC%E3%83%AB%E3%81%AA%E3%82%84%E3%82%8A%E6%96%B9-%E8%97%A4%E6%B2%A2-%E6%95%B0%E5%B8%8C/dp/4478600538/ref=sr_1_1?ie=UTF8&s=books&qid=1232118363&sr=8-1]]
これで、時刻が 2007/9/13 15:35 に設定される
''date -s "09/13 15:35 2007"''
! 座標変換に伴う成分の変換
2つの曲線座標 u^^i^^ と u'^^a^^ の間での座標変換を考える。なお、それぞれの座標の [[自然基底|曲線座標の基底]] を e,,i,, , e',,a,, とする。
このとき、P,,0,, における 自然基底 e,,i,, から e',,a,, への変形は、
:$$e'_a(P_0) = \dfrac{\partial x^p}{\partial u'^a} = \dfrac{\partial u^i}{\partial u'^a} \dfrac{\partial x^p}{\partial u^i} = \dfrac{\partial u^i}{\partial u'^a} e_i(P_0)$$
と表せる。また、その逆の変換も同様に表せる。
:$$e_i(P_0) = \dfrac{\partial x^p}{\partial u^i} = \dfrac{\partial u'^a}{\partial u^i} \dfrac{\partial x^p}{\partial u'^a} = \dfrac{\partial u'^a}{\partial u^i} e'_a(P_0)$$
あるベクトル ''v'' を曲線座標 u^^i^^ , u'^^a^^ を用いて、
$$~~~~~ v = u^1 e_1 + u^2 e_2 + u^3 e_3$$
$$~~~~~ v = u'^1 e'_1 + u'^2 e'_2 + u'^3 e'_3$$
と表せる時、
$$u^1 e_1 + u^2 e_2 + u^3 e_3 = u^1 \left( \dfrac{\partial u'^1}{\partial u^1} e'^1 + \dfrac{\partial u'^2}{\partial u^1} e'^2 + \dfrac{\partial u'^3}{\partial u^1} e'^3 \right) + u^2 \left( \dfrac{\partial u'^1}{\partial u^2} e'^1 + \dfrac{\partial u'^2}{\partial u^2} e'^2 + \dfrac{\partial u'^3}{\partial u^2} e'^3 \right) + u^3 \left( \dfrac{\partial u'^1}{\partial u^3} e'^1 + \dfrac{\partial u'^2}{\partial u^3} e'^2 + \dfrac{\partial u'^3}{\partial u^3} e'^3 \right)$$
なので、各成分について、
$$\ \ \cdot \ \ u'^1 = \dfrac{\partial u'^1}{\partial u^1} u^1 + \dfrac{\partial u'^1}{\partial u^2} u^2 + \dfrac{\partial u'^1}{\partial u^3} u^3$$
$$\ \ \cdot \ \ u'^2 = \dfrac{\partial u'^2}{\partial u^1} u^1 + \dfrac{\partial u'^2}{\partial u^2} u^2 + \dfrac{\partial u'^2}{\partial u^3} u^3$$
$$\ \ \cdot \ \ u'^3 = \dfrac{\partial u'^3}{\partial u^1} u^1 + \dfrac{\partial u'^3}{\partial u^2} u^2 + \dfrac{\partial u'^3}{\partial u^3} u^3$$
という関係が成り立つ。これをまとめて書くと、
$$~~~~~~ u'^a = \dfrac{\partial u'^a}{\partial u^i} u^i ~~~~ ( = {A^a}_i u^i )$$
であり、これは反変ベクトルの成分の変換法則になっている。また、基底に関しては、
$$~~~~~~ e'_a = \dfrac{\partial u^i}{\partial u'^a} e_i ~~~~ ( = \bar{A^i}_a e_i )$$
となる ($$\bar{A}$$ は逆関数)。
----
! 自然基底と直交座標の変換
$$\begin{pmatrix} x \\ \\ y \\ \\ z \end{pmatrix} = \begin{pmatrix} \dfrac{\partial x}{\partial u} & \dfrac{\partial y}{\partial u} & \dfrac{\partial z}{\partial u} \\ \\ \dfrac{\partial x}{\partial v} & \dfrac{\partial y}{\partial v} & \dfrac{\partial z}{\partial v} \\ \\ \dfrac{\partial x}{\partial w} & \dfrac{\partial y}{\partial w} & \dfrac{\partial z}{\partial w} \end{pmatrix} \begin{pmatrix} u \\ \\ e_y \\ \\e_z \end{pmatrix} $$
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! 具体例
正規直交座標の基底 e,,x,, から 極座標
* http://jjoo.sakura.ne.jp/igblog/?page_id=924
! エントロピー最大の原理
「平衡状態で(孤立系の)エントロピーが最大になる」は、以下の式で表現できるはずである。
:$$\left({\dfrac {\partial S}{\partial X}}\right)_{U}=0$$ and $$\left({\dfrac {\partial ^{2}S}{\partial X^{2}}}\right)_{U}<0$$ at equilibrium.
ここで、 $$X$$ は示量変数 (V or N) である。
ここで、内部エネルギーは、
:$${\displaystyle \left({\frac {\partial U}{\partial X}}\right)_{S}=-\,{\frac {\left({\frac {\partial S}{\partial X}}\right)_{U}}{\left({\frac {\partial S}{\partial U}}\right)_{X}}}=-T\left({\frac {\partial S}{\partial X}}\right)_{U}=0}$$
$$\left({\frac {\partial ^{2}U}{\partial X^{2}}}\right)_{S}=-T\left({\frac {\partial ^{2}S}{\partial X^{2}}}\right)_{U}
$$
となることから、
https://en.wikipedia.org/wiki/Principle_of_minimum_energy
<<tag "実在気体の熱力学">>
<<list-links filter:"[tag[実在気体の熱力学]]" type:"ul">>
---
! フガシティ
! 活量
---
! CubicEOS
! 写像
集合 A の各元に対して、集合 B の元がただ1つ対応する規則 $$f$$ が定まっているとき,この対応を ''A から B への写像'' といい、以下のように表わす。
:$$ f: A \rightarrow B $$
なお、写像は直積集合の部分集合として定義することができ、そのようにするとより厳密な議論が可能になる。らしい。
<<<
''$$f$$ は X の全ての元を Y の中に移すが, Y 全体へ移すとはいっていないので注意すること.'' つまり $$f(x) \subset Y$$ は等号ではないかもしれない. また, 終域 Y がRなどの数の場合は, 写像 $$f: X \to Y$$ を特に関数(function) ともよぶ
<<<
https://www.ma.noda.tus.ac.jp/u/rto/m1b/M1B2.pdf
- - - - - - - - - -
!! 元の対応関係
元の対応関係を表す時は、違う矢印記号を使う。
:$$ f: a \mapsto b \ (a \in A, b \in B) $$
!! 核 (kernel)
写像 $$f: A \rightarrow B$$ において、f で写した時に 0 となる $$(f(a) = 0)$$ A の部分集合を、 ''$$f$$ の核'' という。
:$$\mathrm{Ker} f = \{ a \in A | f(a) = 0 \} \subset A$$
!! 像 (image)
A から B への写像 $$f$$ において、X を A の部分集合とする$$(X \subset A)$$。
この時、X のそれぞれの元を写像 $$f$$ で送ったもの全体を考えると、これは ''B の部分集合'' となっている。これを $$f$$ による X の ''像'' という。
:$$ \mathrm{Im} f = \{ f(x) | x \in X \} \subset B $$
!! 階数 (rank)
$$f$$ の像の次元のことを、''階数'' もしくは ''ランク'' という。
:$$\mathrm{rank} f = \dim \mathrm{Im} f $$
----
! 始集合 ・終集合
A から B への写像について、A をその写像の''始集合(もしくは始域)'' といい、B をその写像の''終集合 (もしくは終域)'' という。
$$ f(X) := \{ f(x) \in B | x \in A \} $$
!! 定義域 (domain)
始集合は、定義域 とも呼ばれる。
!! 値域 (range)
A から B への写像 $$f$$ において、$$ \{ f(a)| a \in A \} $$ のことを、Bの値域という。
値域と終集合は、必ずしも一致しない点に注意。
* [[値域と終域は何が違う?写像の基礎。|https://www.youtube.com/watch?v=GP6614pD3HA]]
* 像は終集合ではなく値域に対応するようなもの
---
! 恒等写像
ざっくり言うと、「引数の値をそのまま返す写像」。
定義としては、$$a \in A$$ とした時に、次の性質を満たす写像を ''恒等写像''といい、式では $$\mathrm{id}_A$$ と書く。
$$f(a) = a \ \ $$ for for all elements a in A.
また、写像 $$g: A \to B$$ に関して 「$$g \circ \mathrm{id}_A = g = \mathrm{id}_B \circ g$$」 という関係が成り立つ。
----
! 全射と単射
!! 全射
写像 $$f: A \rightarrow B$$ に関して、 値域と終集合が一致する場合に 「$$f$$は ''全射'' である」という。
* 任意の $$b \in B$$ に対し、ある $$a \in A$$ が存在し、$$f(a) = b$$ となる。
** a は複数存在してもよい。
* $$f(A) = B$$
!! 単射
「$$ a_1\neq a_2 $$ ならば必ず $$f(a_1) \neq f(a_2) $$」 である時、「$$f$$は ''単射'' である」という。
!! 全単射
全射かつ単射である写像のことを、全単射という。
全単射であれば、始集合 と 終集合は、集合として同等である。
$$f: A \rightarrow B$$ という全単射写像が存在するならば、集合 $$A, B$$ の位数は等しい $$|A| = |B|$$
! 逆写像
写像 $$f: X \to Y$$ に対し、対応関係を逆にした 写像 $$f^{-1}: Y \to X$$ のことを ''逆写像'' と言う。
* $$g$$ が存在するのは、 $$f$$ が全単射の時だけである。
* $$f \circ f^{-1} = \mathrm{id}_X$$
---
! 射影
!! 対応
---
! その他
* [[線形写像]]
---
---
* http://www.jsces.org/activity/journal/files/tutorial_2002.pdf
! 集合 (set)
思考対象とする「もの」の集まり。集合の定義は、以下のように書く。
* A = { 1,2,4 }
* A = {a | a は 10 未満の正の奇数}
** 縦棒の左側が集合の要素を代表する変数で、縦棒の右側が要素の満たすべき条件。
```
集合論ではZFC公理系を満たすような物を集合と呼びます。
```
[[集合 - 数学 ++C++; // 未確認飛行 C|http://ufcpp.net/study/math/set/set?sec=pair#pair]]
!! 集合の操作
集合の操作・演算については、 [[集合の操作]] にまとめて書いた。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! 元・要素 (element)
「もの」 a が集合 A に属しているとき、a は A の ''元'' あるいは ''要素'' であるという。
:$$ a \in A $$
!! 濃度 (cardinality)
集合 A の濃度は $$|A|$$ と表す (絶対値と同じ記号)。
* 可算集合の場合、濃度は要素(元)の数になる
* 不可算集合の場合、濃度の具体的な値は存在しないが、全単射・単射を用いた大小比較は可能
!! 部分集合 (subset)
「A に属する元は例外なく B にも属する」という関係を、「A は B の部分集合である」という。「A と B のそれぞれの元が完全一致している状態 $$ A = B $$ 」 も部分集合として扱われる。
:$$ A \subset B $$
!! 真部分集合 (proper subset)
「 $$ A \subset B $$ かつ $$ A \neq B $$ 」 を真部分集合という。
:$$ A \subsetneq B $$
!! 空集合 (empty set)
全く元を持たない集合。記号では $$ \emptyset $$ と書く。
!! 全体集合(universal set)
対象としているもの全体を全体集合という。
- - - - - - - - - -
!! 有限集合 (finite set)
自然数 n を用いて {1, 2, ..., n} という形にあらわされる集合との間に全単射が存在する集合。
!! 可算集合 (countable set / denumerable set)
自然数の集合 $$\mathbb{N} = \{1, 2, 3, \dots\}$$ と濃度が等しい集合。
言い換えると、写像 $$f: \mathbb{N} \to A$$ が全単射になるような集合A。
!! 非可算集合
可算集合でない無限集合。
! 基本的な操作
!! 対
```
2つの集合 a, b から、これら2つを要素として持つ集合 c = {a, b} を作ることが考えられます。 このような操作が出来る(このような集合が存在する)ということを仮定するのが「対の公理」です。
∀a∀b∃c∃x(x∈c ⇔ x=a∨x=b)
このようにして得られる集合 {a, b} を対(pair)と呼びます。このとき、a と b の順番は関係ありません。 すなわち、{a, b} と {b, a} はどちらも同じものになります。
```
```
a = b の場合、対 {a, a} を単に {a} と書き、a のシングルトン(singleton)と呼びます。 a と {a} は全く別の集合になります。
```
[[集合 - 数学 ++C++; // 未確認飛行 C|http://ufcpp.net/study/math/set/set?sec=pair#pair]]
!! 順序対
順序を持った対。$$ a \neq b $$ の時、 $$ (x, y) \neq (y, x) $$ になる。
----
!! 共通部分(intersection)
集合A, B のいずれにも属する要素全体の集合を、「''集合A, Bの共通部分''」といい、 記号では $$ A \cap B $$ と書く。
:$$A \cap B = \{ c \ | \ c \in A $$ かつ $$ c \in B \} $$
!!! ''素集合 (Disjoint sets):''
2つの集合が交わりを持たない場合、''互いに素な集合 (Disjoint sets)'' という。
:$$A \cap B = \emptyset$$
!! 和集合 (union)
集合A, B の少なくともどちらか一方に属する要素全体の集合を、「''集合A, Bの和集合''」といい、 記号では $$ A \cup B $$ と書く。
:$$S_1 \cup S_2 = \{ a | a \in S_1 $$ または $$ a \in S_2 \} $$
union of three or more sets
:$$\displaystyle \bigcup_{i=1}^n A_i = A_1 \cup A_2 \cup \dots A_n$$
!! 差集合 (set difference)
S1 に属するが、S2 には属さない要素の集合を $$S_1 \setminus S_2$$ と書く。
:$$S_1 \setminus S_2 = \{ a | a \in S_1 $$ かつ $$ a \notin S_2 \} $$
!!! ''補集合 (complement):''
普遍集合 S からある集合 A の部分を除いた差集合のことを ''補集合 (complement)'' といい、$$A^C$$ や $$\bar{A}$$ と表す。
:$$A^C = S_1 \setminus A$$
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! 分配法則
* $$A \cap (B \cup C) = (A \cup B) \cap (A \cup C)$$
* $$A \cup (B \cap C) = (A \cap B) \cup (A \cap C)$$
[[分配法則の証明|https://sun.ac.jp/prof/hnagano/mathematics/distributive.html]]
!! ド・モルガンの法則 (De Morgan's law)
* $$( A_1 \cup A_2 \cup \dots \cup A_n )^c = {A_1}^c \cap {A_2}^c \cap \dots \cap {A_n}^c $$
* $$(A_1 \cap A_2 \cap \dots \cap A_n)^c = {A_1}^c \cup {A_2}^c \cup \dots \cup {A_n}^c$$
!! 分割 (partition)
ある集合 A の (複数の)部分集合 X,,i,, の集まりを $$X = \{ X_1, X_2, \dots , X_n \} $$ とする。
このときに、 X が以下の条件を満たす場合、それを ''分割'' という。
# $$X$$ のどの要素も空集合でない
# $$X$$ の全要素の和集合は $$A$$ になる
#*$$X_1 \cup X_2 \cup \dots \cup X_n = A$$
# $$X_i \cap X_j = \emptyset \ \ [i \neq j]$$
----
!! 直和
共通部分が空であるような二つの集合の和集合。
$$ A \oplus B $$
!! 直積 (Cartesian product)
二つの集合 A, B に対し、Aの元とBの元の順序対の全体の集合を、直積 $$ A \times B $$ と定義する。
(A の要素と B の要素を1つずつ取ってきて作ったペアを全て集めた集合)
$$ A \times B := \{ (a, b) | a \in A, b \in B \} $$
三つ以上の集合の場合も同様に定義される。
$$ A \times B \times C := \{ (a, b, c) | a \in A, b \in B, c \in C \} $$
----
!! (集合上の) 二項演算
$$ S \times S $$ の直積集合から $$S$$ への写像を、''S における二項演算'' という。
:$$ f: S \times S \rightarrow S $$
定義から明らかなように、二項演算は閉じている。
```
Sの2つの元を S の1つの元と対応させていれば、それでいい訳です。
Rにおける二項演算は、写像 f: R×R → R です。
```
[[群 [0004] 二項演算|幸せ届ける数学教師|https://ameblo.jp/mammarumathtoy/entry-11414634298.html]]
----
! その他
!! 演算に関して閉じている
```
集合 U が演算 * について「閉じている」とは、演算の結果が必ず U に含まれること。
```
[[線形代数II/代数学的構造 - 武内@筑波大|http://dora.bk.tsukuba.ac.jp/~takeuchi/?%E7%B7%9A%E5%BD%A2%E4%BB%A3%E6%95%B0II%2F%E4%BB%A3%E6%95%B0%E5%AD%A6%E7%9A%84%E6%A7%8B%E9%80%A0]]
$$ \forall x, \forall y \in U, x * y \in U$$
[[線形代数学 「演算の定義」 - ama_minのブログ|http://ama-min.hatenablog.com/entry/2017/08/15/142409]]
! 累次積分
!! 積分の順序交換
関数 $$f(x,y)$$ が 有界閉区間 $$ I = [a,b] \times [c,d] $$ で連続ならば、次の関係が成り立つ。
:$$\displaystyle \iint_I f(x,y) dx dy = \int_a^b \left( \int_c^d f(x,y) dy \right) dx = \int_c^d \left( \int_a^b f(x,y) dx \right) dy $$
!! 変数分離系
2つの関数 $$f(x), g(y)$$ が次のように定義されているとき、
* f(x): [a,b] で定義されており、有界で積分可能
* g(y): [c,d] で定義されており、有界で積分可能
「関数: $$h(x,y) = f(x) g(y)$$」 は、有界閉区間 $$ I = [a,b] \times [c,d] $$ で積分可能で、その積分は次のように計算できる。
:$$\displaystyle \iint_I h(x,y) dx dy = \left( \int_a^b f(x)dx \right) \cdot \left( \int_c^d g(y) dy \right) $$
!! 参考サイト
* https://www.youtube.com/watch?v=1u0X6Ar_2Os
---
! 変数変換
https://www.youtube.com/watch?v=9EfmnYbVPxo&list=PLmf8las6ISTJzw4OzZl_fPXk1Z76oZFUD&index=22
---
! 縦線形集合
$$\phi(x), \psi(x)$$ は [a,b] で連続かつ $$\phi(x) \leq \psi(x)$$ とする。このとき、
$$D = \{ (x,y) \in \mathbb{R}^2 | a \leq x \leq b, \phi(x) \leq y \leq \psi(x) \}$$
で定義される領域 D を ''y についての縦線形集合'' という。
D は有界で、ジョルダン可測。
---
; ジョルダン測度
* $$B \subset \mathbb{R} $$
* $$B \subset I $$ (I は閉区間)
;ジョルダン外測度
$$\chi (x,y) $$ の I における上積分
---
* https://www.math.tsukuba.ac.jp/~terui/calculus2-2015
* https://www.youtube.com/watch?v=kZW9AIsUeCI
! 長方形の有界閉区間の場合
まず、対象とする (長方形の) 有界閉区間 I を次のように定義する (a ≦ b, c ≦ d)。
$$I = [a,b] \times [c,d] = \{ (x,y) \in \mathbb{R}^2 | x \in [a,b], y \in [c,d] \}$$
また、 I 上で有界な関数を $$f(x,y)$$ と定義する。
!! I の分割
領域 I に x 方向に n 個、y方向に m 個 の切り込みを入れて、I を (nm 個の) 小さな長方形に分割する。
* $$a = x_0 < x_1 < ... < x_{n-1} < x_n = b$$
* $$c = y_0 < y_1 < ... < y_{m-1} < y_m = d$$
分割された小さな長方形 $$I_{ij}$$ については、
$$I_{ij} = [x_{i-1}, x_i] \times [y_{j-1}, y_j] $$
と表すことにする。そして、このような分け方を ''I の分割'' といい、
$$\Delta = \{ I_{ij} \}_{i=1, ... ,n} , _{j=1,...m} $$
と表す。また、分割 I における $$I_{ij}$$ の対角線の長さの最大値を $$|\Delta|$$ と表す。
$$|\Delta| = \max \sqrt{(x_i-x_{i-1})^2 + (y_i-y_{i-1})^2} $$
!! 過剰和 と 不足和
各分割された領域 $$I_{ij}$$ における 上限・下限を、
* $$M_{ij} \equiv \sup_{(x,y)\in I_{ij}} f(x,y) = \sup \{ f(x,y) | (x,y) \in I_{ij} \}$$
* $$m_{ij} \equiv \inf_{(x,y)\in I_{ij}} f(x,y) = \inf \{ f(x,y) | (x,y) \in I_{ij} \}$$
とおく。このとき、 I を底面とし 上部が z = f(x,y) で与えられる局面をもつ立体の体積を近似する 2つの量を定める。
* 過剰和: $$\displaystyle \bar{s}(fj\Delta) = \sum_i^n \sum_j^m M_{ij} (x_i - x_{i-1}) (y_i - y_{i-1}) $$
* 不足和: $$\displaystyle \underline{s}(fj\Delta) = \sum_i^n \sum_j^m m_{ij} (x_i - x_{i-1}) (y_i - y_{i-1}) $$
なお、分割を細かくすると、過剰和は小さく、不足和は大きくなる。
!!上積分 と 下積分
「I の分割をすべて考えた上で過剰和を取った時の下限」を ''上積分'' といい、
$$\displaystyle \bar{S}(f) = \inf_{\Delta} \bar{S} (fj\Delta)$$ (Δ は I の分割)
と表す。同様に、「I の分割をすべて考えた上で不足和を取った時の上限」を ''下積分'' といい、
$$\displaystyle \underline{S}(f) = \sup_{\Delta} \underline{S} (fj\Delta)$$
と表す。なお $$\underline{S}(f) \leq \bar{S}(f) $$ である。
!! リーマン積分可能
* $$I \in \mathbb{R}^2$$
* $$f(x,y)$$: D上で定義された関数
が、$$\bar{S}(f) = \underline{S}(f)$$ を満たす時、f は ''リーマン積分可能である'' という。
そして、$$\bar{S}(f) = \underline{S}(f)$$ を $$\displaystyle \iint f(x,y) dx dy$$ と表す。 I 上での f は ''重積分'' といい、I は ''積分領域'' という。
!! 参考
* https://www.youtube.com/watch?v=xEOm-TDRmBU&feature=youtu.be
* https://www.math.tsukuba.ac.jp/~terui/_media/calculus2-2015-lecturenote-09.pdf
---
! 一般の有界閉区間の場合
まず、有界集合 D を次のように定義する。
* $$D \subset \mathbb{R}$$: 空でない有界集合
* $$D \subset I$$
そのうえで、 I 上の関数 $$\tilde{f}(x,y)$$ を、次のように定義する。
$$
\tilde{f}(x,y) =
\begin{cases}
f(x,y) \ \ \ \ \ ((x,y) \in D)\\
0 \ \ \ \ \ \ \ \ \ ((x,y) \in I \D )
\end{cases}
$$
!! 積分可能
f が D においてリーマン積分可能 $$\Leftrightarrow$$ $$\tilde{f}$$ が I においてリーマン積分可能
$$\displaystyle \iint_D f(x,y) dx dy = \iint_I \tilde{f}(x,y) dx dy $$
!! 積分可能性
f(x,y) が D においてリーマン積分可能か? $$\Leftrightarrow$$ $$\tilde{f}$$ が I においてリーマン積分可能か?$$\Leftrightarrow$$ D は $$\mathbb{R}^2$$ において ''ジョルダン可測'' (面積確定)か?
''sort -u "ファイル名"''
でいいかな。
( ''-u'' は、こんな意味 ''sort "ファイル名" | uniq'' )
ただし、出現順がばらばらになるので、
出現順に表示したいときは、あきらめてスクリプトを書く。のか...
標準入力を読み込みたいときは、ファイル名を指定しない。
''cat "ファイル名" | sort -u''
重複行だけ表示したいときは、
''sort -u "ファイル名" | uniq -d''
とする。
有限次元のベクトル空間とその双対空間の間の自然な内積から生じる、一つ以上のテンソルに対する演算。
$$C: V^* \otimes V \to k $$
<<<
一般に、m ≥1, n ≥ 1 を整数として、 (m, n)-型テンソル、すなわちベクトル空間
$$V \otimes \cdots \otimes V \otimes V^* \otimes \cdots \otimes V^* $$
(V が m 個、V∗ が n 個)の元^^[1][2]^^ に対して、V の部分の k-番目の因子と V∗ の部分の l-番目の因子に対して自然な内積を適用(し、ほかの因子には恒等写像を適用)することで (k, l)-縮約演算が定義され、それは (m − 1, n − 1)-型テンソルを返す線型写像となる[1]。(1, 1)-型の場合からの流用で、この一般の縮約演算のことも跡と呼ぶことがある。
<<<
https://ja.wikipedia.org/wiki/%E3%83%86%E3%83%B3%E3%82%BD%E3%83%AB%E3%81%AE%E7%B8%AE%E7%B4%84
---
! 基底を用いた説明
!! 反変ベクトル と 共変ベクトル
反変ベクトル u と共変ベクトル の縮約は、以下のように表せる。
$$\displaystyle \ \ \ \ u^i v_i = \sum_i \sum_j u^i v_j \delta_{ij} $$
この式は、以下のように計算することも可能である。
$$\displaystyle \ \ \ \ u^i v_i = \sum_{i} u^i v_i = \begin{pmatrix} u^1 \\ \vdots \\ u^i \end{pmatrix} \begin{pmatrix} v_1 & \ldots & v_i \end{pmatrix} $$
!! 反変ベクトル と 共変テンソル
$$\displaystyle \ \ \ \ g_{ij}u^i v^j = \sum_j \left( \sum_i g_{ij} u^i \right) v^j = \sum_i u^i \left( \sum_j g_{ij} v^j \right) $$
--
$$\displaystyle \ \ \ \ g_{ij}u^i v^j = \sum_i \sum_j g_{ij} u^i v^j
$$
$$= \sum_i \sum_j g_{ij} (u^i \otimes v^j)
$$
; 乗り換え案内
* [[駅探|http://ekitan.com/]]
* [[ジョルダン|http://www.jorudan.co.jp/norikae/norikeyin.html]]
* [[スパナビ|http://supanavi.rurubu.com/supanavi/simple/]]
* [[鉄道運行情報|http://www.tetsudo.com/traffic/]]
; 天気
* [[東京電力 雨量情報|http://thunder.tepco.co.jp/cgi-bin/main.cgi?area=4&zoom=4]]
* [[Yahoo!天気|http://weather.yahoo.co.jp/weather/]]
* [[気象庁|http://www.jma.go.jp/jma/index.html]]
* [[国土交通省 防災情報|http://www.mlit.go.jp/saigai/bosaijoho/]]
; 地図
* [[Mapion|http://www.mapion.co.jp/]]
* [[MapFun|http://www.mapfan.com/]]
; メモ
* [[持っていくもの|出かけるときに持っていくもの]]
* [[英会話(お出かけ時の会話)]]
<<tag "出かける">>
;最小構成
*服
*雨具
*ビニール袋
*携帯の充電器
*iPodTouch (+ 充電器)
*(筆記用具)
*(名刺)
;海外なら
*お金
*パスポート
*クレジットカード
*eチケット
*薬
**バファリン
**目薬
**オロナイン
**正露丸
**のど飴
* スリッパ
* 旅行保険
** [[ACS|https://www.acs-ami.com/jp/globe-jp.php]] (出国後でも加入できる (はず))
* 電源コンセントのコネクタ (形状変換)
;オプション
*バンドエイド
*カメラ
*本
*虫よけ
! ざっくりした説明
$$f : G \to H$$ を群の準同型写像としたとき、[[剰余集合|剰余類]] $$G / \mathrm{Ker}{f}$$ と $$\mathrm{Im} f$$ は同形である。
:$$G / \mathrm{Ker}{f} \cong \mathrm{Im} f$$
また、写像 $$f$$ が全射であれば $$G / \mathrm{Ker}{f} \cong H$$ となる。
----
! 証明
「写像 $$\varphi :G / \mathrm{Ker}{f} \to \mathrm{Im} f$$ が 同型写像である」ことを示せばよい。
https://takataninote.com/group/grp-hom-thm.html
ここでは左剰余類・左剰余集合について書くが、右剰余類・右剰余集合の場合でも似たようなことが言える。
http://www.math.aoyama.ac.jp/~masuda/algebra/lec-alg_07.pdf
---
! 左剰余類
群 $$G$$ の部分群を $$H$$ とする。このとき、$$g \in G$$ に対し、
: $$g H = \{ g * h \ | h \in H \} \subset G$$
を $$G$$ における $$H$$ の ''左剰余類'' という。
また、左剰余類は [[同値関係|関係]] $$\sim$$を使って、次のように表すこともある (みたい)。
:$$C(g) = \{ g, x \in G | \ g^{-1} x \in H \} = \{ g, x \in G | \ g \sim x \}$$
- - - - - - - - - - - - - - - - - - - -
!! ''重要な性質''
!!! 1. $$H$$ ''も左剰余類''
$$g$$ が 単位元 ($$e$$) ならば $$eH = H$$ となるので
!!! 2. ''左剰余類 は [[同値類|関係]]''
$$g_1 \sim g_2$$ という [[関係]] に対して 「$$\ {g_1}^{-1} g_2 \in H \ \ (g_1, g_2 \in G)$$ を満たす」を割り当てると、$$\sim$$ は同値関係になる。
:''反射律 :'' $$\ g_1 \sim g_1$$ の場合、 $${g_1}^{-1} g_1 = e \in H$$ となる
:''対称律 :'' ($$g_1 \sim g_2$$ に対応する) $$\ {g_1}^{-1} g_2 \in H $$ の逆元は $$({g_1}^{-1} g_2)^{-1} = {g_2}^{-1} g_1 \in H$$ であり、これが $$g_2 \sim g_1$$ に対応する。
:''推移律 :'' 「$$g_1 \sim g_2, \ g_2 \sim g_3 \Rightarrow ({g_1}^{-1} g_2), ({g_2}^{-1} g_3) \in H$$」 の関係を使うと、「$$({g_1}^{-1} g_2) ({g_2}^{-1} g_3) = {g_1}^{-1} (g_2 {g_2}^{-1}) g_3 = {g_1}^{-1} g_3 \in H$$」が得られる
この同値関係 $$\sim$$ を使って、次のような同値類を考える。
:$$C(g) = \{ g, x \in G | g \sim x \} = \{ g, x \in G | \ g^{-1} x \in H \} $$
任意の $$H$$ の $$h$$ について、$$g^{-1} x = h$$ から
:$$x = g h \ \ \ \ (g, x \in G, \ h \in H)$$
という関係が得られるが、これは左剰余類の定義とした $$g H = \{ g * h \ | h \in H \} \subset G$$ と同じことを意味している。
!!! 3. ''異なる左剰余類は共通な元を持たない''
(左剰余類が) 同値類であることから明白であるが、いちおう以下に証明を書いておく。
もし $$g_1 H \cap g_2 H \neq \emptyset$$ であれば、
:$$g_1 h_1 = g_2 h_2$$
となる $$h_1, h_2 \in H$$ が存在する。この関係を使うと 任意の $$h \in H$$ について
: $$g_1 h = g_1 h_1 {h_1}^{-1} h = g_2 h_2 {h_1}^{-1} h \in g_2 H$$
: $$g_2 h = g_2 h_2 {h_2}^{-1} h = g_1 h_1 {h_2}^{-1} h \in g_1 H$$
となることから、
: $$g_1 H \cap g_2 H \neq \emptyset \ \Rightarrow \ g_1 H = g_2 H$$
であることが分かる。そして、これの対偶を取れば、共通な元を持たないことが分かる。
: $$g_1 H \neq g_2 H \ \Rightarrow \ g_1 H \cap g_2 H = \emptyset $$
!!! 4. 左剰余類は任意の元を用いて表すことができる $$(g_1 \in g_1 H)$$
:$$g_1 = g_1 e \in g_1 H$$
!!! 4. $$g_1 H = g_2 H \ \Leftrightarrow \ {g_1}^{-1} g_2 \in H$$
:$$g_1 H = g_2 H \ \Leftrightarrow \ H = ({g_1}^{-1} g_2) H \ \Leftrightarrow \ {g_1}^{-1} g_2 \in H$$
---
! 左剰余集合
「異なる左剰余類は共通な元をもたない」ことを利用して、群 $$G$$ を分割することを考える。
次のような操作を行うと、
# $$g_1 = e$$ とすると $$g_1 H$$ は $$G$$ の部分集合
# $$g \notin g_1 H$$ となる $$g$$ が存在するならば、その一つを取り出して $$g_2 H$$ という $$G$$ の部分集合を作る
# $$g_1 H, g_2 H, ... $$ に含まれない $$g$$ が無くなるまで、2の操作を繰り返す
以下のような、分割が得られる (添字集合 $$I$$ は有限集合とは限らない)。
: $$G = \coprod g_i H$$
そして、これらすべての分割 (左剰余類) を含む集合のことを ''左剰余集合'' という。
: $$G/H = \{ g_i H | i \in I\}$$
なお、$$g_i (i \in I)$$ を左剰余類 $$g_iH$$ の ''代表元'' と呼ぶ。
- - - - - - - - - - - - - - - - - - - -
!! ''重要な性質''
全ての分割の要素数は同じ。
:$$|g_i H| = |g_j H| \ \ \ \ (i, j \in I)$$
これは $$f: H \to g H$$ という写像が全単射であることから明らかである。
:$$g h_1 \neq gh_2 \Rightarrow g^{-1} (g h_1) \neq g^{-1} (g h_2) \Rightarrow h_1 \neq h_2$$
---
---
! 同値関係を使った剰余類の表現
$$\ {g_1}^{-1} g_2 \in H \ \ (g_1, g_2 \in G)$$ に対して、 $$g_1 \sim g_2$$ という [[関係]] を考えると、''∼ は同値関係になる''。
;反射律 :
:$$g_1 \sim g_1$$ の場合、 $${g_1}^{-1} g_1 = e \in H$$ となる
;対称律 :
($$g_1 \sim g_2$$ に対応する) $$\ {g_1}^{-1} g_2 \in H \ \ (g_1, g_2 \in G)$$ の逆元を考えると、
:$$({g_1}^{-1} g_2)^{-1} = {g_2}^{-1} g_1 \in H$$
なので、$$g_2 \sim g_1$$ である。
; 推移律 :
$$g_1 \sim g_2, \ g_2 \sim g_3 \Rightarrow ({g_1}^{-1} g_2), ({g_2}^{-1} g_3) \in H$$
$$({g_1}^{-1} g_2) ({g_2}^{-1} g_3) = {g_1}^{-1} (g_2 {g_2}^{-1}) g_3 = {g_1}^{-1} g_3 \in H$$
ここで、この同値関係に関する同値類を、
:$$C(g) = \{ g, x \in G | g \sim x \} = \{ g, x \in G | \ g^{-1} x \in H \} $$
と定義する。 $$g^{-1} x \in H$$ より、 $$g^{-1} x = h \ (h \in H)$$ を考えると
:$$x = g h \ \ \ \ (g, x \in G)$$
という関係が得られる。そして、これは最初の定義と同じことを意味している。
: $$g H = \{ g * h \ | h \in H \} \subset G$$
; ブックマーク
* 当分 TiddlyWiki
; ずっととっておくもの
* +archive として、gmail に送る
** exe は仕方ないので、 とりあえず google docs に入れておく
** * [[EvernoteをやめてGmailへ: Shu's blog 雌伏編|http://rainy.seesaa.net/article/126639753.html]]
; オープンなメモ
* TiddlyWiki ?
* テキスト以外や長いものは?
** +memo で gmail か...
;クローズなメモ
* +memo で gmail か...
* よく更新するものは...?
** 書きかけのものは、google notebook
** 完了したものは、 +memo で gmail へ
; プログラム関係
* ソースコードは、git
* メモ類をどうしようかな...
** 日本語ファイル名とか
; dropbox + ipod touch
* [[PlainTextと紙copiの連携 - ランディノート|http://d.hatena.ne.jp/rundy628/20101006/p1]]
; 画像
* 参考サイトのキャプチャ画像
** evernote でやってみる
* その他
** no idea (dropbox ?)
----
; google notebook
* 全て gmail に +memo で送った
** 内容を本文に貼り付けておいたので、検索可能
! 条件付き確率 (Conditional Probability)
事象Bが起こるという条件のもとで事象Aが起こる確率を ''BにおけるAの条件付き確率'' といい、これは次のように定義される。
:$$P(A|B) = \dfrac{P(A \cap B)}{P(B)} \ , \ when \ P(B) > 0$$
- - - - - - - - - - - - - - - - - - - -
!! ''重要な性質''
条件付き確率の定義より、
# $$P(B|B) = 1$$
# $$A,B$$ が互いに素な集合 $$(A \cap B = \emptyset) \implies P(A|B) = 0$$
# $$P(A|B) \geq 0$$
#* $$P(A \cap B) \geq 0 \ , \ \ P(B) \geq 0$$
が成り立つ。
さらに、 [[集合の操作における分配法則|集合の操作]] を用いると、
:$$ P(A_1 \cup A_2 \cup \dots|B) = \dfrac{P(A_1 \cup A_2 \cup \dots|B)}{P(B)} = \dfrac{P((A_1 \cup B) \cap (A_2 \cup B) \cap \dots)}{P(B)}$$
となるため、これに ''[[確率測度の条件|確率空間]]'' の一つである
:$$\displaystyle A_j \cap A_k = \emptyset \ \ [j \neq k] \implies P(\bigcup_{n=1}^{\infty} A_n) = \sum_{n=1}^{\infty} P(A_n)$$
を適用すると、
:$$A_1, A_2, \dots$$ が互いに素 $$\implies P(A_1 \cup A_2 \cup \dots|B) = \dfrac{P(A_1 \cup B) + P(A_2 \cup B) + \dots}{P(B)} = P(A_1|B) + P(A_2|B) + \dots$$
という関係が得られる。
そのた
* $$A \subset B$$ ならば、 $$P(A|B) = P(A)/ P(B)$$
* $$B \subset A$$ ならば、 $$P(A|B) = 1$$
----
! '' ベイズの定理 (Bayes' theorem)''
条件付き確率の定義から
:$$P(A \cap B) = P(A|B) P(B) = P(B|A) P(A)$$
であり、これを整理するとベイズの定理が得られる。
:$$P(B|A) = \dfrac{P(A | B) P(B)}{P(A)}$$
----
! Chain rule
:$$P(A_1 \cap A_2 \dots \cap A_n) = P(A_1) P(A_2|A_1) P(A_3|A_2,A_1) \dots P(A_n|A_{n-1}, A_{n-2}, \dots A_1)$$
- - - - -
!! 大まかな導出
条件付き確率の定義から得られる $$P(A \cap B) = P(A) P(B|A)$$ を使うと、
:$$P(A \cap B \cap C) = P(A \cap (B \cap C)) = P(A) P(B \cap C | A)$$
という関係を得ることができる。
さらに $$P(B \cap C) = P(B) P(C|B)$$ の関係に対して、A における確率を考えると、
: $$P(B \cap C | A) = P(B|A) P(C|B,A)$$
なので、
:$$P(A \cap B \cap C) = P(A) P(B \cap C | A) = P(A) P(B|A) P(C|B,A)$$
という形に展開できる。
https://www.probabilitycourse.com/chapter1/1_4_0_conditional_probability.php
----
!! 素集合 (disjoint)
* $$A \cap B = \emptyset$$
* $$P(A \cup B) = P(A) + P(B)$$
* 銀行口座
** Netbank saver
** パスポートを持って支店に行く
** 6か月間、お金のやり取りがないと、自動で口座がなくなる
* 要らない荷物の送付
** Australian Post
* タックスリターン
** 番号をなくさないようにする
** myGov
* 副業する場合の申告
** 青色申告
* Reimburse of accommodation fee (ICGH)
* sms を受け取る方法
** ログイン時にコード入力が要るサービスが困る
* Superannuation
** 返還の申請
- - -
* 航空券の予約
* 携帯電話の解約
* 健康保険の解約
* 荷物を送る
** Australian Post
- - -
* シミュレータのデータ
<<<
点推定(point estimation)と区間推定(interval estimation)についてそれぞれ簡単にまとめると下記のようになる。
* 点推定:母集団の未知の母数をある一つの値で推定する方法
* 区間推定:母数の入る確率がある値(95%以上など)以上と保証される区間を求める方法
<<<
https://www.hello-statisticians.com/explain-terms-cat/point_estimation1.html
----
{{点推定!!text}}
! 数式の読み方
[[英語による数式の読み方①(加減乗除・小数・分数・括弧)|https://sci-pursuit.com/English/numerical_formula-1.html]]
a function of A and B - - - $$f(A,B)$$
---
! 英単語
* 線形性: linearity
http://www.mathwords.com/p/partial_derivative.htm
!! 微分 (differential)
* 一階微分: first‐order differentiation
* 全微分: Total derivative, Full derivative
```
連続関数 continuous function
微分する differentiate
微分 differential
微分可能 differentiable
微分演算子 differential operator
差分 difference
導関数 derived function, derivative
微分方程式 differential equation
常微分方程式 ordinary differential equation
偏微分方程式 partial differential equation
連立微分方程式 simultaneous differential equations
一般解 general solution
特殊解 particular solution
ラグランジュ乗数 Lagrange multiplier
定数項 constant term
任意定数 arbitrary constant
展開する expand
マクローリン展開 Maclaurin expansion
テーラー展開 Taylor expansion
極大値 maximal value
極小値 minimal value
最大値 maximum ([pl. ] maxima)
最小値 minimum ([pl. ] minima)
測度 measure
可測 measurable
汎関数 functional
```
[[数学基礎用語集(和英編)|http://www.qmss.jp/qmss/glossary/math-glossary-je.htm]]
!! 積分
integrate the function with respect to x from a to b.
```
積分する integrate
積分 integral
積分可能 integrable
不定積分 indefinite integral
定積分 definite integral
```
[[数学基礎用語集(和英編)|http://www.qmss.jp/qmss/glossary/math-glossary-je.htm]]
|記号 |意味 |~LaTexコマンド |h
|$$\neq$$ |ノットイコール |\neq |
|$$\approx$$ |ニアリーイコール |\approx |
|$$\equiv$$ |合同 |\equiv |
|$$\sim$$ |相似 |\sim |
|$$\propto$$ |比例 |\propto |
|$$\leq $$ |以下 |\leq|
|$$\geq $$ |以上 |\geq|
|$$\gt $$ |より大きい |\gt |
|$$\lt $$ |より小さい |\lt |
|$$\gg$$ |ずっと大きい|\gg |
|$$\ll$$ |ずっと小さい |\ll |
|記号 |意味 |使用例 |h
|$$\exists$$ |少なくとも一つ存在する | |
|$$\forall $$ |任意の・全ての |$$\forall x \in R, x^2 > 0$$|
|$$\in$$ |(元が集合に)属する |$$x \in R$$|
|$$\notin$$ |(元が集合に)属さない ||
|$$\subset$$ |部分集合 |$$A \subset B$$ [AはBの部分集合] |
|$$:=$$ |左辺を右辺で定義する | |
|$$\mapsto$$ |元の対応関係 |$$ f: a \mapsto b (a \in A, b \in B) $$ |
|記号 |意味 |記号での説明 |h
|$$\max$$ |集合の最大値 |$$\max A = c \Leftrightarrow \exists x \in A, x \leq c$$ |
|$$\min$$ |集合の最小値 |$$\min A = c \Leftrightarrow \exists x \in A, x \geq c$$ |
|$$\sup$$ |集合の上限 |$$\sup A = c \Leftrightarrow \forall a \in A, a \leq c$$ |
|$$\inf$$ |集合の下限 |$$\inf A = c \Leftrightarrow \forall a \in A, a \geq c$$ |
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|記号 |意味 |~LaTexコマンド |h
|$$\mathbb{N}$$ |自然数 |\mathbb{N} |
|$$\mathbb{Z}$$ |整数 |\mathbb{Z} |
|$$\mathbb{Q}$$ |有理数 |\mathbb{Q} |
|$$\mathbb{R}$$ |実数 |\mathbb{R} |
|$$\mathbb{C}$$ |複素数 |\mathbb{C} |
| | ||
|$$\infty$$ |無限 |\infty |
http://www.kousukeabe.mokuren.ne.jp/math.misc/memo_notations.pdf
;大型演算子
| 記号 | 意味 | ~LaTexコマンド |h
|$$\displaystyle \sum_{i=1}^n$$ |総和 |\sum_{i=1}^n |
|$$\displaystyle \prod_i^n$$ |総乗 |\prod_i^n |
| | ||
|$$\displaystyle \int_a^b f(x) dx$$ |定積分 |\int_a^b f(x) dx |
|$$\displaystyle \iint_D f(x,y) dx dy$$ |重積分 |\iint_D f(x,y) dx dy |
$$ \coprod $$
[[LaTeXコマンド - 大型演算子|https://medemanabu.net/latex/big-operators/]]
```
原則
・ 数学記号として用いるアルファベットは原則としてイタリック体を用いる
・ 略語に由来する複合数学記号(一般的に定義されている関数),数値が一般的に定められている定数,微分記号は直立体で表現する
-(理由)イタリック文字を使って関数などを表現するとアルファベットが個々の数学記号と誤解されてしまう
```
[[http://hontolab.org/tips-for-research-activity/how-to-use-mathmatic-symbol/]]
----
* http://www.jwrs.org/editor/Typefaces_Symbols_Jp.pdf
* https://ccmath.meijo-u.ac.jp/~suzukin/dl/01.pdf
数列 $${a_n}$$ の番号 $$n$$ を大きくしていったときに、ある実数 $$\alpha$$ に $$a_n$$ が限りなく近づくならば、「$$a_n$$ は $$\alpha$$ に収束するという」。
$$\displaystyle \lim_{x \to \infty} (a_n) = \alpha, a_n \rightarrow \alpha (n \rightarrow \infty) $$
厳密に議論する際は、[[ε-N論法]] を使う。
---
! [[ε-N論法]]による厳密な定義
$${a_n}$$ が $$n \to \infty$$ の極限で $$\alpha$$ に収束するとは、任意の $$\epsilon > 0$$ に対し、ある整数 $$N > 0$$ が存在し、
$$ |a_n - \alpha| < \epsilon \ \ \ \ (\forall n > N)$$
が成立する場合のことを指す。
式だけで表すと、以下のようになる(らしい)。
$$\displaystyle \lim_{n \to \infty} a_n = \alpha, a_n \to\alpha (n\to \infty) \ \Leftrightarrow \ \forall \epsilon > 0 \ \exists N > 0 \ \forall n [n>N \Rightarrow |a_n - \alpha| < \epsilon ] $$
- - - - -
<<<
上記の収束の定義は本来は実数 z,,n,, ∈ R についてのものであるが、複素数 z,,n,, ∈ C の場合でもその実部・虚部それぞれに注目することで同様の定義ができる。
<<<
http://www2.math.kyushu-u.ac.jp/~tanahashi/pdf/complex-analysis/note_7.pdf
----
! 基本的な定理
$$\displaystyle \lim_{x \to \infty} (a_n) = \alpha, \displaystyle \lim_{x \to \infty} (b_n) = \beta $$ とする。
このとき、以下が成り立つ。
# 「ある番号から先で $$a_n \leq b_n$$」 ならば 「$$\alpha \leq \beta$$」
# 「ある番号から先で、 $$a_n \leq c_n \leq b_n$$ かつ $$\alpha = \beta $$ 」ならば、「$$\displaystyle \lim_{x \to \infty} (c_n) =\alpha$$」
さらに、2つの数列の四則演算の極限に関して、以下が成り立つ。
# $$\displaystyle \lim_{x \to \infty} (a_n \pm b_n) = \alpha \pm \beta $$
# $$\displaystyle \lim_{x \to \infty} (a_n b_n) = \alpha \beta $$
# $$\displaystyle \lim_{x \to \infty} \dfrac{a_n}{b_n} = \dfrac{\alpha}{\beta} $$ ($$\beta \ne 0$$)
- - - - -
さらに、「$$a_n > 0$$ かつ $$\displaystyle \lim_{x \to \infty} \dfrac{a_{n+1}}{a_n} = \alpha$$ 」 ならば 「$$\displaystyle \lim_{x \to \infty} \sqrt[1/n]{a_n} = \alpha$$」 となる。
なお、$$\alpha = 0$$ でもよい。
----
! 単調列の極限
''定理'': 単調列は、有界ならば収束する。
!! 単調列
「単調増加数列」 と 「単調減少数列」 を併せて、''単調列'' という。
* 単調増加数列
** $$a_1 \leq a_2 \leq ... \leq a_n \leq ... $$
* 単調減少数列
** $$a_1 \geq a_2 \geq ... \geq a_n \geq ... $$
!! 有界な数列
2つの定数 $$c, d$$ によって、次のように表せる数列を ''有界な数列(有界列)'' という。
$$ c \leq a_n \leq d$$
例えば、収束する数列は、有界な数列になる。
正規性の検定としてよく使われるものとしては、''Kolmogorov-Smirnov test'' と ''Shapiro-Wilk test'' がある。
! コルモゴロフ–スミルノフ検定
すごく大雑把に言うと、標本値とクオンタイルの対応関係が、正規分布的な形になっているかを調べる。
* 連続変数を仮定
** 標本に同じ値が含まれるのは好ましくない
http://www.stats.ox.ac.uk/~massa/Lecture%2013.pdf
! R
```r
vx=c(57, 67, 23, 50, 52, 51, 48, 51, 54, 44, 31, 54, 49, 51)
shapiro.test(x=vx)
```
https://data-science.gr.jp/implementation/ist_r_shapiro_wilk_test.html
----
* http://ex.osaka-kyoiku.ac.jp/~fujii/fujiwara/C/s-kentei/SWseikikentei.pdf
* https://www.youtube.com/watch?v=dRAqSsgkCUc
! 概要
次のような [[確率密度関数]] (Probability Density Function) を持つ分布のことを ''正規分布 (Normal distribution)'' という。
:$$f(x) = \dfrac{1}{\sigma\sqrt{2\pi}} \exp{ \left(- \dfrac{(x-\mu)^2}{2 \sigma^2} \right)}$$
* $$\mu$$: 平均 (mean)
* $$\sigma$$: 標準偏差 (standard deviation)
* $$\sigma^2$$: 分散 (variance)
正規分布は、以下のような特徴を持つ。
# 平均 (μ) を中心にして,左右対称である (偶関数)。
# 平均 と 中間値 (Median)は一致する。
# ''μ ± σ'' の範囲中に、約68パーセントのデータが入る (σ は標準偏差)。
# ''μ ± 2σ'' の範囲中に、約95パーセントのデータが入る
!! 累積分布関数
正規分布の累積分布関数は、誤差関数を用いて次のように表される。
: $$\displaystyle F(x) = \dfrac{1}{2} \left[ 1 + \mathrm{erf} \left( \dfrac{x - \mu}{\sqrt{2 \sigma^2}} \right) \right] $$
!! モーメント母関数
:$$M_X(t) = \exp \left( {\mu t + \dfrac{\sigma^2}{2} t^2} \right)$$
導出: https://analytics-note.xyz/statistics/normal-moment/
- - - - -
!! 導出
* 歴史的には、[[二項分布]] の n を無限大に持っていった時の式として見つけられたらしい。
* 統計学的には、[[ガウスの公理]] から導く方が一般的なのかも。
- - - - -
!! [[正規性の検定]]
* Shapiro-Wilk 検定
* Kolmogorov-Smirnov 検定
!! 実際の計算
R や Excel には、正規分布を扱うための関数が用意されている。
* [[R/統計]]
* Excel では、 ''NORM.DIST()'' 関数を使う
----
! 標準正規分布
また、平均 0, 分散 1 とした場合の正規分布 $$(\mu = 0, \sigma^2 = 1)$$ を、''標準正規分布 (Standard Normal Distribution)'' という。
!! 確率密度関数
:$$f(x) = \varphi(x) = \dfrac{1}{\sqrt{2\pi}} \exp{ \left(- \dfrac{x^2}{2} \right)}$$
標準正規分布の累積分布関数は、シンボル $$\varphi$$ で表されることがある。
!! 累積分布関数
標準正規分布の累積分布関数 ($$\Phi$$) は、誤差関数を用いて次のように表される。
$$\ \ \ \ \ \ \ \displaystyle F(x) = \Phi(x) = \dfrac{1}{2} \left[ 1 + \mathrm{erf} \left( \dfrac{x}{\sqrt{2}} \right) \right] $$
$$\ \ \ \ \ \ \ \displaystyle \mathrm{erf}(x) = \dfrac{2}{\sqrt{\pi}} \int_0^x \exp{(-u^2)} du$$
!! モーメント母関数
:$$M_X(t) = \exp \left( {\dfrac{t^2}{2}} \right)$$
- - - - -
!! 標準化する方法
<<<
確率変数 X が正規分布 N(μ,σ^^2^^) に従うとき、
:$$Z = \dfrac{X - \mu}{\sigma}$$
と変換すると、Zは標準正規分布N(0,1)(平均0,分散1)に従います。
<<<
https://ai-trend.jp/basic-study/normal-distribution/standardization/
---
! General normal distribution
一般正規分布
!! 確率密度関数
$$f(x) = \dfrac{1}{\sigma} \varphi\left( \dfrac{x-\mu}{\sigma} \right) = \dfrac{1}{\sigma\sqrt{2\pi}} \exp{ \left(- \dfrac{(x-\mu)^2}{2 \sigma^2} \right)}$$
!! 累積分布関数
累積分布関数は、次のように表される。
$$\displaystyle F(x) = \Phi \left( \dfrac{x-\mu}{\sigma} \right) = \dfrac{1}{2} \left[ 1 + \mathrm{erf} \left( \dfrac{x-\mu}{\sqrt{2 \sigma^2}} \right) \right] $$
---
! 累積分布関数 と 誤差関数
累積分布関数は、誤差関数を用いて次のように表される。
$$\displaystyle \Phi = \int_{-\infty}^x f(t) dt = \dfrac{1}{\sqrt{2\pi \sigma}} \int_{-\infty}^{\mu} \exp{\left( \dfrac{(t-\mu)^2}{2 \sigma^2} \right)} dt + \dfrac{1}{\sqrt{2\pi \sigma}} \int_{\mu}^x \exp{\left( \dfrac{(t-\mu)^2}{2 \sigma^2} \right)} dt$$
第一項は 1/2 になるので、
$$\displaystyle \Phi = \dfrac{1}{2} + \dfrac{1}{\sqrt{2\pi \sigma}} \int_{\mu}^x \exp{\left( \dfrac{(t-\mu)^2}{2 \sigma^2} \right)} dt$$
と変形できる。 $$u = \dfrac{t-\mu}{\sqrt{2 \sigma^2}} $$ とすると、
$$\displaystyle \Phi = \dfrac{1}{2} + \dfrac{1}{\sqrt{2\pi \sigma}} \int_0^{x-\mu} \exp{\left( u^2 \right)} dt$$
誤差関数を用いると、
$$\displaystyle \Phi = \dfrac{1}{2} \left[ 1 + \mathrm{erf} \left( \dfrac{x-\mu}{\sqrt{2} \sigma} \right) \right] $$
$$\displaystyle \mathrm{erf}(x) = \dfrac{2}{\sqrt{\pi}} \int_0^x \exp{(-u^2)} du$$
となる。
(余裕があれば、そのうち追記する)
---
---
* https://to-kei.net/distribution/normal-distribution/density-function-derivation/
* http://www.epii.jp/articles/note/math/normdist
---
---
<<<
# 大きさの等しい正と負の誤差は同じ確率で起きる。つまり、全ての誤差の総和は 0 であるともいえる。
# 大きな誤差は小さな誤差より起こりにくい。
# 大きすぎる誤差は発生しない
<<<
! 標準正規分布
平均 0, 分散 1 とした場合の正規分布 $$(\mu = 0, \sigma^2 = 1)$$。正規分布を、次のように処理することで得られる。
:$$\dfrac{\bar{X} - \mu}{\sigma / \sqrt{n}{}} $$
- - - - -
! 定義
* ''t'' - 時間
* ''T'' - イベントが起こった時の時間
* ''P'' - 指定した時間の範囲でイベントが起こる確率
* ''F(t)'' - ''累積発生確率''
** 時間 t までにイベントが発生する確率
** F(t) = P(T ≤ t)
* ''S(t)'' - ''生存関数''
** 時間 t までイベントが発生しない確率 ( S(t) = 1 - F(t) )
* ''h(t) - ハザード関数''
** 時間 tまでイベントを発生しなかった集団が次の瞬間にイベントを発生する (条件付き確率の) 確率密度関数
- - - - -
!! ''累積発生確率''
時間 t までにイベントが発生する確率。
指定された時刻内でイベントが発生する確率 $$P$$ を用いて、次のように定義される。
:$$F(t) = P(T \leq t) $$
イベントの発生確率の確率密度関数 $$f$$ を用いて表されることもある。
:$$\displaystyle F(t) = \int_0^t f(t) dt$$
!! ''生存関数''
時間 t までイベントが発生しない確率。
:$$F(t) = P(T > t) $$
累積発生確率とは、以下の関係にある。
:$$S(t) = 1 - F(t) $$
また、これを用いて、以下の関係も得られる。
:$$f(x) = \dfrac{d}{dt}F(t) = \dfrac{d}{dt} \left[1 - S(t) \right] = - \dfrac{d}{dt}S(t)$$
!! ''ハザード関数'' (Hazard function)
時間 tまでイベントを発生しなかった集団が次の瞬間にイベントを発生する 確率の確率密度関数をハザード関数 (Hazard function) という。
:$$\displaystyle h(t) = \lim_{\Delta t \to 0} {\dfrac{P(t < T < t + \Delta t | T > t)}{\Delta t}} $$
これは条件付き確率なので、次のように変形できる。
:$$\displaystyle h(t) = \lim_{\Delta t \to 0} {\dfrac{P(t < T < t + \Delta t)}{\Delta t}} \dfrac{1}{P(T \geq t)} = \dfrac{f(t)}{S(t)}$$
さらに、生存関数の説明の中で出てきた f = - dS/dt を使うと、
:$$\displaystyle h(t) = \dfrac{f(t)}{S(t)} = - \left[ \dfrac{d}{dS} \ln(S) \right] \left[ \dfrac{d}{dt} S(t) \right] $$
と変形でき、これに対し [[合成関数の微分]] の公式を使うと、
:$$h(t) = - \dfrac{d}{dt} \ln(S(t))$$
が得られる。両辺を t で積分すると、
:$$\displaystyle \int_0^t h(t) dt = - \ln(S(t))$$
となる。$$S(t) = 1 - F(t)$$ とし、指数を取り、式を整理すると、
:$$\displaystyle F(t) = 1 - \exp\left[ \int_0^t h(t) dt \right]$$
が得られる。
----
* https://necostat.hatenablog.jp/entry/2022/07/06/080239
エンジニアリング的な文脈では、静水圧 (p) の代わりに、ヘッド (H) を用いることがある。
:$$p = g \rho H $$
g は重力加速度である。$$\rho$$ は流体の密度を意味するが、何の流体を密度を使うかは、状況・文脈による。
* 何の指定もない場合は、水の密度であるケースが多い (気がする)
* ポンプの場合は、ポンプで送る流体の密度を使う (と思う)
; 単位の関係
$$\ \ Pa = \dfrac{N}{m^2} = \dfrac{kg (m / s^2)}{m^2} = \dfrac{m}{s^2} \dfrac{kg}{m^3} m$$
----
! ポンプの場合
ポンプが流体に対して行う仕事の仕事率は、「仕事 = 力 × 移動距離 $$(W = F \cdot \Delta L)$$」であるので、
: $$P = \dfrac{\Delta W}{\Delta t} = \dot{V} \cdot \Delta P = \dot{V} \cdot (g \rho H) \ \ \ \ $$ [W = J/s]
と表すことができる ($$\dot{V}: $$ 体積流量, $$\Delta P$$ 差圧) 。
- -
ポンプは発熱するので、単位時間当たりの総消費エネルギーは、
:$$\dot{U} \approx \dfrac{\Delta U}{\Delta t} = \dfrac{\Delta W}{\Delta t} + \dfrac{\Delta Q}{\Delta t} \ \ \ \ \ $$ [W = J/s]
となる。ここで、ポンプの効率を $$\eta$$ とすると、
: $$P = \dfrac{\Delta W}{\Delta t} = \eta \dfrac{\Delta U}{\Delta t} = \eta \dfrac{(\Delta W + \Delta Q)}{\Delta t} $$
であり、これを式変形すると
:$$\dfrac{\Delta Q}{\Delta t} = \left( \dfrac{1}{\eta} -1 \right) \dfrac{\Delta W}{\Delta t} = \dfrac{1 - \eta}{\eta} P$$
となる。
そのため、ポンプの発熱による温度変化 (T,,Q,,) は、
:$$\Delta T_Q = \dfrac{\Delta Q}{C_p} = \dfrac{\Delta Q}{\Delta t} \dfrac{1}{\dot{m} c_p} = \dfrac{(1 - \eta)}{\eta } \dfrac{P}{\dot{m} c_p} = \dfrac{(1 - \eta)}{\eta } \dfrac{\dot{V} g \rho H}{\dot{m} c_p} = \dfrac{(1 - \eta)}{\eta } \dfrac{g H}{c_p} $$
と表すことができる (C,,p,,: 熱容量, c,,p,,: 比熱, $$\dot{m}$$: 質量流量)。
ただし、流体の温度変化をきちんと知りたい時は、 (ポンプでの昇圧による) エンタルピー変化による影響も考慮する必要がある。
<$reveal type="nomatch" state="$:/state/integral" text="show"><$button set="$:/state/integral" setTo="show">関連項目</$button></$reveal>
<$reveal type="match" state="$:/state/integral" text="show">
<$button set="$:/state/integral" setTo="hide">隠す</$button>
<<list-links filter:[tag[積分]] >>
</$reveal>
積分にはいくつかの種類があり、その意味するものは文脈によって少しずつ異なる。実用的な使う場合においても、次の3つは最低でもきちんと理解しておくべき。なお、「(不定)積分が微分が逆になる」という話は、(面積計算を積分の定義とする場合には) ''微分積分法の基本公式'' を導くことで得られる定理である。
# 定積分
#* [[Riemann積分可能]]
#* [[定積分の基本的な性質]]
#* [[区分求積法]]
# 不定積分
#* [[原始関数の公式]]
# 広義積分
また、積分は多変数関数でも考えることができるが、その場合には、考慮すべきことが増える。
* 4. [[重積分]]
応用的なところで最低限抑えておくべき話としては、次のようなものがある。
* 5. [[線積分]]
----
! 0. 原始関数
関数 $$f$$ に対し $$ F'(x) = f(x) $$ となる関数 $$F$$ を、$$f$$ の ''原始関数'' という。
また、 $$f$$ を区間 $$I$$ 上の関数とし、その一つの原始関数を $$F$$ とすると、 $$f$$ の任意の原始関数 $$G$$ は、
:$$ G(x) = F(x) + C \ \ \ \ \ \ (x \in I) $$
と表せる( $$C$$ は積分定数と呼ばれる)。
!! [[公式・定理|原始関数の公式]]
基本的には、 [[導関数の公式]] の逆もしくは似たような形になる。
<$reveal type="nomatch" state="$:/state/primitiveFunction" text="show"><$button set="$:/state/primitiveFunction" setTo="show">表示</$button></$reveal>
<$reveal type="match" state="$:/state/primitiveFunction" text="show">
<$button set="$:/state/primitiveFunction" setTo="hide">隠す</$button>
{{原始関数の公式!!text}}
</$reveal>
----
! 1. 定積分
関数 $$f(x)$$ が区間 [a,b] で [[Riemann積分可能]] であるときに、$$\|\Delta\| \to 0$$ とした際に近づいていく値を ''定積分'' といい、次のように表す。
:$$\displaystyle \int_a^b f(x) dx$$
また、[a,b] における平均値に関しては、''積分の平均値'' の定理が成り立つ。
:$$\displaystyle \dfrac{1}{b-a} \int_a^b f(x) dx = f(c)$$
ここで、c は a < c < b である実数である。
!! [[基本的な性質|定積分の基本的な性質]]
:<$reveal type="nomatch" state="$:/state/definiteIntegral" text="show"><$button set="$:/state/definiteIntegral" setTo="show">表示</$button></$reveal>
<$reveal type="match" state="$:/state/definiteIntegral" text="show">
:<$button set="$:/state/definiteIntegral" setTo="hide">隠す</$button>
<<<
{{定積分の基本的な性質!!text}}
<<<
</$reveal>
!! [[区分求積法]]
区間 [a, b] の 任意の分割 Δ,,n,, と (その分割の) 代表点の列 $$\xi_n$$ に対して、分割を無限に細かくすると (n → ∞)、その極限は定積分で表せる。
$$\displaystyle \ \ \ \ \ \lim_{n \to \infty} \sum_{i=0}^n f(\xi_i)(x_i - x_{i-1}) = \int_a^b f(x) dx $$
----
! 2. 不定積分
任意の区間 $$I$$ 上の関数を $$f$$ とし、点 a ($$\in I$$) を定めた際に、任意の x ($$\in I$$) に対し、
:$$\displaystyle F(x) = \int_a^x f(t) dx$$
が定まるとき、 関数 $$F$$ を (x を変数とみなして) f の ''不定積分'' という。$$F$$ は $$f$$ が連続のときは、($$f$$の) 原始関数になる。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! ''微分積分法の基本公式''
関数 $$f$$ は区間 $$I$$ で連続とする。$$G(x)$$ を $$f(x)$$ の原始関数とすると、任意の $$a, b (\in I)$$ に対し、
:$$\displaystyle \int_a^b f(x) dx = \left[ G(x) \right]_a^b = G(a) - G(b)$$
が成り立つ。
---
! 3. [[広義積分]]
非有界な区間 $$[a,\infty)$$ 上の関数 f の ''広義積分'' は、つぎのように定義する。
$$\displaystyle \int_a^{\infty} f(x) dx = \lim_{t \to \infty} \int_a^{t} f(x) dx $$
$$(- \infty,\infty)$$ の場合は、適宜な点 c で2つの半開区間に分ける。
$$\displaystyle \int_{-\infty}^{\infty} f(x) dx = \int_{-\infty}^c f(x) dx + \int_c^{\infty} f(x) dx$$
有界な半開区間 $$(a,b], [a,b)$$ 上の関数の場合は、それぞれ、
* $$\displaystyle \int_a^b f(x)dx = \lim_{t \to a+0} \int_t^b f(x)dx $$
* $$\displaystyle \int_a^b f(x)dx = \lim_{t \to b-0} \int_a^t f(x)dx $$
と定義する。
----
! 4. [[重積分]]
2変数関数の場合でもリーマン積分を定義できるが、その定義は1変数の場合よりも複雑になる。
* [[重積分の定義]]
!! 重要な定理など
:$$\displaystyle \iint_I f(x,y) dx dy = \int_a^b \left( \int_c^d f(x,y) dy \right) dx = \int_c^d \left( \int_a^b f(x,y) dx \right) dy $$
----
! [[線積分]]
----
* [[blog.li.nu : all entries categorized to "ベクトル解析"|http://li.nu/blog/cat13/cat-21/cat-22/]]
;面積分
* 面積ベクトル
;ガウスの(発散)定理
*発散の体積分が面積分になる
*体積分の変化率だけなら、その体積を出入りする量を比較すれば計算できる
! 線形写像の定義
[[写像]] $$ f: K^n \rightarrow K^m $$ が 次の2つの性質を有する場合、写像 $$f$$ を ''線形写像'' (linear mapping) または ''線形変換'' (linear transformation) とよぶ。
* 加法性: $$f(x + y) = f(x) + f(y)$$
* 斉次性: $$f(\alpha x) = \alpha f(x)$$
$$(x, y \in A, \alpha \in \mathbb{R})$$
!! 一次変換
<<<
$$f$$ がベクトルの次元を変えないとき、すなわち $$\mathbb{R}^n \to \mathbb{R}^n$$のとき、線形変換(一次変換)と呼ぶこともある。
<<<
[[線形代数I/ベクトル空間と線形写像 - 武内@筑波大|https://dora.bk.tsukuba.ac.jp/~takeuchi/?%E7%B7%9A%E5%BD%A2%E4%BB%A3%E6%95%B0%EF%BC%A9%2F%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E7%A9%BA%E9%96%93%E3%81%A8%E7%B7%9A%E5%BD%A2%E5%86%99%E5%83%8F]]
!! 線形汎関数
$$K^n$$ から $$K$$ への線形写像を ''線形汎関数'' という。''余ベクトル'' または ''共変ベクトル'' (Covector) と呼ぶこともある。
:線形写像 $$f: K^n \rightarrow K $$
(ざっくり言うと、「ベクトル → スカラー」な関数であり、内積などがこれに相当する )
[[線形代数の基礎 - Qiita|https://qiita.com/nognog/items/8279935a96b4ca5dd375]]
!! 直交変換
計量ベクトル空間において内積を変えない線形変換のことを、''直交変換'' という。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
! 基本的な定理・公式
!! 像と核に関する性質
$$ f: K^n \rightarrow K^m $$ とする。この時、以下の性質が成り立つ。
# $$\mathrm{Im} f$$ は、$$K^m$$ の部分空間
# $$\mathrm{Ker} f$$ は、 $$K^n$$ の部分空間
# f が単射 ⇔ $$\mathrm{Ker} f = \{0\}$$
(像と核については [[写像]] 参照)
!! 線形写像の合成写像
$$f: V \to U, g: U \to W$$ が共に線形写像であるとすると、その合成写像 $$f \circ g: U \to W $$ も線形写像となる。
!! 逆写像
$$f: V \to U$$ が [[全単射|写像]]線形写像 であるとすると、その逆写像 $$f^{-1} \circ g: U \to V$$ も全単射線形写像とである。
----
! その他
!! 行列の積との関係
「行列を掛ける操作」 と 「線形写像」 は等価である (必要十分)。
*「線形性を持つベクトル関数 $$(K^m \to K^n)$$ ⇔ n行m列行列」 である。
* [[線形写像としての行列]]
「行列を掛ける操作」 と 「線形写像」 は等価である (必要十分)。
---
! 行列を掛ける操作⇒線形写像
[[行列の積の定義|行列の基本演算]] より、ベクトル x に行列 A を掛けると、各成分が次の式で表されるベクトル z が得られる。
:$$\displaystyle \ \ z_{i} = \sum_{n=1}^k A_{in} x_{n}$$
ここで、ベクトル x + y に行列 A を掛けた場合を考えると、
:$$\displaystyle \ \ \cdot \ \sum_{n=1}^k A_{in} (x_{n} + y_{n}) = \sum_{n=1}^k A_{in} x_{n} + \sum_{n=1}^k A_{in} y_{n} $$
という関係が得られ、ベクトル ax に行列 A を掛けた場合を考えると、
:$$\displaystyle \ \ \cdot \ \sum_{n=1}^k A_{in} (a x_{n}) = a \sum_{n=1}^k A_{in} x_{n} $$
という関係が得られる (a は定数)。
ここで行列を掛ける操作を $$R^k \to R^i$$ という写像だと考えると、この写像は、[[線形写像]] の定義を満たす。
! 線形写像⇒行列を掛ける操作
任意のn次元ベクトル x は、[[正規直交基底|直線座標系]] e の線形結合によって表せる。
:$$\displaystyle x = \sum_{n=1}^k x_i e_i$$
ここで、$$f: R^k \to R^i$$ という線形写像だとすると、
:$$f(x) =f(x_1 e_1) + \cdots + f(x_k e_k) = x_1 f(e_1) + \cdots + x_k f(e_k)$$
と変形できる。さらに、f が返すベクトルの基底を $$e'_i$$ とし、 $$\displaystyle f(e_k) = \sum_{n = 1}^i A_{kn} e'_n$$ とすると、
:$$\displaystyle f(x) = x_1 \sum_{n=1}^i A_{1n} e'_n + \cdots + x_k \sum_{n=1}^i A_{kn} e'_n = \left( \sum_{m=1}^k x_m A_{m1} \right) e'_1 + \cdots + \left( \sum_{m=1}^k x_m A_{mi} \right) e'_i $$
となる。つまり、f が返すベクトルの各成分 z,,i,, は、行列を掛けた場合と同じになる。
:$$\displaystyle z_i = \left( \sum_{m=1}^k x_m A_{mi} \right) $$
https://qiita.com/nognog/items/38f9ad43769835c03801
<<tag "線形代数">>
---
[[線形写像]] を扱うための学問。
以下の分野は、全て線形代数に含まれる。
* [[ベクトル]]
* [[行列]]
* [[テンソル]]
* [[微分]]
* [[積分]]
---
! 線形性
ざっくりいうと、以下の2つの性質 ($$f$$ は写像、$$a$$ はスカラーである)。
# $$ f(x + y) = f(x) + f(y) \ \ $$ [加法性]
# $$ f(ax) = a f(x) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $$ [斉次性]
$$x, y$$ は、ベクトル・行列・テンソル などに加えて、関数でもよい (例: $$f$$ が微分演算子の場合)。
なお、これらの性質は、まとめて書くこともできる。
:$$ f(ax + by) = a f(x) + b f(y) $$
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! 具体例
* 原点を通る一次関数
* ベクトルの加法とスカラー倍
* 微分・積分
* [[線形写像としての行列]]
! [[線形写像]]
言葉通りであるが、線形性を持つ写像のことを ''線形写像'' という。
; 線形写像に関わる重要な概念:
* 加法・スカラー倍
* [[像・核・ランク|写像]]
* [[全射・単射|写像]]
* 逆写像
!! 線形汎関数
「ベクトル ⇒ スカラー」である線形写像のことを ''線形汎関数'' という。''余ベクトル'' または ''共変ベクトル'' (Covector) と呼ばれることもある。
----
! [[双線形性]]
2変数関数 $$f: V \times W \rightarrow X $$ に対しても線形性に似た性質を考えることができ、それを ''双線形性'' という。
大まかに言うと、次のような性質である。
* $$f(v_1 + v_2, v_1) = f(v_1, w_1) + f(v_2, w_1)$$
* $$f(k v_1, w_1) = kf(v_1, w_1)$$
* $$f(v_1, w_1 + w_2) = f(v_1, w_1) + f(v_1, w_2)$$
* $$f(v_1, k w_1) = kf(v_1, w_1)$$
! 多重線形性
多変数関数に関しても、同様に考えることができる。
----
; サイトのリンク
* [[線形代数のおはなし|http://senkei.nomaki.jp/index.html]]
! 大まかな定義
!! 曲線の長さ
!!! ''正規直交座標の場合''
ある n次元上の 曲線C が、媒介変数 t を用いて、次のように表されるとする。
:$$x_1 = r_1(t), \ \ x_2 = r_2(t), \ ... \ , x_n = r_n(t)$$
このとき、t が [a, a + t,,0,,] を取る区間の曲線の長さ s は、以下のように計算できる。
: $$\displaystyle s(t_0) = \int_{a}^{a+t_0} \sqrt{ \left( \dfrac{dr_1(t)}{dt} \right) ^2 + \left( \dfrac{dr_2(t)}{dt} \right) ^2 + \cdots + \left( \dfrac{dr_n(t)}{dt} \right) ^2 } dt $$
また、右辺の被積分関数は、''線素'' ds と呼ばれることもある。
: $$ds = |d\mathbf{r}| = \sqrt{ \left( \dfrac{dr_1(t)}{dt} \right) ^2 + \left( \dfrac{dr_2(t)}{dt} \right) ^2 + \cdots + \left( \dfrac{dr_n(t)}{dt} \right) ^2 } dt = \left| \dfrac{dr}{dt} \right| dt$$
!!! ''一般座標の場合''
一般座標の場合には、線素を次のように計算する必要がある (g は計量テンソル)。
: $$\displaystyle ds = \sqrt{ \sum_{i,j} g_{ij} \dfrac{dr^i(t)}{dt} \dfrac{dr^j(t)}{dt} } dt$$
!! 接ベクトル
r(t) の t,,0,, における微分係数を、t,,0,, における''接ベクトル''という。
:$$\dfrac{d \mathbf{r} (t_0)}{dt} =\left( \dfrac{dr_1(t_0)}{dt}, \ \dfrac{dr_2(t_0)}{dt}, \ \cdots \ , \dfrac{dr_n(t_0)}{dt} \right) $$
また、接ベクトルを接ベクトルの大きさで割ったものを、''単位接ベクトル'' という。
:$$\dfrac{1}{ \left| \dfrac{d\mathbf{r}}{dt} \right|} \dfrac{d\mathbf{r}}{dt} = \dfrac{d\mathbf{r}}{ds} $$
- - - - - - - - - -
!! スカラー場の線積分
n次元上にスカラー場 $$f(r)$$ が定義されている時、''曲線C 上の [a, b] 間のスカラー場の線積分'' は次のように定義される。
:$$\displaystyle \int_{a}^{a+t_0} f(\mathbf{r}(t)) ds = \int_{a}^{a+t_0} \left[ f(\mathbf{r}(t)) \sqrt{ \left( \dfrac{dr_1(t)}{dt} \right) ^2 + \left( \dfrac{dr_2(t)}{dt} \right) ^2 + \cdots + \left( \dfrac{dr_n(t)}{dt} \right) ^2 } \right] dt $$
!! ベクトル場の線積分
n次元上にベクトル場 $$A(r)$$ が定義されている時、''曲線C 上の [a, b] 間のベクトル場の線積分'' は、曲線 C の接ベクトル(あるいは線素) と A(r) の内積を用いて、次のように定義される。
:$$\displaystyle \int_{a}^{a+t_0} \left[ \dfrac{d\mathbf{r}(t)}{dt} \cdot A(\mathbf{r}(t)) \right] dt = \int_{a}^{a+t_0} \left[ \dfrac{d\mathbf{r}(t)}{ds} \cdot A(\mathbf{r}(t)) \right] ds $$
また、正規直交基底ならば、次のように計算できる。
:$$\displaystyle \int_{a}^{a+t_0} \left[ \dfrac{d\mathbf{r}(t)}{dt} \cdot A(r(t)) \right] dt = \int_{a}^{a+t_0} \left[ \sum_{i=1}^n A_i(\mathbf{r}(t)) \dfrac{dr_i(t)}{dt} \right] dt = \int_{a}^{a+t_0} \left[ A_1(r) \dfrac{dr_1(t)}{dt} + \cdots A_n (r) \dfrac{dr_n(t)}{dt} \right] dt $$
- - - - - - - - - -
!! 周回積分
閉曲線を一周する線積分を周回積分(閉路積分)といい、 $$\displaystyle \oint$$ の記号であらわす。積分の方向が反時計回りを、正とする。
----
! 証明など
あんまり厳密ではないが、曲線については、次のように考えておく。また、二次元の場合について書くが、より高い次元でも同じように考えることができる (はず)。
!! 曲線の定義
(あるxy 平面上の) 曲線C は、媒介変数 t を用いて、次のように表されるものとする。
:$$x = \phi(t), \ \ y = \psi(t)$$
また、 $$\phi, \psi$$ は微分可能 (C1 でOK?)。
!! 曲線の長さ
t の 区間 [a, b] の分割 Δ
: $$\Delta : (a = ) \ t_0 \lt t_1 \lt \cdots \lt t_n \ (= b), \ \ |\Delta| = \max|t_i - t_{i-1}|$$
に対し、t,,i,, に対応する点を $$P_i (\phi(t_i), \psi(t_i))$$ とし、折れ線 P,,0,, P,,1,, ... P,,n,, の長さを
:$$\displaystyle l(C, \Delta) = \sum_i^n |P_i - P_{i-1}|$$
とおく。このとき、次の極限が存在すれば、それを ''曲線の長さ'' $$l(C)$$とする。
:$$\displaystyle l(C) = \lim_{|\Delta| \to 0} l (C, \Delta)$$
!!! ''[[Riemann積分可能]] との関係''
P,,i-1,, と P,,i,, を結ぶ線分の長さ $$\overline{P_{i-1} P_i}$$ は、次のように表せる。
:$$\overline{P_{i-1} P_i} = \sqrt{ [ \phi(t_i) - \phi(t_{i-1}) ]^2 + [ \psi(t_i) - \psi(t_{i-1}) ] ^2} = \sqrt{ \left[ \dfrac{\phi(t_i) - \phi(t_{i-1})}{t_i - t_{i-1}} \right]^2 + \left[ \dfrac{\psi(t_i) - \psi(t_{i-1})}{t_i - t_{i-1} } \right] ^2} \cdot (t_i - t_{i-1})$$
ここで [[平均値の定理|Taylorの定理]]を用いると、$$[t_{i-1}, t_i]$$ に属するある数を c,,i,,, d,,i,, を用いて、
:$$\overline{P_{i-1} P_i} = \sqrt{ \phi'(c_i)^2 + \psi'(d_i) ^2} \cdot (t_i - t_{i-1})$$
と変形することができる。
また、閉区間 [a, b] 上で $$\phi', \psi'$$ が 一様連続ならば、
:$$\displaystyle \lim_{\xi_i \to c_i} \phi'(\xi_i) = \phi'(c_i), \ \ \lim_{\xi_i \to d_i} \psi'(\xi_i) = \phi'(d_i) $$
であるので$$ (\xi_i \in [t_{i-1}, t_i]) $$、任意の ε > 0 に対して,十分小さい δ をとると,|∆| < δ ならば,すべての i について、
:$$|\phi'(c_i) - \phi'(\xi_i)| < \epsilon, \ \ |\psi'(d_i) - \psi'(\xi_i)| < \epsilon$$
が成り立つ。さらに、「 |∆| < δ' ならば |c,,i,, - d,,i,,| < ϵ' 」 ということも言える(はず)なので、
:$$|\sqrt{ \phi'(c_i)^2 + \psi'(d_i) ^2} - \sqrt{ \phi'(\xi_i)^2 + \psi'(\xi_i) ^2}| < \epsilon''$$
も成り立つ (はず)。
よって、分割が十分小さい時 (|∆| → 0) は、
:$$\displaystyle l(C, \Delta) = \sum_i^n |P_i - P_{i-1}| = \sum_i^n \sqrt{ \phi'(\xi_i)^2 + \psi'(\xi_i) ^2} \cdot (t_i - t_{i-1})$$
となるが、これは [[区分求積法]] の話で出てくる式と同じ形である。よって、
:$$\displaystyle l(C) = \lim_{|\Delta| \to 0} l (C, \Delta) = \int_a^b \sqrt{ \phi'(t)^2 + \psi'(t) ^2} dt $$
となる。
* https://pc1.math.gakushuin.ac.jp/~kawasaki/12kyokusen-to-kyokumen.pdf
----
----
! ざっくりした証明
https://pc1.math.gakushuin.ac.jp/~kawasaki/12kyokusen-to-kyokumen.pdf
<<<
''定義 1.2''. C を $$\mathbb{R}^2$$ 内の図形とする.
1) C が曲線であるとは,ある連続かつ単射であるような写像(函数)$$f : \mathbb{R} \to \mathbb{R}^2$$
を用いて
:$$C = f(\mathbb{R}) = \{ f(t) | \ t \in \mathbb{R} \}$$
と書けることを言う.
<<<
https://www.ms.u-tokyo.ac.jp/~asuke/works/curves.pdf
- - - -
!! 線積分
まず、[t,,a,,, t,,b,,] 間の曲線 C を次のように分割し、
: $$\Delta : (t_a = ) t_0 \lt t_1 \lt \cdots \lt t_n (= t_b) $$
t,,i,, に対応する点を $$P_i (\phi(t_i), \psi(t_i))$$ とする。
また、このとき P,,i-1,, と P,,i,, を結ぶ線分 $$\overline{P_{i-1} P_i}$$ は、次のように表せる。
:$$\overline{P_{i-1} P_i} = \sqrt{ [ \phi(t_i) - \phi(t_{i-1}) ]^2 + [ \psi(t_i) - \psi(t_{i-1}) ] ^2} = \sqrt{ \left[ \dfrac{\phi(t_i) - \phi(t_{i-1})}{t_i - t_{i-1}} \right]^2 + \left[ \dfrac{\psi(t_i) - \psi(t_{i-1})}{t_i - t_{i-1} } \right] ^2} \cdot (t_i - t_{i-1})$$
ここで、分割の代表点の列 $$\xi = (\xi_1, \xi_2, ... , \xi_n) $$ をとすると、
【式1】の証明は、$$[t_{i-1}, t_i]$$ に属する任意の数を c,,i,,, d,,i,, とした時に、
$$\displaystyle E = \sum
$$
----
* https://eman-physics.net/math/calculus02.html
* http://www2.math.kyushu-u.ac.jp/~hara/lectures/06/zoku15-060525.pdf
多変数関数 F(x,,i,,) 上のある点の周りでの線形近似。みたいなもの。だと思う。
---
! 定義
関数 $$z = f(x,y)$$ 上の点 $$(x_1, y_1)$$ の近傍 $$(\Delta x \to 0, \Delta y \to 0)$$において、
$$ f(x_1 + \Delta x, y_1 + \Delta y) - f(x_1,y_1) = A\Delta x_1 + B \Delta y _1+ o (\sqrt{\Delta x^2 + \Delta y^2}) $$
という関係が成り立つとき、「''関数 z は 点 $$(x_1,y_1)$$ において(全)微分可能''」であるという。$$A, B$$ は $$\Delta x, \Delta y$$ に関係しない係数である。
!! 全微分可能性の示し方
全微分可能であるためには、''(x, y) を (x,,1,,, y,,1,,) に近づけるすべての近づけ方について'' 上記の関係が成り立たなければならない。
これを示すためには、$$x = x_1 + r \cos \theta, \ y = y_1 + r \sin \theta$$ と置き、
$$\displaystyle \lim_{r \to 0} \dfrac{ f(x,y) - f(x_1, y_1) - A (x-x_1) - B (y - y_1)}{\sqrt{(x - x_1)^2 + (y - y_1)^2}} = 0$$
を示す必要がある。
* https://lecture.ecc.u-tokyo.ac.jp/~nkiyono/2010/610-04.pdf
ただし、「''C^^1^^ 級関数は全微分可能である''」という定理があるため、上記の方法でわざわざ示さなくてもすむケースが多い。
* 定義域内のあらゆる点で偏微分可能で、すべての偏導関数が連続であるような関数のことを ''C^^1^^級関数'' と言う
- - - - -
---
! ざっくりとした導出
多変数関数 F(x,,i,,) 上のある点 P = (x,,pi,,) と その近傍の点 Q = (x,,pi,, + Δh,,i,,) との差 (dF) を、一次近似を用いて表すと、
$$dF = \left[ F(x_{p1} + \Delta h_1, x_{p2}, ...) - F(x_{p1}, x_{p2}, ...) \right] + \left[ F(x_{p1}, x_{p2}+ \Delta h_2, ...) - F(x_{p1}, x_{p2}, ...) \right] + ... + \epsilon(h)$$
$$dF = \dfrac{F(x_{p1} + \Delta h_1, x_{p2}, ...) - F(x_{p1}, x_{p2}, ...) }{\Delta h_1} \Delta h_1 + \dfrac{F(x_{p1}, x_{p2} + \Delta h_2, ...) - F(x_{p1}, x_{p2}, ...)}{\Delta h_2} \Delta h_2 + ... + \epsilon(h)$$
となる。ただし、これはあくまで近似であり、実際の値との間には誤差 (ϵ) が生じる。
しかしながら、$$h \to \mathbf{0}$$ の時に $$\epsilon(h)$$ の部分が h の各項よりも早く 0 に近づくならば、Q が P に十分近い時には ϵ は無視でき、dF は次のように表せる。
$$\displaystyle dF = \lim_{\Delta h \to \mathbf{0}} \left[ \dfrac{F(x_{p1} + \Delta h_1, x_{p2}, ...) - F(x_{p1}, x_{p2}, ...) }{\Delta h_1} \Delta h_1 + \dfrac{F(x_{p1}, x_{p2} + \Delta h_2, ...) - F(x_{p1}, x_{p2}, ...)}{\Delta h_2} \Delta h_2 + ... \right]$$
(数学的な厳密な取り扱いは分からないが) 分数の部分は偏微分の形になっているので、偏微分を用いて書き直すと、以下のようになる。
$$\displaystyle dF = \lim_{\Delta h \to \mathbf{0}} \left[ \dfrac{\partial F}{\partial x_1} \Delta h_1 + \dfrac{\partial F}{\partial x_2} \Delta h_2 + ... \right]$$
$$\epsilon(h)$$ がどのくらい早く 0 に近づく必要があるかというと、これは微分の場合と同様に、
$$\displaystyle \lim_{\Delta h \to \mathbf{0}} \dfrac{\| \epsilon(h) \|}{\| h \|} = 0$$
となる (h はベクトルである点に注意)。
---
! その他
* ($$\Delta x, \Delta y $$ が小さくない値も取るとすれば) $$dz$$ は 点 $$(x_1,y_1)$$ の接平面を表す式である。
* $$dz = 0$$ の形にまとめることができる微分方程式は、積分することによって解を求めることができる ($$z = C$$ の形になる)。
** [[全微分|http://www.phys.u-ryukyu.ac.jp/~maeno/sizensuugaku/lec25.html]]
-
* https://qiita.com/bellbind/items/bd0411957e2363456ea1
---
---
そして、
$$dz = \dfrac{\partial z}{\partial x} \Delta x + \dfrac{\partial z}{\partial y} \Delta y$$
を ''z の全微分'' という。なお、 $$\Delta r = (\Delta x, \Delta y)$$ とすると、dz は次のようにも書ける。
$$dz = (\nabla z) \cdot \Delta r$$
! 双線形写像
<<<
U, V, W を実ベクトル空間とする。写像 $$f: U \times V \rightarrow W $$ が次の条件を
満たすとき、$$f$$ を双線形写像と呼ぶ。
* 任意に $$v \in V$$ をとると、写像 $$ U \rightarrow W ; u \mapsto f(u,v) $$ は線形写像になる。
* 任意に $$u \in U$$ をとると、写像 $$ V \rightarrow W ; v \mapsto f(u,v) $$ は線形写像になる。
<<<
http://www.math.tsukuba.ac.jp/~tasaki/lecture/ln2008/2008t.pdf
より具体的に言えば、次の性質を満たす写像のことである。
* $$f(u + w, v) = f(u, v) + f(w, v)$$
* $$f(ku, v) = kf(u, v)$$
* $$f(u, v + w) = f(u, v) + f(u, w)$$
* $$f(u, kv) = kf(u, v)$$
定義から明らかだが、U, V, W のベクトル空間(ベクトルの次元)は、同じである必要はない。
!! 具体例
* ベクトルの内積
* 行列式 det
----
! 対称と交代
!! 対称
U = V である双線形写像について、全ての $$u, v \in V$$ に対して、$$f(u,v) = f(v,u)$$ が成り立つ場合を、''対称'' という。
!! 交代
全ての $$u, v \in V$$ に対して、$$f(u,v) = - f(v,u)$$ が成り立つ場合を、''交代'' という。
----
! 双線型形式
スカラー値を返す双線型写像のことを、''双線型形式'' という。
双線型形式 $$f: U \times V \rightarrow F $$
また、U = V であれば、双線型形式 $$f: R^n \times R^n \rightarrow R $$ は、n x n 行列 (A)で表すことができる。
$$\displaystyle f(u, v) = u^T A v = \sum_{i}^n \sum_{j=1}^n A_{ij} u_i v_j $$
* http://obelisk2.hatenablog.com/entry/20140130/1391069983
!! 対称双線型形式
対称な双線型形式を、''対称双線型形式'' という。具体例としては、 [[内積]] を思い浮かべればよい。
対称双線型形式を行列計算で表した場合、行列は対称行列になる。
* https://www.cck.dendai.ac.jp/math/support/advance/%E5%8F%8C1%E6%AC%A1%E5%BD%A2%E5%BC%8F.pdf
!! 交代双線型形式
---
----
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
<<<
双線型写像の片方の成分を固定し、もう片方を変動させることで得られる写像がともに線型写像であることを意味する。
<<<
[[双線型写像 - Wikipedia|https://ja.wikipedia.org/wiki/%E5%8F%8C%E7%B7%9A%E5%9E%8B%E5%86%99%E5%83%8F]]
! 双対空間
体 $$F$$ 上の、任意のベクトル空間 V 上の線型汎函数 $$\phi: V \to F$$ 全体の成す空間 $$V^*$$ を、''双対空間 (dual space)'' あるいは ''双対ベクトル空間'' という。
<<<
線形空間VからWへの線形写像全体をHom(V,W)で表す記法もあります.
この表現を用いると,$$V^* = \mathrm{Hom}(V,K)$$と表すことができます.
<<<
[[双対空間とブラベクトル,反変・共変ベクトルの座標変換 - Notes_JP|https://www.mynote-jp.com/entry/DualVectorSpace]]
- - - - -
$$V^*$$ は線形写像なので、行列(の積)で表すことができる。
* [[線形写像としての行列]]
集合としての $$V^*$$ には、加法とスカラー乗法が定義できる $$(\phi, \psi \in V^*, x \in V, a \in F)$$ 。
* $$(\phi + \psi) (x) = \phi(x) + \psi(x)$$
* $$(a \phi) (x) = a (\phi(x))$$
また、 $$V^*$$ は $$F$$ 上のベクトル空間となる。
---
! 双対基底
V が有限次元ならば、V* は V と同じ次元を持つ。$$V$$ の基底 $$\{e_1, e_2, \ldots ,e_n \}$$ から ''双対基底 (dual basis)'' と呼ばれる __特別な V* の基底__ を定義することができる。それは $$V$$ 上の線型汎函数の集合 $$\{e^1, e^2, \ldots , e^n \}$$ で、
: $$\langle e^i , e_j \rangle = e^i (e_j) = \delta^{i}_{j}$$
を満たすものと定義される ($$\delta^{i}_{j}$$ はクロネッカーのデルタ)。
なお、「''V の基底が直交基底ならば、双対基底は Vの基底 と同じ''」になる。
<<<
線形空間 V の一つの基底を $$G = \{g_i\}$$ とする。
...
双対空間 $$V^*$$ の任意の元 (線形関数) $$\phi$$ は、双対基底 $$\sum = \{\sigma^i\}$$ を用いることによって、次のようにユニークに表される。
$$\phi = \phi_i \sigma^i \ \ \ \ \ ( \phi_i := \phi[g_i] \in R)$$
<<<
[[テンソル代数・テンソル解析 - 第2講 テンソル代数I|http://www.jsces.org/activity/journal/files/tutorial_2002.pdf]]
- - - - - - - - - -
!! 座標変換
$$V$$ の基底の変換が、直交行列 $$A = ({\alpha^j}_i)$$ をもちいて、
:$$\displaystyle e_i' = \sum_{j=1}^n {\alpha^j}_i e_j = ({\alpha^1}_1 e_1 + \cdots + {\alpha^n}_1 e_n) + ({\alpha^1}_2 e_1 + \cdots + {\alpha^n}_2 e_n) + \cdots + ({\alpha^1}_n e_1 + \cdots + {\alpha^n}_n e_n)$$
と表されるとする。さらに、双対基底 $$e^i$$ の変換が、別の直交行列 $$B = ({\beta^i}_j)$$ をもちいて、
:$$\displaystyle e^{\prime i} = \sum_{j=1}^n {\beta^i}_j e^j = ({\beta^1}_1 e^1 + \cdots + {\beta^1}_n e^n) + ({\beta^2}_1 e^1 + \cdots + {\beta^2}_n e^n) + \cdots + ({\beta^n}_1 e^1 + \cdots + {\beta^n}_n e^n)$$
と表すとすると、
:$$\displaystyle \delta^{i}_{j} = e^{\prime i} (e'_j ) = \left( \sum_{k=1}^n {\beta^i}_k e^k \right) \left( \sum_{l=1}^n {\alpha^l}_j e_l \right) = {\beta^i}_k {\alpha^k}_j $$
となるため、「''βはαの逆行列であることが分かる''」。
なお、「行列は1階反変1階共変テンソル」 なので、「$$A, B$$ は 1階反変1階共変テンソル」 と考えた方が分かりやすい場面もある。
[[テンソルと行列が混同される理由 - Notes_JP|https://www.mynote-jp.com/entry/TensorAndMatrixRelation]]
---
! 反変ベクトル・共変ベクトル
$$V$$ の元を ''反変ベクトル''、$$V^*$$ の元を ''共変ベクトル'' という。
- - - - - - - - - -
!! 反変ベクトルの座標変換
反変ベクトル $$x \in V$$ は、($$V$$の元であるため) 基底を用いて表すことができる ($$v^i$$ は成分)。
:$$\displaystyle x = \sum_{i=1}^n v^i e_i$$
[[直線座標系の座標変換]] で導いた関係を用いると、基底 $$e_i$$ が 直交行列 $${A^i}_j$$ を用いて 基底 $$e'$$ に線形変換される場合、
:$$e'_j = {A^i}_j e_i $$
基底 $$e'$$ 上での成分 ($$v'$$) は、$$A$$ の逆行列 $$ {\bar{A}^j}_i$$ を用いて、次のように表すことができる。
:$${\bar{A}^j}_i {v}^i = v'^j$$
つまり、ベクトル $$x$$ について、次の関係が成り立つ。
:$$\displaystyle x = \sum_{i=1}^n v^i e_i = \sum_{i=1}^n {\bar{A}^j}_i v^i e_i'$$
!! 共変ベクトルの座標変換
$$V$$ の基底が行列 $$A$$ で線形変換される時、双対空間 $$V^*$$ の基底は $$A$$ の逆行列 で変換される。
そのため、行列 $$A$$ による変換における 共変ベクトル $$x^* \in V^*$$ の成分の変換は、「$$A$$ の逆行列の逆行列 (つまり $$A$$)」で変換されることになる。
- - - - - - - - - -
https://www.mynote-jp.com/entry/DualVectorSpace
---
! 双対写像
<<<
$$f: V \to W$$ に対して、 $$f^*: V^* \to W^*$$ を次によって定義し、これを f の双対写像 と呼ぶ。
$$g \in W^*$$ に対して、 $$(f^*g)(x) := g(f(x))$$
<<<
https://www22.atwiki.jp/linearalgebra/pages/54.html
https://ja.wikibooks.org/wiki/%E7%B7%9A%E5%9E%8B%E4%BB%A3%E6%95%B0%E5%AD%A6/%E7%B7%9A%E5%9E%8B%E7%A9%BA%E9%96%93
http://www.wikiwand.com/ja/%E3%83%86%E3%83%B3%E3%82%BD%E3%83%AB
<<list-links filter:[tag[層流]] >>
英語だと ''Law of Corresponding States (CS)'' という。
「異なる気体であっても、同じ reduced temperature と reduced pressure の時には Z-factor が等しくなる。」という経験的な法則 (empirical law)。
---
! Two parameters CS
!! Assumptions
Pitzer [2] produced a list of assumptions in order for the law of corresponding states to apply. This list was later modified by Guggenheim [3]. These are:
# There is negligible difference between Fermi–Dirac statistics and Bose–Einstein statistics for the system (i.e. the system behaves classically).
# The effect of quantisation of the translational degrees of freedom is negligible (i.e. the system behaves classically).
# The molecules are ''spherically symmetrical'', either actually or by virtue of rapid and free rotation.
# The intramolecular degrees of freedom are assumed to be completely independent of the volume per molecule.
# The potential energy will be taken as ''a function only of the various intermolecular distances''.
# The potential energy for a pair of molecules can be written as $$A\Phi (r/r_0)$$ where r is the intermolecular distance, and A and $$r_0$$ are characteristic constants, and $$\Phi$$ is a universal function.
Reference: [[Law of corresponding states page on SklogWiki - a wiki for statistical mechanics and thermodynamics|http://www.sklogwiki.org/SklogWiki/index.php/Law_of_corresponding_states]]
!! Scaling Parameters (characteristic constants)
分子間のポテンシャルエネルギーが、(分子を球と仮定した場合と同様に)2つのパラメータ(ε, σ)で表せるとすると、
''Reference Fluid'' (all parameters of this are known): $$\phi_{ref}(r) = \epsilon_{ref} F \left( \dfrac{r}{\sigma_{ref}} \right) $$
''Unknown Fluid'':
$$\phi_u(r) = \epsilon_u F \left( \dfrac{r}{\sigma_u} \right) $$
と書くことができる。ここで、 $$f_u = \dfrac{\epsilon_u}{\epsilon_{ref}}, (h_u)^{1/3} = \dfrac{\sigma_u}{\sigma_{ref}}$$ と定義し、代入すると、
$$\phi_{ref}(r) = \dfrac{1}{f_u} \epsilon_u F \left( \dfrac{r}{\sigma_u / h_u^{1/3}} \right) = \dfrac{1}{f_u} \phi_{u}(r/ h_u^{1/3}) $$
という関係が得らえる。この関係から、分配関数に関する、
$$Q_u^{RES}(T, V) = Q_{ref}^{RES}(T/f_u,V/h_u) $$
という関係が得らえる(らしい)。
なお、マクロなパラメータとの関係を考えると、
$$f_u = \dfrac{\epsilon_u}{\epsilon_{ref}} = \dfrac{T^C_u}{T^C_{ref}}$$
$$h_u = \left( \dfrac{\sigma_u}{\sigma_{ref}} \right)^3 = \dfrac{V^C_u}{V^C_{ref}}$$
である。
!! 使い方
ある気体の Z-factor, Tr, Pr が分かれば、別の気体の Z-factor は その別の気体の Tr, Pr から推定できる。(Tr, Pr は Tc, Pc から計算するので、実際に必要なのは Tc, Pc)
例:
$$Z(V_{r,u}, T_{r,u}) = Z(V_{r,ref}, T_{r,ref})$$
$$Z(P_{r,u}, P_{r,u}) = Z(P_{r,ref}, P_{r,ref})$$
! Three parameters CS
2パラメータCSでは、分子の形を球であると仮定したが、この仮定を取り払う。
!! Acentric factor
$$\omega = - 1 - \log_{10} \left( \dfrac{p_{vap}(T_r = 0.7) }{p^C} \right)$$
! Four parameters CS
極性分子への対応。
---
---
''Reference Fluid'' (all parameters of this are known): $$A_{ref} \Phi (r/r_{0,ref})$$
''Unknown Fluid'': $$A_{u} \Phi (r/r_{0,u}) = A_{ref} \dfrac{A_{u}}{A_{ref}} \Phi (\dfrac{r}{r_{0,ref}} \dfrac{r_{0,ref}}{r_{0,u}}) = A_{ref} f_u \Phi (\dfrac{r}{h_ur_{0,ref}} )$$
$$\phi_u(r) = \epsilon_{ref} f_u F \left( \dfrac{r}{(h_u)^{1/3} \sigma_{ref} } \right)$$
$$= \epsilon_{ref} \dfrac{\epsilon_u}{\epsilon_{ref}} F \left( \dfrac{r}{\sigma_{ref} \dfrac{\sigma_u}{\sigma_{ref}}} \right)
! n次相転移
オランダの物理学者エーレンフェスト(P.Ehrenfest)は,[[ギブスの自由エネルギー]] Gのn次微分が不連続になるものを,n次相転移と定義した.
!! 1次相転移
ギブスエネルギーの温度・圧力での偏微分は、それぞれエントロピー・圧力になるため、1次相転移ではこれらが不連続になる。
$$\left(\dfrac{\partial G}{\partial T}\right)_{p,N} = -S(T,p;N)$$
$$\left(\dfrac{\partial G}{\partial p}\right)_{T,N} = V(T,p;N)$$
https://info.ouj.ac.jp/~hamada/TextLib/rm/chap8/Text/Cr990802.html
相平衡の状態では、全ての成分において、液相・気相の化学ポテンシャルが等しくなる。
$$\mu^V_i = \mu^L_i$$
相の数が3以上でも、同様の関係が成り立つ。
$$\mu^{\alpha}_i = \mu^{\beta}_i = \mu^{\gamma}_i = ...$$
---
! 一成分系の相平衡
一成分系の相転移は、温度・圧力のいずれかを固定すると、定圧・定温の条件下で起こることになる。つまり、「dP = dT = dN = 0」なので、上の式が成り立つ状況であれば、 ''dG = 0'' となる。
ここで、気相と液相を別々の系とみなすと、dP = dT = 0 より、
$$ dG = dG_v + dG_l = (S_v + S_l) dT + (V_v + V_l) dP + \mu_v dN_v + \mu_l dN_l = \mu_v dN_v + \mu_l dN_l = 0$$
と書ける(T, P はどちらの相でも同じ値)。さらに、$$ dN_v = - dN_l $$ なので、
$$ \mu_v = \mu_l$$
となる。
---
! 多成分系の相平衡
気相と液相を別々の系とみなすと、ギブスエネルギーが示量変数であることを用いて、
$$\displaystyle dG = dG^V + dG^L = (S^V + S^L) dT + (V^V + V^L) dP + \sum_i \mu_i^V dN^V_i + \sum_i \mu_i^L dN^L_i $$
と表すことができる。さらに、 $$ dN^V_i = - dN^L_i$$ の関係を使うと、
$$\displaystyle dG = (S^V + S^L) dT + (V^V + V^L) dP + \sum_i dN^V_i (\mu_i^V - \mu_i^L) $$
という関係が得られる。
また、エントロピー と 体積 の示量性から、
$$ S = S^L + S^L, V = V^L + V^L $$
の関係が成り立つことと、系全体では物質量は変化しない(dN = 0)ことから、
$$\displaystyle \sum_i dN^V_i (\mu_i^V - \mu_i^L) = 0 $$
の関係が得られる。
[[相平衡の条件 – now♯|http://nowsharp.com/wiki/thermodynamics/%e7%9b%b8%e5%b9%b3%e8%a1%a1%e3%81%ae%e6%9d%a1%e4%bb%b6]]
! 測度 (Measure)
$$\beta$$ を 集合 $$X$$ の部分集合からなる (空集合でない) [[完全加法族|加法族]] とし、$$A, B, A_n \in \beta$$ とした時に、次のような条件を満たす写像 $$\mu: \beta \to \mathbb{R}$$ のことを''測度 (measure)'' という。
# $$\mu(\emptyset) = 0 \ \ \ \ \ \ $$ (空集合の測度は 0)
# $$\displaystyle A_j \cap A_k = \emptyset \ \ [j \neq k] \implies \mu(\bigcup_{n=1}^{\infty} A_n) = \sum_{n=1}^{\infty} \mu(A_n) \ \ \ \ \ \ $$ (矢印の左側は $$A_n$$ が互いに素であることを意味する)
この定義から、次のことが言える (はず)。
# $$\mu(A) \geq 0$$
# $$A \subseteq B \implies \mu(A) \leq \mu(B) $$
; 例:
加法族の例と同じように、1から4までの目がでる正四面体のさいころを例にすると、
* $$\mu( \{ 1 \}) = \mu( \{ 2 \}) = \mu( \{ 3 \}) = \mu( \{ 4 \}) = 1/4$$
* $$\mu( \{ 1,2 \}) = \mu( \{ 1,3 \}) = \mu( \{ 1,4 \}) = \mu( \{ 2,3 \}) = \mu( \{ 2,4 \}) = \mu( \{ 3,4 \}) = 1/2$$
* $$\mu( \{ 1,2,3 \}) = \mu( \{ 1,2,4 \}) = \mu( \{ 1,3,4 \}) = \mu( \{ 2,3,4 \}) = 3/4$$
* $$\mu( \{ 1,2,3,4 \}) = 1 $$
* $$\mu( \{ 1,2 \}) = \mu( \{ 1 \}) + \mu( \{ 2 \})$$
といった測度を定義することができる。
- - - - - - - - - - - - - - - - - - - -
! 可測空間・測度空間
* $$\beta$$ の元を ''可測集合 (measurable sets)'' という
* $$(X, \beta)$$ のことを ''可測空間 (Measurable space)'' という
* $$(X, \beta, \mu)$$ のことを ''測度空間'' という。
! 確率測度
$$\mu(X) = 1$$ であるような測度を ''確率測度'' という。
確率測度の具体的な形式は、ざっくり3つのパターンに分けられる (と思う)。
# どの結果も同じ割合で出現すると仮定する (例: サイコロ、コイントス)
# ある確率分布 (正規分布など) に従うと仮定する
# 真の値 (母集団) が完全に分かっている場合 (例: あるクラスの学生の生まれた月)
----
! 参考にしたサイト
* [[ときわ台学・ルベーグ積分|http://www.f-denshi.com/000TokiwaJPN/16lebeg/apdx03.html]]
* https://mathematics-pdf.com/pdf/measure.pdf
https://qiita.com/mo-mo-666/items/731bf1d58a7720aa7739
https://mcm-www.jwu.ac.jp/~konno/pdf/statga154.pdf
<<tag "多成分系の熱力学">>
----
! [[化学ポテンシャル]]
多相多成分系を扱う際に最も重要となるのは、''部分モル化学ポテンシャル'' である。
:$$ \mu_i = \left( \dfrac{\partial G}{\partial N_i} \right)_{T,p} = \left( \dfrac{\partial H}{\partial N_i} \right)_{S,p} = \left( \dfrac{\partial F}{\partial N_i} \right)_{T,V} = \left( \dfrac{\partial U}{\partial N_i} \right)_{S,V} $$
!! [[相平衡]]
相平衡の状態では、全ての成分において、液相・気相の化学ポテンシャルが等しくなる。
:$$\mu^V_i = \mu^L_i$$
!! [[理想気体の化学ポテンシャル]]
多成分系における成分 i の化学ポテンシャルは、''温度'' と ''成分 i の分圧'' ($$p_i$$) を用いて表せる。
:$$\mu_i(T,p_i) = \mu_i(T, p_0) + RT \ln \left( \dfrac{p_i}{p_0} \right)$$
実在気体を扱う場合は、圧力を [[フガシティ]] に置き換える。
----
! [[理想気体の混合エントロピー]]
理想気体では、混合に伴うエントロピー変化を次のように表せる。
:$$\displaystyle \Delta S_{mix} = R \sum_i N_i \ln \dfrac{N_i}{N_{total}} = N_{total} R \sum_i y_i \ln y_i $$
この関係 (とドルトンの法則) は、混合理想気体の各成分の化学ポテンシャルの式を導く際に使用する。
:$$\mu_i = \mu^0_i(P,T) + RT \ln x_i $$
$$x_i$$ はモル分率である。$$\mu^0_i$$ は、純粋な成分 i の 1mol のギブス自由エネルギーであり、''標準化学ポテンシャル'' と呼ばれる。
---
![[ドルトンの法則]]
理想気体では、系の圧力 (p) は分圧の和になる。
$$p = \sum p_i = \dfrac{RT}{V} \sum n_i = \dfrac{nRT}{V} \sum y_i$$
$$p_i = x_i p$$
<<<
ドルトンの分圧の法則は,理想気体では厳密に成立するが,実在気体では少しずれることが知られている。
<<<
http://keirinkan.com/kori/kori_chemistry/kori_chemistry_2/contents/ch-2/1-bu/1-3-1.htm
---
! [[ラウールの法則]]
溶液の成分 i の蒸気圧 ($$p_i$$) は、その成分が単独で存在するときの蒸気圧 ($$p_i^{sat}$$) に溶液のモル分率 ($$x_i^l$$) を掛けたものに等しい。
$$y_i P = x_i P_i^{sat}$$
この法則は、以下の二つの条件を仮定する時に、厳密に成立する。
* The vapor phase is an ideal gas.
* The liquid phase is an ideal solution.
また、実際の計算では、以下の式がよく使われる。
* Bubble Point: $$\displaystyle P = \sum_i x_i P_i^{sat} $$
* Dew Point: $$\displaystyle P = \dfrac{1}{\sum_i \frac{y_i}{P_i^{sat}}} $$
!! その他
* 飽和蒸気圧の値が必要なので、適用する系の温度が臨界温度より高いと使えない。
* ラウールの法則は、実際の溶液においては、溶液中の多量成分(溶媒)については良く成り立つが、少量成分(溶質)においては成り立たないことが多い。
---
! ヘンリーの法則
!! 前提条件 (必要とする仮定)
* The vapor phase is an ideal gas.
!! 数式での表現
$$y_i P = x_i H_i$$
---
! [[ギブズ・デュエム (Gibbs-Duhem) の関係式|ギブズ・デュエムの関係式]]
$$ \displaystyle S dT + V dP = \sum_i N_i d \mu_i $$
---
! ギブスの相律
成分の数が C 、相の数が P で、示強変数(p,V)によって状態が表現されている系の自由度(F) は、次の式で表せる。
$$ F = 2 - P + C $$
F: 自由度, C: composition, P: phase
!! 導出
; 変数の数
$$ 2 + (C - 1) P$$
* 温度: 1
* 圧力: 1
* モル分率: (C - 1) x P
** 各相のモル分率はトータルで 1 なので、C ではなく (C - 1) になる
** 物質の量自体は、示強変数の系なので必要ない (比率だけでよい)。
; 指定する必要のない化学ポテンシャルの数
各成分で、各相の化学ポテンシャルが等しいので、成分νを例にすると(ν= 1, ... ,C )、次の関係が成り立つ。
$$\mu_1^v = \mu_2^v = ... = \mu_i^v $$
この関係式は、1つの成分について化学ポテンシャルを1つだけ指定すればよく、残りの (P-1) 個は指定する必要が無いことを意味する。
指定する必要のない化学ポテンシャルの数:$$ (P - 1) C $$
よって、 $$F = [2 + (C - 1) P] - [(P - 1) C] $$
https://ir.lib.hiroshima-u.ac.jp/files/public/4/41582/20161207102334825422/Refphaserule_1(3).pdf
----
! Duhem Theorem
<<<
It is simlar to the phase rule. It is applied to closed systems in equilibrium, in which intensive and extensive states are kept as constant. The system state is completely determined and characterized not only by the 2 + (N - 1) P intensive variables, obtained in the phase rule, if not also by the P extensive variables represented by the masses (or number of moles) of the phases. The total number of variables is.
2 + N P - P N = 2
<<<
[[Phase rule and Duhem Theorem - Equilibrium Thermodynamics|https://equilibriumthermodynamics.weebly.com/phase-rule-and-duhem-theorem.html]]
* 示量的な (extensive) 変数が入ると、mass の大きさも必要になるので、変数が相の数分(P)だけ増える。
* マテリアルバランスの式も必要
----
```
ラウールの法則は十分に希薄な溶液について成り立つ。任意のモル分率においてラウールの法則が成立する溶液を理想溶液という。理想溶液では各成分は互いに異なる分子間力を及ぼさない。理想溶液に比較的近い溶液としては、しばしばベンゼンとトルエンの混合溶液があげられる。
```
https://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A6%E3%83%BC%E3%83%AB%E3%81%AE%E6%B3%95%E5%89%87
''対称群''(symmetric group)とは、「ものを並べ替える」という操作を元とする群である。この場合の「ものを並べ替える」操作のことを ''置換''(permutation)という。
---
! 定義
!! 置換・互換
集合 $$I_n = \{ 1, 2, …, n \}$$ に対する次のような全単射写像のことを (n次の)''置換'' という。
:$$\sigma :I_n \to I_n$$
また、2つの要素を交換するだけのものを特に ''互換'' と言い、$$i$$ と $$j$$ を交換する互換を $$(i,j)$$ と書く。
!! n次対称群
$$I_n$$ から $$I_n$$ への全単射写像全体 (置換全体) の集合 $$S_n$$ は、__''写像の合成を二項演算として''__ 群となる。そして、この群 S,,n,, (と 写像合成の二項演算の組) のことを ''n次対称群'' という。
---
! 性質
* 三次以上のn次対称群は非可換群
* n次対称群の位数は $$n!$$
!! 偶置換・奇置換
任意の置換は、互換の積で表せる
https://www.youtube.com/watch?v=lnmuJlOAnPc&list=PLDJfzGjtVLHn9XEfkMHH157Q-IgLiI8p9&index=4
対数グラフ上のエラーバーには、Relative Error を使う。
:$$\log {(x)} \pm \dfrac{1}{\ln {(10)}} \dfrac{\Delta x}{x} \approx \log {(x)} \pm 0.434 \dfrac{\Delta x}{x}$$
; 参考
* [[Error bars in log plots - YouTube|https://www.youtube.com/watch?v=ydxy3fEar9M]]
* http://faculty.washington.edu/stuve/uwess/log_error.pdf
----
! 考え方
測定値とその uncertainty を、 $$x, \delta x$$ と表すことにする。
$$z = \log (x) $$ とすると、この関数の導関数は、
: $$\dfrac{d}{dx} \log {(x)} = \dfrac{d}{dx} \left[ \dfrac{\ln {(x)}}{\ln {(10)}} \right] = \dfrac{1}{\ln {(10)}} \cdot \dfrac{1}{x} $$
と表すことができる。さらに、$$\delta x$$ が小さな値 (線形近似可能) であれば、この式から、
: $$\delta z = \delta \{ \log {(x)} \} = \dfrac{1}{\ln {(10)}} \cdot \dfrac{\delta x}{x} \approx 0.434 \dfrac{\delta x}{x}$$
という関係を考えることができる。
この $$\delta z$$ のことを ''Relative error'' といい、対数グラフではこの値をエラーバーに用いる。
! 概要
次のような 確率密度関数 (Probability Density Function) を持つ分布のことを ''対数正規分布 (Log-normal distribution)'' という。
:$$f(x) = \dfrac{1}{x} \dfrac{1}{\sigma\sqrt{2\pi}} \exp{ \left(- \dfrac{(\ln{x}-\mu)^2}{2 \sigma^2} \right)}, \ \ 0 < x$$
標本から $$\mu, \sigma^2$$ を推定する場合は、次のように計算する。
$$\ \ \ \ \ \ \displaystyle \mu = \dfrac{1}{n} \sum_{i=1}^{n} \ln {x_i}$$
$$\ \ \ \ \ \ \displaystyle \sigma^2 = \dfrac{1}{n-1} \sum_{i=1}^n (\ln{x_i} - \mu)^2 $$
対数正規分布では、$$\mu, \sigma^2$$ が、「''正規対数分布の平均・分散を意味しない''」ことに注意。
!! 統計量の計算
Mean = $$\exp \left(\mu + \dfrac{\sigma^2}{2} \right)$$
Median= $$\exp (\mu)$$
Mode = $$\exp (\mu - \sigma^2)$$
----
標本から $$\mu, \sigma^2$$ を推定する場合は、次のように計算する。
$$\displaystyle \mu = \dfrac{1}{n} \sum_n \ln {x_i}$$
https://rpubs.com/hoxo_m/57647
<<list-links filter:[tag[代数の基礎]] >>
----
! [[集合]]
思考対象とする「もの」の集まり。
* 「もの」のことを ''元'' または ''要素'' という
* 「集まり」のことを ''集合'' という
[[集合の操作]] によって新しい集合を考えることもできる。
! [[写像]]
「''ある集合 A の任意の元 a (∈ A) を、別の集合 B の元 b (∈ B) に対応させる規則''」のことを ''写像'' という。
* 対応元の元 a が決まれば、対応先の元 b は一意に決まらなければならない
! [[関係]]
$$A_1, A_2, \cdots A_n$$ を集合とするとき、$$A_1 \times A_2 \cdots \times A_n$$ の部分集合 $$(R)$$ を $$A_1, A_2, \cdots A_n$$ 上の n項関係 という。
: $$R \subset A_1 \times A_2 \cdots \times A_n$$
そして、$$n = 2, \ A_1 = A_2$$ の場合を、 $$A_1$$ 上の''二項関係''という。
ラフなイメージとしては、$$=, \neq, \geq, <, \subset, ...$$ みたいなものを一般化したもの。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
! [[群]]
以下の条件を満たす二項演算を持つ集合を ''群'' という。
# 結合法則
# 単位元が存在する
# 逆元が存在する
具体的なイメージとしては、足し算を思い浮かべればよい (厳密に言うと、足し算はアーベル群)。
!! 関連する構造
* [[アーベル群|群]]: 条件1-3 に加え、「''交換法則''」を満たす二項演算持つ集合
* 半群: 条件1 だけを満たす二項演算持つ集合
* モノイド: 条件1-2 だけを満たす二項演算持つ集合 (掛け算的なもの)
! [[環|環・体]]
次の2つの二項演算 (+ と ・) を持つ集合で、それらの2つの二項演算が次の条件を満たす時、その集合を ''環'' という。
# "+" に関して [[アーベル群|群]]
# "・" に関して [[モノイド|群]]
# 分配法則が成り立つ
大まかに言うと、整数の和と積 を一般的に拡張した概念。
!! 関連する構造
* 可換環: "・" で交換法則が成り立つ環
! [[体|環・体]]
環の条件に加えて、以下の条件を満たす二項演算を持つ集合を ''体|環・体'' という。
# "・" において、単位元以外の元は全て逆元を持つ
大まかに言うと、実数の和と積 を一般的に拡張した概念。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
! 加群
ベクトル空間を一般化したような概念。
!! 環上の加群 (R-加群)
厳密な言い方ではないが、以下の条件を満たす 「アーベル群(足し算) と スカラー乗法(スカラー倍)」 の組 (r,s は環、x,y はアーベル群)。
# $$ r(x+y) = rx + ry$$
# $$(r+s)x = rx + sx$$
# $$(rs)x = r(sx)$$
# $$1_Rx = x$$
可換でない環の場合には、''R-左加群''、''R-右加群'' という形で定義される。
!! 体上の加群
上記のスカラー乗法の定義において x,y が体であれば、その「アーベル群 と スカラー乗法」 の組のことを、体上の加群 という。
! 多元環 (代数)
双線形な二項演算 (積みたいなもの) が追加された加群。
<<<
数学において体上の代数あるいは多元環(たげんかん、英: algebra)とは可換環上の加群としての構造を持ち、その構造と両立しているような積を持つ代数的構造のことである。algebra を直訳して代数(だいすう)と呼ぶことも多い。
<<<
https://ja.wikipedia.org/wiki/%E5%A4%9A%E5%85%83%E7%92%B0
----
! 同型写像
!! [[群の同型写像]]
2つの群 (G, ∗) と (H, ⊙) が与えられたときに、$$f(u*v) = f(u) \odot f(v)$$ を満たす全単射写像 $$f: G \to H$$ を [[同型写像]] という。また、$$f$$ が全単射でない場合は ''準同型写像'' という。
; 性質
# (準)同型写像は、単位元を単位元に移す。
# (準)同型写像は、逆元を逆元に移す。
# (G, ∗) が (H, ⊙) に同型で G が可換群であれば H も可換である。
# 同型写像では、2つの群の位数(元の数)が同じ。
!! 環の同型写像
----
<<tabs "[tag[代数の基礎]]" "集合" "$:/state/tab1">>
----
! 独立同一分布に従う確率変数
$$X_1, X_2, \dots , X_n$$ を [[IIDな確率変数|同時確率分布]] とし、$$\mu = E[X_i] , \ \ \sigma^2 = \mathrm{Var}[X_i]$$ とする ($$i$$ は自然数)。
''IIDな確率変数の標本平均'' (sample mean) は、次のように表せる。
: $$\bar{X} = \dfrac{X_1 + X_2 + \dots + X_n}{n} $$
さらに、$$\bar{X}$$ の [[期待値]] について考えると、期待値の線形性から
:$$E[\bar{X}] = \dfrac{ E[X_1] + E[X_2] + \dots + E[X_n] }{n}$$
となり、$$X_i \ (1 \leq i \leq n)$$ は同一分布に従うので、次の関係が得られる。
:$$E[\bar{X}] = \dfrac{ n E[X_i]}{n} = E[X_i] = \mu$$
同様にして、$$\bar{X}$$ の [[分散]] について考えると、
:$$\mathrm{Var}[\bar{X}] = \dfrac{ \mathrm{Var}[X_1] + \mathrm{Var}[X_2] + \dots + \mathrm{Var}[X_n] }{n^2} = \dfrac{n \mathrm{Var}[X]}{n^2} = \dfrac{\sigma^2}{n}$$
----
! 大数の弱法則
$$X_1, X_2, \dots , X_n$$ を [[IIDな確率変数|同時確率分布]] とし、$$\mu = E[X_i] \ ( = E[\bar{X}])$$ とする。
このとき、次が成り立つ。
: $$\displaystyle \lim_{n \to \infty} P( |\bar{X} - \mu| \geq \epsilon ) = 0 \ \ \ \ (\forall \epsilon > 0)$$
!! 導出
$$\bar{X}$$ に [[チェビシェフの不等式]] を適用すると、
:$$P(|\bar{X} - E[\bar{X]}| \geq \epsilon) \leq \dfrac{\mathrm{Var}[\bar{X}]}{\epsilon^2} = \dfrac{\mathrm{Var}[X]}{n \epsilon^2}$$
という関係が得られる。よって、X の分散が有限ならば 、
:$$\displaystyle \lim_{n \to \infty} P(|\bar{X} - E[\bar{X]}| \geq \epsilon) \leq \lim_{n \to \infty} \dfrac{\mathrm{Var}[X]}{n \epsilon^2} = 0$$
となる。
https://mathtrain.jp/lawoflargenumbers
----
! 大数の強法則
----
独立同分布
independent and identically distributed (i.i.d, iid, IID)
;長さ
| !単位 | !単位記号 | !変換 |
|インチ (inch) | in | 1 in = 0.0254 m = 2.54 cm |
|フィート | ft | 1 ft = 0.3048 m = 30.48 cm |
;重さ
| !単位 | !単位記号 | !変換 |
|ポンド (pound) | lb | 1 lb = 0.45359237 kg |
;体積
| !単位 | !単位記号 | !変換 |
|バレル (barrel) | bbl | 1 bbl = 158.987294928 l |
; 圧力
| !単位 | !単位記号 | !変換 |
| 重量ポンド毎平方インチ (PSI) | psi | 1 psi = 1 lb/in2 ≒ 6894.757 Pa |
|大気圧 | atm | 1 atm = 101325 Pa |
; 温度
| !単位 | !単位記号 | !変換 |
|華氏 | F | F = 9/5 * ℃ + 32, ℃ = 5/9(F - 32) |
; 流速
| !単位 | !単位記号 | !変換 |
| 立方フィート/分 (CFM) | cfm | 1 cfm = 1.6992 m3/h |
|million standard cubic feet per day |MMSCFD |1MMSCFD = 28316.85 m3/d |
* SCFM (Standard Cubic Feet per Minute)
** 1 scfm = 1.6992 * T * 0.1013 / (P * 228) ??
; 粘度
| !単位 | !単位記号 | !変換 |
|センチポアズ | CP | 1CP = 0.001 N-s/m2 = 0.001 Pa-s |
----
; リンク
* [[計量単位|http://www.geocities.jp/jitensha_tanken/unit.html]]
* [[ExcelのCONVERT関数の使い方|http://www.excel-list.com/convert.html]]
* http://www.cgc.co.jp/tomoe/products/pdf/precautions/precautions6.pdf
* [[Interactive Conversion Tool US EPA|http://www.epa.gov/lmop/projects-candidates/interactive.html]]
----
{{{
Assuming the standard conditions are the same, (ex 14.7 psia and 60F),
1 mmscfd is 1 million standard cubic feet per day, which is 28316.85 cubic meters per day
}}}
http://wiki.answers.com/Q/How_do_you_convert_from_MMSCFD_to_m3
Read more: http://wiki.answers.com/Q/How_do_you_convert_from_MMSCFD_to_m3#ixzz1Z76RJYfH
単回帰では、一次関数で予測された被説明変数 $$\hat{y} \ (= a + b x_i)$$ と 標本値 $$y_i$$ の差を、誤差 $$\epsilon_i$$ とする。
: $$\epsilon_i = y_i - \hat{y} = y_i - (a + b x_i)$$
予測で使う一次関数の傾きと切片の値は、最小二乗法によって計算される。
具体的には、各標本値の誤差の二乗 $$(L)$$ を最小にするように、a, b を決定する。
: $$\displaystyle L = \sum_i {\epsilon_i}^2 = \sum_i \{ {y_i}^2 - 2 y_i (a + b x_i) + a^2 + 2ab x_i + {x_i}^2 b^2 \}$$
偏微分
$$\dfrac{\partial L}{\partial a} = 0$$
$$\dfrac{\partial L}{\partial b} = 0$$
* http://racco.mikeneko.jp/Kougi/2014s/STAT/2014s_stat07.pdf
----
;回帰係数の確率分布
* http://racco.mikeneko.jp/Kougi/10s/AS/AS04pr.pdf
* http://www2.econ.osaka-u.ac.jp/~tanizaki/class/2018/basic_econome/02.pdf
----
! R
confint()
* https://www.youtube.com/watch?v=6GlZZcLrBaU
* https://www.youtube.com/watch?v=7WPfuHLCn_k
* [[最小二乗法の式の導出と例題 – 最小二乗法と回帰直線を思い通りに使えるようになろう - 数学の面白いこと・役に立つことをまとめたサイト|https://analytics-notty.tech/derivation-of-least-squares-equation/]]
* https://www.probabilitycourse.com/chapter8/8_5_2_first_method_for_finding_beta.php
* [[第5講 回帰分析 - 単回帰分析 - 回帰係数の分散 - DataArts - 統計検定 1級・準1級対策講座,過去問の解答(解答例)・解説を掲載.|http://www.data-arts.jp/course/regression_analysis/single_regression_analysis/regression_coefficient_4.html]]
* https://unit.aist.go.jp/riem/ds-rg/uncertainty/club/Regression.pdf
----
! 導出
標本 X, Y の間に $$Y = a X + b$$ という関係があるとする。
:$$y_i = a x_i + b + \epsilon_i $$
単回帰分析(あるいは最小二乗法)では、残差の二乗和
:$$\displaystyle \sum_i {\epsilon_i}^2 = \sum_i (y_i - a x_i - b)^2$$
が最小になる時の、a, b の値を求める。
:$$\displaystyle \sum_i {\epsilon_i}^2 = \sum_i \left[ x_i^2 a^2 + 2 x_i (b - y_i) a + (b - y_i)^2 \right]$$
$$= \sum_i \left[b^2 - 2 (y_i - a x_i) b + (y_i - a x_i)^2 \right]$$
残差の二乗和を a, b の関数と見なした場合、これらの関数は下に凸の関数であるので (理由は省略)、
:$$\displaystyle \dfrac{\partial}{\partial a} \sum_i {\epsilon_i}^2 = 2 \sum_i (a x_i^2 - x_i y_i + b x_i) = 0$$
:$$\displaystyle \dfrac{\partial}{\partial b} \sum_i {\epsilon_i}^2 = 2 \sum_i (a x_i - y_i + b) = 0$$
を解けばよい。この式を解くと、
$$\ \ \ \ \ \ \ \ \ \ \displaystyle a = \dfrac{S_{xy}}{S_{xx}} = \sum_i \left[ \dfrac{(x_i - \bar{x})}{S_{xx}} y_i \right]$$
$$\ \ \ \ \ \ \ \ \ \ b = \bar{y} - a \bar{x}$$
が得られる。
$$\displaystyle S_{xx} = \sum_i (x_i - \bar{x})^2$$
$$\displaystyle S_{xy} = \sum_i ((x_i - \bar{x}) (y_i - \bar{y}))$$
- - - - -
!! 回帰係数の分散
$$X, Y$$ を正規分布に従う確率変数と考えると、
:$$V[a] = \dfrac{V[\epsilon_i]}{S_{xx}}$$
:$$\displaystyle S_{xx} = \sum (x_i - \bar{x})^2$$
:$$V[\epsilon_i] = $$
[[LOTUS]] から a, b も正規分布に従う確率変数と言える。
----
----
$$\dfrac{1}{\dfrac{\sum_i x_i^2}{N} - \bar{x}^2} \sum_i ((x_i - \bar{x}) (y_i - \bar{y})) =$$
! 単純無作為抽出 (Simple random sample)
単純無作為標本 (simple random sample) を母集団から得るサンプリング。
# 母集団内の全ての個体が等しい確率で抽出されること
# ある個体の抽出が他の個体の抽出確率に影響を与えないこと
; 注意点
<<<
例えば、1 から 6 の自然数を書いた札を容器に入れ、その中から札を 3 回抜き取る試行を考
える。サイコロを 3 回振って、出た目の札を取り出し、その度に札を容器に戻す試行(復
元抽出)を行えば、この標本抽出法は単純無作為標本抽出法である。この場合は同じ札が
複数回抽出される可能性がる。しかし、札を抜き取った後で、容器に戻さずに 3 回抽出す
る場合(非復元抽出)は条件(1)を満たすが、(2)が成立しないので、無作為抽出であるが単
純無作為抽出法にならない。すなわち、1 回目の抽出では、任意の札が 1/6 で抽出されるが、
2 回目と 3 回目はそれぞれ残りの札が 1/5 と 1/4 で抽出されるからである(条件付き確率)。
しかし、全ての札は同じ確率 1/6 で抽出されている(1)。この例では母集団は 1 から 6 の自然
数を書いた 6 枚の札である。ここで、母集団が大きい場合、例えば地域 A の成人の集合の
場合は非復元抽出による無作為抽出は単純無作為抽出の近似的方法になる。
<<<
http://www.med.oita-u.ac.jp/IS/iryou2.pdf
- - - - - - - - - - - - - - - - - - - -
!! 単純無作為標本 (simple random sample)
ざっくり言うと、それぞれの観測値を [[IIDな確率変数|同時確率分布]] と見なせるような標本。
<<<
... and we refer to them collectively as a (simple) random sample.
The collection of random variables $$X_1, X_2, X_3, \dots, X_n$$ is said to be a ''random sample'' of size n if they are independent and identically distributed (i.i.d.), i.e.,
# $$X_1, X_2, X_3, \dots, X_n$$ are independent random variables, and
# they have the same distribution, i.e,
:$$F_{X_1}(x) = F_{X_2}(x) = \dots = F_{X_n}(x) \ , \ \ \ \ \mathrm{for \ all} \ x \in R$$.
<<<
https://www.probabilitycourse.com/chapter8/8_1_1_random_sampling.php
; 保存則
* <<slider tocSlider 連続の式 質量保存(連続の式)>>
* <<slider tocSlider ナビエ・ストークス 運動量保存(ナビエ・ストークス)>>
* 実質微分
** D/Dt = ∂/∂t + u・∇ (u: 流速)
** [[流体力学に詳しい方お願いします。 - Yahoo!知恵袋|http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1410483784]]
; 流体のプロパティ
* [[粘度計/純水の粘度、動粘度および密度|http://www.as-1.co.jp/academy/24/24-2.html]]
* [[Thermophysical Properties of Fluid Systems: NIST | http://webbook.nist.gov/chemistry/fluid/]]
; 圧力損失
* [[計算できる教科書 圧力損失 | http://chemeng.in.coocan.jp/ce/cepd.html]]
; 参考
* [[地球流体力学|http://www2.kobe-u.ac.jp/~iwayama/teach/teach_09.html]]
* [[レオロジー(Rheology)|http://web.kyoto-inet.or.jp/people/macchann/hiroshi/Rheology.html]]
! 弾力性 (Elasticity) の定義
数式を使ってきちんと書くと、次のようになる。
:$$\dfrac{dy}{dx} \dfrac{x}{y} = \dfrac{d (\ln y)}{d (\ln x)}$$
----
! 大まかなイメージ
<<<
「価格 が1円上昇すると、需要量 は 個減る。」
式にすると、(個)= (円)ですが、このままでは、(円)と (個)の単位が異なります。
経済学では、こうした場合、''弾力性''という概念で考えることが多いです。
すなわち、「価格が1%上昇すると、需要量は %減る。」
このように、比較対象の単位を %(パーセント)にそろえて考えるのが弾力性です(この例だと、需要の価格弾力性)。
<<<
https://ameblo.jp/kiyokyu2001/entry-12784465654.html
つまり、(厳密な書き方ではないが) 弾性力はそれぞれの変数の割合変化の比を意味する。
:$$\dfrac{\dfrac{\Delta y}{y}}{\dfrac{\Delta x}{x}}$$
---
; ざっくりした証明
[[合成関数の微分]] と 逆関数の微分 の公式を使って、以下のように変形する。
:$$ \dfrac{d (\ln y)}{d (\ln x)} = \dfrac{d (\ln y)}{dy} \dfrac{dy}{dx} \dfrac{dx}{d (\ln x)} = \dfrac{d (\ln y)}{dy} \dfrac{dy}{dx} \dfrac{1}{\dfrac{d (\ln x)}{dx} }$$
対数関数の微分は $$\dfrac{d (\ln x)}{dx} = \dfrac{1}{x}$$ なので、上式は、
:$$ \dfrac{d (\ln y)}{d (\ln x)} = \dfrac{1}{y} \dfrac{dy}{dx} \dfrac{1}{\dfrac{1}{x}} = \dfrac{dy}{dx} \dfrac{x}{y}$$
となる。
; あれこれ考えごと
* google map投稿掲示板 が作りたいわけではない
** [[グーグルアース(Google Earth)-おもしろ画像 おもしろ画像一覧 グーグルアースで見つけたおもしろ画像|http://www.inqlink.com/index.htm?mode=i_step02&cat_type=1116&offset=20]]
* 一人で選ぶと趣味が偏る気はするのだが...
** 個人的な偏りを見せるものになってきてる気がするので、それでよいかな...
* よくよく考えると、意外と場所選びの条件にこだわってる...
** 単に画像として見ても、ちゃんとおもしろいか?
** ○○ っぽい、は無し
** 明るめの画像の割合
* ということで、公開登録フォームは作らない
* Google Earth
** * [[white-screen.jp:HonestのGoogleマップアニメ「Satellite Car Chase」を目撃せよ!|http://white-screen.jp/2010/03/satellite_car_chase.php]]
* 自分が見たいから作る
** 言葉で捉え損なうものが好き
* とすると、
**もし見知らぬ誰かが作ったものをたまたま見たとしても、自分がおもしろいと思えるか?<br> が大事なのか??
* 写真を選ぶという作業以外の部分には、うまく価値がつけれてない
** テクスチャーに特化すべきかな?
** アニメーションがなぁ...
; もやもや
例えば、サハラ砂漠には住所はあるのか?
Sleipnir だと、クッキーまわりのセキュリティにひっかかる
=> 風景画
; TODO
# UI の直し
** ぐりぐりできるようになったら、サムネールがまどろっこしい
# 画像のプリロード
** 少なくとも、v2 には無さそう
# Google Map API を v3 に
** なんか、v3の方がちかちかする
; DONE
*場所の登録がめんどくさすぎる...
** いちおう、登録フォームっぽいものを作成
** [[地球の肌 for regist (0.2.0)|http://www.ssnsk.com/earthkin/tools/regist.html]]
* ~IE6 のレイアウトが...
** レイアウトは直したが、クロージャ周りは大丈夫?
** まーIE6は無視かな...
* マウスホイールで拡大縮小ができるようにした
** これは早くやっておくべきだった...
* 移動のアニメーションをつけてみた
** 表示がちかちかせず、スムーズにアニメーションできれば、ありかも
** 将来的に、画像のプリロードがサポートされることがあれば、きちんと作ろうかな...
** 現状だと...
*** かなり無茶なコードが必要
*** 移動時にちかちかする
** 表示領域を大きくする方向で考えると厳しい
* 大きく表示
; 場所探し
* [[ASTERがとらえた地球の造形|http://www.ersdac.or.jp/ASTERimage/ASTERimage_library_J.html]]
* [[Sublime Sand: Desert Dunes Seen From Space - Wired Science |http://www.wired.com/wiredscience/2009/12/deserts-gallery-1/3/]]
** [[Google 翻訳|http://translate.google.com/translate?hl=ja&langpair=en%7Cja&u=http://www.wired.com/wiredscience/2009/12/deserts-gallery-1/3/&rurl=translate.google.co.jp]]
* [[高解像度で捉えた火星の風景:画像ギャラリー(1/8) | WIRED VISION|http://wiredvision.jp/gallery/201009/20100909094733.html]]
; レイアウト
* タイトルのロゴ?
** 使うフォント
* <<slider tocSlider サイトデザイン 参考サイト>>
; コーディング
* JavaScript
* [[JSON]]
* [[jQuery]]
* [[Google Map]]
** ~IE7が...
*** [[Internet Explorer 7にGoogle maps APIのバグ? : 地方の印刷会社Webディレクターの日記|http://webdirector.livedoor.biz/archives/51682129.html]]
! 一変数の置換積分
$$x = \phi(t)$$ のとき、f(x) の不定積分は、次のように変形可能。
$$\displaystyle \int f(x) dx = \int f( \phi(t) ) \cdot \phi '(t) dt$$
ただし、
* $$\phi(t)$$ は C1 級 (連続な導関数を持つ)
* f(x) は $$\phi(t)$$ の値域で連続
とする。
定積分の場合は、次のように計算できる。
$$\displaystyle \int_{\phi(a)}^{\phi(b)} f(x) dx = \int_a^b f(\phi(t)) \cdot \phi '(t) dt$$
- - - - -
!! 証明
$$\displaystyle F(x) = \int f(x) dx$$ , $$G(t) = F( \phi(t) )$$ とおく。
G(t) を t で微分すると、
$$\dfrac{d}{dt} G(t) = F'( \phi(t) ) \cdot \phi '(t) = f(\phi(t)) \cdot \phi '(t)$$
となるので、これを t で積分すれば、
$$\displaystyle G(t) = \int f(\phi(t)) \cdot \phi '(t) dt$$
という式が得られる。よって、
$$\displaystyle F(\phi(t)) = \int f(\phi(t)) dx = \int f(\phi(t)) \cdot \phi '(t) dt$$
となる。
定積分については、$$x = \phi(t)$$ なので
$$\displaystyle \int_a^b f(\phi(t)) \cdot \phi '(t) dt = \int_{\phi(a)}^{\phi(b)} f(x) dx $$
https://www.youtube.com/watch?v=0Dp9QaFHJe0
---
! 例題
$$\displaystyle \int_0^1 x (1-x)^5 dx$$
!! (1). t の定義
この問題では、 $$t = 1 - x$$ とおく。
!! (2). 公式との対応関係
$$f(x) = x (1-x)^5$$
$$\phi(t) = x = 1 - t$$
$$f(\phi(t)) = f(1-t) = (1-t) \{1 - (1-t)\}^5 = (1-t) t^5$$
$$\phi'(t) = \dfrac{dx}{dt} = -1$$
!! (3). t の関数として表した場合の積分区間
$$x = 0$$ のとき $$t = 1$$ であり、 $$x = 1$$ のとき $$t = 0$$ であることから、この問題では $$1 \to 0$$ となる。
!! 置換積分
Step1 から Step 3 までの情報 と 置換積分の公式を用いて、問題の式を変形する。
$$\displaystyle \int_0^1 x (1-x)^5 dx = \int_1^0 \{ (1-t) t^5 \} (-1) dt = \int_1^0 (t^6-t^5) dt$$
あとは、通常の定積分の計算をするだけ、
$$\displaystyle \int_1^0 (t^6-t^5) dt = \left[ \dfrac{1}{7} t^7 - \dfrac{1}{6} t^6 \right]_1^0 = 0 - \left( \dfrac{1}{7} - \dfrac{1}{6}\right) = \dfrac{1}{42}
! 中心極限定理 (Central Limit Theorem)
$$X_1, X_2, \dots , X_n$$ を [[IIDな確率変数|同時確率分布]] とし、$$\mu = E[X_i] < \infty , \ \ \sigma^2 = \mathrm{Var}[X_i] < \infty$$ とする ($$i$$ は自然数)。
さらに、$$X_n$$ の標本平均 (sample mean) を
: $$\bar{X} = \dfrac{X_1 + X_2 + \dots + X_n}{n} $$
とし、$$\bar{X}$$ を標準化した確率変数を、
:$$Z_n = \dfrac{\bar{X} - E[\bar{X}]}{ (\mathrm{Var}[\bar{X}])^{0.5} } $$
とした時、$$Z_n$$ は $$n \to \infty$$ において標準正規分布に収束する。
なお、$$\bar{X} = E[\bar{X}] + Z_n \sqrt{\mathrm{Var}[X]} = \mu + \dfrac{\sigma^2}{n} S_n $$ なので、$$\bar{X}$$ は $$\mu$$ に収束する。
- - - - -
!! 証明
$$\mu = E[X_i] \ , \ \sigma^2 = \mathrm{Var}[X_i]$$ としたとき、$$E[\bar{X}] = \mu \ , \ \mathrm{Var}[\bar{X}] = \sigma^2 / n$$ となる。
さらに、$$\bar{X}$$ を用いて、次のような確率変数を定義する。
:$$Z_n = \dfrac{\bar{X} - E[\bar{X}]}{\sqrt{\mathrm{Var}[X]}} = \dfrac{\bar{X} - E[\bar{X}]}{\sigma/\sqrt{n}} = \dfrac{X_1+X_2+ \dots + X_n - n \mu}{\sigma\sqrt{n}} = \dfrac{(X_1 - \mu) + (X_2 - \mu) + \dots + (X_n - \mu)}{\sigma\sqrt{n}}$$
さらに、
:$$S_n = \dfrac{(X_n - \mu)}{\sigma} $$
という確率変数を定義すると、$$Z_n$$ は次のように表せる。
:$$\displaystyle Z_n = \dfrac{1}{\sqrt{n}} \sum_{i=1}^n S_i$$
ここで、[[モーメント母関数]] を考える。
:$$\displaystyle M_{Z_n}(t) = E[\exp(t Z_n)] = E \left[ \exp \left( \sum_i \dfrac{t S_i}{\sqrt{n}} \right) \right]$$
期待値の線形性を使うと
:$$\displaystyle M_{Z_n}(t) = E \left[ \exp \left( \dfrac{t S_1}{\sqrt{n}} \right) \right] E \left[ \exp \left( \dfrac{t S_2}{\sqrt{n}} \right) \right] \cdots E \left[ \exp \left( \dfrac{t S_n}{\sqrt{n}} \right) \right]$$
と変形でき、$$S_i$$ のモーメント母関数
:$$\displaystyle M_{S_i}(t/ \sqrt{n}) = E[\exp(t S_i/\sqrt{n})] = \int_{- \infty}^{\infty} \exp{(t s_i /\sqrt{n})} \cdot f_{S_i} (s_i) ds_i $$
を使うと、
:$$\displaystyle M_{Z_n}(t) = M_{S_1}(t/ \sqrt{n}) M_{S_2}(t/ \sqrt{n}) \cdots M_{S_n}(t/ \sqrt{n}) = \left[ M_{S}(t/ \sqrt{n}) \right]^n$$
と表すことができる。
-
ここで、$$M_S (t/ \sqrt{n}) $$ のマクローリン展開をすると、$$M_S(0) = {M_S}''(0) = 1 , \ \ {M_S}'(0) = 0$$ なので、
:$$M_S (t/ \sqrt{n}) = M_S(0) + \dfrac{t}{\sqrt{n}} {M_S}'(0) + \dfrac{1}{2!} \left( \dfrac{t}{\sqrt{n}} \right)^2 {M_S}''(0) + \cdots = 1 + \dfrac{1}{2} \left( \dfrac{t}{\sqrt{n}} \right)^2 + O()$$
この式を $$M_{Z_n}$$ に代入すると、
:$$\displaystyle \lim_{n \to \infty} M_{S_n}(t) = \lim_{n \to \infty} \left[ M_{Z}(t/ \sqrt{n}) \right]^n = \lim_{n \to \infty} \left[ 1 + \dfrac{1}{2} \left( \dfrac{t}{\sqrt{n}} \right)^2 \right]^n = e^{t^2 /2}$$
となる。この式は、標準正規分布のモーメント母関数と同じ形である。
-
https://ebi-works.com/clt-proof/
https://sugaku-okimoti.com/archives/1270
http://www.math.s.chiba-u.ac.jp/~wang/teaching/b112.pdf
file:///C:/Users/S.S/AppData/Local/Temp/rikoNo.13a01.pdf
----
平均 μ 標準偏差 σ の母集団から抽出した標本の標本平均 $$\bar{X}$$ は、標本の大きさ n が十分大きいとき、平均 μ 標準偏差 σ^^2^^/n の正規分布に(近似的に)従う。
----
https://shuta9nakajima.wordpress.com/2020/02/24/%E4%B8%AD%E5%BF%83%E6%A5%B5%E9%99%90%E5%AE%9A%E7%90%86/
----
central limit theorem
* [[郵便番号|http://www.post.japanpost.jp/zipcode/]]
* [[日本標準時|http://www3.nict.go.jp/cgi-bin/JST.pl]]
* [[和暦西暦対応表|http://www.kumamotokokufu-h.ed.jp/kumamoto/bungaku/wa_seireki.html]]
* 辞書
** [[地球人ネットワークを創るアルク:スペースアルク|http://www.alc.co.jp/]] ([[検索方法|http://eowimg.alc.co.jp/content/help/tips/tip015.html]])
** [[Oxford Dictionaries | http://www.oxforddictionaries.com/]] (可算・不可算、)
** [[Weblio 類語辞典 | http://thesaurus.weblio.jp/]]
* [[OANDA - Forex Trading and Exchange Rates Services|http://www.oanda.com/]]
** 為替レート [[為替]]
* [[Earthquakes - USGS || http://earthquake.usgs.gov/earthquakes/map/]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
* [[GANREF (写真検索) |http://ganref.jp/photo_searches]]
* [[YouTubeムービへの直リンク|http://keepvid.com/]]
* [[Internet Archive|http://www.archive.org/index.php]]
* [[数学公式集 - 高精度計算サイト|http://keisan.casio.jp/has10/Menu.cgi?path=04000000%2e%90%94%8aw%8c%f6%8e%ae%8fW]]
* [[Wolfram Alpha | http://www.wolframalpha.com]]
** 高校数学くらいなら楽勝
* [[Academic Phrasebank|https://www.phrasebank.manchester.ac.uk/]]
** 英語のフレーズ集
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
* [[Another HTML-lint gateway|http://htmllint.itc.keio.ac.jp/htmllint/htmllint.html]]
* [[正規表現がチェックできるサイト|http://www.regextester.com/]]
* [[IP Location Finder|http://www.iplocationfinder.com/]]
* [[海水温統計情報|http://jdoss1.jodc.go.jp/data/serial/stat-temp_j.html]]
* [[Webcat | http://webcat.nii.ac.jp/]]
** 図書・論文を持っている大学を調べる
* [[ライブ船舶マップ | http://www.marinetraffic.com/ais/jp/default.aspx]]
1 inch = 25.4 mm
1 inch = 72 pt
1 mm = 1 / 25.4 = 0.03937007... inch
1 mm = 72 / 25.4 = 2.83464566... pt
直交直線座標上では反変・共変を考える必要がないので、テンソルの取り扱いがかなり簡単になる。
なお、正規直交座標しか使わないのであれば、「''n階のテンソルは、n個のベクトルをスカラーに移す多線形写像''」ということだけ頭に入れておけば (だいたい) 大丈夫。
$$\ \ \ \ T: v_1 \times v_2 \times \dots \times v_n \to R $$
$$\ \ \ \ \displaystyle T(v_1, v_2, \dots , v_n) = \sum_{i_1} \cdots \sum_{i_n} v_{i_1} \dots v_{i_n} T_{i_1 \cdots i_n}$$
----
! 1階のテンソル
!! 定義
1階のテンソルは、1つのベクトルをスカラーに移す線形写像とする (要するに [[線形汎関数|線形写像]])。
:$$T: V \to R $$
!! 成分での表示
T は線形汎関数なので、余ベクトルと行列の積を用いて、次のように書くことができる。
:$$\displaystyle T(v) = \begin{pmatrix} T_1 \\ T_2 \\ T_3 \end{pmatrix} \begin{pmatrix} v_1 & v_2 & v_3 \end{pmatrix} = v_1 T_1 + v_2 T_2 + v_3 T_3 = \sum_{i=1}^3 v_i T_i $$
!! 基底の変換に伴う成分の変化
基底 e,,i,, 上で T,,i,, と表されていたテンソル T は、基底が e,,i,, から e',,i,, へ
:$$\displaystyle e'_i = \sum_k a_{ik} e_k \ \ \ \ \ \ $$ 【式1】
と [[線形変換|直線座標系の座標変換]] された時、基底 e',,i,, 上でのテンソル T の成分 T',,i,, は、次のように変化する。
:$$\displaystyle T'_i = \sum_k a_{ik} T_k$$
!! 縮約
----
! 2階のテンソル
物理でよく使う。
!! 定義
2階のテンソルは、2つのベクトルをスカラーに移す双線形写像とする。
:$$T: V \times W \to R $$ 【式1】
!! 成分での表示
2次元のケースを例に説明すると、T は、
: $$\displaystyle T(v, w) = v_1 w_1 T_{11} + v_1 w_2 T_{12} + v_2 w_1 T_{21} + v_2 w_2 T_{22} = \sum_{i=1}^2 \sum_{j=1}^2 u_i w_j T_{ij}$$
という形で表すことができる (この形式は [[双線形性]] の定義を満たす)。なお、式中のΣ は暗黙的に省略されることが多いので注意。
:$$\begin{aligned} T(v+a, w) &= (v_1 + a_1) w_1 T_{11} + (v_1 + a_1) w_2 T_{12} + (v_2 + a_2) w_1 T_{21} + (v_2 + a_2) w_2 T_{22} \\ &= T(v, w) + T(a, w) \end{aligned}$$
:$$\begin{aligned} T(kv, w) &= (k v_1) w_1 T_{11} + (k v_1) w_2 T_{12} + (k v_2) w_1 T_{21} + (k v_2) w_2 T_{22} \\ &= k T(v, w) \end{aligned}$$
!! 基底の変換に伴う成分の変化
【式1】により基底が線形変換される時、2階のテンソルの成分は、
:$$\displaystyle T'_{ij} = \sum_k \sum_l a_{ik} a_{jl} T_{kl}$$
と変換される。
例:
:$$\begin{aligned} T'_{34} = (a_{31} a_{41} T_{11} + a_{31} a_{42} T_{12} + \cdots + a_{31} a_{4l} T_{1l}) + (a_{32} a_{41} T_{21} + a_{32} a_{42} T_{22} + \cdots + a_{32} a_{4l} T_{2l}) + \cdots + (a_{3k} a_{41} T_{k1} + a_{3k} a_{42} T_{k2} + \cdots + a_{3k} a_{4l} T_{kl})\end{aligned}$$
!! 対称テンソルと交代テンソル
任意の2階のテンソル R は、対称テンソル S と 交代テンソル T の和で表すことができる。
:$$R = S + T$$
また、この表し方は一意的である。
----
! 3階のテンソル
!! 基底の変換に伴う成分の変化
:$$\displaystyle T'_{ijk} = a_{il} a_{jm} a_{kn} T_{lmn}$$
----
! 一般的なケース
あまり厳密ではないが、以下のような取り扱になる。
!! テンソルの定義
n階のテンソルは、n個の(次元が同じ)ベクトルをスカラーに移す多線形写像として定義できる。
:$$T: v_1 \times v_2 \times \dots \times v_n \to R $$
!! 成分
----
ざっくり言うと、座標軸が直線で構成されている座標系。
どの位置においても基底は変わらないため、''基底の線形結合でシンプルにベクトルを表せる''。
$$v = x^1 e_1 + x^2 e_2 + x^3 e_3$$
また、ある直線座標から別の直線座標への変換は、線形変換で表せる。
$$e'_i = {A^j}_i e_j $$
---
! 正規直交系
<<<
内積 〈•, •〉 を有するベクトル空間(内積空間)において、ベクトルの集合 $$\{x_n\}$$ が互いに直交し、内積について
$$\langle x_m , x_n \rangle = 0 \ \ \ \ (m \neq n) $$
が成り立つときに、$$\{x_n\}$$ は ''直交系''(orthogonal system)であるという。
また、直交系 $$\{e_n\}$$ が内積で定まるノルムについて規格化されている(||e,,n,,||=1)、すなわち、
$$\displaystyle \langle e_{m},e_{n}\rangle =\delta _{mn}$$
であるときに、$$\{e_n\}$$ は''正規直交系''であるという。
<<<
[[正規直交系 - Wikipedia|https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E7%9B%B4%E4%BA%A4%E7%B3%BB]]
!! 正規直交基底
''正規直交系'' を成すような 有限次元内積空間の基底。
ざっくり言うと、内積が次のような条件を満たす基底 $$\{ e_1, ... , e_n \}$$ のこと。
$$
e_i \cdot e_j =
\begin{cases}
\|e_i\| = 1 \ \ \ \ \ (i = j)\\
0 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (i \neq j)
\end{cases}
$$
; 定理
Uを有限次元K-vector space,(·;·)をUの内積とする。このときUは正規直交基底を持つ。
http://www-an.acs.i.kyoto-u.ac.jp/~kigami/linearBnote26.pdf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
! 直交直線座標系
座標軸同士が直交している座標系。基底同士の内積が 0 になる。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
! 斜交直線座標系
座標軸が直交していない直線座標。座標が直交していないので、内積の取り扱い方が変わる。
---
! [[座標変換|直線座標系の座標変換]]
ある直線座標から別の直線座標への変換は、線形変換で表せる。
; 基底の変換
基底の変換は、線形変換で表すことができる。
* $$e_j = {A^i}_j e'_i $$
* $$e'_i = {\bar{A}^j}_i e_j $$
; 成分の変換
基底を変換した際のベクトルの成分の変化は、基底の変換行列の逆行列で表される。
* $$x^j = {\bar{A}^j}_i {x'}^i$$
* $${x'}^i = {A^i}_j x^j $$
---
! ユニタリー変換
https://mathwords.net/erumiitogyoretsu
---
斜交座標系でベクトルを表す方法
https://risalc.info/src/oblique-coordinates-three-dimension.html
! 基底の変換 (線形変換)
イメージしやすいので、3次元で説明する。
3次元実数ベクトル空間 V の2つの基底を、$$\{e_1, e_2, e_3\}, \ \ \ \{e'_1, e'_2, e'_3\}$$ とする。
このとき、2つの座標系の関係は、線形変換を用いると、
* $$e_1 = {A^1}_1 e'_1 + {A^2}_1 e'_2 + {A^3}_1 e'_3$$
* $$e_2 = {A^1}_2 e'_1 + {A^2}_2 e'_2 + {A^3}_2 e'_3$$
* $$e_3 = {A^1}_3 e'_1 + {A^2}_3 e'_2 + {A^3}_3 e'_3$$
九つの一次方程式であらわすことが可能である (e,,i,,,e',,i,, は3次元のベクトル)。そして、9つの式に対して9つの変数なので、基本的には $${A^j}_i$$ は一意に求まる。
行列 $$A = {A^j}_i$$ を使えば、次のように表すこともできる。
:$$e_i = \begin{pmatrix} e_1 \\ e_2 \\ e_3 \end{pmatrix} = \begin{pmatrix} {A^1}_1 & {A^2}_1 & {A^3}_1 \\{A^1}_2 & {A^2}_2 & {A^3}_2 \\ {A^1}_3 & {A^2}_3 & {A^3}_3 \end{pmatrix} \begin{pmatrix} e'_1 \\ e'_2 \\ e'_3 \end{pmatrix} = {A^j}_i e'_j $$ 【式1】
この式の両辺に、行列 A の逆行列 $$A^{-1} = {\bar{A}^i}_j$$ を掛けると、
:$${\bar{A}^i}_j e_i = {\bar{A}^i}_j {A^j}_i e'_j = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1& 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} e'_1 \\ e'_2 \\ e'_3 \end{pmatrix} = e'_j$$ 【式2】
と表すことができる。
!! 直交変換
(次元と)内積を変えない線形変換を、直交変換という。
* ベクトルの内積を保存する座標変換は、常に直交行列で与えられる。
---
! 成分の変換
!! ベクトル
あるベクトル $$v \in V$$ は、それぞれの基底を使うと次のように表せる。
* $$v = x^1 e_1 + x^2 e_2 + x^3 e_3$$ 【式3】
* $$v = {x'}^1 e'_1 + {x'}^2 e'_2 + {x'}^3 e'_3$$ 【式4】
【式3】に【式1】を代入すると、ベクトル v は、
:$$v = x^1 e_1 + x^2 e_2 + x^3 e_3 = x^1 ({A^1}_1 e'_1 + {A^2}_1 e'_2 + {A^3}_1 e'_3) + x^2 ({A^1}_2 e'_1 + {A^2}_2 e'_2 + {A^3}_2 e'_3) + x^3 ({A^1}_3 e'_1 + {A^2}_3 e'_2 + {A^3}_3 e'_3)$$
と表せ、式を整理すると、
:$$v = ({A^1}_1 x^1 + {A^1}_2 x^2 + {A^1}_3 x^3) e'_1 + ({A^2}_1 x^1 + {A^2}_2 x^2 + {A^2}_3 x^3) e'_2 + ({A^3}_1 x^1 + {A^3}_2 x^2 + {A^3}_3 x^3) e'_3$$
となる。この式の各基底の値を【式4】比較すると、
* $${x'}^1 = {A^1}_1 x^1 + {A^1}_2 x^2 + {A^1}_3 x^3$$
* $${x'}^2 = {A^2}_1 x^1 + {A^2}_2 x^2 + {A^2}_3 x^3$$
* $${x'}^3 = {A^3}_1 x^1 + {A^3}_2 x^2 + {A^3}_3 x^3$$
であり、これを行列を使ってまとめると、
:$${x'}^j = \begin{pmatrix} {x'}^1 \\ {x'}^2 \\ {x'}^3 \end{pmatrix} = \begin{pmatrix} {A^1}_1 & {A^1}_2 & {A^1}_3 \\{A^2}_1 & {A^2}_2 & {A^2}_3 \\ {A^3}_1 & {A^3}_2 & {A^3}_3 \end{pmatrix} \begin{pmatrix} x^1 \\ x^2 \\ x^3 \end{pmatrix} = {A^j}_i x^i $$ 【式5】
が得られる。さらに、逆行列をかけると、
:$${\bar{A}^i}_j {x'}^j = x^i$$ 【式6】
が得られる。
よって、【式1】と【式6】を比較から、''基底を変換した際のベクトルの成分の変化は、基底の変換行列の逆行列で表すされることが分かる''。
なお、【式2】と【式5】の比較からも、同じことが言える。
- - - - - - - - - - -
!! 2階のテンソル
後で書く。
---
! grad の座標変換
あるスカラー場の値が、基底 e,,j,, の座標では $$f(x^j)$$、基底 e',,i,, の座標では $$f'(x'^i)$$ で与えられるとする。
ある一つの点をこの二つの座標で表した場合、
:$$\displaystyle \sum x^j e_j = \sum x'^i e'_i$$
であり、スカラー場の値自体は座標とは関係ないため、
:$$f(x^j) = f'(x'^i)$$
である。ここで、この両辺の左右を入れ替えた上で、 $$x'^i$$ で微分すると、
:$$\dfrac{\partial f'(x'^i)}{\partial x'^i} = \dfrac{\partial f(x^j)}{\partial x'^i} = \dfrac{\partial x^j}{\partial x'^i} \dfrac{\partial f(x^j)}{\partial x^j} $$
という関係が得られる。この式の右辺は、【式6】と微分の線形性を用いて次のように変形できる (はず)。
:$$\dfrac{\partial f'(x'^i)}{\partial x'^i} = \dfrac{\partial}{\partial x'^i} ({\bar{A}^j}_i {x'}^i) \dfrac{\partial f(x^j)}{\partial x^j} = {\bar{A}^j}_i \dfrac{\partial {x'}^i}{\partial x'^i} \dfrac{\partial f(x^j)}{\partial x^j} = {\bar{A}^j}_i \dfrac{\partial f(x^j)}{\partial x^j}$$
i, j を入れ替えて書くと、
:$$\dfrac{\partial f'(x'^j)}{\partial x'^j} = {\bar{A}^i}_j \dfrac{\partial f(x^i)}{\partial x^i}$$
となり、この関係は 【式2】の同じである (つまり grad は共変ベクトル)。
低温(70℃くらい)で蒸すと、野菜はシャキシャキになる
α, β は定数とし、関数 $$f,g$$ は閉区間 [a,b] で積分可能とすると、以下が成り立つ。
; 1. 線形性
$$\displaystyle \int_a^b ( \alpha f(x) + \beta g(x)) dx = \alpha \int_a^b f(x) dx + \beta \int_a^b g(x) dx $$
; 2. 加法性
関数fが [a,c] [c,b] で積分可能ならば、[a,b] で積分可能である。
$$\displaystyle \int_a^b f(x) dx = \int_a^c f(x) dx + \int_c^b g(x) dx$$
; 3. 単調性
[a,b] で $$ f(x) \leqq g(x) $$ ならば、
$$\displaystyle \int_a^b f(x) dx \leqq \int_a^b g(x) dx$$
が成り立つ。等号が成り立つ時は、$$f, g$$ は共通の連続点すべてで値が一致する。
; 4. [[置換積分]]
t が α→β と単調に変化するとき x は a→b と単調に変化するものとすると、次の関係が成り立つ。
$$\displaystyle \int_a^b f(x) dx = \int_{\alpha}^{\beta} f(g(t)) \dfrac{dx}{dt} dt$$
; 5. 部分積分
$$\displaystyle \int_a^b f(x) g'(x) dx = \left[ f(x) g(x) \right]_a^b - \int_a^b f'(x) g(x) dx$$
; 6. 不定積分の微分
$$\displaystyle \dfrac{d}{dx} \int_a^x f(x) dx = f(x)$$
; 7. 奇関数・偶関数
関数 f を奇関数、関数 g を偶関数とすると、次の関係が成り立つ。
$$\displaystyle \int_{-a}^a f(x) dx = 0$$
$$\displaystyle \int_{-a}^a g(x) dx = 2\int_0^a g(x) dx $$
! 点推定
母集団の未知の母数をある一つの値で推定する方法
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! 推定量と推定値
<<<
少々紛らわしいが、''推定量 (estimator)''はあくまで計算式の定義に用いられ、実際の標本の値に基づいて数字を計算した値は ''推定値 (estimate)'' と呼ばれる。
:$$\bar{X} = \dfrac{X_1 + X_2 + \dots X_n}{n}$$
たとえば上記のように確率変数 $$X_1 \sim X_n$$ に基づいて推定量を考えた際に、 $$X_1= x_1 \sim X_n = x_n$$ が標本で与えられて計算した値が推定値である。
<<<
[[推測統計を理解するにあたって知っておきたい点推定(point estimation)まとめ - あつまれ統計の森|https://www.hello-statisticians.com/explain-terms-cat/point_estimation1.html]]
- - - - - - - - - - - - - - - - - - - -
!! バイアス・不偏推定量
$$\hat{\theta} = h(X_1, X_2, \dots , X_n)$$ を $$\theta$$ の 推定量 (estimator)とした時、''バイアス'' (bias) は以下のように定義される。
:$$B(\hat{\theta}) = E[\hat{\theta}] - \theta $$
そして、バイアスが0 の推定量のことを ''不偏推定量'' (unbiased estimator) という。
$$X_1, X_2, \dots , X_n$$ が [[単純無作為標本|単純無作為抽出]] の場合は $$B(\hat{\theta}) = 0$$ となる。
!! 平均二乗誤差 (Mean Squared Error)
推定量と真の値の差の二乗を、平均二乗誤差 (Mean Squared Error)という。
: $$MSE(\hat{\theta}) = E[ (\hat{\theta} - \theta)^2]$$
この式は、次のように変形できる ([[分散]])。
: $$MSE(\hat{\theta}) = \mathrm{Var}[\hat{\theta} - \theta] - (E[\hat{\theta} - \theta)])^2 = \mathrm{Var}[\hat{\theta}] + (B(\hat{\theta}))^2$$
!! 一致推定量 (consistent estimator)
サンプル数をどんどん増やしていくと、ほぼ確実に、真の値を正しく予測できるような推定量。
:$$\displaystyle \lim_{n \to \infty} P( |\hat{\theta}_n - \theta| \geq \epsilon ) = 0 \ , \ \ \forall \epsilon > 0$$
例えば、$$\bar{\theta}_n = \bar{X} = \dfrac{X_1 + X_2 + \dots X_n}{n}$$ は、[[チェビシェフの不等式]] を用いると、
:$$P(|\bar{X} - \theta| \geq \epsilon) \leq \dfrac{Var(\bar{X})}{\epsilon^2} = \dfrac{\sigma^2}{n \epsilon^2}$$
なので、一致推定量であることが分かる。
- - - - - - - - - - - - - - - - - - - -
!! 不偏分散
$$X_1, X_2, \dots , X_n$$ が [[単純無作為標本|単純無作為抽出]]の場合、不偏分散は次のように定義できる。
:$$\displaystyle S^2 = \dfrac{1}{n-1} \sum_i (X_i -\bar{X})^2 = \dfrac{1}{n-1} \left[ \sum_i {X_i}^2 - 2 n \bar{X} \dfrac{\sum_i {X_i}}{n} + n {\bar{X}}^2 \right] = \dfrac{1}{n-1} \left(\sum_i {X_i}^2 - n {\bar{X}}^2 \right)$$
実際にバイアスを計算すると、
:$$\displaystyle B(S^2) = E[S^2] - \sigma^2 = \dfrac{1}{n-1} E \left[\sum_i ({X_i}^2) - n {\bar{X}}^2\right] - \sigma^2 = \dfrac{1}{n-1} \left( \sum_i E \left[ {X_i}^2 \right] - n E\left[{\bar{X}}^2\right] \right) - \sigma^2$$
右辺第一項は二次モーメントの和で、第二項は ([[分散]]の性質から) $$E[{\bar{X}}^2] = \mathrm{Var}[\bar{X}] + (E[\bar{X}])^2$$ なので、
:$$\displaystyle B(S^2) = \dfrac{1}{n-1} \left[ n(\mu^2 + \sigma^2) - n (\dfrac{\sigma^2}{n} + \mu^2) \right] - \sigma^2 = 0$$
となる。
----
http://ryo1.info/statistics/statistical-mathematics-ex14/
* 推定量 (estimator)
* 推定値 (estimate)
<<tag>>
! シンボルの定義
{{伝熱工学の物理量!!text}}
---
! 熱の扱い方
熱自体はポテンシャル量ではないので、熱をそのまま微分することはできない。
$$\ \ \ \ Q = \dot{Q} \Delta t$$
ただし、積分はできるので、以下のような扱い方は可能。
$$\ \ \ \ \displaystyle Q = \int_0^{\Delta t} \dot{Q} dt $$
---
!フーリエの法則
「''単位時間当たりの熱の移動量''」は、「''熱伝導率 (k)''・''面積''・''温度勾配''」に比例する。
!! 一次元の場合
$$\dfrac{Q}{\Delta t} = - k A \dfrac{\Delta T}{\Delta x}$$
熱流束密度を使うと、次のようにも書ける。
$$J = - k \dfrac{dT}{dx}$$
!! 三次元の場合
$$J = - k \cdot \mathrm{grad} T$$
* J: 熱流束密度 [W/m2]
* k: 熱伝導率 [W/m/K]
* T: 温度 [K]
---
! [[熱伝導方程式]] (Heat Conduction Equation)
!! 一次元の場合
$$\rho c \dfrac{\partial T}{\partial t} = k \left(\dfrac{\partial^2 T}{\partial x^2} \right) + \dfrac{\partial e_{gen}}{\partial t}$$
!! 三次元の場合
https://whyitsso.net/physics/thermo_dynamics/thermal_transfer1.html
---
! Heat Conduction in Semi-Infinite Solids
非常に大きな物体に対して、一つの平面からのみ熱が流入してくる系を考える。(「非常に大きな物体」と書いたが、流入してくる熱に対して、物体が十分に大きければ同様に考えることができる)
[[熱伝導方程式]] で、 $$\dfrac{\partial e_{gen}}{\partial t} = 0$$ とすると、
$$\left(\dfrac{\partial^2 T}{\partial x^2} \right) = \dfrac{\rho c}{k} \dfrac{\partial T}{\partial t} = \dfrac{1}{\alpha} \dfrac{\partial T}{\partial t}$$
---
! Thermal Diffusivity (温度拡散率)
| |意味 |単位 |補足 |h
|t |時間|sec ||
|T |温度 |K ||
|ρ |密度 |kg/m3 ||
|c |比熱 |J/K/kg ||
| || ||
|$$Q$$ |熱 |J ||
|$$\dot{Q}$$ |Heat Transfer Rate |W (= J/sec) |$$\dot{Q} = \dfrac{\partial Q}{\partial t}$$ |
| || ||
|k |熱伝導率 |W/m/K |Thermal Conductivity |
|α |熱拡散率 |m/s2 |Thermal diffusivity (= k/ρc) |
基底を直交変換しても成分が変わらないテンソル。
----
; スカラー (0階)
スカラーは座標によらないので、等方性の条件を満たしている。
; ベクトル (1階)
1階の等方性テンソルは、0 ベクトル だけである。
; 2階のテンソル
2階の等方性テンソルは、クロネッカーのデルタ。
; 3階のテンソル
; 4階のテンソル
4階の等方性テンソルは、$$\delta_{ij}\delta_{kl}, \ \delta_{ik}\delta_{jl}, \ \delta_{il}\delta_{jk} $$ の三種類の重ね合わせで表現できる。
: $$A \delta_{ij}\delta_{kl} + B \delta_{ik}\delta_{jl} + C \delta_{il}\delta_{jk} $$
----
https://bitbucket.org/takechi/note/downloads/Constitutive_equation_and_Isotropy.pdf
<<tag "統計学">> <<tag "確率論">>
<$reveal type="nomatch" state="$:/state/statistics" text="show"><$button set="$:/state/statistics" setTo="show">関連項目</$button></$reveal>
<$reveal type="match" state="$:/state/statistics" text="show">
<$button set="$:/state/statistics" setTo="hide">隠す</$button>
<div class="tc-table-of-contents">
<<toc-selective-expandable '統計学'>>
</div>
</$reveal>
このサイトがものすごく詳しい。
* https://www.probabilitycourse.com/
---
! 用語
!! General
* 母集団
* 分布 (distribution)
* 標本数
* [[ガウスの公理]]
* [[単純無作為抽出]]
!! 推定
* [[点推定]]
* [[区間推定]]
!! 統計量
* 合計
* 最小
* 最大
* [[平均値]] (mean)
* 中間値 (median)
* [[分散]] (variance)
* 標準偏差 (standard deviation)
* [[期待値]] (expected value)
* 最頻値 (mode)
* 尖度
* 歪度
!! 分布
* [[確率密度関数]] (Probability density function)
* 累積分布関数 (Cumulative distribution function)
* [[二項分布]] (Binomial distribution)
* [[正規分布]] (Normal distribution)
* [[対数正規分布]] (Log-normal distribution)
!! 検定
* [[分散分析]]
* [[回帰分析]]
https://www.codereading.com/statistics/statistic.html#nid10
---
! [[基本的な統計量]]
{{基本的な統計量!!text}}
<<tag "統計力学">>
! 基本原理 (要請)
!! ''等重率の原理'' (The principle of equal a priori probabilities)
エネルギーと粒子数が一定のマクロな孤立系では、実現可能な各量子状態は等しい確率で実現する。
- - - - - - - - - - - - - - - - - - - -
!! ''[[ボルツマンの原理]]'' (Boltzmann's principle)
エネルギーが E、粒子数が N、体積が V の孤立系における実現可能な量子状態の数が、 W(E,N,V) で与えられるとする。このとき、孤立系のエントロピー S を次のように定義する。
:$$S(E,N,V) = k_B \ln W(E,N,V) $$
$$k_B$$ はボルツマン定数といい、エントロピーと同じ次元を持つ。
---
! ミクロカノニカルアンサンブル (Microcanonical ensemble)
ミクロカノニカルアンサンブルは、''等重率の原理を満たす孤立系 (エネルギー・体積・粒子数が一定)'' に関する話。
: $$ΔE = ΔV = ΔN_i = 0$$
ざっくり言うと、孤立系内で、実現可能な (メカニカルな) 微視的状態が等しい確率で実現する、粒子(分子や原子)を構成要素とする集合体のこと。
また、要請としたボルツマン原理から、この集合体のエントロピーは状態数で表すことができる。
:$$S(E,N,V) = k_B \ln W(E,N,V) $$
- - - - -
厳密に言えば 、(E, V , Ni) を指定してミクロ状態を集めただけなので、「''ミクロカノニカルアンサンブルには非平衡状態に対応するミクロ状態も含まれる''」が、次の要請を加えることで、集めたミクロ状態は全て平衡状態とみなして考えることができる (らしい)。
; 要請
:ミクロカノニカルアンサンブルでは、アンサンブルの中から任意にひとつミクロ状態を選び出したとき,それは ''ほとんど確実に''、その (E, V, Ni) で指定される平衡状態(に対応するミクロ状態のひとつ)である。(「''ほとんど確実に''」とは,「''[[熱力学極限]]で 100% になる確率で''」という意味)
----
! [[カノニカル分布]] (canonical ensemble)
カノニカル分布では、「''体積・粒子数は一定だが、エネルギーに揺らぎがある系''」を扱う。
: $$ΔV = ΔN_i = 0, \ \ \ ΔE \neq 0$$
一定の体積Vを持ち、外界との間に熱のやりとりがある「閉じた系」を考えよう。熱平衡状態では、系のエネルギーは時間的にゆらぐが、エネルギー期待値⟨E⟩は一定とみなしてよいであろう。
:$$ F(T,V,N) = - k_B T \ln Z(T,V,N) $$
Z は''分配関数'' (Partition Function) といい、エネルギーと温度の関数として表される。
$$\ \ \ \ \ \ \displaystyle Z(T,V,N) = \sum_{\nu} e^{- E_{\nu} / k_B T}$$
(完全な関数の) ヘルムホルツエネルギーが分かれば、他の熱力学プロパティは求めれる。
$$\ \ \ \ \ \ S = - \dfrac{\partial F}{\partial T} = k_B \ln Z + k_B T \dfrac{\partial \ln Z}{\partial T} $$
$$\ \ \ \ \ \ p = - \dfrac{\partial F}{\partial V} = k_B T \dfrac{\partial \ln Z}{\partial V} $$
$$\ \ \ \ \ \ \mu = \dfrac{\partial F}{\partial N} = k_B T \dfrac{\partial \ln Z}{\partial N} $$
他のポテンシャル関数:
- - - - -
$$\ \ \ \ \ \ p_{\nu} = \dfrac{e^{- E_{\nu} / kT}}{Z} $$
http://phys.sci.hokudai.ac.jp/~kita/StatisticalMechanicsI/Stat4.pdf
- - - - -
$$ U = \sum_{\nu} E_{\nu} P_{\nu} = \dfrac{1}{Z} \sum_{\nu} e^{- E_{\nu} / kT} E_{\nu} = - \dfrac{\partial}{\partial (1/kT)} ln Z
$$
----
! グランドカノニカル分布 (grand canonical ensemble)
外界との間に、熱に加えて粒子のやりとりがある「開いた系」を考えよう。その熱平衡状態では、系のエネルギーと粒子数は時間的にゆらぐが、それらの期待値⟨E⟩と⟨N⟩は一定とみなしてよいであろう。
グランドカノニカルアンサンブルの方法では,系を指定する変数は温度 T,体積Vと化学ポテンシャルμです。
---
---
- - - - -
http://phys.sci.hokudai.ac.jp/~kita/StatisticalMechanicsI/Stat4.pdf
```
孤立系の場合は、エネルギーが保存しているので、等しいエネルギーのコピーだけからなるアンサンブルを考えればよい。これをミクロカノニカルアンサンブルという。等重率の原理は、「ミクロカノニカルアンサンブルでは、すべての状態に属するコピーが同数だけある」と表現することもできる。なお、この場合は同数であればよいので、すべての状態が一つづつあればよい。
```
http://pegui.la.coocan.jp/physics/statnote/kyokasho2017.pdf
微視的状態数 W は、 N個の粒子の中から $$N_1$$ 個を最も低いエネルギー準位 (便宜的に状態1とする)に割り当て、$$N_2$$ 個を次に低いエネルギー準位に割り当て(状態2)、$$N_3$$ 個をその次に低い順位に... という処理で起こりえる組み合わせ数を計算すればよいので、次式で表すことができる。
$$W = \dfrac{N!}{\prod_i N_i!} $$
ただし、ミクロカノニカルでは、エネルギーが一定という条件が加わるため、 ''状態数 (W) は、エネルギー (E) と 粒子数 (N) の関数'' となる。
この式では、次の2つを前提としている。
* 等重率の原理: $$p_v = \dfrac{1}{W} $$ ($$p_v$$ は状態vの確率)
* ある状態を取り出す時に、非平衡状態を選ぶ確率はほとんどない
! カノニカル分布
* [[慶應大学 理工学部 講義 統計物理 第一回 - YouTube|https://www.youtube.com/watch?v=zhHoeqVD8ak]]
* [[ときわ台学/統計力学/カノニカル分布の導出|http://www.f-denshi.com/000okite/100tokei/t104.html]]
* http://www.eng.hokudai.ac.jp/labo/optphys/theoretical/tsuchiya/lectures/2004/StatMechI/Note5.pdf
! 並進運動
* [[慶應大学 理工学部 講義 統計物理 第七回 - YouTube|https://www.youtube.com/watch?v=kJ3Lc44xeNM&index=7&list=PL2AADACE542947136]]
! 分子間相互作用
* [[熱と分子運動|http://www.kz.tsukuba.ac.jp/~abe/ohp-thermal_dynamics/thermal_dynamics_3.pdf]]
! ビリアル展開
* [[ビリアル展開 - Wikipedia|https://ja.wikipedia.org/wiki/%E3%83%93%E3%83%AA%E3%82%A2%E3%83%AB%E5%B1%95%E9%96%8B]]
* [[クラスター展開 - Wikipedia|https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%83%BC%E5%B1%95%E9%96%8B]]
! 分子の運動
* http://fnorio.com/0140Maxwell_distribution_1/Maxwell_distribution_1.html
! ほか
* [[ハミルトニアン]]
* [[ビールの泡は炭酸ガス。では炭酸ガスはどのぐらい溶け込んでいるの? |http://blog.q-q.jp/200903/article_44.html]]
* [[知識の宝庫!目がテン!ライブラリー|http://www.ntv.co.jp/megaten/library/date/07/08/0812.html]]
* [[クリエイティブコモンズにおける著作権表示[to-R]|http://blog.webcreativepark.net/2007/12/03-154350.html]]
* [[AviUtlのお部屋 | http://spring-fragrance.mints.ne.jp/aviutl/]]
** [[DirectShow File Reader プラグイン for AviUtl | http://www.tenchi.ne.jp/~yoko/aviutl/index.php?DirectShow%20File%20Reader%20%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3%20for%20AviUtl]] <br>メディアプレーヤーで再生できるファイルならば基本的に読み込み可能になる
* [[Motion Jpeg Codec | http://www.geocities.com/strictdaddy_uk/index.html]] 多分VFW用
* [[CodecInstaller | http://www.jockersoft.com/english/codecinstaller.php]] インストールされているコーデックを確認できる
* [[SwfDrop | http://www.gigafree.net/media/flashenc/swfdrop.html]] swf => avi
* [[画面動画キャプチャーソフト CamStudio 日本語版 | http://nonn-et-twk.net/twk/CamStudio/]]
* [[mp4tomp3 | http://d.hatena.ne.jp/FukayaAruto/20091107/mp4_to_mp3_converter_ver2]]
* 豚
** 貯金箱
** 蚊取り線香
* 牛
* 鶏
* 羊
* 犬
* 猫
* 馬
* 象
[[確率変数]] に関しては、n個の確率変数 X,,n,, と それに対する ''同時確率'' を考えることができる。
確率変数が一つの場合と同様に、離散型と連続型で扱いが少し異なる。
* [[同時確率分布_離散型]]
* [[同時確率分布_連続型]]
----
! IID
複数の独立である確率変数が同一分布に従う時に、''Independent and Identically Distributed (IID)'' という。日本語だと、たぶん「''独立同分布に従う''」という。
!! 確率変数の[[独立]] (Independence)
$$X_1, X_2, \dots , X_n$$ が次の条件を満たす時、これらの確率変数は独立である。
:$$F_{X_1, X_2, \cdots , X_n} (x_1, x_2, \cdots , x_n) = F_{X_1}(x_1) F_{X_2}(x_2) \cdots F_{X_n}(x_n) $$
!! 同一分布に従う (identically distributed)
異なる確率変数が同じ 確率質量関数/密度関数 を持つ場合、同一分布に従うという。
:$$\displaystyle P[x\geq X_1]=P[x\geq X_2] = \dots = P[x\geq X_n] ,\,\ \forall x\in \mathbb {I} $$
----
! [[期待値]]
:$$E[X_1 + X_2 + \cdots X_n] = E[X_1] + E[X_2] + \cdots E[X_n]$$
! Covariance
$$Cov[X,Y] = E[(X-E[X]) (Y-E[Y])] = E[XY] - (E[X] E[Y])$$
----
----
!! 同時確率質量関数 (Joint Probability Mass Function)
- - - - - - - - - -
!! 同時確率密度関数 (Joint Probability Density Function)
''同時確率密度関数 (Joint Probability Density Function)'' は、次のように定義される。
$$\displaystyle P((X,Y) \in A) = \iint_{A} f_{XY} (x,y) dxdy$$
ここで、$$A \in \mathbb{R}^2$$であり、 $$f_{XY} : \mathbb{R}^2 \to \mathbb{R} $$ は、次の二つの条件を満たす関数である。
* 非負の値を返す
* X, Y の定義域で積分すると 1 になる。
なので、例えば、X, Y の定義域が実数全体の場合は、
:$$\displaystyle \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} f_{XY} (x,y) dxdy = 1$$
となる。
- - -
* $$A \in \mathbb{R}^2$$
* 非負の関数 $$f_{XY} : \mathbb{R}^2 \to \mathbb{R} $$
* $$\displaystyle \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} f_{XY} (x,y) dxdy = 1$$
----
$${\displaystyle P[x\geq X]=P[x\geq Y] ,\,\forall x\in \mathbb {I} } $$
:$$F_{X_1}(x) = F_{X_2}(x) = \cdots = F_{X_n}(x) $$
[[LOTUS]] を使う。
$$\displaystyle
\begin{aligned}
E[X+Y] &= \sum_{(x_i, y_i) \in R_{XY}} (x_i + y_i) P_{XY} (x_i, y_i) \\
&= \sum_{x_i \in R_{X}} \sum_{y_i \in R_{Y}} x_i P_{XY} (x_i, y_i) + \sum_{x_i \in R_{X}} \sum_{y_i \in R_{Y}} y_i P_{XY} (x_i, y_i)
\end{aligned}
$$
!離散型の場合
!! 同時確率質量関数 (Joint Probability Mass Function)
$$X_1, X_2, \dots , X_n$$ を [[確率変数]] とする。このとき ''同時確率質量関数'' $$P_{X_1, X_2, \cdots , X_n}$$ は、次のように定義される。
:$$P_{X_1, X_2, \cdots , X_n}(x_1, x_2, \cdots , x_n) = P(X _1 = x_1, X_2 = x_2, \cdots , X_n = x_n)$$
!! 周辺確率質量関数 (Marginal probability mass function)
一般的な場合は大変なので、確率変数が2つの場合で説明する。
次のように定義された $$P_X(x)$$ を、X の周辺確率質量関数 という。
:$$\displaystyle P_{X}(x) = P(X = x) = \sum_{y_i \in R_Y} P(X = x, Y = y_i) = \sum_{y_i \in R_Y} P(x, y_i)$$
[[Joint Probability Mass Function - Marginal PMF |https://www.probabilitycourse.com/chapter5/5_1_1_joint_pmf.php]]
!! 同時累積分布関数 (Joint Cumulative Distribution Function)
追記する
- - - - - - - - - -
!! より具体的な説明
簡単な例として、二つの離散型確率変数 X, Y があるケースを考える。
この場合に、X と Y がそれぞれ x, y の値を取る時の確率を返す関数である ''同時確率質量関数'' は、
:$$P_{XY}(x,y) = P(X = x, Y = y)$$
と表される。また、''Joint Range'' と '''' は、
$$\ \ \ \ \ \ \ \ \ \ R_{XY} = \{ (x,y) | P_{XY} > 0 \}$$
$$\ \ \ \ \ \ \ \ \ \ F_{XY}(x,y) = P(X \leq x, Y \leq y)$$
と定義される。また、''同時累積分布関数'' は、$$x_1 < x_2 < \dots < x_m, \ \ y_1 < y_2 < \dots < y_n$$ とすると、
$$\displaystyle \ \ \ \ \ \ \ \ \ \ F_{XY}(x_m, y_n) = P(X \leq x_m, Y \leq y_n) = \sum_{i=1}^m \sum_{j=1}^n P(X = x_i, Y = y_j) $$
と表せる。
! 同時確率密度関数 (Joint Probability Density Function)
確率変数が連続型の場合、''同時確率密度関数'' $$f_{X_1, X_2, \cdots , X_n}$$ は次のように定義される。
$$\displaystyle \ \ \ \ \ \ \cdot \ \ P((X_1, X_2, \cdots , X_n) \in A) = \int \cdots \int_{A} f_{X_1, X_2, \cdots , X_n} (x_1, x_2, \cdots , x_n) \ dx_1 dx_2 \cdots dx_n$$
同時確率密度関数は、次の条件を満たさなければならない。
$$\displaystyle \ \ \ \ \ \ \cdot \ \ \int_{-\infty}^{\infty} \cdots \int_{-\infty}^{\infty} f_{X_1, X_2, \cdots , X_n} (x_1, x_2, \cdots , x_n) \ dx_1 dx_2 \cdots dx_n = 1$$
$$\displaystyle \ \ \ \ \ \ \cdot \ \ f_{X_1, X_2, \cdots , X_n} (x_1, x_2, \cdots , x_n) \geq 0 $$
----
! 同時累積分布関数 (Joint Cumulative Distribution Function)
''同時累積分布関数'' $$F_{X_1, X_2, \cdots , X_n} (x_1, x_2, \cdots , x_n)$$ は次のように定義される。
:$$F_{X_1, X_2, \cdots , X_n} (x_1, x_2, \cdots , x_n) = P(X _1 \leq x_1, X_2 \leq x_2, \cdots , X_n \leq x_n) $$
; 1. べき関数
* $$\displaystyle (x^\alpha)' = \alpha x^{\alpha-1} $$ (x > 0, α 任意の実数)
; 2. 指数関数
* $$(a^x)' = a^x \log{a} $$
* $$(e^x)' = e^x$$
; 3. 対数関数
* $$\displaystyle (\log_a|x|)' = \dfrac{1}{x \log a} $$ (x > 0, a > 0)
* $$(\log |x|)' = \dfrac{1}{x}$$
; 4. 三角関数
1. $$(\sin x)' = \cos x $$
2. $$(\cos{x})' =- \sin{x} $$
3. $$(\tan{x})' = \dfrac{1}{\cos^2 x}$$
4. $$\displaystyle (\sin^{-1}{x})' = \frac{1}{\sqrt {1-x^2}} $$ (-1 < x < 1)
5. $$\displaystyle (\cos^{-1}{x})' = \frac{-1}{\sqrt {1-x^2}} $$ (-1 < x < 1)
6. $$\displaystyle (\tan^{-1}{x})' = \frac{1}{\sqrt {1+x^2}} $$
---
; 知っていた方が便利なもの
* $$(x^x)' = (\log x + 1) x^x$$
---
$$\displaystyle f(x)=c, f'(x)=0 $$
! (事象の) 独立
BにおけるAの [[条件付き確率]] がAの確率に一致するとき、「''AとB は独立である''」という。
:$$P(A|B) = P(A)$$
この関係は、[[条件付き確率]] の定義から、次のように表すこともできる。
:$$P(A\cap B) = P(A|B) P(B) = P(A)P(B)$$
一般的な形式で書くと、次のようになる。
:$$P(A_1 \cap A_2 \cap \dots \cap A_n )=P(A_1) P(A_2) \dots P(A_n)$$
''例'':
Aをサイコロで1の目が出る確率、Bをコインの表が出る確率とした場合、AとBが同時に起こる確率は次のように計算できる。
* P(A) = 1/6
* P(B) = 1/2
* P(A∩B) = P(A) P(B) = 1/12
- - - - - - - - - -
!! 全確率の定理 (Law of Total Probability)
If $$B_1,B_2,B_3, \cdots , B_n$$ is a partition of the sample space $$S$$, then for any event $$A$$ we have
: $$\displaystyle P(A) = \sum_i P(A \cap B_i) = \sum_i P(A | B_i) P(B_i)$$
; 証明
[[集合の操作における分配法則|集合の操作]] より
:$$A = A \cap S = A \cap (B_1 \cup B_2 \cup B_3, \cdots B_n) = A \cap (\bigcup_i B_i) = \bigcup_i (A \cap B_i)$$
である。$$B_i$$ は互いに素であるため ''確率測度の条件'' (3) を用いると、
:$$\displaystyle P\left(\bigcup_i (A \cap B_i)\right) = \sum_i P(A \cap B_i) $$
と変形できる。
[[Law of Total Probability|https://www.probabilitycourse.com/chapter1/1_4_2_total_probability.php]]
[[全確率の定理・ベイズの定理 - M男の学習帳|https://scrapbox.io/gyro0615-13105817/%E5%85%A8%E7%A2%BA%E7%8E%87%E3%81%AE%E5%AE%9A%E7%90%86%E3%83%BB%E3%83%99%E3%82%A4%E3%82%BA%E3%81%AE%E5%AE%9A%E7%90%86]]
----
! 独立確率変数
二つの (離散な) [[確率変数]] X, Y が次の条件を満たすとき、「''X と Y は独立である''」 という。
:$$P_{XY}(x, y) = P(X = x, Y = y) = P(X = x) P(Y = y) $$
連続な独立変数も考慮するのであれば、[[同時累積分布関数|同時確率分布_連続型]] ($$F_{XY}(x)$$) を用いた方がより一般的な形式である。
: $$F_{XY}(x,y) = F_X(x) F_Y(y)$$
3つ以上の独立変数
一般的な形式で書くと、次のようになる。
:$$P_{X_1, X_2, \dots X_n}(x_1, x_2, \dots, x_n) = P_{X_1}(x_1) P_{X_2}(x_2) \dots P_{X_n}(x_n)$$
- - - - -
* [[ピクトアップ|http://pict-up.com/pict.html]]
* [[日本の家畜・家禽 (フィールドベスト図鑑 特別版): 小宮 輝之, 秋篠宮文仁|http://www.amazon.co.jp/%E6%97%A5%E6%9C%AC%E3%81%AE%E5%AE%B6%E7%95%9C%E3%83%BB%E5%AE%B6%E7%A6%BD-%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%83%99%E3%82%B9%E3%83%88%E5%9B%B3%E9%91%91-%E7%89%B9%E5%88%A5%E7%89%88-%E5%B0%8F%E5%AE%AE-%E8%BC%9D%E4%B9%8B/dp/405403506X/ref=pd_rhf_p_t_4]]
** 意外におもしろい
* [[Match Day |http://www.amazon.co.jp/Match-Day-Official-Football-Programmes/dp/0955006147/ref=sr_1_8?ie=UTF8&s=english-books&qid=1240068674&sr=8-8]]
** amaznoの方が安かった...
* [[野菜の便利帳: 板木利隆|http://www.amazon.co.jp/%E3%81%8B%E3%82%89%E3%81%A0%E3%81%AB%E3%81%8A%E3%81%84%E3%81%97%E3%81%84-%E9%87%8E%E8%8F%9C%E3%81%AE%E4%BE%BF%E5%88%A9%E5%B8%B3-%E6%9D%BF%E6%9C%A8%E5%88%A9%E9%9A%86/dp/4471033816/ref=sr_1_1?ie=UTF8&s=books&qid=1238683211&sr=8-1]]
** 写真がきれい
* 辻 惟雄 「[[奇想の江戸挿絵|http://www.amazon.co.jp/%E5%A5%87%E6%83%B3%E3%81%AE%E6%B1%9F%E6%88%B8%E6%8C%BF%E7%B5%B5-%E9%9B%86%E8%8B%B1%E7%A4%BE%E6%96%B0%E6%9B%B8-%E3%83%93%E3%82%B8%E3%83%A5%E3%82%A2%E3%83%AB%E7%89%88-8V/dp/4087204405/ref=sr_1_1?ie=UTF8&s=books&qid=1223213665&sr=8-1]]」
* [[Gallop !|http://www.amazon.co.jp/Gallop-Scanimation-Books-Rufus-Butler/dp/0761147632/ref=sr_1_1?ie=UTF8&s=english-books&qid=1221543635&sr=8-1]]
* [[火打ち箱|http://www.amazon.co.jp/%E7%81%AB%E6%89%93%E3%81%A1%E7%AE%B1-%E3%81%93%E3%82%93%E3%81%AA%E3%82%A2%E3%83%B3%E3%83%87%E3%83%AB%E3%82%BB%E3%83%B3%E7%9F%A5%E3%81%A3%E3%81%A6%E3%81%9F-H-C-%E3%82%A2%E3%83%B3%E3%83%87%E3%83%AB%E3%82%BB%E3%83%B3/dp/4894323885/ref=sr_1_1?ie=UTF8&s=books&qid=1221568106&sr=8-1]]
* [[しりとり: 谷川 俊太郎, 和田 誠|http://www.amazon.co.jp/%E3%81%97%E3%82%8A%E3%81%A8%E3%82%8A-%E8%B0%B7%E5%B7%9D-%E4%BF%8A%E5%A4%AA%E9%83%8E/dp/4900963003/ref=sr_1_3?ie=UTF8&s=books&qid=1230348871&sr=8-3]]
* [[言葉図鑑―ことばがいっぱい (1): 五味 太郎|http://www.amazon.co.jp/%E8%A8%80%E8%91%89%E5%9B%B3%E9%91%91%E2%80%95%E3%81%93%E3%81%A8%E3%81%B0%E3%81%8C%E3%81%84%E3%81%A3%E3%81%B1%E3%81%84-1-%E4%BA%94%E5%91%B3-%E5%A4%AA%E9%83%8E/dp/4033430105/ref=sr_1_7?ie=UTF8&s=books&qid=1230974836&sr=8-7]]
* [[この世でいちばん大事な「カネ」の話 (よりみちパン!セ): 西原 理恵子|http://www.amazon.co.jp/%E3%81%93%E3%81%AE%E4%B8%96%E3%81%A7%E3%81%84%E3%81%A1%E3%81%B0%E3%82%93%E5%A4%A7%E4%BA%8B%E3%81%AA%E3%80%8C%E3%82%AB%E3%83%8D%E3%80%8D%E3%81%AE%E8%A9%B1-%E3%82%88%E3%82%8A%E3%81%BF%E3%81%A1%E3%83%91%E3%83%B3-%E3%82%BB-%E8%A5%BF%E5%8E%9F-%E7%90%86%E6%81%B5%E5%AD%90/dp/4652078404/ref=sr_1_1?ie=UTF8&s=books&qid=1236823915&sr=8-1]]
* [[牛久大仏忽然の貌―世界一の阿弥陀像完成までの1765日を記録 荒海美子・牛久きちい・大谷淑子写真集 (BeeBooks): 荒海 美子, 大谷 淑子, 牛久 きちい|http://www.amazon.co.jp/%E7%89%9B%E4%B9%85%E5%A4%A7%E4%BB%8F%E5%BF%BD%E7%84%B6%E3%81%AE%E8%B2%8C%E2%80%95%E4%B8%96%E7%95%8C%E4%B8%80%E3%81%AE%E9%98%BF%E5%BC%A5%E9%99%80%E5%83%8F%E5%AE%8C%E6%88%90%E3%81%BE%E3%81%A7%E3%81%AE1765%E6%97%A5%E3%82%92%E8%A8%98%E9%8C%B2-%E8%8D%92%E6%B5%B7%E7%BE%8E%E5%AD%90%E3%83%BB%E7%89%9B%E4%B9%85%E3%81%8D%E3%81%A1%E3%81%84%E3%83%BB%E5%A4%A7%E8%B0%B7%E6%B7%91%E5%AD%90%E5%86%99%E7%9C%9F%E9%9B%86-BeeBooks-%E8%8D%92%E6%B5%B7-%E7%BE%8E%E5%AD%90/dp/4896159969/ref=sr_1_1?ie=UTF8&s=books&qid=1238946799&sr=8-1]]
* [[宇宙からの地球観測―人工衛星と宇宙飛行士の視点で見る |http://www.amazon.co.jp/%E5%AE%87%E5%AE%99%E3%81%8B%E3%82%89%E3%81%AE%E5%9C%B0%E7%90%83%E8%A6%B3%E6%B8%AC%E2%80%95%E4%BA%BA%E5%B7%A5%E8%A1%9B%E6%98%9F%E3%81%A8%E5%AE%87%E5%AE%99%E9%A3%9B%E8%A1%8C%E5%A3%AB%E3%81%AE%E8%A6%96%E7%82%B9%E3%81%A7%E8%A6%8B%E3%82%8B-NEWTON%E3%83%A0%E3%83%83%E3%82%AF/dp/4315518689/ref=sr_1_1?ie=UTF8&s=books&qid=1267100611&sr=8-1]]
! 定義
!! 数学的定義
区間 I において定義された関数 $$f(x)$$ が、任意の $$a, b \in I$$ と $$0 < \lambda < 1$$ の範囲の任意の実数 $$\lambda$$ について、
:$$f(\lambda a + (1 - \lambda)b) \geq \lambda f(a) + (1 - \lambda) f(b)$$
であるとき $$f(x)$$ は ''上に凸'' であると言う。
また、
:$$f(\lambda a + (1 - \lambda)b) \leq \lambda f(a) + (1 - \lambda) f(b)$$
であるとき $$f(x)$$ は ''下に凸'' であると言う。
- - - - - - - - - -
!! 視覚的なイメージ
* グラフ上の二点を結んだ''線分が常にグラフの上側にあるような関数''を下に凸な関数(または単に凸関数)という。
* グラフ上の二点を結んだ''線分が常にグラフの下側にあるような関数''を上に凸な関数(または単に凹関数)という。
---
! 定理 (関数の性質)
!! 上に凸な関数の場合
; (1) I の内点において連続
; (2) I からたかだか可算個の点を除いた集合 I* の上で連続的微分可能
; (3) I の内点において左右の微係数 $$D_x^{\pm} f(x)$$ が存在し、それは微係数の左右の極限値に等しい
$$\ \ \ \ \displaystyle D_x^{\pm} f(x) = \lim_{\epsilon \to +0} f'(x \pm \epsilon) \equiv f'(x \pm 0) $$
; (4) I の内点では 右側微係数と左側微係数に関して次の性質が成り立つ.
$$\ \ \ \ f'(x - 0) \ge f'(x + 0)$$
; (5) I の任意の2つの内点 a, b について、 a < b であれば
$$\ \ \ \ f'(a + 0) \ge f'(b - 0)$$
---
! 参考
* [[凸関数の性質|http://hooktail.maxwell.jp/kagi/3e3f31d87633501322fd53b2886e2519.pdf]]
---
内点
* http://proofcafe.org/k27c8/math/math/topological_space/page/definition_of_open_set_and_closed_set/
! 内積の定義 (公理)
体 K 上の ベクトル空間 V の内積は、以下の性質を満たす写像として定義できる (2つのベクトルに対し、1つのスカラーが定まる)。
$$\langle \cdot , \cdot \rangle : V \times V \to K $$
ただし、一つのベクトル空間に定義される内積は 一つとは限らない。
* http://www.yyyamada.e-one.uec.ac.jp/Lecture/Slide/SGrd_Nseki.pdf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! K が実数の時
$$u, v \in V$$ とする。
!! 双線形性1
$$ \langle u + v, w \rangle = \langle u, w \rangle + \langle v, w \rangle $$
!! 双線形性2
$$ {\alpha} \langle u, v \rangle = \langle \alpha u, v \rangle = \langle u, \alpha v \rangle $$
!! 交換
$$ \langle u,v \rangle = \langle v,u \rangle $$
!! 正値性
$$ \langle u, u \rangle \geq 0 $$ $$ [ \langle u, u \rangle = 0 \Rightarrow u = 0] $$
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! K が複素数の時 (エルミート内積)
$$ (u, v) = \overline{u}^T v $$
!! 線形性1
$$ (u + v, w) = (u, w) + (v, w) $$
!! 線形性2
* $$ (\alpha u, v) = \overline{\alpha} (u, v) $$
* $$ (u, \beta v) = \beta (u, v) $$
!! エルミート対称性
$$ (u,v) = \overline{(v,u)} $$
!! 正値性
$$ (u, u) \geq 0 $$ $$ [ (u, u) = 0 \Rightarrow u = 0] $$
---
! [[計量ベクトル空間]] (内積空間)
!! [[ノルム]]
ベクトル空間に内積が導入されると、内積を用いて、''ノルムの定義を満たす関数'' を定義することができる。
:$$\|v\| = \sqrt{v \cdot v}$$
つまり、内積空間では距離(ノルム)を扱うことができる。そして、内積を備えたベクトル空間のことを [[計量ベクトル空間]] という。
!! 直交
内積が 0 になるとき「''直交する''」という。なお、直交は必ずしも 90° で交わることを意味しない。
!! [[計量テンソル]]
内積は [[対称双線型形式|双線形性]] の双線形写像であるため、二階のテンソルで表現することも可能である。
$$u, v$$ を反変ベクトル、$$g$$ を 対称な2階の共変テンソルとするとき、以下のように定義した関数は、内積の定義を満たす。そして、テンソル $$g$$ のことを ''計量テンソル'' という。
:$$\displaystyle u \cdot v = g(u, v) = \sum_{i} \sum_{j} g_{ij} u^i v^j = u^T g v$$
また、ベクトルは基底の線形結合で表せるので、内積の双線形性から、
:$$\displaystyle u \cdot v = \sum_i \sum_j u^i v^i (e_i \cdot e_j)$$
である ($$e$$ は $$u, v$$ の基底)。よって、
:$$g_{ij} = e_i \cdot e_j$$
であることが分かる 。また、直交の定義より、直交座標系では $$g_{ij} = 0 \ (i \neq j)$$ である。
---
! 標準内積 (ユークリッド内積)
以下のように定義される関数を、''標準内積'' という (T は転置)。
:$$\displaystyle \langle u, v \rangle = u^T v = u^1 v^1 + u^2 v^2 + \cdots + u^N v^N = \sum_{i=1}^N \sum_{j=1}^N u^i v^j $$
この関数は、当然、内積の性質を満たす。なお、標準内積は ''ユークリッド内積'' あるいは ''自然な内積'' ともいう。''[[正規直交座標|直線座標系]]'' の内積は、(全ての基底の大きさが1でかつそれらが直交するので) 標準内積になる。
厳密ではないが、二次元のベクトルを使って説明すると、以下のような感じ。
:$$u \cdot v = (u^1 e_1 + u^2 e_2) \cdot (v^1 e_1 + v^2 e_2) = u^1 v^1 |e_1|^2 + (u^1 v^2 + u^2 v^1) e_1 \cdot e_2 + u^2 v^2 |e_2|^2 = u^1 v^1 + u^2 v^2$$
! 一般的な直線座標の内積
一般的な直線座標では、基底の大きさは (必ずしも) 1 ではなく、各基底は (必ずしも) 直交していない (斜交座標など)。この場合、内積は [[計量テンソル]] を用いた形で表す必要がある。
:$$\displaystyle \langle u, v \rangle = \sum_{i=1}^N \sum_{j=1}^N g_{ij} u^i v^j = u^T g v$$
幾何学的に言えば、計量テンソルの各成分は、次のようになる。
:$$g_{ij} = e_i \cdot e_j = |e_i| |e_j| \cos{\theta_{ij}}$$
---
! テンソルの内積
<<<
2階テンソルに対しても内積(2重内積、2重ドット積)を定義できる。2つのテンソルA とB との内積は
$$\displaystyle A : B = \sum_{i,j = 1}^3 A_{ij} B_{ij}$$
と定義される。ここで、記号 : は、成分で書いたときに2つの添字についての和を取ることを象徴している。これは、ベクトルの内積記号 · が1つの添字についての和を取ることを象徴しているとみて、拡張したものである。
<<<
[[1. ベクトル・テンソル解析|http://dyna.geo.kyushu-u.ac.jp/~yoshida/japanese/lecture/math-exercise/vector-analysis-v-1-1.pdf]]
---
! ドット積
基本的には、ドット積は内積を表すのに使われるが、ベクトル解析では他の用途に使われることもあるらしい。
!! ディアディック (Dyadics)
ベクトル同士のテンソル積により生成された二階のテンソルに対し、ドット積を次のように使うことがあるらしい ($$ab = a \otimes b, cd = c \otimes d$$) 。
$${\displaystyle \left(\mathbf {a} \mathbf {b} \right)\cdot \left(\mathbf {c} \mathbf {d} \right)=\mathbf {a} \left(\mathbf {b} \cdot \mathbf {c} \right)\mathbf {d} =\left(\mathbf {b} \cdot \mathbf {c} \right)\mathbf {a} \mathbf {d} } $$
* https://en.wikipedia.org/wiki/Dyadics
* http://ir.c.chuo-u.ac.jp/repository/search/binary/p/135/s/121/
!! テンソルとベクトルの縮約
テンソル (''T'') とベクトル (''v'') の間で縮約を取る操作に対して、ドット積の記号を使うこともあるらしい。この場合には、一般的には交換法則が成り立たないことに注意 ($$\mathbf{T} \cdot \mathbf{v} \neq \mathbf{v} \cdot \mathbf{T} $$) 。
* $$\mathbf{T} \cdot \mathbf{v} = T_{ij} v_j$$
* $$\mathbf{v} \cdot \mathbf{T} = v_i T_{ij} $$
http://www.polymerprocessing.com/notes/root92a.pdf
なお、これらの操作は、テンソルを線形写像とみなすこともできる。
---
---
なお、2階の共変テンソル $$g_{ij}$$ は $$V^* \times V^*$$ の元なので、
$$V^* \times V^*: V \times V \to K$$
という見方もできるかも。
<<<
... ベクトルがどんな座標軸に乗っているかまでを意識します。
''そこで扱う対象は、2本のベクトルと、それぞれについて2つの基底、合わせて4つになるのです''。この4つの組み合わせのうち、あらかじめ(基底x基底)の組み合わせを「空間自身の持つ性質」として先に計算しておけば、
内積は(空間自身の持つ性質)x(ベクトルAの成分) x(ベクトルBの成分)として表されることでしょう。
ということで、2つの基底について、成分同士の組み合わせをまとめたものが計量テンソルなのです。
<<<
https://rikunora.hatenablog.com/entry/20170219/p1
----
$$\displaystyle \langle u, v \rangle = \sum_{i=0}^N \sum_{j=0}^N u^i v^j (e_i \cdot e_j)$$
---
(内積は $$\langle \cdot , \cdot \rangle : V \times V \to K$$ という写像であるため) その内積は 2階の共変テンソルとして表せる。
$$\displaystyle \langle u , v \rangle = \sum_{i=1}^N \sum_{j=1}^N g_{ij} u^i v^j$$
これは、[[双対基底|双対空間]] は $$\langle e^i , e_j \rangle = e^i (e_j) = \delta_{ij}$$ と定義されているため (だと思う)。
2階の共変テンソル $$g_{ij}$$ は、 ''計量テンソル'' と呼ばれる。$$u, v$$ の基底を $$e_i$$ とすると、
$$g_{ij} = e_i \cdot e_j$$
と表せる。
---
! 内積行列
http://www.yyyamada.e-one.uec.ac.jp/Lecture/Slide/SLin2_Nseki.pdf
https://risalc.info/src/inner-product.html
----
----
ある座標の基底 e' が、正規直交座標の基底 e を用いて次のように表すことができる場合 ([[直線座標系の座標変換]])、
:$$\displaystyle e_i = \sum_j {A^j}_i e'_j $$
標準内積は、e' を用いて、次のように表せる。
:$$\displaystyle e_i \cdot e_i = \sum_{i} \sum_j {A^j}_i {A^j}_i (e'_i \cdot e'_j)$$
* 内力 (面積力)
** 圧力
** 粘性応力
*外力 (体積力)
** 重力
** 電磁力
* ガウス(グリーン)の定理
** ∫∫ f・n dS = ∫∫∫ (∇・v) dv
<<tag Mathematics>> <<tag KaTex>>
<div class="tc-table-of-contents">
<<toc-selective-expandable '難しい算数'>>
</div>
----
! 参考サイト
* [[数学 物理を学び楽しむために|http://www.gakushuin.ac.jp/~881791/mathbook/]]
-
* [[第3章 位相空間の基礎のキソ|http://www.math.titech.ac.jp/~kawahira/courses/kiso/03-isou.pdf]]
* http://www.math.titech.ac.jp/~kawahira/courses/kiso/04-mfd.pdf
----
; 条件付き確率
* P(B|A) Aの後にBが起こる確率
;ベイズの定理
;ノルム
*長さ概念の一般化
**内積・マグニチュード
**マンハッタン距離
;ヤコビアン
*行列の縦横をひっくり返す
** 2x3 => 3x2
;最急降下法
;CG法 (共役勾配法)
;Convolution (畳み込み)
----
* [[Website for Mechanical Engineers by Naoya TADA|http://solid4.mech.okayama-u.ac.jp/]]
二項積 (dyadic) の文脈では、以下のような表現を用いる。
積極的に使う必要は無いが、知らないと、ベクトル解析において、式の意味が分からないケースがある。
----
''a'', ''b'', ''c'' はベクトルとする。
!! 二項積 (dyadic product)
: $$\mathbf{a} \mathbf{b} = \mathbf{a} \otimes \mathbf{b} $$
!! ドット積
: $$\mathbf{c} \cdot (\mathbf{a} \mathbf{b}) = (\mathbf{c} \cdot \mathbf{a}) \mathbf{b} = (c_i a_i) b_j $$
: $$(\mathbf{a} \mathbf{b}) \cdot \mathbf{c} = \mathbf{a} (\mathbf{b} \cdot \mathbf{c}) = a_i (b_j c_j) $$
''ab'' の部分は、二階のテンソル (''T'') の形で書かれているケースも多い。
* $$\mathbf{c} \cdot \mathbf{T} = c_i T_{ij} $$
* $$\mathbf{T} \cdot \mathbf{c} = T_{ij} c_j$$
https://ja.wikipedia.org/wiki/%E4%BA%8C%E9%A0%85%E7%A9%8D
a, b を実数、n を自然数、 k を "$$0 \leq k \leq n$$" を満たす整数とすると、
$$\displaystyle (a+b)^n = \sum_{k=0}^n {}_n \mathrm{C} _k a^{n-k} b^k$$
という展開が可能である。
なお、$${}_n \mathrm{C} _k$$ の部分は、次のように
$${}_n \mathrm{C} _k = \dfrac{n!}{k!(n-k)!} = \dfrac{n(n-1)...(n-k+1)}{k!}$$
と変形されることも多い。
- - - - -
a = 1 の時は、次のように変形できる。
$$\displaystyle (1+b)^n = \sum_{k=0}^n {}_n \mathrm{C} _k b^k = 1 + \sum_{k=1}^n {}_n \mathrm{C} _k b^k$$
---
! 式の意味
左辺は (a+b) の n個の積であるので、
$$\displaystyle (a+b)^n = (a+b) (a+b) ... (a+b)$$
展開した際に出てくる項は、全て $$a^{n-k} b^k$$ という形で表すことができる。
そのため、この計算は「''a と b という2つのボールが入った箱の中から1つだけボールを取り出す操作を n回 繰り返す''」ということと同様に考えることができる。つまり、$$a^{n-k} b^k$$ の係数は 「''a を (n-k) 回引き, k を j 回引く''」場合の数になる。
そして、各操作は等価なので、「n個から k個 を取り出す操作」と同様に考えることができるため、$$a^{n-k} b^k$$ の係数は $${}_n \mathrm{C} _k$$ になる。
k は "$$0 \leq k \leq n$$" の値を取りうるので、それぞれの k の値の時を調べ、足し上げればよい。
! 定義
次のような 確率質量関数 を持つ分布のことを ''二項分布 (binomial distribution)'' という。
:$$f(X = k) = {}_n \mathrm{C}_k p^k (1 - p)^{n-k} $$
* X: 確率変数
* n: 自然数
* k = 0, 1, 2, ... , n
* p (0 ≤ p ≤ 1)
大雑把に言うと、$$f(k)$$ は、確率 p で成功する事象を独立にn回試行した際に、その事象が k回成功する確率を意味する。
!! 統計量
;期待値と分散
$$E(X) = np$$
$$V(X) = np(1-p)$$
----
! 正規分布との関係
k が無限大の時、二項分布は [[正規分布]] になる。
* 歴史的にいえば、$$\displaystyle \lim_{k \to \infty} f(x)$$ が正規分布の定義だったみたい
二項分布の式に [[スターリングの近似]] を使うと、
:$$f(k) = p^k (1 - p)^{n-k} \dfrac{n!}{k!(n-k)!} \approx p^k (1 - p)^{n-k} \dfrac{\sqrt{2\pi n}}{\sqrt{2\pi k} \sqrt{2\pi (n-k)}} \left( \dfrac{n}{e} \right)^n \left( \dfrac{k}{e} \right)^{-k} \left( \dfrac{n-k}{e} \right)^{-(n-k)} $$
となり、これを整理すると、
:$$f(k) \approx \sqrt{\dfrac{n}{2\pi k (n-k)}} \left( \dfrac{np}{k} \right)^k \left( \dfrac{n(1 - p)}{n-k} \right)^{n-k} $$
となる。
ここで、k を 期待値 (kp) に近づけると ($$k \to np$$)、
https://k-san.link/binomial-normal/
* [[eslclassics.com - YouTube|https://www.youtube.com/channel/UCm0wLGGAVrYcDORJsGE98aw/playlists]]
* [[English Vocabulary for Children! - YouTube|https://www.youtube.com/playlist?list=PL01EBEDFC2BAA4848]]
----
* [[Actions 1 With ELF Learning - Verb Chant For Kids - ELF Kids Videos - YouTube|https://www.youtube.com/watch?v=GDb5LboBieY]]
** [[Learn Verbs #1 - Verb Phrases - Action 1 Phrases 1 by ELF Learning - YouTube|https://www.youtube.com/watch?v=9S0cucXcehE]]
* [[Actions 2 Verbs with Lyrics for Children - Elf Learning - ELF Kids Videos - YouTube|https://www.youtube.com/watch?v=ikC80uIEAp8]]
** [[Learn Verbs #2 - Verb Chant - Action Verbs Phrases 2 - ELF Learning - YouTube|https://www.youtube.com/watch?v=CW-KV8rJg6o]]
----
[[English Conversation level 1 to 10 Learning English for Children English for Kids #5 - YouTube|https://www.youtube.com/watch?v=3i5mLD5WpFk]]
----
* [[Action Verbs For Kids - English Sentences & Phrases 1 - ELF Learning - Elf Kids Videos - YouTube|https://www.youtube.com/watch?v=eAl30DrBuOA]]
* [[Learn Actions Vocabulary 1 - Listen and Repeat - ELF Learning - YouTube|https://www.youtube.com/watch?v=nEnwLpWl5Mc]]
* [[Learn Actions 2! Phrases - Part 1 - ELF Kids Videos - YouTube|https://www.youtube.com/watch?v=WxQl6ti_QJ4]]
[[Daily Activities Present Tense ESL Classics - songs for learning English - YouTube|https://www.youtube.com/watch?v=k0FHGnc6iHg]]
[[Everyday Activities - Kids Learn Verbs Teach Action Words - YouTube|https://www.youtube.com/watch?v=EyR_JTs8Yt4]]
[[DAILY ROUTINE ESL VIDEO - YouTube|https://www.youtube.com/watch?v=K3GMiFc-gLs]]
[[Phrasal Verb | Get | English Speaking Practice | ESL | EFL - YouTube|https://www.youtube.com/watch?v=I5Q-nzG_4XM]]
[[105 Regular English Verbs with -ED in the Past: Pronunciation Practice - YouTube|https://www.youtube.com/watch?v=6j4pLoZlI2s]]
* [[英単語集:日常生活の動詞 英語好き集まれ!|http://eigozuki.com/html/tango/ka-ve-life.shtml]]
! 定義
下の熱伝達の関係式中の $$\tau$$ のことを、''熱時定数'' という。
$$e^{- t/\tau} = \dfrac{T(t) - T_{\infty}}{T_i - T_{\infty}}$$
$$\tau = \dfrac{mc_p}{hA} = \dfrac{\rho V c_p}{hA} $$
!! 定義からいえること
$$e^{- t/\tau}$$ は、「"時間 t における温度差" を "初期の温度差" で割った値」なので、温度の上昇割合は、 $$1 - e^{- t/\tau}$$ で表せる。
これに $$t = \tau$$ を代入すると、 $$1 - e^{-1} = 0.632$$ という値が得られる。
つまり、熱時定数は、「初期の温度差の63.2%変化するまでの時間」ともいえる。
---
! 導出
ある物体に関して、ある時間(ΔT)の間に「入ったエネルギー量」 と「エネルギー変化量」は等しくなる。
$$h A (T_{\infty} - T(t)) \Delta t = m c_p (T(t+\Delta t) - T(t)) $$
両辺を Δt で割り、 Δt → 0 とすると、
$$h A (T_{\infty} - T(t)) = m c_p \dfrac{dT}{dt} $$
となり、式を整理すると、次のようになる。
$$\dfrac{mc_p}{hA} \dfrac{dT}{dt} + T(t) = T_{\infty}$$ 【式1】
- - - - -
この式は、非斉次の1次の微分方程式なので、[[定数変化法|http://www.ice.tohtech.ac.jp/~nakagawa/laplacetrans/Laplace1_c1.htm]] を使って解を求めることができる。
右辺を 0 とした $$\dfrac{mc_p}{hA} \dfrac{dT}{dt} + T(t) = 0$$ について解くと、
$$\displaystyle \int \dfrac{1}{T(t)} dt = \int - \dfrac{hA}{mc_p} dt $$
$$\log |T| = - \dfrac{hA}{mc_p} t + C_0 = - bt + C_0 $$
(C0 は積分定数であり、 $$b = \dfrac{hA}{mc_p}$$ とした)
ここで $$u(t) = \pm e^{C_0}$$ とすると、
* $$T = \pm e^{-bt} e^{C_0} = u(t) e^{-bt}$$
* $$T' = u(t)' e^{-bt} - b u(t) e^{-bt}$$
であり、これを【式 1】に代入すると、
$$\dfrac{1}{b} [u(t)' e^{-bt} - b u(t) e^{-bt}] + u(t) e^{-bt} = T_{\infty}$$
$$u'(t) = b T_{\infty} e^{bt}$$
$$u(t) = T_{\infty} e^{bt} + C$$
これを、T の式に代入すれば、t の関数で表された T の式が得られる。
$$T(t) = u(t) e^{-bt} = T_{\infty} + Ce^{-bt}$$
- - - - -
初期条件(t = 0)として「$$T(0) = T_{\infty}$$」とすると、積分定数が得られる。
$$C = T(0) - T_{\infty}$$
$$T_i = T(0), \tau = \dfrac{1}{b}$$ とし、式を整理すれば、熱時定数の式が得られる。
$$e^{-bt} = e^{- t/\tau} = \dfrac{T(t) - T_{\infty}}{T_i - T_{\infty}}$$
! 一次元の場合
「要素内の密度と比熱は変化しない」と仮定すると、 ある小領域でのエネルギーの時間変化は、
$$\dfrac{E(t+\Delta t) - E(t)}{\Delta t} = \left( \dfrac{\partial Q}{\partial x}|_{x=x} - \dfrac{\partial Q}{\partial x}|_{x=x+\Delta x} \right) + \dfrac{E_{gen}(t+\Delta t) - E_{gen}(t)}{\Delta t} $$
と表すことができる。
ここで、以下のことを使うと、上式を変形すると、
# 「体積 V (= Adx) のある領域のエネルギーの変化」は、 $$\Delta E = \rho c V \Delta T$$ と表すことができる (仕事による変化は考えない)。
# 単位体積当たりの発熱量を $$e_{gen}$$ と表すことにする。
$$\rho c (A \Delta x) \dfrac{T(t+\Delta t) - T(t)}{\Delta t} = \left( \dfrac{\partial Q}{\partial x}|_{x=x} - \dfrac{\partial Q}{\partial x}|_{x=x+\Delta x} \right) + (A \Delta x) \dfrac{e_{gen}(t+\Delta t) - e_{gen}(t)}{\Delta t} $$
両辺を AΔx で割ると、
$$\rho c \dfrac{T(t+\Delta t) - T(t)}{\Delta t} = - \dfrac{1}{A} \dfrac{\dfrac{\partial Q}{\partial x}|_{x=x+\Delta x} - \dfrac{\partial Q}{\partial x}|_{x=x}}{\Delta x} + \dfrac{e_{gen}(t+\Delta t) - e_{gen}(t)}{\Delta t} $$
となり、ここで $$\Delta t \to 0 $$、$$\Delta x \to 0 $$ とすると、
$$\rho c \dfrac{\partial T}{\partial t} = - \dfrac{1}{A} \dfrac{\partial}{\partial x} \left( \dfrac{\partial}{\partial x} \dfrac{\partial Q}{\partial x} \right) + \dfrac{\partial e_{gen}}{\partial t}$$
となる。最後に、フーリエ法則 $$(\dfrac{\partial Q}{\partial x} = - kA \dfrac{dT}{dx})$$ を使うと、以下の式が得られる。
$$\rho c \dfrac{\partial T}{\partial t} = \dfrac{\partial}{\partial x} \left(k \dfrac{\partial T}{\partial x} \right) + \dfrac{\partial e_{gen}}{\partial t}$$
! 三次元の場合
https://whyitsso.net/physics/thermo_dynamics/thermal_transfer1.html
与えた熱 $$Q$$ に対し、温度 $$T$$ がどの程度変化するかを表す状態量。
:$$ C = \dfrac{\delta Q}{\Delta T} $$
熱(示量変数)を温度(示強変数)で微分したものであるため、熱容量は示量変数である。
http://www.rcnp.osaka-u.ac.jp/~toki/thermodynamics.pdf
! 比熱
熱容量は示量な状態量であるため、物質の総量に応じて変化してしまう。そのため、物質固有の性質を表したい時は、熱容量を示量的なパラメータで割って規格化した、''比熱'' を用いる。
!! モル比熱
熱容量を物質量 $$N$$ で割ったもの。
:$$ \dfrac{C}{N} = \dfrac{1}{N} \dfrac{\delta Q}{\Delta T}$$
----
! 定積熱容量
体積一定の条件下での熱容量。
定積では仕事が発生しないため $$(\delta W = 0)$$、系に加えた微小な熱 $$\delta Q$$ は、
:$$\delta Q = dU - \delta W = dU(T;V,N) $$
と表せ、ここで $$dU$$ を展開すると、
:$$\delta Q = dU(T;V,N) = \dfrac{\partial U(T;V,N)}{\partial T} \Delta T + \dfrac{\partial U(T;V,N)}{\partial V} \Delta V + \dfrac{\partial U(T;V,N)}{\partial N} \Delta N$$
となる。さらに、 「$$ \Delta V = 0, \Delta N = 0$$ 」とすると、
:$$\dfrac{\delta Q}{\Delta T} = \dfrac{\partial}{\partial T} U(T;V,N) = C_v(T; V, N)$$
となる。
http://www.rcnp.osaka-u.ac.jp/~toki/thermodynamics.pdf
!! 理想気体の場合
理想気体では、以下のように考えることができる。
* [[エネルギーは体積によらない|理想気体の熱力学]] (⇒ 熱容量は体積によらず一定)
* 熱容量は温度によらず一定
そのため、定積比熱は、
:$$ C_v(T; V, N) = cNR $$
と表わせる。なお、定数 $$c$$ は、気体の種類に応じて決まる。
!! S・Fとの関係
定積熱容量は、「エントロピー」・「ヘルムホルツの自由エネルギー」を用いて、以下のように表すことも可能である。
:$$ C_v = T \dfrac{\partial S(T; V,N)}{\partial T} = -T \dfrac{\partial^2 F(T; V,N)}{\partial T^2}$$
なお、この関係は、以下の2つの式を使用して導いている。
* $$ \dfrac{\partial U(T; X)}{\partial T} = T \dfrac{\partial S(T; X)}{\partial T} $$
* $$F[T;V,N] = U(T;V,N) - T S(T;V,N)$$
----
! 定圧熱容量
圧力一定の条件下での熱容量。
- - - - -
定圧での熱は、以下のように変形できる。
:$$\delta Q = dU + \delta W = dU + P dV$$
ここで、エネルギー (U) を温度と体積の関数とすると、
:$$\delta Q = \dfrac{\partial U(T,V)}{\partial T} dT + \dfrac{\partial U(T,V)}{\partial V} dV + P(T,V) dV$$
となるので、定圧熱容量は
:$$ C_p = \dfrac{\delta Q}{dT} = \dfrac{\partial U(T,V)}{\partial T} + \left (\dfrac{\partial U(T,V)}{\partial V} + P(T,V) \right) \dfrac{dV}{dT} $$
と表せる。この式は、定積熱容量を使って、以下のようにも書ける。
:$$ C_p = C_v + \left (\dfrac{\partial U(T,V)}{\partial V} + P(T,V) \right) \dfrac{dV}{dT} $$
熱力学的状態方程式を使うと、この式はさらに変形できる。
:$$ C_p = C_v + T \dfrac{\partial P(T,V)}{\partial T} \dfrac{dV}{dT} $$
- - - - -
!! エンタルピーとの関係
また、U, V が T, P によって決まる関数だとすると、
:$$\delta Q = \dfrac{\partial U(T,P)}{\partial T} dT + \dfrac{\partial U(T,P)}{\partial P} dP + P \left( \dfrac{\partial V(T,P)}{\partial T} dT + \dfrac{\partial V(T,P)}{\partial P} dP \right)$$
と書ける。定圧操作なので dP = 0 とすると、
:$$ C_p(T,P) = \dfrac{\delta Q}{dT} = \dfrac{\partial U(T,P)}{\partial T} + P \dfrac{\partial V(T,P)}{\partial T} = \left( \dfrac{\partial H}{\partial T} \right)_p $$
となる。
この関係は、エンタルピーの定義を考えれば、明らか。
$$ H(T, P) = U(T, P) + PV(T,P)$$
$$ \left( \dfrac{\partial H}{\partial T} \right)_p = \left( \dfrac{\partial U}{\partial T} \right)_p + P\left( \dfrac{\partial V}{\partial T} \right)_p $$
----
! Cp - Cv
[[偏微分の合成関数]] を使うと、 Cv, Cp は以下のように変形が可能である。
$$ C_v = \left( \dfrac{\partial U}{\partial T} \right)_V = \left( \dfrac{\partial U}{\partial S} \right)_V \left( \dfrac{\partial S}{\partial T} \right)_V = T \left( \dfrac{\partial S}{\partial T} \right)_V $$
$$ C_p = \left( \dfrac{\partial H}{\partial T} \right)_p = \left( \dfrac{\partial H}{\partial S} \right)_p \left( \dfrac{\partial S}{\partial T} \right)_p = T \left( \dfrac{\partial S}{\partial T} \right)_p $$
また、[[偏導関数の公式]] から、
$$ \left( \dfrac{\partial S}{\partial T} \right)_p = \left( \dfrac{\partial S}{\partial T} \right)_V + \left( \dfrac{\partial S}{\partial V} \right)_T \left( \dfrac{\partial V}{\partial T} \right)_p $$
なので、Maxwell の関係式も使うと、
$$C_p - C_v = T \left[ \left( \dfrac{\partial S}{\partial T} \right)_p - \left( \dfrac{\partial S}{\partial T} \right)_V \right] = T \left( \dfrac{\partial S}{\partial V} \right)_T \left( \dfrac{\partial V}{\partial T} \right)_p = T \left( \dfrac{\partial P}{\partial T} \right)_V \left( \dfrac{\partial V}{\partial T} \right)_p $$
と表せる。
- - - - -
http://www.kz.tsukuba.ac.jp/~abe/ohp-thermal_dynamics/thermodynamics2_2014_3.pdf
熱力学状態方程式
$$ \dfrac{\partial U(T,V)}{\partial V} = T \dfrac{\partial P(T,V)}{\partial T} - P$$
を用いることで、
$$ C_p - C_v = T \dfrac{\partial P(T,V)}{\partial T} \dfrac{dV}{dT} $$
となるらしい。
https://ja.wikipedia.org/wiki/%E7%86%B1%E5%8A%9B%E5%AD%A6%E7%9A%84%E7%8A%B6%E6%85%8B%E6%96%B9%E7%A8%8B%E5%BC%8F
http://www-kschem0.kj.yamagata-u.ac.jp/~unoura/Class/energy/myer.pdf
<<tag "熱力学">>
* <<tag "多成分系の熱力学">>
* <<tag "実在気体の熱力学">>
* <<tag "理想気体の熱力学">>
* <<tag "熱力学の物理量">>
<$reveal type="nomatch" state="$:/state/thermodynamics" text="show"><$button set="$:/state/thermodynamics" setTo="show">関連項目</$button></$reveal>
<$reveal type="match" state="$:/state/thermodynamics" text="show">
<$button set="$:/state/thermodynamics" setTo="hide">隠す</$button>
<div class="tc-table-of-contents">
<<toc-selective-expandable '熱力学'>>
</div>
</$reveal>
----
! 基本的な概念
やや感覚的な言い方だけど、こんな感じ。
!! 温度
* 圧力・モル量が同じでも、系の状態によって体積が変わる
** (→ 圧力・モル量以外に系の状態を規定するパラメータがある)
* この体積の変化を使って、系の状態を表す指標を定義できそう...
** $$ V = f(X) $$
** $$ X = f^{-1}(V) $$
* この系の状態を表す指標を温度とする
** 厳密に言えば、エントロピーを規定する方法もある
!! 断熱
* 温度の異なる2つの系が接触していると、それぞれの系の温度が変化する。
** それぞれの系の最初の温度を T1, T2 (T1 > T2)、最終的な温度を T1', T2' とすると、 T1 > T1' = T2' > T2 となる。
* 一方、「断熱」の状況では、温度の異なる2つの系が存在していても、それぞれの系の温度はいつまでたっても、最初の状態から変化しない。
!! 断熱操作
* 「断熱」の状態で、仕事のやり取りだけを行う。
!! 熱
* 温度を変化させる作用。
* 熱と仕事の等価性
** 等圧の条件下では、「系の温度変化 ⇒ 流体の膨張・収縮 ⇒ 外界との仕事のやり取り」が起こる
** 断熱の系で、「仕事 ⇒ 温度上昇」をさせることができる (ジュールの実験とか)
* 熱容量・比熱
** 「系にした仕事量 ⇒ 系の温度上昇」
** 温度上昇には、仕事量以外に、「物質の種類(比熱)」・「物質の量」が関係する
* 断熱系での「W = f(ΔT, Cp, N) 」的な関係から、熱を定義できる。のでは...
!! [[エネルギー|熱力学第一法則]]
* 「熱と仕事の等価性」を踏まえれば、力学的な系で使われるエネルギーの定義に熱の概念を加えたエネルギーを、考えることができる。
** ΔU = - W + Q [U: Energy, Q: heat, W: work]
* 力学的な系でのエネルギーと同様、ポテンシャル力である (経路に依存しない)
* エネルギーは、温度の増加関数
!! 熱効率
* 他の系から受け取った熱の仕事に変換される割合。
** [[カルノーサイクル]]より高い熱効率を持つサイクルは存在しない。
!! 系の圧力
* 系の圧力は、任意の状態 $$(T; V, N)$$ において正で有限の値をとり、 T, V, N の連続関数であることを要請する
** 圧力を T, V, N の関数として表現した式を ''状態方程式 (Equation of State)'' という
----
! 基本的な約束事
熱力学での、絶対的なルール。
!! 平衡状態
* マクロな観点からは変化がない状態を平衡状態という。
** 一度この状態になると、いくら時間が経過しても、系の性質が変化しない。
* 熱力学では、「ある平衡状態から別の平衡状態への変化」が基本的な考察対象である
** ただし、(古典的な熱力学では)「変化のプロセス(途中経過)」は考察の対象外。
!! 準静操作
* 「操作の途中でも系は常に平衡状態である」 と見なせる操作
* 要するに、操作(の過程) を積分するために必要となる仮定
!! [[熱力学第一法則]]
* エネルギー保存則のこと。
** 力学的な系との違いは、仕事だけではエネルギーを表現できない点。
!! [[熱力学第二法則]]
* エネルギーの移動の方向性に関する制限を説明するもの。
** [[カルノーの定理|カルノーサイクル]] と [[エントロピー]]の定義 は、この法則を基にしている。
* いくつかの表現があるが、クラウジウスの法則だと「低温の熱源から高温の熱源に正の熱を移す際に、他に何の変化もおこさないようにすることはできない。」という言い回しになる。
* 他に有名なもの。
** トムソンの法則あるいはケルビンの法則
** オストヴァルトの原理
----
! 重要な定理・物理量
基本的な約束事から演繹的に得られる重要な定理・物理量。
!! [[熱力学恒等式]]
[[熱力学第一法則]] と [[熱力学第二法則]] を組み合わせることにより得られる式。準静過程を前提条件としている点には注意。
:$$ \displaystyle dU = T dS - p dV = \dfrac{\partial U}{\partial S} dS + \dfrac{\partial U}{\partial V} dV $$
!! 熱力学の基本関係式 (Fundamental thermodynamic relation)
熱力学恒等式 と 熱力学恒等式を[[ルジャンドル変換]]すると得られる式をまとめて、 ''熱力学の基本関係式'' という。使う時は、前提とする条件 ($$dS = \dfrac{\delta Q}{T}$$ , $$\delta W = p dV$$) に注意。
* $$dU = T dS - p dV$$
* $$dF = - S dT - p dV$$
* $$dH = T dS + V dP $$
* $$dG = - S dT + V dP $$
!! 部分モル化学ポテンシャル
[[多相多成分の系|多成分系の熱力学]] を扱う際に、最も基本となる物理量。
:$$\mu_i = \left( \dfrac{\partial G}{\partial N_i} \right)_{T,p}$$
[[相平衡]] の状態では、全ての成分において、各相の部分化学ポテンシャルが等しくなる。
:$$\mu^1_i = \mu^2_i = \mu^3_i = \cdots$$
----
! 操作の種類
熱力学では平衡状態の変化を考えるが、その際重要になるのが、平衡状態を変えるための「外界から働きかけ(操作)」である。
熱力学でよく出てくる操作には、以下のようなものがある。
* 準静操作
** 操作の途中でも、系が平衡状態にあるとみなせる操作
* 断熱操作 (adiabatic)
** 外界との熱のやり取りが無い操作
** 系が外界にする(される)仕事は、始めと終わりの状態のエネルギー差と等しくなる (準静操作でなくてもよい点に注意)
* 等温操作 (isothermal)
** 外界との熱のやり取りが可能
** 外界が等温の状態での操作
*** 操作中の系の温度が等温である必要は無い
** 外界に行う仕事量は、操作の方法や途中経過に依存する
* 断熱準静操作
** エントロピーの変化は 0
* 等温準静操作
** エントロピーの変化は δQ/T
!! 準静操作での微小な変化
準静操作での微小な変化を「等温・等圧」とみなすことがしばしばある。
これを、準静操作の「操作の途中でも系は常に平衡状態である」という前提と組み合わせると、操作全体は等温・等圧でなくても、微小な変化の積分という形で操作を表すことができることがある。
----
! 系の種類
| | 物質の移動 | 熱の移動 | 仕事のやり取り |補足 |h
|開放系 (open system) | 〇 | 〇 | 〇 | |
|閉鎖系 (closed system) | × | 〇 | 〇 | |
|断熱系 (adiabatic system) | × | × | 〇 | |
|孤立系 (isolated system) | × | × | × | エントロピー増大則は孤立系に対するもの |
----
! [[重要な物理量|熱力学の物理量]]
{{熱力学の物理量!!text}}
----
! [[ギブスの相律|多成分系の熱力学]]
$$ F = C - P + 2 $$
F: 自由度, C: composition, P: phase
----
! その他
* [[Maxwellの関係式]]
* [[カルノーサイクル]]
* [[表面張力]]
---
! 参考サイト
{{熱力学参考サイト!!text}}
||物理量 |完全な熱力学関数 |関係する操作 |補足 |h
|S |[[エントロピー]] |S[U, V, N] |[[カルノーサイクル]] ||
|U |[[エネルギー|熱力学第一法則]] |U[S, V, N]|断熱操作 ||
|F |[[ヘルムホルツの自由エネルギー]] |F[T; V, N] |等温準静操作 |F = U - TS|
|H |[[エンタルピー]] |H[P; S, N]||H = U + PV |
|G |[[ギブスの自由エネルギー]] |G[T, P; N] | |G = U - TS + PV |
!! 基本的な物理量
||物理量 ||補足 |h
|W |仕事 |Work |ニュートン力学と同様に扱える |
|Q |熱 |Heat ||
| ||||
|T |温度 |Temperature |示強変数 |
|P |圧力 |Pressure |示強変数 |
|V |体積 |Volume ||
|N |物質量 |||
|μ |[[化学ポテンシャル]] |Chemical Potential |示強変数 |
| ||||
|C,,v,, |[[定積熱容量|熱容量]] |Heat Capacity at constant volume ||
|C,,p,, |[[定圧熱容量|熱容量]] |Heat Capacity at constant pressure ||
|c,,v,, |定積比熱 |Specific Heat at constant volume |示強変数 |
|c,,p,, |定圧比熱 |Specific Heat at constant volume |示強変数 |
| ||||
|f |[[フガシティ]]|fugacity ||
|a |[[活量]] |Activity ||
| ||||
|η |熱効率 |||
; よく使う定数
||定数名 ||補足 |h
|R |気体定数 |Gas constant |≈ 8.3144598 (J/ K- mol) |
|N,,A,, |アボガドロ定数 |Avogadro constant |1 mol に含まれる分子数(or 原子数) (≈ 6.022140857×10^23 |
|k,,B,, |ボルツマン定数 |Boltzmann constant |= R / NA |
----
! 示強性・示量性
熱力学では、示強的な量と示量的な量の区別は本質的である。
!!示強変数 (Intensive variable)
* 系の大きさに関係なく、一定値を示す状態変数
** 例: 温度・圧力
!! 示量変数 (Extensive variable)
* 系全体が n倍 した時に、n倍の大きさになるような量
* 例: 体積・物質量
全て http://as2.c.u-tokyo.ac.jp/lecture_note/statmech.pdf からの引用
---
! 定義
エントロピーの自然な変数の密度 $$E, X_1, X_2, \cdots , X_t$$ の比を一定にして,体積を(あらゆる方向に一様に大きくしていって)無限大にする極限を,''熱力学極限'' (thermodynamic limit) と呼ぶ。
体積と粒子数を用いて具体的に書くと、
$$E \to \infty, V \to \infty, N \to \infty, \dfrac{E}{V} = const, \dfrac{N}{V} = const$$
といった感じ。
---
まず「熱力学極限」を定義する.1.3.1節で触れたように,統計力学は漸近理論なので,$$V \to \infty$$ の極限を考えたい.このとき,Vを増やしてゆくことが,同じ平衡状態にある系を次々に合体していく,ということに相当するような極限をとりたい.なぜなら,合体させる系がどれも同じ平衡状態にあれば,合体してもそれぞれの状態は全く変わらないから,物理的に最も自然な極限になるからだ.(もしも違う状態にある系を合体してしまったら,それぞれの状態は合体前と後とで変わってしまうから,どんな極限をとりたいのか曖昧になってしまう.
平衡状態はエントロピーの自然な変数で定まるのだから,そのような極限をとるためには,エントロピーの自然な変数 $$E,V,N, \cdots$$ を全て一緒に,同じ比率で大きくしてゆけばよい.つまり,エントロピーの自然な変数の密度 $$E/V, N/V, \cdots $$ を一定に保って V を大きくすれば良い.このときもちろん,一方向にだけサイズを増してゆくような変なことはせずに,あらゆる方向に一様に^^4^^ 大きくしてゆく.そういう極限を考える
! 熱力学恒等式 (Thermodynamic Identity)
[[熱力学第一法則]] と [[熱力学第二法則]] を組み込み合わせることで得られる恒等式。
:$$ dU[S, V] = T dS - p dV = \dfrac{\partial U}{\partial S} dS + \dfrac{\partial U}{\partial V} dV $$
U が S, V の関数である点に注意。
また、[[化学ポテンシャル]] も含めて書くと、以下のようになる。
:$$ \displaystyle dU[S,V, N] = T dS - p dV + \sum_{i=1}^m \mu_i dN_i $$
なお、この関係から、$$U[S,V]$$ は $$S$$ に対して [[下に凸|凸関数]] で、$$V$$ に対して
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
! 導出
断熱準静操作と等温準静操作では、エントロピーは、
:$$ dS = \dfrac{\delta Q}{T} $$
となり (不等号ではなく、等号になる)、仕事は
:$$ \delta W = p dV$$
と表せる。
そのため、(''断熱準静操作'' か ''等温準静操作'' とみなせる場合の) エネルギーの変化量は、 以下のように表すことも可能である。
:$$ dU = \delta Q - \delta W = T dS - p dV $$
ここで、$$U[S, V]$$ を考えると、
:$$ dU[S,V] = \dfrac{\partial U}{\partial S} dS + \dfrac{\partial U}{\partial V} dV $$
なので、 $$\dfrac{\partial U}{\partial S} = T$$ , $$- \dfrac{\partial U}{\partial V} = p$$ ということが分かる。
- - - - -
!! 関数の凸性
$$\dfrac{\partial U}{\partial S} = T$$ から、「温度が高いほど (単位)エントロピー変化に伴うエネルギー変化量が大きい」ことが分かる。
さらに、[[エネルギーは温度の増加関数|熱力学第一法則]] であり、かつ [[エントロピーも温度の増加関数|エントロピーの性質]] でもあるので、エントロピーが高いほど $$\dfrac{\partial U}{\partial S}$$ は大きくなる。
つまり、$$U[S,V]$$ は $$S$$ に対して、[[下に凸|凸関数]] である。
同様に、$$- \dfrac{\partial U}{\partial V} = p$$ から、「圧力が高いほど 体積変化に伴うエネルギー変化量が大きい」ことが分かる。
----
! 熱力学の基本関係式
熱力学恒等式 と 熱力学恒等式を[[ルジャンドル変換]]すると得られる式をまとめて、 ''熱力学の基本関係式 (Fundamental thermodynamic relation)'' という。
$$\ \ \ \ \ \ dU[S,V] = T dS - p dV = \left( \dfrac{\partial U}{\partial S} \right)_V dS + \left( \dfrac{\partial U}{\partial V} \right)_S dV $$
$$\ \ \ \ \ \ dF[T,V] = - S dT - p dV = \left( \dfrac{\partial F}{\partial T} \right)_V dT + \left( \dfrac{\partial F}{\partial V} \right)_T dV $$
$$\ \ \ \ \ \ dH[S,p] = T dS + V dp = \left( \dfrac{\partial H}{\partial S} \right)_p dS + \left( \dfrac{\partial H}{\partial p} \right)_T dp $$
$$\ \ \ \ \ \ dG[T,p] = - S dT + V dP = \left( \dfrac{\partial G}{\partial T} \right)_p dT + \left( \dfrac{\partial G}{\partial p} \right)_T dp $$
----
{{Maxwellの関係式!!text}}
----
! 熱力学的状態方程式 (エネルギー方程式)
$$ \left( \dfrac{\partial U}{\partial V} \right)_T = T \left( \dfrac{\partial S}{\partial V} \right)_T - p $$
- - - - -
イメージとしては、$$S = S(T)$$ が成り立つと仮定して、熱力学恒等式のところで出てきた式を、
:$$dU(S(T), V) = T dS - p dV$$
とみなした上で、両辺を dV で割ると得られる。らしい (厳密に正しいのかはよくわからない)。
;教科書的
* [[熱力学|http://phys.sci.hokudai.ac.jp/~kita/PhysicsII//Thermodynamics.pdf]]
* [[基礎物理学ノート|http://www.lane.iir.titech.ac.jp/~chiba/pdf/kisobuturi_note.pdf]]
* [[講義資料 筑波大学---金川研究室---理論流体力学|http://kanagawa.kz.tsukuba.ac.jp/category/%e8%ac%9b%e7%be%a9%e8%b3%87%e6%96%99/]]
; Chemical Engineering
* [[Christi Patton Luks - YouTube |https://www.youtube.com/channel/UCrzE4CRbEA0ubsmgaNCeUyg]]
; 読み物風
* [[熱力学、統計力学、そして、量子論|http://www.gakushuin.ac.jp/~881791/sm/ibis.pdf]]
* [[第32章 自由エネルギーと熱学の体系(ヨシア・ウィラード・ギブズ)|http://fnorio.com/0147equation_of_state/Yamamoto_Yoshitaka/history_of_thermodynamics.html#248]]
* [[第2章 自由エネルギーの幾何学的性質|http://www.amsd.mech.tohoku.ac.jp/Thermoacoustics/Chap_2.pdf]]
; 本
* [[熱力学 ― 現代的な視点から|http://www.gakushuin.ac.jp/~881791/td/index.html]]
** [[Amazon.co.jp: 熱力学―現代的な視点から (新物理学シリーズ): 田崎 晴明: 本|http://www.amazon.co.jp/%E7%86%B1%E5%8A%9B%E5%AD%A6%E2%80%95%E7%8F%BE%E4%BB%A3%E7%9A%84%E3%81%AA%E8%A6%96%E7%82%B9%E3%81%8B%E3%82%89-%E6%96%B0%E7%89%A9%E7%90%86%E5%AD%A6%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E7%94%B0%E5%B4%8E-%E6%99%B4%E6%98%8E/dp/4563024325/ref=sr_1_2?ie=UTF8&qid=1293426967&sr=8-2]]
熱力学でのエネルギー保存則 。
$$ \Delta U = - W + Q $$
* ΔU: は操作の間のエネルギーの変化量 ($$ U_{after} - U_{before} $$)
* W: 外界にする仕事
* Q: 外界から受け取る熱
- - - - -
; 熱力学恒等式
準静過程の条件下 $$\left( dS = \dfrac{dQ}{T} , \ dW = p dV \right)$$ では、「[[エントロピー]]・温度・体積・圧力」 を用いた形式で表すことができ、これを ''[[熱力学恒等式]] (Thermodynamic Identity)'' という。
:$$ dU = T dS - p dV = \dfrac{\partial U}{\partial S} dS + \dfrac{\partial U}{\partial V} dV $$
U が S, V の関数である時は、完全な関数になる $$\left( \dfrac{\partial U}{\partial S} = T, \ \ \dfrac{\partial V}{\partial S} = -p \right)$$。
U は S, V の代わりに、T や P を用いた関数で表されることもあるが、その場合、相転移を完全に表現できない点に注意。
----
! 前提条件
前提条件の定義の仕方には任意性があるが、ここでは [[熱力学 ― 現代的な視点から|https://www.gakushuin.ac.jp/~881791/td/]] の方法を用いる。
!! 【要請1】: 「温度を上げる断熱操作」 の存在
外界から仕事を行う断熱操作によって、示量変数の組を変えずに温度上昇をさせることが可能である。
:$$ (T; X) \stackrel{a}{\rightarrow} (T'; X) $$ $$[T' > T]$$
!! 【要請2】: 断熱操作による仕事の総量は、操作の前後の平衡状態だけで決まる
断熱操作で系がする(される)仕事は、最初と最後の平衡状態だけで決まり、操作の方法や途中経過に依存しない。
この要請の背後には、「熱と仕事の等価性」に関する(ジュールの)実験の結果がある。
* 仕事が系の温度上昇に使われる(熱になる)場合、温度上昇の度合いは(熱になる)仕事の量に応じる
!! 【要請3】: 熱の定義
話の順番が前後してしまうが、(仕事によらない) 接触した系の間での温度変化を引き起こす作用を「熱」と呼ぶことにする。そして、ある操作での熱のやり取りは、操作の前後のエネルギー差と操作中の仕事の総量から決まるものとする。
:$$Q = \left[ U(T;X) - U(T';X') \right] - W((T;X) \rightarrow (T'; X'))$$
----
! 前提条件から導かれること
!! ① 断熱操作の存在について
【要請1】から、「示量変数の組を X から X' へ変える操作が可能だとすると、以下の2つの断熱操作のうちの少なくとも一方が可能である (T, T' は任意の温度)。
:$$ (T;X) \stackrel{a}{\rightarrow} (T';X'), $$ $$(T';X') \stackrel{a}{\rightarrow} (T;X) $$
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! ② 熱力学におけるエネルギーの定義
* 【要請2】より、断熱仕事の量は操作のプロセスによらないことから、何らかのポテンシャル力を断熱操作に定義することが可能である。
* 熱と仕事の等価性から、(仕事が熱になることによる)系の温度変化も仕事で評価できる
** 仕事がどれだけ熱に変わると、どのくらい系の温度変化が上昇するかは分かっている
* 熱が仕事で評価できれば、力学系のポテンシャル力であるエネルギーの概念が使えそう
!!! ''断熱操作''
断熱操作では系と外界は仕事のやり取りしかしないので、断熱操作 $$(T;X) \stackrel{a}{\rightarrow} (T';X')$$ が可能な操作である時、
:$$U(T;X) - U(T';X') = W_{ad}((T;X) \rightarrow (T'; X')) $$
と、エネルギーの差は仕事を用いて表せる。
!!! ''等温操作''
一方、等温操作 $$(T;X) \stackrel{i}{\rightarrow} (T';X')$$ では、エネルギーの差は仕事の総量と一致しない。
:$$U(T;X) - U(T';X') \neq W_{i}((T;X) \rightarrow (T'; X')) $$
これは、断熱でない系においては、仕事以外の形でのエネルギーのやり取りがあることを示唆する。そして、【要請3】で書いたように、この「仕事以外でのエネルギーのやり取り」を、熱 (Q) と定義できる。
:$$ U(T;X) - U(T';X') = W((T;X) \rightarrow (T'; X')) + Q $$
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!! ③ 温度が上がれば、エネルギーは増加する
【要請1】で保証される温度を上げる断熱操作では、系が外界に行う仕事は必ず負である(系は仕事をされる)。よって、エネルギーの定義式から、$$ T < T'$$ の時は、
:$$ U(T;X) - U(T';X') = W_{ad}((T;X) \rightarrow (T'; X')) < 0$$
なので、
:$$ U(T;X) < U(T';X') $$
となる。
; 補足:
* 基本的には、エネルギーは温度の増加関数と考えることができるが、相転移のある場合は注意が必要
* 例えば、単成分の三重点では、同じ温度・体積でもエネルギーの異なる状態が存在する
* 温度の代わりにエントロピーを用いれば、こうした問題は発生しない。
----
! 熱と仕事の等価性について
ジュールの一連の実験による。
* 仕事 ⇒ 熱
** 誘導コイルを利用した熱の仕事当量の測定
** 羽根車による熱の仕事当量の実験
* 熱 ⇔ 仕事
** 空気の圧縮・膨張による測定実験
```
4. 空気の圧縮・膨張による測定実験
...
この実験は,仕事の熱への転化の際の当量ばかりでなく,その逆の過程,すなわち熱の仕事への転化の際の当量をも測定し,両者が同じ値であることを示した重要な実験であった。
```
http://www.netsu.org/j+/Jour_J/pdf/29/29-5-199.pdf
----
! その他
断熱準静操作によって系の温度が変わることは自明?
<<tag "熱力学第二法則">>
! 前提条件
いくつかの定義方法があるが、ここでは Kelvin の原理を用いる。
!! 要請: Kelvin の原理
等温サイクルが外界に対して正の仕事をすることはあり得ない。$$\ W_{cyc,i} \leq 0 $$
<<<
A transformation whose only final result is to transform into work heat extracted from a source which is at the same temperature throughout is impossible.
<<<
https://arxiv.org/ftp/arxiv/papers/1102/1102.4235.pdf
!! 要請: 準静操作
操作の途中でも系はいつでも平衡状態であるとみなせる操作の存在。また、等温準静操作・断熱準静操作は、可逆的である。
----
! 前提から導かれること
!! [1] 等温準静操作で作られたサイクルは、$$W_{cyc,i} = 0$$となる
「ある等温準静操作で作られたサイクル」と「それを逆回しにしたサイクル」の両方で、$$W_{cyc,i} \leq 0$$ が成立するためには、$$W_{cyc,i} = 0$$ でなければならない。
!! [2] (等温操作の)最大仕事は、等温準静操作である
等温操作の間に系が外界に行う仕事は、等温準静操作の時に最大になる。
$$(T; V_1) \stackrel{i}\rightarrow (T; V_2) \stackrel{iq}\rightarrow (T; V_1)$$ という等温サイクルにおける $$W_{cyc,i} (\leq 0)$$ を考えてみればよい。
!! [3] 等温準静操作にポテンシャル量を定義することが可能である
上記のことから、「''等温準静操作の仕事量は、最初と最後の平衡状態が決まれば、一意に定まる''」ので、、ポテンシャル量を定義することが可能である。
等温準静操作のポテンシャル量は、[[ヘルムホルツの自由エネルギー]] になる。
:$$ F[T; V_1] - F[T; V_2] = W_{max}(T; V_1 \rightarrow V_2) $$
- - - - - - - - - -
!! [4] [[カルノーサイクル]] が行う仕事は、温度によって決まる
$$T_L < T_H, V_0 < V_1, V_0' < V_1'$$ とした時に、次のように断熱準静操作と等温準静操作を組み合わせたサイクルを [[カルノーサイクル]] といい、
:$$ (T_H; V_0') \stackrel{iq}{\rightarrow} (T_H; V_1') \stackrel{aq}{\rightarrow} (T_L; V_1) \stackrel{iq}{\rightarrow} (T_L; V_0) \stackrel{aq}{\rightarrow} (T_H; V_0') $$
このサイクルが外界に行う仕事量は、T,,L,,, T,,H,, によって決まる。
:$$ W_{cyc} = Q_{max}(T_H;V_0' \rightarrow V_1') - Q_{max}(T_L;V_0 \rightarrow V_1) $$
Q,,max,, は等温操作における最大吸熱量(最大仕事時の吸熱量)である。
!! [5] [[カルノーサイクル]] の (高温時と低温時の)最大吸熱量の比は、温度の比によって決まる
カルノーサイクルの (高温時と低温時の) 最大吸熱量の比は、それぞれの状態の温度(TとT')のみによって決まる。なお、温度の単位は K である。
:$$ \dfrac{Q_{max}(T_H; V_0' \rightarrow V_1')}{Q_{max}(T_L;V_0 \rightarrow V_1)} = \dfrac{T_H}{T_L}$$
そして、この関係を ''カルノーの定理'' という。
ちなみに熱効率は、 $$\eta = 1 - \dfrac{Q_L}{Q_H} = 1 - \dfrac{T_L}{T_H}$$ となる。
- - - - - - - - - -
!! [6] [[エントロピー]] の定義
カルノーの定理の式をもとに、変化量が「準静操作での吸熱量」と「温度」に依存する量を考えることができる。
:$$dS = \dfrac{dQ_{iq}}{T}$$
(色々な定義方法があるが) このようにして定義した量を、''エントロピー'' とすることができる (''この定義では、準静操作以外の時のエントロピー変化に言及していない'' 点に注意)。
!! [7] [[エントロピー]]は、等温準静操作においてポテンシャル量 (状態量) となる
等温準静操作でのエントロピー変化 $$(dS = \dfrac{\delta Q}{T})$$ は、[[熱力学第一法則]] $$(dU = \delta Q + \delta W)$$ を使って、
$$ dS = \dfrac{dU - \delta W}{T}$$
と書ける。この時 $$\delta W$$ は、等温準静操作なので最大仕事となる(ポテンシャル量として表せる)。よって、エントロピーもポテンシャル量となる。
!! [8] 断熱準静操作では、エントロピーは変化しない。
Carnotサイクルとエントロピーの基準点の定義から言える。準静操作でない断熱操作では変化する点に注意。
:$$\Delta S_{aq} = 0$$
!! [9] [[エントロピーの性質]]
エントロピーは、他にも、以下のような性質を持つ。
* ''示量性・相加性''
* エントロピーは ''温度の増加関数''
** 任意の T < T' において、 $$S(T; X) < S(T'; X)$$
* 熱容量との関係: $$C_v(T; V, N) = \dfrac{\partial U(T; V, N)}{\partial T} = T \dfrac{\partial S(T; V, N)}{\partial T}$$
* 不可逆性の尺度 (断熱系でのエントロピー増大則)
** エントロピーの大小によって、断熱操作操作が可能かどうかが判断できる。
** $$S(T; X) \leq S(T'; X') \Leftrightarrow (T;X) \rightarrow^a (T';X')$$
- - - - - - - - - -
!! [10] [[熱力学恒等式]]
[[熱力学第一法則]] と組み合わせることで、''熱力学恒等式'' が得られる。
:$$ dU[S, V] = T dS - p dV = \dfrac{\partial U}{\partial S} dS + \dfrac{\partial U}{\partial V} dV $$
---
---
複数の「断熱準静操作と等温準静操作の組み合わせ」によるサイクルでは、仕事 $$\delta W$$ が最大仕事(ポテンシャル量)となるため、エントロピーの変化は0である。
また、これら以外の操作の場合には、 $$\delta W$$ は最大仕事より小さくなるので、エントロピーは増加する。
!! カルノーサイクルよりも効率のよい熱機関は存在しない
!! [6] クラウジウスの不等式
ある断熱準静操作の外界への仕事を W とすると、その逆操作の仕事は - W になる
<<tag "粘度">>
! 流体の種類
粘度の振る舞いによって、流体はいくつかの種類に分けられる。
* ニュートン流体
* ビンガム流体
** 降伏応力がある
** 粘度は一定
* power-law fluid
** せん断速度の上昇に伴い、粘度が変化する
** 粘度が上がるものと下がるものがある
* Herschel-Bulkley
** ビンガム + power-law
----
! せん断応力
!! ニュートン流体
:$$ \tau = \mu \gamma = \mu \left(- \dfrac{\delta u}{\delta y} \right)$$
!! ビンガム流体
:$$ \tau = \tau_0 + \mu_0 \gamma $$
!! Power-law fluid (Ostwald–de Waele relationship)
日本語では ''べき乗則流体'' という。らしい。
:$$ \tau = K \gamma^n = (K \gamma^{n-1}) \gamma = \mu_{eff} \gamma $$
!! Herschel-Bulkley
:$$ \tau = \tau_0 + K \gamma^n = \tau_0 + (K \gamma^{n-1}) \gamma$$
τ,,0,, を左辺に移動させてから対数を取ると、一次関数の形に変形できる。
:$$ \ln(\tau - \tau_0) = n \cdot \ln(\gamma) + \ln(K) $$
|τ |せん断応力 |shear stress |
|τ,,0,, |降伏応力 |yield stress |
|μ |粘度 |dynamic viscosity |
|μ,,0,, |塑性粘度 |plastic (dynamic) viscosity |
|$$\mu_{eff}$$ | |effective viscosity |
|γ |せん断速度 |shear rate |
|u |速度 |velocity |
|K |粘稠性 |fluid consistency coefficient |
|n |流動性指数 |flow behavior index |
|y |uに垂直に取った座標 ||
----
! 円管の壁せん断応力
:$$ \tau_w = \dfrac{D}{4} \dfrac{dP}{dx} $$
(laminar と turbulent どちらでも成り立つ)
!! Yield stress
[[Buckingham-Reiner]] 参照
!! Wall shear rate
laminar flow であれば、以下の式から求められる。
!!! [[Rabinowitsch-Mooney]] correction
:$$ \gamma_w = (\dfrac{3n+1}{4n}) \gamma_{w,N} $$ , $$ n = \dfrac{\ln(\tau_w)}{\ln(\gamma_{w,N})} $$ , $$ \gamma_{w,N} = \dfrac{8U}{D} $$
|D |管の直径 |pipe diameter |
|τ,,w,, |壁せん断応力 |wall shear stress |
|τ,,w,N,, | |wall shear stress for Newton fluid |
----
! 見かけ粘度 (Apparent Viscosity)
[[Apparent viscosity - Wikipedia|https://en.wikipedia.org/wiki/Apparent_viscosity]]
!! 動粘度
$$ \nu = \dfrac{\mu}{\rho} $$
|ν |動粘度 |kinematic viscosity |
! 本
* [[Rheological Methods in Food Process Engineering (2nd Edition)|http://phariyadi.staff.ipb.ac.id/files/2013/02/STEFFE-Rheology-Book.pdf]]
! サイト
* [[レオロジー用語解説|http://www.tokisangyo.co.jp/pdf/paper/rheology_words.pdf]]
---
* [[セイロジャパンサポートセンター FAQ詳細|http://faq.saeilo.co.jp/ttlfaq/Faq/Detail/3575?keyLog=2_13&dispNodeId=0]]
! モル濃度 (Molar Concentration)
溶質のモル数 (n,,i,,) を、溶液の体積 (V) で割ったもの。
:$$c_i = \dfrac{n_i}{V}$$
; 単位
SI だと ''mol/m^^3^^'' だが、''M'' が使われることも多い。
:1 M = 1 mol/L = 10^^3^^ mol/m^^3^^
----
! 質量濃度 (Mass Concentration)
溶質の質量 (m,,i,,) を、溶液の体積 (V) で割ったもの。
:$$\rho_i = \dfrac{m_i}{V}$$
定義の見た目は密度と全く同じであり、単位は当然 ''kg/m^^3^^'' になる。
!! Mass Fraction
溶質の質量 (m,,i,,) と 溶液の質量 (m,,tot,,) の比を ''Mass Fraction'' という。
:$$w_i = \dfrac{m_i}{m_{tot}} = \dfrac{\rho_i}{\rho_{tot}} = \dfrac{c_i M_i}{\rho_{tot}}$$
パーセントで表した場合は、''重量パーセント濃度 (Mass Percentage)'' という。
;バルブ
*[[バルブの基礎知識 : 株式会社キッツ KITZ CORPORATION|http://www.kitz.co.jp/kiso/hajimete_03.html]]
*[[トラップの背圧 : 蒸気のお話 - TLV|http://www.tlv.com/ja/steam_story/0706haiatu.html]]
* [[等価直径|http://www1.kcn.ne.jp/~bamba/speakers/BH1108ES/de.html]]
** De=4Af/Wp
! 直管
ストレートな配管に関しては、通常、ヘッドと摩擦によるロスを考慮する。
$$ \Delta P = \Delta P_H + \Delta P_F $$
摩擦によるロスは、 [[Darcy-Weisbach]] の式で計算する。
----
! Component での圧力損失
(バルブやエルボーなどの)Component での圧力損失は、密度と流速に対しては、Darcy Weisbach Equation と同様の関係が成り立つが、管の長さ・摩擦係数については、同様に扱うことはできない。
これらについては、以下のいずれかの方法で取り扱う。
* Equivalent Length
* Loss Coefficient (K-factor)
- - - - -
!! Equivalent Length
{{Equivalent Length!!text}}
- - - - -
!! Loss Coefficient
{{Loss Coefficient!!text}}
<<tabs "'Equivalent Length' 'Loss Coefficient' Cv・Kv" "'Equivalent Length'" "$:/state/tab1">>
http://shimaphoto03.com/science/reaction/
全て http://as2.c.u-tokyo.ac.jp/lecture_note/statmech.pdf からの引用
---
```
古典力学系では,状態は(q;p)で指定されるが,これは(q1;q2;...;qf;p1;p2;...;pf)の略記であった.いずれの変数も連続変数だから,何らかの数え方を指定しない限り,状態を1個2個...と数えることはできない14.この点を考察しよう.
```
古典力学の範囲内でいくら考えても数え方は決まりはしないので,次の事実に着目する.ミクロ系は,精度を上げて測れば,実は量子力学に従っていることが見えてくる.量子力学には,(「量子論の基礎」の第8章で詳説したように)どうやっても古典論では記述できない状態もあれば,(ある程度粗い精度で測る限りは)古典力学の予言と一致する状態もある.後者の状態を,準古典的な状態と呼ぶ.ミクロな古典力学系というのは実は,準古典的な状態を,我々が(簡単のために)古典力学で扱っているものなのである.
そこで,古典力学における状態数を,準古典的な状態にあるような系については量子力学の状態数と一致するように定義しよう.そうすれば,準古典的な状態にあるひとつの系を(こちらの都合で)古典力学で記述するか量子力学で記述するかで物理的な結果が変わってしまうような不都合がなく,好ましい.
- - - - - - - - - - - - - - - - - - -
量子力学によると,古典力学の相空間の中の体積 $$(2\pi \bar{h})^f$$ ごとに1個ずつ,準古典的な状態が対応する(問題4.1,問題4.2参照).ただし,$$\bar{h}$$はプランク定数h( $$\approx 6.63 \times 10^{-34}$$ ) を 2π で割り算したもので,量子論の基本定数で
ある:
$$\bar{h} = \dfrac{h}{2 \pi} \approx 1.05 \times 10^{-34}$$
従って,相空間の中の
$$dq_1 \cdots dq_f dp_1 \cdots dp_f$$ (これを dqdp と記す)
なる体積を持つ微小領域の中には,
$$\dfrac{dqdp}{(2\pi \bar{h})^f} $$
だけの個数の,準古典的な状態が含まれることになる.''これをそのまま,古典力学における状態の個数として採用する.''
こうして,$$ens(E, X_1, ..., X_t)$$ に含まれるミクロ状態の数は,
$$\displaystyle W(E, X_1, ..., X_t) = \int_{(q,p) \in ens(E, X_1, ..., X_t)} \dfrac{dqdp}{(2\pi \bar{h})^f}$$
で与えられる.ただし,右辺の積分は,
$$\displaystyle \int \cdots \int_{(q,p) \in ens(E, X_1, ..., X_t)} \dfrac{dq_1 dp_1}{2\pi \bar{h}} \cdots \dfrac{dq_f dp_f}{2\pi \bar{h}}$$
という,$$(q,p) \in ens(E, X_1, ..., X_t)$$ なる領域の上での,2f 重の積分の略記である.
- - - - - - - - - - - - - - - - - - -
こうして古典粒子系と見なした場合には,状態数を数えるにあたり,昔から議論になってきた問題がある.例えば,N= 2の場合を考えよう.図@(a)のような状態と,その粒子を入れ替えた(b)の状態は,異なるミクロ状態か? ''実はこれは同じ状態なのである''.
ミクロカノニカル集団 $$ens(E,V,N)$$ には,同じ状態を重複して加えてはいけないのであった.従って,N= 2の場合についていえば,図@(a)と(b)の状態は,どちらか一方しか加えてはいけない.そのため,$$W(E,V,N)$$ や $$\Omega(E,V,N)$$ を勘定するときには,状態が区別できるときに比べて,図@のように,相空間の半分の領域しか勘定してはいけないことになる.あるいは,仮に状態が区別できるとして勘定して,その結果を2で割ってもよい.後者のやり方の方が楽なので,後者を採用しよう.原子数がN個であれば,''仮に状態が区別できるとして勘定して,その結果をN!で割ればよい''.
---
記述を簡単化するために,こにに並んだ 3N 個の位置座標を順番に,$$q_1; q_2; \cdots q_{3N}$$ と記そう.
つまり,
q
1
=
x
(1)
;q
2
=
y
(1)
;
;q
3
N
=
z
(
N
)
である.同様に,運動量を順番に,
p
1
;p
2
;
;p
3
N
と記そう.例えば,
p
2
=
p
(1)
y
である.これ
を用いて,上式を順番を変えて書けば,
q
1
;p
1
;q
2
;p
2
;
;q
3
N
;p
3
N
(3.2)
のように,
3
N
組の正準変数の組
q
i
;p
i
(
i
= 1
;
2
;
;
3
N
)
が並んだものになる.この
3
N
のように,系の状態を記述
するのに必要な正準変数の組の数を,系の
(
力学的)
自由度
(degrees of freedom)
と言い,本書では
f
と記す.また,
q
1
;q
2
;
;q
f
をまとめて(添え字のない)
q
と記し,
p
1
;p
2
;
;p
f
をまとめて
p
と記すことにする:
q
q
1
;q
2
;
;q
f
;
(3.3)
p
p
1
;p
2
;
;p
f
:
(3.4)
自由度
f
の古典力学系の(各瞬間瞬間の)状態は,この
2
f
個の変数
q;p
で指定できる
わけだ.
<<tag "微分">>
<$reveal type="nomatch" state="$:/state/differential" text="show"><$button set="$:/state/differential" setTo="show">関連項目</$button></$reveal>
<$reveal type="match" state="$:/state/differential" text="show">
<$button set="$:/state/differential" setTo="hide">隠す</$button>
<div class="tc-table-of-contents">
<<toc-selective-expandable '微分'>>
</div>
</$reveal>
---
! [[微分可能の定義]] (differentiable)
関数 $$f(x)$$ が $$x=a$$ において微分可能とは $$ \displaystyle \lim_{h \to 0} \dfrac{f(a+h) - f(a)}{h}$$ が存在すること。
もしくは、$$ f(a+h) = f(a) + Ah + \epsilon (h) $$ かつ $$ \displaystyle \lim_{h \to 0} \dfrac{\epsilon (h)}{h} = 0$$
---
! 基本的な定理・公式
!! 1. [[微分可能な可能な関数の連続性]]
微分可能な点で連続。
(必ずしも逆は成り立たない)
- - - - - - - - - -
!! 2. 線形性 (Linearity)
$$\displaystyle (af(x) + bg(x))' = af'(x) + bg'(x) $$
!! 3. 積の微分公式 (Product rule)
# $$\displaystyle (f(x)g(x))' = f'(x)g(x) + f(x)g'(x) $$
# $$\displaystyle (\dfrac{f(x)}{g(x)})' = \dfrac{f'(x)g(x)-f(x)g'(x)}{g(x)^2} $$
[[積の微分公式とその証明の味わい 高校数学の美しい物語|http://mathtrain.jp/sekinobibun]]
!! 4. [[合成関数の微分]] (Chain rule)
$$\displaystyle \frac{dy}{dx} = \frac{dy}{dt}\frac{dt}{dx} $$
!! 5. [[逆関数の微分法]]
$$\displaystyle \frac{dx}{dy} = \dfrac{1}{\dfrac{dy}{dx}} $$
http://www7b.biglobe.ne.jp/~h-kuroda/pdf/text_calculus.pdf
!! 6. [[導関数の公式]]
よく使うものだけまとめた。
<$reveal type="nomatch" state="$:/state/derivative" text="show"><$button set="$:/state/derivative" setTo="show">公式の表示</$button></$reveal>
<$reveal type="match" state="$:/state/derivative" text="show">
<$button set="$:/state/derivative" setTo="hide">隠す</$button>
{{導関数の公式!!text}}
</$reveal>
- - - - - - - - - -
!! 7. 平均値の定理 (Mean value theorem)
実用的な計算で使うことはあまり無いが、証明の途中で使われていることが多い (詳細は [[Taylorの定理]] 参照)。
ある c $$\displaystyle (a < c < b) $$ で $$\displaystyle \frac{f(b)-f(a)}{b-a} = f'(c) $$ が成り立つ。
!! 8. [[Taylor展開]] (Taylor expansion)
a を含む区間で定義された $$\displaystyle C^{\infty} $$ 級関数 $$\displaystyle f(x) $$ に対する無限級数
$$\displaystyle \sum_{n=0}^{\infty} \frac{f^{(n)}(a)}{n!} (x-a)^n $$
のことを、a を中心とした $$\displaystyle f(x) $$ の Taylor 級数 といい、この級数が、
* a を含むある開区間で収束し、
* その極限がf(x) に一致する
時、「''f(x)は x=a のまわりでTaylor展開可能である''」という。
- - - - - - - - - -
!! 9. 微分方程式
一部の微分方程式は、積分を用いて解を求めることが可能である。
* [[微分方程式の解き方]]
---
! 多変数関数の微分
微分の概念は、多変数関数に拡張することができる。
!! 1. [[偏微分]] (Partial Derivative)
二つ以上の変数の関数において、一つの変数のみを変動させて、その変数に関して微分すること。例えば、関数 $$z =(x,y)$$ の x の偏微分は、次のようになる。
$$\dfrac{\partial z(x,y)}{\partial x} = \displaystyle \lim_{\Delta x \to 0} \dfrac{f(x + \Delta x, y) - f(x, y)}{\Delta x}$$
偏微分の計算は一変数の微分とだいたい同じだが、[[偏微分の合成関数]] については注意が必要である。
!! 2. [[方向微分]] (Directional derivative)
偏微分は座標軸に沿った傾きを表すことになるが、任意の方向の傾きを考えることも可能である。そして、この任意の方向への微分を ''方向微分'' という。
関数 $$z = f(x,y)$$ 上の 点 $$(x_1, y_1)$$ において、あるベクトル $$u = (a, b)$$ を用いて表した
$$ \displaystyle \lim_{t \to 0} \dfrac{f(x_1 + ta, y_1 + tb) - f(x_1, y_1)}{t} $$
に極限値が存在する時、「''関数 z は 点 $$(x_1,y_1)$$ において方向微分可能''」であるという。また、この極限値を、「''関数 z の 点 $$(x_1,y_1)$$ におけるu方向微分係数''」という。なお、定義から分かるように、同じ方向でも、u の大きさ(絶対値)によって方向微分係数は変化する。
!! 3. [[勾配 (gradient)|grad]]
二つ以上の変数を持つ ''スカラー関数'' の、ある点における''最大の勾配を表すベクトル'' (「スカラー ⇒ ベクトル」という関係に注意)。
:$$\displaystyle \nabla f = \sum_{n=1}^n \dfrac{1}{|e_i|} e_i \dfrac{\partial f}{\partial u_i}$$
三次元の正規直交座標では、あるスカラー関数を $$f(x,y,z)$$ の勾配は、次のように表わされる。
:$$\nabla f = \mathrm{grad} (f) = e_x \dfrac{\partial}{\partial x} f(x,y,z) + e_y \dfrac{\partial}{\partial y} f(x,y,z) + e_z \dfrac{\partial}{\partial z} f(x, y, z)$$
!! 4. [[全微分]] (Total derivative)
$$dz = \dfrac{\partial z}{\partial x} \Delta x + \dfrac{\partial z}{\partial y} \Delta y$$ を ''z の全微分'' という。
---
! [[ベクトル関数の微分]]
微分の概念は、ベクトルを返す関数にも拡張することができる。
!! 1. 一変数関数の場合
[[ベクトル関数]] $$\mathbf{F}: \mathbb{R} \to \mathbb{R}^m $$ の微分は、次のように定義される (t はスカラー)。
$$\displaystyle \dfrac{d \mathbf{F}}{dt} \equiv \lim_{h \to 0} \dfrac{\mathbf{F}(t +h) - \mathbf{F}(t)}{h} = \left( \lim_{h \to 0} \dfrac{f_1(t +h) - f_1(t)}{h} \ \ldots \ \ \lim_{h \to 0} \dfrac{f_m(t +h) - f_m(t)}{h} \right)$$
!! 2. 多変数関数の場合 (偏微分)
[[ベクトル関数]] $$\mathbf{F}: \mathbb{R}^n \to \mathbb{R}^m $$ を、 $$\mathbf{F}(t_1, t_2 \ldots , t_n)$$ と表すとする。
このとき、ベクトル関数 $$\mathbf{F}$$ の偏微分は、次のように定義される ($$1 \leq i \leq n$$)。
$$ \displaystyle \begin{aligned} \dfrac{\partial \mathbf{F}}{\partial t_i} &\equiv \lim_{h \to 0} \dfrac{\mathbf{F}(t_1, \ldots t_i + h, \ldots , t_n) - \mathbf{F}(t_1, \ldots t_i, \ldots , t_n)}{h} \\ &= \left( \lim_{h \to 0} \dfrac{f_1(t_1, \ldots t_i + h, \ldots , t_n) - f_1(t_1, \ldots t_i, \ldots , t_n)}{h} \ \ldots \ \ \lim_{h \to 0} \dfrac{f_m(t_1, \ldots t_i + h, \ldots , t_n) - f_n(t_1, \ldots t_i, \ldots , t_n)}{h} \right) \end{aligned}$$
- - - - - - - - - -
!! 3. [[ヤコビ行列]]
[[ベクトルを返す多変数関数|ベクトル関数の微分]] の場合では、「どの変数を動かすか?」に加えて「(戻り値の ベクトルの) 各成分の変化率」も考える必要がある。
この二つをまとめたものが [[ヤコビ行列]] であり、 $$y_i = f(x_j)$$ のヤコビ行列 ''J'' は、次のように定義される ($$f: R^n \to R^m$$)。
:$$\displaystyle \mathbf {J} = \begin{pmatrix} \dfrac{\partial y_1}{\partial x_1} & \ldots & \dfrac{\partial y_1}{\partial x_n} \\ \\ \vdots & \ddots & \vdots \\ \\ \dfrac{\partial y_m}{\partial x_1} & \ldots & \dfrac{\partial y_m}{\partial x_n} \\ \end{pmatrix} $$
!! 4. 全微分
全微分の定義は、[[ヤコビ行列]] と ベクトル Δt の積に分解できる。
$$\displaystyle d \mathbf{F} \equiv \dfrac{d \mathbf{F}}{dt_1} \Delta t_1 + \dfrac{d \mathbf{F}}{dt_2} \Delta t_2 + \cdots + \dfrac{d \mathbf{F}}{dt_n} \Delta t_n = \begin{pmatrix} \left( \dfrac{\partial \mathbf{F}}{\partial t_1} \right)_1& \ldots & \left( \dfrac{\partial \mathbf{F}}{\partial t_n} \right)_1\\ \\ \vdots & \ddots & \vdots \\ \\ \left( \dfrac{\partial \mathbf{F}}{\partial t_1}\right)_m & \ldots & \left( \dfrac{\partial \mathbf{F}}{\partial t_n} \right)_m \end{pmatrix} \begin{pmatrix} \Delta t_1 \\ \\ \vdots \\ \\ \Delta t_n \end{pmatrix} $$
- - - - - - - - - -
----
* [[平均値の定理|http://aozoragakuen.sakura.ne.jp/kaisekikiso/node39.html]]
* [[解析力学2003|http://www-het.phys.sci.osaka-u.ac.jp/~higashij/lecture/am03.htm]]
* [[dydxとは何なのか|http://deepdigital.co.jp/dydx.html]]
! 微分可能な可能な関数の連続性
任意の $$a \in A$$ を定め、 $$b = g(a) $$ とおく。このとき、(前提条件から) 関数 $$f$$ は、点 $$b$$ で微分可能である。
ここで、(微係数の定義から) 以下のような関数 $$q$$ を考えると、
:$$ q(t) = \begin{cases} \dfrac{f(t) - f(b)}{t -b} & (t \neq b) \\ f'(b) & (t =b) \end{cases} $$
関数 $$q$$ は $$t=b$$ で連続であり、次の関係がなりたつ。
:$$f(t) - f(b) = q(t) (t-b)$$
さらに、$$q(b) = f'(b)$$ なので、$$\displaystyle \lim_{t \to b} (f(t) - f(b)) = 0$$ である。
- - - - -
この式を、$$g(x)$$ で置き換えると、
:$$f(g(x)) - f(g(a)) = q(g(x)) (g(x) - g(a))$$
となる。
さらに、関数 $$g$$ は、関数 $$q$$ と同じようにして定めた 関数 $$p$$ を用いて、
:$$ g(x) - g(a) = p(x) (x-a)$$
と表せる。これにより、
:$$f(g(x)) - f(g(a)) = q(g(x)) p(x) (x-a)$$
「$$g$$ は $$a$$ で微分可能 (前提条件) ⇒ $$g$$ は $$a$$ で連続」なので、関数 $$q(g(x)) p(x)$$ も $$a$$ で連続である。
----
任意の $$a \in A$$ を定め、 $$b = g(a) $$ とおく。
(前提条件から) $$f$$ は $$t=b$$ で微分可能であるので、
----
$$g(x)$$ は、[[微分可能の定義]] (定義2)を使って
$$g(x + \Delta x) = g(x) + g'(x) \Delta x + \epsilon '(\Delta x) $$
と書くことができる $$\left( \displaystyle \lim_{\Delta x \to 0} \dfrac{\epsilon '(\Delta x)}{\Delta x} = 0 \right)$$。
----
[[微分可能の定義]] を使うと、 $$f(x)$$ は
$$f(g(x + \Delta x)) = f(g(x)) + f'(g(x)) \Delta x + \epsilon (\Delta x) $$
と書くことができる。
関数 $$g$$ は 定義域 $$A$$ で微分可能、関数 $$f$$ は 定義域 $$g(A)$$ で微分可能とすると、以下の関係が成り立つ。
$$\dfrac{d}{dx}f(g(x)) = f'(g(x)) g'(x)$$
! 定義1
関数 $$f(x)$$ が $$x=a$$ において''微分可能''とは、
$$ \displaystyle \lim_{h \to 0} \dfrac{f(a+h) - f(a)}{h} $$
が存在することである。
----
! 定義2
関数 $$f(x)$$ と $$x=a$$ に対し、次の条件を満たす定数 $$A$$ と 関数 $$\epsilon (h)$$ が存在するとき、$$f(x)$$ は $$x=a$$ で微分可能である。
$$ f(a+h) = f(a) + Ah + \epsilon (h) $$ かつ $$ \displaystyle \lim_{h \to 0} \dfrac{\epsilon (h)}{h} = 0$$
http://nadauniversity.web.fc2.com/start/hmath.bibunn.2tex.pdf より
http://daisy.math.sci.ehime-u.ac.jp/users/tsuchiya/math/calculus/bibun.pdf
!! ''定義2の重要な点''
* Aは、一つ目の定義の微分係数 $$f'(a)$$ に等しい
* $$x=a$$ の近くでは、$$f(x)$$ は1次式で近似でき、1次の比例係数が $$f'(a)$$ である。
** テイラー展開と組み合わせて使うと強力。
- - - - - - - - - - - - - - - - - - - -
!! ランダウの記号
; o(x^^n^^)
ある関数 $$f(x)$$ が
$$ \displaystyle \lim_{h \to 0} \dfrac{f(h)}{h^n} = 0$$
を満たすとき、(小さいということ以外) 関数 $$f(x)$$ の情報が必要無いなら、 $$o(x^n)$$ と書き替えてしまってよい。これを使うと、定義2は次のように書ける。
$$ f(a+h) = f(a) + Ah + o (h) $$
; O(x^^n^^)
$$ \displaystyle \lim_{h \to 0} \dfrac{f(h)}{h^n} \leq$$ [0以上の定数] を満たす時は、大文字の ''O'' を使って、$$O(x^n)$$ と書き替えることができる。
----
! 証明 (定義1 ⇔ 定義2)
$$ \displaystyle \lim_{h \to 0} \dfrac{f(a+h) - f(a)}{h} = f'(a) $$
が存在すると仮定する。このとき、
$$ A = f'(a), \epsilon(h) = f(a+h) -f(a) - hf'(a) $$
とおけば、
$$ \displaystyle \lim_{h \to 0} \dfrac{\epsilon (h)}{h} = \displaystyle \lim_{h \to 0} \dfrac{f(a+h) -f(a)}{h} - f'(a) = 0 $$
である。
また、逆に、
$$ f(a+h) = f(a) + Ah + \epsilon (h) $$ かつ $$ \displaystyle \lim_{h \to 0} \dfrac{\epsilon (h)}{h} = 0$$
を満たす $$A$$ と $$\epsilon (h)$$ の存在を仮定すると、
$$ \displaystyle \lim_{h \to 0} \dfrac{f(a+h) - f(a)}{h} = \lim_{h \to 0} A + \dfrac{\epsilon (h)}{h} = 0$$
となる。
----
! 1階常微分方程式
!!変数分離形
導関数 (a derivative) が次のような形に変形できるものを、 ''変数分離形'' という。
$$y'(x) = \dfrac{dy}{dx} = \dfrac{p(x)}{q(y)}$$ 【式1】
この形であれば、''y は x の関数なので'' 次のように解ける。
$$q(y(x)) \cdot y'(x) = p(x)$$
$$\displaystyle \int q(y(x)) \cdot y'(x) dx = \int p(x) dx$$
左辺に置換積分の公式を適用すれば、上式は以下のように変形できる。
$$\displaystyle \int q(y) dy = \int p(x) dx$$ 【式2】
積分定数があるので、拘束条件が1つ必要となる。
- - - - -
!!! ''形式的な式変形による解法:''
変数分離形の微分方程式には形式的な解法があり、物理関係の本ではこの形式がよく使われる。
【式1】の $$\dfrac{dy}{dx}$$ を形式的な分数とみなすと、
$$q(y) dy = p(x) dx$$
と式変形でき、この両辺をそれぞれ積分すると【式2】が得られる。
* http://deepdigital.co.jp/dydx.html
* https://physnotes.jp/diffeq/sep-var/
---
! 2階の定数係数線形微分方程式
x(t)についての2階の線形微分方程式とは、
$$\alpha \dfrac{d^2x}{dt^2} + \beta \dfrac{dx}{dt} + \gamma x(t) = f(t) $$ 【式1】
といった形のものを指す。
!! f(t) が存在しない場合 (斉次の線形微分方程式)
この場合は、まず、2階の線形微分方程式(【式1】)の解が
$$x(t) = C e^{\lambda}$$
であると仮定して λ を求める。ここで求まった解は ''特殊解'' という。
2次方程式とみなして解を求めたので、特殊解は2つあり、そのそれぞれを $$x_A(t), x_B(t)$$ とする。このとき、''一般解'' は、次のように表せる (A, B は任意定数)。
$$X(t) = A x_A(t) + B x_B(t) $$
なお、 A, B を決定するには、2つの付帯条件(拘束条件)が必要となる。これは積分定数のことを考えてみればすぐにわかる。
例:
$$\dfrac{d^2x}{dt^2} = 1, \dfrac{dx}{dt} = t + C_1, x(t) = \dfrac{1}{2} x^2 + x + C_2 $$
; 解が一つの場合
!! 非斉次型の微分方程式の解法
http://www2.kobe-u.ac.jp/~iwayama/teach/kisoIII/2007/chap1.pdf
---
http://www.ike-dyn.ritsumei.ac.jp/~hyoo/wave-diff.pdf
標本数を n とし、i番目の標本の値を x,,i,, とする。
----
!順序統計量
標本を小さい順に並べ替えたものを順序統計量といい、i 番目に小さい値の標本は、次のように表される (らしい)。
:$$x_{(i)}$$
! ランキット
相の境界面の面積を増加させるのに必要な仕事 $$(dW)$$ は、面積の増加量 $$(dA)$$ に比例する。この関係における比例定数 $$\gamma (> 0)$$ を、''表面張力 (surface tension)'' という。
:$$dW = \gamma \cdot dA$$
In general, the proportionality constant depends on the composition of the liquid
and the vapor, temperature, and pressure, but it is independent of the area.
---
! よく使う基本となる式
!! Young-Laplace の式 [[詳細|Young-Laplaceの式など]]
平衡状態において、相の境界面が曲面となっている時、相の間の圧力差は、「表面張力 $$(\gamma)$$ と 主曲率 $$(R_1, R_2)$$」 で表すことができる。
:$$\Delta P = \gamma \cdot \left( \dfrac{1}{R_1} + \dfrac{1}{R_2} \right)$$
!! Kelvin equation [[詳細|Young-Laplaceの式など]]
液体表面が曲率を持つ場合に蒸気圧がどのように曲率に依存するかを表す式
:$$ \displaystyle {\ln {{P_0}^K \over P_{0}}}={\frac {\gamma V_{m}}{RT}} \left( \dfrac{1}{R_1} + \dfrac{1}{R_2} \right)$$
$${P_0}^K$$ 曲率を考慮した蒸気圧, $$P_0$$ 曲率が無い時の蒸気圧, $$V_m$$ モル体積 である。
!! Young の式 [[詳細|Young の式]]
固体表面が液体及び気体と接触しているとき、この3相の接触する境界線において液体面が固体面と成す角度を接触角(contact angle)という。3相の接触する点の力の釣り合いを考えると、以下の関係が成り立つ。
:$$\gamma_L \cos{\theta} = \gamma_S - \gamma_{SL}$$
---
! ヘルムホルツエネルギー
Gibbs のモデル (境界面が体積を持たない) では、二相のシステムにおけるヘルムホルツエネルギーは次のように表せる。
$$\displaystyle dF = - S dT - P^{\alpha} dV - (P^{\beta} - P^{\alpha}) dV^{\beta} + \sum {\mu_i}^{\alpha} {N_i}^{\alpha} + \sum {\mu_i}^{\beta} {N_i}^{\beta} + \sum {\mu_i}^{\sigma} {N_i}^{\sigma} + \gamma dA$$
* $$V^{\sigma} = dV^{\sigma} = 0$$
等温等積かつ平衡状態だとすると、
* $$dT = 0$$
* $$dV = 0$$
* $$\mu_i^{\alpha} = \mu_i^{\beta} = \mu_i^{\sigma} = \mu_i \ \ \ $$ (どの部分の化学ポテンシャルも等しくなる)
なので、上記のヘルムホルツエネルギーの式は、
$$\displaystyle dF = - (P^{\beta} - P^{\alpha}) dV^{\beta} + \sum {\mu_i} {N_i} + \gamma dA$$
と単純化できる。さらにこの式を、境界面の面積 ($$A$$) で偏微分すると 表面張力が得られる。
$$\dfrac{\partial F}{\partial A} |_{T,V, V^{\beta}, N_i} = \gamma$$
! ギブスエネルギー
平衡状態におけるギブスエネルギーは、以下のように表せる。
$$\displaystyle dG = -S dT + V^{\alpha} dP^{\alpha} + V^{\beta} dP^{\beta} + \sum {\mu_i} {N_i} + \gamma dA$$
---
http://www.kurims.kyoto-u.ac.jp/~kyodo/kokyuroku/contents/pdf/1748-01.pdf
Universal property
---
! 直積
ややこしいので、二対象の場合についてまず書く。
!! 二対象の場合
圏 $$C$$ の任意の対象を $$Y$$ とする。このとき、「$$X_1$$ と $$X_2$$ の ''直積''」 は、
* $$X_1 \times X_2$$ と表される $$C$$ の対象
* 射 $$\pi_1 : X_1 \times X_2 \to X_1$$
* 射 $$\pi_2 : X_1 \times X_2 \to X_2$$
の組で、以下の ''普遍性'' を満たすもののことである。
* 射 $$f1 : Y \to X_1 , \ f_2 : Y \to X_2$$ をどのように取ったとしても、''一意的な射'' $$f : Y \to X_1 \times X_2$$ が存在する
さらに、このように定義された直積は、次のような性質を持つ。
:''直積は、もし存在すれば同型を除いて一意的であり、その同型射も一意的''
証明は、ここを参照
* http://alg-d.com/math/kan_extension/universality.pdf
!! 一般的な場合
---
* https://en.wikipedia.org/wiki/Product_(category_theory)
!部分群
!! ''定義''
$$G$$ を群、$$*$$ をその群上の二項演算とする。$$G$$ の 空でない部分集合 $$H$$ が、$$*$$ でまた群になる時、$$H$$ を $$G$$ の ''部分群'' という。
* $$*$$ が $$H$$ で閉じている
* $$H$$ には単位元 $$e_h$$ が存在する
* $$H$$ には逆元が存在する
** $$a * a^{-1} = e_h, \ \ a \in H$$
!! 性質
# 部分群の単位元 $$e_h \in H$$ は群の単位元 $$e_g \in G$$ と等しい
!! 部分群の判定定理
:$$H$$ を $$G$$ の 部分群 $$\ \Leftrightarrow \ a * b^{-1} \in H , \forall a, b \in H$$
---
! 正規部分群
$$H \subset G , \ g \in G , \ h \in H$$ とする。
このとき、以下のいずれかを満たすとき、$$H$$ を $$G$$ の''正規部分群''といい $$H \triangleleft G$$ と表す (これらは同値なのでどれを定義としてもよい)。
# $$g H = H g$$
# $$g H g^{-1} = H$$
# $$g h g^{-1} \in H$$
!!証明
; 1 $$\Leftrightarrow$$ 2
$$\ \ \ \ gH = Hg \ \Leftrightarrow \ g H g^{-1} = H$$
; 2 $$\Rightarrow$$ 3
$$\ \ \ \ $$は明らか
; 2 $$\Leftarrow$$ 3
$$\ \ \ \ $$ 3 が成り立つとすると、($$g, g^{-1}$$ を入れ替えると) $$g^{-1} h g \in H$$ である。
$$\ \ \ \ H = g (g^{-1} h g) g^{-1} \in g H g^{-1}$$
https://takataninote.com/group/normal-group.html
- -
* [[正規部分群[具体例で学ぶ代数学《群論》No.16] - YouTube|https://www.youtube.com/watch?v=kW7ItnLIY7Y]]
* [[剰余群の定義[具体例で学ぶ代数学《群論》No.17] - YouTube|https://www.youtube.com/watch?v=HuxW6GqPXJQ]]
; 靴
* [[NAOT(ナオト) NAOT総輸入代理店 風の栖(かぜのすみか) | http://www.kazenosumika.com/naot.html]]
** かかとが無い靴なのに、足にぴったりフィット
** 歩いても、踵と中敷が全く離れない
** 吉祥寺に売ってる
*** [[吉祥寺中道通り 一軒家雑貨店 mist∞ WONDERFUL LIFE|http://ameblo.jp/mist8/]]
* [[Shop TABI-JI 地下足袋と足袋ソックスの通販サイト | http://www.tabi-ji.jp/]]
----
;こまごま
* [[Leprotto|http://the-za.somard.co.jp/higurasi/hg_space/higu101_menu.shtml]]
* [[手作り ・ ハンドメイド 腕時計 メーカー C-Brain シーブレーン|http://www.cbrain.co.jp/]]
[[フーリエ級数]] は複素数を用いて、次のように表すこともできる。
$$\displaystyle f(x) = \sum_{n=-\infty}^{\infty} c_n e^{in\pi x/L}$$
$$\displaystyle c_n = \dfrac{1}{2L} \int_{-L}^L f(X) e^{-in\pi X/L} dX \ , \ \ (n = ..., -2, -1, 0, 1, 2, ...)$$
---
! 導出
[[オイラーの公式]] を使うと、cos, sin は、
$$\cos{x} = \dfrac{e^{ix} + e^{-ix}}{2}, \ \ \sin{x} = \dfrac{e^{ix} - e^{-ix}}{2i}$$
と表せる。これを、[[フーリエ級数]] の式に代入すると、
$$\displaystyle f(x) = \dfrac{a_0}{2} + \sum_{n=1}^{\infty} \left( a_n \dfrac{e^{in\pi x/L} + e^{-in\pi x/L}}{2} + b_n \dfrac{e^{in\pi x/L} - e^{-in\pi x/L}}{2i} \right) = \dfrac{a_0}{2} + \sum_{n=1}^{\infty} \left( \dfrac{a_n - i b_n}{2} e^{in\pi x/L} + \dfrac{a_n + i b_n}{2} e^{-in\pi x/L}\right) \ \ \ \ \ \ \ $$
となる。
ここで、$$c_n = \dfrac{a_n - i b_n}{2}$$ とすると、この式は、
$$\displaystyle c_n = \dfrac{1}{2L} \int_{-L}^L \left[ f(X) \left( \cos{\dfrac{n \pi X}{L}} - \sin{\dfrac{n \pi X}{L}} \right) \right] dX = \dfrac{1}{2L} \int_{-L}^L f(X) e^{-in\pi X/L} dX \ , \ \ (n = 1, 2, ...)$$
と変形できる。この式を n = 0 に適用すると、
$$\displaystyle c_0 = \dfrac{1}{2L} \int_{-L}^L f(X) dX = \dfrac{a_0}{2}$$
となる。さらに、 $${c_n}^* = \dfrac{a_n + i b_n}{2}$$ であることから、
$$c_{-n} = {c_n}^*$$
と表現できる。つまり $$c_n$$ を次のように定義すれば、その定義は整数全体で有効になる。
$$\displaystyle c_n = \dfrac{1}{2L} \int_{-L}^L f(X) e^{-in\pi X/L} dX \ , \ \ (n = ..., -2, -1, 0, 1, 2, ...)$$
* [[3.2.4 Variance|https://www.probabilitycourse.com/chapter3/3_2_4_variance.php]]
* https://www.probabilitycourse.com/chapter4/4_1_2_expected_val_variance.php
----
! 定義
[[確率変数]] $$X$$ の 分散は、[[期待値]] $$(E[\ ])$$ を用いて次のように定義される。
$$\ \ \ \ \ \ \displaystyle \mathrm{Var}[X] = E[(X - E[X])^2]$$
! 性質
$$\ \ \ \ \ 1. \ \ \mathrm{Var}[X] = E[(X - E[X])^2] = E[X^2] - (E[X])^2$$
$$\ \ \ \ \ 2. \ \ \mathrm{Var}[aX + b] = a^2 \mathrm{Var}[X] $$
確率変数 $$X_1, X_2, \dots , X_n$$ が独立である時、 $$X = X_1 + X_2 + \dots + X_n$$ について、
$$\ \ \ \ \ \ \ \mathrm{Var}[X] = \mathrm{Var}[X_1] + \mathrm{Var}[X_2] + \cdots + \mathrm{Var}[X_n]$$
が成り立つ。
----
! 詳細・導出
!! 離散的な場合
定義
$$\ \ \ \ \ \ \displaystyle \mathrm{Var}[X] = E[(X - E[X])^2] = \sum_{x_k \in R_x} (x_k - E[X])^2 P_X(x_k)$$
性質 1
$$\ \ \ \ \ \ \displaystyle \begin{aligned} \mathrm{Var}[X] &= \sum_{i=1}^n p_i (x_i - E[X])^2 \\ &= \sum_{i=1}^n p_i {x_i}^2 - 2 \sum_{i=1}^n p_i x_i E[X] + \sum_{i=1}^n p_i (E[X])^2 \\ &= \sum_{i=1}^n p_i {x_i}^2 - 2 E[X] E[X] + (E[X])^2 \cdot 1 \\&= E[X^2] - (E[X])^2 \end{aligned}$$
性質 2
最初のところの変形では [[LOTUS]] を用いている。
$$\ \ \ \ \ \ \displaystyle \begin{aligned} \mathrm{Var}[aX+b] &= E[ (aX + b -E[aX + b])^2] \\ &= E[ (aX -aE[X])^2] \\ &= a^2 E[(X-E[X])^2] \\ &= a^2 \mathrm{Var}[X] \end{aligned} $$
----
! 共分散 (Covariance )
!!定義
: $$Cov(X,Y) = E[ \ (X - E[X]) (Y - E[Y]) \ ] = E[XY] - E[X] E[Y]$$
https://www.probabilitycourse.com/chapter5/5_3_1_covariance_correlation.php
! 具体的な計算
この例では、A, B, C という3つのグループがあるとする。
!! 基本的な統計量
標本数: $$n$$
相加平均: $$\mu = \dfrac{1}{n} \sum x_i$$
偏差平方和: $$S = \sum (x_i - \mu)^2$$
分散: $$\sigma^2 = S / n $$
不偏分散: $$u^2 = S / (n-1)$$
- - - - -
!! 偏差平方和の計算
全体偏差平方和: $$S_T = \sum (a_i - \mu)^2 + \sum (b_i - \mu)^2 + \sum (c_i - \mu)^2 $$
群間、平均偏差平方和: $$S_C = n_a (\mu_a - \mu)^2 + n_b (\mu_b - \mu)^2 + n_c (\mu_c - \mu)^2$$
群内、偏差平方和: $$S_R = \sum (a_i - \mu_a) + \sum (b_i - \mu_b) + \sum (c_i - \mu_c)$$
なお、ここで偏差平方和に関しては、次の関係が成り立つ。
:$$S_T = S_C + S_R$$
!! 自由度
グループ数を n,,G,, とする。
|全体 |n,,a,, + n,,b,, + n,,c,, - 1 ||
|群間 |n,,G,, - 1|この例では 2 (= 3 -1)|
|郡内 |(n,,a,, - 1) + (n,,b,, - 1) + (n,,c,, - 1) ||
!! 不偏分散の計算
偏差平方和を自由度でわる。
群間: $${u_C}^2 = S_C / (n_G - 1)$$
群内: $${u_R}^2 = \dfrac{S_R}{(n_a - 1) + (n_b - 1) + (n_c - 1)}$$
!! 分散比
:$$F = \dfrac{V_C}{V_R}$$
!! 参考
* http://www.mus-nh.city.osaka.jp/iso/argo/nl08/nl08-27-37.pdf
* http://www.math.s.chiba-u.ac.jp/~yasuda/Chiba/%92P%8F%83%83N%83%8D%83X%8FW%8Cv/kiso7.htm
----
全体のばらつき = 要因の効果によるばらつき + 残差
; 全体のばらつき
グループを気にせず、不偏分散を計算する
; 要因の効果によるばらつき
# 各グループの平均 - 全体の平均
#
----
----
* http://www.math.s.chiba-u.ac.jp/~yasuda/Chiba/%92P%8F%83%83N%83%8D%83X%8FW%8Cv/kiso7.htm
; 不偏分散
<<<
分散の関数VARは、平均からの差の自乗をn-1で割ったものであることを既に紹介しました。これを「不偏分散」とも呼びます。2つの不偏の比を、「不偏分散比F」と呼び、その確率分布を利用して平均値の差の検定をおこないます。
<<<
http://www.math.s.chiba-u.ac.jp/~yasuda/Chiba/%92P%8F%83%83N%83%8D%83X%8FW%8Cv/kiso7.htm
http://as2.c.u-tokyo.ac.jp/lecture_note/statmech.pdf からの引用
<<<
一般に,現実的なハミルトニアンを持つモデルを仮定してZを計算するのは,きわめて難しい.Wの計算よりは楽だといっても,やはりきわめて難しいのだ.そこで通常は,何らかの近似計算を行うことになる.そういう近似計算の中でいちばん簡単なのは,モデル設定の段階でモデルを簡略化してしまうことである.そうすると,Z(やW)が「厳密に」^^6^^ 計算できてしまう.そういうケースの,一番簡単な場合を説明する.
; 7.5.1 モデルの特質と計算公式
具体例としては,4.8 節で述べた,相互作用のないユニットが集まった系を思い浮かべて読んでもらえば分かりやすい.それを少しばかり一般化したのが,ここで述べるモデルである.
系のミクロ状態が,ある変数の組,
$$n_1, n_2, \cdots , n_N \equiv n$$
で指定できるとする.njの値は離散的でも連続的でもよい.(もしもnjが離散変数であれば,nは,7.2節で述べた,状態を指定する離散変数 λ に相当する.)njに付いたラベルjについては,離散的であるとする.jは離散的でありさえすればどんな値をとってもよいのだが,ここではj= 1;2;...;Nとして説明する.たとえば4.8節のモデルでは,ユニットの番号がjに相当し,ユニットの総数 V/λ がNに相当する.
このような n でミクロ状態が指定される,というだけであれば,実は十分に一般的であり,なんら簡略化とは言えない.(たとえば,有限体積の量子系であれば,常にそれが可能である.)そこで,エネルギーについて大胆な近似をする.それは,エネルギーが単純に,
$$\displaystyle E_n = \sum_j \epsilon_j (n_j)$$
のように,各jに付随した何らかの形のエネルギー $$\epsilon_j$$ の和になっており,しかもその $$\epsilon_j$$ は $$n_j$$だけの関数 $$\epsilon_j(n_j)$$である( $$j' \ne j$$ であるような $$n_{j'} $$ には依存しない)としてしまうのだ.これは物理的には,''j が異なる部分の間には,いっさい相互作用が働かない''(無視する),と言っていることになる.
このような近似の下では,
$$\displaystyle Z = \sum_n e^{-\beta E_n} = \sum_{n_1} \sum_{n_2} \cdots \sum_{n_N} e^{- \beta \{ \epsilon_1(n_1) + \epsilon_2(n_2) + \cdots \epsilon_N(n_N) \} } $$
$$\displaystyle = \{ \sum_{n_1} e^{- \beta \epsilon_1(n_1) } \} \{ \sum_{n_2} e^{- \beta \epsilon_2(n_2) } \} \cdots \{ \sum_{n_N} e^{- \beta \epsilon_N(n_N) } \}$$
となるので ^^7^^ ,
$$\displaystyle z_j \equiv \sum_{n_j} e^{- \beta \epsilon_j(n_j) } $$
とおくと,
$$\displaystyle Z = \prod_j z_j, \ln{Z} = \sum_j \ln{z_j} $$
という計算公式を得る.zjは,各jごとに計算できるので,いわば,「各jごとの分配関数」とでもみなせるような量である.系の分配関数Zは,単純にそれらの積になるというのである.特に,z1=z2=... (≡ z)であるような場合には,
$$Z = z^N, \ln{Z} = N \ln{z} $$
という極めて簡単な公式になる.ただし,気体のとき(後述のように,njは各正準変数に対応する)のように,nが異なるのに同じ状態があるときには,それを考慮せずに計算した上記のZを,その重複数M(気体ではM=N!)で割り算する必要がある.たとえば(7.55)は,
$$Z = \dfrac{1}{M^z} z^N, \ln{Z} = N \ln{z} - \ln{M}$$
と修正される.
^^6 モデルの簡略化という大胆な近似を行った後はその後の計算は厳密に遂行できる,ということであり,現実の物理系に対しては,もちろん大胆な近似にすぎない.^^
<<<
---
以下の部分の参考・引用: http://www.chem.konan-u.ac.jp/PCSI/web_material/Pchem/Web/Web_Page_90.pdf
! 分配関数 Q vs 分子分配関数 q
$$\displaystyle Q = \sum_i e^{-\beta E_i} = e^{-\beta E_1} + e^{-\beta E_2} + \cdots $$
$$= e^{-\beta (\epsilon^{mol1}_{1} + \epsilon^{mol2}_{1} + \cdots + \epsilon^{molN}_{1})} + e^{-\beta (\epsilon^{mol1}_{2} + \epsilon^{mol2}_{2} + \cdots + \epsilon^{molN}_{2})} + \cdots$$
$$= [ e^{-\beta \epsilon^{mol1}_{1}} + e^{-\beta \epsilon^{mol1}_{2}} + \cdots] [ e^{-\beta \epsilon^{mol2}_{1}} + e^{-\beta \epsilon^{mol2}_{2}} + \cdots] \cdots [ e^{-\beta \epsilon^{molN}_{1}} + e^{-\beta \epsilon^{molN}_{2}} + \cdots] $$
$$\displaystyle = \left[ \sum_i e^{-\beta \epsilon^{mol1}_{i}} \right] \left[ \sum_i e^{-\beta \epsilon^{mol2}_{i}} \right] \cdots \left[ \sum_i e^{-\beta \epsilon^{molN}_{i}} \right] = q^N$$
---
https://www.toyota-ti.ac.jp/Lab/Zairyo/QIL-Website/SM-HO130504-C3.pdf
{{{
#!/bin/sh
DIR1=`echo "$1" | sed -e 's/\/$//'`
DIR2=`echo "$2" | sed -e 's/\/$//'`
if [ -d "$DIR1" -a -d "$DIR2" ]; then
FILES=`echo "$DIR1" | sed -e 's/$/\/\*/'`
for FILE in ${FILES}
do
cat $FILE | tr -d "\15" | diff - "${DIR2}/${FILE}"
done
fi
}}}
もう少しよい手がありそうですが...
というか、これでほんとに動く?
! 平均自由行程 (Mean free path)
気体分子運動論において、分子や電子などの粒子が、散乱源(同じ粒子の場合もあれば、異なる粒子の場合もある)による散乱(衝突)で妨害されること無く進むことのできる距離(これを自由行程という)の平均値のことを言う。粒子が平均自由行程だけ運動すると、平均として必ず他の粒子と1回衝突する。
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! 式での表現
```
前提として、
・気体は熱的に平衡であり、
・気体は充分希薄である
ものとします。後者はいくつかの意味を持っており、例えば、理想気体の状態方程式が成り立つとか、3重衝突と見なされるような衝突は起きないとか、あるいは、Dulong-Petitの法則(補足) で述べたように、量子力学的な効果は無視できるとかです。
```
[[Vacuum Technology (Takagi Ikuji)|http://www.nucleng.kyoto-u.ac.jp/people/ikuji/edu/vac/app-A/mfp.html]]
設定する仮定や前提条件によっていくつかの異なる表現方法があるが、 速度分布がマクスウェル分布に従うと仮定した場合の平均自由行程は、次のようになる。
$$\lambda = \dfrac{1}{n \sigma \sqrt{2}} $$
* n: 粒子密度 (number of molecules per unit volume)
* σ: 散乱時の有効断面積 (Effective cross-sectional area for collision)
** $$\sigma = 4 \pi r^2 = \pi d^2$$
** r: 分子の半径
** d: 分子の直径
- - - - -
!!! 理想気体の場合:
''理想気体の状態方程式'' $$n = N/V = p/ (k_B T)$$ を用いると、平均自由行程の式は次のように変形することができる。
$$\lambda = \dfrac{1}{n \sigma \sqrt{2}} = \dfrac{k_B T}{p \sigma \sqrt{2}} = \dfrac{k_B T}{p \pi d^2 \sqrt{2}}$$
!!! 気体分子が hard sphere の場合:
```
In practice, the diameter of gas molecules is not well defined. In fact, the kinetic diameter of a molecule is defined in terms of the mean free path. Typically, gas molecules do not behave like hard spheres, but rather attract each other at larger distances and repel each other at shorter distances, as can be described with a Lennard-Jones potential. One way to deal with such "soft" molecules is to use the Lennard-Jones σ parameter as the diameter. Another way is to assume a hard-sphere gas that has the same viscosity as the actual gas being considered. This leads to a mean free path
```
https://en.wikipedia.org/wiki/Mean_free_path
$$\lambda = \dfrac{\mu}{p} \sqrt{\dfrac{\pi k_B T}{2m}} $$
where m is the molecular mass, and μ is the viscosity.
---
! シンプルに考えた場合
!! 仮定または条件
```
以下の仮定または条件を設けます。
・気体は1種類の分子から成っている。
・気体分子は半径rの剛体球である。
・ある分子1個のみが一定の速さvで運動し、他の分子は静止している。
最初の項目は条件ですが、2項目は仮定であり、例えば2原子分子が球体であるとは想像し難いですし、電子を纏っている原子が堅い殻であるはずがありませんが(注1)、よい近似で成り立っていると考えることにします。最後の仮定は導出を簡単にするために設けたものです。
```
[[Vacuum Technology (Takagi Ikuji)|http://www.nucleng.kyoto-u.ac.jp/people/ikuji/edu/vac/app-A/mfp.html]]
!! 平均自由行程
$$\lambda = v t$$ 【式1】
* λ: 平均自由行程 (ある衝突から次の衝突までの飛行距離の平均値)
* t: 平均自由時間 (ある衝突から次の衝突までの時間の平均値)
* v: 分子の速さ
!! 全散乱断面積
```
速さ v で運動している分子が他の静止している(とここでは考えている)分子と衝突するのは、球の中心から 2r の範囲内にいる場合に限られます。つまり、運動している分子は半径 2r の大きさを持ち、他の分子は点と考えてもよいことになります。そこで、運動している分子の幾何学的な断面積 σ は、
```
$$\sigma = 4 \pi r^2 $$ 【式2】
```
と表されます。分子の衝突は、その運動方向を変えることから散乱とも言えますので、σ を全散乱断面積と呼びます(注3)。「全」は、散乱後の方向を問わない(全ての散乱方向の総和を表す)ことを意味しています。
```
!! 分子の密度
```
運動している分子は、断面積 σ を持って λ(=vτ) だけ進む間に、平均して他の分子1個と衝突することになりますから、σvτは1つの分子が空間に占める体積の平均値を表します。
```
分子の密度を n とすると、
$$n = \dfrac{1}{\sigma v t}$$ 【式3】
となるので、これを【式1】に代入すると、
$$\lambda = \dfrac{1}{n \sigma} $$ 【式4】
という関係が得らえる。
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
! 全ての分子が運動している場合
```
もう少し現実的に取り扱うために、全ての分子が速度 v で運動していると考えると、条件は以下のようになります。
・気体は1種類の分子から成っている。
・気体分子は半径rの剛体球である。
・気体分子は一定の速さvで運動している。
この場合でも(1)式は成り立ちますが、(3)式中の v は、分子どうしの相対的な速さの平均値 u に置き換えなければなりません。
```
2つの分子の相対速度を $$V$$とすると、余弦定理より、
$$V^2 = v^2 + {v'}^2 - 2 v {v'} cos \theta $$
と表せる。
```
ここで、両辺の平均を取ると左辺は u2 です。また、v と v' のなす角 θは全くランダムですから、cosθの平均値は 0 となります。条件より分子の速さ v は一定ですから、右辺第1項と第2項は共にv^2 です。従って、与式は u^2 = 2v^2 となりますので、(3)式は
```
$$n = \dfrac{1}{\sigma t v \sqrt{2}}$$ 【式5】
と書き換えられ、平均自由行程は、
$$\lambda = \dfrac{1}{\sqrt{2} n \sigma} $$ 【式6】
となる。
---
! 速度分布がマクスウェル分布である場合
```
分子の速さは一定では無く、その速度分布がマクスウェル分布であると考えれば、かなり現実的な解が得られます。条件は以下のようになります。
・気体は1種類の分子から成っている。
・気体分子は半径rの剛体球である。
・気体分子の速度分布はマクスウェル分布である。
この場合、(1)式の v は分子の速さの平均値 v に、(5)式の21/2v はマクスウェル分布を持つ分子どうしの相対的な速さの平均値 u に置き換えなければなりません。 v は付録A-1で述べたように、(8kT/πm)1/2 です(kはボルツマン定数を、mは分子の質量を表す)。一方、u を数学的に求めることは少々面倒です。最も簡単なのは、速さの平均値の2乗と速さの2乗の平均値との違いを無視することで、ただちに u2 = 2v2 が得られます。実際には違いを無視することはできませんが、u に関する違いと v に関する違いがキャンセルして、結果としては u = 21/2v となります(注4)。従って、平均自由行程は、速さが一定と仮定して導いた(6)式と同じ形になります。
```
http://www.nucleng.kyoto-u.ac.jp/people/ikuji/edu/vac/app-A/mfp.html
* https://www1.doshisha.ac.jp/~bukka/lecture/statistic/pdftext/std-03.pdf
---
! 2種類の分子から成る気体の場合
```
条件は以下のようになります。ただし3番目の条件については、気体分子の速さ va、vb が一定と考えても差し支えないことは上の説明と同じです。
・気体は2種類の分子a,bから成っている。
・気体分子は半径ra,rbの剛体球である。
・気体分子の速度分布はマクスウェル分布である。
```
気体分子 a に着目すると、【式1】は
$$\lambda_a = v_a t $$
となる。
ここで、気体分子 a, b それぞれに対する相対速度は、
* $$v_a \sqrt{2}$$
* $$\sqrt{v_a^2 + v_b^2}$$
であり、分子が1種類の場合は【式3】より $$t = \dfrac{1}{\sigma v n}$$ であることから、相対的な速さを考慮した場合の衝突頻度は、 $$\sigma_a n_a v_a \sqrt{2} + \sigma_b n_b \sqrt{v_a^2 + v_b^2}$$ となる(分子aとの衝突頻度と分子bとの衝突頻度の和)。これより平均自由時間τは、
$$t = \dfrac{1}{\sigma_a n_a v_a \sqrt{2} + \sigma_b n_b \sqrt{v_a^2 + v_b^2}}$$
* $$\sigma_a = 4 \pi r_a^2$$
* $$\sigma_b = \pi (r_a + r_b)^2$$
と表され、平均自由行程は、
$$\lambda_a = v_a t = \dfrac{v_a }{\sigma_a n_a v_a \sqrt{2} + \sigma_b n_b \sqrt{v_a^2 + v_b^2}}$$
となる。さらに、分子の速さは熱平衡においては質量 m の平方根に逆比例することから、
$$\lambda_a = \dfrac{1}{\sigma_a n_a \sqrt{2} + \sigma_b n_b \sqrt{1 + \dfrac{m_a}{m_b}}}$$
と変形することもできる。
```
気体分子 b についても同様に導くことができますから、(12)式において、添え字 a と b を全て入れ替えればλb を表す式になります。
```
---
!衝突断面積
```
速度vの入射粒子(projectile)Aが、静止している標的粒子(target)Bに衝突する。粒子の半径はra, rbとし、共に剛体球と仮定する。衝突径数(impact parameter)をbとすると、b?(ra+rb)であれば必ず衝突するが、b >(ra+rb)のときは衝突しない。故に、衝突するかしないかということに関する限り、大きさを持たない質点が半径(ra+rb)の球と衝突するのと同じ。つまりこの質点にとっては、標的は、
σ=π(ra+rb)2
の断面積を持つ。σを衝突断面積と呼ぶ。粒子Aが標的Bの気体の中を長さlだけ動くとき、衝突の起こる回数は(衝突しても素通りするものとして)、σlの体積の円筒内に含まれるBの数、σln、に等しい(nは単位体積(cm3)中のBの個数密度)。
```
http://www.nucleng.kyoto-u.ac.jp/People/Itoh/3.pdf より
! 平均値の種類
!! 相加平均 (算術平均)
:$$\displaystyle \dfrac{1}{n} \sum_{i=1}^n a_i = \dfrac{a_1 + a_2 + \ldots + a_n}{n} $$
!! 相乗平均 (幾何平均)
:$$\displaystyle \left( \prod_{i=1}^n a_i \right)^{1/n} = (a_1 \cdot a_2 \cdot \ldots \cdot \cdot a_n)^{1/n} $$
!! 調和平均
:$$\displaystyle \dfrac{n}{\sum_{i=1}^n \frac{1}{a_i}} = \dfrac{n}{\frac{1}{a_1} + \frac{1}{a_2} + \cdots + \frac{1}{a_n}}$$
!! 対数平均
指数関数では、区間の両端の値の対数平均が、面積平均になる。
:$$\displaystyle \dfrac{a - b}{\ln a - \ln b} = \dfrac{a - b}{\ln( a / b )}$$
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
! その他
!! 加重平均
各データに重み w,,n,, をつけて平均をとることもある。
:$$\displaystyle \dfrac{1}{n} \sum_{i=1}^n w_i a_i = \dfrac{w_1 a_1 + w_2 a_2 + \ldots + w_n a_n}{n} $$
ちなみに、期待値は、確率変数の値 a,,n,, が w,,n,, の確率で観測される離散分布における加重平均、と考えることもできる。
: $$\displaystyle E = \dfrac{1}{n} \sum_{i=1}^n w(a_i) \cdot a_i = \dfrac{1}{n} \sum_{i=1}^n w_i \cdot a_i$$
: $$\displaystyle \sum_{i=1}^n w_i = 1$$
!! 連続分布の相加平均 (算術平均)
連続分布の相加平均は積分を用いて定義される。
:$$\displaystyle \dfrac{1}{b-a} \int_a^b x(t) dt $$
なお、期待値は、次のような加重平均だと考えることができる。
:$$\displaystyle \dfrac{1}{b-a} \int_a^b t \cdot x(t) dt $$
----
! 算術平均と幾何平均の関係
算術平均と幾何平均の間には、以下の関係がある $$( \exp[x]=e^x)$$。
:$$\displaystyle \left( \prod_{i=1}^n a_i \right)^\frac{1}{n} = \exp \left[ \dfrac{1}{n} \sum_{i=1}^n \log(a_i) \right]$$
また、両辺の対数をとると、
:$$\displaystyle \dfrac{1}{n} \log \left( \prod_{i=1}^n a_i \right) = \dfrac{1}{n} \sum_{i=1}^n \log(a_i)$$
となる。
! 壁法則 (Law of the wall)
乱流境界層内の壁に比較的近いところで成り立つ法則。
より正確に言うと、乱流境界層の ''粘性底層 ~ 対数領域'' で成り立つ法則である。
# 粘性底層
# バッファー層
# 対数領域 (慣性底層)
# Wake layer
[[レイノルズ平均ナビエ・ストークス方程式]] をベースにしているので、定常状態でしか使えない点には注意。
通常、無次元化した壁からの距離 (y+) と無次元化した主流方向の速度 (u+) を用いて表される。
- - - - -
主流方向を x, 壁に鉛直な方向を y とし、それぞれの方向の平均速度を U, V とする。
粘性の長さスケール(δ,,v,,)で無次元化した壁からの距離 (y+) と無次元化した主流方向の速度 (u+) を、摩擦速度 (u*) と動粘性 () を用いて、次のように定義する。
: $$y^+ = \dfrac{y}{\delta_v} = \dfrac{y u_*}{\nu} \ , \ \ u^+ = \dfrac{U}{u_*} \ \ \ \ $$ 【式1】
このとき、粘性底層 と 対数領域 において、次のことが成り立つ。
!! 粘性底層
: $$u^+ = y^+ \ \ \ \ \ (y^+ < 5) \ \ \ \ \ \ $$ 【式2】
!! 対数領域
: $$u^+ = \dfrac{1}{\kappa} \ln{y^+} + C^+ \ \ \ \ \ \ $$ 【式3】
式3中の $$\kappa$$ は ''カルマン定数 (Von Kármán constant)''。
---
! ざっくりとした導出
乱れ速度の x軸, y軸 方向の成分を、 u, v とする。
Shear stress is sum of viscous stress and Reynolds stress:
:$$\tau_{xy} = \mu \dfrac{\partial U}{\partial y} - \rho \overline{u v}$$
Near the wall, the shear stress is almost same as the wall shear stress:
:$$\tau_w \approx \tau_{xy} $$
In the region very close to the wall, called ''viscous sublayer'', the Reynolds becomes much smaller than the viscous stress:
:$$\tau_w \approx \tau_{xy} \approx \mu \dfrac{\partial U}{\partial y}$$
After arranging this relation, it is integrated with respect to y:
: $$U(y) = \dfrac{\tau_w}{\mu} y + C = \dfrac{{u_*}^2}{\nu} y + C$$
where v* is friction velocity. As U = 0 at y = 0, C becomes 0:
: $$U(y) = \dfrac{{u_*}^2}{\nu} y \ \ \ \ \ \ $$ 【式4】
Meanwhile, the viscous stress can be ignored except for the viscous sublayer. Applying the mixing length model (l = κy), following relation is obtained.
:$$\tau_w \approx \tau_{xy} \approx - \rho \overline{u v} \approx \rho l^2 \left( \dfrac{\partial U}{\partial y} \right)^2 = \rho {\kappa}^2 y^2 \left( \dfrac{\partial U}{\partial y} \right)^2$$
From this relation, the shear rate can be expressed with ''friction velocity'':
:$$ \dfrac{\partial U}{\partial y} = \sqrt{\dfrac{\tau_w}{\rho}} \dfrac{1}{\kappa y} = \dfrac{v_*}{\kappa y}$$
Integrating above equation, an equation with respect to y is obtained:
: $$U(y) = \dfrac{v_*}{\kappa} \ln{y} + C \ \ \ \ \ \ $$
This can be transformed as following:
: $$\dfrac{U(y)}{v_*} = \dfrac{1}{\kappa} \ln{ \dfrac{v_* y}{\nu}} + C - \ln{ \dfrac{v_*}{\nu}} \ \ \ \ \ \ $$ 【式5】
It is noted that this equation is only valid in the region where $$\tau_w \approx \tau$$, and this region is usually called ''log-law region''.
そして、式4,5を、式1を使って変数を置き換えると、式2,3 が得られる。
; 公式1 (相反の公式)
$$ \left( \dfrac{\partial x}{\partial y} \right)_z \left( \dfrac{\partial y}{\partial x} \right)_z = 1 $$
; 公式2
$$ \left( \dfrac{\partial z}{\partial x} \right)_t = \left( \dfrac{\partial z}{\partial x} \right)_y + \left( \dfrac{\partial z}{\partial y} \right)_x \left( \dfrac{\partial y}{\partial x} \right)_t $$
; 公式3
$$ \left( \dfrac{\partial y}{\partial z} \right)_x = \left( \dfrac{\partial y}{\partial t} \right)_x \left( \dfrac{\partial t}{\partial z} \right)_x $$
; 循環の公式
$$ \left( \dfrac{\partial x}{\partial y} \right)_z \left( \dfrac{\partial y}{\partial z} \right)_x \left( \dfrac{\partial z}{\partial x} \right)_y = -1 $$
- - - - -
----
! ざっくりした証明
; 公式1 (相反の公式)
$$y = f(x,z), \ x = g(y,z)$$ とする。
$$z$$ を固定した時に $$x = g(y, z_0) = f^{-1}(y, z_0)$$ が成り立つ場合、[[逆関数の微分法]] から
:$$\dfrac{d}{dy} f^{-1}(y) = \dfrac{1}{f'(x)}$$
なので、$$ \left( \dfrac{\partial x}{\partial y} \right)_z \left( \dfrac{\partial y}{\partial x} \right)_z = 1 $$ が得られる。
; 公式2
$$z(x(s,t), y(s,t))$$ という、[[2変数関数に2変数関数を合成する場合|偏微分の合成関数]]を考える。
$$\ \ \ \ \ \ \left( \dfrac{\partial z}{\partial s} \right)_t = \left( \dfrac{\partial z}{\partial x} \right)_{y} \left( \dfrac{\partial x}{\partial s} \right)_t + \left( \dfrac{\partial z}{\partial y} \right)_{x} \left( \dfrac{\partial y}{\partial s} \right)_{t}$$
ここで s = x とすると、式が得られる。
$$\ \ \ \ \ \ \left( \dfrac{\partial z}{\partial x} \right)_t = \left( \dfrac{\partial z}{\partial x} \right)_{y} \left( \dfrac{\partial x}{\partial x} \right)_t + \left( \dfrac{\partial z}{\partial y} \right)_{x} \left( \dfrac{\partial y}{\partial x} \right)_{t} = \left( \dfrac{\partial z}{\partial x} \right)_{y} + \left( \dfrac{\partial z}{\partial y} \right)_{x} \left( \dfrac{\partial y}{\partial x} \right)_{t} $$
; 公式3
さらに t = z とすれば、式が得られる。
$$\ \ \ \ \ \ \left( \dfrac{\partial z}{\partial x} \right)_z = \left( \dfrac{\partial z}{\partial x} \right)_{y} + \left( \dfrac{\partial z}{\partial y} \right)_{x} \left( \dfrac{\partial y}{\partial x} \right)_{z} $$
$$\ \ \ \ \ \ 0 = \left( \dfrac{\partial z}{\partial x} \right)_{y} + \left( \dfrac{\partial z}{\partial y} \right)_{x} \left( \dfrac{\partial y}{\partial x} \right)_{z} $$
https://chem.libretexts.org/Bookshelves/Physical_and_Theoretical_Chemistry_Textbook_Maps/Thermodynamics_and_Chemical_Equilibrium_(Ellgen)/07%3A_State_Functions_and_The_First_Law/7.06%3A_The_Chain_Rule_and_the_Divide-through_Rule
----
$$dy(t, x) = \left( \dfrac{\partial y}{\partial t} \right)_x dt + \left( \dfrac{\partial y}{\partial x} \right)_t dx$$
$$dt(x, z) = \left( \dfrac{\partial t}{\partial x} \right)_z dx + \left( \dfrac{\partial t}{\partial z} \right)_x dz$$
- - - - -
$$dy(t(x,z), x) = \left( \dfrac{\partial y}{\partial t} \right)_x \{ \left( \dfrac{\partial t}{\partial x} \right)_z dx + \left( \dfrac{\partial t}{\partial z} \right)_x dz \} + \left( \dfrac{\partial y}{\partial x} \right)_t dx = \{ \left( \dfrac{\partial y}{\partial x} \right)_t + \left( \dfrac{\partial y}{\partial t} \right)_x \left( \dfrac{\partial t}{\partial x} \right)_z \} dx + \left( \dfrac{\partial y}{\partial t} \right)_x \left( \dfrac{\partial t}{\partial z} \right)_x dz$$
<<tag "偏微分">>
二つ以上の変数の関数において、一つの変数のみを変動させて、その変数に関して微分することを偏微分という。
例えば、 $$z =(x,y)$$ とするとき
$$\dfrac{\partial z(x,y)}{\partial x} = \displaystyle \lim_{\Delta x \to 0} \dfrac{f(x + \Delta x, y) - f(x, y)}{\Delta x}$$ ,
$$\dfrac{\partial z(x,y)}{\partial y} = \displaystyle \lim_{\Delta y \to 0} \dfrac{f(x, y + \Delta y) - f(x, y)}{\Delta y}$$ 。
---
! 合成関数
[[偏微分の合成関数]] は、一変数の場合と比べて、話が複雑になる。
- - - - - - - - - - - - - - - - - - - -
!! 方向微分
偏微分はいずれかの座標軸方向に対して行うが、任意の方向での偏微分を考えることも可能である。この任意の方向の偏微分のことを [[方向微分]] という。
---
----
* [[多変数関数 |http://nkiso.u-tokai.ac.jp/math/matsuda/webmath/patdiff_txt/s1_1.htm ]]
* [[Amazon.co.jp: 偏微分方程式―科学者・技術者のための使い方と解き方: スタンリー ファーロウ, Stanley J. Farlow, 伊理 正夫, 伊理 由美: 本 |http://www.amazon.co.jp/%E5%81%8F%E5%BE%AE%E5%88%86%E6%96%B9%E7%A8%8B%E5%BC%8F%E2%80%95%E7%A7%91%E5%AD%A6%E8%80%85%E3%83%BB%E6%8A%80%E8%A1%93%E8%80%85%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9%E3%81%A8%E8%A7%A3%E3%81%8D%E6%96%B9-%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%AA%E3%83%BC-%E3%83%95%E3%82%A1%E3%83%BC%E3%83%AD%E3%82%A6/dp/4254110715 ]]
;ナブラ
スカラ関数 ''φ(x, y, z)'' ・ ベクトル関数 ''A(x, y, z)'' とすると...
* ''勾配 (gradient)''
** gradφ = ∇φ = ∂φ/∂x・i + ∂φ/∂y・j + ∂φ/∂z ・k
* ''発散 (divergence)''
** divA = ∇A = ∂Ax/∂x + ∂Ay/∂y + ∂Az/∂z
*** ∂Ax/∂x は、Aのx成分をxで偏微分するということなのか?
! 概要
; 1変数関数に1変数関数を合成
$$f\circ \xi : \mathbb{R} \stackrel{\xi}{\to} \mathbb{R} \stackrel{f}{\to} \mathbb{R} $$
$$\ \ \ \ \ \ \dfrac{\partial f}{\partial s} = \dfrac{\partial f}{\partial \xi} \dfrac{\partial \xi}{\partial s}$$
; 1変数関数に2変数関数を合成する場合
$$ f \circ \xi : \mathbb{R}^2 \stackrel{\xi}{\to} \mathbb{R} \stackrel{f}{\to} \mathbb{R} $$
$$\ \ \ \ \ \ \dfrac{\partial f}{\partial s} = \dfrac{\partial f}{\partial \xi} \dfrac{\partial \xi}{\partial s}$$
$$\ \ \ \ \ \ \dfrac{\partial f}{\partial t} = \dfrac{\partial f}{\partial \xi} \dfrac{\partial \xi}{\partial t}$$
; 2変数関数に1変数関数を合成する場合
$$\phi(\xi(s), \eta(s))$$
$$\ \ \ \ \ \ \dfrac{\partial \phi}{\partial s} = \left( \dfrac{\partial \phi}{\partial \xi} \right)_{\eta} \dfrac{\partial \xi}{\partial s} + \left( \dfrac{\partial \phi}{\partial \eta} \right)_{\xi} \dfrac{\partial \eta}{\partial s}$$
; 2変数関数に2変数関数を合成する場合
$$ \phi (s,t) = f(\xi(s,t),\eta(s,t)) $$
$$\ \ \ \ \ \ \left( \dfrac{\partial \phi}{\partial s} \right)_t = \left( \dfrac{\partial \phi}{\partial \xi} \right)_{\eta} \left( \dfrac{\partial \xi}{\partial s} \right)_t + \left( \dfrac{\partial \phi}{\partial \eta} \right)_{\xi} \left( \dfrac{\partial \eta}{\partial s} \right)_{t}$$
$$\ \ \ \ \ \ \dfrac{\partial \phi}{\partial t} = \dfrac{\partial \phi}{\partial \xi} \dfrac{\partial \xi}{\partial t} + \dfrac{\partial \phi}{\partial \eta} \dfrac{\partial \eta}{\partial t}$$
----
! 1変数関数に1変数関数を合成する場合
まず、1変数関数 $$f(x)$$ に 1変数関数 $$\xi(s)$$ を合成した関数を、$$f \circ \xi (s)$$ と表すこととする。
$$\ \ \ \ f \circ \xi (s) = f(\xi(s))$$
イメージとしては、
$$\ \ \ \ s \rightarrow \left[ \xi \right] \rightarrow \xi(s) \rightarrow \left[ f \right] \rightarrow f(\xi(s)) $$
といった感じ。対応関係としては、以下のようになる。
$$\ \ \ \ f \circ \xi : \mathbb{R} \stackrel{\xi}{\to} \mathbb{R} \stackrel{f}{\to} \mathbb{R} $$
- - - - -
この場合は、次のようになる $$(x = \xi(s))$$ 。
$$ \dfrac{d ( f \circ \xi)}{ds} (s) = \dfrac{df}{dx} (\xi(s)) \cdot \dfrac{d\xi}{ds}(s) $$
なお、変数を省略した場合は、次のように書ける。
$$(f \circ \xi)' = (f' \circ \xi) \cdot \xi' $$
---
! 1変数関数に2変数関数を合成する場合
次に、1変数関数 $$f(x)$$ に 2変数関数 $$\xi(s,t)$$ を合成した関数について考える。
$$ f \circ \xi (s,t) = f(x) = f(\xi(s,t)) $$
写像としては、以下のような関係になる。
$$ f \circ \xi : \mathbb{R}^2 \stackrel{\xi}{\to} \mathbb{R} \stackrel{f}{\to} \mathbb{R} $$
- - - - -
この場合は2変数になるので、偏微分を使って、
$$ \dfrac{\partial (f \circ \xi)}{\partial s} (s,t) = \dfrac{d f}{d x} (\xi(s,t)) \cdot \dfrac{\partial \xi}{\partial s} (s,t) $$
$$ \dfrac{\partial (f \circ \xi)}{\partial t} (s,t) = \dfrac{d f}{d x} (\xi(s,t)) \cdot \dfrac{\partial \xi}{\partial t} (s,t) $$
と計算できる。
変数を省略した場合は、次のように書ける。
$$(f \circ \xi)_s = (f' \circ \xi) \cdot \xi_s$$ $$(f \circ \xi)_t = (f' \circ \xi) \cdot \xi_t$$
----
! 2変数関数に1変数関数を合成する場合
今度は逆に、2変数関数 $$f(x,y)$$ に 1変数関数 $$\xi(s), \eta(s)$$ を合成した関数について考える。なお、合成関数は、
$$ \phi (s) = f(\xi(s),\eta(s)) $$
と表すこととし、
$$x = \xi(s), \ \ y = \eta(s)$$
とする。
- - - - -
この場合は、
$$ \dfrac{d\phi}{ds}(s) = \dfrac{\partial f}{\partial x}(\xi(s),\eta(s)) \cdot \dfrac{d\xi}{ds}(s) + \dfrac{\partial f}{\partial y}(\xi(s),\eta(s)) \cdot \dfrac{d\eta}{ds}(s) $$
と計算できる。変数を省略した表記は以下の通り。
$$\dfrac{d\phi}{ds} = \dfrac{\partial f}{\partial x} \cdot \dfrac{d\xi}{ds} + \dfrac{\partial f}{\partial y} \cdot \dfrac{d\eta}{ds} $$
----
! 2変数関数に2変数関数を合成する場合
$$ \phi (s,t) = f(\xi(s,t),\eta(s,t)) $$
$$ \dfrac{\partial \phi}{\partial s}(s,t) = \dfrac{\partial f}{\partial x}(\xi(s,t),\eta(s,t)) \cdot \dfrac{\partial \xi}{\partial s}(s,t) + \dfrac{\partial f}{\partial y}(\xi(s,t),\eta(s,t)) \cdot \dfrac{\partial \eta}{\partial s}(s,t) $$
$$ \dfrac{\partial \phi}{\partial t}(s,t) = \dfrac{\partial f}{\partial x}(\xi(s,t),\eta(s,t)) \cdot \dfrac{\partial \xi}{\partial t}(s,t) + \dfrac{\partial f}{\partial y}(\xi(s,t),\eta(s,t)) \cdot \dfrac{\partial \eta}{\partial t}(s,t) $$
---
! リファレンス
* [[多変数関数の微分|https://lecture.ecc.u-tokyo.ac.jp/~nkiyono/2005/i-07a.pdf]]
* [[ファンタジーに満ちた変形菌(粘菌)の世界へようこそ |http://www.paropunte.net/archives/736376.html]]
* [[コケの論理(ロジック)|http://sphagnum.chesuto.jp/]]
! 変分法 (Calculus of variations)
大雑把にいうと、下式のように定義された汎関数 I が、極値で満たすべき条件を求める方法。$$L$$ は $$x, f(x), f'(x), ....$$ などを変数に持つ関数であるが、具体的な定義は扱う問題によって異なる。
:$$\displaystyle I[f] = \int_{x_1}^{x_2} L dx$$
関数 L を適切に定義することで、物理の基本原理を簡潔に記述することができる。
; 汎関数
* 関数から実数への写像。
* もう少しざっくり言うと、関数を引数にとる関数。
** プログラミングでいう高階関数。
----
! 変分原理 (Variational principle)
(変分法の) L, f, x を上手く定義することで、物理の基本原理を簡潔に定義することが可能である。そして、変分法を用いて定義した基本原理を ''変分原理'' という。
以下に、その具体例を示す。なお、例によって、式中の変数の物理的意味は異なる点に注意。
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
!! オイラー・ラグランジュ方程式
[[オイラー・ラグランジュ方程式]] は、$$L(x, f(x), f'(x))$$ の時の、停留条件である。
:$$\displaystyle \left({\frac {\partial L}{\partial f}} - {\frac {d}{dx}}{\frac {\partial L}{\partial f'}}\right) = 0$$
物理では、シンボル $$f, x$$ の代わりに、時間と位置を意味する $$t, q$$ を使って、次の書かれることが多い。
:$$\displaystyle \left({\frac {\partial L}{\partial q}} - {\frac {d}{dt}}{\frac {\partial L}{\partial q'}}\right) = 0$$
なお、$$L$$ に [[ラグランジアン]] を用いると、
:$$L = \dfrac{1}{2} m {f'(x)}^2 - U(f(x))$$
ニュートンの運動方程式が得られる (m: 質量, x: 時間, f: 位置, U: ポテンシャル) 。
- - - - -
!! 二次元平面の上の二点を結ぶ線
二次元平面の上の二点を結ぶ最短の線を求めたい場合は、L を次のように定義すればよい。
:$$L = \sqrt{\left( \dfrac{d}{dx}x \right)^2 + \left( \dfrac{d}{dx}f \right)^2} = \sqrt{1 + f'(x)^2}$$
x, f は二次元上の座標の値と考えればよい。
- - - - -
!! フェルマーの原理
フェルマーの原理 (二点間を結ぶ光の経路は、その所要時間を最小にするものである) の場合は、L を次のように定義すればよい (n: 屈折率, )。
: $$L = n(x, y(x)) \sqrt{1 + f'(x)^2}$$
Snellの法則
- - - - -
!! ベルトラミの公式
!! 熱力学
* https://eman-physics.net/thermo/stability.html
- - - - -
その他のケースでも、満たすべき条件を計算できるケースがある。
* [[変分法2 [物理のかぎしっぽ]|http://hooktail.sub.jp/mathInPhys/variations2/index.html]]
- - - - -
----
----
* η: $$\eta(x_1) = \eta(x_2)$$ という条件を満たす1回以上微分可能な関数
汎関数 I において、x は決まっている値(変数ではない)ので、ここでは
大雑把に言うと、I の導関数が 0 になる条件について考えることで、L や y の具体的な形式を決めることができるケースがある。
より厳密にいうと、L がより多くの引数を持つ場合でも、扱えるケースがある。
! 定義
''x, v'' は同じベクトル空間に属するとし、f を ''x'' を引数に取る関数とする。f の ''u'' 方向の方向微分は、次のように定義される。
:$$\displaystyle \nabla_{\mathbf {u} }{f}(\mathbf {x} )=\lim_{h\rightarrow 0}{\frac {f(\mathbf {x} +h\mathbf {u} )-f(\mathbf {x} )}{h}} ~~~~~~ [1]$$
!! 表記方法
u方向の方向微分には、いくつかの表記方法がある。
:$$D_u f(\mathbf {x}) = \dfrac{\partial f(\mathbf {x})}{\partial u} = u \cdot \nabla f(\mathbf {x}) = \nabla_u f(\mathbf {x})$$
----
! 重要なポイント
!! 方向微分係数の値
方向微分係数は u の大きさ(絶対値)に依存するが、偏微分と同様に引数のベクトルの属する空間上の単位距離当たりの傾きが知りたい時は、u を単位ベクトル (|u| = 1) にすればよい。
また、関数が $$f(x(t), y(t))$$ のような合成写像として表せるようなケースでは、t の単位変化当たりの $$f$$ の傾きが知りたいようなケースがあるかもしれない (例としては、位置(x,y) が時間 (t) の関数にようなケース) 。このような場合には、
:$$u = (x(1), y(1))$$
として、方向微分係数を計算すれば、その傾きが求まる。
!! 偏微分との関係
偏微分は方向微分の特別なケースにあたる。
* $$u = (1, 0)$$ なら x による偏微分
* $$u = (0, 1)$$ なら y による偏微分
- - - - - - - - - - - - - - - - - - - -
!! [[grad]] とスカラー関数の方向微分
方向微分の定義の式 (Eq.1) は、u と grad の内積として表すことができる (詳細は後述)。
: $$\displaystyle D_u f(x,y) = (u \cdot \nabla f) ~~~~~~ [2] $$
つまり、''方向の微分が最大となるのは、u の向き(微分の方向)が grad(f) と一致する時である''。
; 補足
幾何学的に考えれば、u と ∇f の角度を θ とすると、|u| = 1 なので、次のようになる。
:$$D_u f(x,y) = (u \cdot \nabla f) = (|u| |\nabla f| \cos{\theta}) = |\nabla f| \cos{\theta} $$
- - - - - - - - - - - - - - - - - - - -
!! ベクトル関数の場合
ベクトル関数 $$\mathbf{F}: \mathbb{R}^m \to \mathbb{R}^n $$ の方向微分は、ヤコビ行列
と 方向を指定するベクトルの積として表すことができる ($$\mathbf{x}, \bm{u} \in \mathbb{R}^m$$)。
:$$\displaystyle D_u \mathbf{F}(\mathbf{x}) = \lim_{h \to 0} \dfrac{\mathbf{F}(\mathbf{x} + h \bm{u}) - \mathbf{F}(\mathbf{x})}{h} = \begin{pmatrix} \left( \dfrac{\partial \mathbf{F}}{\partial x_1} \right)_1& \ldots & \left( \dfrac{\partial \mathbf{F}}{\partial x_m} \right)_1\\ \\ \vdots & \ddots & \vdots \\ \\ \left( \dfrac{\partial \mathbf{F}}{\partial x_1}\right)_n & \ldots & \left( \dfrac{\partial \mathbf{F}}{\partial x_m} \right)_n \end{pmatrix} \begin{pmatrix} \Delta u_1 \\ \\ \vdots \\ \\ \Delta u_m \end{pmatrix} $$
----
! 詳細な説明
!! スカラー関数の場合
イメージを優先して、2変数のスカラー関数のケースについて書く。
<<<
関数 $$z = f(x,y)$$ 上の 点 $$(x_1, y_1)$$ において、あるベクトル $$u = (a, b)$$ を用いて表した
$$ \displaystyle \lim_{t \to 0} \dfrac{f(x_1 + ta, y_1 + tb) - f(x_1, y_1)}{t} $$
に極限値が存在する時、「''関数 z は 点 $$(x_1,y_1)$$ において方向微分可能''」であるという。また、この極限値を、「''関数 z の 点 $$(x_1,y_1)$$ におけるu方向微分係数''」という。
<<<
* https://lecture.ecc.u-tokyo.ac.jp/~nkiyono/2010/610-03.pdf
* https://lecture.ecc.u-tokyo.ac.jp/~nkiyono/2010/610-04.pdf
なお、定義から分かるように、同じ方向でも、u の大きさ(絶対値)によって方向微分係数は変化する。
<<<
変位とは、注目している点や値がはっきりしている場合、その注目点を始点とし他の点を終点とするベクトル、および注目している値を他の値から引いた差のことです。今の場合、独立変数の組が(a, b) である点に注目しているので、任意の独立変数の組(x, y) に対して、
$$ u = \begin{pmatrix} x - a \\ y - b \end{pmatrix} $$
のことを独立変数の組の変位ベクトルあるいは変位と言います。
...
さて、変位という言葉を使うと、前節の結論である「方向微分の値の意味」は注目している点 $$(a, b, f(a, b))$$ における接線において、(a, b) からの変位 $$u$$ である点におけるz 座標の変位 $$u$$ 方向微分の値 $$f_u(a, b)$$ である
と言い表すことができます。
<<<
https://lecture.ecc.u-tokyo.ac.jp/~nkiyono/2010/610-03.pdf
- - - - -
さらに、$$f(x + ta, y + tb)$$ を $$(x_1,y_1)$$ の周りでのテイラー展開を用いて表すと、
$$f(x_1 + ta, y_1 + tb) = f(x_1, y_1) + ta \left. \dfrac{\partial f}{\partial x} \right|_{(x,y)=(x_1,y_1)} + tb \left. \dfrac{\partial f}{\partial y} \right|_{(x,y)=(x_1,y_1)} + o(t)$$
となるため、方向微分係数の定義の式は、
$$\displaystyle \lim_{t \to 0} \dfrac{f(x_1 + ta, y_1 + tb) - f(x_1, y_1)}{t} = \lim_{t \to 0} \dfrac{ta \dfrac{\partial f}{\partial x} |_{(x,y)=(x_1,y_1)} + tb \dfrac{\partial f}{\partial y} |_{(x,y)=(x_1,y_1)} + o(t)}{t} = a \dfrac{\partial f}{\partial x} |_{(x,y)=(x_1,y_1)} + b \dfrac{\partial f}{\partial y} |_{(x,y)=(x_1,y_1)}$$
となる。よって、''直交座標であれば''、内積を用いて Eq.2 の形に変形できる。
$$\displaystyle \lim_{t \to 0} \dfrac{f(x_1 + ta, y_1 + tb) - f(x_1, y_1)}{t} = a \dfrac{\partial f(x_1, y_1)}{\partial x} + b \dfrac{\partial f(x_1, y_1)}{\partial y} = (a, b) \cdot \left(\dfrac{\partial f(x_1, y_1)}{\partial x}, \dfrac{\partial f(x_1, y_1)}{\partial y} \right) = (u \cdot \nabla f)$$
そして、u を単位ベクトル(大きさ一定)の場合を考えると、この式から、''方向の微分が最大となるのは、u の向き(微分の方向)が grad(f) と一致する時であることが分かる''。
- - - - - - - - - - - - - - - - - - - -
!! ベクトル関数の場合
ベクトル関数 $$\mathbf{F}: \mathbb{R}^m \to \mathbb{R}^n $$ の場合でも、同じようにテイラー展開することができる (式を書くのが楽なので m = 2, u = (a,b) とした)。
$$\mathbf{F}(x_1 + ta, y_1 + tb) = \mathbf{F}(x_1, y_1) + ta \left. \dfrac{\partial \mathbf{F}}{\partial x} \right|_{(x,y)=(x_1,y_1)} + tb \left. \dfrac{\partial \mathbf{F}}{\partial y} \right|_{(x,y)=(x_1,y_1)} + o(t)$$
よって、方向微分の定義は、
:$$\displaystyle D_u \mathbf{F}(\mathbf{x}) = \lim_{t \to 0} \dfrac{\mathbf{F}(\mathbf{x} + t \bm{u}) - \mathbf{F}(\mathbf {x})}{t} = a \dfrac{\partial \mathbf{F}}{\partial x} + b \dfrac{\partial \mathbf{F}}{\partial y} $$
と変形でき、この式は [[ヤコビ行列]] を用いて次のように表せる。
: $$ d \mathbf{F} = \begin{pmatrix} d \mathbf{F_1} \\ \\ \vdots \\ \\ d \mathbf{F_n} \end{pmatrix} = \begin{pmatrix} \left( \dfrac{\partial \mathbf{F}}{\partial x}\right)_1 & \left( \dfrac{\partial \mathbf{F}}{\partial y} \right)_1 \\ \\ \vdots & \vdots \\ \\ \left( \dfrac{\partial \mathbf{F}}{\partial x} \right)_n & \left( \dfrac{\partial \mathbf{F}}{\partial y} \right)_n \end{pmatrix} \begin{pmatrix} a \\ \\ b \end{pmatrix} $$
つまり、ベクトル関数の方向微分は、ヤコビ行列 と 方向を指定するベクトルの積として表すことができる。
(あんまり関係ないかもだが) https://qiita.com/wsuzume/items/204a3defa86dace3e4b1
---
* https://mathwords.net/hokobibun
; ガトー微分
* http://ogyahogya.hatenablog.com/entry/2018/08/29/%E3%82%AC%E3%83%88%E3%83%BC%E5%BE%AE%E5%88%86%E3%81%A8%E3%83%95%E3%83%AC%E3%83%83%E3%82%B7%E3%82%A7%E5%BE%AE%E5%88%86%EF%BC%9A%E6%96%B9%E5%90%91%E5%BE%AE%E5%88%86%E3%81%A8%E5%8B%BE%E9%85%8D%E3%81%AE
この先にある建物ごとに、番地が割り当てられているっぽい
* 4番地: 警視庁第一機動隊
* 5番地: 宮内庁代官町宿舎
* 6番地: 皇宮警察宿舎
[img[http://ssnsk.s326.xrea.com/storage/tiddly/kitanomaru_kouen.jpg]]
<<tag "本">>
! 未確認
<<tiddler "未確認の本">>
! 立ち読みした
<<tiddler "立ち読みした本">>
! 読みかけ
<<tiddler "読みかけの本">>
----
<<slider tocSlider 読んだ本 読んだ本>>
<<slider tocSlider プログラムの本 プログラムの本>>
* [[世界神秘学事典 (1981年): 荒俣 宏: 本|http://www.amazon.co.jp/%E4%B8%96%E7%95%8C%E7%A5%9E%E7%A7%98%E5%AD%A6%E4%BA%8B%E5%85%B8-1981%E5%B9%B4-%E8%8D%92%E4%BF%A3-%E5%AE%8F/dp/B000J7RWJG/ref=sr_1_1?ie=UTF8&s=books&qid=1286983039&sr=8-1]]
* [[キルヒャーの世界図鑑―よみがえる普遍の夢: ジョスリン・ゴドウィン, 川島 昭夫: 本|http://www.amazon.co.jp/%E3%82%AD%E3%83%AB%E3%83%92%E3%83%A3%E3%83%BC%E3%81%AE%E4%B8%96%E7%95%8C%E5%9B%B3%E9%91%91%E2%80%95%E3%82%88%E3%81%BF%E3%81%8C%E3%81%88%E3%82%8B%E6%99%AE%E9%81%8D%E3%81%AE%E5%A4%A2-%E3%82%B8%E3%83%A7%E3%82%B9%E3%83%AA%E3%83%B3%E3%83%BB%E3%82%B4%E3%83%89%E3%82%A6%E3%82%A3%E3%83%B3/dp/4875021151]]
* [[野生の思考: クロード・レヴィ・ストロース, 大橋 保夫: 本|http://www.amazon.co.jp/%E9%87%8E%E7%94%9F%E3%81%AE%E6%80%9D%E8%80%83-%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%89%E3%83%BB%E3%83%AC%E3%83%B4%E3%82%A3%E3%83%BB%E3%82%B9%E3%83%88%E3%83%AD%E3%83%BC%E3%82%B9/dp/4622019728/ref=sr_1_1?ie=UTF8&s=books&qid=1234281742&sr=8-1]]
* STUDIO VOICE 1994 12
** mother2のインタビューだけ要る
* [[大人の怪しい実験室: 川口友万: 本|http://www.amazon.co.jp/%E5%A4%A7%E4%BA%BA%E3%81%AE%E6%80%AA%E3%81%97%E3%81%84%E5%AE%9F%E9%A8%93%E5%AE%A4-%E5%B7%9D%E5%8F%A3%E5%8F%8B%E4%B8%87/dp/4781700306/ref=sr_1_1?ie=UTF8&s=books&qid=1257774335&sr=8-1]]
* [[街のポーカーフェイス: 阪東 勲|http://www.amazon.co.jp/%E8%A1%97%E3%81%AE%E3%83%9D%E3%83%BC%E3%82%AB%E3%83%BC%E3%83%95%E3%82%A7%E3%82%A4%E3%82%B9-%E9%98%AA%E6%9D%B1-%E5%8B%B2/dp/4900781177/ref=sr_1_1?ie=UTF8&s=books&qid=1262603830&sr=8-1]]
* [[森へ―ダリウス・キンゼイ写真集: D・ボーン, R・ペチェック, 田口 孝吉, ダリウス・キンゼイ: 本|http://www.amazon.co.jp/%E6%A3%AE%E3%81%B8%E2%80%95%E3%83%80%E3%83%AA%E3%82%A6%E3%82%B9%E3%83%BB%E3%82%AD%E3%83%B3%E3%82%BC%E3%82%A4%E5%86%99%E7%9C%9F%E9%9B%86-D%E3%83%BB%E3%83%9C%E3%83%BC%E3%83%B3/dp/4900358177]]
* [[Amazon.co.jp: 熱力学の計算法 (計算法シリーズ): 松村 篤躬, 越後 雅夫: 本|http://www.amazon.co.jp/gp/product/4501412801]]
* [[Amazon.co.jp: 伝熱学の基礎: 吉田 駿: 本|http://www.amazon.co.jp/%E4%BC%9D%E7%86%B1%E5%AD%A6%E3%81%AE%E5%9F%BA%E7%A4%8E-%E5%90%89%E7%94%B0-%E9%A7%BF/dp/4844527134/ref=pd_cp_b_3]]
* [[Amazon.co.jp: 熱・流体・空調の計算法 (機械計算法シリーズ): 越後 雅夫: 本|http://www.amazon.co.jp/%E7%86%B1%E3%83%BB%E6%B5%81%E4%BD%93%E3%83%BB%E7%A9%BA%E8%AA%BF%E3%81%AE%E8%A8%88%E7%AE%97%E6%B3%95-%E6%A9%9F%E6%A2%B0%E8%A8%88%E7%AE%97%E6%B3%95%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E8%B6%8A%E5%BE%8C-%E9%9B%85%E5%A4%AB/dp/4501414006/ref=pd_cp_b_1]]
* [[Amazon.co.jp: 流体力学 (物理テキストシリーズ 9): 今井 功: 本|http://www.amazon.co.jp/%E6%B5%81%E4%BD%93%E5%8A%9B%E5%AD%A6-%E7%89%A9%E7%90%86%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-9-%E4%BB%8A%E4%BA%95-%E5%8A%9F/dp/400007749X/ref=sr_1_1?ie=UTF8&qid=1294898443&sr=8-1]]
* [[Amazon.co.jp: Hydrodynamics: Horace Lamb: 洋書|http://www.amazon.co.jp/Hydrodynamics-Horace-Lamb/dp/0486602567/ref=pd_sim_fb_1]]
* L. D. Landau and E. M. Lifshitz,「Fluid Mechanics」
! 数式での表現
ある一つの平面からのみ熱が流入してくる、非常に大きな平板を考える。なお、平板内で生成する熱は 0 とする。
この場合、時間 ''t'' における位置 ''x'' の温度は、(誤差関数を使った) 以下の式で表せる (x は平板表面からの距離)。
$$ \dfrac{T(x,t) - T_s}{T_i - T_s} = \mathrm{erf} (\eta) $$ 【式1】
$$\eta(x,t) = \dfrac{x}{\sqrt{4 \alpha t}}$$ 、 $$\displaystyle \mathrm{erf}(\eta) = \dfrac{2}{\sqrt{\pi}} \int_0^\eta e^{-u^2} du $$
また、平板表面の Heat Flux は、次のように表せる。
$$q = \dfrac{k(T_s - T_i)}{\sqrt{\pi \alpha t}}$$ 【式2】
なお、「非常に大きな平板」と書いたが、流入してくる熱に対して、物体が十分に大きければ同様に考えることができる。
---
! 式の使い方
!! 1. 表面の温度が与えられた場合 (Ts = Constant)
【式1】の両辺に -1 を追加し、計算すると、
$$ \dfrac{T(x,t) - T_i}{T_i - T_s} = \mathrm{erf} (\eta) - 1$$
となる。さらに、両辺に -1 を掛けると、以下の式が得られる。
$$\dfrac{T(x,t) - T_i}{T_s - T_i} = 1 - \mathrm{erf} \left( \dfrac{x}{\sqrt{4 \alpha t}}\right) $$
!! 表面からの Heat Flux が与えられた場合
【式2】より $$(T_s - T_i) = \dfrac{q}{k \sqrt{\pi \alpha t}} $$ であり、これを【式1】に代入し、式変形すると、
$$ T(x,t) - T_s = (T_i - T_s) \mathrm{erf} (\eta) = \dfrac{q}{k \sqrt{\pi \alpha t}}\mathrm{erf} (\eta)
$$
---
! 基本的な条件
!! 1. 熱伝導方程式
$$\dfrac{\partial e_{gen}}{\partial t} = 0$$ なので、 [[熱伝導方程式]] は次のように書ける。
$$\left(\dfrac{\partial^2 T}{\partial x^2} \right)_t = \dfrac{\rho c}{k} \dfrac{\partial T}{\partial t} = \dfrac{1}{\alpha} \dfrac{\partial T}{\partial t}$$
* α: 熱拡散率 (α = k/ρc)
!! 2. 境界条件
表面の温度(Ts) と 無限遠の温度(Ti) を次のように定義する。
* $$T_s = T(0, t)$$
* $$T_i = T(x \to \infty,t) $$
!! 3. 初期条件
t = 0 における物体の温度は、全ての場所で Ti とする。
$$T(x,0) = T_i$$
---
! 計算
!! similarity variable の導入
ここで similarity variable と呼ばれる変数(η)を定義する。
$$\eta = \dfrac{x}{\sqrt{4 \alpha t}} $$
η の偏微分は、それぞれ
* $$ \dfrac{\partial \eta}{\partial x} = \dfrac{1}{\sqrt{4 \alpha t}}$$
* $$ \dfrac{\partial \eta}{\partial t} = \dfrac{x}{\sqrt{4 \alpha}} (- \dfrac{1}{2}) t^{-1.5} = - \dfrac{x}{4 \sqrt{\alpha}} t^{-1.5}$$
となる。
$$T = T(\eta)$$と仮定し、Chain Rule を使って、熱伝導方程式を次のように変形する。
$$ \dfrac{1}{4 \alpha t} \dfrac{\partial^2 T}{\partial \eta^2} = - \dfrac{1}{\alpha} \dfrac{x}{4 \sqrt{\alpha}} \dfrac{1}{t^{1.5}} \dfrac{\partial T}{\partial \eta}$$
$$ \dfrac{\partial^2 T}{\partial \eta^2} = - \dfrac{x}{\sqrt{\alpha t}} \dfrac{\partial T}{\partial \eta}$$
右辺の分母と分子に2 を掛けると、$$- \dfrac{2x}{\sqrt{4 \alpha t}} \dfrac{\partial T}{\partial \eta} = - 2 \eta \dfrac{\partial T}{\partial \eta}$$ となることから、
$$ \dfrac{\partial^2 T}{\partial \eta^2} = - 2 \eta \dfrac{\partial T}{\partial \eta}$$
が得られる。
- - - - -
!! Error function (誤差関数) の導入
$$w = \dfrac{\partial T}{\partial \eta} $$ とし、上の式に代入すると、 $$\dfrac{dw}{d \eta} = - 2 \eta w$$ が得られる。
これを変形し、積分すると、
$$\displaystyle \int \dfrac{dw}{w} = \int - 2 \eta d\eta $$
$$\ln w = - \eta^2 + C_0$$
$$w = e^{C_0} e^{-\tau^2} = C_1 e^{-\tau^2}$$
と計算できる。上の式で得られた $$w$$ を $$w = \dfrac{\partial T}{\partial \eta} $$ に代入し積分すると、
$$\displaystyle T = \int \dfrac{dT}{d \eta} d\eta = C_1 \int e^{-\eta^2} d \eta + C_2 $$
右辺の第一項は「誤差関数を微分した形」をしているので、
$$\displaystyle T = C_1 \int_0^\eta e^{-u^2} du + C_2$$ 【式☆】
となる。
- - - - -
$$x \to 0$$ のとき $$\eta \to 0$$ なので、境界条件 $$T_s = T(0, t)$$ より、
$$\displaystyle T_s = C_1 \int_0^0 e^{-u^2} du + C_2 = C_2$$
同様に、$$x \to \infty$$ のとき $$\eta \to \infty$$ なので、境界条件 $$T_i = T(x \to \infty,t)$$ より、
$$\displaystyle T_i = C_1 \int_0^\infty e^{-u^2} du + C_2 = C_1 \dfrac{\sqrt{\pi}}{2} + C_2$$
$$C_1 = \dfrac{2(T_i-T_s)}{\sqrt{\pi}}$$
最後に、求まった C1, C2 を【式☆】に代入し、
$$\displaystyle T = \dfrac{2(T_i-T_s)}{\sqrt{\pi}} \int_0^\eta e^{-u^2} du + T_s$$
式を整理すればよい。
$$\displaystyle \dfrac{T(x,t) - T_s}{T_i - T_s} = \dfrac{2}{\sqrt{\pi}} \int_0^\eta e^{-u^2} du $$
- - - - -
!! 平板表面の Heat Flux
フーリエの法則の式を、Chain rule を使って変形する。
$$q = - k \dfrac{\partial T}{\partial x}|_{x=0} = - k \dfrac{\partial T}{\partial \eta} \dfrac{\partial \eta}{\partial x}|_{\eta =0} = -k C_1 e^{-\eta^2} \dfrac{1}{\sqrt{4 \alpha t}}|_{\eta =0} = \dfrac{k(T_s - T_i)}{\sqrt{\pi \alpha t}}$$
---
! 指数関数の積分と誤差関数の関係
誤差関数の定義:
$$\displaystyle erf(x) = \dfrac{2}{\sqrt{\pi}} \int_0^x e^{-t^2} dt $$
誤差関数の微分:
$$\displaystyle \dfrac{d}{dx} erf(x) = \dfrac{2}{\sqrt{\pi}} e^{-x^2} $$
- - - - -
$$\int e^{- cx^2} dx = \sqrt{\dfrac{\pi}{4c}} erf(\sqrt{c} x)$$
* https://ja.wikipedia.org/wiki/%E6%8C%87%E6%95%B0%E9%96%A2%E6%95%B0%E3%81%AE%E5%8E%9F%E5%A7%8B%E9%96%A2%E6%95%B0%E3%81%AE%E4%B8%80%E8%A6%A7
* http://gachon.eri.u-tokyo.ac.jp/~hitosi/Lectures/komaba2017/PlateTectonics2017_02@Lecutre_erf.pdf
---
(「非常に大きな平板」と書いたが、流入してくる熱に対して、物体が十分に大きければ同様に考えることができる)
http://www.kz.tsukuba.ac.jp/~abe/ohp-heat/chapter4.pdf
! 力の比
!! Reynolds Number
慣性力 / 粘性力 $$Re = \dfrac{\rho L v}{\mu} $$
!! Weber Number
慣性力 / 表面張力 $$We = \dfrac{\rho L v^2}{\sigma}$$
!! Grashof Number
浮力 / 粘性力
''Heat transfer'': $$Gr = \dfrac{g\beta(T_s - T_{\infty})L^3}{\nu^2}$$ $$\beta = \dfrac{1}{V} \left( \dfrac{\partial V}{\partial T} \right)_p$$
''Mass transfer'': $$Gr = \dfrac{g\beta^*(c_s - c_{\infty})L^3}{\nu^2}$$ $$\beta^* = - \dfrac{1}{\rho} \left( \dfrac{\partial \rho}{\partial c} \right)_{T,p}$$
---
! 運動量・熱・質量の拡散の比
!! Prandtl Number
運動量 / 熱 $$Pr = \dfrac{\nu}{\alpha} = \dfrac{\mu/\rho}{k/(c_p \rho)} = \dfrac{\mu c_p}{k}$$
!! Schmidt Number
運動量 / 質量 $$Sc = \dfrac{\nu}{D_{AB}} = \dfrac{\mu}{\rho D_{AB}}$$
!! Lewis number
熱 / 質量 $$Le = \dfrac{\alpha}{D_{AB}} = \dfrac{k/(c_p\rho )}{D_{AB}} = \dfrac{k}{\rho c_p D_{AB}} $$
---
! 拡散と対流の比
!! Nusselt Number
(熱の) 対流 / 伝導 $$Nu = \dfrac{h}{k/L} = \dfrac{hL}{k}$$
!! Sherwood Number
(質量の) 対流 / 伝導 $$Sh = \dfrac{k_c}{D_{AB}/L} = \dfrac{k_c L}{D_{AB}}$$
---
! ほか
!! Péclet number
移流 / 拡散
''Heat Transfer'': $$Pe = Re Pr = \dfrac{\rho L v}{\mu} \dfrac{\nu}{\alpha} = \dfrac{Lv}{\alpha}$$
''Mass Transfer'': $$Pe = Re Sc = \dfrac{Lv}{D_{AB}}$$
---
|! |!パラメータ名 | !単位 | !備考 |
|ν |Kinematic Viscosity (動粘性) | m2/s | = μ/ρ |
|α |Thermal Diffusivity (熱拡散率) | m2/s | = k/(ρcp) |
|$$D_{AB}$$ |Diffusion Coefficient (拡散係数) | $$m^2/s$$ | |
| ||||
|k |Thermal Conductivity (熱伝導率) | W/m ||
|$$c_p$$ |Specific Heat (比熱) | J/kg-K | |
| ||||
|h |Thermal Conductivity (熱伝達率) | W/m2-K | |
|$$k_c$$ |Convective Mass Transfer Coefficient | m/s |Applying the film theory, "$$k_c = D_{AB} / \delta$$" |
---
|レイノルズ数 (Reynolds) | Re | ρLv / μ |慣性力 / 粘性力|
|フルード数 | Fr | |特性速度 / (特性長さ・重力加速度) |
|プランドル数 (Prandtl) | Pr | $$\frac{\nu}{\alpha}$$ | |
* [[flipping typical|http://flippingtypical.com/]]
* [[LostTechnology|http://www.losttechnology.jp/]]
* [[Scribd|http://www.scribd.com/]]
** [[次のYouTubeはこれだ!簡単に文書が共有できる『Scribd』 - |http://www.100shiki.com/archives/2007/03/youtubescribd.html]]
* [[MSDN: 予約済み識別子 | http://msdn.microsoft.com/ja-jp/library/cc440188%28VS.71%29.aspx ]]
* [[標準Cライブラリの実装 iso646.h | http://libc.blog47.fc2.com/blog-entry-9.html ]]
* [[日本工業標準調査会(JISC):プログラム言語C | http://www.jisc.go.jp/app/JPS/JPSO0020.html ]]
** X3010 で検索する
<<tag "乱流">>
; 摩擦速度
$$u^* = \sqrt{\dfrac{\tau_w}{\rho}}$$
$$y^+ = \dfrac{u^* y}{\nu}$$
$$u^+ = \dfrac{\bar{U}}{u^* }$$
https://www.cradle.co.jp/tec/column06/022.html
---
! [[レイノルズ分解]]
乱流の物理量 ($$f$$) を ''時間平均値'' ($$\overline{f}$$) と ''変動値'' ($$f'$$) に分けて表すことをレイノルズ分解という。
: $$f = \overline{f} + f'$$
''時間平均値'' は、ある長い時間間隔 (T) を用いて、それぞれ次のように定義される。
: $$\displaystyle \overline{f} = \lim_{T \to \infty} \dfrac{1}{T} \int_{0}^{T} f dt$$
この定義により、以下のような代数操作が可能になる ([[導出|レイノルズ分解]])。
$$\ \ \ \cdot \ \ \stackrel{=}{f} = \bar{f}$$
$$\ \ \ \cdot \ \ \overline{f + g} = \overline{f} + \overline{g}$$
$$\ \ \ \cdot \ \ \overline{f'} = 0$$
$$\ \ \ \cdot \ \ \overline{\overline{f} \cdot g} = \overline{f} \cdot \overline{g}$$
$$\ \ \ \cdot \ \ \overline{\dfrac{\partial f}{\partial s}} = \dfrac{\partial \bar{f}}{\partial s}$$
----
! [[レイノルズ平均ナビエ・ストークス方程式]]
[[ナビエ・ストークス方程式]] を [[レイノルズ分解]] した上で、時間平均を取ることによって得られる式。左辺第一項は、十分な時間を取れば 0 になるので、書かれないことも多い。
: $$\displaystyle \rho \dfrac{\partial \overline{v_i}}{\partial t} + \rho \bar{v_j} \dfrac{\partial \bar{v_i}}{\partial x_j} = \rho F - \dfrac{\partial \overline{p}}{\partial x_i} + \dfrac{\partial }{\partial x_j} \left[ \mu \left( \dfrac{\partial \overline{v_i}}{\partial x_j} + \dfrac{\partial \overline{v_j}}{\partial x_i} \right) - \rho \overline{v_i' v_j'} \right] $$
なお、右辺の最後の項に出てくる $$\rho \overline{v_i' v_j'}$$ は ''レイノルズ応力'' と呼ばれる。
!! レイノルズ応力の輸送方程式
上式のレイノルズ平均ナビエストークス方程式に v,,i,,' を掛け、平均を取ることで得られる。
:$${\displaystyle {\frac {\partial {\overline {u_{i}^{\prime }u_{j}^{\prime }}}}{\partial t}}+{\bar {u}}_{k}{\frac {\partial {\overline {u_{i}^{\prime }u_{j}^{\prime }}}}{\partial x_{k}}}=-{\overline {u_{i}^{\prime }u_{k}^{\prime }}}{\frac {\partial {\bar {u}}_{j}}{\partial x_{k}}}-{\overline {u_{j}^{\prime }u_{k}^{\prime }}}{\frac {\partial {\bar {u}}_{i}}{\partial x_{k}}}+{\overline {{\frac {p^{\prime }}{\rho }}\left({\frac {\partial u_{i}^{\prime }}{\partial x_{j}}}+{\frac {\partial u_{j}^{\prime }}{\partial x_{i}}}\right)}}-{\frac {\partial }{\partial x_{k}}}\left({\overline {u_{i}^{\prime }u_{j}^{\prime }u_{k}^{\prime }}}+{\frac {\overline {p^{\prime }u_{i}^{\prime }}}{\rho }}\delta _{jk}+{\frac {\overline {p^{\prime }u_{j}^{\prime }}}{\rho }}\delta _{ik}-\nu {\frac {\partial {\overline {u_{i}^{\prime }u_{j}^{\prime }}}}{\partial x_{k}}}\right)-2\nu {\overline {{\frac {\partial u_{i}^{\prime }}{\partial x_{k}}}{\frac {\partial u_{j}^{\prime }}{\partial x_{k}}}}}}$$
さらに、このレイノルズ応力の輸送方程式から、k-ε モデルで必要となる
* 乱流エネルギー (k)
* エネルギー散逸率 (ε)
の輸送方程式も導出できる (らしい)。
!! 乱流運動エネルギーの式
! RANS モデル
* 渦粘性
* k-εモデル
----
! ナビエストークス方程式のフーリエ変換
問題によっては、連続の式・ナビエストークス方程式の位置の項をフーリエ変換することがある。
* https://www.jstage.jst.go.jp/article/jspf/78/8/78_8_773/_pdf/-char/ja
- -
* https://www.phys.chuo-u.ac.jp/labs/nakano/tokuron2/sec61(08).pdf
* http://www.kurims.kyoto-u.ac.jp/~kyodo/kokyuroku/contents/pdf/1823-09.pdf
----
; Turbulent Fluctuation (乱流変動)
流速の瞬時値を $$U(t)$$ から 流速の平均値を $$\bar{U}$$ を引いた値のことを、Turbulent Fluctuationという。
$$U'(t) = U(t) - \bar{U} $$
; 乱流運動エネルギー
乱流運動エネルギーは、Turbulent Fluctuation を用いて、次のように定義される。
$$k = \dfrac{1}{2} {U'}^2$$
; 乱流強度
u,,rms,, is the root-mean-square of the turbulent velocity fluctuations and U is the mean velocity (Reynolds averaged).
$$ I = \dfrac{u_{rms}}{\overline{U}} $$
$$u_{rms} = \sqrt{ \dfrac{1}{3} ({u'_x}^2 + {u'_y}^2 + {u'_z}^2) } $$
$$\overline{U} = \sqrt{ ({\overline{U}_x}^2 + {\overline{U}_y}^2 + {\overline{U}_z}^2) } $$
----
; 用語
|ū |Spatial Fluctuating Velocity | |
|ε |Energy Dissipation Rate |エネルギー散逸率 |
* https://www.cfd-online.com/Wiki/Introduction_to_turbulence/Turbulence_kinetic_energy
isotropic homogeneous trubulence
<<<
;10.3 乱流モデルと壁条件
対数則は理論と実験を組み合わせて得られた式ですが、図10.3の左側のように流れが壁に沿う単純な流れ場でのみ成立する条件です。図10.3の右側のように壁面に凹凸があると、対数則が成立しない部分が生まれます。そのようなケースでは、対数則を使わず粘性底層や緩和層の中にも複数のメッシュを配置して計算する必要がありますが、そのときに適用する乱流モデルに注意が必要です。壁近傍では壁によって渦運動が拘束されますので、壁から離れた領域の渦運動とは状況が異なり、通常の乱流モデルの前提が崩れるからです。壁近傍での使用にも対応している乱流モデルが、「低レイノルズ数型」と呼ばれる乱流モデルです。ここでの「 低レイノルズ数 」とは、壁近くの流れが遅い領域という意味で、流れ場自体が低いレイノルズ数のときに適用するモデルという意味ではありません。代表例としては、「安倍・近藤・長野モデル(AKNモデル)」、「SST k-ωモデル」などがあります。
なお、低レイノルズ数型モデルは、壁から離れると通常の乱流モデルと等価になる式になっています。そのため、全部の壁において薄いメッシュを配置する必要はなく、対数則が成立しない領域や、壁際の現象を解析したい注目領域だけを薄いメッシュとすることで、壁面近傍の精度を保つことができます。
<<<
https://www.cradle.co.jp/media/column/a345
---
* ヘンリーの法則
* ラウールの法則
----
```
理想的な溶液も、理想気体のようにいくつかの法則が常に成り立つような溶液として定義すればよさそうです。そこで、溶液に関する重要な2つの法則を採用します。
Raoult's law (ラウールの法則) : 希薄溶液の溶媒について、Pk=P∗kxk (xk は1に近い)
Henry's law (ヘンリーの法則) : 希薄溶液の溶質について、Pk=KBxk (xkは0に近い)(KB はヘンリー定数)
ヘンリー定数は粒子種に固有の定数です。ヘンリーの法則は確かに溶質についていい近似をもたらしそうですが、この「固有の」というのが厄介で、理想的な溶液の普遍性が少し落ちます。
と、いうことで、理想溶液を次のように定義します:
「理想溶液(完全溶液とも)は、すべての成分、あらゆるモル分率においてラウールの法則が成り立つような溶液」
つまり、すべての成分kにおいて、Pk=P∗kxkが成り立つような溶液です。
しかし、これは少しばかり強引な溶液です。そもそも溶質に関してはラウールの法則は実際は成り立ちません。
そこで、理想希薄溶液を次のように定義します:
「理想希薄溶液とは、溶媒ではラウールの法則が、溶質ではヘンリーの法則があらゆるモル分率について成り立つような溶液」
理想希薄溶液は理想溶液よりも実在溶液に忠実です。実在溶液と決定的に違うのは、ラウール/ヘンリーの法則があらゆるモル分率で成り立つとしているところだけです。
理想気体と対比してみると、理想気体は高温低圧でいい近似であるのに対し、理想希薄溶液では溶媒のモル分率が1に近く、溶質のモル分率が0に近ければいい近似である、と言えます。
理想的な溶液が2つ出来上がりました。ここからはこの2つの溶液では化学ポテンシャルがどうなるかを見ていきましょう。
```
http://cogas.github.io/pages/vrici/chemicalp/
理想気体の化学ポテンシャルは、''温度''と''圧力''の関数で表せる。なお、$$p_0$$ は基準圧力(通常は1 atm)である。
:$$\mu(T,p) = \mu(T, p_0) + RT \ln \left( \dfrac{p}{p_0} \right)$$
多成分系における成分 i の化学ポテンシャルは、''温度'' と ''成分 i の分圧'' ($$p_i$$) を用いて表せる。
:$$\mu_i(T,p_i) = \mu_i(T, p_0) + RT \ln \left( \dfrac{p_i}{p_0} \right)$$
---
! 単成分の場合
この関係は、$$ dG = S dT + V dP + \mu dN$$ に "dT = 0, dN = 0" を代入して得られた式から導出できる。
$$dG = Vdp = \dfrac{nRT}{p} dp $$
この式を基準圧力($$p_0$$)から積分すると、
$$\displaystyle \int_{p_0}^p dG = \int_{p_0}^p \dfrac{nRT}{p} dp = \left[ nRT \ln(p) \right]_{p_0}^p = nRT \ln \left( \dfrac{p}{p_0} \right)$$
であり、この式の両辺を n で割ると、
$$\dfrac{G(p)}{n} - \dfrac{G(p_0)}{n} = RT \ln \left( \dfrac{p}{p_0} \right) $$
という関係が得られる。
参考: [[理想気体の化学ポテンシャル – now♯|http://nowsharp.com/wiki/thermodynamics/%E7%90%86%E6%83%B3%E6%B0%97%E4%BD%93%E3%81%AE%E5%8C%96%E5%AD%A6%E3%83%9D%E3%83%86%E3%83%B3%E3%82%B7%E3%83%A3%E3%83%AB]]
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
! 多成分の場合
混合前の成分 i の化学ポテンシャルは、
$$\mu_i(T,p) = \mu_i(T, p_0) + RT \ln \left( \dfrac{p}{p_0} \right)$$
なので、混合後の成分 i の化学ポテンシャルは、
$$\mu_i(T,p) = \mu_i(T, p_0) + RT \ln \left( \dfrac{p}{p_0} \right) + RT \ln x_i$$
と表せる。
[[ドルトンの法則]] を使ってこの式を変形すると、
$$\mu_i(T,p) = \mu_i(T, p_0) + RT \ln \left( \dfrac{p x_i}{p_0} \right) = \mu_i(T, p_0) + RT \ln \left( \dfrac{p_i}{p_0} \right)$$
となる。
等温等圧かつ内部エネルギー変化が起こらない気体の混合における、エントロピー変化。
<<<
この過程は不可逆過程なのでエントロピーを直接計算できません。計算を可能にするためには,始状態と終状態とを結びつける準静的な過程を見つける必要があります [#] が,そこで考え出されたのが半透膜を使う次のような2種類の気体の混合方法(思考実験)です。
<<<
[[ときわ台学/化学熱力学/混合エントロピー,化学ポテンシャル|http://www.f-denshi.com/000TokiwaJPN/35chmth/120chmt.html]]
---
! 導出
等温等圧条件下での、n個の成分の混合について考える。
混合前の各成分の物質量を $$N_1, N_2, ... N_n$$ と表し、体積を $$V_1, V_2, ... V_n$$ と表すこととする。また、混合後の物質量 と 体積を、$$N_{total}, V_{total}$$ と書くこととする。
混合でのエネルギー変化は 0 なので、[[熱力学第一法則]] から得られる $$dU = T dS - PdV$$ に dU = 0 を代入すると、
$$dS = \dfrac{P dV}{T} = \dfrac{nR}{V} dV$$
という関係が得られる (最後の変形には、理想気体の状態方程式を使用)。
そのため、成分 i の 混合前後のエントロピー変化は、
$$\displaystyle \Delta S_{mix,i} = \int_{V_i}^{V_{total}} \dfrac{n_i R}{V} dV = n_i R \ln \dfrac{V_{total}}{{V_i}}$$
と表すことができる。
混合前の成分 i の状態 $$V_i = \dfrac{n_i RT}{P}$$ と 混合後の状態 $$V_{total} = \dfrac{n_i RT}{P_i}$$ を考えれば、上の式は
$$\displaystyle \Delta S_{mix,i} = n_i R \ln \dfrac{n_i /p_i}{n_i / p} = n_i R \ln \dfrac{p}{p_i}$$
と変形できる。さらに [[ドルトンの法則]] ($$p_i = x_i p$$) を適用すれば、
$$\displaystyle \Delta S_{mix,i} = n_i R \ln \dfrac{1}{{x_i}} = - n_i R \ln x_i = - n_i R \ln \dfrac{n_i}{n_{total}}$$
となる。
混合エントロピーは、全ての成分のエントロピー変化の和なので、
$$\displaystyle \Delta S_{mix} = \sum_i \Delta S_{mix,i} = - R \sum_i n_i \ln \dfrac{n_i}{n_{total}} = - n_{total} R \sum_i x_i \ln x_i $$
となる。
---
! 混合ギブスエネルギー
この混合では、系のエンタルピーと温度は変化しないので、
$$dG = d(H - TS) = - T dS$$
である。つまり、混合に伴うギブスエネルギーの変化は、
$$\displaystyle \Delta G_{mix} = - T \Delta S_{mix} = RT \sum_i n_i \ln \dfrac{n_i}{n_{total}} = n_{total} RT \sum_i x_i \ln x_i $$
となる。
---
! 化学ポテンシャル
各成分のモルエンタルピーを、 $$h_1, h_2, ... h_n$$ と表すとすると、トータルのエンタルピーは、次のように表せる。
$$\displaystyle H = \sum_i n_i h_i $$
また、 各成分のモルエントロピーを、 $$s_1, s_2, ... s_n$$ とすると、混合前のギブスエネルギーは、
$$\displaystyle G_{before} = H - TS = \sum_i (n_i h_i - T n_i s_i)$$
と書くことができ、混合後のギブスエネルギーは、次のように表せる。
$$\displaystyle G = G_{before} + \Delta G_{mix} = \sum_i n_i (h_i - T s_i + RT \ln x_i) $$
またその一方で、[[ギブスの自由エネルギー]] は、
$$\displaystyle G = \sum_i n_i \mu_i$$
とも書けるので、上の2つの式の比較から、
$$\mu_i = (h_i - T s_i) + RT \ln x_i$$
という関係が得られる。
ここで、純粋な i 成分気体1mol のギブス自由エネルギーを $$\mu^0_i$$ と定義すると、混合後の成分 i の化学ポテンシャルは次のように書くことができる。
$$\mu_i = \mu^0_i (P,T) + RT \ln x_i $$
---
http://www.f-denshi.com/000TokiwaJPN/35chmth/120chmt.html
<<tag "理想気体の熱力学">>
! 基本的な性質
!! 1. Boyle-Charles の法則にしたがう
:$$\dfrac{pV}{T} = const (= nR) $$
!! 2. 理想気体のエネルギーは体積によらない
Gay-Lussac や Joule が行った実験の結果を理想化したもの。
:$$U(T; V, N) = U(T; V', N) $$
体積によらないので、エネルギーは温度と物質量の関数となる。
:$$ U = U(T,N) = cN k_B T$$
(単原子分子の理想気体: c = 3/2, 二原子分子の理想気体: c = 5/2)
- - - - -
; 大まかな説明
熱力学恒等式 $$(dU = T dS - p dV)$$ の両辺を dV で割る。
:$$\displaystyle \dfrac{dU}{dV} = T \left( \dfrac{\partial S}{\partial V} \right)_T - p $$
[[Maxwellの関係式]] を使うと、この式の右辺は 0 であることが分かる。
:$$\displaystyle \dfrac{dU}{dV} = T \left( \dfrac{\partial p}{\partial T} \right)_V - p = T \left[ \dfrac{\partial (nRT/V)}{\partial T} \right]_V - \dfrac{nRT}{V} = 0$$
---
! (よく使う) 重要な性質
!! 1. 比熱は温度のみの関数になる
エネルギーが体積に依存しないので、比熱も温度と物質量の関数となる。
$$C_v(T; V, N) = \left( \dfrac{\partial U}{\partial T} \right)_{V,N} = C_v(T,N)$$
!! 2. マイヤーの法則
理想気体の定圧比熱と定積比熱の差は、気体定数になる (詳しくは [[熱容量]] 参照)。
$$ c_p - c_v = R $$
!! 3. 化学ポテンシャルは温度と圧力の関数で表せる
[[理想気体の化学ポテンシャル]] は、温度と圧力の関数で表せる。なお、$$p_0$$ は基準圧力(通常は1 atm)である。
$$\mu(T,p) = \mu(T, p_0) + RT \ln \left( \dfrac{p}{p_0} \right)$$
!! 4. [[ドルトンの法則]]
理想気体では、ドルトンの法則が厳密に成り立つ。
* 系の圧力 (p) は分圧の和になる。
** $$\displaystyle p = \sum p_i $$
* 成分 i の分圧(pi)は、「成分 i のモル分率(xi)」 と 「系の圧力(p)」の積になる。
** $$p_i = x_i p$$
!! 5. 混合化学ポテンシャル ([[詳細|理想気体の混合エントロピー]])
成分 i の混合後の化学ポテンシャルは、モル分率$$(x_i)$$を使って表せる (式変形にドルトンの法則を使用している)。
$$\mu_i(T,p) = \mu_i^{*}(T,p) + RT \ln \left( \dfrac{p_i}{p} \right) = \mu_i^{*}(T,p) + RT \ln \left( x_i \right)$$
* $$\mu_i^{*}(T,p)$$: 成分 i だけの時の化学ポテンシャル
!! 6. Poisson の関係式 (理想気体の断熱準静操作)
理想気体の断熱準静操作では、 V と T の間に常に以下の関係が成り立つ。
$$ T V^{(\frac{c_p}{c_v}-1)} = const.$$
----
! 物理量
!! 2. [[混合エントロピー|理想気体の混合エントロピー]]
とりあえず、2種類の気体の混合エントロピーについてだけ書いておく。
混合エントロピーの条件では ''dU = 0'' なので、[[熱力学第一法則]] から得られる ''dU = T dS - p dV'' の式にこれを代入すると、
$$dS = \dfrac{p}{T} dV = \dfrac{nR}{V} dV $$
の関係が得られる。
一つ目の気体のエントロピー変化は、
$$\displaystyle \Delta S_{mix,1} = \int_{V_1}^{V_1+V_2} \dfrac{n_1R}{V} dV = n_1R ln \left( \dfrac{V_1 + V_2}{V_1} \right) $$
であり、[[ドルトンの法則]] を使うと、
$$\displaystyle \Delta S_{mix,1} = n_1R ln \left( \dfrac{n_1 + n_2}{n_1} \right) = - n_1R ln(x_1)$$
が得られる。同様に2つ目の気体も計算し、和を取れば混合エントロピーが得られる。
$$\Delta S_{mix} = -R (n_1ln(x_1) + n_2ln(x_2))$$
----
! Poisson の関係式 (理想気体の断熱準静操作)
理想気体の断熱準静操作では、 V と T の間に常に以下の関係が成り立つ。
$$ T V^{(\frac{c_p}{c_v}-1)} = const.$$
!! 大雑把な証明
理想気体の内部エネルギーは体積に依存しないので、エネルギーの変化は定積比熱と温度変化量によって表せる。
$$ \Delta U = n c_v \Delta T$$
また、熱力学第一法則の式(dU = d'Q - P dV)から 、断熱準静操作での内部エネルギーの変化は、次のようにも表せる。
$$ \Delta U = - P \Delta V = - \dfrac{nRT}{V} \Delta V $$
上記の2つの式を合わせ、変形すると、
$$ \dfrac{1}{T} \Delta T = - \dfrac{R}{c_v} \dfrac{1}{V} \Delta V$$
となる。この式を積分し、マイヤーの法則($$\dfrac{R}{c_v} = \dfrac{c_p}{c_v} - 1$$)を使うと、
$$ ln(T) + \dfrac{R}{c_v} ln(V) = const.$$
$$ ln(T V^{(\frac{c_p}{c_v}-1)}) = const. $$
となる。
----
理想気体の内部エネルギーは、気体定数と温度で表せる(cは分子によって決まる定数)。
$$ U = c N (k_B N_A) T = cnRT $$
上記の2つの式より、
$$ cnR dT = - \dfrac{nRT}{V} dV $$
T を左辺に移動した上で積分すると (R は消える)、
$$ c \cdot ln(T) = ln(V) + C $$
$$ T^c \cdot V = Const. $$
----
! 等温過程
----
! 断熱過程
!! Poisson の関係式 (理想気体の断熱準静操作)
http://science.shinshu-u.ac.jp/~tiiyama/?page_id=4309
! 理想混合溶液
混合の際に理想気体と同様の変化をする液体。
ざっくり言えば、各成分の化学ポテンシャルが次のように表される混合溶液のこと。なお、$$\mu_i^*$$ は純粋な成分液体 i の化学ポテンシャルである。
$$\mu_i = \mu_i^*(T,P) + RT ln(x_i)$$
具体的には、以下のような条件を必要とする。
* 混合エンタルピーが 0
** 混合熱が発生しない
** 混合による各成分の体積変化が発生しない
* [[ドルトンの法則]] が成り立つ。
** pi = xi p
!! 補足
「ラウールの法則に従う溶液」という言い方もされるが、厳密に言えば、[[ラウールの法則]] が成り立つためには「気相が理想気体」という条件も必要となる。
---
!! 混合によるギブスエネルギーの変化
混合エントロピーがあるので、混合によりギブスエネルギーは変化する。
$$\displaystyle dG_{mix} = - T dS_{mix} = nRT \sum_{i=1}^n x_i ln(x_i) $$
標本空間が可算な時の確率変数を、''離散型確率変数 (discrete random variable)'' という。
----
! 確率質量関数 (Probability Mass Function)
標本空間を S、離散型確率変数を X とし、x,,k,, という値を確率変数 X が返す事象 (Event)を
:$$ A = \{ X = x_k\} = \{ s \in S | X(s) = x_k \} $$
とした時に、事象 A の確率を返す
:$$P_X(x_k) = P(X = x_k), \ \mathrm{for} \ k = 1, 2, 3, \dots $$
という関数 $$P_X: \mathbb{R} \to \mathbb{R}$$ を、''確率質量関数 (Probability Mass Function)'' とする (''PMF''と略されることもある)。
この関数が返す値は確率なので、次の条件を満たさなければならない。
:$$\displaystyle \cdot \ \ 0 \leq P_X(x_k) \leq 1$$
:$$\displaystyle \cdot \ \ \sum_{i} P_X(x_k) = 1$$
; 注意点:
* P() は probability を意味するが、[[確率測度|確率空間]]とは引数が異なる
! 値域 (Range) と 濃度
確率変数 X の取りうる値の集合を Range といい、 $$R_X$$ あるいは $$Range(X)$$ と表す。
! 累積分布関数 (Cumulative Distribution Function)
次のように定義された関数を、''累積分布関数'' という。
:$$F_X(x_k) = P(X \leq x), \ \mathrm{for \ all} \ x \in \mathbb{R}$$
なお、定義から明らかなように、以下が成り立つ。
:$$\displaystyle \cdot \ \ F_X(x_k) = \sum_{x_k \leq x} P_X (x_k)$$
:$$\displaystyle \cdot \ \ \lim_{x \to \infty} F_{X}(x) = 1$$
----
! 期待値 (Expectation)
次のように定義された確率変数(の像)の重み付け平均を [[期待値]] という。
:$$\displaystyle E[X] = \sum_{x_k \in R_x} x_k P_X(x_k) $$
なお、期待値は、$$EX, E(X), \mu_X$$ といった表記をすることもある。
!! ''Law of the unconscious statistician ([[LOTUS]])''
$$X$$ を $$g(X)$$ と変換した際の期待値は、次のようになる。
:$$\displaystyle E(g(X)) = \sum_{x_k \in R_x} g(x_k) P_X (x_k)$$
地味なルールだけど、かなり重要。
! 分散 (Variance)
次のように定義された値を ''分散'' という。
:$$\displaystyle \mathrm{Var}[X] = E[(X - E[X])^2] = \sum_{x_k \in R_x} (x_k - E[X])^2 P_X(x_k)$$
また、この式は次のように変形することができる。
:$$\displaystyle \mathrm{Var}[X] = E[X^2 - 2XE[X] + E[X]^2] = E[X^2] - 2E[XE[X]] + E[E[X^2]] = E[X^2] - E[X]^2 $$
----
! 独立確率変数
二つの独立変数 X, Y が次の条件を満たすとき、「''X と Y は独立である''」 という。
:$$P(X = x, Y = y) = P(X = x) P(Y = y) $$
* [[Winter in White: A Mini Pop-up Treat (Classic Collectible Pop-Up): Robert Sabuda|http://www.amazon.co.jp/Winter-White-Pop-up-Classic-Collectible/dp/0689853653/ref=sr_1_8?ie=UTF8&s=english-books&qid=1259674578&sr=8-8]]
** 飛び出す絵本っぽいやつ
** ページを開いていくと、回る部分があった
* エドワード・ホール 「[[かくれた次元|http://www.amazon.co.jp/%E3%81%8B%E3%81%8F%E3%82%8C%E3%81%9F%E6%AC%A1%E5%85%83-%E3%82%A8%E3%83%89%E3%83%AF%E3%83%BC%E3%83%89%E3%83%BB%E3%83%9B%E3%83%BC%E3%83%AB/dp/4622004631/ref=sr_1_1?ie=UTF8&s=books&qid=1229957888&sr=8-1]]」みすず書房
** 文庫なら欲しいが...
* [[骨から見る生物の進化|http://www.amazon.co.jp/%E9%AA%A8%E3%81%8B%E3%82%89%E8%A6%8B%E3%82%8B%E7%94%9F%E7%89%A9%E3%81%AE%E9%80%B2%E5%8C%96-J%E3%83%BB%E3%83%89%E3%83%BB%E3%83%91%E3%83%8A%E3%83%95%E3%82%A3%E3%83%A6%E3%83%BC-%E8%91%97/dp/4309252176/ref=sr_1_1?ie=UTF8&s=books&qid=1221577265&sr=8-1]]
** 欲しいほどの本ではないけど、きれい
* 山のABC
** よかった
** そこそこの値段なら欲しい
* Comic cue. v.8
** sewing
* [[西洋博物学者列伝: ロバート ハクスリー, Robert Huxley, 植松 靖夫|http://www.amazon.co.jp/%E8%A5%BF%E6%B4%8B%E5%8D%9A%E7%89%A9%E5%AD%A6%E8%80%85%E5%88%97%E4%BC%9D%E2%80%95%E3%82%A2%E3%83%AA%E3%82%B9%E3%83%88%E3%83%86%E3%83%AC%E3%82%B9%E3%81%8B%E3%82%89%E3%83%80%E3%83%BC%E3%82%A6%E3%82%A3%E3%83%B3%E3%81%BE%E3%81%A7-%E3%83%AD%E3%83%90%E3%83%BC%E3%83%88-%E3%83%8F%E3%82%AF%E3%82%B9%E3%83%AA%E3%83%BC/dp/4903487261/ref=sr_1_1?ie=UTF8&s=books&qid=1247660493&sr=8-1]]
** ちょっと欲しいけど...
** ちょっと高いなぁ...
* [[Tenugui―江戸手拭: 田島 一彦|http://www.amazon.co.jp/Tenugui%E2%80%95%E6%B1%9F%E6%88%B8%E6%89%8B%E6%8B%AD-%E7%94%B0%E5%B3%B6-%E4%B8%80%E5%BD%A6/dp/4894446197/ref=sr_1_1?ie=UTF8&qid=1250175083&sr=8-1]]
** 持っててもいいかなぁ...
* 日本きのこ図版: 青木実
** 生物のスケッチっぽい
* [[クモの網: 船曳 和代, 新海 明, 住友和子編集室, 村松寿満子, 七字由布|http://www.amazon.co.jp/%E3%82%AF%E3%83%A2%E3%81%AE%E7%B6%B2%E2%80%95What-Wonderful-Web-INAX-BOOKLET/dp/4872758439/ref=sr_1_1?ie=UTF8&qid=1250513688&sr=8-1]]
** このぐらいの感じで、作りたい
* [[The New Look: Design in the Fifties: Lesley Jackson: 洋書|http://www.amazon.co.jp/New-Look-Design-Fifties/dp/0500276447/ref=sr_1_1?ie=UTF8&s=english-books&qid=1252161118&sr=8-1]]
** いくつか面白い写真が
** [[The New Look Design in the Fifties : biotope|http://www.biotope.biz/04102100010/6/book/detail/]]
* 豆本
** 田中栞
! 基本的な知識
* <<slider tocSlider 流体の式に出てくる記号 式に出てくる記号>>
* <<slider tocSlider 内力と外力 内力と外力>>
* <<slider tocSlider 熱力学 熱力学>>
* [[難しい算数]]
! 参考文献
* [[Fundamentals of Multiphase Flow (Christopher E. Brennen) |http://caltechbook.library.caltech.edu/51/2/cabook.pdf]]
* [[Heat Transfer Databooks Products|http://www.wlv.com/products/thermal-management-databooks.html]]
* [[Amazon.co.jp: 流体力学 (前編) (物理学選書 (14)): 今井 功: 本|http://www.amazon.co.jp/%E6%B5%81%E4%BD%93%E5%8A%9B%E5%AD%A6-%E5%89%8D%E7%B7%A8-%E7%89%A9%E7%90%86%E5%AD%A6%E9%81%B8%E6%9B%B8-14-%E4%BB%8A%E4%BA%95/dp/4785323140/ref=pd_sim_b_4]]
** 難しくて無理
* http://www.eng.tau.ac.il/research/laboratories/multiphase_flow/publications.html
! 単相流
<<tiddler "単相流">>
----
* [[東京工業大学 工学入門講座 オンライン版 - 科目一覧|http://www.eto.titech.ac.jp/contents/index.html]]
* [[流体機械・解析エンジニアリング: 流体機械設計|http://tblade.blog.ocn.ne.jp/blog/cat5750110/]]
* [[ Flow profiles - FlowIndex | http://www.flowmeters.info/wiki/index.php?title=Flow_profiles ]]
* http://excelcalculations.blogspot.jp/p/chemical-engineering-calculations.html
!2相流
*[[空気と水の流れ(二相流)を見る |http://www.nak.mech.tut.ac.jp/kouen/kouen.html]]
*[[ボイド率|http://www-thd.mech.eng.osaka-u.ac.jp/Lecture/Netsu2008/Chap4.pdf]]
* [[ScienceDirect - Journal of Petroleum Science and Engineering : Investigation and prediction of slug frequency in gas/liquid horizontal pipe flow|http://www.sciencedirect.com/science?_ob=ArticleURL&_udi=B6VDW-4X2DD1F-1&_user=3901416&_coverDate=11%2F30%2F2009&_rdoc=1&_fmt=high&_orig=search&_sort=d&_docanchor=&view=c&_searchStrId=1377183135&_rerunOrigin=google&_acct=C000061720&_version=1&_urlVersion=0&_userid=3901416&md5=3d7d5a100a642c2c0689eea8d3f765e2#secx7]]
* <<slider tocSlider ボイド率 ボイド率>>
; 画像・動画 (流体挙動)
* [[Two Phase Fluid Visualization|http://www.pe.utexas.edu/2phaseweb/flowvideo.html]]
* [[GAS-LIQUID FLOW|http://www.thermopedia.com/toc/chapt_g/GAS-LIQUID_FLOW.html]]
** [[Two Phase Fluid Flow In Horizontal Pipes|http://www.pe.utexas.edu/2phaseweb/flowhoriz.html]]
* [[計装Cube:流量計選定ナビガイダンス:工業技術社|http://keiso-cube.com/proguide/proguide_conan1.php]]
; その他
* [[よくわかる有限要素法|http://www.fem.gr.jp/]]
* critical flow (射流) と subcritical flow(常流)
** 流速が波よりも遅い流れを常流と速い流れを射流?
** フルード数?
* BJERKNES FORCES
* [[Flow Sheet Symbols | http://www.roymech.co.uk/Useful_Tables/Drawing/Flow_sheets.html]]
;MAC法 (Marker and Cell)
* 圧力のポアソン方程式
** 速度n ⇒ 圧力n
*ナビエ・ストークス方程式
** 速度n, 圧力n ⇒ 速度n+1
の繰り返し
;スタガード格子
流体の運動は ''速度勾配テンソル'' で表すことができ、このテンソルを対称テンソルと交代テンソルに分けた時のそれぞれの部分を、''ひずみ速度テンソル''・ ''渦度テンソル'' という。
$$\ \ \ \ \ dv_i = \dot{\gamma}_{ij} p_j + \omega_{ij} p_j $$
; ひずみ速度テンソル ($$\dot{\gamma}$$) :
$$\ \ \ \ \ \dot{\gamma}_{ij} = \dfrac{1}{2} \left( \dfrac{\partial v_i}{\partial x_j} + \dfrac{\partial v_j}{\partial x_i} \right) p_j$$
; 渦度テンソル ($$\omega_{ij}$$) :
$$\ \ \ \ \ \omega_{ij} = \dfrac{1}{2} \left( \dfrac{\partial v_i}{\partial x_j} - \dfrac{\partial v_j}{\partial x_i} \right) p_j $$
「ひずみ速度テンソルは流体の変形」を、「渦度テンソルは流体の回転」を表す (渦度については [[rot]] 参照) 。
----
! 速度勾配テンソル (流体の運動) の分解
原点 O にある流体が速度 v,,0,, で移動しているとし、速度 v は位置 P の関数 v(P) として表されるものとする。また、Pの座標は、(p,,x,,, p,,y,,, p,,z,,) と表すことにする。
ここで、速度を原点Oの周りでテーラー展開すると、P が原点に十分近ければ、P における速度は次のように表せる。
$$
\begin{aligned}
v(p_x, p_y, p_z) = v_0 + p_x \left. \dfrac{\partial v_x}{\partial x} \right|_{P=O} + p_x \left. \dfrac{\partial v_y}{\partial x} \right|_{P=O} + p_x \left. \dfrac{\partial v_z}{\partial x} \right|_{P=O} + \\
p_y \left. \dfrac{\partial v_x}{\partial y} \right|_{P=O} +
p_y \left. \dfrac{\partial v_y}{\partial y} \right|_{P=O} +
p_y \left. \dfrac{\partial v_z}{\partial y} \right|_{P=O} + \\
p_z \left. \dfrac{\partial v_x}{\partial z} \right|_{P=O} +
p_z \left. \dfrac{\partial v_y}{\partial z} \right|_{P=O} +
p_z \left. \dfrac{\partial v_z}{\partial z} \right|_{P=O} \ \ \ \
\end{aligned}
$$
これを、(x, y, z) の代わりに (x,,1,,, x,,2,,, x,,3,,) を使ってまとめ直し、偏微分する位置を省略すると、
$$ \begin{aligned} v - v_0 = p_{1} \left( \dfrac{\partial v_1}{\partial x_1} + \dfrac{\partial v_2}{\partial x_1} + \dfrac{\partial v_3}{\partial x_1} \right) + p_{2} \left( \dfrac{\partial v_1}{\partial x_2} + \dfrac{\partial v_2}{\partial x_2} + \dfrac{\partial v_3}{\partial x_2} \right) + p_{3} \left( \dfrac{\partial v_1}{\partial x_3} + \dfrac{\partial v_2}{\partial x_3} + \dfrac{\partial v_3}{\partial x_3} \right) \end{aligned} $$ 【式1】
となる。【式1】を行列形式で表すと、
$$\begin{pmatrix} dv_1 \\ \\ dv_2 \\ \\ dv_3 \end{pmatrix} = \begin{pmatrix} \dfrac{\partial v_1}{\partial x_1} & \dfrac{\partial v_1}{\partial x_2} & \dfrac{\partial v_1}{\partial x_3} \\ \\ \dfrac{\partial v_2}{\partial x_1} & \dfrac{\partial v_2}{\partial x_2} & \dfrac{\partial v_2}{\partial x_3} \\ \\ \dfrac{\partial v_3}{\partial x_1} & \dfrac{\partial v_3}{\partial x_2} & \dfrac{\partial v_3}{\partial x_3} \end{pmatrix} \begin{pmatrix} p_1 \\ \\ p_2 \\ \\ p_3 \end{pmatrix} $$
となる。そして、この行列を対称テンソルと交代テンソルに分けると、
$$\begin{pmatrix} dv_1 \\ \\ dv_2 \\ \\ dv_3 \end{pmatrix} = \dfrac{1}{2} \begin{pmatrix} 2\dfrac{\partial v_1}{\partial x_1} & \dfrac{\partial v_1}{\partial x_2} + \dfrac{\partial v_2}{\partial x_1} & \dfrac{\partial v_1}{\partial x_3} + \dfrac{\partial v_3}{\partial x_1} \\ \\ \dfrac{\partial v_2}{\partial x_1} + \dfrac{\partial v_1}{\partial x_2} & 2 \dfrac{\partial v_2}{\partial x_2} & \dfrac{\partial v_2}{\partial x_3} + \dfrac{\partial v_3}{\partial x_2} \\ \\ \dfrac{\partial v_3}{\partial x_1} + \dfrac{\partial v_1}{\partial x_3} & \dfrac{\partial v_3}{\partial x_2} + \dfrac{\partial v_2}{\partial x_3} & 2 \dfrac{\partial v_3}{\partial x_3} \end{pmatrix} \begin{pmatrix} p_1 \\ \\ p_2 \\ \\ p_3 \end{pmatrix} + \dfrac{1}{2} \begin{pmatrix} 0 & \dfrac{\partial v_1}{\partial x_2} - \dfrac{\partial v_2}{\partial x_1} & \dfrac{\partial v_1}{\partial x_3} - \dfrac{\partial v_3}{\partial x_1} \\ \\ \dfrac{\partial v_2}{\partial x_1} - \dfrac{\partial v_1}{\partial x_2} & 0 & \dfrac{\partial v_2}{\partial x_3} - \dfrac{\partial v_3}{\partial x_2} \\ \\ \dfrac{\partial v_3}{\partial x_1} - \dfrac{\partial v_1}{\partial x_3} & \dfrac{\partial v_3}{\partial x_2} - \dfrac{\partial v_2}{\partial x_3} & 0 \end{pmatrix} \begin{pmatrix} p_1 \\ \\ p_2 \\ \\ p_3 \end{pmatrix} $$
と、''ひずみ速度テンソル'' ($$\dot{\gamma}$$) と ''渦度テンソル'' ($$\omega$$) に分けることができる。
:$$dv_i = \dfrac{\partial v_i}{\partial x_j} p_j = \dfrac{1}{2} \left( \dfrac{\partial v_i}{\partial x_j} + \dfrac{\partial v_j}{\partial x_i} \right) p_j + \dfrac{1}{2} \left( \dfrac{\partial v_i}{\partial x_j} - \dfrac{\partial v_j}{\partial x_i} \right) p_j = \dot{\gamma}_{ij} p_j + \omega_{ij} p_j $$
なお、原点を選んだのは式が簡潔にからで、原点以外の点でも同様の結果が得られる。
!! 伸び
【式1】において、$$p_{1} \dfrac{\partial v_1}{\partial x_1}, \ \ p_{2} \dfrac{\partial v_2}{\partial x_2}, \ \ p_{3} \dfrac{\partial v_3}{\partial x_3}$$ の項は、各軸に沿った(方向の)速度変化なので、 ''伸び・縮み'' を表す。
!! せん断・回転
【式1】の v,,0,, 以外の項については、
$$p_{1} \dfrac{\partial v_2}{\partial x_1} + p_{1} \dfrac{\partial v_3}{\partial x_1} + p_{2} \left( \dfrac{\partial v_1}{\partial x_2} + \dfrac{\partial v_2}{\partial x_2} + \dfrac{\partial v_3}{\partial x_2} \right) + p_{3} \left( \dfrac{\partial v_1}{\partial x_3} + \dfrac{\partial v_2}{\partial x_3} + \dfrac{\partial v_3}{\partial x_3} \right) $$
; 参考
https://hb3.seikyou.ne.jp/home/E-Yama/Fluid2.pdf
----
----
流体の変形は「''伸び・せん断・回転''」の3つに分けられるが、ひずみ速度テンソルの対称成分を「''伸びひずみ''」、「せん断」はひずみ速度テンソルのXX部分、渦度テンソルを「''回転''」、に対応する。
<<tag "流体力学">>
<div class="tc-table-of-contents">
<<toc-selective-expandable '流体力学'>>
</div>
---
! [[流体力学での保存則]] (Conservation laws)
!! [[連続の式]] (Continuity equation)
質量保存則。密度 (あるいは 質量) というスカラー量に関する式となる。
:$$\dfrac{\partial \rho}{\partial t} + \nabla \cdot (\rho v) = 0$$
!! [[ナビエ・ストークス方程式]] (Navier–Stokes equations)
運動量保存則。一つの式で表されるが、運動量はベクトル量なので、次元と同じ数だけの方程式が含まれている。左辺は運動量の変化、右辺は力積を表す。
:$$\rho \left[ \dfrac{\partial v}{\partial t} + (v \cdot \nabla) v \right] = - \nabla p + \nabla \cdot \tau + \rho F$$
上の式では圧力をスカラー関数として扱っているが、ベクトル関数とした場合は圧力項は div ($$-\nabla\cdot p$$) になる。
* $$\tau$$: せん断応力 (ベクトル)
* F: 単位質量当たりにかかる外力 (最も一般的な力は重力)
!! エネルギー保存則
エネルギーはスカラーなので、スカラー量に関する式になる。一般的な書き方だと、
$$\dfrac{\partial}{\partial t} (e \rho) + \nabla \cdot (e \rho v) = \dfrac{d'q}{dt} - \left( \dfrac{d'w_s}{dt} + \dfrac{d'w_\sigma}{dt} + \dfrac{d'w_\mu}{dt} \right)$$
$$e = u + \dfrac{v^2}{2} + e_r $$
となるが、単位質量当たりのエンタルピー(h) を使って、以下のように表すことも多い。
$$\dfrac{\partial}{\partial t} ((u + \dfrac{v^2}{2} + e_r) \rho) + \nabla \cdot ((h + \dfrac{v^2}{2} + e_r) \rho v) = \dfrac{d'q}{dt} - \left( \dfrac{d'w_s}{dt} + \dfrac{d'w_\mu}{dt} \right)$$
* u: 単位質量当たりの内部エネルギー
* $$e_r$$: 単位質量当たりにかかるポテンシャル力 (最も一般的な力は重力)
* $$w_s$$: 単位質量当たりの 外界に対してされる shaft work
* $$w_\sigma$$: 単位質量当たりの 外界に対してされる flow work
* $$w_\mu$$: 単位質量当たりの 外界に対してされる shear work
* q: 単位質量当たりに加えられる熱
* h: 単位質量当たりのエンタルピー
---
! [[フィックの法則]] (Fick's laws of diffusion)
!! 第一法則
拡散流束は濃度勾配に比例する。濃度には、通常 ''モル濃度'' (c) か ''密度'' (ρ) が用いられる。
モル濃度を用いた場合は、以下のように表される。
:$$J = - D \mathrm{grad}(c) = - D \nabla c$$
* J: モル平均速度(molar averaged velocity) に対するモル流束 (molar flux)
* D: 拡散係数
!! 第二法則
移流拡散方程式のモル平均速度(もしくは 質量平均速度) が 0 の場合の式。
:$$\dfrac{\partial c}{\partial t} = D \nabla^2 c$$
----
! せん断応力の取り扱い
基本的に、流体に働くせん断応力はせん断速度の関数として表されるが、その表し方は流体の種類によって変わる ([[粘度]])。また、三次元の空間上で扱う場合は、テンソルを用いる ([[流体の変形・回転]])。
!! [[ニュートン流体・非ニュートン流体|粘度]]
せん断応力 ($$\tau$$) が せん断速度 ($$\dot{\gamma}$$) に比例する流体を ''ニュートン流体'' といい、その比例係数を ''粘性'' ($$\mu$$) という。
: $$\tau = \mu \dot{\gamma}$$
せん断応力が上式で表せない流体のことは ''非ニュートン流体'' といい、係数 $$\mu$$ を定数ではなく、$$\dot{\gamma}$$ の関数として表すことが多い。また、$$\dot{\gamma} \to 0$$ の時に、せん断応力が 0 に収束しないケースもあり、その場合には、''降伏応力'' ($$\tau_0$$) も考慮する。
: $$\tau = f_{\mu}(\dot{\gamma}) \dot{\gamma} + \tau_0$$
!! [[速度勾配テンソル|流体の変形・回転]] (Velocity gradient tensor)
速度場が与えられている場合、(応力テンソルなどと同じように) 速度勾配のテンソルを考えることができる。
そして、(応力テンソルと同様に) このテンソルを対称と交代に分けたものが、ひずみ速度と回転速度に対応する。
:$$\dfrac{\partial v_i}{\partial x_j} = \dfrac{1}{2} \left( \dfrac{\partial v_i}{\partial x_j} + \dfrac{\partial v_j}{\partial x_i}\right) + \dfrac{1}{2} \left( \dfrac{\partial v_i}{\partial x_j} - \dfrac{\partial v_j}{\partial x_i}\right) = \dot{\gamma}_{ij} + \omega_{ij} $$
----
! 移流拡散方程式 (Advection-diffusion equation)
''連続の式'' と ''フィック法則'' (第一法則) を組み合わせた式。導出については [[フィックの法則]] 参照。
左辺第二項が移流 を 第三項が拡散 を表す (Rは生成消滅項)。
$$\dfrac{\partial c}{\partial t} + \nabla \cdot (c \bar{V}) - \nabla \cdot (D \nabla c) = R$$
$$\bar{V}$$ は、モル平均速度。
$$\bar{V} = \dfrac{\sum_i c_i v_i}{\sum_i c_i} = \dfrac{\sum_i c_i v_i}{c} $$
---
! 境界層
物体(固体)を流れの中に置いた時に、物体表面の no-slip の影響を受ける領域。境界層内の状態により、''層流境界層'' と ''乱流境界層'' の分類され、それぞれで扱い方(計算の仕方)が異なる。
! [[境界層方程式]] (Boundary-layer equation)
境界層近似を用いることで、層流境界層内の「連続の式」と「ナビエストークス方程式」は、次のように簡略化できる。
$$\dfrac{\partial v_x}{\partial x} + \dfrac{\partial v_x}{\partial y} = 0$$
$$\dfrac{\partial v_x}{\partial t} + v_x \dfrac{\partial v_x}{\partial x} + \dfrac{\partial v_x}{\partial y} = - \dfrac{1}{\rho} \dfrac{\partial p}{\partial x} + \nu \dfrac{\partial^2 v_x}{\partial y^2}$$
$$\dfrac{\partial p}{\partial y} = 0$$
上式では、主流方向をx軸、主流に直行する方向をy軸としている。また、境界層方程式では、「''境界層の厚さは x軸方向の代表長さに比べて非常に小さい''」と仮定している。
!! [[カルマンの積分方程式]]
境界層方程式を、主流方向 x のみに依存する形に変換した式。
$$\dfrac{\tau_w}{\rho} = \dfrac{\partial}{\partial x} (v_{\infty}^2 \theta) + v_{\infty} \dfrac{d v_{\infty}}{dx} \delta^*$$
$$\delta^*$$ and $$\theta$$ are ''displacement thickness'' and ''momentum thickness'' respectively.
!! 境界層厚さ
厳密に言えば、「x軸方向の速度が主流速度になる点までの距離」であるが、実際にこれを決定することは難しい。そのため、「''主流速度の 99% になる位置までの距離''」($$\delta_{0.99}$$) を、境界層厚さの代わりに使うことが多い。
$$\delta_{0.99}$$ 以外の定義としては、以下のようなものがある。
''排除厚さ:'' $$\displaystyle \delta^* = \dfrac{1}{v_{\infty}} \int_0^{\infty} (v_{\infty} - v) dy $$
''運動量厚さ:'' $$\displaystyle \theta= \dfrac{1}{v_{\infty}^2} \int_0^{\infty} v (v_{\infty} - v) dy $$
''エネルギー厚さ:'' $$\displaystyle \theta^* = \dfrac{1}{v_{\infty}^3} \int_0^{\infty} v (v_{\infty}^2 - v^2) dy $$
---
<<tag 流体力学での保存則>>
流体力学においても、3つの保存則 (Conservation laws) がベースとなる。
# 質量保存則
# 運動量保存則
# エネルギー保存則
現実の問題を取り扱う際は、これらの保存則に加え、
* [[MassTransfer]]
* [[伝熱工学]]
* [[連続体力学]]
* [[熱力学]]
などが必要となる。
---
! 1. 質量保存則
流体力学では、質量保存則を表す式を ''連続の式'' という。
!! [[連続の式]] (Continuity equation)
質量保存則。密度 (あるいは 質量) というスカラー量に関する式となる。
$$\dfrac{\partial \rho}{\partial t} + \nabla \cdot (\rho v) = 0$$
* t: 時間
* ρ: 密度
* v: 速度 (ベクトル)
生成消滅項 (R) を加えた形式で書くこともある。
$$\dfrac{\partial \rho}{\partial t} + \nabla \cdot (\rho v) = R$$
!! 移流拡散方程式 (Advection-diffusion equation)
連続の式に [[フィックの法則]] を組み合わせた式を、 ''移流拡散方程式'' という。
$$\dfrac{\partial}{\partial t} (cM) + \nabla \cdot \left( cM (- \dfrac{D}{c} \nabla c + \bar{V}) \right) = R$$
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
! 2. 運動量保存則
!! [[ナビエ・ストークス方程式]] (Navier–Stokes equations)
運動量保存則。一つの式で表されるが、運動量はベクトル量なので、次元と同じ数だけの方程式が含まれている。
$$\dfrac{\partial}{\partial t} (\rho v) + v \cdot \nabla (\rho v) = - \nabla p + \nabla \cdot \tau + \rho f_b$$
上の式では、左辺は運動量の変化、右辺は力積を表している。
* p: 圧力 (上の式では、圧力をスカラーとして扱っている)
* $$\tau$$: せん断応力 (ベクトル)
* f,,b,,: 単位質量当たりにかかる外力 (最も一般的な力は重力)
多くの場合、粘性項は、(非圧縮性ニュートン流体を仮定して) せん断応力ではなく速度を使って表される。
$$\nabla \cdot \tau = \nabla^2 \cdot v$$
!! ナビエストークスの近似
ナビエストークス方程式をそのまま解くのは大変なので、対象とする問題ごとに、何らかの仮定を置き、式の簡略化を行う。有名なものとしては、
* ストークス近似
* オイラーの式
* 境界層近似
* レイノルズ平均ナビエ-ストークス方程式
などがある。
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
! 3. エネルギー保存則
一般的な書き方:
$$\dfrac{\partial}{\partial t} (e \rho) + \nabla \cdot (e \rho v) = \dfrac{d'q}{dt} - \dfrac{d'w}{dt}$$
$$e = u + \dfrac{v^2}{2} + e_r $$
* u: 単位質量当たりの内部エネルギー
* $$e_r$$: 単位質量当たりにかかるポテンシャル力 (最も一般的な力は重力)
* w: 単位質量当たりの 外界に対してする仕事
* q: 単位質量当たりに加えられる熱
なお、密度ではなく質量を使った場合は、次のように書ける。
$$\dfrac{\partial}{\partial t} (e m) + \nabla \cdot (e m v) = \dfrac{d'Q}{dt} - \dfrac{d'W}{dt}$$
* m: Control Volume 内の質量
* W: 外界に対してする仕事
* Q: 加えられる熱
- - -
仕事の項(w)は、3つの項に分けることができ、flow work の項は 速度と圧力で表すことができる。
$$w = w_s + w_\sigma + w_\mu = w_s + \nabla \cdot (pv) + w_\mu$$
* shaft work: $$w_s$$
* flow work (圧力差により生じる仕事) : $$w_\sigma = \nabla \cdot (pv)$$
* shear work (せん断応力により生じる仕事) : $$w_\tau$$
そのため、最初に書いた一般的な式は、次のように変形できる。
$$\dfrac{\partial}{\partial t} (e\rho) + \nabla \cdot ((e + \dfrac{p}{\rho})\rho v) = \dfrac{d'q}{dt} - \left( \dfrac{d'w_s}{dt} + \dfrac{d'w_\mu}{dt} \right)$$
単位質量当たりのエンタルピー(h) を使って、以下のように表すこともできる。
$$\dfrac{\partial}{\partial t} ((u + \dfrac{v^2}{2} + e_r) \rho) + \nabla \cdot ((h + \dfrac{v^2}{2} + e_r) \rho v) = \dfrac{d'q}{dt} - \left( \dfrac{d'w_s}{dt} + \dfrac{d'w_\mu}{dt} \right)$$
- - -
http://slidesplayer.net/slide/11576744/#
---
<<tag "流体力学の物理量">>
! 流体以外の話でもよく出てくるパラメータ
|!パラメータ名 | !記号 | !単位 | !備考 |
|質量 | m | kg | |
|運動量 | p | kg・m/s |$$mv^2$$, (力積: ∫Fdt) |
|エネルギー | U (E) | J |$$= kg\cdot m^2/s^2$$ |
|圧力 | p | Pa | (= N/m2 = kg/m-s2) |
|密度 | ρ | kg/m3 ||
|Actual Velocity (実速度) | v (u) | m/s | v = vs / H |
|エンタルピー | h | J | H = 内部エネルギー + 圧力・体積 |
|frequency (振動数) | F | 1/s | |
! 流体関係
|!パラメータ名 | !記号 | !単位 | !備考 |
|Mass Flow Rate (質量流量) | m (W) | kg/s |
|Volumetric Flow Rate (体積流量) | Q (q) | m3/s | 体積流量 = 質量流量・密度 |
|Holdup | $$H_L$$ | - |液相の体積の割合 |
|Void Ratio (ボイド率) | α | - |気相の体積の割合 ($$\alpha = 1-H_L$$) |
|Mass flux (質量速度) | (G) | kg/m2s |質量速度 = 質量流量 / 管の断面積 |
|Superficial Velocity (みかけ速度) | $$v_s$$ (j) | m/s |$$v_s$$ = 体積流量 / 管の断面積 |
|Slip Velocity | $$v_{slip}$$ | m/s |気相と液相の速度差 ($$= v_g - v_l$$) |
|Drift Velocity | $$v_d$$ | m/s |局所的な、混相流と気相(or 液相)の速度差 |
|Drift Flux | J | m/s | Jl = Hl(vl - vm) (単位面積当たりの各相の流量?)|
|Duffusion Velocity | vm | m/s | |
|Quality (乾き度) | x | - | Wg / (Wg + Wl) (気相の質量流量が占める割合) |
|Mass Concentration | C | - | Hl・ρl / ρm |
|Friction Factor (摩擦係数) | (f) | - | |
|shear stress (せん断応力) | τ | N/m2 | |
|viscosity (粘性係数) | μ | Pa・s | |
|kinematic viscosity (動粘度) | ν | m2/s | 粘性係数 / 密度 |
---
! [[無次元数]]
{{無次元数!!text}}
|Gas oil ratio | Rs | - | |
|formation volume factors of oil and gas | B | |
|in situ Holdup ? |λ |||
; その他
|!パラメータ名 | !記号 | !単位 | !備考 |
|管の断面積 | A, (S) | m2 ||
|管の直径 | d | m | |
|pipe perimeter (管の外周の長さ) | S | m ||
* [[流れの物理量|http://ibis.mach.me.ynu.ac.jp/matsui/Lecture/FD1/sec1/1-3a.html#twoPointFive]]
* [[単位アレコレ 国際単位系(SI)やその他の単位|http://chg.cmpcmp.net/]]
粒子径分析には、いくつかの異なる処理が含まれる。
代表的なものとしては、
# 前処理
#* [[ノイズ除去]] (例: ガウシアン, メディアン)
# [[輪郭の検出]]
# くっついたり重なったりしている粒子の分割
#* Watershed
#* (curvature を見る)
# 極大値(or 極小値) の位置の検出
よく出てくるのは、
* グリーンの定理
** 2 つの異なる定理がそれぞれグリーンの定理と呼ばれるので注意
* ストークスの定理
** 2 つの異なる定理がそれぞれストークスの定理と呼ばれるので注意
* ガウスの(発散)定理
----
! [[グリーンの定理]] (2次元)
閉曲線 C で囲まれた領域 D において、C^^1^^ 級関数 P(x, y), Q(x, y) について、以下が成り立つ。
:$$\displaystyle \oint _{C}(Pdx+Qdy)=\iint _{D}\left({\frac {\partial Q}{\partial x}}-{\frac {\partial P}{\partial y}}\right)dxdy$$
* https://ameblo.jp/metazatunen/entry-11410382352.html
- - - - -
! [[(ガウスの)発散定理]]
(連結閉集合の) 体積分と面積分を関係づける定理。
V を連結閉集合の領域、S をその境界とすると、ベクトル A に対し、次の関係が成り立つ。
: $$\displaystyle \iiint_V \mathrm{div} A dV = \iint_S (A \cdot n) dS$$
----
- -
$$A = \phi \nabla \psi \ $$ (ϕ, ψ はスカラー関数) の場合:
http://hooktail.sub.jp/vectoranalysis/GreensSecondTheorem/
; ストークスの定理
---
ガウスの(発散)定理 の証明
---
http://fnorio.com/0110Green_theorem1/Green_theorem1.html
! 基本的な考え方
近接するピクセル間の明るさの差分を取る。差分の取り方には、いくつかの種類がある。
* https://jp.mathworks.com/discovery/edge-detection.html
プリプロセスが必要な場合もあるみたい。
* [[画像処理のエッジ検出とは?前処理や検査、事例10選 - ロボットSIerの日本サポートシステム|https://jss1.jp/column/column_76/]]
** 膨張
** 収縮
** 平均化
** メディアン
** エッジ抽出
** エッジ強調
----
! フィルタの種類
!! 微分フィルタ
```
画像中の明るさが急に変化する部分を抽出するのがエッジ抽出。
連続した値の場合であれば、微分によって抽出したい部分の接戦を求めてその傾きから変化の具合を読み取ることができる。画像の場合は連続値ではないため、画素値間の差をとることで微分の近似として扱う。
```
[[微分フィルタで画像のエッジ抽出 - Qiita|https://qiita.com/shim0mura/items/5d3cbef873f2dd81d82c]]
|0|0|0|
|0|-1|1|
|0|0|0|
or
|0|0|0|
|1|-1|0|
|0|0|0|
!! 2. プリューウィットフィルタ (Prewitt filter)
```
じゃあこの行列を使えばオールオッケーかと言うとそうでもない。上の微分フィルタだと、画像に含まれるノイズもそのまま明るさの急な変化として抽出されてしまう。なので、ノイズを低減しながらエッジを抽出するといううまい方法がないといけない。そのために作られたのがPrewittフィルタ。
横方向の微分値を求めれば、縦方向のエッジが抽出できる。なので縦方向に平滑化を施してノイズを低減してその後に微分をする。
```
[[微分フィルタで画像のエッジ抽出 - Qiita|https://qiita.com/shim0mura/items/5d3cbef873f2dd81d82c]]
|-1|0|1|
|-1|0|1|
|-1|0|1|
!! 3. ソーベルフィルタ(Sobel filter)
```
Prewittフィルタに中央に重みをつけた上での平均化を行ったのがSobelフィルタ
```
[[微分フィルタで画像のエッジ抽出 - Qiita|https://qiita.com/shim0mura/items/5d3cbef873f2dd81d82c]]
|-1|0|1|
|-2|0|2|
|-1|0|1|
* Process > Find Edges
!! 4. ラプラシアンフィルタ
----
Canny法によるエッジ検出
http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_imgproc/py_canny/py_canny.html
! 連続の式 (Continuity equation)
質量保存則。密度 (あるいは 質量) というスカラー量に関する式となる。
:$$\dfrac{\partial \rho}{\partial t} + \nabla \cdot (\rho v) = 0$$
* t: 時間
* ρ: 密度
* v: 速度 (ベクトル)
. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。. 。● 。.
左辺第二項を展開した形式で書かれることもある。
:$$\dfrac{\partial \rho}{\partial t} + (v \cdot \nabla) \rho + \rho (\nabla \cdot v) = \dfrac{D \rho}{Dt} + \rho (\nabla \cdot v) = 0$$
----
非圧縮性流体の場合は、密度が一定なので $$\dfrac{\partial \rho}{\partial t} = 0$$ となるため、
:$$\nabla \cdot v = 0$$
と単純化できる。
! 累積分布関数 (Cumulative Distribution Function)
連続型確率変数の場合でも、''累積分布関数'' の定義は同じである。
:$$F_X(x) = P(X \leq x), \ \mathrm{for \ all} \ x \in \mathbb{R}$$
! Probability Density Function (PDF)
連続型確率変数では、確率質量関数は使わず、代わりに次のように定義される ''確率密度関数 (Probability Density Function)'' を用いる。
: $$\displaystyle f_X(x) = \lim_{\Delta \to 0} \dfrac{P(x \leq X \leq x+\Delta)}{\Delta} $$
この関数は累積分布関数の導関数になっている。
: $$\displaystyle f_X(x) = \lim_{\Delta \to 0} \dfrac{F_X(x+\Delta) - F_X(x)}{\Delta} = {F_X}'(x)$$
----
! 期待値 (Expectation)
確率変数が連続の場合は、総和ではなく積分を用いる。
:$$\displaystyle E[X] = \int_{-\infty}^{\infty} x f_X(x) dx$$
! Variance
<<tag 連続体力学>>
----
;弾性体:
応力と歪みが 1:1 に対応し、応力を除くと歪みもなくなる。応力が歪みに比例するものをふっく (Hooke) 弾性体と呼ぶ。
;塑性体:
応力がある臨海値 (降伏応力) を超えた場合に、歪みが残り、構造は何らかの意味で欠陥や破壊を含んだものになる。こうした連続体は塑性体と呼ぶ。
;剛体:
如何なる応力にも歪みを生じない。
;流体:
静止状態では接線応力 (shear stress) がなく、法線応力 (normal stress) のみが働く。運動によって一般に接線応力が働き、それが粘性となる。応力が歪み速度に比例する場合をニュートン (Newton) 流体を呼ぶ。
https://ocw.kyoto-u.ac.jp/ja/01-faculty-of-integrated-human-studies-jp/continuum-mechanics/pdf/fluid_01.pdf
A,Bをともに群または環としたときに、AからBへの凖同型写像の集合を次のように記号で表します。
$$\mathrm{Hom} (A,B)$$
---
! 環の凖同型写像
[[環|環・体]] の構造を保つ写像。
<<<
環 R, R' に対して、写像 $$f: R \to R'$$ 次の性質を満たすと
き、写像fを凖同型写像という。
$$\forall a, b \in R$$
$$f(a+b) = f(a) + f(b)$$
$$f(ab) = f(a) f(b) $$
$$f(1_R) = 1_R$$
* 加法及び乗法の群構造が保たれている。
* 乗法の単位元は単位元に写像される。
<<<
[[応用数学III (13)群・環・体の定義|http://www.rs.noda.tus.ac.jp/skimura/AppMath3/AppMathIII-13.pdf]]
---
! 同型写像
* 群の凖同型写像 $$f: G \to G'$$ が全単射のとき、fを群の同型写像といいます。
* 環の凖同型写像 $$f: R \to R'$$ が全単射のとき、fを環の同型写像といいます。
! 数列の収束
$$\displaystyle \lim_{n \to \infty}
a_n = \alpha, a_n \to\alpha (n\to \infty) \Leftrightarrow \forall \epsilon > 0 \exists N > 0 \forall n [n>N \Rightarrow |a_n - \alpha| < \epsilon ]
$$
----
「$$\displaystyle a_n $$ が $$\displaystyle \alpha $$ に収束する」つまり「$$\displaystyle \alpha $$ が $$\displaystyle a_n $$ の極限である」ことを証明するとは、どんな(に小さな)正実数 ε が与えられても、ε に応じて(十分大きな)自然数Nを選べば、N より大きいすべての自然数nについて$$\displaystyle |a_n - a| < \epsilon $$ が成り立つ。
ここでしなければならないのは、「ε を使ってNを作る「作り方」を見つけること」、つまり「Nをεで表す式などを作ること」。
!! $$\Leftrightarrow $$ の右側の意味
このうち $$\forall$$ という記号の付いている文字はあなたにはいじることができない文字なわけです。だから、残されたことは
$$\exists$$ のついている数Nを、この文が成り立つように作り出すことだけなのです。しかも、このNは $$\exists N$$ より左側にある文字 $$\epsilon$$ には依存してよいが、∃Nより右側にある文字nには依存してはいけないのですから、結局、具体的にはNを $$\epsilon$$ で表す式などを作ること
[[https://lecture.ecc.u-tokyo.ac.jp/~nkiyono/kiyono/13_odat-01b.pdf]] より
- - - - -
* http://www2.math.kyushu-u.ac.jp/~hara/lectures/08/zoku01.pdf
----
! 証明の例
!! $$\displaystyle \lim_{x \to \infty} a_n = \alpha, \displaystyle \lim_{x \to \infty} b_n = \beta $$ とすると、「ある番号から先で $$a_n \leq b_n$$ ならば $$\alpha \leq \beta$$」
仮定より、ある自然数 $$n_1$$ から先では、 $$a_n \leq b_n (n \geq n_1)$$ である。
また、任意の正の実数 ε に対し、$$a_n, b_n$$ は、それぞれある自然数 $$n_2, n_3$$ から先で、
* $$ \alpha - \epsilon < a_n < \alpha + \epsilon $$ $$(n \geq n_2)$$
* $$ \beta - \epsilon < b_n < \beta + \epsilon $$ $$(n \geq n_3)$$
となる。ここで、 $$n > max(n_1,n_2,n_3)$$ となる n をとると、
$$ \alpha - \epsilon < a_n \leq b_n < \beta + \epsilon $$
が成り立つ。つまり、任意の ε に対して、$$ \alpha - \beta = 2 \epsilon$$ が成り立つ n が存在する。
- - - - -
ε を任意の正の実数とし、自然数 N を、$$\displaystyle N = [ \frac{1}{\epsilon} ] + 1 $$ 定める。
N より大きい任意のnに対して、
$$\displaystyle \frac{1}{n} < \frac{1}{N} < \frac{1}{\frac{1}{ \epsilon }} = \epsilon$$
が成り立つ。
$$\displaystyle |\frac{1}{n}-0| = \frac{1}{n} $$
であるから、 $$\displaystyle \frac{1}{n} < \epsilon $$ は、$$\displaystyle \lim_{n \to \infty} \frac{1}{n} = 0 $$ であることを示している。
* [[理系大学入学後にどん詰まる「ε-δ論法」について - HELLO CYBERNETICS|http://s0sem0y.hatenablog.com/entry/2017/04/29/091113]]