mirror of
https://0xacab.org/anarsec/anarsec.guide.git
synced 2025-07-23 23:01:04 -04:00
python and typst script
This commit is contained in:
parent
da5f497ec1
commit
be05046783
19 changed files with 2223 additions and 0 deletions
93
layout/python/slugify/__main__.py
Normal file
93
layout/python/slugify/__main__.py
Normal file
|
@ -0,0 +1,93 @@
|
|||
from __future__ import print_function, absolute_import
|
||||
import argparse
|
||||
import sys
|
||||
|
||||
from .slugify import slugify, DEFAULT_SEPARATOR
|
||||
|
||||
|
||||
def parse_args(argv):
|
||||
parser = argparse.ArgumentParser(description="Sluggify string")
|
||||
|
||||
input_group = parser.add_argument_group(description="Input")
|
||||
input_group.add_argument("input_string", nargs='*',
|
||||
help='Text to slugify')
|
||||
input_group.add_argument("--stdin", action='store_true',
|
||||
help="Take the text from STDIN")
|
||||
|
||||
parser.add_argument("--no-entities", action='store_false', dest='entities', default=True,
|
||||
help="Do not convert HTML entities to unicode")
|
||||
parser.add_argument("--no-decimal", action='store_false', dest='decimal', default=True,
|
||||
help="Do not convert HTML decimal to unicode")
|
||||
parser.add_argument("--no-hexadecimal", action='store_false', dest='hexadecimal', default=True,
|
||||
help="Do not convert HTML hexadecimal to unicode")
|
||||
parser.add_argument("--max-length", type=int, default=0,
|
||||
help="Output string length, 0 for no limit")
|
||||
parser.add_argument("--word-boundary", action='store_true', default=False,
|
||||
help="Truncate to complete word even if length ends up shorter than --max_length")
|
||||
parser.add_argument("--save-order", action='store_true', default=False,
|
||||
help="When set and --max_length > 0 return whole words in the initial order")
|
||||
parser.add_argument("--separator", type=str, default=DEFAULT_SEPARATOR,
|
||||
help="Separator between words. By default " + DEFAULT_SEPARATOR)
|
||||
parser.add_argument("--stopwords", nargs='+',
|
||||
help="Words to discount")
|
||||
parser.add_argument("--regex-pattern",
|
||||
help="Python regex pattern for allowed characters")
|
||||
parser.add_argument("--no-lowercase", action='store_false', dest='lowercase', default=True,
|
||||
help="Activate case sensitivity")
|
||||
parser.add_argument("--replacements", nargs='+',
|
||||
help="""Additional replacement rules e.g. "|->or", "%%->percent".""")
|
||||
|
||||
args = parser.parse_args(argv[1:])
|
||||
|
||||
if args.input_string and args.stdin:
|
||||
parser.error("Input strings and --stdin cannot work together")
|
||||
|
||||
if args.replacements:
|
||||
def split_check(repl):
|
||||
SEP = '->'
|
||||
if SEP not in repl:
|
||||
parser.error("Replacements must be of the form: ORIGINAL{SEP}REPLACED".format(SEP=SEP))
|
||||
return repl.split(SEP, 1)
|
||||
args.replacements = [split_check(repl) for repl in args.replacements]
|
||||
|
||||
if args.input_string:
|
||||
args.input_string = " ".join(args.input_string)
|
||||
elif args.stdin:
|
||||
args.input_string = sys.stdin.read()
|
||||
|
||||
if not args.input_string:
|
||||
args.input_string = ''
|
||||
|
||||
return args
|
||||
|
||||
|
||||
def slugify_params(args):
|
||||
return dict(
|
||||
text=args.input_string,
|
||||
entities=args.entities,
|
||||
decimal=args.decimal,
|
||||
hexadecimal=args.hexadecimal,
|
||||
max_length=args.max_length,
|
||||
word_boundary=args.word_boundary,
|
||||
save_order=args.save_order,
|
||||
separator=args.separator,
|
||||
stopwords=args.stopwords,
|
||||
lowercase=args.lowercase,
|
||||
replacements=args.replacements
|
||||
)
|
||||
|
||||
|
||||
def main(argv=None): # pragma: no cover
|
||||
""" Run this program """
|
||||
if argv is None:
|
||||
argv = sys.argv
|
||||
args = parse_args(argv)
|
||||
params = slugify_params(args)
|
||||
try:
|
||||
print(slugify(**params))
|
||||
except KeyboardInterrupt:
|
||||
sys.exit(-1)
|
||||
|
||||
|
||||
if __name__ == '__main__': # pragma: no cover
|
||||
main()
|
Loading…
Add table
Add a link
Reference in a new issue