PaxHeader/package/package.json000644 €¾^€XÑ0000000546 12731261655015370 xustar00000000 000000 19 NODETAR.depth=1 24 NODETAR.follow=false 36 NODETAR.ignoreFiles.0=.npmignore 36 NODETAR.ignoreFiles.1=.gitignore 38 NODETAR.ignoreFiles.2=package.json 29 path=package/package.json 21 NODETAR.type=File 23 SCHILY.dev=16777220 18 SCHILY.nlink=1 17 uid=415129326 18 gid=1490099278 24 NODETAR.blksize=4096 23 SCHILY.ino=53209150 12 size=653 20 NODETAR.blocks=8 package/package.json000644 €"¾^€XÑ0000001215 12731261655013427 0ustar00000000 000000 { "name": "catty", "version": "0.0.8", "description": "Mapshaper's build tool", "keywords": [ "mapshaper" ], "author": "Matthew Bloch ", "main": "./catty.js", "dependencies": { "underscore": "~1.7", "nomnom": "~1.8" }, "bin": { "catty": "./bin/catty" }, "devDependencies": { "mocha": "~2.3.3" }, "scripts": { "test": "mocha --check-leaks -R dot" }, "repository": { "type": "git", "url": "https://github.com/mbloch/catty.git" }, "license": "MIT", "bugs": { "url": "https://github.com/mbloch/catty/issues" }, "homepage": "https://github.com/mbloch/catty" } PaxHeader/package/.npmignore000664 €¾^€XÑ0000002134 12250402234015071 xustar00000000 000000 19 NODETAR.depth=1 24 NODETAR.follow=false 36 NODETAR.ignoreFiles.0=.npmignore 36 NODETAR.ignoreFiles.1=.gitignore 38 NODETAR.ignoreFiles.2=package.json 30 NODETAR.package.name=catty 33 NODETAR.package.version=0.0.8 54 NODETAR.package.description=Mapshaper's build tool 40 NODETAR.package.keywords.0=mapshaper 61 NODETAR.package.author=Matthew Bloch 35 NODETAR.package.main=./catty.js 48 NODETAR.package.dependencies.underscore=~1.7 44 NODETAR.package.dependencies.nomnom=~1.8 41 NODETAR.package.bin.catty=./bin/catty 48 NODETAR.package.devDependencies.mocha=~2.3.3 59 NODETAR.package.scripts.test=mocha --check-leaks -R dot 39 NODETAR.package.repository.type=git 70 NODETAR.package.repository.url=https://github.com/mbloch/catty.git 31 NODETAR.package.license=MIT 67 NODETAR.package.bugs.url=https://github.com/mbloch/catty/issues 60 NODETAR.package.homepage=https://github.com/mbloch/catty 27 path=package/.npmignore 21 NODETAR.type=File 23 SCHILY.dev=16777220 18 SCHILY.nlink=1 17 uid=415129326 18 gid=1490099278 24 NODETAR.blksize=4096 24 SCHILY.ino=152229202 11 size=19 20 NODETAR.blocks=8 package/.npmignore000664 €¾^€XÑ0000000023 12250402234013056 0ustar00000000 000000 test __* .jshintrc PaxHeader/package/README.md000644 €¾^€ÿXÑ0000002135 12731261777014735 xustar00000000 000000 19 NODETAR.depth=1 24 NODETAR.follow=false 36 NODETAR.ignoreFiles.0=.npmignore 36 NODETAR.ignoreFiles.1=.gitignore 38 NODETAR.ignoreFiles.2=package.json 30 NODETAR.package.name=catty 33 NODETAR.package.version=0.0.8 54 NODETAR.package.description=Mapshaper's build tool 40 NODETAR.package.keywords.0=mapshaper 61 NODETAR.package.author=Matthew Bloch 35 NODETAR.package.main=./catty.js 48 NODETAR.package.dependencies.underscore=~1.7 44 NODETAR.package.dependencies.nomnom=~1.8 41 NODETAR.package.bin.catty=./bin/catty 48 NODETAR.package.devDependencies.mocha=~2.3.3 59 NODETAR.package.scripts.test=mocha --check-leaks -R dot 39 NODETAR.package.repository.type=git 70 NODETAR.package.repository.url=https://github.com/mbloch/catty.git 31 NODETAR.package.license=MIT 67 NODETAR.package.bugs.url=https://github.com/mbloch/catty/issues 60 NODETAR.package.homepage=https://github.com/mbloch/catty 26 path=package/README.md 21 NODETAR.type=File 23 SCHILY.dev=16777220 18 SCHILY.nlink=1 17 uid=415129326 18 gid=1490099278 24 NODETAR.blksize=4096 24 SCHILY.ino=152226883 13 size=1594 20 NODETAR.blocks=8 package/README.md000644 €¾^€XÑ0000003072 12731261777012367 0ustar00000000 000000 ## Catty ## Catty is the source file concatenator for [Mapshaper](https://github.com/mbloch/mapshaper). Some features: * Each source file lists its dependencies in a formatted comment (see below). There is no manifest, unlike some other tools. * Concatenated files are (optionally) wrapped in a self-executing function, to protect the global namespace. * Catty can monitor source files and regenerate output files when a required source file changes. ### Command line tool ### Usage: `$ catty [options] input output` Options: - `-f` Monitor source files, re-cat when something changes. - `-g` Don't wrap source files in an immediate function. - `-d` Comma-separated list of directories to monitor - `-h` Print help message Example: `$ catty -g -d src,lib src/input.js dist/output.js` ### Node module ### **Example** ``` require('catty')({global: true}) .addLibrary('src') .addLibrary('lib') .cat('src/input.js', 'dist/output.js'); ``` **Methods** `#cat(input, output)` Concatenate an input file with its dependencies. `output` may be a filename or a Node-style callback. If `output` is empty or contains a hyphen, catty sends its output to `stdout`. `#addLibrary(dir)` Give catty a directory to search for dependencies. `#prepend(JS)` Insert JavaScript before concatenated code. `#addDeps(deps)` Inject one or more additional dependencies into the input file (comma-sep. list). ### Comment format ### **Examples** ``` /* @requires mapshaper-innerlines mapshaper-endpoints mapshaper-dataset-utils */ ``` ``` /* @requires mapshaper-shapes, mapshaper-shape-geom */ ``` ls PaxHeader/package/catty.js000644 €¾^€XÑ0000002136 12731261615014531 xustar00000000 000000 19 NODETAR.depth=1 24 NODETAR.follow=false 36 NODETAR.ignoreFiles.0=.npmignore 36 NODETAR.ignoreFiles.1=.gitignore 38 NODETAR.ignoreFiles.2=package.json 30 NODETAR.package.name=catty 33 NODETAR.package.version=0.0.8 54 NODETAR.package.description=Mapshaper's build tool 40 NODETAR.package.keywords.0=mapshaper 61 NODETAR.package.author=Matthew Bloch 35 NODETAR.package.main=./catty.js 48 NODETAR.package.dependencies.underscore=~1.7 44 NODETAR.package.dependencies.nomnom=~1.8 41 NODETAR.package.bin.catty=./bin/catty 48 NODETAR.package.devDependencies.mocha=~2.3.3 59 NODETAR.package.scripts.test=mocha --check-leaks -R dot 39 NODETAR.package.repository.type=git 70 NODETAR.package.repository.url=https://github.com/mbloch/catty.git 31 NODETAR.package.license=MIT 67 NODETAR.package.bugs.url=https://github.com/mbloch/catty/issues 60 NODETAR.package.homepage=https://github.com/mbloch/catty 25 path=package/catty.js 21 NODETAR.type=File 23 SCHILY.dev=16777220 18 SCHILY.nlink=1 17 uid=415129326 18 gid=1490099278 24 NODETAR.blksize=4096 24 SCHILY.ino=153788157 14 size=10593 21 NODETAR.blocks=24 package/catty.js000644 €°¾^€ XÑ0000024541 12731261615013104 0ustar00000000 000000 var fs = require('fs'); var path = require('path'); var _ = require('underscore'); var catty = new Catty(); // regex for comments like: // /* @requires name1, name2, name3 */ // (Comments may span multiple lines, commas are optional) var REQUIRES_RXP = /\/\*+\s*@requires?\b([\s,;_0-9A-Za-z.-]+)\s*\*+\/\s*\n?/g; function Catty(opts) { var prepended = "", externals = []; knownFileIndex = {}, // paths of known js files indexed by basename watchedFiles = {}, // SourceFile objects indexed by basename jobs = [], addedDeps = []; opts = _.extend({ global: false, follow: false }, opts || {}); this.internal = { // expose internal functions for unit testing parseDeps: parseDeps, stripBOM: stripBOM }; // @deps array or comma-separated list of depencencies to insert into the // root document(s) this.addDeps = function(deps) { if (_.isString(deps)) { deps = deps.split(','); } addedDeps = _.union(addedDeps, deps); return this; }; // @arg name of an external dependency, which shouldn't be bundled this.external = function(arg) { externals = _.isArray(arg) ? arg : _.toArray(arguments); return this; }; // @js JS string to insert at the beginning of the concatenated files, but // inside the module closure (could contain variable definitions) this.prepend = function(js) { try { // eval(js); // catch syntax errors prepended = js; } catch(e) { console.error("[prepend] Invalid JavaScript: ", js); } return this; }; // @path A directory containing JavaScript source files // (subdirectories are also indexed) this.addLibrary = function(path) { if (!dirExists(path)) { die("Not a valid directory: " + path); } findSourceFiles(path).forEach(indexFile); return this; }; // Compile JS source files this.cat = function(src, dest) { var job; try { job = new CattyJob(src, dest); if (addedDeps.length > 0) { job.addDeps(addedDeps); } } catch(e) { die(e.message); } job.run(); jobs.push(job); // save job so it can be run again, if monitoring files return this; }; function runJobs() { jobs.forEach(function(job) { job.run(); }); } function getNode(key) { var node = watchedFiles[key]; if (!node) { throw new Error("Missing dependency: " + key); } return node; } function sortNodes(nodes) { var startId = 0, len = nodes.length, sorted = {}, nodeName, i, startNode, reqId; while (startId < len-1) { startNode = nodes[startId]; reqId = -1; if (startNode.name() in sorted === false) { for (i=startId+1; i 0) { nodes.splice(startId, 1); nodes.splice(reqId, 0, startNode); } else { startId++; } sorted[startNode.name()] = true; } } // Add file to index of known files; // Assumes @path exists. // function indexFile(path) { var name = getFileInfo(path).basename; if (!name) { die("Invalid path: " + path); } else if (name in knownFileIndex === false) { knownFileIndex[name] = path; } else if (knownFileIndex[name] !== path) { console.error("File name collision."); console.error("Using:", knownFileIndex[name]); console.error("Ignoring:", path); } return name; } function SourceFile(path) { var info = getFileInfo(path), _deps = [], _insertedDeps = [], _js = ""; if (!info.is_file || info.ext != '.js') { die("Invalid source file: " + path); } watchedFiles[info.basename] = this; if (opts.follow) { startMonitoring(); } findDeps(); this.name = function() { return info.basename; }; this.getContent = function() { return _js; }; this.getDeps = function() { return _deps; }; this.insertDeps = function(deps) { _insertedDeps = deps; updateDeps(_deps); }; this.requiresFile = function(targName, visited) { visited = visited || {}; visited[this.name()] = true; var reqs = this.getDeps(); if (_.contains(reqs, targName)) { return true; } for (var i=0; i 0 && js !== _js; if (changed) { _js = js; updateDeps(parseDeps(js)); } return changed; } function updateDeps(deps) { deps = _.union(deps, _insertedDeps); deps = _.difference(deps, externals); deps.forEach(addDependency); _deps = deps; } function addDependency(key) { if (key in knownFileIndex === false) { throw new Error("Unknown dependency in " + path + " -- " + key); } if (key in watchedFiles === false) { new SourceFile(knownFileIndex[key]); } } function onChange(err) { if (err) { console.error(err.message); } else { console.error("Re-catting -- change in " + path); runJobs(); // TODO: only run jobs that use this the changed source file } } function startMonitoring() { var timeout = null; fs.watch(path, function(evt) { if (evt == "change" || evt == "rename") { // Use a timeout to make sure file has actually changed // (Had problems in os x) timeout && clearTimeout(timeout); timeout = setTimeout(function() { try { if (findDeps()) { onChange(); } } catch(e) { onChange(e); } }, 150); } }); } } // SourceFile function CattyJob(src, dest) { var roots = []; var useStdout = !dest || dest == '-' || dest == '/dev/stdout'; var inFiles; if (_.isString(src)) { inFiles = [src]; } else if (_.isArray(src)) { inFiles = src; } else { die("Invalid input file(s): " + src); } if (opts.follow && useStdout) { die("-f option is not compatible with output to stdout"); } roots = inFiles.map(function(ifile) { if (ifile == dest) die("Tried to overwrite a source file: " + ifile); if (!fileExists(ifile)) die("Source file not found: " + ifile); var name = indexFile(ifile); return new SourceFile(ifile); }); // return list of all deps reached by list of deps function findDeps(newDeps, foundDeps) { return newDeps.reduce(function(memo, key) { if (memo.indexOf(key) == -1) { memo.push(key); findDeps(getNode(key).getDeps(), memo); } return memo; }, foundDeps || []); } function concatenate() { var keys = roots.map(function(node) {return node.name();}); var nodes = findDeps(keys).map(getNode); sortNodes(nodes); return nodes.map(function(node) { return node.getContent(); }).join('\n\n'); }; function stripComments(js) { return js.replace(REQUIRES_RXP, ''); } function addClosure(js) { return "(function(){\n" + js + "\n}());\n"; } function bundle() { var js = ""; if (prepended) { js += prepended + '\n'; } js += concatenate(); js = stripComments(js); if (!opts.global) { js = addClosure(js); } return js; } this.addDeps = function(deps) { roots.forEach(function(node) {node.insertDeps(deps);}); }; this.run = function() { var js, dirname, err; try { js = bundle(); } catch(e) { err = e; } if (_.isFunction(dest)) { dest(err, js); } else if (err) { // Print message, don't exit (let user correct dependency problems // when monitoring files). console.error(e.message); } else if (useStdout) { console.log(js); } else if (_.isString(dest)) { // check that dir (still) exists dirname = path.dirname(dest); if (!dirExists(dirname)) { die("Destination directory not found: " + dirname); } fs.writeFileSync(dest, js); console.error("Wrote " + dest); } }; } // CattyJob } // Catty function stripBOM(str) { if (str && str.charCodeAt(0) === 0xFEFF) { str = str.slice(1); } return str; } function parseDeps(js) { var fileRxp = /\*?[_0-9a-z](?:[.-]?[_0-9a-z])*/ig, deps = [], match, match2; while (match = REQUIRES_RXP.exec(js)) { while (match2 = fileRxp.exec(match[1])) { deps.push(match2[0]); } } return deps; } function findSourceFiles(dirPath) { var results = walkSync(dirPath); return results.filter(function(filePath) { return /\.js$/.test(filePath); }); } function dirExists(path) { return !!getFileInfo(path).is_dir; } function fileExists(path) { return !!getFileInfo(path).is_file; } function getFileInfo(p) { var info = {}, stat; try { stat = fs.statSync(p); info.exists = true; info.is_file = stat.isFile(); info.is_dir = stat.isDirectory(); info.directory = path.dirname(p); } catch(e) {}; if (info.is_file) { info.ext = path.extname(p); info.filename = path.basename(p); info.basename = info.filename.substr(0, info.filename.length - info.ext.length); } return info; } function walkSync(dir, memo) { memo = memo || []; var list = fs.readdirSync(dir); list.forEach(function(file) { var filepath = path.join(dir, file); var stat = fs.statSync(filepath); if (stat && stat.isDirectory()) { walkSync(filepath, memo); } else { memo.push(filepath); } }); return memo; } function die(msg) { if (msg) console.error(msg); process.exit(1); } module.exports = function(opts) { return new Catty(opts); // allow multiple instances with different options }; _.extend(module.exports, catty); PaxHeader/package/bin/catty000755 €¾^€XÑ0000002135 12731140666014672 xustar00000000 000000 19 NODETAR.depth=2 24 NODETAR.follow=false 36 NODETAR.ignoreFiles.0=.npmignore 36 NODETAR.ignoreFiles.1=.gitignore 38 NODETAR.ignoreFiles.2=package.json 30 NODETAR.package.name=catty 33 NODETAR.package.version=0.0.8 54 NODETAR.package.description=Mapshaper's build tool 40 NODETAR.package.keywords.0=mapshaper 61 NODETAR.package.author=Matthew Bloch 35 NODETAR.package.main=./catty.js 48 NODETAR.package.dependencies.underscore=~1.7 44 NODETAR.package.dependencies.nomnom=~1.8 41 NODETAR.package.bin.catty=./bin/catty 48 NODETAR.package.devDependencies.mocha=~2.3.3 59 NODETAR.package.scripts.test=mocha --check-leaks -R dot 39 NODETAR.package.repository.type=git 70 NODETAR.package.repository.url=https://github.com/mbloch/catty.git 31 NODETAR.package.license=MIT 67 NODETAR.package.bugs.url=https://github.com/mbloch/catty/issues 60 NODETAR.package.homepage=https://github.com/mbloch/catty 26 path=package/bin/catty 21 NODETAR.type=File 23 SCHILY.dev=16777220 18 SCHILY.nlink=1 17 uid=415129326 18 gid=1490099278 24 NODETAR.blksize=4096 24 SCHILY.ino=152226884 13 size=1507 20 NODETAR.blocks=8 package/bin/catty000755 €¾^€°XÑ0000002743 12731140666013206 0ustar00000000 000000 #!/usr/bin/env node var opts = require("nomnom") .help("Usage: catty [flags] input [output]") .option('follow', { abbr: "f", flag: true }) .option('dir', { abbr: "d" }) .option('global', { flag: true, abbr: 'g' }) .option('deps', { }) .parse(); var catty = require("../")(opts); var input = opts._[0]; var output = opts._[1]; var keyCommands = []; if (opts.follow) { initKeyCommands(); } if (opts.dir) { opts.dir.split(',').forEach(function(d) { catty.addLibrary(d); }); } catty.cat([input], output); function initKeyCommands() { process.stdin.resume(); process.stdin.setEncoding('utf8'); process.stdin.setRawMode(true); process.stdin.on('data', function(char) { if (char == '\3') { process.exit(); } else if (char in keyCommands) { runKeyCommand(char); } else { process.stdout.write(char); } }); addKeyCommand('q', 'quit', function() { process.exit(); }); addKeyCommand('h', 'list commands', function() { listKeyCommands(); }); } function addKeyCommand(flag, description, callback) { keyCommands[flag] = {callback: callback, description: description}; } function listKeyCommands() { var msg = "Key commands:"; keyCommands.forEach(function(cmd, k) { var cmd = keyCommands[k]; msg += "\n " + k + ": " + cmd.description; }); console.log(msg); } function runKeyCommand(c) { var obj = keyCommands[c]; if (obj) { obj.callback(); } } PaxHeader/package/LICENSE.txt000644 €¾^€XÑ0000002137 12457037510014674 xustar00000000 000000 19 NODETAR.depth=1 24 NODETAR.follow=false 36 NODETAR.ignoreFiles.0=.npmignore 36 NODETAR.ignoreFiles.1=.gitignore 38 NODETAR.ignoreFiles.2=package.json 30 NODETAR.package.name=catty 33 NODETAR.package.version=0.0.8 54 NODETAR.package.description=Mapshaper's build tool 40 NODETAR.package.keywords.0=mapshaper 61 NODETAR.package.author=Matthew Bloch 35 NODETAR.package.main=./catty.js 48 NODETAR.package.dependencies.underscore=~1.7 44 NODETAR.package.dependencies.nomnom=~1.8 41 NODETAR.package.bin.catty=./bin/catty 48 NODETAR.package.devDependencies.mocha=~2.3.3 59 NODETAR.package.scripts.test=mocha --check-leaks -R dot 39 NODETAR.package.repository.type=git 70 NODETAR.package.repository.url=https://github.com/mbloch/catty.git 31 NODETAR.package.license=MIT 67 NODETAR.package.bugs.url=https://github.com/mbloch/catty/issues 60 NODETAR.package.homepage=https://github.com/mbloch/catty 28 path=package/LICENSE.txt 21 NODETAR.type=File 23 SCHILY.dev=16777220 18 SCHILY.nlink=1 17 uid=415129326 18 gid=1490099278 24 NODETAR.blksize=4096 24 SCHILY.ino=152226882 13 size=1080 20 NODETAR.blocks=8 package/LICENSE.txt000644 €¾^€XÑ0000002070 12457037510012716 0ustar00000000 000000 The MIT License (MIT) Copyright (c) 2015 Matthew Bloch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PaxHeader/package/catty.sublime-project000644 €¾^€XÑ0000002145 12544514152017221 xustar00000000 000000 19 NODETAR.depth=1 24 NODETAR.follow=false 36 NODETAR.ignoreFiles.0=.npmignore 36 NODETAR.ignoreFiles.1=.gitignore 38 NODETAR.ignoreFiles.2=package.json 30 NODETAR.package.name=catty 33 NODETAR.package.version=0.0.8 54 NODETAR.package.description=Mapshaper's build tool 40 NODETAR.package.keywords.0=mapshaper 61 NODETAR.package.author=Matthew Bloch 35 NODETAR.package.main=./catty.js 48 NODETAR.package.dependencies.underscore=~1.7 44 NODETAR.package.dependencies.nomnom=~1.8 41 NODETAR.package.bin.catty=./bin/catty 48 NODETAR.package.devDependencies.mocha=~2.3.3 59 NODETAR.package.scripts.test=mocha --check-leaks -R dot 39 NODETAR.package.repository.type=git 70 NODETAR.package.repository.url=https://github.com/mbloch/catty.git 31 NODETAR.package.license=MIT 67 NODETAR.package.bugs.url=https://github.com/mbloch/catty/issues 60 NODETAR.package.homepage=https://github.com/mbloch/catty 38 path=package/catty.sublime-project 21 NODETAR.type=File 23 SCHILY.dev=16777220 18 SCHILY.nlink=1 17 uid=415129326 18 gid=1490099278 24 NODETAR.blksize=4096 24 SCHILY.ino=179603538 9 size=4 20 NODETAR.blocks=8 package/catty.sublime-project000644 €H¾^€XÑ0000000004 12544514152015347 0ustar00000000 000000 { } PaxHeader/package/catty.sublime-workspace000644 €¾^€XÑ0000002155 12730773167017563 xustar00000000 000000 19 NODETAR.depth=1 24 NODETAR.follow=false 36 NODETAR.ignoreFiles.0=.npmignore 36 NODETAR.ignoreFiles.1=.gitignore 38 NODETAR.ignoreFiles.2=package.json 30 NODETAR.package.name=catty 33 NODETAR.package.version=0.0.8 54 NODETAR.package.description=Mapshaper's build tool 40 NODETAR.package.keywords.0=mapshaper 61 NODETAR.package.author=Matthew Bloch 35 NODETAR.package.main=./catty.js 48 NODETAR.package.dependencies.underscore=~1.7 44 NODETAR.package.dependencies.nomnom=~1.8 41 NODETAR.package.bin.catty=./bin/catty 48 NODETAR.package.devDependencies.mocha=~2.3.3 59 NODETAR.package.scripts.test=mocha --check-leaks -R dot 39 NODETAR.package.repository.type=git 70 NODETAR.package.repository.url=https://github.com/mbloch/catty.git 31 NODETAR.package.license=MIT 67 NODETAR.package.bugs.url=https://github.com/mbloch/catty/issues 60 NODETAR.package.homepage=https://github.com/mbloch/catty 40 path=package/catty.sublime-workspace 21 NODETAR.type=File 23 SCHILY.dev=16777220 18 SCHILY.nlink=1 17 uid=415129326 18 gid=1490099278 24 NODETAR.blksize=4096 24 SCHILY.ino=179603539 14 size=22400 21 NODETAR.blocks=48 package/catty.sublime-workspace000644 €H¾^€¨XÑ0000053600 12730773167016173 0ustar00000000 000000 { "auto_complete": { "selected_items": [ [ "des", "describe describe file" ], [ "de", "describe describe methods" ], [ "inv", "inverseEllApprox" ], [ "d", "describe describe methods" ], [ "0x", "0x7fffffff" ], [ "desc", "describe describe methods" ] ] }, "buffers": [ { "file": "catty.js", "settings": { "buffer_size": 9669, "line_ending": "Unix" } }, { "file": "package.json", "settings": { "buffer_size": 653, "line_ending": "Unix" } }, { "file": "README.md", "settings": { "buffer_size": 1493, "line_ending": "Unix" } }, { "file": "/Users/199000/mb4/mapshaperjs/build", "settings": { "buffer_size": 725, "line_ending": "Unix" } }, { "file": "test/tests.js", "settings": { "buffer_size": 2860, "line_ending": "Unix" } }, { "file": "/Users/199000/mb4/mapshaperjs/www/index.html", "settings": { "buffer_size": 8961, "line_ending": "Unix" } } ], "build_system": "", "build_system_choices": [ ], "build_varint": "", "command_palette": { "height": 392.0, "last_filter": "", "selected_items": [ [ "Snippet: ", "Snippet: Prototype" ] ], "width": 467.0 }, "console": { "height": 0.0, "history": [ ] }, "distraction_free": { "menu_visible": true, "show_minimap": false, "show_open_files": false, "show_tabs": false, "side_bar_visible": false, "status_bar_visible": false }, "file_history": [ "/Users/199000/mb4/catty/test/test_data/a.js", "/Users/199000/mb4/catty/test/test_data/c_bom.js", "/Users/199000/mb4/mapshaperjs/__admin/publish", "/Users/199000/mb4/mapshaperjs/www/index.html", "/Users/199000/nytweb/2014/36_hours/36-hours-maps/2015-06-21-chengdu/config.yml", "/Users/199000/nytweb/2014/36_hours/36-hours-maps/2015-06-21-chengdu/src/script.js", "/Users/199000/mb4/mapshaperjs/src/gui/mapshaper-console.js", "/Users/199000/mb4/mapshaperjs/package.json", "/Users/199000/mb4/mapshaperjs/build", "/Users/199000/mb4/mapshaperjs/Makefile", "/Users/199000/mb4/mapshaperjs/src/commands/mapshaper-calc.js", "/Users/199000/nytweb/2014/36_hours/36-hours-maps/2015-06-21-chengdu/src/index.jst.html", "/Users/199000/mb4/mapshaperjs/src/mapshaper-projections.js", "/Users/199000/nytweb/2014/36_hours/36-hours-maps/chengdu_test/config.yml", "/Users/199000/nytweb/2014/36_hours/36-hours-maps/chengdu_test/src/index.jst.html", "/Users/199000/mb4/mapshaperjs/src/cli/mapshaper-options.js", "/Users/199000/mb4/mapshaperjs/src/gui/mapshaper-gui-lib.js", "/Users/199000/mb4/mapshaperjs/lib/__mapshaper-cli-lib.js", "/Users/199000/mb4/mapshaperjs/test/options-test.js", "/Users/199000/mb4/mapshaperjs/src/data/mapshaper-encodings.js", "/Users/199000/mb4/mapshaperjs/www/mapshaper-gui.js", "/Users/199000/mb4/mapshaperjs/src/shapes/mapshaper-repair.js", "/Users/199000/mb4/mapshaperjs/src/mapshaper-import.js", "/Users/199000/mb4/mapshaperjs/src/gui/mapshaper-maplayer.js", "/Users/199000/mb4/js-basics-v2/src/env.js", "/Users/199000/mb4/mapshaperjs/www/page.css", "/Users/199000/mb4/mapshaperjs/node_modules/shell-quote/index.js", "/Users/199000/mb4/mapshaperjs/www/mapshaper.js", "/Users/199000/mb4/mapshaperjs/src/gui/mapshaper-gui-import.js", "/Users/199000/mb4/mapshaperjs/src/gui/mapshaper-import-control.js", "/Users/199000/mb4/mapshaperjs/src/cli/mapshaper-commands.js", "/Users/199000/mb4/mapshaperjs/src/cli/mapshaper-file-import.js", "/Users/199000/mb4/mapshaperjs/__wiki/changelog.md", "/Users/199000/nytweb/2015/06_same_sex/2015-06-25-same-sex-marriage-map/src/script.js", "/Users/199000/mb4/js-basics-v2/src/tweening2.js", "/Users/199000/nytweb/2015/06_same_sex/2015-06-25-same-sex-marriage-map/src/nytg-vote-map/lib/vmap-popup.js", "/Users/199000/mb4/mapshaperjs/src/mapshaper-file-types.js", "/Users/199000/mb4/mapshaperjs/test/file-types-test.js", "/Users/199000/mb4/mapshaperjs/test/file-type-test.js", "/Users/199000/mb4/mapshaperjs/mapshaper.js", "/Users/199000/mb4/js-basics-v2/src/browser/elements.js", "/Users/199000/mb4/mapshaperjs/www/elements.css", "/Users/199000/mb4/js-basics-v2/src/core-utils.js", "/Users/199000/mb4/mapshaperjs/src/gui/mapshaper-map.js", "/Users/199000/mb4/mapshaperjs/src/gui/mapshaper-map-extent.js", "/Users/199000/mb4/mapshaperjs/src/gui/mapshaper-gui.js", "/Users/199000/mb4/js-basics-v2/src/mouse/mouse-area.js", "/Users/199000/mb4/js-basics-v2/src/mouse/mouse-wheel.js", "/Users/199000/mb4/mapshaperjs/src/gui/mapshaper-map-nav.js", "/Users/199000/mb4/mapshaperjs/lib/__mapshaper-gui-lib.js", "/Users/199000/mb4/js-basics-v2/src/tweening.js", "/Users/199000/mb4/mapshaperjs/src/gui/mapshaper-export-control.js", "/Users/199000/mb4/mapshaperjs/src/gui/mapshaper-highlight-box.js", "/Users/199000/mb4/js-basics-v2/src/browser/element-position.js", "/Users/199000/mb4/mapshaperjs/src/gui/mapshaper-gui-shapes.js", "/Users/199000/mb4/mapshaperjs/src/gui/mapshaper-gui-error.js", "/Users/199000/mb4/js-basics-v2/src/utils/format.js", "/Users/199000/mb4/mapshaperjs/src/data/mapshaper-expressions.js", "/Users/199000/mb4/mapshaperjs/src/shapefile/shp-reader.js", "/Users/199000/mb4/mapshaperjs/src/gui/mapshaper-mouse.js", "/Users/199000/mb4/mapshaperjs/src/geojson/mapshaper-geojson.js", "/Users/199000/mb4/mapshaperjs/src/cli/mapshaper-cli-lib.js", "/Users/199000/mb4/mapshaperjs/src/mapshaper-common.js", "/Users/199000/mb4/mapshaperjs/src/gui/mapshaper-progress-bar.js", "/Users/199000/mb4/mapshaperjs/.gitignore", "/Users/199000/node_modules/mapshaper/www/page.css", "/Users/199000/mb4/mapshaperjs/src/gui/mapshaper-elements.js", "/Users/199000/mb4/mapshaperjs/bin/mapshaper", "/Users/199000/mb4/mapshaperjs/src/simplify/mapshaper-simplify.js", "/Users/199000/mb4/mapshaperjs/src/simplify/mapshaper-dp.js", "/Users/199000/mb4/mapshaperjs/src/simplify/mapshaper-visvalingam.js", "/Users/199000/nytweb/2015/06_heart_attacks/prep/Makefile", "/Users/199000/mb4/mapshaperjs/src/shapes/mapshaper-shape-geom.js", "/Users/199000/mb4/mapshaperjs/src/simplify/mapshaper-simplify-fast.js", "/Users/199000/mb4/mapshaperjs/src/shapes/mapshaper-shapes.js", "/Users/199000/mb4/mapshaperjs/src/simplify/mapshaper-onepass.js", "/Users/199000/mb4/js-basics-v2/__build", "/Users/199000/mb4/js-basics-v2/src/events.js", "/Users/199000/mb4/js-basics-v2/src/builds/js-basics-lib.js", "/Users/199000/mb4/js-basics-v2/src/browser/browser-utils.js", "/Users/199000/mb4/js-basics-v2/test/format-test.js", "/Users/199000/mb4/js-basics-v2/src/browser/browser.js", "/Users/199000/mb4/mapshaperjs/lib/mapshaper-gui-utils.js", "/Users/199000/mb4/mapshaperjs/src/gui/mapshaper-repair-control.js", "/Users/199000/mb4/js-basics-v2/src/browser/page-events.js", "/Users/199000/mb4/js-basics-v2/src/browser/fixed.js", "/Users/199000/nytweb/nytg-vote-map/lib/vmap-utils.js", "/Users/199000/mb4/mapshaperjs/src/topojson/topojson-export.js", "/Users/199000/mb4/mapshaperjs/test/shapes-test.js", "/Users/199000/mb4/js-basics-v2/src/waiter.js", "/Users/199000/mb4/js-basics-v2/src/core.js", "/Users/199000/mb4/js-basics-v2/src/events_test.js", "/Users/199000/mb4/js-basics-v2/src/data/loading.html5.js", "/Users/199000/mb4/mapshaperjs/src/shapefile/mapshaper-shapefile.js", "/Users/199000/mb4/mapshaperjs/src/shapefile/mapshaper-dbf-table.js", "/Users/199000/mb4/geodata/natural_earth_2.0/VERSION", "/Users/199000/mb4/mapshaperjs/src/shapefile/shp-record.js", "/Users/199000/mb4/mapshaperjs/src/mapshaper-export.js", "/Users/199000/mb4/mapshaperjs/src/commands/mapshaper-points.js", "/Users/199000/mb4/mapshaperjs/src/shapes/mapshaper-path-import.js", "/Users/199000/mb4/mapshaperjs/src/gui/mapshaper-simplify-control.js", "/Users/199000/mb4/mapshaperjs/src/gui/mapshaper-data-catalog.js", "/Users/199000/mb4/js-basics-v2/src/utils/median.js", "/Users/199000/mb4/mapshaperjs/src/gui/mapshaper-zip-reader.js", "/Users/199000/mb4/mapshaperjs/src/topology/mapshaper-topology.js", "/Users/199000/mb4/mapshaperjs/test/delim-import-test.js", "/Users/199000/mb4/mapshaperjs/src/topology/mapshaper-hash-function.js", "/Users/199000/mb4/mapshaperjs/src/topology/mapshaper-arc-index.js", "/Users/199000/mb4/mapshaperjs/src/cli/mapshaper-option-validation.js", "/Users/199000/mb4/mapshaperjs/src/mapshaper-path-utils.js", "/Users/199000/mb4/mapshaperjs/src/shapes/mapshaper-topology.js", "/Users/199000/mb4/mapshaperjs/src/shapes/mapshaper-arc-index.js", "/Users/199000/mb4/mapshaperjs/__wiki/intro-v0.2.md", "/Users/199000/mb4/mapshaperjs/src/data/mapshaper-data-table.js", "/Users/199000/mb4/mapshaperjs/src/shapes/mapshaper-shape-utils.js", "/Users/199000/mb4/mapshaperjs/src/cli/mapshaper-run-command.js", "/Users/199000/mb4/mapshaperjs/test/dataset-utils-test.js", "/Users/199000/mb4/mapshaperjs/src/mapshaper-dataset-utils.js", "/Users/199000/mb4/mapshaperjs/__wiki/commands-v0.2.0.md", "/Users/199000/mb4/mapshaperjs/test/filter-test.js", "/Users/199000/mb4/mapshaperjs/src/commands/mapshaper-filter.js", "/Users/199000/mb4/mapshaperjs/src/data/mapshaper-delim-import.js", "/Users/199000/mb4/mapshaperjs/src/data/mapshaper-delim-export.js", "/Users/199000/mb4/mapshaperjs/src/commands/mapshaper-clip-erase.js", "/Users/199000/mb4/mapshaperjs/src/cli/mapshaper-option-parser.js", "/Users/199000/mb4/mapshaperjs/test/dbf-reader-test.js", "/Users/199000/mb4/mapshaperjs/src/shapes/mapshaper-segments.js", "/Users/199000/mb4/mapshaperjs/.git/hooks/pre-commit" ], "find": { "height": 35.0 }, "find_in_files": { "height": 110.0, "where_history": [ "/Users/199000/mb4/mapshaperjs/test,/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/mapshaperjs/www,/Users/199000/mb4/js-basics-v2/src", "/Users/199000/mb4/mapshaperjs/test,/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/mapshaperjs/www", "/Users/199000/mb4/mapshaperjs/test,/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/js-basics-v2/src", "/Users/199000/mb4/mapshaperjs/test,/Users/199000/mb4/mapshaperjs/src", "/Users/199000/mb4/mapshaperjs/test", "/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/mapshaperjs/test", "/Users/199000/mb4/mapshaperjs/src", "/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/mapshaperjs/test", "/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/mapshaperjs/test,/Users/199000/mb4/mapshaperjs/lib", "/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/mapshaperjs/test,/Users/199000/mb4/mapshaperjs/lib,/Users/199000/mb4/js-basics-v2/src", "/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/mapshaperjs/test,/Users/199000/mb4/mapshaperjs/lib,/Users/199000/mb4/js-basics-v2/srcuicqa", "/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/mapshaperjs/test,/Users/199000/mb4/mapshaperjs/lib,/Users/199000/mb4/js-basics-v2/src", "/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/mapshaperjs/test,/Users/199000/mb4/mapshaperjs/lib", "/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/mapshaperjs/test", "/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/mapshaperjs/test,/Users/199000/mb4/mapshaperjs/src/gis,/Users/199000/mb4/mapshaperjs/src/gui", "/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/mapshaperjs/test", "/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/mapshaperjs/lib,/Users/199000/mb4/mapshaperjs/test", "/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/mapshaperjs/lib,/Users/199000/mb4/mapshaperjs/test,/Users/199000/mb4/js-basics-v2/src,/Users/199000/mb4/js-graphics-v2/src", "/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/mapshaperjs/test,/Users/199000/mb4/js-basics-v2/src,/Users/199000/mb4/js-graphics-v2/src", "/Users/199000/mb4/mapshaperjs/src", "/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/mapshaperjs/test,/Users/199000/mb4/js-basics-v2/src", "/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/js-basics-v2/src", "/Users/199000/mb4/mapshaperjs,/Users/199000/mb4/js-basics-v2/src", "/Users/199000/mb4/mapshaperjs,/Users/199000/mb4/js-basics/src", "/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/js-basics/src", "/Users/199000/mb4/mapshaperjs,/Users/199000/mb4/js-basics/src", "/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/js-basics/src,/Users/199000/mb4/mapshaperjs/lib", "/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/js-basics/src,/Users/199000/mb4/js-graphics/src,/Users/199000/mb4/mapshaperjs/test,/Users/199000/mb4/mapshaperjs/lib", "/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/js-basics/src,/Users/199000/mb4/js-graphics/src,/Users/199000/mb4/mapshaperjs/test", "/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/js-basics/src,/Users/199000/mb4/js-graphics/src", "/Users/199000/mb4/mapshaperjs/src,/Users/199000/mb4/js-basics/src", "/Users/199000/mb4/mapshaperjs/src", "/Users/199000/mb4/js-basics/src", "/Users/199000/mb4/mapshaperjs/src", "/Users/199000/mb4/js-basics/src", "/Users/199000/mb4/mapshaperjs/src", "/Users/199000/mb4/js-basics/src", "/Users/199000/mb4/mapshaperjs/src", "/Users/199000/mb4/mapshaper/src", "/Users/199000/mb4/js-basics", "/Users/199000/mb4/mapshaperjs/src", "/Users/199000/mb4/js/src" ] }, "find_state": { "case_sensitive": true, "find_history": [ "zip.js", "VERSION", "REQUIRES_RXP", "concatenate", "getContent", "console", "console.e", "parseDeps", "prepend", "console.error", "prepended", "setVar", "opts", "CattyJob", "stripB", "parsDeps", "parseDeps", "_js = ", "readFileSync", "try", "done", "catty", "readFile", "outFile", "unfilteredArcs", "refresh", "_style", "_setStyle", "addLayer", "bgStyle", "group", "_lyr", " ", "Vera", "err(", "monitor(", "crs", "importShapefile", "shp", "importShapefile", "output_prj", "cli.", "exportAs", "catch", "stop(e", "stop(", "cli.", "getOutputPaths", "output_dir", "files.forEach", "cli.", "validateInputFiles", "cli.", "z-index", "validateEnc", "validateEncoding", "findAndR", "findAndRepairI", "cli.", "mapshaper-cli-lib", "getVersion", "main-map", "main-area", ".main-area", "Env.", "touchEnabled", "parseC", "submit", "runParsedCommands", "dataset", "stop = ", "function stop", "reset", "update", "console.", "consol", "cpg", "\"json\"", "'json'", "json", "importDbf", "isReadableFileType", "guessInput", "guessInputT", "guessInputFileTy", "guessInputFileT", "importFiles", "importShp", "importDbf", "importShapefile", "importFile", "importShp", "importShapefile", "importContent", "map", "showLayer", "group", "backgroundStyle", "reset", "onBlur", "turnOff", "cursor", "input", "text", "console", "Source", "keydown", "text", "turnOff", "isBoolean", "Vera", "Vera ", "Source Sans", "Source", "main-map", "mapshaper-rectangle", "conso", "Data", "_self", "_downData", "_moveData", "_isDown", "procMouseEvent", "onMouseDown", "console.log", "onMouseDown", "_downData", "CanvasLayer" ], "highlight": true, "in_selection": false, "preserve_case": false, "regex": false, "replace_history": [ " ", "_downEvt", "_moveEvt", "_contentBounds", "contentBounds", "setBounds", "_nav", "MapShaper.formatLogArgs", "formatLogArgs", "format", "", "utils.inherit", "hashTable", "filteredRecords", "filteredShapes", "filteredLyr", "{layers: layers, arcs: arcs}", "copy", "importCRS", "srcObj", "srcCollection", "obj", "cleanNumericString", "cpg/", "basename", "importRecords", ",", "'\\1'", "'\\0'", "'\\1'", "importRecords", "compileCalcExpression", "evalCalcExpression", "evalFeatureExpression", "getExpressionContext", "compileFeatureExpression", "acc(", "stitch", "getPlanarShapeArea", "equalAngles(", "", "lat", "lng", "getPlanarPathArea2", "getPlanarPathArea", ", ", "var ", "inverse", "forward", "fwd", "inv", "inverse", "forward = function(lng, lat", "this.", "this.k0", "this.R", "size", "val", "maxVal", "threshold", "init", "utils.", "file", "runShellArgs", "api.runShellArgs", "api.internal.runCommands", "inferOutputFormat", "inferFileFormat", "importDelimTable", "\\t", "getGenericComparator", "testPointInPolygon", "innerXY", "candP", "adjustedP", "candidates", "bestP", "interiorXY", "", "compileCalcExpression", "utils.isFiniteNumber", "remove_empty", "GeoJSON.stringify", "runCommands", "", "-1", "eraseLayer", "Layers", "clipLayer", "stripeSizes", "arcIndex", "arcStatus", "dissolvePath", "179.99", "180.01", "getGroupId", "getId", "groupId", "weightedMetric", "dissolvePolygons2", "divideArcs(", "replaceArcIds", "dissolvePolygons", "findPath", "getRingFlattener", "nn, xx, yy", "(\"no-replace\", noReplaceOpt)", "(\"name\", nameOpt)", "(\"target\", targetOpt)", "readRows(", "counties_shp", "states_shp", "cut", "splitLayerOnGrid", "keepEveryPolygon", "convertPolygonsToTypedLines", "joinAttributesToFeatures", "convertPolygonsToInnerLines", "explodeFeatures", "dissolvePolygons", "evaluateEachFeature", "erasePolygons", "clipPolygons", "erasePolygonLayers", "clipPolygonLayers", "mapshaper", "usedClipArcs", "routeFlags" ], "reverse": false, "show_context": true, "use_buffer2": true, "whole_word": false, "wrap": true }, "groups": [ { "selected": 3, "sheets": [ { "buffer": 0, "file": "catty.js", "semi_transient": false, "settings": { "buffer_size": 9669, "regions": { }, "selection": [ [ 900, 900 ] ], "settings": { "syntax": "Packages/JavaScript/JavaScript.sublime-syntax", "tab_size": 2, "translate_tabs_to_spaces": true }, "translation.x": 0.0, "translation.y": 274.0, "zoom_level": 1.0 }, "stack_index": 3, "type": "text" }, { "buffer": 1, "file": "package.json", "semi_transient": false, "settings": { "buffer_size": 653, "regions": { }, "selection": [ [ 196, 196 ] ], "settings": { "syntax": "Packages/JavaScript/JSON.sublime-syntax", "tab_size": 2, "translate_tabs_to_spaces": true }, "translation.x": 0.0, "translation.y": 0.0, "zoom_level": 1.0 }, "stack_index": 4, "type": "text" }, { "buffer": 2, "file": "README.md", "semi_transient": false, "settings": { "buffer_size": 1493, "regions": { }, "selection": [ [ 121, 121 ] ], "settings": { "syntax": "Packages/Markdown/Markdown.tmLanguage" }, "translation.x": 0.0, "translation.y": 77.0, "zoom_level": 1.0 }, "stack_index": 5, "type": "text" }, { "buffer": 3, "file": "/Users/199000/mb4/mapshaperjs/build", "semi_transient": false, "settings": { "buffer_size": 725, "regions": { }, "selection": [ [ 20, 20 ] ], "settings": { "syntax": "Packages/C#/Build.tmLanguage", "tab_size": 2, "translate_tabs_to_spaces": true }, "translation.x": 0.0, "translation.y": 0.0, "zoom_level": 1.0 }, "stack_index": 1, "type": "text" } ] }, { "selected": 1, "sheets": [ { "buffer": 4, "file": "test/tests.js", "semi_transient": false, "settings": { "buffer_size": 2860, "regions": { }, "selection": [ [ 1059, 1059 ] ], "settings": { "syntax": "Packages/JavaScript/JavaScript.sublime-syntax", "tab_size": 2, "translate_tabs_to_spaces": true }, "translation.x": 0.0, "translation.y": 551.0, "zoom_level": 1.0 }, "stack_index": 2, "type": "text" }, { "buffer": 5, "file": "/Users/199000/mb4/mapshaperjs/www/index.html", "semi_transient": false, "settings": { "buffer_size": 8961, "regions": { }, "selection": [ [ 519, 519 ] ], "settings": { "syntax": "Packages/HTML/HTML.sublime-syntax", "translate_tabs_to_spaces": false }, "translation.x": 0.0, "translation.y": 0.0, "zoom_level": 1.0 }, "stack_index": 0, "type": "text" } ] } ], "incremental_find": { "height": 25.0 }, "input": { "height": 0.0 }, "layout": { "cells": [ [ 0, 0, 1, 1 ], [ 1, 0, 2, 1 ] ], "cols": [ 0.0, 0.468594549981, 1.0 ], "rows": [ 0.0, 1.0 ] }, "menu_visible": true, "output.find_results": { "height": 100.0 }, "pinned_build_system": "", "project": "catty.sublime-project", "replace": { "height": 46.0 }, "save_all_on_build": true, "select_file": { "height": 0.0, "last_filter": "", "selected_items": [ [ "", "~/mb4/mapshaperjs/src/gis/mapshaper-recombine.js" ] ], "width": 0.0 }, "select_project": { "height": 0.0, "last_filter": "", "selected_items": [ ], "width": 0.0 }, "select_symbol": { "height": 0.0, "last_filter": "", "selected_items": [ ], "width": 0.0 }, "selected_group": 1, "settings": { }, "show_minimap": true, "show_open_files": false, "show_tabs": true, "side_bar_visible": true, "side_bar_width": 150.0, "status_bar_visible": true, "template_settings": { } }