mirror of
				https://github.com/Jermolene/TiddlyWiki5
				synced 2025-10-31 07:32:59 +00:00 
			
		
		
		
	Move markdown.js
Leaving it in node_modules meant that it wasn’t getting installed by npm Fixes #281
This commit is contained in:
		
							
								
								
									
										1
									
								
								node_modules/.bin/md2html
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								node_modules/.bin/md2html
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1 +0,0 @@ | |||||||
| ../markdown/bin/md2html.js |  | ||||||
							
								
								
									
										2
									
								
								node_modules/markdown/.npmignore
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								node_modules/markdown/.npmignore
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,2 +0,0 @@ | |||||||
| .seed.yml |  | ||||||
| test |  | ||||||
							
								
								
									
										7
									
								
								node_modules/markdown/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								node_modules/markdown/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,7 +0,0 @@ | |||||||
| language: node_js |  | ||||||
| node_js: |  | ||||||
|   - "0.6" |  | ||||||
|   - "0.8" |  | ||||||
|   - "0.9" |  | ||||||
|   - "0.10" |  | ||||||
|   - "0.11" |  | ||||||
							
								
								
									
										35
									
								
								node_modules/markdown/Changes.markdown
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										35
									
								
								node_modules/markdown/Changes.markdown
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,35 +0,0 @@ | |||||||
| # Changelog for markdown |  | ||||||
|  |  | ||||||
| ## v0.5.0 - 2013-07-26 |  | ||||||
|  |  | ||||||
| There might be other bug fixes then the ones listed - I've been a bit lax at |  | ||||||
| updating the changes file, sorry :( |  | ||||||
|  |  | ||||||
| - Fix 'undefined' appearing in output for some cases with blockquotes |  | ||||||
| - Fix (multiple) global variable leaks. Ooops |  | ||||||
| - Fix IE8 issues (#68, #74, #97) |  | ||||||
| - Fix IE8 issue (#86) |  | ||||||
| - Handle windows line endings (#58) |  | ||||||
| - Allow spaces in img/link paths (#48) |  | ||||||
| - Add explicit text of the license to the readme (#74) |  | ||||||
| - Style tweaks by Xhmikosr (#83, #81, #82) |  | ||||||
| - Build now tested by TravisCI thanks to sebs (#85) |  | ||||||
| - Fix 'cuddled' header parsing (#94) |  | ||||||
| - Fix images inside links mistakenly requiring a title attribute to parse |  | ||||||
|   correctly (#71) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## v0.4.0 - 2012-06-09 |  | ||||||
|  |  | ||||||
| - Fix for anchors enclosed by parenthesis (issue #46) |  | ||||||
| - `npm test` will now run the entire test suite cleanly. (switch tests over to |  | ||||||
|   node-tap). (#21) |  | ||||||
| - Allow inline elements to appear inside link text (#27) |  | ||||||
| - Improve link parsing when link is inside parenthesis (#38) |  | ||||||
| - Actually render image references (#36) |  | ||||||
| - Improve link parsing when multiple on a line (#5) |  | ||||||
| - Make it work in IE7/8 (#37) |  | ||||||
| - Fix blockquote merging/implicit conversion between string/String (#44, #24) |  | ||||||
| - md2html can now process stdin (#43) |  | ||||||
| - Fix jslint warnings (#42) |  | ||||||
| - Fix to correctly render self-closing tags (#40, #35, #28) |  | ||||||
							
								
								
									
										185
									
								
								node_modules/markdown/README.markdown
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										185
									
								
								node_modules/markdown/README.markdown
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,185 +0,0 @@ | |||||||
| # markdown-js |  | ||||||
|  |  | ||||||
| Yet another markdown parser, this time for JavaScript. There's a few |  | ||||||
| options that precede this project but they all treat markdown to HTML |  | ||||||
| conversion as a single step process. You pass markdown in and get HTML |  | ||||||
| out, end of story. We had some pretty particular views on how the |  | ||||||
| process should actually look, which include: |  | ||||||
|  |  | ||||||
|   * producing well-formed HTML. This means that `em` and `strong` nesting |  | ||||||
|     is important, as is the ability to output as both HTML and XHTML |  | ||||||
|  |  | ||||||
|   * having an intermediate representation to allow processing of parsed |  | ||||||
|     data (we in fact have two, both [JsonML]: a markdown tree and an HTML tree) |  | ||||||
|  |  | ||||||
|   * being easily extensible to add new dialects without having to |  | ||||||
|     rewrite the entire parsing mechanics |  | ||||||
|  |  | ||||||
|   * having a good test suite. The only test suites we could find tested |  | ||||||
|     massive blocks of input, and passing depended on outputting the HTML |  | ||||||
|     with exactly the same whitespace as the original implementation |  | ||||||
|  |  | ||||||
| [JsonML]: http://jsonml.org/ "JSON Markup Language" |  | ||||||
|  |  | ||||||
| ## Installation |  | ||||||
|  |  | ||||||
| Just the `markdown` library: |  | ||||||
|  |  | ||||||
|     npm install markdown |  | ||||||
|  |  | ||||||
| Optionally, install `md2html` into your path |  | ||||||
|  |  | ||||||
|     npm install -g markdown |  | ||||||
|  |  | ||||||
| ## Usage |  | ||||||
|  |  | ||||||
| ### Node |  | ||||||
|  |  | ||||||
| The simple way to use it with node is: |  | ||||||
|  |  | ||||||
| ```js |  | ||||||
| var markdown = require( "markdown" ).markdown; |  | ||||||
| console.log( markdown.toHTML( "Hello *World*!" ) ); |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ### Browser |  | ||||||
|  |  | ||||||
| It also works in a browser; here is a complete example: |  | ||||||
|  |  | ||||||
| ```html |  | ||||||
| <!DOCTYPE html> |  | ||||||
| <html> |  | ||||||
|   <body> |  | ||||||
|     <textarea id="text-input" oninput="this.editor.update()" |  | ||||||
|               rows="6" cols="60">Type **Markdown** here.</textarea> |  | ||||||
|     <div id="preview"> </div> |  | ||||||
|     <script src="lib/markdown.js"></script> |  | ||||||
|     <script> |  | ||||||
|       function Editor(input, preview) { |  | ||||||
|         this.update = function () { |  | ||||||
|           preview.innerHTML = markdown.toHTML(input.value); |  | ||||||
|         }; |  | ||||||
|         input.editor = this; |  | ||||||
|         this.update(); |  | ||||||
|       } |  | ||||||
|       var $ = function (id) { return document.getElementById(id); }; |  | ||||||
|       new Editor($("text-input"), $("preview")); |  | ||||||
|     </script> |  | ||||||
|   </body> |  | ||||||
| </html> |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ### Command line |  | ||||||
|  |  | ||||||
| Assuming you've installed the `md2html` script (see Installation, |  | ||||||
| above), you can convert markdown to html: |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| # read from a file |  | ||||||
| md2html /path/to/doc.md > /path/to/doc.html |  | ||||||
|  |  | ||||||
| # or from stdin |  | ||||||
| echo 'Hello *World*!' | md2html |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ### More options |  | ||||||
|  |  | ||||||
| If you want more control check out the documentation in |  | ||||||
| [lib/markdown.js] which details all the methods and parameters |  | ||||||
| available (including examples!). One day we'll get the docs generated |  | ||||||
| and hosted somewhere for nicer browsing. |  | ||||||
|  |  | ||||||
| [lib/markdown.js]: http://github.com/evilstreak/markdown-js/blob/master/lib/markdown.js |  | ||||||
|  |  | ||||||
| Meanwhile, here's an example of using the multi-step processing to |  | ||||||
| make wiki-style linking work by filling in missing link references: |  | ||||||
|  |  | ||||||
| ```js |  | ||||||
| var md = require( "markdown" ).markdown, |  | ||||||
|     text = "[Markdown] is a simple text-based [markup language]\n" + |  | ||||||
|            "created by [John Gruber]\n\n" + |  | ||||||
|            "[John Gruber]: http://daringfireball.net"; |  | ||||||
|  |  | ||||||
| // parse the markdown into a tree and grab the link references |  | ||||||
| var tree = md.parse( text ), |  | ||||||
|     refs = tree[ 1 ].references; |  | ||||||
|  |  | ||||||
| // iterate through the tree finding link references |  | ||||||
| ( function find_link_refs( jsonml ) { |  | ||||||
|   if ( jsonml[ 0 ] === "link_ref" ) { |  | ||||||
|     var ref = jsonml[ 1 ].ref; |  | ||||||
|  |  | ||||||
|     // if there's no reference, define a wiki link |  | ||||||
|     if ( !refs[ ref ] ) { |  | ||||||
|       refs[ ref ] = { |  | ||||||
|         href: "http://en.wikipedia.org/wiki/" + ref.replace(/\s+/, "_" ) |  | ||||||
|       }; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   else if ( Array.isArray( jsonml[ 1 ] ) ) { |  | ||||||
|     jsonml[ 1 ].forEach( find_link_refs ); |  | ||||||
|   } |  | ||||||
|   else if ( Array.isArray( jsonml[ 2 ] ) ) { |  | ||||||
|     jsonml[ 2 ].forEach( find_link_refs ); |  | ||||||
|   } |  | ||||||
| } )( tree ); |  | ||||||
|  |  | ||||||
| // convert the tree into html |  | ||||||
| var html = md.renderJsonML( md.toHTMLTree( tree ) ); |  | ||||||
| console.log( html ); |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ## Intermediate Representation |  | ||||||
|  |  | ||||||
| Internally the process to convert a chunk of markdown into a chunk of |  | ||||||
| HTML has three steps: |  | ||||||
|  |  | ||||||
|  1. Parse the markdown into a JsonML tree. Any references found in the |  | ||||||
|     parsing are stored in the attribute hash of the root node under the |  | ||||||
|     key `references`. |  | ||||||
|  |  | ||||||
|  2. Convert the markdown tree into an HTML tree. Rename any nodes that |  | ||||||
|     need it (`bulletlist` to `ul` for example) and lookup any references |  | ||||||
|     used by links or images. Remove the references attribute once done. |  | ||||||
|  |  | ||||||
|  3. Stringify the HTML tree being careful not to wreck whitespace where |  | ||||||
|     whitespace is important (surrounding inline elements for example). |  | ||||||
|  |  | ||||||
| Each step of this process can be called individually if you need to do |  | ||||||
| some processing or modification of the data at an intermediate stage. |  | ||||||
| For example, you may want to grab a list of all URLs linked to in the |  | ||||||
| document before rendering it to HTML which you could do by recursing |  | ||||||
| through the HTML tree looking for `a` nodes. |  | ||||||
|  |  | ||||||
| ## Running tests |  | ||||||
|  |  | ||||||
| To run the tests under node you will need tap installed (it's listed as a |  | ||||||
| `devDependencies` so `npm install` from the checkout should be enough), then do |  | ||||||
|  |  | ||||||
|     $ npm test |  | ||||||
|  |  | ||||||
| ## Contributing |  | ||||||
|  |  | ||||||
| Do the usual github fork and pull request dance. Add yourself to the |  | ||||||
| contributors section of [package.json](/package.json) too if you want to. |  | ||||||
|  |  | ||||||
| ## License |  | ||||||
|  |  | ||||||
| Released under the MIT license. |  | ||||||
|  |  | ||||||
| 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. |  | ||||||
							
								
								
									
										52
									
								
								node_modules/markdown/bin/md2html.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										52
									
								
								node_modules/markdown/bin/md2html.js
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,52 +0,0 @@ | |||||||
| #!/usr/bin/env node |  | ||||||
| (function () { |  | ||||||
|   "use strict"; |  | ||||||
|  |  | ||||||
|   var fs = require("fs") |  | ||||||
|     , markdown = require("markdown").markdown |  | ||||||
|     , nopt = require("nopt") |  | ||||||
|     , stream |  | ||||||
|     , opts |  | ||||||
|     , buffer = "" |  | ||||||
|     ; |  | ||||||
|  |  | ||||||
|   opts = nopt( |  | ||||||
|     { "dialect": [ "Gruber", "Maruku"] |  | ||||||
|     , "help": Boolean |  | ||||||
|     } |  | ||||||
|   ); |  | ||||||
|  |  | ||||||
|   if (opts.help) { |  | ||||||
|     var name = process.argv[1].split("/").pop() |  | ||||||
|     console.warn( require("util").format( |  | ||||||
|       "usage: %s [--dialect=DIALECT] FILE\n\nValid dialects are Gruber (the default) or Maruku", |  | ||||||
|       name |  | ||||||
|     ) ); |  | ||||||
|     process.exit(0); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   var fullpath = opts.argv.remain[0]; |  | ||||||
|  |  | ||||||
|   if (fullpath && fullpath !== "-") { |  | ||||||
|     stream = fs.createReadStream(fullpath); |  | ||||||
|   } else { |  | ||||||
|     stream = process.stdin; |  | ||||||
|   } |  | ||||||
|   stream.resume(); |  | ||||||
|   stream.setEncoding("utf8"); |  | ||||||
|  |  | ||||||
|   stream.on("error", function(error) { |  | ||||||
|     console.error(error.toString()); |  | ||||||
|     process.exit(1); |  | ||||||
|   }); |  | ||||||
|  |  | ||||||
|   stream.on("data", function(data) { |  | ||||||
|     buffer += data; |  | ||||||
|   }); |  | ||||||
|  |  | ||||||
|   stream.on("end", function() { |  | ||||||
|     var html = markdown.toHTML(buffer, opts.dialect); |  | ||||||
|     console.log(html); |  | ||||||
|   }); |  | ||||||
|  |  | ||||||
| }()) |  | ||||||
							
								
								
									
										3
									
								
								node_modules/markdown/lib/index.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								node_modules/markdown/lib/index.js
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,3 +0,0 @@ | |||||||
| // super simple module for the most common nodejs use case. |  | ||||||
| exports.markdown = require("./markdown"); |  | ||||||
| exports.parse = exports.markdown.toHTML; |  | ||||||
							
								
								
									
										10
									
								
								node_modules/markdown/markdown-js.sublime-project
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								node_modules/markdown/markdown-js.sublime-project
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,10 +0,0 @@ | |||||||
| { |  | ||||||
| 	"folders": |  | ||||||
| 	[ |  | ||||||
| 		{ |  | ||||||
| 			"path": "/Users/ash/code/js/markdown-js", |  | ||||||
|       "folder_exclude_patterns": ["node_modules"], |  | ||||||
|       "file_exclude_patterns": ["*.sublime-*"] |  | ||||||
| 		} |  | ||||||
| 	] |  | ||||||
| } |  | ||||||
							
								
								
									
										1993
									
								
								node_modules/markdown/markdown-js.sublime-workspace
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1993
									
								
								node_modules/markdown/markdown-js.sublime-workspace
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1
									
								
								node_modules/markdown/node_modules/.bin/nopt
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								node_modules/markdown/node_modules/.bin/nopt
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1 +0,0 @@ | |||||||
| ../nopt/bin/nopt.js |  | ||||||
							
								
								
									
										1
									
								
								node_modules/markdown/node_modules/nopt/.npmignore
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								node_modules/markdown/node_modules/nopt/.npmignore
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1 +0,0 @@ | |||||||
| node_modules |  | ||||||
							
								
								
									
										23
									
								
								node_modules/markdown/node_modules/nopt/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										23
									
								
								node_modules/markdown/node_modules/nopt/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,23 +0,0 @@ | |||||||
| Copyright 2009, 2010, 2011 Isaac Z. Schlueter. |  | ||||||
| All rights reserved. |  | ||||||
|  |  | ||||||
| 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. |  | ||||||
							
								
								
									
										210
									
								
								node_modules/markdown/node_modules/nopt/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										210
									
								
								node_modules/markdown/node_modules/nopt/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,210 +0,0 @@ | |||||||
| If you want to write an option parser, and have it be good, there are |  | ||||||
| two ways to do it.  The Right Way, and the Wrong Way. |  | ||||||
|  |  | ||||||
| The Wrong Way is to sit down and write an option parser.  We've all done |  | ||||||
| that. |  | ||||||
|  |  | ||||||
| The Right Way is to write some complex configurable program with so many |  | ||||||
| options that you go half-insane just trying to manage them all, and put |  | ||||||
| it off with duct-tape solutions until you see exactly to the core of the |  | ||||||
| problem, and finally snap and write an awesome option parser. |  | ||||||
|  |  | ||||||
| If you want to write an option parser, don't write an option parser. |  | ||||||
| Write a package manager, or a source control system, or a service |  | ||||||
| restarter, or an operating system.  You probably won't end up with a |  | ||||||
| good one of those, but if you don't give up, and you are relentless and |  | ||||||
| diligent enough in your procrastination, you may just end up with a very |  | ||||||
| nice option parser. |  | ||||||
|  |  | ||||||
| ## USAGE |  | ||||||
|  |  | ||||||
|     // my-program.js |  | ||||||
|     var nopt = require("nopt") |  | ||||||
|       , Stream = require("stream").Stream |  | ||||||
|       , path = require("path") |  | ||||||
|       , knownOpts = { "foo" : [String, null] |  | ||||||
|                     , "bar" : [Stream, Number] |  | ||||||
|                     , "baz" : path |  | ||||||
|                     , "bloo" : [ "big", "medium", "small" ] |  | ||||||
|                     , "flag" : Boolean |  | ||||||
|                     , "pick" : Boolean |  | ||||||
|                     , "many" : [String, Array] |  | ||||||
|                     } |  | ||||||
|       , shortHands = { "foofoo" : ["--foo", "Mr. Foo"] |  | ||||||
|                      , "b7" : ["--bar", "7"] |  | ||||||
|                      , "m" : ["--bloo", "medium"] |  | ||||||
|                      , "p" : ["--pick"] |  | ||||||
|                      , "f" : ["--flag"] |  | ||||||
|                      } |  | ||||||
|                  // everything is optional. |  | ||||||
|                  // knownOpts and shorthands default to {} |  | ||||||
|                  // arg list defaults to process.argv |  | ||||||
|                  // slice defaults to 2 |  | ||||||
|       , parsed = nopt(knownOpts, shortHands, process.argv, 2) |  | ||||||
|     console.log(parsed) |  | ||||||
|  |  | ||||||
| This would give you support for any of the following: |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| $ node my-program.js --foo "blerp" --no-flag |  | ||||||
| { "foo" : "blerp", "flag" : false } |  | ||||||
|  |  | ||||||
| $ node my-program.js ---bar 7 --foo "Mr. Hand" --flag |  | ||||||
| { bar: 7, foo: "Mr. Hand", flag: true } |  | ||||||
|  |  | ||||||
| $ node my-program.js --foo "blerp" -f -----p |  | ||||||
| { foo: "blerp", flag: true, pick: true } |  | ||||||
|  |  | ||||||
| $ node my-program.js -fp --foofoo |  | ||||||
| { foo: "Mr. Foo", flag: true, pick: true } |  | ||||||
|  |  | ||||||
| $ node my-program.js --foofoo -- -fp  # -- stops the flag parsing. |  | ||||||
| { foo: "Mr. Foo", argv: { remain: ["-fp"] } } |  | ||||||
|  |  | ||||||
| $ node my-program.js --blatzk 1000 -fp # unknown opts are ok. |  | ||||||
| { blatzk: 1000, flag: true, pick: true } |  | ||||||
|  |  | ||||||
| $ node my-program.js --blatzk true -fp # but they need a value |  | ||||||
| { blatzk: true, flag: true, pick: true } |  | ||||||
|  |  | ||||||
| $ node my-program.js --no-blatzk -fp # unless they start with "no-" |  | ||||||
| { blatzk: false, flag: true, pick: true } |  | ||||||
|  |  | ||||||
| $ node my-program.js --baz b/a/z # known paths are resolved. |  | ||||||
| { baz: "/Users/isaacs/b/a/z" } |  | ||||||
|  |  | ||||||
| # if Array is one of the types, then it can take many |  | ||||||
| # values, and will always be an array.  The other types provided |  | ||||||
| # specify what types are allowed in the list. |  | ||||||
|  |  | ||||||
| $ node my-program.js --many 1 --many null --many foo |  | ||||||
| { many: ["1", "null", "foo"] } |  | ||||||
|  |  | ||||||
| $ node my-program.js --many foo |  | ||||||
| { many: ["foo"] } |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| Read the tests at the bottom of `lib/nopt.js` for more examples of |  | ||||||
| what this puppy can do. |  | ||||||
|  |  | ||||||
| ## Types |  | ||||||
|  |  | ||||||
| The following types are supported, and defined on `nopt.typeDefs` |  | ||||||
|  |  | ||||||
| * String: A normal string.  No parsing is done. |  | ||||||
| * path: A file system path.  Gets resolved against cwd if not absolute. |  | ||||||
| * url: A url.  If it doesn't parse, it isn't accepted. |  | ||||||
| * Number: Must be numeric. |  | ||||||
| * Date: Must parse as a date. If it does, and `Date` is one of the options, |  | ||||||
|   then it will return a Date object, not a string. |  | ||||||
| * Boolean: Must be either `true` or `false`.  If an option is a boolean, |  | ||||||
|   then it does not need a value, and its presence will imply `true` as |  | ||||||
|   the value.  To negate boolean flags, do `--no-whatever` or `--whatever |  | ||||||
|   false` |  | ||||||
| * NaN: Means that the option is strictly not allowed.  Any value will |  | ||||||
|   fail. |  | ||||||
| * Stream: An object matching the "Stream" class in node.  Valuable |  | ||||||
|   for use when validating programmatically.  (npm uses this to let you |  | ||||||
|   supply any WriteStream on the `outfd` and `logfd` config options.) |  | ||||||
| * Array: If `Array` is specified as one of the types, then the value |  | ||||||
|   will be parsed as a list of options.  This means that multiple values |  | ||||||
|   can be specified, and that the value will always be an array. |  | ||||||
|  |  | ||||||
| If a type is an array of values not on this list, then those are |  | ||||||
| considered valid values.  For instance, in the example above, the |  | ||||||
| `--bloo` option can only be one of `"big"`, `"medium"`, or `"small"`, |  | ||||||
| and any other value will be rejected. |  | ||||||
|  |  | ||||||
| When parsing unknown fields, `"true"`, `"false"`, and `"null"` will be |  | ||||||
| interpreted as their JavaScript equivalents, and numeric values will be |  | ||||||
| interpreted as a number. |  | ||||||
|  |  | ||||||
| You can also mix types and values, or multiple types, in a list.  For |  | ||||||
| instance `{ blah: [Number, null] }` would allow a value to be set to |  | ||||||
| either a Number or null.  When types are ordered, this implies a |  | ||||||
| preference, and the first type that can be used to properly interpret |  | ||||||
| the value will be used. |  | ||||||
|  |  | ||||||
| To define a new type, add it to `nopt.typeDefs`.  Each item in that |  | ||||||
| hash is an object with a `type` member and a `validate` method.  The |  | ||||||
| `type` member is an object that matches what goes in the type list.  The |  | ||||||
| `validate` method is a function that gets called with `validate(data, |  | ||||||
| key, val)`.  Validate methods should assign `data[key]` to the valid |  | ||||||
| value of `val` if it can be handled properly, or return boolean |  | ||||||
| `false` if it cannot. |  | ||||||
|  |  | ||||||
| You can also call `nopt.clean(data, types, typeDefs)` to clean up a |  | ||||||
| config object and remove its invalid properties. |  | ||||||
|  |  | ||||||
| ## Error Handling |  | ||||||
|  |  | ||||||
| By default, nopt outputs a warning to standard error when invalid |  | ||||||
| options are found.  You can change this behavior by assigning a method |  | ||||||
| to `nopt.invalidHandler`.  This method will be called with |  | ||||||
| the offending `nopt.invalidHandler(key, val, types)`. |  | ||||||
|  |  | ||||||
| If no `nopt.invalidHandler` is assigned, then it will console.error |  | ||||||
| its whining.  If it is assigned to boolean `false` then the warning is |  | ||||||
| suppressed. |  | ||||||
|  |  | ||||||
| ## Abbreviations |  | ||||||
|  |  | ||||||
| Yes, they are supported.  If you define options like this: |  | ||||||
|  |  | ||||||
| ```javascript |  | ||||||
| { "foolhardyelephants" : Boolean |  | ||||||
| , "pileofmonkeys" : Boolean } |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| Then this will work: |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| node program.js --foolhar --pil |  | ||||||
| node program.js --no-f --pileofmon |  | ||||||
| # etc. |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ## Shorthands |  | ||||||
|  |  | ||||||
| Shorthands are a hash of shorter option names to a snippet of args that |  | ||||||
| they expand to. |  | ||||||
|  |  | ||||||
| If multiple one-character shorthands are all combined, and the |  | ||||||
| combination does not unambiguously match any other option or shorthand, |  | ||||||
| then they will be broken up into their constituent parts.  For example: |  | ||||||
|  |  | ||||||
| ```json |  | ||||||
| { "s" : ["--loglevel", "silent"] |  | ||||||
| , "g" : "--global" |  | ||||||
| , "f" : "--force" |  | ||||||
| , "p" : "--parseable" |  | ||||||
| , "l" : "--long" |  | ||||||
| } |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| npm ls -sgflp |  | ||||||
| # just like doing this: |  | ||||||
| npm ls --loglevel silent --global --force --long --parseable |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ## The Rest of the args |  | ||||||
|  |  | ||||||
| The config object returned by nopt is given a special member called |  | ||||||
| `argv`, which is an object with the following fields: |  | ||||||
|  |  | ||||||
| * `remain`: The remaining args after all the parsing has occurred. |  | ||||||
| * `original`: The args as they originally appeared. |  | ||||||
| * `cooked`: The args after flags and shorthands are expanded. |  | ||||||
|  |  | ||||||
| ## Slicing |  | ||||||
|  |  | ||||||
| Node programs are called with more or less the exact argv as it appears |  | ||||||
| in C land, after the v8 and node-specific options have been plucked off. |  | ||||||
| As such, `argv[0]` is always `node` and `argv[1]` is always the |  | ||||||
| JavaScript program being run. |  | ||||||
|  |  | ||||||
| That's usually not very useful to you.  So they're sliced off by |  | ||||||
| default.  If you want them, then you can pass in `0` as the last |  | ||||||
| argument, or any other number that you'd like to slice off the start of |  | ||||||
| the list. |  | ||||||
							
								
								
									
										51
									
								
								node_modules/markdown/node_modules/nopt/bin/nopt.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										51
									
								
								node_modules/markdown/node_modules/nopt/bin/nopt.js
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,51 +0,0 @@ | |||||||
| #!/usr/bin/env node |  | ||||||
| var nopt = require("../lib/nopt") |  | ||||||
|   , types = { num: Number |  | ||||||
|             , bool: Boolean |  | ||||||
|             , help: Boolean |  | ||||||
|             , list: Array |  | ||||||
|             , "num-list": [Number, Array] |  | ||||||
|             , "str-list": [String, Array] |  | ||||||
|             , "bool-list": [Boolean, Array] |  | ||||||
|             , str: String |  | ||||||
|             , clear: Boolean |  | ||||||
|             , config: Boolean |  | ||||||
|             , length: Number |  | ||||||
|             } |  | ||||||
|   , shorthands = { s: [ "--str", "astring" ] |  | ||||||
|                  , b: [ "--bool" ] |  | ||||||
|                  , nb: [ "--no-bool" ] |  | ||||||
|                  , tft: [ "--bool-list", "--no-bool-list", "--bool-list", "true" ] |  | ||||||
|                  , "?": ["--help"] |  | ||||||
|                  , h: ["--help"] |  | ||||||
|                  , H: ["--help"] |  | ||||||
|                  , n: [ "--num", "125" ] |  | ||||||
|                  , c: ["--config"] |  | ||||||
|                  , l: ["--length"] |  | ||||||
|                  } |  | ||||||
|   , parsed = nopt( types |  | ||||||
|                  , shorthands |  | ||||||
|                  , process.argv |  | ||||||
|                  , 2 ) |  | ||||||
|  |  | ||||||
| console.log("parsed", parsed) |  | ||||||
|  |  | ||||||
| if (parsed.help) { |  | ||||||
|   console.log("") |  | ||||||
|   console.log("nopt cli tester") |  | ||||||
|   console.log("") |  | ||||||
|   console.log("types") |  | ||||||
|   console.log(Object.keys(types).map(function M (t) { |  | ||||||
|     var type = types[t] |  | ||||||
|     if (Array.isArray(type)) { |  | ||||||
|       return [t, type.map(function (type) { return type.name })] |  | ||||||
|     } |  | ||||||
|     return [t, type && type.name] |  | ||||||
|   }).reduce(function (s, i) { |  | ||||||
|     s[i[0]] = i[1] |  | ||||||
|     return s |  | ||||||
|   }, {})) |  | ||||||
|   console.log("") |  | ||||||
|   console.log("shorthands") |  | ||||||
|   console.log(shorthands) |  | ||||||
| } |  | ||||||
							
								
								
									
										30
									
								
								node_modules/markdown/node_modules/nopt/examples/my-program.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										30
									
								
								node_modules/markdown/node_modules/nopt/examples/my-program.js
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,30 +0,0 @@ | |||||||
| #!/usr/bin/env node |  | ||||||
|  |  | ||||||
| //process.env.DEBUG_NOPT = 1 |  | ||||||
|  |  | ||||||
| // my-program.js |  | ||||||
| var nopt = require("../lib/nopt") |  | ||||||
|   , Stream = require("stream").Stream |  | ||||||
|   , path = require("path") |  | ||||||
|   , knownOpts = { "foo" : [String, null] |  | ||||||
|                 , "bar" : [Stream, Number] |  | ||||||
|                 , "baz" : path |  | ||||||
|                 , "bloo" : [ "big", "medium", "small" ] |  | ||||||
|                 , "flag" : Boolean |  | ||||||
|                 , "pick" : Boolean |  | ||||||
|                 } |  | ||||||
|   , shortHands = { "foofoo" : ["--foo", "Mr. Foo"] |  | ||||||
|                  , "b7" : ["--bar", "7"] |  | ||||||
|                  , "m" : ["--bloo", "medium"] |  | ||||||
|                  , "p" : ["--pick"] |  | ||||||
|                  , "f" : ["--flag", "true"] |  | ||||||
|                  , "g" : ["--flag"] |  | ||||||
|                  , "s" : "--flag" |  | ||||||
|                  } |  | ||||||
|              // everything is optional. |  | ||||||
|              // knownOpts and shorthands default to {} |  | ||||||
|              // arg list defaults to process.argv |  | ||||||
|              // slice defaults to 2 |  | ||||||
|   , parsed = nopt(knownOpts, shortHands, process.argv, 2) |  | ||||||
|  |  | ||||||
| console.log("parsed =\n"+ require("util").inspect(parsed)) |  | ||||||
							
								
								
									
										612
									
								
								node_modules/markdown/node_modules/nopt/lib/nopt.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										612
									
								
								node_modules/markdown/node_modules/nopt/lib/nopt.js
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,612 +0,0 @@ | |||||||
| // info about each config option. |  | ||||||
|  |  | ||||||
| var debug = process.env.DEBUG_NOPT || process.env.NOPT_DEBUG |  | ||||||
|   ? function () { console.error.apply(console, arguments) } |  | ||||||
|   : function () {} |  | ||||||
|  |  | ||||||
| var url = require("url") |  | ||||||
|   , path = require("path") |  | ||||||
|   , Stream = require("stream").Stream |  | ||||||
|   , abbrev = require("abbrev") |  | ||||||
|  |  | ||||||
| module.exports = exports = nopt |  | ||||||
| exports.clean = clean |  | ||||||
|  |  | ||||||
| exports.typeDefs = |  | ||||||
|   { String  : { type: String,  validate: validateString  } |  | ||||||
|   , Boolean : { type: Boolean, validate: validateBoolean } |  | ||||||
|   , url     : { type: url,     validate: validateUrl     } |  | ||||||
|   , Number  : { type: Number,  validate: validateNumber  } |  | ||||||
|   , path    : { type: path,    validate: validatePath    } |  | ||||||
|   , Stream  : { type: Stream,  validate: validateStream  } |  | ||||||
|   , Date    : { type: Date,    validate: validateDate    } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
| function nopt (types, shorthands, args, slice) { |  | ||||||
|   args = args || process.argv |  | ||||||
|   types = types || {} |  | ||||||
|   shorthands = shorthands || {} |  | ||||||
|   if (typeof slice !== "number") slice = 2 |  | ||||||
|  |  | ||||||
|   debug(types, shorthands, args, slice) |  | ||||||
|  |  | ||||||
|   args = args.slice(slice) |  | ||||||
|   var data = {} |  | ||||||
|     , key |  | ||||||
|     , remain = [] |  | ||||||
|     , cooked = args |  | ||||||
|     , original = args.slice(0) |  | ||||||
|  |  | ||||||
|   parse(args, data, remain, types, shorthands) |  | ||||||
|   // now data is full |  | ||||||
|   clean(data, types, exports.typeDefs) |  | ||||||
|   data.argv = {remain:remain,cooked:cooked,original:original} |  | ||||||
|   Object.defineProperty(data.argv, 'toString', { value: function () { |  | ||||||
|     return this.original.map(JSON.stringify).join(" ") |  | ||||||
|   }, enumerable: false }) |  | ||||||
|   return data |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function clean (data, types, typeDefs) { |  | ||||||
|   typeDefs = typeDefs || exports.typeDefs |  | ||||||
|   var remove = {} |  | ||||||
|     , typeDefault = [false, true, null, String, Number, Array] |  | ||||||
|  |  | ||||||
|   Object.keys(data).forEach(function (k) { |  | ||||||
|     if (k === "argv") return |  | ||||||
|     var val = data[k] |  | ||||||
|       , isArray = Array.isArray(val) |  | ||||||
|       , type = types[k] |  | ||||||
|     if (!isArray) val = [val] |  | ||||||
|     if (!type) type = typeDefault |  | ||||||
|     if (type === Array) type = typeDefault.concat(Array) |  | ||||||
|     if (!Array.isArray(type)) type = [type] |  | ||||||
|  |  | ||||||
|     debug("val=%j", val) |  | ||||||
|     debug("types=", type) |  | ||||||
|     val = val.map(function (val) { |  | ||||||
|       // if it's an unknown value, then parse false/true/null/numbers/dates |  | ||||||
|       if (typeof val === "string") { |  | ||||||
|         debug("string %j", val) |  | ||||||
|         val = val.trim() |  | ||||||
|         if ((val === "null" && ~type.indexOf(null)) |  | ||||||
|             || (val === "true" && |  | ||||||
|                (~type.indexOf(true) || ~type.indexOf(Boolean))) |  | ||||||
|             || (val === "false" && |  | ||||||
|                (~type.indexOf(false) || ~type.indexOf(Boolean)))) { |  | ||||||
|           val = JSON.parse(val) |  | ||||||
|           debug("jsonable %j", val) |  | ||||||
|         } else if (~type.indexOf(Number) && !isNaN(val)) { |  | ||||||
|           debug("convert to number", val) |  | ||||||
|           val = +val |  | ||||||
|         } else if (~type.indexOf(Date) && !isNaN(Date.parse(val))) { |  | ||||||
|           debug("convert to date", val) |  | ||||||
|           val = new Date(val) |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       if (!types.hasOwnProperty(k)) { |  | ||||||
|         return val |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       // allow `--no-blah` to set 'blah' to null if null is allowed |  | ||||||
|       if (val === false && ~type.indexOf(null) && |  | ||||||
|           !(~type.indexOf(false) || ~type.indexOf(Boolean))) { |  | ||||||
|         val = null |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       var d = {} |  | ||||||
|       d[k] = val |  | ||||||
|       debug("prevalidated val", d, val, types[k]) |  | ||||||
|       if (!validate(d, k, val, types[k], typeDefs)) { |  | ||||||
|         if (exports.invalidHandler) { |  | ||||||
|           exports.invalidHandler(k, val, types[k], data) |  | ||||||
|         } else if (exports.invalidHandler !== false) { |  | ||||||
|           debug("invalid: "+k+"="+val, types[k]) |  | ||||||
|         } |  | ||||||
|         return remove |  | ||||||
|       } |  | ||||||
|       debug("validated val", d, val, types[k]) |  | ||||||
|       return d[k] |  | ||||||
|     }).filter(function (val) { return val !== remove }) |  | ||||||
|  |  | ||||||
|     if (!val.length) delete data[k] |  | ||||||
|     else if (isArray) { |  | ||||||
|       debug(isArray, data[k], val) |  | ||||||
|       data[k] = val |  | ||||||
|     } else data[k] = val[0] |  | ||||||
|  |  | ||||||
|     debug("k=%s val=%j", k, val, data[k]) |  | ||||||
|   }) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function validateString (data, k, val) { |  | ||||||
|   data[k] = String(val) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function validatePath (data, k, val) { |  | ||||||
|   data[k] = path.resolve(String(val)) |  | ||||||
|   return true |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function validateNumber (data, k, val) { |  | ||||||
|   debug("validate Number %j %j %j", k, val, isNaN(val)) |  | ||||||
|   if (isNaN(val)) return false |  | ||||||
|   data[k] = +val |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function validateDate (data, k, val) { |  | ||||||
|   debug("validate Date %j %j %j", k, val, Date.parse(val)) |  | ||||||
|   var s = Date.parse(val) |  | ||||||
|   if (isNaN(s)) return false |  | ||||||
|   data[k] = new Date(val) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function validateBoolean (data, k, val) { |  | ||||||
|   if (val instanceof Boolean) val = val.valueOf() |  | ||||||
|   else if (typeof val === "string") { |  | ||||||
|     if (!isNaN(val)) val = !!(+val) |  | ||||||
|     else if (val === "null" || val === "false") val = false |  | ||||||
|     else val = true |  | ||||||
|   } else val = !!val |  | ||||||
|   data[k] = val |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function validateUrl (data, k, val) { |  | ||||||
|   val = url.parse(String(val)) |  | ||||||
|   if (!val.host) return false |  | ||||||
|   data[k] = val.href |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function validateStream (data, k, val) { |  | ||||||
|   if (!(val instanceof Stream)) return false |  | ||||||
|   data[k] = val |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function validate (data, k, val, type, typeDefs) { |  | ||||||
|   // arrays are lists of types. |  | ||||||
|   if (Array.isArray(type)) { |  | ||||||
|     for (var i = 0, l = type.length; i < l; i ++) { |  | ||||||
|       if (type[i] === Array) continue |  | ||||||
|       if (validate(data, k, val, type[i], typeDefs)) return true |  | ||||||
|     } |  | ||||||
|     delete data[k] |  | ||||||
|     return false |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   // an array of anything? |  | ||||||
|   if (type === Array) return true |  | ||||||
|  |  | ||||||
|   // NaN is poisonous.  Means that something is not allowed. |  | ||||||
|   if (type !== type) { |  | ||||||
|     debug("Poison NaN", k, val, type) |  | ||||||
|     delete data[k] |  | ||||||
|     return false |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   // explicit list of values |  | ||||||
|   if (val === type) { |  | ||||||
|     debug("Explicitly allowed %j", val) |  | ||||||
|     // if (isArray) (data[k] = data[k] || []).push(val) |  | ||||||
|     // else data[k] = val |  | ||||||
|     data[k] = val |  | ||||||
|     return true |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   // now go through the list of typeDefs, validate against each one. |  | ||||||
|   var ok = false |  | ||||||
|     , types = Object.keys(typeDefs) |  | ||||||
|   for (var i = 0, l = types.length; i < l; i ++) { |  | ||||||
|     debug("test type %j %j %j", k, val, types[i]) |  | ||||||
|     var t = typeDefs[types[i]] |  | ||||||
|     if (t && type === t.type) { |  | ||||||
|       var d = {} |  | ||||||
|       ok = false !== t.validate(d, k, val) |  | ||||||
|       val = d[k] |  | ||||||
|       if (ok) { |  | ||||||
|         // if (isArray) (data[k] = data[k] || []).push(val) |  | ||||||
|         // else data[k] = val |  | ||||||
|         data[k] = val |  | ||||||
|         break |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   debug("OK? %j (%j %j %j)", ok, k, val, types[i]) |  | ||||||
|  |  | ||||||
|   if (!ok) delete data[k] |  | ||||||
|   return ok |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function parse (args, data, remain, types, shorthands) { |  | ||||||
|   debug("parse", args, data, remain) |  | ||||||
|  |  | ||||||
|   var key = null |  | ||||||
|     , abbrevs = abbrev(Object.keys(types)) |  | ||||||
|     , shortAbbr = abbrev(Object.keys(shorthands)) |  | ||||||
|  |  | ||||||
|   for (var i = 0; i < args.length; i ++) { |  | ||||||
|     var arg = args[i] |  | ||||||
|     debug("arg", arg) |  | ||||||
|  |  | ||||||
|     if (arg.match(/^-{2,}$/)) { |  | ||||||
|       // done with keys. |  | ||||||
|       // the rest are args. |  | ||||||
|       remain.push.apply(remain, args.slice(i + 1)) |  | ||||||
|       args[i] = "--" |  | ||||||
|       break |  | ||||||
|     } |  | ||||||
|     var hadEq = false |  | ||||||
|     if (arg.charAt(0) === "-" && arg.length > 1) { |  | ||||||
|       if (arg.indexOf("=") !== -1) { |  | ||||||
|         hadEq = true |  | ||||||
|         var v = arg.split("=") |  | ||||||
|         arg = v.shift() |  | ||||||
|         v = v.join("=") |  | ||||||
|         args.splice.apply(args, [i, 1].concat([arg, v])) |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       // see if it's a shorthand |  | ||||||
|       // if so, splice and back up to re-parse it. |  | ||||||
|       var shRes = resolveShort(arg, shorthands, shortAbbr, abbrevs) |  | ||||||
|       debug("arg=%j shRes=%j", arg, shRes) |  | ||||||
|       if (shRes) { |  | ||||||
|         debug(arg, shRes) |  | ||||||
|         args.splice.apply(args, [i, 1].concat(shRes)) |  | ||||||
|         if (arg !== shRes[0]) { |  | ||||||
|           i -- |  | ||||||
|           continue |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|       arg = arg.replace(/^-+/, "") |  | ||||||
|       var no = null |  | ||||||
|       while (arg.toLowerCase().indexOf("no-") === 0) { |  | ||||||
|         no = !no |  | ||||||
|         arg = arg.substr(3) |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       if (abbrevs[arg]) arg = abbrevs[arg] |  | ||||||
|  |  | ||||||
|       var isArray = types[arg] === Array || |  | ||||||
|         Array.isArray(types[arg]) && types[arg].indexOf(Array) !== -1 |  | ||||||
|  |  | ||||||
|       // allow unknown things to be arrays if specified multiple times. |  | ||||||
|       if (!types.hasOwnProperty(arg) && data.hasOwnProperty(arg)) { |  | ||||||
|         if (!Array.isArray(data[arg])) |  | ||||||
|           data[arg] = [data[arg]] |  | ||||||
|         isArray = true |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       var val |  | ||||||
|         , la = args[i + 1] |  | ||||||
|  |  | ||||||
|       var isBool = typeof no === 'boolean' || |  | ||||||
|         types[arg] === Boolean || |  | ||||||
|         Array.isArray(types[arg]) && types[arg].indexOf(Boolean) !== -1 || |  | ||||||
|         (typeof types[arg] === 'undefined' && !hadEq) || |  | ||||||
|         (la === "false" && |  | ||||||
|          (types[arg] === null || |  | ||||||
|           Array.isArray(types[arg]) && ~types[arg].indexOf(null))) |  | ||||||
|  |  | ||||||
|       if (isBool) { |  | ||||||
|         // just set and move along |  | ||||||
|         val = !no |  | ||||||
|         // however, also support --bool true or --bool false |  | ||||||
|         if (la === "true" || la === "false") { |  | ||||||
|           val = JSON.parse(la) |  | ||||||
|           la = null |  | ||||||
|           if (no) val = !val |  | ||||||
|           i ++ |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         // also support "foo":[Boolean, "bar"] and "--foo bar" |  | ||||||
|         if (Array.isArray(types[arg]) && la) { |  | ||||||
|           if (~types[arg].indexOf(la)) { |  | ||||||
|             // an explicit type |  | ||||||
|             val = la |  | ||||||
|             i ++ |  | ||||||
|           } else if ( la === "null" && ~types[arg].indexOf(null) ) { |  | ||||||
|             // null allowed |  | ||||||
|             val = null |  | ||||||
|             i ++ |  | ||||||
|           } else if ( !la.match(/^-{2,}[^-]/) && |  | ||||||
|                       !isNaN(la) && |  | ||||||
|                       ~types[arg].indexOf(Number) ) { |  | ||||||
|             // number |  | ||||||
|             val = +la |  | ||||||
|             i ++ |  | ||||||
|           } else if ( !la.match(/^-[^-]/) && ~types[arg].indexOf(String) ) { |  | ||||||
|             // string |  | ||||||
|             val = la |  | ||||||
|             i ++ |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         if (isArray) (data[arg] = data[arg] || []).push(val) |  | ||||||
|         else data[arg] = val |  | ||||||
|  |  | ||||||
|         continue |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       if (la && la.match(/^-{2,}$/)) { |  | ||||||
|         la = undefined |  | ||||||
|         i -- |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       val = la === undefined ? true : la |  | ||||||
|       if (isArray) (data[arg] = data[arg] || []).push(val) |  | ||||||
|       else data[arg] = val |  | ||||||
|  |  | ||||||
|       i ++ |  | ||||||
|       continue |  | ||||||
|     } |  | ||||||
|     remain.push(arg) |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function resolveShort (arg, shorthands, shortAbbr, abbrevs) { |  | ||||||
|   // handle single-char shorthands glommed together, like |  | ||||||
|   // npm ls -glp, but only if there is one dash, and only if |  | ||||||
|   // all of the chars are single-char shorthands, and it's |  | ||||||
|   // not a match to some other abbrev. |  | ||||||
|   arg = arg.replace(/^-+/, '') |  | ||||||
|  |  | ||||||
|   // if it's an exact known option, then don't go any further |  | ||||||
|   if (abbrevs[arg] === arg) |  | ||||||
|     return null |  | ||||||
|  |  | ||||||
|   // if it's an exact known shortopt, same deal |  | ||||||
|   if (shorthands[arg]) { |  | ||||||
|     // make it an array, if it's a list of words |  | ||||||
|     if (shorthands[arg] && !Array.isArray(shorthands[arg])) |  | ||||||
|       shorthands[arg] = shorthands[arg].split(/\s+/) |  | ||||||
|  |  | ||||||
|     return shorthands[arg] |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   // first check to see if this arg is a set of single-char shorthands |  | ||||||
|   var singles = shorthands.___singles |  | ||||||
|   if (!singles) { |  | ||||||
|     singles = Object.keys(shorthands).filter(function (s) { |  | ||||||
|       return s.length === 1 |  | ||||||
|     }).reduce(function (l,r) { |  | ||||||
|       l[r] = true |  | ||||||
|       return l |  | ||||||
|     }, {}) |  | ||||||
|     shorthands.___singles = singles |  | ||||||
|     debug('shorthand singles', singles) |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   var chrs = arg.split("").filter(function (c) { |  | ||||||
|     return singles[c] |  | ||||||
|   }) |  | ||||||
|  |  | ||||||
|   if (chrs.join("") === arg) return chrs.map(function (c) { |  | ||||||
|     return shorthands[c] |  | ||||||
|   }).reduce(function (l, r) { |  | ||||||
|     return l.concat(r) |  | ||||||
|   }, []) |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   // if it's an arg abbrev, and not a literal shorthand, then prefer the arg |  | ||||||
|   if (abbrevs[arg] && !shorthands[arg]) |  | ||||||
|     return null |  | ||||||
|  |  | ||||||
|   // if it's an abbr for a shorthand, then use that |  | ||||||
|   if (shortAbbr[arg]) |  | ||||||
|     arg = shortAbbr[arg] |  | ||||||
|  |  | ||||||
|   // make it an array, if it's a list of words |  | ||||||
|   if (shorthands[arg] && !Array.isArray(shorthands[arg])) |  | ||||||
|     shorthands[arg] = shorthands[arg].split(/\s+/) |  | ||||||
|  |  | ||||||
|   return shorthands[arg] |  | ||||||
| } |  | ||||||
|  |  | ||||||
| if (module === require.main) { |  | ||||||
| var assert = require("assert") |  | ||||||
|   , util = require("util") |  | ||||||
|  |  | ||||||
|   , shorthands = |  | ||||||
|     { s : ["--loglevel", "silent"] |  | ||||||
|     , d : ["--loglevel", "info"] |  | ||||||
|     , dd : ["--loglevel", "verbose"] |  | ||||||
|     , ddd : ["--loglevel", "silly"] |  | ||||||
|     , noreg : ["--no-registry"] |  | ||||||
|     , reg : ["--registry"] |  | ||||||
|     , "no-reg" : ["--no-registry"] |  | ||||||
|     , silent : ["--loglevel", "silent"] |  | ||||||
|     , verbose : ["--loglevel", "verbose"] |  | ||||||
|     , h : ["--usage"] |  | ||||||
|     , H : ["--usage"] |  | ||||||
|     , "?" : ["--usage"] |  | ||||||
|     , help : ["--usage"] |  | ||||||
|     , v : ["--version"] |  | ||||||
|     , f : ["--force"] |  | ||||||
|     , desc : ["--description"] |  | ||||||
|     , "no-desc" : ["--no-description"] |  | ||||||
|     , "local" : ["--no-global"] |  | ||||||
|     , l : ["--long"] |  | ||||||
|     , p : ["--parseable"] |  | ||||||
|     , porcelain : ["--parseable"] |  | ||||||
|     , g : ["--global"] |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|   , types = |  | ||||||
|     { aoa: Array |  | ||||||
|     , nullstream: [null, Stream] |  | ||||||
|     , date: Date |  | ||||||
|     , str: String |  | ||||||
|     , browser : String |  | ||||||
|     , cache : path |  | ||||||
|     , color : ["always", Boolean] |  | ||||||
|     , depth : Number |  | ||||||
|     , description : Boolean |  | ||||||
|     , dev : Boolean |  | ||||||
|     , editor : path |  | ||||||
|     , force : Boolean |  | ||||||
|     , global : Boolean |  | ||||||
|     , globalconfig : path |  | ||||||
|     , group : [String, Number] |  | ||||||
|     , gzipbin : String |  | ||||||
|     , logfd : [Number, Stream] |  | ||||||
|     , loglevel : ["silent","win","error","warn","info","verbose","silly"] |  | ||||||
|     , long : Boolean |  | ||||||
|     , "node-version" : [false, String] |  | ||||||
|     , npaturl : url |  | ||||||
|     , npat : Boolean |  | ||||||
|     , "onload-script" : [false, String] |  | ||||||
|     , outfd : [Number, Stream] |  | ||||||
|     , parseable : Boolean |  | ||||||
|     , pre: Boolean |  | ||||||
|     , prefix: path |  | ||||||
|     , proxy : url |  | ||||||
|     , "rebuild-bundle" : Boolean |  | ||||||
|     , registry : url |  | ||||||
|     , searchopts : String |  | ||||||
|     , searchexclude: [null, String] |  | ||||||
|     , shell : path |  | ||||||
|     , t: [Array, String] |  | ||||||
|     , tag : String |  | ||||||
|     , tar : String |  | ||||||
|     , tmp : path |  | ||||||
|     , "unsafe-perm" : Boolean |  | ||||||
|     , usage : Boolean |  | ||||||
|     , user : String |  | ||||||
|     , username : String |  | ||||||
|     , userconfig : path |  | ||||||
|     , version : Boolean |  | ||||||
|     , viewer: path |  | ||||||
|     , _exit : Boolean |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| ; [["-v", {version:true}, []] |  | ||||||
|   ,["---v", {version:true}, []] |  | ||||||
|   ,["ls -s --no-reg connect -d", |  | ||||||
|     {loglevel:"info",registry:null},["ls","connect"]] |  | ||||||
|   ,["ls ---s foo",{loglevel:"silent"},["ls","foo"]] |  | ||||||
|   ,["ls --registry blargle", {}, ["ls"]] |  | ||||||
|   ,["--no-registry", {registry:null}, []] |  | ||||||
|   ,["--no-color true", {color:false}, []] |  | ||||||
|   ,["--no-color false", {color:true}, []] |  | ||||||
|   ,["--no-color", {color:false}, []] |  | ||||||
|   ,["--color false", {color:false}, []] |  | ||||||
|   ,["--color --logfd 7", {logfd:7,color:true}, []] |  | ||||||
|   ,["--color=true", {color:true}, []] |  | ||||||
|   ,["--logfd=10", {logfd:10}, []] |  | ||||||
|   ,["--tmp=/tmp -tar=gtar",{tmp:"/tmp",tar:"gtar"},[]] |  | ||||||
|   ,["--tmp=tmp -tar=gtar", |  | ||||||
|     {tmp:path.resolve(process.cwd(), "tmp"),tar:"gtar"},[]] |  | ||||||
|   ,["--logfd x", {}, []] |  | ||||||
|   ,["a -true -- -no-false", {true:true},["a","-no-false"]] |  | ||||||
|   ,["a -no-false", {false:false},["a"]] |  | ||||||
|   ,["a -no-no-true", {true:true}, ["a"]] |  | ||||||
|   ,["a -no-no-no-false", {false:false}, ["a"]] |  | ||||||
|   ,["---NO-no-No-no-no-no-nO-no-no"+ |  | ||||||
|     "-No-no-no-no-no-no-no-no-no"+ |  | ||||||
|     "-no-no-no-no-NO-NO-no-no-no-no-no-no"+ |  | ||||||
|     "-no-body-can-do-the-boogaloo-like-I-do" |  | ||||||
|    ,{"body-can-do-the-boogaloo-like-I-do":false}, []] |  | ||||||
|   ,["we are -no-strangers-to-love "+ |  | ||||||
|     "--you-know=the-rules --and=so-do-i "+ |  | ||||||
|     "---im-thinking-of=a-full-commitment "+ |  | ||||||
|     "--no-you-would-get-this-from-any-other-guy "+ |  | ||||||
|     "--no-gonna-give-you-up "+ |  | ||||||
|     "-no-gonna-let-you-down=true "+ |  | ||||||
|     "--no-no-gonna-run-around false "+ |  | ||||||
|     "--desert-you=false "+ |  | ||||||
|     "--make-you-cry false "+ |  | ||||||
|     "--no-tell-a-lie "+ |  | ||||||
|     "--no-no-and-hurt-you false" |  | ||||||
|    ,{"strangers-to-love":false |  | ||||||
|     ,"you-know":"the-rules" |  | ||||||
|     ,"and":"so-do-i" |  | ||||||
|     ,"you-would-get-this-from-any-other-guy":false |  | ||||||
|     ,"gonna-give-you-up":false |  | ||||||
|     ,"gonna-let-you-down":false |  | ||||||
|     ,"gonna-run-around":false |  | ||||||
|     ,"desert-you":false |  | ||||||
|     ,"make-you-cry":false |  | ||||||
|     ,"tell-a-lie":false |  | ||||||
|     ,"and-hurt-you":false |  | ||||||
|     },["we", "are"]] |  | ||||||
|   ,["-t one -t two -t three" |  | ||||||
|    ,{t: ["one", "two", "three"]} |  | ||||||
|    ,[]] |  | ||||||
|   ,["-t one -t null -t three four five null" |  | ||||||
|    ,{t: ["one", "null", "three"]} |  | ||||||
|    ,["four", "five", "null"]] |  | ||||||
|   ,["-t foo" |  | ||||||
|    ,{t:["foo"]} |  | ||||||
|    ,[]] |  | ||||||
|   ,["--no-t" |  | ||||||
|    ,{t:["false"]} |  | ||||||
|    ,[]] |  | ||||||
|   ,["-no-no-t" |  | ||||||
|    ,{t:["true"]} |  | ||||||
|    ,[]] |  | ||||||
|   ,["-aoa one -aoa null -aoa 100" |  | ||||||
|    ,{aoa:["one", null, 100]} |  | ||||||
|    ,[]] |  | ||||||
|   ,["-str 100" |  | ||||||
|    ,{str:"100"} |  | ||||||
|    ,[]] |  | ||||||
|   ,["--color always" |  | ||||||
|    ,{color:"always"} |  | ||||||
|    ,[]] |  | ||||||
|   ,["--no-nullstream" |  | ||||||
|    ,{nullstream:null} |  | ||||||
|    ,[]] |  | ||||||
|   ,["--nullstream false" |  | ||||||
|    ,{nullstream:null} |  | ||||||
|    ,[]] |  | ||||||
|   ,["--notadate=2011-01-25" |  | ||||||
|    ,{notadate: "2011-01-25"} |  | ||||||
|    ,[]] |  | ||||||
|   ,["--date 2011-01-25" |  | ||||||
|    ,{date: new Date("2011-01-25")} |  | ||||||
|    ,[]] |  | ||||||
|   ,["-cl 1" |  | ||||||
|    ,{config: true, length: 1} |  | ||||||
|    ,[] |  | ||||||
|    ,{config: Boolean, length: Number, clear: Boolean} |  | ||||||
|    ,{c: "--config", l: "--length"}] |  | ||||||
|   ,["--acount bla" |  | ||||||
|    ,{"acount":true} |  | ||||||
|    ,["bla"] |  | ||||||
|    ,{account: Boolean, credentials: Boolean, options: String} |  | ||||||
|    ,{a:"--account", c:"--credentials",o:"--options"}] |  | ||||||
|   ,["--clear" |  | ||||||
|    ,{clear:true} |  | ||||||
|    ,[] |  | ||||||
|    ,{clear:Boolean,con:Boolean,len:Boolean,exp:Boolean,add:Boolean,rep:Boolean} |  | ||||||
|    ,{c:"--con",l:"--len",e:"--exp",a:"--add",r:"--rep"}] |  | ||||||
|   ,["--file -" |  | ||||||
|    ,{"file":"-"} |  | ||||||
|    ,[] |  | ||||||
|    ,{file:String} |  | ||||||
|    ,{}] |  | ||||||
|   ,["--file -" |  | ||||||
|    ,{"file":true} |  | ||||||
|    ,["-"] |  | ||||||
|    ,{file:Boolean} |  | ||||||
|    ,{}] |  | ||||||
|   ].forEach(function (test) { |  | ||||||
|     var argv = test[0].split(/\s+/) |  | ||||||
|       , opts = test[1] |  | ||||||
|       , rem = test[2] |  | ||||||
|       , actual = nopt(test[3] || types, test[4] || shorthands, argv, 0) |  | ||||||
|       , parsed = actual.argv |  | ||||||
|     delete actual.argv |  | ||||||
|     console.log(util.inspect(actual, false, 2, true), parsed.remain) |  | ||||||
|     for (var i in opts) { |  | ||||||
|       var e = JSON.stringify(opts[i]) |  | ||||||
|         , a = JSON.stringify(actual[i] === undefined ? null : actual[i]) |  | ||||||
|       if (e && typeof e === "object") { |  | ||||||
|         assert.deepEqual(e, a) |  | ||||||
|       } else { |  | ||||||
|         assert.equal(e, a) |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     assert.deepEqual(rem, parsed.remain) |  | ||||||
|   }) |  | ||||||
| } |  | ||||||
							
								
								
									
										23
									
								
								node_modules/markdown/node_modules/nopt/node_modules/abbrev/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										23
									
								
								node_modules/markdown/node_modules/nopt/node_modules/abbrev/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,23 +0,0 @@ | |||||||
| Copyright 2009, 2010, 2011 Isaac Z. Schlueter. |  | ||||||
| All rights reserved. |  | ||||||
|  |  | ||||||
| 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. |  | ||||||
							
								
								
									
										23
									
								
								node_modules/markdown/node_modules/nopt/node_modules/abbrev/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										23
									
								
								node_modules/markdown/node_modules/nopt/node_modules/abbrev/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,23 +0,0 @@ | |||||||
| # abbrev-js |  | ||||||
|  |  | ||||||
| Just like [ruby's Abbrev](http://apidock.com/ruby/Abbrev). |  | ||||||
|  |  | ||||||
| Usage: |  | ||||||
|  |  | ||||||
|     var abbrev = require("abbrev"); |  | ||||||
|     abbrev("foo", "fool", "folding", "flop"); |  | ||||||
|      |  | ||||||
|     // returns: |  | ||||||
|     { fl: 'flop' |  | ||||||
|     , flo: 'flop' |  | ||||||
|     , flop: 'flop' |  | ||||||
|     , fol: 'folding' |  | ||||||
|     , fold: 'folding' |  | ||||||
|     , foldi: 'folding' |  | ||||||
|     , foldin: 'folding' |  | ||||||
|     , folding: 'folding' |  | ||||||
|     , foo: 'foo' |  | ||||||
|     , fool: 'fool' |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| This is handy for command-line scripts, or other cases where you want to be able to accept shorthands. |  | ||||||
							
								
								
									
										111
									
								
								node_modules/markdown/node_modules/nopt/node_modules/abbrev/lib/abbrev.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										111
									
								
								node_modules/markdown/node_modules/nopt/node_modules/abbrev/lib/abbrev.js
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,111 +0,0 @@ | |||||||
|  |  | ||||||
| module.exports = exports = abbrev.abbrev = abbrev |  | ||||||
|  |  | ||||||
| abbrev.monkeyPatch = monkeyPatch |  | ||||||
|  |  | ||||||
| function monkeyPatch () { |  | ||||||
|   Object.defineProperty(Array.prototype, 'abbrev', { |  | ||||||
|     value: function () { return abbrev(this) }, |  | ||||||
|     enumerable: false, configurable: true, writable: true |  | ||||||
|   }) |  | ||||||
|  |  | ||||||
|   Object.defineProperty(Object.prototype, 'abbrev', { |  | ||||||
|     value: function () { return abbrev(Object.keys(this)) }, |  | ||||||
|     enumerable: false, configurable: true, writable: true |  | ||||||
|   }) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function abbrev (list) { |  | ||||||
|   if (arguments.length !== 1 || !Array.isArray(list)) { |  | ||||||
|     list = Array.prototype.slice.call(arguments, 0) |  | ||||||
|   } |  | ||||||
|   for (var i = 0, l = list.length, args = [] ; i < l ; i ++) { |  | ||||||
|     args[i] = typeof list[i] === "string" ? list[i] : String(list[i]) |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   // sort them lexicographically, so that they're next to their nearest kin |  | ||||||
|   args = args.sort(lexSort) |  | ||||||
|  |  | ||||||
|   // walk through each, seeing how much it has in common with the next and previous |  | ||||||
|   var abbrevs = {} |  | ||||||
|     , prev = "" |  | ||||||
|   for (var i = 0, l = args.length ; i < l ; i ++) { |  | ||||||
|     var current = args[i] |  | ||||||
|       , next = args[i + 1] || "" |  | ||||||
|       , nextMatches = true |  | ||||||
|       , prevMatches = true |  | ||||||
|     if (current === next) continue |  | ||||||
|     for (var j = 0, cl = current.length ; j < cl ; j ++) { |  | ||||||
|       var curChar = current.charAt(j) |  | ||||||
|       nextMatches = nextMatches && curChar === next.charAt(j) |  | ||||||
|       prevMatches = prevMatches && curChar === prev.charAt(j) |  | ||||||
|       if (!nextMatches && !prevMatches) { |  | ||||||
|         j ++ |  | ||||||
|         break |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     prev = current |  | ||||||
|     if (j === cl) { |  | ||||||
|       abbrevs[current] = current |  | ||||||
|       continue |  | ||||||
|     } |  | ||||||
|     for (var a = current.substr(0, j) ; j <= cl ; j ++) { |  | ||||||
|       abbrevs[a] = current |  | ||||||
|       a += current.charAt(j) |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   return abbrevs |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function lexSort (a, b) { |  | ||||||
|   return a === b ? 0 : a > b ? 1 : -1 |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| // tests |  | ||||||
| if (module === require.main) { |  | ||||||
|  |  | ||||||
| var assert = require("assert") |  | ||||||
| var util = require("util") |  | ||||||
|  |  | ||||||
| console.log("running tests") |  | ||||||
| function test (list, expect) { |  | ||||||
|   var actual = abbrev(list) |  | ||||||
|   assert.deepEqual(actual, expect, |  | ||||||
|     "abbrev("+util.inspect(list)+") === " + util.inspect(expect) + "\n"+ |  | ||||||
|     "actual: "+util.inspect(actual)) |  | ||||||
|   actual = abbrev.apply(exports, list) |  | ||||||
|   assert.deepEqual(abbrev.apply(exports, list), expect, |  | ||||||
|     "abbrev("+list.map(JSON.stringify).join(",")+") === " + util.inspect(expect) + "\n"+ |  | ||||||
|     "actual: "+util.inspect(actual)) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| test([ "ruby", "ruby", "rules", "rules", "rules" ], |  | ||||||
| { rub: 'ruby' |  | ||||||
| , ruby: 'ruby' |  | ||||||
| , rul: 'rules' |  | ||||||
| , rule: 'rules' |  | ||||||
| , rules: 'rules' |  | ||||||
| }) |  | ||||||
| test(["fool", "foom", "pool", "pope"], |  | ||||||
| { fool: 'fool' |  | ||||||
| , foom: 'foom' |  | ||||||
| , poo: 'pool' |  | ||||||
| , pool: 'pool' |  | ||||||
| , pop: 'pope' |  | ||||||
| , pope: 'pope' |  | ||||||
| }) |  | ||||||
| test(["a", "ab", "abc", "abcd", "abcde", "acde"], |  | ||||||
| { a: 'a' |  | ||||||
| , ab: 'ab' |  | ||||||
| , abc: 'abc' |  | ||||||
| , abcd: 'abcd' |  | ||||||
| , abcde: 'abcde' |  | ||||||
| , ac: 'acde' |  | ||||||
| , acd: 'acde' |  | ||||||
| , acde: 'acde' |  | ||||||
| }) |  | ||||||
|  |  | ||||||
| console.log("pass") |  | ||||||
|  |  | ||||||
| } |  | ||||||
							
								
								
									
										28
									
								
								node_modules/markdown/node_modules/nopt/node_modules/abbrev/package.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										28
									
								
								node_modules/markdown/node_modules/nopt/node_modules/abbrev/package.json
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,28 +0,0 @@ | |||||||
| { |  | ||||||
|   "name": "abbrev", |  | ||||||
|   "version": "1.0.4", |  | ||||||
|   "description": "Like ruby's abbrev module, but in js", |  | ||||||
|   "author": { |  | ||||||
|     "name": "Isaac Z. Schlueter", |  | ||||||
|     "email": "i@izs.me" |  | ||||||
|   }, |  | ||||||
|   "main": "./lib/abbrev.js", |  | ||||||
|   "scripts": { |  | ||||||
|     "test": "node lib/abbrev.js" |  | ||||||
|   }, |  | ||||||
|   "repository": { |  | ||||||
|     "type": "git", |  | ||||||
|     "url": "http://github.com/isaacs/abbrev-js" |  | ||||||
|   }, |  | ||||||
|   "license": { |  | ||||||
|     "type": "MIT", |  | ||||||
|     "url": "https://github.com/isaacs/abbrev-js/raw/master/LICENSE" |  | ||||||
|   }, |  | ||||||
|   "readme": "# abbrev-js\n\nJust like [ruby's Abbrev](http://apidock.com/ruby/Abbrev).\n\nUsage:\n\n    var abbrev = require(\"abbrev\");\n    abbrev(\"foo\", \"fool\", \"folding\", \"flop\");\n    \n    // returns:\n    { fl: 'flop'\n    , flo: 'flop'\n    , flop: 'flop'\n    , fol: 'folding'\n    , fold: 'folding'\n    , foldi: 'folding'\n    , foldin: 'folding'\n    , folding: 'folding'\n    , foo: 'foo'\n    , fool: 'fool'\n    }\n\nThis is handy for command-line scripts, or other cases where you want to be able to accept shorthands.\n", |  | ||||||
|   "readmeFilename": "README.md", |  | ||||||
|   "bugs": { |  | ||||||
|     "url": "https://github.com/isaacs/abbrev-js/issues" |  | ||||||
|   }, |  | ||||||
|   "_id": "abbrev@1.0.4", |  | ||||||
|   "_from": "abbrev@1" |  | ||||||
| } |  | ||||||
							
								
								
									
										35
									
								
								node_modules/markdown/node_modules/nopt/package.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										35
									
								
								node_modules/markdown/node_modules/nopt/package.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										64
									
								
								node_modules/markdown/package.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										64
									
								
								node_modules/markdown/package.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										5
									
								
								node_modules/markdown/seed.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								node_modules/markdown/seed.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +0,0 @@ | |||||||
| --- |  | ||||||
|   name: markdown-js |  | ||||||
|   description: JavaScript implementation of Markdown |  | ||||||
|   tags: markdown parser |  | ||||||
|   version: 0.1.2 |  | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| { | { | ||||||
| 	"tiddlers": [ | 	"tiddlers": [ | ||||||
| 		{ | 		{ | ||||||
| 			"file": "../../../../node_modules/markdown/lib/markdown.js", | 			"file": "markdown.js", | ||||||
| 			"fields": { | 			"fields": { | ||||||
| 				"type": "application/javascript", | 				"type": "application/javascript", | ||||||
| 				"title": "$:/plugins/tiddlywiki/markdown/markdown.js", | 				"title": "$:/plugins/tiddlywiki/markdown/markdown.js", | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Jermolene
					Jermolene