Files
md2gost/md2gost.sh
T
Arseny 974d49b056 [FIX] порядок TOC и монтирование картинок в Docker
- md2gost.sh: монтировать директорию входного файла (/input:ro) вместо
  одного файла — картинки по относительным путям (img/) теперь видны
  внутри контейнера; основное исправление падений make run
- render.py: вставлять TOC до следующего блока, а не после — порядок
  стал АННОТАЦИЯ -> СОДЕРЖАНИЕ -> ПЕРЕЧЕНЬ -> ВВЕДЕНИЕ (ранее заголовок
  ПЕРЕЧЕНЬ без тела оказывался перед СОДЕРЖАНИЕМ, а его тело — после)
- heading.py: не устанавливать current_heading для СОДЕРЖАНИЕ, чтобы
  не сбивать спецрежим перечня сокращений
- .gitignore: игнорировать сгенерированные report.tex/pdf и img/
2026-08-25 14:27:37 +03:00

72 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
IMAGE="md2gost"
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
usage() {
echo "Использование: md2gost file.md [-o dir]"
echo " file.md - исходный Markdown-файл"
echo " -o dir - выходная директория (по умолчанию .)"
exit 1
}
# Парсим аргументы
INPUT_FILE=""
OUTPUT_DIR="."
while [[ $# -gt 0 ]]; do
case "$1" in
-o)
OUTPUT_DIR="${2:-}"
[[ -z "$OUTPUT_DIR" ]] && usage
shift 2
;;
-h|--help)
usage
;;
-*)
echo "неизвестный флаг: $1" >&2
usage
;;
*)
INPUT_FILE="$1"
shift
;;
esac
done
[[ -z "$INPUT_FILE" ]] && usage
# Проверяем входной файл
if [[ ! -f "$INPUT_FILE" ]]; then
echo "ошибка: $INPUT_FILE не найден" >&2
exit 1
fi
# Абсолютные пути
INPUT_ABS="$(realpath "$INPUT_FILE")"
OUTPUT_ABS="$(realpath -m "$OUTPUT_DIR")"
mkdir -p "$OUTPUT_ABS"
INPUT_BASE="$(basename "$INPUT_FILE")"
INPUT_DIR="$(dirname "$INPUT_ABS")"
# Собираем образ если нужно
if ! docker image inspect "$IMAGE" &>/dev/null; then
echo "образ $IMAGE не найден, собираю..."
docker build -t "$IMAGE" "$SCRIPT_DIR"
fi
echo "-> конвертация $INPUT_FILE -> $OUTPUT_DIR/"
# Запуск контейнера:
# - вход: директория с .md и картинками (read-only, нужен для img/)
# - выход: директория для .tex и .pdf
# - user: текущий пользователь (не root)
docker run --rm \
-v "$INPUT_DIR:/input:ro" \
-v "$OUTPUT_ABS:/output" \
--user "$(id -u):$(id -g)" \
"$IMAGE" "/input/$INPUT_BASE" -o /output