tiddlywiki-production
Version:
a non-linear personal web notebook
1 lines • 906 kB
JavaScript
$tw.preloadTiddler({"title":"$:/plugins/tiddlywiki/xlsx-utils","name":"XLSX Utils","description":"XLSX spreadsheet utilities","list":"readme controls license","dependents":"$:/plugins/tiddlywiki/jszip","version":"5.1.22","plugin-type":"plugin","type":"application/json","text":"{\"tiddlers\":{\"$:/plugins/tiddlywiki/xlsx-utils/controls\":{\"title\":\"$:/plugins/tiddlywiki/xlsx-utils/controls\",\"caption\":\"XLSX Utilities\",\"tags\":\"$:/tags/ControlPanel\",\"text\":\"\\\\define help-button(state)\\n<$button popup=\\\"\\\"\\\"$:/state/expand-help/$state$\\\"\\\"\\\" class=\\\"tc-btn-invisible tc-popup-keep\\\">\\n{{$:/core/images/help}}\\n</$button>\\n\\\\end\\n\\n\\\\define help-content(type,state)\\n<$reveal tag=\\\"span\\\" state=\\\"\\\"\\\"$:/state/expand-help/$state$\\\"\\\"\\\" type=\\\"popup\\\" position=\\\"below\\\">\\n<div class=\\\"tc-drop-down tc-popup-keep\\\" style=\\\"padding: 0.5em; max-width: 30em; white-space: normal;\\\">\\n<$transclude tiddler=\\\"\\\"\\\"$:/plugins/tiddlywiki/xlsx-utils/docs/$type$\\\"\\\"\\\" mode=\\\"block\\\"/>\\n</div>\\n</$reveal>\\n\\\\end\\n\\n\\\\define renameProxyTitle()\\n$:/state/plugins/tiddlywiki/xlsx-utils/rename-$(currentTiddler)$\\n\\\\end\\n\\n\\\\define rename-current-tiddler()\\n<$edit-text tag=\\\"input\\\" tiddler=<<renameProxyTitle>> placeholder=\\\"Rename\\\" default=<<currentTiddler>> size=\\\"50\\\"/>\\n<$reveal type=\\\"nomatch\\\" state=\\\"\\\"\\\"$(renameProxyTitle)$\\\"\\\"\\\" text=<<currentTiddler>> default=<<currentTiddler>> tag=\\\"span\\\">\\n<$button>\\n<$action-deletetiddler $tiddler=<<renameProxyTitle>>/>\\ncancel\\n</$button>\\n<$button>\\n<$action-sendmessage $message=\\\"tm-rename-tiddler\\\" from=<<currentTiddler>> to={{$(renameProxyTitle)$}}/>\\n<$action-deletetiddler $tiddler=<<renameProxyTitle>>/>\\nrename\\n</$button>\\n<$set name=\\\"proxy-title\\\" value={{$(renameProxyTitle)$}}>\\n<$list filter=\\\"\\\"\\\"[<proxy-title>is[tiddler]]\\\"\\\"\\\">\\nWarning: tiddler already exists\\n</$list>\\n</$set>\\n</$reveal>\\n\\\\end\\n\\n\\\\define expand-collapse-button(state)\\n<$reveal state=\\\"\\\"\\\"$:/state/expand/$state$\\\"\\\"\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"no\\\" tag=\\\"span\\\">\\n<$button class=\\\"tc-btn-invisible\\\">\\n<$action-setfield $tiddler=\\\"\\\"\\\"$:/state/expand/$state$\\\"\\\"\\\" $value=\\\"no\\\"/>\\n{{$:/core/images/down-arrow}}\\n</$button>\\n</$reveal>\\n<$reveal state=\\\"\\\"\\\"$:/state/expand/$state$\\\"\\\"\\\" type=\\\"nomatch\\\" text=\\\"yes\\\" default=\\\"no\\\" tag=\\\"span\\\">\\n<$button class=\\\"tc-btn-invisible\\\">\\n<$action-setfield $tiddler=\\\"\\\"\\\"$:/state/expand/$state$\\\"\\\"\\\" $value=\\\"yes\\\"/>\\n{{$:/core/images/right-arrow}}\\n</$button>\\n</$reveal>\\n\\\\end\\n\\n\\\\define expand-collapse-content(state,content,class)\\n<$reveal state=\\\"\\\"\\\"$:/state/expand/$state$\\\"\\\"\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"no\\\" tag=\\\"div\\\" class=\\\"\\\"\\\"$class$\\\"\\\"\\\" animate=\\\"yes\\\" retain=\\\"yes\\\">\\n$content$\\n</$reveal>\\n\\\\end\\n\\n\\\\define up-down-buttons(parent,child)\\n<$list filter=\\\"[list<$parent$>butfirst[]field:title<$child$>limit[1]]\\\" variable=\\\"listItem\\\">\\n<$button class=\\\"tc-btn-invisible\\\">\\n<$action-listops $tiddler=<<$parent$>> $subfilter=\\\"+[move:-1<$child$>]\\\"/>\\n{{$:/core/images/chevron-up}}\\n</$button>\\n</$list>\\n<$list filter=\\\"[list<$parent$>butlast[]field:title<$child$>limit[1]]\\\" variable=\\\"listItem\\\">\\n<$button class=\\\"tc-btn-invisible\\\">\\n<$action-listops $tiddler=<<$parent$>> $subfilter=\\\"+[move:1<$child$>]\\\"/>\\n{{$:/core/images/chevron-down}}\\n</$button>\\n</$list>\\n\\\\end\\n\\n\\\\define edit-button(state)\\n<$reveal state=\\\"\\\"\\\"$:/state/edit/$state$\\\"\\\"\\\" type=\\\"nomatch\\\" text=\\\"yes\\\" default=\\\"no\\\" tag=\\\"span\\\">\\n<$button class=\\\"tc-btn-invisible\\\">\\n<$action-setfield $tiddler=\\\"\\\"\\\"$:/state/edit/$state$\\\"\\\"\\\" $value=\\\"yes\\\"/>\\n<$action-setfield $tiddler=\\\"\\\"\\\"$:/state/expand/$state$\\\"\\\"\\\" $value=\\\"yes\\\"/>\\n{{$:/core/images/edit-button}}\\n</$button>\\n</$reveal>\\n<$reveal state=\\\"\\\"\\\"$:/state/edit/$state$\\\"\\\"\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"no\\\" tag=\\\"span\\\">\\n<$button class=\\\"tc-btn-invisible\\\">\\n<$action-setfield $tiddler=\\\"\\\"\\\"$:/state/edit/$state$\\\"\\\"\\\" $value=\\\"no\\\"/>\\n{{$:/core/images/done-button}} Finish editing\\n</$button>\\n</$reveal>\\n\\\\end\\n\\n\\\\define delete-item-button(filter,parent,title,prompt)\\n<$button class=\\\"tc-btn-invisible\\\">\\n<$action-deletetiddler $filter=\\\"\\\"\\\"$filter$\\\"\\\"\\\"/>\\n<$action-listops $tiddler=\\\"\\\"\\\"$parent$\\\"\\\"\\\" $subfilter=\\\"-[[$title$]]\\\"/>\\n{{$:/core/images/delete-button}}$prompt$\\n</$button>\\n\\\\end\\n\\n\\\\define edit-field()\\n<$select tiddler=<<field>> field=\\\"import-field-list-op\\\" default=\\\"none\\\">\\n<option value=\\\"none\\\">Set field</option>\\n<option value=\\\"append\\\">Append to list field</option>\\n</$select>\\n<$edit-text tiddler=<<field>> field=\\\"import-field-name\\\" size=\\\"10\\\" tag=\\\"input\\\" placeholder=\\\"field name\\\"default=\\\"\\\"/>\\n<$reveal state=\\\"\\\"\\\"$(field)$!!import-field-list-op\\\"\\\"\\\" type=\\\"match\\\" text=\\\"none\\\" default=\\\"none\\\" tag=\\\"span\\\">\\nto\\n</$reveal>\\n<$reveal state=\\\"\\\"\\\"$(field)$!!import-field-list-op\\\"\\\"\\\" type=\\\"match\\\" text=\\\"append\\\" default=\\\"none\\\" tag=\\\"span\\\">\\nthe\\n</$reveal>\\n<$select tiddler=<<field>> field=\\\"import-field-type\\\" default=\\\"string\\\">\\n<option value=\\\"date\\\">date</option>\\n<option value=\\\"string\\\">string</option>\\n</$select>\\n<$select tiddler=<<field>> field=\\\"import-field-source\\\" default=\\\"column\\\">\\n<option value=\\\"column\\\">from column</option>\\n<option value=\\\"constant\\\">constant</option>\\n</$select>\\n<$reveal state=\\\"\\\"\\\"$(field)$!!import-field-source\\\"\\\"\\\" type=\\\"match\\\" text=\\\"column\\\" default=\\\"column\\\" tag=\\\"span\\\">\\n<$edit-text tiddler=<<field>> field=\\\"import-field-column\\\" tag=\\\"input\\\" placeholder=\\\"column\\\" default=\\\"\\\"/>\\nprefixed\\n<$edit-text tiddler=<<field>> field=\\\"import-field-prefix\\\" tag=\\\"input\\\" placeholder=\\\"prefix\\\" default=\\\"\\\"/>,\\nsuffixed\\n<$edit-text tiddler=<<field>> field=\\\"import-field-suffix\\\" tag=\\\"input\\\" placeholder=\\\"suffix\\\" default=\\\"\\\"/>\\n</$reveal>\\n<$reveal state=\\\"\\\"\\\"$(field)$!!import-field-source\\\"\\\"\\\" type=\\\"match\\\" text=\\\"constant\\\" default=\\\"column\\\" tag=\\\"span\\\">\\n<$edit-text tiddler=<<field>> field=\\\"import-field-value\\\" tag=\\\"input\\\" placeholder=\\\"constant\\\" default=\\\"\\\"/>\\n</$reveal>\\n<$checkbox tiddler=<<field>> field=\\\"import-field-skip-tiddler-if-blank\\\" checked=\\\"yes\\\" unchecked=\\\"no\\\" default=\\\"no\\\">\\nSkip this tiddler when field blank\\n<br/>\\nTitle:\\n<$tiddler tiddler=<<field>>>\\n<<rename-current-tiddler>>\\n</$tiddler>\\n\\\\end\\n\\n\\\\define view-field()\\n<$link to=<<field>>>\\n<$list filter=\\\"[<field>!has[import-field-list-op]]\\\" variable=\\\"listItem\\\">\\nSet field ''<$view tiddler=<<field>> field=\\\"import-field-name\\\"/>'' to\\n</$list>\\n<$list filter=\\\"[<field>get[import-field-list-op]prefix[append]]\\\" variable=\\\"listItem\\\">\\nAppend to list field ''<$view tiddler=<<field>> field=\\\"import-field-name\\\"/>''\\n</$list>\\n<$list filter=\\\"[<field>has[import-field-prefix]]\\\" variable=\\\"listItem\\\">\\n''<code><$view tiddler=<<field>> field=\\\"import-field-prefix\\\"/></code>'' +\\n</$list>\\n<$list filter=\\\"[<field>get[import-field-type]prefix[date]]\\\" variable=\\\"listItem\\\">\\ndate\\n</$list>\\n<$list filter=\\\"[<field>get[import-field-source]prefix[column]]\\\" variable=\\\"listItem\\\">\\nvalue from column ''<$view tiddler=<<field>> field=\\\"import-field-column\\\"/>''\\n</$list>\\n<$list filter=\\\"[<field>get[import-field-source]prefix[constant]]\\\" variable=\\\"listItem\\\">\\nconstant ''<code><$view tiddler=<<field>> field=\\\"import-field-value\\\"/></code>''\\n</$list>\\n<$list filter=\\\"[<field>has[import-field-suffix]]\\\" variable=\\\"listItem\\\">\\n+ ''<code><$view tiddler=<<field>> field=\\\"import-field-suffix\\\"/></code>''\\n</$list>\\n</$link>\\n\\\\end\\n\\n\\\\define list-fields()\\n<ul class=\\\"tc-import-spec-row-list\\\">\\n<$list filter=\\\"[list<row>]\\\" variable=\\\"field\\\" emptyMessage=\\\"<div>(No field import specifiers)</div>\\\">\\n<li class=\\\"tc-import-spec-field-wrapper\\\">\\n<$reveal state=\\\"\\\"\\\"$:/state/edit/$(row)$\\\"\\\"\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"no\\\" tag=\\\"span\\\">\\n<<edit-field>>\\n<<up-down-buttons parent:\\\"row\\\" child:\\\"field\\\">>\\n<$macrocall $name=\\\"delete-item-button\\\" filter=\\\"[<field>]\\\" parent=<<row>> title=<<field>>/>\\n</$reveal>\\n<$reveal state=\\\"\\\"\\\"$:/state/edit/$(row)$\\\"\\\"\\\" type=\\\"nomatch\\\" text=\\\"yes\\\" default=\\\"no\\\" tag=\\\"span\\\">\\n<<view-field>>\\n</$reveal>\\n</li>\\n</$list>\\n</ul>\\n\\\\end\\n\\n\\\\define view-row-content()\\n<$reveal state=\\\"\\\"\\\"$:/state/edit/$(row)$\\\"\\\"\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"no\\\" tag=\\\"ul\\\" class=\\\"tc-import-spec-row-controls\\\" animate=\\\"yes\\\" retain=\\\"yes\\\">\\n<li>\\n<$macrocall $name=\\\"delete-item-button\\\" filter=\\\"[<row>] [<row>getlist[]]\\\" parent=<<sheet>> title=<<row>> prompt=\\\" Delete this row\\\"/>\\n</li>\\n<li>\\nTitle:\\n<$tiddler tiddler=<<row>>>\\n<<rename-current-tiddler>>\\n</$tiddler>\\n</li>\\n<li>\\nRow type:\\n<$select tiddler=<<row>> field=\\\"import-row-type\\\" default=\\\"by-field\\\">\\n<option value=\\\"by-field\\\">By field</option>\\n<option value=\\\"by-column\\\">By column</option>\\n</$select>\\n</li>\\n<li>\\n<$button class=\\\"tc-btn-invisible\\\">\\n<$action-createtiddler $basetitle=\\\"$:/_ExcelImporter/ImportSpecifiers/Field\\\" $savetitle=\\\"$:/temp/newtiddler\\\" import-spec-role=\\\"field\\\" import-field-name=\\\"fieldname\\\" import-field-type=\\\"string\\\" import-field-source=\\\"column\\\" import-field-column=\\\"Column Name\\\" />\\n<$action-listops $tiddler=<<row>> $subfilter=\\\"[{$:/temp/newtiddler}] +[putfirst[]]\\\"/>\\n{{$:/core/images/new-button}} Add new field\\n</$button>\\n</li>\\n</$reveal>\\n<<list-fields>>\\n\\\\end\\n\\n\\\\define view-row()\\n<div class=\\\"tc-import-spec-row-wrapper\\\">\\n<h5>\\n<$macrocall $name=\\\"expand-collapse-button\\\" state=<<row>>/>\\nEach row: <$list filter=\\\"[list<row>import-field-name[title]]\\\" variable=\\\"field\\\" emptyMessage=\\\"\\n<$link to=<<field>>>(title field not set)</$link>\\\"><<view-field>></$list>\\n<$macrocall $name=\\\"edit-button\\\" state=<<row>>/>\\n<<up-down-buttons parent:\\\"sheet\\\" child:\\\"row\\\">>\\n<$macrocall $name=\\\"help-button\\\" state=<<row>>/>\\n</h5>\\n<$macrocall $name=\\\"help-content\\\" type=\\\"row\\\" state=<<row>>/>\\n<$macrocall $name=\\\"expand-collapse-content\\\" state=<<row>> content=<<view-row-content>> class=\\\"tc-import-spec-row\\\"/>\\n</div>\\n\\\\end\\n\\n\\\\define list-rows()\\n<div class=\\\"tc-import-spec-sheet-list\\\">\\n<$list filter=\\\"[list<sheet>]\\\" variable=\\\"row\\\" emptyMessage=\\\"<div>(No row import specifiers)</div>\\\">\\n<<view-row>>\\n</$list>\\n\\\\end\\n\\n\\\\define view-sheet-content()\\n<$reveal state=\\\"\\\"\\\"$:/state/edit/$(sheet)$\\\"\\\"\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"no\\\" tag=\\\"ul\\\" class=\\\"tc-import-spec-sheet-controls\\\" animate=\\\"yes\\\" retain=\\\"yes\\\">\\n<li>\\n<$macrocall $name=\\\"delete-item-button\\\" filter=\\\"[<sheet>] [<sheet>getlist[]] [<sheet>getlist[]getlist[]]\\\" parent=<<workbook>> title=<<sheet>> prompt=\\\" Delete this sheet\\\"/>\\n</li>\\n<li>\\nTitle:\\n<$tiddler tiddler=<<sheet>>>\\n<<rename-current-tiddler>>\\n</$tiddler>\\n</li>\\n<li>\\nImport sheet name:\\n<$edit-text tiddler=<<sheet>> field=\\\"import-sheet-name\\\" size=\\\"50\\\"/>\\n</li>\\n<li>\\n<$button class=\\\"tc-btn-invisible\\\">\\n<$action-createtiddler $basetitle=\\\"$:/_ExcelImporter/ImportSpecifiers/Row\\\" $savetitle=\\\"$:/temp/newtiddler\\\" import-spec-role=\\\"row\\\"/>\\n<$action-listops $tiddler=<<sheet>> $subfilter=\\\"[{$:/temp/newtiddler}] +[putfirst[]]\\\"/>\\n<$action-setfield $tiddler={{{ [{$:/temp/newtiddler}addprefix[$:/state/edit/]] }}} $value=\\\"yes\\\"/>\\n<$action-setfield $tiddler={{{ [{$:/temp/newtiddler}addprefix[$:/state/expand/]] }}} $value=\\\"yes\\\"/>\\n{{$:/core/images/new-button}} Add new row\\n</$button>\\n</li>\\n</$reveal>\\n<<list-rows>>\\n\\\\end\\n\\n\\\\define view-sheet()\\n<div class=\\\"tc-import-spec-sheet-wrapper\\\">\\n<h4>\\n<$macrocall $name=\\\"expand-collapse-button\\\" state=<<sheet>>/>\\nSheet: <$link to=<<sheet>>><$view tiddler=<<sheet>> field=\\\"import-sheet-name\\\"/></$link>\\n<$macrocall $name=\\\"edit-button\\\" state=<<sheet>>/>\\n<<up-down-buttons parent:\\\"workbook\\\" child:\\\"sheet\\\">>\\n<$macrocall $name=\\\"help-button\\\" state=<<sheet>>/>\\n</h4>\\n<$macrocall $name=\\\"help-content\\\" type=\\\"sheet\\\" state=<<sheet>>/>\\n<$macrocall $name=\\\"expand-collapse-content\\\" state=<<sheet>> content=<<view-sheet-content>> class=\\\"tc-import-spec-sheet\\\"/>\\n</div>\\n\\\\end\\n\\n\\\\define list-sheets()\\n<div class=\\\"tc-import-spec-workbook-list\\\">\\n<$list filter=\\\"[list<workbook>]\\\" variable=\\\"sheet\\\" emptyMessage=\\\"<div>(No sheet import specifiers)</div>\\\">\\n<<view-sheet>>\\n</$list>\\n</div>\\n\\\\end\\n\\n\\\\define view-workbook-content()\\n<$reveal state=\\\"\\\"\\\"$:/state/edit/$(workbook)$\\\"\\\"\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"no\\\" tag=\\\"ul\\\" class=\\\"tc-import-spec-workbook-controls\\\" animate=\\\"yes\\\" retain=\\\"yes\\\">\\n<li>\\n<$macrocall $name=\\\"delete-item-button\\\" filter=\\\"[<workbook>] [<workbook>getlist[]] [<workbook>getlist[]getlist[]] [<workbook>getlist[]getlist[]getlist[]]\\\" prompt=\\\" Delete this workbook\\\"/>\\n</li>\\n<li>\\nTitle:\\n<$tiddler tiddler=<<workbook>>>\\n<<rename-current-tiddler>>\\n</$tiddler>\\n</li>\\n<li>\\nCaption:\\n<$edit-text tiddler=<<workbook>> field=\\\"caption\\\" size=\\\"50\\\"/>\\n</li>\\n<li>\\n<$button class=\\\"tc-btn-invisible\\\">\\n<$action-createtiddler $basetitle=\\\"$:/_ExcelImporter/ImportSpecifiers/Sheet\\\" $savetitle=\\\"$:/temp/newtiddler\\\" import-spec-role=\\\"sheet\\\" import-sheet-name=\\\"Sheet name\\\"/>\\n<$action-listops $tiddler=<<workbook>> $subfilter=\\\"[{$:/temp/newtiddler}] +[putfirst[]]\\\"/>\\n<$action-setfield $tiddler={{{ [{$:/temp/newtiddler}addprefix[$:/state/edit/]] }}} $value=\\\"yes\\\"/>\\n<$action-setfield $tiddler={{{ [{$:/temp/newtiddler}addprefix[$:/state/expand/]] }}} $value=\\\"yes\\\"/>\\n{{$:/core/images/new-button}} Add new sheet\\n</$button>\\n</li>\\n</$reveal>\\n<<list-sheets>>\\n\\\\end\\n\\n\\\\define view-workbook()\\n<div class=\\\"tc-import-spec-workbook-wrapper\\\">\\n<h3>\\n<$macrocall $name=\\\"expand-collapse-button\\\" state=<<workbook>>/>\\nWorkbook: <$link to=<<workbook>>><$view tiddler=<<workbook>> field=\\\"caption\\\"/></$link>\\n<$macrocall $name=\\\"edit-button\\\" state=<<workbook>>/>\\n<$macrocall $name=\\\"help-button\\\" state=<<workbook>>/>\\n</h3>\\n<$macrocall $name=\\\"help-content\\\" type=\\\"workbook\\\" state=<<workbook>>/>\\n<$macrocall $name=\\\"expand-collapse-content\\\" state=<<workbook>> content=<<view-workbook-content>> class=\\\"tc-import-spec-workbook\\\"/>\\n</div>\\n\\\\end\\n\\n\\\\define list-workbooks()\\n<ul class=\\\"tc-import-spec-editor-controls\\\">\\n<li>\\n<$button class=\\\"tc-btn-invisible\\\">\\n<$action-createtiddler $basetitle=\\\"$:/_ExcelImporter/ImportSpecifiers/Workbook\\\" $savetitle=\\\"$:/temp/newtiddler\\\" import-spec-role=\\\"workbook\\\" caption=\\\"New workbook\\\"/>\\n<$action-setfield $tiddler={{{ [{$:/temp/newtiddler}addprefix[$:/state/edit/]] }}} $value=\\\"yes\\\"/>\\n<$action-setfield $tiddler={{{ [{$:/temp/newtiddler}addprefix[$:/state/expand/]] }}} $value=\\\"yes\\\"/>\\n{{$:/core/images/new-button}} Add new workbook\\n</$button>\\n</li>\\n</ul>\\n<div class=\\\"tc-import-spec-editor-list\\\">\\n<$list filter=\\\"[all[shadows+tiddlers]import-spec-role[workbook]sort[caption]]\\\" variable=\\\"workbook\\\">\\n<<view-workbook>>\\n</$list>\\n</div>\\n\\\\end\\n\\n<h1>\\nControls for XLSX Spreadsheet Utilities\\n</h1>\\n\\n<div class=\\\"tc-import-spec-selector\\\">\\n<h2>\\nCurrent Import Specification\\n</h2>\\n<$list filter=\\\"[all[shadows+tiddlers]import-spec-role[workbook]limit[1]]\\\" emptyMessage=\\\"\\\"\\\"\\nThere are no import specifications available. Use the controls below to create one\\n\\\"\\\"\\\">\\nThis is the import specification that will be used for the next import of an `.XLSX` file\\n<$select tiddler=\\\"$:/config/plugins/tiddlywiki/xlsx-utils/default-import-spec\\\">\\n<$list filter=\\\"[all[shadows+tiddlers]import-spec-role[workbook]sort[caption]]\\\">\\n<option value=<<currentTiddler>>><$text text={{!!caption}}/></option>\\n</$list>\\n</$select>\\n</$list>\\n</div>\\n\\n<div class=\\\"tc-import-spec-editor-wrapper\\\">\\n<h2>\\n Import Specifications\\n<$macrocall $name=\\\"help-button\\\" state=\\\"\\\"/>\\n</h2>\\n<$macrocall $name=\\\"help-content\\\" type=\\\"editor\\\" state=\\\"\\\"/>\\n<div class=\\\"tc-import-spec-editor\\\">\\n<<list-workbooks>>\\n</div>\\n</div>\\n\"},\"$:/plugins/tiddlywiki/xlsx-utils/deserializer.js\":{\"title\":\"$:/plugins/tiddlywiki/xlsx-utils/deserializer.js\",\"text\":\"/*\\\\\\ntitle: $:/plugins/tiddlywiki/xlsx-utils/deserializer.js\\ntype: application/javascript\\nmodule-type: tiddlerdeserializer\\n\\nXLSX file deserializer\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\n/*\\nParse an XLSX file into tiddlers\\n*/\\nexports[\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\\\"] = function(text,fields) {\\n\\t// Collect output tiddlers in an array\\n\\tvar results = [],\\n\\t\\tXLSXImporter = require(\\\"$:/plugins/tiddlywiki/xlsx-utils/importer.js\\\").XLSXImporter,\\n\\t\\timporter = new XLSXImporter({\\n\\t\\t\\ttext: text\\n\\t\\t});\\n\\t// Return the output tiddlers\\n\\treturn importer.getResults();\\n};\\n\\n})();\\n\",\"type\":\"application/javascript\",\"module-type\":\"tiddlerdeserializer\"},\"$:/plugins/tiddlywiki/xlsx-utils/docs/editor\":{\"title\":\"$:/plugins/tiddlywiki/xlsx-utils/docs/editor\",\"text\":\"!!! Import Specifications\\n\\nImport specifications govern how spreadsheets are converted into individual tiddlers.\\n\\nEach \\\"workbook\\\" describes how spreadsheets of a particular format should be converted.\\n\"},\"$:/plugins/tiddlywiki/xlsx-utils/docs/row\":{\"title\":\"$:/plugins/tiddlywiki/xlsx-utils/docs/row\",\"text\":\"!!! Row Import Specifications\\n\\nEach row import specification describes how one tiddler should be extracted from each row of the current sheet.\\n\\nNote that using multiple row import specifications within a sheet enables multiple tiddlers to be created from each row of the sheet.\\n\\nRows contain a list of field import specifications that describe how each field of the tiddler should be created.\\n\\n!!! Field Import Specifications\\n\\nField import specifications describe the value given to a particular field of a tiddler.\\n\\nThey follow a rich syntax for describing how each field of the tiddler is created. For example:\\n\\n* Set field `title` to string from column `Organization`\\n* Set field `role` to string constant `organization`\\n* Append to list field `list` the string from column `Country` prefixed with `Map:`\\n\\n\"},\"$:/plugins/tiddlywiki/xlsx-utils/docs/sheet\":{\"title\":\"$:/plugins/tiddlywiki/xlsx-utils/docs/sheet\",\"text\":\"!!! Sheet Import Specifications\\n\\nEach sheet import specification describes how a named sheet within a workbook should be converted into individual tiddlers.\\n\\nSheets contain a list of row import specifications that describe how individual rows of the sheet should be handled.\\n\\nEach sheet has the name of the sheet that it handles.\\n\\nNote that the first row of each sheet is interpreted as the title of each column.\\n\"},\"$:/plugins/tiddlywiki/xlsx-utils/docs/workbook\":{\"title\":\"$:/plugins/tiddlywiki/xlsx-utils/docs/workbook\",\"text\":\"!!! Workbook Import Specifications\\n\\nEach workbook import specification describes how spreadsheets of a particular format should be converted into individual tiddlers.\\n\\nCreate a new workbook for each type of spreadsheet that you will be working with.\\n\\nWorkbooks contain a list of sheet import specifications that describe how individual sheets of the workbook should be handled.\\n\\nEach workbook has a caption that you can use to describe its purpose.\\n\"},\"$:/plugins/tiddlywiki/xlsx-utils/xlsx.js\":{\"text\":\"var old_exports = exports,JSZip = require(\\\"$:/plugins/tiddlywiki/jszip/jszip.js\\\");exports = {};if($tw.browser){module.exports=undefined;};/* xlsx.js (C) 2013-2015 SheetJS -- http://sheetjs.com */\\n/* vim: set ts=2: */\\n/*jshint -W041 */\\n/*jshint funcscope:true, eqnull:true */\\nvar XLSX = {};\\n(function make_xlsx(XLSX){\\nXLSX.version = '0.8.0';\\nvar current_codepage = 1200, current_cptable;\\nif(typeof module !== \\\"undefined\\\" && typeof require !== 'undefined') {\\n\\tif(typeof cptable === 'undefined') cptable = require('./dist/cpexcel');\\n\\tcurrent_cptable = cptable[current_codepage];\\n}\\nfunction reset_cp() { set_cp(1200); }\\nvar set_cp = function(cp) { current_codepage = cp; };\\n\\nfunction char_codes(data) { var o = []; for(var i = 0, len = data.length; i < len; ++i) o[i] = data.charCodeAt(i); return o; }\\nvar debom_xml = function(data) { return data; };\\n\\nvar _getchar = function _gc1(x) { return String.fromCharCode(x); };\\nif(typeof cptable !== 'undefined') {\\n\\tset_cp = function(cp) { current_codepage = cp; current_cptable = cptable[cp]; };\\n\\tdebom_xml = function(data) {\\n\\t\\tif(data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) { return cptable.utils.decode(1200, char_codes(data.substr(2))); }\\n\\t\\treturn data;\\n\\t};\\n\\t_getchar = function _gc2(x) {\\n\\t\\tif(current_codepage === 1200) return String.fromCharCode(x);\\n\\t\\treturn cptable.utils.decode(current_codepage, [x&255,x>>8])[0];\\n\\t};\\n}\\nvar Base64 = (function make_b64(){\\n\\tvar map = \\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\\";\\n\\treturn {\\n\\t\\tencode: function(input, utf8) {\\n\\t\\t\\tvar o = \\\"\\\";\\n\\t\\t\\tvar c1, c2, c3, e1, e2, e3, e4;\\n\\t\\t\\tfor(var i = 0; i < input.length; ) {\\n\\t\\t\\t\\tc1 = input.charCodeAt(i++);\\n\\t\\t\\t\\tc2 = input.charCodeAt(i++);\\n\\t\\t\\t\\tc3 = input.charCodeAt(i++);\\n\\t\\t\\t\\te1 = c1 >> 2;\\n\\t\\t\\t\\te2 = (c1 & 3) << 4 | c2 >> 4;\\n\\t\\t\\t\\te3 = (c2 & 15) << 2 | c3 >> 6;\\n\\t\\t\\t\\te4 = c3 & 63;\\n\\t\\t\\t\\tif (isNaN(c2)) { e3 = e4 = 64; }\\n\\t\\t\\t\\telse if (isNaN(c3)) { e4 = 64; }\\n\\t\\t\\t\\to += map.charAt(e1) + map.charAt(e2) + map.charAt(e3) + map.charAt(e4);\\n\\t\\t\\t}\\n\\t\\t\\treturn o;\\n\\t\\t},\\n\\t\\tdecode: function b64_decode(input, utf8) {\\n\\t\\t\\tvar o = \\\"\\\";\\n\\t\\t\\tvar c1, c2, c3;\\n\\t\\t\\tvar e1, e2, e3, e4;\\n\\t\\t\\tinput = input.replace(/[^A-Za-z0-9\\\\+\\\\/\\\\=]/g, \\\"\\\");\\n\\t\\t\\tfor(var i = 0; i < input.length;) {\\n\\t\\t\\t\\te1 = map.indexOf(input.charAt(i++));\\n\\t\\t\\t\\te2 = map.indexOf(input.charAt(i++));\\n\\t\\t\\t\\te3 = map.indexOf(input.charAt(i++));\\n\\t\\t\\t\\te4 = map.indexOf(input.charAt(i++));\\n\\t\\t\\t\\tc1 = e1 << 2 | e2 >> 4;\\n\\t\\t\\t\\tc2 = (e2 & 15) << 4 | e3 >> 2;\\n\\t\\t\\t\\tc3 = (e3 & 3) << 6 | e4;\\n\\t\\t\\t\\to += String.fromCharCode(c1);\\n\\t\\t\\t\\tif (e3 != 64) { o += String.fromCharCode(c2); }\\n\\t\\t\\t\\tif (e4 != 64) { o += String.fromCharCode(c3); }\\n\\t\\t\\t}\\n\\t\\t\\treturn o;\\n\\t\\t}\\n\\t};\\n})();\\nvar has_buf = (typeof Buffer !== 'undefined');\\n\\nfunction new_raw_buf(len) {\\n\\t/* jshint -W056 */\\n\\treturn new (has_buf ? Buffer : Array)(len);\\n\\t/* jshint +W056 */\\n}\\n\\nfunction s2a(s) {\\n\\tif(has_buf) return new Buffer(s, \\\"binary\\\");\\n\\treturn s.split(\\\"\\\").map(function(x){ return x.charCodeAt(0) & 0xff; });\\n}\\n\\nvar bconcat = function(bufs) { return [].concat.apply([], bufs); };\\n\\nvar chr0 = /\\\\u0000/g, chr1 = /[\\\\u0001-\\\\u0006]/;\\n/* ssf.js (C) 2013-2014 SheetJS -- http://sheetjs.com */\\n/*jshint -W041 */\\nvar SSF = {};\\nvar make_ssf = function make_ssf(SSF){\\nSSF.version = '0.8.1';\\nfunction _strrev(x) { var o = \\\"\\\", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }\\nfunction fill(c,l) { var o = \\\"\\\"; while(o.length < l) o+=c; return o; }\\nfunction pad0(v,d){var t=\\\"\\\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\\nfunction pad_(v,d){var t=\\\"\\\"+v;return t.length>=d?t:fill(' ',d-t.length)+t;}\\nfunction rpad_(v,d){var t=\\\"\\\"+v; return t.length>=d?t:t+fill(' ',d-t.length);}\\nfunction pad0r1(v,d){var t=\\\"\\\"+Math.round(v); return t.length>=d?t:fill('0',d-t.length)+t;}\\nfunction pad0r2(v,d){var t=\\\"\\\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\\nvar p2_32 = Math.pow(2,32);\\nfunction pad0r(v,d){if(v>p2_32||v<-p2_32) return pad0r1(v,d); var i = Math.round(v); return pad0r2(i,d); }\\nfunction isgeneral(s, i) { return s.length >= 7 + i && (s.charCodeAt(i)|32) === 103 && (s.charCodeAt(i+1)|32) === 101 && (s.charCodeAt(i+2)|32) === 110 && (s.charCodeAt(i+3)|32) === 101 && (s.charCodeAt(i+4)|32) === 114 && (s.charCodeAt(i+5)|32) === 97 && (s.charCodeAt(i+6)|32) === 108; }\\n/* Options */\\nvar opts_fmt = [\\n\\t[\\\"date1904\\\", 0],\\n\\t[\\\"output\\\", \\\"\\\"],\\n\\t[\\\"WTF\\\", false]\\n];\\nfunction fixopts(o){\\n\\tfor(var y = 0; y != opts_fmt.length; ++y) if(o[opts_fmt[y][0]]===undefined) o[opts_fmt[y][0]]=opts_fmt[y][1];\\n}\\nSSF.opts = opts_fmt;\\nvar table_fmt = {\\n\\t0: 'General',\\n\\t1: '0',\\n\\t2: '0.00',\\n\\t3: '#,##0',\\n\\t4: '#,##0.00',\\n\\t9: '0%',\\n\\t10: '0.00%',\\n\\t11: '0.00E+00',\\n\\t12: '# ?/?',\\n\\t13: '# ??/??',\\n\\t14: 'm/d/yy',\\n\\t15: 'd-mmm-yy',\\n\\t16: 'd-mmm',\\n\\t17: 'mmm-yy',\\n\\t18: 'h:mm AM/PM',\\n\\t19: 'h:mm:ss AM/PM',\\n\\t20: 'h:mm',\\n\\t21: 'h:mm:ss',\\n\\t22: 'm/d/yy h:mm',\\n\\t37: '#,##0 ;(#,##0)',\\n\\t38: '#,##0 ;[Red](#,##0)',\\n\\t39: '#,##0.00;(#,##0.00)',\\n\\t40: '#,##0.00;[Red](#,##0.00)',\\n\\t45: 'mm:ss',\\n\\t46: '[h]:mm:ss',\\n\\t47: 'mmss.0',\\n\\t48: '##0.0E+0',\\n\\t49: '@',\\n\\t56: '\\\"上午/下午 \\\"hh\\\"時\\\"mm\\\"分\\\"ss\\\"秒 \\\"',\\n\\t65535: 'General'\\n};\\nvar days = [\\n\\t['Sun', 'Sunday'],\\n\\t['Mon', 'Monday'],\\n\\t['Tue', 'Tuesday'],\\n\\t['Wed', 'Wednesday'],\\n\\t['Thu', 'Thursday'],\\n\\t['Fri', 'Friday'],\\n\\t['Sat', 'Saturday']\\n];\\nvar months = [\\n\\t['J', 'Jan', 'January'],\\n\\t['F', 'Feb', 'February'],\\n\\t['M', 'Mar', 'March'],\\n\\t['A', 'Apr', 'April'],\\n\\t['M', 'May', 'May'],\\n\\t['J', 'Jun', 'June'],\\n\\t['J', 'Jul', 'July'],\\n\\t['A', 'Aug', 'August'],\\n\\t['S', 'Sep', 'September'],\\n\\t['O', 'Oct', 'October'],\\n\\t['N', 'Nov', 'November'],\\n\\t['D', 'Dec', 'December']\\n];\\nfunction frac(x, D, mixed) {\\n\\tvar sgn = x < 0 ? -1 : 1;\\n\\tvar B = x * sgn;\\n\\tvar P_2 = 0, P_1 = 1, P = 0;\\n\\tvar Q_2 = 1, Q_1 = 0, Q = 0;\\n\\tvar A = Math.floor(B);\\n\\twhile(Q_1 < D) {\\n\\t\\tA = Math.floor(B);\\n\\t\\tP = A * P_1 + P_2;\\n\\t\\tQ = A * Q_1 + Q_2;\\n\\t\\tif((B - A) < 0.0000000005) break;\\n\\t\\tB = 1 / (B - A);\\n\\t\\tP_2 = P_1; P_1 = P;\\n\\t\\tQ_2 = Q_1; Q_1 = Q;\\n\\t}\\n\\tif(Q > D) { Q = Q_1; P = P_1; }\\n\\tif(Q > D) { Q = Q_2; P = P_2; }\\n\\tif(!mixed) return [0, sgn * P, Q];\\n\\tif(Q===0) throw \\\"Unexpected state: \\\"+P+\\\" \\\"+P_1+\\\" \\\"+P_2+\\\" \\\"+Q+\\\" \\\"+Q_1+\\\" \\\"+Q_2;\\n\\tvar q = Math.floor(sgn * P/Q);\\n\\treturn [q, sgn*P - q*Q, Q];\\n}\\nfunction general_fmt_int(v, opts) { return \\\"\\\"+v; }\\nSSF._general_int = general_fmt_int;\\nvar general_fmt_num = (function make_general_fmt_num() {\\nvar gnr1 = /\\\\.(\\\\d*[1-9])0+$/, gnr2 = /\\\\.0*$/, gnr4 = /\\\\.(\\\\d*[1-9])0+/, gnr5 = /\\\\.0*[Ee]/, gnr6 = /(E[+-])(\\\\d)$/;\\nfunction gfn2(v) {\\n\\tvar w = (v<0?12:11);\\n\\tvar o = gfn5(v.toFixed(12)); if(o.length <= w) return o;\\n\\to = v.toPrecision(10); if(o.length <= w) return o;\\n\\treturn v.toExponential(5);\\n}\\nfunction gfn3(v) {\\n\\tvar o = v.toFixed(11).replace(gnr1,\\\".$1\\\");\\n\\tif(o.length > (v<0?12:11)) o = v.toPrecision(6);\\n\\treturn o;\\n}\\nfunction gfn4(o) {\\n\\tfor(var i = 0; i != o.length; ++i) if((o.charCodeAt(i) | 0x20) === 101) return o.replace(gnr4,\\\".$1\\\").replace(gnr5,\\\"E\\\").replace(\\\"e\\\",\\\"E\\\").replace(gnr6,\\\"$10$2\\\");\\n\\treturn o;\\n}\\nfunction gfn5(o) {\\n\\t//for(var i = 0; i != o.length; ++i) if(o.charCodeAt(i) === 46) return o.replace(gnr2,\\\"\\\").replace(gnr1,\\\".$1\\\");\\n\\t//return o;\\n\\treturn o.indexOf(\\\".\\\") > -1 ? o.replace(gnr2,\\\"\\\").replace(gnr1,\\\".$1\\\") : o;\\n}\\nreturn function general_fmt_num(v, opts) {\\n\\tvar V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;\\n\\tif(V >= -4 && V <= -1) o = v.toPrecision(10+V);\\n\\telse if(Math.abs(V) <= 9) o = gfn2(v);\\n\\telse if(V === 10) o = v.toFixed(10).substr(0,12);\\n\\telse o = gfn3(v);\\n\\treturn gfn5(gfn4(o));\\n};})();\\nSSF._general_num = general_fmt_num;\\nfunction general_fmt(v, opts) {\\n\\tswitch(typeof v) {\\n\\t\\tcase 'string': return v;\\n\\t\\tcase 'boolean': return v ? \\\"TRUE\\\" : \\\"FALSE\\\";\\n\\t\\tcase 'number': return (v|0) === v ? general_fmt_int(v, opts) : general_fmt_num(v, opts);\\n\\t}\\n\\tthrow new Error(\\\"unsupported value in General format: \\\" + v);\\n}\\nSSF._general = general_fmt;\\nfunction fix_hijri(date, o) { return 0; }\\nfunction parse_date_code(v,opts,b2) {\\n\\tif(v > 2958465 || v < 0) return null;\\n\\tvar date = (v|0), time = Math.floor(86400 * (v - date)), dow=0;\\n\\tvar dout=[];\\n\\tvar out={D:date, T:time, u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};\\n\\tif(Math.abs(out.u) < 1e-6) out.u = 0;\\n\\tfixopts(opts != null ? opts : (opts=[]));\\n\\tif(opts.date1904) date += 1462;\\n\\tif(out.u > 0.999) {\\n\\t\\tout.u = 0;\\n\\t\\tif(++time == 86400) { time = 0; ++date; }\\n\\t}\\n\\tif(date === 60) {dout = b2 ? [1317,10,29] : [1900,2,29]; dow=3;}\\n\\telse if(date === 0) {dout = b2 ? [1317,8,29] : [1900,1,0]; dow=6;}\\n\\telse {\\n\\t\\tif(date > 60) --date;\\n\\t\\t/* 1 = Jan 1 1900 */\\n\\t\\tvar d = new Date(1900,0,1);\\n\\t\\td.setDate(d.getDate() + date - 1);\\n\\t\\tdout = [d.getFullYear(), d.getMonth()+1,d.getDate()];\\n\\t\\tdow = d.getDay();\\n\\t\\tif(date < 60) dow = (dow + 6) % 7;\\n\\t\\tif(b2) dow = fix_hijri(d, dout);\\n\\t}\\n\\tout.y = dout[0]; out.m = dout[1]; out.d = dout[2];\\n\\tout.S = time % 60; time = Math.floor(time / 60);\\n\\tout.M = time % 60; time = Math.floor(time / 60);\\n\\tout.H = time;\\n\\tout.q = dow;\\n\\treturn out;\\n}\\nSSF.parse_date_code = parse_date_code;\\n/*jshint -W086 */\\nfunction write_date(type, fmt, val, ss0) {\\n\\tvar o=\\\"\\\", ss=0, tt=0, y = val.y, out, outl = 0;\\n\\tswitch(type) {\\n\\t\\tcase 98: /* 'b' buddhist year */\\n\\t\\t\\ty = val.y + 543;\\n\\t\\t\\t/* falls through */\\n\\t\\tcase 121: /* 'y' year */\\n\\t\\tswitch(fmt.length) {\\n\\t\\t\\tcase 1: case 2: out = y % 100; outl = 2; break;\\n\\t\\t\\tdefault: out = y % 10000; outl = 4; break;\\n\\t\\t} break;\\n\\t\\tcase 109: /* 'm' month */\\n\\t\\tswitch(fmt.length) {\\n\\t\\t\\tcase 1: case 2: out = val.m; outl = fmt.length; break;\\n\\t\\t\\tcase 3: return months[val.m-1][1];\\n\\t\\t\\tcase 5: return months[val.m-1][0];\\n\\t\\t\\tdefault: return months[val.m-1][2];\\n\\t\\t} break;\\n\\t\\tcase 100: /* 'd' day */\\n\\t\\tswitch(fmt.length) {\\n\\t\\t\\tcase 1: case 2: out = val.d; outl = fmt.length; break;\\n\\t\\t\\tcase 3: return days[val.q][0];\\n\\t\\t\\tdefault: return days[val.q][1];\\n\\t\\t} break;\\n\\t\\tcase 104: /* 'h' 12-hour */\\n\\t\\tswitch(fmt.length) {\\n\\t\\t\\tcase 1: case 2: out = 1+(val.H+11)%12; outl = fmt.length; break;\\n\\t\\t\\tdefault: throw 'bad hour format: ' + fmt;\\n\\t\\t} break;\\n\\t\\tcase 72: /* 'H' 24-hour */\\n\\t\\tswitch(fmt.length) {\\n\\t\\t\\tcase 1: case 2: out = val.H; outl = fmt.length; break;\\n\\t\\t\\tdefault: throw 'bad hour format: ' + fmt;\\n\\t\\t} break;\\n\\t\\tcase 77: /* 'M' minutes */\\n\\t\\tswitch(fmt.length) {\\n\\t\\t\\tcase 1: case 2: out = val.M; outl = fmt.length; break;\\n\\t\\t\\tdefault: throw 'bad minute format: ' + fmt;\\n\\t\\t} break;\\n\\t\\tcase 115: /* 's' seconds */\\n\\t\\tif(val.u === 0) switch(fmt) {\\n\\t\\t\\tcase 's': case 'ss': return pad0(val.S, fmt.length);\\n\\t\\t\\tcase '.0': case '.00': case '.000':\\n\\t\\t}\\n\\t\\tswitch(fmt) {\\n\\t\\t\\tcase 's': case 'ss': case '.0': case '.00': case '.000':\\n\\t\\t\\t\\tif(ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;\\n\\t\\t\\t\\telse tt = ss0 === 1 ? 10 : 1;\\n\\t\\t\\t\\tss = Math.round((tt)*(val.S + val.u));\\n\\t\\t\\t\\tif(ss >= 60*tt) ss = 0;\\n\\t\\t\\t\\tif(fmt === 's') return ss === 0 ? \\\"0\\\" : \\\"\\\"+ss/tt;\\n\\t\\t\\t\\to = pad0(ss,2 + ss0);\\n\\t\\t\\t\\tif(fmt === 'ss') return o.substr(0,2);\\n\\t\\t\\t\\treturn \\\".\\\" + o.substr(2,fmt.length-1);\\n\\t\\t\\tdefault: throw 'bad second format: ' + fmt;\\n\\t\\t}\\n\\t\\tcase 90: /* 'Z' absolute time */\\n\\t\\tswitch(fmt) {\\n\\t\\t\\tcase '[h]': case '[hh]': out = val.D*24+val.H; break;\\n\\t\\t\\tcase '[m]': case '[mm]': out = (val.D*24+val.H)*60+val.M; break;\\n\\t\\t\\tcase '[s]': case '[ss]': out = ((val.D*24+val.H)*60+val.M)*60+Math.round(val.S+val.u); break;\\n\\t\\t\\tdefault: throw 'bad abstime format: ' + fmt;\\n\\t\\t} outl = fmt.length === 3 ? 1 : 2; break;\\n\\t\\tcase 101: /* 'e' era */\\n\\t\\t\\tout = y; outl = 1;\\n\\t}\\n\\tif(outl > 0) return pad0(out, outl); else return \\\"\\\";\\n}\\n/*jshint +W086 */\\nfunction commaify(s) {\\n\\tif(s.length <= 3) return s;\\n\\tvar j = (s.length % 3), o = s.substr(0,j);\\n\\tfor(; j!=s.length; j+=3) o+=(o.length > 0 ? \\\",\\\" : \\\"\\\") + s.substr(j,3);\\n\\treturn o;\\n}\\nvar write_num = (function make_write_num(){\\nvar pct1 = /%/g;\\nfunction write_num_pct(type, fmt, val){\\n\\tvar sfmt = fmt.replace(pct1,\\\"\\\"), mul = fmt.length - sfmt.length;\\n\\treturn write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill(\\\"%\\\",mul);\\n}\\nfunction write_num_cm(type, fmt, val){\\n\\tvar idx = fmt.length - 1;\\n\\twhile(fmt.charCodeAt(idx-1) === 44) --idx;\\n\\treturn write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));\\n}\\nfunction write_num_exp(fmt, val){\\n\\tvar o;\\n\\tvar idx = fmt.indexOf(\\\"E\\\") - fmt.indexOf(\\\".\\\") - 1;\\n\\tif(fmt.match(/^#+0.0E\\\\+0$/)) {\\n\\t\\tvar period = fmt.indexOf(\\\".\\\"); if(period === -1) period=fmt.indexOf('E');\\n\\t\\tvar ee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E)%period;\\n\\t\\tif(ee < 0) ee += period;\\n\\t\\to = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);\\n\\t\\tif(o.indexOf(\\\"e\\\") === -1) {\\n\\t\\t\\tvar fakee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E);\\n\\t\\t\\tif(o.indexOf(\\\".\\\") === -1) o = o[0] + \\\".\\\" + o.substr(1) + \\\"E+\\\" + (fakee - o.length+ee);\\n\\t\\t\\telse o += \\\"E+\\\" + (fakee - ee);\\n\\t\\t\\twhile(o.substr(0,2) === \\\"0.\\\") {\\n\\t\\t\\t\\to = o[0] + o.substr(2,period) + \\\".\\\" + o.substr(2+period);\\n\\t\\t\\t\\to = o.replace(/^0+([1-9])/,\\\"$1\\\").replace(/^0+\\\\./,\\\"0.\\\");\\n\\t\\t\\t}\\n\\t\\t\\to = o.replace(/\\\\+-/,\\\"-\\\");\\n\\t\\t}\\n\\t\\to = o.replace(/^([+-]?)(\\\\d*)\\\\.(\\\\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + \\\".\\\" + $3.substr(ee) + \\\"E\\\"; });\\n\\t} else o = val.toExponential(idx);\\n\\tif(fmt.match(/E\\\\+00$/) && o.match(/e[+-]\\\\d$/)) o = o.substr(0,o.length-1) + \\\"0\\\" + o[o.length-1];\\n\\tif(fmt.match(/E\\\\-/) && o.match(/e\\\\+/)) o = o.replace(/e\\\\+/,\\\"e\\\");\\n\\treturn o.replace(\\\"e\\\",\\\"E\\\");\\n}\\nvar frac1 = /# (\\\\?+)( ?)\\\\/( ?)(\\\\d+)/;\\nfunction write_num_f1(r, aval, sign) {\\n\\tvar den = parseInt(r[4]), rr = Math.round(aval * den), base = Math.floor(rr/den);\\n\\tvar myn = (rr - base*den), myd = den;\\n\\treturn sign + (base === 0 ? \\\"\\\" : \\\"\\\"+base) + \\\" \\\" + (myn === 0 ? fill(\\\" \\\", r[1].length + 1 + r[4].length) : pad_(myn,r[1].length) + r[2] + \\\"/\\\" + r[3] + pad0(myd,r[4].length));\\n}\\nfunction write_num_f2(r, aval, sign) {\\n\\treturn sign + (aval === 0 ? \\\"\\\" : \\\"\\\"+aval) + fill(\\\" \\\", r[1].length + 2 + r[4].length);\\n}\\nvar dec1 = /^#*0*\\\\.(0+)/;\\nvar closeparen = /\\\\).*[0#]/;\\nvar phone = /\\\\(###\\\\) ###\\\\\\\\?-####/;\\nfunction hashq(str) {\\n\\tvar o = \\\"\\\", cc;\\n\\tfor(var i = 0; i != str.length; ++i) switch((cc=str.charCodeAt(i))) {\\n\\t\\tcase 35: break;\\n\\t\\tcase 63: o+= \\\" \\\"; break;\\n\\t\\tcase 48: o+= \\\"0\\\"; break;\\n\\t\\tdefault: o+= String.fromCharCode(cc);\\n\\t}\\n\\treturn o;\\n}\\nfunction rnd(val, d) { var dd = Math.pow(10,d); return \\\"\\\"+(Math.round(val * dd)/dd); }\\nfunction dec(val, d) { return Math.round((val-Math.floor(val))*Math.pow(10,d)); }\\nfunction flr(val) { if(val < 2147483647 && val > -2147483648) return \\\"\\\"+(val >= 0 ? (val|0) : (val-1|0)); return \\\"\\\"+Math.floor(val); }\\nfunction write_num_flt(type, fmt, val) {\\n\\tif(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\\n\\t\\tvar ffmt = fmt.replace(/\\\\( */,\\\"\\\").replace(/ \\\\)/,\\\"\\\").replace(/\\\\)/,\\\"\\\");\\n\\t\\tif(val >= 0) return write_num_flt('n', ffmt, val);\\n\\t\\treturn '(' + write_num_flt('n', ffmt, -val) + ')';\\n\\t}\\n\\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);\\n\\tif(fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);\\n\\tif(fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);\\n\\tif(fmt.charCodeAt(0) === 36) return \\\"$\\\"+write_num_flt(type,fmt.substr(fmt[1]==' '?2:1),val);\\n\\tvar o, oo;\\n\\tvar r, ri, ff, aval = Math.abs(val), sign = val < 0 ? \\\"-\\\" : \\\"\\\";\\n\\tif(fmt.match(/^00+$/)) return sign + pad0r(aval,fmt.length);\\n\\tif(fmt.match(/^[#?]+$/)) {\\n\\t\\to = pad0r(val,0); if(o === \\\"0\\\") o = \\\"\\\";\\n\\t\\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\\n\\t}\\n\\tif((r = fmt.match(frac1)) !== null) return write_num_f1(r, aval, sign);\\n\\tif(fmt.match(/^#+0+$/) !== null) return sign + pad0r(aval,fmt.length - fmt.indexOf(\\\"0\\\"));\\n\\tif((r = fmt.match(dec1)) !== null) {\\n\\t\\to = rnd(val, r[1].length).replace(/^([^\\\\.]+)$/,\\\"$1.\\\"+r[1]).replace(/\\\\.$/,\\\".\\\"+r[1]).replace(/\\\\.(\\\\d*)$/,function($$, $1) { return \\\".\\\" + $1 + fill(\\\"0\\\", r[1].length-$1.length); });\\n\\t\\treturn fmt.indexOf(\\\"0.\\\") !== -1 ? o : o.replace(/^0\\\\./,\\\".\\\");\\n\\t}\\n\\tfmt = fmt.replace(/^#+([0.])/, \\\"$1\\\");\\n\\tif((r = fmt.match(/^(0*)\\\\.(#*)$/)) !== null) {\\n\\t\\treturn sign + rnd(aval, r[2].length).replace(/\\\\.(\\\\d*[1-9])0*$/,\\\".$1\\\").replace(/^(-?\\\\d*)$/,\\\"$1.\\\").replace(/^0\\\\./,r[1].length?\\\"0.\\\":\\\".\\\");\\n\\t}\\n\\tif((r = fmt.match(/^#,##0(\\\\.?)$/)) !== null) return sign + commaify(pad0r(aval,0));\\n\\tif((r = fmt.match(/^#,##0\\\\.([#0]*0)$/)) !== null) {\\n\\t\\treturn val < 0 ? \\\"-\\\" + write_num_flt(type, fmt, -val) : commaify(\\\"\\\"+(Math.floor(val))) + \\\".\\\" + pad0(dec(val, r[1].length),r[1].length);\\n\\t}\\n\\tif((r = fmt.match(/^#,#*,#0/)) !== null) return write_num_flt(type,fmt.replace(/^#,#*,/,\\\"\\\"),val);\\n\\tif((r = fmt.match(/^([0#]+)(\\\\\\\\?-([0#]+))+$/)) !== null) {\\n\\t\\to = _strrev(write_num_flt(type, fmt.replace(/[\\\\\\\\-]/g,\\\"\\\"), val));\\n\\t\\tri = 0;\\n\\t\\treturn _strrev(_strrev(fmt.replace(/\\\\\\\\/g,\\\"\\\")).replace(/[0#]/g,function(x){return ri<o.length?o[ri++]:x==='0'?'0':\\\"\\\";}));\\n\\t}\\n\\tif(fmt.match(phone) !== null) {\\n\\t\\to = write_num_flt(type, \\\"##########\\\", val);\\n\\t\\treturn \\\"(\\\" + o.substr(0,3) + \\\") \\\" + o.substr(3, 3) + \\\"-\\\" + o.substr(6);\\n\\t}\\n\\tvar oa = \\\"\\\";\\n\\tif((r = fmt.match(/^([#0?]+)( ?)\\\\/( ?)([#0?]+)/)) !== null) {\\n\\t\\tri = Math.min(r[4].length,7);\\n\\t\\tff = frac(aval, Math.pow(10,ri)-1, false);\\n\\t\\to = \\\"\\\" + sign;\\n\\t\\toa = write_num(\\\"n\\\", r[1], ff[1]);\\n\\t\\tif(oa[oa.length-1] == \\\" \\\") oa = oa.substr(0,oa.length-1) + \\\"0\\\";\\n\\t\\to += oa + r[2] + \\\"/\\\" + r[3];\\n\\t\\toa = rpad_(ff[2],ri);\\n\\t\\tif(oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length-oa.length)) + oa;\\n\\t\\to += oa;\\n\\t\\treturn o;\\n\\t}\\n\\tif((r = fmt.match(/^# ([#0?]+)( ?)\\\\/( ?)([#0?]+)/)) !== null) {\\n\\t\\tri = Math.min(Math.max(r[1].length, r[4].length),7);\\n\\t\\tff = frac(aval, Math.pow(10,ri)-1, true);\\n\\t\\treturn sign + (ff[0]||(ff[1] ? \\\"\\\" : \\\"0\\\")) + \\\" \\\" + (ff[1] ? pad_(ff[1],ri) + r[2] + \\\"/\\\" + r[3] + rpad_(ff[2],ri): fill(\\\" \\\", 2*ri+1 + r[2].length + r[3].length));\\n\\t}\\n\\tif((r = fmt.match(/^[#0?]+$/)) !== null) {\\n\\t\\to = pad0r(val, 0);\\n\\t\\tif(fmt.length <= o.length) return o;\\n\\t\\treturn hashq(fmt.substr(0,fmt.length-o.length)) + o;\\n\\t}\\n if((r = fmt.match(/^([#0?]+)\\\\.([#0]+)$/)) !== null) {\\n\\t\\to = \\\"\\\" + val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,\\\"$1\\\");\\n\\t\\tri = o.indexOf(\\\".\\\");\\n\\t\\tvar lres = fmt.indexOf(\\\".\\\") - ri, rres = fmt.length - o.length - lres;\\n\\t\\treturn hashq(fmt.substr(0,lres) + o + fmt.substr(fmt.length-rres));\\n\\t}\\n\\tif((r = fmt.match(/^00,000\\\\.([#0]*0)$/)) !== null) {\\n\\t\\tri = dec(val, r[1].length);\\n\\t\\treturn val < 0 ? \\\"-\\\" + write_num_flt(type, fmt, -val) : commaify(flr(val)).replace(/^\\\\d,\\\\d{3}$/,\\\"0$&\\\").replace(/^\\\\d*$/,function($$) { return \\\"00,\\\" + ($$.length < 3 ? pad0(0,3-$$.length) : \\\"\\\") + $$; }) + \\\".\\\" + pad0(ri,r[1].length);\\n\\t}\\n\\tswitch(fmt) {\\n\\t\\tcase \\\"#,###\\\": var x = commaify(pad0r(aval,0)); return x !== \\\"0\\\" ? sign + x : \\\"\\\";\\n\\t\\tdefault:\\n\\t}\\n\\tthrow new Error(\\\"unsupported format |\\\" + fmt + \\\"|\\\");\\n}\\nfunction write_num_cm2(type, fmt, val){\\n\\tvar idx = fmt.length - 1;\\n\\twhile(fmt.charCodeAt(idx-1) === 44) --idx;\\n\\treturn write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));\\n}\\nfunction write_num_pct2(type, fmt, val){\\n\\tvar sfmt = fmt.replace(pct1,\\\"\\\"), mul = fmt.length - sfmt.length;\\n\\treturn write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill(\\\"%\\\",mul);\\n}\\nfunction write_num_exp2(fmt, val){\\n\\tvar o;\\n\\tvar idx = fmt.indexOf(\\\"E\\\") - fmt.indexOf(\\\".\\\") - 1;\\n\\tif(fmt.match(/^#+0.0E\\\\+0$/)) {\\n\\t\\tvar period = fmt.indexOf(\\\".\\\"); if(period === -1) period=fmt.indexOf('E');\\n\\t\\tvar ee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E)%period;\\n\\t\\tif(ee < 0) ee += period;\\n\\t\\to = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);\\n\\t\\tif(!o.match(/[Ee]/)) {\\n\\t\\t\\tvar fakee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E);\\n\\t\\t\\tif(o.indexOf(\\\".\\\") === -1) o = o[0] + \\\".\\\" + o.substr(1) + \\\"E+\\\" + (fakee - o.length+ee);\\n\\t\\t\\telse o += \\\"E+\\\" + (fakee - ee);\\n\\t\\t\\to = o.replace(/\\\\+-/,\\\"-\\\");\\n\\t\\t}\\n\\t\\to = o.replace(/^([+-]?)(\\\\d*)\\\\.(\\\\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + \\\".\\\" + $3.substr(ee) + \\\"E\\\"; });\\n\\t} else o = val.toExponential(idx);\\n\\tif(fmt.match(/E\\\\+00$/) && o.match(/e[+-]\\\\d$/)) o = o.substr(0,o.length-1) + \\\"0\\\" + o[o.length-1];\\n\\tif(fmt.match(/E\\\\-/) && o.match(/e\\\\+/)) o = o.replace(/e\\\\+/,\\\"e\\\");\\n\\treturn o.replace(\\\"e\\\",\\\"E\\\");\\n}\\nfunction write_num_int(type, fmt, val) {\\n\\tif(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\\n\\t\\tvar ffmt = fmt.replace(/\\\\( */,\\\"\\\").replace(/ \\\\)/,\\\"\\\").replace(/\\\\)/,\\\"\\\");\\n\\t\\tif(val >= 0) return write_num_int('n', ffmt, val);\\n\\t\\treturn '(' + write_num_int('n', ffmt, -val) + ')';\\n\\t}\\n\\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);\\n\\tif(fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);\\n\\tif(fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);\\n\\tif(fmt.charCodeAt(0) === 36) return \\\"$\\\"+write_num_int(type,fmt.substr(fmt[1]==' '?2:1),val);\\n\\tvar o;\\n\\tvar r, ri, ff, aval = Math.abs(val), sign = val < 0 ? \\\"-\\\" : \\\"\\\";\\n\\tif(fmt.match(/^00+$/)) return sign + pad0(aval,fmt.length);\\n\\tif(fmt.match(/^[#?]+$/)) {\\n\\t\\to = (\\\"\\\"+val); if(val === 0) o = \\\"\\\";\\n\\t\\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\\n\\t}\\n\\tif((r = fmt.match(frac1)) !== null) return write_num_f2(r, aval, sign);\\n\\tif(fmt.match(/^#+0+$/) !== null) return sign + pad0(aval,fmt.length - fmt.indexOf(\\\"0\\\"));\\n\\tif((r = fmt.match(dec1)) !== null) {\\n\\t\\to = (\\\"\\\"+val).replace(/^([^\\\\.]+)$/,\\\"$1.\\\"+r[1]).replace(/\\\\.$/,\\\".\\\"+r[1]).replace(/\\\\.(\\\\d*)$/,function($$, $1) { return \\\".\\\" + $1 + fill(\\\"0\\\", r[1].length-$1.length); });\\n\\t\\treturn fmt.indexOf(\\\"0.\\\") !== -1 ? o : o.replace(/^0\\\\./,\\\".\\\");\\n\\t}\\n\\tfmt = fmt.replace(/^#+([0.])/, \\\"$1\\\");\\n\\tif((r = fmt.match(/^(0*)\\\\.(#*)$/)) !== null) {\\n\\t\\treturn sign + (\\\"\\\"+aval).replace(/\\\\.(\\\\d*[1-9])0*$/,\\\".$1\\\").replace(/^(-?\\\\d*)$/,\\\"$1.\\\").replace(/^0\\\\./,r[1].length?\\\"0.\\\":\\\".\\\");\\n\\t}\\n\\tif((r = fmt.match(/^#,##0(\\\\.?)$/)) !== null) return sign + commaify((\\\"\\\"+aval));\\n\\tif((r = fmt.match(/^#,##0\\\\.([#0]*0)$/)) !== null) {\\n\\t\\treturn val < 0 ? \\\"-\\\" + write_num_int(type, fmt, -val) : commaify((\\\"\\\"+val)) + \\\".\\\" + fill('0',r[1].length);\\n\\t}\\n\\tif((r = fmt.match(/^#,#*,#0/)) !== null) return write_num_int(type,fmt.replace(/^#,#*,/,\\\"\\\"),val);\\n\\tif((r = fmt.match(/^([0#]+)(\\\\\\\\?-([0#]+))+$/)) !== null) {\\n\\t\\to = _strrev(write_num_int(type, fmt.replace(/[\\\\\\\\-]/g,\\\"\\\"), val));\\n\\t\\tri = 0;\\n\\t\\treturn _strrev(_strrev(fmt.replace(/\\\\\\\\/g,\\\"\\\")).replace(/[0#]/g,function(x){return ri<o.length?o[ri++]:x==='0'?'0':\\\"\\\";}));\\n\\t}\\n\\tif(fmt.match(phone) !== null) {\\n\\t\\to = write_num_int(type, \\\"##########\\\", val);\\n\\t\\treturn \\\"(\\\" + o.substr(0,3) + \\\") \\\" + o.substr(3, 3) + \\\"-\\\" + o.substr(6);\\n\\t}\\n\\tvar oa = \\\"\\\";\\n\\tif((r = fmt.match(/^([#0?]+)( ?)\\\\/( ?)([#0?]+)/)) !== null) {\\n\\t\\tri = Math.min(r[4].length,7);\\n\\t\\tff = frac(aval, Math.pow(10,ri)-1, false);\\n\\t\\to = \\\"\\\" + sign;\\n\\t\\toa = write_num(\\\"n\\\", r[1], ff[1]);\\n\\t\\tif(oa[oa.length-1] == \\\" \\\") oa = oa.substr(0,oa.length-1) + \\\"0\\\";\\n\\t\\to += oa + r[2] + \\\"/\\\" + r[3];\\n\\t\\toa = rpad_(ff[2],ri);\\n\\t\\tif(oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length-oa.length)) + oa;\\n\\t\\to += oa;\\n\\t\\treturn o;\\n\\t}\\n\\tif((r = fmt.match(/^# ([#0?]+)( ?)\\\\/( ?)([#0?]+)/)) !== null) {\\n\\t\\tri = Math.min(Math.max(r[1].length, r[4].length),7);\\n\\t\\tff = frac(aval, Math.pow(10,ri)-1, true);\\n\\t\\treturn sign + (ff[0]||(ff[1] ? \\\"\\\" : \\\"0\\\")) + \\\" \\\" + (ff[1] ? pad_(ff[1],ri) + r[2] + \\\"/\\\" + r[3] + rpad_(ff[2],ri): fill(\\\" \\\", 2*ri+1 + r[2].length + r[3].length));\\n\\t}\\n\\tif((r = fmt.match(/^[#0?]+$/)) !== null) {\\n\\t\\to = \\\"\\\" + val;\\n\\t\\tif(fmt.length <= o.length) return o;\\n\\t\\treturn hashq(fmt.substr(0,fmt.length-o.length)) + o;\\n\\t}\\n\\tif((r = fmt.match(/^([#0]+)\\\\.([#0]+)$/)) !== null) {\\n\\t\\to = \\\"\\\" + val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,\\\"$1\\\");\\n\\t\\tri = o.indexOf(\\\".\\\");\\n\\t\\tvar lres = fmt.indexOf(\\\".\\\") - ri, rres = fmt.length - o.length - lres;\\n\\t\\treturn hashq(fmt.substr(0,lres) + o + fmt.substr(fmt.length-rres));\\n\\t}\\n\\tif((r = fmt.match(/^00,000\\\\.([#0]*0)$/)) !== null) {\\n\\t\\treturn val < 0 ? \\\"-\\\" + write_num_int(type, fmt, -val) : commaify(\\\"\\\"+val).replace(/^\\\\d,\\\\d{3}$/,\\\"0$&\\\").replace(/^\\\\d*$/,function($$) { return \\\"00,\\\" + ($$.length < 3 ? pad0(0,3-$$.length) : \\\"\\\") + $$; }) + \\\".\\\" + pad0(0,r[1].length);\\n\\t}\\n\\tswitch(fmt) {\\n\\t\\tcase \\\"#,###\\\": var x = commaify(\\\"\\\"+aval); return x !== \\\"0\\\" ? sign + x : \\\"\\\";\\n\\t\\tdefault:\\n\\t}\\n\\tthrow new Error(\\\"unsupported format |\\\" + fmt + \\\"|\\\");\\n}\\nreturn function write_num(type, fmt, val) {\\n\\treturn (val|0) === val ? write_num_int(type, fmt, val) : write_num_flt(type, fmt, val);\\n};})();\\nfunction split_fmt(fmt) {\\n\\tvar out = [];\\n\\tvar in_str = false, cc;\\n\\tfor(var i = 0, j = 0; i < fmt.length; ++i) switch((cc=fmt.charCodeAt(i))) {\\n\\t\\tcase 34: /* '\\\"' */\\n\\t\\t\\tin_str = !in_str; break;\\n\\t\\tcase 95: case 42: case 92: /* '_' '*' '\\\\\\\\' */\\n\\t\\t\\t++i; break;\\n\\t\\tcase 59: /* ';' */\\n\\t\\t\\tout[out.length] = fmt.substr(j,i-j);\\n\\t\\t\\tj = i+1;\\n\\t}\\n\\tout[out.length] = fmt.substr(j);\\n\\tif(in_str === true) throw new Error(\\\"Format |\\\" + fmt + \\\"| unterminated string \\\");\\n\\treturn out;\\n}\\nSSF._split = split_fmt;\\nvar abstime = /\\\\[[HhMmSs]*\\\\]/;\\nfunction eval_fmt(fmt, v, opts, flen) {\\n\\tvar out = [], o = \\\"\\\", i = 0, c = \\\"\\\", lst='t', q, dt, j, cc;\\n\\tvar hr='H';\\n\\t/* Tokenize */\\n\\twhile(i < fmt.length) {\\n\\t\\tswitch((c = fmt[i])) {\\n\\t\\t\\tcase 'G': /* General */\\n\\t\\t\\t\\tif(!i