#!/bin/bash # Script to concatenate all code from source directories for LaTeX inclusion OUTPUT_FILE="paper/build/concatenated_code.tex" PROJECT_ROOT="/home/velocitatem/Documents/Projects/PHANTOM" # Create output directory if it doesn't exist mkdir -p "$(dirname "$OUTPUT_FILE")" # Clear the output file > "$OUTPUT_FILE" # Function to add a file to the concatenated output add_file() { local filepath="$1" local relpath="${filepath#$PROJECT_ROOT/}" # Get file extension local ext="${filepath##*.}" # Map extensions to listings language case "$ext" in py) lang="Python" ;; js|jsx|ts|tsx) lang="JavaScript" ;; sh) lang="bash" ;; yml|yaml) lang="Python" ;; Dockerfile) lang="bash" ;; *) lang="" ;; esac # Add section header and code listing echo "\\subsection{${relpath}}" >> "$OUTPUT_FILE" if [ -n "$lang" ]; then echo "\\begin{lstlisting}[language=${lang},caption={${relpath}}]" >> "$OUTPUT_FILE" else echo "\\begin{lstlisting}[caption={${relpath}}]" >> "$OUTPUT_FILE" fi cat "$filepath" >> "$OUTPUT_FILE" echo "" >> "$OUTPUT_FILE" echo "\\end{lstlisting}" >> "$OUTPUT_FILE" echo "" >> "$OUTPUT_FILE" } # Add header cat >> "$OUTPUT_FILE" << 'EOF' % Auto-generated code concatenation % DO NOT EDIT MANUALLY - Generated by concat_code.sh \section{Source Code} EOF # Process each directory echo "Concatenating code from source directories..." # Backend find "$PROJECT_ROOT/backend" -type f \( -name "*.py" -o -name "*.js" -o -name "*.sh" -o -name "*.yml" -o -name "*.yaml" \) | sort | while read -r file; do add_file "$file" done # Experiments find "$PROJECT_ROOT/experiments" -type f \( -name "*.py" -o -name "*.js" -o -name "*.sh" -o -name "*.yml" -o -name "*.yaml" \) | sort | while read -r file; do add_file "$file" done # Docker find "$PROJECT_ROOT/docker" -type f \( -name "*.py" -o -name "*.sh" -o -name "*.yml" -o -name "*.yaml" -o -name "Dockerfile*" \) | sort | while read -r file; do add_file "$file" done # Web/src find "$PROJECT_ROOT/web/src" -type f \( -name "*.js" -o -name "*.jsx" -o -name "*.ts" -o -name "*.tsx" \) | sort | while read -r file; do add_file "$file" done echo "Code concatenation complete: $OUTPUT_FILE"