42 lines
1.0 KiB
Bash
42 lines
1.0 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
usage() {
|
|
echo "Usage: $(basename "$0") <file.tex> [file2.tex ...]" >&2
|
|
exit 1
|
|
}
|
|
|
|
[[ $# -ge 1 ]] || usage
|
|
|
|
for FILE in "$@"; do
|
|
[[ -e "$FILE" ]] || { echo "Error: file not found: $FILE" >&2; continue; }
|
|
[[ -f "$FILE" ]] || { echo "Error: not a regular file: $FILE" >&2; continue; }
|
|
[[ -r "$FILE" ]] || { echo "Error: file not readable: $FILE" >&2; continue; }
|
|
[[ -w "$FILE" ]] || { echo "Error: file not writable: $FILE" >&2; continue; }
|
|
|
|
cp "$FILE" "$FILE.bak"
|
|
|
|
python3 - "$FILE" <<'EOF'
|
|
import re, sys
|
|
path = sys.argv[1]
|
|
with open(path, encoding='utf-8') as f:
|
|
text = f.read()
|
|
|
|
def to_latex(m):
|
|
return "``" + m.group(1) + "''"
|
|
|
|
result = text.replace('\u2018', '`')
|
|
result = result.replace('\u2019', "'")
|
|
result = re.sub('\u201c([^\u201d]*)\u201d', to_latex, result, flags=re.DOTALL)
|
|
result = re.sub(r'"((?:(?!\n\n).)*?)"', to_latex, result, flags=re.DOTALL)
|
|
|
|
|
|
with open(path, 'w', encoding='utf-8') as f:
|
|
f.write(result)
|
|
EOF
|
|
|
|
echo "Done: $FILE (backup: $FILE.bak)"
|
|
done
|
|
|
|
|