2
0

main.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. import os
  2. import sys
  3. from .file_handler import collect_files, get_file_info, read_file_content, setup_console_encoding
  4. from .excel_handler import create_workbook, get_status_fills, write_file_info, write_file_sizes, write_markdown_consistency, write_formula_text, adjust_column_widths, save_workbook, print_statistics
  5. from .markdown_handler import compare_markdown_syntax_trees
  6. def main(source_dir_path=None, target_dir_path=None, output_file_path=None):
  7. """
  8. Main function for document consistency checking
  9. Parameters:
  10. source_dir_path: Source document directory path (required)
  11. target_dir_path: Target document directory path (required)
  12. output_file_path: Output Excel file path (optional, defaults to docs_structure_comparison.xlsx)
  13. """
  14. # Check if required parameters are provided
  15. if source_dir_path is None or target_dir_path is None:
  16. print("Error: Both source_dir_path and target_dir_path parameters are required.")
  17. print("Usage: main(source_dir_path='path/to/source', target_dir_path='path/to/target')")
  18. return
  19. # Check if directories exist
  20. if not os.path.exists(source_dir_path):
  21. print(f"Error: Source directory does not exist: {source_dir_path}")
  22. return
  23. if not os.path.exists(target_dir_path):
  24. print(f"Error: Target directory does not exist: {target_dir_path}")
  25. return
  26. # Set default output file path if not provided
  27. if output_file_path is None:
  28. output_file_path = "docs_structure_comparison.xlsx"
  29. # Set console encoding to resolve character display issues
  30. setup_console_encoding()
  31. # Create Excel workbook
  32. wb, ws = create_workbook()
  33. # Get status fill colors
  34. status_fills = get_status_fills()
  35. # Row counter
  36. row_num = 2
  37. # Collect all file paths
  38. source_files = collect_files(source_dir_path)
  39. target_files = collect_files(target_dir_path)
  40. # Get all unique file paths
  41. all_files = source_files.union(target_files)
  42. # Compare file structure
  43. print("Comparing file structure...")
  44. for file_path in sorted(all_files):
  45. source_exists = file_path in source_files
  46. target_exists = file_path in target_files
  47. # Get file information
  48. source_file_info = get_file_info(file_path, source_dir_path) if source_exists else {}
  49. target_file_info = get_file_info(file_path, target_dir_path) if target_exists else {}
  50. # If file doesn't exist, use default information
  51. if not source_exists:
  52. source_file_info = get_file_info(file_path, "")
  53. if not target_exists:
  54. target_file_info = get_file_info(file_path, "")
  55. # Write file basic information
  56. status = write_file_info(ws, row_num, file_path, source_file_info, source_exists, target_exists, status_fills)
  57. # Write file sizes
  58. write_file_sizes(ws, row_num, source_file_info, target_file_info)
  59. # Check Markdown syntax consistency
  60. markdown_consistency = ""
  61. if source_exists and target_exists and source_file_info.get('extension') == ".md":
  62. try:
  63. source_full_path = os.path.join(source_dir_path, file_path)
  64. target_full_path = os.path.join(target_dir_path, file_path)
  65. source_content = read_file_content(source_full_path)
  66. target_content = read_file_content(target_full_path)
  67. if source_content is not None and target_content is not None:
  68. # Build Markdown syntax tree and compare
  69. markdown_consistency = compare_markdown_syntax_trees(source_content, target_content, file_path)
  70. else:
  71. markdown_consistency = "File read failed"
  72. except Exception as e:
  73. markdown_consistency = f"Check error: {str(e)}"
  74. elif source_exists and target_exists and source_file_info.get('extension') != ".md":
  75. markdown_consistency = "Non-Markdown file"
  76. # Write Markdown consistency check results
  77. write_markdown_consistency(ws, row_num, markdown_consistency)
  78. # Write formula column
  79. write_formula_text(ws, row_num, file_path,
  80. source_dir=os.path.basename(source_dir_path),
  81. target_dir=os.path.basename(target_dir_path))
  82. row_num += 1
  83. print(f"Processed: {file_path} - {status}")
  84. # Force flush output buffer to ensure characters are displayed immediately
  85. sys.stdout.flush()
  86. # Adjust column widths
  87. adjust_column_widths(ws)
  88. # Save Excel file
  89. save_success = save_workbook(wb, output_file_path)
  90. if save_success:
  91. # Print statistics results
  92. print_statistics(ws, row_num)
  93. # Force flush output buffer to ensure characters are displayed immediately
  94. sys.stdout.flush()
  95. if __name__ == "__main__":
  96. # When run directly, provide usage information
  97. print("This module is designed to be imported and used by docs_consistency_checker.py")
  98. print("Usage: from main import main")
  99. print(" main(source_dir_path='path/to/source', target_dir_path='path/to/target')")