diff --git a/index.js b/index.js index cdb4133..13c86c3 100644 --- a/index.js +++ b/index.js @@ -38,98 +38,7 @@ function setErrored(exitCode) { errored = true; } -//function printUsage() { -// console.error(` -//Usage: -// readable [SOURCE] [options] -// readable [options] -- [SOURCE] -// (where SOURCE is a file, an http(s) URL, or '-' for standard input) -// -//Options: -// -h --help Print help -// -o --output OUTPUT_FILE Output to OUTPUT_FILE -// -p --properties PROPS... Output specific properties of the parsed article -// -V --version Print version -// -u --url Set the document URL when parsing standard input or a local file (this affects relative links) -// -U --is-url Interpret SOURCE as a URL rather than file name -// -q --quiet Don't output extra information to stderr -// -l --low-confidence MODE What to do if Readability.js is uncertain about what the core content actually is -// -// -//The --low-confidence option determines what should be done for documents where Readability can't tell what the core content is: -// no-op When unsure, don't touch the HTML, output as-is. If the --properties option is used, this will make the program crash. -// force Process the document even when unsure (may produce really bad output). -// exit When unsure, exit with an error. -// -//Default value is "no-op". -// -// -//The --properties option accepts a comma-separated list of values (with no spaces in-between). Suitable values are: -// html-title Outputs the article's title, wrapped in an

tag. -// title Outputs the title in the format "Title: $TITLE". -// excerpt Article description, or short excerpt from the content, in the format "Excerpt: $EXCERPT" -// byline Author metadata, in the format "Author: $AUTHOR" -// length Length of the article in characters, in the format "Length: $LENGTH" -// dir Content direction, is either "Direction: ltr" or "Direction: rtl" -// html-content Outputs the article's main content as HTML. -// text-content Outputs the article's main content as plain text. -// -//Text-content and Html-content are mutually exclusive, and are always printed last. -//Default value is "html-title,html-content".`); -//} - - - -//const stringArgParams = ['_', "--", "low-confidence", "output", "properties", "url"]; -//const boolArgParams = ["quiet", "help", "version", "is-url"]; -//const alias = { -// "output": 'o', -// "properties": 'p', -// "version": 'V', -// "url": 'u', -// "is-url": 'U', -// "quiet": 'q', -// "low-confidence": 'l', -// "help": 'h' -//} -// -//let args = parseArgs(process.argv.slice(2), { -// string: stringArgParams, -// boolean: boolArgParams, -// default: { -// "low-confidence": "no-op", -// "quiet": false -// }, -// alias: alias, -// "--": true -//}); - - -////backwards compatibility -// -//let shouldSplitNext = false; -//for (var i = 1; i < process.argv.length; i++) { -// const arg = process.argv[i]; -// console.log(arg); -// //Turn comma-separated list into space-separated list -// let shouldSplit = false; -// -// if (shouldSplitNext) { -// shouldSplitNext = false; -// shouldSplit = true; -// } else if (arg.startsWith("--properties") || /-\w*p/.test(arg)) { -// shouldSplitNext = true; -// } else if (arg.startsWith("--properties=") || /-\w*p=/.test(arg)) { -// shouldSplit = true; -// } -// -// if (shouldSplit) { -// const split = arg.split(','); -// process.argv.splice(i, 1, ...split); -// } -//} -//console.log("done"); -//console.log(process.argv); + // @@ -203,7 +112,9 @@ let args = yargs }) .middleware([ yargsCompatProperties, yargsFixPositional ], true) //middleware seems to be buggy .option('c', { - alias: "completion" + alias: "completion", + type: "boolean", + desc: "Print script for bash/zsh completion" }) .option('V', { alias: "version", @@ -238,6 +149,36 @@ let args = yargs desc: "Don't output extra information to stderr", default: false }) + .option('u', { + alias: "url", + type: "string", + desc: "Set the document URL when parsing standard input or a local file (this affects relative links)" + }) + .option('U', { + alias: "is-url", + type: "boolean", + desc: "Interpret SOURCE as a URL rather than file name" + }) + .epilogue(`The --low-confidence option determines what should be done for documents where Readability can't tell what the core content is: + no-op When unsure, don't touch the HTML, output as-is. If the --properties option is used, this will make the program crash. + force Process the document even when unsure (may produce really bad output). + exit When unsure, exit with an error. + +Default value is "no-op". + + +The --properties option accepts a comma-separated list of values (with no spaces in-between). Suitable values are: + html-title Outputs the article's title, wrapped in an

tag. + title Outputs the title in the format "Title: $TITLE". + excerpt Article description, or short excerpt from the content, in the format "Excerpt: $EXCERPT" + byline Author metadata, in the format "Author: $AUTHOR" + length Length of the article in characters, in the format "Length: $LENGTH" + dir Content direction, is either "Direction: ltr" or "Direction: rtl" + html-content Outputs the article's main content as HTML. + text-content Outputs the article's main content as plain text. + +Text-content and Html-content are mutually exclusive, and are always printed last. +Default value is "html-title,html-content".`) .wrap(Math.min(yargs.terminalWidth(), 100)) .strict() //.wrap(yargs.terminalWidth()) @@ -253,33 +194,8 @@ if (args["completion"]) { process.exit(); } -////Minimist's parseArgs accepts a function for handling unknown parameters, -////but it works in a stupid way, so I'm writing my own. -// -//for (var key of Object.keys(args)) { -// if (!stringArgParams.includes(key) && !boolArgParams.includes(key) && -// !Object.values(alias).includes(key)) { -// console.error(`Unknown argument: ${key}`); -// setErrored(ExitCodes.badUsageCLI); -// -// } else if (stringArgParams.includes(key) && args[key] === "") { -// console.error(`Error: no value given for --${key}`); -// setErrored(ExitCodes.badUsageCLI); -// } -// -//} -//if (errored) { -// printUsage(); -// return; -//} - - - -if (args["help"]) { - printUsage(); - return; -} else if (args.version) { +if (args.version) { console.log(`readability-cli v${require("./package.json").version}`); console.log(`Node.js ${process.version}`); return; @@ -288,13 +204,6 @@ if (args["help"]) { let inputArg; -//const inputCount = args['_'].length + args['--'].length; -//if (inputCount > 1) { -// console.error("Too many input arguments"); -// printUsage(); -// setErrored(ExitCodes.badUsageCLI); -// return; -//} else if (inputCount == 0) { if (!args["source"]) { if (process.stdin.isTTY) { console.error("No input provided"); @@ -305,7 +214,6 @@ if (!args["source"]) { inputArg = '-' } } else { -// inputArg = (args['_'].length > 0) ? args['_'][0] : args['--'][0]; inputArg = args["source"]; } @@ -321,9 +229,6 @@ else if (inputArg == '-') else inputFile = inputArg; -delete args['_']; -delete args['--']; - const outputArg = args['output']; const documentURL = args["url"] || inputURL;