#!/bin/bash # -*- coding: utf-8 -*- # Test file for: compile_revision.sh THIS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT_DIR="$(realpath "$THIS_DIR/../..")" # Test counter TESTS_RUN=0 TESTS_PASSED=0 TESTS_FAILED=0 # Colors GREEN='\033[0;32m' RED='\033[0;31m' NC='\033[0m' assert_success() { local cmd="$1" local desc="${2:-$cmd}" ((TESTS_RUN++)) if eval "$cmd" > /dev/null 2>&1; then echo -e "${GREEN}✓${NC} $desc" ((TESTS_PASSED++)) else echo -e "${RED}✗${NC} $desc" ((TESTS_FAILED++)) fi } assert_file_exists() { local file="$1" ((TESTS_RUN++)) if [ -f "$file" ]; then echo -e "${GREEN}✓${NC} File exists: $file" ((TESTS_PASSED++)) else echo -e "${RED}✗${NC} File missing: $file" ((TESTS_FAILED++)) fi } # Add your tests here test_placeholder() { echo "TODO: Add tests for compile_revision.sh" } # Run tests main() { echo "Testing: compile_revision.sh" echo "========================================" test_placeholder echo "========================================" echo "Results: $TESTS_PASSED/$TESTS_RUN passed" [ $TESTS_FAILED -gt 0 ] && exit 1 exit 0 } main "$@" # -------------------------------------------------------------------------------- # Start of Source Code from: /home/ywatanabe/proj/scitex-writer/scripts/shell/compile_revision.sh # -------------------------------------------------------------------------------- # #!/bin/bash # # -*- coding: utf-8 -*- # # Timestamp: "2025-09-27 15:10:53 (ywatanabe)" # # File: ./paper/scripts/shell/compile_revision # # # shellcheck disable=SC1091 # Don't follow sourced files # # export ORIG_DIR # ORIG_DIR="$(pwd)" # THIS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # LOG_PATH="$THIS_DIR/.$(basename "$0").log" # # # Resolve project root - critical for working directory independence (Issue #13) # GIT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null)" # if [ -z "$GIT_ROOT" ]; then # GIT_ROOT="$(cd "$THIS_DIR/../.." && pwd)" # fi # export PROJECT_ROOT="$GIT_ROOT" # # # Change to project root to ensure relative paths work # cd "$PROJECT_ROOT" || exit 1 # # GRAY='\033[0;90m' # GREEN='\033[0;32m' # YELLOW='\033[0;33m' # RED='\033[0;31m' # NC='\033[0m' # No Color # # echo_info() { echo -e "${GRAY}INFO: $1${NC}"; } # echo_success() { echo -e "${GREEN}SUCC: $1${NC}"; } # echo_warning() { echo -e "${YELLOW}WARN: $1${NC}"; } # echo_error() { echo -e "${RED}ERRO: $1${NC}"; } # echo_header() { echo_info "=== $1 ==="; } # # --------------------------------------- # # # Timestamp tracking functions # STAGE_START_TIME=0 # COMPILATION_START_TIME=$(date +%s) # # log_stage_start() { # local stage_name="$1" # STAGE_START_TIME=$(date +%s) # local timestamp=$(date '+%H:%M:%S') # echo_info "[$timestamp] Starting: $stage_name" # } # # log_stage_end() { # local stage_name="$1" # local end_time=$(date +%s) # local elapsed=$((end_time - STAGE_START_TIME)) # local total_elapsed=$((end_time - COMPILATION_START_TIME)) # local timestamp=$(date '+%H:%M:%S') # echo_success "[$timestamp] Completed: $stage_name (${elapsed}s elapsed, ${total_elapsed}s total)" # } # # ################################################################################ # # Description: Compiles revision response document # # Processes reviewer comments and author responses with diff highlighting # ################################################################################ # # # Configurations # export SCITEX_WRITER_DOC_TYPE="revision" # source ./config/load_config.sh "$SCITEX_WRITER_DOC_TYPE" # echo # # # Log # touch $LOG_PATH >/dev/null 2>&1 # mkdir -p "$LOG_DIR" && touch "$SCITEX_WRITER_GLOBAL_LOG_FILE" # # # Shell options # set -e # set -o pipefail # # # Default values for arguments # no_figs=false # no_tables=false # do_verbose=false # draft_mode=false # dark_mode=false # # usage() { # echo "Usage: $0 [options]" # echo "Options:" # echo " -nf, --no_figs Exclude figures for quick compilation (default: false)" # echo " -nt, --no_tables Exclude tables for quick compilation (default: false)" # echo " -d, --draft Draft mode: single-pass compilation (saves ~5s) (default: false)" # echo " -dm, --dark_mode Dark mode: black background, white text (default: false)" # echo " -q, --quiet Do not shows detailed logs for latex compilation (default: $do_verbose)" # echo " -h, --help Display this help message" # echo "" # echo "Note: All options accept both hyphens and underscores (e.g., --no-figs or --no_figs)" # echo "Note: Revision documents skip diff generation by default (changes shown inline)" # exit 0 # } # # parse_arguments() { # while [[ "$#" -gt 0 ]]; do # # Normalize option: replace underscores with hyphens for matching # local normalized_opt=$(echo "$1" | tr '_' '-') # # case $normalized_opt in # -h | --help) usage ;; # -nf | --no-figs) no_figs=true ;; # -nt | --no-tables) no_tables=true ;; # -d | --draft) draft_mode=true ;; # -dm | --dark-mode) dark_mode=true ;; # -v | --verbose) do_verbose=true ;; # -q | --quiet) do_verbose=false ;; # *) # echo "Unknown option: $1" # usage # ;; # esac # shift # done # } # # { # parse_arguments "$@" # # # Log command options # options_display="" # $no_figs && options_display="${options_display} --no_figs" # $no_tables && options_display="${options_display} --no_tables" # $draft_mode && options_display="${options_display} --draft" # $dark_mode && options_display="${options_display} --dark_mode" # $do_verbose && options_display="${options_display} --verbose" # echo_info "Running $0${options_display}..." # # # Verbosity # export SCITEX_WRITER_VERBOSE_PDFLATEX=$do_verbose # export SCITEX_WRITER_VERBOSE_BIBTEX=$do_verbose # # # Draft mode (single-pass compilation) # export SCITEX_WRITER_DRAFT_MODE=$draft_mode # # # Dark mode (black background, white text) # export SCITEX_WRITER_DARK_MODE=$dark_mode # # # 1. Check dependencies # log_stage_start "Dependency Check" # ./scripts/shell/modules/check_dependancy_commands.sh # if [ $? -ne 0 ]; then # echo -e "${RED}ERRO: Dependency check failed${NC}" # exit 1 # fi # log_stage_end "Dependency Check" # # # 2. Merge bibliography files if multiple exist # log_stage_start "Bibliography Merge" # ./scripts/shell/modules/merge_bibliographies.sh # log_stage_end "Bibliography Merge" # # # 3. Apply citation style from config # log_stage_start "Citation Style" # ./scripts/shell/modules/apply_citation_style.sh # log_stage_end "Citation Style" # # # 3. Check revision structure # log_stage_start "Revision Structure Check" # echo_info "Checking revision response structure..." # # # Expected structure with simplified naming (allowing optional descriptive suffixes): # # Editor: E_01_comments[_description].tex, E_01_response[_description].tex, ... # # Reviewer1: R1_01_comments[_description].tex, R1_01_response[_description].tex, ... # # Reviewer2: R2_01_comments[_description].tex, R2_01_response[_description].tex, ... # # Examples: # # E_01_comments_about-methodology.tex # # R1_02_response_statistical-analysis.tex # # check_revision_files() { # local dir="$1" # local prefix="$2" # E, R1, or R2 # local name="$3" # editor, reviewer1, reviewer2 for display # # if [ ! -d "$dir" ]; then # echo -e "${YELLOW}WARN: Directory $dir not found${NC}" # return 1 # fi # # echo -e "${BLUE} Checking $name responses...${NC}" # # # Check for comment/response pairs with simplified naming (supporting descriptive suffixes) # local found_files=0 # for comment_file in "$dir"/${prefix}_*_comments*.tex; do # if [ -f "$comment_file" ]; then # # Extract the base ID (e.g., E_01, R1_02) # local base_id=$(echo "$(basename $comment_file)" | sed -E "s/(${prefix}_[0-9]+)_comments.*/\1/") # # # Look for corresponding response file (may have different description) # local response_found=false # for response_file in "$dir"/${base_id}_response*.tex; do # if [ -f "$response_file" ]; then # echo -e "${GREEN} ✓ $(basename $comment_file) & $(basename $response_file)${NC}" # found_files=$((found_files + 1)) # response_found=true # break # fi # done # # if [ "$response_found" = false ]; then # echo -e "${YELLOW} ⚠ Missing response for: $(basename $comment_file)${NC}" # fi # fi # done # # if [ $found_files -eq 0 ]; then # echo -e "${YELLOW} No comment/response pairs found in $dir${NC}" # else # echo -e "${GREEN} Found $found_files comment/response pair(s)${NC}" # fi # # return 0 # } # # # Check each reviewer directory with simplified prefixes # check_revision_files "./03_revision/contents/editor" "E" "Editor" # check_revision_files "./03_revision/contents/reviewer1" "R1" "Reviewer 1" # check_revision_files "./03_revision/contents/reviewer2" "R2" "Reviewer 2" # log_stage_end "Revision Structure Check" # # # Run independent processing in parallel for speed # parallel_start=$(date +%s) # timestamp=$(date '+%H:%M:%S') # echo_info "[$timestamp] Starting: Parallel Processing (Figures, Tables)" # # # Create temp files for parallel job outputs # temp_dir=$(mktemp -d) # fig_log="$temp_dir/figures.log" # tbl_log="$temp_dir/tables.log" # # # Run both in parallel # ( # ./scripts/shell/modules/process_figures.sh "$no_figs" false false false >"$fig_log" 2>&1 # echo $? >"$temp_dir/fig_exit" # ) & # fig_pid=$! # # ( # ./scripts/shell/modules/process_tables.sh "$no_tables" >"$tbl_log" 2>&1 # echo $? >"$temp_dir/tbl_exit" # ) & # tbl_pid=$! # # # Wait for all parallel jobs # wait $fig_pid $tbl_pid # # # Display outputs in order # echo_info " Figure Processing:" # cat "$fig_log" | sed 's/^/ /' # # echo_info " Table Processing:" # cat "$tbl_log" | sed 's/^/ /' # # # Check exit codes # fig_exit=$(cat "$temp_dir/fig_exit") # tbl_exit=$(cat "$temp_dir/tbl_exit") # # rm -rf "$temp_dir" # # # Fail if any job failed # if [ "$fig_exit" -ne 0 ] || [ "$tbl_exit" -ne 0 ]; then # echo_error "Parallel processing failed (fig=$fig_exit, tbl=$tbl_exit)" # exit 1 # fi # # parallel_end=$(date +%s) # parallel_elapsed=$((parallel_end - parallel_start)) # total_elapsed=$((parallel_end - COMPILATION_START_TIME)) # timestamp=$(date '+%H:%M:%S') # echo_success "[$timestamp] Completed: Parallel Processing (${parallel_elapsed}s elapsed, ${total_elapsed}s total)" # # # Compile structure # log_stage_start "TeX Compilation (Structure)" # ./scripts/shell/modules/compilation_structure_tex_to_compiled_tex.sh # log_stage_end "TeX Compilation (Structure)" # # # Compile to PDF # log_stage_start "PDF Generation" # ./scripts/shell/modules/compilation_compiled_tex_to_compiled_pdf.sh # log_stage_end "PDF Generation" # # # Skip diff generation for revision (revision document already shows changes inline) # echo_info "Skipping diff generation (revision document shows changes inline)" # # # Archive # log_stage_start "Archive/Versioning" # ./scripts/shell/modules/process_archive.sh # log_stage_end "Archive/Versioning" # # # Cleanup # log_stage_start "Cleanup" # ./scripts/shell/modules/cleanup.sh # log_stage_end "Cleanup" # # # Final steps # log_stage_start "Directory Tree" # ./scripts/shell/modules/custom_tree.sh # log_stage_end "Directory Tree" # # # Logging # echo # # final_time=$(date +%s) # total_compilation_time=$((final_time - COMPILATION_START_TIME)) # echo_success "====================================================" # echo_success "TOTAL COMPILATION TIME: ${total_compilation_time}s" # echo_success "====================================================" # echo_success "PDF: $SCITEX_WRITER_COMPILED_PDF" # } 2>&1 | tee -a "$LOG_PATH" "$SCITEX_WRITER_GLOBAL_LOG_FILE" # # # EOF # -------------------------------------------------------------------------------- # End of Source Code from: /home/ywatanabe/proj/scitex-writer/scripts/shell/compile_revision.sh # --------------------------------------------------------------------------------