-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmd2pdf.sh
144 lines (136 loc) · 4.03 KB
/
md2pdf.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#!/bin/bash
VERSION=0.5.3
TAGNAME=
# Generated by getoptions (BEGIN)
# URL: https://github.com/ko1nksm/getoptions (v3.3.2)
PAPER=''
TITLE=''
NOPAGE=''
RATIO=''
LANG=''
NOINDENT=''
COLOR=''
ANCHORS=''
REST=''
parse() {
OPTIND=$(($#+1))
while OPTARG= && [ "${REST}" != x ] && [ $# -gt 0 ]; do
case $1 in
--?*=*) OPTARG=$1; shift
eval 'set -- "${OPTARG%%\=*}" "${OPTARG#*\=}"' ${1+'"$@"'}
;;
--no-*|--without-*) unset OPTARG ;;
-[ptrlc]?*) OPTARG=$1; shift
eval 'set -- "${OPTARG%"${OPTARG#??}"}" "${OPTARG#??}"' ${1+'"$@"'}
;;
-[niavh]?*) OPTARG=$1; shift
eval 'set -- "${OPTARG%"${OPTARG#??}"}" -"${OPTARG#??}"' ${1+'"$@"'}
case $2 in --*) set -- "$1" unknown "$2" && REST=x; esac;OPTARG= ;;
esac
case $1 in
'-p'|'--paper')
[ $# -le 1 ] && set "required" "$1" && break
OPTARG=$2
PAPER="$OPTARG"
shift ;;
'-t'|'--title')
[ $# -le 1 ] && set "required" "$1" && break
OPTARG=$2
TITLE="$OPTARG"
shift ;;
'-n'|'--nopage')
[ "${OPTARG:-}" ] && OPTARG=${OPTARG#*\=} && set "noarg" "$1" && break
eval '[ ${OPTARG+x} ] &&:' && OPTARG='1' || OPTARG=''
NOPAGE="$OPTARG"
;;
'-r'|'--ratio')
[ $# -le 1 ] && set "required" "$1" && break
OPTARG=$2
RATIO="$OPTARG"
shift ;;
'-l'|'--lang')
[ $# -le 1 ] && set "required" "$1" && break
OPTARG=$2
LANG="$OPTARG"
shift ;;
'-i'|'--noindent')
[ "${OPTARG:-}" ] && OPTARG=${OPTARG#*\=} && set "noarg" "$1" && break
eval '[ ${OPTARG+x} ] &&:' && OPTARG='1' || OPTARG=''
NOINDENT="$OPTARG"
;;
'-c'|'--color')
[ $# -le 1 ] && set "required" "$1" && break
OPTARG=$2
COLOR="$OPTARG"
shift ;;
'-a'|'--anchors')
[ "${OPTARG:-}" ] && OPTARG=${OPTARG#*\=} && set "noarg" "$1" && break
eval '[ ${OPTARG+x} ] &&:' && OPTARG='1' || OPTARG=''
ANCHORS="$OPTARG"
;;
'-v'|'--version')
echo "${VERSION}"
exit 0 ;;
'-h'|'--help')
usage
exit 0 ;;
--)
shift
while [ $# -gt 0 ]; do
REST="${REST} \"\${$(($OPTIND-$#))}\""
shift
done
break ;;
[-]?*) set "unknown" "$1"; break ;;
*)
REST="${REST} \"\${$(($OPTIND-$#))}\""
esac
shift
done
[ $# -eq 0 ] && { OPTIND=1; unset OPTARG; return 0; }
case $1 in
unknown) set "Unrecognized option: $2" "$@" ;;
noarg) set "Does not allow an argument: $2" "$@" ;;
required) set "Requires an argument: $2" "$@" ;;
pattern:*) set "Does not match the pattern (${1#*:}): $2" "$@" ;;
notcmd) set "Not a command: $2" "$@" ;;
*) set "Validation error ($1): $2" "$@"
esac
echo "$1" >&2
exit 1
}
usage() {
cat<<'GETOPTIONSHERE'
Usage: md2pdf [options] [infile]
Options:
-p, --paper PAPER paper spec
-t, --title TITLE title
-n, --nopage disable page numbers
-r, --ratio RATIO image ratio in percent
-l, --lang LANG language spec
-i, --noindent disable text indentation in paragraphs
-c, --color COLOR color spec
-a, --anchors show anchor ids and texts of headings
-v, --version show version
-h, --help display help for command
GETOPTIONSHERE
}
# Generated by getoptions (END)
parse "$@"
eval "set -- $REST"
if [ $# -gt 1 ]; then
echo >&2 'Error: too many input files'
exit 1
elif [ $# -eq 1 -a "$1" = '-' -o $# -eq 0 ]; then
DIRNAME=$PWD
INFILE=-
else
DIRNAME=$(cd `dirname "$1"` 2>/dev/null; echo $PWD)
INFILE=$(basename "$1")
fi
OPTS=(${PAPER:+-p "$PAPER"} ${TITLE:+-t "$TITLE"} ${NOPAGE:+-n})
OPTS+=(${RATIO:+-r "$RATIO"} ${LANG:+-l "$LANG"} ${NOINDENT:+-i})
OPTS+=(${COLOR:+-c "$COLOR"} ${ANCHORS:+-a} -b /opt/app/mnt)
MOUNT=(-v "$DIRNAME:/opt/app/mnt")
IMAGE="md2pdf${TAGNAME:+:$TAGNAME}"
docker run --rm -i "${MOUNT[@]}" "$IMAGE" node md2pdf.js "${OPTS[@]}" "$INFILE"