SAT-WiSe-25-26/scripts/list_chapters.sh

212 lines
6.5 KiB
Bash
Executable File

#!/bin/bash
# ==============================================================================
# List Chapters Script
# ==============================================================================
# Description: Lists all chapter files in the project and shows their inclusion
# status in the content loader
# Usage: ./scripts/list_chapters.sh
# Author: HSRTReport Template
# ==============================================================================
set -e # Exit on error
# ------------------------------------------------------------------------------
# Configuration
# ------------------------------------------------------------------------------
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
CHAPTERS_DIR="$PROJECT_ROOT/Content/Chapters"
CONTENT_FILE="$PROJECT_ROOT/Content/01_content.tex"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# ------------------------------------------------------------------------------
# Functions
# ------------------------------------------------------------------------------
print_header() {
echo -e "${BLUE}==============================================================================
Chapter Management - File List
==============================================================================${NC}"
}
print_success() {
echo -e "${GREEN}${NC} $1"
}
print_warning() {
echo -e "${YELLOW}${NC} $1"
}
print_error() {
echo -e "${RED}${NC} $1"
}
get_chapter_title() {
local file="$1"
# Extract chapter title from \chapter{...} command
if [ -f "$file" ]; then
grep -m 1 "\\\\chapter{" "$file" 2>/dev/null | sed 's/.*\\chapter{\([^}]*\)}.*/\1/' || echo "Untitled"
else
echo "File not found"
fi
}
is_included() {
local chapter_name="$1"
# Check if chapter is included in content file
if grep -q "\\\\input{Content/Chapters/$chapter_name}" "$CONTENT_FILE" 2>/dev/null; then
return 0
else
return 1
fi
}
# ------------------------------------------------------------------------------
# Main Script
# ------------------------------------------------------------------------------
print_header
echo ""
# Check if chapters directory exists
if [ ! -d "$CHAPTERS_DIR" ]; then
print_error "Chapters directory not found: $CHAPTERS_DIR"
exit 1
fi
# Get all .tex files in chapters directory
CHAPTER_FILES=()
while IFS= read -r -d '' file; do
CHAPTER_FILES+=("$file")
done < <(find "$CHAPTERS_DIR" -maxdepth 1 -name "*.tex" -type f -print0 | sort -z)
if [ ${#CHAPTER_FILES[@]} -eq 0 ]; then
echo "No chapter files found in $CHAPTERS_DIR"
echo ""
echo "To create a new chapter, use:"
echo " ./scripts/create_chapter.sh <number> <name>"
echo ""
echo "Example:"
echo " ./scripts/create_chapter.sh 01 introduction"
exit 0
fi
# ------------------------------------------------------------------------------
# Display Chapter List
# ------------------------------------------------------------------------------
echo -e "${CYAN}Found ${#CHAPTER_FILES[@]} chapter file(s):${NC}"
echo ""
# Table header
printf "%-6s %-30s %-40s %-10s\n" "No." "File Name" "Chapter Title" "Status"
printf "%-6s %-30s %-40s %-10s\n" "---" "$(printf '%30s' | tr ' ' '-')" "$(printf '%40s' | tr ' ' '-')" "----------"
# List each chapter
for i in "${!CHAPTER_FILES[@]}"; do
FILE="${CHAPTER_FILES[$i]}"
BASENAME=$(basename "$FILE")
FILENAME="${BASENAME%.*}"
TITLE=$(get_chapter_title "$FILE")
# Truncate long titles
if [ ${#TITLE} -gt 38 ]; then
TITLE="${TITLE:0:35}..."
fi
# Check if included
if is_included "$FILENAME"; then
STATUS="${GREEN}Included${NC}"
else
STATUS="${YELLOW}Not included${NC}"
fi
printf "%-6s %-30s %-40s " "$((i+1))." "$BASENAME" "$TITLE"
echo -e "$STATUS"
done
echo ""
# ------------------------------------------------------------------------------
# Statistics
# ------------------------------------------------------------------------------
echo -e "${BLUE}------------------------------------------------------------------------------${NC}"
echo "Statistics:"
# Count included chapters
INCLUDED_COUNT=0
NOT_INCLUDED_COUNT=0
for FILE in "${CHAPTER_FILES[@]}"; do
BASENAME=$(basename "$FILE")
FILENAME="${BASENAME%.*}"
if is_included "$FILENAME"; then
((INCLUDED_COUNT++)) || true
else
((NOT_INCLUDED_COUNT++)) || true
fi
done
echo " Total chapters: ${#CHAPTER_FILES[@]}"
echo -e " Included in document: ${GREEN}$INCLUDED_COUNT${NC}"
echo -e " Not included: ${YELLOW}$NOT_INCLUDED_COUNT${NC}"
# ------------------------------------------------------------------------------
# Chapter Order in Document
# ------------------------------------------------------------------------------
echo ""
echo -e "${BLUE}------------------------------------------------------------------------------${NC}"
echo "Chapter order in document (01_content.tex):"
echo ""
# Extract included chapters from content file
if [ -f "$CONTENT_FILE" ]; then
INCLUDED_CHAPTERS=()
while IFS= read -r line; do
if [[ "$line" =~ \\input\{Content/Chapters/([^}]+)\} ]]; then
INCLUDED_CHAPTERS+=("${BASH_REMATCH[1]}.tex")
fi
done < <(sed -n '/% --- CHAPTER LIST START ---/,/% --- CHAPTER LIST END ---/p' "$CONTENT_FILE")
if [ ${#INCLUDED_CHAPTERS[@]} -gt 0 ]; then
for i in "${!INCLUDED_CHAPTERS[@]}"; do
CHAPTER="${INCLUDED_CHAPTERS[$i]}"
TITLE=$(get_chapter_title "$CHAPTERS_DIR/$CHAPTER")
printf " %2d. %-30s %s\n" "$((i+1))" "$CHAPTER" "($TITLE)"
done
else
echo " (No chapters currently included)"
fi
else
print_error "Content file not found: $CONTENT_FILE"
fi
# ------------------------------------------------------------------------------
# Help Information
# ------------------------------------------------------------------------------
echo ""
echo -e "${BLUE}------------------------------------------------------------------------------${NC}"
echo "Available commands:"
echo ""
echo " Create chapter: ./scripts/create_chapter.sh <number> <name>"
echo " List chapters: ./scripts/list_chapters.sh"
echo " Delete chapter: ./scripts/delete_chapter.sh <filename>"
echo " Show chapter: ./scripts/show_chapter.sh <filename>"
echo ""
echo "To manually include/exclude chapters, edit: Content/01_content.tex"
echo ""
# Exit successfully
exit 0